@mycodemap/mycodemap 0.1.0

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 (329) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/LICENSE +21 -0
  3. package/README.md +559 -0
  4. package/dist/ai/claude.d.ts +38 -0
  5. package/dist/ai/claude.d.ts.map +1 -0
  6. package/dist/ai/claude.js +169 -0
  7. package/dist/ai/claude.js.map +1 -0
  8. package/dist/ai/codex.d.ts +38 -0
  9. package/dist/ai/codex.d.ts.map +1 -0
  10. package/dist/ai/codex.js +169 -0
  11. package/dist/ai/codex.js.map +1 -0
  12. package/dist/ai/factory.d.ts +48 -0
  13. package/dist/ai/factory.d.ts.map +1 -0
  14. package/dist/ai/factory.js +95 -0
  15. package/dist/ai/factory.js.map +1 -0
  16. package/dist/ai/index.d.ts +12 -0
  17. package/dist/ai/index.d.ts.map +1 -0
  18. package/dist/ai/index.js +29 -0
  19. package/dist/ai/index.js.map +1 -0
  20. package/dist/ai/provider.d.ts +70 -0
  21. package/dist/ai/provider.d.ts.map +1 -0
  22. package/dist/ai/provider.js +31 -0
  23. package/dist/ai/provider.js.map +1 -0
  24. package/dist/ai/subagent-caller.d.ts +90 -0
  25. package/dist/ai/subagent-caller.d.ts.map +1 -0
  26. package/dist/ai/subagent-caller.js +280 -0
  27. package/dist/ai/subagent-caller.js.map +1 -0
  28. package/dist/ai/types.d.ts +70 -0
  29. package/dist/ai/types.d.ts.map +1 -0
  30. package/dist/ai/types.js +5 -0
  31. package/dist/ai/types.js.map +1 -0
  32. package/dist/cache/file-hash-cache.d.ts +76 -0
  33. package/dist/cache/file-hash-cache.d.ts.map +1 -0
  34. package/dist/cache/file-hash-cache.js +159 -0
  35. package/dist/cache/file-hash-cache.js.map +1 -0
  36. package/dist/cache/index.d.ts +151 -0
  37. package/dist/cache/index.d.ts.map +1 -0
  38. package/dist/cache/index.js +303 -0
  39. package/dist/cache/index.js.map +1 -0
  40. package/dist/cache/lru-cache.d.ts +93 -0
  41. package/dist/cache/lru-cache.d.ts.map +1 -0
  42. package/dist/cache/lru-cache.js +194 -0
  43. package/dist/cache/lru-cache.js.map +1 -0
  44. package/dist/cache/parse-cache.d.ts +68 -0
  45. package/dist/cache/parse-cache.d.ts.map +1 -0
  46. package/dist/cache/parse-cache.js +173 -0
  47. package/dist/cache/parse-cache.js.map +1 -0
  48. package/dist/cli/commands/analyze.d.ts +96 -0
  49. package/dist/cli/commands/analyze.d.ts.map +1 -0
  50. package/dist/cli/commands/analyze.js +567 -0
  51. package/dist/cli/commands/analyze.js.map +1 -0
  52. package/dist/cli/commands/ci.d.ts +25 -0
  53. package/dist/cli/commands/ci.d.ts.map +1 -0
  54. package/dist/cli/commands/ci.js +481 -0
  55. package/dist/cli/commands/ci.js.map +1 -0
  56. package/dist/cli/commands/complexity.d.ts +70 -0
  57. package/dist/cli/commands/complexity.d.ts.map +1 -0
  58. package/dist/cli/commands/complexity.js +479 -0
  59. package/dist/cli/commands/complexity.js.map +1 -0
  60. package/dist/cli/commands/cycles.d.ts +10 -0
  61. package/dist/cli/commands/cycles.d.ts.map +1 -0
  62. package/dist/cli/commands/cycles.js +202 -0
  63. package/dist/cli/commands/cycles.js.map +1 -0
  64. package/dist/cli/commands/deps.d.ts +61 -0
  65. package/dist/cli/commands/deps.d.ts.map +1 -0
  66. package/dist/cli/commands/deps.js +340 -0
  67. package/dist/cli/commands/deps.js.map +1 -0
  68. package/dist/cli/commands/generate.d.ts +8 -0
  69. package/dist/cli/commands/generate.d.ts.map +1 -0
  70. package/dist/cli/commands/generate.js +61 -0
  71. package/dist/cli/commands/generate.js.map +1 -0
  72. package/dist/cli/commands/impact.d.ts +55 -0
  73. package/dist/cli/commands/impact.d.ts.map +1 -0
  74. package/dist/cli/commands/impact.js +455 -0
  75. package/dist/cli/commands/impact.js.map +1 -0
  76. package/dist/cli/commands/init.d.ts +4 -0
  77. package/dist/cli/commands/init.d.ts.map +1 -0
  78. package/dist/cli/commands/init.js +50 -0
  79. package/dist/cli/commands/init.js.map +1 -0
  80. package/dist/cli/commands/query.d.ts +22 -0
  81. package/dist/cli/commands/query.d.ts.map +1 -0
  82. package/dist/cli/commands/query.js +718 -0
  83. package/dist/cli/commands/query.js.map +1 -0
  84. package/dist/cli/commands/watch-foreground.d.ts +9 -0
  85. package/dist/cli/commands/watch-foreground.d.ts.map +1 -0
  86. package/dist/cli/commands/watch-foreground.js +67 -0
  87. package/dist/cli/commands/watch-foreground.js.map +1 -0
  88. package/dist/cli/commands/watch.d.ts +12 -0
  89. package/dist/cli/commands/watch.d.ts.map +1 -0
  90. package/dist/cli/commands/watch.js +114 -0
  91. package/dist/cli/commands/watch.js.map +1 -0
  92. package/dist/cli/commands/workflow.d.ts +25 -0
  93. package/dist/cli/commands/workflow.d.ts.map +1 -0
  94. package/dist/cli/commands/workflow.js +488 -0
  95. package/dist/cli/commands/workflow.js.map +1 -0
  96. package/dist/cli/index.d.ts +3 -0
  97. package/dist/cli/index.d.ts.map +1 -0
  98. package/dist/cli/index.js +115 -0
  99. package/dist/cli/index.js.map +1 -0
  100. package/dist/cli/paths.d.ts +90 -0
  101. package/dist/cli/paths.d.ts.map +1 -0
  102. package/dist/cli/paths.js +136 -0
  103. package/dist/cli/paths.js.map +1 -0
  104. package/dist/cli/runtime-logger.d.ts +13 -0
  105. package/dist/cli/runtime-logger.d.ts.map +1 -0
  106. package/dist/cli/runtime-logger.js +213 -0
  107. package/dist/cli/runtime-logger.js.map +1 -0
  108. package/dist/core/analyzer.d.ts +3 -0
  109. package/dist/core/analyzer.d.ts.map +1 -0
  110. package/dist/core/analyzer.js +359 -0
  111. package/dist/core/analyzer.js.map +1 -0
  112. package/dist/core/ast-complexity-analyzer.d.ts +40 -0
  113. package/dist/core/ast-complexity-analyzer.d.ts.map +1 -0
  114. package/dist/core/ast-complexity-analyzer.js +279 -0
  115. package/dist/core/ast-complexity-analyzer.js.map +1 -0
  116. package/dist/core/global-index.d.ts +69 -0
  117. package/dist/core/global-index.d.ts.map +1 -0
  118. package/dist/core/global-index.js +388 -0
  119. package/dist/core/global-index.js.map +1 -0
  120. package/dist/generator/ai-overview.d.ts +51 -0
  121. package/dist/generator/ai-overview.d.ts.map +1 -0
  122. package/dist/generator/ai-overview.js +160 -0
  123. package/dist/generator/ai-overview.js.map +1 -0
  124. package/dist/generator/context.d.ts +5 -0
  125. package/dist/generator/context.d.ts.map +1 -0
  126. package/dist/generator/context.js +514 -0
  127. package/dist/generator/context.js.map +1 -0
  128. package/dist/generator/file-describer.d.ts +93 -0
  129. package/dist/generator/file-describer.d.ts.map +1 -0
  130. package/dist/generator/file-describer.js +375 -0
  131. package/dist/generator/file-describer.js.map +1 -0
  132. package/dist/generator/index.d.ts +8 -0
  133. package/dist/generator/index.d.ts.map +1 -0
  134. package/dist/generator/index.js +259 -0
  135. package/dist/generator/index.js.map +1 -0
  136. package/dist/index.d.ts +5 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +6 -0
  139. package/dist/index.js.map +1 -0
  140. package/dist/orchestrator/adapters/ast-grep-adapter.d.ts +75 -0
  141. package/dist/orchestrator/adapters/ast-grep-adapter.d.ts.map +1 -0
  142. package/dist/orchestrator/adapters/ast-grep-adapter.js +242 -0
  143. package/dist/orchestrator/adapters/ast-grep-adapter.js.map +1 -0
  144. package/dist/orchestrator/adapters/base-adapter.d.ts +24 -0
  145. package/dist/orchestrator/adapters/base-adapter.d.ts.map +1 -0
  146. package/dist/orchestrator/adapters/base-adapter.js +2 -0
  147. package/dist/orchestrator/adapters/base-adapter.js.map +1 -0
  148. package/dist/orchestrator/adapters/codemap-adapter.d.ts +56 -0
  149. package/dist/orchestrator/adapters/codemap-adapter.d.ts.map +1 -0
  150. package/dist/orchestrator/adapters/codemap-adapter.js +163 -0
  151. package/dist/orchestrator/adapters/codemap-adapter.js.map +1 -0
  152. package/dist/orchestrator/adapters/index.d.ts +10 -0
  153. package/dist/orchestrator/adapters/index.d.ts.map +1 -0
  154. package/dist/orchestrator/adapters/index.js +3 -0
  155. package/dist/orchestrator/adapters/index.js.map +1 -0
  156. package/dist/orchestrator/ai-feed-generator.d.ts +210 -0
  157. package/dist/orchestrator/ai-feed-generator.d.ts.map +1 -0
  158. package/dist/orchestrator/ai-feed-generator.js +377 -0
  159. package/dist/orchestrator/ai-feed-generator.js.map +1 -0
  160. package/dist/orchestrator/commit-validator.d.ts +30 -0
  161. package/dist/orchestrator/commit-validator.d.ts.map +1 -0
  162. package/dist/orchestrator/commit-validator.js +87 -0
  163. package/dist/orchestrator/commit-validator.js.map +1 -0
  164. package/dist/orchestrator/confidence.d.ts +25 -0
  165. package/dist/orchestrator/confidence.d.ts.map +1 -0
  166. package/dist/orchestrator/confidence.js +138 -0
  167. package/dist/orchestrator/confidence.js.map +1 -0
  168. package/dist/orchestrator/file-header-scanner.d.ts +48 -0
  169. package/dist/orchestrator/file-header-scanner.d.ts.map +1 -0
  170. package/dist/orchestrator/file-header-scanner.js +158 -0
  171. package/dist/orchestrator/file-header-scanner.js.map +1 -0
  172. package/dist/orchestrator/git-analyzer.d.ts +192 -0
  173. package/dist/orchestrator/git-analyzer.d.ts.map +1 -0
  174. package/dist/orchestrator/git-analyzer.js +539 -0
  175. package/dist/orchestrator/git-analyzer.js.map +1 -0
  176. package/dist/orchestrator/index.d.ts +20 -0
  177. package/dist/orchestrator/index.d.ts.map +1 -0
  178. package/dist/orchestrator/index.js +16 -0
  179. package/dist/orchestrator/index.js.map +1 -0
  180. package/dist/orchestrator/intent-router.d.ts +41 -0
  181. package/dist/orchestrator/intent-router.d.ts.map +1 -0
  182. package/dist/orchestrator/intent-router.js +98 -0
  183. package/dist/orchestrator/intent-router.js.map +1 -0
  184. package/dist/orchestrator/result-fusion.d.ts +114 -0
  185. package/dist/orchestrator/result-fusion.d.ts.map +1 -0
  186. package/dist/orchestrator/result-fusion.js +332 -0
  187. package/dist/orchestrator/result-fusion.js.map +1 -0
  188. package/dist/orchestrator/test-linker.d.ts +166 -0
  189. package/dist/orchestrator/test-linker.d.ts.map +1 -0
  190. package/dist/orchestrator/test-linker.js +570 -0
  191. package/dist/orchestrator/test-linker.js.map +1 -0
  192. package/dist/orchestrator/tool-orchestrator.d.ts +108 -0
  193. package/dist/orchestrator/tool-orchestrator.d.ts.map +1 -0
  194. package/dist/orchestrator/tool-orchestrator.js +247 -0
  195. package/dist/orchestrator/tool-orchestrator.js.map +1 -0
  196. package/dist/orchestrator/types.d.ts +162 -0
  197. package/dist/orchestrator/types.d.ts.map +1 -0
  198. package/dist/orchestrator/types.js +39 -0
  199. package/dist/orchestrator/types.js.map +1 -0
  200. package/dist/orchestrator/workflow/ci-executor.d.ts +157 -0
  201. package/dist/orchestrator/workflow/ci-executor.d.ts.map +1 -0
  202. package/dist/orchestrator/workflow/ci-executor.js +423 -0
  203. package/dist/orchestrator/workflow/ci-executor.js.map +1 -0
  204. package/dist/orchestrator/workflow/config.d.ts +97 -0
  205. package/dist/orchestrator/workflow/config.d.ts.map +1 -0
  206. package/dist/orchestrator/workflow/config.js +115 -0
  207. package/dist/orchestrator/workflow/config.js.map +1 -0
  208. package/dist/orchestrator/workflow/git-analyzer.d.ts +173 -0
  209. package/dist/orchestrator/workflow/git-analyzer.d.ts.map +1 -0
  210. package/dist/orchestrator/workflow/git-analyzer.js +473 -0
  211. package/dist/orchestrator/workflow/git-analyzer.js.map +1 -0
  212. package/dist/orchestrator/workflow/index.d.ts +21 -0
  213. package/dist/orchestrator/workflow/index.d.ts.map +1 -0
  214. package/dist/orchestrator/workflow/index.js +21 -0
  215. package/dist/orchestrator/workflow/index.js.map +1 -0
  216. package/dist/orchestrator/workflow/phase-checkpoint.d.ts +38 -0
  217. package/dist/orchestrator/workflow/phase-checkpoint.d.ts.map +1 -0
  218. package/dist/orchestrator/workflow/phase-checkpoint.js +75 -0
  219. package/dist/orchestrator/workflow/phase-checkpoint.js.map +1 -0
  220. package/dist/orchestrator/workflow/phase-inheritance.d.ts +128 -0
  221. package/dist/orchestrator/workflow/phase-inheritance.d.ts.map +1 -0
  222. package/dist/orchestrator/workflow/phase-inheritance.js +266 -0
  223. package/dist/orchestrator/workflow/phase-inheritance.js.map +1 -0
  224. package/dist/orchestrator/workflow/result-fusion.d.ts +117 -0
  225. package/dist/orchestrator/workflow/result-fusion.d.ts.map +1 -0
  226. package/dist/orchestrator/workflow/result-fusion.js +246 -0
  227. package/dist/orchestrator/workflow/result-fusion.js.map +1 -0
  228. package/dist/orchestrator/workflow/templates.d.ts +116 -0
  229. package/dist/orchestrator/workflow/templates.d.ts.map +1 -0
  230. package/dist/orchestrator/workflow/templates.js +546 -0
  231. package/dist/orchestrator/workflow/templates.js.map +1 -0
  232. package/dist/orchestrator/workflow/test-linker.d.ts +152 -0
  233. package/dist/orchestrator/workflow/test-linker.d.ts.map +1 -0
  234. package/dist/orchestrator/workflow/test-linker.js +342 -0
  235. package/dist/orchestrator/workflow/test-linker.js.map +1 -0
  236. package/dist/orchestrator/workflow/types.d.ts +202 -0
  237. package/dist/orchestrator/workflow/types.d.ts.map +1 -0
  238. package/dist/orchestrator/workflow/types.js +4 -0
  239. package/dist/orchestrator/workflow/types.js.map +1 -0
  240. package/dist/orchestrator/workflow/visualizer.d.ts +56 -0
  241. package/dist/orchestrator/workflow/visualizer.d.ts.map +1 -0
  242. package/dist/orchestrator/workflow/visualizer.js +300 -0
  243. package/dist/orchestrator/workflow/visualizer.js.map +1 -0
  244. package/dist/orchestrator/workflow/workflow-context.d.ts +50 -0
  245. package/dist/orchestrator/workflow/workflow-context.d.ts.map +1 -0
  246. package/dist/orchestrator/workflow/workflow-context.js +105 -0
  247. package/dist/orchestrator/workflow/workflow-context.js.map +1 -0
  248. package/dist/orchestrator/workflow/workflow-orchestrator.d.ts +126 -0
  249. package/dist/orchestrator/workflow/workflow-orchestrator.d.ts.map +1 -0
  250. package/dist/orchestrator/workflow/workflow-orchestrator.js +489 -0
  251. package/dist/orchestrator/workflow/workflow-orchestrator.js.map +1 -0
  252. package/dist/orchestrator/workflow/workflow-persistence.d.ts +38 -0
  253. package/dist/orchestrator/workflow/workflow-persistence.d.ts.map +1 -0
  254. package/dist/orchestrator/workflow/workflow-persistence.js +166 -0
  255. package/dist/orchestrator/workflow/workflow-persistence.js.map +1 -0
  256. package/dist/parser/implementations/fast-parser.d.ts +65 -0
  257. package/dist/parser/implementations/fast-parser.d.ts.map +1 -0
  258. package/dist/parser/implementations/fast-parser.js +299 -0
  259. package/dist/parser/implementations/fast-parser.js.map +1 -0
  260. package/dist/parser/implementations/smart-parser.d.ts +220 -0
  261. package/dist/parser/implementations/smart-parser.d.ts.map +1 -0
  262. package/dist/parser/implementations/smart-parser.js +1536 -0
  263. package/dist/parser/implementations/smart-parser.js.map +1 -0
  264. package/dist/parser/implementations/tree-sitter-parser.d.ts +57 -0
  265. package/dist/parser/implementations/tree-sitter-parser.d.ts.map +1 -0
  266. package/dist/parser/implementations/tree-sitter-parser.js +375 -0
  267. package/dist/parser/implementations/tree-sitter-parser.js.map +1 -0
  268. package/dist/parser/index.d.ts +19 -0
  269. package/dist/parser/index.d.ts.map +1 -0
  270. package/dist/parser/index.js +449 -0
  271. package/dist/parser/index.js.map +1 -0
  272. package/dist/parser/interfaces/IParser.d.ts +218 -0
  273. package/dist/parser/interfaces/IParser.d.ts.map +1 -0
  274. package/dist/parser/interfaces/IParser.js +22 -0
  275. package/dist/parser/interfaces/IParser.js.map +1 -0
  276. package/dist/plugins/built-in/call-graph.d.ts +38 -0
  277. package/dist/plugins/built-in/call-graph.d.ts.map +1 -0
  278. package/dist/plugins/built-in/call-graph.js +135 -0
  279. package/dist/plugins/built-in/call-graph.js.map +1 -0
  280. package/dist/plugins/built-in/complexity-analyzer.d.ts +45 -0
  281. package/dist/plugins/built-in/complexity-analyzer.d.ts.map +1 -0
  282. package/dist/plugins/built-in/complexity-analyzer.js +155 -0
  283. package/dist/plugins/built-in/complexity-analyzer.js.map +1 -0
  284. package/dist/plugins/index.d.ts +34 -0
  285. package/dist/plugins/index.d.ts.map +1 -0
  286. package/dist/plugins/index.js +103 -0
  287. package/dist/plugins/index.js.map +1 -0
  288. package/dist/plugins/plugin-loader.d.ts +22 -0
  289. package/dist/plugins/plugin-loader.d.ts.map +1 -0
  290. package/dist/plugins/plugin-loader.js +200 -0
  291. package/dist/plugins/plugin-loader.js.map +1 -0
  292. package/dist/plugins/plugin-registry.d.ts +20 -0
  293. package/dist/plugins/plugin-registry.d.ts.map +1 -0
  294. package/dist/plugins/plugin-registry.js +143 -0
  295. package/dist/plugins/plugin-registry.js.map +1 -0
  296. package/dist/plugins/types.d.ts +72 -0
  297. package/dist/plugins/types.d.ts.map +1 -0
  298. package/dist/plugins/types.js +5 -0
  299. package/dist/plugins/types.js.map +1 -0
  300. package/dist/types/index.d.ts +373 -0
  301. package/dist/types/index.d.ts.map +1 -0
  302. package/dist/types/index.js +7 -0
  303. package/dist/types/index.js.map +1 -0
  304. package/dist/watcher/daemon.d.ts +64 -0
  305. package/dist/watcher/daemon.d.ts.map +1 -0
  306. package/dist/watcher/daemon.js +189 -0
  307. package/dist/watcher/daemon.js.map +1 -0
  308. package/dist/watcher/file-watcher.d.ts +70 -0
  309. package/dist/watcher/file-watcher.d.ts.map +1 -0
  310. package/dist/watcher/file-watcher.js +127 -0
  311. package/dist/watcher/file-watcher.js.map +1 -0
  312. package/dist/watcher/index.d.ts +5 -0
  313. package/dist/watcher/index.d.ts.map +1 -0
  314. package/dist/watcher/index.js +6 -0
  315. package/dist/watcher/index.js.map +1 -0
  316. package/dist/watcher/watch-worker.d.ts +2 -0
  317. package/dist/watcher/watch-worker.d.ts.map +1 -0
  318. package/dist/watcher/watch-worker.js +57 -0
  319. package/dist/watcher/watch-worker.js.map +1 -0
  320. package/dist/worker/index.d.ts +76 -0
  321. package/dist/worker/index.d.ts.map +1 -0
  322. package/dist/worker/index.js +155 -0
  323. package/dist/worker/index.js.map +1 -0
  324. package/dist/worker/parse-worker.d.ts +2 -0
  325. package/dist/worker/parse-worker.d.ts.map +1 -0
  326. package/dist/worker/parse-worker.js +202 -0
  327. package/dist/worker/parse-worker.js.map +1 -0
  328. package/mycodemap.config.schema.json +42 -0
  329. package/package.json +69 -0
