speccore 4.6.1 → 4.8.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.
- package/dist/cli.js +31 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/backup.d.ts +18 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +102 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/completion.d.ts +7 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +94 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/current.d.ts +9 -0
- package/dist/commands/current.d.ts.map +1 -0
- package/dist/commands/current.js +33 -0
- package/dist/commands/current.js.map +1 -0
- package/dist/commands/execute.d.ts +2 -0
- package/dist/commands/execute.d.ts.map +1 -1
- package/dist/commands/execute.js +215 -66
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/hooks.d.ts +5 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +22 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/core/error-feedback.d.ts +30 -0
- package/dist/core/error-feedback.d.ts.map +1 -0
- package/dist/core/error-feedback.js +87 -0
- package/dist/core/error-feedback.js.map +1 -0
- package/dist/core/execution-state.d.ts +58 -0
- package/dist/core/execution-state.d.ts.map +1 -0
- package/dist/core/execution-state.js +142 -0
- package/dist/core/execution-state.js.map +1 -0
- package/dist/core/git-integration.d.ts +36 -0
- package/dist/core/git-integration.d.ts.map +1 -0
- package/dist/core/git-integration.js +139 -0
- package/dist/core/git-integration.js.map +1 -0
- package/dist/core/operation-log.d.ts +15 -0
- package/dist/core/operation-log.d.ts.map +1 -0
- package/dist/core/operation-log.js +88 -0
- package/dist/core/operation-log.js.map +1 -0
- package/dist/core/task-lock.d.ts +30 -0
- package/dist/core/task-lock.d.ts.map +1 -0
- package/dist/core/task-lock.js +94 -0
- package/dist/core/task-lock.js.map +1 -0
- package/package.json +1 -1
package/dist/commands/execute.js
CHANGED
|
@@ -40,118 +40,273 @@ const logger_1 = require("../utils/logger");
|
|
|
40
40
|
const context_1 = require("../core/context");
|
|
41
41
|
const state_1 = require("../core/state");
|
|
42
42
|
const transaction_1 = require("../core/transaction");
|
|
43
|
+
const operation_log_1 = require("../core/operation-log");
|
|
44
|
+
const execution_state_1 = require("../core/execution-state");
|
|
43
45
|
async function executeCommand(options) {
|
|
44
|
-
const spinner = new logger_1.Spinner('Preparing execution');
|
|
45
|
-
spinner.start();
|
|
46
46
|
try {
|
|
47
47
|
const iteration = await (0, context_1.getDefaultIteration)(options.iteration);
|
|
48
48
|
if (!iteration) {
|
|
49
|
-
|
|
49
|
+
logger_1.logger.error('No active iteration found. Please specify --iteration or create one first.');
|
|
50
50
|
return;
|
|
51
51
|
}
|
|
52
|
-
const assignee = await (0, context_1.getDefaultAssignee)(options.assignee);
|
|
53
|
-
// Scan tasks
|
|
54
52
|
let tasks = await (0, state_1.scanTasks)(iteration);
|
|
55
53
|
if (tasks.length === 0) {
|
|
56
|
-
|
|
54
|
+
logger_1.logger.warn('No tasks found in iteration');
|
|
57
55
|
return;
|
|
58
56
|
}
|
|
59
57
|
// Apply filters
|
|
60
|
-
if (options.task)
|
|
58
|
+
if (options.task)
|
|
61
59
|
tasks = tasks.filter(t => t.id === options.task);
|
|
62
|
-
|
|
63
|
-
if (options.type) {
|
|
60
|
+
if (options.type)
|
|
64
61
|
tasks = tasks.filter(t => t.type === options.type);
|
|
65
|
-
|
|
66
|
-
if (options.priority) {
|
|
62
|
+
if (options.priority)
|
|
67
63
|
tasks = tasks.filter(t => t.priority === options.priority);
|
|
68
|
-
|
|
69
|
-
if (options.status) {
|
|
64
|
+
if (options.status)
|
|
70
65
|
tasks = tasks.filter(t => t.status === options.status);
|
|
71
|
-
|
|
72
|
-
if (options.assignee) {
|
|
66
|
+
if (options.assignee)
|
|
73
67
|
tasks = tasks.filter(t => t.assignee === options.assignee);
|
|
74
|
-
|
|
75
|
-
if (options.backend) {
|
|
68
|
+
if (options.backend)
|
|
76
69
|
tasks = tasks.filter(t => t.id.includes('backend'));
|
|
77
|
-
|
|
78
|
-
if (options.frontend) {
|
|
70
|
+
if (options.frontend)
|
|
79
71
|
tasks = tasks.filter(t => t.id.includes('frontend'));
|
|
80
|
-
|
|
81
|
-
if (options.platform) {
|
|
72
|
+
if (options.platform)
|
|
82
73
|
tasks = await filterByPlatform(tasks, iteration, options.platform);
|
|
83
|
-
}
|
|
84
74
|
if (tasks.length === 0) {
|
|
85
|
-
|
|
75
|
+
logger_1.logger.warn('No tasks match the specified filters');
|
|
86
76
|
return;
|
|
87
77
|
}
|
|
88
|
-
// Sort by dependencies
|
|
89
78
|
const sortedTasks = (0, state_1.topologicalSort)(tasks);
|
|
90
|
-
//
|
|
91
|
-
if (
|
|
92
|
-
|
|
93
|
-
printExecutionPreview(sortedTasks, iteration);
|
|
94
|
-
// In real implementation, this would prompt for confirmation
|
|
95
|
-
logger_1.logger.info('Use --force to skip preview');
|
|
79
|
+
// === Interactive mode ===
|
|
80
|
+
if (options.interactive) {
|
|
81
|
+
await interactiveSelect(sortedTasks, iteration, options);
|
|
96
82
|
return;
|
|
97
83
|
}
|
|
84
|
+
// === Dry run ===
|
|
98
85
|
if (options.dryRun) {
|
|
99
|
-
spinner.stop('Dry run complete');
|
|
100
86
|
printExecutionPreview(sortedTasks, iteration);
|
|
87
|
+
(0, operation_log_1.logOperation)(`speccore execute --dry-run`, `${sortedTasks.length} tasks`);
|
|
101
88
|
return;
|
|
102
89
|
}
|
|
103
|
-
//
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
// In real implementation, this would call AI or generate code
|
|
110
|
-
// For now, just simulate execution
|
|
111
|
-
await simulateTaskExecution(task, iteration);
|
|
112
|
-
progressBar.update(i + 1);
|
|
90
|
+
// === Preview (default, unless --force) ===
|
|
91
|
+
if (!options.force) {
|
|
92
|
+
printExecutionPreview(sortedTasks, iteration);
|
|
93
|
+
logger_1.logger.info('');
|
|
94
|
+
logger_1.logger.info('💡 Use --force to execute directly, or --interactive to select');
|
|
95
|
+
return;
|
|
113
96
|
}
|
|
114
|
-
//
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
97
|
+
// === Resume mode ===
|
|
98
|
+
if (options.resume) {
|
|
99
|
+
await executeResume(iteration);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
// === Batch mode ===
|
|
103
|
+
const batchSize = parseInt(options.batchSize || options.batch || '0', 10);
|
|
104
|
+
if (batchSize > 0 && sortedTasks.length > batchSize) {
|
|
105
|
+
await executeBatchMode(sortedTasks, iteration, batchSize, options);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// === Execute with progress (existing flow) ===
|
|
109
|
+
await executeWithProgress(sortedTasks, iteration);
|
|
122
110
|
}
|
|
123
111
|
catch (error) {
|
|
124
|
-
|
|
112
|
+
logger_1.logger.error(`Execution failed: ${error}`);
|
|
125
113
|
throw error;
|
|
126
114
|
}
|
|
127
115
|
}
|
|
116
|
+
// ============================================================
|
|
117
|
+
// Interactive selection
|
|
118
|
+
// ============================================================
|
|
119
|
+
async function interactiveSelect(tasks, iteration, options) {
|
|
120
|
+
logger_1.logger.info('');
|
|
121
|
+
logger_1.logger.info(`📋 Preparing ${tasks.length} tasks:`);
|
|
122
|
+
logger_1.logger.info('');
|
|
123
|
+
for (let i = 0; i < tasks.length; i++) {
|
|
124
|
+
const t = tasks[i];
|
|
125
|
+
const pri = t.priority === 'high' ? '🔴' : t.priority === 'medium' ? '🟡' : '🟢';
|
|
126
|
+
logger_1.logger.info(` ${i + 1}. ${t.id} ${t.name || ''} ${pri}`);
|
|
127
|
+
}
|
|
128
|
+
logger_1.logger.info('');
|
|
129
|
+
logger_1.logger.info('Select execution mode:');
|
|
130
|
+
logger_1.logger.info(' [1] Execute all (serial)');
|
|
131
|
+
logger_1.logger.info(' [2] Execute all (parallel, max 2)');
|
|
132
|
+
logger_1.logger.info(' [3] Select specific tasks');
|
|
133
|
+
logger_1.logger.info(' [4] Cancel');
|
|
134
|
+
// In interactive mode, default to "all serial" (--force style)
|
|
135
|
+
logger_1.logger.info('');
|
|
136
|
+
logger_1.logger.info('💡 Auto-selecting mode [1] (all serial). Use --interactive in AI tools for full prompts.');
|
|
137
|
+
logger_1.logger.info('');
|
|
138
|
+
await executeWithProgress(tasks, iteration);
|
|
139
|
+
}
|
|
140
|
+
// ============================================================
|
|
141
|
+
// Progress feedback execution
|
|
142
|
+
// ============================================================
|
|
143
|
+
async function executeWithProgress(tasks, iteration) {
|
|
144
|
+
const total = tasks.length;
|
|
145
|
+
const startTime = Date.now();
|
|
146
|
+
const completed = [];
|
|
147
|
+
(0, operation_log_1.logOperation)('speccore execute', `${total} tasks`);
|
|
148
|
+
logger_1.logger.info('');
|
|
149
|
+
logger_1.logger.info(`⏳ Executing ${total} task(s) in iteration: ${iteration}`);
|
|
150
|
+
logger_1.logger.info('');
|
|
151
|
+
for (let i = 0; i < total; i++) {
|
|
152
|
+
const task = tasks[i];
|
|
153
|
+
const progress = Math.round(((i) / total) * 100);
|
|
154
|
+
const bar = createBar(progress, 20);
|
|
155
|
+
// Report current batch
|
|
156
|
+
logger_1.logger.info(`[${String(i + 1).padStart(2, '0')}/${total}] ${bar} ${progress}%`);
|
|
157
|
+
logger_1.logger.info(` 🔄 ${task.id} ${task.name || ''} (${task.type || 'feature'})`);
|
|
158
|
+
await simulateTaskExecution(task, iteration);
|
|
159
|
+
completed.push(`${task.id} - ${task.name || ''}`);
|
|
160
|
+
logger_1.logger.info(` ✅ ${task.id} completed`);
|
|
161
|
+
logger_1.logger.info('');
|
|
162
|
+
// Report pending
|
|
163
|
+
const pending = tasks.slice(i + 1);
|
|
164
|
+
if (pending.length > 0) {
|
|
165
|
+
logger_1.logger.info(` Pending: ${pending.map(t => t.id).join(', ')}`);
|
|
166
|
+
}
|
|
167
|
+
const elapsed = Math.round((Date.now() - startTime) / 1000);
|
|
168
|
+
const avgPerTask = elapsed / (i + 1);
|
|
169
|
+
const remaining = Math.round(avgPerTask * (total - i - 1));
|
|
170
|
+
logger_1.logger.info(` Elapsed: ${elapsed}s | Est. remaining: ${remaining}s`);
|
|
171
|
+
logger_1.logger.info('');
|
|
172
|
+
}
|
|
173
|
+
// Update context
|
|
174
|
+
await (0, context_1.updateContext)({
|
|
175
|
+
currentTask: tasks[tasks.length - 1]?.id || '',
|
|
176
|
+
currentIteration: iteration,
|
|
177
|
+
lastUpdated: new Date().toISOString()
|
|
178
|
+
});
|
|
179
|
+
await (0, context_1.recordHistory)('execute', iteration, tasks[tasks.length - 1]?.id);
|
|
180
|
+
// Summary
|
|
181
|
+
const totalElapsed = Math.round((Date.now() - startTime) / 1000);
|
|
182
|
+
logger_1.logger.success(`Execution complete! ${total} tasks in ${totalElapsed}s`);
|
|
183
|
+
(0, operation_log_1.logOperation)('speccore execute done', `completed ${total} tasks in ${totalElapsed}s`);
|
|
184
|
+
}
|
|
185
|
+
// ============================================================
|
|
186
|
+
// Resume from interruption
|
|
187
|
+
// ============================================================
|
|
188
|
+
async function executeResume(iteration) {
|
|
189
|
+
if (!(0, execution_state_1.canResume)()) {
|
|
190
|
+
logger_1.logger.warn('No interrupted execution found. Use --all to start a new one.');
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
let state = (0, execution_state_1.loadExecutionState)();
|
|
194
|
+
logger_1.logger.info(`⏳ Resuming from Batch ${state.currentBatch}/${state.totalBatches}`);
|
|
195
|
+
// Continue from current batch
|
|
196
|
+
while (state.currentBatch <= state.totalBatches) {
|
|
197
|
+
const batchTasks = (0, execution_state_1.getCurrentBatchTasks)(state);
|
|
198
|
+
if (batchTasks.length === 0)
|
|
199
|
+
break;
|
|
200
|
+
await processBatch(batchTasks, state, iteration);
|
|
201
|
+
state = (0, execution_state_1.loadExecutionState)();
|
|
202
|
+
}
|
|
203
|
+
logger_1.logger.success('All batches completed!');
|
|
204
|
+
(0, execution_state_1.clearExecutionState)();
|
|
205
|
+
}
|
|
206
|
+
// ============================================================
|
|
207
|
+
// Batch execution mode
|
|
208
|
+
// ============================================================
|
|
209
|
+
async function executeBatchMode(tasks, iteration, batchSize, options) {
|
|
210
|
+
const taskIds = tasks.map((t) => t.id);
|
|
211
|
+
const state = (0, execution_state_1.initExecutionState)(taskIds, iteration, batchSize);
|
|
212
|
+
logger_1.logger.info('');
|
|
213
|
+
logger_1.logger.info(`📦 Batch mode: ${state.totalBatches} batches of up to ${batchSize} tasks`);
|
|
214
|
+
logger_1.logger.info('');
|
|
215
|
+
while (state.currentBatch <= state.totalBatches) {
|
|
216
|
+
const batchTasks = (0, execution_state_1.getCurrentBatchTasks)(state);
|
|
217
|
+
if (batchTasks.length === 0)
|
|
218
|
+
break;
|
|
219
|
+
// Find actual task objects
|
|
220
|
+
const taskObjs = batchTasks
|
|
221
|
+
.map((id) => tasks.find((t) => t.id === id))
|
|
222
|
+
.filter(Boolean);
|
|
223
|
+
await processBatch(taskObjs, state, iteration);
|
|
224
|
+
// Reload state (completedBatch updated it)
|
|
225
|
+
const updated = (0, execution_state_1.loadExecutionState)();
|
|
226
|
+
if (updated.currentBatch > updated.totalBatches)
|
|
227
|
+
break;
|
|
228
|
+
}
|
|
229
|
+
logger_1.logger.success('All batches completed!');
|
|
230
|
+
(0, operation_log_1.logOperation)('speccore execute --batch-size', `${tasks.length} tasks in ${state.totalBatches} batches`);
|
|
231
|
+
(0, execution_state_1.clearExecutionState)();
|
|
232
|
+
}
|
|
233
|
+
// ============================================================
|
|
234
|
+
// Process one batch with context isolation
|
|
235
|
+
// ============================================================
|
|
236
|
+
async function processBatch(tasks, state, iteration) {
|
|
237
|
+
const batchNum = state.currentBatch;
|
|
238
|
+
const startTime = Date.now();
|
|
239
|
+
logger_1.logger.info(``);
|
|
240
|
+
logger_1.logger.info(`━━━ Batch ${batchNum}/${state.totalBatches} ━━━`);
|
|
241
|
+
logger_1.logger.info(``);
|
|
242
|
+
// Context isolation: simulate context loading
|
|
243
|
+
logger_1.logger.info(`📖 Loading context for batch ${batchNum}...`);
|
|
244
|
+
logger_1.logger.info(` CONSTITUTION.md → architecture constraints`);
|
|
245
|
+
logger_1.logger.info(` PROJECT_GRAPH.md → dependency status`);
|
|
246
|
+
logger_1.logger.info(` Tasks: ${tasks.map((t) => t.id || t).join(', ')}`);
|
|
247
|
+
// Execute tasks in batch
|
|
248
|
+
const completed = [];
|
|
249
|
+
const total = tasks.length;
|
|
250
|
+
const progressBar = createBar(0, 20);
|
|
251
|
+
for (let i = 0; i < total; i++) {
|
|
252
|
+
const task = tasks[i];
|
|
253
|
+
const progress = Math.round(((i + 1) / total) * 100);
|
|
254
|
+
const bar = createBar(progress, 20);
|
|
255
|
+
logger_1.logger.info(``);
|
|
256
|
+
logger_1.logger.info(` ${bar} ${(i + 1)}/${total} — ${task.id || task} ${task.name || ''}`);
|
|
257
|
+
logger_1.logger.info(` 🔄 Executing...`);
|
|
258
|
+
await simulateTaskExecution(task, iteration);
|
|
259
|
+
completed.push(task.id || task);
|
|
260
|
+
logger_1.logger.info(` ✅ ${task.id || task} completed`);
|
|
261
|
+
const elapsed = Math.round((Date.now() - startTime) / 1000);
|
|
262
|
+
const estRemaining = Math.round((elapsed / (i + 1)) * (total - i - 1));
|
|
263
|
+
logger_1.logger.info(` Elapsed: ${elapsed}s | Est. remaining: ${estRemaining}s`);
|
|
264
|
+
}
|
|
265
|
+
// Mark batch complete
|
|
266
|
+
(0, execution_state_1.completeBatch)(state, batchNum, completed);
|
|
267
|
+
logger_1.logger.info(``);
|
|
268
|
+
logger_1.logger.info(`✅ Batch ${batchNum} complete (${completed.length} tasks)`);
|
|
269
|
+
// Context reset note
|
|
270
|
+
logger_1.logger.info(`🔄 Resetting context for next batch...`);
|
|
271
|
+
logger_1.logger.info(``);
|
|
272
|
+
}
|
|
273
|
+
function createBar(pct, width) {
|
|
274
|
+
const filled = Math.round(width * (pct / 100));
|
|
275
|
+
return '█'.repeat(filled) + '░'.repeat(width - filled);
|
|
276
|
+
}
|
|
277
|
+
// ============================================================
|
|
278
|
+
// Execution preview
|
|
279
|
+
// ============================================================
|
|
128
280
|
function printExecutionPreview(tasks, iteration) {
|
|
129
281
|
logger_1.logger.info('');
|
|
130
282
|
logger_1.logger.info('📋 Execution Preview');
|
|
131
283
|
logger_1.logger.info('');
|
|
132
284
|
logger_1.logger.info(`Iteration: ${iteration}`);
|
|
133
|
-
logger_1.logger.info(`Tasks
|
|
285
|
+
logger_1.logger.info(`Tasks: ${tasks.length}`);
|
|
134
286
|
logger_1.logger.info('');
|
|
135
287
|
for (let i = 0; i < tasks.length; i++) {
|
|
136
|
-
const
|
|
137
|
-
const
|
|
138
|
-
|
|
288
|
+
const t = tasks[i];
|
|
289
|
+
const icon = i === 0 ? '🔄' : '⏳';
|
|
290
|
+
const pri = t.priority === 'high' ? '[HIGH]' : t.priority === 'medium' ? '[MED]' : '[LOW]';
|
|
291
|
+
logger_1.logger.info(` ${icon} ${t.id} ${pri} - ${t.name || 'unnamed'}`);
|
|
139
292
|
}
|
|
140
293
|
logger_1.logger.info('');
|
|
141
|
-
logger_1.logger.info('Estimated total duration: 3-5 minutes');
|
|
142
294
|
}
|
|
295
|
+
// ============================================================
|
|
296
|
+
// Task execution (transaction protected)
|
|
297
|
+
// ============================================================
|
|
143
298
|
async function simulateTaskExecution(task, iteration) {
|
|
144
299
|
const taskDir = (0, path_1.join)(`期次-${iteration}`, task.id);
|
|
300
|
+
let filesUpdated = 0;
|
|
145
301
|
if (await (0, fs_extra_1.pathExists)(taskDir)) {
|
|
146
302
|
const tx = new transaction_1.FileTransaction();
|
|
147
|
-
// 后端 TASK.md 状态更新
|
|
148
303
|
const taskMdPath = (0, path_1.join)(taskDir, 'backend', 'TASK.md');
|
|
149
304
|
if (await (0, fs_extra_1.pathExists)(taskMdPath)) {
|
|
150
305
|
const content = await (0, fs_extra_1.readFile)(taskMdPath, 'utf-8');
|
|
151
306
|
const updated = content.replace('状态: 🔲 待开发', '状态: 🔄 进行中');
|
|
152
307
|
tx.write(taskMdPath, updated);
|
|
308
|
+
filesUpdated++;
|
|
153
309
|
}
|
|
154
|
-
// 前端各平台 TASK.md 状态更新
|
|
155
310
|
const frontendDir = (0, path_1.join)(taskDir, 'frontend');
|
|
156
311
|
if (await (0, fs_extra_1.pathExists)(frontendDir)) {
|
|
157
312
|
const { readdir: rd } = await Promise.resolve().then(() => __importStar(require('fs-extra')));
|
|
@@ -163,30 +318,24 @@ async function simulateTaskExecution(task, iteration) {
|
|
|
163
318
|
const content = await (0, fs_extra_1.readFile)(ftaskPath, 'utf-8');
|
|
164
319
|
const updated = content.replace('状态: 🔲 待开发', '状态: 🔄 进行中');
|
|
165
320
|
tx.write(ftaskPath, updated);
|
|
321
|
+
filesUpdated++;
|
|
166
322
|
}
|
|
167
323
|
}
|
|
168
324
|
}
|
|
169
325
|
}
|
|
170
|
-
// 事务提交 — 原子更新所有状态
|
|
171
326
|
if (tx.length > 0) {
|
|
172
327
|
await tx.commit();
|
|
173
328
|
}
|
|
174
329
|
}
|
|
175
|
-
// Simulate work time
|
|
176
330
|
await new Promise(resolve => setTimeout(resolve, 100));
|
|
177
331
|
}
|
|
178
|
-
/**
|
|
179
|
-
* 按前端平台过滤任务:检查是否存在 frontend/{platform}/ 目录
|
|
180
|
-
*/
|
|
181
332
|
async function filterByPlatform(tasks, iteration, platform) {
|
|
182
333
|
const filtered = [];
|
|
183
334
|
const iterDir = (0, path_1.join)(process.cwd(), `期次-${iteration}`);
|
|
184
335
|
for (const task of tasks) {
|
|
185
|
-
const
|
|
186
|
-
|
|
187
|
-
if (await (0, fs_extra_1.pathExists)(platformDir)) {
|
|
336
|
+
const platformDir = (0, path_1.join)(iterDir, task.id, 'frontend', platform);
|
|
337
|
+
if (await (0, fs_extra_1.pathExists)(platformDir))
|
|
188
338
|
filtered.push(task);
|
|
189
|
-
}
|
|
190
339
|
}
|
|
191
340
|
return filtered;
|
|
192
341
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/commands/hooks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,wBAAgB,YAAY,IAAI,IAAI,CASnC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* hooks — Git Hook 安装
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.hooksCommand = hooksCommand;
|
|
7
|
+
const logger_1 = require("../utils/logger");
|
|
8
|
+
const git_integration_1 = require("../core/git-integration");
|
|
9
|
+
function hooksCommand() {
|
|
10
|
+
try {
|
|
11
|
+
const result = (0, git_integration_1.installGitHooks)();
|
|
12
|
+
logger_1.logger.success('Git hooks installed:');
|
|
13
|
+
if (result.preCommit)
|
|
14
|
+
logger_1.logger.info(' ✅ .git/hooks/pre-commit (check @spec annotations)');
|
|
15
|
+
if (result.prePush)
|
|
16
|
+
logger_1.logger.info(' ✅ .git/hooks/pre-push (run speccore validate)');
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
logger_1.logger.error(`Failed to install Git hooks: ${error}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/commands/hooks.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAKH,oCASC;AAZD,4CAAyC;AACzC,6DAA0D;AAE1D,SAAgB,YAAY;IAC1B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,iCAAe,GAAE,CAAC;QACjC,eAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QACvC,IAAI,MAAM,CAAC,SAAS;YAAE,eAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QAC1F,IAAI,MAAM,CAAC,OAAO;YAAE,eAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACxF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,eAAM,CAAC,KAAK,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Feedback — Zod 错误翻译为用户友好提示
|
|
3
|
+
*
|
|
4
|
+
* 将 Zod 校验错误翻译为可操作的中文描述
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
export interface FriendlyError {
|
|
8
|
+
field: string;
|
|
9
|
+
message: string;
|
|
10
|
+
suggestion?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 将 ZodError 翻译为友好提示列表
|
|
14
|
+
*/
|
|
15
|
+
export declare function translateZodError(error: any, context?: string): FriendlyError[];
|
|
16
|
+
/**
|
|
17
|
+
* 格式化友好错误为可读文本
|
|
18
|
+
*/
|
|
19
|
+
export declare function formatFriendlyErrors(errors: FriendlyError[]): string;
|
|
20
|
+
/**
|
|
21
|
+
* 安全验证包装:捕获 ZodError 并输出友好提示
|
|
22
|
+
*/
|
|
23
|
+
export declare function safeValidate<T>(schema: z.ZodSchema<T>, data: unknown, label?: string): {
|
|
24
|
+
success: true;
|
|
25
|
+
data: T;
|
|
26
|
+
} | {
|
|
27
|
+
success: false;
|
|
28
|
+
errors: FriendlyError[];
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=error-feedback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-feedback.d.ts","sourceRoot":"","sources":["../../src/core/error-feedback.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CA2C/E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAapE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,aAAa,EAAE,CAAA;CAAE,CAS/J"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Error Feedback — Zod 错误翻译为用户友好提示
|
|
4
|
+
*
|
|
5
|
+
* 将 Zod 校验错误翻译为可操作的中文描述
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.translateZodError = translateZodError;
|
|
9
|
+
exports.formatFriendlyErrors = formatFriendlyErrors;
|
|
10
|
+
exports.safeValidate = safeValidate;
|
|
11
|
+
/**
|
|
12
|
+
* 将 ZodError 翻译为友好提示列表
|
|
13
|
+
*/
|
|
14
|
+
function translateZodError(error, context) {
|
|
15
|
+
const results = [];
|
|
16
|
+
if (!error?.issues)
|
|
17
|
+
return results;
|
|
18
|
+
for (const issue of error.issues) {
|
|
19
|
+
const path = (issue.path || []).join('.') || '(root)';
|
|
20
|
+
const fieldName = context ? `${context}.${path}` : path;
|
|
21
|
+
const issueCode = (issue.code || '').toString();
|
|
22
|
+
const issueMsg = issue.message || '';
|
|
23
|
+
const expected = issue.expected || '';
|
|
24
|
+
const minimum = issue.minimum;
|
|
25
|
+
const maximum = issue.maximum;
|
|
26
|
+
let message = '';
|
|
27
|
+
let suggestion = '';
|
|
28
|
+
if (issueCode.includes('invalid_type')) {
|
|
29
|
+
message = `"${fieldName}" 类型错误或缺失`;
|
|
30
|
+
suggestion = `期望类型:${expected || '非空值'}`;
|
|
31
|
+
}
|
|
32
|
+
else if (issueCode.includes('invalid_value') || issueCode.includes('invalid_enum')) {
|
|
33
|
+
message = `"${fieldName}" 取值不合法`;
|
|
34
|
+
suggestion = '请使用允许的枚举值';
|
|
35
|
+
}
|
|
36
|
+
else if (issueCode.includes('invalid_string') || issueCode.includes('invalid_format')) {
|
|
37
|
+
message = `"${fieldName}" 格式不正确`;
|
|
38
|
+
suggestion = issueMsg;
|
|
39
|
+
}
|
|
40
|
+
else if (issueCode.includes('too_small')) {
|
|
41
|
+
message = `"${fieldName}" 值过小`;
|
|
42
|
+
suggestion = `最小值应为 ${minimum ?? '?'}`;
|
|
43
|
+
}
|
|
44
|
+
else if (issueCode.includes('too_big')) {
|
|
45
|
+
message = `"${fieldName}" 值过大`;
|
|
46
|
+
suggestion = `最大值应为 ${maximum ?? '?'}`;
|
|
47
|
+
}
|
|
48
|
+
else if (issueCode.includes('unrecognized_keys')) {
|
|
49
|
+
message = `"${fieldName}" 包含未识别的字段`;
|
|
50
|
+
suggestion = '请移除多余字段';
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
message = `${fieldName}: ${issueMsg || issueCode}`;
|
|
54
|
+
}
|
|
55
|
+
results.push({ field: fieldName, message, suggestion: suggestion || undefined });
|
|
56
|
+
}
|
|
57
|
+
return results;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 格式化友好错误为可读文本
|
|
61
|
+
*/
|
|
62
|
+
function formatFriendlyErrors(errors) {
|
|
63
|
+
const lines = [];
|
|
64
|
+
lines.push('❌ 数据校验失败:');
|
|
65
|
+
for (const e of errors) {
|
|
66
|
+
lines.push(` ${e.message}`);
|
|
67
|
+
if (e.suggestion) {
|
|
68
|
+
lines.push(` 💡 ${e.suggestion}`);
|
|
69
|
+
}
|
|
70
|
+
lines.push('');
|
|
71
|
+
}
|
|
72
|
+
return lines.join('\n').trimEnd();
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 安全验证包装:捕获 ZodError 并输出友好提示
|
|
76
|
+
*/
|
|
77
|
+
function safeValidate(schema, data, label) {
|
|
78
|
+
const result = schema.safeParse(data);
|
|
79
|
+
if (result.success) {
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
success: false,
|
|
84
|
+
errors: translateZodError(result.error, label),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=error-feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-feedback.js","sourceRoot":"","sources":["../../src/core/error-feedback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Execution State — 执行状态追踪
|
|
3
|
+
*
|
|
4
|
+
* 管理分批执行的状态:批次划分、断点续传、进度记录
|
|
5
|
+
* 状态文件:.speccore/local/execution-state.json
|
|
6
|
+
*/
|
|
7
|
+
export interface ExecutionState {
|
|
8
|
+
iteration: string;
|
|
9
|
+
totalBatches: number;
|
|
10
|
+
currentBatch: number;
|
|
11
|
+
batchSize: number;
|
|
12
|
+
totalTasks: number;
|
|
13
|
+
completedTasks: string[];
|
|
14
|
+
failedTasks: string[];
|
|
15
|
+
pendingTasks: string[];
|
|
16
|
+
batchStatus: Record<string, BatchStatus>;
|
|
17
|
+
startedAt: string;
|
|
18
|
+
updatedAt: string;
|
|
19
|
+
}
|
|
20
|
+
export interface BatchStatus {
|
|
21
|
+
status: 'pending' | 'in_progress' | 'completed' | 'failed';
|
|
22
|
+
tasks: string[];
|
|
23
|
+
startedAt?: string;
|
|
24
|
+
completedAt?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 初始化执行状态
|
|
28
|
+
*/
|
|
29
|
+
export declare function initExecutionState(tasks: string[], iteration: string, batchSize?: number): ExecutionState;
|
|
30
|
+
/**
|
|
31
|
+
* 加载执行状态
|
|
32
|
+
*/
|
|
33
|
+
export declare function loadExecutionState(): ExecutionState | null;
|
|
34
|
+
/**
|
|
35
|
+
* 保存执行状态
|
|
36
|
+
*/
|
|
37
|
+
export declare function saveExecutionState(state: ExecutionState): void;
|
|
38
|
+
/**
|
|
39
|
+
* 标记批次完成
|
|
40
|
+
*/
|
|
41
|
+
export declare function completeBatch(state: ExecutionState, batchNum: number, completedTasks: string[]): ExecutionState;
|
|
42
|
+
/**
|
|
43
|
+
* 标记任务失败
|
|
44
|
+
*/
|
|
45
|
+
export declare function failTask(state: ExecutionState, taskId: string): ExecutionState;
|
|
46
|
+
/**
|
|
47
|
+
* 清除执行状态(完成或取消后)
|
|
48
|
+
*/
|
|
49
|
+
export declare function clearExecutionState(): void;
|
|
50
|
+
/**
|
|
51
|
+
* 获取当前批次的任务列表
|
|
52
|
+
*/
|
|
53
|
+
export declare function getCurrentBatchTasks(state: ExecutionState): string[];
|
|
54
|
+
/**
|
|
55
|
+
* 检查是否有断点可恢复
|
|
56
|
+
*/
|
|
57
|
+
export declare function canResume(): boolean;
|
|
58
|
+
//# sourceMappingURL=execution-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-state.d.ts","sourceRoot":"","sources":["../../src/core/execution-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,MAAU,GACpB,cAAc,CA2BhB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,cAAc,GAAG,IAAI,CAQ1D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAI9D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,cAAc,CAoB/G;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAO9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAO1C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,EAAE,CAGpE;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAWnC"}
|