codegraph-brain 0.23.3__tar.gz → 0.24.0__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 (376) hide show
  1. codegraph_brain-0.24.0/.github/test-count-baseline +1 -0
  2. codegraph_brain-0.24.0/.release-please-manifest.json +3 -0
  3. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/CHANGELOG.md +24 -0
  4. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/PKG-INFO +2 -1
  5. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/README.md +1 -0
  6. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/architecture/HOW_IT_WORKS.md +2 -2
  7. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/architecture/diagrams/pipeline_flow.mermaid +1 -1
  8. codegraph_brain-0.24.0/docs/how-to/CLI_USAGE.md +184 -0
  9. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/how-to/MCP_REFERENCE.md +46 -10
  10. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/plugin/skills/cgis/SKILL.md +2 -1
  11. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/pyproject.toml +1 -1
  12. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/check_pytest_raises.py +0 -1
  13. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/server.json +2 -2
  14. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/api/mcp_server.py +100 -18
  15. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/cli.py +64 -0
  16. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/python_extractor.py +48 -33
  17. codegraph_brain-0.24.0/src/cgis/query/analysis/overview.py +87 -0
  18. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/storage/sqlite_store.py +85 -10
  19. codegraph_brain-0.24.0/tests/self_parsing/test_overview.py +74 -0
  20. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/test_receiver_resolution.py +7 -1
  21. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_martian_script.py +4 -1
  22. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_mcp_server.py +174 -0
  23. codegraph_brain-0.24.0/tests/unit/test_overview.py +188 -0
  24. codegraph_brain-0.24.0/tests/unit/test_overview_tools.py +149 -0
  25. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_python_extractor.py +14 -0
  26. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/uv.lock +1 -1
  27. codegraph_brain-0.23.3/.github/test-count-baseline +0 -1
  28. codegraph_brain-0.23.3/.release-please-manifest.json +0 -3
  29. codegraph_brain-0.23.3/docs/how-to/CLI_USAGE.md +0 -148
  30. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.claude-plugin/marketplace.json +0 -0
  31. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.gitattributes +0 -0
  32. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.github/workflows/autodoc.yml +0 -0
  33. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.github/workflows/ci.yml +0 -0
  34. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.github/workflows/guardian.yml +0 -0
  35. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.github/workflows/mcp-registry.yml +0 -0
  36. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.github/workflows/pr-title.yml +0 -0
  37. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.github/workflows/release-please.yml +0 -0
  38. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.gitignore +0 -0
  39. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.pre-commit-config.yaml +0 -0
  40. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.python-version +0 -0
  41. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/CLAUDE.md +0 -0
  42. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/CONTRIBUTING.md +0 -0
  43. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/LICENSE +0 -0
  44. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/Makefile +0 -0
  45. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/PRIVACY.md +0 -0
  46. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/CURATION.md +0 -0
  47. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/calibration.jsonl +0 -0
  48. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/experiments/246-cross-vendor/README.md +0 -0
  49. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/experiments/246-cross-vendor/free-nemotron-quota-cutoff.jsonl +0 -0
  50. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/experiments/401-evidence/README.md +0 -0
  51. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/experiments/401-evidence/pr-399-control-rows.jsonl +0 -0
  52. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/experiments/401-evidence/pr-399-recording.json +0 -0
  53. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/experiments/401-evidence/pr-399-treatment-rows.jsonl +0 -0
  54. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/experiments/407-no-checker-appeal/README.md +0 -0
  55. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/experiments/407-no-checker-appeal/pr-399-control-directive-rows.jsonl +0 -0
  56. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/experiments/407-no-checker-appeal/pr-399-control-prohibition-rows.jsonl +0 -0
  57. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/pr-122.yaml +0 -0
  58. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/pr-140.yaml +0 -0
  59. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/pr-141.yaml +0 -0
  60. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/pr-142.yaml +0 -0
  61. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/pr-143.yaml +0 -0
  62. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/pr-144.yaml +0 -0
  63. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/pr-278.yaml +0 -0
  64. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/pr-313.yaml +0 -0
  65. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/results.jsonl +0 -0
  66. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian/README.md +0 -0
  67. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian/cal_dot_com.json +0 -0
  68. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian/discourse.json +0 -0
  69. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian/grafana.json +0 -0
  70. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian/keycloak.json +0 -0
  71. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian/sentry.json +0 -0
  72. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-judged.jsonl +0 -0
  73. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-p3-judged-run1.jsonl +0 -0
  74. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-p3-judged-run1.jsonl.corrupted-backup +0 -0
  75. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-p3-run1.jsonl +0 -0
  76. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-p3-run2.jsonl +0 -0
  77. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-p3-run3.jsonl +0 -0
  78. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-plan.json +0 -0
  79. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-repeat-judged.jsonl +0 -0
  80. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-repeat-reviews.jsonl +0 -0
  81. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-reviews.jsonl +0 -0
  82. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/data/.gitkeep +0 -0
  83. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/AUDIT.md +0 -0
  84. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/CASE_STUDY.md +0 -0
  85. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/GUARDIAN_LOCAL_BENCH.md +0 -0
  86. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/GUARDIAN_REMOTE_OLLAMA.md +0 -0
  87. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/architecture/ONTOLOGY.md +0 -0
  88. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/architecture/PATTERNS_AND_TRIADS.md +0 -0
  89. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/architecture/SELF_PORTRAIT.md +0 -0
  90. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/architecture/health_badge.json +0 -0
  91. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/assets/.gitignore +0 -0
  92. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/assets/cgis-app-avatar.png +0 -0
  93. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/assets/cgis-app-avatar.svg +0 -0
  94. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/assets/generate_avatar.py +0 -0
  95. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/examples/.gitkeep +0 -0
  96. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/how-to/AGENT_ONBOARDING.md +0 -0
  97. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/lab-notes/2026-06-11-chunked-review-negative-result.md +0 -0
  98. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/ontology/.gitkeep +0 -0
  99. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/ontology/core.yaml +0 -0
  100. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/ontology/domains.yaml +0 -0
  101. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/ontology/patterns.yaml +0 -0
  102. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/ontology/tolerances.lock +0 -0
  103. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/plans/2026-09-09-graph-freshness.md +0 -0
  104. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-09-domain-pattern-fingerprint-design.md +0 -0
  105. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-09-pattern-alphabet-motif-basis-design.md +0 -0
  106. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-10-guardian-sprint-design.md +0 -0
  107. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-11-fastapi-di-edges-design.md +0 -0
  108. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-11-guardian-chunked-review-design.md +0 -0
  109. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-11-guardian-chunker-design.md +0 -0
  110. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-11-mcp-drift-validate-fqn-design.md +0 -0
  111. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-11-resolver-split-design.md +0 -0
  112. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-11-symbol-import-edges-design.md +0 -0
  113. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-12-drift-empty-domains-design.md +0 -0
  114. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-12-gate-semantics-design.md +0 -0
  115. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-12-init-ontology-design.md +0 -0
  116. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-12-release-please-ci-design.md +0 -0
  117. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-13-suggest-packages-design.md +0 -0
  118. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-13-tangle-anti-pattern-design.md +0 -0
  119. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-29-guardian-skeptic-scoring-design.md +0 -0
  120. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-cgis-fractal-design.md +0 -0
  121. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-cgis-fractal-plan.md +0 -0
  122. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-chunk-source-filter-design.md +0 -0
  123. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-chunk-source-filter-plan.md +0 -0
  124. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-genai-client-close-design.md +0 -0
  125. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-genai-client-close-plan.md +0 -0
  126. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-guardian-precision-bench-design.md +0 -0
  127. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-guardian-precision-bench-plan.md +0 -0
  128. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-guardian-timeout-retry-design.md +0 -0
  129. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-guardian-timeout-retry-plan.md +0 -0
  130. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-31-finder-bug-class-taxonomy.md +0 -0
  131. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-08-01-aura-autoevolution-poc.md +0 -0
  132. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-08-11-guardian-code-review-bench.md +0 -0
  133. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-08-14-review-fingerprint-design.md +0 -0
  134. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-09-05-annotation-graph-design.md +0 -0
  135. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-09-09-graph-freshness-design.md +0 -0
  136. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/BLUEPRINT.md +0 -0
  137. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/PRD.md +0 -0
  138. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/TDD.md +0 -0
  139. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-09-fingerprint-drift.md +0 -0
  140. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-10-guardian-context-skeptic-inline.md +0 -0
  141. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-10-guardian-structured-findings-bench.md +0 -0
  142. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-10-motif-basis-part-b.md +0 -0
  143. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-10-unified-pattern-alphabet.md +0 -0
  144. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-11-fastapi-di-edges.md +0 -0
  145. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-11-guardian-chunked-review.md +0 -0
  146. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-11-guardian-chunker.md +0 -0
  147. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-11-mcp-drift-validate-fqn.md +0 -0
  148. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-11-resolver-split.md +0 -0
  149. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-12-drift-empty-domains.md +0 -0
  150. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-12-gate-semantics.md +0 -0
  151. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-12-init-ontology.md +0 -0
  152. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-12-release-please-ci.md +0 -0
  153. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-12-symbol-import-edges.md +0 -0
  154. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-13-suggest-packages.md +0 -0
  155. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-07-29-guardian-skeptic-scoring.md +0 -0
  156. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-08-14-review-fingerprint.md +0 -0
  157. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-09-05-annotation-graph-pr1.md +0 -0
  158. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-09-05-annotation-graph-pr2.md +0 -0
  159. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/glama.json +0 -0
  160. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/main.py +0 -0
  161. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/plugin/.claude-plugin/plugin.json +0 -0
  162. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/plugin/.mcp.json +0 -0
  163. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/plugin/README.md +0 -0
  164. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/plugin/skills/ingest/SKILL.md +0 -0
  165. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/release-please-config.json +0 -0
  166. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/backfill_calibration_fingerprint.py +0 -0
  167. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/backfill_review_fingerprint.py +0 -0
  168. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/check_test_count.py +0 -0
  169. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/colab_bench.sh +0 -0
  170. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/gen_ideal_graph.py +0 -0
  171. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/generate_health.py +0 -0
  172. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/generate_mcp_ref.py +0 -0
  173. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/generate_schema_docs.py +0 -0
  174. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/guardian_bench.py +0 -0
  175. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/guardian_calibrate.py +0 -0
  176. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/guardian_martian.py +0 -0
  177. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/guardian_replay_skeptic.py +0 -0
  178. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/guardian_review.py +0 -0
  179. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/inject_architecture_graph.py +0 -0
  180. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/mcp_registry_gate.sh +0 -0
  181. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/ollama_visitor.sh +0 -0
  182. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/probe_closure_gap.py +0 -0
  183. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/probe_tier_ladder.py +0 -0
  184. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/recordings_from_corpus.py +0 -0
  185. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/skeptic_arms.py +0 -0
  186. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/__init__.py +0 -0
  187. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/__main__.py +0 -0
  188. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/api/.gitkeep +0 -0
  189. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/api/__init__.py +0 -0
  190. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/core/.gitkeep +0 -0
  191. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/core/coverage.py +0 -0
  192. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/core/freshness.py +0 -0
  193. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/core/generated.py +0 -0
  194. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/core/js_globals.py +0 -0
  195. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/core/models.py +0 -0
  196. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/core/paths.py +0 -0
  197. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/.gitkeep +0 -0
  198. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/_python_annotations.py +0 -0
  199. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/_python_ast.py +0 -0
  200. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/_python_classes.py +0 -0
  201. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/_python_functions.py +0 -0
  202. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/_python_imports.py +0 -0
  203. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/_python_types.py +0 -0
  204. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/_typescript_bindings.py +0 -0
  205. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/base.py +0 -0
  206. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/registry.py +0 -0
  207. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/typescript_extractor.py +0 -0
  208. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/__init__.py +0 -0
  209. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/axes.py +0 -0
  210. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/bench.py +0 -0
  211. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/calibrate.py +0 -0
  212. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/chunked.py +0 -0
  213. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/chunker.py +0 -0
  214. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/collector.py +0 -0
  215. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/core.py +0 -0
  216. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/diff_index.py +0 -0
  217. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/evidence.py +0 -0
  218. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/findings.py +0 -0
  219. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/github_poster.py +0 -0
  220. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/martian.py +0 -0
  221. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/metrics.py +0 -0
  222. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/prompts.py +0 -0
  223. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/providers/__init__.py +0 -0
  224. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/providers/base.py +0 -0
  225. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/providers/gemini.py +0 -0
  226. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/providers/mistral.py +0 -0
  227. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/providers/ollama.py +0 -0
  228. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/providers/openrouter.py +0 -0
  229. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/recording.py +0 -0
  230. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/render.py +0 -0
  231. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/review_fingerprint.py +0 -0
  232. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/runner.py +0 -0
  233. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/skeptic.py +0 -0
  234. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/pipeline.py +0 -0
  235. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/py.typed +0 -0
  236. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/analysis/__init__.py +0 -0
  237. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/analysis/analyzer.py +0 -0
  238. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/analysis/anomaly.py +0 -0
  239. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/analysis/cohesion.py +0 -0
  240. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/analysis/health.py +0 -0
  241. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/analysis/suggest_service.py +0 -0
  242. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/context/__init__.py +0 -0
  243. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/context/audit.py +0 -0
  244. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/context/context_service.py +0 -0
  245. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/context/orphans.py +0 -0
  246. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/context/prompt.py +0 -0
  247. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/context/snippet.py +0 -0
  248. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/drift/__init__.py +0 -0
  249. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/drift/_scc.py +0 -0
  250. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/drift/drift.py +0 -0
  251. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/drift/drift_service.py +0 -0
  252. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/drift/fingerprint.py +0 -0
  253. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/drift/fractal.py +0 -0
  254. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/drift/ontology_init.py +0 -0
  255. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/drift/quotient.py +0 -0
  256. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/drift/triads.py +0 -0
  257. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/engine.py +0 -0
  258. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/fqn.py +0 -0
  259. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/render/__init__.py +0 -0
  260. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/render/graph_json.py +0 -0
  261. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/render/mermaid.py +0 -0
  262. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/render/metrics.py +0 -0
  263. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/resolver/.gitkeep +0 -0
  264. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/resolver/__init__.py +0 -0
  265. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/resolver/engine.py +0 -0
  266. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/resolver/indices.py +0 -0
  267. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/resolver/js_builtins.py +0 -0
  268. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/resolver/symbols.py +0 -0
  269. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/resolver/uplift.py +0 -0
  270. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/storage/.gitkeep +0 -0
  271. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/integration/.gitkeep +0 -0
  272. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/.gitkeep +0 -0
  273. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/__init__.py +0 -0
  274. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/conftest.py +0 -0
  275. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/test_annotation_calibration.py +0 -0
  276. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/test_architecture.py +0 -0
  277. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/test_drift.py +0 -0
  278. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/test_fractal.py +0 -0
  279. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/test_init_ontology_roundtrip.py +0 -0
  280. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/test_self_parse.py +0 -0
  281. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/test_self_parse_ts.py +0 -0
  282. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/test_suggest.py +0 -0
  283. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/.gitkeep +0 -0
  284. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/conftest.py +0 -0
  285. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/guardian_stubs.py +0 -0
  286. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/review_path_inventory.txt +0 -0
  287. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test___main__.py +0 -0
  288. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_analyzer.py +0 -0
  289. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_annotation_edges.py +0 -0
  290. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_audit.py +0 -0
  291. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_backfill_calibration_fingerprint.py +0 -0
  292. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_backfill_review_fingerprint.py +0 -0
  293. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_check_pytest_raises.py +0 -0
  294. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_check_test_count.py +0 -0
  295. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_cli.py +0 -0
  296. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_cohesion.py +0 -0
  297. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_context_service.py +0 -0
  298. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_di_acceptance.py +0 -0
  299. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_drift.py +0 -0
  300. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_drift_service.py +0 -0
  301. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_extractor_registry.py +0 -0
  302. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_fingerprint.py +0 -0
  303. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_fqn.py +0 -0
  304. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_fractal.py +0 -0
  305. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_freshness.py +0 -0
  306. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_gen_ideal_graph.py +0 -0
  307. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_generate_mcp_ref.py +0 -0
  308. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_generated.py +0 -0
  309. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_graph_json.py +0 -0
  310. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_axes.py +0 -0
  311. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_bench.py +0 -0
  312. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_bench_script.py +0 -0
  313. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_calibrate.py +0 -0
  314. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_calibrate_script.py +0 -0
  315. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_chunked.py +0 -0
  316. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_chunker.py +0 -0
  317. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_collector.py +0 -0
  318. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_core.py +0 -0
  319. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_diff_index.py +0 -0
  320. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_evidence.py +0 -0
  321. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_findings.py +0 -0
  322. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_martian.py +0 -0
  323. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_martian_union.py +0 -0
  324. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_metrics.py +0 -0
  325. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_mistral_sampling.py +0 -0
  326. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_ollama_sampling.py +0 -0
  327. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_ollama_truncation.py +0 -0
  328. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_openrouter.py +0 -0
  329. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_poster.py +0 -0
  330. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_providers.py +0 -0
  331. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_providers_name.py +0 -0
  332. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_recording.py +0 -0
  333. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_render.py +0 -0
  334. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_replay_skeptic.py +0 -0
  335. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_review_script.py +0 -0
  336. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_runner.py +0 -0
  337. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_salvage.py +0 -0
  338. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_skeptic.py +0 -0
  339. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_health_scorer.py +0 -0
  340. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_import_acceptance.py +0 -0
  341. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_inject_architecture_graph.py +0 -0
  342. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_mcp_tool_schemas.py +0 -0
  343. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_mermaid.py +0 -0
  344. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_metrics.py +0 -0
  345. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_models.py +0 -0
  346. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_name_load_positions.py +0 -0
  347. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_ontology_compliance.py +0 -0
  348. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_ontology_init.py +0 -0
  349. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_orphans.py +0 -0
  350. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_paths.py +0 -0
  351. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_patterns_yaml.py +0 -0
  352. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_pipeline.py +0 -0
  353. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_pipeline_incremental_symbols.py +0 -0
  354. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_prompt.py +0 -0
  355. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_python_annotations.py +0 -0
  356. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_query_coverage.py +0 -0
  357. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_quotient.py +0 -0
  358. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_recordings_from_corpus.py +0 -0
  359. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_resolver.py +0 -0
  360. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_resolver_indices.py +0 -0
  361. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_resolver_js_builtins.py +0 -0
  362. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_resolver_language_scope.py +0 -0
  363. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_resolver_symbols.py +0 -0
  364. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_review_fingerprint_closure.py +0 -0
  365. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_review_fingerprint_contract.py +0 -0
  366. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_review_fingerprint_digest.py +0 -0
  367. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_review_fingerprint_record.py +0 -0
  368. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_self_types.py +0 -0
  369. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_skeptic_arms.py +0 -0
  370. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_snippet.py +0 -0
  371. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_sqlite_store.py +0 -0
  372. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_suggest_service.py +0 -0
  373. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_temperature_source.py +0 -0
  374. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_triads.py +0 -0
  375. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_typescript_extractor.py +0 -0
  376. {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_uplift.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.24.0"
3
+ }
@@ -1,5 +1,29 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.24.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.23.4...codegraph-brain-v0.24.0) (2026-09-17)
4
+
5
+
6
+ ### Features
7
+
8
+ * **mcp:** cgis_overview — a starting map when you have no FQN yet ([#486](https://github.com/zaebee/codegraph-brain/issues/486)) ([1580cfe](https://github.com/zaebee/codegraph-brain/commit/1580cfe53325241e149ba3bbb9388c4ddc7718d7))
9
+
10
+
11
+ ### Documentation
12
+
13
+ * auto-sync architecture graph and MCP reference ([#488](https://github.com/zaebee/codegraph-brain/issues/488)) ([9f169ce](https://github.com/zaebee/codegraph-brain/commit/9f169ce364f0d778c0c59b4de607a3433b800dbd))
14
+
15
+ ## [0.23.4](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.23.3...codegraph-brain-v0.23.4) (2026-09-17)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * **mcp:** trace_flow/analyze_impact default to the CLI's view ([#482](https://github.com/zaebee/codegraph-brain/issues/482)) ([8877051](https://github.com/zaebee/codegraph-brain/commit/8877051d9b6f90e6df2a25480c3f608cdacb5f58))
21
+
22
+
23
+ ### Documentation
24
+
25
+ * auto-sync architecture graph and MCP reference ([#484](https://github.com/zaebee/codegraph-brain/issues/484)) ([2f507b0](https://github.com/zaebee/codegraph-brain/commit/2f507b004c232dae3d90577f73d763f4d27be357))
26
+
3
27
  ## [0.23.3](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.23.2...codegraph-brain-v0.23.3) (2026-09-17)
4
28
 
5
29
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: codegraph-brain
3
- Version: 0.23.3
3
+ Version: 0.24.0
4
4
  Summary: Semantic code graph for AI agents — deterministic FQN resolution, impact analysis and architectural drift gates, exposed over MCP.
5
5
  Project-URL: Homepage, https://github.com/zaebee/codegraph-brain
6
6
  Project-URL: Repository, https://github.com/zaebee/codegraph-brain
@@ -143,6 +143,7 @@ The main tools:
143
143
  | Tool | Answers |
144
144
  | :--- | :--- |
145
145
  | `cgis_ingest` | Build or incrementally refresh the graph |
146
+ | `cgis_overview` | Where to start: sizes and the largest packages, when you have no FQN yet |
146
147
  | `cgis_find_symbol` | Partial name → candidate FQNs |
147
148
  | `cgis_analyze_impact` | What breaks upstream if this changes? |
148
149
  | `cgis_trace_flow` | What does this call, transitively? |
@@ -93,6 +93,7 @@ The main tools:
93
93
  | Tool | Answers |
94
94
  | :--- | :--- |
95
95
  | `cgis_ingest` | Build or incrementally refresh the graph |
96
+ | `cgis_overview` | Where to start: sizes and the largest packages, when you have no FQN yet |
96
97
  | `cgis_find_symbol` | Partial name → candidate FQNs |
97
98
  | `cgis_analyze_impact` | What breaks upstream if this changes? |
98
99
  | `cgis_trace_flow` | What does this call, transitively? |
@@ -204,7 +204,7 @@ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dashar
204
204
  uplift_SemanticUpliftEngine_execute_uplift["execute_uplift (uplift.py:91)"]:::methodNode
205
205
  end
206
206
  subgraph sg_sqlite_store["sqlite_store.py"]
207
- sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:42)"]:::classNode
207
+ sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:48)"]:::classNode
208
208
  end
209
209
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Node
210
210
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Edge
@@ -237,5 +237,5 @@ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dashar
237
237
  | `resolve` | METHOD | [`engine.py:37`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L37) |
238
238
  | `SemanticUpliftEngine` | CLASS | [`uplift.py:66`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/uplift.py#L66) |
239
239
  | `execute_uplift` | METHOD | [`uplift.py:91`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/uplift.py#L91) |
240
- | `SQLiteStore` | CLASS | [`sqlite_store.py:42`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/storage/sqlite_store.py#L42) |
240
+ | `SQLiteStore` | CLASS | [`sqlite_store.py:48`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/storage/sqlite_store.py#L48) |
241
241
  <!-- END_CGIS_GRAPH -->
@@ -29,7 +29,7 @@ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dashar
29
29
  uplift_SemanticUpliftEngine_execute_uplift["execute_uplift (uplift.py:91)"]:::methodNode
30
30
  end
31
31
  subgraph sg_sqlite_store["sqlite_store.py"]
32
- sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:42)"]:::classNode
32
+ sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:48)"]:::classNode
33
33
  end
34
34
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Node
35
35
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Edge
@@ -0,0 +1,184 @@
1
+ # 💻 CLI Usage Guide
2
+
3
+ ## Installation
4
+
5
+ ```bash
6
+ uv pip install -e .
7
+ ```
8
+
9
+ Verify:
10
+
11
+ ```bash
12
+ cgis --version
13
+ ```
14
+
15
+ ---
16
+
17
+ ## Commands
18
+
19
+ ### `cgis ingest`
20
+
21
+ Scan a repository, extract code structure, and build the semantic graph.
22
+
23
+ ```bash
24
+ cgis ingest <path> [OPTIONS]
25
+ ```
26
+
27
+ | Option | Default | Description |
28
+ | :--- | :--- | :--- |
29
+ | `--output`, `-o` | `graph.json` | Output path (`.db` for SQLite, `.json` for raw dump) |
30
+ | `--incremental`, `-i` | `False` | Only re-ingest changed files (requires `.db` output) |
31
+ | `--domains`, `-d` | `None` | Path to `domains.yaml` for semantic uplift |
32
+
33
+ **Examples:**
34
+
35
+ ```bash
36
+ # Full ingest with semantic uplift
37
+ cgis ingest ./src --output graph.db --domains docs/ontology/domains.yaml
38
+
39
+ # Incremental update after code changes
40
+ cgis ingest ./src --output graph.db --incremental
41
+
42
+ # Raw JSON dump for inspection
43
+ cgis ingest ./src --output graph.json
44
+ ```
45
+
46
+ ---
47
+
48
+ ### `cgis overview`
49
+
50
+ Where to start in a graph you know nothing about: how big it is, how much of it resolved, and the largest packages with production and tests listed separately. Every prefix it prints is one `find --prefix` and `metrics --scope` accept. `structure` takes a node's FQN instead — a package is a node only when it has an `__init__.py` — so reach a module through `find` first. The MCP tool is `cgis_overview`.
51
+
52
+ ```bash
53
+ cgis overview [OPTIONS]
54
+ ```
55
+
56
+ | Option | Default | Description |
57
+ | :--- | :--- | :--- |
58
+ | `--db`, `-d` | `graph.db` | Path to the graph database |
59
+ | `--depth` | `2` | FQN segments per package prefix; `1` is the top level |
60
+ | `--limit`, `-n` | `15` | Maximum packages listed per section |
61
+ | `--format`, `-f` | `text` | `text` or `json` |
62
+
63
+ **Examples:**
64
+
65
+ ```bash
66
+ # First call in an unfamiliar repository
67
+ cgis overview
68
+
69
+ # Top-level map only, as JSON
70
+ cgis overview --depth 1 --format json
71
+ ```
72
+
73
+ ---
74
+
75
+ ### `cgis trace`
76
+
77
+ Everything a FQN reaches **downstream**: every edge except containment, which in practice means calls, imports, inheritance, DI dependencies and references between internal code. Containment stays out unless `--show-structure` adds it, and so do stdlib, third-party and unresolved call targets unless `--show-external` does. The MCP tool `cgis_trace_flow` uses the same defaults (`include_structure`, `include_external`).
78
+
79
+ ```bash
80
+ cgis trace <fqn> [OPTIONS]
81
+ ```
82
+
83
+ | Option | Default | Description |
84
+ | :--- | :--- | :--- |
85
+ | `--db`, `-d` | `graph.db` | Path to the graph database |
86
+ | `--depth` | `5` | Maximum traversal depth |
87
+ | `--format`, `-f` | `text` | `text`, `mermaid`, or `json` (joinable `{root, nodes, edges, coverage}`) |
88
+ | `--show-structure` | off | Also follow containment (CONTAINS/DECLARES) |
89
+ | `--show-external` | off | Also show stdlib, third-party and unresolved call targets |
90
+ | `--internal-only` | off | Drop those nodes again from `mermaid`/`json` output; a no-op unless `--show-external` is on, and not valid with `text` |
91
+ | `--min-confidence` | none | Hide edges below this confidence. Resolved calls score 1.0 and inferred ones 0.8, so a threshold above 0.8 is what filters anything |
92
+
93
+ **Examples:**
94
+
95
+ ```bash
96
+ # Text tree of what IngestionPipeline.run depends on
97
+ cgis trace "cgis.pipeline.IngestionPipeline.run" --depth 3
98
+
99
+ # Mermaid diagram for pasting into docs
100
+ cgis trace "cgis.pipeline.IngestionPipeline.run" --format mermaid
101
+
102
+ # Machine-readable, with the module's own members included
103
+ cgis trace "cgis.query.engine" --format json --show-structure
104
+ ```
105
+
106
+ ---
107
+
108
+ ### `cgis impact`
109
+
110
+ Everything that reaches a FQN **upstream**: callers, importers, subclasses, type references and DI dependents. The enclosing class or file stays out unless `--show-structure` adds it, and so do stdlib, third-party and unresolved call targets unless `--show-external` does. The MCP tool `cgis_analyze_impact` uses the same defaults.
111
+
112
+ ```bash
113
+ cgis impact <fqn> [OPTIONS]
114
+ ```
115
+
116
+ | Option | Default | Description |
117
+ | :--- | :--- | :--- |
118
+ | `--db`, `-d` | `graph.db` | Path to the graph database |
119
+ | `--depth` | `5` | Maximum traversal depth |
120
+ | `--format`, `-f` | `text` | `text`, `mermaid`, or `json` (joinable `{root, nodes, edges, coverage}`) |
121
+ | `--show-structure` | off | Also follow containment (CONTAINS/DECLARES) |
122
+ | `--show-external` | off | Also show stdlib, third-party and unresolved call targets |
123
+ | `--internal-only` | off | Drop those nodes again from `mermaid`/`json` output; a no-op unless `--show-external` is on, and not valid with `text` |
124
+ | `--min-confidence` | none | Hide edges below this confidence. Resolved calls score 1.0 and inferred ones 0.8, so a threshold above 0.8 is what filters anything |
125
+
126
+ **Examples:**
127
+
128
+ ```bash
129
+ # What depends on SQLiteStore.save_graph?
130
+ cgis impact "cgis.storage.sqlite_store.SQLiteStore.save_graph"
131
+
132
+ # Blast radius of changing the Node model
133
+ cgis impact "cgis.core.models.Node" --depth 4 --format mermaid
134
+ ```
135
+
136
+ ---
137
+
138
+ ### `cgis structure`
139
+
140
+ Show the internal layout of a module or class.
141
+
142
+ ```bash
143
+ cgis structure <fqn> [OPTIONS]
144
+ ```
145
+
146
+ | Option | Default | Description |
147
+ | :--- | :--- | :--- |
148
+ | `--db`, `-d` | `graph.db` | Path to the graph database |
149
+ | `--depth` | `2` | Traversal depth |
150
+ | `--show-external` | `False` | Include external nodes |
151
+
152
+ **Example:**
153
+
154
+ ```bash
155
+ cgis structure "cgis.storage.sqlite_store.SQLiteStore"
156
+ ```
157
+
158
+ ---
159
+
160
+ ### `cgis validate`
161
+
162
+ Validate the graph database for integrity and schema compliance.
163
+
164
+ ```bash
165
+ cgis validate [OPTIONS]
166
+ ```
167
+
168
+ | Option | Default | Description |
169
+ | :--- | :--- | :--- |
170
+ | `--db`, `-d` | `graph.db` | Path to the graph database |
171
+
172
+ ---
173
+
174
+ ## FQN format
175
+
176
+ All commands accept FQNs in dot-separated form derived from file paths:
177
+
178
+ ```
179
+ src/cgis/pipeline.py → cgis.pipeline
180
+ src/cgis/pipeline.py::IngestionPipeline → cgis.pipeline.IngestionPipeline
181
+ src/cgis/pipeline.py::IngestionPipeline.run → cgis.pipeline.IngestionPipeline.run
182
+ ```
183
+
184
+ Use `cgis structure` on a module to discover available FQNs before running `trace` or `impact`.
@@ -9,9 +9,12 @@
9
9
 
10
10
  Upstream subgraph of one FQN: everything that reaches it within ``depth`` hops.
11
11
 
12
- Every edge type counts — callers, but also importers, subclasses, type
13
- references, DI dependents and the enclosing class or file — so this answers
14
- "what breaks if I change X?". For what X depends on use
12
+ Follows every edge except containment — in practice callers, importers,
13
+ subclasses, type references and DI dependents — within internal code, so this
14
+ answers "what breaks if I change X?". The
15
+ enclosing class or file and stdlib/third-party nodes are left out unless
16
+ ``include_structure`` / ``include_external`` ask for them — the same view as
17
+ the CLI's ``impact``. For what X depends on use
15
18
  ``cgis_trace_flow``; for only the members of a module or class,
16
19
  ``cgis_get_structure``; for a source-included brief to read before editing
17
20
  one symbol, ``cgis_context``.
@@ -29,8 +32,10 @@ Upstream subgraph of one FQN: everything that reaches it within ``depth`` hops.
29
32
  | :--- | :--- | :---: | :--- |
30
33
  | `fqn` | `string` | ✓ | Fully qualified name, e.g. pkg.module.Class.method. A unique dot-boundary suffix also resolves; an ambiguous one returns candidates. Use cgis_find_symbol to look a name up. |
31
34
  | `db_path` | `string` | | SQLite graph built by cgis_ingest. A relative path resolves against the MCP server's working directory, not the agent's — prefer an absolute path. |
32
- | `depth` | `integer` | | Maximum edge hops upstream. Every edge type counts as a hop — callers, importers, subclasses, type references, DI dependents and the enclosing class or file all appear alongside each other. |
35
+ | `depth` | `integer` | | Maximum edge hops upstream, over callers, importers, subclasses, type references and DI dependents (plus the enclosing class or file with include_structure). |
33
36
  | `output_format` | `string` | | "mermaid" for a diagram, or "json" for a payload with real FQNs (case-insensitive). Any other value returns an error. |
37
+ | `include_structure` | `boolean` | | Also follow containment (CONTAINS/DECLARES): a module's or class's own members, and the class or file enclosing a symbol. Off by default, as in the CLI; cgis_get_structure is the tool for members alone. |
38
+ | `include_external` | `boolean` | | Also return stdlib, third-party and unresolved call targets — calls on values whose type is decided at runtime. Off by default, as in the CLI, because they dominate the payload; in json, coverage/top_unresolved still counts what was dropped. |
34
39
 
35
40
  ---
36
41
 
@@ -69,7 +74,8 @@ Prompt-ready brief on one FQN: its source, class, direct callers and callees.
69
74
  calls only, one hop by default. Source is included when the file is found
70
75
  (see ``source_root``), and the domain when the graph was tagged with one.
71
76
  For a multi-hop subgraph
72
- over every edge type without source, use ``cgis_trace_flow`` (downstream) or
77
+ over calls, imports, inheritance and references without source, use
78
+ ``cgis_trace_flow`` (downstream) or
73
79
  ``cgis_analyze_impact`` (upstream).
74
80
 
75
81
  Returns an XML-tagged prompt — the focal node's source, its enclosing class,
@@ -324,6 +330,31 @@ Whole-graph architectural metrics — coupling bottlenecks, God classes, PageRan
324
330
 
325
331
  ---
326
332
 
333
+ ## `cgis_overview`
334
+
335
+ Where to start in a graph you know nothing about: sizes and a package map.
336
+
337
+ Call this first in an unfamiliar repository — every other tool needs a name,
338
+ and this is the one that hands you some. Returns JSON: symbol counts by type,
339
+ file and edge totals, the unresolved-edge ratio, and the largest packages with
340
+ production and tests listed separately. Each ``prefix`` goes straight into
341
+ ``cgis_find_symbol`` (``fqn_prefix``) or ``cgis_metrics`` (``scope``), which
342
+ match on prefixes. ``cgis_get_structure`` takes a node id, not a prefix: a
343
+ package is a node only when it has an ``__init__.py``, and then holds no
344
+ members of its own — reach a module through ``cgis_find_symbol`` first.
345
+
346
+ Listings are capped; ``packages_omitted`` appears when rows were cut. Entry
347
+ points are deliberately not reported — "nothing calls it" is not one on a
348
+ framework codebase, where most handlers have no incoming call edge.
349
+
350
+ | Argument | Type | Required | Description |
351
+ | :--- | :--- | :---: | :--- |
352
+ | `db_path` | `string` | | SQLite graph built by cgis_ingest. A relative path resolves against the MCP server's working directory, not the agent's — prefer an absolute path. |
353
+ | `depth` | `integer` | | FQN segments per package prefix; 1 is the top level. |
354
+ | `limit` | `integer` | | Maximum packages listed per section. |
355
+
356
+ ---
357
+
327
358
  ## `cgis_suggest_packages`
328
359
 
329
360
  Suggest sub-package boundaries for a package from its dependency communities.
@@ -350,10 +381,13 @@ Suggest sub-package boundaries for a package from its dependency communities.
350
381
 
351
382
  Downstream subgraph of one FQN: everything it reaches within ``depth`` hops.
352
383
 
353
- Every edge type counts — calls, imports, inheritance, DI dependencies,
354
- references, and containment (so from a module or class the first hop includes
355
- its own members) — so this answers "what does X depend on?". For what depends
356
- on X use
384
+ Follows every edge except containment — in practice calls, imports,
385
+ inheritance, DI dependencies and references — between internal code, so this
386
+ answers "what does X depend on?". Containment and
387
+ stdlib/third-party nodes are left out unless ``include_structure`` /
388
+ ``include_external`` ask for them (external covers stdlib, third-party and
389
+ unresolved call targets) — the same view as the CLI's ``trace``.
390
+ For what depends on X use
357
391
  ``cgis_analyze_impact``; for only the members of a module or class,
358
392
  ``cgis_get_structure``; for a source-included brief to read before editing
359
393
  one symbol, ``cgis_context``.
@@ -371,8 +405,10 @@ Downstream subgraph of one FQN: everything it reaches within ``depth`` hops.
371
405
  | :--- | :--- | :---: | :--- |
372
406
  | `fqn` | `string` | ✓ | Fully qualified name, e.g. pkg.module.Class.method. A unique dot-boundary suffix also resolves; an ambiguous one returns candidates. Use cgis_find_symbol to look a name up. |
373
407
  | `db_path` | `string` | | SQLite graph built by cgis_ingest. A relative path resolves against the MCP server's working directory, not the agent's — prefer an absolute path. |
374
- | `depth` | `integer` | | Maximum edge hops downstream. Every edge type counts as a hop — calls, imports, inheritance, DI dependencies, references and containment — so from a module or class the first hop is mostly its own members and imports. |
408
+ | `depth` | `integer` | | Maximum edge hops downstream, over calls, imports, inheritance, DI dependencies and references (plus containment with include_structure). |
375
409
  | `output_format` | `string` | | "mermaid" for a diagram, or "json" for a payload with real FQNs (case-insensitive). Any other value returns an error. |
410
+ | `include_structure` | `boolean` | | Also follow containment (CONTAINS/DECLARES): a module's or class's own members, and the class or file enclosing a symbol. Off by default, as in the CLI; cgis_get_structure is the tool for members alone. |
411
+ | `include_external` | `boolean` | | Also return stdlib, third-party and unresolved call targets — calls on values whose type is decided at runtime. Off by default, as in the CLI, because they dominate the payload; in json, coverage/top_unresolved still counts what was dropped. |
376
412
 
377
413
  ---
378
414
 
@@ -11,6 +11,7 @@ Reading files to answer a structural question is the slow, lossy path: it burns
11
11
 
12
12
  | Question | Tool | Instead of |
13
13
  | :--- | :--- | :--- |
14
+ | "Where do I even start?" | `cgis_overview` | opening files to find the shape of the repo |
14
15
  | "What calls this?" | `cgis_analyze_impact` | grepping the name and hoping |
15
16
  | "Is this rename safe?" | `cgis_analyze_impact` | reading every plausible caller |
16
17
  | "What does this end up calling?" | `cgis_trace_flow` | following imports by hand |
@@ -21,7 +22,7 @@ Reading files to answer a structural question is the slow, lossy path: it burns
21
22
  | "Did this change drift the architecture?" | `cgis_drift` | nothing — there is no manual equivalent |
22
23
  | "Does every handler reach its authz guard?" | `cgis_audit_reachability` | auditing routes one by one |
23
24
 
24
- A subgraph at depth 2 costs a few hundred tokens. The equivalent in file chunks costs thousands and is less precise.
25
+ A depth-2 trace or impact of a function or method costs a few hundred tokens: median about 300, and 9 in 10 under 1,600. Measured over every function and method of two real graphs (700 and 5,800 symbols), in the default mermaid format and in json. The equivalent in file chunks costs thousands and is less precise. A module or a heavily used symbol costs more — the worst symbol on the larger graph returns 36k tokens, so raise `depth` deliberately and prefer `cgis_context` for a single symbol. Containment, stdlib/third-party nodes and unresolved call targets are off by default; `include_structure` and `include_external` add them when that is the question.
25
26
 
26
27
  ## First run in a repository
27
28
 
@@ -7,7 +7,7 @@ packages = ["src/cgis"]
7
7
 
8
8
  [project]
9
9
  name = "codegraph-brain"
10
- version = "0.23.3"
10
+ version = "0.24.0"
11
11
  description = "Semantic code graph for AI agents — deterministic FQN resolution, impact analysis and architectural drift gates, exposed over MCP."
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.12"
@@ -54,7 +54,6 @@ GRANDFATHERED: frozenset[str] = frozenset(
54
54
  "unit/test_drift_service.py::test_analyze_drift_bad_suffix_raises",
55
55
  "unit/test_drift_service.py::test_analyze_drift_missing_db_raises",
56
56
  "unit/test_drift_service.py::test_analyze_drift_missing_patterns_raises",
57
- "unit/test_guardian_martian_script.py::test_a_missing_concurrency_raises_instead_of_defaulting",
58
57
  "unit/test_guardian_recording.py::test_a_non_json_path_is_rejected",
59
58
  "unit/test_metrics.py::test_missing_database_raises_file_not_found",
60
59
  "unit/test_ontology_init.py::test_propose_missing_db_raises",
@@ -8,13 +8,13 @@
8
8
  "source": "github",
9
9
  "id": "1260843154"
10
10
  },
11
- "version": "0.23.3",
11
+ "version": "0.24.0",
12
12
  "packages": [
13
13
  {
14
14
  "registryType": "pypi",
15
15
  "registryBaseUrl": "https://pypi.org",
16
16
  "identifier": "codegraph-brain",
17
- "version": "0.23.3",
17
+ "version": "0.24.0",
18
18
  "runtimeHint": "uvx",
19
19
  "transport": {
20
20
  "type": "stdio"
@@ -17,10 +17,11 @@ from pydantic import Field
17
17
  from cgis import __version__
18
18
  from cgis.core.coverage import TraversalCoverage
19
19
  from cgis.core.freshness import Freshness, FreshnessState
20
- from cgis.core.models import Edge, Node, NodeType
20
+ from cgis.core.models import Edge, EdgeType, Node, NodeType
21
21
  from cgis.extractors.python_extractor import PythonExtractor
22
22
  from cgis.extractors.typescript_extractor import TypeScriptExtractor
23
23
  from cgis.pipeline import IngestionPipeline
24
+ from cgis.query.analysis.overview import DEFAULT_DEPTH, DEFAULT_LIMIT, build_overview
24
25
  from cgis.query.analysis.suggest_service import report_to_dict, suggest_packages
25
26
  from cgis.query.context.audit import audit_reachability
26
27
  from cgis.query.context.context_service import build_context
@@ -28,7 +29,7 @@ from cgis.query.context.orphans import find_orphan_classes
28
29
  from cgis.query.drift.drift_service import analyze_drift
29
30
  from cgis.query.drift.fractal import analyze_fractal_db
30
31
  from cgis.query.drift.ontology_init import propose_ontology
31
- from cgis.query.engine import QueryEngine
32
+ from cgis.query.engine import BEHAVIORAL_EDGE_TYPES, QueryEngine
32
33
  from cgis.query.fqn import resolve_fqn
33
34
  from cgis.query.render.graph_json import graph_to_json
34
35
  from cgis.query.render.mermaid import MermaidCompiler
@@ -65,6 +66,31 @@ Fqn = Annotated[
65
66
  "to look a name up."
66
67
  ),
67
68
  ]
69
+ IncludeStructure = Annotated[
70
+ bool,
71
+ Field(
72
+ description="Also follow containment (CONTAINS/DECLARES): a module's or class's own "
73
+ "members, and the class or file enclosing a symbol. Off by default, as in the CLI; "
74
+ "cgis_get_structure is the tool for members alone."
75
+ ),
76
+ ]
77
+ IncludeExternal = Annotated[
78
+ bool,
79
+ Field(
80
+ description="Also return stdlib, third-party and unresolved call targets — calls on "
81
+ "values whose type is decided at runtime. Off by default, as in the CLI, because they "
82
+ "dominate the payload; in json, coverage/top_unresolved still counts what was dropped."
83
+ ),
84
+ ]
85
+
86
+
87
+ def _traversal_filters(
88
+ include_structure: bool, include_external: bool
89
+ ) -> tuple[frozenset[EdgeType] | None, bool]:
90
+ """Edge-type allowlist and external flag for trace/impact — the CLI's defaults (#481)."""
91
+ return (None if include_structure else BEHAVIORAL_EDGE_TYPES), include_external
92
+
93
+
68
94
  OutputFormat = Annotated[
69
95
  str,
70
96
  Field(
@@ -363,19 +389,23 @@ def cgis_trace_flow(
363
389
  depth: Annotated[
364
390
  int,
365
391
  Field(
366
- description="Maximum edge hops downstream. Every edge type counts as a hop — "
367
- "calls, imports, inheritance, DI dependencies, references and containment — so "
368
- "from a module or class the first hop is mostly its own members and imports."
392
+ description="Maximum edge hops downstream, over calls, imports, inheritance, DI "
393
+ "dependencies and references (plus containment with include_structure)."
369
394
  ),
370
395
  ] = 3,
371
396
  output_format: OutputFormat = "mermaid",
397
+ include_structure: IncludeStructure = False,
398
+ include_external: IncludeExternal = False,
372
399
  ) -> str:
373
400
  """Downstream subgraph of one FQN: everything it reaches within ``depth`` hops.
374
401
 
375
- Every edge type counts — calls, imports, inheritance, DI dependencies,
376
- references, and containment (so from a module or class the first hop includes
377
- its own members) — so this answers "what does X depend on?". For what depends
378
- on X use
402
+ Follows every edge except containment — in practice calls, imports,
403
+ inheritance, DI dependencies and references — between internal code, so this
404
+ answers "what does X depend on?". Containment and
405
+ stdlib/third-party nodes are left out unless ``include_structure`` /
406
+ ``include_external`` ask for them (external covers stdlib, third-party and
407
+ unresolved call targets) — the same view as the CLI's ``trace``.
408
+ For what depends on X use
379
409
  ``cgis_analyze_impact``; for only the members of a module or class,
380
410
  ``cgis_get_structure``; for a source-included brief to read before editing
381
411
  one symbol, ``cgis_context``.
@@ -398,8 +428,13 @@ def cgis_trace_flow(
398
428
  res = resolve_fqn(store, fqn)
399
429
  if res.resolved is None:
400
430
  return _resolution_error(fqn, res.candidates, res.truncated)
431
+ allowed, show_external = _traversal_filters(include_structure, include_external)
401
432
  result = QueryEngine(store).get_flow_result(
402
- res.resolved, max_depth=depth, with_coverage=_wants_json(output_format)
433
+ res.resolved,
434
+ max_depth=depth,
435
+ allowed_edge_types=allowed,
436
+ show_external=show_external,
437
+ with_coverage=_wants_json(output_format),
403
438
  )
404
439
  except Exception as exc:
405
440
  return f"❌ {exc}"
@@ -424,18 +459,23 @@ def cgis_analyze_impact(
424
459
  depth: Annotated[
425
460
  int,
426
461
  Field(
427
- description="Maximum edge hops upstream. Every edge type counts as a hop — "
428
- "callers, importers, subclasses, type references, DI dependents and the "
429
- "enclosing class or file all appear alongside each other."
462
+ description="Maximum edge hops upstream, over callers, importers, subclasses, "
463
+ "type references and DI dependents (plus the enclosing class or file with "
464
+ "include_structure)."
430
465
  ),
431
466
  ] = 3,
432
467
  output_format: OutputFormat = "mermaid",
468
+ include_structure: IncludeStructure = False,
469
+ include_external: IncludeExternal = False,
433
470
  ) -> str:
434
471
  """Upstream subgraph of one FQN: everything that reaches it within ``depth`` hops.
435
472
 
436
- Every edge type counts — callers, but also importers, subclasses, type
437
- references, DI dependents and the enclosing class or file — so this answers
438
- "what breaks if I change X?". For what X depends on use
473
+ Follows every edge except containment — in practice callers, importers,
474
+ subclasses, type references and DI dependents — within internal code, so this
475
+ answers "what breaks if I change X?". The
476
+ enclosing class or file and stdlib/third-party nodes are left out unless
477
+ ``include_structure`` / ``include_external`` ask for them — the same view as
478
+ the CLI's ``impact``. For what X depends on use
439
479
  ``cgis_trace_flow``; for only the members of a module or class,
440
480
  ``cgis_get_structure``; for a source-included brief to read before editing
441
481
  one symbol, ``cgis_context``.
@@ -458,8 +498,13 @@ def cgis_analyze_impact(
458
498
  res = resolve_fqn(store, fqn)
459
499
  if res.resolved is None:
460
500
  return _resolution_error(fqn, res.candidates, res.truncated)
501
+ allowed, show_external = _traversal_filters(include_structure, include_external)
461
502
  result = QueryEngine(store).get_impact_result(
462
- res.resolved, max_depth=depth, with_coverage=_wants_json(output_format)
503
+ res.resolved,
504
+ max_depth=depth,
505
+ allowed_edge_types=allowed,
506
+ show_external=show_external,
507
+ with_coverage=_wants_json(output_format),
463
508
  )
464
509
  except Exception as exc:
465
510
  return f"❌ {exc}"
@@ -678,6 +723,42 @@ def cgis_validate(
678
723
  return f"❌ {exc}"
679
724
 
680
725
 
726
+ @mcp.tool()
727
+ def cgis_overview(
728
+ db_path: DbPath = _DEFAULT_DB,
729
+ depth: Annotated[
730
+ int,
731
+ Field(description="FQN segments per package prefix; 1 is the top level."),
732
+ ] = DEFAULT_DEPTH,
733
+ limit: Annotated[
734
+ int, Field(description="Maximum packages listed per section.")
735
+ ] = DEFAULT_LIMIT,
736
+ ) -> str:
737
+ """Where to start in a graph you know nothing about: sizes and a package map.
738
+
739
+ Call this first in an unfamiliar repository — every other tool needs a name,
740
+ and this is the one that hands you some. Returns JSON: symbol counts by type,
741
+ file and edge totals, the unresolved-edge ratio, and the largest packages with
742
+ production and tests listed separately. Each ``prefix`` goes straight into
743
+ ``cgis_find_symbol`` (``fqn_prefix``) or ``cgis_metrics`` (``scope``), which
744
+ match on prefixes. ``cgis_get_structure`` takes a node id, not a prefix: a
745
+ package is a node only when it has an ``__init__.py``, and then holds no
746
+ members of its own — reach a module through ``cgis_find_symbol`` first.
747
+
748
+ Listings are capped; ``packages_omitted`` appears when rows were cut. Entry
749
+ points are deliberately not reported — "nothing calls it" is not one on a
750
+ framework codebase, where most handlers have no incoming call edge.
751
+ """
752
+ if not Path(db_path).exists():
753
+ return f"❌ Database not found at: {db_path}. Run cgis_ingest first."
754
+ try:
755
+ with SQLiteStore(db_path) as store:
756
+ report = build_overview(store, depth=depth, limit=limit)
757
+ except Exception as exc:
758
+ return f"❌ {exc}"
759
+ return json.dumps(_with_freshness(db_path, report), indent=2)
760
+
761
+
681
762
  @mcp.tool()
682
763
  def cgis_find_symbol(
683
764
  query: Annotated[
@@ -809,7 +890,8 @@ def cgis_context(
809
890
  calls only, one hop by default. Source is included when the file is found
810
891
  (see ``source_root``), and the domain when the graph was tagged with one.
811
892
  For a multi-hop subgraph
812
- over every edge type without source, use ``cgis_trace_flow`` (downstream) or
893
+ over calls, imports, inheritance and references without source, use
894
+ ``cgis_trace_flow`` (downstream) or
813
895
  ``cgis_analyze_impact`` (upstream).
814
896
 
815
897
  Returns an XML-tagged prompt — the focal node's source, its enclosing class,