speccore 5.4.1 → 5.4.3

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 (111) hide show
  1. package/README.en.md +5 -4
  2. package/README.md +6 -5
  3. package/package.json +1 -1
  4. package/dist/commands/audit.d.ts +0 -10
  5. package/dist/commands/audit.d.ts.map +0 -1
  6. package/dist/commands/audit.js +0 -278
  7. package/dist/commands/audit.js.map +0 -1
  8. package/dist/commands/baseline.d.ts +0 -13
  9. package/dist/commands/baseline.d.ts.map +0 -1
  10. package/dist/commands/baseline.js +0 -227
  11. package/dist/commands/baseline.js.map +0 -1
  12. package/dist/commands/bugfix.d.ts +0 -13
  13. package/dist/commands/bugfix.d.ts.map +0 -1
  14. package/dist/commands/bugfix.js +0 -181
  15. package/dist/commands/bugfix.js.map +0 -1
  16. package/dist/commands/change.d.ts +0 -14
  17. package/dist/commands/change.d.ts.map +0 -1
  18. package/dist/commands/change.js +0 -208
  19. package/dist/commands/change.js.map +0 -1
  20. package/dist/commands/context.d.ts +0 -8
  21. package/dist/commands/context.d.ts.map +0 -1
  22. package/dist/commands/context.js +0 -180
  23. package/dist/commands/context.js.map +0 -1
  24. package/dist/commands/dashboard.d.ts +0 -9
  25. package/dist/commands/dashboard.d.ts.map +0 -1
  26. package/dist/commands/dashboard.js +0 -209
  27. package/dist/commands/dashboard.js.map +0 -1
  28. package/dist/commands/demo.d.ts +0 -10
  29. package/dist/commands/demo.d.ts.map +0 -1
  30. package/dist/commands/demo.js +0 -151
  31. package/dist/commands/demo.js.map +0 -1
  32. package/dist/commands/global-status.d.ts +0 -9
  33. package/dist/commands/global-status.d.ts.map +0 -1
  34. package/dist/commands/global-status.js +0 -135
  35. package/dist/commands/global-status.js.map +0 -1
  36. package/dist/commands/goal.d.ts +0 -15
  37. package/dist/commands/goal.d.ts.map +0 -1
  38. package/dist/commands/goal.js +0 -232
  39. package/dist/commands/goal.js.map +0 -1
  40. package/dist/commands/handover.d.ts +0 -11
  41. package/dist/commands/handover.d.ts.map +0 -1
  42. package/dist/commands/handover.js +0 -169
  43. package/dist/commands/handover.js.map +0 -1
  44. package/dist/commands/help.d.ts +0 -10
  45. package/dist/commands/help.d.ts.map +0 -1
  46. package/dist/commands/help.js +0 -93
  47. package/dist/commands/help.js.map +0 -1
  48. package/dist/commands/history.d.ts +0 -9
  49. package/dist/commands/history.d.ts.map +0 -1
  50. package/dist/commands/history.js +0 -87
  51. package/dist/commands/history.js.map +0 -1
  52. package/dist/commands/impact.d.ts +0 -12
  53. package/dist/commands/impact.d.ts.map +0 -1
  54. package/dist/commands/impact.js +0 -238
  55. package/dist/commands/impact.js.map +0 -1
  56. package/dist/commands/index-update.d.ts +0 -8
  57. package/dist/commands/index-update.d.ts.map +0 -1
  58. package/dist/commands/index-update.js +0 -180
  59. package/dist/commands/index-update.js.map +0 -1
  60. package/dist/commands/iteration-from-global.d.ts +0 -11
  61. package/dist/commands/iteration-from-global.d.ts.map +0 -1
  62. package/dist/commands/iteration-from-global.js +0 -294
  63. package/dist/commands/iteration-from-global.js.map +0 -1
  64. package/dist/commands/new-task.d.ts +0 -15
  65. package/dist/commands/new-task.d.ts.map +0 -1
  66. package/dist/commands/new-task.js +0 -208
  67. package/dist/commands/new-task.js.map +0 -1
  68. package/dist/commands/platform-add.d.ts +0 -12
  69. package/dist/commands/platform-add.d.ts.map +0 -1
  70. package/dist/commands/platform-add.js +0 -111
  71. package/dist/commands/platform-add.js.map +0 -1
  72. package/dist/commands/rename.d.ts +0 -14
  73. package/dist/commands/rename.d.ts.map +0 -1
  74. package/dist/commands/rename.js +0 -298
  75. package/dist/commands/rename.js.map +0 -1
  76. package/dist/commands/research.d.ts +0 -14
  77. package/dist/commands/research.d.ts.map +0 -1
  78. package/dist/commands/research.js +0 -181
  79. package/dist/commands/research.js.map +0 -1
  80. package/dist/commands/retro.d.ts +0 -10
  81. package/dist/commands/retro.d.ts.map +0 -1
  82. package/dist/commands/retro.js +0 -130
  83. package/dist/commands/retro.js.map +0 -1
  84. package/dist/commands/spec.d.ts +0 -8
  85. package/dist/commands/spec.d.ts.map +0 -1
  86. package/dist/commands/spec.js +0 -155
  87. package/dist/commands/spec.js.map +0 -1
  88. package/dist/commands/sync-global.d.ts +0 -13
  89. package/dist/commands/sync-global.d.ts.map +0 -1
  90. package/dist/commands/sync-global.js +0 -218
  91. package/dist/commands/sync-global.js.map +0 -1
  92. package/dist/commands/sync.d.ts +0 -13
  93. package/dist/commands/sync.d.ts.map +0 -1
  94. package/dist/commands/sync.js +0 -216
  95. package/dist/commands/sync.js.map +0 -1
  96. package/dist/commands/template-add.d.ts +0 -12
  97. package/dist/commands/template-add.d.ts.map +0 -1
  98. package/dist/commands/template-add.js +0 -65
  99. package/dist/commands/template-add.js.map +0 -1
  100. package/dist/commands/welcome.d.ts +0 -9
  101. package/dist/commands/welcome.d.ts.map +0 -1
  102. package/dist/commands/welcome.js +0 -166
  103. package/dist/commands/welcome.js.map +0 -1
  104. package/dist/core/global-layer.d.ts +0 -124
  105. package/dist/core/global-layer.d.ts.map +0 -1
  106. package/dist/core/global-layer.js +0 -456
  107. package/dist/core/global-layer.js.map +0 -1
  108. package/dist/core/intent-recognition.d.ts +0 -48
  109. package/dist/core/intent-recognition.d.ts.map +0 -1
  110. package/dist/core/intent-recognition.js +0 -524
  111. package/dist/core/intent-recognition.js.map +0 -1
