speccore 5.4.3 → 5.4.4

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 (113) hide show
  1. package/README.en.md +1 -1
  2. package/README.md +1 -1
  3. package/dist/cli.js +8 -1
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/audit.d.ts +10 -0
  6. package/dist/commands/audit.d.ts.map +1 -0
  7. package/dist/commands/audit.js +278 -0
  8. package/dist/commands/audit.js.map +1 -0
  9. package/dist/commands/baseline.d.ts +13 -0
  10. package/dist/commands/baseline.d.ts.map +1 -0
  11. package/dist/commands/baseline.js +227 -0
  12. package/dist/commands/baseline.js.map +1 -0
  13. package/dist/commands/bugfix.d.ts +13 -0
  14. package/dist/commands/bugfix.d.ts.map +1 -0
  15. package/dist/commands/bugfix.js +181 -0
  16. package/dist/commands/bugfix.js.map +1 -0
  17. package/dist/commands/change.d.ts +14 -0
  18. package/dist/commands/change.d.ts.map +1 -0
  19. package/dist/commands/change.js +208 -0
  20. package/dist/commands/change.js.map +1 -0
  21. package/dist/commands/context.d.ts +8 -0
  22. package/dist/commands/context.d.ts.map +1 -0
  23. package/dist/commands/context.js +180 -0
  24. package/dist/commands/context.js.map +1 -0
  25. package/dist/commands/dashboard.d.ts +9 -0
  26. package/dist/commands/dashboard.d.ts.map +1 -0
  27. package/dist/commands/dashboard.js +209 -0
  28. package/dist/commands/dashboard.js.map +1 -0
  29. package/dist/commands/demo.d.ts +10 -0
  30. package/dist/commands/demo.d.ts.map +1 -0
  31. package/dist/commands/demo.js +151 -0
  32. package/dist/commands/demo.js.map +1 -0
  33. package/dist/commands/global-status.d.ts +9 -0
  34. package/dist/commands/global-status.d.ts.map +1 -0
  35. package/dist/commands/global-status.js +135 -0
  36. package/dist/commands/global-status.js.map +1 -0
  37. package/dist/commands/goal.d.ts +15 -0
  38. package/dist/commands/goal.d.ts.map +1 -0
  39. package/dist/commands/goal.js +232 -0
  40. package/dist/commands/goal.js.map +1 -0
  41. package/dist/commands/handover.d.ts +11 -0
  42. package/dist/commands/handover.d.ts.map +1 -0
  43. package/dist/commands/handover.js +169 -0
  44. package/dist/commands/handover.js.map +1 -0
  45. package/dist/commands/help.d.ts +10 -0
  46. package/dist/commands/help.d.ts.map +1 -0
  47. package/dist/commands/help.js +93 -0
  48. package/dist/commands/help.js.map +1 -0
  49. package/dist/commands/history.d.ts +9 -0
  50. package/dist/commands/history.d.ts.map +1 -0
  51. package/dist/commands/history.js +87 -0
  52. package/dist/commands/history.js.map +1 -0
  53. package/dist/commands/impact.d.ts +12 -0
  54. package/dist/commands/impact.d.ts.map +1 -0
  55. package/dist/commands/impact.js +238 -0
  56. package/dist/commands/impact.js.map +1 -0
  57. package/dist/commands/index-update.d.ts +8 -0
  58. package/dist/commands/index-update.d.ts.map +1 -0
  59. package/dist/commands/index-update.js +180 -0
  60. package/dist/commands/index-update.js.map +1 -0
  61. package/dist/commands/iteration-from-global.d.ts +11 -0
  62. package/dist/commands/iteration-from-global.d.ts.map +1 -0
  63. package/dist/commands/iteration-from-global.js +294 -0
  64. package/dist/commands/iteration-from-global.js.map +1 -0
  65. package/dist/commands/new-task.d.ts +15 -0
  66. package/dist/commands/new-task.d.ts.map +1 -0
  67. package/dist/commands/new-task.js +208 -0
  68. package/dist/commands/new-task.js.map +1 -0
  69. package/dist/commands/platform-add.d.ts +12 -0
  70. package/dist/commands/platform-add.d.ts.map +1 -0
  71. package/dist/commands/platform-add.js +111 -0
  72. package/dist/commands/platform-add.js.map +1 -0
  73. package/dist/commands/rename.d.ts +14 -0
  74. package/dist/commands/rename.d.ts.map +1 -0
  75. package/dist/commands/rename.js +298 -0
  76. package/dist/commands/rename.js.map +1 -0
  77. package/dist/commands/research.d.ts +14 -0
  78. package/dist/commands/research.d.ts.map +1 -0
  79. package/dist/commands/research.js +181 -0
  80. package/dist/commands/research.js.map +1 -0
  81. package/dist/commands/retro.d.ts +10 -0
  82. package/dist/commands/retro.d.ts.map +1 -0
  83. package/dist/commands/retro.js +130 -0
  84. package/dist/commands/retro.js.map +1 -0
  85. package/dist/commands/spec.d.ts +8 -0
  86. package/dist/commands/spec.d.ts.map +1 -0
  87. package/dist/commands/spec.js +155 -0
  88. package/dist/commands/spec.js.map +1 -0
  89. package/dist/commands/sync-global.d.ts +13 -0
  90. package/dist/commands/sync-global.d.ts.map +1 -0
  91. package/dist/commands/sync-global.js +218 -0
  92. package/dist/commands/sync-global.js.map +1 -0
  93. package/dist/commands/sync.d.ts +13 -0
  94. package/dist/commands/sync.d.ts.map +1 -0
  95. package/dist/commands/sync.js +216 -0
  96. package/dist/commands/sync.js.map +1 -0
  97. package/dist/commands/template-add.d.ts +12 -0
  98. package/dist/commands/template-add.d.ts.map +1 -0
  99. package/dist/commands/template-add.js +65 -0
  100. package/dist/commands/template-add.js.map +1 -0
  101. package/dist/commands/welcome.d.ts +9 -0
  102. package/dist/commands/welcome.d.ts.map +1 -0
  103. package/dist/commands/welcome.js +166 -0
  104. package/dist/commands/welcome.js.map +1 -0
  105. package/dist/core/global-layer.d.ts +124 -0
  106. package/dist/core/global-layer.d.ts.map +1 -0
  107. package/dist/core/global-layer.js +456 -0
  108. package/dist/core/global-layer.js.map +1 -0
  109. package/dist/core/intent-recognition.d.ts +48 -0
  110. package/dist/core/intent-recognition.d.ts.map +1 -0
  111. package/dist/core/intent-recognition.js +524 -0
  112. package/dist/core/intent-recognition.js.map +1 -0
  113. package/package.json +1 -1
