@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
@@ -1,348 +1,36 @@
1
- # 架构护栏规则
1
+ # 架构护栏
2
2
 
3
- > MVP3 分层架构依赖规则与 Enforcement 策略
3
+ > 当前仓库采用 MVP3 分层架构。下面只保留会影响日常改动的最小 contract。
4
4
 
5
- ## 1. 架构分层原则(MVP3)
5
+ ## 分层地图
6
6
 
7
- **第一性原理**:业务逻辑必须与实现细节解耦,确保可测试性和技术栈可替换性。
7
+ | 层 | 路径 | 允许依赖 |
8
+ |---|---|---|
9
+ | CLI | `src/cli/` | `src/server/`、`src/domain/`(经 Interface)、`src/interface/` |
10
+ | Server | `src/server/` | `src/domain/`(经 Interface)、`src/interface/` |
11
+ | Domain | `src/domain/` | `src/interface/` |
12
+ | Infrastructure | `src/infrastructure/` | `src/domain/`(接口实现)、`src/interface/` |
13
+ | Interface | `src/interface/` | 无 |
8
14
 
9
- CodeMap 采用 **MVP3 分层架构**,各层职责如下:
15
+ ## 护栏表
10
16
 
11
- | 层级 | 目录 | 职责 | 允许依赖 |
12
- |------|------|------|---------|
13
- | **CLI 层** | `src/cli/` | 命令解析、用户交互、平台检查 | Server, Domain (via Interface), Interface |
14
- | **Server 层** | `src/server/` | HTTP API 服务器、路由处理、Handler | Domain (via Interface), Interface |
15
- | **Domain 层** | `src/domain/` | 核心业务逻辑、领域实体、领域服务、领域事件 | Interface |
16
- | **Infrastructure 层** | `src/infrastructure/` | 技术实现:存储、解析器、仓库实现 | Domain (接口实现), Interface |
17
- | **Interface 层** | `src/interface/` | 类型定义、契约接口、配置 | 无(纯契约定义) |
17
+ | 规则 | 命令 | 阈值/级别 | 失败后果 | 恢复方式 |
18
+ |---|---|---|---|---|
19
+ | 禁止跨层反向依赖 | `node dist/cli/index.js deps -m "src/domain"` | `Domain` 不得依赖 `Infrastructure` 具体实现 | 阻断设计验收 / 需返工 | 提取接口到 `src/interface/`,改走注入 |
20
+ | 禁止 CLI 直接耦合实现细节 | `node dist/cli/index.js deps -m "src/cli"` | CLI 只依赖 Server / Interface contract | 阻断 | 下沉到 Server 或 Interface |
21
+ | 接口放在 Interface | `rg "interface|type" src/interface src/domain src/infrastructure` | 跨层共享 contract 必须位于 `src/interface/` | 阻断 | 移动 contract,再改 import |
22
+ | 高层不直接 `new` 低层服务 | `rg "new .*Storage|new .*Parser" src/domain src/server src/cli` | 通过构造函数/工厂注入 | 返工 | 提取工厂或依赖注入 |
18
23
 
