@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,539 @@
1
+ // [META] since:2026-03-02 | owner:orchestrator-team | stable:true
2
+ // [WHY] Git analyzer with unified date string format for consistent serialization
3
+ /**
4
+ * Git 分析器
5
+ * 分析文件的 Git 提交历史,评估修改风险
6
+ */
7
+ import { execFile, execSync } from 'child_process';
8
+ import { promisify } from 'util';
9
+ // 将 execFile 转换为 Promise 版本
10
+ const execFileAsync = promisify(execFile);
11
+ /**
12
+ * 标签风险权重映射
13
+ * 基于 REFACTOR_REQUIREMENTS.md 第 8.6 节
14
+ */
15
+ export const TAG_WEIGHTS = {
16
+ 'BUGFIX': 0.9, // 修复过的代码 = 曾经有问题
17
+ 'REFACTOR': 0.8, // 重构过的代码 = 复杂度较高
18
+ 'FEATURE': 0.7, // 新功能 = 可能不稳定
19
+ 'CONFIG': 0.5, // 配置变更 = 中等风险
20
+ 'DOCS': 0.2, // 文档 = 低风险
21
+ 'DELETE': 0.1, // 删除代码 = 极低风险
22
+ 'UNKNOWN': 0.5 // 未知 = 默认中等风险
23
+ };
24
+ /**
25
+ * 提交标签正则表达式
26
+ * 匹配格式: [TAG] scope: message
27
+ */
28
+ export const COMMIT_TAG_REGEX = /^\[(BUGFIX|FEATURE|REFACTOR|CONFIG|DOCS|DELETE)\]\s*(.+?)?:\s*(.+)$/;
29
+ /**
30
+ * GitAnalyzer 类
31
+ * 提供 Git 历史分析和风险评分功能
32
+ */
33
+ export class GitAnalyzer {
34
+ /**
35
+ * 检查指定路径是否为 Git 仓库
36
+ */
37
+ async isGitRepository(projectRoot) {
38
+ try {
39
+ await execFileAsync('git', ['rev-parse', '--git-dir'], { cwd: projectRoot });
40
+ return true;
41
+ }
42
+ catch {
43
+ return false;
44
+ }
45
+ }
46
+ /**
47
+ * 分析单个文件的 Git 热度
48
+ * @param filePath - 文件路径(相对于 projectRoot)
49
+ * @param projectRoot - 项目根目录
50
+ * @returns HeatScore 热度评分
51
+ */
52
+ async analyzeFileHeat(filePath, projectRoot) {
53
+ // 检查是否为 Git 仓库
54
+ const isGitRepo = await this.isGitRepository(projectRoot);
55
+ if (!isGitRepo) {
56
+ return this.createEmptyHeatScore();
57
+ }
58
+ try {
59
+ // 使用 execSync 获取提交历史
60
+ const log = execSync(`git log --since="30 days ago" --pretty=format:"%s" -- "${filePath}"`, { cwd: projectRoot, encoding: 'utf-8' });
61
+ const commits = log.split('\n').filter(Boolean);
62
+ if (commits.length === 0) {
63
+ return this.createEmptyHeatScore();
64
+ }
65
+ // 解析最后一次提交的标签
66
+ const lastCommit = commits[0] ?? '';
67
+ const tag = this.parseCommitTag(lastCommit);
68
+ const lastType = tag?.type ?? 'UNKNOWN';
69
+ // 获取最后一次提交的日期
70
+ let lastDateStr = null;
71
+ try {
72
+ const dateOutput = execSync(`git log -1 --pretty=format:"%ci" -- "${filePath}"`, { cwd: projectRoot, encoding: 'utf-8' });
73
+ lastDateStr = dateOutput ? dateOutput.split(' ')[0] : null;
74
+ }
75
+ catch {
76
+ lastDateStr = null;
77
+ }
78
+ // 稳定性:30天内少于3次视为稳定
79
+ const stability = commits.length < 3;
80
+ return {
81
+ freq30d: commits.length,
82
+ lastType,
83
+ lastDate: lastDateStr,
84
+ stability
85
+ };
86
+ }
87
+ catch {
88
+ // 优雅降级:发生任何错误时返回空热度
89
+ return this.createEmptyHeatScore();
90
+ }
91
+ }
92
+ /**
93
+ * 分析目录下所有文件的 Git 热度
94
+ * @param dirPath - 目录路径(相对于 projectRoot)
95
+ * @param projectRoot - 项目根目录
96
+ * @returns Map<文件路径, HeatScore>
97
+ */
98
+ async analyzeDirectoryHeat(dirPath, projectRoot) {
99
+ const result = new Map();
100
+ // 检查是否为 Git 仓库
101
+ const isGitRepo = await this.isGitRepository(projectRoot);
102
+ if (!isGitRepo) {
103
+ return result;
104
+ }
105
+ try {
106
+ // 获取目录下最近30天有修改的所有文件
107
+ const files = await this.getModifiedFilesInDirectory(dirPath, projectRoot, 30);
108
+ // 分析每个文件的热度
109
+ for (const file of files) {
110
+ const heat = await this.analyzeFileHeat(file, projectRoot);
111
+ result.set(file, heat);
112
+ }
113
+ }
114
+ catch {
115
+ // 优雅降级:发生错误时返回空结果
116
+ }
117
+ return result;
118
+ }
119
+ /**
120
+ * 计算风险评分(简单版本 - 任务要求)
121
+ * 基于 REFACTOR_REQUIREMENTS.md 第 8.6 节的公式
122
+ *
123
+ * @param gravity - 依赖复杂度(出度+入度)
124
+ * @param heat - 热度评分
125
+ * @param impact - 影响面(被依赖文件数)
126
+ * @param stable - 是否稳定
127
+ * @returns RiskLevel 风险等级
128
+ */
129
+ calculateRiskLevel(gravity, heat, impact, stable) {
130
+ // 归一化各维度
131
+ const gravityNorm = Math.min(gravity / 20, 1);
132
+ const freqNorm = Math.min(heat.freq30d / 10, 1);
133
+ const tagWeight = TAG_WEIGHTS[heat.lastType] ?? TAG_WEIGHTS['UNKNOWN'];
134
+ const stableBoost = stable ? 0 : 0.15;
135
+ const impactNorm = Math.min(impact / 50, 1);
136
+ // 计算综合分数(严格按照需求文档公式)
137
+ let score = gravityNorm * 0.30 +
138
+ freqNorm * 0.15 +
139
+ tagWeight * 0.10 +
140
+ stableBoost +
141
+ impactNorm * 0.10;
142
+ // clamp 到 [0, 1]
143
+ score = Math.max(0, Math.min(1, score));
144
+ // 确定风险等级
145
+ if (score > 0.7) {
146
+ return 'high';
147
+ }
148
+ else if (score > 0.4) {
149
+ return 'medium';
150
+ }
151
+ else {
152
+ return 'low';
153
+ }
154
+ }
155
+ /**
156
+ * 计算风险评分(完整版本 - 设计文档版本)
157
+ * @param targetFiles - 目标文件列表
158
+ * @param commits - 提交信息列表
159
+ * @param feedData - AI 饲料数据
160
+ * @returns RiskScore 风险评分结果
161
+ */
162
+ calculateRiskScore(targetFiles, commits, feedData) {
163
+ // 获取目标文件的饲料数据
164
+ const fileFeeds = feedData.filter(f => targetFiles.includes(f.file));
165
+ // 计算平均 gravity
166
+ const avgGravity = fileFeeds.reduce((sum, f) => sum + f.gravity, 0) / (fileFeeds.length || 1);
167
+ const gravityNorm = Math.min(avgGravity / 20, 1);
168
+ // 计算平均 freq
169
+ const totalFreq = fileFeeds.reduce((sum, f) => sum + f.heat.freq30d, 0);
170
+ const avgFreq = totalFreq / (fileFeeds.length || 1);
171
+ const freqNorm = Math.min(avgFreq / 10, 1);
172
+ // 计算标签风险权重
173
+ const lastTypes = fileFeeds.map(f => f.heat.lastType);
174
+ const avgTagRisk = lastTypes.reduce((sum, t) => sum + (TAG_WEIGHTS[t] ?? 0.5), 0) /
175
+ (lastTypes.length || 1);
176
+ // 计算影响面
177
+ const totalDependents = fileFeeds.reduce((sum, f) => sum + f.dependents.length, 0);
178
+ const impactNorm = Math.min(totalDependents / 50, 1);
179
+ // 计算稳定性调整
180
+ const unstableCount = fileFeeds.filter(f => f.meta.stable === false).length;
181
+ const unstableRatio = unstableCount / (fileFeeds.length || 1);
182
+ const stabilityBoost = unstableRatio * 0.15;
183
+ // 计算综合分数
184
+ let score = gravityNorm * 0.30 +
185
+ freqNorm * 0.15 +
186
+ avgTagRisk * 0.10 +
187
+ stabilityBoost +
188
+ impactNorm * 0.10;
189
+ // clamp 到 [0, 1]
190
+ score = Math.max(0, Math.min(1, score));
191
+ // 确定风险等级
192
+ let level;
193
+ if (score > 0.7) {
194
+ level = 'high';
195
+ }
196
+ else if (score > 0.4) {
197
+ level = 'medium';
198
+ }
199
+ else {
200
+ level = 'low';
201
+ }
202
+ // 生成风险因素
203
+ const riskFactors = [];
204
+ if (gravityNorm > 0.7)
205
+ riskFactors.push('高依赖复杂度');
206
+ if (freqNorm > 0.7)
207
+ riskFactors.push('近期频繁修改');
208
+ if (avgTagRisk > 0.7)
209
+ riskFactors.push('历史问题较多(BUGFIX频繁)');
210
+ if (impactNorm > 0.7)
211
+ riskFactors.push('影响面广');
212
+ if (unstableCount > 0)
213
+ riskFactors.push('模块标记为不稳定');
214
+ // 构建 HeatScore(平均值)
215
+ const avgHeat = {
216
+ freq30d: Math.round(avgFreq),
217
+ lastType: lastTypes[0] ?? 'UNKNOWN',
218
+ lastDate: fileFeeds[0]?.heat.lastDate ?? null,
219
+ stability: unstableCount === 0
220
+ };
221
+ return {
222
+ level,
223
+ score,
224
+ gravity: gravityNorm,
225
+ heat: avgHeat,
226
+ impact: impactNorm,
227
+ riskFactors
228
+ };
229
+ }
230
+ /**
231
+ * 查找相关提交
232
+ * 支持关键词搜索和文件搜索两种模式
233
+ *
234
+ * @param keywords - 关键词列表
235
+ * @param files - 文件路径列表
236
+ * @param options - 选项(最大提交数、项目根目录)
237
+ * @returns CommitInfo[] 提交信息列表
238
+ */
239
+ async findRelatedCommits(keywords, files, options) {
240
+ const commits = [];
241
+ // 检查是否为 Git 仓库
242
+ const isGitRepo = await this.isGitRepository(options.projectRoot);
243
+ if (!isGitRepo) {
244
+ return commits;
245
+ }
246
+ // 1. 关键词搜索(提交信息)
247
+ if (keywords.length > 0) {
248
+ const keywordResults = await this.searchByKeywords(keywords, options.maxCommits, options.projectRoot);
249
+ commits.push(...keywordResults);
250
+ }
251
+ // 2. 文件搜索(修改过的文件)
252
+ if (files.length > 0) {
253
+ const fileResults = await this.searchByFiles(files, options.maxCommits, options.projectRoot);
254
+ commits.push(...fileResults);
255
+ }
256
+ // 3. 去重 + 排序(按日期降序)
257
+ const unique = new Map();
258
+ for (const commit of commits) {
259
+ if (!unique.has(commit.hash)) {
260
+ unique.set(commit.hash, commit);
261
+ }
262
+ }
263
+ return Array.from(unique.values())
264
+ .sort((a, b) => b.date.getTime() - a.date.getTime())
265
+ .slice(0, options.maxCommits);
266
+ }
267
+ /**
268
+ * 解析提交信息中的 TAG
269
+ * @param message - 提交信息
270
+ * @returns CommitTag | undefined
271
+ */
272
+ parseCommitTag(message) {
273
+ // 只处理第一行
274
+ const firstLine = message.split('\n')[0] ?? '';
275
+ const match = firstLine.match(COMMIT_TAG_REGEX);
276
+ if (!match) {
277
+ return undefined;
278
+ }
279
+ const [, type, scope, subject] = match;
280
+ return {
281
+ type: type,
282
+ scope: scope?.trim() ?? 'general',
283
+ subject: subject.trim()
284
+ };
285
+ }
286
+ /**
287
+ * 验证提交信息格式
288
+ * @param message - 提交信息
289
+ * @returns 是否有效
290
+ */
291
+ validateCommitMessage(message) {
292
+ const lines = message.split('\n');
293
+ const firstLine = lines[0]?.trim() ?? '';
294
+ // 检查第一行格式(更宽松的正则,先提取 TAG 类型)
295
+ const tagMatch = firstLine.match(/^\[(\w+)\]\s*(.+)$/);
296
+ if (!tagMatch) {
297
+ return {
298
+ valid: false,
299
+ error: '提交信息必须以大写标签开头,格式: [TAG] scope: message'
300
+ };
301
+ }
302
+ const [, tagType] = tagMatch;
303
+ // 验证标签有效性
304
+ if (!TAG_WEIGHTS[tagType]) {
305
+ return {
306
+ valid: false,
307
+ error: `无效的标签: [${tagType}]`
308
+ };
309
+ }
310
+ // 使用严格的正则检查完整格式
311
+ const fullMatch = firstLine.match(COMMIT_TAG_REGEX);
312
+ if (!fullMatch) {
313
+ // 检查是否是 scope 或 subject 的问题
314
+ const scopeMatch = firstLine.match(/^\[\w+\]\s*(.+)$/);
315
+ if (scopeMatch) {
316
+ const rest = scopeMatch[1];
317
+ if (!rest.includes(':')) {
318
+ return {
319
+ valid: false,
320
+ error: 'scope 不能为空,格式: [TAG] scope: message'
321
+ };
322
+ }
323
+ const parts = rest.split(':');
324
+ if (parts.length >= 2 && parts[1]?.trim() === '') {
325
+ return {
326
+ valid: false,
327
+ error: '提交描述不能为空'
328
+ };
329
+ }
330
+ }
331
+ return {
332
+ valid: false,
333
+ error: '格式错误,应为: [TAG] scope: message'
334
+ };
335
+ }
336
+ const [, type, scope, subject] = fullMatch;
337
+ // scope 不能为空
338
+ if (!scope || scope.trim() === '') {
339
+ return {
340
+ valid: false,
341
+ error: 'scope 不能为空,格式: [TAG] scope: message'
342
+ };
343
+ }
344
+ // subject 不能为空
345
+ if (!subject || subject.trim() === '') {
346
+ return {
347
+ valid: false,
348
+ error: '提交描述不能为空'
349
+ };
350
+ }
351
+ return { valid: true };
352
+ }
353
+ // ==================== 私有辅助方法 ====================
354
+ /**
355
+ * 创建空热度评分
356
+ */
357
+ createEmptyHeatScore() {
358
+ return {
359
+ freq30d: 0,
360
+ lastType: 'NEW',
361
+ lastDate: null,
362
+ stability: true
363
+ };
364
+ }
365
+ /**
366
+ * 格式化日期为 ISO 日期字符串
367
+ */
368
+ formatDate(date) {
369
+ return date.toISOString().split('T')[0] ?? '';
370
+ }
371
+ /**
372
+ * 获取文件的提交历史
373
+ */
374
+ async getFileCommits(filePath, projectRoot, days) {
375
+ try {
376
+ const { stdout } = await execFileAsync('git', [
377
+ 'log',
378
+ `--since=${days} days ago`,
379
+ '--pretty=format:%H|%s|%ai|%an',
380
+ '--name-only',
381
+ '--',
382
+ filePath
383
+ ], { cwd: projectRoot });
384
+ return this.parseGitLogWithFiles(stdout);
385
+ }
386
+ catch {
387
+ return [];
388
+ }
389
+ }
390
+ /**
391
+ * 获取目录下最近有修改的文件列表
392
+ */
393
+ async getModifiedFilesInDirectory(dirPath, projectRoot, days) {
394
+ try {
395
+ const { stdout } = await execFileAsync('git', [
396
+ 'log',
397
+ `--since=${days} days ago`,
398
+ '--pretty=format:',
399
+ '--name-only',
400
+ '--',
401
+ dirPath
402
+ ], { cwd: projectRoot });
403
+ // 去重并过滤空行
404
+ const files = stdout
405
+ .split('\n')
406
+ .map(line => line.trim())
407
+ .filter(line => line.length > 0);
408
+ return [...new Set(files)];
409
+ }
410
+ catch {
411
+ return [];
412
+ }
413
+ }
414
+ /**
415
+ * 基于关键词搜索提交
416
+ */
417
+ async searchByKeywords(keywords, limit, projectRoot) {
418
+ // 清理和验证关键词
419
+ const sanitizedKeywords = keywords
420
+ .slice(0, 5) // 最多 5 个关键词
421
+ .map(k => k.slice(0, 100)) // 每个关键词最多 100 字符
422
+ .filter(k => /^[\w\-./]+$/.test(k)); // 仅允许安全字符
423
+ if (sanitizedKeywords.length === 0) {
424
+ return [];
425
+ }
426
+ try {
427
+ const pattern = sanitizedKeywords.join('|');
428
+ const { stdout } = await execFileAsync('git', [
429
+ 'log',
430
+ '--all',
431
+ `--grep=${pattern}`,
432
+ '--format=%H|%s|%ai|%an',
433
+ '-n',
434
+ String(limit)
435
+ ], { cwd: projectRoot });
436
+ return this.parseGitLog(stdout);
437
+ }
438
+ catch {
439
+ return [];
440
+ }
441
+ }
442
+ /**
443
+ * 基于文件搜索提交
444
+ */
445
+ async searchByFiles(files, limit, projectRoot) {
446
+ const allCommits = [];
447
+ for (const file of files.slice(0, 10)) { // 最多处理 10 个文件
448
+ try {
449
+ const { stdout } = await execFileAsync('git', [
450
+ 'log',
451
+ '--follow',
452
+ '--format=%H|%s|%ai|%an',
453
+ '--name-only',
454
+ '-n',
455
+ String(limit),
456
+ '--',
457
+ file
458
+ ], { cwd: projectRoot });
459
+ const fileCommits = this.parseGitLogWithFiles(stdout);
460
+ allCommits.push(...fileCommits);
461
+ }
462
+ catch {
463
+ // 单文件查询失败时跳过
464
+ continue;
465
+ }
466
+ }
467
+ // 按哈希去重
468
+ const unique = new Map();
469
+ for (const commit of allCommits) {
470
+ if (!unique.has(commit.hash)) {
471
+ unique.set(commit.hash, commit);
472
+ }
473
+ }
474
+ return Array.from(unique.values());
475
+ }
476
+ /**
477
+ * 解析 Git 日志(无文件列表)
478
+ */
479
+ parseGitLog(stdout) {
480
+ return stdout
481
+ .trim()
482
+ .split('\n')
483
+ .filter(line => line.trim().length > 0)
484
+ .map(line => {
485
+ const parts = line.split('|');
486
+ const hash = parts[0] ?? '';
487
+ const message = parts[1] ?? '';
488
+ const dateStr = parts[2] ?? '';
489
+ const author = parts[3] ?? '';
490
+ return {
491
+ hash,
492
+ message,
493
+ date: new Date(dateStr),
494
+ author,
495
+ files: [],
496
+ tag: this.parseCommitTag(message)
497
+ };
498
+ })
499
+ .filter(commit => commit.hash.length > 0);
500
+ }
501
+ /**
502
+ * 解析 Git 日志(含文件列表)
503
+ * 格式: hash|message|date|author\n\nfile1\nfile2\n\nhash|...
504
+ */
505
+ parseGitLogWithFiles(stdout) {
506
+ const commits = [];
507
+ const blocks = stdout.split('\n\n');
508
+ for (const block of blocks) {
509
+ const lines = block.trim().split('\n');
510
+ if (lines.length === 0) {
511
+ continue;
512
+ }
513
+ // 第一行是提交信息
514
+ const headerLine = lines[0];
515
+ const parts = headerLine.split('|');
516
+ if (parts.length < 4) {
517
+ continue;
518
+ }
519
+ const hash = parts[0] ?? '';
520
+ const message = parts[1] ?? '';
521
+ const dateStr = parts[2] ?? '';
522
+ const author = parts[3] ?? '';
523
+ // 剩余行是文件列表
524
+ const files = lines.slice(1).filter(f => f.trim().length > 0);
525
+ if (hash.length > 0) {
526
+ commits.push({
527
+ hash,
528
+ message,
529
+ date: new Date(dateStr),
530
+ author,
531
+ files,
532
+ tag: this.parseCommitTag(message)
533
+ });
534
+ }
535
+ }
536
+ return commits;
537
+ }
538
+ }
539
+ //# sourceMappingURL=git-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-analyzer.js","sourceRoot":"","sources":["../../src/orchestrator/git-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * [META] Orchestrator 模块入口
3
+ * [WHY] 导出编排层的所有核心类型和类
4
+ */
5
+ export type { UnifiedResult, HeatScore, ToolOptions, IntentType, CodemapIntent, AnalyzeArgs } from './types';
6
+ export type { ToolAdapter } from './adapters/base-adapter.js';
7
+ export { ToolOrchestrator } from './tool-orchestrator.js';
8
+ export type { ExecutionResult, SafeExecutionResult } from './tool-orchestrator.js';
9
+ export { IntentRouter } from './intent-router.js';
10
+ export { ResultFusion } from './result-fusion.js';
11
+ export type { FusionOptions } from './result-fusion.js';
12
+ export { calculateConfidence } from './confidence.js';
13
+ export type { ConfidenceResult } from './confidence.js';
14
+ export { validateCommitMessage, validateRecentCommits, VALID_TAGS } from './commit-validator.js';
15
+ export type { CommitValidationResult } from './commit-validator.js';
16
+ export { scanDirectory, assessRisk, SUPPORTED_EXTENSIONS } from './file-header-scanner.js';
17
+ export type { FileHeaderResult, RiskAssessment } from './file-header-scanner.js';
18
+ export { GitAnalyzer, TAG_WEIGHTS, COMMIT_TAG_REGEX } from './git-analyzer.js';
19
+ export type { CommitInfo, CommitTag, CommitTagType, RiskLevel, RiskScore } from './git-analyzer.js';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,UAAU,EACV,aAAa,EACb,WAAW,EACZ,MAAM,SAAS,CAAC;AAGjB,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAEnF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACjG,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAGpE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC3F,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAGjF,OAAO,EACL,WAAW,EACX,WAAW,EACX,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,SAAS,EACT,SAAS,EACV,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * [META] Orchestrator 模块入口
3
+ * [WHY] 导出编排层的所有核心类型和类
4
+ */
5
+ // 类导出
6
+ export { ToolOrchestrator } from './tool-orchestrator.js';
7
+ export { IntentRouter } from './intent-router.js';
8
+ export { ResultFusion } from './result-fusion.js';
9
+ export { calculateConfidence } from './confidence.js';
10
+ // Commit 验证器导出
11
+ export { validateCommitMessage, validateRecentCommits, VALID_TAGS } from './commit-validator.js';
12
+ // 文件头扫描器导出
13
+ export { scanDirectory, assessRisk, SUPPORTED_EXTENSIONS } from './file-header-scanner.js';
14
+ // Git 分析器导出
15
+ export { GitAnalyzer, TAG_WEIGHTS, COMMIT_TAG_REGEX } from './git-analyzer.js';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,MAAM;AACN,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGtD,eAAe;AACf,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGjG,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAG3F,YAAY;AACZ,OAAO,EACL,WAAW,EACX,WAAW,EACX,gBAAgB,EACjB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * IntentRouter - 意图路由
3
+ *
4
+ * 负责将用户输入的参数映射为 CodemapIntent,
5
+ * 验证意图是否在白名单中。
6
+ */
7
+ import type { CodemapIntent, AnalyzeArgs, IntentType } from './types.js';
8
+ /**
9
+ * IntentRouter 类 - 意图路由器
10
+ */
11
+ export declare class IntentRouter {
12
+ /** 有效意图白名单 */
13
+ private validIntents;
14
+ /**
15
+ * 将分析参数路由为 CodemapIntent
16
+ *
17
+ * @param args 分析命令参数
18
+ * @returns CodemapIntent 对象
19
+ */
20
+ route(args: AnalyzeArgs): CodemapIntent;
21
+ /**
22
+ * 解析 intent 字符串为 IntentType
23
+ */
24
+ private parseIntent;
25
+ /**
26
+ * 验证 intent 是否在白名单中
27
+ *
28
+ * @param intent 意图类型
29
+ * @throws 如果 intent 无效,抛出错误
30
+ */
31
+ private validateIntent;
32
+ /**
33
+ * 检查 intent 是否有效
34
+ */
35
+ isValidIntent(intent: string): boolean;
36
+ /**
37
+ * 获取所有有效的意图类型
38
+ */
39
+ getValidIntents(): IntentType[];
40
+ }
41
+ //# sourceMappingURL=intent-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-router.d.ts","sourceRoot":"","sources":["../../src/orchestrator/intent-router.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA8BzE;;GAEG;AACH,qBAAa,YAAY;IACvB,cAAc;IACd,OAAO,CAAC,YAAY,CAA+B;IAEnD;;;;;OAKG;IACH,KAAK,CAAC,IAAI,EAAE,WAAW,GAAG,aAAa;IA8BvC;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAItC;;OAEG;IACH,eAAe,IAAI,UAAU,EAAE;CAGhC"}