speccore 8.3.181 → 8.3.188

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 (214) hide show
  1. package/.agents/skills/spec-analyze/SKILL.md +2 -169
  2. package/.agents/skills/spec-ask/SKILL.md +2 -177
  3. package/.agents/skills/spec-change/SKILL.md +2 -214
  4. package/.agents/skills/spec-dashboard/SKILL.md +1 -76
  5. package/.agents/skills/spec-deploy/SKILL.md +2 -298
  6. package/.agents/skills/spec-doc2spec/SKILL.md +2 -116
  7. package/.agents/skills/spec-done/SKILL.md +2 -203
  8. package/.agents/skills/spec-execute/SKILL.md +2 -178
  9. package/.agents/skills/spec-help/SKILL.md +1 -75
  10. package/.agents/skills/spec-iteration-create/SKILL.md +2 -123
  11. package/.agents/skills/spec-plan/SKILL.md +2 -117
  12. package/.agents/skills/spec-pr/SKILL.md +2 -203
  13. package/.agents/skills/spec-run/SKILL.md +16 -0
  14. package/.agents/skills/spec-spec2doc/SKILL.md +2 -121
  15. package/.agents/skills/spec-split/SKILL.md +2 -208
  16. package/.agents/skills/spec-task-create/SKILL.md +2 -151
  17. package/.agents/skills/spec-verify/SKILL.md +2 -214
  18. package/.agents/skills/spec-welcome/SKILL.md +1 -67
  19. package/.agents/skills/speccore-router/SKILL.md +14 -2
  20. package/README.en.md +9 -9
  21. package/README.md +2 -1
  22. package/dist/cli.js +24 -25
  23. package/dist/cli.js.map +1 -1
  24. package/dist/commands/about.js +1 -1
  25. package/dist/commands/about.js.map +1 -1
  26. package/dist/commands/analyze.d.ts +1 -0
  27. package/dist/commands/analyze.d.ts.map +1 -1
  28. package/dist/commands/analyze.js +94 -7
  29. package/dist/commands/analyze.js.map +1 -1
  30. package/dist/commands/ask.js +6 -6
  31. package/dist/commands/ask.js.map +1 -1
  32. package/dist/commands/dev.d.ts +2 -0
  33. package/dist/commands/dev.d.ts.map +1 -1
  34. package/dist/commands/dev.js +102 -1
  35. package/dist/commands/dev.js.map +1 -1
  36. package/dist/commands/doctor.js +28 -0
  37. package/dist/commands/doctor.js.map +1 -1
  38. package/dist/commands/execute.js +3 -3
  39. package/dist/commands/execute.js.map +1 -1
  40. package/dist/commands/init.d.ts.map +1 -1
  41. package/dist/commands/init.js +31 -52
  42. package/dist/commands/init.js.map +1 -1
  43. package/dist/commands/iteration/split.d.ts.map +1 -1
  44. package/dist/commands/iteration/split.js +12 -39
  45. package/dist/commands/iteration/split.js.map +1 -1
  46. package/dist/commands/knowledge.d.ts +0 -12
  47. package/dist/commands/knowledge.d.ts.map +1 -1
  48. package/dist/commands/knowledge.js +0 -80
  49. package/dist/commands/knowledge.js.map +1 -1
  50. package/dist/commands/refresh.d.ts.map +1 -1
  51. package/dist/commands/refresh.js +10 -0
  52. package/dist/commands/refresh.js.map +1 -1
  53. package/dist/commands/search.d.ts +1 -0
  54. package/dist/commands/search.d.ts.map +1 -1
  55. package/dist/commands/search.js +38 -0
  56. package/dist/commands/search.js.map +1 -1
  57. package/dist/commands/update.d.ts.map +1 -1
  58. package/dist/commands/update.js +13 -3
  59. package/dist/commands/update.js.map +1 -1
  60. package/dist/core/agent-adapter.d.ts +6 -0
  61. package/dist/core/agent-adapter.d.ts.map +1 -1
  62. package/dist/core/agent-adapter.js +56 -172
  63. package/dist/core/agent-adapter.js.map +1 -1
  64. package/dist/core/agents/defaults/code-generator.md +64 -0
  65. package/dist/core/agents/defaults/code-reviewer.md +5 -0
  66. package/dist/core/agents/defaults/compiler.md +7 -0
  67. package/dist/core/agents/defaults/compliance-checker.md +2 -0
  68. package/dist/core/agents/defaults/dependency-analyst.md +5 -0
  69. package/dist/core/agents/defaults/doc-sync-agent.md +5 -0
  70. package/dist/core/agents/defaults/effort-estimator.md +28 -0
  71. package/dist/core/agents/defaults/global-analyzer.md +66 -0
  72. package/dist/core/agents/defaults/impact-analyst.md +5 -0
  73. package/dist/core/agents/defaults/interaction-designer.md +5 -0
  74. package/dist/core/agents/defaults/performance-expert.md +2 -0
  75. package/dist/core/agents/defaults/product-analyst-backend.md +6 -0
  76. package/dist/core/agents/defaults/product-analyst-frontend.md +6 -0
  77. package/dist/core/agents/defaults/product-analyst.md +5 -0
  78. package/dist/core/agents/defaults/regression-tester.md +5 -0
  79. package/dist/core/agents/defaults/requirement-analyzer.md +72 -0
  80. package/dist/core/agents/defaults/risk-assessor.md +5 -0
  81. package/dist/core/agents/defaults/schedule-planner.md +5 -0
  82. package/dist/core/agents/defaults/security-reviewer-finance.md +6 -0
  83. package/dist/core/agents/defaults/security-reviewer.md +7 -0
  84. package/dist/core/agents/defaults/task-decomposer.md +5 -0
  85. package/dist/core/agents/defaults/test-engineer.md +2 -0
  86. package/dist/core/agents/defaults/test-reviewer.md +5 -0
  87. package/dist/core/agents/engine/agent-loader.d.ts.map +1 -1
  88. package/dist/core/agents/engine/agent-loader.js +76 -6
  89. package/dist/core/agents/engine/agent-loader.js.map +1 -1
  90. package/dist/core/agents/engine/types.d.ts +5 -0
  91. package/dist/core/agents/engine/types.d.ts.map +1 -1
  92. package/dist/core/analyze-engine.d.ts.map +1 -1
  93. package/dist/core/analyze-engine.js +73 -82
  94. package/dist/core/analyze-engine.js.map +1 -1
  95. package/dist/core/ask-engine.d.ts +0 -58
  96. package/dist/core/ask-engine.d.ts.map +1 -1
  97. package/dist/core/ask-engine.js +63 -361
  98. package/dist/core/ask-engine.js.map +1 -1
  99. package/dist/core/business-rules.d.ts +36 -0
  100. package/dist/core/business-rules.d.ts.map +1 -0
  101. package/dist/core/business-rules.js +109 -0
  102. package/dist/core/business-rules.js.map +1 -0
  103. package/dist/core/change-impact-global.d.ts.map +1 -1
  104. package/dist/core/change-impact-global.js +4 -3
  105. package/dist/core/change-impact-global.js.map +1 -1
  106. package/dist/core/code-scanner.d.ts +1 -0
  107. package/dist/core/code-scanner.d.ts.map +1 -1
  108. package/dist/core/code-scanner.js +32 -3
  109. package/dist/core/code-scanner.js.map +1 -1
  110. package/dist/core/content-delivery.d.ts +59 -0
  111. package/dist/core/content-delivery.d.ts.map +1 -0
  112. package/dist/core/content-delivery.js +219 -0
  113. package/dist/core/content-delivery.js.map +1 -0
  114. package/dist/core/global-artifacts.d.ts.map +1 -1
  115. package/dist/core/global-artifacts.js +262 -19
  116. package/dist/core/global-artifacts.js.map +1 -1
  117. package/dist/core/global-retrieval.d.ts +38 -0
  118. package/dist/core/global-retrieval.d.ts.map +1 -0
  119. package/dist/core/global-retrieval.js +100 -0
  120. package/dist/core/global-retrieval.js.map +1 -0
  121. package/dist/core/html-prototype.d.ts +22 -0
  122. package/dist/core/html-prototype.d.ts.map +1 -0
  123. package/dist/core/html-prototype.js +103 -0
  124. package/dist/core/html-prototype.js.map +1 -0
  125. package/dist/core/multi-lang-parser.d.ts +43 -0
  126. package/dist/core/multi-lang-parser.d.ts.map +1 -0
  127. package/dist/core/multi-lang-parser.js +317 -0
  128. package/dist/core/multi-lang-parser.js.map +1 -0
  129. package/dist/core/pipeline-engine.js +16 -16
  130. package/dist/core/pipeline-engine.js.map +1 -1
  131. package/dist/core/platform-inference.d.ts +35 -0
  132. package/dist/core/platform-inference.d.ts.map +1 -0
  133. package/dist/core/platform-inference.js +205 -0
  134. package/dist/core/platform-inference.js.map +1 -0
  135. package/dist/core/prompt-builder.d.ts +1 -1
  136. package/dist/core/prompt-builder.d.ts.map +1 -1
  137. package/dist/core/prompt-builder.js +101 -75
  138. package/dist/core/prompt-builder.js.map +1 -1
  139. package/dist/core/refresh-scheduler.d.ts +50 -0
  140. package/dist/core/refresh-scheduler.d.ts.map +1 -0
  141. package/dist/core/refresh-scheduler.js +139 -0
  142. package/dist/core/refresh-scheduler.js.map +1 -0
  143. package/dist/core/reverse-requirement.d.ts +54 -0
  144. package/dist/core/reverse-requirement.d.ts.map +1 -0
  145. package/dist/core/reverse-requirement.js +277 -0
  146. package/dist/core/reverse-requirement.js.map +1 -0
  147. package/dist/core/schemas/task.schema.d.ts +2 -2
  148. package/dist/core/spec-skeleton.d.ts.map +1 -1
  149. package/dist/core/spec-skeleton.js +123 -0
  150. package/dist/core/spec-skeleton.js.map +1 -1
  151. package/dist/core/unified-config.d.ts +14 -0
  152. package/dist/core/unified-config.d.ts.map +1 -1
  153. package/dist/core/unified-config.js +94 -10
  154. package/dist/core/unified-config.js.map +1 -1
  155. package/dist/core/unified-retrieval.d.ts.map +1 -1
  156. package/dist/core/unified-retrieval.js +34 -8
  157. package/dist/core/unified-retrieval.js.map +1 -1
  158. package/dist/utils/task-utils.d.ts +4 -0
  159. package/dist/utils/task-utils.d.ts.map +1 -1
  160. package/dist/utils/task-utils.js +18 -0
  161. package/dist/utils/task-utils.js.map +1 -1
  162. package/package.json +5 -3
  163. package/vendor/tree-sitter/tree-sitter-go.wasm +0 -0
  164. package/vendor/tree-sitter/tree-sitter-java.wasm +0 -0
  165. package/vendor/tree-sitter/tree-sitter-python.wasm +0 -0
  166. package/vendor/tree-sitter/tree-sitter-rust.wasm +0 -0
  167. package/.agents/agents/README.md +0 -79
  168. package/.agents/agents/spec-analyzer.md +0 -41
  169. package/.agents/agents/spec-architect.md +0 -57
  170. package/.agents/agents/spec-change-detector.md +0 -55
  171. package/.agents/agents/spec-clarifier.md +0 -83
  172. package/.agents/agents/spec-executor.md +0 -41
  173. package/.agents/agents/spec-gatekeeper.md +0 -84
  174. package/.agents/agents/spec-global-analyzer.md +0 -111
  175. package/.agents/agents/spec-knowledge-curator.md +0 -54
  176. package/.agents/agents/spec-reviewer.md +0 -46
  177. package/.agents/agents/spec-security-auditor.md +0 -56
  178. package/.agents/agents/spec-tester.md +0 -120
  179. package/.agents/skills/spec-analyze/references/analysis-report.md +0 -9
  180. package/.agents/skills/spec-execute/references/code-output.md +0 -13
  181. package/.agents/skills/spec-plan/references/plan-template.md +0 -29
  182. package/.agents/skills/spec-task-create/references/requirement-template.md +0 -23
  183. package/dist/commands/bugfix.d.ts +0 -17
  184. package/dist/commands/bugfix.d.ts.map +0 -1
  185. package/dist/commands/bugfix.js +0 -301
  186. package/dist/commands/bugfix.js.map +0 -1
  187. package/dist/commands/help-quick.d.ts +0 -3
  188. package/dist/commands/help-quick.d.ts.map +0 -1
  189. package/dist/commands/help-quick.js +0 -66
  190. package/dist/commands/help-quick.js.map +0 -1
  191. package/dist/commands/index-update.d.ts +0 -8
  192. package/dist/commands/index-update.d.ts.map +0 -1
  193. package/dist/commands/index-update.js +0 -180
  194. package/dist/commands/index-update.js.map +0 -1
  195. package/dist/commands/schedule.d.ts +0 -26
  196. package/dist/commands/schedule.d.ts.map +0 -1
  197. package/dist/commands/schedule.js +0 -182
  198. package/dist/commands/schedule.js.map +0 -1
  199. package/dist/commands/watch.d.ts +0 -11
  200. package/dist/commands/watch.d.ts.map +0 -1
  201. package/dist/commands/watch.js +0 -166
  202. package/dist/commands/watch.js.map +0 -1
  203. package/dist/core/ai-markdown.d.ts +0 -5
  204. package/dist/core/ai-markdown.d.ts.map +0 -1
  205. package/dist/core/ai-markdown.js +0 -29
  206. package/dist/core/ai-markdown.js.map +0 -1
  207. package/dist/core/schedule-engine.d.ts +0 -25
  208. package/dist/core/schedule-engine.d.ts.map +0 -1
  209. package/dist/core/schedule-engine.js +0 -281
  210. package/dist/core/schedule-engine.js.map +0 -1
  211. package/dist/core/schedule-store.d.ts +0 -119
  212. package/dist/core/schedule-store.d.ts.map +0 -1
  213. package/dist/core/schedule-store.js +0 -216
  214. package/dist/core/schedule-store.js.map +0 -1
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ /**
3
+ * html-prototype.ts — HTML 原型渲染(Playwright 截图 + aria snapshot)
4
+ *
5
+ * 目的:把 HTML 原型变成「视觉产物」+「语义结构」两条产物,替代 extractHtmlText 纯文本。
6
+ * - 截图 PNG → 多模态宿主直看(CSS 样式、空间布局都在)
7
+ * - aria snapshot → 纯文本宿主读(YAML 格式的 ARIA 树:role + name + 层级)
8
+ *
9
+ * 失败兜底:Playwright 浏览器未安装 / 渲染异常时返回 null,调用方降级 extractHtmlText。
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.renderHtmlPrototype = renderHtmlPrototype;
13
+ const playwright_1 = require("playwright");
14
+ const url_1 = require("url");
15
+ const path_1 = require("path");
16
+ const fs_extra_1 = require("fs-extra");
17
+ const fs_1 = require("fs");
18
+ /**
19
+ * 渲染 HTML 原型:截图 + aria snapshot。
20
+ * @param htmlPath 本地 HTML 文件路径
21
+ * @param outputDir 截图输出目录(默认 .speccore/cache/prototypes/)
22
+ */
23
+ async function renderHtmlPrototype(htmlPath, outputDir) {
24
+ if (!(await (0, fs_extra_1.pathExists)(htmlPath)))
25
+ return null;
26
+ const dir = outputDir || (0, path_1.join)(process.cwd(), '.speccore', 'cache', 'prototypes');
27
+ await (0, fs_extra_1.ensureDir)(dir);
28
+ let browser = null;
29
+ try {
30
+ browser = await launchChromium();
31
+ if (!browser)
32
+ return null;
33
+ const context = await browser.newContext({ viewport: { width: 1280, height: 800 } });
34
+ const page = await context.newPage();
35
+ await page.goto((0, url_1.pathToFileURL)(htmlPath).toString(), { waitUntil: 'load' });
36
+ // 截图(全页)
37
+ const shotPath = (0, path_1.join)(dir, `${(0, path_1.basename)(htmlPath).replace(/\.html?$/i, '')}.png`);
38
+ await page.screenshot({ path: shotPath, fullPage: true });
39
+ // ARIA 树(YAML 字符串:role + name + 层级)
40
+ let tree = null;
41
+ try {
42
+ const snapshot = await page.locator('html').ariaSnapshot();
43
+ tree = snapshot || null;
44
+ }
45
+ catch {
46
+ tree = null;
47
+ }
48
+ await context.close();
49
+ return { screenshotPath: shotPath, accessibilityTree: tree };
50
+ }
51
+ catch {
52
+ return null;
53
+ }
54
+ finally {
55
+ if (browser)
56
+ await browser.close().catch(() => { });
57
+ }
58
+ }
59
+ /** 启动 chromium(Playwright 自带 → 环境变量 → 系统浏览器 → null) */
60
+ async function launchChromium() {
61
+ // 1. Playwright 自带浏览器
62
+ try {
63
+ playwright_1.chromium.executablePath();
64
+ return await playwright_1.chromium.launch({ headless: true });
65
+ }
66
+ catch { /* 未安装,继续 */ }
67
+ // 2. 环境变量指定路径
68
+ const envPath = process.env.SPECCORE_BROWSER_PATH;
69
+ if (envPath) {
70
+ try {
71
+ return await playwright_1.chromium.launch({ headless: true, executablePath: envPath });
72
+ }
73
+ catch { /* 继续 */ }
74
+ }
75
+ // 3. 系统浏览器(Chrome/Edge)
76
+ const system = findSystemBrowser();
77
+ if (system) {
78
+ try {
79
+ return await playwright_1.chromium.launch({ headless: true, executablePath: system });
80
+ }
81
+ catch { /* 继续 */ }
82
+ }
83
+ return null;
84
+ }
85
+ /** 探测本机系统浏览器路径 */
86
+ function findSystemBrowser() {
87
+ const candidates = [];
88
+ if (process.platform === 'win32') {
89
+ candidates.push('C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe', 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe', 'C:\\Program Files\\Microsoft\\Edge\\Application\\msedge.exe', 'C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe');
90
+ }
91
+ else if (process.platform === 'darwin') {
92
+ candidates.push('/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge');
93
+ }
94
+ else {
95
+ candidates.push('/usr/bin/google-chrome', '/usr/bin/google-chrome-stable', '/usr/bin/chromium', '/usr/bin/chromium-browser', '/usr/bin/microsoft-edge');
96
+ }
97
+ for (const c of candidates) {
98
+ if ((0, fs_1.existsSync)(c))
99
+ return c;
100
+ }
101
+ return null;
102
+ }
103
+ //# sourceMappingURL=html-prototype.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-prototype.js","sourceRoot":"","sources":["../../src/core/html-prototype.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * multi-lang-parser.ts — 多语言 AST 解析(tree-sitter WASM)
3
+ *
4
+ * 替代 code-scanner.ts 中脆弱的正则提取(extractExports/extractApis/extractImports)。
5
+ * 用 tree-sitter 精确解析 Java / Go / Python / Rust,其余语言回退正则。
6
+ *
7
+ * 设计:
8
+ * - 零 LLM Token,代码不出本机
9
+ * - 惰性初始化:首次调用才加载 WASM 引擎 + 语法
10
+ * - 语法 .wasm 随包发布(vendor/tree-sitter/),不依赖远程服务
11
+ * - 单语言加载失败(如 rust 未 vendor)自动降级正则,不影响主流程
12
+ *
13
+ * 覆盖:
14
+ * java / go / python / rust → tree-sitter
15
+ * vue → 抽取 <script> 块后按 js 正则处理
16
+ * typescript / javascript → 保留正则(code-graph/parser.ts 已有 Compiler API 精确解析)
17
+ */
18
+ export interface ExtractedCode {
19
+ exports: string[];
20
+ apis: string[];
21
+ apiDetails: string[];
22
+ imports: string[];
23
+ }
24
+ /** 判断某语言是否走 tree-sitter */
25
+ export declare function isTreeSitterLang(lang: string): boolean;
26
+ /**
27
+ * 用 tree-sitter 精确提取 imports / exports / apis。
28
+ * 不支持的 lang 返回 null,由调用方回退正则。
29
+ */
30
+ export declare function extractWithTreeSitter(content: string, lang: string): Promise<ExtractedCode | null>;
31
+ /**
32
+ * 用 tree-sitter 生成「结构化摘要」——只保留 imports / 符号 / 接口,
33
+ * 丢弃方法体,作为注入 AI 上下文的轻量替代,避免原文被按字符腰斩。
34
+ * 不支持的 lang 返回 null,调用方回退原文截断。
35
+ */
36
+ export declare function summarizeCode(content: string, lang: string): Promise<string | null>;
37
+ /**
38
+ * 批量生成结构化摘要:path→content 映射 → path→summary 映射。
39
+ * 只覆盖 tree-sitter 语言(java/go/python/rust),其余跳过(返回不含该 path)。
40
+ */
41
+ export declare function summarizeSources(contents: Record<string, string>): Promise<Record<string, string>>;
42
+ export declare function extractVueScript(content: string): string;
43
+ //# sourceMappingURL=multi-lang-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-lang-parser.d.ts","sourceRoot":"","sources":["../../src/core/multi-lang-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AA2DH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,2BAA2B;AAC3B,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAuBxG;AA+JD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUzF;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CASxG;AAYD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGxD"}
@@ -0,0 +1,317 @@
1
+ "use strict";
2
+ /**
3
+ * multi-lang-parser.ts — 多语言 AST 解析(tree-sitter WASM)
4
+ *
5
+ * 替代 code-scanner.ts 中脆弱的正则提取(extractExports/extractApis/extractImports)。
6
+ * 用 tree-sitter 精确解析 Java / Go / Python / Rust,其余语言回退正则。
7
+ *
8
+ * 设计:
9
+ * - 零 LLM Token,代码不出本机
10
+ * - 惰性初始化:首次调用才加载 WASM 引擎 + 语法
11
+ * - 语法 .wasm 随包发布(vendor/tree-sitter/),不依赖远程服务
12
+ * - 单语言加载失败(如 rust 未 vendor)自动降级正则,不影响主流程
13
+ *
14
+ * 覆盖:
15
+ * java / go / python / rust → tree-sitter
16
+ * vue → 抽取 <script> 块后按 js 正则处理
17
+ * typescript / javascript → 保留正则(code-graph/parser.ts 已有 Compiler API 精确解析)
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.isTreeSitterLang = isTreeSitterLang;
21
+ exports.extractWithTreeSitter = extractWithTreeSitter;
22
+ exports.summarizeCode = summarizeCode;
23
+ exports.summarizeSources = summarizeSources;
24
+ exports.extractVueScript = extractVueScript;
25
+ const path_1 = require("path");
26
+ const fs_1 = require("fs");
27
+ // ── 语言 → wasm 语法文件映射 ──
28
+ const LANG_WASM = {
29
+ java: 'tree-sitter-java.wasm',
30
+ go: 'tree-sitter-go.wasm',
31
+ python: 'tree-sitter-python.wasm',
32
+ rust: 'tree-sitter-rust.wasm',
33
+ };
34
+ // ── 惰性初始化状态 ──
35
+ let ParserCtor = null;
36
+ let initPromise = null;
37
+ const parserCache = new Map();
38
+ /** 定位 vendor 目录(兼容 dev 仓库根 与 published 包根) */
39
+ function vendorDir() {
40
+ // dist/core/ 下的 __dirname → 上溯到包根
41
+ return (0, path_1.join)(__dirname, '..', '..', 'vendor', 'tree-sitter');
42
+ }
43
+ async function ensureParser() {
44
+ if (initPromise)
45
+ return initPromise;
46
+ initPromise = (async () => {
47
+ // web-tree-sitter@0.20.8 CJS:module.exports 即 Parser 类
48
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
49
+ ParserCtor = require('web-tree-sitter');
50
+ await ParserCtor.init();
51
+ })();
52
+ return initPromise;
53
+ }
54
+ /** 获取某语言的 parser(失败返回 null,供调用方降级正则) */
55
+ async function getParser(lang) {
56
+ if (!LANG_WASM[lang])
57
+ return null;
58
+ if (parserCache.has(lang))
59
+ return parserCache.get(lang);
60
+ const wasmPath = (0, path_1.join)(vendorDir(), LANG_WASM[lang]);
61
+ if (!(0, fs_1.existsSync)(wasmPath))
62
+ return null;
63
+ try {
64
+ await ensureParser();
65
+ const Language = await ParserCtor.Language.load(wasmPath);
66
+ const parser = new ParserCtor();
67
+ parser.setLanguage(Language);
68
+ parserCache.set(lang, parser);
69
+ return parser;
70
+ }
71
+ catch {
72
+ return null; // 语法加载失败 → 降级
73
+ }
74
+ }
75
+ /** 判断某语言是否走 tree-sitter */
76
+ function isTreeSitterLang(lang) {
77
+ return lang in LANG_WASM;
78
+ }
79
+ /**
80
+ * 用 tree-sitter 精确提取 imports / exports / apis。
81
+ * 不支持的 lang 返回 null,由调用方回退正则。
82
+ */
83
+ async function extractWithTreeSitter(content, lang) {
84
+ const parser = await getParser(lang);
85
+ if (!parser)
86
+ return null;
87
+ try {
88
+ const tree = parser.parse(content);
89
+ const root = tree.rootNode;
90
+ const exportsSet = new Set();
91
+ const importsSet = new Set();
92
+ const apisSet = new Set();
93
+ const apiDetailsSet = new Set();
94
+ walk(root, content, lang, exportsSet, importsSet, apisSet, apiDetailsSet);
95
+ return {
96
+ exports: [...exportsSet].slice(0, 20),
97
+ apis: [...apisSet],
98
+ apiDetails: [...apiDetailsSet],
99
+ imports: [...importsSet].slice(0, 30),
100
+ };
101
+ }
102
+ catch {
103
+ return null;
104
+ }
105
+ }
106
+ // ─────────────────────────────────────────────────────────────
107
+ // 通用遍历
108
+ // ─────────────────────────────────────────────────────────────
109
+ function walk(node, src, lang, exportsSet, importsSet, apisSet, apiDetailsSet, classPrefix = '') {
110
+ const t = node.type;
111
+ // 进入类声明时,提取类级 @RequestMapping 前缀(如 /api/auth),供方法级注解合并完整路径
112
+ let currentPrefix = classPrefix;
113
+ if (lang === 'java' && t === 'class_declaration') {
114
+ const prefix = extractClassPathPrefix(node, src);
115
+ if (prefix)
116
+ currentPrefix = prefix;
117
+ }
118
+ collectExport(t, node, src, lang, exportsSet);
119
+ collectImport(t, node, src, lang, importsSet);
120
+ collectApi(t, node, src, lang, apisSet, apiDetailsSet, currentPrefix);
121
+ for (let i = 0; i < node.childCount; i++) {
122
+ walk(node.child(i), src, lang, exportsSet, importsSet, apisSet, apiDetailsSet, currentPrefix);
123
+ }
124
+ }
125
+ /** 提取类级 @RequestMapping 前缀(class_declaration 头部,方法体之前) */
126
+ function extractClassPathPrefix(node, src) {
127
+ const txt = src.slice(node.startIndex, node.endIndex);
128
+ const m = txt.match(/@RequestMapping\s*\(\s*(?:value\s*=\s*)?"(\/[^"]*)"/);
129
+ return m ? m[1] : '';
130
+ }
131
+ /** 从节点文本中取名字(首个 identifier 类子节点) */
132
+ function nameOf(node) {
133
+ for (const c of node.namedChildren || []) {
134
+ if (['identifier', 'type_identifier', 'field_identifier', 'constant'].includes(c.type)) {
135
+ return c.text;
136
+ }
137
+ }
138
+ return '';
139
+ }
140
+ function collectExport(t, node, src, lang, out) {
141
+ let name = '';
142
+ if (lang === 'java' && ['class_declaration', 'interface_declaration', 'enum_declaration'].includes(t)) {
143
+ name = nameOf(node);
144
+ }
145
+ else if (lang === 'go' && t === 'type_declaration') {
146
+ // type_declaration 含 type_spec,取其 type_identifier
147
+ for (const c of node.namedChildren || []) {
148
+ if (c.type === 'type_spec') {
149
+ name = nameOf(c);
150
+ break;
151
+ }
152
+ }
153
+ }
154
+ else if (lang === 'go' && (t === 'function_declaration' || t === 'method_declaration')) {
155
+ name = nameOf(node);
156
+ if (name && name[0] !== name[0].toUpperCase())
157
+ name = ''; // 仅导出(首字母大写)
158
+ }
159
+ else if (lang === 'python' && ['class_definition', 'function_definition'].includes(t)) {
160
+ name = nameOf(node);
161
+ }
162
+ else if (lang === 'rust' && ['struct_item', 'enum_item', 'trait_item', 'function_item', 'impl_item'].includes(t)) {
163
+ name = nameOf(node);
164
+ }
165
+ if (name && !name.startsWith('_'))
166
+ out.add(name);
167
+ }
168
+ function collectImport(t, node, src, lang, out) {
169
+ if (lang === 'java' && t === 'import_declaration') {
170
+ // 去掉 import 与 ; 和 .* 通配
171
+ const txt = src.slice(node.startIndex, node.endIndex).replace(/^import\s+/, '').replace(/;\s*$/, '').trim();
172
+ if (txt)
173
+ out.add(txt);
174
+ }
175
+ else if (lang === 'go' && t === 'import_spec') {
176
+ const txt = src.slice(node.startIndex, node.endIndex).replace(/["`]/g, '').trim();
177
+ if (txt && !txt.includes('('))
178
+ out.add(txt);
179
+ }
180
+ else if (lang === 'python' && t === 'import_statement') {
181
+ // import a.b.c
182
+ for (const c of node.namedChildren || []) {
183
+ if (c.type === 'dotted_name') {
184
+ out.add(c.text);
185
+ break;
186
+ }
187
+ }
188
+ }
189
+ else if (lang === 'python' && t === 'import_from_statement') {
190
+ // from X import Y → 提取模块 X(而非符号 Y),避免把 Y 误当依赖
191
+ const txt = src.slice(node.startIndex, node.endIndex);
192
+ const m = txt.match(/^from\s+([\w.]+)\s+import\b/);
193
+ if (m)
194
+ out.add(m[1]);
195
+ }
196
+ else if (lang === 'rust' && t === 'use_declaration') {
197
+ const txt = src.slice(node.startIndex, node.endIndex).replace(/^use\s+/, '').replace(/;\s*$/, '').trim();
198
+ if (txt)
199
+ out.add(txt.split('::')[0]);
200
+ }
201
+ }
202
+ function collectApi(t, node, src, lang, out, detailOut, classPrefix = '') {
203
+ if (lang === 'java' && t === 'annotation') {
204
+ const txt = src.slice(node.startIndex, node.endIndex);
205
+ // @GetMapping("/path") / @RequestMapping("/path") / @RequestMapping(value="/path", method=POST)
206
+ const m = txt.match(/@(Get|Post|Put|Delete|Patch|Request)Mapping\s*\(\s*(?:value\s*=\s*)?"(\/[^"]*)"/);
207
+ if (m) {
208
+ const kind = m[1];
209
+ const rawPath = m[2];
210
+ if (kind === 'Request') {
211
+ // @RequestMapping:类级(路径==前缀,method=ANY)或方法级(method=XXX)
212
+ const isClassLevel = classPrefix && rawPath === classPrefix;
213
+ if (isClassLevel) {
214
+ out.add(rawPath);
215
+ detailOut.add(`ANY ${rawPath}`);
216
+ }
217
+ else {
218
+ const merged = mergePath(classPrefix, rawPath);
219
+ const methodMatch = txt.match(/method\s*=\s*\{?([A-Za-z.]+)/);
220
+ const method = methodMatch ? normalizeMethod(methodMatch[1]) : 'ANY';
221
+ out.add(merged);
222
+ detailOut.add(`${method} ${merged}`);
223
+ }
224
+ }
225
+ else {
226
+ // @GetMapping 等方法级注解:合并类级前缀
227
+ const merged = mergePath(classPrefix, rawPath);
228
+ out.add(merged);
229
+ detailOut.add(`${kind.toUpperCase()} ${merged}`);
230
+ }
231
+ }
232
+ }
233
+ else if (lang === 'python' && t === 'decorated_definition') {
234
+ const txt = src.slice(node.startIndex, node.endIndex);
235
+ const m = txt.match(/(?:router|app)\.(get|post|put|delete|patch|route)\s*\(\s*["'](\/[^"']*)["']/);
236
+ if (m) {
237
+ out.add(m[2]);
238
+ detailOut.add(`${m[1].toUpperCase()} ${m[2]}`);
239
+ }
240
+ }
241
+ else if (lang === 'go' && t === 'call_expression') {
242
+ const txt = src.slice(node.startIndex, node.endIndex);
243
+ const m = txt.match(/\.(GET|POST|PUT|DELETE|PATCH)\s*\(\s*"(\/[^"]*)"/);
244
+ if (m) {
245
+ out.add(m[2]);
246
+ detailOut.add(`${m[1]} ${m[2]}`);
247
+ }
248
+ }
249
+ // rust: actix 的 #[get("/path")] 少见,暂不处理
250
+ }
251
+ /** 合并类级前缀 + 方法级路径:/api/auth + /login → /api/auth/login */
252
+ function mergePath(prefix, path) {
253
+ if (!prefix)
254
+ return path;
255
+ if (!path)
256
+ return prefix;
257
+ if (path.startsWith(prefix))
258
+ return path; // 已是完整路径
259
+ return prefix.replace(/\/$/, '') + (path.startsWith('/') ? path : '/' + path);
260
+ }
261
+ /** 规范化 HTTP 方法:RequestMethod.POST → POST */
262
+ function normalizeMethod(m) {
263
+ const parts = m.split('.');
264
+ return parts[parts.length - 1].toUpperCase();
265
+ }
266
+ // ─────────────────────────────────────────────────────────────
267
+ // 结构化摘要(替代 analyze 里的 slice(0,N) 硬切原文)
268
+ // ─────────────────────────────────────────────────────────────
269
+ /**
270
+ * 用 tree-sitter 生成「结构化摘要」——只保留 imports / 符号 / 接口,
271
+ * 丢弃方法体,作为注入 AI 上下文的轻量替代,避免原文被按字符腰斩。
272
+ * 不支持的 lang 返回 null,调用方回退原文截断。
273
+ */
274
+ async function summarizeCode(content, lang) {
275
+ const ext = await extractWithTreeSitter(content, lang);
276
+ if (!ext)
277
+ return null;
278
+ const lines = [];
279
+ const lineCount = content.split(/\r?\n/).length;
280
+ lines.push(`# ${lang} · ${lineCount} 行`);
281
+ if (ext.imports.length)
282
+ lines.push(`imports: ${ext.imports.slice(0, 15).join(', ')}`);
283
+ if (ext.exports.length)
284
+ lines.push(`symbols: ${ext.exports.join(', ')}`);
285
+ if (ext.apiDetails.length)
286
+ lines.push(`apis: ${ext.apiDetails.join(', ')}`);
287
+ return lines.join('\n');
288
+ }
289
+ /**
290
+ * 批量生成结构化摘要:path→content 映射 → path→summary 映射。
291
+ * 只覆盖 tree-sitter 语言(java/go/python/rust),其余跳过(返回不含该 path)。
292
+ */
293
+ async function summarizeSources(contents) {
294
+ const result = {};
295
+ for (const [path, content] of Object.entries(contents)) {
296
+ const lang = langFromPath(path);
297
+ if (!lang)
298
+ continue;
299
+ const summary = await summarizeCode(content, lang);
300
+ if (summary)
301
+ result[path] = summary;
302
+ }
303
+ return result;
304
+ }
305
+ function langFromPath(path) {
306
+ const ext = (path.split('.').pop() || '').toLowerCase();
307
+ const map = { java: 'java', go: 'go', py: 'python', rs: 'rust' };
308
+ return map[ext] || '';
309
+ }
310
+ // ─────────────────────────────────────────────────────────────
311
+ // vue:抽取 <script> 块(供调用方按 js 处理)
312
+ // ─────────────────────────────────────────────────────────────
313
+ function extractVueScript(content) {
314
+ const m = content.match(/<script\b[^>]*>([\s\S]*?)<\/script>/i);
315
+ return m ? m[1] : '';
316
+ }
317
+ //# sourceMappingURL=multi-lang-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-lang-parser.js","sourceRoot":"","sources":["../../src/core/multi-lang-parser.ts"],"names":[],"mappings":"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"}
@@ -381,7 +381,7 @@ async function createAnalyzePipeline(iteration, cwd, options) {
381
381
  id: 'phase1-prompt',
382
382
  name: useFeatureBatches ? 'Phase 1: 全局索引文档生成' : 'Phase 1: 全局文档生成',
383
383
  next: 'phase1-done',
384
- subagent: 'spec-analyzer',
384
+ subagent: 'requirement-analyzer',
385
385
  contextType: 'full',
386
386
  // v8.3.167+: 大项目降低预算(只生成索引),小项目保持 10K
387
387
  contextBudget: useFeatureBatches ? 6000 : 10000,
@@ -389,7 +389,7 @@ async function createAnalyzePipeline(iteration, cwd, options) {
389
389
  id: 'phase1-done',
390
390
  name: 'Phase 1 完成检查',
391
391
  next: phase1NextId,
392
- subagent: 'spec-analyzer',
392
+ subagent: 'requirement-analyzer',
393
393
  contextType: 'incremental',
394
394
  contextBudget: 4000,
395
395
  });
@@ -407,7 +407,7 @@ async function createAnalyzePipeline(iteration, cwd, options) {
407
407
  name: `Phase 1b-${i + 1}: ${feature} 功能模块分析`,
408
408
  next: `feature-${feature}-done`,
409
409
  // v8.3.167+: 功能模块级 Subagent
410
- subagent: 'spec-analyzer',
410
+ subagent: 'requirement-analyzer',
411
411
  contextType: 'full',
412
412
  contextBudget: 10000,
413
413
  });
@@ -415,7 +415,7 @@ async function createAnalyzePipeline(iteration, cwd, options) {
415
415
  id: `feature-${feature}-done`,
416
416
  name: `${feature} 模块完成检查`,
417
417
  next: featureNextPromptId,
418
- subagent: 'spec-analyzer',
418
+ subagent: 'requirement-analyzer',
419
419
  contextType: 'incremental',
420
420
  contextBudget: 4000,
421
421
  });
@@ -428,7 +428,7 @@ async function createAnalyzePipeline(iteration, cwd, options) {
428
428
  id: 'contract-prompt',
429
429
  name: '契约先行: 跨端 API 契约定义',
430
430
  next: 'contract-done',
431
- subagent: 'spec-analyzer',
431
+ subagent: 'requirement-analyzer',
432
432
  contextType: 'contract-only',
433
433
  contextBudget: 6000,
434
434
  });
@@ -436,7 +436,7 @@ async function createAnalyzePipeline(iteration, cwd, options) {
436
436
  id: 'contract-done',
437
437
  name: '契约定义完成检查',
438
438
  next: platforms.length > 0 ? `platform-${platforms[0]}-prompt` : 'done',
439
- subagent: 'spec-analyzer',
439
+ subagent: 'requirement-analyzer',
440
440
  contextType: 'incremental',
441
441
  contextBudget: 4000,
442
442
  });
@@ -451,7 +451,7 @@ async function createAnalyzePipeline(iteration, cwd, options) {
451
451
  name: `Phase 2-${i + 1}: ${platform} 端专属文档生成`,
452
452
  next: `platform-${platform}-done`,
453
453
  // v8.3.166+: 端级 Subagent,每个端有独立的分析角色
454
- subagent: `spec-analyzer-${platform}`,
454
+ subagent: `requirement-analyzer-${platform}`,
455
455
  contextType: 'platform-only',
456
456
  contextBudget: 8000,
457
457
  });
