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
@@ -1,12 +1,57 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.generateGlobalArtifacts = generateGlobalArtifacts;
4
37
  /**
5
- * global-artifacts — 全局分析时从源码反推技术栈、代码索引、需求框架
38
+ * global-artifacts — 全局分析时从源码反推技术栈、代码索引、架构、数据模型、接口清单、术语表
39
+ *
40
+ * v8.3.184+: 扩展为完整「全局技术分析文档集」
41
+ * - TECH_STACK.md / CODE_INDEX.md(技术栈 + 代码索引)
42
+ * - overview/ARCHITECTURE.md(端拓扑 + 模块依赖)
43
+ * - overview/API_INVENTORY.md(接口清单,含 HTTP 方法)
44
+ * - overview/DATA_MODEL.md(SQL 表 + Entity 类)
45
+ * - overview/GLOSSARY.md(术语表骨架 + 候选术语)
46
+ * - platforms/{端}/OVERVIEW.md + TECH.md(按端总览 + 技术方法)
47
+ *
48
+ * 数据来源:code-scanner 的 CodeIndex(files/endpoints/modules)+ code-graph 的 SQL schema 扫描。
49
+ * 架构边界:CLI 只做确定性提取 + 骨架,语义抽象(架构描述/术语定义/技术方法)由宿主 AI 完成。
6
50
  */
7
51
  const fs_extra_1 = require("fs-extra");
8
52
  const path_1 = require("path");
9
53
  const logger_1 = require("../utils/logger");
54
+ const code_scanner_1 = require("./code-scanner");
10
55
  /** 写入前检查冲突:内容不同则旧文件重命名为时间戳格式 */