19
- ### 分层依赖规则
20
-
21
- ```
22
- ┌─────────────────────────────────────────────────────────────┐
23
- │ CLI Layer │
24
- │ src/cli/ - 命令行接口,注册命令、参数解析、用户交互 │
25
- ├─────────────────────────────────────────────────────────────┤
26
- │ Server Layer │
27
- │ src/server/ - HTTP API 服务器,RESTful 端点,Handler 处理 │
28
- ├─────────────────────────────────────────────────────────────┤
29
- │ Domain Layer │
30
- │ src/domain/ - 核心业务逻辑,领域实体与服务 │
31
- │ - entities/: Project, Module, Symbol, Dependency, CodeGraph │
32
- │ - services/: CodeGraphBuilder │
33
- │ - events/: DomainEvent │
34
- │ - repositories/: 仓库接口(仅接口,非实现) │
35
- ├─────────────────────────────────────────────────────────────┤
36
- │ Infrastructure Layer │
37
- │ src/infrastructure/ - 技术实现细节 │
38
- │ - storage/: FileSystemStorage, MemoryStorage, KuzuDBStorage
39
- │ - parser/: TypeScriptParser, GoParser, PythonParser, ParserRegistry
40
- │ - repositories/: CodeGraphRepositoryImpl(仓库接口实现) │
41
- ├─────────────────────────────────────────────────────────────┤
42
- │ Interface Layer │
43
- │ src/interface/ - 类型定义与契约,跨层共享的接口 │
44
- │ - types/: 核心类型定义 │
45
- │ - config/: 配置接口 │
46
- └─────────────────────────────────────────────────────────────┘
47
- ```
48
-
49
- **依赖方向**(严格自上而下):
50
- - CLI → Server → Domain → Infrastructure → Interface
51
- - **禁止跨层依赖**(如 Domain 层不得导入 CLI 模块)
52
- - 同层内可以相互依赖
53
-
54
- ---
55
-
56
- ## 2. 与旧架构的关系
57
-
58
- ### 2.1 历史架构(已迁移)
59
-
60
- MVP3 之前的旧架构:
61
- ```
62
- src/cli/ → src/orchestrator/ → src/core/ → src/parser/
63
-
64
- src/generator/
65
- ```
66
-
67
- ### 2.2 迁移映射
68
-
69
- | 旧架构 | MVP3 新架构 | 说明 |
70
- |--------|------------|------|
71
- | `src/cli/` | `src/cli/` | 保留,职责不变 |
72
- | `src/orchestrator/` | 功能分散到 Server/CLI | 适配器部分移至 Infrastructure |
73
- | `src/core/` | `src/domain/` | 核心业务逻辑下沉到 Domain 层 |
74
- | `src/parser/` | `src/infrastructure/parser/` | 解析器作为基础设施 |
75
- | `src/generator/` | `src/domain/services/` | 生成逻辑作为领域服务 |
76
- | `src/types/` | `src/interface/` | 类型定义提升为独立层 |
77
- | 新增 | `src/server/` | MVP3 新增 HTTP API 层 |
78
- | 新增 | `src/infrastructure/storage/` | MVP3 新增存储抽象 |
79
- | 新增 | `src/infrastructure/repositories/` | MVP3 新增仓库实现 |
80
-
81
- ---
82
-
83
- ## 3. 依赖流向规则
84
-
85
- ### 3.1 禁止的依赖方向
86
-
87
- ```
88
- Domain ←── 禁止 ── CLI 层不得直接依赖 Domain 具体实现(应通过 Interface)
89
- Infrastructure ←── 禁止 ── Domain 层不得依赖 Infrastructure 具体实现
90
- Server ←── 禁止 ── CLI 层不得直接依赖 Server 层(应通过 Interface)
91
- Interface ←── 禁止 ── 任何层不得修改 Interface 层(只读)
92
- ```
93
-
94
- ### 3.2 允许的依赖方向
95
-
96
- ```
97
- CLI → Server → Domain → Infrastructure → Interface
98
- CLI → Interface
99
- Server → Interface
100
- Domain → Interface
101
- Infrastructure → Interface
102
- ```
103
-
104
- ---
105
-
106
- ## 4. 依赖注入规范
107
-
108
- ### 4.1 原则
109
-
110
- - 高层模块不应依赖低层模块,两者都应依赖抽象(Interface 层契约)
111
- - 使用构造函数注入或工厂函数注入
112
- - 禁止在模块内部直接 `new` 高阶服务
113
-
114
- ### 4.2 合规示例
115
-
116
- ```typescript
117
- // ✅ 合规:通过 Interface 层契约注入
118
- // src/domain/services/CodeGraphBuilder.ts
119
- import type { IStorage } from '../../interface/types/storage';
120
- import type { IParserRegistry } from '../../interface/types/parser';
121
-
122
- export interface CodeGraphBuilderDeps {
123
- storage: IStorage;
124
- parserRegistry: IParserRegistry;
125
- }
126
-
127
- export class CodeGraphBuilder {
128
- constructor(private deps: CodeGraphBuilderDeps) {}
129
-
130
- async build(files: string[]) {
131
- const parser = this.deps.parserRegistry.getParser('typescript');
132
- const ast = await parser.parse(files);
133
- return this.deps.storage.save(ast);
134
- }
135
- }
136
- ```
137
-
138
- ```typescript
139
- // ❌ 违规:直接实例化 Infrastructure 具体实现
140
- // src/domain/services/CodeGraphBuilder.ts
141
- import { FileSystemStorage } from '../../infrastructure/storage/FileSystemStorage';
142
- import { TypeScriptParser } from '../../infrastructure/parser/implementations/TypeScriptParser';
143
-
144
- export class CodeGraphBuilder {
145
- private storage = new FileSystemStorage(); // 错误!硬编码实现
146
- private parser = new TypeScriptParser(); // 错误!难以测试和替换
147
- }
148
- ```
149
-
150
- ---
151
-
152
- ## 5. 文件组织规范
153
-
154
- ### 5.1 目录结构(MVP3)
155
-
156
- ```
157
- src/
158
- cli/ # CLI 层
159
- commands/ # 子命令实现
160
- index.ts # CLI 入口
161
- server/ # Server 层(MVP3 新增)
162
- CodeMapServer.ts # HTTP 服务器
163
- handlers/ # 请求处理器
164
- routes/ # 路由定义
165
- domain/ # Domain 层
166
- entities/ # 领域实体
167
- Project.ts
168
- Module.ts
169
- Symbol.ts
170
- Dependency.ts
171
- CodeGraph.ts
172
- services/ # 领域服务
173
- CodeGraphBuilder.ts
174
- events/ # 领域事件
175
- DomainEvent.ts
176
- repositories/ # 仓库接口(仅接口)
177
- CodeGraphRepository.ts
178
- infrastructure/ # Infrastructure 层
179
- storage/ # 存储适配器
180
- FileSystemStorage.ts
181
- MemoryStorage.ts
182
- KuzuDBStorage.ts
183
- StorageFactory.ts
184
- parser/ # 解析器
185
- interfaces/
186
- implementations/
187
- registry/
188
- repositories/ # 仓库实现
189
- CodeGraphRepositoryImpl.ts
190
- interface/ # Interface 层
191
- types/ # 类型定义
192
- config/ # 配置接口
193
- ```
194
-
195
- ### 5.2 文件命名规范
196
-
197
- - **实现文件**:`kebab-case.ts`(如 `code-graph-builder.ts`)
198
- - **接口文件**:`I{PascalCase}.ts`(如 `IStorage.ts`)或 `types.ts`
199
- - **测试文件**:`{name}.test.ts` 或 `__tests__/{name}.test.ts`
200
- - **实体文件**:`PascalCase.ts`(如 `CodeGraph.ts`)
201
-
202
- ---
203
-
204
- ## 6. Enforcement 策略
205
-
206
- ### 6.1 自动检测
207
-
208
- 使用 `dependency-cruiser` 配置架构规则:
209
-
210
- ```javascript
211
- // .dependency-cruiser.js(待配置)
212
- module.exports = {
213
- forbidden: [
214
- {
215
- name: 'no-domain-in-cli',
216
- comment: 'CLI 层不得直接依赖 Domain 层(应通过 Interface)',
217
- severity: 'error',
218
- from: { path: '^src/cli' },
219
- to: { path: '^src/domain', pathNot: '^src/domain/[^/]+\.ts$' }
220
- },
221
- {
222
- name: 'no-infrastructure-in-domain',
223
- comment: 'Domain 层不得依赖 Infrastructure 层',
224
- severity: 'error',
225
- from: { path: '^src/domain' },
226
- to: { path: '^src/infrastructure' }
227
- },
228
- {
229
- name: 'no-server-in-cli',
230
- comment: 'CLI 层不得依赖 Server 层',
231
- severity: 'error',
232
- from: { path: '^src/cli' },
233
- to: { path: '^src/server' }
234
- }
235
- ]
236
- };
237
- ```
238
-
239
- ### 6.2 手动检查
240
-
241
- 使用 CodeMap CLI 检查模块依赖:
24
+ ## 快速验证
242
25
 
