@mycodemap/mycodemap 0.5.0 → 0.5.2-beta.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.
Files changed (254) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +77 -9
  3. package/dist/cli/commands/analyze.d.ts +18 -0
  4. package/dist/cli/commands/analyze.d.ts.map +1 -1
  5. package/dist/cli/commands/analyze.js +239 -6
  6. package/dist/cli/commands/analyze.js.map +1 -1
  7. package/dist/cli/commands/check.d.ts +22 -0
  8. package/dist/cli/commands/check.d.ts.map +1 -0
  9. package/dist/cli/commands/check.js +168 -0
  10. package/dist/cli/commands/check.js.map +1 -0
  11. package/dist/cli/commands/ci.d.ts +25 -0
  12. package/dist/cli/commands/ci.d.ts.map +1 -1
  13. package/dist/cli/commands/ci.js +139 -36
  14. package/dist/cli/commands/ci.js.map +1 -1
  15. package/dist/cli/commands/complexity.d.ts.map +1 -1
  16. package/dist/cli/commands/complexity.js +6 -0
  17. package/dist/cli/commands/complexity.js.map +1 -1
  18. package/dist/cli/commands/design.d.ts +5 -0
  19. package/dist/cli/commands/design.d.ts.map +1 -1
  20. package/dist/cli/commands/design.js +6 -0
  21. package/dist/cli/commands/design.js.map +1 -1
  22. package/dist/cli/commands/generate.d.ts +1 -0
  23. package/dist/cli/commands/generate.d.ts.map +1 -1
  24. package/dist/cli/commands/generate.js +121 -8
  25. package/dist/cli/commands/generate.js.map +1 -1
  26. package/dist/cli/commands/history.d.ts +26 -0
  27. package/dist/cli/commands/history.d.ts.map +1 -0
  28. package/dist/cli/commands/history.js +92 -0
  29. package/dist/cli/commands/history.js.map +1 -0
  30. package/dist/cli/commands/mcp.d.ts +13 -0
  31. package/dist/cli/commands/mcp.d.ts.map +1 -0
  32. package/dist/cli/commands/mcp.js +108 -0
  33. package/dist/cli/commands/mcp.js.map +1 -0
  34. package/dist/cli/commands/workflow.d.ts.map +1 -1
  35. package/dist/cli/commands/workflow.js +22 -2
  36. package/dist/cli/commands/workflow.js.map +1 -1
  37. package/dist/cli/config-loader.d.ts.map +1 -1
  38. package/dist/cli/config-loader.js +3 -2
  39. package/dist/cli/config-loader.js.map +1 -1
  40. package/dist/cli/contract-checker.d.ts +33 -0
  41. package/dist/cli/contract-checker.d.ts.map +1 -0
  42. package/dist/cli/contract-checker.js +719 -0
  43. package/dist/cli/contract-checker.js.map +1 -0
  44. package/dist/cli/contract-diff-scope.d.ts +14 -0
  45. package/dist/cli/contract-diff-scope.d.ts.map +1 -0
  46. package/dist/cli/contract-diff-scope.js +127 -0
  47. package/dist/cli/contract-diff-scope.js.map +1 -0
  48. package/dist/cli/contract-gate-thresholds.d.ts +14 -0
  49. package/dist/cli/contract-gate-thresholds.d.ts.map +1 -0
  50. package/dist/cli/contract-gate-thresholds.js +19 -0
  51. package/dist/cli/contract-gate-thresholds.js.map +1 -0
  52. package/dist/cli/design-contract-loader.d.ts.map +1 -1
  53. package/dist/cli/design-contract-loader.js +355 -3
  54. package/dist/cli/design-contract-loader.js.map +1 -1
  55. package/dist/cli/design-scope-resolver.d.ts.map +1 -1
  56. package/dist/cli/design-scope-resolver.js +89 -41
  57. package/dist/cli/design-scope-resolver.js.map +1 -1
  58. package/dist/cli/index.js +18 -6
  59. package/dist/cli/index.js.map +1 -1
  60. package/dist/cli/paths.d.ts.map +1 -1
  61. package/dist/cli/paths.js +30 -7
  62. package/dist/cli/paths.js.map +1 -1
  63. package/dist/core/analyzer.d.ts.map +1 -1
  64. package/dist/core/analyzer.js +16 -0
  65. package/dist/core/analyzer.js.map +1 -1
  66. package/dist/domain/entities/CodeGraph.d.ts +5 -1
  67. package/dist/domain/entities/CodeGraph.d.ts.map +1 -1
  68. package/dist/domain/entities/CodeGraph.js +29 -12
  69. package/dist/domain/entities/CodeGraph.js.map +1 -1
  70. package/dist/domain/entities/Dependency.d.ts +8 -1
  71. package/dist/domain/entities/Dependency.d.ts.map +1 -1
  72. package/dist/domain/entities/Dependency.js +19 -4
  73. package/dist/domain/entities/Dependency.js.map +1 -1
  74. package/dist/domain/entities/Symbol.d.ts +2 -1
  75. package/dist/domain/entities/Symbol.d.ts.map +1 -1
  76. package/dist/domain/entities/Symbol.js +6 -3
  77. package/dist/domain/entities/Symbol.js.map +1 -1
  78. package/dist/infrastructure/storage/StorageFactory.d.ts +1 -0
  79. package/dist/infrastructure/storage/StorageFactory.d.ts.map +1 -1
  80. package/dist/infrastructure/storage/StorageFactory.js +7 -2
  81. package/dist/infrastructure/storage/StorageFactory.js.map +1 -1
  82. package/dist/infrastructure/storage/adapters/FileSystemStorage.d.ts +3 -1
  83. package/dist/infrastructure/storage/adapters/FileSystemStorage.d.ts.map +1 -1
  84. package/dist/infrastructure/storage/adapters/FileSystemStorage.js +10 -2
  85. package/dist/infrastructure/storage/adapters/FileSystemStorage.js.map +1 -1
  86. package/dist/infrastructure/storage/adapters/KuzuDBStorage.d.ts +3 -1
  87. package/dist/infrastructure/storage/adapters/KuzuDBStorage.d.ts.map +1 -1
  88. package/dist/infrastructure/storage/adapters/KuzuDBStorage.js +9 -1
  89. package/dist/infrastructure/storage/adapters/KuzuDBStorage.js.map +1 -1
  90. package/dist/infrastructure/storage/adapters/MemoryStorage.d.ts +3 -1
  91. package/dist/infrastructure/storage/adapters/MemoryStorage.d.ts.map +1 -1
  92. package/dist/infrastructure/storage/adapters/MemoryStorage.js +9 -1
  93. package/dist/infrastructure/storage/adapters/MemoryStorage.js.map +1 -1
  94. package/dist/infrastructure/storage/adapters/SQLiteStorage.d.ts +53 -0
  95. package/dist/infrastructure/storage/adapters/SQLiteStorage.d.ts.map +1 -0
  96. package/dist/infrastructure/storage/adapters/SQLiteStorage.js +879 -0
  97. package/dist/infrastructure/storage/adapters/SQLiteStorage.js.map +1 -0
  98. package/dist/infrastructure/storage/graph-helpers.d.ts +3 -1
  99. package/dist/infrastructure/storage/graph-helpers.d.ts.map +1 -1
  100. package/dist/infrastructure/storage/graph-helpers.js +90 -0
  101. package/dist/infrastructure/storage/graph-helpers.js.map +1 -1
  102. package/dist/infrastructure/storage/index.d.ts +1 -1
  103. package/dist/infrastructure/storage/index.d.ts.map +1 -1
  104. package/dist/infrastructure/storage/interfaces/StorageBase.d.ts +3 -1
  105. package/dist/infrastructure/storage/interfaces/StorageBase.d.ts.map +1 -1
  106. package/dist/infrastructure/storage/interfaces/StorageBase.js.map +1 -1
  107. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.d.ts +27 -0
  108. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.d.ts.map +1 -0
  109. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.js +246 -0
  110. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.js.map +1 -0
  111. package/dist/infrastructure/storage/sqlite/perf-thresholds.d.ts +25 -0
  112. package/dist/infrastructure/storage/sqlite/perf-thresholds.d.ts.map +1 -0
  113. package/dist/infrastructure/storage/sqlite/perf-thresholds.js +25 -0
  114. package/dist/infrastructure/storage/sqlite/perf-thresholds.js.map +1 -0
  115. package/dist/infrastructure/storage/sqlite/schema.d.ts +4 -0
  116. package/dist/infrastructure/storage/sqlite/schema.d.ts.map +1 -0
  117. package/dist/infrastructure/storage/sqlite/schema.js +111 -0
  118. package/dist/infrastructure/storage/sqlite/schema.js.map +1 -0
  119. package/dist/interface/types/design-check.d.ts +73 -0
  120. package/dist/interface/types/design-check.d.ts.map +1 -0
  121. package/dist/interface/types/design-check.js +4 -0
  122. package/dist/interface/types/design-check.js.map +1 -0
  123. package/dist/interface/types/design-contract.d.ts +56 -1
  124. package/dist/interface/types/design-contract.d.ts.map +1 -1
  125. package/dist/interface/types/history-risk.d.ts +90 -0
  126. package/dist/interface/types/history-risk.d.ts.map +1 -0
  127. package/dist/interface/types/history-risk.js +4 -0
  128. package/dist/interface/types/history-risk.js.map +1 -0
  129. package/dist/interface/types/index.d.ts +17 -2
  130. package/dist/interface/types/index.d.ts.map +1 -1
  131. package/dist/interface/types/storage.d.ts +28 -1
  132. package/dist/interface/types/storage.d.ts.map +1 -1
  133. package/dist/orchestrator/adapters/ast-grep-adapter.d.ts +10 -0
  134. package/dist/orchestrator/adapters/ast-grep-adapter.d.ts.map +1 -1
  135. package/dist/orchestrator/adapters/ast-grep-adapter.js +46 -17
  136. package/dist/orchestrator/adapters/ast-grep-adapter.js.map +1 -1
  137. package/dist/orchestrator/adapters/codemap-adapter.d.ts.map +1 -1
  138. package/dist/orchestrator/adapters/codemap-adapter.js +2 -22
  139. package/dist/orchestrator/adapters/codemap-adapter.js.map +1 -1
  140. package/dist/orchestrator/history-risk-service.d.ts +55 -0
  141. package/dist/orchestrator/history-risk-service.d.ts.map +1 -0
  142. package/dist/orchestrator/history-risk-service.js +680 -0
  143. package/dist/orchestrator/history-risk-service.js.map +1 -0
  144. package/dist/orchestrator/types.d.ts +19 -1
  145. package/dist/orchestrator/types.d.ts.map +1 -1
  146. package/dist/orchestrator/types.js +19 -0
  147. package/dist/orchestrator/types.js.map +1 -1
  148. package/dist/server/mcp/index.d.ts +4 -0
  149. package/dist/server/mcp/index.d.ts.map +1 -0
  150. package/dist/server/mcp/index.js +5 -0
  151. package/dist/server/mcp/index.js.map +1 -0
  152. package/dist/server/mcp/server.d.ts +17 -0
  153. package/dist/server/mcp/server.d.ts.map +1 -0
  154. package/dist/server/mcp/server.js +84 -0
  155. package/dist/server/mcp/server.js.map +1 -0
  156. package/dist/server/mcp/service.d.ts +22 -0
  157. package/dist/server/mcp/service.d.ts.map +1 -0
  158. package/dist/server/mcp/service.js +177 -0
  159. package/dist/server/mcp/service.js.map +1 -0
  160. package/dist/server/mcp/types.d.ts +56 -0
  161. package/dist/server/mcp/types.d.ts.map +1 -0
  162. package/dist/server/mcp/types.js +4 -0
  163. package/dist/server/mcp/types.js.map +1 -0
  164. package/docs/AI_ASSISTANT_SETUP.md +1 -1
  165. package/docs/PUBLISHING.md +41 -12
  166. package/docs/SETUP_GUIDE.md +6 -6
  167. package/docs/ai-guide/COMMANDS.md +98 -4
  168. package/docs/ai-guide/INTEGRATION.md +137 -433
  169. package/docs/ai-guide/OUTPUT.md +476 -6
  170. package/docs/ai-guide/PATTERNS.md +41 -11
  171. package/docs/ai-guide/PROMPTS.md +11 -6
  172. package/docs/backlog.md +177 -0
  173. package/docs/eatdogfood-reports/2026-04-17-eatdogfood-agent-experience.md +231 -0
  174. package/docs/exec-plans/completed/2026-04-17-eatdogfood-codemap-cli.md +103 -0
  175. package/docs/ideation/2026-04-15-executable-architecture-constitution-ideation.md +102 -0
  176. package/docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md +47 -0
  177. package/docs/product-specs/MVP3-ARCHITECTURE-COMPARISON.md +11 -10
  178. package/docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-PRD.md +10 -10
  179. package/docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-TECH-PRD.md +17 -12
  180. package/docs/rules/README.md +16 -11
  181. package/docs/rules/architecture-guardrails.md +24 -336
  182. package/docs/rules/code-quality-redlines.md +25 -311
  183. package/docs/rules/engineering-with-codex-openai.md +14 -1
  184. package/docs/rules/pre-release-checklist.md +9 -4
  185. package/docs/rules/validation.md +91 -40
  186. package/mycodemap.config.schema.json +3 -3
  187. package/package.json +7 -2
  188. package/scripts/benchmark-governance-graph.mjs +132 -0
  189. package/scripts/calibrate-contract-gate.mjs +221 -0
  190. package/scripts/capability-report.py +255 -0
  191. package/scripts/pre-release-check.js +2 -2
  192. package/scripts/qa-rule-control.sh +254 -0
  193. package/scripts/report-high-risk-files.mjs +395 -0
  194. package/scripts/rule-context.mjs +155 -0
  195. package/scripts/smoke-sqlite-impact.mjs +85 -0
  196. package/scripts/sync-analyze-docs.js +1 -0
  197. package/scripts/tests/test_capability_report.py +89 -0
  198. package/scripts/tests/test_rule_control_workflow.py +51 -0
  199. package/scripts/tests/test_validate_rules.py +81 -0
  200. package/scripts/validate-ai-docs.js +283 -1
  201. package/scripts/validate-docs.js +249 -42
  202. package/scripts/validate-rules.py +254 -0
  203. package/dist/ai/claude.d.ts +0 -38
  204. package/dist/ai/claude.d.ts.map +0 -1
  205. package/dist/ai/claude.js +0 -169
  206. package/dist/ai/claude.js.map +0 -1
  207. package/dist/ai/codex.d.ts +0 -38
  208. package/dist/ai/codex.d.ts.map +0 -1
  209. package/dist/ai/codex.js +0 -169
  210. package/dist/ai/codex.js.map +0 -1
  211. package/dist/ai/factory.d.ts +0 -48
  212. package/dist/ai/factory.d.ts.map +0 -1
  213. package/dist/ai/factory.js +0 -95
  214. package/dist/ai/factory.js.map +0 -1
  215. package/dist/ai/index.d.ts +0 -12
  216. package/dist/ai/index.d.ts.map +0 -1
  217. package/dist/ai/index.js +0 -29
  218. package/dist/ai/index.js.map +0 -1
  219. package/dist/ai/provider.d.ts +0 -70
  220. package/dist/ai/provider.d.ts.map +0 -1
  221. package/dist/ai/provider.js +0 -31
  222. package/dist/ai/provider.js.map +0 -1
  223. package/dist/ai/subagent-caller.d.ts +0 -90
  224. package/dist/ai/subagent-caller.d.ts.map +0 -1
  225. package/dist/ai/subagent-caller.js +0 -280
  226. package/dist/ai/subagent-caller.js.map +0 -1
  227. package/dist/ai/types.d.ts +0 -70
  228. package/dist/ai/types.d.ts.map +0 -1
  229. package/dist/ai/types.js +0 -5
  230. package/dist/ai/types.js.map +0 -1
  231. package/dist/cli/commands/server.d.ts +0 -9
  232. package/dist/cli/commands/server.d.ts.map +0 -1
  233. package/dist/cli/commands/server.js +0 -65
  234. package/dist/cli/commands/server.js.map +0 -1
  235. package/dist/cli-new/commands/server.d.ts +0 -13
  236. package/dist/cli-new/commands/server.d.ts.map +0 -1
  237. package/dist/cli-new/commands/server.js +0 -90
  238. package/dist/cli-new/commands/server.js.map +0 -1
  239. package/dist/generator/ai-overview.d.ts +0 -51
  240. package/dist/generator/ai-overview.d.ts.map +0 -1
  241. package/dist/generator/ai-overview.js +0 -160
  242. package/dist/generator/ai-overview.js.map +0 -1
  243. package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts +0 -41
  244. package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts.map +0 -1
  245. package/dist/infrastructure/storage/adapters/Neo4jStorage.js +0 -162
  246. package/dist/infrastructure/storage/adapters/Neo4jStorage.js.map +0 -1
  247. package/dist/orchestrator/ai-feed-generator.d.ts +0 -210
  248. package/dist/orchestrator/ai-feed-generator.d.ts.map +0 -1
  249. package/dist/orchestrator/ai-feed-generator.js +0 -377
  250. package/dist/orchestrator/ai-feed-generator.js.map +0 -1
  251. package/docs/archive/test-report-symbol-search.md +0 -384
  252. package/docs/archive/test-scenario-4-complexity-analysis.md +0 -460
  253. package/docs/archive/test_report_scenario5.md +0 -615
  254. package/docs/archive/test_scenario_3_impact_analysis_report.md +0 -520
