agentforge-graph 0.3.2__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 (431) hide show
  1. agentforge_graph-0.3.2/.agentforge-state/answers.yml +8 -0
  2. agentforge_graph-0.3.2/.agentforge-state/managed-files.lock +170 -0
  3. agentforge_graph-0.3.2/.claude/CLAUDE.md +54 -0
  4. agentforge_graph-0.3.2/.claude/settings.local.json +7 -0
  5. agentforge_graph-0.3.2/.claude/standards/coding.md +19 -0
  6. agentforge_graph-0.3.2/.claude/standards/testing.md +18 -0
  7. agentforge_graph-0.3.2/.cursorrules +12 -0
  8. agentforge_graph-0.3.2/.env.example +5 -0
  9. agentforge_graph-0.3.2/.github/copilot-instructions.md +14 -0
  10. agentforge_graph-0.3.2/.github/workflows/ci.yml +94 -0
  11. agentforge_graph-0.3.2/.gitignore +27 -0
  12. agentforge_graph-0.3.2/.gitkeep +1 -0
  13. agentforge_graph-0.3.2/.pre-commit-config.yaml +29 -0
  14. agentforge_graph-0.3.2/AGENTS.md +166 -0
  15. agentforge_graph-0.3.2/CHANGELOG.md +420 -0
  16. agentforge_graph-0.3.2/CLAUDE.md +14 -0
  17. agentforge_graph-0.3.2/CONTRIBUTING.md +147 -0
  18. agentforge_graph-0.3.2/LICENSE +202 -0
  19. agentforge_graph-0.3.2/NOTICE +14 -0
  20. agentforge_graph-0.3.2/PKG-INFO +291 -0
  21. agentforge_graph-0.3.2/README.md +238 -0
  22. agentforge_graph-0.3.2/agentforge.yaml +24 -0
  23. agentforge_graph-0.3.2/ckg.yaml +116 -0
  24. agentforge_graph-0.3.2/docs/ARCHITECTURE.md +415 -0
  25. agentforge_graph-0.3.2/docs/adr/0001-build-on-agentforge-framework.md +95 -0
  26. agentforge_graph-0.3.2/docs/adr/0002-tree-sitter-over-compiler-grade-extraction.md +99 -0
  27. agentforge_graph-0.3.2/docs/adr/0003-stable-symbol-ids-and-per-file-subgraphs.md +105 -0
  28. agentforge_graph-0.3.2/docs/adr/0004-provenance-on-every-fact.md +94 -0
  29. agentforge_graph-0.3.2/docs/adr/0005-reserve-higher-level-node-kinds-up-front.md +93 -0
  30. agentforge_graph-0.3.2/docs/adr/0006-embedded-first-pluggable-storage.md +98 -0
  31. agentforge_graph-0.3.2/docs/adr/0007-ast-aware-chunking-with-chunk-symbol-separation.md +101 -0
  32. agentforge_graph-0.3.2/docs/adr/0008-hybrid-retrieval-vector-then-graph.md +105 -0
  33. agentforge_graph-0.3.2/docs/adr/0009-top-10-language-scope-with-support-tiers.md +96 -0
  34. agentforge_graph-0.3.2/docs/adr/README.md +60 -0
  35. agentforge_graph-0.3.2/docs/bugs/BUG-001-src-layout-import-resolution.md +72 -0
  36. agentforge_graph-0.3.2/docs/bugs/BUG-002-retrieval-scores-render-zero.md +62 -0
  37. agentforge_graph-0.3.2/docs/bugs/BUG-003-adr-readme-ingested-as-decision.md +58 -0
  38. agentforge_graph-0.3.2/docs/bugs/BUG-004-relative-from-import-resolution.md +94 -0
  39. agentforge_graph-0.3.2/docs/bugs/BUG-005-typescript-abstract-class-not-extracted.md +66 -0
  40. agentforge_graph-0.3.2/docs/bugs/BUG-006-commonjs-require-not-resolved.md +176 -0
  41. agentforge_graph-0.3.2/docs/bugs/BUG-007-overload-resolution-nondeterministic.md +97 -0
  42. agentforge_graph-0.3.2/docs/bugs/BUG-008-rerank-yaml-boolean-breaks-query.md +85 -0
  43. agentforge_graph-0.3.2/docs/bugs/README.md +54 -0
  44. agentforge_graph-0.3.2/docs/design/README.md +35 -0
  45. agentforge_graph-0.3.2/docs/design/design-001-core-contracts-module.md +340 -0
  46. agentforge_graph-0.3.2/docs/design/design-002-tree-sitter-ingestion.md +348 -0
  47. agentforge_graph-0.3.2/docs/design/design-003-graph-storage-adapters.md +391 -0
  48. agentforge_graph-0.3.2/docs/design/design-004-incremental-indexing.md +361 -0
  49. agentforge_graph-0.3.2/docs/design/design-005-ast-chunking-and-embeddings.md +311 -0
  50. agentforge_graph-0.3.2/docs/design/design-006-hybrid-retrieval.md +291 -0
  51. agentforge_graph-0.3.2/docs/design/design-007-repo-map.md +195 -0
  52. agentforge_graph-0.3.2/docs/design/design-008-mcp-server-and-tool-api.md +228 -0
  53. agentforge_graph-0.3.2/docs/design/design-009-temporal-evolution-layer.md +442 -0
  54. agentforge_graph-0.3.2/docs/design/design-010-adr-and-docs-ingestion.md +271 -0
  55. agentforge_graph-0.3.2/docs/design/design-011-framework-extractors.md +299 -0
  56. agentforge_graph-0.3.2/docs/design/design-012-llm-enrichment.md +309 -0
  57. agentforge_graph-0.3.2/docs/design/design-012b-summaries.md +216 -0
  58. agentforge_graph-0.3.2/docs/enhancements/ENH-001-pattern-recall-tuning.md +59 -0
  59. agentforge_graph-0.3.2/docs/enhancements/ENH-002-parallelize-enrichment-calls.md +52 -0
  60. agentforge_graph-0.3.2/docs/enhancements/ENH-003-pluggable-model-provider-registry.md +107 -0
  61. agentforge_graph-0.3.2/docs/enhancements/ENH-004-first-party-storage-backends.md +98 -0
  62. agentforge_graph-0.3.2/docs/enhancements/ENH-005-http-mcp-transport-auth.md +93 -0
  63. agentforge_graph-0.3.2/docs/enhancements/ENH-006-cli-path-arg-consistency.md +54 -0
  64. agentforge_graph-0.3.2/docs/enhancements/ENH-007-repomap-public-api-orientation.md +76 -0
  65. agentforge_graph-0.3.2/docs/enhancements/ENH-008-typescript-symbol-completeness.md +79 -0
  66. agentforge_graph-0.3.2/docs/enhancements/ENH-009-retrieval-precision-dense-codebases.md +129 -0
  67. agentforge_graph-0.3.2/docs/enhancements/README.md +50 -0
  68. agentforge_graph-0.3.2/docs/features/README.md +53 -0
  69. agentforge_graph-0.3.2/docs/features/TRACKER.md +402 -0
  70. agentforge_graph-0.3.2/docs/features/feat-001-graph-schema-and-core-contracts.md +263 -0
  71. agentforge_graph-0.3.2/docs/features/feat-002-tree-sitter-ingestion.md +241 -0
  72. agentforge_graph-0.3.2/docs/features/feat-003-graph-storage-adapters.md +217 -0
  73. agentforge_graph-0.3.2/docs/features/feat-004-incremental-indexing.md +199 -0
  74. agentforge_graph-0.3.2/docs/features/feat-005-ast-chunking-and-embeddings.md +218 -0
  75. agentforge_graph-0.3.2/docs/features/feat-006-hybrid-retrieval.md +214 -0
  76. agentforge_graph-0.3.2/docs/features/feat-007-repo-map-summarization.md +198 -0
  77. agentforge_graph-0.3.2/docs/features/feat-008-mcp-server-and-tool-api.md +212 -0
  78. agentforge_graph-0.3.2/docs/features/feat-009-temporal-evolution-layer.md +160 -0
  79. agentforge_graph-0.3.2/docs/features/feat-010-adr-and-docs-ingestion.md +264 -0
  80. agentforge_graph-0.3.2/docs/features/feat-011-framework-extractors.md +293 -0
  81. agentforge_graph-0.3.2/docs/features/feat-012-llm-enrichment.md +224 -0
  82. agentforge_graph-0.3.2/docs/guides/model-providers.md +195 -0
  83. agentforge_graph-0.3.2/docs/guides/storage-backends.md +88 -0
  84. agentforge_graph-0.3.2/docs/guides/using-over-mcp.md +173 -0
  85. agentforge_graph-0.3.2/docs/known-limitations/KL-001-llm-summary-hallucination.md +41 -0
  86. agentforge_graph-0.3.2/docs/known-limitations/README.md +36 -0
  87. agentforge_graph-0.3.2/docs/open-source-ckg-research.md +406 -0
  88. agentforge_graph-0.3.2/docs/runbooks/01-set-up-new-agent.md +68 -0
  89. agentforge_graph-0.3.2/docs/runbooks/02-add-a-tool.md +73 -0
  90. agentforge_graph-0.3.2/docs/runbooks/03-add-a-pipeline-task.md +70 -0
  91. agentforge_graph-0.3.2/docs/runbooks/04-pick-reasoning-strategy.md +68 -0
  92. agentforge_graph-0.3.2/docs/runbooks/05-write-prompts.md +76 -0
  93. agentforge_graph-0.3.2/docs/runbooks/06-test-your-agent.md +76 -0
  94. agentforge_graph-0.3.2/docs/runbooks/07-debug-a-run.md +71 -0
  95. agentforge_graph-0.3.2/docs/runbooks/08-add-memory.md +76 -0
  96. agentforge_graph-0.3.2/docs/runbooks/09-add-mcp.md +79 -0
  97. agentforge_graph-0.3.2/docs/runbooks/10-add-evaluators.md +77 -0
  98. agentforge_graph-0.3.2/docs/runbooks/11-add-safety-guardrails.md +84 -0
  99. agentforge_graph-0.3.2/docs/runbooks/12-add-observability.md +78 -0
  100. agentforge_graph-0.3.2/docs/runbooks/13-configure-multi-provider.md +92 -0
  101. agentforge_graph-0.3.2/docs/runbooks/14-deploy-your-agent.md +71 -0
  102. agentforge_graph-0.3.2/docs/runbooks/15-upgrade-your-agent.md +68 -0
  103. agentforge_graph-0.3.2/docs/runbooks/16-configuration-reference.md +82 -0
  104. agentforge_graph-0.3.2/docs/runbooks/17-add-reranker.md +79 -0
  105. agentforge_graph-0.3.2/docs/runbooks/18-add-hybrid-search.md +79 -0
  106. agentforge_graph-0.3.2/docs/runbooks/19-add-graphrag.md +84 -0
  107. agentforge_graph-0.3.2/docs/runbooks/20-apply-schema-migrations.md +93 -0
  108. agentforge_graph-0.3.2/docs/runbooks/21-use-streaming-guardrails.md +83 -0
  109. agentforge_graph-0.3.2/docs/runbooks/README.md +69 -0
  110. agentforge_graph-0.3.2/docs/validation/README.md +118 -0
  111. agentforge_graph-0.3.2/docs/validation/cpp-fmt.md +71 -0
  112. agentforge_graph-0.3.2/docs/validation/csharp-newtonsoft-json.md +75 -0
  113. agentforge_graph-0.3.2/docs/validation/go-cobra.md +83 -0
  114. agentforge_graph-0.3.2/docs/validation/java-gson.md +73 -0
  115. agentforge_graph-0.3.2/docs/validation/javascript-express-chalk.md +112 -0
  116. agentforge_graph-0.3.2/docs/validation/php-monolog.md +70 -0
  117. agentforge_graph-0.3.2/docs/validation/python-click.md +124 -0
  118. agentforge_graph-0.3.2/docs/validation/ruby-thor.md +70 -0
  119. agentforge_graph-0.3.2/docs/validation/rust-serde-json.md +75 -0
  120. agentforge_graph-0.3.2/docs/validation/typescript-zod.md +128 -0
  121. agentforge_graph-0.3.2/docs/validation/w4-agent-dogfood.md +76 -0
  122. agentforge_graph-0.3.2/pyproject.toml +137 -0
  123. agentforge_graph-0.3.2/src/agentforge_graph/__init__.py +6 -0
  124. agentforge_graph-0.3.2/src/agentforge_graph/chunking/__init__.py +12 -0
  125. agentforge_graph-0.3.2/src/agentforge_graph/chunking/cast.py +159 -0
  126. agentforge_graph-0.3.2/src/agentforge_graph/chunking/chunk.py +19 -0
  127. agentforge_graph-0.3.2/src/agentforge_graph/chunking/tokens.py +15 -0
  128. agentforge_graph-0.3.2/src/agentforge_graph/cli.py +607 -0
  129. agentforge_graph-0.3.2/src/agentforge_graph/config.py +259 -0
  130. agentforge_graph-0.3.2/src/agentforge_graph/core/__init__.py +54 -0
  131. agentforge_graph-0.3.2/src/agentforge_graph/core/conformance.py +270 -0
  132. agentforge_graph-0.3.2/src/agentforge_graph/core/contracts.py +163 -0
  133. agentforge_graph-0.3.2/src/agentforge_graph/core/kinds.py +68 -0
  134. agentforge_graph-0.3.2/src/agentforge_graph/core/models.py +134 -0
  135. agentforge_graph-0.3.2/src/agentforge_graph/core/provenance.py +62 -0
  136. agentforge_graph-0.3.2/src/agentforge_graph/core/symbols.py +116 -0
  137. agentforge_graph-0.3.2/src/agentforge_graph/embed/__init__.py +28 -0
  138. agentforge_graph-0.3.2/src/agentforge_graph/embed/base.py +22 -0
  139. agentforge_graph-0.3.2/src/agentforge_graph/embed/bedrock.py +85 -0
  140. agentforge_graph-0.3.2/src/agentforge_graph/embed/fake.py +34 -0
  141. agentforge_graph-0.3.2/src/agentforge_graph/embed/openai.py +67 -0
  142. agentforge_graph-0.3.2/src/agentforge_graph/embed/pipeline.py +184 -0
  143. agentforge_graph-0.3.2/src/agentforge_graph/embed/registry.py +66 -0
  144. agentforge_graph-0.3.2/src/agentforge_graph/embed/report.py +15 -0
  145. agentforge_graph-0.3.2/src/agentforge_graph/enrich/__init__.py +70 -0
  146. agentforge_graph-0.3.2/src/agentforge_graph/enrich/anthropic.py +38 -0
  147. agentforge_graph-0.3.2/src/agentforge_graph/enrich/anthropic_client.py +109 -0
  148. agentforge_graph-0.3.2/src/agentforge_graph/enrich/bedrock.py +24 -0
  149. agentforge_graph-0.3.2/src/agentforge_graph/enrich/bedrock_client.py +115 -0
  150. agentforge_graph-0.3.2/src/agentforge_graph/enrich/bedrock_summarizer.py +23 -0
  151. agentforge_graph-0.3.2/src/agentforge_graph/enrich/claude.py +172 -0
  152. agentforge_graph-0.3.2/src/agentforge_graph/enrich/enricher.py +108 -0
  153. agentforge_graph-0.3.2/src/agentforge_graph/enrich/governs.py +173 -0
  154. agentforge_graph-0.3.2/src/agentforge_graph/enrich/governs_enricher.py +152 -0
  155. agentforge_graph-0.3.2/src/agentforge_graph/enrich/heuristics.py +224 -0
  156. agentforge_graph-0.3.2/src/agentforge_graph/enrich/judge.py +63 -0
  157. agentforge_graph-0.3.2/src/agentforge_graph/enrich/registry.py +133 -0
  158. agentforge_graph-0.3.2/src/agentforge_graph/enrich/report.py +60 -0
  159. agentforge_graph-0.3.2/src/agentforge_graph/enrich/summarizer.py +62 -0
  160. agentforge_graph-0.3.2/src/agentforge_graph/enrich/summary_enricher.py +211 -0
  161. agentforge_graph-0.3.2/src/agentforge_graph/enrich/taxonomy.py +38 -0
  162. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/__init__.py +29 -0
  163. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/base.py +75 -0
  164. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/detect.py +124 -0
  165. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/extractor.py +63 -0
  166. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/orm.py +93 -0
  167. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/packs/_js_ast.py +56 -0
  168. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/packs/_python_ast.py +157 -0
  169. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/packs/django/__init__.py +240 -0
  170. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/packs/django/models.scm +7 -0
  171. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/packs/express/__init__.py +133 -0
  172. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/packs/express/routes.scm +8 -0
  173. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/packs/fastapi/__init__.py +210 -0
  174. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/packs/fastapi/depends.scm +6 -0
  175. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/packs/fastapi/routes.scm +10 -0
  176. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/packs/flask/__init__.py +143 -0
  177. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/packs/flask/routes.scm +11 -0
  178. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/packs/nestjs/__init__.py +205 -0
  179. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/packs/nestjs/routes.scm +6 -0
  180. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/packs/spring/__init__.py +267 -0
  181. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/packs/spring/routes.scm +6 -0
  182. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/packs/sqlalchemy/__init__.py +250 -0
  183. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/packs/sqlalchemy/models.scm +7 -0
  184. agentforge_graph-0.3.2/src/agentforge_graph/frameworks/registry.py +44 -0
  185. agentforge_graph-0.3.2/src/agentforge_graph/ingest/__init__.py +30 -0
  186. agentforge_graph-0.3.2/src/agentforge_graph/ingest/codegraph.py +847 -0
  187. agentforge_graph-0.3.2/src/agentforge_graph/ingest/extractor.py +353 -0
  188. agentforge_graph-0.3.2/src/agentforge_graph/ingest/incremental/__init__.py +25 -0
  189. agentforge_graph-0.3.2/src/agentforge_graph/ingest/incremental/detect.py +118 -0
  190. agentforge_graph-0.3.2/src/agentforge_graph/ingest/incremental/dirty.py +61 -0
  191. agentforge_graph-0.3.2/src/agentforge_graph/ingest/incremental/indexer.py +218 -0
  192. agentforge_graph-0.3.2/src/agentforge_graph/ingest/incremental/meta.py +72 -0
  193. agentforge_graph-0.3.2/src/agentforge_graph/ingest/incremental/ports.py +39 -0
  194. agentforge_graph-0.3.2/src/agentforge_graph/ingest/pack.py +160 -0
  195. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/__init__.py +34 -0
  196. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/cpp/__init__.py +35 -0
  197. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/cpp/references.scm +15 -0
  198. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/cpp/structure.scm +49 -0
  199. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/csharp/__init__.py +35 -0
  200. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/csharp/references.scm +12 -0
  201. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/csharp/structure.scm +45 -0
  202. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/go/__init__.py +38 -0
  203. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/go/references.scm +12 -0
  204. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/go/structure.scm +64 -0
  205. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/java/__init__.py +35 -0
  206. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/java/references.scm +12 -0
  207. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/java/structure.scm +38 -0
  208. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/javascript/__init__.py +34 -0
  209. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/javascript/references.scm +11 -0
  210. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/javascript/structure.scm +166 -0
  211. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/php/__init__.py +35 -0
  212. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/php/references.scm +15 -0
  213. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/php/structure.scm +44 -0
  214. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/python/__init__.py +25 -0
  215. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/python/references.scm +14 -0
  216. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/python/structure.scm +57 -0
  217. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/ruby/__init__.py +37 -0
  218. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/ruby/references.scm +12 -0
  219. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/ruby/structure.scm +37 -0
  220. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/rust/__init__.py +39 -0
  221. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/rust/references.scm +12 -0
  222. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/rust/structure.scm +46 -0
  223. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/typescript/__init__.py +31 -0
  224. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/typescript/references.scm +11 -0
  225. agentforge_graph-0.3.2/src/agentforge_graph/ingest/packs/typescript/structure.scm +99 -0
  226. agentforge_graph-0.3.2/src/agentforge_graph/ingest/pipeline.py +134 -0
  227. agentforge_graph-0.3.2/src/agentforge_graph/ingest/report.py +84 -0
  228. agentforge_graph-0.3.2/src/agentforge_graph/ingest/resolver.py +467 -0
  229. agentforge_graph-0.3.2/src/agentforge_graph/ingest/source.py +79 -0
  230. agentforge_graph-0.3.2/src/agentforge_graph/knowledge/__init__.py +28 -0
  231. agentforge_graph-0.3.2/src/agentforge_graph/knowledge/adr.py +136 -0
  232. agentforge_graph-0.3.2/src/agentforge_graph/knowledge/commits.py +152 -0
  233. agentforge_graph-0.3.2/src/agentforge_graph/knowledge/ingest.py +312 -0
  234. agentforge_graph-0.3.2/src/agentforge_graph/knowledge/mentions.py +71 -0
  235. agentforge_graph-0.3.2/src/agentforge_graph/knowledge/report.py +32 -0
  236. agentforge_graph-0.3.2/src/agentforge_graph/main.py +21 -0
  237. agentforge_graph-0.3.2/src/agentforge_graph/providers.py +36 -0
  238. agentforge_graph-0.3.2/src/agentforge_graph/repomap/__init__.py +14 -0
  239. agentforge_graph-0.3.2/src/agentforge_graph/repomap/rank.py +161 -0
  240. agentforge_graph-0.3.2/src/agentforge_graph/repomap/render.py +55 -0
  241. agentforge_graph-0.3.2/src/agentforge_graph/repomap/repomap.py +66 -0
  242. agentforge_graph-0.3.2/src/agentforge_graph/retrieve/__init__.py +21 -0
  243. agentforge_graph-0.3.2/src/agentforge_graph/retrieve/pack.py +76 -0
  244. agentforge_graph-0.3.2/src/agentforge_graph/retrieve/rerank.py +251 -0
  245. agentforge_graph-0.3.2/src/agentforge_graph/retrieve/retriever.py +286 -0
  246. agentforge_graph-0.3.2/src/agentforge_graph/retrieve/scoring.py +36 -0
  247. agentforge_graph-0.3.2/src/agentforge_graph/serve/__init__.py +19 -0
  248. agentforge_graph-0.3.2/src/agentforge_graph/serve/engine.py +204 -0
  249. agentforge_graph-0.3.2/src/agentforge_graph/serve/http_runner.py +133 -0
  250. agentforge_graph-0.3.2/src/agentforge_graph/serve/server.py +110 -0
  251. agentforge_graph-0.3.2/src/agentforge_graph/serve/tools.py +307 -0
  252. agentforge_graph-0.3.2/src/agentforge_graph/store/__init__.py +32 -0
  253. agentforge_graph-0.3.2/src/agentforge_graph/store/_rowmap.py +102 -0
  254. agentforge_graph-0.3.2/src/agentforge_graph/store/errors.py +22 -0
  255. agentforge_graph-0.3.2/src/agentforge_graph/store/facade.py +89 -0
  256. agentforge_graph-0.3.2/src/agentforge_graph/store/kuzu_store.py +380 -0
  257. agentforge_graph-0.3.2/src/agentforge_graph/store/lance_store.py +146 -0
  258. agentforge_graph-0.3.2/src/agentforge_graph/store/neo4j_store.py +294 -0
  259. agentforge_graph-0.3.2/src/agentforge_graph/store/pgvector_store.py +170 -0
  260. agentforge_graph-0.3.2/src/agentforge_graph/store/registry.py +45 -0
  261. agentforge_graph-0.3.2/src/agentforge_graph/temporal/__init__.py +36 -0
  262. agentforge_graph-0.3.2/src/agentforge_graph/temporal/backfill.py +338 -0
  263. agentforge_graph-0.3.2/src/agentforge_graph/temporal/events.py +82 -0
  264. agentforge_graph-0.3.2/src/agentforge_graph/temporal/index.py +190 -0
  265. agentforge_graph-0.3.2/src/agentforge_graph/temporal/mining.py +190 -0
  266. agentforge_graph-0.3.2/src/agentforge_graph/temporal/recorder.py +114 -0
  267. agentforge_graph-0.3.2/src/agentforge_graph/temporal/store.py +282 -0
  268. agentforge_graph-0.3.2/tests/__init__.py +0 -0
  269. agentforge_graph-0.3.2/tests/chunking/__init__.py +0 -0
  270. agentforge_graph-0.3.2/tests/chunking/test_cast.py +124 -0
  271. agentforge_graph-0.3.2/tests/chunking/test_layering.py +37 -0
  272. agentforge_graph-0.3.2/tests/core/__init__.py +0 -0
  273. agentforge_graph-0.3.2/tests/core/test_conformance.py +204 -0
  274. agentforge_graph-0.3.2/tests/core/test_kinds.py +19 -0
  275. agentforge_graph-0.3.2/tests/core/test_layering.py +34 -0
  276. agentforge_graph-0.3.2/tests/core/test_models.py +62 -0
  277. agentforge_graph-0.3.2/tests/core/test_provenance.py +36 -0
  278. agentforge_graph-0.3.2/tests/core/test_symbols.py +68 -0
  279. agentforge_graph-0.3.2/tests/core/test_vector_contracts.py +24 -0
  280. agentforge_graph-0.3.2/tests/embed/__init__.py +0 -0
  281. agentforge_graph-0.3.2/tests/embed/test_bedrock.py +84 -0
  282. agentforge_graph-0.3.2/tests/embed/test_cli.py +42 -0
  283. agentforge_graph-0.3.2/tests/embed/test_fake.py +49 -0
  284. agentforge_graph-0.3.2/tests/embed/test_openai.py +79 -0
  285. agentforge_graph-0.3.2/tests/embed/test_openai_live.py +25 -0
  286. agentforge_graph-0.3.2/tests/embed/test_pipeline.py +94 -0
  287. agentforge_graph-0.3.2/tests/embed/test_registry.py +53 -0
  288. agentforge_graph-0.3.2/tests/enrich/__init__.py +0 -0
  289. agentforge_graph-0.3.2/tests/enrich/conftest.py +52 -0
  290. agentforge_graph-0.3.2/tests/enrich/test_anthropic.py +85 -0
  291. agentforge_graph-0.3.2/tests/enrich/test_anthropic_live.py +50 -0
  292. agentforge_graph-0.3.2/tests/enrich/test_bedrock.py +112 -0
  293. agentforge_graph-0.3.2/tests/enrich/test_bedrock_client.py +48 -0
  294. agentforge_graph-0.3.2/tests/enrich/test_claude.py +127 -0
  295. agentforge_graph-0.3.2/tests/enrich/test_enricher.py +112 -0
  296. agentforge_graph-0.3.2/tests/enrich/test_heuristics.py +134 -0
  297. agentforge_graph-0.3.2/tests/enrich/test_integration.py +103 -0
  298. agentforge_graph-0.3.2/tests/enrich/test_live.py +50 -0
  299. agentforge_graph-0.3.2/tests/enrich/test_registry.py +59 -0
  300. agentforge_graph-0.3.2/tests/enrich/test_summaries.py +116 -0
  301. agentforge_graph-0.3.2/tests/enrich/test_summaries_integration.py +108 -0
  302. agentforge_graph-0.3.2/tests/enrich/test_summaries_live.py +32 -0
  303. agentforge_graph-0.3.2/tests/frameworks/__init__.py +0 -0
  304. agentforge_graph-0.3.2/tests/frameworks/fixtures/django/models.py +38 -0
  305. agentforge_graph-0.3.2/tests/frameworks/fixtures/express/app.js +18 -0
  306. agentforge_graph-0.3.2/tests/frameworks/fixtures/fastapi/app.py +31 -0
  307. agentforge_graph-0.3.2/tests/frameworks/fixtures/fastapi/pyproject.toml +4 -0
  308. agentforge_graph-0.3.2/tests/frameworks/fixtures/fastapi/service.py +2 -0
  309. agentforge_graph-0.3.2/tests/frameworks/fixtures/flask/app.py +31 -0
  310. agentforge_graph-0.3.2/tests/frameworks/fixtures/nestjs/users.controller.ts +30 -0
  311. agentforge_graph-0.3.2/tests/frameworks/fixtures/spring/Helper.java +8 -0
  312. agentforge_graph-0.3.2/tests/frameworks/fixtures/spring/UserController.java +31 -0
  313. agentforge_graph-0.3.2/tests/frameworks/fixtures/sqlalchemy/models.py +32 -0
  314. agentforge_graph-0.3.2/tests/frameworks/test_contract.py +48 -0
  315. agentforge_graph-0.3.2/tests/frameworks/test_detect.py +97 -0
  316. agentforge_graph-0.3.2/tests/frameworks/test_django_integration.py +77 -0
  317. agentforge_graph-0.3.2/tests/frameworks/test_django_pack.py +130 -0
  318. agentforge_graph-0.3.2/tests/frameworks/test_express_integration.py +58 -0
  319. agentforge_graph-0.3.2/tests/frameworks/test_express_pack.py +86 -0
  320. agentforge_graph-0.3.2/tests/frameworks/test_fastapi_pack.py +151 -0
  321. agentforge_graph-0.3.2/tests/frameworks/test_flask_integration.py +51 -0
  322. agentforge_graph-0.3.2/tests/frameworks/test_flask_pack.py +93 -0
  323. agentforge_graph-0.3.2/tests/frameworks/test_integration.py +155 -0
  324. agentforge_graph-0.3.2/tests/frameworks/test_layering.py +30 -0
  325. agentforge_graph-0.3.2/tests/frameworks/test_nestjs_integration.py +57 -0
  326. agentforge_graph-0.3.2/tests/frameworks/test_nestjs_pack.py +92 -0
  327. agentforge_graph-0.3.2/tests/frameworks/test_spring_integration.py +63 -0
  328. agentforge_graph-0.3.2/tests/frameworks/test_spring_pack.py +96 -0
  329. agentforge_graph-0.3.2/tests/frameworks/test_sqlalchemy_integration.py +133 -0
  330. agentforge_graph-0.3.2/tests/frameworks/test_sqlalchemy_pack.py +125 -0
  331. agentforge_graph-0.3.2/tests/ingest/__init__.py +0 -0
  332. agentforge_graph-0.3.2/tests/ingest/conftest.py +22 -0
  333. agentforge_graph-0.3.2/tests/ingest/fixtures/javascript/mathutils.js +11 -0
  334. agentforge_graph-0.3.2/tests/ingest/fixtures/javascript/shapes.js +18 -0
  335. agentforge_graph-0.3.2/tests/ingest/fixtures/python/mathutils.py +11 -0
  336. agentforge_graph-0.3.2/tests/ingest/fixtures/python/shapes.py +18 -0
  337. agentforge_graph-0.3.2/tests/ingest/fixtures/typescript/mathutils.ts +11 -0
  338. agentforge_graph-0.3.2/tests/ingest/fixtures/typescript/shapes.ts +20 -0
  339. agentforge_graph-0.3.2/tests/ingest/incremental/__init__.py +0 -0
  340. agentforge_graph-0.3.2/tests/ingest/incremental/test_equivalence.py +154 -0
  341. agentforge_graph-0.3.2/tests/ingest/incremental/test_incremental.py +197 -0
  342. agentforge_graph-0.3.2/tests/ingest/test_aliased_imports.py +78 -0
  343. agentforge_graph-0.3.2/tests/ingest/test_cli.py +77 -0
  344. agentforge_graph-0.3.2/tests/ingest/test_codegraph.py +78 -0
  345. agentforge_graph-0.3.2/tests/ingest/test_cpp_pack.py +145 -0
  346. agentforge_graph-0.3.2/tests/ingest/test_csharp_pack.py +107 -0
  347. agentforge_graph-0.3.2/tests/ingest/test_docstrings.py +122 -0
  348. agentforge_graph-0.3.2/tests/ingest/test_export_member.py +117 -0
  349. agentforge_graph-0.3.2/tests/ingest/test_go_pack.py +212 -0
  350. agentforge_graph-0.3.2/tests/ingest/test_go_receiver_calls.py +79 -0
  351. agentforge_graph-0.3.2/tests/ingest/test_inherited_method_calls.py +97 -0
  352. agentforge_graph-0.3.2/tests/ingest/test_inherits.py +75 -0
  353. agentforge_graph-0.3.2/tests/ingest/test_inherits_packs.py +87 -0
  354. agentforge_graph-0.3.2/tests/ingest/test_java_pack.py +110 -0
  355. agentforge_graph-0.3.2/tests/ingest/test_javascript_pack.py +234 -0
  356. agentforge_graph-0.3.2/tests/ingest/test_jsdoc.py +86 -0
  357. agentforge_graph-0.3.2/tests/ingest/test_layering.py +31 -0
  358. agentforge_graph-0.3.2/tests/ingest/test_member_calls.py +108 -0
  359. agentforge_graph-0.3.2/tests/ingest/test_member_calls_packs.py +104 -0
  360. agentforge_graph-0.3.2/tests/ingest/test_module_member_calls.py +77 -0
  361. agentforge_graph-0.3.2/tests/ingest/test_pack.py +52 -0
  362. agentforge_graph-0.3.2/tests/ingest/test_php_pack.py +108 -0
  363. agentforge_graph-0.3.2/tests/ingest/test_pipeline.py +58 -0
  364. agentforge_graph-0.3.2/tests/ingest/test_python_extractor.py +127 -0
  365. agentforge_graph-0.3.2/tests/ingest/test_qualified_bases.py +104 -0
  366. agentforge_graph-0.3.2/tests/ingest/test_resolver.py +156 -0
  367. agentforge_graph-0.3.2/tests/ingest/test_ruby_pack.py +112 -0
  368. agentforge_graph-0.3.2/tests/ingest/test_rust_pack.py +112 -0
  369. agentforge_graph-0.3.2/tests/ingest/test_source.py +53 -0
  370. agentforge_graph-0.3.2/tests/ingest/test_src_layout.py +87 -0
  371. agentforge_graph-0.3.2/tests/ingest/test_typescript_pack.py +211 -0
  372. agentforge_graph-0.3.2/tests/knowledge/__init__.py +0 -0
  373. agentforge_graph-0.3.2/tests/knowledge/fixtures/repo/docs/adr/0007-old-payments.md +15 -0
  374. agentforge_graph-0.3.2/tests/knowledge/fixtures/repo/docs/adr/0012-idempotency.md +22 -0
  375. agentforge_graph-0.3.2/tests/knowledge/fixtures/repo/src/app/payments.py +7 -0
  376. agentforge_graph-0.3.2/tests/knowledge/test_adr_parser.py +54 -0
  377. agentforge_graph-0.3.2/tests/knowledge/test_commit_messages.py +102 -0
  378. agentforge_graph-0.3.2/tests/knowledge/test_discover.py +21 -0
  379. agentforge_graph-0.3.2/tests/knowledge/test_doc_embedding.py +122 -0
  380. agentforge_graph-0.3.2/tests/knowledge/test_doc_globs.py +85 -0
  381. agentforge_graph-0.3.2/tests/knowledge/test_infer_governs.py +120 -0
  382. agentforge_graph-0.3.2/tests/knowledge/test_integration.py +120 -0
  383. agentforge_graph-0.3.2/tests/knowledge/test_layering.py +31 -0
  384. agentforge_graph-0.3.2/tests/knowledge/test_mentions.py +51 -0
  385. agentforge_graph-0.3.2/tests/repomap/__init__.py +0 -0
  386. agentforge_graph-0.3.2/tests/repomap/test_cli.py +39 -0
  387. agentforge_graph-0.3.2/tests/repomap/test_edge_cases.py +53 -0
  388. agentforge_graph-0.3.2/tests/repomap/test_layering.py +29 -0
  389. agentforge_graph-0.3.2/tests/repomap/test_rank.py +131 -0
  390. agentforge_graph-0.3.2/tests/repomap/test_render.py +89 -0
  391. agentforge_graph-0.3.2/tests/retrieve/__init__.py +0 -0
  392. agentforge_graph-0.3.2/tests/retrieve/test_cli.py +53 -0
  393. agentforge_graph-0.3.2/tests/retrieve/test_doc_weight.py +89 -0
  394. agentforge_graph-0.3.2/tests/retrieve/test_filters.py +71 -0
  395. agentforge_graph-0.3.2/tests/retrieve/test_layering.py +30 -0
  396. agentforge_graph-0.3.2/tests/retrieve/test_live_relevance.py +35 -0
  397. agentforge_graph-0.3.2/tests/retrieve/test_pack_scoring.py +88 -0
  398. agentforge_graph-0.3.2/tests/retrieve/test_rerank.py +120 -0
  399. agentforge_graph-0.3.2/tests/retrieve/test_retriever.py +108 -0
  400. agentforge_graph-0.3.2/tests/retrieve/test_temporal_item.py +59 -0
  401. agentforge_graph-0.3.2/tests/serve/__init__.py +0 -0
  402. agentforge_graph-0.3.2/tests/serve/test_binding.py +64 -0
  403. agentforge_graph-0.3.2/tests/serve/test_cli.py +87 -0
  404. agentforge_graph-0.3.2/tests/serve/test_engine.py +59 -0
  405. agentforge_graph-0.3.2/tests/serve/test_guardrails.py +31 -0
  406. agentforge_graph-0.3.2/tests/serve/test_http_auth.py +150 -0
  407. agentforge_graph-0.3.2/tests/serve/test_live_agent.py +34 -0
  408. agentforge_graph-0.3.2/tests/serve/test_schemas.py +36 -0
  409. agentforge_graph-0.3.2/tests/serve/test_tools.py +109 -0
  410. agentforge_graph-0.3.2/tests/store/__init__.py +0 -0
  411. agentforge_graph-0.3.2/tests/store/test_facade.py +145 -0
  412. agentforge_graph-0.3.2/tests/store/test_kuzu_conformance.py +22 -0
  413. agentforge_graph-0.3.2/tests/store/test_kuzu_internals.py +185 -0
  414. agentforge_graph-0.3.2/tests/store/test_lance_conformance.py +91 -0
  415. agentforge_graph-0.3.2/tests/store/test_layering.py +39 -0
  416. agentforge_graph-0.3.2/tests/store/test_neo4j_conformance.py +57 -0
  417. agentforge_graph-0.3.2/tests/store/test_pgvector_conformance.py +70 -0
  418. agentforge_graph-0.3.2/tests/store/test_server_drivers.py +45 -0
  419. agentforge_graph-0.3.2/tests/temporal/__init__.py +0 -0
  420. agentforge_graph-0.3.2/tests/temporal/test_asof.py +135 -0
  421. agentforge_graph-0.3.2/tests/temporal/test_backfill.py +154 -0
  422. agentforge_graph-0.3.2/tests/temporal/test_denormalize.py +123 -0
  423. agentforge_graph-0.3.2/tests/temporal/test_index.py +112 -0
  424. agentforge_graph-0.3.2/tests/temporal/test_lifecycle.py +96 -0
  425. agentforge_graph-0.3.2/tests/temporal/test_mining.py +121 -0
  426. agentforge_graph-0.3.2/tests/temporal/test_read_e2e.py +134 -0
  427. agentforge_graph-0.3.2/tests/temporal/test_store.py +60 -0
  428. agentforge_graph-0.3.2/tests/test_cli_path_args.py +60 -0
  429. agentforge_graph-0.3.2/tests/test_config.py +53 -0
  430. agentforge_graph-0.3.2/tests/test_providers.py +43 -0
  431. agentforge_graph-0.3.2/uv.lock +2927 -0
