corpus-analyzer 0.1.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.
- corpus_analyzer-0.1.0/.env.example +12 -0
- corpus_analyzer-0.1.0/.gitignore +45 -0
- corpus_analyzer-0.1.0/.planning/MILESTONES.md +170 -0
- corpus_analyzer-0.1.0/.planning/PROJECT.md +215 -0
- corpus_analyzer-0.1.0/.planning/REQUIREMENTS.md +100 -0
- corpus_analyzer-0.1.0/.planning/ROADMAP.md +255 -0
- corpus_analyzer-0.1.0/.planning/STATE.md +129 -0
- corpus_analyzer-0.1.0/.planning/codebase/ARCHITECTURE.md +261 -0
- corpus_analyzer-0.1.0/.planning/codebase/CONCERNS.md +198 -0
- corpus_analyzer-0.1.0/.planning/codebase/CONVENTIONS.md +213 -0
- corpus_analyzer-0.1.0/.planning/codebase/INTEGRATIONS.md +139 -0
- corpus_analyzer-0.1.0/.planning/codebase/STACK.md +108 -0
- corpus_analyzer-0.1.0/.planning/codebase/STRUCTURE.md +264 -0
- corpus_analyzer-0.1.0/.planning/codebase/TESTING.md +292 -0
- corpus_analyzer-0.1.0/.planning/config.json +12 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-MILESTONE-AUDIT.md +159 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-REQUIREMENTS.md +152 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-ROADMAP.md +103 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/01-foundation/01-01-PLAN.md +133 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/01-foundation/01-01-SUMMARY.md +118 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/01-foundation/01-02-PLAN.md +156 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/01-foundation/01-02-SUMMARY.md +132 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/01-foundation/01-03-PLAN.md +175 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/01-foundation/01-03-SUMMARY.md +143 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/01-foundation/01-04-PLAN.md +224 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/01-foundation/01-04-SUMMARY.md +155 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/01-foundation/01-05-PLAN.md +204 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/01-foundation/01-05-SUMMARY.md +144 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/01-foundation/01-CONTEXT.md +80 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/01-foundation/01-RESEARCH.md +516 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/01-foundation/01-VERIFICATION.md +29 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/02-search-core/02-01-PLAN.md +478 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/02-search-core/02-01-SUMMARY.md +54 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/02-search-core/02-02-PLAN.md +171 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/02-search-core/02-02-SUMMARY.md +30 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/02-search-core/02-03-PLAN.md +196 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/02-search-core/02-03-SUMMARY.md +45 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/02-search-core/02-04-PLAN.md +205 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/02-search-core/02-04-SUMMARY.md +39 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/02-search-core/02-05-PLAN.md +233 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/02-search-core/02-05-SUMMARY.md +76 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/02-search-core/02-CONTEXT.md +68 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/02-search-core/02-RESEARCH.md +586 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/02-search-core/02-UAT.md +53 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/02-search-core/02-VERIFICATION.md +33 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/03-agent-interfaces/03-01-PLAN.md +285 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/03-agent-interfaces/03-01-SUMMARY.md +43 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/03-agent-interfaces/03-02-PLAN.md +489 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/03-agent-interfaces/03-02-SUMMARY.md +54 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/03-agent-interfaces/03-03-PLAN.md +514 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/03-agent-interfaces/03-03-SUMMARY.md +63 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/03-agent-interfaces/03-CONTEXT.md +77 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/03-agent-interfaces/03-RESEARCH.md +604 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/03-agent-interfaces/03-UAT.md +50 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/03-agent-interfaces/03-VERIFICATION.md +26 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/04-hardening/04-01-PLAN.md +236 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/04-hardening/04-01-SUMMARY.md +97 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/04-hardening/04-02-PLAN.md +389 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/04-hardening/04-02-SUMMARY.md +123 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/04-hardening/04-CONTEXT.md +70 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/04-hardening/04-RESEARCH.md +501 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.0-phases/04-hardening/04-UAT.md +42 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.1-MILESTONE-AUDIT.md +129 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.1-REQUIREMENTS.md +73 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.1-ROADMAP.md +73 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.1-phases/05-extension-filtering/05-01-PLAN.md +301 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.1-phases/05-extension-filtering/05-01-SUMMARY.md +35 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.1-phases/05-extension-filtering/05-02-PLAN.md +284 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.1-phases/05-extension-filtering/05-02-SUMMARY.md +32 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.1-phases/05-extension-filtering/05-CONTEXT.md +47 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.1-phases/05-extension-filtering/05-VERIFICATION.md +94 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.1-phases/06-frontmatter-classification/06-01-PLAN.md +291 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.1-phases/06-frontmatter-classification/06-01-SUMMARY.md +114 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.1-phases/06-frontmatter-classification/06-02-PLAN.md +232 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.1-phases/06-frontmatter-classification/06-02-SUMMARY.md +34 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.1-phases/06-frontmatter-classification/06-CONTEXT.md +67 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.1-phases/06-frontmatter-classification/06-VERIFICATION.md +93 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.2-MILESTONE-AUDIT.md +117 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.2-REQUIREMENTS.md +70 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.2-ROADMAP.md +76 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.2-phases/08-cleanup/08-01-PLAN.md +214 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.2-phases/08-cleanup/08-01-SUMMARY.md +103 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.2-phases/08-cleanup/08-CONTEXT.md +63 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.2-phases/08-cleanup/08-VERIFICATION.md +79 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-MILESTONE-AUDIT.md +127 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-REQUIREMENTS.md +99 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-ROADMAP.md +131 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/09-config-and-auto-fix/09-01-PLAN.md +177 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/09-config-and-auto-fix/09-01-SUMMARY.md +95 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/09-config-and-auto-fix/09-02-PLAN.md +202 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/09-config-and-auto-fix/09-02-SUMMARY.md +148 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/09-config-and-auto-fix/09-CONTEXT.md +59 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/09-config-and-auto-fix/09-RESEARCH.md +380 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/09-config-and-auto-fix/09-VERIFICATION.md +121 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/10-manual-ruff-leaf-to-hub/10-01-PLAN.md +251 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/10-manual-ruff-leaf-to-hub/10-01-SUMMARY.md +110 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/10-manual-ruff-leaf-to-hub/10-02-PLAN.md +202 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/10-manual-ruff-leaf-to-hub/10-02-SUMMARY.md +112 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/10-manual-ruff-leaf-to-hub/10-03-PLAN.md +243 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/10-manual-ruff-leaf-to-hub/10-03-SUMMARY.md +143 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/10-manual-ruff-leaf-to-hub/10-RESEARCH.md +445 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/10-manual-ruff-leaf-to-hub/10-VERIFICATION.md +129 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/11-manual-ruff-cli-mypy/11-01-PLAN.md +159 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/11-manual-ruff-cli-mypy/11-01-SUMMARY.md +105 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/11-manual-ruff-cli-mypy/11-02-PLAN.md +161 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/11-manual-ruff-cli-mypy/11-02-SUMMARY.md +109 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/11-manual-ruff-cli-mypy/11-03-PLAN.md +148 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/11-manual-ruff-cli-mypy/11-03-SUMMARY.md +91 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/11-manual-ruff-cli-mypy/11-04-PLAN.md +220 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/11-manual-ruff-cli-mypy/11-04-SUMMARY.md +121 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/11-manual-ruff-cli-mypy/11-05-PLAN.md +166 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/11-manual-ruff-cli-mypy/11-05-SUMMARY.md +121 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/11-manual-ruff-cli-mypy/11-RESEARCH.md +495 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/11-manual-ruff-cli-mypy/11-VERIFICATION.md +109 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/12-validation-gate/12-01-PLAN.md +31 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.3-phases/12-validation-gate/12-01-SUMMARY.md +37 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.4-MILESTONE-AUDIT.md +141 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.4-REQUIREMENTS.md +72 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.4-ROADMAP.md +113 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.4-phases/13-engine-min-score-filter/13-01-PLAN.md +230 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.4-phases/13-engine-min-score-filter/13-01-SUMMARY.md +100 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.4-phases/13-engine-min-score-filter/13-CONTEXT.md +61 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.4-phases/13-engine-min-score-filter/13-RESEARCH.md +407 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.4-phases/13-engine-min-score-filter/13-VERIFICATION.md +108 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.4-phases/14-api-mcp-cli-parity/14-01-PLAN.md +201 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.4-phases/14-api-mcp-cli-parity/14-01-SUMMARY.md +130 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.4-phases/14-api-mcp-cli-parity/14-02-PLAN.md +243 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.4-phases/14-api-mcp-cli-parity/14-02-SUMMARY.md +118 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.4-phases/14-api-mcp-cli-parity/14-CONTEXT.md +50 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.4-phases/14-api-mcp-cli-parity/14-RESEARCH.md +448 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.4-phases/14-api-mcp-cli-parity/14-VERIFICATION.md +114 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.5-REQUIREMENTS.md +90 -0
- corpus_analyzer-0.1.0/.planning/milestones/v1.5-ROADMAP.md +128 -0
- corpus_analyzer-0.1.0/.planning/milestones/v2-REQUIREMENTS.md +117 -0
- corpus_analyzer-0.1.0/.planning/milestones/v2-ROADMAP.md +247 -0
- corpus_analyzer-0.1.0/.planning/milestones/v2.0-REQUIREMENTS.md +97 -0
- corpus_analyzer-0.1.0/.planning/milestones/v2.0-ROADMAP.md +92 -0
- corpus_analyzer-0.1.0/.planning/milestones/v3-REQUIREMENTS.md +146 -0
- corpus_analyzer-0.1.0/.planning/milestones/v3-ROADMAP.md +109 -0
- corpus_analyzer-0.1.0/.planning/phases/15-core-ast-chunker/15-01-PLAN.md +254 -0
- corpus_analyzer-0.1.0/.planning/phases/15-core-ast-chunker/15-01-SUMMARY.md +97 -0
- corpus_analyzer-0.1.0/.planning/phases/15-core-ast-chunker/15-02-PLAN.md +366 -0
- corpus_analyzer-0.1.0/.planning/phases/15-core-ast-chunker/15-02-SUMMARY.md +144 -0
- corpus_analyzer-0.1.0/.planning/phases/15-core-ast-chunker/15-CONTEXT.md +63 -0
- corpus_analyzer-0.1.0/.planning/phases/15-core-ast-chunker/15-RESEARCH.md +646 -0
- corpus_analyzer-0.1.0/.planning/phases/15-core-ast-chunker/15-VERIFICATION.md +100 -0
- corpus_analyzer-0.1.0/.planning/phases/16-integration-hardening/16-01-PLAN.md +168 -0
- corpus_analyzer-0.1.0/.planning/phases/16-integration-hardening/16-01-SUMMARY.md +96 -0
- corpus_analyzer-0.1.0/.planning/phases/16-integration-hardening/16-02-PLAN.md +228 -0
- corpus_analyzer-0.1.0/.planning/phases/16-integration-hardening/16-02-SUMMARY.md +119 -0
- corpus_analyzer-0.1.0/.planning/phases/16-integration-hardening/16-03-PLAN.md +197 -0
- corpus_analyzer-0.1.0/.planning/phases/16-integration-hardening/16-03-SUMMARY.md +102 -0
- corpus_analyzer-0.1.0/.planning/phases/16-integration-hardening/16-CONTEXT.md +63 -0
- corpus_analyzer-0.1.0/.planning/phases/16-integration-hardening/16-RESEARCH.md +466 -0
- corpus_analyzer-0.1.0/.planning/phases/16-integration-hardening/16-VERIFICATION.md +130 -0
- corpus_analyzer-0.1.0/.planning/phases/17-schema-v4-chunk-data-layer/17-01-PLAN.md +315 -0
- corpus_analyzer-0.1.0/.planning/phases/17-schema-v4-chunk-data-layer/17-01-SUMMARY.md +113 -0
- corpus_analyzer-0.1.0/.planning/phases/17-schema-v4-chunk-data-layer/17-02-PLAN.md +276 -0
- corpus_analyzer-0.1.0/.planning/phases/17-schema-v4-chunk-data-layer/17-02-SUMMARY.md +145 -0
- corpus_analyzer-0.1.0/.planning/phases/17-schema-v4-chunk-data-layer/17-CONTEXT.md +62 -0
- corpus_analyzer-0.1.0/.planning/phases/17-schema-v4-chunk-data-layer/17-RESEARCH.md +472 -0
- corpus_analyzer-0.1.0/.planning/phases/17-schema-v4-chunk-data-layer/17-VERIFICATION.md +108 -0
- corpus_analyzer-0.1.0/.planning/phases/18-cli-chunk-display/18-01-PLAN.md +184 -0
- corpus_analyzer-0.1.0/.planning/phases/18-cli-chunk-display/18-01-SUMMARY.md +95 -0
- corpus_analyzer-0.1.0/.planning/phases/18-cli-chunk-display/18-02-PLAN.md +202 -0
- corpus_analyzer-0.1.0/.planning/phases/18-cli-chunk-display/18-02-SUMMARY.md +137 -0
- corpus_analyzer-0.1.0/.planning/phases/18-cli-chunk-display/18-CONTEXT.md +66 -0
- corpus_analyzer-0.1.0/.planning/phases/18-cli-chunk-display/18-RESEARCH.md +442 -0
- corpus_analyzer-0.1.0/.planning/phases/18-cli-chunk-display/18-VERIFICATION.md +87 -0
- corpus_analyzer-0.1.0/.planning/phases/19-mcp-chunk-response/19-01-PLAN.md +252 -0
- corpus_analyzer-0.1.0/.planning/phases/19-mcp-chunk-response/19-01-SUMMARY.md +120 -0
- corpus_analyzer-0.1.0/.planning/phases/19-mcp-chunk-response/19-CONTEXT.md +61 -0
- corpus_analyzer-0.1.0/.planning/phases/19-mcp-chunk-response/19-VERIFICATION.md +97 -0
- corpus_analyzer-0.1.0/.planning/phases/20-python-method-sub-chunking/20-01-PLAN.md +285 -0
- corpus_analyzer-0.1.0/.planning/phases/20-python-method-sub-chunking/20-01-SUMMARY.md +125 -0
- corpus_analyzer-0.1.0/.planning/phases/20-python-method-sub-chunking/20-02-PLAN.md +317 -0
- corpus_analyzer-0.1.0/.planning/phases/20-python-method-sub-chunking/20-02-SUMMARY.md +116 -0
- corpus_analyzer-0.1.0/.planning/phases/20-python-method-sub-chunking/20-CONTEXT.md +65 -0
- corpus_analyzer-0.1.0/.planning/phases/20-python-method-sub-chunking/20-VERIFICATION.md +108 -0
- corpus_analyzer-0.1.0/.planning/phases/21-typescript-method-sub-chunking/21-01-PLAN.md +358 -0
- corpus_analyzer-0.1.0/.planning/phases/21-typescript-method-sub-chunking/21-01-SUMMARY.md +117 -0
- corpus_analyzer-0.1.0/.planning/phases/21-typescript-method-sub-chunking/21-CONTEXT.md +56 -0
- corpus_analyzer-0.1.0/.planning/phases/21-typescript-method-sub-chunking/21-VERIFICATION.md +106 -0
- corpus_analyzer-0.1.0/.planning/phases/22-name-filtering/22-01-PLAN.md +361 -0
- corpus_analyzer-0.1.0/.planning/phases/22-name-filtering/22-02-PLAN.md +437 -0
- corpus_analyzer-0.1.0/.planning/phases/22-name-filtering/22-VERIFICATION.md +94 -0
- corpus_analyzer-0.1.0/.planning/phases/22-name-filtering/22-name-filtering-01-SUMMARY.md +120 -0
- corpus_analyzer-0.1.0/.planning/phases/22-name-filtering/22-name-filtering-02-SUMMARY.md +120 -0
- corpus_analyzer-0.1.0/.planning/phases/23-score-normalisation-mcp-sort/23-01-PLAN.md +250 -0
- corpus_analyzer-0.1.0/.planning/phases/23-score-normalisation-mcp-sort/23-02-PLAN.md +329 -0
- corpus_analyzer-0.1.0/.planning/phases/23-score-normalisation-mcp-sort/23-CONTEXT.md +62 -0
- corpus_analyzer-0.1.0/.planning/phases/23-score-normalisation-mcp-sort/23-score-normalisation-mcp-sort-01-SUMMARY.md +35 -0
- corpus_analyzer-0.1.0/.planning/phases/23-score-normalisation-mcp-sort/23-score-normalisation-mcp-sort-02-SUMMARY.md +27 -0
- corpus_analyzer-0.1.0/.planning/phases/24-json-output/24-01-SUMMARY.md +17 -0
- corpus_analyzer-0.1.0/.planning/phases/24-json-output/phase-24-json-output-d25d50.md +147 -0
- corpus_analyzer-0.1.0/.planning/phases/25-graph-mcp-quality-gate/25-01-SUMMARY.md +21 -0
- corpus_analyzer-0.1.0/.planning/research/ARCHITECTURE.md +665 -0
- corpus_analyzer-0.1.0/.planning/research/FEATURES.md +452 -0
- corpus_analyzer-0.1.0/.planning/research/PITFALLS.md +493 -0
- corpus_analyzer-0.1.0/.planning/research/STACK.md +304 -0
- corpus_analyzer-0.1.0/.planning/research/SUMMARY.md +200 -0
- corpus_analyzer-0.1.0/.planning/v2.1-MILESTONE-AUDIT.md +196 -0
- corpus_analyzer-0.1.0/.python-version +1 -0
- corpus_analyzer-0.1.0/.windsurf/GPU_OPTIMIZER_PYPROJECT.toml +187 -0
- corpus_analyzer-0.1.0/.windsurf/POSE_ANALYZER_PYPROJECT.toml +118 -0
- corpus_analyzer-0.1.0/.windsurf/mcp_config.json +19 -0
- corpus_analyzer-0.1.0/.windsurf/rules/01-python-best-practices.md +105 -0
- corpus_analyzer-0.1.0/.windsurf/rules/01-python-main.md +83 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-agentic/ai-prompt-engineer.md +147 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-agentic/api-design-gql.md +121 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-agentic/architect-review.md +146 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-agentic/code-migration-agent.md +142 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-agentic/context-manager.md +149 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-agentic/database-design-agent.md +138 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-agentic/debug-agent.md +104 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-agentic/debugger.md +30 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-agentic/devops-cicd-agent.md +137 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-agentic/error-detective.md +32 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-agentic/python-ai-ml-dev.md +67 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-agentic/refactoring-agent.md +130 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-agentic/security-audit-agent.md +108 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-agentic/strong-reasoner-planner-agent.md +59 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-agentic/test-writing-agent.md +116 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-machine-learning/ai-engineer.md +143 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-machine-learning/ai-ethics-responsible-ai.md +55 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-machine-learning/computer-vision-opencv-yolo.md +55 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-machine-learning/data-scientist.md +179 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-machine-learning/langchain-ai-orchestration.md +54 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-machine-learning/llm-integration-prompt-engineering.md +57 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-machine-learning/machine-learning-fundamentals.md +58 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-machine-learning/ml-engineer.md +147 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-machine-learning/mlops-engineer.md +198 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-machine-learning/mlops-model-deployment.md +54 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-machine-learning/nlp-transformers-huggingface.md +58 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-machine-learning/prompt-engineer.md +251 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-machine-learning/pytorch-deep-learning-expert.md +56 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-machine-learning/reinforcement-learning-expert.md +55 -0
- corpus_analyzer-0.1.0/.windsurf/rules/ai-machine-learning/tensorflow-keras-deep-learning.md +62 -0
- corpus_analyzer-0.1.0/.windsurf/rules/backend/backend-architect.md +283 -0
- corpus_analyzer-0.1.0/.windsurf/rules/backend/graphql-architect.md +146 -0
- corpus_analyzer-0.1.0/.windsurf/rules/backend/tdd-orchestrator.md +166 -0
- corpus_analyzer-0.1.0/.windsurf/rules/backend/temporal-python-pro.md +311 -0
- corpus_analyzer-0.1.0/.windsurf/rules/backend-api-architect.md +282 -0
- corpus_analyzer-0.1.0/.windsurf/rules/containerization/docker-expert.md +75 -0
- corpus_analyzer-0.1.0/.windsurf/rules/database-data/database-architect.md +238 -0
- corpus_analyzer-0.1.0/.windsurf/rules/database-data/database-design-normalization.md +58 -0
- corpus_analyzer-0.1.0/.windsurf/rules/database-data/database-migration-strategies.md +60 -0
- corpus_analyzer-0.1.0/.windsurf/rules/database-data/postgresql-expert.md +60 -0
- corpus_analyzer-0.1.0/.windsurf/rules/database-data/redis-caching-strategies.md +60 -0
- corpus_analyzer-0.1.0/.windsurf/rules/database-data/sql-pro.md +146 -0
- corpus_analyzer-0.1.0/.windsurf/rules/database-data/sql-query-optimization.md +59 -0
- corpus_analyzer-0.1.0/.windsurf/rules/database-data/vector-databases-pinecone-weaviate.md +58 -0
- corpus_analyzer-0.1.0/.windsurf/rules/description.md +161 -0
- corpus_analyzer-0.1.0/.windsurf/rules/mcp-rules/context7-agent-rules.always-on.md +30 -0
- corpus_analyzer-0.1.0/.windsurf/rules/mcp-rules/context7-agent.md +82 -0
- corpus_analyzer-0.1.0/.windsurf/rules/mcp-rules/mcp-constitution-always-on.md +162 -0
- corpus_analyzer-0.1.0/.windsurf/rules/mcp-rules/memory-agent-rules.always-on.md +34 -0
- corpus_analyzer-0.1.0/.windsurf/rules/mcp-rules/memory-agent-rules.md +87 -0
- corpus_analyzer-0.1.0/.windsurf/rules/mcp-rules/sequential-thinking-agent-rules.always-on.md +103 -0
- corpus_analyzer-0.1.0/.windsurf/rules/mcp-rules/sequential-thinking-agent-rules.md +70 -0
- corpus_analyzer-0.1.0/.windsurf/rules/python/api-documenter.md +147 -0
- corpus_analyzer-0.1.0/.windsurf/rules/python/backend-api-architect.md +283 -0
- corpus_analyzer-0.1.0/.windsurf/rules/python/deep-learning-developer-python-cursor-rules.md +145 -0
- corpus_analyzer-0.1.0/.windsurf/rules/python/fastapi-pro.md +156 -0
- corpus_analyzer-0.1.0/.windsurf/rules/python/graphql-architect.md +146 -0
- corpus_analyzer-0.1.0/.windsurf/rules/python/python-fast-api.md +129 -0
- corpus_analyzer-0.1.0/.windsurf/rules/python/python-pro.md +137 -0
- corpus_analyzer-0.1.0/.windsurf/rules/python-general-rules.md +20 -0
- corpus_analyzer-0.1.0/.windsurf/skills/api-design-principles/SKILL.md +527 -0
- corpus_analyzer-0.1.0/.windsurf/skills/api-design-principles/assets/api-design-checklist.md +136 -0
- corpus_analyzer-0.1.0/.windsurf/skills/api-design-principles/assets/rest-api-template.py +165 -0
- corpus_analyzer-0.1.0/.windsurf/skills/api-design-principles/references/graphql-schema-design.md +566 -0
- corpus_analyzer-0.1.0/.windsurf/skills/api-design-principles/references/rest-best-practices.md +385 -0
- corpus_analyzer-0.1.0/.windsurf/skills/architecture-patterns/SKILL.md +487 -0
- corpus_analyzer-0.1.0/.windsurf/skills/billing-automation/SKILL.md +559 -0
- corpus_analyzer-0.1.0/.windsurf/skills/code-review-excellence/SKILL.md +520 -0
- corpus_analyzer-0.1.0/.windsurf/skills/debugging-strategies/SKILL.md +527 -0
- corpus_analyzer-0.1.0/.windsurf/skills/e2e-testing-patterns/SKILL.md +547 -0
- corpus_analyzer-0.1.0/.windsurf/skills/error-handling-patterns/SKILL.md +636 -0
- corpus_analyzer-0.1.0/.windsurf/skills/fastapi-templates/SKILL.md +564 -0
- corpus_analyzer-0.1.0/.windsurf/skills/llm-evaluation/SKILL.md +471 -0
- corpus_analyzer-0.1.0/.windsurf/skills/ml-pipeline-workflow/SKILL.md +245 -0
- corpus_analyzer-0.1.0/.windsurf/skills/postgresql/SKILL.md +204 -0
- corpus_analyzer-0.1.0/.windsurf/skills/prompt-engineering-patterns/SKILL.md +201 -0
- corpus_analyzer-0.1.0/.windsurf/skills/prompt-engineering-patterns/assets/few-shot-examples.json +106 -0
- corpus_analyzer-0.1.0/.windsurf/skills/prompt-engineering-patterns/assets/prompt-template-library.md +246 -0
- corpus_analyzer-0.1.0/.windsurf/skills/prompt-engineering-patterns/references/chain-of-thought.md +399 -0
- corpus_analyzer-0.1.0/.windsurf/skills/prompt-engineering-patterns/references/few-shot-learning.md +369 -0
- corpus_analyzer-0.1.0/.windsurf/skills/prompt-engineering-patterns/references/prompt-optimization.md +414 -0
- corpus_analyzer-0.1.0/.windsurf/skills/prompt-engineering-patterns/references/prompt-templates.md +470 -0
- corpus_analyzer-0.1.0/.windsurf/skills/prompt-engineering-patterns/references/system-prompts.md +189 -0
- corpus_analyzer-0.1.0/.windsurf/skills/prompt-engineering-patterns/scripts/optimize-prompt.py +249 -0
- corpus_analyzer-0.1.0/.windsurf/skills/python-packaging/SKILL.md +870 -0
- corpus_analyzer-0.1.0/.windsurf/skills/rag-implementation/SKILL.md +403 -0
- corpus_analyzer-0.1.0/.windsurf/skills/sql-optimization-patterns/SKILL.md +493 -0
- corpus_analyzer-0.1.0/.windsurf/skills/temporal-python-testing/SKILL.md +146 -0
- corpus_analyzer-0.1.0/.windsurf/skills/temporal-python-testing/resources/integration-testing.md +452 -0
- corpus_analyzer-0.1.0/.windsurf/skills/temporal-python-testing/resources/local-setup.md +550 -0
- corpus_analyzer-0.1.0/.windsurf/skills/temporal-python-testing/resources/replay-testing.md +455 -0
- corpus_analyzer-0.1.0/.windsurf/skills/temporal-python-testing/resources/unit-testing.md +320 -0
- corpus_analyzer-0.1.0/.windsurf/skills/workflow-orchestration-patterns/SKILL.md +286 -0
- corpus_analyzer-0.1.0/.windsurf/workflows/ai-assistant.md +1232 -0
- corpus_analyzer-0.1.0/.windsurf/workflows/ai-review.md +428 -0
- corpus_analyzer-0.1.0/.windsurf/workflows/api-mock.md +1324 -0
- corpus_analyzer-0.1.0/.windsurf/workflows/error-analysis.md +1153 -0
- corpus_analyzer-0.1.0/.windsurf/workflows/error-trace.md +1367 -0
- corpus_analyzer-0.1.0/.windsurf/workflows/feature-development.md +152 -0
- corpus_analyzer-0.1.0/.windsurf/workflows/improve-agent.md +311 -0
- corpus_analyzer-0.1.0/.windsurf/workflows/langchain-agent.md +224 -0
- corpus_analyzer-0.1.0/.windsurf/workflows/load.md +81 -0
- corpus_analyzer-0.1.0/.windsurf/workflows/ml-pipeline.md +295 -0
- corpus_analyzer-0.1.0/.windsurf/workflows/multi-agent-optimize.md +189 -0
- corpus_analyzer-0.1.0/.windsurf/workflows/multi-agent-review.md +194 -0
- corpus_analyzer-0.1.0/.windsurf/workflows/prompt-optimize.md +587 -0
- corpus_analyzer-0.1.0/.windsurf/workflows/python-scaffold.md +316 -0
- corpus_analyzer-0.1.0/.windsurf/workflows/save.md +82 -0
- corpus_analyzer-0.1.0/.windsurf/workflows/task-m.md +152 -0
- corpus_analyzer-0.1.0/CLAUDE.md +75 -0
- corpus_analyzer-0.1.0/Makefile +38 -0
- corpus_analyzer-0.1.0/PKG-INFO +113 -0
- corpus_analyzer-0.1.0/README.md +87 -0
- corpus_analyzer-0.1.0/docs/plans/2026-02-24-v1.2-graph-linker.md +837 -0
- corpus_analyzer-0.1.0/main.py +6 -0
- corpus_analyzer-0.1.0/pyproject.toml +72 -0
- corpus_analyzer-0.1.0/rewrites/dry-run/howto/tech-debt.rewritten.md +8 -0
- corpus_analyzer-0.1.0/rewrites/dry-run/howto/tech-debt.sources.json +8 -0
- corpus_analyzer-0.1.0/rewrites/dry-run/persona/frontend-developer.rewritten.md +8 -0
- corpus_analyzer-0.1.0/rewrites/dry-run/persona/frontend-developer.sources.json +8 -0
- corpus_analyzer-0.1.0/rewrites/dry-run/reference/full-review.rewritten.md +8 -0
- corpus_analyzer-0.1.0/rewrites/dry-run/reference/full-review.sources.json +8 -0
- corpus_analyzer-0.1.0/rewrites/dry-run/runbook/observability-engineer.rewritten.md +8 -0
- corpus_analyzer-0.1.0/rewrites/dry-run/runbook/observability-engineer.sources.json +8 -0
- corpus_analyzer-0.1.0/rewrites/dry-run/spec/pr-enhance.rewritten.md +8 -0
- corpus_analyzer-0.1.0/rewrites/dry-run/spec/pr-enhance.sources.json +8 -0
- corpus_analyzer-0.1.0/rewrites/dry-run/tutorial/tensorflow-keras-deep-learning.rewritten.md +8 -0
- corpus_analyzer-0.1.0/rewrites/dry-run/tutorial/tensorflow-keras-deep-learning.sources.json +8 -0
- corpus_analyzer-0.1.0/scripts/run_rewrite_dry_run.py +79 -0
- corpus_analyzer-0.1.0/source_docs/adr_1.md +885 -0
- corpus_analyzer-0.1.0/source_docs/adr_2.md +520 -0
- corpus_analyzer-0.1.0/source_docs/adr_sample.md +885 -0
- corpus_analyzer-0.1.0/source_docs/architecture_1.md +113 -0
- corpus_analyzer-0.1.0/source_docs/architecture_2.md +432 -0
- corpus_analyzer-0.1.0/source_docs/architecture_sample.md +113 -0
- corpus_analyzer-0.1.0/source_docs/howto_1.md +652 -0
- corpus_analyzer-0.1.0/source_docs/howto_2.md +751 -0
- corpus_analyzer-0.1.0/source_docs/howto_sample.md +652 -0
- corpus_analyzer-0.1.0/source_docs/persona_1.md +189 -0
- corpus_analyzer-0.1.0/source_docs/persona_2.md +149 -0
- corpus_analyzer-0.1.0/source_docs/persona_sample.md +189 -0
- corpus_analyzer-0.1.0/source_docs/reference_1.md +128 -0
- corpus_analyzer-0.1.0/source_docs/reference_2.md +111 -0
- corpus_analyzer-0.1.0/source_docs/reference_sample.md +128 -0
- corpus_analyzer-0.1.0/source_docs/runbook_1.md +146 -0
- corpus_analyzer-0.1.0/source_docs/runbook_2.md +210 -0
- corpus_analyzer-0.1.0/source_docs/runbook_sample.md +146 -0
- corpus_analyzer-0.1.0/source_docs/spec_1.md +697 -0
- corpus_analyzer-0.1.0/source_docs/spec_2.md +697 -0
- corpus_analyzer-0.1.0/source_docs/spec_sample.md +697 -0
- corpus_analyzer-0.1.0/source_docs/tutorial_1.md +118 -0
- corpus_analyzer-0.1.0/source_docs/tutorial_2.md +118 -0
- corpus_analyzer-0.1.0/source_docs/tutorial_sample.md +118 -0
- corpus_analyzer-0.1.0/source_docs/unknown_sample.md +43 -0
- corpus_analyzer-0.1.0/src/corpus/__init__.py +10 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/__init__.py +3 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/analyzers/__init__.py +5 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/analyzers/quality.py +85 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/analyzers/shape.py +230 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/api/__init__.py +1 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/api/public.py +177 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/classifiers/__init__.py +6 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/classifiers/document_type.py +355 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/classifiers/domain_tags.py +116 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/cli.py +1181 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/config/__init__.py +22 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/config/io.py +54 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/config/schema.py +107 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/core/__init__.py +14 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/core/database.py +335 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/core/models.py +130 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/core/samples.py +49 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/core/scanner.py +51 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/core/utils.py +36 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/extractors/__init__.py +39 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/extractors/base.py +32 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/extractors/markdown.py +137 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/extractors/python.py +142 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/generators/__init__.py +5 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/generators/advanced_rewriter.py +190 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/generators/templates.py +148 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/graph/__init__.py +1 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/graph/extractor.py +58 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/graph/registry.py +259 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/graph/store.py +172 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/ingest/__init__.py +24 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/ingest/chunker.py +526 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/ingest/embedder.py +103 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/ingest/indexer.py +590 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/ingest/scanner.py +85 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/ingest/ts_chunker.py +325 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/llm/__init__.py +5 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/llm/chunked_processor.py +256 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/llm/ollama_client.py +87 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/llm/quality_scorer.py +252 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/llm/rewriter.py +442 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/llm/unified_rewriter.py +454 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/mcp/__init__.py +1 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/mcp/server.py +168 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/search/__init__.py +5 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/search/classifier.py +218 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/search/engine.py +199 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/search/formatter.py +97 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/search/summarizer.py +39 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/settings.py +33 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/store/__init__.py +0 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/store/schema.py +206 -0
- corpus_analyzer-0.1.0/src/corpus_analyzer/utils/ui.py +61 -0
- corpus_analyzer-0.1.0/test_debug.py +18 -0
- corpus_analyzer-0.1.0/test_output/reference/134_rewritten.md +51 -0
- corpus_analyzer-0.1.0/test_output/reference/144_rewritten.md +32 -0
- corpus_analyzer-0.1.0/test_output/reference/145_rewritten.md +41 -0
- corpus_analyzer-0.1.0/test_output/reference/17_rewritten.md +29 -0
- corpus_analyzer-0.1.0/test_output/reference/1_rewritten.md +29 -0
- corpus_analyzer-0.1.0/test_output/reference/37_rewritten.md +41 -0
- corpus_analyzer-0.1.0/test_output/reference/41_rewritten.md +33 -0
- corpus_analyzer-0.1.0/test_output/reference/51_rewritten.md +50 -0
- corpus_analyzer-0.1.0/test_output/reference/64_rewritten.md +44 -0
- corpus_analyzer-0.1.0/test_output/reference/66_rewritten.md +40 -0
- corpus_analyzer-0.1.0/test_output/reference/6_rewritten.md +39 -0
- corpus_analyzer-0.1.0/test_output/reference/AGENTS_rewritten.md +152 -0
- corpus_analyzer-0.1.0/test_output/reference/API_REFERENCE_rewritten.md +52 -0
- corpus_analyzer-0.1.0/test_output/reference/MCP_Playwright_rewritten.md +52 -0
- corpus_analyzer-0.1.0/test_output/reference/MCP_Tavily_rewritten.md +292 -0
- corpus_analyzer-0.1.0/test_output/reference/PARALLEL_INDEXING_PLAN_rewritten.md +209 -0
- corpus_analyzer-0.1.0/test_output/reference/PM_AGENT_COMPARISON_rewritten.md +54 -0
- corpus_analyzer-0.1.0/test_output/reference/QUALITY_COMPARISON_rewritten.md +193 -0
- corpus_analyzer-0.1.0/test_output/reference/README_rewritten.md +51 -0
- corpus_analyzer-0.1.0/test_output/reference/SKILL_rewritten.md +135 -0
- corpus_analyzer-0.1.0/test_output/reference/TRIGGER_TYPES_rewritten.md +246 -0
- corpus_analyzer-0.1.0/test_output/reference/VERIFICATION_SUMMARY_rewritten.md +100 -0
- corpus_analyzer-0.1.0/test_output/reference/WORKFLOW_METRICS_SCHEMA_rewritten.md +211 -0
- corpus_analyzer-0.1.0/test_output/reference/WinFormsExpert.agent_rewritten.md +87 -0
- corpus_analyzer-0.1.0/test_output/reference/add-educational-comments.prompt_rewritten.md +129 -0
- corpus_analyzer-0.1.0/test_output/reference/advanced-aws-pentesting_rewritten.md +100 -0
- corpus_analyzer-0.1.0/test_output/reference/advanced-cloud-scripts_rewritten.md +107 -0
- corpus_analyzer-0.1.0/test_output/reference/advanced-event-handler-refs_rewritten.md +57 -0
- corpus_analyzer-0.1.0/test_output/reference/agent-types_rewritten.md +143 -0
- corpus_analyzer-0.1.0/test_output/reference/agents_rewritten.md +92 -0
- corpus_analyzer-0.1.0/test_output/reference/ai-engineer_rewritten.md +81 -0
- corpus_analyzer-0.1.0/test_output/reference/analyze_rewritten.md +103 -0
- corpus_analyzer-0.1.0/test_output/reference/api-design-checklist_rewritten.md +142 -0
- corpus_analyzer-0.1.0/test_output/reference/api-only_rewritten.md +81 -0
- corpus_analyzer-0.1.0/test_output/reference/app-development_rewritten.md +256 -0
- corpus_analyzer-0.1.0/test_output/reference/argocd-setup_rewritten.md +140 -0
- corpus_analyzer-0.1.0/test_output/reference/aspnet-minimal-api-openapi.prompt_rewritten.md +56 -0
- corpus_analyzer-0.1.0/test_output/reference/aspnet-rest-apis.instructions_rewritten.md +184 -0
- corpus_analyzer-0.1.0/test_output/reference/async-api-routes_rewritten.md +39 -0
- corpus_analyzer-0.1.0/test_output/reference/async-defer-await_rewritten.md +114 -0
- corpus_analyzer-0.1.0/test_output/reference/async-suspense-boundaries_rewritten.md +98 -0
- corpus_analyzer-0.1.0/test_output/reference/backend-security-coder_rewritten.md +133 -0
- corpus_analyzer-0.1.0/test_output/reference/bash-pro_rewritten.md +114 -0
- corpus_analyzer-0.1.0/test_output/reference/bicep-code-best-practices.instructions_rewritten.md +61 -0
- corpus_analyzer-0.1.0/test_output/reference/blazor.instructions_rewritten.md +86 -0
- corpus_analyzer-0.1.0/test_output/reference/chart-structure_rewritten.md +136 -0
- corpus_analyzer-0.1.0/test_output/reference/cli-scaffold.prompt_rewritten.md +309 -0
- corpus_analyzer-0.1.0/test_output/reference/client-swr-dedup_rewritten.md +54 -0
- corpus_analyzer-0.1.0/test_output/reference/code-exemplars-blueprint-generator.prompt_rewritten.md +138 -0
- corpus_analyzer-0.1.0/test_output/reference/commands_rewritten.md +208 -0
- corpus_analyzer-0.1.0/test_output/reference/complete-python-skills-migration_rewritten.md +222 -0
- corpus_analyzer-0.1.0/test_output/reference/component-scaffold_rewritten.md +95 -0
- corpus_analyzer-0.1.0/test_output/reference/comprehensive-features_rewritten.md +192 -0
- corpus_analyzer-0.1.0/test_output/reference/config-validate_rewritten.md +82 -0
- corpus_analyzer-0.1.0/test_output/reference/configuration_rewritten.md +290 -0
- corpus_analyzer-0.1.0/test_output/reference/conftest_rewritten.md +57 -0
- corpus_analyzer-0.1.0/test_output/reference/connections_rewritten.md +68 -0
- corpus_analyzer-0.1.0/test_output/reference/context-restore_rewritten.md +149 -0
- corpus_analyzer-0.1.0/test_output/reference/cost-optimize_rewritten.md +78 -0
- corpus_analyzer-0.1.0/test_output/reference/create-technical-spike.prompt_rewritten.md +242 -0
- corpus_analyzer-0.1.0/test_output/reference/csharp-docs.prompt_rewritten.md +61 -0
- corpus_analyzer-0.1.0/test_output/reference/csharp-ja.instructions_rewritten.md +101 -0
- corpus_analyzer-0.1.0/test_output/reference/csharp-ko.instructions_rewritten.md +80 -0
- corpus_analyzer-0.1.0/test_output/reference/csharp-xunit.prompt_rewritten.md +75 -0
- corpus_analyzer-0.1.0/test_output/reference/csharp.instructions_rewritten.md +130 -0
- corpus_analyzer-0.1.0/test_output/reference/dart-n-flutter.instructions_rewritten.md +63 -0
- corpus_analyzer-0.1.0/test_output/reference/deployment-spec_rewritten.md +153 -0
- corpus_analyzer-0.1.0/test_output/reference/deployment_rewritten.md +126 -0
- corpus_analyzer-0.1.0/test_output/reference/django-python-framework_rewritten.md +63 -0
- corpus_analyzer-0.1.0/test_output/reference/doctor_rewritten.md +62 -0
- corpus_analyzer-0.1.0/test_output/reference/document_rewritten.md +89 -0
- corpus_analyzer-0.1.0/test_output/reference/dotnet-maui.instructions_rewritten.md +77 -0
- corpus_analyzer-0.1.0/test_output/reference/error-trace_rewritten.md +124 -0
- corpus_analyzer-0.1.0/test_output/reference/extensions_rewritten.md +238 -0
- corpus_analyzer-0.1.0/test_output/reference/fastapi-python-framework_rewritten.md +67 -0
- corpus_analyzer-0.1.0/test_output/reference/feature-development_rewritten.md +177 -0
- corpus_analyzer-0.1.0/test_output/reference/full-review_rewritten.md +120 -0
- corpus_analyzer-0.1.0/test_output/reference/full-stack-demo_rewritten.md +123 -0
- corpus_analyzer-0.1.0/test_output/reference/generate-custom-instructions-from-codebase.prompt_rewritten.md +166 -0
- corpus_analyzer-0.1.0/test_output/reference/generator_rewritten.md +36 -0
- corpus_analyzer-0.1.0/test_output/reference/go-mcp-server.instructions_rewritten.md +273 -0
- corpus_analyzer-0.1.0/test_output/reference/graphql-server-development_rewritten.md +74 -0
- corpus_analyzer-0.1.0/test_output/reference/index_rewritten.md +87 -0
- corpus_analyzer-0.1.0/test_output/reference/install_mcp_rewritten.md +135 -0
- corpus_analyzer-0.1.0/test_output/reference/java-11-to-java-17-upgrade.instructions_rewritten.md +228 -0
- corpus_analyzer-0.1.0/test_output/reference/java-junit.prompt_rewritten.md +68 -0
- corpus_analyzer-0.1.0/test_output/reference/java-refactoring-extract-method.prompt_rewritten.md +142 -0
- corpus_analyzer-0.1.0/test_output/reference/java-refactoring-remove-parameter.prompt_rewritten.md +79 -0
- corpus_analyzer-0.1.0/test_output/reference/joyride-user-project.instructions_rewritten.md +74 -0
- corpus_analyzer-0.1.0/test_output/reference/js-batch-dom-css_rewritten.md +83 -0
- corpus_analyzer-0.1.0/test_output/reference/js-cache-function-results_rewritten.md +81 -0
- corpus_analyzer-0.1.0/test_output/reference/js-cache-storage_rewritten.md +71 -0
- corpus_analyzer-0.1.0/test_output/reference/kotlin-mcp-server-generator.prompt_rewritten.md +65 -0
- corpus_analyzer-0.1.0/test_output/reference/langchain-python.instructions_rewritten.md +124 -0
- corpus_analyzer-0.1.0/test_output/reference/laravel-expert-agent.chatmode_rewritten.md +88 -0
- corpus_analyzer-0.1.0/test_output/reference/loading-and-error-states_rewritten.md +83 -0
- corpus_analyzer-0.1.0/test_output/reference/markdown-to-python-migration-plan_rewritten.md +97 -0
- corpus_analyzer-0.1.0/test_output/reference/mcp-servers_rewritten.md +95 -0
- corpus_analyzer-0.1.0/test_output/reference/mcp_best_practices_rewritten.md +234 -0
- corpus_analyzer-0.1.0/test_output/reference/memory-system_rewritten.md +173 -0
- corpus_analyzer-0.1.0/test_output/reference/ml-pipeline_rewritten.md +185 -0
- corpus_analyzer-0.1.0/test_output/reference/multi-agent-review_rewritten.md +183 -0
- corpus_analyzer-0.1.0/test_output/reference/multi-platform_rewritten.md +135 -0
- corpus_analyzer-0.1.0/test_output/reference/parallel-execution-complete-findings_rewritten.md +108 -0
- corpus_analyzer-0.1.0/test_output/reference/parallel-execution-findings_rewritten.md +85 -0
- corpus_analyzer-0.1.0/test_output/reference/performance-optimization_rewritten.md +67 -0
- corpus_analyzer-0.1.0/test_output/reference/php-mcp-expert.chatmode_rewritten.md +158 -0
- corpus_analyzer-0.1.0/test_output/reference/php-mcp-server-generator.prompt_rewritten.md +117 -0
- corpus_analyzer-0.1.0/test_output/reference/pm_rewritten.md +151 -0
- corpus_analyzer-0.1.0/test_output/reference/postgresql-code-review.prompt_rewritten.md +161 -0
- corpus_analyzer-0.1.0/test_output/reference/power-platform-mcp-development.instructions_rewritten.md +91 -0
- corpus_analyzer-0.1.0/test_output/reference/powershell.instructions_rewritten.md +187 -0
- corpus_analyzer-0.1.0/test_output/reference/prompt-template-library_rewritten.md +301 -0
- corpus_analyzer-0.1.0/test_output/reference/python-api-developer.agent_rewritten.md +99 -0
- corpus_analyzer-0.1.0/test_output/reference/python-backend-development-with-fastapi_rewritten.md +76 -0
- corpus_analyzer-0.1.0/test_output/reference/python-cli-tooling.instructions_rewritten.md +182 -0
- corpus_analyzer-0.1.0/test_output/reference/python-mcp-server-generator.prompt_rewritten.md +107 -0
- corpus_analyzer-0.1.0/test_output/reference/python-rest-api-development_rewritten.md +153 -0
- corpus_analyzer-0.1.0/test_output/reference/python-rest-api_rewritten.md +123 -0
- corpus_analyzer-0.1.0/test_output/reference/python-scaffold_rewritten.md +60 -0
- corpus_analyzer-0.1.0/test_output/reference/python-security-best-practices_rewritten.md +368 -0
- corpus_analyzer-0.1.0/test_output/reference/python_mcp_server_rewritten.md +94 -0
- corpus_analyzer-0.1.0/test_output/reference/quarkus.instructions_rewritten.md +106 -0
- corpus_analyzer-0.1.0/test_output/reference/reference-builder_rewritten.md +189 -0
- corpus_analyzer-0.1.0/test_output/reference/rendering-animate-svg-wrapper_rewritten.md +55 -0
- corpus_analyzer-0.1.0/test_output/reference/rerender-defer-reads_rewritten.md +52 -0
- corpus_analyzer-0.1.0/test_output/reference/rerender-derived-state_rewritten.md +32 -0
- corpus_analyzer-0.1.0/test_output/reference/rerender-lazy-state-init_rewritten.md +64 -0
- corpus_analyzer-0.1.0/test_output/reference/research_installer_improvements_20251017_rewritten.md +45 -0
- corpus_analyzer-0.1.0/test_output/reference/rest-api-design-patterns_rewritten.md +66 -0
- corpus_analyzer-0.1.0/test_output/reference/rest-api-template_rewritten.md +41 -0
- corpus_analyzer-0.1.0/test_output/reference/rest-best-practices_rewritten.md +230 -0
- corpus_analyzer-0.1.0/test_output/reference/result_processor_rewritten.md +85 -0
- corpus_analyzer-0.1.0/test_output/reference/routing-guide_rewritten.md +299 -0
- corpus_analyzer-0.1.0/test_output/reference/ruby-on-rails.instructions_rewritten.md +104 -0
- corpus_analyzer-0.1.0/test_output/reference/rust-mcp-expert.chatmode_rewritten.md +114 -0
- corpus_analyzer-0.1.0/test_output/reference/rust-mcp-server-generator.prompt_rewritten.md +103 -0
- corpus_analyzer-0.1.0/test_output/reference/rust-mcp-server.instructions_rewritten.md +283 -0
- corpus_analyzer-0.1.0/test_output/reference/rust-project_rewritten.md +69 -0
- corpus_analyzer-0.1.0/test_output/reference/security-expert.agent_rewritten.md +100 -0
- corpus_analyzer-0.1.0/test_output/reference/security-hardening.instructions_rewritten.md +72 -0
- corpus_analyzer-0.1.0/test_output/reference/security-hardening_rewritten.md +98 -0
- corpus_analyzer-0.1.0/test_output/reference/self-explanatory-code-commenting.instructions_rewritten.md +56 -0
- corpus_analyzer-0.1.0/test_output/reference/sentry-and-monitoring_rewritten.md +143 -0
- corpus_analyzer-0.1.0/test_output/reference/server-parallel-fetching_rewritten.md +80 -0
- corpus_analyzer-0.1.0/test_output/reference/server-serialization_rewritten.md +48 -0
- corpus_analyzer-0.1.0/test_output/reference/service-spec_rewritten.md +85 -0
- corpus_analyzer-0.1.0/test_output/reference/setup_rewritten.md +18 -0
- corpus_analyzer-0.1.0/test_output/reference/shopify_init_rewritten.md +47 -0
- corpus_analyzer-0.1.0/test_output/reference/springboot.instructions_rewritten.md +48 -0
- corpus_analyzer-0.1.0/test_output/reference/sql-sp-generation.instructions_rewritten.md +73 -0
- corpus_analyzer-0.1.0/test_output/reference/swift-mcp-server.instructions_rewritten.md +129 -0
- corpus_analyzer-0.1.0/test_output/reference/task-tool-parallel-execution-results_rewritten.md +136 -0
- corpus_analyzer-0.1.0/test_output/reference/test_rewritten.md +109 -0
- corpus_analyzer-0.1.0/test_output/reference/turborepo-typescript-rules.always-on_rewritten.md +42 -0
- corpus_analyzer-0.1.0/test_output/reference/typescript-mcp-server-generator.prompt_rewritten.md +96 -0
- corpus_analyzer-0.1.0/test_output/reference/typescript-standards_rewritten.md +351 -0
- corpus_analyzer-0.1.0/tests/__init__.py +1 -0
- corpus_analyzer-0.1.0/tests/api/__init__.py +1 -0
- corpus_analyzer-0.1.0/tests/api/test_public.py +199 -0
- corpus_analyzer-0.1.0/tests/cli/__init__.py +0 -0
- corpus_analyzer-0.1.0/tests/cli/test_graph_command.py +142 -0
- corpus_analyzer-0.1.0/tests/cli/test_index_graph.py +178 -0
- corpus_analyzer-0.1.0/tests/cli/test_search_json.py +114 -0
- corpus_analyzer-0.1.0/tests/cli/test_search_status.py +372 -0
- corpus_analyzer-0.1.0/tests/config/__init__.py +0 -0
- corpus_analyzer-0.1.0/tests/config/test_io.py +167 -0
- corpus_analyzer-0.1.0/tests/config/test_schema.py +144 -0
- corpus_analyzer-0.1.0/tests/conftest.py +83 -0
- corpus_analyzer-0.1.0/tests/core/test_database_gold_standard.py +33 -0
- corpus_analyzer-0.1.0/tests/fixtures/hallucination/sample.md +21 -0
- corpus_analyzer-0.1.0/tests/fixtures/hallucination/sample.py +24 -0
- corpus_analyzer-0.1.0/tests/fixtures/hallucination/sample.ts +30 -0
- corpus_analyzer-0.1.0/tests/graph/__init__.py +0 -0
- corpus_analyzer-0.1.0/tests/graph/test_extractor.py +76 -0
- corpus_analyzer-0.1.0/tests/graph/test_registry.py +176 -0
- corpus_analyzer-0.1.0/tests/graph/test_store.py +47 -0
- corpus_analyzer-0.1.0/tests/ingest/__init__.py +0 -0
- corpus_analyzer-0.1.0/tests/ingest/test_chunker.py +1058 -0
- corpus_analyzer-0.1.0/tests/ingest/test_chunker_coverage.py +232 -0
- corpus_analyzer-0.1.0/tests/ingest/test_embedder.py +212 -0
- corpus_analyzer-0.1.0/tests/ingest/test_hallucination.py +99 -0
- corpus_analyzer-0.1.0/tests/ingest/test_indexer.py +717 -0
- corpus_analyzer-0.1.0/tests/ingest/test_round_trip.py +127 -0
- corpus_analyzer-0.1.0/tests/ingest/test_scanner.py +200 -0
- corpus_analyzer-0.1.0/tests/llm/test_chunking.py +55 -0
- corpus_analyzer-0.1.0/tests/llm/test_rewriter_quality.py +23 -0
- corpus_analyzer-0.1.0/tests/mcp/__init__.py +1 -0
- corpus_analyzer-0.1.0/tests/mcp/test_server.py +521 -0
- corpus_analyzer-0.1.0/tests/search/__init__.py +1 -0
- corpus_analyzer-0.1.0/tests/search/test_classifier.py +305 -0
- corpus_analyzer-0.1.0/tests/search/test_engine.py +564 -0
- corpus_analyzer-0.1.0/tests/search/test_formatter.py +209 -0
- corpus_analyzer-0.1.0/tests/search/test_summarizer.py +72 -0
- corpus_analyzer-0.1.0/tests/store/__init__.py +0 -0
- corpus_analyzer-0.1.0/tests/store/test_schema.py +241 -0
- corpus_analyzer-0.1.0/tests/test_analyzers/__init__.py +1 -0
- corpus_analyzer-0.1.0/tests/test_analyzers/test_quality_logic.py +69 -0
- corpus_analyzer-0.1.0/tests/test_analyzers/test_shape.py +4 -0
- corpus_analyzer-0.1.0/tests/test_classifiers/__init__.py +1 -0
- corpus_analyzer-0.1.0/tests/test_classifiers/test_data_science_tags.py +21 -0
- corpus_analyzer-0.1.0/tests/test_classifiers/test_document_type.py +89 -0
- corpus_analyzer-0.1.0/tests/test_classifiers/test_enhanced_tags.py +50 -0
- corpus_analyzer-0.1.0/tests/test_core/__init__.py +0 -0
- corpus_analyzer-0.1.0/tests/test_core/test_change_detection.py +204 -0
- corpus_analyzer-0.1.0/tests/test_core/test_db_migration.py +69 -0
- corpus_analyzer-0.1.0/tests/test_core/test_enhanced_db.py +62 -0
- corpus_analyzer-0.1.0/tests/test_extractors/__init__.py +1 -0
- corpus_analyzer-0.1.0/tests/test_extractors/test_markdown.py +52 -0
- corpus_analyzer-0.1.0/tests/test_extractors/test_python.py +54 -0
- corpus_analyzer-0.1.0/uv.lock +1979 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Application
|
|
2
|
+
CORPUS_DATABASE_PATH=corpus.sqlite
|
|
3
|
+
CORPUS_REPORTS_DIR=reports
|
|
4
|
+
CORPUS_TEMPLATES_DIR=templates
|
|
5
|
+
|
|
6
|
+
# Ollama settings
|
|
7
|
+
CORPUS_OLLAMA_HOST=http://localhost:11434
|
|
8
|
+
CORPUS_OLLAMA_MODEL=llama3.2
|
|
9
|
+
|
|
10
|
+
# Analysis
|
|
11
|
+
CORPUS_CHUNK_SIZE=1000
|
|
12
|
+
CORPUS_CHUNK_OVERLAP=100
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# Virtual environments
|
|
7
|
+
.venv/
|
|
8
|
+
venv/
|
|
9
|
+
ENV/
|
|
10
|
+
|
|
11
|
+
# Distribution / packaging
|
|
12
|
+
build/
|
|
13
|
+
dist/
|
|
14
|
+
*.egg-info/
|
|
15
|
+
*.egg
|
|
16
|
+
|
|
17
|
+
# Testing
|
|
18
|
+
.pytest_cache/
|
|
19
|
+
htmlcov/
|
|
20
|
+
.coverage
|
|
21
|
+
coverage.xml
|
|
22
|
+
|
|
23
|
+
# Linting / Type checking
|
|
24
|
+
.ruff_cache/
|
|
25
|
+
.mypy_cache/
|
|
26
|
+
|
|
27
|
+
# IDEs
|
|
28
|
+
.idea/
|
|
29
|
+
.vscode/
|
|
30
|
+
*.swp
|
|
31
|
+
*.swo
|
|
32
|
+
|
|
33
|
+
# OS files
|
|
34
|
+
.DS_Store
|
|
35
|
+
Thumbs.db
|
|
36
|
+
|
|
37
|
+
# Project specific
|
|
38
|
+
*.sqlite
|
|
39
|
+
corpus.sqlite
|
|
40
|
+
reports/
|
|
41
|
+
templates/
|
|
42
|
+
output/
|
|
43
|
+
|
|
44
|
+
# Environment
|
|
45
|
+
.env
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# Milestones
|
|
2
|
+
|
|
3
|
+
## v1.0 MVP (Shipped: 2026-02-23)
|
|
4
|
+
|
|
5
|
+
**Phases completed:** 4 phases, 15 plans
|
|
6
|
+
**Timeline:** 2026-01-13 → 2026-02-23 (41 days)
|
|
7
|
+
**Python LOC:** ~6,100
|
|
8
|
+
|
|
9
|
+
**Delivered:** A semantic search engine for AI agent libraries — index local skills, workflows, and code; query via CLI, MCP, or Python API with sub-second hybrid BM25+vector retrieval.
|
|
10
|
+
|
|
11
|
+
**Key accomplishments:**
|
|
12
|
+
- LanceDB embedding pipeline: ChunkRecord schema, deterministic sha256 chunk IDs, OllamaEmbedder integration
|
|
13
|
+
- Full ingestion CLI (`corpus add`, `corpus index`) with incremental re-indexing and XDG Base Directory compliance
|
|
14
|
+
- Hybrid BM25+vector search engine with RRF fusion, filterable by source, file type, and construct type
|
|
15
|
+
- Agent construct classifier (rule-based + LLM fallback) and AI summarizer per indexed file
|
|
16
|
+
- FastMCP server with pre-warmed embeddings and `from corpus import search` Python API
|
|
17
|
+
- Safety hardening: CLI KeyError fix, indexer warning logs, MCP `content_error` signaling
|
|
18
|
+
|
|
19
|
+
**Archive:** `.planning/milestones/v1.0-ROADMAP.md`
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
## v1.1 Search Quality (Shipped: 2026-02-23)
|
|
25
|
+
|
|
26
|
+
**Phases completed:** 2 phases, 4 plans
|
|
27
|
+
**Timeline:** 2026-02-23 (1 day)
|
|
28
|
+
**Python LOC:** ~6,248
|
|
29
|
+
|
|
30
|
+
**Delivered:** Eliminated index noise via per-source extension allowlists and lifted `--construct` filtering accuracy from heuristic to 0.95-confidence via YAML frontmatter signals.
|
|
31
|
+
|
|
32
|
+
**Key accomplishments:**
|
|
33
|
+
- Per-source extension allowlist (`SourceConfig.extensions`) with sensible defaults — excludes `.sh`, `.html`, `.json`, `.lock`, binaries automatically
|
|
34
|
+
- Extension filtering wired end-to-end: corpus.toml → walk_source → indexer → CLI warning on file removal
|
|
35
|
+
- `ClassificationResult` dataclass with confidence + source tracking (frontmatter/rule_based/llm)
|
|
36
|
+
- Frontmatter-first classifier: `type:` / `component_type:` → 0.95 confidence; `tags:` → 0.70 confidence
|
|
37
|
+
- LanceDB schema v3 with `classification_source` + `classification_confidence` fields; idempotent in-place migration
|
|
38
|
+
- `--construct` filter now leverages high-confidence frontmatter classifications persisted in LanceDB
|
|
39
|
+
|
|
40
|
+
**Archive:** `.planning/milestones/v1.1-ROADMAP.md`
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
## v1.2 Graph Linker (Shipped: 2026-02-24)
|
|
46
|
+
|
|
47
|
+
**Phases completed:** 2 phases (7–8), 1 GSD plan
|
|
48
|
+
**Timeline:** 2026-02-24 (1 day)
|
|
49
|
+
**Python LOC:** ~7,300
|
|
50
|
+
|
|
51
|
+
**Delivered:** Added a directed relationship graph to the indexing pipeline — `corpus index` now auto-extracts `## Related Skills` / `## Related Files` links from Markdown and persists them as queryable graph edges, while dead API surface was removed.
|
|
52
|
+
|
|
53
|
+
**Key accomplishments:**
|
|
54
|
+
- `corpus index` auto-extracts `## Related Skills` / `## Related Files` edges into `graph.sqlite` with no extra commands
|
|
55
|
+
- `corpus graph <slug>` exposes upstream (←) and downstream (→) neighbours for any indexed file
|
|
56
|
+
- Closest-prefix ambiguity resolution picks the nearest-path candidate when multiple files share a slug
|
|
57
|
+
- `corpus index` warns on duplicate slug collisions in yellow at index time
|
|
58
|
+
- `corpus graph --show-duplicates` lists all slug collisions and the paths involved
|
|
59
|
+
- Removed dead `use_llm_classification` parameter from `index_source()` / `SourceConfig`, shrinking the API surface
|
|
60
|
+
|
|
61
|
+
**Archive:** `.planning/milestones/v1.2-ROADMAP.md`
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
## v1.3 Code Quality (Shipped: 2026-02-24)
|
|
67
|
+
|
|
68
|
+
**Phases completed:** 4 phases, 11 plans
|
|
69
|
+
**Timeline:** 2026-02-24 (1 day)
|
|
70
|
+
|
|
71
|
+
**Delivered:** Achieved a zero-violation linting baseline across all 53 source files — `ruff check .` and `mypy src/` both exit 0 — via surgical config, auto-fix sweeps, and targeted manual fixes.
|
|
72
|
+
|
|
73
|
+
**Key accomplishments:**
|
|
74
|
+
- `pyproject.toml` surgical ruff/mypy config: `extend-exclude` for `.planning/`, per-file-ignores for E501 and B006
|
|
75
|
+
- `ruff --fix` sweep eliminated ~370 auto-fixable violations across 37 files
|
|
76
|
+
- Manual E741/E402/B017/B023/B904/E501 fixes across leaf modules, database hub, and cli.py
|
|
77
|
+
- `cast(Table, ...)` pattern at all 8 sqlite-utils call sites — grep-able and refactor-safe
|
|
78
|
+
- `DEFAULT_SYSTEM_PROMPT` trailing comma bug fixed (was `tuple[str]` at runtime, now `str`)
|
|
79
|
+
- `Atom` dataclass promoted to module level; nested closures fully annotated in chunked_processor.py
|
|
80
|
+
|
|
81
|
+
**Archive:** `.planning/milestones/v1.3-ROADMAP.md`
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
## v1.4 Search Precision (Shipped: 2026-02-24)
|
|
87
|
+
|
|
88
|
+
**Phases completed:** 2 phases, 3 plans
|
|
89
|
+
**Timeline:** 2026-02-24 (1 day)
|
|
90
|
+
**Files modified:** 23 (+2,566 / -48 lines)
|
|
91
|
+
|
|
92
|
+
**Delivered:** Gave users full control over search output quality — minimum-score filtering and sort-order control are now available across CLI, Python API, and MCP with RRF score guidance and a contextual hint when filtering eliminates all results.
|
|
93
|
+
|
|
94
|
+
**Key accomplishments:**
|
|
95
|
+
- `min_score: float = 0.0` parameter added to `hybrid_search()` with post-retrieval RRF score filtering (FILT-01)
|
|
96
|
+
- `--min-score` CLI option with RRF range help text (0.009–0.033) so users can calibrate thresholds (FILT-02)
|
|
97
|
+
- FILT-03 contextual hint: "No results above X.xxx. Run without --min-score to see available scores." on filtered-all
|
|
98
|
+
- `--sort-by score|date|title` CLI option with `_CLI_SORT_BY_MAP` translation to engine vocabulary
|
|
99
|
+
- Python `search()` API gains `sort_by` + `min_score` with `ValueError` on invalid sort values (PARITY-01/02)
|
|
100
|
+
- MCP `corpus_search()` gains `min_score: Optional[float]` with `None`→`0.0` + `filtered_by_min_score` signal (PARITY-03)
|
|
101
|
+
|
|
102
|
+
**Archive:** `.planning/milestones/v1.4-ROADMAP.md`
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
## v1.5 TypeScript AST Chunking (Shipped: 2026-02-24)
|
|
108
|
+
|
|
109
|
+
**Phases completed:** 2 phases (15–16), 5 plans
|
|
110
|
+
**Timeline:** 2026-02-24 (1 day)
|
|
111
|
+
**Python LOC:** ~7,811
|
|
112
|
+
|
|
113
|
+
**Delivered:** Replaced line-based chunking for TypeScript and JavaScript with tree-sitter AST-aware chunking — `.ts`, `.tsx`, `.js`, `.jsx` files now index at construct-level precision matching the existing Python AST chunker, with production safeguards for minified files and optional-dependency environments.
|
|
114
|
+
|
|
115
|
+
**Key accomplishments:**
|
|
116
|
+
- `chunk_typescript()` extracts 8 top-level node types (function, generator, class, abstract class, interface, type alias, lexical declaration, enum) with correct 1-indexed line boundaries and export-unwrapping
|
|
117
|
+
- Grammar dispatched by extension: TypeScript for `.ts`, TSX for `.tsx`/`.jsx`, JavaScript for `.js`; `@lru_cache` grammar loader prevents re-parsing on 500+ file corpora
|
|
118
|
+
- TDD RED→GREEN: 21-method `TestChunkTypeScript` class at full parity with `TestChunkPython` (all node types, non-ASCII identifiers, JSX parse, partial-error tree, catastrophic failure fallback)
|
|
119
|
+
- IDX-08 size guard: files >50,000 chars bypass AST parse entirely — safe for minified and generated files
|
|
120
|
+
- IDX-09 `ImportError` fallback: `chunk_file()` catches missing tree-sitter at call site; import of `ts_chunker` no longer raises in optional-dependency environments
|
|
121
|
+
- Zero-violation quality gate: ruff 0 violations, mypy 0 errors, 320 tests passing across 54 source files
|
|
122
|
+
|
|
123
|
+
**Archive:** `.planning/milestones/v1.5-ROADMAP.md`
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
## v2.0 Chunk Foundation (Shipped: 2026-02-24)
|
|
129
|
+
|
|
130
|
+
**Phases completed:** 2 phases (17–18), 4 plans
|
|
131
|
+
**Timeline:** 2026-02-24 (1 day)
|
|
132
|
+
**Python LOC:** ~7,926
|
|
133
|
+
**Files modified:** 26 (+3,540 / -986 lines)
|
|
134
|
+
|
|
135
|
+
**Delivered:** Established the chunk data foundation — every indexed chunk now carries exact line boundaries and full text in LanceDB; `corpus search` output switched to grep/IDE-clickable format with chunk text preview.
|
|
136
|
+
|
|
137
|
+
**Key accomplishments:**
|
|
138
|
+
- LanceDB schema v4: `ChunkRecord` gains `chunk_name`, `chunk_text`, `start_line`, `end_line` with idempotent `ensure_schema_v4()` migration (CHUNK-01)
|
|
139
|
+
- All three chunkers (Markdown, Python, TypeScript) emit v4 fields; `_enforce_char_limit` carries fields through all sub-chunk split paths
|
|
140
|
+
- Zero-hallucination line-range contract verified via parametrised round-trip test across `.md`/`.py`/`.ts` fixtures
|
|
141
|
+
- `format_result(result, cwd)` implemented with grep-style `path:start-end [type] score:X.XXX` output and 200-char indented chunk text preview (CHUNK-02)
|
|
142
|
+
- `search_command` render loop replaced — CLI output is now IDE-clickable in VSCode/IntelliJ
|
|
143
|
+
- Rich markup escaping on path, construct_type, and preview — no MarkupError on special chars; 340 tests passing
|
|
144
|
+
|
|
145
|
+
**Archive:** `.planning/milestones/v2.0-ROADMAP.md`
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
## v2.1 Result Quality (Shipped: 2026-02-24)
|
|
151
|
+
|
|
152
|
+
**Phases completed:** 7 phases (19–25), 11 plans
|
|
153
|
+
**Timeline:** 2026-02-24 (1 day)
|
|
154
|
+
**Python LOC:** ~8,000
|
|
155
|
+
|
|
156
|
+
**Delivered:** Completed the chunk-level search experience across CLI, MCP, and Python API surfaces. Search results are now self-contained, finely chunked, reliably scored, and strictly formatted.
|
|
157
|
+
|
|
158
|
+
**Key accomplishments:**
|
|
159
|
+
- MCP `corpus_search` response now includes `start_line`, `end_line`, and `text` per result, making it a self-contained unit of knowledge (CHUNK-03)
|
|
160
|
+
- Python and TypeScript AST chunkers sub-chunk classes at method level with `ClassName.method_name` naming (SUB-01–03)
|
|
161
|
+
- `--name` filtering enabled across CLI and MCP via substring matching on chunk name (NAME-01–03)
|
|
162
|
+
- Search scores normalised to 0–1 range internally; MCP `sort_by` achieves parity with CLI (SORT-01, NORM-01)
|
|
163
|
+
- `corpus search --output json` emits a clean JSON array to stdout for shell automation (JSON-01)
|
|
164
|
+
- `corpus_graph` MCP tool added for LLM-driven graph traversal using the existing `GraphStore` (GRAPH-01)
|
|
165
|
+
- Quality gates verified: 85%+ branch coverage on chunking modules and zero-hallucination line-range contract enforced by parametrised integration tests (QUAL-01–02)
|
|
166
|
+
|
|
167
|
+
**Archive:** `.planning/ROADMAP.md`
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# Corpus
|
|
2
|
+
|
|
3
|
+
## What This Is
|
|
4
|
+
|
|
5
|
+
Corpus is a local semantic search engine for AI agent libraries. It indexes agent skills, workflows, prompts, and code across configured directories and local repos, then makes them instantly queryable via CLI, MCP server, and Python API. Built for developers who maintain collections of agent skills and need to surface relevant files without grepping.
|
|
6
|
+
|
|
7
|
+
v1.0 ships as a CLI tool (`corpus add`, `corpus index`, `corpus search`, `corpus status`) backed by LanceDB with hybrid BM25+vector retrieval. An MCP server (`corpus mcp serve`) exposes search to Claude Code and other agents. A Python API (`from corpus import search`) enables programmatic access.
|
|
8
|
+
|
|
9
|
+
v1.1 adds configurable extension allowlists per source (no more config files polluting results) and frontmatter-aware construct classification — YAML `type:` and `component_type:` fields are classified at 0.95 confidence, making `--construct` filtering reliably accurate.
|
|
10
|
+
|
|
11
|
+
v1.2 adds a relationship graph layer: `corpus index` now extracts `## Related Skills` / `## Related Files` links from indexed Markdown and persists them as a directed graph, queryable via `corpus graph <slug>`.
|
|
12
|
+
|
|
13
|
+
v1.3 achieves a clean linting baseline across the entire codebase: zero mypy errors (`uv run mypy src/` exits 0 across 53 files) and zero ruff violations (`uv run ruff check .` exits 0). Per-file line-length override (120 chars) suppresses E501 in `llm/*.py`; B006 suppressed for Typer list defaults in `cli.py`.
|
|
14
|
+
|
|
15
|
+
v1.4 gives users full control over search output: `--min-score <float>` filters results below the RRF threshold (0.009–0.033 range documented in help text); `--sort-by score|date|title` orders results; a contextual FILT-03 hint fires when filtering eliminates all results. Python API and MCP are at parity — `search()` accepts `sort_by` and `min_score`; `corpus_search()` MCP tool accepts `min_score: Optional[float]`.
|
|
16
|
+
|
|
17
|
+
v1.5 replaces line-based chunking for TypeScript and JavaScript with tree-sitter AST-aware chunking. `.ts`, `.tsx`, `.js`, `.jsx` files now index at construct-level precision — functions, classes, interfaces, type aliases, enums, and generators extracted as separate chunks with correct line boundaries. Production-safe: 50K+ char files fall back to line chunking; missing tree-sitter is caught at call site with graceful fallback.
|
|
18
|
+
|
|
19
|
+
v2 exposes chunk-level search results across all surfaces. CLI output switches to grep/compiler-error format (`path/to/file.md:42-67 [skill] score:0.021`) — IDE-clickable with exact line ranges. MCP `corpus_search` response becomes self-contained: each result carries `start_line`, `end_line`, and full chunk `text`. Python and TypeScript class bodies are sub-chunked at method level (`ClassName.method_name`). A new `--name` CLI flag and MCP `name` parameter filter by chunk name. MCP gains `sort_by` support and 0–1 normalised scores. A `corpus search --output json` flag enables shell piping. A new `corpus_graph` MCP tool allows LLM clients to walk codebase dependency graphs.
|
|
20
|
+
|
|
21
|
+
## Core Value
|
|
22
|
+
|
|
23
|
+
Surface relevant agent files instantly — query an entire local agent library and get ranked, relevant results in under a second.
|
|
24
|
+
|
|
25
|
+
## Current Milestone: v2.1 Result Quality (Shipped)
|
|
26
|
+
|
|
27
|
+
**Goal:** Complete the chunk-level search experience — MCP self-contained chunks, method sub-chunking, name filtering, normalised scores, JSON output, and graph MCP.
|
|
28
|
+
|
|
29
|
+
**Status:** ✅ Complete (2026-02-24)
|
|
30
|
+
|
|
31
|
+
**Delivered features:**
|
|
32
|
+
- ✅ MCP `corpus_search` response includes `start_line`, `end_line`, `text` per result (CHUNK-03)
|
|
33
|
+
- ✅ Python + TypeScript method sub-chunking: `ClassName.method_name` naming (SUB-01–03)
|
|
34
|
+
- ✅ `corpus search --name <fragment>` and MCP `name` parameter (NAME-01–03)
|
|
35
|
+
- ✅ MCP `sort_by` + 0–1 normalised scores (SORT-01, NORM-01)
|
|
36
|
+
- ✅ `corpus search --output json` for shell piping (JSON-01)
|
|
37
|
+
- ✅ `corpus_graph` MCP tool for LLM graph traversal (GRAPH-01)
|
|
38
|
+
- ✅ 85%+ branch coverage on chunking modules; zero-hallucination line-range contract (QUAL-01–02)
|
|
39
|
+
|
|
40
|
+
## Requirements
|
|
41
|
+
|
|
42
|
+
### Validated
|
|
43
|
+
|
|
44
|
+
- ✓ LanceDB embedding pipeline with deterministic chunk IDs — v1.0
|
|
45
|
+
- ✓ Source config via `corpus.toml` (CONF-01–CONF-04) — v1.0
|
|
46
|
+
- ✓ `corpus add <dir>` CLI command (CONF-05) — v1.0
|
|
47
|
+
- ✓ `corpus index` with incremental re-indexing and ghost document removal (INGEST-01–INGEST-07) — v1.0
|
|
48
|
+
- ✓ Structure-aware chunking: heading-based (`.md`), AST-based (`.py`), line-based fallback — v1.0
|
|
49
|
+
- ✓ `corpus search` with hybrid BM25+vector+RRF ranking (SEARCH-01, SEARCH-02) — v1.0
|
|
50
|
+
- ✓ Search filters: `--source`, `--type`, `--construct`, `--limit` (SEARCH-03, SEARCH-04, SEARCH-05) — v1.0
|
|
51
|
+
- ✓ Agent construct classifier: skill/prompt/workflow/agent_config/code/documentation (CLASS-01–CLASS-03) — v1.0
|
|
52
|
+
- ✓ AI summarizer per indexed file with Ollama, config-gated (SUMM-01–SUMM-03) — v1.0
|
|
53
|
+
- ✓ `corpus status` with file count, chunk count, last indexed, model (CLI-04) — v1.0
|
|
54
|
+
- ✓ FastMCP server with pre-warmed embeddings, `corpus_search` tool (MCP-01–MCP-06) — v1.0
|
|
55
|
+
- ✓ Python API: `search()`, `index()`, `SearchResult` dataclass (API-01–API-03) — v1.0
|
|
56
|
+
- ✓ Safety: no CLI KeyErrors, no silent exception swallowing, MCP `content_error` signaling — v1.0
|
|
57
|
+
- ✓ Per-source extension allowlist in corpus.toml; default covers doc/code types, excludes junk (CONF-06, CONF-07, CONF-08) — v1.1
|
|
58
|
+
- ✓ Frontmatter-aware construct classifier: `type:`, `component_type:`, `tags` at 0.95/0.95/0.70 confidence (CLASS-04, CLASS-05) — v1.1
|
|
59
|
+
- ✓ `classification_source` + `classification_confidence` persisted in LanceDB; schema v3 in-place migration — v1.1
|
|
60
|
+
- ✓ Relationship graph: `corpus index` extracts + persists `## Related Skills` / `## Related Files` edges; `corpus graph <slug>` queries upstream/downstream neighbours; closest-prefix ambiguity resolution; `--show-duplicates` (GRAPH-01–GRAPH-05) — v1.2
|
|
61
|
+
- ✓ Dead `use_llm_classification` parameter removed from `index_source()` and `SourceConfig` (CLEAN-01) — v1.2
|
|
62
|
+
- ✓ `pyproject.toml` surgical ruff/mypy config: `extend-exclude`, `per-file-ignores`, `[[tool.mypy.overrides]]` (CONF-01–CONF-04, RUFF-01, RUFF-02) — v1.3
|
|
63
|
+
- ✓ `ruff --fix` sweep eliminated ~370 auto-fixable violations across 37 files (RUFF-01, RUFF-02) — v1.3
|
|
64
|
+
- ✓ Manual E741/E402/B017/B023/B904/E501 fixes across leaf modules, database hub, and cli.py (RUFF-03–RUFF-07) — v1.3
|
|
65
|
+
- ✓ `cast(Table, ...)` pattern at all sqlite-utils call sites; parameterised generics; float() guards (MYPY-01) — v1.3
|
|
66
|
+
- ✓ `Atom` promoted to module level; nested functions fully annotated in `chunked_processor.py` (MYPY-02) — v1.3
|
|
67
|
+
- ✓ `DEFAULT_SYSTEM_PROMPT` trailing comma bug fixed (was `tuple[str]`, now `str`) (MYPY-05) — v1.3
|
|
68
|
+
- ✓ `uv run ruff check .` → 0 violations; `uv run mypy src/` → 0 errors; 281 tests green (VALID-01–VALID-03) — v1.3
|
|
69
|
+
- ✓ `--min-score <float>` CLI flag filters results below RRF threshold; help text documents 0.009–0.033 range (FILT-01, FILT-02) — v1.4
|
|
70
|
+
- ✓ FILT-03 contextual hint when `--min-score` filters all results — v1.4
|
|
71
|
+
- ✓ `--sort-by score|date|title` CLI flag with engine vocabulary translation — v1.4
|
|
72
|
+
- ✓ Python `search()` API accepts `sort_by` and `min_score` with `ValueError` validation (PARITY-01, PARITY-02) — v1.4
|
|
73
|
+
- ✓ MCP `corpus_search()` accepts `min_score: Optional[float]` with `None`→`0.0` + `filtered_by_min_score` signal (PARITY-03) — v1.4
|
|
74
|
+
- ✓ `pyproject.toml` updated with `tree-sitter>=0.25.0` and `tree-sitter-language-pack>=0.13.0`; `uv sync` succeeds with pre-compiled wheels (DEP-01) — v1.5
|
|
75
|
+
- ✓ `chunk_file()` dispatch routes `.ts`, `.tsx`, `.js`, `.jsx` to `chunk_typescript()` (IDX-01) — v1.5
|
|
76
|
+
- ✓ `chunk_typescript()` extracts 8 top-level node types with correct 1-indexed line boundaries (IDX-02) — v1.5
|
|
77
|
+
- ✓ `export_statement` unwrapping: `export function foo()` and `export class Bar` produce correctly-named chunks (IDX-03) — v1.5
|
|
78
|
+
- ✓ Grammar dispatched by extension: TypeScript/TSX/JavaScript; `@lru_cache` grammar loader (IDX-04, IDX-07) — v1.5
|
|
79
|
+
- ✓ Silent fallback to `chunk_lines()` on exception or zero constructs; no fallback on `has_error` alone (IDX-05) — v1.5
|
|
80
|
+
- ✓ `chunk_name` field in returned chunk dict (IDX-06) — v1.5
|
|
81
|
+
- ✓ Size guard: files >50,000 chars fall back to `chunk_lines()` before AST parse (IDX-08) — v1.5
|
|
82
|
+
- ✓ `ImportError` guard in `chunk_file()` — missing tree-sitter falls back to line chunking (IDX-09) — v1.5
|
|
83
|
+
- ✓ `TestChunkTypeScript` at full parity with `TestChunkPython` — 21 test methods (TEST-01) — v1.5
|
|
84
|
+
- ✓ `TestChunkFile` dispatch assertions for all four TS/JS extensions (TEST-02) — v1.5
|
|
85
|
+
- ✓ `ruff check .` exits 0, `mypy src/` exits 0, 320 tests passing (QUAL-01) — v1.5
|
|
86
|
+
- ✓ LanceDB schema v4: `start_line`, `end_line`, `chunk_name`, `chunk_text` persisted per chunk; `ensure_schema_v4()` idempotent migration; all chunkers emit v4 fields (CHUNK-01) — v2.0
|
|
87
|
+
- ✓ CLI `corpus search` output: grep/IDE-clickable format `path:start-end [construct] score:X.XXX` with 200-char indented chunk text preview; Rich markup escaped (CHUNK-02) — v2.0
|
|
88
|
+
|
|
89
|
+
### Completed (v2.1)
|
|
90
|
+
|
|
91
|
+
- [x] MCP `corpus_search` response includes `start_line`, `end_line`, `text` per result — self-contained unit of knowledge (CHUNK-03)
|
|
92
|
+
- [x] Python AST chunker: class header chunk (`ClassName`) + per-method chunks (`ClassName.method_name`) (SUB-01, SUB-02)
|
|
93
|
+
- [x] TypeScript AST chunker: per-method chunks for class bodies using `ClassName.method_name` naming (SUB-03)
|
|
94
|
+
- [x] `corpus search --name <fragment>` CLI flag; MCP `name` parameter — case-insensitive substring filter on `chunk_name` (NAME-01, NAME-02, NAME-03)
|
|
95
|
+
- [x] MCP `corpus_search` accepts `sort_by` parameter (same vocabulary as CLI); scores normalised to 0–1 per query (SORT-01, NORM-01)
|
|
96
|
+
- [x] `corpus search --output json` — JSON array to stdout for shell piping (JSON-01)
|
|
97
|
+
- [x] MCP `corpus_graph` tool: accepts `slug`, returns upstream/downstream neighbour lists (GRAPH-01)
|
|
98
|
+
- [x] 85%+ branch coverage on chunking modules; zero-hallucination parametrised integration test for line ranges (QUAL-01, QUAL-02)
|
|
99
|
+
|
|
100
|
+
### Planned (v3)
|
|
101
|
+
|
|
102
|
+
- [ ] MMR-style result diversity: near-duplicate/same-file chunks penalized; architectural spread ensured (RANK-01)
|
|
103
|
+
- [ ] Contiguous sub-chunk merging: adjacent method chunks from same file merged into single display entry (RANK-02)
|
|
104
|
+
- [ ] Optional `--rerank` flag: two-stage cross-encoder/LLM re-ranking of top-20 results (RANK-03)
|
|
105
|
+
- [ ] `corpus search --expand-graph`: results include immediate graph neighbors labeled `[Depends On]` / `[Imported By]` (GEXP-01)
|
|
106
|
+
- [ ] `corpus graph --depth N`: recursive N-hop walk (default 2); hub nodes (high indegree) labeled with count (GWALK-01, GWALK-02)
|
|
107
|
+
- [ ] Centrality scoring: `corpus index` computes indegree centrality; high-centrality files receive score multiplier in search (GCENT-01)
|
|
108
|
+
- [ ] `corpus search --within-graph <slug>`: +20% score boost for results in same graph component (soft filter) (GSCOPE-01)
|
|
109
|
+
- [ ] Multiple `--query` flags: AND-intersection of semantic spaces (MULTI-01)
|
|
110
|
+
- [ ] `--exclude-path <glob>`: structural negative filter on file path (MULTI-02)
|
|
111
|
+
- [ ] Source labeling: CLI results display source name prefix; MCP `corpus_search` includes `source` field (XSRC-01, XSRC-02)
|
|
112
|
+
|
|
113
|
+
### Out of Scope
|
|
114
|
+
|
|
115
|
+
- Hosted/cloud index — local-only (privacy, simplicity)
|
|
116
|
+
- Real-time file watching — manual index refresh only; daemon complexity not justified yet
|
|
117
|
+
- Web UI — CLI + MCP sufficient for target users
|
|
118
|
+
- LLM rewriting (corpus-analyzer original feature) — retained but not the focus
|
|
119
|
+
- Chunk-level results (CHUNK-01–CHUNK-03) — addressed in v2
|
|
120
|
+
|
|
121
|
+
## Context
|
|
122
|
+
|
|
123
|
+
**v2.1 shipped 2026-02-24. Chunk-level result quality is complete across CLI, MCP, and Python API. Next work moves to deferred v3 ranking, graph expansion, and multi-query capabilities.**
|
|
124
|
+
|
|
125
|
+
- ~8k lines Python source across 54 files
|
|
126
|
+
- Tech stack: LanceDB, FastMCP, Pydantic, Typer, Rich, OllamaEmbedder (nomic-embed-text), tree-sitter + tree-sitter-language-pack; graph layer uses SQLite (`graph.sqlite`)
|
|
127
|
+
- 433 tests passing (pytest)
|
|
128
|
+
- XDG Base Directory compliant: config in `~/.config/corpus/`, data in `~/.local/share/corpus/`
|
|
129
|
+
- Single-user local tool; no daemon, no cloud dependency
|
|
130
|
+
- Zero mypy errors, zero ruff violations — clean linting baseline maintained through v2.1
|
|
131
|
+
|
|
132
|
+
Shipped in v2.0 (Phases 17–18):
|
|
133
|
+
- CLI output is now grep/IDE-clickable: `path:start-end [construct] score:X.XXX` with chunk text preview
|
|
134
|
+
- LanceDB stores exact line boundaries and full chunk text per chunk (schema v4)
|
|
135
|
+
|
|
136
|
+
v2.1-delivered improvements:
|
|
137
|
+
- MCP `corpus_search` now returns chunk-level self-contained results (`start_line`, `end_line`, `text`)
|
|
138
|
+
- Python and TypeScript class method sub-chunking is complete (`ClassName.method_name`)
|
|
139
|
+
- Name filter is available on CLI and MCP (`--name` / `name`)
|
|
140
|
+
- Scores are normalised to 0–1; MCP `sort_by` is parity-complete
|
|
141
|
+
- JSON output mode is available on CLI search (`--output json`)
|
|
142
|
+
- Graph traversal is exposed via MCP (`corpus_graph`)
|
|
143
|
+
|
|
144
|
+
Remaining known limitations (deferred):
|
|
145
|
+
- Cold-start on first index after KEEP_ALIVE expiry still possible (pre-warm only covers MCP startup)
|
|
146
|
+
- `.d.ts` ambient declarations excluded at scanner level — niche use case, deferred indefinitely
|
|
147
|
+
|
|
148
|
+
## Constraints
|
|
149
|
+
|
|
150
|
+
- **Runtime**: Python 3.12, managed with `uv`
|
|
151
|
+
- **Package manager**: `uv` only (no pip/poetry)
|
|
152
|
+
- **Embeddings**: Must support offline (Ollama) — cloud providers optional
|
|
153
|
+
- **Storage**: LanceDB for vector+metadata; FTS via tantivy (built into LanceDB)
|
|
154
|
+
- **Existing tests**: Test suite must stay green
|
|
155
|
+
|
|
156
|
+
## Key Decisions
|
|
157
|
+
|
|
158
|
+
| Decision | Rationale | Outcome |
|
|
159
|
+
|----------|-----------|---------|
|
|
160
|
+
| Pivot corpus-analyzer rather than start fresh | Extraction, models, DB, CLI already built | ✓ Good — saved ~2 phases of setup work |
|
|
161
|
+
| LanceDB over sqlite-vec | Embedded, ships hybrid search + BM25 + RRF natively | ✓ Good — no external service, fast queries |
|
|
162
|
+
| Hybrid search (vector + BM25 via RRF) | Better recall than pure vector; handles exact name matches | ✓ Good — validated in UAT |
|
|
163
|
+
| Protocol-based embedding abstraction | Offline-first (Ollama) with optional cloud providers | ✓ Good — clean swap if needed |
|
|
164
|
+
| Store embedding model name in schema | Cannot be retrofitted after first embed | ✓ Good — enforced at query time |
|
|
165
|
+
| AST-aware chunking for `.py`, heading-based for `.md` | Better chunk coherence vs line-based | ✓ Good — search quality improved |
|
|
166
|
+
| Rule-based classifier first, LLM fallback | Cost-conscious; LLM gate via `use_llm_classification` | ✓ Good — zero LLM cost by default |
|
|
167
|
+
| Default `use_llm_classification = False` | Avoid unexpected Ollama API costs | ✓ Good — explicit opt-in |
|
|
168
|
+
| `needs_reindex()` removed entirely | Hash-based change detection makes it redundant | ✓ Good — dead code eliminated |
|
|
169
|
+
| FTS rebuild only in `index_source()` | Redundant rebuild in `CorpusSearch.__init__` was wasteful | ✓ Good — ~20% faster search init |
|
|
170
|
+
| MCP `content_error` field vs exception | Avoids breaking existing clients; explicit error signal | ✓ Good — graceful degradation |
|
|
171
|
+
| Path constants in `config/schema.py` | Avoid circular imports from dual definitions | ✓ Good — single source of truth |
|
|
172
|
+
| `ClassificationResult` dataclass (not raw string) | Structured data enables confidence + source tracking | ✓ Good — clean extension point for LLM/rule/frontmatter sources |
|
|
173
|
+
| Frontmatter priority > rule-based | Explicit declaration is higher signal than heuristics | ✓ Good — 0.95 vs 0.60 confidence gap makes priority clear |
|
|
174
|
+
| `type:` confidence 0.95, `tags:` confidence 0.70 | Explicit type is direct match; tags are softer signal | ✓ Good — appropriate weighting |
|
|
175
|
+
| `ensure_schema_v3()` in-place migration | Existing users don't rebuild index on upgrade | ✓ Good — idempotent, zero data loss |
|
|
176
|
+
| Extension allowlist default includes doc/code types | Sensible out-of-box behavior without requiring config | ✓ Good — excludes `.sh`, `.html`, `.json`, `.lock`, binaries automatically |
|
|
177
|
+
|
|
178
|
+
| SQLite for graph store (not LanceDB) | Graph edges are relational; SQLite is simpler and avoids LanceDB schema overhead | ✓ Good — separate `graph.sqlite` keeps concerns cleanly separated |
|
|
179
|
+
| Closest-prefix ambiguity resolution for slugs | Context-aware: picks the candidate closest in filesystem path to the referencing file | ✓ Good — handles multi-repo agent libraries without false matches |
|
|
180
|
+
| Hardcode `use_llm=False` at call site (not remove arg) | `classify_file` defaults to `use_llm=True`; removing kwarg would silently switch to LLM classification | ✓ Good — preserved rule-based classification behaviour |
|
|
181
|
+
| `extend-exclude` over `exclude` in ruff config | Preserves ruff defaults (`.venv`, `.git`) while adding `.windsurf/`, `.planning/` | ✓ Good — no accidental exclusion of user dirs |
|
|
182
|
+
| `cast(Table, ...)` per call site (not `# type: ignore`) | Explicit and refactor-safe; grep-able pattern | ✓ Good — all 8 sqlite-utils call sites annotated cleanly |
|
|
183
|
+
| `DEFAULT_SYSTEM_PROMPT` trailing comma removed (not cast away) | Was a real `tuple[str]` runtime bug — `+=` on a tuple would raise `TypeError` at runtime | ✓ Good — genuine bug fixed, not suppressed |
|
|
184
|
+
| `Atom` promoted to module level (not type: ignore on nested) | Nested dataclasses prevent typed annotations on helper closures | ✓ Good — cleaner module structure, zero mypy errors |
|
|
185
|
+
| `OllamaClient.db: CorpusDatabase \| None = None` added | `advanced_rewriter.py` uses `client.db`; TYPE_CHECKING guard avoids circular import | ✓ Good — optional field, no runtime impact if unused |
|
|
186
|
+
| Post-retrieval Python filter for `min_score` (not LanceDB `.where()`) | RRF scores aren't stored as a native LanceDB column; filtering in-process is simpler and correct | ✓ Good — 4 tests confirm behaviour; no schema change needed |
|
|
187
|
+
| `_CLI_SORT_BY_MAP` + `_API_SORT_MAP` translation dicts | CLI/API vocabulary (`score/date/title`) decoupled from engine vocabulary (`relevance/date/path`) | ✓ Good — user-facing names are stable even if engine internals change |
|
|
188
|
+
| MCP `min_score: Optional[float]` with `None`→`0.0` guard | MCP schema requires Optional for backward-compat; explicit guard makes the no-op intent clear | ✓ Good — tested with both `None` and `0.02` cases |
|
|
189
|
+
| FILT-03 branch checks `min_score > 0.0` before generic no-results | Contextual hint only fires when the user deliberately filtered; doesn't appear on regular empty results | ✓ Good — tested by asserting absence of generic message alongside presence of hint |
|
|
190
|
+
| `get_parser(dialect)` from `tree_sitter_language_pack` with `@lru_cache` | Simpler than module-level globals; one Parser per dialect per process | ✓ Good — prevents 30s overhead on 500+ TS file corpora |
|
|
191
|
+
| `.tsx` and `.jsx` both use TSX grammar | TypeScript grammar produces ERROR nodes on JSX elements | ✓ Good — all JSX cases handled cleanly |
|
|
192
|
+
| Fall back only on exception or zero constructs, NOT on `has_error` | tree-sitter is error-tolerant; partial trees still yield good constructs | ✓ Good — no unnecessary fallback on syntax errors |
|
|
193
|
+
| `export default function(){}` → detect 'default' child, emit full export_statement | `declaration` field is `None` for anonymous default exports; special-case required | ✓ Good — `test_export_default_function` passes |
|
|
194
|
+
| Lazy import of `ts_chunker` inside `chunk_file` elif branch | Avoids circular import (`ts_chunker` imports from `chunker`) | ✓ Good — clean module boundary, no import side-effects |
|
|
195
|
+
| Separate `except ImportError:` before `except Exception:` (not merged) | Explicit over broad; ImportError is a distinct, expected failure mode | ✓ Good — IDX-09 contract clear and testable |
|
|
196
|
+
| Size guard before parser call (not after) | Minified files exit early with zero AST overhead | ✓ Good — 50K char threshold validated by test |
|
|
197
|
+
| Smoke test via Python API (`chunk_file`) not CLI (`corpus index`) | `corpus index` requires configured LanceDB sources; API call confirms dispatch wiring without external config | ✓ Good — clean, hermetic validation |
|
|
198
|
+
|
|
199
|
+
| CLI format: `file:start-end [construct] score:X.XXX` (grep/compiler-error pattern) | IDE-clickable natively in VSCode/IntelliJ; parseable by shell scripts; matches developer muscle memory | ✓ Good — shipped v2.0 |
|
|
200
|
+
| MCP returns full `text` (untruncated); CLI truncates to 200 chars | MCP callers are LLMs — self-contained chunk avoids follow-up file-read; CLI is human-readable terminal output | ✓ Good — shipped in v2.1 |
|
|
201
|
+
| `start_line`/`end_line` are 1-indexed, inclusive | Matches existing chunker convention (tree-sitter 0-indexed → +1); matches editor conventions | ✓ Good — shipped v2.0 |
|
|
202
|
+
| `ensure_schema_v4()` adds columns with defaults, does not rebuild | Same pattern as v3 migration (v1.1); users re-index to backfill; idempotent | ✓ Good — shipped v2.0 |
|
|
203
|
+
| `format_result` returns `(primary, preview \| None)` tuple — pure function | Console.print() owns rendering; testable without output side effects | ✓ Good — shipped v2.0 |
|
|
204
|
+
| `ClassName.method_name` dot notation for method sub-chunks | Unambiguous; matches Python attribute access syntax; makes `--name` filtering readable | ✓ Good — shipped in v2.1 |
|
|
205
|
+
| Class header chunk = docstring + `__init__` up to first non-assignment | Makes class purpose searchable independently from methods; bounded and deterministic | ✓ Good — shipped in v2.1 |
|
|
206
|
+
| `--name foo` flag (not `--construct name:foo`) | `--construct` already has a fixed meaning (agent construct type); separate flag is cleaner UX | ✓ Good — shipped in v2.1 |
|
|
207
|
+
| Case-insensitive substring match for `--name` | Most useful for exploratory search; exact match would require knowing the precise chunk name | ✓ Good — shipped in v2.1 |
|
|
208
|
+
| Per-query min-max normalisation (not global baseline) | Cross-query normalisation is misleading for hybrid scores; within-query is correct and simple | ✓ Good — shipped in v2.1 |
|
|
209
|
+
| Normalisation inside search engine (not display layer) | API, CLI, and MCP all receive same normalised value; existing score-range tests must be updated | ✓ Good — shipped in v2.1 |
|
|
210
|
+
| `--output json` flag (not separate subcommand) | Composable with all existing filter flags; keeps CLI surface small | ✓ Good — shipped in v2.1 |
|
|
211
|
+
| `corpus_graph` MCP returns upstream/downstream lists (not graph object) | LLMs iterate with follow-up calls; flat lists are simpler to consume than nested structures | ✓ Good — shipped in v2.1 |
|
|
212
|
+
| `corpus_graph` MCP reuses `GraphStore` (no new storage) | Graph layer complete since v1.2; MCP tool is a thin wrapper; zero schema changes required | ✓ Good — shipped in v2.1 |
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
*Last updated: 2026-02-24 after v2.1 milestone completion sync*
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Requirements: Corpus v2.1 Result Quality
|
|
2
|
+
|
|
3
|
+
**Defined:** 2026-02-24
|
|
4
|
+
**Core Value:** Surface relevant agent files instantly — query your entire local agent library and get ranked results in under a second
|
|
5
|
+
|
|
6
|
+
## v2.1 Requirements
|
|
7
|
+
|
|
8
|
+
### MCP Completeness
|
|
9
|
+
|
|
10
|
+
- [x] **CHUNK-03**: MCP `corpus_search` response includes `start_line`, `end_line`, and full untruncated `text` per result — self-contained unit of knowledge for LLM callers
|
|
11
|
+
- [x] **SORT-01**: MCP `corpus_search` accepts `sort_by` parameter (same vocabulary as CLI: `relevance | construct | confidence | date | path`); translated to engine vocabulary via existing `_API_SORT_MAP`
|
|
12
|
+
- [x] **NORM-01**: Scores normalised to 0–1 per query via min-max normalisation inside the search engine; Python API `SearchResult.score`, CLI display, and MCP response all see the same normalised value
|
|
13
|
+
|
|
14
|
+
### Method Sub-Chunking
|
|
15
|
+
|
|
16
|
+
- [x] **SUB-01**: Python AST chunker produces a class header chunk (`ClassName`) containing docstring + `__init__` body up to first non-assignment statement; replaces monolithic class chunk
|
|
17
|
+
- [x] **SUB-02**: Python AST chunker produces per-method chunks (`ClassName.method_name`) for each method in a class; `__init__`, `__str__`, etc. follow the same dot-notation
|
|
18
|
+
- [x] **SUB-03**: TypeScript AST chunker produces per-method chunks (`ClassName.method_name`) for `method_definition` nodes in class bodies; constructor becomes `ClassName.constructor`
|
|
19
|
+
|
|
20
|
+
### Name Filtering
|
|
21
|
+
|
|
22
|
+
- [x] **NAME-01**: `corpus search --name <fragment>` CLI flag; case-insensitive substring match on `chunk_name`; composable with all existing filter flags
|
|
23
|
+
- [x] **NAME-02**: MCP `corpus_search` accepts `name: Optional[str]` parameter; same case-insensitive substring match semantics
|
|
24
|
+
- [x] **NAME-03**: `corpus search --name foo` (no positional query) is valid; lists all chunks matching the name filter ordered by `--sort-by` (default: relevance)
|
|
25
|
+
|
|
26
|
+
### JSON Output
|
|
27
|
+
|
|
28
|
+
- [x] **JSON-01**: `corpus search --output json` emits a valid JSON array to stdout; suppresses Rich formatting entirely; composable with all filter flags including `--name`
|
|
29
|
+
|
|
30
|
+
### Graph MCP
|
|
31
|
+
|
|
32
|
+
- [x] **GRAPH-01**: MCP `corpus_graph` tool accepts `slug: str`; returns `upstream: list[str]` and `downstream: list[str]` neighbour paths; reuses `GraphStore` without new storage
|
|
33
|
+
|
|
34
|
+
### Quality
|
|
35
|
+
|
|
36
|
+
- [x] **QUAL-01**: `pytest --cov --cov-branch` reports 85%+ branch coverage on ingest chunking modules (`ingest/chunker.py`, `ingest/ts_chunker.py`)
|
|
37
|
+
- [x] **QUAL-02**: Parametrised zero-hallucination integration test: every stored `start_line`/`end_line` matches actual file content across `.md`, `.py`, and `.ts` fixtures
|
|
38
|
+
|
|
39
|
+
## v3 Requirements (Deferred)
|
|
40
|
+
|
|
41
|
+
### Ranking
|
|
42
|
+
|
|
43
|
+
- **RANK-01**: MMR-style result diversity — near-duplicate/same-file chunks penalised; architectural spread ensured
|
|
44
|
+
- **RANK-02**: Contiguous sub-chunk merging — adjacent method chunks from same file merged into single display entry
|
|
45
|
+
- **RANK-03**: Optional `--rerank` flag — two-stage cross-encoder/LLM re-ranking of top-20 results
|
|
46
|
+
|
|
47
|
+
### Graph Traversal
|
|
48
|
+
|
|
49
|
+
- **GEXP-01**: `corpus search --expand-graph` — results include immediate graph neighbours labelled `[Depends On]` / `[Imported By]`
|
|
50
|
+
- **GWALK-01**: `corpus graph --depth N` — recursive N-hop walk (default 2); hub nodes labelled with indegree count
|
|
51
|
+
- **GWALK-02**: Cycle detection (`visited: set[str]`) before any recursive graph walk
|
|
52
|
+
- **GCENT-01**: Centrality scoring — `corpus index` computes indegree centrality; high-centrality files receive score multiplier in hybrid search
|
|
53
|
+
- **GSCOPE-01**: `corpus search --within-graph <slug>` — +20% score boost for results in same graph component
|
|
54
|
+
|
|
55
|
+
### Multi-Query
|
|
56
|
+
|
|
57
|
+
- **MULTI-01**: Multiple `--query` flags — AND-intersection of semantic spaces via overfetch+score-sum
|
|
58
|
+
- **MULTI-02**: `--exclude-path <glob>` — structural negative filter on file path
|
|
59
|
+
|
|
60
|
+
### Cross-Source
|
|
61
|
+
|
|
62
|
+
- **XSRC-01**: CLI results display source name prefix
|
|
63
|
+
- **XSRC-02**: MCP `corpus_search` includes `source` field per result
|
|
64
|
+
|
|
65
|
+
## Out of Scope
|
|
66
|
+
|
|
67
|
+
| Feature | Reason |
|
|
68
|
+
|---------|--------|
|
|
69
|
+
| Chunk overlap / sliding window | AST-based chunking is non-overlapping by design; overlap requires different strategy |
|
|
70
|
+
| Streaming MCP responses | Chunk text bounded by 50K size guard; streaming complexity not justified yet |
|
|
71
|
+
| Persistent cross-query normalisation | Cross-query normalisation is misleading for hybrid scores; per-query is correct |
|
|
72
|
+
| Cloud/hosted index | Local-only (privacy, simplicity constraint) |
|
|
73
|
+
| Web UI | CLI + MCP sufficient for target users |
|
|
74
|
+
|
|
75
|
+
## Traceability
|
|
76
|
+
|
|
77
|
+
| Requirement | Phase | Status |
|
|
78
|
+
|-------------|-------|--------|
|
|
79
|
+
| CHUNK-03 | Phase 19 | Complete |
|
|
80
|
+
| SUB-01 | Phase 20 | Complete |
|
|
81
|
+
| SUB-02 | Phase 20 | Complete |
|
|
82
|
+
| SUB-03 | Phase 21 | Complete |
|
|
83
|
+
| NAME-01 | Phase 22 | Complete |
|
|
84
|
+
| NAME-02 | Phase 22 | Complete |
|
|
85
|
+
| NAME-03 | Phase 22 | Complete |
|
|
86
|
+
| NORM-01 | Phase 23 | Complete |
|
|
87
|
+
| SORT-01 | Phase 23 | Complete |
|
|
88
|
+
| JSON-01 | Phase 24 | Complete |
|
|
89
|
+
| QUAL-01 | Phase 25 | Complete |
|
|
90
|
+
| QUAL-02 | Phase 25 | Complete |
|
|
91
|
+
| GRAPH-01 | Phase 25 | Complete |
|
|
92
|
+
|
|
93
|
+
**Coverage:**
|
|
94
|
+
- v2.1 requirements: 13 total
|
|
95
|
+
- Mapped to phases: 13
|
|
96
|
+
- Unmapped: 0 ✓
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
*Requirements defined: 2026-02-24*
|
|
100
|
+
*Last updated: 2026-02-24 after roadmap creation (Phases 19–25)*
|