docsgraph 0.1.0a2__tar.gz → 0.1.0a4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. docsgraph-0.1.0a4/.editorconfig +15 -0
  2. docsgraph-0.1.0a4/.github/FUNDING.yml +2 -0
  3. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/.github/ISSUE_TEMPLATE/bug_report.yml +3 -3
  4. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/.github/ISSUE_TEMPLATE/config.yml +3 -0
  5. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/.github/PULL_REQUEST_TEMPLATE.md +3 -3
  6. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/.github/workflows/ci.yml +6 -6
  7. docsgraph-0.1.0a4/.github/workflows/pages.yml +43 -0
  8. docsgraph-0.1.0a4/.github/workflows/prepare-release.yml +52 -0
  9. docsgraph-0.1.0a4/.github/workflows/release.yml +130 -0
  10. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/.github/workflows/repo-regression.yml +2 -2
  11. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/ARCHITECTURE.md +9 -9
  12. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/CHANGELOG.md +47 -10
  13. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/CONTRIBUTING.md +2 -2
  14. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/PKG-INFO +37 -10
  15. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/README.md +35 -8
  16. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/ROADMAP.md +2 -1
  17. docsgraph-0.1.0a4/SUPPORT.md +50 -0
  18. docsgraph-0.1.0a4/docs/.nojekyll +1 -0
  19. docsgraph-0.1.0a4/docs/assets/docsgraph-hero.png +0 -0
  20. docsgraph-0.1.0a2/docs/assets/cairn-demo.svg → docsgraph-0.1.0a4/docs/assets/docsgraph-repo-demo.svg +7 -7
  21. docsgraph-0.1.0a4/docs/assets/wechat-reward.jpg +0 -0
  22. docsgraph-0.1.0a4/docs/index.html +778 -0
  23. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/docs/release-checklist.md +66 -13
  24. docsgraph-0.1.0a2/docs/repo-lifecycle-canvas.html → docsgraph-0.1.0a4/docs/repo-docs-workflow-canvas.html +13 -13
  25. docsgraph-0.1.0a2/docs/canvas.html → docsgraph-0.1.0a4/docs/retrieval-architecture-canvas.html +3 -3
  26. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/docs/specs/mcp-tools.md +15 -11
  27. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/examples/hero-demo.md +11 -11
  28. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/pyproject.toml +7 -2
  29. docsgraph-0.1.0a4/scripts/prepare_release.py +199 -0
  30. docsgraph-0.1.0a4/scripts/verify_pypi_install.py +185 -0
  31. docsgraph-0.1.0a4/skills/cairn-friendly-docs/SKILL.md +188 -0
  32. docsgraph-0.1.0a4/skills/cairn-friendly-docs/agents/openai.yaml +7 -0
  33. docsgraph-0.1.0a4/skills/cairn-friendly-docs/manifest.json +14 -0
  34. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/__init__.py +1 -1
  35. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/cli/app.py +215 -4
  36. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/mcp/schemas.py +23 -6
  37. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/mcp/server.py +172 -5
  38. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/repo_search.py +1 -1
  39. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_cli.py +121 -6
  40. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_mcp_server.py +106 -1
  41. docsgraph-0.1.0a2/.github/workflows/release.yml +0 -77
  42. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/.cairn/config.toml +0 -0
  43. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/.env.example +0 -0
  44. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  45. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/.github/dependabot.yml +0 -0
  46. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/.gitignore +0 -0
  47. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/CLAUDE.md +0 -0
  48. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/CODE_OF_CONDUCT.md +0 -0
  49. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/LICENSE +0 -0
  50. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/PRODUCT.md +0 -0
  51. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/SECURITY.md +0 -0
  52. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/benchmarks/README.md +0 -0
  53. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/benchmarks/architecture.toml +0 -0
  54. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/docs/decisions/0000-template.md +0 -0
  55. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/docs/decisions/0001-foundation.md +0 -0
  56. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/docs/golden-docs-standard.md +0 -0
  57. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/docs/inspector-principle.html +0 -0
  58. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/examples/real-llm-doubao.md +0 -0
  59. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/scripts/eval_repos.py +0 -0
  60. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/scripts/smoke_many_repos.py +0 -0
  61. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/bench/__init__.py +0 -0
  62. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/bench/baseline.py +0 -0
  63. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/bench/dataset.py +0 -0
  64. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/bench/judge.py +0 -0
  65. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/bench/metrics.py +0 -0
  66. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/bench/report.py +0 -0
  67. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/bench/runner.py +0 -0
  68. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/cli/__init__.py +0 -0
  69. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/cli/config.py +0 -0
  70. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/core/__init__.py +0 -0
  71. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/core/errors.py +0 -0
  72. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/core/types.py +0 -0
  73. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/embed/__init__.py +0 -0
  74. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/embed/base.py +0 -0
  75. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/embed/doubao.py +0 -0
  76. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/embed/fake.py +0 -0
  77. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/embed/openai_compatible.py +0 -0
  78. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/engine/__init__.py +0 -0
  79. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/engine/indexer.py +0 -0
  80. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/engine/manifest.py +0 -0
  81. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/entity/__init__.py +0 -0
  82. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/entity/base.py +0 -0
  83. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/entity/fake.py +0 -0
  84. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/entity/heuristic.py +0 -0
  85. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/index/__init__.py +0 -0
  86. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/index/entities.py +0 -0
  87. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/index/summaries.py +0 -0
  88. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/index/tree.py +0 -0
  89. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/index/vectors.py +0 -0
  90. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/index/xrefs.py +0 -0
  91. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/ingest/__init__.py +0 -0
  92. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/ingest/base.py +0 -0
  93. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/ingest/markdown.py +0 -0
  94. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/ingest/markitdown.py +0 -0
  95. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/ingest/pdf.py +0 -0
  96. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/inspection.py +0 -0
  97. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/mcp/__init__.py +0 -0
  98. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/providers.py +0 -0
  99. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/py.typed +0 -0
  100. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/repo.py +0 -0
  101. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/summarize/__init__.py +0 -0
  102. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/summarize/base.py +0 -0
  103. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/summarize/cache.py +0 -0
  104. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/summarize/fake.py +0 -0
  105. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/summarize/openai_compatible.py +0 -0
  106. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/summarize/prompts.py +0 -0
  107. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/tools/__init__.py +0 -0
  108. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/tools/base.py +0 -0
  109. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/tools/find_mentions.py +0 -0
  110. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/tools/get_related.py +0 -0
  111. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/tools/get_section.py +0 -0
  112. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/tools/outline.py +0 -0
  113. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/tools/read_range.py +0 -0
  114. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/tools/search_keyword.py +0 -0
  115. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/tools/search_semantic.py +0 -0
  116. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/xref/__init__.py +0 -0
  117. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/xref/base.py +0 -0
  118. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/xref/fake.py +0 -0
  119. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/src/cairn/xref/heuristic.py +0 -0
  120. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/__init__.py +0 -0
  121. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/conftest.py +0 -0
  122. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/fixtures/empty.md +0 -0
  123. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/fixtures/nested.md +0 -0
  124. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/fixtures/no_headings.md +0 -0
  125. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/fixtures/simple.md +0 -0
  126. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/fixtures/with_frontmatter.md +0 -0
  127. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/__init__.py +0 -0
  128. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/conftest.py +0 -0
  129. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_bench_baseline.py +0 -0
  130. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_bench_dataset.py +0 -0
  131. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_bench_judge.py +0 -0
  132. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_bench_metrics.py +0 -0
  133. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_bench_runner.py +0 -0
  134. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_cli_config.py +0 -0
  135. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_embed_doubao.py +0 -0
  136. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_embed_fake.py +0 -0
  137. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_embed_openai_compatible.py +0 -0
  138. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_engine_indexer.py +0 -0
  139. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_engine_manifest.py +0 -0
  140. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_entities_builder.py +0 -0
  141. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_entity_heuristic.py +0 -0
  142. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_markdown_parser.py +0 -0
  143. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_markitdown_parser.py +0 -0
  144. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_pdf_parser.py +0 -0
  145. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_repo.py +0 -0
  146. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_repo_eval_gates.py +0 -0
  147. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_summaries_builder.py +0 -0
  148. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_summaries_reader.py +0 -0
  149. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_summarize_cache.py +0 -0
  150. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_summarize_fake.py +0 -0
  151. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_summarize_openai_compatible.py +0 -0
  152. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_summarize_prompts.py +0 -0
  153. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_tool_document_index.py +0 -0
  154. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_tool_find_mentions.py +0 -0
  155. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_tool_get_related.py +0 -0
  156. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_tool_get_section.py +0 -0
  157. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_tool_outline.py +0 -0
  158. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_tool_read_range.py +0 -0
  159. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_tool_search_keyword.py +0 -0
  160. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_tool_search_semantic.py +0 -0
  161. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_tree_builder.py +0 -0
  162. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_types.py +0 -0
  163. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_vectors_builder.py +0 -0
  164. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_vectors_reader.py +0 -0
  165. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_xref_heuristic.py +0 -0
  166. {docsgraph-0.1.0a2 → docsgraph-0.1.0a4}/tests/unit/test_xrefs_builder.py +0 -0
