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.
- codegraph_brain-0.24.0/.github/test-count-baseline +1 -0
- codegraph_brain-0.24.0/.release-please-manifest.json +3 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/CHANGELOG.md +24 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/PKG-INFO +2 -1
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/README.md +1 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/architecture/HOW_IT_WORKS.md +2 -2
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/architecture/diagrams/pipeline_flow.mermaid +1 -1
- codegraph_brain-0.24.0/docs/how-to/CLI_USAGE.md +184 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/how-to/MCP_REFERENCE.md +46 -10
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/plugin/skills/cgis/SKILL.md +2 -1
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/pyproject.toml +1 -1
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/check_pytest_raises.py +0 -1
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/server.json +2 -2
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/api/mcp_server.py +100 -18
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/cli.py +64 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/python_extractor.py +48 -33
- codegraph_brain-0.24.0/src/cgis/query/analysis/overview.py +87 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/storage/sqlite_store.py +85 -10
- codegraph_brain-0.24.0/tests/self_parsing/test_overview.py +74 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/test_receiver_resolution.py +7 -1
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_martian_script.py +4 -1
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_mcp_server.py +174 -0
- codegraph_brain-0.24.0/tests/unit/test_overview.py +188 -0
- codegraph_brain-0.24.0/tests/unit/test_overview_tools.py +149 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_python_extractor.py +14 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/uv.lock +1 -1
- codegraph_brain-0.23.3/.github/test-count-baseline +0 -1
- codegraph_brain-0.23.3/.release-please-manifest.json +0 -3
- codegraph_brain-0.23.3/docs/how-to/CLI_USAGE.md +0 -148
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.claude-plugin/marketplace.json +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.gitattributes +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.github/workflows/autodoc.yml +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.github/workflows/ci.yml +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.github/workflows/guardian.yml +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.github/workflows/mcp-registry.yml +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.github/workflows/pr-title.yml +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.github/workflows/release-please.yml +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.gitignore +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.pre-commit-config.yaml +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/.python-version +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/CLAUDE.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/CONTRIBUTING.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/LICENSE +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/Makefile +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/PRIVACY.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/CURATION.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/calibration.jsonl +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/experiments/246-cross-vendor/README.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/experiments/246-cross-vendor/free-nemotron-quota-cutoff.jsonl +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/experiments/401-evidence/README.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/experiments/401-evidence/pr-399-control-rows.jsonl +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/experiments/401-evidence/pr-399-recording.json +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/experiments/401-evidence/pr-399-treatment-rows.jsonl +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/experiments/407-no-checker-appeal/README.md +0 -0
- {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
- {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
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/pr-122.yaml +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/pr-140.yaml +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/pr-141.yaml +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/pr-142.yaml +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/pr-143.yaml +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/pr-144.yaml +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/pr-278.yaml +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/pr-313.yaml +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/guardian/results.jsonl +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian/README.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian/cal_dot_com.json +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian/discourse.json +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian/grafana.json +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian/keycloak.json +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian/sentry.json +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-judged.jsonl +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-p3-judged-run1.jsonl +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-p3-judged-run1.jsonl.corrupted-backup +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-p3-run1.jsonl +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-p3-run2.jsonl +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-p3-run3.jsonl +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-plan.json +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-repeat-judged.jsonl +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-repeat-reviews.jsonl +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/benchmarks/martian-reviews.jsonl +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/data/.gitkeep +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/AUDIT.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/CASE_STUDY.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/GUARDIAN_LOCAL_BENCH.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/GUARDIAN_REMOTE_OLLAMA.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/architecture/ONTOLOGY.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/architecture/PATTERNS_AND_TRIADS.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/architecture/SELF_PORTRAIT.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/architecture/health_badge.json +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/assets/.gitignore +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/assets/cgis-app-avatar.png +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/assets/cgis-app-avatar.svg +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/assets/generate_avatar.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/examples/.gitkeep +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/how-to/AGENT_ONBOARDING.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/lab-notes/2026-06-11-chunked-review-negative-result.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/ontology/.gitkeep +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/ontology/core.yaml +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/ontology/domains.yaml +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/ontology/patterns.yaml +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/ontology/tolerances.lock +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/plans/2026-09-09-graph-freshness.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-09-domain-pattern-fingerprint-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-09-pattern-alphabet-motif-basis-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-10-guardian-sprint-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-11-fastapi-di-edges-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-11-guardian-chunked-review-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-11-guardian-chunker-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-11-mcp-drift-validate-fqn-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-11-resolver-split-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-11-symbol-import-edges-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-12-drift-empty-domains-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-12-gate-semantics-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-12-init-ontology-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-12-release-please-ci-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-13-suggest-packages-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-06-13-tangle-anti-pattern-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-29-guardian-skeptic-scoring-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-cgis-fractal-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-cgis-fractal-plan.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-chunk-source-filter-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-chunk-source-filter-plan.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-genai-client-close-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-genai-client-close-plan.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-guardian-precision-bench-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-guardian-precision-bench-plan.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-guardian-timeout-retry-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-30-guardian-timeout-retry-plan.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-07-31-finder-bug-class-taxonomy.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-08-01-aura-autoevolution-poc.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-08-11-guardian-code-review-bench.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-08-14-review-fingerprint-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-09-05-annotation-graph-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/2026-09-09-graph-freshness-design.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/BLUEPRINT.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/PRD.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/TDD.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-09-fingerprint-drift.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-10-guardian-context-skeptic-inline.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-10-guardian-structured-findings-bench.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-10-motif-basis-part-b.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-10-unified-pattern-alphabet.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-11-fastapi-di-edges.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-11-guardian-chunked-review.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-11-guardian-chunker.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-11-mcp-drift-validate-fqn.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-11-resolver-split.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-12-drift-empty-domains.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-12-gate-semantics.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-12-init-ontology.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-12-release-please-ci.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-12-symbol-import-edges.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-06-13-suggest-packages.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-07-29-guardian-skeptic-scoring.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-08-14-review-fingerprint.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-09-05-annotation-graph-pr1.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/specs/plans/2026-09-05-annotation-graph-pr2.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/glama.json +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/main.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/plugin/.claude-plugin/plugin.json +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/plugin/.mcp.json +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/plugin/README.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/plugin/skills/ingest/SKILL.md +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/release-please-config.json +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/backfill_calibration_fingerprint.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/backfill_review_fingerprint.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/check_test_count.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/colab_bench.sh +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/gen_ideal_graph.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/generate_health.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/generate_mcp_ref.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/generate_schema_docs.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/guardian_bench.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/guardian_calibrate.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/guardian_martian.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/guardian_replay_skeptic.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/guardian_review.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/inject_architecture_graph.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/mcp_registry_gate.sh +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/ollama_visitor.sh +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/probe_closure_gap.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/probe_tier_ladder.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/recordings_from_corpus.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/scripts/skeptic_arms.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/__init__.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/__main__.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/api/.gitkeep +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/api/__init__.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/core/.gitkeep +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/core/coverage.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/core/freshness.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/core/generated.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/core/js_globals.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/core/models.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/core/paths.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/.gitkeep +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/_python_annotations.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/_python_ast.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/_python_classes.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/_python_functions.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/_python_imports.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/_python_types.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/_typescript_bindings.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/base.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/registry.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/extractors/typescript_extractor.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/__init__.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/axes.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/bench.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/calibrate.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/chunked.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/chunker.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/collector.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/core.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/diff_index.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/evidence.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/findings.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/github_poster.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/martian.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/metrics.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/prompts.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/providers/__init__.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/providers/base.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/providers/gemini.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/providers/mistral.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/providers/ollama.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/providers/openrouter.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/recording.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/render.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/review_fingerprint.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/runner.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/guardian/skeptic.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/pipeline.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/py.typed +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/analysis/__init__.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/analysis/analyzer.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/analysis/anomaly.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/analysis/cohesion.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/analysis/health.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/analysis/suggest_service.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/context/__init__.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/context/audit.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/context/context_service.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/context/orphans.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/context/prompt.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/context/snippet.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/drift/__init__.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/drift/_scc.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/drift/drift.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/drift/drift_service.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/drift/fingerprint.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/drift/fractal.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/drift/ontology_init.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/drift/quotient.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/drift/triads.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/engine.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/fqn.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/render/__init__.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/render/graph_json.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/render/mermaid.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/query/render/metrics.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/resolver/.gitkeep +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/resolver/__init__.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/resolver/engine.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/resolver/indices.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/resolver/js_builtins.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/resolver/symbols.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/resolver/uplift.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/src/cgis/storage/.gitkeep +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/integration/.gitkeep +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/.gitkeep +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/__init__.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/conftest.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/test_annotation_calibration.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/test_architecture.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/test_drift.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/test_fractal.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/test_init_ontology_roundtrip.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/test_self_parse.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/test_self_parse_ts.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/self_parsing/test_suggest.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/.gitkeep +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/conftest.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/guardian_stubs.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/review_path_inventory.txt +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test___main__.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_analyzer.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_annotation_edges.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_audit.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_backfill_calibration_fingerprint.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_backfill_review_fingerprint.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_check_pytest_raises.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_check_test_count.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_cli.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_cohesion.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_context_service.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_di_acceptance.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_drift.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_drift_service.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_extractor_registry.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_fingerprint.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_fqn.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_fractal.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_freshness.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_gen_ideal_graph.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_generate_mcp_ref.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_generated.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_graph_json.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_axes.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_bench.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_bench_script.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_calibrate.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_calibrate_script.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_chunked.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_chunker.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_collector.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_core.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_diff_index.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_evidence.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_findings.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_martian.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_martian_union.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_metrics.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_mistral_sampling.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_ollama_sampling.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_ollama_truncation.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_openrouter.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_poster.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_providers.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_providers_name.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_recording.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_render.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_replay_skeptic.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_review_script.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_runner.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_salvage.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_guardian_skeptic.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_health_scorer.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_import_acceptance.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_inject_architecture_graph.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_mcp_tool_schemas.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_mermaid.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_metrics.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_models.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_name_load_positions.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_ontology_compliance.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_ontology_init.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_orphans.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_paths.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_patterns_yaml.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_pipeline.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_pipeline_incremental_symbols.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_prompt.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_python_annotations.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_query_coverage.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_quotient.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_recordings_from_corpus.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_resolver.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_resolver_indices.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_resolver_js_builtins.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_resolver_language_scope.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_resolver_symbols.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_review_fingerprint_closure.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_review_fingerprint_contract.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_review_fingerprint_digest.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_review_fingerprint_record.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_self_types.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_skeptic_arms.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_snippet.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_sqlite_store.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_suggest_service.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_temperature_source.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_triads.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_typescript_extractor.py +0 -0
- {codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/tests/unit/test_uplift.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2618
|
|
@@ -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.
|
|
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:
|
|
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:
|
|
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 -->
|
{codegraph_brain-0.23.3 → codegraph_brain-0.24.0}/docs/architecture/diagrams/pipeline_flow.mermaid
RENAMED
|
@@ -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:
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
"what breaks if I change X?".
|
|
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
|
|
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
|
|
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
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
367
|
-
"
|
|
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
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
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,
|
|
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
|
|
428
|
-
"
|
|
429
|
-
"
|
|
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
|
-
|
|
437
|
-
|
|
438
|
-
"what breaks if I change X?".
|
|
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,
|
|
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
|
|
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,
|