@@ -0,0 +1,8 @@
1
+ # AgentForge scaffold answers — DO NOT EDIT MANUALLY.
2
+ # Used by `agentforge upgrade` to re-render managed template files.
3
+ _template_name: minimal
4
+ _template_version: 0.2.4
5
+ project_name: Agentforge Graph
6
+ project_slug: agentforge-graph
7
+ llm_provider: anthropic
8
+ description: An AgentForge agent (minimal).
@@ -0,0 +1,170 @@
1
+ .cursorrules:
2
+ forked: false
3
+ hash: 8a75b914bdf3cadbde5693497f0c1812a67ee01fde9e2166e97006a299b78962
4
+ source_module: template:minimal:_shared
5
+ source_version: 0.2.4
6
+ .env.example:
7
+ forked: false
8
+ hash: 45e023968759bfc3b10eee810fe2cde2033e8f80c998db5eda156b7ec1eccbe5
9
+ source_module: template:minimal
10
+ source_version: 0.2.4
11
+ .github/copilot-instructions.md:
12
+ forked: false
13
+ hash: 23c6e939d9d162837a85f0e3859f8e5808327aa77380d2a8e07f5b8c91d423e2
14
+ source_module: template:minimal:_shared
15
+ source_version: 0.2.4
16
+ .gitignore:
17
+ forked: false
18
+ hash: e2e64343502ba0a2753b9b76908c3861fcdcafa1f4052c9da02be123f3d7404a
19
+ source_module: template:minimal
20
+ source_version: 0.2.4
21
+ .gitkeep:
22
+ forked: false
23
+ hash: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b
24
+ source_module: template:minimal:_shared
25
+ source_version: 0.2.4
26
+ AGENTS.md:
27
+ forked: false
28
+ hash: c2f4dad7b549ce1f78d932e03c00159080caa1569a25be4a03f2e33d795fe8e2
29
+ source_module: template:minimal:_shared
30
+ source_version: 0.2.4
31
+ CLAUDE.md:
32
+ forked: false
33
+ hash: 9120f1c4a7740f3147e85b6010ea0c0cd12d09e886b496fd6d0b958e2239b469
34
+ source_module: template:minimal:_shared
35
+ source_version: 0.2.4
36
+ README.md:
37
+ forked: false
38
+ hash: c474ab3012ec420a13389cd5cbfeebc1d69ee35b4f9ad0c6fb84a0404d820303
39
+ source_module: template:minimal
40
+ source_version: 0.2.4
41
+ agentforge.yaml:
42
+ forked: false
43
+ hash: 3f971e1f7bac5a4d647849d5f6fcdf7b9cb7ad2e399247b38d66c726918e6d98
44
+ source_module: template:minimal
45
+ source_version: 0.2.4
46
+ docs/runbooks/01-set-up-new-agent.md:
47
+ forked: false
48
+ hash: 9767d5fccc9a78206289504337f26b3ebfd18a62c4ec68c75d5684e64f2ff0d3
49
+ source_module: template:minimal:_shared
50
+ source_version: 0.2.4
51
+ docs/runbooks/02-add-a-tool.md:
52
+ forked: false
53
+ hash: 54e75ed0aa463dcc143fbee577746b7d853ca19c7b31d4ed91557f2afb1b5f03
54
+ source_module: template:minimal:_shared
55
+ source_version: 0.2.4
56
+ docs/runbooks/03-add-a-pipeline-task.md:
57
+ forked: false
58
+ hash: e02a38df57668ab1873d35c83c666bc0b3e4f01f9836babe1eb780eb3a3e3d0b
59
+ source_module: template:minimal:_shared
60
+ source_version: 0.2.4
61
+ docs/runbooks/04-pick-reasoning-strategy.md:
62
+ forked: false
63
+ hash: abe78f8b53fe324f2b86c0a7c69822425c3e267ed232c83021baca0cf6eb804b
64
+ source_module: template:minimal:_shared
65
+ source_version: 0.2.4
66
+ docs/runbooks/05-write-prompts.md:
67
+ forked: false
68
+ hash: 248e76f52c90220d05d1bb2ad1976643d8e68896e5888e9da4b5ccdbf25ccaae
69
+ source_module: template:minimal:_shared
70
+ source_version: 0.2.4
71
+ docs/runbooks/06-test-your-agent.md:
72
+ forked: false
73
+ hash: 81af251a9a4ce45d3b80bf07ffd88173926363fa2e27d7c958279c3b760fdd9b
74
+ source_module: template:minimal:_shared
75
+ source_version: 0.2.4
76
+ docs/runbooks/07-debug-a-run.md:
77
+ forked: false
78
+ hash: 336052b797bc5f39d29ed754fec76e37c50511515a765fbe874cacb1dd06165f
79
+ source_module: template:minimal:_shared
80
+ source_version: 0.2.4
81
+ docs/runbooks/08-add-memory.md:
82
+ forked: false
83
+ hash: 34357485fbb087775cfd99e55500515795e7ff4207b1257b9b66b77b55e82ea5
84
+ source_module: template:minimal:_shared
85
+ source_version: 0.2.4
86
+ docs/runbooks/09-add-mcp.md:
87
+ forked: false
88
+ hash: 3e945da99f484716937036b6dd4686a3f84b3784c877e3ef01166ea1b7399cb2
89
+ source_module: template:minimal:_shared
90
+ source_version: 0.2.4
91
+ docs/runbooks/10-add-evaluators.md:
92
+ forked: false
93
+ hash: acfbdccaaad2ffb9c6fdd7a99de9a42a5fac365585d5cb7fd3e8230ee77bbf26
94
+ source_module: template:minimal:_shared
95
+ source_version: 0.2.4
96
+ docs/runbooks/11-add-safety-guardrails.md:
97
+ forked: false
98
+ hash: c52053398767e28ec3d6c1e334a7b8fdf9359276ab3248ebdda956d0ec610daf
99
+ source_module: template:minimal:_shared
100
+ source_version: 0.2.4
101
+ docs/runbooks/12-add-observability.md:
102
+ forked: false
103
+ hash: b9ce79b8f258b393fd9fc5d9aa4f453503399b3415ac893af3cfd158271302ec
104
+ source_module: template:minimal:_shared
105
+ source_version: 0.2.4
106
+ docs/runbooks/13-configure-multi-provider.md:
107
+ forked: false
108
+ hash: 3587a253001bab61486c59c6f40e29a60b26c0ee0deed2167fa62e6de9cb04f7
109
+ source_module: template:minimal:_shared
110
+ source_version: 0.2.4
111
+ docs/runbooks/14-deploy-your-agent.md:
112
+ forked: false
113
+ hash: e036df7d4cf3f2d144fb8dd05b747539483b507340fc3ea474c4d1e016424b29
114
+ source_module: template:minimal:_shared
115
+ source_version: 0.2.4
116
+ docs/runbooks/15-upgrade-your-agent.md:
117
+ forked: false
118
+ hash: 81034a5ee4c294ab12d356461a75f065cb6c2cb42dcc23cc71ce05d0b11098ee
119
+ source_module: template:minimal:_shared
120
+ source_version: 0.2.4
121
+ docs/runbooks/16-configuration-reference.md:
122
+ forked: false
123
+ hash: e2cf5067d2fb8ef6ba9e3c1f0f7a39f63082b9685ee687385a0bf2d115b014b6
124
+ source_module: template:minimal:_shared
125
+ source_version: 0.2.4
126
+ docs/runbooks/17-add-reranker.md:
127
+ forked: false
128
+ hash: 2718f76d448ecbe0831c09bcd8431e914b911d487ef50dbb09a4c06bc7bfc36b
129
+ source_module: template:minimal:_shared
130
+ source_version: 0.2.4
131
+ docs/runbooks/18-add-hybrid-search.md:
132
+ forked: false
133
+ hash: 4f5a8eabfd560ef02552ff24ce9f75288f87a096750cb04e6eb457989e954ba1
134
+ source_module: template:minimal:_shared
135
+ source_version: 0.2.4
136
+ docs/runbooks/19-add-graphrag.md:
137
+ forked: false
138
+ hash: 39504e95e5eee24c3e533ceaacbb1479406c36d83969d53aca2fe1d06fb69a8f
139
+ source_module: template:minimal:_shared
140
+ source_version: 0.2.4
141
+ docs/runbooks/20-apply-schema-migrations.md:
142
+ forked: false
143
+ hash: eef758aedb2670f7cbdbb1222b06f8f41e4a786852f344199bf1f5ec63ce2f24
144
+ source_module: template:minimal:_shared
145
+ source_version: 0.2.4
146
+ docs/runbooks/21-use-streaming-guardrails.md:
147
+ forked: false
148
+ hash: 66b694aabc6e09a4c599d4e347044f8b21ce0c24feaea3157349a667e428d518
149
+ source_module: template:minimal:_shared
150
+ source_version: 0.2.4
151
+ docs/runbooks/README.md:
152
+ forked: false
153
+ hash: baeef86ba55cd2185c5ae2fa3b070771dd90e6e19fa9826472ea5f7772b7b249
154
+ source_module: template:minimal:_shared
155
+ source_version: 0.2.4
156
+ pyproject.toml:
157
+ forked: false
158
+ hash: 6f314576dc1d2b62ea17fe94d39b0a69d98bda996c89685ee084539312387d95
159
+ source_module: template:minimal
160
+ source_version: 0.2.4
161
+ src/agentforge_graph/__init__.py:
162
+ forked: false
163
+ hash: b6f9eb202d197dad3ae57d0defe4396b9e14ff0b56a7949cf760492c452a5401
164
+ source_module: template:minimal
165
+ source_version: 0.2.4
166
+ src/agentforge_graph/main.py:
167
+ forked: false
168
+ hash: c05d490b5a1c7dd8ab3bda75558a7083cf22c8676f872476cb50c087edfbc020
169
+ source_module: template:minimal
170
+ source_version: 0.2.4
@@ -0,0 +1,54 @@
1
+ # CLAUDE.md — agentforge-graph
2
+
3
+ > Entry point for AI assistants working on **agentforge-graph**, a
4
+ > Code Knowledge Graph (CKG) engine + agent toolset built on the
5
+ > AgentForge framework (agentforge-py 0.2.4). This is an **agent
6
+ > project** (it consumes the framework), not a framework project.
7
+
8
+ ## Read first, in order
9
+
10
+ 1. [`../../../AGENTS.md`](../../../AGENTS.md) — workspace meta rules.
11
+ 2. [`../../../.claude/development-pipeline.md`](../../../.claude/development-pipeline.md)
12
+ — the abstract per-feature workflow every project follows
13
+ (pick → branch → analyse → design → implement → test → commit → PR
14
+ → merge), and the `.claude/state/` format.
15
+ 3. `.claude/state/current.md` — active feature, branch, what's done,
16
+ what's pending. **Local-only, git-ignored**; may be absent on a
17
+ fresh clone — create it when you start tracking work.
18
+ 4. [`../docs/features/TRACKER.md`](../docs/features/TRACKER.md) —
19
+ status board + dependency DAG; tells you what's ready to pick.
20
+ 5. [`../docs/features/README.md`](../docs/features/README.md) +
21
+ the active [`../docs/features/feat-NNN-*.md`](../docs/features/) spec.
22
+ 6. [`../docs/design/`](../docs/design/) — **one design doc per feature**
23
+ (`design-NNN-slug.md` mirrors `feat-NNN`). The *how* (file layout,
24
+ exact types, resolved decisions, chunk plan); written and approved
25
+ in the design stage before any code.
26
+ 7. [`../docs/adr/`](../docs/adr/) — the 9 architecture decisions.
27
+ 7. [`../docs/open-source-ckg-research.md`](../docs/open-source-ckg-research.md)
28
+ — the research that motivates the design.
29
+
30
+ ## Project-specific notes
31
+
32
+ - **Tooling is `uv`, not pip.** Install: `uv sync` (base) /
33
+ `uv sync --extra engine`. Run the framework CLI as
34
+ `uv run agentforge …`, the agent CLI as `uv run ckg …`.
35
+ `agentforge add module` does **not** work here (it shells out to
36
+ `pip`, absent in uv venvs) — declare modules in `pyproject.toml`
37
+ and `uv sync` instead.
38
+ - **Two config files, on purpose.** `agentforge.yaml` is framework
39
+ config (strict validator — no unknown keys). `ckg.yaml` is this
40
+ agent's own engine config (store/ingest/chunking/embed/retrieve/
41
+ serve), read by the `agentforge_graph` package.
42
+ - **Framework learnings go in `docs/framework/`** — local-only,
43
+ git-ignored. Log any framework bug/hack/workaround/missing-feature
44
+ there as you hit it (baseline: agentforge-py 0.2.4).
45
+ - **Reuse framework rails, don't reinvent.** `Tool` ABC + MCP
46
+ (feat-008), `Agent` + `budget_usd` (feat-010/012 enrichment),
47
+ reranker (feat-006). Keep the deterministic engine core
48
+ (`core`/`ingest`/`store`/`retrieve`) free of `agentforge` imports
49
+ (ADR-0001).
50
+ - **Feature numbering is fixed** by `docs/features/`. Branch
51
+ `feat/NNN-slug` must match an existing spec filename — never invent
52
+ numbers. One feature = one branch = one PR.
53
+ - Use `Read`/`Edit`/`Glob`/`Grep`, not Bash `cat`/`find`/`sed`.
54
+ Never `--no-verify` without explicit authorization.
@@ -0,0 +1,7 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(uv run *)"
5
+ ]
6
+ }
7
+ }
@@ -0,0 +1,19 @@
1
+ # Coding standards — agentforge-graph
2
+
3
+ - **Python 3.13**, `from __future__ import annotations` in every module.
4
+ - **Type everything.** `mypy --strict` is the gate (`uv run mypy`).
5
+ No untyped defs, no implicit `Any` in the engine core.
6
+ - **Value types are Pydantic models**, validated at construction —
7
+ that's where ADR-0004 (provenance) and ADR-0003 (symbol-id) rules are
8
+ enforced. Frozen where the value is an identity (`Provenance`,
9
+ `SourceFile`, `ParsedSymbol`).
10
+ - **Layering (ADR-0001):** the deterministic engine core
11
+ (`core`/`ingest`/`store`/`retrieve`) must not import `agentforge`.
12
+ Enforced by a unit test. Framework rails are used only at the
13
+ serving/enrichment edges.
14
+ - **Lint/format:** `ruff` (`uv run ruff check` + `ruff format`),
15
+ line length 100.
16
+ - **No `print`** in library code; surface results via return values /
17
+ logging.
18
+ - Public surface of a package is its `__init__.__all__`; internal module
19
+ moves must not break that surface.
@@ -0,0 +1,18 @@
1
+ # Testing standards — agentforge-graph
2
+
3
+ - **Runner:** `pytest`, async via `pytest-asyncio` (`asyncio_mode =
4
+ auto` — no per-test marker needed). Run: `uv run pytest`.
5
+ - **Coverage floor: 90%** on `agentforge_graph.core` (and each
6
+ feature's package as it lands). Enforced by `--cov-fail-under=90`.
7
+ - **Conformance suites** (`core/conformance.py`) are the contract tests:
8
+ every `GraphStore` adapter (feat-003) and `Extractor` (feat-002/011)
9
+ subclasses the matching base class and provides its fixture. A new
10
+ backend is "done" when the shared suite passes against it.
11
+ - **Property/determinism tests** for anything identity-related: symbol
12
+ IDs round-trip and are order-independent; extraction is deterministic
13
+ (same content → same subgraph).
14
+ - **No network / no model calls in unit tests.** LLM-touching paths
15
+ (feat-010/012) use recorded/mocked responses; live tests are
16
+ env-gated and excluded from the default run.
17
+ - Test fixtures use builders (`make_sample_subgraph`), not copy-pasted
18
+ literals.
@@ -0,0 +1,12 @@
1
+ See AGENTS.md for project conventions. AGENTS.md is the canonical
2
+ source. This file exists so Cursor's native .cursorrules discovery
3
+ keeps working.
4
+
5
+ Cursor-specific rules can be added below this marker:
6
+
7
+ <!-- agentforge:end-managed -->
8
+
9
+ <!-- agentforge:custom -->
10
+ <!-- Cursor-specific rules go here. This section survives
11
+ `agentforge upgrade`. -->
12
+ <!-- agentforge:end-custom -->
@@ -0,0 +1,5 @@
1
+ # Environment variables for My Agent.
2
+ # Copy this file to `.env` and fill in real values.
3
+
4
+ ANTHROPIC_API_KEY=
5
+
@@ -0,0 +1,14 @@
1
+ <!-- AGENTFORGE-MANAGED: template:minimal@0.2.4 hash:23c6e939d9d1 -->
2
+ See [AGENTS.md](../AGENTS.md) for project conventions. AGENTS.md
3
+ is the canonical source for AI-assistant instructions. This file
4
+ exists so GitHub Copilot's native
5
+ `.github/copilot-instructions.md` discovery keeps working.
6
+
7
+ Copilot-specific instructions can be added below this marker:
8
+
9
+ <!-- agentforge:end-managed -->
10
+
11
+ <!-- agentforge:custom -->
12
+ <!-- Copilot-specific instructions go here. This section survives
13
+ `agentforge upgrade`. -->
14
+ <!-- agentforge:end-custom -->
@@ -0,0 +1,94 @@
1
+ name: CI
2
+
3
+ # Runs the exact local gate on every PR to main: ruff lint + format,
4
+ # mypy --strict, and pytest with a >=90% coverage floor. The coverage threshold
5
+ # is enforced by `--cov-fail-under=90` in pyproject's [tool.pytest.ini_options];
6
+ # CI just runs `pytest`, so local and CI agree. Only on PRs — the PR gate already
7
+ # validated the merge result, so re-running on push to main is redundant.
8
+
9
+ on:
10
+ pull_request:
11
+ branches: [main]
12
+
13
+ concurrency:
14
+ group: ci-${{ github.ref }}
15
+ cancel-in-progress: true
16
+
17
+ # Opt JS actions into Node 24 now (Node 20 is force-removed from runners
18
+ # 2026-06-16). Drop this once the actions ship Node-24-native majors.
19
+ env:
20
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
21
+
22
+ permissions:
23
+ contents: read
24
+
25
+ jobs:
26
+ validate:
27
+ name: lint · type · test (>=90% cov)
28
+ runs-on: ubuntu-latest
29
+ steps:
30
+ - uses: actions/checkout@v4
31
+
32
+ - name: Install uv
33
+ uses: astral-sh/setup-uv@v6
34
+ with:
35
+ enable-cache: true
36
+
37
+ - name: Sync dependencies (base + dev + engine)
38
+ # feat-003 is the first feature needing native wheels (kuzu, lancedb)
39
+ # from the `engine` extra; tree-sitter (feat-002) rides the same extra.
40
+ run: uv sync --extra dev --extra engine
41
+
42
+ - name: Ruff lint
43
+ run: uv run ruff check
44
+
45
+ - name: Ruff format check
46
+ run: uv run ruff format --check
47
+
48
+ - name: Mypy (strict)
49
+ run: uv run mypy
50
+
51
+ - name: Tests + coverage (fails under 90%)
52
+ run: uv run pytest
53
+
54
+ # ENH-004: run the server-backend conformance against real DBs (public images,
55
+ # no secrets), so Neo4j/pgvector are verified in CI — not just locally. Separate
56
+ # job so a DB hiccup can't fail the core gate; both must pass to merge.
57
+ server-backends:
58
+ name: server backends (neo4j + pgvector conformance)
59
+ runs-on: ubuntu-latest
60
+ services:
61
+ neo4j:
62
+ image: neo4j:5
63
+ env:
64
+ NEO4J_AUTH: neo4j/ckgckgckg
65
+ ports: ["7687:7687"]
66
+ options: >-
67
+ --health-cmd "cypher-shell -u neo4j -p ckgckgckg 'RETURN 1' || exit 1"
68
+ --health-interval 10s --health-timeout 5s --health-retries 20
69
+ postgres:
70
+ image: pgvector/pgvector:pg16
71
+ env:
72
+ POSTGRES_PASSWORD: ckg
73
+ POSTGRES_DB: ckg
74
+ ports: ["5432:5432"]
75
+ options: >-
76
+ --health-cmd "pg_isready -U postgres" --health-interval 5s
77
+ --health-timeout 5s --health-retries 20
78
+ steps:
79
+ - uses: actions/checkout@v4
80
+ - name: Install uv
81
+ uses: astral-sh/setup-uv@v6
82
+ with:
83
+ enable-cache: true
84
+ - name: Sync dependencies (+ neo4j + pgvector extras)
85
+ run: uv sync --extra dev --extra engine --extra neo4j --extra pgvector
86
+ - name: Server-backend conformance
87
+ env:
88
+ CKG_NEO4J_URI: bolt://localhost:7687
89
+ CKG_NEO4J_PASSWORD: ckgckgckg
90
+ CKG_PGVECTOR_DSN: postgresql://postgres:ckg@localhost:5432/ckg
91
+ run: >-
92
+ uv run pytest --no-cov
93
+ tests/store/test_neo4j_conformance.py
94
+ tests/store/test_pgvector_conformance.py
@@ -0,0 +1,27 @@
1
+ .env
2
+ .venv/
3
+ __pycache__/
4
+ *.pyc
5
+ .pytest_cache/
6
+ .ruff_cache/
7
+ .mypy_cache/
8
+ .coverage
9
+ htmlcov/
10
+
11
+ # CKG index artifacts (derivable; never committed — ADR-0006)
12
+ .ckg/
13
+
14
+ # Local-only framework learnings (issues, hacks, upgrade notes)
15
+ docs/framework/
16
+
17
+ # AI-assistant per-session working state (local-only, not published)
18
+ .claude/state/
19
+
20
+ # macOS
21
+ .DS_Store
22
+
23
+ # Keep .agentforge-state checked in — it tracks framework managed
24
+ # files for upgrade.
25
+
26
+ # build artifacts (uv build / hatchling)
27
+ /dist/
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,29 @@
1
+ # Pre-commit gate for agentforge-graph. Run manually / in CI:
2
+ # uv run pre-commit run --all-files
3
+ # (Local git-hook install is optional; chunked commits validate via the
4
+ # same tools run directly: uv run ruff check / mypy / pytest.)
5
+ repos:
6
+ - repo: local
7
+ hooks:
8
+ - id: ruff-format
9
+ name: ruff format
10
+ entry: uv run ruff format
11
+ language: system
12
+ types: [python]
13
+ - id: ruff-check
14
+ name: ruff check
15
+ entry: uv run ruff check --fix
16
+ language: system
17
+ types: [python]
18
+ - id: mypy
19
+ name: mypy --strict (src)
20
+ entry: uv run mypy
21
+ language: system
22
+ pass_filenames: false
23
+ types: [python]
24
+ - id: pytest
25
+ name: pytest + coverage
26
+ entry: uv run pytest
27
+ language: system
28
+ pass_filenames: false
29
+ types: [python]
@@ -0,0 +1,166 @@
1
+ <!-- AGENTFORGE-MANAGED: template:minimal@0.2.4 hash:c2f4dad7b549 -->
2
+ # AgentForge agent — AI assistant instructions
3
+
4
+ This project is built on **AgentForge 0.2.4**. Use
5
+ these rules when suggesting changes. The file is read by Claude
6
+ Code, Cursor, Aider, and any tool following the
7
+ [AGENTS.md convention](https://agents.md).
8
+
9
+ ## Project shape (you must respect this)
10
+
11
+ - Framework version: `0.2.4`
12
+ - Template: `minimal`
13
+ - Project slug: `agentforge-graph`
14
+ - LLM provider: `anthropic`
15
+
16
+ ## File ownership rules
17
+
18
+ - Files starting with `AGENTFORGE-MANAGED:` are owned by the
19
+ framework. Do not edit. Suggest changes to YAML config or
20
+ developer-owned files instead.
21
+ - Files starting with `AGENTFORGE-FORKED:` were customised by the
22
+ developer. Edit normally; do not restore the marker.
23
+ - Files with no marker are developer-owned. Edit normally.
24
+ - Markdown documents may carry a `<!-- agentforge:end-managed -->`
25
+ marker. Everything above belongs to the framework; everything
26
+ below is the developer's custom section and survives upgrades.
27
+
28
+ ## Architecture invariants
29
+
30
+ - **Tools** — use the `@tool` decorator on a typed function, OR
31
+ subclass `Tool`. Type hints drive the input schema; do not
32
+ hand-write JSON schemas.
33
+ - **Reasoning loop** — do not edit. Configure via
34
+ `agentforge.yaml > agent.strategy`.
35
+ - **LLM clients** — do not import vendor SDKs directly. Use
36
+ `agent.providers["..."]` or pass `model="<provider>:<model_id>"`.
37
+ - **Memory** — do not write SQL directly. Use `agent.memory.put`
38
+ / `.get` / `.query`.
39
+ - **Costs** — do not bypass `BudgetPolicy`. Every LLM call is
40
+ checked. Bypassing it is a P3 (cost-safety) violation.
41
+ - **Run id** — do not invent your own correlation id. Use
42
+ `current_run().run_id` from `agentforge_core.production.run_context`.
43
+ - **Guardrails** — input / output / tool-gate validators live in
44
+ `agentforge.guardrails`. Custom validators implement the locked
45
+ ABCs in `agentforge_core.contracts.guardrails`.
46
+
47
+ ## How to add common things
48
+
49
+ Open the runbook for the full step-by-step. Each runbook lives at
50
+ `docs/runbooks/NN-<topic>.md` and is upgrade-safe (the framework
51
+ maintains the managed section).
52
+
53
+ | Task | Runbook |
54
+ |---|---|
55
+ | Set up a fresh agent | `docs/runbooks/01-set-up-new-agent.md` |
56
+ | Add a tool | `docs/runbooks/02-add-a-tool.md` |
57
+ | Add a pipeline task | `docs/runbooks/03-add-a-pipeline-task.md` |
58
+ | Pick a reasoning strategy | `docs/runbooks/04-pick-reasoning-strategy.md` |
59
+ | Write prompts | `docs/runbooks/05-write-prompts.md` |
60
+ | Test your agent | `docs/runbooks/06-test-your-agent.md` |
61
+ | Debug a run | `docs/runbooks/07-debug-a-run.md` |
62
+ | Add memory / persistence | `docs/runbooks/08-add-memory.md` |
63
+ | Add MCP servers | `docs/runbooks/09-add-mcp.md` |
64
+ | Add evaluators | `docs/runbooks/10-add-evaluators.md` |
65
+ | Add safety guardrails | `docs/runbooks/11-add-safety-guardrails.md` |
66
+ | Add observability | `docs/runbooks/12-add-observability.md` |
67
+ | Configure multi-provider | `docs/runbooks/13-configure-multi-provider.md` |
68
+ | Deploy your agent | `docs/runbooks/14-deploy-your-agent.md` |
69
+ | Upgrade your agent | `docs/runbooks/15-upgrade-your-agent.md` |
70
+ | Configuration reference | `docs/runbooks/16-configuration-reference.md` |
71
+ | Add a reranker | `docs/runbooks/17-add-reranker.md` |
72
+ | Add hybrid search (BM25 + vector) | `docs/runbooks/18-add-hybrid-search.md` |
73
+ | Add GraphRAG (graph-augmented retrieval) | `docs/runbooks/19-add-graphrag.md` |
74
+ | Apply schema migrations | `docs/runbooks/20-apply-schema-migrations.md` |
75
+ | Use streaming guardrails (sentence-window) | `docs/runbooks/21-use-streaming-guardrails.md` |
76
+
77
+ ## Anti-patterns (do not suggest these)
78
+
79
+ - **Other-framework idioms** (chain/runnable/pipe abstractions from a
80
+ different agent framework) — wrong framework. Use AgentForge's
81
+ `Agent` + `@tool` + strategy
82
+ composition instead.
83
+ - **Hand-rolling JSON schemas for tools** — use type hints on a
84
+ `@tool`-decorated function and the schema is derived.
85
+ - **Storing API keys in `agentforge.yaml` literals** — use
86
+ `${ENV_VAR}` interpolation; secrets live in `.env` (gitignored).
87
+ - **Catching exceptions inside tool code to "make the agent more
88
+ robust"** — let them surface; the framework records them as
89
+ observations and the LLM recovers naturally.
90
+ - **Adding a wrapper around `Agent.run()` to add logging** — the
91
+ framework already logs; install a custom hook (runbook 12).
92
+ - **Writing SQL directly against the memory backend** — use
93
+ `agent.memory.put / .get / .query`; SQL bypasses the contract
94
+ and breaks driver swaps.
95
+ - **Running expensive code outside `BudgetPolicy`** — every
96
+ external call (LLM, tool, retriever) should respect the run's
97
+ budget.
98
+
99
+ ## Pre-commit checks (run these before suggesting a commit)
100
+
101
+ ```bash
102
+ agentforge config validate
103
+ agentforge status # no managed file should be drifted
104
+ pytest -q
105
+ ruff check
106
+ ```
107
+
108
+ ## Where to find the framework's truth
109
+
110
+ - Locked ABCs: `agentforge_core/contracts/*.py`
111
+ - Default config schema: `agentforge_core/config/schema.py`
112
+ - Built-in evaluators / guardrails / tools: `agentforge/*/`
113
+ - Spec for any feature: `docs/features/feat-NNN-*.md` in the
114
+ framework repo
115
+
116
+ When in doubt, prefer the framework's locked types over inventing
117
+ new shapes. Suggesting an `Agent` subclass or a new ABC is almost
118
+ always wrong — the framework is composed from named modules.
119
+
120
+ <!-- agentforge:end-managed -->
121
+
122
+ <!-- agentforge:custom -->
123
+
124
+ ## agentforge-graph — project-specific AI guidance
125
+
126
+ This project is a **Code Knowledge Graph engine** (not a typical agent). Before
127
+ changing a subsystem, read [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) (the
128
+ map), [`CONTRIBUTING.md`](CONTRIBUTING.md) (playbooks), and the relevant
129
+ [`docs/design/`](docs/design/) doc.
130
+
131
+ **Invariants you must respect:**
132
+
133
+ - **Layering (ADR-0001):** the deterministic engine — `core`, `config`,
134
+ `ingest`, `store`, `chunking`, `embed`, `retrieve`, `repomap`, `frameworks`,
135
+ `knowledge` — **must not import `agentforge`**. There's a layering test that
136
+ enforces it. Only `serve` and `enrich` may import the framework.
137
+ - **Provenance (ADR-0004):** every `Node`/`Edge` carries `Provenance`
138
+ (`parsed | resolved | llm | manual`, + extractor, commit, confidence). LLM
139
+ facts use `Provenance.llm(...)` with a confidence and are opt-out-able. Never
140
+ emit an unattributed fact.
141
+ - **Stable ids (ADR-0003):** node ids are `SymbolID` strings derived from
142
+ `(lang, repo, path, descriptor)` — deterministic, no counters. Use
143
+ `SymbolID.for_symbol` / `.parse`, never invent ids.
144
+ - **Locked kinds (ADR-0005):** `NodeKind`/`EdgeKind` are fixed in
145
+ `core/kinds.py`. Don't add kinds casually; producers for reserved kinds ship
146
+ in later features.
147
+ - **Conservative resolution:** create a cross-file edge only on an unambiguous
148
+ match; count the rest, never guess.
149
+ - **Injectable models:** never hard-call a model. Implement/inject `Embedder`,
150
+ `PatternJudge`, or `Summarizer`. CI uses the deterministic fakes — keep tests
151
+ model-free; live tests are env-gated (`CKG_LIVE_BEDROCK` / `CKG_LIVE_AGENT`).
152
+ - **Budget rails:** LLM enrichment runs under `BudgetPolicy`; account cost
153
+ per-batch and persist partial progress on a trip. Don't bypass it.
154
+
155
+ **Tooling & workflow:** use `uv` (`uv run ckg …`), not pip. Use `Read`/`Edit`/
156
+ `Grep`, not Bash `cat`/`find`/`sed`. One feature/bug/enh = one branch = one PR;
157
+ design-doc-first for features. Gate every change on
158
+ `pytest + mypy --strict + ruff`. Log AgentForge/Kuzu surprises in
159
+ `docs/framework/` (local-only).
160
+
161
+ **Dogfood:** `ckg index . && ckg serve-mcp --repo .` exposes this repo's own
162
+ graph (decisions, routes, impact, summaries) — useful grounded context for an
163
+ assistant working here.
164
+
165
+ <!-- agentforge:end-custom -->
166
+