@@ -0,0 +1,456 @@
1
+ "use strict";
2
+ /**
3
+ * GLOBAL 全量层管理核心模块
4
+ * 负责管理 GLOBAL/ 目录下的全量需求索引、项目映射、期次关联
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.readGlobalIndex = readGlobalIndex;
8
+ exports.getNextReqId = getNextReqId;
9
+ exports.bumpGlobalVersion = bumpGlobalVersion;
10
+ exports.appendReqToIndex = appendReqToIndex;
11
+ exports.updateReqInIndex = updateReqInIndex;
12
+ exports.upsertProjectInIndex = upsertProjectInIndex;
13
+ exports.appendIterationLink = appendIterationLink;
14
+ exports.updateIndexVersion = updateIndexVersion;
15
+ exports.ensureProjectDir = ensureProjectDir;
16
+ exports.writeProjectRequirements = writeProjectRequirements;
17
+ exports.writeProjectMetadata = writeProjectMetadata;
18
+ exports.readRequirementDetail = readRequirementDetail;
19
+ exports.diffRequirements = diffRequirements;
20
+ exports.listProjectDirs = listProjectDirs;
21
+ exports.getGlobalDir = getGlobalDir;
22
+ exports.getIndexPath = getIndexPath;
23
+ exports.getProjectReqPath = getProjectReqPath;
24
+ exports.getProjectMetaPath = getProjectMetaPath;
25
+ const fs_extra_1 = require("fs-extra");
26
+ const path_1 = require("path");
27
+ // ============================================================
28
+ // 路径工具
29
+ // ============================================================
30
+ function getGlobalDir() {
31
+ return (0, path_1.join)(process.cwd(), '.speccore', 'GLOBAL');
32
+ }
33
+ function getIndexPath() {
34
+ return (0, path_1.join)(getGlobalDir(), 'INDEX.md');
35
+ }
36
+ function getProjectReqPath(project) {
37
+ return (0, path_1.join)(getGlobalDir(), 'PROJECTS', project, 'REQUIREMENT.md');
38
+ }
39
+ function getProjectMetaPath(project) {
40
+ return (0, path_1.join)(getGlobalDir(), 'PROJECTS', project, 'METADATA.md');
41
+ }
42
+ // ============================================================
43
+ // INDEX.md 读写
44
+ // ============================================================
45
+ /**
46
+ * 解析 GLOBAL/INDEX.md
47
+ */
48
+ async function readGlobalIndex() {
49
+ const indexPath = getIndexPath();
50
+ if (!(await (0, fs_extra_1.pathExists)(indexPath))) {
51
+ return { reqs: [], projects: [], iterations: [], version: 'v1.0', lastUpdated: '' };
52
+ }
53
+ const content = await (0, fs_extra_1.readFile)(indexPath, 'utf-8');
54
+ const index = { reqs: [], projects: [], iterations: [], version: 'v1.0', lastUpdated: '' };
55
+ // 解析需求索引表
56
+ const reqTableMatch = content.match(/\| 需求 ID \|[\s\S]*?(?=\n\n---|$)/);
57
+ if (reqTableMatch) {
58
+ const lines = reqTableMatch[0].split('\n');
59
+ for (const line of lines) {
60
+ const cols = line.split('|').map((c) => c.trim());
61
+ if (line.includes(':---'))
62
+ continue;
63
+ if (cols.length >= 9 && cols[1] && cols[1].match(/^REQ-\d+$/)) {
64
+ index.reqs.push({
65
+ id: cols[1],
66
+ project: cols[2],
67
+ name: cols[3],
68
+ status: cols[4],
69
+ version: cols[5],
70
+ iteration: cols[6] === '-' ? '' : cols[6],
71
+ task: cols[7] === '-' ? '' : cols[7],
72
+ filePath: cols[8],
73
+ });
74
+ }
75
+ }
76
+ }
77
+ // 解析项目列表
78
+ const projTableMatch = content.match(/\| 项目名称 \|[\s\S]*?(?=\n\n---|$)/);
79
+ if (projTableMatch) {
80
+ const lines = projTableMatch[0].split('\n');
81
+ for (const line of lines) {
82
+ const cols = line.split('|').map((c) => c.trim());
83
+ // Skip separator lines (all colons and dashes)
84
+ if (line.includes(':---'))
85
+ continue;
86
+ if (cols.length >= 8 && cols[1] && cols[1] !== '_暂无项目_' && cols[1] !== '项目名称') {
87
+ index.projects.push({
88
+ name: cols[1],
89
+ type: cols[2],
90
+ reqCount: parseInt(cols[3]) || 0,
91
+ implemented: parseInt(cols[4]) || 0,
92
+ inProgress: parseInt(cols[5]) || 0,
93
+ pending: parseInt(cols[6]) || 0,
94
+ lastImport: cols[7],
95
+ });
96
+ }
97
+ }
98
+ }
99
+ // 解析期次关联
100
+ const iterTableMatch = content.match(/\| 期次名称 \|[\s\S]*?(?=\n\n---|$)/);
101
+ if (iterTableMatch) {
102
+ const lines = iterTableMatch[0].split('\n');
103
+ for (const line of lines) {
104
+ const cols = line.split('|').map((c) => c.trim());
105
+ if (line.includes(':---'))
106
+ continue;
107
+ if (cols.length >= 5 && cols[1] && cols[1] !== '_暂无期次_' && cols[1] !== '期次名称') {
108
+ index.iterations.push({
109
+ name: cols[1],
110
+ reqs: cols[2].split(',').map((r) => r.trim()),
111
+ status: cols[3],
112
+ createdAt: cols[4],
113
+ });
114
+ }
115
+ }
116
+ }
117
+ // 解析版本信息
118
+ const verMatch = content.match(/\| v(\d+\.\d+) \| ([^|]+) \|/);
119
+ if (verMatch) {
120
+ index.version = `v${verMatch[1]}`;
121
+ index.lastUpdated = verMatch[2].trim();
122
+ }
123
+ return index;
124
+ }
125
+ /**
126
+ * 获取下一个需求编号
127
+ */
128
+ function getNextReqId(index) {
129
+ let maxNum = 0;
130
+ for (const req of index.reqs) {
131
+ const match = req.id.match(/REQ-(\d+)/);
132
+ if (match) {
133
+ maxNum = Math.max(maxNum, parseInt(match[1], 10));
134
+ }
135
+ }
136
+ return `REQ-${String(maxNum + 1).padStart(3, '0')}`;
137
+ }
138
+ /**
139
+ * 递增全局版本号
140
+ */
141
+ function bumpGlobalVersion(currentVersion) {
142
+ const match = currentVersion.match(/v(\d+)\.(\d+)/);
143
+ if (match) {
144
+ const major = parseInt(match[1]);
145
+ const minor = parseInt(match[2]);
146
+ return `v${major}.${minor + 1}`;
147
+ }
148
+ return 'v1.1';
149
+ }
150
+ /**
151
+ * 追加需求条目到 INDEX.md 的需求索引表
152
+ */
153
+ async function appendReqToIndex(entry) {
154
+ const indexPath = getIndexPath();
155
+ let content = await (0, fs_extra_1.readFile)(indexPath, 'utf-8');
156
+ const newLine = `| ${entry.id} | ${entry.project} | ${entry.name} | ${entry.status} | ${entry.version} | ${entry.iteration || '-'} | ${entry.task || '-'} | \`${entry.filePath}\` |`;
157
+ // 如果存在占位行,替换第一条占位行
158
+ if (content.includes('_暂无需求_')) {
159
+ content = content.replace('| _暂无需求_ | - | - | - | - | - | - | - |', newLine);
160
+ }
161
+ else {
162
+ // 在需求索引表最后一行后追加(就在分隔线前)
163
+ const insertPoint = content.lastIndexOf('| _暂无需求_');
164
+ if (insertPoint === -1) {
165
+ // 找到表格最后一行数据
166
+ const tableEnd = content.indexOf('\n\n---', content.indexOf('| 需求 ID |'));
167
+ if (tableEnd > 0) {
168
+ content = content.slice(0, tableEnd) + '\n' + newLine + content.slice(tableEnd);
169
+ }
170
+ }
171
+ }
172
+ await (0, fs_extra_1.writeFile)(indexPath, content);
173
+ }
174
+ /**
175
+ * 更新 INDEX.md 中需求条目的状态、版本等信息
176
+ */
177
+ async function updateReqInIndex(reqId, updates) {
178
+ const indexPath = getIndexPath();
179
+ let content = await (0, fs_extra_1.readFile)(indexPath, 'utf-8');
180
+ const lines = content.split('\n');
181
+ const newLines = [];
182
+ for (const line of lines) {
183
+ if (line.includes(`| ${reqId} |`)) {
184
+ const cols = line.split('|').map((c) => c.trim());
185
+ // cols[0]是空, cols[1]是需求ID, cols[2]是项目, cols[3]是名称
186
+ // cols[4]是状态, cols[5]是版本, cols[6]是关联期次, cols[7]是关联Task, cols[8]是文件路径
187
+ if (cols.length >= 9 && cols[1] === reqId) {
188
+ if (updates.status)
189
+ cols[4] = updates.status;
190
+ if (updates.version)
191
+ cols[5] = updates.version;
192
+ if (updates.iteration !== undefined)
193
+ cols[6] = updates.iteration || '-';
194
+ if (updates.task !== undefined)
195
+ cols[7] = updates.task || '-';
196
+ if (updates.name)
197
+ cols[3] = updates.name;
198
+ newLines.push(`| ${cols[1]} | ${cols[2]} | ${cols[3]} | ${cols[4]} | ${cols[5]} | ${cols[6]} | ${cols[7]} | ${cols[8]} |`);
199
+ continue;
200
+ }
201
+ }
202
+ newLines.push(line);
203
+ }
204
+ await (0, fs_extra_1.writeFile)(indexPath, newLines.join('\n'));
205
+ }
206
+ /**
207
+ * 追加项目条目到 INDEX.md
208
+ */
209
+ async function upsertProjectInIndex(project) {
210
+ const indexPath = getIndexPath();
211
+ let content = await (0, fs_extra_1.readFile)(indexPath, 'utf-8');
212
+ const newLine = `| ${project.name} | ${project.type} | ${project.reqCount} | ${project.implemented} | ${project.inProgress} | ${project.pending} | ${project.lastImport} |`;
213
+ // 只在项目列表表格区域内查找
214
+ const projSectionStart = content.indexOf('## 项目列表');
215
+ const projSectionEnd = content.indexOf('\n---', projSectionStart);
216
+ const projSection = projSectionStart >= 0
217
+ ? content.substring(projSectionStart, projSectionEnd > projSectionStart ? projSectionEnd : undefined)
218
+ : '';
219
+ // 检查项目列表区是否已有该项目(同时匹配名称和类型,避免与需求表混淆)
220
+ const hasProjectLine = projSection.split('\n').some((line) => line.trim().startsWith(`| ${project.name} |`) && line.includes(`| ${project.type} |`));
221
+ if (hasProjectLine) {
222
+ // 更新已有项目条目
223
+ const lines = content.split('\n');
224
+ const newLines = [];
225
+ for (const line of lines) {
226
+ if (line.trim().startsWith(`| ${project.name} |`) && line.includes(`| ${project.type} |`)) {
227
+ newLines.push(newLine);
228
+ }
229
+ else {
230
+ newLines.push(line);
231
+ }
232
+ }
233
+ content = newLines.join('\n');
234
+ }
235
+ else if (content.includes('_暂无项目_')) {
236
+ // 替换占位行
237
+ content = content.replace(/\| _暂无项目_ \| - \| - \| - \| - \| - \| - \|/, newLine);
238
+ }
239
+ else {
240
+ // 在项目表格最后一行后追加
241
+ const lastRowEnd = projSectionEnd > 0 ? projSectionEnd : content.length;
242
+ content = content.slice(0, lastRowEnd) + '\n' + newLine + content.slice(lastRowEnd);
243
+ }
244
+ await (0, fs_extra_1.writeFile)(indexPath, content);
245
+ }
246
+ /**
247
+ * 追加期次关联到 INDEX.md
248
+ */
249
+ async function appendIterationLink(link) {
250
+ const indexPath = getIndexPath();
251
+ let content = await (0, fs_extra_1.readFile)(indexPath, 'utf-8');
252
+ const reqsStr = link.reqs.join(',');
253
+ const newLine = `| ${link.name} | ${reqsStr} | ${link.status} | ${link.createdAt} |`;
254
+ if (content.includes('_暂无期次_')) {
255
+ content = content.replace(/\| _暂无期次_ \| - \| - \| - \|/, newLine);
256
+ }
257
+ else {
258
+ // 在期次关联表格后面追加
259
+ const iterSectionStart = content.indexOf('## 期次关联');
260
+ const iterSectionEnd = content.indexOf('\n---', iterSectionStart);
261
+ const insertPos = iterSectionEnd > iterSectionStart ? iterSectionEnd : content.length;
262
+ content = content.slice(0, insertPos) + '\n' + newLine + content.slice(insertPos);
263
+ }
264
+ await (0, fs_extra_1.writeFile)(indexPath, content);
265
+ }
266
+ /**
267
+ * 更新 INDEX.md 版本信息
268
+ */
269
+ async function updateIndexVersion(version) {
270
+ const indexPath = getIndexPath();
271
+ let content = await (0, fs_extra_1.readFile)(indexPath, 'utf-8');
272
+ const today = new Date().toISOString().split('T')[0];
273
+ // 更新最后的版本行
274
+ const newVerLine = `| ${version} | ${today} | 自动更新 |`;
275
+ const lines = content.split('\n');
276
+ const newLines = [];
277
+ let foundVersion = false;
278
+ for (const line of lines) {
279
+ if (line.match(/^\| v\d+\.\d+ \|/) && !foundVersion) {
280
+ newLines.push(newVerLine);
281
+ foundVersion = true;
282
+ }
283
+ else {
284
+ newLines.push(line);
285
+ }
286
+ }
287
+ await (0, fs_extra_1.writeFile)(indexPath, newLines.join('\n'));
288
+ }
289
+ // ============================================================
290
+ // 项目管理
291
+ // ============================================================
292
+ /**
293
+ * 确保项目目录存在
294
+ */
295
+ async function ensureProjectDir(project) {
296
+ const projDir = (0, path_1.join)(getGlobalDir(), 'PROJECTS', project);
297
+ await (0, fs_extra_1.ensureDir)(projDir);
298
+ }
299
+ /**
300
+ * 写入项目需求文档
301
+ */
302
+ async function writeProjectRequirements(project, projectType, requirements, techStack = '') {
303
+ const reqPath = getProjectReqPath(project);
304
+ const today = new Date().toISOString().split('T')[0];
305
+ const entries = [];
306
+ let content = `# ${project} - 需求文档
307
+
308
+ > 本文件仅包含本项目需求。跨项目引用请通过 \`GLOBAL/INDEX.md\` 映射。
309
+ > 最后更新:${today}
310
+
311
+ ---
312
+
313
+ ## 项目信息
314
+
315
+ | 属性 | 值 |
316
+ | :--- | :--- |
317
+ | 项目名称 | ${project} |
318
+ | 项目类型 | ${projectType} |
319
+ | 技术栈 | ${techStack || '待补充'} |
320
+ | 负责人 | 待补充 |
321
+
322
+ ---
323
+
324
+ ## 需求列表
325
+
326
+ `;
327
+ for (const req of requirements) {
328
+ const reqId = req.id;
329
+ content += `### ${reqId}:${req.name}
330
+
331
+ > **元数据(Metadata)**
332
+ > | 字段 | 值 |
333
+ > | :--- | :--- |
334
+ > | 来源 | \`speccore import\` \\| 项目:${project} \\| 导入时间:${today} |
335
+ > | 当前版本 | v1.0 |
336
+ > | 状态 | 📦 已有实现 |
337
+ > | 最后修改 | ${today} \\| 修改人:SpecCore |
338
+ > | 关联期次 | - |
339
+ > | 关联 Task | - |
340
+
341
+ **需求描述**
342
+ ${req.description || '从代码分析提取的需求描述'}
343
+
344
+ **验收标准**
345
+ - [ ] 功能验收
346
+ - [ ] 性能验收
347
+ - [ ] 安全验收
348
+
349
+ **📝 变更历史(Changelog)**
350
+ | 版本 | 日期 | 变更内容 | 变更来源 | 修改人 |
351
+ | :--- | :--- | :--- | :--- | :--- |
352
+ | v1.0 | ${today} | 初始创建:从 ${project} 代码导入 | \`speccore import\` | SpecCore |
353
+
354
+ `;
355
+ entries.push({
356
+ id: reqId,
357
+ project,
358
+ name: req.name,
359
+ status: '📦 已有实现',
360
+ version: 'v1.0',
361
+ iteration: '',
362
+ task: '',
363
+ filePath: `PROJECTS/${project}/REQUIREMENT.md`,
364
+ });
365
+ }
366
+ await (0, fs_extra_1.writeFile)(reqPath, content);
367
+ return entries;
368
+ }
369
+ /**
370
+ * 写入项目元数据
371
+ */
372
+ async function writeProjectMetadata(project, projectType, techStack = '', repoUrl = '') {
373
+ const metaPath = getProjectMetaPath(project);
374
+ const today = new Date().toISOString().split('T')[0];
375
+ const content = `# ${project} - 元数据
376
+
377
+ | 属性 | 值 |
378
+ | :--- | :--- |
379
+ | 项目名称 | ${project} |
380
+ | 项目类型 | ${projectType} |
381
+ | 技术栈 | ${techStack || '待补充'} |
382
+ | 版本 | 1.0.0 |
383
+ | 负责人 | 待补充 |
384
+ | 代码仓库 | ${repoUrl || '待补充'} |
385
+ | 最后扫描 | ${today} |
386
+
387
+ ## 依赖关系
388
+
389
+ | 依赖项目 | 依赖方式 | 说明 |
390
+ | :--- | :--- | :--- |
391
+ | _待填写_ | - | - |
392
+ `;
393
+ await (0, fs_extra_1.writeFile)(metaPath, content);
394
+ }
395
+ // ============================================================
396
+ // 需求查找与变更同步
397
+ // ============================================================
398
+ /**
399
+ * 从指定项目中读取指定需求 ID 的详细内容
400
+ */
401
+ async function readRequirementDetail(project, reqId) {
402
+ const reqPath = getProjectReqPath(project);
403
+ if (!(await (0, fs_extra_1.pathExists)(reqPath))) {
404
+ return '';
405
+ }
406
+ const content = await (0, fs_extra_1.readFile)(reqPath, 'utf-8');
407
+ // 提取需求段落(从 ### REQ-XXX 开始到下一个 ### 或文件结尾)
408
+ const regex = new RegExp(`### ${reqId}[::][^]*?(?=\\n### |$)`, 'm');
409
+ const match = content.match(regex);
410
+ return match ? match[0] : '';
411
+ }
412
+ /**
413
+ * 对比两个需求描述并返回变更清单
414
+ */
415
+ function diffRequirements(sourceTitle, sourceContent, targetContent) {
416
+ const changes = [];
417
+ if (!targetContent) {
418
+ changes.push({
419
+ reqId: '',
420
+ reqName: sourceTitle,
421
+ project: '',
422
+ changeType: '新增',
423
+ changeDesc: '全量层中不存在该需求,将新增',
424
+ });
425
+ }
426
+ else {
427
+ // 简单对比:长度差异、关键词检查
428
+ if (sourceContent.length !== targetContent.length) {
429
+ const diff = Math.abs(sourceContent.length - targetContent.length);
430
+ if (diff > 50) {
431
+ changes.push({
432
+ reqId: '',
433
+ reqName: sourceTitle,
434
+ project: '',
435
+ changeType: '修改',
436
+ changeDesc: `内容长度差异 ${diff} 字符`,
437
+ });
438
+ }
439
+ }
440
+ }
441
+ return changes;
442
+ }
443
+ /**
444
+ * 获取所有已导入项目的列表
445
+ */
446
+ async function listProjectDirs() {
447
+ const projectsDir = (0, path_1.join)(getGlobalDir(), 'PROJECTS');
448
+ if (!(await (0, fs_extra_1.pathExists)(projectsDir))) {
449
+ return [];
450
+ }
451
+ const entries = await (0, fs_extra_1.readdir)(projectsDir, { withFileTypes: true });
452
+ return entries
453
+ .filter((e) => e.isDirectory() && e.name !== '_template')
454
+ .map((e) => e.name);
455
+ }
456
+ //# sourceMappingURL=global-layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-layer.js","sourceRoot":"","sources":["../../src/core/global-layer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * 意图识别引擎
3
+ * 基于 SpecCore v4.0 的自然语言意图识别引擎
4
+ * 支持 31 种意图类型、200+ 关键词匹配、置信度计算、上下文感知增强
5
+ */
6
+ /** 意图类型 */
7
+ export type IntentType = 'change' | 'execute' | 'create' | 'review' | 'plan' | 'reference' | 'archive' | 'query_progress' | 'handover' | 'health' | 'config' | 'help' | 'demo' | 'welcome' | 'init' | 'import' | 'bugfix' | 'research' | 'sync' | 'retro' | 'template_add' | 'import_to_global' | 'iteration_from_global' | 'sync_to_global' | 'global_status' | 'history' | 'impact' | 'baseline' | 'dashboard' | 'audit' | 'rename' | 'new_task' | 'platform_add' | 'index_update' | 'context';
8
+ /** 意图匹配结果 */
9
+ export interface IntentResult {
10
+ intent: IntentType;
11
+ command: string;
12
+ confidence: number;
13
+ priority: number;
14
+ matchedTriggers: string[];
15
+ extractedParams: Record<string, string>;
16
+ contextAware: boolean;
17
+ }
18
+ /** 命令映射条目 */
19
+ export interface CommandMapping {
20
+ id: string;
21
+ intent: IntentType;
22
+ priority: number;
23
+ triggers: string[];
24
+ patterns: string[];
25
+ description: string;
26
+ args?: string;
27
+ }
28
+ /**
29
+ * 从用户自然语言输入中识别意图
30
+ */
31
+ export declare function recognizeIntent(input: string): Promise<IntentResult[]>;
32
+ /**
33
+ * 根据置信度分级获取行为建议
34
+ */
35
+ export declare function getConfidenceLevel(confidence: number): 'high' | 'medium' | 'low';
36
+ /**
37
+ * 获取所有命令映射(用于 help 命令)
38
+ */
39
+ export declare function getAllCommandMappings(): CommandMapping[];
40
+ /**
41
+ * 根据命令 ID 获取映射
42
+ */
43
+ export declare function getCommandMapping(commandId: string): CommandMapping | undefined;
44
+ /**
45
+ * 根据意图类型获取相关命令
46
+ */
47
+ export declare function getCommandsByIntent(intent: IntentType): CommandMapping[];
48
+ //# sourceMappingURL=intent-recognition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-recognition.d.ts","sourceRoot":"","sources":["../../src/core/intent-recognition.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,WAAW;AACX,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,WAAW,GACX,SAAS,GACT,gBAAgB,GAChB,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,MAAM,GACN,SAAS,GACT,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,MAAM,GACN,OAAO,GACP,cAAc,GACd,kBAAkB,GAClB,uBAAuB,GACvB,gBAAgB,GAChB,eAAe,GACf,SAAS,GACT,QAAQ,GACR,UAAU,GACV,WAAW,GACX,OAAO,GACP,QAAQ,GACR,UAAU,GACV,cAAc,GACd,cAAc,GACd,SAAS,CAAC;AAEd,aAAa;AACb,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,aAAa;AACb,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAmYD;;GAEG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAgF5E;AA+CD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAIhF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,cAAc,EAAE,CAExD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE/E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,EAAE,CAExE"}