@@ -1,232 +0,0 @@
1
- "use strict";
2
- /**
3
- * goal - 完整需求交付命令
4
- * 从需求描述出发,自动创建任务并生成完整的 Spec 文档结构
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.goalCommand = goalCommand;
8
- const logger_1 = require("../utils/logger");
9
- const context_1 = require("../core/context");
10
- const fs_extra_1 = require("fs-extra");
11
- const task_utils_1 = require("../utils/task-utils");
12
- const path_1 = require("path");
13
- async function goalCommand(options) {
14
- if (!options.name && !options.desc) {
15
- logger_1.logger.error('请提供功能名称或描述。用法: speccore goal --name "<功能名>" [--desc "<描述>"]');
16
- return;
17
- }
18
- const spinner = new logger_1.Spinner('正在创建完整需求交付...');
19
- spinner.start();
20
- try {
21
- const iteration = await (0, context_1.getDefaultIteration)(options.iteration);
22
- if (!iteration) {
23
- spinner.fail('未找到活跃期次。请先运行: speccore iteration create --name <名称>');
24
- return;
25
- }
26
- const taskName = options.name || '新功能';
27
- const taskType = options.type || 'feature';
28
- const taskId = options.taskId || await (0, task_utils_1.generateTaskId)(iteration);
29
- const taskDir = (0, path_1.join)(iteration, taskId);
30
- // 创建任务目录结构
31
- await (0, fs_extra_1.ensureDir)((0, path_1.join)(taskDir, 'backend'));
32
- await (0, fs_extra_1.ensureDir)((0, path_1.join)(taskDir, 'frontend'));
33
- await (0, fs_extra_1.ensureDir)((0, path_1.join)(taskDir, '_shared'));
34
- // 创建 .task-type
35
- await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, '.task-type'), taskType);
36
- // 生成后端 Spec 文件
37
- if (!options.frontendOnly) {
38
- await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'backend', 'REQ.md'), generateBackendReq(taskName, options.desc || ''));
39
- await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'backend', 'TECH.md'), generateBackendTech(taskName, options.desc || ''));
40
- await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'backend', 'TASK.md'), generateTask(taskName, taskType, options.desc || ''));
41
- }
42
- // 生成前端 Spec 文件
43
- if (!options.backendOnly) {
44
- await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'frontend', 'REQ.md'), generateFrontendReq(taskName, options.desc || ''));
45
- await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'frontend', 'TECH.md'), generateFrontendTech(taskName, options.desc || ''));
46
- await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'frontend', 'TASK.md'), generateTask(taskName, taskType, options.desc || ''));
47
- }
48
- // 生成 API 契约
49
- await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, '_shared', 'API_CONTRACT.yaml'), generateApiContract(taskName, options.desc || ''));
50
- spinner.stop(`需求交付已创建: ${taskId}`);
51
- logger_1.logger.info('');
52
- logger_1.logger.info(`📋 任务详情:`);
53
- logger_1.logger.info(` 期次: ${iteration}`);
54
- logger_1.logger.info(` 任务: ${taskId} - ${taskName}`);
55
- logger_1.logger.info(` 类型: ${taskType}`);
56
- if (options.desc) {
57
- logger_1.logger.info(` 描述: ${options.desc}`);
58
- }
59
- logger_1.logger.info('');
60
- logger_1.logger.info('下一步:');
61
- logger_1.logger.info(` 1. 编辑 ${taskId}/backend/REQ.md 补充需求细节`);
62
- logger_1.logger.info(` 2. 编辑 ${taskId}/backend/TECH.md 完善技术方案`);
63
- logger_1.logger.info(' 3. 运行: speccore execute --all');
64
- }
65
- catch (error) {
66
- spinner.fail(`需求交付创建失败: ${error}`);
67
- throw error;
68
- }
69
- }
70
- function generateBackendReq(name, desc) {
71
- return `# ${name} - 后端需求
72
-
73
- ## 1. 需求描述
74
-
75
- ${desc || '请补充功能描述'}
76
-
77
- ## 2. 业务规则
78
-
79
- 1.
80
- 2.
81
-
82
- ## 3. 验收标准
83
-
84
- - [ ]
85
- - [ ]
86
-
87
- ## 4. 非功能需求
88
-
89
- - 性能:
90
- - 安全:
91
- - 可用性:
92
- `;
93
- }
94
- function generateBackendTech(name, desc) {
95
- return `# ${name} - 后端技术方案
96
-
97
- ## 1. 方案概述
98
-
99
- ${desc || '请补充技术方案概述'}
100
-
101
- ## 2. 核心设计
102
-
103
- ### 2.1 接口设计
104
-
105
- | 方法 | 路径 | 说明 |
106
- | :--- | :--- | :--- |
107
- | | | |
108
-
109
- ### 2.2 数据模型
110
-
111
- \`\`\`
112
- (请补充数据模型)
113
- \`\`\`
114
-
115
- ## 3. 技术决策
116
-
117
- | 决策项 | 方案 | 理由 |
118
- | :--- | :--- | :--- |
119
- | | | |
120
- `;
121
- }
122
- function generateFrontendReq(name, desc) {
123
- return `# ${name} - 前端需求
124
-
125
- ## 1. 页面描述
126
-
127
- ${desc || '请补充页面功能描述'}
128
-
129
- ## 2. 交互流程
130
-
131
- 1.
132
- 2.
133
-
134
- ## 3. UI 要求
135
-
136
- -
137
- -
138
-
139
- ## 4. 验收标准
140
-
141
- - [ ]
142
- - [ ]
143
- `;
144
- }
145
- function generateFrontendTech(name, desc) {
146
- return `# ${name} - 前端技术方案
147
-
148
- ## 1. 方案概述
149
-
150
- ${desc || '请补充前端技术方案概述'}
151
-
152
- ## 2. 组件设计
153
-
154
- ### 2.1 组件树
155
-
156
- \`\`\`
157
- (请补充组件树结构)
158
- \`\`\`
159
-
160
- ### 2.2 状态管理
161
-
162
- \`\`\`
163
- (请补充状态设计)
164
- \`\`\`
165
-
166
- ## 3. 技术决策
167
-
168
- | 决策项 | 方案 | 理由 |
169
- | :--- | :--- | :--- |
170
- | | | |
171
- `;
172
- }
173
- function generateTask(name, type, desc) {
174
- const now = new Date().toISOString().split('T')[0];
175
- return `# ${name} - 执行追踪
176
-
177
- > **任务类型**: ${type} | **创建日期**: ${now} | **状态**: 🔲 待开发
178
-
179
- ## 1. 变更履历
180
-
181
- | 日期 | 版本 | 变更说明 | 作者 |
182
- | :--- | :--- | :--- | :--- |
183
- | ${now} | v1.0 | 初始创建 | SpecCore |
184
-
185
- ## 2. 任务描述
186
-
187
- ${desc || '请补充任务描述'}
188
-
189
- ## 3. 子任务
190
-
191
- - [ ] 需求分析
192
- - [ ] 方案设计
193
- - [ ] 编码实现
194
- - [ ] 测试验证
195
- - [ ] 代码审查
196
-
197
- ## 4. 产出物清单
198
-
199
- | 产出物 | 路径 | 状态 |
200
- | :--- | :--- | :--- |
201
- | | | |
202
- `;
203
- }
204
- function generateApiContract(name, desc) {
205
- return `# ${name} - API 契约
206
- # OpenAPI 3.0.3
207
- openapi: "3.0.3"
208
- info:
209
- title: ${name}
210
- description: ${desc || '请补充接口描述'}
211
- version: "1.0.0"
212
-
213
- paths:
214
- # 请在此定义 API 路径
215
- # /api/v1/resource:
216
- # post:
217
- # summary:
218
- # requestBody:
219
- # content:
220
- # application/json:
221
- # schema:
222
- # type: object
223
- # responses:
224
- # '200':
225
- # description: 成功
226
-
227
- components:
228
- schemas:
229
- # 请在此定义数据模型
230
- `;
231
- }
232
- //# sourceMappingURL=goal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"goal.js","sourceRoot":"","sources":["../../src/commands/goal.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * handover - 生成交接文档命令
3
- * 汇总期次关键信息、待办事项和风险点
4
- */
5
- export interface HandoverOptions {
6
- iteration?: string;
7
- output?: string;
8
- format?: string;
9
- }
10
- export declare function handoverCommand(options: HandoverOptions): Promise<void>;
11
- //# sourceMappingURL=handover.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handover.d.ts","sourceRoot":"","sources":["../../src/commands/handover.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B7E"}
@@ -1,169 +0,0 @@
1
- "use strict";
2
- /**
3
- * handover - 生成交接文档命令
4
- * 汇总期次关键信息、待办事项和风险点
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.handoverCommand = handoverCommand;
8
- const logger_1 = require("../utils/logger");
9
- const context_1 = require("../core/context");
10
- const fs_extra_1 = require("fs-extra");
11
- const path_1 = require("path");
12
- async function handoverCommand(options) {
13
- const spinner = new logger_1.Spinner('正在生成交接文档...');
14
- spinner.start();
15
- try {
16
- const iteration = await (0, context_1.getDefaultIteration)(options.iteration);
17
- if (!iteration) {
18
- spinner.fail('未找到活跃期次。请先运行: speccore iteration create --name <名称>');
19
- return;
20
- }
21
- const doc = await generateHandoverDoc(iteration);
22
- const format = options.format || 'md';
23
- const outputPath = options.output || (0, path_1.join)(process.cwd(), iteration, '00-期次总览', `交接文档.${format}`);
24
- await (0, fs_extra_1.writeFile)(outputPath, doc);
25
- spinner.stop(`交接文档已生成: ${outputPath}`);
26
- logger_1.logger.info('');
27
- logger_1.logger.info('📋 交接文档包含:');
28
- logger_1.logger.info(' - 期次概览');
29
- logger_1.logger.info(' - 任务完成情况');
30
- logger_1.logger.info(' - 关键决策记录');
31
- logger_1.logger.info(' - 待办事项');
32
- logger_1.logger.info(' - 风险与建议');
33
- }
34
- catch (error) {
35
- spinner.fail(`交接文档生成失败: ${error}`);
36
- throw error;
37
- }
38
- }
39
- async function generateHandoverDoc(iteration) {
40
- const iterDir = (0, path_1.join)(process.cwd(), iteration);
41
- const now = new Date().toISOString().split('T')[0];
42
- // 扫描任务
43
- const tasks = await scanTasks(iterDir);
44
- const completed = tasks.filter((t) => t.status === 'completed');
45
- const inProgress = tasks.filter((t) => t.status === 'in_progress');
46
- const pending = tasks.filter((t) => t.status === 'pending');
47
- let doc = `# ${iteration} - 交接文档\n\n`;
48
- doc += `> 生成日期: ${now} | 生成工具: SpecCore\n\n`;
49
- doc += `---\n\n`;
50
- // 1. 期次概览
51
- doc += `## 1. 期次概览\n\n`;
52
- doc += `| 指标 | 数值 |\n`;
53
- doc += `| :--- | :--- |\n`;
54
- doc += `| 期次名称 | ${iteration} |\n`;
55
- doc += `| 总任务数 | ${tasks.length} |\n`;
56
- doc += `| 已完成 | ${completed.length} |\n`;
57
- doc += `| 进行中 | ${inProgress.length} |\n`;
58
- doc += `| 待开发 | ${pending.length} |\n`;
59
- doc += `| 完成率 | ${tasks.length > 0 ? Math.round((completed.length / tasks.length) * 100) : 0}% |\n\n`;
60
- // 2. 任务详情
61
- doc += `## 2. 任务详情\n\n`;
62
- if (completed.length > 0) {
63
- doc += `### ✅ 已完成任务\n\n`;
64
- doc += `| 任务 | 类型 | 完成日期 |\n`;
65
- doc += `| :--- | :--- | :--- |\n`;
66
- for (const t of completed) {
67
- doc += `| ${t.id} - ${t.name} | ${t.type} | ${t.endDate || '-'} |\n`;
68
- }
69
- doc += `\n`;
70
- }
71
- if (inProgress.length > 0) {
72
- doc += `### 🟦 进行中任务\n\n`;
73
- doc += `| 任务 | 类型 | 进度 | 阻塞项 |\n`;
74
- doc += `| :--- | :--- | :--- | :--- |\n`;
75
- for (const t of inProgress) {
76
- doc += `| ${t.id} - ${t.name} | ${t.type} | ${t.progress}% | ${t.blockers.join(', ') || '-'} |\n`;
77
- }
78
- doc += `\n`;
79
- }
80
- if (pending.length > 0) {
81
- doc += `### 🔲 待开发任务\n\n`;
82
- doc += `| 任务 | 类型 | 优先级 |\n`;
83
- doc += `| :--- | :--- | :--- |\n`;
84
- for (const t of pending) {
85
- doc += `| ${t.id} - ${t.name} | ${t.type} | ${t.priority || '-'} |\n`;
86
- }
87
- doc += `\n`;
88
- }
89
- // 3. 关键决策
90
- doc += `## 3. 关键决策记录\n\n`;
91
- // 从 ARCHITECTURE.md 提取
92
- const archPath = (0, path_1.join)(iterDir, '00-技术文档', 'ARCHITECTURE.md');
93
- if (await (0, fs_extra_1.pathExists)(archPath)) {
94
- const content = await (0, fs_extra_1.readFile)(archPath, 'utf-8');
95
- const decisions = content.match(/##\s*决策[\s\S]*?(?=\n##|\n---|$)/);
96
- if (decisions) {
97
- doc += decisions[0].trim() + '\n\n';
98
- }
99
- else {
100
- doc += '(无记录)\n\n';
101
- }
102
- }
103
- else {
104
- doc += '(无 ARCHITECTURE.md)\n\n';
105
- }
106
- // 4. 待办事项
107
- doc += `## 4. 待办事项\n\n`;
108
- doc += `- [ ] 审查未完成任务的 Spec 文件\n`;
109
- doc += `- [ ] 确认所有接口契约已更新\n`;
110
- doc += `- [ ] 回归测试已完成任务的功能\n\n`;
111
- // 5. 风险与建议
112
- doc += `## 5. 风险与建议\n\n`;
113
- doc += `| 风险项 | 级别 | 建议 |\n`;
114
- doc += `| :--- | :--- | :--- |\n`;
115
- if (inProgress.length > 0) {
116
- doc += `| 有 ${inProgress.length} 个任务仍在进行中 | 中 | 建议在交接前推动完成或重新分配 |\n`;
117
- }
118
- if (pending.length > 3) {
119
- doc += `| 待开发任务较多(${pending.length} 个) | 中 | 建议评估优先级,适当延期部分任务 |\n`;
120
- }
121
- doc += `| | | |\n\n`;
122
- // 6. 附录
123
- doc += `## 6. 附录\n\n`;
124
- doc += `### 相关文件\n\n`;
125
- doc += `- 期次目录: \`${iteration}/\`\n`;
126
- doc += `- 技术架构: \`${iteration}/00-技术文档/ARCHITECTURE.md\`\n`;
127
- doc += `- 需求文档: \`${iteration}/00-需求文档/REQUIREMENT.md\`\n`;
128
- doc += `- 项目图谱: \`${iteration}/00-期次总览/PROJECT_GRAPH.md\`\n`;
129
- return doc;
130
- }
131
- async function scanTasks(iterDir) {
132
- const tasks = [];
133
- if (!await (0, fs_extra_1.pathExists)(iterDir))
134
- return tasks;
135
- const entries = await (0, fs_extra_1.readdir)(iterDir);
136
- const taskDirs = entries.filter((e) => e.startsWith('Task-'));
137
- for (const taskDir of taskDirs) {
138
- const taskInfo = {
139
- id: taskDir,
140
- name: taskDir,
141
- type: 'feature',
142
- status: 'pending',
143
- progress: 0,
144
- blockers: [],
145
- };
146
- // 读取 .task-type
147
- const typePath = (0, path_1.join)(iterDir, taskDir, '.task-type');
148
- if (await (0, fs_extra_1.pathExists)(typePath)) {
149
- taskInfo.type = (await (0, fs_extra_1.readFile)(typePath, 'utf-8')).trim();
150
- }
151
- // 读取 TASK.md 获取状态
152
- const taskMdPath = (0, path_1.join)(iterDir, taskDir, 'backend', 'TASK.md');
153
- if (await (0, fs_extra_1.pathExists)(taskMdPath)) {
154
- const content = await (0, fs_extra_1.readFile)(taskMdPath, 'utf-8');
155
- if (content.includes('✅ 已完成'))
156
- taskInfo.status = 'completed';
157
- else if (content.includes('🟦 开发中') || content.includes('进行中'))
158
- taskInfo.status = 'in_progress';
159
- // 提取任务名称
160
- const nameMatch = content.match(/^#\s*(.+?)(?:\s*-\s*执行追踪)?$/m);
161
- if (nameMatch) {
162
- taskInfo.name = nameMatch[1].trim();
163
- }
164
- }
165
- tasks.push(taskInfo);
166
- }
167
- return tasks;
168
- }
169
- //# sourceMappingURL=handover.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handover.js","sourceRoot":"","sources":["../../src/commands/handover.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- /**
2
- * help - 命令帮助命令
3
- * 显示所有可用命令、别名和参数说明
4
- */
5
- export interface HelpOptions {
6
- command?: string;
7
- search?: string;
8
- }
9
- export declare function helpCommand(options: HelpOptions): Promise<void>;
10
- //# sourceMappingURL=help.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAYrE"}
@@ -1,93 +0,0 @@
1
- "use strict";
2
- /**
3
- * help - 命令帮助命令
4
- * 显示所有可用命令、别名和参数说明
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.helpCommand = helpCommand;
8
- const logger_1 = require("../utils/logger");
9
- const intent_recognition_1 = require("../core/intent-recognition");
10
- async function helpCommand(options) {
11
- if (options.command) {
12
- await showCommandDetail(options.command);
13
- return;
14
- }
15
- if (options.search) {
16
- await searchCommands(options.search);
17
- return;
18
- }
19
- showAllCommands();
20
- }
21
- function showAllCommands() {
22
- logger_1.logger.info('📖 SpecCore 命令帮助');
23
- logger_1.logger.info('');
24
- // 分类显示
25
- const categories = {
26
- '🔍 智能入口': ['spec - 自然语言意图识别,自动匹配命令'],
27
- '👋 引导与体验': ['welcome - 首次使用引导', 'demo - 快速体验示例项目'],
28
- '🏗️ 初始化与导入': ['init - 初始化 SpecCore 项目', 'import - 从存量项目导入'],
29
- '📋 期次管理': ['iteration create - 创建期次', 'iteration split - 需求拆分为任务'],
30
- '📝 任务管理': ['task new - 创建任务', 'goal - 完整需求交付', 'bugfix - 快速 Bug 修复', 'research - 技术调研'],
31
- '⚡ 执行与调度': ['plan - 智能调度方案', 'execute - 执行控制中心'],
32
- '🔄 变更管理': ['change - 需求变更联动', 'sync - 反向同步(代码→Spec)'],
33
- '✅ 审查与验证': ['review - 审查产出', 'validate - Spec 合规性检查'],
34
- '📊 进度与状态': ['progress - 进度总览', 'status - 状态看板', 'health - 项目健康度'],
35
- '📦 归档与交接': ['archive - 归档任务', 'handover - 生成交接文档', 'retro - 期次回顾'],
36
- '⚙️ 配置与工具': ['config - 配置管理', 'report - 生成项目报告', 'template-add - 添加代码模板'],
37
- };
38
- for (const [category, commands] of Object.entries(categories)) {
39
- logger_1.logger.info('');
40
- logger_1.logger.info(`${category}:`);
41
- for (const cmd of commands) {
42
- logger_1.logger.info(` speccore ${cmd}`);
43
- }
44
- }
45
- logger_1.logger.info('');
46
- logger_1.logger.info('---');
47
- logger_1.logger.info('💡 使用 speccore help --command=<命令名> 查看详细参数');
48
- logger_1.logger.info('💡 使用 speccore help --search=<关键词> 搜索相关命令');
49
- }
50
- async function showCommandDetail(commandName) {
51
- const mapping = (0, intent_recognition_1.getCommandMapping)(commandName);
52
- if (!mapping) {
53
- // 尝试在现有命令中查找
54
- logger_1.logger.warn(`未找到命令 "${commandName}"。`);
55
- logger_1.logger.info('可用的命令:');
56
- const all = (0, intent_recognition_1.getAllCommandMappings)();
57
- for (const m of all) {
58
- logger_1.logger.info(` - speccore ${m.id}: ${m.description}`);
59
- }
60
- return;
61
- }
62
- logger_1.logger.info(`📖 speccore ${mapping.id}`);
63
- logger_1.logger.info('');
64
- logger_1.logger.info(`描述: ${mapping.description}`);
65
- logger_1.logger.info(`优先级: ${mapping.priority}`);
66
- logger_1.logger.info('');
67
- logger_1.logger.info('触发关键词:');
68
- logger_1.logger.info(` ${mapping.triggers.join(' / ')}`);
69
- logger_1.logger.info('');
70
- if (mapping.args) {
71
- logger_1.logger.info(`参数: ${mapping.args}`);
72
- }
73
- logger_1.logger.info('更多参数请使用 --help 查看。');
74
- }
75
- async function searchCommands(keyword) {
76
- const all = (0, intent_recognition_1.getAllCommandMappings)();
77
- const matched = all.filter((m) => m.id.includes(keyword) ||
78
- m.description.includes(keyword) ||
79
- m.triggers.some((t) => t.includes(keyword)));
80
- if (matched.length === 0) {
81
- logger_1.logger.warn(`未找到匹配 "${keyword}" 的命令。`);
82
- return;
83
- }
84
- logger_1.logger.info(`🔍 搜索 "${keyword}" 的结果:`);
85
- logger_1.logger.info('');
86
- for (const m of matched) {
87
- logger_1.logger.info(` speccore ${m.id}`);
88
- logger_1.logger.info(` ${m.description}`);
89
- logger_1.logger.info(` 触发: ${m.triggers.slice(0, 3).join(', ')}`);
90
- logger_1.logger.info('');
91
- }
92
- }
93
- //# sourceMappingURL=help.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- /**
2
- * history - 查看需求变更历史命令
3
- * 输出指定需求(REQ-XXX)的完整变更历史,包括来源、版本演进、关联期次
4
- */
5
- export interface HistoryOptions {
6
- req?: string;
7
- }
8
- export declare function historyCommand(options: HistoryOptions): Promise<void>;
9
- //# sourceMappingURL=history.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAsF3E"}
@@ -1,87 +0,0 @@
1
- "use strict";
2
- /**
3
- * history - 查看需求变更历史命令
4
- * 输出指定需求(REQ-XXX)的完整变更历史,包括来源、版本演进、关联期次
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.historyCommand = historyCommand;
8
- const logger_1 = require("../utils/logger");
9
- const global_layer_1 = require("../core/global-layer");
10
- async function historyCommand(options) {
11
- if (!options.req) {
12
- logger_1.logger.error('请提供需求 ID。用法: speccore history --req=<REQ-XXX>');
13
- logger_1.logger.info('提示: 使用 speccore global-status 查看可用需求列表');
14
- return;
15
- }
16
- const spinner = new logger_1.Spinner('查询需求历史...');
17
- spinner.start();
18
- try {
19
- // 1. 定位需求
20
- const index = await (0, global_layer_1.readGlobalIndex)();
21
- const reqEntry = index.reqs.find((r) => r.id === options.req);
22
- if (!reqEntry) {
23
- spinner.fail(`需求 ${options.req} 不存在`);
24
- logger_1.logger.info('');
25
- logger_1.logger.info('在 GLOBAL/INDEX.md 中未找到该需求 ID。');
26
- logger_1.logger.info('请运行 speccore global-status 查看可用需求列表。');
27
- return;
28
- }
29
- // 2. 读取需求详情(含变更历史)
30
- const detail = await (0, global_layer_1.readRequirementDetail)(reqEntry.project, options.req);
31
- spinner.stop();
32
- // 3. 输出报告
33
- logger_1.logger.info('');
34
- logger_1.logger.info(`📜 需求历史: ${options.req} ${reqEntry.name}`);
35
- logger_1.logger.info('');
36
- // 来源信息
37
- logger_1.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
38
- logger_1.logger.info('📋 当前状态');
39
- logger_1.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
40
- logger_1.logger.info(` 当前版本: ${reqEntry.version}`);
41
- logger_1.logger.info(` 状态: ${reqEntry.status}`);
42
- logger_1.logger.info(` 来源项目: ${reqEntry.project}`);
43
- logger_1.logger.info(` 关联期次: ${reqEntry.iteration || '-'}`);
44
- logger_1.logger.info(` 关联 Task: ${reqEntry.task || '-'}`);
45
- logger_1.logger.info(` 文件位置: ${reqEntry.filePath}`);
46
- // 变更历史(从详情中提取)
47
- if (detail) {
48
- logger_1.logger.info('');
49
- logger_1.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
50
- logger_1.logger.info('📝 变更历史');
51
- logger_1.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
52
- const changelogMatch = detail.match(/📝 变更历史[^]*$/m);
53
- if (changelogMatch) {
54
- const lines = changelogMatch[0].split('\n');
55
- for (const line of lines) {
56
- if (line.trim()) {
57
- logger_1.logger.info(` ${line.trim()}`);
58
- }
59
- }
60
- }
61
- else {
62
- logger_1.logger.info(' (无变更历史)');
63
- }
64
- }
65
- // 元数据
66
- if (detail) {
67
- logger_1.logger.info('');
68
- logger_1.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
69
- logger_1.logger.info('📦 元数据');
70
- logger_1.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
71
- const metaLines = detail.split('\n').filter((l) => l.includes('|') && l.includes(':---'));
72
- for (let i = 0; i < detail.split('\n').length; i++) {
73
- const line = detail.split('\n')[i];
74
- if (line.includes('来源') || line.includes('当前版本') || line.includes('状态') || line.includes('最后修改')) {
75
- logger_1.logger.info(` ${line.trim()}`);
76
- }
77
- }
78
- }
79
- logger_1.logger.info('');
80
- logger_1.logger.info('💡 提示: 要查看完整的代码级变更记录,请使用 git log 查看对应文件。');
81
- }
82
- catch (error) {
83
- spinner.fail(`查询历史失败: ${error}`);
84
- throw error;
85
- }
86
- }
87
- //# sourceMappingURL=history.js.map