243
26
  ```bash
244
- # 检查某模块的依赖
245
- node dist/cli/index.js deps -m "src/domain/services"
246
-
247
- # 检查某文件的影响范围
27
+ node dist/cli/index.js deps -m "src/domain"
248
28
  node dist/cli/index.js impact -f "src/interface/types/index.ts"
249
-
250
- # 检查跨层依赖(使用 analyze)
251
- node dist/cli/index.js analyze -i dependency -t src/domain
252
- ```
253
-
254
- ### 6.3 CI 检查
255
-
256
- 在 CI 中添加架构合规检查:
257
-
258
- ```yaml
259
- # .github/workflows/ci-gateway.yml
260
- - name: Check architecture compliance
261
- run: npm run check:architecture
262
- ```
263
-
264
- ---
265
-
266
- ## 7. 违规处理
267
-
268
- ### 7.1 发现违规时
269
-
270
- 1. **暂停任务**:不得继续添加更多代码
271
- 2. **评估影响**:使用 `impact` 命令评估影响范围
272
- 3. **重构方案**:将直接依赖改为接口注入
273
- 4. **验证修复**:重新运行架构检查
274
-
275
- ### 7.2 临时例外
276
-
277
- 若因紧急需求必须暂时违规,必须按技术债务标记:
278
-
279
- ```typescript
280
- // TODO-DEBT [L2] [日期:2026-03-20] [作者:AI] [原因:紧急修复]
281
- // 问题:Domain 层临时依赖 Infrastructure 具体实现
282
- // 风险:破坏分层架构,难以单元测试
283
- // 偿还计划:提取接口,通过依赖注入传递
284
- import { FileSystemStorage } from '../infrastructure/storage/FileSystemStorage';
285
- ```
286
-
287
- ---
288
-
289
- ## 8. 最佳实践
290
-
291
- ### 8.1 依赖注入模式
292
-
293
- ```typescript
294
- // 推荐:工厂函数模式
295
- export function createCodeGraphBuilder(deps: Partial<CodeGraphBuilderDeps> = {}) {
296
- return new CodeGraphBuilder({
297
- storage: deps.storage ?? createStorage(),
298
- parserRegistry: deps.parserRegistry ?? createParserRegistry(),
299
- });
300
- }
301
-
302
- // 使用
303
- const builder = createCodeGraphBuilder(); // 生产环境
304
- const testBuilder = createCodeGraphBuilder({ storage: mockStorage }); // 测试环境
305
- ```
306
-
307
- ### 8.2 接口定义位置
308
-
309
- - 接口定义在 **Interface 层**(`src/interface/`)
310
- - 或定义在被依赖方的接口目录
311
-
312
- ```typescript
313
- // src/interface/types/storage.ts
314
- export interface IStorage {
315
- save(data: unknown): Promise<void>;
316
- load(): Promise<unknown>;
317
- }
318
-
319
- // src/infrastructure/storage/FileSystemStorage.ts
320
- import type { IStorage } from '../../interface/types/storage';
321
- export class FileSystemStorage implements IStorage { ... }
322
-
323
- // src/domain/services/CodeGraphBuilder.ts
324
- import type { IStorage } from '../../interface/types/storage';
325
- export class CodeGraphBuilder {
326
- constructor(private storage: IStorage) {}
327
- }
29
+ npm run check:architecture
328
30
  ```
329
31
 
330
- ---
331
-
332
- ## 9. 验证清单
333
-
334
- 修改架构相关代码前,检查:
335
-
336
- - [ ] 新模块的依赖方向是否符合 MVP3 分层规则
337
- - [ ] 是否使用了依赖注入而非直接实例化
338
- - [ ] 接口定义是否在 Interface 层
339
- - [ ] 是否可以通过 `check:architecture` 验证
340
-
341
- ---
342
-
343
- ## 10. 相关文档
32
+ ## 常见误区
344
33
 
345
- - `ARCHITECTURE.md` - 系统总图与模块边界
346
- - `docs/rules/engineering-with-codex-openai.md` - 工程规则与 CI 护栏
347
- - `docs/rules/code-quality-redlines.md` - 代码质量红线
348
- - `docs/exec-plans/MVP3-IMPLEMENTATION-ROADMAP.md` - MVP3 重构路线图
34
+ - `Server Layer` 是内部架构层,不等于公共产品面的 `mycodemap server`。
35
+ - `src/domain/` 可以依赖接口,不能依赖实现。
36
+ - 做小改动也不能顺手把跨层 import 当成“临时方便”。