@@ -0,0 +1,15 @@
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ end_of_line = lf
6
+ insert_final_newline = true
7
+ trim_trailing_whitespace = true
8
+ indent_style = space
9
+ indent_size = 2
10
+
11
+ [*.py]
12
+ indent_size = 4
13
+
14
+ [Makefile]
15
+ indent_style = tab
@@ -0,0 +1,2 @@
1
+ custom:
2
+ - https://jokeuncle.github.io/cairn/#support
@@ -12,8 +12,8 @@ body:
12
12
  id: version
13
13
  attributes:
14
14
  label: Cairn version
15
- description: Output of `cairn version` (or your installed package version).
16
- placeholder: "0.1.0a1"
15
+ description: Output of `docsgraph version` (or your installed package version).
16
+ placeholder: "0.1.0a3"
17
17
  validations:
18
18
  required: true
19
19
 
@@ -53,7 +53,7 @@ body:
53
53
  id: actual
54
54
  attributes:
55
55
  label: Actual behavior
56
- description: Include any error output. If `cairn serve` is involved, the JSON-line log is very helpful.
56
+ description: Include any error output. If `docsgraph serve` is involved, the JSON-line log is very helpful.
57
57
  render: shell
58
58
  validations:
59
59
  required: true
@@ -1,5 +1,8 @@
1
1
  blank_issues_enabled: false