@@ -0,0 +1,61 @@
1
+ // [META] since:2024-03 | owner:core-team | stable:true
2
+ // [WHY] 提供代码地图生成 CLI 命令,协调分析器和生成器创建项目文档
3
+ import chalk from 'chalk';
4
+ import ora from 'ora';
5
+ import { analyze } from '../../core/analyzer.js';
6
+ import { generateAIMap, generateJSON, generateContext, generateMermaidGraph } from '../../generator/index.js';
7
+ import { resolveOutputDir } from '../paths.js';
8
+ export async function generateCommand(options) {
9
+ const mode = options.mode || 'hybrid';
10
+ const { outputDir, isLegacy } = resolveOutputDir(options.output);
11
+ // 显示模式信息
12
+ if (mode === 'hybrid') {
13
+ console.log(chalk.blue(`🔍 使用 Hybrid 模式生成代码地图...`));
14
+ }
15
+ else {
16
+ console.log(chalk.blue(`🔍 使用 ${mode} 模式生成代码地图...`));
17
+ }
18
+ // 显示迁移提示(如果使用旧路径)
19
+ if (isLegacy) {
20
+ console.warn(chalk.yellow('⚠️ 检测到使用旧目录 .codemap,请迁移到 .mycodemap'));
21
+ }
22
+ const spinner = ora('扫描项目文件...').start();
23
+ try {
24
+ // 执行分析(保持原始 output 传递以向后兼容)
25
+ const analysisOptions = {
26
+ mode,
27
+ rootDir: process.cwd(),
28
+ output: options.output || '.mycodemap'
29
+ };
30
+ const codeMap = await analyze(analysisOptions);
31
+ spinner.text = '生成输出文件...';
32
+ // 生成输出
33
+ await generateAIMap(codeMap, outputDir);
34
+ await generateJSON(codeMap, outputDir);
35
+ await generateMermaidGraph(codeMap, outputDir);
36
+ // 生成上下文文件(不带 AI 描述)
37
+ await generateContext(codeMap, outputDir);
38
+ spinner.succeed(chalk.green('✅ 代码地图生成完成!'));
39
+ // 显示摘要
40
+ console.log(chalk.gray('\n📊 项目统计:'));
41
+ console.log(chalk.gray(` 文件总数: ${codeMap.summary.totalFiles}`));
42
+ console.log(chalk.gray(` 代码行数: ${codeMap.summary.totalLines}`));
43
+ console.log(chalk.gray(` 模块数量: ${codeMap.summary.totalModules}`));
44
+ console.log(chalk.gray(` 导出符号: ${codeMap.summary.totalExports}`));
45
+ // 显示实际使用的模式(Hybrid 模式下)
46
+ if (codeMap.actualMode) {
47
+ console.log(chalk.gray(` 解析模式: ${codeMap.actualMode} (自动选择)`));
48
+ }
49
+ console.log(chalk.gray('\n📁 输出文件:'));
50
+ console.log(chalk.gray(` AI_MAP.md`));
51
+ console.log(chalk.gray(` codemap.json`));
52
+ console.log(chalk.gray(` dependency-graph.md`));
53
+ console.log(chalk.gray(` context/ (${codeMap.summary.totalFiles} 个文件)`));
54
+ }
55
+ catch (error) {
56
+ spinner.fail(chalk.red('❌ 生成失败'));
57
+ console.error(chalk.red(`错误: ${error}`));
58
+ process.exit(1);
59
+ }
60
+ }
61
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,wCAAwC;AACxC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAMrC;IACC,MAAM,IAAI,GAAI,OAAO,CAAC,IAAoC,IAAI,QAAQ,CAAC;IACvE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEjE,SAAS;IACT,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,cAAc,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,kBAAkB;IAClB,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;IAEzC,IAAI,CAAC;QACH,4BAA4B;QAC5B,MAAM,eAAe,GAAoB;YACvC,IAAI;YACJ,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,YAAY;SACvC,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;QAE/C,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC;QAE3B,OAAO;QACP,MAAM,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACxC,MAAM,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACvC,MAAM,oBAAoB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAE/C,oBAAoB;QACpB,MAAM,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAE1C,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;QAE5C,OAAO;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAEpE,wBAAwB;QACxB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,UAAU,SAAS,CAAC,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,OAAO,CAAC,UAAU,OAAO,CAAC,CAAC,CAAC;IAE7E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,55 @@
1
+ import type { UnifiedResult } from '../../orchestrator/types.js';
2
+ interface ImpactOptions {
3
+ file: string;
4
+ json?: boolean;
5
+ transitive?: boolean;
6
+ }
7
+ interface ImpactArgs {
8
+ targets: string[];
9
+ scope: 'direct' | 'transitive';
10
+ }
11
+ interface DependentInfo {
12
+ path: string;
13
+ relativePath: string;
14
+ type: string;
15
+ }
16
+ interface TransitiveDependentInfo extends DependentInfo {
17
+ distance: number;
18
+ }
19
+ interface ImpactResult {
20
+ target: {
21
+ path: string;
22
+ relativePath: string;
23
+ };
24
+ directDependents: DependentInfo[];
25
+ transitiveDependents?: TransitiveDependentInfo[];
26
+ statistics: {
27
+ directCount: number;
28
+ transitiveCount: number;
29
+ };
30
+ }
31
+ export declare class ImpactCommand {
32
+ private codeMap;
33
+ /**
34
+ * 初始化并加载代码地图
35
+ */
36
+ private initialize;
37
+ /**
38
+ * 复用原有逻辑,返回结构化结果
39
+ */
40
+ run(args: ImpactArgs): Promise<ImpactResult[]>;
41
+ /**
42
+ * 增强模式,返回 UnifiedResult[]
43
+ */
44
+ runEnhanced(args: ImpactArgs): Promise<UnifiedResult[]>;
45
+ /**
46
+ * 将 ImpactResult 转换为 UnifiedResult[]
47
+ */
48
+ private toUnifiedResults;
49
+ }
50
+ /**
51
+ * Impact 命令实现(保持原有接口不变)
52
+ */
53
+ export declare function impactCommand(options: ImpactOptions): Promise<void>;
54
+ export type { ImpactArgs, ImpactResult, ImpactOptions, DependentInfo, TransitiveDependentInfo };
55
+ //# sourceMappingURL=impact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impact.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/impact.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,6BAA6B,CAAC;AAM5E,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,QAAQ,GAAG,YAAY,CAAC;CAChC;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,uBAAwB,SAAQ,aAAa;IACrD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,YAAY;IACpB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,gBAAgB,EAAE,aAAa,EAAE,CAAC;IAClC,oBAAoB,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACjD,UAAU,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AA8LD,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAwB;IAEvC;;OAEG;YACW,UAAU;IASxB;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAsBpD;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAK7D;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAmIzB;AAgHD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,iBAsCzD;AAGD,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,uBAAuB,EAAE,CAAC"}
@@ -0,0 +1,455 @@
1
+ // [META] since:2025-01 | owner:cli-team | stable:true
2
+ // [WHY] 提供变更影响分析命令,支持评估代码变更的风险范围
3
+ import chalk from 'chalk';
4
+ import fs from 'fs';
5
+ import path from 'path';
6
+ import { resolveDataPath } from '../paths.js';
7
+ // ============================================
8
+ // 纯逻辑函数(从原有函数提取)
9
+ // ============================================
10
+ /**
11
+ * 加载代码地图数据
12
+ */
13
+ function loadCodeMap(rootDir) {
14
+ const codemapPath = resolveDataPath(rootDir);
15
+ if (!fs.existsSync(codemapPath)) {
16
+ return null;
17
+ }
18
+ try {
19
+ const data = fs.readFileSync(codemapPath, 'utf-8');
20
+ return JSON.parse(data);
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ /**
27
+ * 查找目标模块
28
+ */
29
+ function findTargetModule(codeMap, filePath) {
30
+ return codeMap.modules.find(m => m.absolutePath.includes(filePath) ||
31
+ path.relative(codeMap.project.rootDir, m.absolutePath).includes(filePath));
32
+ }
33
+ /**
34
+ * 获取直接依赖该文件的模块
35
+ */
36
+ function getDirectDependents(codeMap, targetModule) {
37
+ const dependents = [];
38
+ const targetBasename = path.basename(targetModule.absolutePath, '.ts');
39
+ const targetPathNormalized = targetModule.absolutePath.replace(/\\/g, '/');
40
+ // 构建模块路径到ID的映射
41
+ const modulePathToId = new Map();
42
+ for (const mod of codeMap.modules) {
43
+ const normalizedPath = mod.absolutePath.replace(/\\/g, '/');
44
+ modulePathToId.set(normalizedPath, mod.id);
45
+ // 也存储不带扩展名的路径
46
+ modulePathToId.set(normalizedPath.replace(/\.js$/, ''), mod.id);
47
+ modulePathToId.set(normalizedPath.replace(/\.ts$/, ''), mod.id);
48
+ }
49
+ for (const module of codeMap.modules) {
50
+ // 跳过目标模块自身
51
+ if (module.id === targetModule.id)
52
+ continue;
53
+ // 方法1: 检查 module.dependencies 中的路径是否能解析到目标模块
54
+ const moduleDir = path.dirname(module.absolutePath);
55
+ for (const dep of module.dependencies) {
56
+ // 解析相对路径
57
+ let resolvedPath;
58
+ if (dep.startsWith('./') || dep.startsWith('../')) {
59
+ resolvedPath = path.resolve(moduleDir, dep).replace(/\\/g, '/');
60
+ }
61
+ else {
62
+ resolvedPath = dep;
63
+ }
64
+ // 尝试多种扩展名
65
+ const possiblePaths = [
66
+ resolvedPath,
67
+ resolvedPath + '.ts',
68
+ resolvedPath + '.js',
69
+ resolvedPath.replace(/\.js$/, '.ts'),
70
+ resolvedPath.replace(/\.ts$/, '.js')
71
+ ];
72
+ for (const p of possiblePaths) {
73
+ if (p === targetPathNormalized || p.includes(targetBasename)) {
74
+ if (!dependents.includes(module)) {
75
+ dependents.push(module);
76
+ }
77
+ break;
78
+ }
79
+ }
80
+ }
81
+ // 方法2: 检查 imports(包含 re-export 的 imports)
82
+ for (const imp of module.imports) {
83
+ if (imp.source.includes(targetBasename) || imp.source.includes(targetModule.id)) {
84
+ if (!dependents.includes(module)) {
85
+ dependents.push(module);
86
+ }
87
+ }
88
+ }
89
+ // 方法3: 直接检查 module.dependents 是否包含目标模块ID(由 analyzer 构建的正确关系)
90
+ if (module.dependents?.includes(targetModule.id)) {
91
+ if (!dependents.includes(module)) {
92
+ dependents.push(module);
93
+ }
94
+ }
95
+ }
96
+ return dependents;
97
+ }
98
+ /**
99
+ * 获取传递依赖(可选)
100
+ */
101
+ function getTransitiveDependents(codeMap, targetModule, visited = new Set()) {
102
+ const result = new Map();
103
+ visited.add(targetModule.id);
104
+ const directDependents = getDirectDependents(codeMap, targetModule);
105
+ for (const dependent of directDependents) {
106
+ result.set(dependent, 1);
107
+ // 递归获取传递依赖
108
+ if (!visited.has(dependent.id)) {
109
+ const transitive = getTransitiveDependents(codeMap, dependent, visited);
110
+ for (const [module, distance] of transitive) {
111
+ const existing = result.get(module);
112
+ if (!existing || existing > distance + 1) {
113
+ result.set(module, distance + 1);
114
+ }
115
+ }
116
+ }
117
+ }
118
+ return result;
119
+ }
120
+ /**
121
+ * 分析单个目标文件的影响范围
122
+ */
123
+ function analyzeImpact(codeMap, targetFile, scope) {
124
+ const targetModule = findTargetModule(codeMap, targetFile);
125
+ if (!targetModule) {
126
+ throw new Error(`未找到文件: ${targetFile}`);
127
+ }
128
+ const directDependents = getDirectDependents(codeMap, targetModule);
129
+ const transitiveDependents = scope === 'transitive'
130
+ ? getTransitiveDependents(codeMap, targetModule)
131
+ : new Map();
132
+ const result = {
133
+ target: {
134
+ path: targetModule.absolutePath,
135
+ relativePath: path.relative(codeMap.project.rootDir, targetModule.absolutePath)
136
+ },
137
+ directDependents: directDependents.map(m => ({
138
+ path: m.absolutePath,
139
+ relativePath: path.relative(codeMap.project.rootDir, m.absolutePath),
140
+ type: m.type
141
+ })),
142
+ statistics: {
143
+ directCount: directDependents.length,
144
+ transitiveCount: scope === 'transitive' ? transitiveDependents.size : 0
145
+ }
146
+ };
147
+ if (scope === 'transitive' && transitiveDependents.size > 0) {
148
+ result.transitiveDependents = Array.from(transitiveDependents.entries())
149
+ .filter(([_, dist]) => dist > 1)
150
+ .map(([module, distance]) => ({
151
+ path: module.absolutePath,
152
+ relativePath: path.relative(codeMap.project.rootDir, module.absolutePath),
153
+ distance,
154
+ type: module.type
155
+ }));
156
+ }
157
+ return result;
158
+ }
159
+ // ============================================
160
+ // ImpactCommand 类(供编排器调用)
161
+ // ============================================
162
+ export class ImpactCommand {
163
+ codeMap = null;
164
+ /**
165
+ * 初始化并加载代码地图
166
+ */
167
+ async initialize() {
168
+ const rootDir = process.cwd();
169
+ this.codeMap = loadCodeMap(rootDir);
170
+ if (!this.codeMap) {
171
+ throw new Error('代码地图不存在,请先运行 codemap generate');
172
+ }
173
+ }
174
+ /**
175
+ * 复用原有逻辑,返回结构化结果
176
+ */
177
+ async run(args) {
178
+ await this.initialize();
179
+ if (!this.codeMap) {
180
+ throw new Error('代码地图加载失败');
181
+ }
182
+ const results = [];
183
+ for (const target of args.targets) {
184
+ try {
185
+ const result = analyzeImpact(this.codeMap, target, args.scope);
186
+ results.push(result);
187
+ }
188
+ catch (error) {
189
+ // 跳过不存在的文件,继续处理其他目标
190
+ console.warn(chalk.yellow(`⚠️ 跳过: ${target} - ${error instanceof Error ? error.message : String(error)}`));
191
+ }
192
+ }
193
+ return results;
194
+ }
195
+ /**
196
+ * 增强模式,返回 UnifiedResult[]
197
+ */
198
+ async runEnhanced(args) {
199
+ const impactResults = await this.run(args);
200
+ return this.toUnifiedResults(impactResults);
201
+ }
202
+ /**
203
+ * 将 ImpactResult 转换为 UnifiedResult[]
204
+ */
205
+ toUnifiedResults(impactResults) {
206
+ const unifiedResults = [];
207
+ for (const result of impactResults) {
208
+ const totalDependents = result.statistics.directCount + result.statistics.transitiveCount;
209
+ // 计算相关性:依赖越多,相关性越高(0.5 - 1.0 范围)
210
+ const relevance = Math.min(0.5 + totalDependents * 0.05, 1.0);
211
+ // 构建人类可读描述
212
+ let content = `被 ${result.statistics.directCount} 个模块直接依赖`;
213
+ if (result.statistics.transitiveCount > 0) {
214
+ content += `,影响 ${result.statistics.transitiveCount} 个传递依赖模块`;
215
+ }
216
+ // 确定风险等级
217
+ let riskLevel;
218
+ if (totalDependents === 0) {
219
+ riskLevel = 'low';
220
+ }
221
+ else if (totalDependents <= 3) {
222
+ riskLevel = 'low';
223
+ }
224
+ else if (totalDependents <= 10) {
225
+ riskLevel = 'medium';
226
+ }
227
+ else {
228
+ riskLevel = 'high';
229
+ }
230
+ // 构建依赖列表
231
+ const dependencies = result.directDependents.map(d => d.path);
232
+ if (result.transitiveDependents) {
233
+ dependencies.push(...result.transitiveDependents.map(d => d.path));
234
+ }
235
+ // 创建热度评分对象(默认值)
236
+ const heatScore = {
237
+ freq30d: 0,
238
+ lastType: 'unknown',
239
+ lastDate: null,
240
+ stability: true
241
+ };
242
+ // 构建 metadata
243
+ const metadata = {
244
+ symbolType: 'class',
245
+ dependencies,
246
+ testFile: '',
247
+ commitCount: 0,
248
+ gravity: totalDependents * 0.1,
249
+ heatScore,
250
+ impactCount: totalDependents,
251
+ stability: totalDependents < 5,
252
+ riskLevel
253
+ };
254
+ const unifiedResult = {
255
+ id: `codemap-${result.target.path}-0`,
256
+ source: 'codemap',
257
+ toolScore: 0.9,
258
+ type: 'file',
259
+ file: result.target.path,
260
+ line: 0,
261
+ content,
262
+ relevance,
263
+ keywords: [],
264
+ metadata
265
+ };
266
+ unifiedResults.push(unifiedResult);
267
+ // 为每个直接依赖创建单独的 UnifiedResult
268
+ for (const dependent of result.directDependents) {
269
+ const depRelevance = Math.min(0.6 + result.statistics.directCount * 0.04, 0.95);
270
+ unifiedResults.push({
271
+ id: `codemap-${dependent.path}-0`,
272
+ source: 'codemap',
273
+ toolScore: 0.85,
274
+ type: 'file',
275
+ file: dependent.path,
276
+ line: 0,
277
+ content: `直接依赖 ${path.basename(result.target.relativePath)}`,
278
+ relevance: depRelevance,
279
+ keywords: [],
280
+ metadata: {
281
+ symbolType: 'class',
282
+ dependencies: [result.target.path],
283
+ testFile: '',
284
+ commitCount: 0,
285
+ gravity: 0.5,
286
+ heatScore,
287
+ impactCount: 1,
288
+ stability: true,
289
+ riskLevel: 'low'
290
+ }
291
+ });
292
+ }
293
+ // 为每个传递依赖创建单独的 UnifiedResult
294
+ if (result.transitiveDependents) {
295
+ for (const dependent of result.transitiveDependents) {
296
+ const distanceFactor = 1 / dependent.distance;
297
+ const transRelevance = Math.min(0.4 + distanceFactor * 0.3, 0.8);
298
+ unifiedResults.push({
299
+ id: `codemap-${dependent.path}-0`,
300
+ source: 'codemap',
301
+ toolScore: 0.8,
302
+ type: 'file',
303
+ file: dependent.path,
304
+ line: 0,
305
+ content: `传递依赖 ${path.basename(result.target.relativePath)} (距离: ${dependent.distance})`,
306
+ relevance: transRelevance,
307
+ keywords: [],
308
+ metadata: {
309
+ symbolType: 'class',
310
+ dependencies: [result.target.path],
311
+ testFile: '',
312
+ commitCount: 0,
313
+ gravity: 0.3,
314
+ heatScore,
315
+ impactCount: 1,
316
+ stability: true,
317
+ riskLevel: 'low'
318
+ }
319
+ });
320
+ }
321
+ }
322
+ }
323
+ return unifiedResults;
324
+ }
325
+ }
326
+ // ============================================
327
+ // 原有 CLI 命令(保持兼容)
328
+ // ============================================
329
+ /**
330
+ * 格式化影响分析输出
331
+ */
332
+ function formatImpact(codeMap, targetModule, directDependents, transitiveDependents, options) {
333
+ const output = {
334
+ target: {
335
+ path: targetModule.absolutePath,
336
+ relativePath: path.relative(codeMap.project.rootDir, targetModule.absolutePath)
337
+ },
338
+ directDependents: directDependents.map(m => ({
339
+ path: m.absolutePath,
340
+ relativePath: path.relative(codeMap.project.rootDir, m.absolutePath),
341
+ type: m.type
342
+ })),
343
+ statistics: {
344
+ directCount: directDependents.length,
345
+ transitiveCount: options.transitive ? transitiveDependents.size : 0
346
+ }
347
+ };
348
+ if (options.json) {
349
+ if (options.transitive) {
350
+ output.transitiveDependents = Array.from(transitiveDependents.entries())
351
+ .filter(([_, dist]) => dist > 1)
352
+ .map(([module, distance]) => ({
353
+ path: module.absolutePath,
354
+ relativePath: path.relative(codeMap.project.rootDir, module.absolutePath),
355
+ distance,
356
+ type: module.type
357
+ }));
358
+ }
359
+ console.log(JSON.stringify(output, null, 2));
360
+ return;
361
+ }
362
+ console.log(chalk.cyan('\n📍 影响分析'));
363
+ console.log(chalk.gray('─'.repeat(50)));
364
+ // 目标文件
365
+ console.log(chalk.yellow('\n目标文件:'));
366
+ console.log(chalk.green(` ${path.relative(codeMap.project.rootDir, targetModule.absolutePath)}`));
367
+ console.log(chalk.gray(` 导出: ${targetModule.exports.map(e => e.name).join(', ') || '无'}`));
368
+ // 直接依赖
369
+ console.log(chalk.yellow(`\n⬇️ 直接依赖该文件的模块 (${directDependents.length}):`));
370
+ if (directDependents.length === 0) {
371
+ console.log(chalk.gray(' 无'));
372
+ }
373
+ else {
374
+ for (const dep of directDependents) {
375
+ const relPath = path.relative(codeMap.project.rootDir, dep.absolutePath);
376
+ const exports = dep.exports.map(e => e.name).join(', ') || '无';
377
+ console.log(chalk.green(` • ${relPath}`));
378
+ console.log(chalk.gray(` 导出: ${exports.substring(0, 50)}${exports.length > 50 ? '...' : ''}`));
379
+ }
380
+ }
381
+ // 传递依赖
382
+ if (options.transitive && transitiveDependents.size > 0) {
383
+ console.log(chalk.yellow(`\n🌐 传递依赖 (${transitiveDependents.size - directDependents.length}):`));
384
+ const sorted = Array.from(transitiveDependents.entries())
385
+ .filter(([_, dist]) => dist > 1)
386
+ .sort((a, b) => a[1] - b[1]);
387
+ for (const [module, distance] of sorted.slice(0, 20)) {
388
+ const relPath = path.relative(codeMap.project.rootDir, module.absolutePath);
389
+ const dots = ' '.repeat(distance - 1);
390
+ console.log(chalk.green(` ${dots}└─► ${relPath}`), chalk.gray(`[距离: ${distance}]`));
391
+ }
392
+ if (sorted.length > 20) {
393
+ console.log(chalk.gray(` ... 还有 ${sorted.length - 20} 个`));
394
+ }
395
+ }
396
+ // 风险评估
397
+ console.log(chalk.gray('\n─'.repeat(50)));
398
+ console.log(chalk.cyan('\n⚠️ 风险评估:'));
399
+ if (directDependents.length === 0) {
400
+ console.log(chalk.green(' ✅ 低风险 - 该文件未被其他模块依赖'));
401
+ }
402
+ else if (directDependents.length <= 2) {
403
+ console.log(chalk.green(' 🟢 低风险 - 该文件被少量模块依赖'));
404
+ }
405
+ else if (directDependents.length <= 10) {
406
+ console.log(chalk.yellow(' ⚠️ 中风险 - 该文件被多个模块依赖'));
407
+ }
408
+ else if (directDependents.length <= 25) {
409
+ console.log(chalk.red(' 🟠 高风险 - 该文件被较多模块依赖,修改需谨慎'));
410
+ }
411
+ else {
412
+ console.log(chalk.magenta(' 🔴 极高风险 - 该文件是核心依赖,修改将影响大量模块'));
413
+ }
414
+ console.log(chalk.cyan(`\n 直接影响: ${directDependents.length} 个模块`));
415
+ if (options.transitive) {
416
+ console.log(chalk.cyan(` 传递影响: ${transitiveDependents.size - directDependents.length} 个额外模块`));
417
+ }
418
+ console.log('');
419
+ }
420
+ /**
421
+ * Impact 命令实现(保持原有接口不变)
422
+ */
423
+ export async function impactCommand(options) {
424
+ const rootDir = process.cwd();
425
+ if (!options.file) {
426
+ console.log(chalk.red('❌ 请指定要分析的文件 (--file <path>)'));
427
+ console.log(chalk.gray('\n用法:'));
428
+ console.log(chalk.gray(' codemap impact --file <path> # 分析文件影响范围'));
429
+ console.log(chalk.gray(' codemap impact --file <path> --transitive # 包含传递依赖'));
430
+ console.log(chalk.gray(' codemap impact --file <path> --json # JSON 输出'));
431
+ process.exit(1);
432
+ }
433
+ // 加载代码地图
434
+ const codeMap = loadCodeMap(rootDir);
435
+ if (!codeMap) {
436
+ console.log(chalk.red('❌ 代码地图不存在,请先运行 codemap generate'));
437
+ process.exit(1);
438
+ }
439
+ // 查找目标模块
440
+ const targetModule = findTargetModule(codeMap, options.file);
441
+ if (!targetModule) {
442
+ console.log(chalk.red(`❌ 未找到文件: ${options.file}`));
443
+ console.log(chalk.gray('\n提示: 请使用相对于项目根目录的路径'));
444
+ process.exit(1);
445
+ }
446
+ // 获取直接依赖
447
+ const directDependents = getDirectDependents(codeMap, targetModule);
448
+ // 获取传递依赖
449
+ const transitiveDependents = options.transitive
450
+ ? getTransitiveDependents(codeMap, targetModule)
451
+ : new Map();
452
+ // 输出结果
453
+ formatImpact(codeMap, targetModule, directDependents, transitiveDependents, options);
454
+ }
455
+ //# sourceMappingURL=impact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impact.js","sourceRoot":"","sources":["../../../src/cli/commands/impact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function initCommand(_options: {
2
+ yes?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAOA,wBAAsB,WAAW,CAAC,QAAQ,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,iBA+C5D"}