codebase-index 1.7.0__tar.gz → 1.8.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.
- codebase_index-1.8.0/.claude/skills/codebase-index/.skill_version +1 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.claude-plugin/plugin.json +1 -1
- codebase_index-1.8.0/.codex/skills/codebase-index/.skill_version +1 -0
- codebase_index-1.8.0/.opencode/skills/codebase-index/.skill_version +1 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/CHANGELOG.md +22 -1
- {codebase_index-1.7.0 → codebase_index-1.8.0}/PKG-INFO +4 -2
- {codebase_index-1.7.0 → codebase_index-1.8.0}/README.md +3 -1
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/ARCHITECTURE.md +1 -1
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/FAQ.md +6 -5
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/INSTALLATION.md +3 -3
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/RETRIEVAL.md +33 -17
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/RETRIEVAL_PIPELINE.md +58 -35
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/SEO.md +2 -2
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/installer.md +2 -3
- {codebase_index-1.7.0 → codebase_index-1.8.0}/pyproject.toml +1 -1
- {codebase_index-1.7.0 → codebase_index-1.8.0}/requirements.lock +1 -1
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/__init__.py +1 -1
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/graph/expand.py +123 -13
- codebase_index-1.8.0/src/codebase_index/graph/retrieval.py +456 -0
- codebase_index-1.8.0/src/codebase_index/retrieval/diversity.py +289 -0
- codebase_index-1.8.0/src/codebase_index/retrieval/fuzzy.py +278 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/retrieval/intent.py +1 -1
- codebase_index-1.8.0/src/codebase_index/retrieval/lexical.py +409 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/retrieval/pipeline.py +62 -18
- codebase_index-1.8.0/src/codebase_index/retrieval/priors.py +211 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/retrieval/rerank.py +15 -1
- codebase_index-1.8.0/src/codebase_index/retrieval/searchers.py +551 -0
- codebase_index-1.8.0/src/codebase_index/retrieval/tuning.py +106 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/storage/repo.py +7 -3
- codebase_index-1.8.0/tests/eval/__init__.py +1 -0
- codebase_index-1.8.0/tests/eval/harness.py +257 -0
- codebase_index-1.8.0/tests/eval/metrics.py +129 -0
- codebase_index-1.8.0/tests/eval/queries/self_repo.yml +204 -0
- codebase_index-1.8.0/tests/eval/run_eval.py +104 -0
- codebase_index-1.8.0/tests/golden/explain_auth.json +54 -0
- codebase_index-1.8.0/tests/golden/mcp_explain_code.json +56 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden/mcp_search_code.json +4 -4
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden/search_token.json +4 -4
- codebase_index-1.8.0/tests/test_diversity.py +49 -0
- codebase_index-1.8.0/tests/test_fuzzy.py +42 -0
- codebase_index-1.8.0/tests/test_graph_retrieval.py +100 -0
- codebase_index-1.8.0/tests/test_impact_decay.py +110 -0
- codebase_index-1.8.0/tests/test_lexical.py +66 -0
- codebase_index-1.8.0/tests/test_priors.py +74 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_search_cli.py +13 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_symbol_ranking.py +109 -12
- codebase_index-1.7.0/.claude/skills/codebase-index/.skill_version +0 -1
- codebase_index-1.7.0/.codex/skills/codebase-index/.skill_version +0 -1
- codebase_index-1.7.0/.opencode/skills/codebase-index/.skill_version +0 -1
- codebase_index-1.7.0/src/codebase_index/retrieval/searchers.py +0 -291
- codebase_index-1.7.0/tests/golden/explain_auth.json +0 -21
- codebase_index-1.7.0/tests/golden/mcp_explain_code.json +0 -23
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.claude/skills/codebase-index/SKILL.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.claude/skills/codebase-index/examples/hooks/settings.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.claude/skills/codebase-index/references/commands.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.claude/skills/codebase-index/references/response-contract.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.claude/skills/codebase-index/scripts/cbx +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.claude/skills/codebase-index/scripts/cbx.ps1 +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.claude-plugin/marketplace.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.codex/skills/codebase-index/SKILL.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.codex/skills/codebase-index/examples/hooks/settings.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.codex/skills/codebase-index/references/commands.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.codex/skills/codebase-index/references/response-contract.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.codex/skills/codebase-index/scripts/cbx +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.codex/skills/codebase-index/scripts/cbx.ps1 +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.editorconfig +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.gitattributes +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.github/FUNDING.yml +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.github/ISSUE_TEMPLATE/skill_listing_request.yml +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.github/workflows/ci.yml +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.github/workflows/release.yml +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.gitignore +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.opencode/agents/codebase-index.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.opencode/commands/codebase-index.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.opencode/skills/codebase-index/SKILL.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.opencode/skills/codebase-index/examples/hooks/settings.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.opencode/skills/codebase-index/references/commands.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.opencode/skills/codebase-index/references/response-contract.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.opencode/skills/codebase-index/scripts/cbx +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/.opencode/skills/codebase-index/scripts/cbx.ps1 +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/AGENTS.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/CODE_OF_CONDUCT.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/CONTRIBUTING.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/LICENSE +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/ROADMAP.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/SECURITY.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/adapters/claude.ps1 +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/adapters/claude.sh +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/adapters/codex.ps1 +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/adapters/codex.sh +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/adapters/opencode.ps1 +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/adapters/opencode.sh +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/assets/demo.png +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/assets/mark.png +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/assets/social-preview.png +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/bin/cbx +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/bin/cbx.ps1 +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/bin/codebase-index +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/bin/codebase-index.ps1 +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/BENCHMARKS.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/COMPARISON.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/DATABASE_SCHEMA.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/LANGUAGES.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/MCP.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/PRODUCT_UPGRADE_PLAN.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/QUICKSTART.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/RELEASE_CHECKLIST.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/ROADMAP.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/SCHEMA.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/SECURITY.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/SECURITY_MODEL.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/SKILL_DESIGN.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/superpowers/plans/2026-05-29-benchmark-index-improvements.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/superpowers/plans/2026-05-29-generalize-skill-research-discipline.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/superpowers/plans/2026-05-29-m1-storage-discovery.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/superpowers/plans/2026-05-29-m2-fts-lexical.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/superpowers/plans/2026-05-29-m3-treesitter-symbols.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/superpowers/plans/2026-05-29-m4-hybrid-search.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/superpowers/plans/2026-05-29-m5-graph-impact.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/superpowers/plans/2026-05-29-m6-embeddings-vector.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/superpowers/plans/2026-05-29-m7-5-plugin-one-command-install.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/superpowers/plans/2026-05-29-m7-skill-packaging.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/superpowers/plans/2026-05-29-m8-hooks-watch.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/superpowers/plans/2026-05-29-m9-release.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/superpowers/plans/2026-05-29-multilang-symbols-make-skill-win.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/superpowers/plans/2026-06-24-snippet-skeletonization.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/superpowers/specs/2026-05-29-plugin-one-command-install-design.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/superpowers/specs/2026-06-14-typed-framework-edges-design.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/docs/superpowers/specs/2026-06-24-snippet-skeletonization-design.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/examples/config.example.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/examples/demo-project/README.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/examples/hooks/settings.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/examples/queries.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/examples/sample-queries.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/examples/sample-retrieval-output.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/hooks/hooks.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/install.ps1 +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/install.sh +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/lib/common.ps1 +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/lib/common.sh +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/scripts/bootstrap.ps1 +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/scripts/bootstrap.sh +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/scripts/gen_assets.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/scripts/release_smoke.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/scripts/sync_skill_copies.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/skill/SKILL.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/skill/examples/basic-usage.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/skill/examples/claude-md-example.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/skill/examples/hooks-example.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/skill/references/commands.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/skill/references/response-contract.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/skill/scripts/bootstrap.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/skill/scripts/cbx +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/skill/scripts/cbx.ps1 +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/skill/scripts/doctor.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/skill/scripts/install.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/skill/scripts/smoke_test.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/skills/codebase-index/SKILL.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/skills/codebase-index/references/commands.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/skills/codebase-index/references/response-contract.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/__main__.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/cli.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/config.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/discovery/__init__.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/discovery/classify.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/discovery/ignore.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/discovery/walker.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/doctor.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/embeddings/__init__.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/embeddings/backend.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/embeddings/external.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/embeddings/local.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/embeddings/noop.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/graph/__init__.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/graph/analysis.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/graph/builder.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/graph/export.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/graph/navigate.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/indexer/__init__.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/indexer/doc_chunks.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/indexer/freshness.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/indexer/pipeline.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/mcp/__init__.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/mcp/server.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/models.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/output/__init__.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/output/json.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/output/markdown.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/output/redact.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/parsers/__init__.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/parsers/base.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/parsers/languages.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/parsers/line_chunker.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/parsers/symbol_chunks.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/parsers/treesitter.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/retrieval/__init__.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/retrieval/budget.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/retrieval/fusion.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/retrieval/skeleton.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/retrieval/types.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/scaffold.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/service.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/skill_template/SKILL.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/skill_template/examples/hooks/settings.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/skill_template/references/commands.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/skill_template/references/response-contract.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/skill_template/scripts/cbx +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/skill_template/scripts/cbx.ps1 +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/skill_update.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/storage/__init__.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/storage/db.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/storage/schema.sql +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/watch/__init__.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/src/codebase_index/watch/watcher.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/__init__.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/benchmark_honest.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/benchmark_honest_RESULTS.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/benchmark_honest_newtowny.txt +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/benchmark_public.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/benchmark_public_RESULTS.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/benchmark_real_repo.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/conftest.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/fixtures/README.md +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/fixtures/expected_answers.yml +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/fixtures/multilang/sample.go +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/fixtures/multilang/sample.java +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/fixtures/multilang/sample.rs +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/fixtures/sample_repo/.env +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/fixtures/sample_repo/.gitignore +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/fixtures/sample_repo/huge.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/fixtures/sample_repo/logo.png +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/fixtures/sample_repo/node_modules/leftpad/index.js +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/fixtures/sample_repo/secrets.pem +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/fixtures/sample_repo/src/api/service.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/fixtures/sample_repo/src/auth/token.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/fixtures/sample_repo/src/models/user.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/fixtures/sample_repo/src/schema.generated.ts +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/fixtures/sample_repo/web/app.ts +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden/architecture.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden/describe_refresh.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden/impact_user_model.json +9 -9
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden/mcp_architecture.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden/mcp_describe_symbol.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden/mcp_find_refs.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden/mcp_find_symbol.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden/mcp_healthcheck.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden/mcp_impact_of.json +9 -9
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden/mcp_impact_of_diff.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden/mcp_index_stats.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden/mcp_path_between.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden/path_renew_to_token.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden/refs_refresh_access_token.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden/stats.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden/symbol_user.json +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/golden_utils.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/installer/smoke.ps1 +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/installer/smoke.sh +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_analysis.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_benchmark_comparison.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_bootstrap.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_budget.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_chunker.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_classify.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_clean_cli.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_cli.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_cli_golden.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_config.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_diff_impact.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_discovery.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_doc_chunks.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_doctor.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_embeddings_backend.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_embeddings_external.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_embeddings_local.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_freshness.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_fusion.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_graph.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_graph_coverage.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_graph_export_cli.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_hooks_merge.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_hybrid_ranking.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_ignore.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_impact_cli.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_index_cli.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_init_cli.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_intent.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_languages.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_mcp_golden.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_mcp_server.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_multilang_symbols.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_navigate.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_output.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_packaging.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_parse_guardrails.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_perf_smoke.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_pipeline.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_pipeline_search.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_pipeline_vectors.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_plugin_manifest.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_plugin_skill_parity.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_plugin_wrappers.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_public_benchmark.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_quality_benchmark.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_redact.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_repo_search.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_rerank.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_retrieval_types.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_scaffold.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_searchers.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_seeded_index.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_service.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_skeleton.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_skill_update.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_storage.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_symbol_cli.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_symbol_refs.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_sync_skill_copies.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_treesitter.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_update.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_update_cli.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_vector_search.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_vectors_storage.py +0 -0
- {codebase_index-1.7.0 → codebase_index-1.8.0}/tests/test_watcher.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.8.0
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "codebase-index",
|
|
4
4
|
"displayName": "Codebase Index",
|
|
5
5
|
"description": "Give Claude a precise local map of your codebase: find implementations, trace behavior, and predict change impact with file-line evidence.",
|
|
6
|
-
"version": "1.
|
|
6
|
+
"version": "1.8.0",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "codebase-index contributors"
|
|
9
9
|
},
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.8.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.8.0
|
|
@@ -6,6 +6,26 @@ All notable changes to this project are documented here. The format is based on
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [1.8.0] - 2026-09-02
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **Reproducible retrieval evaluation.** Added a self-repository ground-truth
|
|
14
|
+
query suite with Recall@K, MRR, nDCG, hit rate, precision, MAP, useful-context,
|
|
15
|
+
latency percentiles, and one-signal ablations.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- **Hybrid retrieval quality.** Natural-language lexical queries now use safe,
|
|
20
|
+
down-weighted identifier/synonym expansion and soft term coverage; exact symbol
|
|
21
|
+
lookup preserves framing-word tolerance and bounded fuzzy matching.
|
|
22
|
+
- **Packaging compatibility.** Cap the build backend below the Metadata 2.5
|
|
23
|
+
default until the release validation toolchain supports that metadata version.
|
|
24
|
+
- **Ranking defaults are evidence-driven.** Implementation/test/documentation
|
|
25
|
+
source priors are calibrated from the benchmark. Graph propagation is bounded
|
|
26
|
+
and intent-directed; graph and MMR signals remain opt-in because ablations
|
|
27
|
+
reduced direct retrieval quality on the reproducible corpus.
|
|
28
|
+
|
|
9
29
|
## [1.7.0] - 2026-07-29
|
|
10
30
|
|
|
11
31
|
### Added
|
|
@@ -401,7 +421,8 @@ All notable changes to this project are documented here. The format is based on
|
|
|
401
421
|
- Hooks example + `watch` mode for keeping the index fresh without blocking the edit loop (M8).
|
|
402
422
|
- `doctor`, `stats`, `clean` diagnostics/maintenance commands.
|
|
403
423
|
|
|
404
|
-
[Unreleased]: https://github.com/denfry/codebase-index/compare/v1.
|
|
424
|
+
[Unreleased]: https://github.com/denfry/codebase-index/compare/v1.8.0...HEAD
|
|
425
|
+
[1.8.0]: https://github.com/denfry/codebase-index/compare/v1.7.0...v1.8.0
|
|
405
426
|
[1.7.0]: https://github.com/denfry/codebase-index/compare/v1.6.0...v1.7.0
|
|
406
427
|
[1.6.0]: https://github.com/denfry/codebase-index/compare/v1.5.0...v1.6.0
|
|
407
428
|
[1.5.0]: https://github.com/denfry/codebase-index/compare/v1.4.0...v1.5.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codebase-index
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.8.0
|
|
4
4
|
Summary: A precise local codebase map for AI coding agents: find, trace, and predict with file-line evidence.
|
|
5
5
|
Project-URL: Homepage, https://github.com/denfry/codebase-index
|
|
6
6
|
Project-URL: Documentation, https://github.com/denfry/codebase-index/tree/main/docs
|
|
@@ -321,7 +321,7 @@ See [MCP.md](docs/MCP.md) for client configuration.
|
|
|
321
321
|
|
|
322
322
|
## Project status
|
|
323
323
|
|
|
324
|
-
The latest released line is **1.
|
|
324
|
+
The latest released line is **1.8.0**. It includes:
|
|
325
325
|
|
|
326
326
|
- hybrid and optional vector retrieval;
|
|
327
327
|
- Tree-sitter symbol extraction across the documented language tiers;
|
|
@@ -329,6 +329,8 @@ The latest released line is **1.7.0**. It includes:
|
|
|
329
329
|
- architecture communities, central nodes, and surprising cross-module links;
|
|
330
330
|
- shortest dependency paths and node descriptions;
|
|
331
331
|
- token-budgeted and skeletonized retrieval packets;
|
|
332
|
+
- benchmark-calibrated lexical expansion, fuzzy identifier matching, and source-aware ranking;
|
|
333
|
+
- bounded, intent-directed graph discovery with optional diversity and duplicate suppression;
|
|
332
334
|
- CLI, Skill, plugin, and MCP delivery;
|
|
333
335
|
- incremental updates, watch hooks, diagnostics, skill rollback, and diff-aware
|
|
334
336
|
impact analysis.
|
|
@@ -271,7 +271,7 @@ See [MCP.md](docs/MCP.md) for client configuration.
|
|
|
271
271
|
|
|
272
272
|
## Project status
|
|
273
273
|
|
|
274
|
-
The latest released line is **1.
|
|
274
|
+
The latest released line is **1.8.0**. It includes:
|
|
275
275
|
|
|
276
276
|
- hybrid and optional vector retrieval;
|
|
277
277
|
- Tree-sitter symbol extraction across the documented language tiers;
|
|
@@ -279,6 +279,8 @@ The latest released line is **1.7.0**. It includes:
|
|
|
279
279
|
- architecture communities, central nodes, and surprising cross-module links;
|
|
280
280
|
- shortest dependency paths and node descriptions;
|
|
281
281
|
- token-budgeted and skeletonized retrieval packets;
|
|
282
|
+
- benchmark-calibrated lexical expansion, fuzzy identifier matching, and source-aware ranking;
|
|
283
|
+
- bounded, intent-directed graph discovery with optional diversity and duplicate suppression;
|
|
282
284
|
- CLI, Skill, plugin, and MCP delivery;
|
|
283
285
|
- incremental updates, watch hooks, diagnostics, skill rollback, and diff-aware
|
|
284
286
|
impact analysis.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## 1. Overview
|
|
4
4
|
|
|
5
|
-
`codebase-index` is a **local-first** code intelligence layer for AI coding agents. In `1.
|
|
5
|
+
`codebase-index` is a **local-first** code intelligence layer for AI coding agents. In `1.8.0`
|
|
6
6
|
it has two shipped faces:
|
|
7
7
|
|
|
8
8
|
1. **A Claude Code Skill** (`.claude/skills/codebase-index/SKILL.md`) that Claude auto-invokes for
|
|
@@ -14,7 +14,7 @@ pip install codebase-index # or: pipx install codebase-index
|
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
To pin an exact version or grab an unreleased commit, install from a GitHub tag
|
|
17
|
-
instead: `pip install "codebase-index @ git+https://github.com/denfry/codebase-index.git@v1.
|
|
17
|
+
instead: `pip install "codebase-index @ git+https://github.com/denfry/codebase-index.git@v1.8.0"`.
|
|
18
18
|
|
|
19
19
|
Then run `codebase-index init` inside your project and `codebase-index index` to build
|
|
20
20
|
the first index. In Claude Code you can instead install the plugin
|
|
@@ -162,11 +162,12 @@ Yes. Use any of these methods:
|
|
|
162
162
|
|
|
163
163
|
## Is it production-ready?
|
|
164
164
|
|
|
165
|
-
Yes — `codebase-index` is released as **v1.
|
|
166
|
-
functionality is implemented and tested. The current `1.
|
|
165
|
+
Yes — `codebase-index` is released as **v1.8.0**. The core indexing and search
|
|
166
|
+
functionality is implemented and tested. The current `1.8.0` package includes:
|
|
167
167
|
|
|
168
|
-
- Hybrid FTS/path/symbol/vector retrieval
|
|
169
|
-
|
|
168
|
+
- Hybrid FTS/path/symbol/vector retrieval with benchmark-calibrated lexical expansion
|
|
169
|
+
and bounded fuzzy identifier matching
|
|
170
|
+
- Import/call/reference graph expansion, intent-directed graph discovery, and `impact`
|
|
170
171
|
- Diff-aware blast-radius analysis for tracked working-tree changes
|
|
171
172
|
- Optional local embeddings, with external embeddings gated behind explicit opt-in
|
|
172
173
|
- Hooks and watch mode for freshness
|
|
@@ -67,7 +67,7 @@ pipx install codebase-index # isolated environment
|
|
|
67
67
|
uv tool install codebase-index # uv-managed tool
|
|
68
68
|
|
|
69
69
|
# Pin to a GitHub tag for an exact or unreleased version
|
|
70
|
-
pip install "codebase-index @ git+https://github.com/denfry/codebase-index.git@v1.
|
|
70
|
+
pip install "codebase-index @ git+https://github.com/denfry/codebase-index.git@v1.8.0"
|
|
71
71
|
|
|
72
72
|
# From source (editable mode)
|
|
73
73
|
git clone https://github.com/denfry/codebase-index.git
|
|
@@ -90,7 +90,7 @@ pip install -e ".[embeddings-local,watch,dev]"
|
|
|
90
90
|
|
|
91
91
|
### uvx / Homebrew status
|
|
92
92
|
|
|
93
|
-
As of `1.
|
|
93
|
+
As of `1.8.0`, **PyPI is shipped** — `pip install codebase-index` and
|
|
94
94
|
`pipx install codebase-index` are the verified paths. `uvx codebase-index init`,
|
|
95
95
|
Homebrew tap installation, signed checksums, and SBOMs remain distribution
|
|
96
96
|
targets for a more complete release story.
|
|
@@ -130,7 +130,7 @@ Expected output:
|
|
|
130
130
|
=== codebase-index Doctor ===
|
|
131
131
|
|
|
132
132
|
[OK] Python 3.12 (requires 3.11+)
|
|
133
|
-
[OK] codebase-index package installed (v1.
|
|
133
|
+
[OK] codebase-index package installed (v1.8.0)
|
|
134
134
|
[OK] tree-sitter is available
|
|
135
135
|
[INFO] Cache directory not yet created: ...
|
|
136
136
|
[INFO] Skill not installed in .claude/skills/
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
The retrieval engine turns a natural-language or symbolic query into a **compact, ranked,
|
|
4
4
|
token-budgeted** set of file/line ranges for Claude to read. It is hybrid: multiple independent
|
|
5
|
-
retrievers run, their results are fused
|
|
5
|
+
retrievers run, their results are fused and reranked, then trimmed. Graph expansion and MMR are
|
|
6
|
+
available as bounded opt-in signals; the shipped default prioritizes direct evidence.
|
|
6
7
|
|
|
7
8
|
```
|
|
8
9
|
query
|
|
@@ -21,13 +22,16 @@ query
|
|
|
21
22
|
[3] rank fusion ── Reciprocal Rank Fusion (RRF) across retriever result lists
|
|
22
23
|
│
|
|
23
24
|
▼
|
|
24
|
-
[4] rerank ── feature-based score (symbol-kind, path
|
|
25
|
+
[4] rerank ── feature-based score (symbol-kind, path, source role, centrality)
|
|
25
26
|
│
|
|
26
27
|
▼
|
|
27
|
-
[5] graph expansion ── pull in imports/callers/callees per intent (bounded)
|
|
28
|
+
[5] optional graph expansion ── pull in imports/callers/callees per intent (bounded)
|
|
28
29
|
│
|
|
29
30
|
▼
|
|
30
|
-
[6]
|
|
31
|
+
[6] diversity / duplicate filtering (MMR opt-in, SimHash duplicate guard)
|
|
32
|
+
│
|
|
33
|
+
▼
|
|
34
|
+
[7] token budgeting ── greedy fill under --token-budget; snippets trimmed + secret-redacted
|
|
31
35
|
│
|
|
32
36
|
▼
|
|
33
37
|
ranked results + recommended_reads + fallback_suggestions
|
|
@@ -59,10 +63,12 @@ source)` list so fusion is source-agnostic.
|
|
|
59
63
|
|
|
60
64
|
- **Path** — exact and glob path matches (`src/auth/*.py`, `auth.py`). Highest precision; surfaced
|
|
61
65
|
first when the query clearly names a path.
|
|
62
|
-
- **Symbol** — query against `symbols` (
|
|
63
|
-
(function/class/method/...) and signature. Primary for `locate_impl` / `find_refs`.
|
|
66
|
+
- **Symbol** — query against `symbols` (exact, identifier parts, bounded fuzzy matching). Carries
|
|
67
|
+
`kind` (function/class/method/...) and signature. Primary for `locate_impl` / `find_refs`.
|
|
64
68
|
- **FTS** — FTS5 `bm25()` over the `fts_chunks` virtual table (chunk text + symbol names +
|
|
65
|
-
summaries indexed).
|
|
69
|
+
summaries indexed). Query-time camelCase/snake_case splitting, small down-weighted synonym
|
|
70
|
+
expansion, and soft coverage scoring make natural-language questions robust without weakening
|
|
71
|
+
exact terms.
|
|
66
72
|
- **Vector** *(opt-in)* — cosine similarity over chunk embeddings via `sqlite-vec`. Only runs if
|
|
67
73
|
`embeddings.enabled = true`. Adds semantic recall for paraphrased queries. Absent → pipeline
|
|
68
74
|
degrades gracefully to FTS+symbol.
|
|
@@ -96,19 +102,30 @@ A lightweight, explainable feature score (no external model required) layered on
|
|
|
96
102
|
The reranker also produces the human-readable **`reason`** string per result
|
|
97
103
|
(e.g. *"exact symbol match · called by 4 sites · in src/auth/"*).
|
|
98
104
|
|
|
99
|
-
## 5. Graph expansion (`graph/expand.py`)
|
|
105
|
+
## 5. Graph expansion (`graph/retrieval.py`; `graph/expand.py` for impact APIs)
|
|
106
|
+
|
|
107
|
+
Graph expansion runs only when the tuning enables `graph_source` and the intent plan requests a
|
|
108
|
+
graph strategy. It is disabled by default because the reproducible self-repository ablation
|
|
109
|
+
reduced direct-hit MRR when related nodes displaced lexical hits.
|
|
100
110
|
|
|
101
|
-
|
|
102
|
-
(default 1–2) and a node cap:
|
|
111
|
+
When enabled, it is bounded by depth and node cap:
|
|
103
112
|
|
|
104
113
|
- `impact` → walk **up** edges (callers, importers) = blast radius.
|
|
105
114
|
- `how_it_works` → walk **down** edges (callees, imported defs) = mechanism.
|
|
106
|
-
- `find_refs` →
|
|
107
|
-
- `data_flow` → both directions along call/assignment edges.
|
|
115
|
+
- `find_refs` → walk **up** edges to callers/importers.
|
|
116
|
+
- `data_flow` → walk **both** directions along call/assignment edges.
|
|
117
|
+
|
|
118
|
+
Expanded nodes retain edge confidence and receive distance-decayed scores so seeds stay on top.
|
|
119
|
+
|
|
120
|
+
## 6. Diversity and duplicate control
|
|
108
121
|
|
|
109
|
-
|
|
122
|
+
`retrieval.diversity` provides bounded MMR selection and SimHash near-duplicate
|
|
123
|
+
suppression. MMR is disabled in the shipped default because the reproducible
|
|
124
|
+
benchmark favored relevance-only ranking; callers that need broader snippet
|
|
125
|
+
coverage can enable `RetrievalTuning(mmr=True)`. Duplicate suppression remains
|
|
126
|
+
available independently.
|
|
110
127
|
|
|
111
|
-
##
|
|
128
|
+
## 7. Token budgeting (`retrieval/budget.py`)
|
|
112
129
|
|
|
113
130
|
Results are trimmed to fit `--token-budget` (default per intent, e.g. 1500 tokens):
|
|
114
131
|
|
|
@@ -121,7 +138,7 @@ Results are trimmed to fit `--token-budget` (default per intent, e.g. 1500 token
|
|
|
121
138
|
|
|
122
139
|
The point: Claude gets enough to decide, and a precise list of what to read next — never a dump.
|
|
123
140
|
|
|
124
|
-
##
|
|
141
|
+
## 8. Confidence & fallback
|
|
125
142
|
|
|
126
143
|
A `confidence` score (high/medium/low) is derived from: top RRF score, score gap between #1 and #2,
|
|
127
144
|
number of agreeing retrievers, and whether a symbol matched exactly.
|
|
@@ -131,13 +148,12 @@ number of agreeing retrievers, and whether a symbol matched exactly.
|
|
|
131
148
|
- **low** → skill instructs Claude to **fall back** to `ripgrep`/Grep/Glob with suggested patterns
|
|
132
149
|
emitted in `fallback_suggestions` (derived from query terms + detected symbols).
|
|
133
150
|
|
|
134
|
-
##
|
|
151
|
+
## 9. Output payload (shared by Markdown + JSON)
|
|
135
152
|
|
|
136
153
|
```jsonc
|
|
137
154
|
{
|
|
138
155
|
"query": "where is auth token refresh implemented",
|
|
139
156
|
"intent": "locate_impl",
|
|
140
|
-
"index": { "exists": true, "stale": false, "built_at": "...", "head_commit": "abc1234" },
|
|
141
157
|
"confidence": "high",
|
|
142
158
|
"results": [
|
|
143
159
|
{
|
|
@@ -18,7 +18,7 @@ Intent detection (keyword / symbol / impact / general)
|
|
|
18
18
|
│ 2. Path-based search │
|
|
19
19
|
│ 3. SQLite FTS5 lexical search │
|
|
20
20
|
│ 4. Vector search (optional embeddings) │
|
|
21
|
-
│ 5. Graph expansion (
|
|
21
|
+
│ 5. Graph expansion (explicit opt-in) │
|
|
22
22
|
└─────────────────────────────────────────┘
|
|
23
23
|
↓
|
|
24
24
|
Reciprocal Rank Fusion (RRF)
|
|
@@ -53,15 +53,16 @@ Ranked retrieval packet with confidence score
|
|
|
53
53
|
|
|
54
54
|
## 3. SQLite FTS5 Lexical Search
|
|
55
55
|
|
|
56
|
-
**Trigger:** General keyword queries.
|
|
56
|
+
**Trigger:** General keyword and natural-language queries.
|
|
57
57
|
|
|
58
58
|
**Process:**
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
59
|
+
- Parse identifiers into camelCase/PascalCase/snake_case subtokens.
|
|
60
|
+
- Add a small, explicit synonym/inflection vocabulary at lower weight.
|
|
61
|
+
- Use OR groups for soft matching, then require bounded term coverage and rank
|
|
62
|
+
by original-term coverage plus BM25.
|
|
63
|
+
- Quote every FTS term so query punctuation cannot inject MATCH operators.
|
|
63
64
|
|
|
64
|
-
**Score:**
|
|
65
|
+
**Score:** Coverage is the primary signal; BM25 is a bounded tie-break.
|
|
65
66
|
|
|
66
67
|
## 4. Vector Search (Optional)
|
|
67
68
|
|
|
@@ -80,52 +81,74 @@ Ranked retrieval packet with confidence score
|
|
|
80
81
|
|
|
81
82
|
## 5. Graph Expansion
|
|
82
83
|
|
|
83
|
-
**Trigger:**
|
|
84
|
+
**Trigger:** `RetrievalTuning(graph_source=True)` and an intent plan with a
|
|
85
|
+
graph strategy. It is disabled in the shipped default because the reproducible
|
|
86
|
+
self-repository ablation reduced direct-hit MRR.
|
|
84
87
|
|
|
85
88
|
**Process:**
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
+
- Seed from lexical/symbol candidates already found in SQLite.
|
|
90
|
+
- Traverse only indexed, resolved edges with bounded depth and node count.
|
|
91
|
+
- Follow `up` (callers/importers), `down` (callees/imports), or `both`
|
|
92
|
+
according to the intent plan.
|
|
93
|
+
- Apply distance decay and preserve edge confidence in the candidate reason.
|
|
89
94
|
|
|
90
|
-
|
|
95
|
+
Graph expansion is an opt-in context-discovery signal, not a replacement for
|
|
96
|
+
direct lexical or symbol evidence.
|
|
91
97
|
|
|
92
|
-
##
|
|
98
|
+
## 6. Diversity and duplicate control
|
|
93
99
|
|
|
94
|
-
|
|
100
|
+
SimHash suppresses near-duplicate snippets independently of MMR. Bounded
|
|
101
|
+
Maximal Marginal Relevance is available through `RetrievalTuning(mmr=True)`;
|
|
102
|
+
the shipped default keeps relevance-only ordering because the benchmark favored
|
|
103
|
+
direct hits.
|
|
104
|
+
|
|
105
|
+
## 7. Reciprocal Rank Fusion (RRF)
|
|
106
|
+
|
|
107
|
+
Combines ranked lists from the enabled retrievers:
|
|
95
108
|
|
|
96
109
|
```
|
|
97
|
-
RRF_score(d) = Σ
|
|
110
|
+
RRF_score(d) = Σ w_r · k / (k + rank_r(d))
|
|
98
111
|
```
|
|
99
112
|
|
|
113
|
+
The implementation multiplies textbook RRF by `k` so fusion and bounded rerank
|
|
114
|
+
bonuses share a comparable scale; ordering is unchanged.
|
|
115
|
+
|
|
100
116
|
Where:
|
|
101
117
|
- `k` is a constant (default 60)
|
|
102
118
|
- `rank_r(d)` is the rank of document `d` in retriever `r`
|
|
103
|
-
-
|
|
119
|
+
- `w_r` is the intent/tuning weight for retriever `r`
|
|
104
120
|
|
|
105
|
-
|
|
121
|
+
The implementation merges co-located chunks into one per-file bucket before
|
|
122
|
+
fusion, preventing a large file from dominating the result list.
|
|
106
123
|
|
|
107
|
-
## Reranking
|
|
124
|
+
## 8. Reranking
|
|
108
125
|
|
|
109
|
-
After fusion, apply
|
|
126
|
+
After fusion, apply bounded explainable boosts and penalties:
|
|
110
127
|
|
|
111
|
-
| Factor |
|
|
112
|
-
|
|
113
|
-
| Exact symbol match | +0.
|
|
114
|
-
|
|
|
115
|
-
|
|
|
116
|
-
|
|
|
128
|
+
| Factor | Effect | Rationale |
|
|
129
|
+
|---|---:|---|
|
|
130
|
+
| Exact symbol match | +0.20 | User named a specific symbol |
|
|
131
|
+
| Symbol definition kind | +0.05 | Prefer actionable definitions |
|
|
132
|
+
| Path term match | +0.05 | User supplied a location clue |
|
|
133
|
+
| Degree / reference evidence | up to +0.08 | Stable structural tiebreaker |
|
|
134
|
+
| Implementation source prior | +0.08 | Prefer source over prose/tests |
|
|
135
|
+
| Documentation source prior | -0.05 | Avoid docs displacing implementation |
|
|
136
|
+
| Generated/vendor/build | -0.12 | Suppress low-value derived code |
|
|
137
|
+
| Test path on non-test query | -0.06 | Keep tests as supporting evidence |
|
|
117
138
|
|
|
118
|
-
## Confidence
|
|
139
|
+
## 9. Confidence
|
|
119
140
|
|
|
120
|
-
|
|
141
|
+
Confidence is categorical (`high`, `medium`, `low`) and is derived from
|
|
142
|
+
exact-symbol evidence, multi-retriever agreement, score separation, and result
|
|
143
|
+
count. Exact symbol matches are `high`, including a single-result response.
|
|
121
144
|
|
|
122
|
-
| Confidence |
|
|
123
|
-
|
|
124
|
-
|
|
|
125
|
-
|
|
|
126
|
-
|
|
|
145
|
+
| Confidence | Action |
|
|
146
|
+
|---|---|
|
|
147
|
+
| `high` | Read recommended ranges and answer directly |
|
|
148
|
+
| `medium` | Read ranges; optionally confirm with one Grep |
|
|
149
|
+
| `low` | Use fallback suggestions (ripgrep, Glob) |
|
|
127
150
|
|
|
128
|
-
## Token Budget Enforcement
|
|
151
|
+
## 10. Token Budget Enforcement
|
|
129
152
|
|
|
130
153
|
The output is capped at a configurable token budget:
|
|
131
154
|
|
|
@@ -134,9 +157,9 @@ The output is capped at a configurable token budget:
|
|
|
134
157
|
3. Remaining results are listed without snippets
|
|
135
158
|
4. The `recommended_reads` field contains only the most critical line ranges
|
|
136
159
|
|
|
137
|
-
Default budget:
|
|
160
|
+
Default budget: 1500 tokens (configurable in `.codeindex.json`).
|
|
138
161
|
|
|
139
|
-
## Fallback Suggestions
|
|
162
|
+
## 11. Fallback Suggestions
|
|
140
163
|
|
|
141
164
|
When confidence is low, the pipeline generates fallback strategies:
|
|
142
165
|
|
|
@@ -177,7 +177,7 @@ Features:
|
|
|
177
177
|
- Secret redaction
|
|
178
178
|
- Respects .gitignore
|
|
179
179
|
|
|
180
|
-
Install: pip install "codebase-index @ git+https://github.com/denfry/codebase-index.git@v1.
|
|
180
|
+
Install: pip install "codebase-index @ git+https://github.com/denfry/codebase-index.git@v1.8.0"
|
|
181
181
|
GitHub: https://github.com/denfry/codebase-index
|
|
182
182
|
```
|
|
183
183
|
|
|
@@ -192,5 +192,5 @@ codebase-index builds a local hybrid index so Claude finds the right files witho
|
|
|
192
192
|
- No network by default
|
|
193
193
|
- Token-efficient output
|
|
194
194
|
|
|
195
|
-
pip install "codebase-index @ git+https://github.com/denfry/codebase-index.git@v1.
|
|
195
|
+
pip install "codebase-index @ git+https://github.com/denfry/codebase-index.git@v1.8.0"
|
|
196
196
|
```
|
|
@@ -108,7 +108,7 @@ pwsh ./install.ps1 -Target claude -InstallDir "D:\skills\codebase-index"
|
|
|
108
108
|
**Pinning по ветке/тегу** (воспроизводимость и безопасность):
|
|
109
109
|
|
|
110
110
|
```sh
|
|
111
|
-
sh install.sh --branch v1.
|
|
111
|
+
sh install.sh --branch v1.8.0
|
|
112
112
|
```
|
|
113
113
|
|
|
114
114
|
---
|
|
@@ -151,8 +151,7 @@ sh install.sh --branch v1.7.0
|
|
|
151
151
|
```json
|
|
152
152
|
{
|
|
153
153
|
"skill_name": "codebase-index",
|
|
154
|
-
"version": "1.
|
|
155
|
-
"installed_at": "2026-05-29T12:00:00Z",
|
|
154
|
+
"version": "1.8.0",
|
|
156
155
|
"target": "claude",
|
|
157
156
|
"os": "linux",
|
|
158
157
|
"source_repo": "https://github.com/denfry/codebase-index",
|