2
2
  contact_links:
3
+ - name: Usage questions and support
4
+ url: https://github.com/jokeuncle/cairn/blob/main/SUPPORT.md
5
+ about: Read the support policy before opening a usage question.
3
6
  - name: Security disclosure
4
7
  url: https://github.com/jokeuncle/cairn/blob/main/SECURITY.md
5
8
  about: Report a security issue privately — please do not open a public issue.
@@ -31,9 +31,9 @@
31
31
  -->
32
32
 
33
33
  ```
34
- ruff check src tests
35
- mypy src/cairn
36
- pytest tests/unit -q
34
+ ruff check .
35
+ mypy src tests
36
+ pytest
37
37
  ```
38
38
 
39
39
  - [ ] Unit tests added / updated
@@ -21,10 +21,10 @@ jobs:
21
21
  python-version: ["3.11", "3.12", "3.13"]
22
22
 
23
23
  steps:
24
- - uses: actions/checkout@v4
24
+ - uses: actions/checkout@v7
25
25
 
26
26
  - name: Set up Python ${{ matrix.python-version }}
27
- uses: actions/setup-python@v5
27
+ uses: actions/setup-python@v6
28
28
  with:
29
29
  python-version: ${{ matrix.python-version }}
30
30
  cache: pip
@@ -38,7 +38,7 @@ jobs:
38
38
  run: ruff check .
39
39
 
40
40
  - name: mypy --strict
41
- run: mypy src tests
41
+ run: mypy --python-version "${{ matrix.python-version }}" src tests
42
42
 
43
43
  - name: pytest
44
44
  run: pytest
@@ -48,10 +48,10 @@ jobs:
48
48
  runs-on: ubuntu-latest
49
49
  needs: lint-types-tests
50
50
  steps:
51
- - uses: actions/checkout@v4
51
+ - uses: actions/checkout@v7
52
52
 
53
53
  - name: Set up Python
54
- uses: actions/setup-python@v5
54
+ uses: actions/setup-python@v6
55
55
  with:
56
56
  python-version: "3.12"
57
57
 
