speccore 5.15.0 → 5.18.0

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 (99) hide show
  1. package/README.en.md +8 -8
  2. package/README.md +16 -17
  3. package/dist/cli.js +298 -14
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/analyze.d.ts.map +1 -1
  6. package/dist/commands/analyze.js +179 -47
  7. package/dist/commands/analyze.js.map +1 -1
  8. package/dist/commands/change.d.ts.map +1 -1
  9. package/dist/commands/change.js.map +1 -1
  10. package/dist/commands/config.d.ts +4 -0
  11. package/dist/commands/config.d.ts.map +1 -1
  12. package/dist/commands/config.js +18 -0
  13. package/dist/commands/config.js.map +1 -1
  14. package/dist/commands/context-output.d.ts +7 -0
  15. package/dist/commands/context-output.d.ts.map +1 -0
  16. package/dist/commands/context-output.js +86 -0
  17. package/dist/commands/context-output.js.map +1 -0
  18. package/dist/commands/dev.d.ts +7 -0
  19. package/dist/commands/dev.d.ts.map +1 -0
  20. package/dist/commands/dev.js +179 -0
  21. package/dist/commands/dev.js.map +1 -0
  22. package/dist/commands/execute.d.ts +3 -0
  23. package/dist/commands/execute.d.ts.map +1 -1
  24. package/dist/commands/execute.js +85 -13
  25. package/dist/commands/execute.js.map +1 -1
  26. package/dist/commands/help-quick.d.ts +3 -0
  27. package/dist/commands/help-quick.d.ts.map +1 -0
  28. package/dist/commands/help-quick.js +66 -0
  29. package/dist/commands/help-quick.js.map +1 -0
  30. package/dist/commands/history.d.ts +1 -0
  31. package/dist/commands/history.d.ts.map +1 -1
  32. package/dist/commands/history.js +26 -0
  33. package/dist/commands/history.js.map +1 -1
  34. package/dist/commands/init.d.ts.map +1 -1
  35. package/dist/commands/init.js.map +1 -1
  36. package/dist/commands/iteration/split.js +134 -3
  37. package/dist/commands/iteration/split.js.map +1 -1
  38. package/dist/commands/lifecycle.d.ts.map +1 -1
  39. package/dist/commands/lifecycle.js +43 -2
  40. package/dist/commands/lifecycle.js.map +1 -1
  41. package/dist/commands/merge-check.d.ts +10 -0
  42. package/dist/commands/merge-check.d.ts.map +1 -0
  43. package/dist/commands/merge-check.js +148 -0
  44. package/dist/commands/merge-check.js.map +1 -0
  45. package/dist/commands/pr.d.ts +9 -0
  46. package/dist/commands/pr.d.ts.map +1 -0
  47. package/dist/commands/pr.js +97 -0
  48. package/dist/commands/pr.js.map +1 -0
  49. package/dist/commands/spec.d.ts.map +1 -1
  50. package/dist/commands/spec.js +5 -1
  51. package/dist/commands/spec.js.map +1 -1
  52. package/dist/commands/status-panel.d.ts +2 -0
  53. package/dist/commands/status-panel.d.ts.map +1 -0
  54. package/dist/commands/status-panel.js +143 -0
  55. package/dist/commands/status-panel.js.map +1 -0
  56. package/dist/commands/tracker.d.ts +2 -0
  57. package/dist/commands/tracker.d.ts.map +1 -0
  58. package/dist/commands/tracker.js +28 -0
  59. package/dist/commands/tracker.js.map +1 -0
  60. package/dist/core/code-scanner.d.ts +26 -0
  61. package/dist/core/code-scanner.d.ts.map +1 -0
  62. package/dist/core/code-scanner.js +223 -0
  63. package/dist/core/code-scanner.js.map +1 -0
  64. package/dist/core/constitution-builder.d.ts +2 -0
  65. package/dist/core/constitution-builder.d.ts.map +1 -0
  66. package/dist/core/constitution-builder.js +216 -0
  67. package/dist/core/constitution-builder.js.map +1 -0
  68. package/dist/core/execution-state.d.ts.map +1 -1
  69. package/dist/core/execution-state.js +4 -0
  70. package/dist/core/execution-state.js.map +1 -1
  71. package/dist/core/intent-ai.d.ts +19 -0
  72. package/dist/core/intent-ai.d.ts.map +1 -0
  73. package/dist/core/intent-ai.js +138 -0
  74. package/dist/core/intent-ai.js.map +1 -0
  75. package/dist/core/requirement-tracker.d.ts +24 -0
  76. package/dist/core/requirement-tracker.d.ts.map +1 -0
  77. package/dist/core/requirement-tracker.js +88 -0
  78. package/dist/core/requirement-tracker.js.map +1 -0
  79. package/dist/core/risk-scorer.d.ts +15 -5
  80. package/dist/core/risk-scorer.d.ts.map +1 -1
  81. package/dist/core/risk-scorer.js +135 -6
  82. package/dist/core/risk-scorer.js.map +1 -1
  83. package/dist/core/spec-annotations.d.ts +35 -0
  84. package/dist/core/spec-annotations.d.ts.map +1 -0
  85. package/dist/core/spec-annotations.js +203 -0
  86. package/dist/core/spec-annotations.js.map +1 -0
  87. package/dist/core/unified-config.d.ts +44 -0
  88. package/dist/core/unified-config.d.ts.map +1 -0
  89. package/dist/core/unified-config.js +141 -0
  90. package/dist/core/unified-config.js.map +1 -0
  91. package/package.json +2 -2
  92. package/dist/commands/hooks.d.ts +0 -5
  93. package/dist/commands/hooks.d.ts.map +0 -1
  94. package/dist/commands/hooks.js +0 -22
  95. package/dist/commands/hooks.js.map +0 -1
  96. package/dist/commands/research.d.ts +0 -14
  97. package/dist/commands/research.d.ts.map +0 -1
  98. package/dist/commands/research.js +0 -181
  99. package/dist/commands/research.js.map +0 -1
