speccore 5.27.29 → 5.27.31
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.
- package/dist/cli.js +23 -22
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze.js +10 -10
- package/dist/commands/audit.js +6 -6
- package/dist/commands/change.js +3 -3
- package/dist/commands/context-output.js +5 -5
- package/dist/commands/context.js +3 -3
- package/dist/commands/dashboard.js +11 -11
- package/dist/commands/delete.d.ts +1 -1
- package/dist/commands/delete.js +4 -4
- package/dist/commands/dev.d.ts +1 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +35 -19
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/diff.d.ts +1 -1
- package/dist/commands/diff.js +1 -1
- package/dist/commands/doc2spec.js +9 -6
- package/dist/commands/doc2spec.js.map +1 -1
- package/dist/commands/done.js +3 -3
- package/dist/commands/execute.js +3 -3
- package/dist/commands/global-status.js +2 -2
- package/dist/commands/handover.d.ts +1 -1
- package/dist/commands/handover.js +11 -11
- package/dist/commands/handover.js.map +1 -1
- package/dist/commands/help.js +19 -19
- package/dist/commands/history.d.ts +1 -1
- package/dist/commands/history.js +2 -2
- package/dist/commands/impact.js +8 -8
- package/dist/commands/import.js +1 -1
- package/dist/commands/init.js +26 -26
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/iteration/create.js +14 -14
- package/dist/commands/iteration/create.js.map +1 -1
- package/dist/commands/iteration/split.js +4 -4
- package/dist/commands/iteration/split.js.map +1 -1
- package/dist/commands/iteration-from-global.d.ts +2 -2
- package/dist/commands/iteration-from-global.d.ts.map +1 -1
- package/dist/commands/iteration-from-global.js +17 -18
- package/dist/commands/iteration-from-global.js.map +1 -1
- package/dist/commands/lifecycle.js +1 -1
- package/dist/commands/pr.js +1 -1
- package/dist/commands/rename.d.ts +1 -1
- package/dist/commands/rename.js +4 -4
- package/dist/commands/retro.js +2 -2
- package/dist/commands/schedule.js +3 -3
- package/dist/commands/spec2doc.js +5 -5
- package/dist/commands/spec2doc.js.map +1 -1
- package/dist/commands/status-panel.js +8 -8
- package/dist/commands/sync-global.d.ts +2 -2
- package/dist/commands/sync-global.js +21 -21
- package/dist/commands/sync.js +6 -6
- package/dist/commands/update.js +1 -1
- package/dist/commands/welcome.js +3 -3
- package/dist/commands/welcome.js.map +1 -1
- package/dist/core/ai-context-generator.d.ts +1 -1
- package/dist/core/ai-context-generator.js +1 -1
- package/dist/core/analyze-engine.d.ts +1 -1
- package/dist/core/analyze-engine.js +5 -5
- package/dist/core/ask-engine.js +4 -4
- package/dist/core/ask-engine.js.map +1 -1
- package/dist/core/ask-llm.js +1 -1
- package/dist/core/context.js +1 -1
- package/dist/core/dev-llm.js +2 -2
- package/dist/core/git-integration.d.ts +1 -1
- package/dist/core/git-integration.js +3 -3
- package/dist/core/global-counters.js +1 -1
- package/dist/core/global-layer.d.ts +3 -3
- package/dist/core/global-layer.js +11 -11
- package/dist/core/help-panel.d.ts +1 -1
- package/dist/core/help-panel.js +3 -3
- package/dist/core/intent-recognition.js +22 -22
- package/dist/core/intent-recognition.js.map +1 -1
- package/dist/core/name-validator.d.ts +4 -4
- package/dist/core/name-validator.js +5 -5
- package/dist/core/next-steps.js +1 -1
- package/dist/core/next-steps.js.map +1 -1
- package/dist/core/plan-store.d.ts +1 -1
- package/dist/core/requirement-tracker.d.ts +1 -1
- package/dist/core/requirement-tracker.js +4 -4
- package/dist/core/schedule-store.d.ts +1 -1
- package/dist/core/schemas/iteration.schema.d.ts +1 -1
- package/dist/core/schemas/iteration.schema.js +1 -1
- package/dist/core/session-state.d.ts +1 -1
- package/dist/core/state.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec2doc.js","sourceRoot":"","sources":["../../src/commands/spec2doc.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"spec2doc.js","sourceRoot":"","sources":["../../src/commands/spec2doc.ts"],"names":[],"mappings":"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"}
|
|
@@ -82,7 +82,7 @@ async function statusPanelCommand(options = {}) {
|
|
|
82
82
|
logger_1.logger.info('┌────────────────── SpecCore ──────────────────┐');
|
|
83
83
|
logger_1.logger.info(`│ 项目: ${config.project.name.padEnd(37)}│`);
|
|
84
84
|
if (iteration) {
|
|
85
|
-
logger_1.logger.info(`│
|
|
85
|
+
logger_1.logger.info(`│ 迭代: ${iteration.padEnd(37)}│`);
|
|
86
86
|
const iterDir = `Iteration-${iteration}`;
|
|
87
87
|
// Phase detection
|
|
88
88
|
const phase = await detectPhase(iterDir);
|
|
@@ -328,7 +328,7 @@ async function exportStatus(config, iteration, format, options = {}) {
|
|
|
328
328
|
const iterDir = (0, path_1.join)(process.cwd(), 'Iteration-' + iteration);
|
|
329
329
|
const phase = await require('./status-panel').defaultPhase(iterDir);
|
|
330
330
|
data.phase = phase;
|
|
331
|
-
// ──
|
|
331
|
+
// ── 读取迭代时间范围 ──
|
|
332
332
|
const metaPath = (0, path_1.join)(iterDir, "000-overview", "METADATA.md");
|
|
333
333
|
const graphPath = (0, path_1.join)(iterDir, '000-overview', 'PROJECT_GRAPH.md');
|
|
334
334
|
if (await (0, fs_extra_1.pathExists)(graphPath)) {
|
|
@@ -561,7 +561,7 @@ async function exportStatus(config, iteration, format, options = {}) {
|
|
|
561
561
|
}
|
|
562
562
|
else if (format === 'md') {
|
|
563
563
|
let md = `# SpecCore Status — ${config.project.name}\n\n`;
|
|
564
|
-
md += `-
|
|
564
|
+
md += `- 迭代: ${iteration || '无'}\n- 阶段: ${data.phase || 'N/A'}\n\n`;
|
|
565
565
|
md += '## Tasks\n\n| ID | Status | Type |\n| :--- | :--- | :--- |\n';
|
|
566
566
|
for (const t of data.tasks || [])
|
|
567
567
|
md += `| ${t.id} | ${t.status} | ${t.type} |\n`;
|
|
@@ -839,7 +839,7 @@ td.code{font-family:'JetBrains Mono',monospace;color:var(--text);font-weight:600
|
|
|
839
839
|
<div class="subtitle">SPECCORE · SPEC-DRIVEN DEVELOPMENT${data.iterationOwner ? " · OWNER: " + data.iterationOwner.toUpperCase() : ""}${data.filterLabels ? " · " + data.filterLabels.join(" · ") : ""}${data.filteredFrom ? " (过滤自 " + data.filteredFrom + " 个任务)" : ""}</div>
|
|
840
840
|
</div>
|
|
841
841
|
<div class="header-right">
|
|
842
|
-
<div class="header-stat"><div class="num">Q2</div><div class="label"
|
|
842
|
+
<div class="header-stat"><div class="num">Q2</div><div class="label">迭代</div></div>
|
|
843
843
|
<div class="header-stat"><div class="num">${total}</div><div class="label">任务</div></div>
|
|
844
844
|
<div class="header-stat"><div class="num">${donePct}%</div><div class="label">完成</div></div>
|
|
845
845
|
<div class="phase-indicator"><div class="dot"></div><span>${phaseLabel.toUpperCase()}</span></div>
|
|
@@ -1354,7 +1354,7 @@ function setLang(l){document.querySelectorAll('.lang-sw button').forEach(b=>b.cl
|
|
|
1354
1354
|
// ── Health Report (merged from health command) ──
|
|
1355
1355
|
async function showHealthReport(config, iteration) {
|
|
1356
1356
|
if (!iteration) {
|
|
1357
|
-
logger_1.logger.info("
|
|
1357
|
+
logger_1.logger.info("无活跃迭代");
|
|
1358
1358
|
return;
|
|
1359
1359
|
}
|
|
1360
1360
|
const iterDir = `Iteration-${iteration}`;
|
|
@@ -1384,7 +1384,7 @@ async function showHealthReport(config, iteration) {
|
|
|
1384
1384
|
// ── Lifecycle Board (merged from lifecycle command) ──
|
|
1385
1385
|
async function showLifecycleBoard(config, iteration, opts) {
|
|
1386
1386
|
if (!iteration) {
|
|
1387
|
-
logger_1.logger.info("
|
|
1387
|
+
logger_1.logger.info("无活跃迭代");
|
|
1388
1388
|
return;
|
|
1389
1389
|
}
|
|
1390
1390
|
const iterDir = `Iteration-${iteration}`;
|
|
@@ -1419,7 +1419,7 @@ async function getTaskStatus(iterDir, task) {
|
|
|
1419
1419
|
}
|
|
1420
1420
|
// ── Collect Health Data for export ──
|
|
1421
1421
|
async function collectHealthData(iteration) {
|
|
1422
|
-
const iterDir = (0, path_1.join)(process.cwd(), "
|
|
1422
|
+
const iterDir = (0, path_1.join)(process.cwd(), "迭代-" + iteration);
|
|
1423
1423
|
const tasks = await scanTaskDirs(iterDir);
|
|
1424
1424
|
let total = tasks.length, completed = 0, hasTest = 0, hasReview = 0;
|
|
1425
1425
|
for (const t of tasks) {
|
|
@@ -1439,7 +1439,7 @@ async function collectHealthData(iteration) {
|
|
|
1439
1439
|
}
|
|
1440
1440
|
// ── Collect Lifecycle Data for export ──
|
|
1441
1441
|
async function collectLifecycleData(iteration) {
|
|
1442
|
-
const iterDir = (0, path_1.join)(process.cwd(), "
|
|
1442
|
+
const iterDir = (0, path_1.join)(process.cwd(), "迭代-" + iteration);
|
|
1443
1443
|
const taskDirs = await scanTaskDirs(iterDir);
|
|
1444
1444
|
const tasks = [];
|
|
1445
1445
|
for (const t of taskDirs) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* sync-global -
|
|
4
|
-
* 支持 to_global
|
|
3
|
+
* sync-global - 迭代与全量层双向同步命令
|
|
4
|
+
* 支持 to_global(迭代→全量层)和 from_global(全量层→迭代)两个方向
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.syncGlobalCommand = syncGlobalCommand;
|
|
@@ -33,10 +33,10 @@ async function syncGlobalCommand(options) {
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
36
|
+
* 迭代 → 全量层同步
|
|
37
37
|
*/
|
|
38
38
|
async function syncToGlobal(options) {
|
|
39
|
-
// 1.
|
|
39
|
+
// 1. 确定迭代
|
|
40
40
|
let iterationName = options.iteration;
|
|
41
41
|
if (!iterationName) {
|
|
42
42
|
// 尝试从上下文获取
|
|
@@ -47,20 +47,20 @@ async function syncToGlobal(options) {
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
if (!iterationName) {
|
|
50
|
-
logger_1.logger.error('
|
|
50
|
+
logger_1.logger.error('未指定迭代。用法: speccore sync-global --iteration=<迭代名称>');
|
|
51
51
|
return;
|
|
52
52
|
}
|
|
53
|
-
//
|
|
53
|
+
// 标准化迭代名称
|
|
54
54
|
const iterDirName = iterationName.startsWith('Iteration-') ? iterationName : `Iteration-${iterationName}`;
|
|
55
55
|
const iterDir = (0, path_1.join)(process.cwd(), iterDirName);
|
|
56
56
|
if (!(await (0, fs_extra_1.pathExists)(iterDir))) {
|
|
57
|
-
logger_1.logger.error(
|
|
57
|
+
logger_1.logger.error(`迭代目录不存在: ${iterDirName}`);
|
|
58
58
|
return;
|
|
59
59
|
}
|
|
60
|
-
// 2.
|
|
60
|
+
// 2. 读取迭代需求文档
|
|
61
61
|
const iterReqPath = (0, path_1.join)(iterDir, '020-specs', 'REQUIREMENT.md');
|
|
62
62
|
if (!(await (0, fs_extra_1.pathExists)(iterReqPath))) {
|
|
63
|
-
logger_1.logger.error(
|
|
63
|
+
logger_1.logger.error(`迭代需求文档不存在: ${iterReqPath}`);
|
|
64
64
|
return;
|
|
65
65
|
}
|
|
66
66
|
const iterReqContent = await (0, fs_extra_1.readFile)(iterReqPath, 'utf-8');
|
|
@@ -73,7 +73,7 @@ async function syncToGlobal(options) {
|
|
|
73
73
|
iterReqIds.push(match[1]);
|
|
74
74
|
}
|
|
75
75
|
if (iterReqIds.length === 0) {
|
|
76
|
-
logger_1.logger.info('
|
|
76
|
+
logger_1.logger.info('迭代需求文档中未找到 REQ 编号,跳过同步。');
|
|
77
77
|
return;
|
|
78
78
|
}
|
|
79
79
|
// 5. 找到关联的全量层需求
|
|
@@ -87,7 +87,7 @@ async function syncToGlobal(options) {
|
|
|
87
87
|
const updatedProjects = new Set();
|
|
88
88
|
for (const req of relatedReqs) {
|
|
89
89
|
const globalDetail = await (0, global_layer_1.readRequirementDetail)(req.project, req.id);
|
|
90
|
-
//
|
|
90
|
+
// 从迭代需求文档中提取当前需求内容
|
|
91
91
|
const iterSectionRegex = new RegExp(`### ${req.id}[::][^]*?(?=\\n### |$)`, 'm');
|
|
92
92
|
const iterMatch = iterReqContent.match(iterSectionRegex);
|
|
93
93
|
const iterDetail = iterMatch ? iterMatch[0] : '';
|
|
@@ -108,7 +108,7 @@ async function syncToGlobal(options) {
|
|
|
108
108
|
logger_1.logger.info(`🔄 准备同步 ${iterDirName} → 全量层`);
|
|
109
109
|
logger_1.logger.info('');
|
|
110
110
|
if (changes.length === 0) {
|
|
111
|
-
logger_1.logger.info('✅
|
|
111
|
+
logger_1.logger.info('✅ 未检测到变更。迭代与全量层保持一致。');
|
|
112
112
|
return;
|
|
113
113
|
}
|
|
114
114
|
logger_1.logger.info('📊 检测到以下变更:');
|
|
@@ -132,14 +132,14 @@ async function syncToGlobal(options) {
|
|
|
132
132
|
logger_1.logger.info('');
|
|
133
133
|
logger_1.logger.success('✅ 同步完成!');
|
|
134
134
|
logger_1.logger.info('');
|
|
135
|
-
logger_1.logger.info(`📋 方向:
|
|
136
|
-
logger_1.logger.info(`
|
|
135
|
+
logger_1.logger.info(`📋 方向: 迭代 → 全量层`);
|
|
136
|
+
logger_1.logger.info(` 迭代: ${iterDirName}`);
|
|
137
137
|
logger_1.logger.info(` 同步需求: ${changes.length} 条`);
|
|
138
138
|
logger_1.logger.info(` 涉及项目: ${[...updatedProjects].join(', ')}`);
|
|
139
139
|
logger_1.logger.info(` 全量层版本: ${index.version} → ${newVersion}`);
|
|
140
140
|
}
|
|
141
141
|
/**
|
|
142
|
-
* 全量层 →
|
|
142
|
+
* 全量层 → 迭代同步
|
|
143
143
|
*/
|
|
144
144
|
async function syncFromGlobal(options) {
|
|
145
145
|
let iterationName = options.iteration;
|
|
@@ -151,18 +151,18 @@ async function syncFromGlobal(options) {
|
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
if (!iterationName) {
|
|
154
|
-
logger_1.logger.error('
|
|
154
|
+
logger_1.logger.error('未指定迭代。用法: speccore sync-global --iteration=<迭代名称> --direction=from_global');
|
|
155
155
|
return;
|
|
156
156
|
}
|
|
157
157
|
const iterDirName = iterationName.startsWith('Iteration-') ? iterationName : `Iteration-${iterationName}`;
|
|
158
158
|
const iterReqPath = (0, path_1.join)(process.cwd(), iterDirName, '020-specs', 'REQUIREMENT.md');
|
|
159
159
|
if (!(await (0, fs_extra_1.pathExists)(iterReqPath))) {
|
|
160
|
-
logger_1.logger.error(
|
|
160
|
+
logger_1.logger.error(`迭代需求文档不存在: ${iterReqPath}`);
|
|
161
161
|
return;
|
|
162
162
|
}
|
|
163
163
|
const index = await (0, global_layer_1.readGlobalIndex)();
|
|
164
164
|
const iterReqContent = await (0, fs_extra_1.readFile)(iterReqPath, 'utf-8');
|
|
165
|
-
//
|
|
165
|
+
// 解析迭代中的需求 ID
|
|
166
166
|
const iterReqIds = [];
|
|
167
167
|
const matches = iterReqContent.matchAll(/###\s+(REQ-\d+)[::]/g);
|
|
168
168
|
for (const match of matches) {
|
|
@@ -181,7 +181,7 @@ async function syncFromGlobal(options) {
|
|
|
181
181
|
reqName: req.name,
|
|
182
182
|
project: req.project,
|
|
183
183
|
changeType: '修改',
|
|
184
|
-
changeDesc: '
|
|
184
|
+
changeDesc: '全量层已更新,需要同步到迭代',
|
|
185
185
|
});
|
|
186
186
|
}
|
|
187
187
|
}
|
|
@@ -190,7 +190,7 @@ async function syncFromGlobal(options) {
|
|
|
190
190
|
logger_1.logger.info(`🔄 准备同步 全量层 → ${iterDirName}`);
|
|
191
191
|
logger_1.logger.info('');
|
|
192
192
|
if (changes.length === 0) {
|
|
193
|
-
logger_1.logger.info('✅
|
|
193
|
+
logger_1.logger.info('✅ 未检测到变更。全量层与迭代保持一致。');
|
|
194
194
|
return;
|
|
195
195
|
}
|
|
196
196
|
logger_1.logger.info(`📊 检测到 ${changes.length} 条变更`);
|
|
@@ -200,7 +200,7 @@ async function syncFromGlobal(options) {
|
|
|
200
200
|
logger_1.logger.info('使用 --force 或 --auto 执行同步。');
|
|
201
201
|
return;
|
|
202
202
|
}
|
|
203
|
-
//
|
|
203
|
+
// 执行同步:更新迭代需求文档
|
|
204
204
|
for (const change of changes) {
|
|
205
205
|
const globalDetail = await (0, global_layer_1.readRequirementDetail)(change.project, change.reqId);
|
|
206
206
|
if (globalDetail) {
|
package/dist/commands/sync.js
CHANGED
|
@@ -46,7 +46,7 @@ const transaction_1 = require("../core/transaction");
|
|
|
46
46
|
const reverse_sync_1 = require("../core/reverse-sync");
|
|
47
47
|
async function syncCommand(options) {
|
|
48
48
|
if (!options.task && !options.iteration) {
|
|
49
|
-
logger_1.logger.error('请指定要同步的 Task
|
|
49
|
+
logger_1.logger.error('请指定要同步的 Task 或迭代。用法: speccore sync --task=<Task编号> [--auto]');
|
|
50
50
|
return;
|
|
51
51
|
}
|
|
52
52
|
const spinner = new logger_1.Spinner('正在检测 Spec 差异...');
|
|
@@ -54,7 +54,7 @@ async function syncCommand(options) {
|
|
|
54
54
|
try {
|
|
55
55
|
const iteration = await (0, context_1.getDefaultIteration)(options.iteration);
|
|
56
56
|
if (!iteration) {
|
|
57
|
-
spinner.fail('
|
|
57
|
+
spinner.fail('未找到活跃迭代。请先运行: speccore iteration create --name <名称>');
|
|
58
58
|
return;
|
|
59
59
|
}
|
|
60
60
|
// --detect 模式:只检测差异,不修改
|
|
@@ -107,8 +107,8 @@ async function dryRunSync(options, iteration) {
|
|
|
107
107
|
await analyzeTaskDiff(options.task, iteration);
|
|
108
108
|
}
|
|
109
109
|
else {
|
|
110
|
-
logger_1.logger.info('📊
|
|
111
|
-
logger_1.logger.info(`
|
|
110
|
+
logger_1.logger.info('📊 迭代级差异分析:');
|
|
111
|
+
logger_1.logger.info(` 迭代: ${iteration}`);
|
|
112
112
|
// 扫描所有任务
|
|
113
113
|
const iterDir = (0, path_1.join)(process.cwd(), iteration);
|
|
114
114
|
if (await (0, fs_extra_1.pathExists)(iterDir)) {
|
|
@@ -205,14 +205,14 @@ async function syncTaskSpec(task, iteration, auto) {
|
|
|
205
205
|
async function syncIterationSpec(iteration, auto) {
|
|
206
206
|
const iterDir = (0, path_1.join)(process.cwd(), iteration);
|
|
207
207
|
if (!await (0, fs_extra_1.pathExists)(iterDir)) {
|
|
208
|
-
logger_1.logger.error(
|
|
208
|
+
logger_1.logger.error(`迭代目录不存在: ${iterDir}`);
|
|
209
209
|
return;
|
|
210
210
|
}
|
|
211
211
|
const { readdir } = await Promise.resolve().then(() => __importStar(require('fs-extra')));
|
|
212
212
|
const entries = await readdir(iterDir);
|
|
213
213
|
const tasks = entries.filter((e) => e.startsWith('Task-'));
|
|
214
214
|
const total = tasks.length;
|
|
215
|
-
logger_1.logger.info(
|
|
215
|
+
logger_1.logger.info(`正在同步迭代 ${iteration} 的 ${total} 个任务...`);
|
|
216
216
|
let synced = 0;
|
|
217
217
|
for (const task of tasks) {
|
|
218
218
|
await syncTaskSpec(task, iteration, auto);
|
package/dist/commands/update.js
CHANGED
|
@@ -30,7 +30,7 @@ const ALL_COMMANDS = [
|
|
|
30
30
|
['spec-track', '全链路追踪', 'speccore track --req=${1:REQ-001}'],
|
|
31
31
|
['spec-sync', '双向同步', 'speccore sync --global'],
|
|
32
32
|
['spec-rename', '重命名', 'speccore rename --iteration ${1:Q1} ${2:Q2}'],
|
|
33
|
-
['spec-create-iteration', '
|
|
33
|
+
['spec-create-iteration', '创建迭代', 'speccore iteration create -n ${1:Q2} --owner=${2:张三}'],
|
|
34
34
|
['spec-retro', '任务回顾报告', 'speccore retro --task ${1:Task-001}'],
|
|
35
35
|
['spec-context', '查看/切换上下文', 'speccore context --set --iteration ${1:Q1}'],
|
|
36
36
|
['spec-ops', '操作历史', 'speccore ops'],
|
package/dist/commands/welcome.js
CHANGED
|
@@ -52,7 +52,7 @@ async function welcomeCommand(_options) {
|
|
|
52
52
|
}
|
|
53
53
|
else {
|
|
54
54
|
await (0, fs_extra_1.writeFile)(outPath, html);
|
|
55
|
-
process.stdout.write('file://' + outPath + '\n');
|
|
55
|
+
process.stdout.write('✅ 页面已生成: file://' + outPath + '\n 预览: python3 -m http.server 8080 → http://localhost:8080/' + require('path').basename(outPath) + '\n');
|
|
56
56
|
}
|
|
57
57
|
return;
|
|
58
58
|
}
|
|
@@ -68,7 +68,7 @@ async function welcomeCommand(_options) {
|
|
|
68
68
|
return;
|
|
69
69
|
}
|
|
70
70
|
if (!iterName) {
|
|
71
|
-
logger_1.logger.info(box('📦 项目状态', [`${C.gray}
|
|
71
|
+
logger_1.logger.info(box('📦 项目状态', [`${C.gray}无活跃迭代${C.r}`, `${C.b}speccore iteration create -n Q1${C.r}`]));
|
|
72
72
|
logger_1.logger.info('');
|
|
73
73
|
showAskGuide();
|
|
74
74
|
return;
|
|
@@ -100,6 +100,6 @@ function renderWelcomeHtml(version, isInit, iterName, phase, taskCount) {
|
|
|
100
100
|
const now = new Date().toISOString().split('T')[0];
|
|
101
101
|
const phases = ['导入', '分析', '拆分', '计划', '执行', '交付'];
|
|
102
102
|
const doneIdx = ['doc', 'analyze', 'split', 'execute'].indexOf(phase) + (phase === 'execute' ? 1 : 0);
|
|
103
|
-
return `<!DOCTYPE html><html lang="zh-CN" data-theme="ocean"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>SpecCore — 项目名片</title><style>@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=JetBrains+Mono:wght@400;600;700&display=swap');[data-theme="ocean"]{--cyan:#0ea5e9;--bg:#0b1929;--card:rgba(13,31,56,.95);--border:rgba(14,165,233,.15);--text:#bae6fd;--muted:#5b7fa5;--green:#14b8a6;--orange:#f97316;--purple:#6366f1}*{margin:0;padding:0;box-sizing:border-box}body{font-family:'JetBrains Mono',monospace;background:var(--bg);color:var(--text);min-height:100vh;padding:40px 20px}.scanlines{position:fixed;inset:0;pointer-events:none;z-index:99;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,240,255,.015) 2px,rgba(0,240,255,.015) 4px)}.stars{position:fixed;inset:0;pointer-events:none;background:radial-gradient(1px 1px at 20% 30%,rgba(255,255,255,.3),transparent),radial-gradient(1.5px 1.5px at 60% 70%,rgba(14,165,233,.4),transparent)}.card{max-width:720px;margin:0 auto;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:40px;position:relative;overflow:hidden}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX 3s linear infinite}.card::after{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX-rev 3s linear infinite}@keyframes scanX{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}@keyframes scanX-rev{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}}@keyframes scanY{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}@keyframes scanY-rev{0%{transform:translateY(100%)}100%{transform:translateY(-100%)}}.vline{position:absolute;top:0;width:1px;bottom:0;pointer-events:none}.vline.l{left:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY-rev 3s linear infinite}.vline.r{right:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY 3s linear infinite}.center-node{width:90px;height:90px;border-radius:50%;border:2px solid var(--cyan);display:flex;align-items:center;justify-content:center;background:rgba(14,165,233,.08);margin:24px auto;font-family:Orbitron,sans-serif;font-size:20px;font-weight:900;background:linear-gradient(135deg,var(--cyan),var(--purple));-webkit-background-clip:text;-webkit-text-fill-color:transparent;position:relative;z-index:2}.modes-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:20px 0}.mode-card{border-radius:10px;padding:14px;position:relative;overflow:hidden;background:rgba(255,255,255,.02)}.mode-card.m1{border:1.5px solid var(--green)}.mode-card.m2{border:1.5px solid var(--orange)}.mode-card.m3{border:1.5px solid var(--cyan)}.mode-card.m4{border:1.5px solid var(--purple)}.mode-card .mode-title{font-weight:600;margin:6px 0;font-size:13px}.mode-card.m1 .mode-title{color:var(--green)}.mode-card.m2 .mode-title{color:var(--orange)}.mode-card.m3 .mode-title{color:var(--cyan)}.mode-card.m4 .mode-title{color:var(--purple)}.mode-card .mode-icon{font-size:18px;margin-right:4px}.mode-card .mode-desc{font-size:10px;color:var(--muted);margin:4px 0}.mode-card .mode-tag{display:inline-block;padding:2px 8px;font-size:9px;border-radius:4px;background:rgba(20,184,166,.1);color:var(--green);margin-top:6px}.mode-card.m1 .mode-tag{background:rgba(20,184,166,.08);color:var(--green)}.mode-card.m2 .mode-tag{background:rgba(249,115,22,.08);color:var(--orange)}.mode-card.m3 .mode-tag{background:rgba(14,165,233,.08);color:var(--cyan)}.mode-card.m4 .mode-tag{background:rgba(99,102,241,.08);color:var(--purple)}.status-row{display:flex;align-items:center;gap:8px;margin:8px 0;padding:10px 14px;background:rgba(14,165,233,.04);border:1px solid rgba(14,165,233,.1);border-radius:8px}.flow{display:flex;align-items:center;gap:
|
|
103
|
+
return `<!DOCTYPE html><html lang="zh-CN" data-theme="ocean"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>SpecCore — 项目名片</title><style>@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=JetBrains+Mono:wght@400;600;700&display=swap');[data-theme="ocean"]{--cyan:#0ea5e9;--bg:#0b1929;--card:rgba(13,31,56,.95);--border:rgba(14,165,233,.15);--text:#bae6fd;--muted:#5b7fa5;--green:#14b8a6;--orange:#f97316;--purple:#6366f1}*{margin:0;padding:0;box-sizing:border-box}body{font-family:'JetBrains Mono',monospace;background:var(--bg);color:var(--text);min-height:100vh;padding:40px 20px}.scanlines{position:fixed;inset:0;pointer-events:none;z-index:99;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,240,255,.015) 2px,rgba(0,240,255,.015) 4px)}.stars{position:fixed;inset:0;pointer-events:none;background:radial-gradient(1px 1px at 20% 30%,rgba(255,255,255,.3),transparent),radial-gradient(1.5px 1.5px at 60% 70%,rgba(14,165,233,.4),transparent)}.card{max-width:720px;margin:0 auto;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:40px;position:relative;overflow:hidden}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX 3s linear infinite}.card::after{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX-rev 3s linear infinite}@keyframes scanX{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}@keyframes scanX-rev{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}}@keyframes scanY{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}@keyframes scanY-rev{0%{transform:translateY(100%)}100%{transform:translateY(-100%)}}.vline{position:absolute;top:0;width:1px;bottom:0;pointer-events:none}.vline.l{left:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY-rev 3s linear infinite}.vline.r{right:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY 3s linear infinite}.center-node{width:90px;height:90px;border-radius:50%;border:2px solid var(--cyan);display:flex;align-items:center;justify-content:center;background:rgba(14,165,233,.08);margin:24px auto;font-family:Orbitron,sans-serif;font-size:20px;font-weight:900;background:linear-gradient(135deg,var(--cyan),var(--purple));-webkit-background-clip:text;-webkit-text-fill-color:transparent;position:relative;z-index:2}.modes-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:20px 0}.mode-card{border-radius:10px;padding:14px;position:relative;overflow:hidden;background:rgba(255,255,255,.02)}.mode-card.m1{border:1.5px solid var(--green)}.mode-card.m2{border:1.5px solid var(--orange)}.mode-card.m3{border:1.5px solid var(--cyan)}.mode-card.m4{border:1.5px solid var(--purple)}.mode-card .mode-title{font-weight:600;margin:6px 0;font-size:13px}.mode-card.m1 .mode-title{color:var(--green)}.mode-card.m2 .mode-title{color:var(--orange)}.mode-card.m3 .mode-title{color:var(--cyan)}.mode-card.m4 .mode-title{color:var(--purple)}.mode-card .mode-icon{font-size:18px;margin-right:4px}.mode-card .mode-desc{font-size:10px;color:var(--muted);margin:4px 0}.mode-card .mode-tag{display:inline-block;padding:2px 8px;font-size:9px;border-radius:4px;background:rgba(20,184,166,.1);color:var(--green);margin-top:6px}.mode-card.m1 .mode-tag{background:rgba(20,184,166,.08);color:var(--green)}.mode-card.m2 .mode-tag{background:rgba(249,115,22,.08);color:var(--orange)}.mode-card.m3 .mode-tag{background:rgba(14,165,233,.08);color:var(--cyan)}.mode-card.m4 .mode-tag{background:rgba(99,102,241,.08);color:var(--purple)}.status-row{display:flex;align-items:center;gap:8px;margin:8px 0;padding:10px 14px;background:rgba(14,165,233,.04);border:1px solid rgba(14,165,233,.1);border-radius:8px}.flow{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.flow-dot{width:10px;height:10px;border-radius:50%}.flow-dot.done{background:var(--green);box-shadow:0 0 8px var(--green)}.flow-dot.pending{background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.2)}.flow-arrow{color:var(--muted);font-size:10px}.flow-label{font-size:10px;color:var(--muted)}.flow-label.done{color:var(--green)}.cmd-row{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}.cmd-pill{padding:3px 10px;border-radius:4px;font-size:10px;background:rgba(14,165,233,.1);color:var(--cyan);border:1px solid rgba(14,165,233,.15)}.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}h1{font-family:'Orbitron',sans-serif;font-size:32px;font-weight:900;background:linear-gradient(135deg,var(--cyan),var(--purple));-webkit-background-clip:text;-webkit-text-fill-color:transparent;letter-spacing:2px;text-align:center}.sub{color:var(--muted);font-size:11px;letter-spacing:1px;text-align:center;margin-top:4px}.section-title{font-size:10px;font-weight:700;color:var(--cyan);text-transform:uppercase;letter-spacing:2px;margin:20px 0 10px}.confirm-bar{text-align:center;padding:18px;margin:24px 0 8px;background:linear-gradient(135deg,var(--cyan) 0%,#0284c7 100%);border-radius:40px;color:#fff;font-weight:600;font-size:14px;box-shadow:0 0 30px rgba(14,165,233,.3);cursor:pointer;letter-spacing:1px}.section{margin:14px 0;padding:14px;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.04);border-radius:10px}</style></head><body><div class="scanlines"></div><div class="stars"></div><div class="card"><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE</h1><div class="sub">Code by Spec, Not by Vibe · v${version}${iterName ? ' · ' + iterName : ''}</div><div class="status-row"><span>📍</span><div><div style="font-size:11px;font-weight:600">${phaseLabel}</div><div style="font-size:9px;color:var(--muted)">${isInit ? (iterName ? '当前迭代: ' + iterName + (taskCount > 0 ? ' · ' + taskCount + ' 任务' : '') : '已初始化 · 无活跃迭代') : '未初始化'}</div></div></div><div class="section-title">🔄 核心流水线</div><div class="section"><div class="flow">${phases.map((n, i) => '<span class="flow-dot ' + (i < doneIdx ? 'done' : 'pending') + '"></span><span class="flow-label ' + (i < doneIdx ? 'done' : '') + '">' + n + '</span>' + (i < 5 ? '<span class="flow-arrow">→</span>' : '')).join('')}</div></div><div class="section-title">🧠 ask — SpecCore 万能 AI 入口</div><div class="modes-grid"><div class="mode-card m1"><div class="mode-title"><span class="mode-icon">📖</span>命令解释</div><div class="mode-desc">"dashboard 怎么用"<br>"init 有哪些参数"</div><div class="mode-tag">知识库匹配</div></div><div class="mode-card m2"><div class="mode-title"><span class="mode-icon">🗺️</span>任务指引</div><div class="mode-desc">"我想做一个登录功能"<br>"怎么开始新项目"</div><div class="mode-tag">工作流生成</div></div><div class="mode-card m3"><div class="mode-title"><span class="mode-icon">🎯</span>意图匹配</div><div class="mode-desc">"查看进度" → dashboard<br>"审查代码" → validate</div><div class="mode-tag">38意图 + AI</div></div><div class="mode-card m4"><div class="mode-title"><span class="mode-icon">⚡</span>复杂编排</div><div class="mode-desc">"计划所有任务晚8点分批"<br>"做完分析→拆分→PR"</div><div class="mode-tag">Pipeline 引擎</div></div></div><div class="confirm-bar">确认进入 · 输入 <code style="background:rgba(255,255,255,.2);padding:2px 8px;border-radius:4px">speccore ask "你的需求"</code> 开始</div><div class="section-title">━━ 常用命令 ━━</div><div class="cmd-row"><span class="cmd-pill">speccore dashboard</span><span class="cmd-pill">speccore dev --auto</span><span class="cmd-pill">speccore ask "描述"</span><span class="cmd-pill">speccore help</span></div><div class="footer">由 SpecCore 驱动 v${version} · ${now}</div></div></body></html>`;
|
|
104
104
|
}
|
|
105
105
|
//# sourceMappingURL=welcome.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/commands/welcome.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/commands/welcome.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,7 +74,7 @@ async function generateAIContext(input) {
|
|
|
74
74
|
// ── 构建 Prompt ──
|
|
75
75
|
function buildPrompt(params) {
|
|
76
76
|
const { scope, iteration, taskId, depth, reqContents, fileTree, apiInventory, modules, constitutionInfo, platformSourceMap } = params;
|
|
77
|
-
const scopeLabel = scope === 'global' ? '全局' : scope === 'task' ? `任务 ${taskId}` :
|
|
77
|
+
const scopeLabel = scope === 'global' ? '全局' : scope === 'task' ? `任务 ${taskId}` : `迭代 ${iteration || '当前'}`;
|
|
78
78
|
return `# SpecCore AI 分析上下文
|
|
79
79
|
|
|
80
80
|
> 自动生成 | ${new Date().toISOString().split('T')[0]} | Scope: ${scopeLabel} | Depth: ${depth}
|
|
@@ -5,7 +5,7 @@ export interface AnalyzeInput {
|
|
|
5
5
|
requirements: string[];
|
|
6
6
|
/** 输出范围 */
|
|
7
7
|
scope: 'global' | 'iteration' | 'task';
|
|
8
|
-
/**
|
|
8
|
+
/** 迭代名称 (scope=iteration|task 必填) */
|
|
9
9
|
iteration?: string;
|
|
10
10
|
/** 任务 ID (scope=task 必填) */
|
|
11
11
|
taskId?: string;
|
|
@@ -635,7 +635,7 @@ function buildIterationReqReport(input, issues, archImpact) {
|
|
|
635
635
|
const iter = input.iteration || 'current';
|
|
636
636
|
const blockerCount = issues.filter(i => i.severity === 'blocker').length;
|
|
637
637
|
let r = `# 需求分析报告\n\n`;
|
|
638
|
-
r += `>
|
|
638
|
+
r += `> 迭代: ${iter} | 分析时间: ${now} | 状态: ${blockerCount > 0 ? '🔴 有阻断' : '🟢 可拆分'}\n\n`;
|
|
639
639
|
r += `---\n\n`;
|
|
640
640
|
r += `## 1. 需求完整性检查\n\n`;
|
|
641
641
|
r += `| 严重度 | 分类 | 问题 |\n| :--- | :--- | :--- |\n`;
|
|
@@ -683,7 +683,7 @@ function buildIterationReqReport(input, issues, archImpact) {
|
|
|
683
683
|
function buildTaskReqReport(input, issues, archImpact) {
|
|
684
684
|
const now = new Date().toISOString().split('T')[0];
|
|
685
685
|
let r = `# 任务需求分析\n\n`;
|
|
686
|
-
r += `>
|
|
686
|
+
r += `> 迭代: ${input.iteration} | 任务: ${input.taskId} | 分析: ${now}\n\n---\n\n`;
|
|
687
687
|
r += `## 问题清单\n`;
|
|
688
688
|
if (issues.length === 0)
|
|
689
689
|
r += `> ✅ 无问题\n`;
|
|
@@ -791,7 +791,7 @@ function buildCodeHealthReport(input, stats, apis, hotspots, deps) {
|
|
|
791
791
|
function buildIterationCodeReport(input, stats, apis, hotspots, deps) {
|
|
792
792
|
const now = new Date().toISOString().split('T')[0];
|
|
793
793
|
let r = `# 代码分析报告\n\n`;
|
|
794
|
-
r += `>
|
|
794
|
+
r += `> 迭代: ${input.iteration || 'current'} | 分析: ${now} | 目录: ${input.sources.join(', ')}\n\n`;
|
|
795
795
|
r += `---\n\n`;
|
|
796
796
|
r += `## 统计\n\n`;
|
|
797
797
|
r += `| 指标 | 值 |\n| :--- | :--- |\n`;
|
|
@@ -815,7 +815,7 @@ function buildIterationCodeReport(input, stats, apis, hotspots, deps) {
|
|
|
815
815
|
function buildTaskCodeReport(input, stats, apis, hotspots) {
|
|
816
816
|
const now = new Date().toISOString().split('T')[0];
|
|
817
817
|
let r = `# 任务代码审查\n\n`;
|
|
818
|
-
r += `>
|
|
818
|
+
r += `> 迭代: ${input.iteration} | 任务: ${input.taskId} | ${now}\n\n---\n\n`;
|
|
819
819
|
r += `## 变更文件 (${stats.totalFiles})\n\n`;
|
|
820
820
|
r += `| 文件 | 行数 |\n| :--- | :--- |\n`;
|
|
821
821
|
for (const f of stats.largestFiles.slice(0, 15))
|
|
@@ -839,7 +839,7 @@ function buildAIEnhancedReport(input, scope, params) {
|
|
|
839
839
|
const iter = input.iteration || 'current';
|
|
840
840
|
const blockerCount = issues.filter(i => i.severity === 'blocker').length;
|
|
841
841
|
let r = `# ${scope === 'global' ? '全局架构影响分析' : scope === 'task' ? '任务综合分析' : '需求分析报告'}\n\n`;
|
|
842
|
-
r += `>
|
|
842
|
+
r += `> 迭代: ${iter} | 时间: ${now} | 状态: ${blockerCount > 0 ? '🔴 有阻断' : '🟢 可拆分'}\n`;
|
|
843
843
|
r += `> 需求: ${input.requirements.length} 个 | 源码文件: ${fileStats.totalFiles} 个 | API: ${apiInventory.length} 个\n`;
|
|
844
844
|
r += `> **AI 上下文**: [${aiContext.promptPath}](${aiContext.promptPath})\n\n`;
|
|
845
845
|
r += `---\n\n`;
|
package/dist/core/ask-engine.js
CHANGED
|
@@ -21,7 +21,7 @@ const COMMAND_KB = [
|
|
|
21
21
|
usage: 'speccore doc2spec -f <file> --iter <iteration> [--task <task>] [--no-ai]', examples: ['speccore doc2spec -f PRD.docx --iter Q3', 'speccore doc2spec -f 需求.docx --iter Q2 --task T-01 --no-ai'], related: ['spec2doc', 'analyze'], triggers: ['导入', 'doc2spec', 'word转', '文档转换', 'PRD', '需求文档'] },
|
|
22
22
|
{ name: 'spec2doc', aliases: ['s2d'], description: 'SpecCore MD 导出为 Word/PDF/HTML/PPTX',
|
|
23
23
|
usage: 'speccore spec2doc [-i <iteration>] [-t <task>] [-f <format>] [-o <output>]', examples: ['speccore spec2doc -i Q3 -o 需求.docx', 'speccore spec2doc -t T-01 -f html'], related: ['doc2spec'], triggers: ['导出', 'spec2doc', '生成文档', '导出word', '导出pdf'] },
|
|
24
|
-
{ name: 'dashboard', aliases: ['db', 'sp'], description: '
|
|
24
|
+
{ name: 'dashboard', aliases: ['db', 'sp'], description: '项目仪表盘:迭代状态/进度/健康度,--scope global 全量视图',
|
|
25
25
|
usage: 'speccore dashboard [--scope global|iteration] [--export html] [--health] [--lifecycle]', examples: ['speccore dashboard', 'speccore dashboard --scope global --export html'], related: ['analyze', 'health'], triggers: ['看板', '仪表盘', 'dashboard', '进度', '状态', '全局', '全量'] },
|
|
26
26
|
{ name: 'analyze', aliases: ['al'], description: 'AI 统一分析:需求文档+源码→分析报告,--audit 审计模式',
|
|
27
27
|
usage: 'speccore analyze [--task <id>] [--iteration <name>] [--audit]', examples: ['speccore analyze', 'speccore analyze --task T-01 --audit'], related: ['dashboard', 'validate'], triggers: ['分析', 'analyze', '审计', 'audit', '检查'] },
|
|
@@ -46,12 +46,12 @@ const COMMAND_KB = [
|
|
|
46
46
|
{ name: 'task', aliases: ['tk'], description: '任务管理:创建/列表/状态。子命令: new, list, status',
|
|
47
47
|
usage: 'speccore task new --name <name> [--id <id>] | speccore task list | speccore task status', examples: ['speccore task new --name "用户登录"', 'speccore task list'], related: ['plan', 'execute'], triggers: ['task', '任务', '创建任务', '新建'] },
|
|
48
48
|
{ name: 'iteration', aliases: ['it'], description: '迭代管理:创建时自动生成唯一编码(Iteration-001-功能名),支持拆分/列表',
|
|
49
|
-
usage: 'speccore iteration create -n <name> | speccore iteration split | speccore iteration list', examples: ['speccore iteration create -n Q3 → Iteration-001-Q3', 'speccore iteration list'], related: ['task', 'plan'], triggers: ['
|
|
49
|
+
usage: 'speccore iteration create -n <name> | speccore iteration split | speccore iteration list', examples: ['speccore iteration create -n Q3 → Iteration-001-Q3', 'speccore iteration list'], related: ['task', 'plan'], triggers: ['迭代', 'iteration', '迭代', 'sprint'] },
|
|
50
50
|
{ name: 'search', aliases: ['sh'], description: '全文搜索:跨所有 Spec 文件关键词检索',
|
|
51
51
|
usage: 'speccore search <query> [--task <id>] [--iteration <name>]', examples: ['speccore search "登录"', 'speccore search "支付" --iteration Q2'], related: ['track'], triggers: ['搜索', 'search', '查找', '检索', 'grep'] },
|
|
52
52
|
{ name: 'track', aliases: ['trk'], description: '合并 trace + tracker: REQ→Task→Code 全链路追踪',
|
|
53
53
|
usage: 'speccore track [--req <id>] [--task <id>] [--full]', examples: ['speccore track --req REQ-001', 'speccore track --full'], related: ['search', 'analyze'], triggers: ['追踪', 'track', 'trace', '链路', '追溯'] },
|
|
54
|
-
{ name: 'rename', aliases: ['rn'], description: '
|
|
54
|
+
{ name: 'rename', aliases: ['rn'], description: '重命名迭代/任务,自动更新所有关联引用',
|
|
55
55
|
usage: 'speccore rename [--iteration <old> <new>] [--task <old> <new>]', examples: ['speccore rename --iteration Q2 Q3', 'speccore rename --task T-01 T-10'], related: ['sync'], triggers: ['重命名', 'rename', '改名', '更名'] },
|
|
56
56
|
];
|
|
57
57
|
exports.COMMAND_KB = COMMAND_KB;
|
|
@@ -199,7 +199,7 @@ function handleGuide(input) {
|
|
|
199
199
|
matchedWorkflow = WORKFLOWS['batch execute'];
|
|
200
200
|
workflowName = '批量执行流程';
|
|
201
201
|
}
|
|
202
|
-
else if (
|
|
202
|
+
else if (/创建.*迭代创建.*迭代/i.test(input)) {
|
|
203
203
|
// 不应该进 guide 模式——让调用方降级到 match
|
|
204
204
|
throw new Error('FALLBACK_TO_MATCH');
|
|
205
205
|
}
|