@@ -65,7 +65,7 @@ jobs:
65
65
  run: python -m twine check dist/*
66
66
 
67
67
  - name: Upload artifacts
68
- uses: actions/upload-artifact@v4
68
+ uses: actions/upload-artifact@v7
69
69
  with:
70
70
  name: cairn-dist
71
71
  path: dist/*
@@ -0,0 +1,43 @@
1
+ name: Pages
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ workflow_run:
7
+ workflows: ["Release"]
8
+ types: [completed]
9
+ workflow_dispatch:
10
+
11
+ permissions:
12
+ contents: read
13
+ pages: write
14
+ id-token: write
15
+
16
+ concurrency:
17
+ group: pages-${{ github.ref }}
18
+ cancel-in-progress: true
19
+
20
+ jobs:
21
+ deploy:
22
+ name: Deploy static site
23
+ runs-on: ubuntu-latest
24
+ if: github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success'
25
+ environment:
26
+ name: github-pages
27
+ url: ${{ steps.deployment.outputs.page_url }}
28
+ steps:
29
+ - uses: actions/checkout@v7
30
+ with:
31
+ ref: main
32
+
33
+ - name: Configure Pages
34
+ uses: actions/configure-pages@v6
35
+
36
+ - name: Upload Pages artifact
37
+ uses: actions/upload-pages-artifact@v5
38
+ with:
39
+ path: docs
40
+
41
+ - name: Deploy to GitHub Pages
42
+ id: deployment
43
+ uses: actions/deploy-pages@v5
@@ -0,0 +1,52 @@
1
+ name: Prepare release
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ version:
7
+ description: "Version without leading v, e.g. 0.1.0a4"
8
+ required: true
9
+ type: string
10
+ date:
11
+ description: "Release date in YYYY-MM-DD format. Defaults to the runner UTC date."
12
+ required: false
13
+ type: string
14
+
15
+ permissions:
16
+ contents: write
17
+
18
+ jobs:
19
+ prepare:
20
+ name: Update release metadata
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - uses: actions/checkout@v7
24
+ with:
25
+ ref: main
26
+
27
+ - name: Set up Python
28
+ uses: actions/setup-python@v6
29
+ with:
30
+ python-version: "3.13"
31
+
32
+ - name: Prepare changelog and version metadata
33
+ run: |
34
+ args=("${{ inputs.version }}")
35
+ if [ -n "${{ inputs.date }}" ]; then
36
+ args+=("--date" "${{ inputs.date }}")
37
+ fi
38
+ python scripts/prepare_release.py "${args[@]}"
39
+ python scripts/prepare_release.py "${{ inputs.version }}" --check
40
+ git diff --check
41
+
42
+ - name: Commit release metadata
43
+ run: |
44
+ if git diff --quiet; then
45
+ echo "No release metadata changes to commit."
46
+ exit 0
47
+ fi
48
+ git config user.name "github-actions[bot]"
49
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
50
+ git add pyproject.toml src/cairn/__init__.py README.md CHANGELOG.md docs/release-checklist.md docs/retrieval-architecture-canvas.html
51
+ git commit -m "Prepare release ${{ inputs.version }}"
52
+ git push origin HEAD:main
@@ -0,0 +1,130 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ jobs:
9
+ verify:
10
+ name: lint + types + tests
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v7
14
+
15
+ - name: Set up Python
16
+ uses: actions/setup-python@v6
17
+ with:
18
+ python-version: "3.13"
19
+ cache: pip
20
+
21
+ - name: Install package + dev extras
22
+ run: |
23
+ python -m pip install --upgrade pip
24
+ python -m pip install -e ".[dev]"
25
+
26
+ - name: Validate release metadata
27
+ run: python scripts/prepare_release.py "${GITHUB_REF_NAME#v}" --check
28
+
29
+ - name: ruff
30
+ run: ruff check .
31
+
32
+ - name: mypy --strict
33
+ run: mypy --python-version "3.13" src tests
34
+
35
+ - name: pytest
36
+ run: pytest
37
+
38
+ build:
39
+ name: Build wheel + sdist for ${{ github.ref_name }}
40
+ runs-on: ubuntu-latest
41
+ needs: verify
42
+ steps:
43
+ - uses: actions/checkout@v7
44
+
45
+ - name: Set up Python
46
+ uses: actions/setup-python@v6
47
+ with:
48
+ python-version: "3.12"
49
+
50
+ - name: Install build tooling
51
+ run: python -m pip install --upgrade pip build twine
52
+
53
+ - name: Build distributions
54
+ run: python -m build --wheel --sdist
55
+
56
+ - name: Check distributions
57
+ run: python -m twine check dist/*
58
+
59
+ - name: Upload artifacts
60
+ uses: actions/upload-artifact@v7
61
+ with:
62
+ name: dist
63
+ path: dist/*
64
+
65
+ publish-pypi:
66
+ name: Publish to PyPI
67
+ runs-on: ubuntu-latest
68
+ needs: build
69
+ # Trusted publishing requires the PyPI `docsgraph` project to trust this
70
+ # GitHub workflow/environment under Settings → Publishing.
71
+ environment:
72
+ name: pypi
73
+ url: https://pypi.org/p/docsgraph
74
+ permissions:
75
+ id-token: write
76
+ steps:
77
+ - name: Download artifacts
78
+ uses: actions/download-artifact@v8
79
+ with:
80
+ name: dist
81
+ path: dist
82
+
83
+ - name: Publish to PyPI
84
+ uses: pypa/gh-action-pypi-publish@release/v1
85
+
86
+ verify-pypi-install:
87
+ name: Verify install from PyPI
88
+ runs-on: ubuntu-latest
89
+ needs: publish-pypi
90
+ steps:
91
+ - uses: actions/checkout@v7
92
+
93
+ - name: Set up Python
94
+ uses: actions/setup-python@v6
95
+ with:
96
+ python-version: "3.12"
97
+ cache: pip
98
+
99
+ - name: Verify published package from official index
100
+ run: |
101
+ version="${GITHUB_REF_NAME#v}"
102
+ for attempt in 1 2 3 4 5; do
103
+ if python scripts/verify_pypi_install.py --version "$version" --repo . --sync-repo; then
104
+ exit 0
105
+ fi
106
+ echo "PyPI install verification failed on attempt $attempt; retrying..."
107
+ sleep 30
108
+ done
109
+ python scripts/verify_pypi_install.py --version "$version" --repo . --sync-repo
110
+
111
+ github-release:
112
+ name: Attach artifacts to GitHub release
113
+ runs-on: ubuntu-latest
114
+ needs: [build, publish-pypi, verify-pypi-install]
115
+ permissions:
116
+ contents: write
117
+ steps:
118
+ - name: Download artifacts
119
+ uses: actions/download-artifact@v8
120
+ with:
121
+ name: dist
122
+ path: dist
123
+
124
+ - name: Create GitHub release
125
+ uses: softprops/action-gh-release@v3
126
+ with:
127
+ files: dist/*
128
+ generate_release_notes: true
129
+ draft: false
130
+ prerelease: ${{ contains(github.ref_name, '-') || contains(github.ref_name, 'a') || contains(github.ref_name, 'b') || contains(github.ref_name, 'rc') }}
@@ -16,10 +16,10 @@ jobs:
16
16
  timeout-minutes: 60
17
17
 
18
18
  steps:
19
- - uses: actions/checkout@v4
19
+ - uses: actions/checkout@v7
20
20
 
21
21
  - name: Set up Python
22
- uses: actions/setup-python@v5
22
+ uses: actions/setup-python@v6
23
23
  with:
24
24
  python-version: "3.12"
25
25
  cache: pip
@@ -302,20 +302,20 @@ configured primary when omitted.
302
302
 
303
303
  ### Layer 5: Tooling (CLI / inspector / extensions)
304
304
 
305
- CLI (`cairn`, typer-based):
305
+ CLI (`docsgraph`, typer-based; `cairn` remains a compatibility alias):
306
306
 
307
307
  ```
308
- cairn init # scaffold a .cairn/ in cwd
309
- cairn index <path> # index a document
310
- cairn serve [--http] # start MCP server
311
- cairn inspect <doc-id> # print index stats
312
- cairn outline <doc-id> # print tree
313
- cairn query <doc-id> ... # exercise tools from terminal
314
- cairn migrate # bump index format versions
308
+ docsgraph init # scaffold a .cairn/ in cwd
309
+ docsgraph index <path> # index a document
310
+ docsgraph serve [--http] # start MCP server
311
+ docsgraph inspect <doc-id> # print index stats
312
+ docsgraph outline <doc-id> # print tree
313
+ docsgraph query <doc-id> ... # exercise tools from terminal
314
+ docsgraph migrate # bump index format versions
315
315
  ```
316
316
 
317
317
  Future (v0.3+):
318
- - `cairn web` — local inspector UI (read-only).
318
+ - `docsgraph web` — local inspector UI (read-only).
319
319
  - VSCode extension surfacing the same inspector.
320
320
 
321
321
  ---
@@ -6,12 +6,39 @@ All notable changes to Cairn. Format follows
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ No unreleased changes yet.
10
+
11
+ ## [0.1.0a4] — 2026-06-23
12
+
13
+ ### Added
14
+
15
+ - Product website under `docs/index.html`, deployed to GitHub Pages on `main`
16
+ pushes and after successful release workflows.
17
+
18
+ ### Changed
19
+
20
+ - Repo-scoped MCP config now defaults to dynamic workspace resolution
21
+ (`args = ["serve"]`) instead of pinning the repo where `docsgraph install` ran.
22
+ Use `--repo` for a fixed-repo server, or per-call `projectPath` for explicit
23
+ cross-repo queries.
24
+ - PyPI project metadata and README now point the project homepage to the
25
+ GitHub Pages site.
26
+ - GitHub Actions workflows now use current major versions to avoid deprecated
27
+ Node runtime warnings.
28
+ - First-run website and contributor docs now prefer the `docsgraph` command and
29
+ deterministic `--fake` smoke-test path.
30
+ - Added support and editor-configuration metadata for contributor onboarding.
31
+ - Added a GitHub Sponsor entry plus website and support-page links for optional
32
+ project sponsorship.
33
+
34
+ ## [0.1.0a3] — 2026-06-22
35
+
9
36
  ### Added
10
37
 
11
38
  - **Doubao multimodal embeddings.** `CAIRN_EMBED_PROVIDER=doubao-vision`
12
39
  targets Volcengine ARK's `/embeddings/multimodal` shape and defaults to
13
40
  `doubao-embedding-vision-251215` with 2048-dimensional vectors.
14
- - **Static graph inspector.** `cairn inspect <doc-dir> --out inspector.html`
41
+ - **Static graph inspector.** `docsgraph inspect <doc-dir> --out inspector.html`
15
42
  writes a standalone HTML relationship explorer for sections, entities,
16
43
  tree edges, mentions, and cross-references.
17
44
  - **Semantic hit evidence.** `search_semantic` now returns an explanatory
@@ -22,8 +49,9 @@ All notable changes to Cairn. Format follows
22
49
  - **Benchmark/index progress output.** CLI indexing and benchmark runs now
23
50
  emit stage progress so hosted-model runs do not sit silently during long
24
51
  summary-generation phases.
25
- - **Repository documentation workflow.** `cairn init -y`, `cairn sync`,
26
- `cairn status`, repo-scoped `cairn serve`, and repo-scoped `cairn inspect`
52
+ - **Repository documentation workflow.** `docsgraph init -y`, `docsgraph sync`,
53
+ `docsgraph status`, repo-scoped `docsgraph serve`, and repo-scoped
54
+ `docsgraph inspect`
27
55
  turn a project directory into a multi-document MCP knowledge layer. Repo MCP
28
56
  adds `list_documents`, cross-document `search_documents`, `repo_context`,
29
57
  `repo_graph`, `repo_impact`, and routes normal tools by optional `doc`.
@@ -37,10 +65,14 @@ All notable changes to Cairn. Format follows
37
65
  `node_modules/**`, `dist/**`, and `.pytest_cache/**` now apply at any depth,
38
66
  so broad include globs do not accidentally index frontend dependencies,
39
67
  caches, or generated build output.
40
- - **Open-source DX commands.** `cairn doctor` validates repo setup and index
41
- freshness; `cairn mcp config` prints MCP snippets for Claude, Cursor, Codex,
42
- and Goose. `cairn serve --repo <path>` makes generated configs independent
43
- from the client's working directory.
68
+ - **Open-source DX commands.** `docsgraph doctor` validates repo setup and index
69
+ freshness; `docsgraph mcp config` prints MCP snippets for Claude, Cursor,
70
+ Codex, and Goose. `docsgraph serve --repo <path>` makes generated configs
71
+ independent from the client's working directory.
72
+ - **Agent self-install command.** `docsgraph install` writes the Cairn MCP
73
+ server config for Codex, Claude, Cursor, or Goose, while
74
+ `docsgraph install --dry-run` prints the target path and config without
75
+ touching disk.
44
76
  - **Public repo smoke evaluator.** `scripts/eval_repos.py` reproduces the
45
77
  uv / MCP Python SDK / FastAPI template repo-document smoke tests used for
46
78
  release readiness.
@@ -50,7 +82,10 @@ All notable changes to Cairn. Format follows
50
82
  - **Golden documentation standard.** `docs/golden-docs-standard.md` publishes
51
83
  the repo-doc shapes Cairn rewards and the tuning policy maintainers must
52
84
  follow when mature-repository smoke runs expose quality gaps.
53
- - **Optional MarkItDown ingestion.** Installing `cairn[markitdown]` lets Cairn
85
+ - **PyPI installation verifier.** `scripts/verify_pypi_install.py` installs a
86
+ released `docsgraph` wheel from the official Python index into a clean
87
+ temporary environment and checks both `docsgraph` and `cairn` console scripts.
88
+ - **Optional MarkItDown ingestion.** Installing `docsgraph[markitdown]` lets Cairn
54
89
  convert local DOCX, PPTX, XLSX, HTML, CSV, JSON, XML, EPUB, and related files
55
90
  to Markdown before indexing them through the canonical Markdown pipeline.
56
91
 
@@ -98,6 +133,8 @@ All notable changes to Cairn. Format follows
98
133
  Cairn product name while making the installed tool obvious and avoiding the
99
134
  unrelated package that already occupies `cairn`.
100
135
  - Strict mypy now passes across both `src` and `tests`.
136
+ - The release workflow now runs lint, type checks, tests, build validation, and
137
+ PyPI Trusted Publishing from the `pypi` GitHub environment on version tags.
101
138
 
102
139
  ## [0.1.0a2] — 2026-06-11
103
140
 
@@ -206,8 +243,8 @@ naive vector-RAG baseline.
206
243
  - `PRODUCT.md`, `ARCHITECTURE.md`, `CLAUDE.md`, `ROADMAP.md`,
207
244
  `CONTRIBUTING.md`, `LICENSE` (Apache-2.0).
208
245
  - `docs/specs/mcp-tools.md`: authoritative tool schemas.
209
- - `docs/canvas.html`: single-file visual explainer comparing Naive RAG,
210
- RAPTOR, BookRAG, A-RAG, and Cairn.
246
+ - `docs/retrieval-architecture-canvas.html`: single-file visual explainer
247
+ comparing Naive RAG, RAPTOR, BookRAG, A-RAG, and Cairn.
211
248
  - `docs/decisions/0001-foundation.md`: founding ADR.
212
249
  - `examples/hero-demo.md`: self-referential reproducible demo (Cairn
213
250
  navigates its own architecture document).
@@ -139,10 +139,10 @@ A good test:
139
139
 
140
140
  Please file an issue with:
141
141
 
142
- - Cairn version (`cairn --version`) and Python version.
142
+ - Cairn version (`docsgraph version`) and Python version.
143
143
  - A minimal reproducer (ideally a small document and a command).
144
144
  - Expected vs. actual behavior.
145
- - Any error log lines (JSON-lines from `cairn serve` are very helpful).
145
+ - Any error log lines (JSON-lines from `docsgraph serve` are very helpful).
146
146
 
147
147
  ---
148
148
 
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docsgraph
3
- Version: 0.1.0a2
3
+ Version: 0.1.0a4
4
4
  Summary: Local-first documentation graph for AI agents. CodeGraph for docs, exposed through MCP.
5
- Project-URL: Homepage, https://github.com/jokeuncle/cairn
5
+ Project-URL: Homepage, https://jokeuncle.github.io/cairn/
6
6
  Project-URL: Documentation, https://github.com/jokeuncle/cairn/tree/main/docs
7
7
  Project-URL: Repository, https://github.com/jokeuncle/cairn
8
8
  Project-URL: Issues, https://github.com/jokeuncle/cairn/issues
@@ -260,11 +260,12 @@ Description-Content-Type: text/markdown
260
260
 
261
261
  [![CI](https://github.com/jokeuncle/cairn/actions/workflows/ci.yml/badge.svg)](https://github.com/jokeuncle/cairn/actions/workflows/ci.yml)
262
262
  [![License](https://img.shields.io/badge/license-Apache_2.0-blue.svg)](LICENSE)
263
- [![Version](https://img.shields.io/badge/version-0.1.0a2-blue.svg)](CHANGELOG.md)
263
+ [![PyPI](https://img.shields.io/pypi/v/docsgraph?include_prereleases&label=PyPI)](https://pypi.org/project/docsgraph/)
264
+ [![Website](https://img.shields.io/badge/website-cairn-48c7ba.svg)](https://jokeuncle.github.io/cairn/)
264
265
  [![Python](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/)
265
266
  [![MCP](https://img.shields.io/badge/MCP-native-7c3aed.svg)](https://modelcontextprotocol.io/)
266
267
 
267
- ![Cairn demo: repository documentation graph and MCP tools](docs/assets/cairn-demo.svg)
268
+ ![Cairn demo: repository documentation graph and MCP tools](docs/assets/docsgraph-repo-demo.svg)
268
269
 
269
270
  Cairn is a **local-first, MCP-native DocsGraph** for software
270
271
  repositories and large structured documents. It turns README files, specs,
@@ -282,9 +283,9 @@ The result: better retrieval accuracy, lower token spend, and a practical MCP
282
283
  tool layer between your project documentation and every AI coding agent you
283
284
  use. Local-first. Vendor-neutral. Designed for open-source repos.
284
285
 
285
- > 🚀 **Alpha — `0.1.0a2`.** Markdown + PDF ingest, all eight MCP tools,
286
+ > 🚀 **Alpha — `0.1.0a4`.** Markdown + PDF ingest, the core MCP tool set,
286
287
  > the full structure-aware index (tree + summaries + entities + xrefs +
287
- > vectors), repo-level `init/sync/status`, repo-scoped MCP with
288
+ > vectors), repo-level `init/sync/status`, repo-scoped MCP tools with
288
289
  > `list_documents`, `search_documents`, `repo_context`, `repo_graph`, and
289
290
  > `repo_impact`, failure-isolated sync, static graph inspector, Doubao
290
291
  > multimodal embeddings, and a benchmark harness with headline numbers. See
@@ -308,6 +309,7 @@ For the in-depth motivation, see [`PRODUCT.md`](PRODUCT.md).
308
309
  For the technical design, see [`ARCHITECTURE.md`](ARCHITECTURE.md).
309
310
  For the public documentation quality contract Cairn optimizes for, see
310
311
  [`docs/golden-docs-standard.md`](docs/golden-docs-standard.md).
312
+ The product website is published at <https://jokeuncle.github.io/cairn/>.
311
313
 
312
314
  ---
313
315
 
@@ -329,7 +331,11 @@ For the public documentation quality contract Cairn optimizes for, see
329
331
  result carries stable anchors for verification.
330
332
 
331
333
  A visual explainer comparing Cairn's approach to RAPTOR, BookRAG, and A-RAG
332
- lives at [`docs/canvas.html`](docs/canvas.html). Open it in any browser.
334
+ lives at
335
+ [`docs/retrieval-architecture-canvas.html`](docs/retrieval-architecture-canvas.html).
336
+ The repository workflow map lives at
337
+ [`docs/repo-docs-workflow-canvas.html`](docs/repo-docs-workflow-canvas.html).
338
+ Open either file in any browser.
333
339
 
334
340
  ---
335
341
 
@@ -352,6 +358,25 @@ Or run it without installing:
352
358
  uvx docsgraph --help
353
359
  ```
354
360
 
361
+ AI agents that can run shell commands can install and wire Cairn into their own
362
+ MCP config. Start with a dry run, then write the config once the target path
363
+ looks right:
364
+
365
+ ```bash
366
+ uvx docsgraph init -y
367
+ uvx docsgraph sync --fake
368
+ uvx docsgraph install --client codex --dry-run --fake
369
+ uvx docsgraph install --client codex --yes --fake
370
+ ```
371
+
372
+ Use `--client claude`, `--client cursor`, or `--client goose` for other MCP
373
+ clients. `docsgraph install` writes the same server config that
374
+ `docsgraph mcp config` prints, with `command = "docsgraph"` and
375
+ `args = ["serve"]`. The server resolves the current MCP workspace at call time,
376
+ so a global agent config does not stay pinned to the repo where it was installed.
377
+ Pass `--repo /path/to/repo` to `docsgraph install` or `docsgraph mcp config`
378
+ only when you intentionally want a fixed-repo MCP server.
379
+
355
380
  ### Repository Workflow
356
381
 
357
382
  Inside any repository:
@@ -442,7 +467,7 @@ Markdown parser. This expands coverage to formats such as DOCX, PPTX, XLSX,
442
467
  HTML, CSV, JSON, XML, and EPUB without making the base install heavy:
443
468
 
444
469
  ```bash
445
- .venv/bin/pip install -e ".[markitdown]"
470
+ pip install "docsgraph[markitdown]"
446
471
  .venv/bin/docsgraph init -y --force --markitdown
447
472
  .venv/bin/docsgraph sync --fake
448
473
  ```
@@ -657,11 +682,13 @@ choices we adopted, modified, or declined.
657
682
  | 4 — v0.4 polish for production | ☐ | DOCX/RTF/EPUB, VSCode extension, security review |
658
683
  | v1.0 GA | ☐ | All `PRODUCT.md` §7 success criteria met |
659
684
 
660
- Full plan: [`ROADMAP.md`](ROADMAP.md). Current test suite: **436 passing**,
661
- mypy strict clean, ruff clean.
685
+ Full plan: [`ROADMAP.md`](ROADMAP.md). CI runs ruff, strict mypy, pytest, and
686
+ package build checks across Python 3.11, 3.12, and 3.13.
662
687
 
663
688
  Maintainer release gate: [`docs/release-checklist.md`](docs/release-checklist.md).
664
689
 
690
+ Support and sponsorship options live in [`SUPPORT.md`](SUPPORT.md).
691
+
665
692
  ---
666
693
 
667
694
  ## Contributing