11
56
  async function safeWrite(filePath, newContent) {
12
57
  if (await (0, fs_extra_1.pathExists)(filePath)) {
@@ -22,9 +67,25 @@ async function safeWrite(filePath, newContent) {
22
67
  }
23
68
  async function generateGlobalArtifacts(sources, depth) {
24
69
  const globalDir = (0, path_1.join)('.speccore', 'GLOBAL');
25
- await (0, fs_extra_1.ensureDir)(globalDir);
70
+ const overviewDir = (0, path_1.join)(globalDir, 'overview');
71
+ const platformsDir = (0, path_1.join)(globalDir, 'platforms');
72
+ const reqDir = (0, path_1.join)(globalDir, 'requirements');
73
+ await (0, fs_extra_1.ensureDir)(overviewDir);
74
+ await (0, fs_extra_1.ensureDir)(platformsDir);
75
+ await (0, fs_extra_1.ensureDir)(reqDir);
76
+ await (0, fs_extra_1.ensureDir)((0, path_1.join)(reqDir, 'images'));
77
+ await (0, fs_extra_1.ensureDir)((0, path_1.join)(reqDir, 'prototypes'));
26
78
  const now = new Date().toISOString().split('T')[0];
27
- // TECH_STACK.md
79
+ // 确保代码索引最新(复用 code-scanner)
80
+ let index = null;
81
+ try {
82
+ await (0, code_scanner_1.buildCodeIndex)(sources.length ? sources.join(',') : undefined, true);
83
+ index = await (0, code_scanner_1.loadFullIndex)();
84
+ }
85
+ catch (e) {
86
+ logger_1.logger.debug('代码索引构建失败(非关键):', e);
87
+ }
88
+ // 1. TECH_STACK.md
28
89
  const techStack = await detectTechStack(sources);
29
90
  await safeWrite((0, path_1.join)(globalDir, 'TECH_STACK.md'), [
30
91
  '# 统一技术栈注册表',
@@ -32,20 +93,26 @@ async function generateGlobalArtifacts(sources, depth) {
32
93
  '',
33
94
  techStack || '_未检测到明确的技术栈_',
34
95
  ].join('\n'));
35
- // CODE_INDEX.md
36
- await safeWrite((0, path_1.join)(globalDir, 'CODE_INDEX.md'), [
37
- '# 全局代码索引',
38
- '> 自动生成 | ' + now,
39
- '',
40
- '| 工程路径 | 语言 | 框架 | 说明 |',
41
- '| :--- | :--- | :--- | :--- |',
42
- ...sources.map(s => '| `' + s + '` | _待分析_ | _待分析_ | -- |'),
43
- ].join('\n'));
44
- // REQUIREMENT.md — v6.81.0+: 放到 requirements/ 目录下
45
- const reqDir = (0, path_1.join)(globalDir, 'requirements');
46
- await (0, fs_extra_1.ensureDir)(reqDir);
47
- await (0, fs_extra_1.ensureDir)((0, path_1.join)(reqDir, 'images'));
48
- await (0, fs_extra_1.ensureDir)((0, path_1.join)(reqDir, 'prototypes'));
96
+ // 2. CODE_INDEX.md
97
+ await safeWrite((0, path_1.join)(globalDir, 'CODE_INDEX.md'), buildCodeIndexDoc(index, sources, now));
98
+ // 3. overview/ARCHITECTURE.md
99
+ await safeWrite((0, path_1.join)(overviewDir, 'ARCHITECTURE.md'), buildArchitectureDoc(index, now));
100
+ // 4. overview/API_INVENTORY.md
101
+ await safeWrite((0, path_1.join)(overviewDir, 'API_INVENTORY.md'), buildApiInventoryDoc(index, now));
102
+ // 5. overview/DATA_MODEL.md
103
+ await safeWrite((0, path_1.join)(overviewDir, 'DATA_MODEL.md'), await buildDataModelDoc(index, now));
104
+ // 6. overview/GLOSSARY.md
105
+ await safeWrite((0, path_1.join)(overviewDir, 'GLOSSARY.md'), buildGlossaryDoc(index, now));
106
+ // 7. 按端 OVERVIEW.md + TECH.md
107
+ if (index && index.endpoints.length > 0) {
108
+ for (const ep of index.endpoints) {
109
+ const epDir = (0, path_1.join)(platformsDir, sanitize(ep.name));
110
+ await (0, fs_extra_1.ensureDir)(epDir);
111
+ await safeWrite((0, path_1.join)(epDir, 'OVERVIEW.md'), buildPlatformOverviewDoc(ep, index, now));
112
+ await safeWrite((0, path_1.join)(epDir, 'TECH.md'), buildPlatformTechDoc(ep, index, now));
113
+ }
114
+ }
115
+ // 8. requirements/REQUIREMENT.md(骨架,语义由 AI 或 --from-code 补全)
49
116
  await safeWrite((0, path_1.join)(reqDir, 'REQUIREMENT.md'), [
50
117
  '# 全局需求概览',
51
118
  '> 从源码反推 | ' + now,
@@ -54,9 +121,179 @@ async function generateGlobalArtifacts(sources, depth) {
54
121
  ...sources.map(s => '- `' + s + '`'),
55
122
  '',
56
123
  '## 待确认的功能模块',
57
- '> 请 AI 读取代码后补充各工程的核心功能模块',
124
+ '> 请 AI 读取代码后补充各工程的核心功能模块,或用 `speccore analyze --from-code` 自动反推。',
58
125
  ].join('\n'));
59
- logger_1.logger.info(' 📄 全局配置: TECH_STACK.md + CODE_INDEX.md + requirements/REQUIREMENT.md');
126
+ logger_1.logger.info(' 📄 全局技术分析: TECH_STACK + CODE_INDEX + ARCHITECTURE + API_INVENTORY + DATA_MODEL + GLOSSARY');
127
+ if (index && index.endpoints.length > 0) {
128
+ logger_1.logger.info(` 📄 按端文档: ${index.endpoints.map(e => e.name).join(', ')}(OVERVIEW + TECH)`);
129
+ }
130
+ }
131
+ // ── 各文档构建器(CLI 确定性提取 + 骨架)──
132
+ function buildCodeIndexDoc(index, sources, now) {
133
+ const lines = ['# 全局代码索引', '> 自动生成 | ' + now, ''];
134
+ if (!index || index.endpoints.length === 0) {
135
+ lines.push('| 工程路径 | 语言 | 框架 | 说明 |', '| :--- | :--- | :--- | :--- |');
136
+ sources.forEach(s => lines.push('| `' + s + '` | _待分析_ | _待分析_ | -- |'));
137
+ return lines.join('\n');
138
+ }
139
+ lines.push(`> 共 ${index.files.length} 个代码文件,${index.endpoints.length} 个端,${index.modules.length} 个模块`, '');
140
+ lines.push('## 端清单', '', '| 端 | 技术栈 | 文件数 | 入口 |', '| :--- | :--- | :--- | :--- |');
141
+ for (const ep of index.endpoints) {
142
+ lines.push(`| \`${ep.name}\` | ${ep.techStack || '_未知_'} | ${ep.fileCount} | \`${ep.entryFile || '_未检测_'}\` |`);
143
+ }
144
+ lines.push('');
145
+ lines.push('## 模块清单', '', '| 模块 | 端 | 文件数 | 核心文件 |', '| :--- | :--- | :--- | :--- |');
146
+ for (const m of index.modules.slice(0, 60)) {
147
+ lines.push(`| \`${m.name}\` | \`${m.endpoint}\` | ${m.fileCount} | ${m.coreFiles.slice(0, 2).map(f => '`' + f + '`').join(', ') || '—'} |`);
148
+ }
149
+ return lines.join('\n');
150
+ }
151
+ function buildArchitectureDoc(index, now) {
152
+ const lines = ['# 系统架构', '> 自动生成 | ' + now, ''];
153
+ if (!index || index.endpoints.length === 0) {
154
+ lines.push('> _未检测到代码索引,架构骨架待 AI 补充_');
155
+ return lines.join('\n');
156
+ }
157
+ lines.push('## 端拓扑', '', '| 端 | 技术栈 | 文件数 | 模块数 |', '| :--- | :--- | :--- | :--- |');
158
+ for (const ep of index.endpoints) {
159
+ const moduleCount = index.modules.filter(m => m.endpoint === ep.name).length;
160
+ lines.push(`| \`${ep.name}\` | ${ep.techStack || '_未知_'} | ${ep.fileCount} | ${moduleCount} |`);
161
+ }
162
+ lines.push('');
163
+ lines.push('## 模块依赖', '', '| 模块 | 端 | 依赖模块 |', '| :--- | :--- | :--- |');
164
+ for (const m of index.modules.slice(0, 60)) {
165
+ const deps = (m.dependencies || []).slice(0, 6);
166
+ lines.push(`| \`${m.name}\` | \`${m.endpoint}\` | ${deps.length ? deps.map(d => '`' + d + '`').join(', ') : '—'} |`);
167
+ }
168
+ lines.push('');
169
+ lines.push('## 架构描述(宿主 AI 补充)', '', '> ⚠️ 以下语义描述由宿主 AI 基于上面的确定性拓扑完成。', '', '### 系统分层', '', '_AI 填写:前后端分层、服务边界、数据流_', '', '### 跨端关系', '', '_AI 填写:各端如何协作(REST/消息/共享契约)_');
170
+ return lines.join('\n');
171
+ }
172
+ function buildApiInventoryDoc(index, now) {
173
+ const lines = ['# 接口清单', '> 自动生成 | ' + now, ''];
174
+ if (!index || index.files.length === 0) {
175
+ lines.push('> _未检测到接口,清单待 AI 补充_');
176
+ return lines.join('\n');
177
+ }
178
+ // 按端分组聚合 apiDetails("GET /path" 形式)
179
+ const byEndpoint = new Map();
180
+ for (const f of index.files) {
181
+ if (!f.apiDetails || f.apiDetails.length === 0)
182
+ continue;
183
+ if (!byEndpoint.has(f.endpoint))
184
+ byEndpoint.set(f.endpoint, new Map());
185
+ const apiMap = byEndpoint.get(f.endpoint);
186
+ for (const api of f.apiDetails) {
187
+ const [method, ...rest] = api.split(' ');
188
+ const path = rest.join(' ') || api;
189
+ if (!apiMap.has(path))
190
+ apiMap.set(path, []);
191
+ apiMap.get(path).push(method || 'ANY');
192
+ }
193
+ }
194
+ for (const [ep, apiMap] of byEndpoint) {
195
+ lines.push(`## ${ep}`, '', '| 方法 | 路径 |', '| :--- | :--- |');
196
+ const sorted = [...apiMap.entries()].sort((a, b) => a[1].length - b[1].length || a[0].localeCompare(b[0]));
197
+ for (const [path, methods] of sorted) {
198
+ lines.push(`| ${dedupe(methods).join('/')} | \`${path}\` |`);
199
+ }
200
+ lines.push('');
201
+ }
202
+ return lines.join('\n');
203
+ }
204
+ async function buildDataModelDoc(index, now) {
205
+ const lines = ['# 数据模型', '> 自动生成 | ' + now, ''];
206
+ // SQL 表(复用 code-graph 的扫描)
207
+ let tables = [];
208
+ try {
209
+ const { scanSqlSchemas } = await Promise.resolve().then(() => __importStar(require('./code-graph/multimodal')));
210
+ tables = await scanSqlSchemas(process.cwd());
211
+ }
212
+ catch { /* 无 SQL 或扫描失败 */ }
213
+ if (tables.length > 0) {
214
+ lines.push('## SQL 表', '', '| 表 | 列数 | 来源 |', '| :--- | :--- | :--- |');
215
+ for (const t of tables.slice(0, 40)) {
216
+ lines.push(`| \`${t.name}\` | ${t.columns.length} | \`${t.sourceFile}\` |`);
217
+ }
218
+ lines.push('');
219
+ }
220
+ // Entity/Model 类(从符号名启发式提取)
221
+ if (index) {
222
+ const entitySymbols = index.files
223
+ .filter(f => /entity|model|domain|po|vo|dto/i.test(f.path))
224
+ .flatMap(f => f.exports)
225
+ .filter(Boolean);
226
+ if (entitySymbols.length > 0) {
227
+ lines.push('## Entity / Model 类', '', '> 从源码符号启发式提取(含 entity/model/domain 目录的类)', '');
228
+ lines.push(dedupe(entitySymbols).slice(0, 50).map(s => '- `' + s + '`').join('\n'));
229
+ lines.push('');
230
+ }
231
+ }
232
+ if (tables.length === 0 && (!index || !index.files.some(f => /entity|model/i.test(f.path)))) {
233
+ lines.push('> _未检测到数据模型,待 AI 补充_');
234
+ }
235
+ lines.push('');
236
+ lines.push('## 数据关系(宿主 AI 补充)', '', '> ⚠️ 表间外键、聚合关系、多租户等语义由宿主 AI 完成。', '', '- _AI 填写:核心实体及关系_');
237
+ return lines.join('\n');
238
+ }
239
+ function buildGlossaryDoc(index, now) {
240
+ const lines = ['# 术语表', '> 自动生成 | ' + now, ''];
241
+ // 启发式候选术语:模块名 + 高频符号前缀(去掉技术词)
242
+ const candidates = new Set();
243
+ const stopWords = new Set(['controller', 'service', 'mapper', 'repository', 'manager', 'handler', 'util', 'utils', 'helper', 'config', 'entity', 'model', 'dto', 'vo', 'dao', 'impl', 'factory', 'builder', 'listener', 'filter', 'interceptor', 'aspect', 'component', 'view', 'page']);
244
+ if (index) {
245
+ for (const m of index.modules)
246
+ candidates.add(m.name);
247
+ for (const f of index.files) {
248
+ for (const sym of f.exports) {
249
+ const base = sym.replace(/(Controller|Service|Mapper|Repository|Manager|Handler|Util|Utils|Impl|DTO|VO|DAO|Entity|Model|View|Component)$/i, '');
250
+ if (base && base.length >= 2 && !stopWords.has(base.toLowerCase())) {
251
+ candidates.add(base);
252
+ }
253
+ }
254
+ }
255
+ }
256
+ lines.push('## 候选术语(CLI 启发式提取)', '');
257
+ if (candidates.size > 0) {
258
+ lines.push([...candidates].slice(0, 40).map(c => '- `' + c + '`').join('\n'));
259
+ }
260
+ else {
261
+ lines.push('> _未提取到候选术语_');
262
+ }
263
+ lines.push('');
264
+ lines.push('## 术语定义(宿主 AI 补充)', '', '> ⚠️ 每个术语的准确定义、别名、业务含义由宿主 AI 完成。', '', '| 术语 | 定义 | 别名 |', '| :--- | :--- | :--- |', '| _AI 填写_ | _AI 填写_ | _AI 填写_ |');
265
+ return lines.join('\n');
266
+ }
267
+ function buildPlatformOverviewDoc(ep, index, now) {
268
+ const modules = index.modules.filter(m => m.endpoint === ep.name);
269
+ const lines = ['# ' + ep.name + ' 总览', '> 自动生成 | ' + now, ''];
270
+ lines.push('## 职责', '', `_AI 填写:${ep.name} 端在系统中的作用_`, '');
271
+ lines.push('## 技术栈', '', ep.techStack || '_未知_', '');
272
+ if (ep.frameworks && ep.frameworks.length > 0) {
273
+ lines.push('### 框架', '', ep.frameworks.map(f => '- `' + f + '`').join('\n'), '');
274
+ }
275
+ lines.push('## 规模', '', `- 文件数: ${ep.fileCount}`, `- 模块数: ${modules.length}`, `- 入口: \`${ep.entryFile || '_未检测_'}\``, '');
276
+ lines.push('## 模块清单', '', '| 模块 | 文件数 | 核心文件 |', '| :--- | :--- | :--- |');
277
+ for (const m of modules.slice(0, 30)) {
278
+ lines.push(`| \`${m.name}\` | ${m.fileCount} | ${m.coreFiles.slice(0, 2).map(f => '`' + f + '`').join(', ') || '—'} |`);
279
+ }
280
+ lines.push('');
281
+ lines.push('## 与其他端的关系', '', '_AI 填写:本端如何与其他端协作_');
282
+ return lines.join('\n');
283
+ }
284
+ function buildPlatformTechDoc(ep, index, now) {
285
+ const modules = index.modules.filter(m => m.endpoint === ep.name);
286
+ const lines = ['# ' + ep.name + ' 技术方法', '> 自动生成 | ' + now, ''];
287
+ lines.push('## 架构分层', '', '> ⚠️ 分层规范由宿主 AI 基于本端技术栈补全(如 Controller→Service→Mapper)。', '', '- _AI 填写:分层职责与规范_', '');
288
+ lines.push('## 设计模式', '', '> 从源码重复结构识别(模式沉淀见 .speccore/PATTERNS/)。', '', '- _AI 填写:本端常用的设计模式及使用场景_', '');
289
+ lines.push('## 模块与依赖', '', '| 模块 | 依赖 |', '| :--- | :--- |');
290
+ for (const m of modules.slice(0, 40)) {
291
+ const deps = (m.dependencies || []).slice(0, 6);
292
+ lines.push(`| \`${m.name}\` | ${deps.length ? deps.map(d => '`' + d + '`').join(', ') : '—'} |`);
293
+ }
294
+ lines.push('');
295
+ lines.push('## 约定与规范', '', '> ⚠️ 命名、异常处理、事务、缓存等约定由宿主 AI 补全(参考全局 TECH_STACK + CONSTITUTION)。', '', '- _AI 填写_');
296
+ return lines.join('\n');
60
297
  }
61
298
  async function detectTechStack(sources) {
62
299
  const fs = require('fs');
@@ -99,4 +336,10 @@ async function detectTechStack(sources) {
99
336
  }
100
337
  return lines.join('\n') || '| 工程 | 语言 |\n| :--- | :--- |\n' + sources.map(s => '| ' + s + ' | 未检测到 |').join('\n');
101
338
  }
339
+ function dedupe(arr) {
340
+ return [...new Set(arr)];
341
+ }
342
+ function sanitize(id) {
343
+ return id.replace(/[^a-zA-Z0-9_-]/g, '-');
344
+ }
102
345
  //# sourceMappingURL=global-artifacts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"global-artifacts.js","sourceRoot":"","sources":["../../src/core/global-artifacts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"global-artifacts.js","sourceRoot":"","sources":["../../src/core/global-artifacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * global-retrieval.ts — 全局层聚合检索入口(RAG + 知识图谱)
3
+ *
4
+ * 把「RAG 关键词检索」和「知识图谱实体匹配」结合起来,提供全局层文档的
5
+ * 统一检索入口:
6
+ * 1. 图谱匹配:用查询关键词在知识图谱中定位实体(title/semanticTags/businessRole)
7
+ * 2. 邻居扩展:收集一阶关联实体,扩大上下文
8
+ * 3. RAG 检索:在全局索引中检索相关 chunk
9
+ * 4. 图谱加分重排:与图谱实体相关的 chunk 获得加分
10
+ *
11
+ * 复用 rag-engine.retrieveWithGraphContext(其 KGLiteGraph 与 KnowledgeGraph 结构兼容)。
12
+ * 检索失败时降级为纯 RAG 检索(retrieveRelevantChunks),保证可用。
13
+ *
14
+ * v8.3.184+
15
+ */
16
+ import { type DocumentChunk } from './rag-engine';
17
+ export interface GlobalSearchOptions {
18
+ /** 查询语句(需求关键词 / 实体名 / 模块名) */
19
+ query: string;
20
+ /** 最多返回几块,默认 5 */
21
+ topK?: number;
22
+ /** 按端过滤(如 ['backend','admin']) */
23
+ platforms?: string[];
24
+ /** 是否启用图谱加分,默认 true */
25
+ graphBoost?: boolean;
26
+ /** RAG 索引文件名,默认 rag-index-global.json */
27
+ fileName?: string;
28
+ }
29
+ export interface GlobalSearchResult {
30
+ query: string;
31
+ chunks: DocumentChunk[];
32
+ /** 匹配到的图谱实体标题(供追溯) */
33
+ matchedEntities: string[];
34
+ graphBoosted: boolean;
35
+ totalFound: number;
36
+ }
37
+ export declare function searchGlobalKnowledge(options: GlobalSearchOptions): Promise<GlobalSearchResult>;
38
+ //# sourceMappingURL=global-retrieval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-retrieval.d.ts","sourceRoot":"","sources":["../../src/core/global-retrieval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAkE,KAAK,aAAa,EAAiB,MAAM,cAAc,CAAC;AAGjI,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,uBAAuB;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,sBAAsB;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0CrG"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ /**
3
+ * global-retrieval.ts — 全局层聚合检索入口(RAG + 知识图谱)
4
+ *
5
+ * 把「RAG 关键词检索」和「知识图谱实体匹配」结合起来,提供全局层文档的
6
+ * 统一检索入口:
7
+ * 1. 图谱匹配:用查询关键词在知识图谱中定位实体(title/semanticTags/businessRole)
8
+ * 2. 邻居扩展:收集一阶关联实体,扩大上下文
9
+ * 3. RAG 检索:在全局索引中检索相关 chunk
10
+ * 4. 图谱加分重排:与图谱实体相关的 chunk 获得加分
11
+ *
12
+ * 复用 rag-engine.retrieveWithGraphContext(其 KGLiteGraph 与 KnowledgeGraph 结构兼容)。
13
+ * 检索失败时降级为纯 RAG 检索(retrieveRelevantChunks),保证可用。
14
+ *
15
+ * v8.3.184+
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.searchGlobalKnowledge = searchGlobalKnowledge;
19
+ const rag_engine_1 = require("./rag-engine");
20
+ const knowledge_graph_1 = require("./knowledge-graph");
21
+ async function searchGlobalKnowledge(options) {
22
+ const { query, topK = 5, platforms, graphBoost = true, fileName = 'rag-index-global.json' } = options;
23
+ const cwd = process.cwd();
24
+ // 1. 加载全局 RAG 索引
25
+ let index = null;
26
+ try {
27
+ index = await (0, rag_engine_1.loadRagIndex)(cwd, fileName);
28
+ }
29
+ catch { /* 索引不存在或损坏 */ }
30
+ if (!index || index.chunks.length === 0) {
31
+ return { query, chunks: [], matchedEntities: [], graphBoosted: false, totalFound: 0 };
32
+ }
33
+ // 2. 加载知识图谱(可选)
34
+ let graph = null;
35
+ if (graphBoost) {
36
+ try {
37
+ graph = await (0, knowledge_graph_1.loadKnowledgeGraph)(cwd);
38
+ }
39
+ catch { /* 图谱不存在或损坏 */ }
40
+ }
41
+ // 3. 检索(图谱加分优先,降级纯 RAG)
42
+ const retrOpts = { query, topK, platforms };
43
+ let chunks;
44
+ let matchedEntities = [];
45
+ if (graph && graph.entities && Object.keys(graph.entities).length > 0) {
46
+ matchedEntities = matchEntities(query, graph);
47
+ // retrieveWithGraphContext 期望 KGLiteGraph(结构兼容 KnowledgeGraph),类型断言
48
+ chunks = (0, rag_engine_1.retrieveWithGraphContext)(index, graph, retrOpts);
49
+ }
50
+ else {
51
+ chunks = (0, rag_engine_1.retrieveRelevantChunks)(index, retrOpts);
52
+ }
53
+ return {
54
+ query,
55
+ chunks,
56
+ matchedEntities,
57
+ graphBoosted: !!(graph && Object.keys(graph.entities).length > 0),
58
+ totalFound: chunks.length,
59
+ };
60
+ }
61
+ /** 用查询关键词匹配图谱实体(返回实体标题) */
62
+ function matchEntities(query, graph) {
63
+ const keywords = extractKeywords(query);
64
+ if (keywords.length === 0)
65
+ return [];
66
+ const matched = [];
67
+ for (const entity of Object.values(graph.entities)) {
68
+ const haystack = `${entity.title} ${entity.semanticTags?.join(' ') || ''} ${entity.businessRole || ''} ${entity.description || ''}`.toLowerCase();
69
+ let score = 0;
70
+ for (const kw of keywords) {
71
+ const lk = kw.toLowerCase();
72
+ if (entity.title.toLowerCase().includes(lk))
73
+ score += 3;
74
+ else if (entity.semanticTags?.some((t) => t.toLowerCase().includes(lk)))
75
+ score += 2;
76
+ else if (haystack.includes(lk))
77
+ score += 1;
78
+ }
79
+ if (score > 0)
80
+ matched.push({ title: entity.title, score });
81
+ }
82
+ return matched.sort((a, b) => b.score - a.score).slice(0, 10).map(m => m.title);
83
+ }
84
+ /** 简单关键词提取(英文分词 + 中文 2 字窗口) */
85
+ function extractKeywords(text) {
86
+ const result = new Set();
87
+ const cleaned = text.toLowerCase().replace(/[^\w\u4e00-\u9fa5]+/g, ' ').trim();
88
+ for (const p of cleaned.split(/\s+/)) {
89
+ if (p.length >= 2)
90
+ result.add(p);
91
+ }
92
+ // 中文无空格时做 2 字滑动窗口
93
+ const chinese = text.replace(/[^\u4e00-\u9fa5]+/g, '');
94
+ if (chinese.length >= 2 && !/\s/.test(text)) {
95
+ for (let i = 0; i < chinese.length - 1; i++)
96
+ result.add(chinese.slice(i, i + 2));
97
+ }
98
+ return [...result];
99
+ }
100
+ //# sourceMappingURL=global-retrieval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-retrieval.js","sourceRoot":"","sources":["../../src/core/global-retrieval.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * html-prototype.ts — HTML 原型渲染(Playwright 截图 + aria snapshot)
3
+ *
4
+ * 目的:把 HTML 原型变成「视觉产物」+「语义结构」两条产物,替代 extractHtmlText 纯文本。
5
+ * - 截图 PNG → 多模态宿主直看(CSS 样式、空间布局都在)
6
+ * - aria snapshot → 纯文本宿主读(YAML 格式的 ARIA 树:role + name + 层级)
7
+ *
8
+ * 失败兜底:Playwright 浏览器未安装 / 渲染异常时返回 null,调用方降级 extractHtmlText。
9
+ */
10
+ export interface HtmlPrototype {
11
+ /** 截图 PNG 绝对路径(多模态用) */
12
+ screenshotPath: string | null;
13
+ /** ARIA 树文本(YAML,纯文本用) */
14
+ accessibilityTree: string | null;
15
+ }
16
+ /**
17
+ * 渲染 HTML 原型:截图 + aria snapshot。
18
+ * @param htmlPath 本地 HTML 文件路径
19
+ * @param outputDir 截图输出目录(默认 .speccore/cache/prototypes/)
20
+ */
21
+ export declare function renderHtmlPrototype(htmlPath: string, outputDir?: string): Promise<HtmlPrototype | null>;
22
+ //# sourceMappingURL=html-prototype.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-prototype.d.ts","sourceRoot":"","sources":["../../src/core/html-prototype.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,MAAM,WAAW,aAAa;IAC5B,wBAAwB;IACxB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,0BAA0B;IAC1B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAmC/B"}