@@ -346,32 +346,37 @@
346
346
  node dist/cli/index.js design validate mycodemap.design.md --json
347
347
  ```
348
348
 
349
- 2. **相关代码搜索**
349
+ 2. **如果这是架构边界类需求,先跑 contract gate**
350
+ ```bash
351
+ node dist/cli/index.js check --contract mycodemap.design.md --against src
352
+ ```
353
+
354
+ 3. **相关代码搜索**
350
355
  ```bash
351
356
  node dist/cli/index.js analyze -i find -k "{{RELATED_KEYWORD}}" --topK 10 --json
352
357
  ```
353
358
 
354
- 3. **参考现有实现**
359
+ 4. **参考现有实现**
355
360
  分析类似功能的实现方式
356
361
 
357
- 4. **确定实现位置**
362
+ 5. **确定实现位置**
358
363
  ```bash
359
364
  node dist/cli/index.js analyze -i read -t "候选目录" --json
360
365
  ```
361
366
  选择复杂度最低的模块
362
367
 
363
- 5. **影响分析**(如果需要修改现有代码)
368
+ 6. **影响分析**(如果需要修改现有代码)
364
369
  ```bash
365
370
  node dist/cli/index.js analyze -i read -t "目标文件" --json
366
371
  ```
367
372
 
368
- 6. **实现步骤**
373
+ 7. **实现步骤**
369
374
  - [ ] 创建新文件(添加 [META] [WHY] 头)
370
375
  - [ ] 实现核心功能
371
376
  - [ ] 添加单元测试
372
377
  - [ ] 运行测试验证
373
378
 
374
- 7. **验证**
379
+ 8. **验证**
375
380
  ```bash
