@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
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
# 测试场景3:影响范围分析对比测试报告
|
|
2
|
+
|
|
3
|
+
## 测试概述
|
|
4
|
+
|
|
5
|
+
**测试目标**: 对比 CodeMap `impact` 命令与手动 `grep` 分析文件变更影响范围的差异
|
|
6
|
+
|
|
7
|
+
**测试时间**: 2025年3月2日
|
|
8
|
+
**测试目录**: `/data/codemap`
|
|
9
|
+
**CodeMap版本**: 本地构建版本
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 测试用例 1: src/core/analyzer.ts 影响分析
|
|
14
|
+
|
|
15
|
+
### 测试目的
|
|
16
|
+
分析核心分析器文件的变更影响范围,对比 CodeMap 的依赖图分析与手动 grep 文本搜索的差异。
|
|
17
|
+
|
|
18
|
+
### CodeMap 执行 (直接依赖)
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npx codemap impact -f src/core/analyzer.ts
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**执行时间**: 0.539s (real)
|
|
25
|
+
|
|
26
|
+
**输出**:
|
|
27
|
+
```
|
|
28
|
+
📍 影响分析
|
|
29
|
+
──────────────────────────────────────────────────
|
|
30
|
+
|
|
31
|
+
目标文件:
|
|
32
|
+
src/core/analyzer.ts
|
|
33
|
+
导出: analyze
|
|
34
|
+
|
|
35
|
+
⬇️ 直接依赖该文件的模块 (13):
|
|
36
|
+
• src/orchestrator/ai-feed-generator.ts
|
|
37
|
+
• src/orchestrator/result-fusion.ts
|
|
38
|
+
• src/watcher/watch-worker.ts
|
|
39
|
+
• src/core/__tests__/analyzer.test.ts
|
|
40
|
+
• src/cli/__tests__/generate.test.ts
|
|
41
|
+
• src/cli/commands/ci.ts
|
|
42
|
+
• src/cli/commands/generate.ts
|
|
43
|
+
• src/cli/commands/watch-foreground.ts
|
|
44
|
+
• src/orchestrator/__tests__/ai-feed-generator.test.ts
|
|
45
|
+
• src/orchestrator/__tests__/git-analyzer.test.ts
|
|
46
|
+
• src/parser/implementations/tree-sitter-parser.ts
|
|
47
|
+
• src/plugins/__tests__/complexity-analyzer.test.ts
|
|
48
|
+
• src/cli/commands/__tests__/watch-foreground.test.ts
|
|
49
|
+
|
|
50
|
+
⚠️ 风险评估:
|
|
51
|
+
🔴 极高风险 - 该文件是核心依赖,修改将影响大量模块
|
|
52
|
+
直接影响: 13 个模块
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### CodeMap 执行 (传递依赖)
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npx codemap impact -f src/core/analyzer.ts --transitive
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**执行时间**: 0.698s (real)
|
|
62
|
+
|
|
63
|
+
**输出**:
|
|
64
|
+
```
|
|
65
|
+
直接依赖该文件的模块 (13):
|
|
66
|
+
[同上]
|
|
67
|
+
|
|
68
|
+
🌐 传递依赖 (66):
|
|
69
|
+
└─► src/cli/index.ts [距离: 3]
|
|
70
|
+
└─► src/ai/claude.ts [距离: 4]
|
|
71
|
+
└─► src/ai/codex.ts [距离: 4]
|
|
72
|
+
... 还有 46 个
|
|
73
|
+
|
|
74
|
+
直接影响: 13 个模块
|
|
75
|
+
传递影响: 66 个额外模块
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 传统工具执行
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
rg -l "analyzer|Analyzer" src/ | head -20
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**执行时间**: 0.010s (real)
|
|
85
|
+
|
|
86
|
+
**输出**:
|
|
87
|
+
```
|
|
88
|
+
src/watcher/watch-worker.ts
|
|
89
|
+
src/cli/__tests__/generate.test.ts
|
|
90
|
+
src/cli/commands/__tests__/generate.test.ts
|
|
91
|
+
src/cli/commands/__tests__/watch-foreground.test.ts
|
|
92
|
+
src/plugins/built-in/complexity-analyzer.ts
|
|
93
|
+
src/cli/commands/watch-foreground.ts
|
|
94
|
+
src/core/__tests__/analyzer.test.ts
|
|
95
|
+
src/cli/commands/ci.ts
|
|
96
|
+
src/core/analyzer.ts
|
|
97
|
+
src/cli/commands/generate.ts
|
|
98
|
+
src/plugins/__tests__/complexity-analyzer.test.ts
|
|
99
|
+
src/plugins/index.ts
|
|
100
|
+
src/plugins/plugin-loader.ts
|
|
101
|
+
src/index.ts
|
|
102
|
+
src/orchestrator/ai-feed-generator.ts
|
|
103
|
+
src/orchestrator/index.ts
|
|
104
|
+
src/orchestrator/result-fusion.ts
|
|
105
|
+
src/orchestrator/git-analyzer.ts
|
|
106
|
+
src/orchestrator/__tests__/git-analyzer.test.ts
|
|
107
|
+
src/orchestrator/__tests__/ai-feed-generator.test.ts
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**匹配文件总数**: 22 个
|
|
111
|
+
|
|
112
|
+
### 对比分析
|
|
113
|
+
|
|
114
|
+
| 维度 | CodeMap Direct | CodeMap Transitive | Grep | 结论 |
|
|
115
|
+
|------|----------------|-------------------|------|------|
|
|
116
|
+
| **执行时间** | 0.54s | 0.70s | 0.01s | Grep 更快 (54-70x) |
|
|
117
|
+
| **直接依赖数** | 13 | 13 | 22 | Grep 包含大量误报 |
|
|
118
|
+
| **传递依赖数** | 未显示 | 66 | N/A | CodeMap 独有功能 |
|
|
119
|
+
| **依赖深度** | ❌ | ✅ (显示距离) | ❌ | CodeMap 传递模式优势 |
|
|
120
|
+
| **风险评估** | ✅ 极高风险 | ✅ 极高风险 | ❌ | CodeMap 独有功能 |
|
|
121
|
+
| **导出信息** | ✅ | ✅ | ❌ | CodeMap 独有功能 |
|
|
122
|
+
| **误报率** | 低 | 低 | 高 (40%) | CodeMap 更准确 |
|
|
123
|
+
|
|
124
|
+
### 差异分析
|
|
125
|
+
|
|
126
|
+
**Grep 找到但 CodeMap 未找到的 "依赖"**:
|
|
127
|
+
```
|
|
128
|
+
src/cli/commands/__tests__/generate.test.ts (不包含 analyzer 导入)
|
|
129
|
+
src/core/analyzer.ts (文件自身)
|
|
130
|
+
src/index.ts ✅ 应该被检测!
|
|
131
|
+
src/orchestrator/git-analyzer.ts (独立模块,非依赖)
|
|
132
|
+
src/orchestrator/index.ts (通过 git-analyzer 导入)
|
|
133
|
+
src/plugins/built-in/complexity-analyzer.ts (独立模块)
|
|
134
|
+
src/plugins/index.ts (通过 complexity-analyzer 导入)
|
|
135
|
+
src/plugins/plugin-loader.ts (通过 complexity-analyzer 导入)
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**关键发现**:
|
|
139
|
+
- `src/index.ts` 确实导出了 `analyze` 函数 (`export { analyze } from './core/analyzer.js'`),但 CodeMap 未检测到这是 analyzer.ts 的依赖
|
|
140
|
+
- Grep 找到的 22 个文件中,约 9 个是误报(文件名含 analyzer 但实际不依赖 core/analyzer.ts)
|
|
141
|
+
- CodeMap 的 13 个直接依赖都是准确的导入关系
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 测试用例 2: src/types/index.ts 影响分析
|
|
146
|
+
|
|
147
|
+
### 测试目的
|
|
148
|
+
分析类型定义文件的变更影响,类型文件通常有大量依赖关系。
|
|
149
|
+
|
|
150
|
+
### CodeMap 执行 (传递依赖)
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
npx codemap impact -f src/types/index.ts --transitive
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**执行时间**: 0.858s (real)
|
|
157
|
+
|
|
158
|
+
**输出**:
|
|
159
|
+
```
|
|
160
|
+
📍 影响分析
|
|
161
|
+
|
|
162
|
+
目标文件:
|
|
163
|
+
src/types/index.ts
|
|
164
|
+
导出: SymbolKind, SourceLocation, DecoratorInfo, ... (38 个类型)
|
|
165
|
+
|
|
166
|
+
⬇️ 直接依赖该文件的模块 (38):
|
|
167
|
+
• src/ai/claude.ts
|
|
168
|
+
• src/ai/codex.ts
|
|
169
|
+
• src/ai/provider.ts
|
|
170
|
+
• src/ai/subagent-caller.ts
|
|
171
|
+
• src/core/analyzer.ts
|
|
172
|
+
• src/core/global-index.ts
|
|
173
|
+
• src/cache/index.ts
|
|
174
|
+
• src/cache/parse-cache.ts
|
|
175
|
+
• src/generator/ai-overview.ts
|
|
176
|
+
• src/generator/context.ts
|
|
177
|
+
• ... (共38个)
|
|
178
|
+
|
|
179
|
+
🌐 传递依赖 (41):
|
|
180
|
+
└─► src/ai/factory.ts [距离: 2]
|
|
181
|
+
└─► src/ai/index.ts [距离: 2]
|
|
182
|
+
└─► src/cli/index.ts [距离: 6]
|
|
183
|
+
└─► ...
|
|
184
|
+
|
|
185
|
+
⚠️ 风险评估:
|
|
186
|
+
🔴 极高风险 - 该文件是核心依赖,修改将影响大量模块
|
|
187
|
+
直接影响: 38 个模块
|
|
188
|
+
传递影响: 41 个额外模块
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### 传统工具执行
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
rg -l "from.*types/index|from.*types" src/
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**执行时间**: 0.009s (real)
|
|
198
|
+
|
|
199
|
+
**输出**:
|
|
200
|
+
```
|
|
201
|
+
src/watcher/watch-worker.ts
|
|
202
|
+
src/cli/commands/complexity.ts
|
|
203
|
+
src/cli/commands/analyze.ts
|
|
204
|
+
src/cli/commands/watch-foreground.ts
|
|
205
|
+
src/cli/commands/impact.ts
|
|
206
|
+
src/cli/commands/cycles.ts
|
|
207
|
+
src/cli/commands/ci.ts
|
|
208
|
+
src/cli/commands/generate.ts
|
|
209
|
+
src/cli/commands/deps.ts
|
|
210
|
+
src/cli/commands/workflow.ts
|
|
211
|
+
src/cli/commands/query.ts
|
|
212
|
+
src/worker/index.ts
|
|
213
|
+
src/ai/claude.ts
|
|
214
|
+
src/ai/subagent-caller.ts
|
|
215
|
+
src/ai/provider.ts
|
|
216
|
+
src/ai/codex.ts
|
|
217
|
+
src/ai/index.ts
|
|
218
|
+
... (共66个文件)
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**匹配文件总数**: 66 个
|
|
222
|
+
|
|
223
|
+
### 对比分析
|
|
224
|
+
|
|
225
|
+
| 维度 | CodeMap | Grep | 结论 |
|
|
226
|
+
|------|---------|------|------|
|
|
227
|
+
| **执行时间** | 0.86s | 0.009s | Grep 快 95x |
|
|
228
|
+
| **匹配文件数** | 38 | 66 | 差异 28 个文件 |
|
|
229
|
+
| **误报/漏报** | 可能遗漏 | 包含非 types/index.ts 导入 | 各有优劣 |
|
|
230
|
+
|
|
231
|
+
### 差异分析
|
|
232
|
+
|
|
233
|
+
**Grep 找到但 CodeMap 未找到的 "依赖" (28 个)**:
|
|
234
|
+
```
|
|
235
|
+
src/ai/index.ts
|
|
236
|
+
src/cli/commands/analyze.ts
|
|
237
|
+
src/cli/commands/ci.ts
|
|
238
|
+
src/cli/commands/workflow.ts
|
|
239
|
+
src/index.ts
|
|
240
|
+
src/orchestrator/adapters/ast-grep-adapter.ts
|
|
241
|
+
src/orchestrator/adapters/base-adapter.ts
|
|
242
|
+
src/orchestrator/adapters/codemap-adapter.ts
|
|
243
|
+
src/orchestrator/confidence.ts
|
|
244
|
+
src/orchestrator/git-analyzer.ts
|
|
245
|
+
src/orchestrator/index.ts
|
|
246
|
+
src/orchestrator/integration/pipeline.test.ts
|
|
247
|
+
src/orchestrator/intent-router.ts
|
|
248
|
+
src/orchestrator/result-fusion.ts
|
|
249
|
+
src/orchestrator/tool-orchestrator.ts
|
|
250
|
+
src/orchestrator/workflow/phase-checkpoint.ts
|
|
251
|
+
src/orchestrator/workflow/types.ts
|
|
252
|
+
src/orchestrator/workflow/workflow-context.ts
|
|
253
|
+
src/orchestrator/workflow/workflow-orchestrator.ts
|
|
254
|
+
... (共28个)
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
**原因分析**:
|
|
258
|
+
这些文件通过 `src/orchestrator/types.ts` 间接使用类型,而非直接从 `src/types/index.ts` 导入。例如:
|
|
259
|
+
```typescript
|
|
260
|
+
// src/orchestrator/result-fusion.ts
|
|
261
|
+
import type { UnifiedResult, HeatScore } from './types.js'; // 不是 types/index.js
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
而 `src/orchestrator/types.ts` 自身又从 `src/types/index.ts` 导入,形成间接依赖。
|
|
265
|
+
|
|
266
|
+
**结论**:
|
|
267
|
+
- CodeMap 准确识别**直接**依赖 (38个)
|
|
268
|
+
- Grep 捕获了**间接**依赖模式,但也包含了一些误报 (通过 `orchestrator/types` 而非 `types/index`)
|
|
269
|
+
- CodeMap 传递依赖模式 (41个) 补充了间接依赖,总计 79 个影响模块
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## 测试用例 3: src/cache/lru-cache.ts 影响分析
|
|
274
|
+
|
|
275
|
+
### 测试目的
|
|
276
|
+
分析具体工具类文件的变更影响,评估叶节点文件的依赖分析。
|
|
277
|
+
|
|
278
|
+
### CodeMap 执行
|
|
279
|
+
|
|
280
|
+
```bash
|
|
281
|
+
npx codemap impact -f src/cache/lru-cache.ts
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
**执行时间**: 0.800s (real)
|
|
285
|
+
|
|
286
|
+
**输出**:
|
|
287
|
+
```
|
|
288
|
+
📍 影响分析
|
|
289
|
+
|
|
290
|
+
目标文件:
|
|
291
|
+
src/cache/lru-cache.ts
|
|
292
|
+
导出: LRUCache, LRUCacheWithTTL
|
|
293
|
+
|
|
294
|
+
⬇️ 直接依赖该文件的模块 (4):
|
|
295
|
+
• src/cache/index.ts
|
|
296
|
+
• src/cache/parse-cache.ts
|
|
297
|
+
• src/cache/__tests__/lru-cache.test.ts
|
|
298
|
+
• src/parser/implementations/tree-sitter-parser.ts
|
|
299
|
+
|
|
300
|
+
⚠️ 风险评估:
|
|
301
|
+
⚠️ 高风险 - 该文件被多个模块依赖,修改需谨慎
|
|
302
|
+
直接影响: 4 个模块
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### CodeMap 执行 (传递依赖)
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
npx codemap impact -f src/cache/lru-cache.ts --transitive
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
**传递依赖**: 76 个模块
|
|
312
|
+
|
|
313
|
+
### 传统工具执行
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
rg -l "lru-cache|LRUCache" src/
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
**执行时间**: 0.010s (real)
|
|
320
|
+
|
|
321
|
+
**输出**:
|
|
322
|
+
```
|
|
323
|
+
src/cache/__tests__/lru-cache.test.ts
|
|
324
|
+
src/cache/parse-cache.ts
|
|
325
|
+
src/cache/lru-cache.ts
|
|
326
|
+
src/cache/index.ts
|
|
327
|
+
src/orchestrator/test-linker.ts
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
**匹配文件总数**: 5 个
|
|
331
|
+
|
|
332
|
+
### 对比分析
|
|
333
|
+
|
|
334
|
+
| 维度 | CodeMap Direct | CodeMap Transitive | Grep | 结论 |
|
|
335
|
+
|------|----------------|-------------------|------|------|
|
|
336
|
+
| **执行时间** | 0.80s | ~1.0s | 0.01s | Grep 快 80-100x |
|
|
337
|
+
| **直接依赖数** | 4 | 4 | 5 | Grep 多1个 |
|
|
338
|
+
| **传递依赖数** | 未显示 | 76 | N/A | CodeMap 独有功能 |
|
|
339
|
+
| **风险评估** | ✅ 高风险 | ✅ 高风险 | ❌ | CodeMap 独有 |
|
|
340
|
+
|
|
341
|
+
### 差异分析
|
|
342
|
+
|
|
343
|
+
**Grep 找到但 CodeMap 未找到的**:
|
|
344
|
+
```
|
|
345
|
+
src/orchestrator/test-linker.ts (仅作为字符串示例提及,无实际导入)
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
这是一个**误报**: `test-linker.ts` 只是在注释中提到 `lru-cache.test.ts` 作为示例:
|
|
349
|
+
```typescript
|
|
350
|
+
* lru-cache.test.ts → lru-cache.ts
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
CodeMap 正确地识别了这一点,没有将其列为依赖。
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## 综合对比分析
|
|
358
|
+
|
|
359
|
+
### 1. 直接依赖识别
|
|
360
|
+
|
|
361
|
+
| 测试文件 | CodeMap 直接依赖 | Grep 匹配数 | CodeMap 准确率 | Grep 准确率 |
|
|
362
|
+
|---------|-----------------|------------|----------------|-------------|
|
|
363
|
+
| analyzer.ts | 13 | 22 | 100% | ~41% |
|
|
364
|
+
| types/index.ts | 38 | 66 | 100% | ~58% |
|
|
365
|
+
| lru-cache.ts | 4 | 5 | 100% | ~80% |
|
|
366
|
+
|
|
367
|
+
**结论**: CodeMap 在直接依赖识别上具有**更高的准确性**,几乎没有误报。
|
|
368
|
+
|
|
369
|
+
### 2. 传递依赖识别
|
|
370
|
+
|
|
371
|
+
| 测试文件 | CodeMap 传递依赖 | 手动分析可行性 | 优势 |
|
|
372
|
+
|---------|-----------------|---------------|------|
|
|
373
|
+
| analyzer.ts | 66 | 困难 | 揭示深层影响 |
|
|
374
|
+
| types/index.ts | 41 | 困难 | 跨层级追踪 |
|
|
375
|
+
| lru-cache.ts | 76 | 几乎不可能 | 揭示广泛影响 |
|
|
376
|
+
|
|
377
|
+
**结论**: CodeMap 的传递依赖分析是**独有功能**,手动几乎无法完成同等分析。
|
|
378
|
+
|
|
379
|
+
### 3. 风险评估准确性
|
|
380
|
+
|
|
381
|
+
CodeMap 风险评估分级:
|
|
382
|
+
- 🔴 极高风险: > 20 个直接依赖 (如 types/index.ts: 38个)
|
|
383
|
+
- ⚠️ 高风险: 5-20 个直接依赖
|
|
384
|
+
- ⚠️ 中风险: 1-4 个直接依赖 (如 cycles.ts: 2个)
|
|
385
|
+
- 🟢 低风险: 0 个依赖
|
|
386
|
+
|
|
387
|
+
**验证**:
|
|
388
|
+
- `src/types/index.ts` (38依赖) → 🔴 极高风险 ✅ 合理
|
|
389
|
+
- `src/cache/lru-cache.ts` (4依赖) → ⚠️ 高风险 ✅ 合理 (虽数量不多但核心功能)
|
|
390
|
+
- `src/cli/commands/cycles.ts` (2依赖) → ⚠️ 中风险 ✅ 合理
|
|
391
|
+
|
|
392
|
+
### 4. 输出格式实用性
|
|
393
|
+
|
|
394
|
+
**CodeMap 优势**:
|
|
395
|
+
- 可视化依赖树结构
|
|
396
|
+
- 显示每个依赖的导出内容
|
|
397
|
+
- 距离标记 (传递依赖)
|
|
398
|
+
- 风险等级评估
|
|
399
|
+
- 统计汇总
|
|
400
|
+
|
|
401
|
+
**Grep 优势**:
|
|
402
|
+
- 简单列表,易于脚本处理
|
|
403
|
+
- 可与其他 Unix 工具链组合
|
|
404
|
+
|
|
405
|
+
### 5. 性能对比
|
|
406
|
+
|
|
407
|
+
| 工具 | 平均执行时间 | 相对速度 |
|
|
408
|
+
|------|-------------|---------|
|
|
409
|
+
| CodeMap (direct) | ~0.6s | 1x |
|
|
410
|
+
| CodeMap (transitive) | ~0.8s | 0.75x |
|
|
411
|
+
| ripgrep | ~0.01s | 60-80x |
|
|
412
|
+
|
|
413
|
+
---
|
|
414
|
+
|
|
415
|
+
## 发现的问题
|
|
416
|
+
|
|
417
|
+
### 问题 1: 遗漏 re-export 依赖
|
|
418
|
+
**严重性**: 🔴 高
|
|
419
|
+
|
|
420
|
+
**描述**: CodeMap 未能检测到通过 re-export 模式依赖的文件。
|
|
421
|
+
|
|
422
|
+
**示例**: `src/index.ts` 包含:
|
|
423
|
+
```typescript
|
|
424
|
+
export { analyze } from './core/analyzer.js';
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
但 CodeMap 未将 `src/index.ts` 列为 `analyzer.ts` 的依赖。
|
|
428
|
+
|
|
429
|
+
**影响**: 修改 analyzer.ts 可能影响所有通过主入口导入的下游用户。
|
|
430
|
+
|
|
431
|
+
### 问题 2: 对 "高/极高风险" 阈值定义不明确
|
|
432
|
+
**严重性**: 🟡 中
|
|
433
|
+
|
|
434
|
+
**描述**:
|
|
435
|
+
- `types/index.ts` (38依赖) → 🔴 极高风险
|
|
436
|
+
- `analyzer.ts` (13依赖) → 🔴 极高风险
|
|
437
|
+
- `lru-cache.ts` (4依赖) → ⚠️ 高风险
|
|
438
|
+
|
|
439
|
+
阈值跳跃较大,13和38都被归为"极高",但4就是"高",缺少中间等级。
|
|
440
|
+
|
|
441
|
+
### 问题 3: 执行时间较长
|
|
442
|
+
**严重性**: 🟡 中
|
|
443
|
+
|
|
444
|
+
**描述**: CodeMap 比 ripgrep 慢 60-80 倍。对于大型代码库或频繁查询场景,这可能成为瓶颈。
|
|
445
|
+
|
|
446
|
+
**建议**:
|
|
447
|
+
- 提供缓存机制
|
|
448
|
+
- 增量更新依赖图
|
|
449
|
+
- 添加 `--fast` 模式使用简化分析
|
|
450
|
+
|
|
451
|
+
### 问题 4: 输出格式缺乏机器可读性
|
|
452
|
+
**严重性**: 🟢 低
|
|
453
|
+
|
|
454
|
+
**描述**: 输出主要是人类可读格式,没有 JSON/YAML 输出选项,不利于脚本集成。
|
|
455
|
+
|
|
456
|
+
---
|
|
457
|
+
|
|
458
|
+
## 改进建议
|
|
459
|
+
|
|
460
|
+
### 1. 增强 re-export 检测
|
|
461
|
+
```typescript
|
|
462
|
+
// 检测以下模式:
|
|
463
|
+
export { foo } from './module';
|
|
464
|
+
export * from './module';
|
|
465
|
+
export { default } from './module';
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
### 2. 细化风险等级
|
|
469
|
+
```
|
|
470
|
+
🟢 低风险: 0-2 依赖
|
|
471
|
+
🟡 中风险: 3-10 依赖
|
|
472
|
+
🟠 高风险: 11-25 依赖
|
|
473
|
+
🔴 极高风险: 26+ 依赖
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
### 3. 添加性能优化选项
|
|
477
|
+
```bash
|
|
478
|
+
npx codemap impact -f file.ts --cached # 使用缓存
|
|
479
|
+
npx codemap impact -f file.ts --depth 2 # 限制传递深度
|
|
480
|
+
npx codemap impact -f file.ts --json # 机器可读输出
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
### 4. 提供 diff 模式
|
|
484
|
+
```bash
|
|
485
|
+
npx codemap impact --compare branch1 branch2 # 对比分支影响
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
---
|
|
489
|
+
|
|
490
|
+
## 总结
|
|
491
|
+
|
|
492
|
+
| 评估维度 | 评分 | 说明 |
|
|
493
|
+
|---------|------|------|
|
|
494
|
+
| 准确性 | ⭐⭐⭐⭐⭐ | 几乎无直接依赖误报 |
|
|
495
|
+
| 完整性 | ⭐⭐⭐⭐ | 遗漏 re-export,其他良好 |
|
|
496
|
+
| 传递分析 | ⭐⭐⭐⭐⭐ | 独有功能,非常有价值 |
|
|
497
|
+
| 风险评估 | ⭐⭐⭐⭐ | 分级合理但阈值可细化 |
|
|
498
|
+
| 性能 | ⭐⭐⭐ | 比 grep 慢,但可接受 |
|
|
499
|
+
| 实用性 | ⭐⭐⭐⭐⭐ | 可视化输出,信息丰富 |
|
|
500
|
+
|
|
501
|
+
### 最终结论
|
|
502
|
+
|
|
503
|
+
**CodeMap impact 命令**在影响范围分析上**显著优于**传统 grep 方法:
|
|
504
|
+
|
|
505
|
+
1. **准确性**: 几乎零误报,而 grep 有 20-60% 的误报率
|
|
506
|
+
2. **传递依赖**: 提供手动几乎无法完成的深层依赖分析
|
|
507
|
+
3. **风险评估**: 量化风险等级,辅助决策
|
|
508
|
+
4. **可视化**: 树形结构直观展示依赖关系
|
|
509
|
+
|
|
510
|
+
**适用场景**:
|
|
511
|
+
- ✅ 发布前影响评估
|
|
512
|
+
- ✅ 重构前依赖分析
|
|
513
|
+
- ✅ 代码审查辅助
|
|
514
|
+
- ✅ 架构决策支持
|
|
515
|
+
|
|
516
|
+
**不适用场景**:
|
|
517
|
+
- ❌ 需要极快速响应的实时监控
|
|
518
|
+
- ❌ 纯文本处理的自动化脚本
|
|
519
|
+
|
|
520
|
+
**总体推荐**: ⭐⭐⭐⭐⭐ (5/5) - 对于需要准确影响分析的场景强烈推荐使用
|
package/docs/backlog.md
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
# mycodemap 产品重塑提案 v0.6
|
|
4
|
+
**从"代码地图工具"到"架构契约治理引擎"**
|
|
5
|
+
|
|
6
|
+
## 一、战略定位重置(Positioning)
|
|
7
|
+
|
|
8
|
+
### 核心定位转变
|
|
9
|
+
| 维度 | 当前(v0.5 MVP3) | **重塑后(v0.6)** |
|
|
10
|
+
|------|------------------|-------------------|
|
|
11
|
+
| **产品品类** | TypeScript 代码地图生成工具 | **架构契约验证与护栏系统** |
|
|
12
|
+
| **核心价值** | 帮助AI理解代码结构 | **防止AI/人类破坏架构边界** |
|
|
13
|
+
| **竞争差异** | 生成 JSON 地图供AI消费 | **生成决策:通过/阻断,并给出架构违反证据** |
|
|
14
|
+
| **技术重心** | Tree-sitter 解析 + 图数据库 | **Tree-sitter + SQLite + 轻量内存图** |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 二、只做(Must Do)- 差异化护城河
|
|
19
|
+
|
|
20
|
+
### 1. **契约护栏系统(Contract Barriers)**
|
|
21
|
+
基于 `mycodemap.design.md` 的强约束验证:
|
|
22
|
+
- **模块边界守护**:验证跨模块调用是否通过允许的中介
|
|
23
|
+
- **依赖方向检查**:确保分层架构(如领域层→基础设施层)不被反向依赖
|
|
24
|
+
- ** breaking change 预警**:当修改影响契约定义的公开 API 时自动标记
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
// 新命令示例
|
|
28
|
+
mycodemap verify --contract design.md --against src/
|
|
29
|
+
// 输出: { "passed": false, "violations": [{ "rule": "auth禁止直接调用payment", "location": "auth/login.ts:45" }] }
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 2. **Git 历史融合分析(Code Archaeology)**
|
|
33
|
+
利用 SQLite 存储 git blame + 变更历史:
|
|
34
|
+
- **危险区域标记**:高频修改且伴随回滚的代码区域自动标记"高风险"
|
|
35
|
+
- **契约漂移检测**:对比当前代码与历史契约版本,发现架构腐化趋势
|
|
36
|
+
- **影响评估增强**:不仅告诉AI"这修改影响3个文件",还告诉"这3个文件在过去6个月被修改了17次,回滚率35%"
|
|
37
|
+
|
|
38
|
+
### 3. **轻量级混合存储架构**
|
|
39
|
+
**放弃重型图数据库**,采用 SQLite + 内存图计算:
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
// 技术架构示意
|
|
43
|
+
StorageLayer {
|
|
44
|
+
// Layer 1: SQLite 负责持久化 + BM25全文搜索 + 契约元数据
|
|
45
|
+
sqlite: BetterSQLite3Wrapper;
|
|
46
|
+
|
|
47
|
+
// Layer 2: 内存图计算(替代 NetworkX,使用 graphlib 或自研邻接表)
|
|
48
|
+
graph: DirectedGraph; // 基于 Map/Set 的轻量实现
|
|
49
|
+
|
|
50
|
+
// 启动时从 SQLite 加载符号关系到内存图,<500ms
|
|
51
|
+
loadGraph(): void;
|
|
52
|
+
|
|
53
|
+
// 核心操作:基于图的可达性分析(契约验证的关键)
|
|
54
|
+
computeImpact(symbol: string, depth: number): ImpactGraph;
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**为什么这个架构对 TypeScript 项目更优:**
|
|
59
|
+
- `better-sqlite3`:Node.js 最快的 SQLite 绑定,零配置,单文件存储
|
|
60
|
+
- 内存图计算:对于 <50K 文件的 TypeScript 项目,纯 JavaScript 图遍历(DFS/BFS)性能足够(<100ms),无需引入沉重的图数据库客户端
|
|
61
|
+
|
|
62
|
+
### 4. **CI/CD 原生集成(Quality Gate)**
|
|
63
|
+
专为流水线设计的"硬阻断"模式:
|
|
64
|
+
- **退出码策略**:发现契约违反时返回非零退出码,直接阻断 CI 流程
|
|
65
|
+
- **JSON 报告**:生成结构化报告供 GitHub/GitLab 的 Code Review 界面渲染
|
|
66
|
+
- **增量验证**:仅验证 git diff 涉及的符号,<2秒完成门禁检查
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 三、不做(Must Not Do)- 避免与巨人正面竞争
|
|
71
|
+
|
|
72
|
+
### 1. **不追求极致的 Token 节省**
|
|
73
|
+
- **不做**:与 code-review-graph 竞争的"49倍Token节省"宣传
|
|
74
|
+
- **原因**:这是 code-review-graph 的核心赛道,且需要极其优化的增量算法和向量索引,投入产出比低
|
|
75
|
+
- **替代**:专注"**精准上下文**"——不是给AI更少代码,而是给AI**符合架构约束**的代码上下文
|
|
76
|
+
|
|
77
|
+
### 2. **不做动态运行时分析**
|
|
78
|
+
- **不做**:eBPF 插桩、JavaScript 运行时追踪、调用链路采集
|
|
79
|
+
- **原因**:
|
|
80
|
+
- 技术债务极重(需维护运行时 agent)
|
|
81
|
+
- 与静态分析工具定位冲突(用户不会同时安装两类工具)
|
|
82
|
+
- 报告中提到的"运行时图谱"目前仍是学术阶段,无成熟开源方案
|
|
83
|
+
|
|
84
|
+
### 3. **不做多模态支持(文档/图像/音频)**
|
|
85
|
+
- **不做**:解析 PDF 架构图、会议录音转录、白板照片识别
|
|
86
|
+
- **原因**:这是 graphify 的独占赛道,需集成 Whisper/OCR/LLM,架构重量与 mycodemap 的"轻量CLI"定位冲突
|
|
87
|
+
|
|
88
|
+
### 4. **不做通用代码搜索引擎**
|
|
89
|
+
- **不做**:支持 25 种语言的通用符号搜索、跨语言调用图
|
|
90
|
+
- **原因**:竞品已覆盖(code-review-graph 支持 23 种语言,graphify 25 种)
|
|
91
|
+
- **专注**:TypeScript/JavaScript 生态的**深度架构治理**,而非广度语言支持
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 四、优化方向(Optimization Roadmap)
|
|
96
|
+
|
|
97
|
+
### Phase 1: 架构瘦身(v0.6.0)
|
|
98
|
+
- **移除**:KuzuDB 依赖(如果当前有)
|
|
99
|
+
- **引入**:better-sqlite3 + 内存图结构(基于 Map 的邻接表)
|
|
100
|
+
- **基准**:10K 文件项目启动时间 <1s,内存占用 <200MB
|
|
101
|
+
|
|
102
|
+
### Phase 2: 契约系统硬化(v0.7.0)
|
|
103
|
+
- **设计契约 Schema 标准化**:`design.md` → JSON Schema 验证
|
|
104
|
+
- **护栏规则引擎**:支持复杂度、依赖方向、模块边界三类规则
|
|
105
|
+
- **Git 融合**:SQLite 存储 git blame 信息,支持 `mycodemap history --symbol X` 查询变更轨迹
|
|
106
|
+
|
|
107
|
+
### Phase 3: AI 协作协议(v0.8.0)
|
|
108
|
+
- **MCP 工具增强**:从"提供上下文"转向"提供决策建议"
|
|
109
|
+
- 新增 `verify_contract` MCP 工具:AI 在修改前调用,获取"此修改是否安全"的布尔值
|
|
110
|
+
- **Prompt 模板**:为 Claude Code/Cursor 提供"架构师模式"提示词,强制在修改前调用 mycodemap verify
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 五、用户场景(User Scenarios)
|
|
115
|
+
|
|
116
|
+
### 场景 A:架构师的守门员(Quality Gate)
|
|
117
|
+
**角色**:资深工程师/架构师
|
|
118
|
+
**痛点**: junior 开发或 AI 工具经常破坏精心设计的模块边界
|
|
119
|
+
**使用**:
|
|
120
|
+
```bash
|
|
121
|
+
# 在 pre-commit 钩子中
|
|
122
|
+
mycodemap verify --strict --fail-on-barrier-break
|
|
123
|
+
```
|
|
124
|
+
**价值**:将架构文档(design.md)从"仅供参考"变为"强制执行的代码法律"
|
|
125
|
+
|
|
126
|
+
### 场景 B:AI 辅助开发的安全护栏
|
|
127
|
+
**角色**:使用 Claude Code/Cursor 的开发者
|
|
128
|
+
**痛点**:AI 经常生成"看似正确但破坏架构"的代码(如直接跨层调用数据库)
|
|
129
|
+
**使用**:
|
|
130
|
+
```typescript
|
|
131
|
+
// .cursorrules 或 claude.md 配置
|
|
132
|
+
"Before modifying code, run: mycodemap impact -t {target} --check-contracts"
|
|
133
|
+
```
|
|
134
|
+
**价值**:AI 在每次修改前自动检查,避免" AI 写代码,架构师擦屁股"的循环
|
|
135
|
+
|
|
136
|
+
### 场景 C:遗留项目现代化评估
|
|
137
|
+
**角色**:技术负责人
|
|
138
|
+
**痛点**:不知道当前代码与最初架构设计偏离了多远
|
|
139
|
+
**使用**:
|
|
140
|
+
```bash
|
|
141
|
+
mycodemap drift --since 2024-01-01 --contract original-design.md
|
|
142
|
+
```
|
|
143
|
+
**价值**:量化"架构腐化度",为重构决策提供数据支撑(如"当前 23% 的调用违反了原始模块边界")
|
|
144
|
+
|
|
145
|
+
### 场景 D:高风险修改预警
|
|
146
|
+
**角色**:DevOps/运维
|
|
147
|
+
**痛点**:某些代码区域变更极易引发故障
|
|
148
|
+
**使用**:
|
|
149
|
+
```bash
|
|
150
|
+
mycodemap analyze -i modify -t "payment/" --include-history --json
|
|
151
|
+
# 输出标记:该区域过去 12 个月修改 47 次,回滚 12 次,事故 3 次
|
|
152
|
+
```
|
|
153
|
+
**价值**:在变更发布前识别"代码墓地"区域,强制增加 review 层级
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 六、竞品差异化对比表
|
|
158
|
+
|
|
159
|
+
| 功能维度 | code-review-graph | graphify | **mycodemap (重塑后)** |
|
|
160
|
+
|---------|-------------------|----------|----------------------|
|
|
161
|
+
| **核心问题** | "哪些代码可能相关" | "这段代码的设计动机是什么" | **"这次修改是否破坏架构规则"** |
|
|
162
|
+
| **输出形态** | 文件列表 + 置信度 | 自然语言解释 + 多模态关联 | **布尔值(通过/阻断)+ 违规证据链** |
|
|
163
|
+
| **存储架构** | SQLite (极致性能) | SHA256缓存 + 大模型语义 | **SQLite + 内存图(轻量可移植)** |
|
|
164
|
+
| **最佳场景** | 日常编码辅助 | 理解遗留项目 | **CI/CD 门禁 + 架构守护** |
|
|
165
|
+
| **与AI关系** | AI 的"眼"(提供上下文) | AI 的"脑"(提供理解) | **AI 的"护栏"(提供约束)** |
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## 七、总结
|
|
170
|
+
|
|
171
|
+
mycodemap 的救赎之路是**放弃成为更好的"代码搜索引擎",转而成为唯一的"架构契约执行引擎"**:
|
|
172
|
+
|
|
173
|
+
- **不做** code-review-graph 能做到的事(快速搜索、Token节省)
|
|
174
|
+
- **不做** graphify 能做到的事(多模态理解、设计动机提取)
|
|
175
|
+
- **只做** 它们都做不到的事:**将架构文档转化为可执行的代码法律,并在 CI/CD 中强制执行**
|
|
176
|
+
|
|
177
|
+
这是从"工具"到"基础设施"的跃迁——不是让AI更方便地写代码,而是**确保AI写的代码不会破坏你的架构**。
|