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.
Files changed (43) hide show
  1. package/dist/cli.js +31 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/backup.d.ts +18 -0
  4. package/dist/commands/backup.d.ts.map +1 -0
  5. package/dist/commands/backup.js +102 -0
  6. package/dist/commands/backup.js.map +1 -0
  7. package/dist/commands/completion.d.ts +7 -0
  8. package/dist/commands/completion.d.ts.map +1 -0
  9. package/dist/commands/completion.js +94 -0
  10. package/dist/commands/completion.js.map +1 -0
  11. package/dist/commands/current.d.ts +9 -0
  12. package/dist/commands/current.d.ts.map +1 -0
  13. package/dist/commands/current.js +33 -0
  14. package/dist/commands/current.js.map +1 -0
  15. package/dist/commands/execute.d.ts +2 -0
  16. package/dist/commands/execute.d.ts.map +1 -1
  17. package/dist/commands/execute.js +215 -66
  18. package/dist/commands/execute.js.map +1 -1
  19. package/dist/commands/hooks.d.ts +5 -0
  20. package/dist/commands/hooks.d.ts.map +1 -0
  21. package/dist/commands/hooks.js +22 -0
  22. package/dist/commands/hooks.js.map +1 -0
  23. package/dist/core/error-feedback.d.ts +30 -0
  24. package/dist/core/error-feedback.d.ts.map +1 -0
  25. package/dist/core/error-feedback.js +87 -0
  26. package/dist/core/error-feedback.js.map +1 -0
  27. package/dist/core/execution-state.d.ts +58 -0
  28. package/dist/core/execution-state.d.ts.map +1 -0
  29. package/dist/core/execution-state.js +142 -0
  30. package/dist/core/execution-state.js.map +1 -0
  31. package/dist/core/git-integration.d.ts +36 -0
  32. package/dist/core/git-integration.d.ts.map +1 -0
  33. package/dist/core/git-integration.js +139 -0
  34. package/dist/core/git-integration.js.map +1 -0
  35. package/dist/core/operation-log.d.ts +15 -0
  36. package/dist/core/operation-log.d.ts.map +1 -0
  37. package/dist/core/operation-log.js +88 -0
  38. package/dist/core/operation-log.js.map +1 -0
  39. package/dist/core/task-lock.d.ts +30 -0
  40. package/dist/core/task-lock.d.ts.map +1 -0
  41. package/dist/core/task-lock.js +94 -0
  42. package/dist/core/task-lock.js.map +1 -0
  43. package/package.json +1 -1
@@ -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
- spinner.fail('No active iteration found. Please specify --iteration or create one first.');
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
- spinner.fail('No tasks found in iteration');
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
- spinner.fail('No tasks match the specified filters');
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
- // Preview execution plan
91
- if (!options.force && !options.dryRun) {
92
- spinner.stop('Execution preview');
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
- // Execute tasks
104
- spinner.stop('Starting execution');
105
- const progressBar = new logger_1.ProgressBar(sortedTasks.length);
106
- for (let i = 0; i < sortedTasks.length; i++) {
107
- const task = sortedTasks[i];
108
- logger_1.logger.info(`Executing ${task.id}...`);
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
- // Update context
115
- await (0, context_1.updateContext)({
116
- currentTask: sortedTasks[sortedTasks.length - 1]?.id || '',
117
- currentIteration: iteration,
118
- lastUpdated: new Date().toISOString()
119
- });
120
- await (0, context_1.recordHistory)('execute', iteration, sortedTasks[sortedTasks.length - 1]?.id);
121
- logger_1.logger.success('Execution complete!');
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
- spinner.fail(`Execution failed: ${error}`);
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 to execute: ${tasks.length}`);
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 task = tasks[i];
137
- const status = i === 0 ? '🔄' : '⏳';
138
- logger_1.logger.info(`${status} ${task.id} - ${task.name}`);
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 taskPath = (0, path_1.join)(iterDir, task.id);
186
- const platformDir = (0, path_1.join)(taskPath, 'frontend', platform);
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,5 @@
1
+ /**
2
+ * hooks — Git Hook 安装
3
+ */
4
+ export declare function hooksCommand(): void;
5
+ //# sourceMappingURL=hooks.d.ts.map
@@ -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"}