@@ -1,9 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.installHooks = installHooks;
3
4
  exports.configCommand = configCommand;
4
5
  const fs_extra_1 = require("fs-extra");
5
6
  const logger_1 = require("../utils/logger");
6
7
  const CONFIG_PATH = '.speccore/SETTINGS.md';
8
+ /**
9
+ * Install Git hooks (pre-commit + pre-push)
10
+ */
11
+ function installHooks() {
12
+ try {
13
+ const { installGitHooks } = require('../core/git-integration');
14
+ const result = installGitHooks();
15
+ logger_1.logger.success('Git hooks installed:');
16
+ if (result.preCommit)
17
+ logger_1.logger.info(' .git/hooks/pre-commit (check @spec annotations)');
18
+ if (result.prePush)
19
+ logger_1.logger.info(' .git/hooks/pre-push (run speccore validate)');
20
+ }
21
+ catch (error) {
22
+ logger_1.logger.error('Failed to install Git hooks: ' + error);
23
+ }
24
+ }
7
25
  async function configCommand(options) {
8
26
  const spinner = new logger_1.Spinner('Processing configuration');
9
27
  spinner.start();
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface ContextOptions {
2
+ task?: string;
3
+ iteration?: string;
4
+ format?: 'text' | 'markdown';
5
+ }
6
+ export declare function contextCommand(options: ContextOptions): Promise<void>;
7
+ //# sourceMappingURL=context-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-output.d.ts","sourceRoot":"","sources":["../../src/commands/context-output.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;CAC9B;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA4E3E"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.contextCommand = contextCommand;
4
+ /**
5
+ * context — 输出任务完整上下文,供任何 AI 使用
6
+ */
7
+ const fs_extra_1 = require("fs-extra");
8
+ const path_1 = require("path");
9
+ const logger_1 = require("../utils/logger");
10
+ const unified_config_1 = require("../core/unified-config");
11
+ const context_1 = require("../core/context");
12
+ async function contextCommand(options) {
13
+ const iteration = await (0, context_1.getDefaultIteration)(options.iteration);
14
+ if (!iteration) {
15
+ logger_1.logger.error('No active iteration');
16
+ return;
17
+ }
18
+ const iterDir = `期次-${iteration}`;
19
+ const fs = require('fs');
20
+ // Find task
21
+ let taskId = options.task;
22
+ if (!taskId) {
23
+ const entries = fs.readdirSync(iterDir, { withFileTypes: true });
24
+ const tasks = entries.filter((e) => e.isDirectory() && e.name.startsWith('Task-'));
25
+ if (tasks.length === 0) {
26
+ logger_1.logger.error('No tasks found');
27
+ return;
28
+ }
29
+ taskId = tasks[0].name;
30
+ }
31
+ const entries = fs.readdirSync(iterDir, { withFileTypes: true });
32
+ const taskEntry = entries.find((e) => e.isDirectory() && e.name.startsWith(taskId));
33
+ if (!taskEntry) {
34
+ logger_1.logger.error(`Task not found: ${taskId}`);
35
+ return;
36
+ }
37
+ const backendDir = (0, path_1.join)(iterDir, taskEntry.name, 'backend');
38
+ const sharedDir = (0, path_1.join)(iterDir, taskEntry.name, '_shared');
39
+ const config = await (0, unified_config_1.loadConfig)();
40
+ // Collect context
41
+ const context = [];
42
+ // CONSTITUTION
43
+ const constitutionPath = '.speccore/PROJECT/CONSTITUTION.md';
44
+ if (await (0, fs_extra_1.pathExists)(constitutionPath)) {
45
+ const constitution = await (0, fs_extra_1.readFile)(constitutionPath, 'utf-8');
46
+ context.push('## 项目宪法(必须遵守)\n');
47
+ context.push(constitution);
48
+ }
49
+ // REQ
50
+ if (await (0, fs_extra_1.pathExists)((0, path_1.join)(backendDir, 'REQ.md'))) {
51
+ context.push('\n## 需求规格\n');
52
+ context.push(await (0, fs_extra_1.readFile)((0, path_1.join)(backendDir, 'REQ.md'), 'utf-8'));
53
+ }
54
+ // TECH
55
+ if (await (0, fs_extra_1.pathExists)((0, path_1.join)(backendDir, 'TECH.md'))) {
56
+ context.push('\n## 技术方案\n');
57
+ const tech = await (0, fs_extra_1.readFile)((0, path_1.join)(backendDir, 'TECH.md'), 'utf-8');
58
+ context.push(tech.slice(0, 2000)); // limit
59
+ }
60
+ // API Contract
61
+ if (await (0, fs_extra_1.pathExists)((0, path_1.join)(sharedDir, 'API_CONTRACT.yaml'))) {
62
+ context.push('\n## API 契约\n```yaml');
63
+ context.push(await (0, fs_extra_1.readFile)((0, path_1.join)(sharedDir, 'API_CONTRACT.yaml'), 'utf-8'));
64
+ context.push('```');
65
+ }
66
+ // TEST
67
+ if (await (0, fs_extra_1.pathExists)((0, path_1.join)(backendDir, 'TEST.md'))) {
68
+ context.push('\n## 测试要求\n');
69
+ const test = await (0, fs_extra_1.readFile)((0, path_1.join)(backendDir, 'TEST.md'), 'utf-8');
70
+ context.push(test.slice(0, 1000));
71
+ }
72
+ // Tech stack
73
+ if (config.tech_stack) {
74
+ context.push('\n## 技术栈\n');
75
+ for (const [k, v] of Object.entries(config.tech_stack)) {
76
+ if (v)
77
+ context.push(`- ${k}: ${v}`);
78
+ }
79
+ }
80
+ const output = context.join('\n');
81
+ logger_1.logger.info(`\n📋 ${taskEntry.name} 上下文 (${output.length} 字符):\n`);
82
+ logger_1.logger.info(output);
83
+ logger_1.logger.info('\n---');
84
+ logger_1.logger.info('💡 复制以上内容到任何 AI 工具(Copilot/Claude/GPT),基于 Spec 生成代码');
85
+ }
86
+ //# sourceMappingURL=context-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-output.js","sourceRoot":"","sources":["../../src/commands/context-output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface DevOptions {
2
+ iteration?: string;
3
+ force?: boolean;
4
+ }
5
+ export declare function devCommand(options: DevOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAmBA,UAAU,UAAU;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA2FnE"}
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.devCommand = devCommand;
4
+ /**
5
+ * dev — 智能开发入口(对标 Spec-Kit 的 5-slash 体验)
6
+ *
7
+ * 自动检测当前阶段,一键推进到下一步。无需记住 65 个命令。
8
+ *
9
+ * 阶段检测:
10
+ * init? → 引导初始化
11
+ * 有需求文档? → analyze
12
+ * 有 ANALYSIS.md? → split
13
+ * 有 Task? → execute
14
+ * 有代码? → lifecycle → pr
15
+ * 有 PR? → merge-check → done
16
+ */
17
+ const fs_extra_1 = require("fs-extra");
18
+ const path_1 = require("path");
19
+ const child_process_1 = require("child_process");
20
+ const logger_1 = require("../utils/logger");
21
+ const context_1 = require("../core/context");
22
+ async function devCommand(options) {
23
+ const iteration = await (0, context_1.getDefaultIteration)(options.iteration);
24
+ if (!iteration) {
25
+ // Phase 0: 未初始化
26
+ logger_1.logger.info('\n🔍 检测到项目尚未初始化');
27
+ logger_1.logger.info('');
28
+ logger_1.logger.info('下一步: speccore init');
29
+ logger_1.logger.info('用途: 初始化 SpecCore 项目结构');
30
+ if (!options.force)
31
+ return;
32
+ (0, child_process_1.execSync)('speccore init', { stdio: 'inherit' });
33
+ return;
34
+ }
35
+ const iterDir = `期次-${iteration}`;
36
+ logger_1.logger.info(`\n📍 期次: ${iteration}`);
37
+ logger_1.logger.info('');
38
+ // Phase 1: Check for requirement docs
39
+ const reqDoc = (0, path_1.join)(iterDir, '00-需求文档', 'REQUIREMENT.md');
40
+ if (!(await (0, fs_extra_1.pathExists)(reqDoc))) {
41
+ showPhase('导入需求', [
42
+ 'speccore word2spec --files "doc.docx=端名" -i ' + iteration,
43
+ '将 Word/MD 需求文档导入为 Spec 格式',
44
+ ]);
45
+ return;
46
+ }
47
+ // Phase 2: Check for ANALYSIS.md
48
+ const analysis = (0, path_1.join)(iterDir, '00-需求文档', 'ANALYSIS.md');
49
+ if (!(await (0, fs_extra_1.pathExists)(analysis))) {
50
+ showPhase('分析需求', [
51
+ 'speccore analyze --iteration=' + iteration,
52
+ '自动扫描完整性 + 源码对标 + 宪法检查',
53
+ ]);
54
+ return;
55
+ }
56
+ // Phase 3: Check for tasks
57
+ const hasTasks = await hasTaskDirs(iterDir);
58
+ if (!hasTasks) {
59
+ showPhase('拆分任务', [
60
+ 'speccore iteration split --iteration=' + iteration,
61
+ '拆分为独立 Task,生成 11 份文档',
62
+ ]);
63
+ return;
64
+ }
65
+ // Phase 4: Check task execution status
66
+ const pendingTasks = await getPendingTasks(iterDir);
67
+ if (pendingTasks.length > 0) {
68
+ const first = pendingTasks[0];
69
+ showPhase(`执行任务 (${pendingTasks.length} 个待开发)`, [
70
+ `speccore execute --task=${first} --force`,
71
+ pendingTasks.length > 3
72
+ ? `speccore execute --all --batch-size=3 --force (批量执行)`
73
+ : `speccore execute --all --force (全部执行)`,
74
+ `speccore execute --task=${first} --agent=trae (委派外部AI)`,
75
+ ]);
76
+ return;
77
+ }
78
+ // Phase 5: Check lifecycle state
79
+ const inProgress = await getTasksInState(iterDir, 'testing|in_progress');
80
+ if (inProgress.length > 0) {
81
+ showPhase('推进生命周期', [
82
+ `speccore lifecycle --task=${inProgress[0]} --status=testing`,
83
+ `speccore lifecycle --task=${inProgress[0]} --status=review`,
84
+ '质量关卡: TEST.md 完成 → testing, REVIEW.md 审批 → review',
85
+ ]);
86
+ return;
87
+ }
88
+ // Phase 6: Ready for PR
89
+ const toReview = await getTasksInState(iterDir, 'review');
90
+ if (toReview.length > 0) {
91
+ showPhase('创建 PR + 合并', [
92
+ `speccore pr --task=${toReview[0]}`,
93
+ 'speccore merge-check --iteration=' + iteration,
94
+ 'speccore lifecycle --task=' + toReview[0] + ' --status=done',
95
+ ]);
96
+ return;
97
+ }
98
+ // Phase 7: All done
99
+ logger_1.logger.info('✨ 所有任务已完成!');
100
+ logger_1.logger.info('');
101
+ logger_1.logger.info('收尾操作:');
102
+ logger_1.logger.info(' speccore done --task=Task-001 一键归档');
103
+ logger_1.logger.info(' speccore arch-update 更新架构文档');
104
+ logger_1.logger.info(' speccore dashboard 查看全景');
105
+ logger_1.logger.info(' speccore retro 迭代回顾');
106
+ }
107
+ function showPhase(title, steps) {
108
+ logger_1.logger.info(`📋 ${title}`);
109
+ logger_1.logger.info('');
110
+ for (let i = 0; i < steps.length; i++) {
111
+ if (i % 2 === 0) {
112
+ logger_1.logger.info(` ${steps[i]}`);
113
+ }
114
+ else {
115
+ logger_1.logger.info(` ${steps[i]}`);
116
+ }
117
+ }
118
+ logger_1.logger.info('');
119
+ logger_1.logger.info('💡 输入 speccore dev --force 自动执行下一步');
120
+ }
121
+ async function hasTaskDirs(iterDir) {
122
+ try {
123
+ const entries = await (0, fs_extra_1.readdir)(iterDir, { withFileTypes: true });
124
+ return entries.some(e => e.isDirectory() && e.name.startsWith('Task-'));
125
+ }
126
+ catch {
127
+ return false;
128
+ }
129
+ }
130
+ async function getPendingTasks(iterDir) {
131
+ try {
132
+ const entries = await (0, fs_extra_1.readdir)(iterDir, { withFileTypes: true });
133
+ const tasks = entries.filter(e => e.isDirectory() && e.name.startsWith('Task-'));
134
+ const pending = [];
135
+ for (const t of tasks) {
136
+ const taskMd = (0, path_1.join)(iterDir, t.name, 'backend', 'TASK.md');
137
+ if (await (0, fs_extra_1.pathExists)(taskMd)) {
138
+ const { readFile } = require('fs-extra');
139
+ const content = await readFile(taskMd, 'utf-8');
140
+ if (content.includes('待开发') || content.includes('in_progress')) {
141
+ pending.push(t.name);
142
+ }
143
+ }
144
+ else {
145
+ pending.push(t.name);
146
+ }
147
+ }
148
+ return pending;
149
+ }
150
+ catch {
151
+ return [];
152
+ }
153
+ }
154
+ async function getTasksInState(iterDir, states) {
155
+ try {
156
+ const entries = await (0, fs_extra_1.readdir)(iterDir, { withFileTypes: true });
157
+ const tasks = entries.filter(e => e.isDirectory() && e.name.startsWith('Task-'));
158
+ const result = [];
159
+ const stateList = states.split('|');
160
+ for (const t of tasks) {
161
+ const taskMd = (0, path_1.join)(iterDir, t.name, 'backend', 'TASK.md');
162
+ if (await (0, fs_extra_1.pathExists)(taskMd)) {
163
+ const { readFile } = require('fs-extra');
164
+ const content = await readFile(taskMd, 'utf-8');
165
+ for (const s of stateList) {
166
+ if (content.includes(s)) {
167
+ result.push(t.name);
168
+ break;
169
+ }
170
+ }
171
+ }
172
+ }
173
+ return result;
174
+ }
175
+ catch {
176
+ return [];
177
+ }
178
+ }
179
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":";;AAwBA,gCA2FC;AAnHD;;;;;;;;;;;;GAYG;AACH,uCAA+C;AAC/C,+BAA4B;AAC5B,iDAAyC;AACzC,4CAAkD;AAClD,6CAAsD;AAO/C,KAAK,UAAU,UAAU,CAAC,OAAmB;IAClD,MAAM,SAAS,GAAG,MAAM,IAAA,6BAAmB,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,gBAAgB;QAChB,eAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/B,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,eAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClC,eAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,OAAO;QAC3B,IAAA,wBAAQ,EAAC,eAAe,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,SAAS,EAAE,CAAC;IAClC,eAAM,CAAC,IAAI,CAAC,YAAY,SAAS,EAAE,CAAC,CAAC;IACrC,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEhB,sCAAsC;IACtC,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC,MAAM,IAAA,qBAAU,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAChC,SAAS,CAAC,MAAM,EAAE;YAChB,8CAA8C,GAAG,SAAS;YAC1D,2BAA2B;SAC5B,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,iCAAiC;IACjC,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IACzD,IAAI,CAAC,CAAC,MAAM,IAAA,qBAAU,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAClC,SAAS,CAAC,MAAM,EAAE;YAChB,+BAA+B,GAAG,SAAS;YAC3C,uBAAuB;SACxB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,SAAS,CAAC,MAAM,EAAE;YAChB,uCAAuC,GAAG,SAAS;YACnD,sBAAsB;SACvB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,uCAAuC;IACvC,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9B,SAAS,CAAC,SAAS,YAAY,CAAC,MAAM,QAAQ,EAAE;YAC9C,2BAA2B,KAAK,UAAU;YAC1C,YAAY,CAAC,MAAM,GAAG,CAAC;gBACrB,CAAC,CAAC,sDAAsD;gBACxD,CAAC,CAAC,uCAAuC;YAC3C,2BAA2B,KAAK,wBAAwB;SACzD,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,iCAAiC;IACjC,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IACzE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC,QAAQ,EAAE;YAClB,6BAA6B,UAAU,CAAC,CAAC,CAAC,mBAAmB;YAC7D,6BAA6B,UAAU,CAAC,CAAC,CAAC,kBAAkB;YAC5D,mDAAmD;SACpD,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,wBAAwB;IACxB,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC1D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,SAAS,CAAC,YAAY,EAAE;YACtB,sBAAsB,QAAQ,CAAC,CAAC,CAAC,EAAE;YACnC,mCAAmC,GAAG,SAAS;YAC/C,4BAA4B,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,gBAAgB;SAC9D,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,oBAAoB;IACpB,eAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1B,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,eAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,eAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC5D,eAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAC7D,eAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC3D,eAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,KAAe;IAC/C,eAAM,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC;IAC3B,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAChB,eAAM,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,eAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,eAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;AACpD,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,OAAe;IACxC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAAe;IAC5C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QACjF,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YAC3D,IAAI,MAAM,IAAA,qBAAU,EAAC,MAAM,CAAC,EAAE,CAAC;gBAC7B,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;gBACzC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAChD,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAAe,EAAE,MAAc;IAC5D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QACjF,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YAC3D,IAAI,MAAM,IAAA,qBAAU,EAAC,MAAM,CAAC,EAAE,CAAC;gBAC7B,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;gBACzC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAChD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;oBAC1B,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;wBAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;wBAAC,MAAM;oBAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;AACxB,CAAC"}
@@ -18,6 +18,9 @@ export interface ExecuteOptions {
18
18
  hotfix?: boolean;
19
19
  strict?: boolean;
20
20
  base?: string;
21
+ skip?: string;
22
+ agent?: string;
23
+ only?: string;
21
24
  }
22
25
  export declare function executeCommand(options: ExecuteOptions): Promise<void>;
23
26
  //# sourceMappingURL=execute.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAkG3E"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CAEf;AACD,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAmG3E"}
@@ -132,7 +132,8 @@ async function executeCommand(options) {
132
132
  return;
133
133
  }
134
134
  // === Execute with progress (existing flow) ===
135
- await executeWithProgress(sortedTasks, iteration, options.base);
135
+ const skipList = options.skip ? options.skip.split(',').map(s => s.trim()).filter(Boolean) : [];
136
+ await executeWithProgress(sortedTasks, iteration, options.base, skipList, { only: options.only });
136
137
  // Hotfix tracking
137
138
  if (options.hotfix && sortedTasks.length > 0) {
138
139
  await (0, context_1.startHotfix)(sortedTasks[0].id);
@@ -207,7 +208,8 @@ async function interactiveSelect(tasks, iteration, options) {
207
208
  logger_1.logger.info('Cancelled.');
208
209
  return;
209
210
  }
210
- await executeWithProgress(selectedTasks, iteration, options.base);
211
+ const skipList2 = options.skip ? options.skip.split(',').map(s => s.trim()).filter(Boolean) : [];
212
+ await executeWithProgress(selectedTasks, iteration, options.base, skipList2, { only: options.only });
211
213
  }
212
214
  async function loadInquirer() {
213
215
  try {
@@ -235,23 +237,65 @@ async function loadInquirer() {
235
237
  // ============================================================
236
238
  // Progress feedback execution
237
239
  // ============================================================
238
- async function executeWithProgress(tasks, iteration, base) {
240
+ async function executeWithProgress(tasks, iteration, base, skip, options) {
239
241
  const total = tasks.length;
240
242
  const startTime = Date.now();
241
243
  const completed = [];
242
- // Auto-create git branch for single task
243
- if (tasks.length === 1) {
244
- const task = tasks[0];
245
- // Auto-detect dependency base from IMPACT.md
246
- if (!base) {
247
- base = await detectDependencyBase(iteration, task.id);
244
+ // Filter whitelist (--only)
245
+ if (options?.only) {
246
+ const onlyList = options.only.split(',').map(s => s.trim()).filter(Boolean);
247
+ const before = tasks.length;
248
+ tasks = tasks.filter(t => onlyList.includes(t.id));
249
+ if (tasks.length < before) {
250
+ logger_1.logger.info(` 🎯 仅执行 ${tasks.length}/${before} 个指定任务`);
248
251
  }
249
- const branch = (0, git_integration_1.createTaskBranch)(task.id, task.id, base);
250
- if (branch) {
251
- const baseInfo = base ? ` (from ${base})` : '';
252
- logger_1.logger.info(`🌿 Created branch: ${branch}${baseInfo}`);
252
+ }
253
+ // Filter whitelist (--only)
254
+ if (options?.only) {
255
+ const onlyList = options.only.split(',').map(s => s.trim()).filter(Boolean);
256
+ const before = tasks.length;
257
+ tasks = tasks.filter(t => onlyList.includes(t.id));
258
+ if (tasks.length < before) {
259
+ logger_1.logger.info(` 🎯 仅执行 ${tasks.length}/${before} 个指定任务`);
253
260
  }
254
261
  }
262
+ // Filter skipped tasks
263
+ if (skip && skip.length > 0) {
264
+ const before = tasks.length;
265
+ tasks = tasks.filter(t => !skip.includes(t.id));
266
+ logger_1.logger.info(` ⏭️ 跳过 ${before - tasks.length} 个任务: ${skip.join(', ')}`);
267
+ }
268
+ if (tasks.length === 0) {
269
+ logger_1.logger.info(' ✅ 没有需要执行的任务');
270
+ return;
271
+ }
272
+ // Create branches for each task (dependency-aware)
273
+ if (tasks.length > 0) {
274
+ for (const task of tasks) {
275
+ let taskBase = base;
276
+ // Auto-detect dependency per task from IMPACT.md
277
+ if (!taskBase) {
278
+ taskBase = await detectDependencyBase(iteration, task.id);
279
+ }
280
+ const branch = (0, git_integration_1.createTaskBranch)(task.id, task.id, taskBase);
281
+ if (branch) {
282
+ const baseInfo = taskBase ? ` (from ${taskBase})` : '';
283
+ logger_1.logger.info(`🌿 ${task.id}: ${branch}${baseInfo}`);
284
+ }
285
+ // Switch back to a neutral branch for next task if needed
286
+ }
287
+ }
288
+ // ── Agent mode: output optimized context for external AI ──
289
+ if (options?.agent) {
290
+ const agentCtx = buildAgentContext(tasks, options.agent);
291
+ logger_1.logger.info(`\n🤖 Agent 模式: ${options.agent}`);
292
+ logger_1.logger.info('--- AGENT CONTEXT START ---');
293
+ logger_1.logger.info(agentCtx);
294
+ logger_1.logger.info('--- AGENT CONTEXT END ---');
295
+ logger_1.logger.info('\n💡 复制以上内容粘贴到 ' + options.agent + ' 中即可生成代码');
296
+ (0, operation_log_1.logOperation)('speccore execute --agent', options.agent);
297
+ return;
298
+ }
255
299
  (0, operation_log_1.logOperation)('speccore execute', `${total} tasks`);
256
300
  logger_1.logger.info('');
257
301
  logger_1.logger.info(`⏳ Executing ${total} task(s) in iteration: ${iteration}`);
@@ -339,6 +383,8 @@ async function executeBatchMode(tasks, iteration, batchSize, options) {
339
383
  const updated = (0, execution_state_1.loadExecutionState)();
340
384
  if (updated.currentBatch > updated.totalBatches)
341
385
  break;
386
+ if (updated.pendingTasks.length === 0)
387
+ break; // 所有任务完成
342
388
  }
343
389
  logger_1.logger.success('All batches completed!');
344
390
  (0, operation_log_1.logOperation)('speccore execute --batch-size', `${tasks.length} tasks in ${state.totalBatches} batches`);
@@ -808,4 +854,30 @@ async function detectDependencyBase(iteration, taskId) {
808
854
  }
809
855
  return undefined;
810
856
  }
857
+ const AGENT_FORMATS = {
858
+ copilot: { prefix: "Based on the following specification, generate production code:\n\n", suffix: "\n\nGenerate clean, well-structured code following the Constitution rules." },
859
+ claude: { prefix: "根据以下 Spec 生成生产级代码,遵守宪法规则和测试要求:\n\n", suffix: "\n\n请生成结构清晰、符合宪法规则的生产级代码。" },
860
+ cursor: { prefix: "// Spec-Driven Implementation\n// Follow the spec below strictly:\n\n", suffix: "\n\n// Generate code following the Constitution and API contract." },
861
+ trae: { prefix: "请基于以下技术规格生成代码:\n\n", suffix: "\n\n严格遵循宪法规则和 API 契约。" },
862
+ qoder: { prefix: "## Spec-Driven Code Generation\n\nPlease implement based on the specification below:\n\n", suffix: "\n\n## Requirements: Follow Constitution rules and complete all tests." },
863
+ windsurf: { prefix: "### Implementation Spec\n\nImplement the following specification:\n\n", suffix: "\n\n### Rules: Follow all Constitution constraints. Complete the TEST checklist." },
864
+ codebuddy: { prefix: "基于以下 Spec 和宪法规则生成代码:\n\n", suffix: "\n\n严格遵守宪法、API 契约和测试要求。" },
865
+ };
866
+ function buildAgentContext(tasks, agent) {
867
+ const format = AGENT_FORMATS[agent.toLowerCase()] || { prefix: "Generate code based on:\n\n", suffix: "\n\nFollow all Constitution rules." };
868
+ let ctx = format.prefix;
869
+ for (const task of tasks) {
870
+ ctx += `## Task: ${task.id} - ${task.name || task.id}\n`;
871
+ ctx += `- Status: ${task.status}\n`;
872
+ ctx += `- Priority: ${task.priority}\n`;
873
+ ctx += `\n> Files: Iteration/${task.id}/backend/REQ.md TECH.md TEST.md REVIEW.md API_CONTRACT.yaml\n\n`;
874
+ }
875
+ ctx += `\n## Constitution Rules (from .speccore/PROJECT/CONSTITUTION.md)\n`;
876
+ ctx += `- Follow all mandatory (🔒) rules strictly\n`;
877
+ ctx += `- API must follow RESTful conventions\n`;
878
+ ctx += `- All code must include error handling and validation\n`;
879
+ ctx += format.suffix;
880
+ return ctx;
881
+ }
882
+ // ===== Agent Context Builder =====
811
883
  //# sourceMappingURL=execute.js.map