376
381
  node dist/cli/index.js ci check-headers -f "新文件.ts"
377
382
  npm test
@@ -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写的代码不会破坏你的架构**。
@@ -0,0 +1,231 @@
1
+ # CodeMap Eatdogfood 测试报告
2
+
3
+ > 测试者身份:AI Agent(eatdogfood)
4
+ > 测试日期:2026-04-17
5
+ > 测试目标:用 CodeMap CLI 分析 CodeMap 自身,记录完整使用体验(尤其 Agent 视角)
6
+
7
+ ---
8
+
9
+ ## 1. 执行摘要
10
+
11
+ 本次测试以 AI Agent 的身份,完整体验了 CodeMap CLI 的**查询层**与**非查询层**能力。测试覆盖 10+ 命令,包含符号查询、依赖影响分析、代码地图生成、复杂度分析、循环依赖检测、CI 风险评估、设计契约验证/交接/漂移检测、工作流启动、Mermaid 导出等。
12
+
13
+ **核心结论**:CodeMap 在"让 Agent 快速建立代码库心智模型"上表现优异,但部分命令在**参数一致性**和**零结果反馈**上仍有打磨空间。
14
+
15
+ ---
16
+
17
+ ## 2. 测试覆盖与结果
18
+
19
+ ### 2.1 查询与影响分析层
20
+
21
+ | 命令 | 目标 | 结果 | Agent 评分 |
22
+ |------|------|------|-----------|
23
+ | `query -s "AnalyzeCommand"` | 查找符号定义 | 4 条精确结果,含 `kind`/`location`/`isExported` | ★★★★★ |
24
+ | `deps -m "src/core/analyzer"` | 模块依赖关系 | 6 个依赖 + 6 个依赖者,带路径映射 | ★★★★★ |
25
+ | `impact -f src/cli/commands/analyze.ts` | 文件变更影响面 | 33 个结果,自动区分 `source`/`test` | ★★★★★ |
26
+ | `analyze -i read` | 高相关度文件摘要 | 人类友好,带 100%/95% 相关度 | ★★★★☆ |
27
+ | `analyze -i link` | 架构关联映射 | 22 引用方/17 关联目标,`riskLevel: high` | ★★★★☆ |
28
+ | `analyze -i show` | 模块导出摘要 | 导出 4 符号,依赖 17 模块 | ★★★★☆ |
29
+ | `analyze -i find` | 关键词发现 | 对单文件路径 confidence 仅 0.04 | ★★☆☆☆ |
30
+ | `history --symbol` | Git 历史与风险 | 返回 symbolId/moduleId/exactNameMatch | ★★★★★ |
31
+
32
+ ### 2.2 非查询层(生成、分析、工程、工作流)
33
+
34
+ | 命令 | 目标 | 结果 | Agent 评分 |
35
+ |------|------|------|-----------|
36
+ | `generate -m fast` | 生成代码地图 | 242 模块/958 导出符号/62482 行,成功 | ★★★★★ |
37
+ | `complexity src/cli/commands/analyze.ts` | 代码复杂度 | **指定文件后仍返回全量 79KB JSON** | ★★☆☆☆ |
38
+ | `cycles` | 循环依赖检测 | `hasCycles: false`,架构健康 | ★★★★★ |
39
+ | `ci assess-risk` | 变更风险评估 | score=0.05(low),threshold=0.50,通过 | ★★★★☆ |
40
+ | `design validate` | 设计契约校验 | 有效 doc ✅,无效 doc ❌ 并列出缺失 section | ★★★★★ |
41
+ | `design map` | 设计范围映射 | 无设计文档时 `blocked: true`,检测准确 | ★★★★★ |
42
+ | `design handoff` | 生成交接包 | 生成 `.mycodemap/handoffs/` 含 touchedFiles/tests/risks | ★★★★★ |
43
+ | `design verify` | 验证设计漂移 | 发现 5 处 drift,3 项待 review | ★★★★★ |
44
+ | `check --contract ...` | 契约门禁检查 | `passed: true`,diff scope 从 1 扩展到 3 文件 | ★★★★☆ |
45
+ | `export mermaid` | 导出依赖图 | 242 模块,7.1KB Mermaid 文件,成功 | ★★★★★ |
46
+ | `workflow start` | 启动分析工作流 | 生成 workflow ID,推荐 `refactoring` 模板 | ★★★★☆ |
47
+
48
+ ---
49
+
50
+ ## 3. Agent 视角的使用体验(重点)
51
+
52
+ ### 3.1 Agent 的核心痛点:上下文是有限的,噪音是致命的
53
+
54
+ 作为 AI Agent,我在分析代码库时最大的约束不是计算能力,而是**上下文窗口**。当使用传统工具链(`grep` + `read`)分析 `src/cli/commands/analyze.ts` 的影响面时:
55
+
56
+ - 3 次 Grep 返回约 **92 条文件引用**
57
+ - 混入 `.planning/`、`.claude/`、`docs/archive/` 等 20+ 文档噪音
58
+ - `src/orchestrator/result-fusion.ts` 被误抓——实际并未导入 `analyze.ts`,只是文本中出现了 "analyze"
59
+
60
+ 为了排除误报,我不得不**逐个 Read 文件验证**。这个过程消耗了大量 token,而且结果仍需要我手动去重、分类。
61
+
62
+ 而使用 `impact -f` 时:
63
+ - **1 次调用**
64
+ - **33 条精准结果**
65
+ - **0 条文档噪音**
66
+ - **自动标记 `source` / `test`**
67
+
68
+ 这不仅是"快",而是从"猜测-验证"模式切换到了"直接获取答案"模式。
69
+
70
+ ### 3.2 哪些命令是 Agent 的"高信号工具"
71
+
72
+ 以下命令对 Agent 来说是**高 ROI**的,应优先集成到 Agent 工作流中:
73
+
74
+ 1. **`impact -f`** → 重构前的必备步骤。自动分类测试文件,让 Agent instantly 知道"改完要跑哪些测试"。
75
+ 2. **`deps -m`** → 理解模块边界。比文本搜索 `import` 更准确,因为它基于解析后的依赖图。
76
+ 3. **`query -s`** → 符号导航。不仅找定义,还找重导出和关联函数,是 Agent 定位代码的 GPS。
77
+ 4. **`design validate` / `design map` / `design handoff`** → 设计驱动开发的三件套。Agent 可以在动手写代码前验证设计文档是否完整,生成交接包后按图施工。
78
+ 5. **`ci assess-risk`** → 在 Plan 阶段给变更打分。Agent 可以根据风险分数决定是否建议人类审查。
79
+ 6. **`generate`** → 建立项目基线。Agent 可以在任务开始时生成代码地图,后续所有查询都在这个基线上进行。
80
+
81
+ ### 3.3 哪些体验会打断 Agent 的自主性
82
+
83
+ 以下问题会迫使 Agent 从"自动执行"退回"试探-纠错"模式:
84
+
85
+ #### 问题 A:`--json` 支持不统一
86
+
87
+ ```bash
88
+ # 这些命令支持 --json ✅
89
+ query -s, deps -m, impact -f, design validate, design map, design handoff, design verify, check, cycles
90
+
91
+ # 这些命令不支持 --json ❌
92
+ history --symbol, ci assess-risk, workflow start
93
+ ```
94
+
95
+ 对 Agent 来说,JSON 是**机器可解析的默认语言**。当某些命令不支持 `--json` 时,Agent 需要额外处理人类可读输出,增加解析失败的风险。
96
+
97
+ #### 问题 B:`complexity` 指定文件仍返回全量
98
+
99
+ 我执行了:
100
+ ```bash
101
+ node dist/cli/index.js complexity src/cli/commands/analyze.ts --json
102
+ ```
103
+
104
+ 但它返回了**所有 242 个文件**的复杂度数据(79KB)。对 Agent 来说,这意味着:
105
+ - 大量无关信息挤占上下文
106
+ - 需要自行过滤目标文件
107
+ - 命令参数语义与行为不一致
108
+
109
+ #### 问题 C:`check` / `ci assess-risk` 的静默通过
110
+
111
+ 当 `check` 检测到文件没有对应设计文档时,输出为空;`ci assess-risk` 输出纯文本但没有结构化分数字段。Agent 很难判断:
112
+ - 这是"通过"还是"跳过"?
113
+ - 状态码 0 是否代表一切正常?
114
+
115
+ #### 问题 D:`analyze -i find` 对显式文件路径 confidence 过低
116
+
117
+ ```bash
118
+ node dist/cli/index.js analyze -i find src/core/analyzer.ts --json
119
+ # confidence: 0.04, results: []
120
+ ```
121
+
122
+ 当 Agent 已经精确指定了文件路径,工具却以低置信度返回空结果,这会让 Agent 怀疑自己的输入是否正确,从而触发不必要的 fallback 逻辑。
123
+
124
+ ### 3.4 Agent 最喜欢的设计细节
125
+
126
+ 1. **`impact` 的 `source` / `test` 分类**
127
+ 这不是 UI 装饰,而是直接影响 Agent 决策的结构化信息。Agent 可以立刻生成测试计划:"需要验证的测试文件:X, Y, Z"。
128
+
129
+ 2. **`design verify` 的 `driftCount` 和 `needsReviewCount`**
130
+ 让 Agent 可以量化设计文档的"健康度"。`driftCount: 5` 意味着 Agent 应该优先提醒人类审查,而不是继续自动执行。
131
+
132
+ 3. **`check` 的 `scan_mode: diff` 和 scope 扩展警告**
133
+ ```json
134
+ { "code": "diff-scope-expanded", "message": "diff scope 从 1 个 changed file 扩展到 3 个 scanned file" }
135
+ ```
136
+ 这让 Agent 理解契约检查的边界——它不是只看你改的那一行,而是会智能扩展到关联文件。
137
+
138
+ 4. **`history` 的 symbolId / moduleId**
139
+ 虽然不支持 `--json`,但默认输出就是 JSON,而且带稳定的标识符。Agent 可以跟踪同一个符号在不同 commit 中的演变。
140
+
141
+ ---
142
+
143
+ ## 4. 对照实验:用 vs 不用 CodeMap
144
+
145
+ **问题**:修改 `src/cli/commands/analyze.ts` 中的 `AnalyzeCommand`,会影响哪些文件?
146
+
147
+ ### 不用 CodeMap(传统路径)
148
+
149
+ | 步骤 | 工具 | 结果 | 问题 |
150
+ |------|------|------|------|
151
+ | 1 | `grep "AnalyzeCommand"` | 18 个文件 | 混入了大量文档和历史文件 |
152
+ | 2 | `grep "from.*analyze"` | 45 个文件 | 包含 `.claude/`、`.planning/` 噪音 |
153
+ | 3 | `grep "import.*analyze"` | 29 个文件 | 仍有误报(如 `result-fusion.ts`) |
154
+ | 4 | `Read` 验证 | 3+ 次 | 确认哪些是真依赖 |
155
+ | 5 | 手动分类 | - | 测试文件和源码混在一起 |
156
+
157
+ **总计**:6 次工具调用,~92 条引用(大量重复/噪音),需人工去重验证。
158
+
159
+ ### 用 CodeMap
160
+
161
+ ```bash
162
+ node dist/cli/index.js impact -f src/cli/commands/analyze.ts --json
163
+ ```
164
+
165
+ **结果**:1 次调用,33 条精准结果,0 噪音,自动分类 source/test。
166
+
167
+ ### 差距总结
168
+
169
+ | 维度 | 不用 CodeMap | 用 CodeMap |
170
+ |------|-------------|-----------|
171
+ | 调用次数 | 6+ | **1** |
172
+ | 结果量 | ~92 条 | **33 条** |
173
+ | 噪音混入 | 20+ 文档/历史文件 | **0** |
174
+ | 误报率 | 高(文本匹配) | **0** |
175
+ | 测试/源码分类 | 手动 | **自动** |
176
+ | Token 消耗 | 高 | **低** |
177
+
178
+ ---
179
+
180
+ ## 5. 发现的问题与改进建议
181
+
182
+ ### 5.1 高优先级(影响 Agent 自主性)
183
+
184
+ | 问题 | 影响 | 建议 |
185
+ |------|------|------|
186
+ | `--json` 支持不统一 | Agent 需要为不同命令写不同解析器 | 所有命令统一支持 `--json`,或默认输出机器可读格式 |
187
+ | `complexity` 指定文件仍返回全量 | 上下文爆炸 | 当提供文件参数时,只返回指定文件的复杂度 |
188
+ | `check` / `ci assess-risk` 静默通过 | Agent 无法区分"通过"和"未执行" | 始终输出一条状态摘要,如 `status: passed` / `status: skipped` |
189
+ | `analyze -i find` 对显式路径 confidence 过低 | Agent 会怀疑输入正确性 | 对绝对/相对文件路径提升 confidence 权重 |
190
+
191
+ ### 5.2 中优先级(体验优化)
192
+
193
+ | 问题 | 影响 | 建议 |
194
+ |------|------|------|
195
+ | `generate` 默认输出到 `.mycodemap` | Agent 可能需要区分不同任务的结果 | 支持 `--task-id` 后缀或子目录 |
196
+ | `workflow` 不支持 `--json` | 难以自动化驱动工作流 | 支持 `--json` 和 `--auto-proceed` |
197
+ | RTK `Filters NOT applied` 警告 | 每次命令都出现,干扰输出 | 在 CI/Agent 模式下可静默 |
198
+
199
+ ---
200
+
201
+ ## 6. 结论
202
+
203
+ ### 对 Agent 来说,CodeMap 的价值是什么?
204
+
205
+ CodeMap 把 AI Agent 从"**在代码海里钓鱼**"变成了"**直接拿到导航图**"。
206
+
207
+ - **`impact`** 让 Agent 在改代码前就知道"会打翻哪些盘子"
208
+ - **`design validate/handoff/verify`** 让 Agent 能参与设计驱动流程,而不是盲目写代码
209
+ - **`ci assess-risk`** 让 Agent 具备风险意识,知道什么时候该停下来叫人类审查
210
+ - **`generate` + `export`** 让 Agent 能把代码库结构转换成各种可消费格式
211
+
212
+ ### 当前的短板是什么?
213
+
214
+ 最大的短板不是功能缺失,而是**"Agent 接口的一致性"**。
215
+
216
+ 当 Agent 调用 10 个命令时,如果有 3 个不支持 `--json`、1 个忽略文件参数、2 个静默通过,Agent 的可靠性就会从"自动驾驶"降级为"辅助驾驶"。
217
+
218
+ ### 最终评分
219
+
220
+ | 维度 | 评分 | 说明 |
221
+ |------|------|------|
222
+ | 查询精准度 | 9/10 | `query`/`deps`/`impact` 非常可靠 |
223
+ | 非查询能力 | 8/10 | 生成/设计/CI/导出能力完整 |
224
+ | Agent 友好度 | 6/10 | `--json` 不一致和部分命令 UX 影响自动化 |
225
+ | 整体推荐度 | 8/10 | **值得作为 Agent 工具链的核心组件**,但需要修复接口一致性问题 |
226
+
227
+ ---
228
+
229
+ **测试执行者**:Claude (AI Agent)
230
+ **测试对象**:CodeMap CLI v当前版本(基于 `main` 分支构建)
231
+ **报告生成时间**:2026-04-17
@@ -0,0 +1,103 @@
1
+ # 2026-04-17 eatdogfood:CodeMap CLI 项目内自试用记录
2
+
3
+ ## 1. 任务定义
4
+
5
+ - [证据] **目标**:以真实使用者(eatdogfood)的身份,在当前仓库里直接使用项目自己的 CLI 做一次最小闭环试用,覆盖 `generate`、`query`、`analyze`、`deps`、`impact`,并记录体验、失败模式与后续建议。公开命令面与 AI/Agent 的推荐入口已在 `README.md:10`、`README.md:11`、`README.md:25`、`README.md:28`、`AI_GUIDE.md:47`、`AI_GUIDE.md:49`、`AI_GUIDE.md:51`、`AI_GUIDE.md:52`、`AI_GUIDE.md:54` 说明。
6
+ - [证据] **限制条件**:当前仓库的默认配置只扫描 `src/**/*.ts`,排除 `dist/**`、`build/**`、测试文件,输出目录为 `.mycodemap`,因此本次 dogfood 以源码主干为主,不把构建产物视为正常分析对象。见 `mycodemap.config.json:3`、`mycodemap.config.json:4`、`mycodemap.config.json:7`、`mycodemap.config.json:8`、`mycodemap.config.json:9`、`mycodemap.config.json:10`、`mycodemap.config.json:12`。
7
+ - [证据] **验收标准**:至少形成一次“生成 → 查询 → 阅读 → 依赖 → 影响”的真实操作链;至少记录一个失败场景;结果落到 `docs/exec-plans/` 以满足“目标、限制、DoD、风险、复盘”边界。目录职责见 `docs/exec-plans/README.md:3`、`docs/exec-plans/README.md:7`、`docs/exec-plans/README.md:8`、`docs/exec-plans/README.md:22`、`docs/exec-plans/README.md:23`、`docs/exec-plans/README.md:24`。
8
+ - [证据] **依赖关系**:本仓库 `bin` 已指向 `dist/cli/index.js`,且 `build` 脚本为 `tsc`,说明可以直接基于已构建 CLI 运行体验测试。见 `package.json:15`、`package.json:16`、`package.json:17`、`package.json:29`、`package.json:30`。
9
+
10
+ ## 2. 操作过程
11
+
12
+ ### 2.1 入口确认
13
+
14
+ - [证据] 先用 `node dist/cli/index.js --help` 确认当前公共命令,结果与 README/AI 指南一致:存在 `generate`、`query`、`deps`、`impact`、`analyze` 等入口;这与 `README.md:10`、`README.md:28`、`docs/ai-guide/COMMANDS.md:12`、`docs/ai-guide/COMMANDS.md:46`、`docs/ai-guide/COMMANDS.md:74`、`docs/ai-guide/COMMANDS.md:91` 一致。
15
+ - [观点] 这一步体验是“入口比较完整,但用户需要自己决定该先用 `query` 还是 `analyze`”;对于第一次上手的人,命令多不一定是优势。
16
+
17
+ ### 2.2 生成代码地图
18
+
19
+ - [证据] 执行命令:`rtk node dist/cli/index.js generate`
20
+ - [证据] 实际输出显示:扫描 242 个文件、62482 行代码、242 个模块、958 个导出符号,并写出 `AI_MAP.md`、`codemap.json`、`dependency-graph.md` 与 `context/`。
21
+ - [推论] 这一步与文档承诺基本一致:README 明确把 `generate` 作为第一步,并说明输出 `.mycodemap/AI_MAP.md`、`codemap.json`、`dependency-graph.md` 等文件,见 `README.md:58`、`README.md:59`、`README.md:61`、`README.md:62`、`README.md:66`、`README.md:67`;命令参考也把 `.mycodemap` 作为默认输出目录,见 `docs/ai-guide/COMMANDS.md:15`、`docs/ai-guide/COMMANDS.md:25`。
22
+ - [观点] 这一步是本次体验里“最稳”的一环:执行路径短、反馈明确、产物可见,能快速建立信心。
23
+
24
+ ### 2.3 符号与模块查询
25
+
26
+ - [证据] 执行命令:`node dist/cli/index.js query --search CodeMapServer --limit 5 --json --structured`
27
+ - [证据] 返回 3 个结果:`src/server/CodeMapServer.ts` 模块、`CodeMapServer` 类导出、`src/server/index.ts` 里的 `CodeMapServer` 变量导出。
28
+ - [证据] 执行命令:`node dist/cli/index.js query --search SourceLocation --limit 10 --json --structured`
29
+ - [证据] 返回 1 个结果:`src/interface/types/index.ts` 中导出的 `SourceLocation` 接口。
30
+ - [推论] `query` 基本符合 AI 指南里“查定义/查相关代码”的定位:`query -s "XXX"` 用于找定义,`query -S "XXX"` 用于模糊检索,见 `AI_GUIDE.md:50`、`AI_GUIDE.md:54`、`docs/ai-guide/COMMANDS.md:49`、`docs/ai-guide/COMMANDS.md:52`、`docs/ai-guide/COMMANDS.md:65`、`docs/ai-guide/COMMANDS.md:66`。
31
+ - [观点] 如果我是第一次接触项目的 agent,我会优先保留 `query`,因为它给我的“是否找到了东西”的反馈最直接。
32
+
33
+ ### 2.4 read / link / show
34
+
35
+ - [证据] 执行命令:`node dist/cli/index.js analyze -i read -t src/server/CodeMapServer.ts --scope direct --include-git-history --json --structured`
36
+ - [证据] 返回 `confidence.score = 0.8`、`level = high`、`results.length = 7`。
37
+ - [证据] 执行命令:`node dist/cli/index.js analyze -i read -t src/interface/types/index.ts --scope direct --json --structured`
38
+ - [证据] 返回 `confidence.score = 0.8`、`results.length = 8`。
39
+ - [证据] 执行命令:`node dist/cli/index.js analyze -i link -t src/server --json --structured`
40
+ - [证据] 返回 `confidence.score = 0.6`、`level = medium`、`resultCount = 2`。
41
+ - [证据] 执行命令:`node dist/cli/index.js analyze -i show -t src/server --output-mode human`
42
+ - [证据] 人类输出中直接给出 `src/server/CodeMapServer.ts:1`,并提示“导出 1 个符号,依赖 11 个模块,相关度 75.0%”。
43
+ - [推论] `analyze` 的 `read/show` 路径能跑通,且与 README 中“`analyze` 支持 human/machine 模式”的承诺一致,见 `README.md:25`、`README.md:74`、`README.md:75`、`docs/ai-guide/COMMANDS.md:6`。
44
+ - [观点] `show` 的人类输出有“开箱即看”的味道,比结构化 JSON 更像产品;但它的 discoverability 仍然依赖文档,不是 CLI 自解释。
45
+
46
+ ### 2.5 deps / impact
47
+
48
+ - [证据] 执行命令:`node dist/cli/index.js deps -m src/server/CodeMapServer.ts --json --structured`
49
+ - [证据] 返回结果显示:`src/server/CodeMapServer.ts` 直接依赖 11 个模块,前 5 个外部依赖是 `hono`、`@hono/node-server`、`hono/cors`、`hono/logger`、`hono/pretty-json`。
50
+ - [证据] 执行命令:`node dist/cli/index.js impact -f src/server/CodeMapServer.ts --transitive --json --structured`
51
+ - [证据] 返回结果显示:直接影响 6 个依赖方,统计字段中传递影响规模为 217。
52
+ - [推论] 这与 AI 指南中“依赖看 `deps`、影响看 `impact -t -j`”的建议一致,见 `AI_GUIDE.md:51`、`AI_GUIDE.md:52`、`docs/ai-guide/COMMANDS.md:74`、`docs/ai-guide/COMMANDS.md:91`、`docs/ai-guide/COMMANDS.md:95`、`docs/ai-guide/COMMANDS.md:101`。
53
+ - [观点] 这一步很像真实开发者决策前的“最后一跳”:如果我要改 `CodeMapServer`,这两个命令能快速告诉我“依赖谁”和“谁会被我炸到”。
54
+
55
+ ## 3. 失败预演与实际失败案例
56
+
57
+ ### 3.1 实际失败案例:`analyze -i find` 失准
58
+
59
+ - [证据] 执行命令:`node dist/cli/index.js analyze -i find -k SourceLocation --json --structured`
60
+ - [证据] 标准输出返回:`confidence.score = 0.04`、`level = low`、`resultCount = 0`。
61
+ - [证据] 同一次执行的标准错误包含 `ast-grep scan 命令失败: SyntaxError`,错误内容直接打印了 TypeScript 语法(例如 `filePath: string`、`Promise<string>` 等),说明底层扫描器在解析 TS 文件时发生失败。
62
+ - [证据] 对照组 1:`rtk grep 'SourceLocation' src tests docs --glob '!dist/**' --glob '!node_modules/**'` 能在 10 个文件里找到 37 处匹配。
63
+ - [证据] 对照组 2:`node dist/cli/index.js query --search SourceLocation --limit 10 --json --structured` 能稳定返回 `src/interface/types/index.ts` 中的 `SourceLocation`。
64
+ - [推论] 这不是“仓库里没有该符号”,而是 `analyze find` 的实现/回退链有缺口:同一个关键词,基础文本检索与 `query` 都能命中,唯独 `analyze find` 在报扫描错误后给出空结果。
65
+ - [观点] 这是本次 dogfood 最大的问题:它会让用户误以为“没有结果”,而不是“工具在部分路径上坏了”。
66
+
67
+ ### 3.2 风险模式
68
+
69
+ - [推论] 风险模式 1:**静默降级**。命令虽然打印了 stderr,但仍然返回结构化空结果;如果调用方只读 stdout,就会把失败误判成“安全的 0 命中”。
70
+ - [推论] 风险模式 2:**命令选择误导**。`AI_GUIDE.md:54` 把“查找与 XXX 相关的代码”推荐为 `query -S "XXX" -j`,这次反而证明它比 `analyze -i find` 更可靠;若未来文档把 find/promoted workflow 放在更前面,可能会扩大误导面。
71
+ - [推论] 风险模式 3:**配置与实现不一致**。`mycodemap.config.json:7`、`mycodemap.config.json:8` 明确排除了 `dist/**`、`build/**`,但扫描错误里出现了对不兼容语法的解析失败,说明 analyze 链路可能没有完全复用 generate/query 那套“配置感知 + 忽略规则”。
72
+
73
+ ## 4. 心得和感受
74
+
75
+ - [观点] **好感点**:`generate`、`query`、`deps`、`impact` 组合起来,已经足以支持“先建图、再定位、再评估改动范围”的真实工作流;对 agent 很实用。
76
+ - [观点] **不满点**:`analyze` 想做统一入口,但当前可靠性不如专用命令;这让“统一入口”变成概念上更高级、实际体验上更脆弱。
77
+ - [观点] **对立面质疑**:如果产品前提是“让 AI/Agent 通过统一结构化入口稳定拿到代码上下文”,那 `find` 返回空且不 hard fail 就已经触碰产品底线;这不是小瑕疵,而是信任问题。
78
+ - [观点] **作为 eatdogfood 的主观感受**:我愿意继续用这个工具,但会形成一个保守习惯——先用 `generate + query`,把 `analyze find` 当成实验功能,而不是主路径。
79
+
80
+ ## 5. 结论与建议
81
+
82
+ - [推论] **短期建议**:把 `query -S` 继续作为默认查找路径,对 `analyze -i find` 增加显式失败状态或 warning 升级,避免“空结果伪装成功”。
83
+ - [推论] **中期建议**:检查 `analyze` 是否复用了与 `generate/query` 一致的 include/exclude 与 TypeScript 解析策略,优先消除“配置写了排除、实际扫描没排除”的偏差。
84
+ - [推论] **长期建议**:让 `analyze` 只做 orchestration,不再偷偷切到不稳定的底层扫描器;或者至少在 JSON 结果里暴露 `partialFailure` 字段。
85
+
86
+ ## 6. 文档同步判断
87
+
88
+ - [证据] 本次没有修改 CLI 契约、配置项、输出格式、架构边界,因此不触发 README / AI_GUIDE / COMMANDS / OUTPUT 的强制同步条件;触发条件定义见 `AGENTS.md:151`、`AGENTS.md:152`、`AGENTS.md:153`、`AGENTS.md:158`、`AGENTS.md:160`。
89
+ - [证据] 本次新增的是执行复盘与缺陷记录,符合 `docs/exec-plans/` 与 `.codemap/issues/` 的用途,不属于产品文档失真修复。
90
+
91
+ ## 7. 本次使用的命令清单
92
+
93
+ - [证据] `rtk node dist/cli/index.js generate`
94
+ - [证据] `node dist/cli/index.js query --search CodeMapServer --limit 5 --json --structured`
95
+ - [证据] `node dist/cli/index.js query --search SourceLocation --limit 10 --json --structured`
96
+ - [证据] `node dist/cli/index.js analyze -i read -t src/server/CodeMapServer.ts --scope direct --include-git-history --json --structured`
97
+ - [证据] `node dist/cli/index.js analyze -i read -t src/interface/types/index.ts --scope direct --json --structured`
98
+ - [证据] `node dist/cli/index.js analyze -i link -t src/server --json --structured`
99
+ - [证据] `node dist/cli/index.js analyze -i show -t src/server --output-mode human`
100
+ - [证据] `node dist/cli/index.js deps -m src/server/CodeMapServer.ts --json --structured`
101
+ - [证据] `node dist/cli/index.js impact -f src/server/CodeMapServer.ts --transitive --json --structured`
102
+ - [证据] `node dist/cli/index.js analyze -i find -k SourceLocation --json --structured`
103
+ - [证据] `rtk grep 'SourceLocation' src tests docs --glob '!dist/**' --glob '!node_modules/**'`