@@ -459,7 +459,7 @@ async function createAnalyzePipeline(iteration, cwd, options) {
459
459
  id: `platform-${platform}-done`,
460
460
  name: `${platform} 端完成检查`,
461
461
  next: nextId,
462
- subagent: `spec-analyzer-${platform}`,
462
+ subagent: `requirement-analyzer-${platform}`,
463
463
  contextType: 'incremental',
464
464
  contextBudget: 4000,
465
465
  });
@@ -561,7 +561,7 @@ async function createExecutePipeline(iteration, task, cwd) {
561
561
  id: 'init',
562
562
  name: '初始化执行环境',
563
563
  next: 'prompt-analysis',
564
- subagent: 'spec-executor',
564
+ subagent: 'code-generator',
565
565
  contextType: 'incremental',
566
566
  contextBudget: 4000,
567
567
  },
@@ -569,7 +569,7 @@ async function createExecutePipeline(iteration, task, cwd) {
569
569
  id: 'prompt-analysis',
570
570
  name: 'AI分析任务需求,生成代码实现方案',
571
571
  next: 'code-generation',
572
- subagent: 'spec-executor',
572
+ subagent: 'code-generator',
573
573
  contextType: 'full',
574
574
  // v8.3.160+: 降为 10K(配合按需加载 REQ.md)
575
575
  contextBudget: 10000,
@@ -578,7 +578,7 @@ async function createExecutePipeline(iteration, task, cwd) {
578
578
  id: 'code-generation',
579
579
  name: '生成代码文件',
580
580
  next: 'quality-gate-build',
581
- subagent: 'spec-executor',
581
+ subagent: 'code-generator',
582
582
  contextType: 'incremental',
583
583
  contextBudget: 10000,
584
584
  },
@@ -630,7 +630,7 @@ async function createGlobalAnalyzePipeline(cwd) {
630
630
  id: 'init',
631
631
  name: '初始化全局分析环境',
632
632
  next: 'discovery',
633
- subagent: 'spec-global-analyzer',
633
+ subagent: 'global-analyzer',
634
634
  contextType: 'full',
635
635
  contextBudget: 6000,
636
636
  },
@@ -638,7 +638,7 @@ async function createGlobalAnalyzePipeline(cwd) {
638
638
  id: 'discovery',
639
639
  name: '发现所有迭代和项目',
640
640
  next: 'global-analysis',
641
- subagent: 'spec-global-analyzer',
641
+ subagent: 'global-analyzer',
642
642
  contextType: 'full',
643
643
  contextBudget: 8000,
644
644
  },
@@ -646,7 +646,7 @@ async function createGlobalAnalyzePipeline(cwd) {
646
646
  id: 'global-analysis',
647
647
  name: '分析跨迭代依赖关系',
648
648
  next: 'consistency-check',
649
- subagent: 'spec-global-analyzer',
649
+ subagent: 'global-analyzer',
650
650
  contextType: 'full',
651
651
  // v8.3.160+: 降为 10K(discovery 已提供迭代摘要,无需全量加载)
652
652
  contextBudget: 10000,
@@ -655,7 +655,7 @@ async function createGlobalAnalyzePipeline(cwd) {
655
655
  id: 'consistency-check',
656
656
  name: '检查全局一致性',
657
657
  next: 'report-generation',
658
- subagent: 'spec-global-analyzer',
658
+ subagent: 'global-analyzer',
659
659
  contextType: 'incremental',
660
660
  contextBudget: 8000,
661
661
  },
@@ -663,7 +663,7 @@ async function createGlobalAnalyzePipeline(cwd) {
663
663
  id: 'report-generation',
664
664
  name: '生成全局报告',
665
665
  next: 'done',
666
- subagent: 'spec-global-analyzer',
666
+ subagent: 'global-analyzer',
667
667
  contextType: 'incremental',
668
668
  contextBudget: 8000,
669
669
  },