mirror of
https://github.com/Ar9av/obsidian-wiki.git
synced 2026-09-14 20:36:34 +08:00
9cf167480d
Loading an unpacked extension needs a directory on disk, so pip users had no way to reach the feature at all. The extension now ships under _data/extension/ and `obsidian-wiki info` prints the path to point Chrome at. install.sh now handles both origins: a checkout stages a copy of the package (so the host survives the checkout later moving into a TCC-protected folder), while a wheel install uses the already-importable package and stages nothing. The private signing key moved out of the repo to ~/.obsidian-wiki/. This is load-bearing, not tidiness: hatchling's force-include copies straight from the working tree and honours neither .gitignore nor the target's exclude list, so every file in a force-included directory ships. Verified empirically — the key appeared in both wheel and sdist until it was moved out, and exclude patterns did not stop it. pyproject now says so at the include site.
117 lines
4.8 KiB
TOML
117 lines
4.8 KiB
TOML
[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"]
|
|
|
|
[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"
|
|
|
|
# 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"
|
|
".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"
|