@mycodemap/mycodemap 0.4.2 → 0.5.1
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.
- package/CHANGELOG.md +105 -3
- package/README.md +192 -53
- package/dist/ai/claude.d.ts +38 -0
- package/dist/ai/claude.d.ts.map +1 -0
- package/dist/ai/claude.js +169 -0
- package/dist/ai/claude.js.map +1 -0
- package/dist/ai/codex.d.ts +38 -0
- package/dist/ai/codex.d.ts.map +1 -0
- package/dist/ai/codex.js +169 -0
- package/dist/ai/codex.js.map +1 -0
- package/dist/ai/factory.d.ts +48 -0
- package/dist/ai/factory.d.ts.map +1 -0
- package/dist/ai/factory.js +95 -0
- package/dist/ai/factory.js.map +1 -0
- package/dist/ai/index.d.ts +12 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +29 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/provider.d.ts +70 -0
- package/dist/ai/provider.d.ts.map +1 -0
- package/dist/ai/provider.js +31 -0
- package/dist/ai/provider.js.map +1 -0
- package/dist/ai/subagent-caller.d.ts +90 -0
- package/dist/ai/subagent-caller.d.ts.map +1 -0
- package/dist/ai/subagent-caller.js +280 -0
- package/dist/ai/subagent-caller.js.map +1 -0
- package/dist/ai/types.d.ts +70 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +5 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +18 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -1
- package/dist/cli/commands/analyze.js +239 -6
- package/dist/cli/commands/analyze.js.map +1 -1
- package/dist/cli/commands/check.d.ts +22 -0
- package/dist/cli/commands/check.d.ts.map +1 -0
- package/dist/cli/commands/check.js +168 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/commands/ci.d.ts +25 -0
- package/dist/cli/commands/ci.d.ts.map +1 -1
- package/dist/cli/commands/ci.js +139 -36
- package/dist/cli/commands/ci.js.map +1 -1
- package/dist/cli/commands/complexity.d.ts.map +1 -1
- package/dist/cli/commands/complexity.js +6 -0
- package/dist/cli/commands/complexity.js.map +1 -1
- package/dist/cli/commands/design.d.ts +52 -0
- package/dist/cli/commands/design.d.ts.map +1 -0
- package/dist/cli/commands/design.js +274 -0
- package/dist/cli/commands/design.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +1 -0
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +121 -8
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/history.d.ts +26 -0
- package/dist/cli/commands/history.d.ts.map +1 -0
- package/dist/cli/commands/history.js +92 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +13 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +108 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/server.d.ts +9 -0
- package/dist/cli/commands/server.d.ts.map +1 -0
- package/dist/cli/commands/server.js +65 -0
- package/dist/cli/commands/server.js.map +1 -0
- package/dist/cli/commands/ship/pipeline.d.ts.map +1 -1
- package/dist/cli/commands/ship/pipeline.js +8 -1
- package/dist/cli/commands/ship/pipeline.js.map +1 -1
- package/dist/cli/commands/ship/publisher.d.ts +9 -1
- package/dist/cli/commands/ship/publisher.d.ts.map +1 -1
- package/dist/cli/commands/ship/publisher.js +149 -6
- package/dist/cli/commands/ship/publisher.js.map +1 -1
- package/dist/cli/commands/workflow.d.ts.map +1 -1
- package/dist/cli/commands/workflow.js +22 -2
- package/dist/cli/commands/workflow.js.map +1 -1
- package/dist/cli/config-loader.d.ts.map +1 -1
- package/dist/cli/config-loader.js +3 -2
- package/dist/cli/config-loader.js.map +1 -1
- package/dist/cli/contract-checker.d.ts +33 -0
- package/dist/cli/contract-checker.d.ts.map +1 -0
- package/dist/cli/contract-checker.js +719 -0
- package/dist/cli/contract-checker.js.map +1 -0
- package/dist/cli/contract-diff-scope.d.ts +14 -0
- package/dist/cli/contract-diff-scope.d.ts.map +1 -0
- package/dist/cli/contract-diff-scope.js +127 -0
- package/dist/cli/contract-diff-scope.js.map +1 -0
- package/dist/cli/contract-gate-thresholds.d.ts +14 -0
- package/dist/cli/contract-gate-thresholds.d.ts.map +1 -0
- package/dist/cli/contract-gate-thresholds.js +19 -0
- package/dist/cli/contract-gate-thresholds.js.map +1 -0
- package/dist/cli/design-contract-loader.d.ts +15 -0
- package/dist/cli/design-contract-loader.d.ts.map +1 -0
- package/dist/cli/design-contract-loader.js +527 -0
- package/dist/cli/design-contract-loader.js.map +1 -0
- package/dist/cli/design-contract-schema.d.ts +11 -0
- package/dist/cli/design-contract-schema.d.ts.map +1 -0
- package/dist/cli/design-contract-schema.js +75 -0
- package/dist/cli/design-contract-schema.js.map +1 -0
- package/dist/cli/design-handoff-builder.d.ts +15 -0
- package/dist/cli/design-handoff-builder.d.ts.map +1 -0
- package/dist/cli/design-handoff-builder.js +345 -0
- package/dist/cli/design-handoff-builder.js.map +1 -0
- package/dist/cli/design-scope-resolver.d.ts +8 -0
- package/dist/cli/design-scope-resolver.d.ts.map +1 -0
- package/dist/cli/design-scope-resolver.js +760 -0
- package/dist/cli/design-scope-resolver.js.map +1 -0
- package/dist/cli/design-verification-builder.d.ts +8 -0
- package/dist/cli/design-verification-builder.d.ts.map +1 -0
- package/dist/cli/design-verification-builder.js +369 -0
- package/dist/cli/design-verification-builder.js.map +1 -0
- package/dist/cli/index.js +20 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/paths.d.ts.map +1 -1
- package/dist/cli/paths.js +30 -7
- package/dist/cli/paths.js.map +1 -1
- package/dist/cli-new/commands/server.d.ts +13 -0
- package/dist/cli-new/commands/server.d.ts.map +1 -0
- package/dist/cli-new/commands/server.js +90 -0
- package/dist/cli-new/commands/server.js.map +1 -0
- package/dist/core/analyzer.d.ts.map +1 -1
- package/dist/core/analyzer.js +16 -0
- package/dist/core/analyzer.js.map +1 -1
- package/dist/domain/entities/CodeGraph.d.ts +5 -1
- package/dist/domain/entities/CodeGraph.d.ts.map +1 -1
- package/dist/domain/entities/CodeGraph.js +29 -12
- package/dist/domain/entities/CodeGraph.js.map +1 -1
- package/dist/domain/entities/Dependency.d.ts +8 -1
- package/dist/domain/entities/Dependency.d.ts.map +1 -1
- package/dist/domain/entities/Dependency.js +19 -4
- package/dist/domain/entities/Dependency.js.map +1 -1
- package/dist/domain/entities/Symbol.d.ts +2 -1
- package/dist/domain/entities/Symbol.d.ts.map +1 -1
- package/dist/domain/entities/Symbol.js +6 -3
- package/dist/domain/entities/Symbol.js.map +1 -1
- package/dist/generator/ai-overview.d.ts +51 -0
- package/dist/generator/ai-overview.d.ts.map +1 -0
- package/dist/generator/ai-overview.js +160 -0
- package/dist/generator/ai-overview.js.map +1 -0
- package/dist/infrastructure/storage/StorageFactory.d.ts +13 -5
- package/dist/infrastructure/storage/StorageFactory.d.ts.map +1 -1
- package/dist/infrastructure/storage/StorageFactory.js +62 -16
- package/dist/infrastructure/storage/StorageFactory.js.map +1 -1
- package/dist/infrastructure/storage/adapters/FileSystemStorage.d.ts +3 -1
- package/dist/infrastructure/storage/adapters/FileSystemStorage.d.ts.map +1 -1
- package/dist/infrastructure/storage/adapters/FileSystemStorage.js +10 -2
- package/dist/infrastructure/storage/adapters/FileSystemStorage.js.map +1 -1
- package/dist/infrastructure/storage/adapters/KuzuDBStorage.d.ts +3 -1
- package/dist/infrastructure/storage/adapters/KuzuDBStorage.d.ts.map +1 -1
- package/dist/infrastructure/storage/adapters/KuzuDBStorage.js +9 -1
- package/dist/infrastructure/storage/adapters/KuzuDBStorage.js.map +1 -1
- package/dist/infrastructure/storage/adapters/MemoryStorage.d.ts +3 -1
- package/dist/infrastructure/storage/adapters/MemoryStorage.d.ts.map +1 -1
- package/dist/infrastructure/storage/adapters/MemoryStorage.js +9 -1
- package/dist/infrastructure/storage/adapters/MemoryStorage.js.map +1 -1
- package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts +41 -0
- package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts.map +1 -0
- package/dist/infrastructure/storage/adapters/Neo4jStorage.js +162 -0
- package/dist/infrastructure/storage/adapters/Neo4jStorage.js.map +1 -0
- package/dist/infrastructure/storage/adapters/SQLiteStorage.d.ts +53 -0
- package/dist/infrastructure/storage/adapters/SQLiteStorage.d.ts.map +1 -0
- package/dist/infrastructure/storage/adapters/SQLiteStorage.js +879 -0
- package/dist/infrastructure/storage/adapters/SQLiteStorage.js.map +1 -0
- package/dist/infrastructure/storage/graph-helpers.d.ts +3 -1
- package/dist/infrastructure/storage/graph-helpers.d.ts.map +1 -1
- package/dist/infrastructure/storage/graph-helpers.js +90 -0
- package/dist/infrastructure/storage/graph-helpers.js.map +1 -1
- package/dist/infrastructure/storage/index.d.ts +1 -1
- package/dist/infrastructure/storage/index.d.ts.map +1 -1
- package/dist/infrastructure/storage/interfaces/StorageBase.d.ts +3 -1
- package/dist/infrastructure/storage/interfaces/StorageBase.d.ts.map +1 -1
- package/dist/infrastructure/storage/interfaces/StorageBase.js.map +1 -1
- package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.d.ts +27 -0
- package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.d.ts.map +1 -0
- package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.js +246 -0
- package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.js.map +1 -0
- package/dist/infrastructure/storage/sqlite/perf-thresholds.d.ts +25 -0
- package/dist/infrastructure/storage/sqlite/perf-thresholds.d.ts.map +1 -0
- package/dist/infrastructure/storage/sqlite/perf-thresholds.js +25 -0
- package/dist/infrastructure/storage/sqlite/perf-thresholds.js.map +1 -0
- package/dist/infrastructure/storage/sqlite/schema.d.ts +4 -0
- package/dist/infrastructure/storage/sqlite/schema.d.ts.map +1 -0
- package/dist/infrastructure/storage/sqlite/schema.js +111 -0
- package/dist/infrastructure/storage/sqlite/schema.js.map +1 -0
- package/dist/interface/types/design-check.d.ts +73 -0
- package/dist/interface/types/design-check.d.ts.map +1 -0
- package/dist/interface/types/design-check.js +4 -0
- package/dist/interface/types/design-check.js.map +1 -0
- package/dist/interface/types/design-contract.d.ts +123 -0
- package/dist/interface/types/design-contract.d.ts.map +1 -0
- package/dist/interface/types/design-contract.js +7 -0
- package/dist/interface/types/design-contract.js.map +1 -0
- package/dist/interface/types/design-handoff.d.ts +68 -0
- package/dist/interface/types/design-handoff.d.ts.map +1 -0
- package/dist/interface/types/design-handoff.js +4 -0
- package/dist/interface/types/design-handoff.js.map +1 -0
- package/dist/interface/types/design-mapping.d.ts +51 -0
- package/dist/interface/types/design-mapping.d.ts.map +1 -0
- package/dist/interface/types/design-mapping.js +4 -0
- package/dist/interface/types/design-mapping.js.map +1 -0
- package/dist/interface/types/design-verification.d.ts +49 -0
- package/dist/interface/types/design-verification.d.ts.map +1 -0
- package/dist/interface/types/design-verification.js +4 -0
- package/dist/interface/types/design-verification.js.map +1 -0
- package/dist/interface/types/history-risk.d.ts +90 -0
- package/dist/interface/types/history-risk.d.ts.map +1 -0
- package/dist/interface/types/history-risk.js +4 -0
- package/dist/interface/types/history-risk.js.map +1 -0
- package/dist/interface/types/index.d.ts +20 -1
- package/dist/interface/types/index.d.ts.map +1 -1
- package/dist/interface/types/storage.d.ts +28 -1
- package/dist/interface/types/storage.d.ts.map +1 -1
- package/dist/orchestrator/adapters/ast-grep-adapter.d.ts +10 -0
- package/dist/orchestrator/adapters/ast-grep-adapter.d.ts.map +1 -1
- package/dist/orchestrator/adapters/ast-grep-adapter.js +46 -17
- package/dist/orchestrator/adapters/ast-grep-adapter.js.map +1 -1
- package/dist/orchestrator/adapters/codemap-adapter.d.ts.map +1 -1
- package/dist/orchestrator/adapters/codemap-adapter.js +2 -22
- package/dist/orchestrator/adapters/codemap-adapter.js.map +1 -1
- package/dist/orchestrator/ai-feed-generator.d.ts +210 -0
- package/dist/orchestrator/ai-feed-generator.d.ts.map +1 -0
- package/dist/orchestrator/ai-feed-generator.js +377 -0
- package/dist/orchestrator/ai-feed-generator.js.map +1 -0
- package/dist/orchestrator/history-risk-service.d.ts +55 -0
- package/dist/orchestrator/history-risk-service.d.ts.map +1 -0
- package/dist/orchestrator/history-risk-service.js +680 -0
- package/dist/orchestrator/history-risk-service.js.map +1 -0
- package/dist/orchestrator/types.d.ts +19 -1
- package/dist/orchestrator/types.d.ts.map +1 -1
- package/dist/orchestrator/types.js +19 -0
- package/dist/orchestrator/types.js.map +1 -1
- package/dist/server/mcp/index.d.ts +4 -0
- package/dist/server/mcp/index.d.ts.map +1 -0
- package/dist/server/mcp/index.js +5 -0
- package/dist/server/mcp/index.js.map +1 -0
- package/dist/server/mcp/server.d.ts +17 -0
- package/dist/server/mcp/server.d.ts.map +1 -0
- package/dist/server/mcp/server.js +84 -0
- package/dist/server/mcp/server.js.map +1 -0
- package/dist/server/mcp/service.d.ts +22 -0
- package/dist/server/mcp/service.d.ts.map +1 -0
- package/dist/server/mcp/service.js +177 -0
- package/dist/server/mcp/service.js.map +1 -0
- package/dist/server/mcp/types.d.ts +56 -0
- package/dist/server/mcp/types.d.ts.map +1 -0
- package/dist/server/mcp/types.js +4 -0
- package/dist/server/mcp/types.js.map +1 -0
- package/docs/AI_ASSISTANT_SETUP.md +1 -1
- package/docs/SETUP_GUIDE.md +6 -6
- package/docs/ai-guide/COMMANDS.md +171 -4
- package/docs/ai-guide/INTEGRATION.md +137 -433
- package/docs/ai-guide/OUTPUT.md +890 -5
- package/docs/ai-guide/PATTERNS.md +54 -14
- package/docs/ai-guide/PROMPTS.md +17 -6
- package/docs/archive/test-report-symbol-search.md +384 -0
- package/docs/archive/test-scenario-4-complexity-analysis.md +460 -0
- package/docs/archive/test_report_scenario5.md +615 -0
- package/docs/archive/test_scenario_3_impact_analysis_report.md +520 -0
- package/docs/backlog.md +177 -0
- package/docs/eatdogfood-reports/2026-04-17-eatdogfood-agent-experience.md +231 -0
- package/docs/exec-plans/completed/2026-04-17-eatdogfood-codemap-cli.md +103 -0
- package/docs/ideation/2026-04-15-executable-architecture-constitution-ideation.md +102 -0
- package/docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md +126 -0
- package/docs/product-specs/MVP3-ARCHITECTURE-COMPARISON.md +11 -10
- package/docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-PRD.md +10 -10
- package/docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-TECH-PRD.md +17 -12
- package/docs/product-specs/README.md +2 -1
- package/docs/rules/README.md +16 -11
- package/docs/rules/architecture-guardrails.md +24 -336
- package/docs/rules/code-quality-redlines.md +25 -311
- package/docs/rules/engineering-with-codex-openai.md +20 -3
- package/docs/rules/validation.md +90 -37
- package/mycodemap.config.schema.json +3 -3
- package/package.json +7 -2
- package/scripts/benchmark-governance-graph.mjs +132 -0
- package/scripts/calibrate-contract-gate.mjs +221 -0
- package/scripts/capability-report.py +255 -0
- package/scripts/experiments/arcadedb-http-smoke.mjs +90 -0
- package/scripts/qa-rule-control.sh +254 -0
- package/scripts/report-high-risk-files.mjs +395 -0
- package/scripts/rule-context.mjs +155 -0
- package/scripts/smoke-sqlite-impact.mjs +85 -0
- package/scripts/sync-analyze-docs.js +1 -0
- package/scripts/tests/test_capability_report.py +89 -0
- package/scripts/tests/test_rule_control_workflow.py +51 -0
- package/scripts/tests/test_validate_rules.py +81 -0
- package/scripts/validate-ai-docs.js +283 -1
- package/scripts/validate-docs.js +479 -25
- package/scripts/validate-rules.py +254 -0
|
@@ -170,6 +170,9 @@ node dist/cli/index.js ci check-headers
|
|
|
170
170
|
# Step 3: 评估变更风险
|
|
171
171
|
node dist/cli/index.js ci assess-risk
|
|
172
172
|
|
|
173
|
+
# Step 3.5: 需要看某个符号为什么危险 / 最近谁改过时
|
|
174
|
+
node dist/cli/index.js history --symbol createCheckCommand
|
|
175
|
+
|
|
173
176
|
# Step 4: 检查输出契约(如果修改了 analyze)
|
|
174
177
|
node dist/cli/index.js ci check-output-contract
|
|
175
178
|
|
|
@@ -180,6 +183,8 @@ node dist/cli/index.js ci check-docs-sync
|
|
|
180
183
|
npm test
|
|
181
184
|
```
|
|
182
185
|
|
|
186
|
+
> `ci assess-risk`、`check`、`history` 共用同一套 Git history risk truth;若历史不可用,输出会显式返回 `unavailable` / warning,而不是默默降成低风险。
|
|
187
|
+
|
|
183
188
|
---
|
|
184
189
|
|
|
185
190
|
### 模式 F: 复杂分析任务(analysis-only workflow)
|
|
@@ -189,13 +194,31 @@ npm test
|
|
|
189
194
|
**执行步骤**:
|
|
190
195
|
|
|
191
196
|
```bash
|
|
197
|
+
# Step 0: 如果任务来自人类设计,先校验 design contract
|
|
198
|
+
node dist/cli/index.js design validate mycodemap.design.md --json
|
|
199
|
+
|
|
200
|
+
# Step 0.5: 把 design contract 映射成 candidate code scope
|
|
201
|
+
node dist/cli/index.js design map mycodemap.design.md --json
|
|
202
|
+
|
|
203
|
+
# Step 0.75: 生成 reviewer / agent 共用的 handoff package
|
|
204
|
+
node dist/cli/index.js design handoff mycodemap.design.md --json
|
|
205
|
+
|
|
206
|
+
# Step 0.9: 基于 reviewed handoff truth 做 verification / drift 检查
|
|
207
|
+
node dist/cli/index.js design verify mycodemap.design.md --json
|
|
208
|
+
|
|
209
|
+
# Step 0.95: 先校准当前仓库是否还能默认 hard gate
|
|
210
|
+
node scripts/calibrate-contract-gate.mjs --max-changed-files 10 --max-false-positive-rate 0.10
|
|
211
|
+
|
|
212
|
+
# Step 0.97: 如果需要把 contract 变成 PR 门禁,显式输出 GitHub annotations
|
|
213
|
+
node dist/cli/index.js check --contract mycodemap.design.md --against src --base origin/main --annotation-format github
|
|
214
|
+
|
|
192
215
|
# Step 1: 启动工作流
|
|
193
216
|
node dist/cli/index.js workflow start "实现用户认证模块"
|
|
194
217
|
|
|
195
218
|
# Step 2: 查看当前阶段建议
|
|
196
219
|
node dist/cli/index.js workflow status
|
|
197
220
|
|
|
198
|
-
# Step 3:
|
|
221
|
+
# Step 3: 执行当前阶段的分析(实现/提交/CI 不在 workflow phase 内)
|
|
199
222
|
|
|
200
223
|
# Step 4: 完成阶段后推进
|
|
201
224
|
node dist/cli/index.js workflow proceed
|
|
@@ -214,14 +237,34 @@ node dist/cli/index.js workflow checkpoint
|
|
|
214
237
|
2. `read` - 阅读影响范围、复杂度与上下文
|
|
215
238
|
3. `link` - 汇总依赖、引用与关联关系
|
|
216
239
|
4. `show` - 生成概览、摘要与展示型结果
|
|
217
|
-
5. `commit` - 提交验证
|
|
218
|
-
6. `ci` - CI 验证
|
|
219
240
|
|
|
220
|
-
>
|
|
241
|
+
> 说明:`workflow` 仍只保留 `find` / `read` / `link` / `show` 四阶段;如果任务由人类设计驱动,先走 `design validate → design map → design handoff → design verify` 固定输入、候选范围、review gate 与 drift 检查;若还需要执行仓库级代码门禁,先校准再显式运行 `check`。
|
|
242
|
+
|
|
243
|
+
### 模式 G: CI-native contract gate
|
|
244
|
+
|
|
245
|
+
**适用场景**: 需要把 `mycodemap.design.md` 真正接进 PR / CI,同时保持 annotation 可见且避免 noisy hard gate
|
|
246
|
+
|
|
247
|
+
**执行步骤**:
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
# Step 1: 校准当前仓库的 hard-gate 窗口
|
|
251
|
+
node scripts/calibrate-contract-gate.mjs --max-changed-files 10 --max-false-positive-rate 0.10
|
|
252
|
+
|
|
253
|
+
# Step 2: 在 GitHub PR 中输出 annotation-friendly diagnostics
|
|
254
|
+
node dist/cli/index.js check --contract mycodemap.design.md --against src --base origin/main --annotation-format github
|
|
255
|
+
|
|
256
|
+
# Step 3: 如需 GitLab artifact,写出 line-scoped code-quality 报告
|
|
257
|
+
node dist/cli/index.js check --contract mycodemap.design.md --against src --base origin/main --annotation-format gitlab --annotation-file gl-code-quality-report.json
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**决策要点**:
|
|
261
|
+
- PR 默认 hard gate 只在 calibration 通过且 `changed files <= 10` 时开启。
|
|
262
|
+
- 超过窗口、出现 `diff-scope-fallback`,或 `false-positive rate >10%` 时必须显式退回 `warn-only / fallback`。
|
|
263
|
+
- GitHub 允许 file-scoped degraded diagnostics;GitLab 只应输出 line-scoped diagnostics,不伪造行号。
|
|
221
264
|
|
|
222
265
|
---
|
|
223
266
|
|
|
224
|
-
### 模式
|
|
267
|
+
### 模式 H: 切换图存储后端
|
|
225
268
|
|
|
226
269
|
**适用场景**: 需要把 CodeGraph 从默认文件系统存储切到 KùzuDB,或验证 graph backend 是否真正生效
|
|
227
270
|
|
|
@@ -234,24 +277,21 @@ cat mycodemap.config.json
|
|
|
234
277
|
# Step 2: 选择后端
|
|
235
278
|
# {
|
|
236
279
|
# "storage": {
|
|
237
|
-
# "type": "
|
|
238
|
-
# "databasePath": ".codemap/
|
|
280
|
+
# "type": "sqlite",
|
|
281
|
+
# "databasePath": ".codemap/governance.sqlite"
|
|
239
282
|
# }
|
|
240
283
|
# }
|
|
241
284
|
|
|
242
|
-
# Step 3:
|
|
243
|
-
npm install kuzu
|
|
244
|
-
|
|
245
|
-
# Step 4: 重新生成代码地图
|
|
285
|
+
# Step 3: 重新生成代码地图
|
|
246
286
|
node dist/cli/index.js generate
|
|
247
287
|
|
|
248
|
-
# Step
|
|
288
|
+
# Step 4: 验证同一 backend 可被读取
|
|
249
289
|
node dist/cli/index.js export json -o /tmp/codemap.json
|
|
250
290
|
```
|
|
251
291
|
|
|
252
292
|
**决策要点**:
|
|
253
|
-
- 旧的 `neo4j`
|
|
254
|
-
- `storage.type = "auto"`
|
|
293
|
+
- 旧的 `neo4j` / `kuzudb` 配置现在应该直接报迁移错误;显式 `sqlite` 但运行时不满足条件时也应看到显式错误,而不是静默 fallback。
|
|
294
|
+
- `storage.type = "auto"` 当前优先落到 `sqlite`;只有 SQLite 不可用时才回退 `filesystem`,不要把阈值字段误读成更复杂的调度器。
|
|
255
295
|
- 图存储生产化只收口存储面,不重新开放公共 HTTP API 产品面。
|
|
256
296
|
|
|
257
297
|
---
|
package/docs/ai-guide/PROMPTS.md
CHANGED
|
@@ -340,32 +340,43 @@
|
|
|
340
340
|
|
|
341
341
|
请执行以下步骤:
|
|
342
342
|
|
|
343
|
-
1.
|
|
343
|
+
1. **先把设计写成可验证输入**
|
|
344
|
+
```bash
|
|
345
|
+
cp docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md mycodemap.design.md
|
|
346
|
+
node dist/cli/index.js design validate mycodemap.design.md --json
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
2. **如果这是架构边界类需求,先跑 contract gate**
|
|
350
|
+
```bash
|
|
351
|
+
node dist/cli/index.js check --contract mycodemap.design.md --against src
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
3. **相关代码搜索**
|
|
344
355
|
```bash
|
|
345
356
|
node dist/cli/index.js analyze -i find -k "{{RELATED_KEYWORD}}" --topK 10 --json
|
|
346
357
|
```
|
|
347
358
|
|
|
348
|
-
|
|
359
|
+
4. **参考现有实现**
|
|
349
360
|
分析类似功能的实现方式
|
|
350
361
|
|
|
351
|
-
|
|
362
|
+
5. **确定实现位置**
|
|
352
363
|
```bash
|
|
353
364
|
node dist/cli/index.js analyze -i read -t "候选目录" --json
|
|
354
365
|
```
|
|
355
366
|
选择复杂度最低的模块
|
|
356
367
|
|
|
357
|
-
|
|
368
|
+
6. **影响分析**(如果需要修改现有代码)
|
|
358
369
|
```bash
|
|
359
370
|
node dist/cli/index.js analyze -i read -t "目标文件" --json
|
|
360
371
|
```
|
|
361
372
|
|
|
362
|
-
|
|
373
|
+
7. **实现步骤**
|
|
363
374
|
- [ ] 创建新文件(添加 [META] [WHY] 头)
|
|
364
375
|
- [ ] 实现核心功能
|
|
365
376
|
- [ ] 添加单元测试
|
|
366
377
|
- [ ] 运行测试验证
|
|
367
378
|
|
|
368
|
-
|
|
379
|
+
8. **验证**
|
|
369
380
|
```bash
|
|
370
381
|
node dist/cli/index.js ci check-headers -f "新文件.ts"
|
|
371
382
|
npm test
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
# CodeMap 符号搜索对比测试报告
|
|
2
|
+
|
|
3
|
+
## 测试概述
|
|
4
|
+
|
|
5
|
+
**测试目标**: 对比 `codemap query -s/-S` 与 `grep/rg` 在搜索代码符号时的差异
|
|
6
|
+
|
|
7
|
+
**测试环境**: /data/codemap 目录
|
|
8
|
+
|
|
9
|
+
**测试时间**: 2026-03-02
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 测试场景1: 精确搜索符号 "ModuleInfo"
|
|
14
|
+
|
|
15
|
+
### 测试目的
|
|
16
|
+
搜索项目中广泛使用的类型名称 "ModuleInfo",对比各工具的精确匹配能力。
|
|
17
|
+
|
|
18
|
+
### CodeMap 执行
|
|
19
|
+
```bash
|
|
20
|
+
npx codemap query -s "ModuleInfo"
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**输出:**
|
|
24
|
+
```
|
|
25
|
+
🔍 查询 "ModuleInfo" (symbol)
|
|
26
|
+
找到 5 个结果
|
|
27
|
+
|
|
28
|
+
moduleInfo
|
|
29
|
+
类型: variable
|
|
30
|
+
路径: /data/codemap/src/core/analyzer.ts
|
|
31
|
+
定义于 src/core/analyzer.ts:55
|
|
32
|
+
|
|
33
|
+
moduleInfo
|
|
34
|
+
类型: variable
|
|
35
|
+
路径: /data/codemap/src/core/analyzer.ts
|
|
36
|
+
定义于 src/core/analyzer.ts:63
|
|
37
|
+
|
|
38
|
+
moduleInfo
|
|
39
|
+
类型: variable
|
|
40
|
+
路径: /data/codemap/src/core/analyzer.ts
|
|
41
|
+
定义于 src/core/analyzer.ts:76
|
|
42
|
+
|
|
43
|
+
ModuleInfo
|
|
44
|
+
类型: interface
|
|
45
|
+
路径: /data/codemap/src/types/index.ts
|
|
46
|
+
导出于 src/types/index.ts
|
|
47
|
+
|
|
48
|
+
ModuleInfo
|
|
49
|
+
类型: interface
|
|
50
|
+
路径: /data/codemap/src/types/index.ts
|
|
51
|
+
定义于 src/types/index.ts:154
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**执行时间**: 0.538s (real)
|
|
55
|
+
|
|
56
|
+
### rg 执行
|
|
57
|
+
```bash
|
|
58
|
+
rg -n "ModuleInfo" src/
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**输出:** (共找到 82 处匹配,以下为部分示例)
|
|
62
|
+
```
|
|
63
|
+
src/parser/index.ts:8:import type { ModuleInfo, ImportInfo, ExportInfo, ModuleSymbol, SymbolKind, DecoratorInfo } from '../types/index.js';
|
|
64
|
+
src/parser/index.ts:60:export async function parseFile(filePath: string): Promise<ModuleInfo> {
|
|
65
|
+
src/core/analyzer.ts:5:import type { CodeMap, AnalysisOptions, ModuleInfo, DependencyGraph, ProjectInfo, ProjectSummary } from '../types/index.js';
|
|
66
|
+
src/core/analyzer.ts:43: const modules: ModuleInfo[] = [];
|
|
67
|
+
src/types/index.ts:154:export interface ModuleInfo {
|
|
68
|
+
src/cache/index.ts:10:import type { ModuleInfo } from '../types/index.js';
|
|
69
|
+
...
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**执行时间**: 0.008s (real)
|
|
73
|
+
|
|
74
|
+
### grep 执行
|
|
75
|
+
```bash
|
|
76
|
+
grep -rn "ModuleInfo" src/
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**输出:** (与 rg 类似,共 82 处匹配)
|
|
80
|
+
|
|
81
|
+
**执行时间**: 0.003s (real)
|
|
82
|
+
|
|
83
|
+
### 对比分析
|
|
84
|
+
|
|
85
|
+
| 维度 | CodeMap | rg | grep |
|
|
86
|
+
|------|---------|-----|------|
|
|
87
|
+
| **速度** | 0.538s | 0.008s | 0.003s |
|
|
88
|
+
| **结果数量** | 5 个符号定义 | 82 处匹配 | 82 处匹配 |
|
|
89
|
+
| **准确性** | 仅返回符号定义和导出 | 返回所有文本匹配 | 返回所有文本匹配 |
|
|
90
|
+
| **符号类型识别** | ✅ 是 (interface, variable) | ❌ 否 | ❌ 否 |
|
|
91
|
+
| **导出信息** | ✅ 显示导出位置 | ❌ 否 | ❌ 否 |
|
|
92
|
+
| **可读性** | 结构化,带类型标签 | 纯文本行 | 纯文本行 |
|
|
93
|
+
|
|
94
|
+
### 发现的问题
|
|
95
|
+
|
|
96
|
+
1. **CodeMap 速度较慢**: CodeMap 比 rg 慢约 67 倍,比 grep 慢约 179 倍
|
|
97
|
+
2. **CodeMap 结果不完整**: CodeMap 只返回 5 个结果,而 rg/grep 返回 82 处匹配
|
|
98
|
+
3. **CodeMap 区分大小写问题**: 搜索 "ModuleInfo" 时,变量名 "moduleInfo"(小写)也被返回,但可能并非用户期望的精确匹配
|
|
99
|
+
4. **rg/grep 缺乏语义**: 无法区分类型定义、变量声明和普通文本引用
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## 测试场景2: 模糊搜索 "cache"
|
|
104
|
+
|
|
105
|
+
### 测试目的
|
|
106
|
+
使用模糊搜索查找与 "cache" 相关的符号,对比各工具的模糊匹配能力。
|
|
107
|
+
|
|
108
|
+
### CodeMap 执行
|
|
109
|
+
```bash
|
|
110
|
+
npx codemap query -S "cache"
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**输出:**
|
|
114
|
+
```
|
|
115
|
+
🔍 查询 "cache" (search)
|
|
116
|
+
找到 20 个结果
|
|
117
|
+
|
|
118
|
+
cached
|
|
119
|
+
类型: variable
|
|
120
|
+
路径: /data/codemap/src/ai/factory.ts
|
|
121
|
+
定义于 src/ai/factory.ts:25
|
|
122
|
+
|
|
123
|
+
clearCache
|
|
124
|
+
类型: method
|
|
125
|
+
路径: /data/codemap/src/ai/factory.ts
|
|
126
|
+
定义于 src/ai/factory.ts:95
|
|
127
|
+
|
|
128
|
+
src/cache/file-hash-cache.ts
|
|
129
|
+
类型: module
|
|
130
|
+
路径: /data/codemap/src/cache/file-hash-cache.ts
|
|
131
|
+
模块匹配
|
|
132
|
+
|
|
133
|
+
FileHashCache
|
|
134
|
+
类型: export (class)
|
|
135
|
+
路径: /data/codemap/src/cache/file-hash-cache.ts
|
|
136
|
+
导出于 src/cache/file-hash-cache.ts
|
|
137
|
+
|
|
138
|
+
generateCacheKey
|
|
139
|
+
类型: export (function)
|
|
140
|
+
路径: /data/codemap/src/cache/file-hash-cache.ts
|
|
141
|
+
导出于 src/cache/file-hash-cache.ts
|
|
142
|
+
|
|
143
|
+
parseCacheKey
|
|
144
|
+
类型: export (function)
|
|
145
|
+
路径: /data/codemap/src/cache/file-hash-cache.ts
|
|
146
|
+
导出于 src/cache/file-hash-cache.ts
|
|
147
|
+
|
|
148
|
+
FileHashCache
|
|
149
|
+
类型: class
|
|
150
|
+
路径: /data/codemap/src/cache/file-hash-cache.ts
|
|
151
|
+
定义于 src/cache/file-hash-cache.ts:66
|
|
152
|
+
|
|
153
|
+
... (共20个结果)
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**执行时间**: 0.642s (real)
|
|
157
|
+
|
|
158
|
+
### rg 执行
|
|
159
|
+
```bash
|
|
160
|
+
rg -n "cache" src/ -i
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**输出:** (共找到约 300+ 处匹配,以下为部分)
|
|
164
|
+
```
|
|
165
|
+
src/cache/file-hash-cache.ts:2:// File Hash Cache - 文件哈希缓存
|
|
166
|
+
src/cache/file-hash-cache.ts:66:export class FileHashCache {
|
|
167
|
+
src/cache/file-hash-cache.ts:67: private hashCache = new Map<string, { hash: string; mtime: number }>();
|
|
168
|
+
src/cache/lru-cache.ts:2:// LRU Cache Implementation - 最近最少使用缓存
|
|
169
|
+
src/cache/lru-cache.ts:9:export class LRUCache<K, V> {
|
|
170
|
+
src/cache/index.ts:2:// Cache Module - 缓存系统入口
|
|
171
|
+
...
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**执行时间**: 0.007s (real)
|
|
175
|
+
|
|
176
|
+
### 对比分析
|
|
177
|
+
|
|
178
|
+
| 维度 | CodeMap (-S) | rg (-i) |
|
|
179
|
+
|------|--------------|---------|
|
|
180
|
+
| **速度** | 0.642s | 0.007s |
|
|
181
|
+
| **结果数量** | 20 个符号 | 300+ 处文本匹配 |
|
|
182
|
+
| **匹配模式** | 符号级模糊匹配 | 文本级正则匹配 |
|
|
183
|
+
| **信息类型** | 符号定义、导出、模块 | 所有文本行 |
|
|
184
|
+
| **去重** | ✅ 符号去重 (如 FileHashCache 类只出现一次定义) | ❌ 每行都显示 |
|
|
185
|
+
| **可读性** | 结构化,带类型信息 | 纯文本,含代码上下文 |
|
|
186
|
+
|
|
187
|
+
### 发现的问题
|
|
188
|
+
|
|
189
|
+
1. **CodeMap 模糊搜索速度慢**: 比 rg 慢约 91 倍
|
|
190
|
+
2. **CodeMap 结果数量受限**: 仅返回 20 个结果,而 rg 返回 300+ 处
|
|
191
|
+
3. **CodeMap 不显示引用位置**: 只显示定义位置,不显示使用位置
|
|
192
|
+
4. **rg 结果噪音大**: 返回所有包含 "cache" 文本的行,包括注释、字符串、变量名等
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## 测试场景3: 搜索类/接口定义 "Analyzer"
|
|
197
|
+
|
|
198
|
+
### 测试目的
|
|
199
|
+
搜索类或接口定义,对比各工具的类型识别能力。
|
|
200
|
+
|
|
201
|
+
### CodeMap 执行
|
|
202
|
+
```bash
|
|
203
|
+
npx codemap query -s "Analyzer"
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**输出:**
|
|
207
|
+
```
|
|
208
|
+
🔍 查询 "Analyzer" (symbol)
|
|
209
|
+
找到 1 个结果
|
|
210
|
+
|
|
211
|
+
analyzer
|
|
212
|
+
类型: variable
|
|
213
|
+
路径: /data/codemap/src/orchestrator/__tests__/git-analyzer.test.ts
|
|
214
|
+
定义于 src/orchestrator/__tests__/git-analyzer.test.ts:27
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**执行时间**: 0.515s (real)
|
|
218
|
+
|
|
219
|
+
### rg 执行 (类/接口定义模式)
|
|
220
|
+
```bash
|
|
221
|
+
rg -n "class Analyzer|interface Analyzer" src/
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**输出:**
|
|
225
|
+
```
|
|
226
|
+
(无匹配,退出码 1)
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**执行时间**: 0.009s (real)
|
|
230
|
+
|
|
231
|
+
### rg 执行 (扩展搜索)
|
|
232
|
+
```bash
|
|
233
|
+
rg -n "Analyzer" src/ | head -30
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
**输出:**
|
|
237
|
+
```
|
|
238
|
+
src/cli/commands/ci.ts:9:import { GitAnalyzer } from '../../orchestrator/git-analyzer.js';
|
|
239
|
+
src/orchestrator/git-analyzer.ts:118: * GitAnalyzer 类
|
|
240
|
+
src/orchestrator/git-analyzer.ts:121:export class GitAnalyzer {
|
|
241
|
+
src/plugins/built-in/complexity-analyzer.ts:96:class ComplexityAnalyzerPlugin implements CodeMapPlugin {
|
|
242
|
+
src/orchestrator/index.ts:53: GitAnalyzer,
|
|
243
|
+
...
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### grep 执行
|
|
247
|
+
```bash
|
|
248
|
+
grep -rn "Analyzer" src/ | head -30
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
**输出:** (与 rg 类似)
|
|
252
|
+
|
|
253
|
+
### 对比分析
|
|
254
|
+
|
|
255
|
+
| 维度 | CodeMap | rg (class/interface) | rg (extended) |
|
|
256
|
+
|------|---------|---------------------|---------------|
|
|
257
|
+
| **速度** | 0.515s | 0.009s | 0.010s |
|
|
258
|
+
| **结果** | 1 个变量 | 0 个 | 约 50+ 处 |
|
|
259
|
+
| **类型过滤** | ❌ 未正确过滤 | ✅ 精确匹配模式 | ❌ 无过滤 |
|
|
260
|
+
| **大小写敏感** | ❌ 不敏感 ("analyzer" 匹配 "Analyzer") | ✅ 敏感 | ✅ 敏感 |
|
|
261
|
+
|
|
262
|
+
### 发现的问题
|
|
263
|
+
|
|
264
|
+
1. **CodeMap 搜索 "Analyzer" 未找到 GitAnalyzer 类**: 这是严重问题!项目中存在 `GitAnalyzer` 类和 `ComplexityAnalyzerPlugin` 类,但 CodeMap 只找到一个测试文件中的变量 `analyzer`。
|
|
265
|
+
2. **CodeMap 大小写不敏感问题**: 搜索 "Analyzer" 却匹配了 "analyzer" (小写变量名)。
|
|
266
|
+
3. **rg 精确模式有效但过于严格**: `class Analyzer|interface Analyzer` 精确模式没有匹配到 `class GitAnalyzer` (因为类名是 GitAnalyzer 不是 Analyzer)。
|
|
267
|
+
4. **CodeMap 缺少子串匹配**: CodeMap 似乎未将 "GitAnalyzer" 中的 "Analyzer" 子串作为匹配结果。
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## 综合分析
|
|
272
|
+
|
|
273
|
+
### 速度对比
|
|
274
|
+
|
|
275
|
+
| 工具 | Test1 (ModuleInfo) | Test2 (cache) | Test3 (Analyzer) | 平均 |
|
|
276
|
+
|------|-------------------|---------------|------------------|------|
|
|
277
|
+
| CodeMap | 0.538s | 0.642s | 0.515s | **0.565s** |
|
|
278
|
+
| rg | 0.008s | 0.007s | 0.010s | **0.008s** |
|
|
279
|
+
| grep | 0.003s | - | - | **0.003s** |
|
|
280
|
+
|
|
281
|
+
**结论**: CodeMap 比 rg 慢约 70 倍,比 grep 慢约 188 倍。
|
|
282
|
+
|
|
283
|
+
### 准确性对比
|
|
284
|
+
|
|
285
|
+
| 场景 | CodeMap | rg/grep |
|
|
286
|
+
|------|---------|---------|
|
|
287
|
+
| 精确搜索 | ⚠️ 仅返回定义,遗漏大量引用 | ✅ 返回所有文本匹配 |
|
|
288
|
+
| 模糊搜索 | ✅ 返回相关符号,结构化 | ⚠️ 返回所有文本,噪音大 |
|
|
289
|
+
| 类型搜索 | ❌ 严重遗漏 (未找到 GitAnalyzer) | ⚠️ 需要复杂正则 |
|
|
290
|
+
|
|
291
|
+
### 信息丰富度对比
|
|
292
|
+
|
|
293
|
+
| 信息类型 | CodeMap | rg | grep |
|
|
294
|
+
|---------|---------|-----|------|
|
|
295
|
+
| 符号类型 | ✅ | ❌ | ❌ |
|
|
296
|
+
| 导出信息 | ✅ | ❌ | ❌ |
|
|
297
|
+
| 文件路径 | ✅ | ✅ | ✅ |
|
|
298
|
+
| 行号 | ✅ | ✅ | ✅ |
|
|
299
|
+
| 代码上下文 | ❌ | ✅ | ✅ |
|
|
300
|
+
| 依赖关系 | ❌ | ❌ | ❌ |
|
|
301
|
+
|
|
302
|
+
### 易用性对比
|
|
303
|
+
|
|
304
|
+
| 维度 | CodeMap | rg | grep |
|
|
305
|
+
|------|---------|-----|------|
|
|
306
|
+
| 命令简洁度 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
|
|
307
|
+
| 输出可读性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
|
|
308
|
+
| 学习曲线 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
|
|
309
|
+
| 无需索引 | ❌ | ✅ | ✅ |
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## 发现的关键问题
|
|
314
|
+
|
|
315
|
+
### 🔴 严重问题
|
|
316
|
+
|
|
317
|
+
1. **符号搜索遗漏严重**: CodeMap 在搜索 "Analyzer" 时完全遗漏了 `GitAnalyzer` 类和 `ComplexityAnalyzerPlugin` 类,只找到一个不相关的变量。
|
|
318
|
+
- 检查 codemap.json 发现 GitAnalyzer 存在于索引中(多处)
|
|
319
|
+
- 可能是搜索算法未正确处理子串匹配或类名前缀
|
|
320
|
+
|
|
321
|
+
2. **大小写处理不一致**:
|
|
322
|
+
- 搜索 "ModuleInfo" 返回了 "moduleInfo" (小写变量)
|
|
323
|
+
- 搜索 "Analyzer" 返回了 "analyzer" (小写变量)
|
|
324
|
+
- 但搜索 "cache" 却正确区分了大小写变体
|
|
325
|
+
|
|
326
|
+
### 🟡 中等问题
|
|
327
|
+
|
|
328
|
+
3. **速度性能差**: CodeMap 比传统工具慢 70-180 倍,对于大型项目可能无法接受。
|
|
329
|
+
|
|
330
|
+
4. **结果数量有限**: 模糊搜索仅返回 20 个结果,可能遗漏重要符号。
|
|
331
|
+
|
|
332
|
+
### 🟢 轻微问题
|
|
333
|
+
|
|
334
|
+
5. **缺少引用信息**: CodeMap 只返回定义位置,不显示符号在哪里被使用。
|
|
335
|
+
|
|
336
|
+
6. **无代码上下文**: 不像 rg/grep 那样显示匹配的代码行。
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
## 建议
|
|
341
|
+
|
|
342
|
+
### 对 CodeMap 的改进建议
|
|
343
|
+
|
|
344
|
+
1. **修复搜索算法**:
|
|
345
|
+
- 确保子串匹配正常工作(如 "Analyzer" 应匹配 "GitAnalyzer")
|
|
346
|
+
- 检查符号索引的查询逻辑
|
|
347
|
+
|
|
348
|
+
2. **优化性能**:
|
|
349
|
+
- 使用更高效的数据结构(如 Trie 树)进行符号查找
|
|
350
|
+
- 考虑使用 SQLite 或嵌入式数据库加速查询
|
|
351
|
+
|
|
352
|
+
3. **增强搜索选项**:
|
|
353
|
+
- 添加 `--case-sensitive` 和 `--case-insensitive` 选项
|
|
354
|
+
- 添加 `--include-references` 选项显示符号引用位置
|
|
355
|
+
- 添加 `-n/--limit` 选项控制结果数量
|
|
356
|
+
|
|
357
|
+
4. **显示代码上下文**:
|
|
358
|
+
- 添加选项显示匹配行的代码片段
|
|
359
|
+
|
|
360
|
+
### 使用建议
|
|
361
|
+
|
|
362
|
+
| 场景 | 推荐工具 | 原因 |
|
|
363
|
+
|------|---------|------|
|
|
364
|
+
| 快速查找文本 | rg/grep | 速度快,无需索引 |
|
|
365
|
+
| 查找符号定义 | CodeMap | 结构化输出,带类型信息 |
|
|
366
|
+
| 理解代码结构 | CodeMap | 显示导出和模块关系 |
|
|
367
|
+
| 查找类/接口定义 | rg + 正则 | CodeMap 当前有遗漏问题 |
|
|
368
|
+
| 模糊探索代码库 | CodeMap | 符号级模糊匹配减少噪音 |
|
|
369
|
+
|
|
370
|
+
---
|
|
371
|
+
|
|
372
|
+
## 附录: 测试原始数据
|
|
373
|
+
|
|
374
|
+
### CodeMap 索引统计
|
|
375
|
+
- 总文件数: 104
|
|
376
|
+
- 总行数: 28,878
|
|
377
|
+
- 总模块数: 104
|
|
378
|
+
- 总导出: 378
|
|
379
|
+
- 总类型: 70
|
|
380
|
+
|
|
381
|
+
### 发现的符号
|
|
382
|
+
- `ModuleInfo` 接口定义于: src/types/index.ts:154
|
|
383
|
+
- `GitAnalyzer` 类定义于: src/orchestrator/git-analyzer.ts:121
|
|
384
|
+
- `ComplexityAnalyzerPlugin` 类定义于: src/plugins/built-in/complexity-analyzer.ts:96
|