Repository navigation
Expand file tree
/
Copy pathpyproject.toml
More file actions
131 lines (120 loc) · 5.56 KB
/
Copy pathpyproject.toml
File metadata and controls
131 lines (120 loc) · 5.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
[build-system]
requires = ["hatchling", "hatch-vcs"]
build-backend = "hatchling.build"
[project]
name = "obsidian-wiki"
dynamic = ["version"]
description = "A skill-based framework for building and maintaining an AI-maintained Obsidian knowledge base (Karpathy's LLM Wiki pattern) across any AI coding agent."
readme = "README.md"
requires-python = ">=3.9"
license = "MIT"
license-files = ["LICENSE"]
authors = [{ name = "Ar9av" }]
keywords = [
"obsidian",
"wiki",
"knowledge-base",
"llm",
"claude",
"agent-skills",
"second-brain",
]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Console",
"Intended Audience :: Developers",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Topic :: Documentation",
"Topic :: Text Processing :: Markup :: Markdown",
"Topic :: Utilities",
]
# Pure-stdlib CLI — installing skills needs no third-party runtime dependencies.
dependencies = []
[project.optional-dependencies]
# Higher-fidelity AST extraction (tree-sitter parses real ASTs; regex is the default fallback).
ast = ["tree-sitter>=0.21", "tree-sitter-languages>=1.10"]
# Higher-fidelity community detection (Leiden algorithm; greedy label propagation is the default fallback).
graph = ["leidenalg>=0.10", "igraph>=0.11"]
# HTTP + MCP memory server (obsidian_wiki/server.py). The core wheel stays dependency-free.
# mcp needs Python >=3.10; the marker keeps uv's cross-version resolver solvable.
server = [
"fastapi>=0.115",
"uvicorn[standard]>=0.30",
"mcp>=2.0; python_version >= '3.10'",
]
[project.urls]
Homepage = "https://github.com/Ar9av/obsidian-wiki"
Repository = "https://github.com/Ar9av/obsidian-wiki"
Issues = "https://github.com/Ar9av/obsidian-wiki/issues"
[project.scripts]
obsidian-wiki = "obsidian_wiki.cli:main"
# Test-only; `uv sync` installs it, so `uv run pytest tests/ -q` needs no extra flags.
[dependency-groups]
dev = ["pytest"]
# Version is derived from the git tag (CalVer, e.g. v2026.05.2 -> 2026.5.2),
# matching the repo's release tags. Tagging a release is the version bump.
[tool.hatch.version]
source = "vcs"
# ── Build configuration ──────────────────────────────────────────────────────
# The Python package is just the thin CLI in obsidian_wiki/. The actual product
# is the markdown skill content under .skills/ plus the agent bootstrap files.
# We force-include those into the wheel under obsidian_wiki/_data/ so the
# installed package is self-contained and the CLI can install skills without a
# cloned repo. Source paths stay at the repo root (single source of truth).
[tool.hatch.build.targets.wheel]
packages = ["obsidian_wiki"]
# force-include copies straight from the working tree, not a VCS-filtered
# view — without this, a local `scripts/__pycache__` picked up stray .pyc
# files into the published wheel.
exclude = [
"**/__pycache__",
"**/*.py[co]",
]
[tool.hatch.build.targets.wheel.force-include]
".skills" = "obsidian_wiki/_data/skills"
"scripts" = "obsidian_wiki/_data/scripts"
".claude/hooks/wiki-stop-capture.sh" = "obsidian_wiki/_data/hooks/wiki-stop-capture.sh"
".claude/hooks/wiki-session-recap.sh" = "obsidian_wiki/_data/hooks/wiki-session-recap.sh"
".claude/hooks/wiki-prompt-recall.sh" = "obsidian_wiki/_data/hooks/wiki-prompt-recall.sh"
".env.example" = "obsidian_wiki/_data/.env.example"
"AGENTS.md" = "obsidian_wiki/_data/bootstrap/AGENTS.md"
".cursor/rules/obsidian-wiki.mdc" = "obsidian_wiki/_data/bootstrap/cursor/rules/obsidian-wiki.mdc"
".windsurf/rules/obsidian-wiki.md" = "obsidian_wiki/_data/bootstrap/windsurf/rules/obsidian-wiki.md"
".kiro/steering/obsidian-wiki.md" = "obsidian_wiki/_data/bootstrap/kiro/steering/obsidian-wiki.md"
".agent/rules/obsidian-wiki.md" = "obsidian_wiki/_data/bootstrap/agent/rules/obsidian-wiki.md"
".agent/workflows/obsidian-wiki.md" = "obsidian_wiki/_data/bootstrap/agent/workflows/obsidian-wiki.md"
".github/copilot-instructions.md" = "obsidian_wiki/_data/bootstrap/github/copilot-instructions.md"
# The Chrome extension is loaded unpacked from a directory, so shipping it in
# the wheel gives pip users a path to point Chrome at. `obsidian-wiki info`
# prints it.
#
# NOTE: force-include ignores both .gitignore and the exclude lists above —
# every file in this directory ships. Keep nothing local-only or secret in it;
# the extension's private signing key lives at ~/.obsidian-wiki/, not here.
"extensions/brain" = "obsidian_wiki/_data/extension"
[tool.hatch.build.targets.sdist]
# Prune build noise and the committed agent symlink mirrors (the CLI
# regenerates those; left in, hatchling's VCS walker treats them as the
# canonical path for each skill and drops the real .skills/<name> files).
exclude = [
"/.claude",
"/.cursor/skills",
"/.windsurf/skills",
"/.agents/skills",
"/.pi/skills",
"/.kiro/skills",
"/dist",
"/build",
]
# Force the real .skills/ tree into the sdist regardless of the VCS walker, so
# the wheel (built from the sdist) can in turn force-include it under _data/.
# The Stop hook lives under /.claude (excluded above), so re-add just the one
# script the wiki-setup skill wires up — otherwise the wheel force-include has
# nothing to copy and the published package ships a dangling hook reference.
[tool.hatch.build.targets.sdist.force-include]
".skills" = ".skills"
"extensions/brain" = "extensions/brain"
".claude/hooks/wiki-stop-capture.sh" = ".claude/hooks/wiki-stop-capture.sh"
".claude/hooks/wiki-session-recap.sh" = ".claude/hooks/wiki-session-recap.sh"
".claude/hooks/wiki-prompt-recall.sh" = ".claude/hooks/wiki-prompt-recall.sh"