speccore 8.3.221 → 8.3.223

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 (55) hide show
  1. package/dist/cli.js +29 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/analyze.d.ts.map +1 -1
  4. package/dist/commands/analyze.js +491 -238
  5. package/dist/commands/analyze.js.map +1 -1
  6. package/dist/commands/change.js +1 -0
  7. package/dist/commands/change.js.map +1 -1
  8. package/dist/commands/doc2spec.d.ts.map +1 -1
  9. package/dist/commands/doc2spec.js +205 -95
  10. package/dist/commands/doc2spec.js.map +1 -1
  11. package/dist/commands/execute.js +4 -4
  12. package/dist/commands/execute.js.map +1 -1
  13. package/dist/commands/iteration/split.d.ts.map +1 -1
  14. package/dist/commands/iteration/split.js +29 -182
  15. package/dist/commands/iteration/split.js.map +1 -1
  16. package/dist/commands/plan.d.ts.map +1 -1
  17. package/dist/commands/plan.js +67 -11
  18. package/dist/commands/plan.js.map +1 -1
  19. package/dist/commands/req-doc.d.ts.map +1 -1
  20. package/dist/commands/req-doc.js +122 -14
  21. package/dist/commands/req-doc.js.map +1 -1
  22. package/dist/commands/retro.d.ts +1 -1
  23. package/dist/commands/retro.d.ts.map +1 -1
  24. package/dist/commands/retro.js +87 -8
  25. package/dist/commands/retro.js.map +1 -1
  26. package/dist/commands/run.d.ts +1 -0
  27. package/dist/commands/run.d.ts.map +1 -1
  28. package/dist/commands/run.js +182 -14
  29. package/dist/commands/run.js.map +1 -1
  30. package/dist/core/agent-adapter.d.ts.map +1 -1
  31. package/dist/core/agent-adapter.js +13 -6
  32. package/dist/core/agent-adapter.js.map +1 -1
  33. package/dist/core/context-budget.d.ts +3 -2
  34. package/dist/core/context-budget.d.ts.map +1 -1
  35. package/dist/core/context-budget.js +16 -3
  36. package/dist/core/context-budget.js.map +1 -1
  37. package/dist/core/dispatch-loop.d.ts +81 -0
  38. package/dist/core/dispatch-loop.d.ts.map +1 -0
  39. package/dist/core/dispatch-loop.js +152 -0
  40. package/dist/core/dispatch-loop.js.map +1 -0
  41. package/dist/core/prompt-builder.d.ts.map +1 -1
  42. package/dist/core/prompt-builder.js +20 -0
  43. package/dist/core/prompt-builder.js.map +1 -1
  44. package/dist/core/requirement-clarifier.d.ts.map +1 -1
  45. package/dist/core/requirement-clarifier.js +36 -0
  46. package/dist/core/requirement-clarifier.js.map +1 -1
  47. package/dist/core/state.d.ts +3 -0
  48. package/dist/core/state.d.ts.map +1 -1
  49. package/dist/core/state.js +19 -1
  50. package/dist/core/state.js.map +1 -1
  51. package/dist/core/unit-context-assembler.d.ts +5 -0
  52. package/dist/core/unit-context-assembler.d.ts.map +1 -1
  53. package/dist/core/unit-context-assembler.js +225 -9
  54. package/dist/core/unit-context-assembler.js.map +1 -1
  55. package/package.json +2 -2
@@ -45,6 +45,7 @@ const fs_extra_1 = require("fs-extra");
45
45
  const logger_1 = require("../utils/logger");
46
46
  const context_1 = require("../core/context");
47
47
  const issue_tracker_1 = require("../core/issue-tracker");
48
+ const task_paths_1 = require("../core/task-paths");
48
49
  /**
49
50
  * 解析任务目录基础路径:优先 030-tasks/,扫描任务目录
50
51
  */
@@ -52,16 +53,79 @@ async function resolveTaskBase(iterDir) {
52
53
  const tasksDir = (0, path_1.join)(iterDir, '030-tasks');
53
54
  return (await (0, fs_extra_1.pathExists)(tasksDir)) ? tasksDir : iterDir;
54
55
  }
56
+ /**
57
+ * v8.3.223+: 递归查找新结构子任务路径(030-tasks/{type}/Task-XXX/{端}/{subtaskId}/)。
58
+ * 修复:旧逻辑用扁平 join(taskBase, taskId) 生成 RETRO.md,对子任务 ID 会在
59
+ * 030-tasks 根下 ensureDir 创建游离垃圾目录(仅含 RETRO.md,无任务产物),
60
+ * 后续被 scanTasks/run 误判为待办任务。
61
+ */
62
+ async function findNestedSubtaskDir(tasksRoot, taskId) {
63
+ if (!(await (0, fs_extra_1.pathExists)(tasksRoot)))
64
+ return null;
65
+ for (const type of task_paths_1.TASK_TYPES) {
66
+ const typeDir = (0, path_1.join)(tasksRoot, type);
67
+ if (!(await (0, fs_extra_1.pathExists)(typeDir)))
68
+ continue;
69
+ const parents = await (0, fs_extra_1.readdir)(typeDir, { withFileTypes: true });
70
+ for (const p of parents) {
71
+ if (!p.isDirectory() || !p.name.startsWith('Task-'))
72
+ continue;
73
+ const parentPath = (0, path_1.join)(typeDir, p.name);
74
+ const platformDirs = await (0, fs_extra_1.readdir)(parentPath, { withFileTypes: true }).catch(() => []);
75
+ for (const pd of platformDirs) {
76
+ if (!pd.isDirectory() || pd.name.startsWith('.') || pd.name.startsWith('_') || pd.name.startsWith('0'))
77
+ continue;
78
+ const sub = (0, path_1.join)(parentPath, pd.name, taskId);
79
+ if (await (0, fs_extra_1.pathExists)(sub))
80
+ return sub;
81
+ }
82
+ }
83
+ }
84
+ return null;
85
+ }
86
+ /**
87
+ * v8.3.223+: 解析 RETRO 目标任务目录——新结构优先(嵌套子任务 → 类型父任务 → 旧扁平)。
88
+ * 返回 null 表示任务不存在,调用方不应写入 RETRO.md。
89
+ */
90
+ async function resolveRetroTaskDir(taskBase, taskId) {
91
+ const nested = await findNestedSubtaskDir(taskBase, taskId);
92
+ if (nested)
93
+ return nested;
94
+ const found = await (0, task_paths_1.findTaskDir)(taskBase, taskId);
95
+ if (found) {
96
+ // 旧扁平路径可能是历史 bug 产生的游离目录(仅 RETRO.md)——校验任务产物后决定是否可用
97
+ const flat = (0, path_1.join)(taskBase, taskId);
98
+ if (found !== flat)
99
+ return found;
100
+ try {
101
+ const names = (await (0, fs_extra_1.readdir)(found)).map((n) => n.toLowerCase());
102
+ const hasArtifacts = names.includes('.meta') || names.includes('task.md')
103
+ || names.includes('00-specs') || names.includes('_shared');
104
+ if (hasArtifacts)
105
+ return found;
106
+ }
107
+ catch { /* ignore */ }
108
+ return null;
109
+ }
110
+ return null;
111
+ }
55
112
  async function retroCommand(options) {
56
113
  const iteration = await (0, context_1.getDefaultIteration)(options.iteration);
57
114
  const iterDir = iteration ? await (0, context_1.getIterationDir)(iteration) : '';
58
115
  // 确定要生成回顾的任务列表
59
116
  let taskIds = [];
117
+ // v8.3.223+: 记录 scanTasks 返回的真实目录路径(TASK.md 内 ID 可能与目录名不一致)
118
+ const taskPathMap = new Map();
60
119
  if (options.all && iterDir) {
61
120
  try {
62
- const taskBase = await resolveTaskBase(iterDir);
63
- const entries = await (0, fs_extra_1.readdir)(taskBase, { withFileTypes: true });
64
- taskIds = entries.filter((e) => e.isDirectory() && e.name.startsWith('Task-')).map((e) => e.name);
121
+ // v8.3.223+: 复用 scanTasks(支持新旧布局,且过滤无任务产物的游离目录)
122
+ const { scanTasks } = await Promise.resolve().then(() => __importStar(require('../core/state')));
123
+ const tasks = await scanTasks(iteration);
124
+ taskIds = tasks.map(t => t.id);
125
+ for (const t of tasks) {
126
+ if (t.path)
127
+ taskPathMap.set(t.id, t.path);
128
+ }
65
129
  }
66
130
  catch { }
67
131
  }
@@ -98,7 +162,9 @@ async function retroCommand(options) {
98
162
  }
99
163
  // 逐个生成报告
100
164
  for (const taskId of taskIds) {
101
- const report = await generateReport(taskId, iterDir);
165
+ const report = await generateReport(taskId, iterDir, taskPathMap.get(taskId));
166
+ if (!report)
167
+ continue;
102
168
  if (!process.stdout.isTTY) {
103
169
  const html = renderRetroHtml(report);
104
170
  const outPath = options.output || (0, path_1.join)(process.cwd(), 'outputs', `speccore-retro-${taskId}.html`);
@@ -122,10 +188,19 @@ async function retroCommand(options) {
122
188
  }
123
189
  logger_1.logger.info(`\n📊 共生成 ${taskIds.length} 份回顾报告`);
124
190
  }
125
- async function generateReport(taskId, iterDir) {
191
+ async function generateReport(taskId, iterDir, taskDirHint) {
126
192
  const taskBase = await resolveTaskBase(iterDir);
127
- const taskDir = (0, path_1.join)(taskBase, taskId);
193
+ // v8.3.223+: 优先使用 scanTasks 记录的真实目录;否则新结构优先解析。
194
+ // 解析不到说明任务目录不存在——不 fallback 到扁平 join,防止在 030-tasks 根下制造游离目录。
195
+ const taskDir = (taskDirHint && await (0, fs_extra_1.pathExists)(taskDirHint))
196
+ ? taskDirHint
197
+ : await resolveRetroTaskDir(taskBase, taskId);
128
198
  const now = new Date().toISOString().split('T')[0];
199
+ // v8.3.223+: 任务目录不存在时直接跳过(旧逻辑 ensureDir 会在 030-tasks 根下制造游离目录)
200
+ if (!taskDir) {
201
+ logger_1.logger.warn(`⏭️ 任务目录不存在,跳过 RETRO.md: ${taskId}`);
202
+ return null;
203
+ }
129
204
  let filesChanged = 0;
130
205
  let validationPassed = false;
131
206
  if (await (0, fs_extra_1.pathExists)(taskDir)) {
@@ -235,8 +310,9 @@ async function generateReport(taskId, iterDir) {
235
310
  verifyResult,
236
311
  };
237
312
  // 持久化 RETRO.md 到任务目录
238
- if (iterDir && await (0, fs_extra_1.pathExists)(iterDir)) {
239
- await (0, fs_extra_1.ensureDir)(taskDir);
313
+ // v8.3.223+: 任务目录不存在时不落盘(旧逻辑 ensureDir 无条件创建目录,
314
+ // 对子任务 ID 会在 030-tasks 根下制造仅含 RETRO.md 的游离垃圾目录)
315
+ if (iterDir && await (0, fs_extra_1.pathExists)(iterDir) && await (0, fs_extra_1.pathExists)(taskDir)) {
240
316
  const retroMd = [
241
317
  `# 任务回顾 · ${taskId}`,
242
318
  '',
@@ -273,6 +349,9 @@ async function generateReport(taskId, iterDir) {
273
349
  await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'RETRO.md'), retroMd);
274
350
  logger_1.logger.info(`📄 已生成: ${(0, path_1.join)(taskDir, 'RETRO.md')}`);
275
351
  }
352
+ else {
353
+ logger_1.logger.warn(`⏭️ 任务目录不存在,跳过 RETRO.md: ${taskId}`);
354
+ }
276
355
  return report;
277
356
  }
278
357
  function renderRetroHtml(report) {
@@ -1 +1 @@
1
- {"version":3,"file":"retro.js","sourceRoot":"","sources":["../../src/commands/retro.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retro.js","sourceRoot":"","sources":["../../src/commands/retro.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+FA,oCAgFC;AAED,wCAuKC;AAED,0CAcC;AAxWD;;;GAGG;AACH,+BAA4B;AAC5B,uCAA+E;AAC/E,4CAAyC;AACzC,6CAAuE;AACvE,yDAAkD;AAClD,mDAA6D;AAE7D;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,OAAe;IAC5C,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC5C,OAAO,CAAC,MAAM,IAAA,qBAAU,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AAC3D,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,oBAAoB,CAAC,SAAiB,EAAE,MAAc;IACnE,IAAI,CAAC,CAAC,MAAM,IAAA,qBAAU,EAAC,SAAS,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,uBAAU,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,CAAC,MAAM,IAAA,qBAAU,EAAC,OAAO,CAAC,CAAC;YAAE,SAAS;QAC3C,MAAM,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,SAAS;YAC9D,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,YAAY,GAAG,MAAM,IAAA,kBAAO,EAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACxF,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;gBAC9B,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAS;gBACjH,MAAM,GAAG,GAAG,IAAA,WAAI,EAAC,UAAU,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC9C,IAAI,MAAM,IAAA,qBAAU,EAAC,GAAG,CAAC;oBAAE,OAAO,GAAG,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,mBAAmB,CAAC,QAAgB,EAAE,MAAc;IACjE,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5D,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,KAAK,GAAG,MAAM,IAAA,wBAAW,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClD,IAAI,KAAK,EAAE,CAAC;QACV,oDAAoD;QACpD,MAAM,IAAI,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,CAAC,MAAM,IAAA,kBAAO,EAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACzE,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;mBACpE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC7D,IAAI,YAAY;gBAAE,OAAO,KAAK,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AA6BM,KAAK,UAAU,YAAY,CAAC,OAAqB;IACtD,MAAM,SAAS,GAAG,MAAM,IAAA,6BAAmB,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,IAAA,yBAAe,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAElE,eAAe;IACf,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,4DAA4D;IAC5D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,IAAK,OAAe,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,gDAAgD;YAChD,MAAM,EAAE,SAAS,EAAE,GAAG,wDAAa,eAAe,GAAC,CAAC;YACpD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;YACzC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,IAAI,CAAC,CAAC,IAAI;oBAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;SAAM,IAAK,OAAe,CAAC,KAAK,EAAE,CAAC;QAClC,OAAO,GAAI,OAAe,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3E,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,eAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,mCAAmC;IACnC,IAAI,CAAE,OAAe,CAAC,KAAK,IAAK,OAAe,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QACjE,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAC;QACpE,IAAI,MAAM,IAAA,qBAAU,EAAC,SAAS,CAAC,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,MAAM,IAAA,mBAAQ,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,IAAI,GAAoD,EAAE,CAAC;YACjE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,8CAA8C,CAAC,EAAE,CAAC;gBAC/E,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,CAAC;YACD,IAAK,OAAe,CAAC,KAAK,EAAE,CAAC;gBAC3B,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,KAAM,OAAe,CAAC,KAAK,CAAC,CAAC;YAC7E,CAAC;YACD,IAAK,OAAe,CAAC,IAAI,EAAE,CAAC;gBAC1B,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,KAAM,OAAe,CAAC,IAAI,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,eAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,SAAS;IACT,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,MAAM;YAAE,SAAS;QAEtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,kBAAkB,MAAM,OAAO,CAAC,CAAC;YAClG,MAAM,IAAA,oBAAS,EAAC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;YAChD,MAAM,IAAA,oBAAS,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC/B,eAAM,CAAC,IAAI,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;YAClC,eAAM,CAAC,IAAI,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,OAAO,KAAK,CAAC,CAAC;YACvD,SAAS;QACX,CAAC;QAED,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,eAAM,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,eAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC;QACnD,eAAM,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9C,eAAM,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;QACjD,eAAM,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/D,eAAM,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC;QAC7H,eAAM,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACpC,IAAI,MAAM,CAAC,WAAW;YAAE,eAAM,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,eAAM,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC;AAClD,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,MAAc,EAAE,OAAe,EAAE,WAAoB;IACxF,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAChD,+CAA+C;IAC/C,6DAA6D;IAC7D,MAAM,OAAO,GAAG,CAAC,WAAW,IAAI,MAAM,IAAA,qBAAU,EAAC,WAAW,CAAC,CAAC;QAC5D,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,MAAM,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,+DAA+D;IAC/D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,eAAM,CAAC,IAAI,CAAC,2BAA2B,MAAM,EAAE,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAE7B,IAAI,MAAM,IAAA,qBAAU,EAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,MAAM,EAAE,OAAO,EAAE,GAAG,wDAAa,aAAa,GAAC,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,4BAA4B;IAC5B,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACpD,MAAM,cAAc,GAAG,CAAC,MAAM,IAAA,qBAAU,EAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,IAAA,qBAAU,EAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;IACpI,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACxD,gBAAgB,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzE,CAAC;IAED,SAAS;IACT,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAS,EAAC,OAAO,CAAC,CAAC;IAExC,wCAAwC;IACxC,IAAI,YAAyC,CAAC;IAC9C,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAU,EAAC,IAAA,WAAI,EAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;QACpE,CAAC,CAAC,IAAA,WAAI,EAAC,OAAO,EAAE,kBAAkB,CAAC;QACnC,CAAC,CAAC,MAAM,IAAA,qBAAU,EAAC,IAAA,WAAI,EAAC,OAAO,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAC;YACnE,CAAC,CAAC,IAAA,WAAI,EAAC,OAAO,EAAE,cAAc,EAAE,kBAAkB,CAAC;YACnD,CAAC,CAAC,IAAI,CAAC;IACX,IAAI,UAAU,IAAI,MAAM,IAAA,qBAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC/C,MAAM,aAAa,GAAG,MAAM,IAAA,mBAAQ,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC/E,YAAY,GAAG;YACb,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI;YAC1D,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;YAC3C,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;YAC3C,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACvD,CAAC;IACJ,CAAC;IAED,aAAa;IACb,IAAI,UAAyH,CAAC;IAC9H,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAC5D,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,MAAM,IAAA,qBAAU,EAAC,YAAY,CAAC,EAAE,CAAC;QACnC,UAAU,GAAG,MAAM,IAAA,mBAAQ,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;SAAM,IAAI,MAAM,IAAA,qBAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QACxC,UAAU,GAAG,MAAM,IAAA,mBAAQ,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACzD,MAAM,cAAc,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAC9D,mBAAmB;QACnB,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,2BAA2B;QAC3B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,MAAM,IAAA,kBAAO,EAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACxE,KAAK,MAAM,EAAE,IAAI,eAAe,EAAE,CAAC;gBACjC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACxF,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,cAAc,GAAG,MAAM,IAAA,kBAAO,EAAC,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5E,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;oBACjC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;wBAAE,SAAS;oBACjC,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,YAAY,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBACnD,IAAI,MAAM,IAAA,qBAAU,EAAC,MAAM,CAAC,EAAE,CAAC;wBAC7B,MAAM,KAAK,GAAG,MAAM,IAAA,kBAAO,EAAC,MAAM,CAAC,CAAC;wBACpC,gBAAgB,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;oBACzH,CAAC;oBACD,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,YAAY,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;oBAC9D,IAAI,MAAM,IAAA,qBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;wBAC/B,MAAM,SAAS,GAAG,MAAM,IAAA,kBAAO,EAAC,QAAQ,CAAC,CAAC;wBAC1C,gBAAgB,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;oBAC7H,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,0BAA0B;QAC1B,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;QACnE,IAAI,MAAM,IAAA,qBAAU,EAAC,YAAY,CAAC,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAQ,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACvD,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACjD,CAAC;QACD,UAAU,GAAG,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;IAChF,CAAC;IAED,MAAM,MAAM,GAAgB;QAC1B,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;QAC5C,WAAW,EAAE,GAAG;QAChB,OAAO,EAAE,MAAM,MAAM,YAAY,YAAY,QAAQ;QACrD,YAAY;QACZ,gBAAgB;QAChB,KAAK,EAAE,gBAAgB,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3H,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YACvC,CAAC,CAAC,KAAK,MAAM,CAAC,UAAU,CAAC,MAAM,aAAa;YAC5C,CAAC,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa;QACzD,WAAW,EAAE,MAAM,CAAC,KAAK;QACzB,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM;QAC1C,YAAY;KACb,CAAC;IAEF,qBAAqB;IACrB,gDAAgD;IAChD,gDAAgD;IAChD,IAAI,OAAO,IAAI,MAAM,IAAA,qBAAU,EAAC,OAAO,CAAC,IAAI,MAAM,IAAA,qBAAU,EAAC,OAAO,CAAC,EAAE,CAAC;QACtE,MAAM,OAAO,GAAG;YACd,YAAY,MAAM,EAAE;YACpB,EAAE;YACF,WAAW,GAAG,EAAE;YAChB,WAAW,YAAY,EAAE;YACzB,WAAW,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE;YACzC,WAAW,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,KAAK;YACrG,EAAE;YACF,OAAO;YACP,MAAM,CAAC,OAAO;YACd,EAAE;YACF,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;gBACjB,SAAS;gBACT,EAAE;gBACF,SAAS,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE;gBACrD,WAAW,YAAY,CAAC,UAAU,EAAE;gBACpC,SAAS,YAAY,CAAC,UAAU,EAAE;gBAClC,UAAU,YAAY,CAAC,WAAW,SAAS,YAAY,CAAC,YAAY,SAAS,YAAY,CAAC,YAAY,KAAK;gBAC3G,EAAE;aACH,CAAC,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;gBACf,YAAY;gBACZ,EAAE;gBACF,mBAAmB,UAAU,CAAC,SAAS,EAAE;gBACzC,mBAAmB,UAAU,CAAC,cAAc,EAAE;gBAC9C,aAAa,UAAU,CAAC,gBAAgB,EAAE;gBAC1C,cAAc,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,wBAAwB,EAAE;gBAC9F,EAAE;aACH,CAAC,CAAC,CAAC,EAAE,CAAC;YACP,SAAS;YACT,MAAM,CAAC,WAAW,IAAI,OAAO;YAC7B,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,IAAA,oBAAS,EAAC,IAAA,WAAI,EAAC,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QACpD,eAAM,CAAC,IAAI,CAAC,WAAW,IAAA,WAAI,EAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,eAAM,CAAC,IAAI,CAAC,2BAA2B,MAAM,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,eAAe,CAAC,MAAmB;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC;IAClD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,qCAAqC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClI,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAEzD,SAAS;IACT,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC;QAC/B,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/C,WAAW,GAAG,uIAAuI,WAAW,kFAAkF,EAAE,CAAC,UAAU,oFAAoF,EAAE,CAAC,UAAU,uHAAuH,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,WAAW,0CAA0C,CAAC;IACriB,CAAC;IAED,OAAO,8JAA8J,MAAM,CAAC,IAAI,ipIAAipI,MAAM,CAAC,IAAI,0BAA0B,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,WAAW,4BAA4B,KAAK,+DAA+D,MAAM,CAAC,YAAY,4EAA4E,MAAM,KAAK,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,iHAAiH,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,gBAAgB,oGAAoG,MAAM,CAAC,WAAW,gDAAgD,WAAW,wBAAwB,MAAM,CAAC,OAAO,iCAAiC,MAAM,CAAC,WAAW,IAAI,YAAY,qDAAqD,GAAG,MAAM,MAAM,CAAC,WAAW,sBAAsB,CAAC;AACpuK,CAAC"}
@@ -12,6 +12,7 @@ export interface RunOptions {
12
12
  env?: string;
13
13
  smoke?: 'on' | 'off';
14
14
  scope?: 'full' | 'module';
15
+ noDepCheck?: boolean;
15
16
  }
16
17
  export declare function runCommand(options: RunOptions): Promise<void>;
17
18
  //# sourceMappingURL=run.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC3B;AAqCD,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAqCD,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE"}
@@ -143,6 +143,107 @@ async function autoPipeline(options) {
143
143
  }
144
144
  const iterDir = `Iteration-${iteration}`;
145
145
  logger_1.logger.info(`\n🤖 Auto-pipeline: ${iteration}\n`);
146
+ // v8.3.223+: 检测需求文档是否已导入(converted/、sources/ 下的文档或 REQUIREMENT.md 有实质内容)
147
+ const hasRequirementDocs = async () => {
148
+ const reqDir = (0, path_1.join)(iterDir, '010-requirements');
149
+ const reqMd = (0, path_1.join)(reqDir, 'REQUIREMENT.md');
150
+ if (await (0, fs_extra_1.pathExists)(reqMd)) {
151
+ try {
152
+ const content = await (0, fs_extra_1.readFile)(reqMd, 'utf-8');
153
+ if (content.replace(/\s/g, '').length > 100)
154
+ return true;
155
+ }
156
+ catch { /* ignore */ }
157
+ }
158
+ for (const d of ['converted', 'sources']) {
159
+ const dir = (0, path_1.join)(reqDir, d);
160
+ if (await (0, fs_extra_1.pathExists)(dir)) {
161
+ const entries = await (0, fs_extra_1.readdir)(dir).catch(() => []);
162
+ if (entries.some((e) => /\.(md|docx|doc|pdf)$/i.test(e.name)))
163
+ return true;
164
+ }
165
+ }
166
+ return false;
167
+ };
168
+ // v8.3.223+: 阶段前置依赖表——上游依赖未满足时阻断流水线,防止下游空跑产出垃圾产物。
169
+ // 历史教训:`--from taskify` 跳过 split-units 后,features/ 为空仍按需求文档粒度拆分,
170
+ // AI 把骨架「📋 质量标准」标题当功能单元,产出 Task-NNN-requirement-md 垃圾任务。
171
+ // hard=true 缺失时硬阻断(🛑 + 补救命令);hard=false 缺失时警告继续。--no-dep-check 可全部跳过。
172
+ const PRECONDITIONS = {
173
+ 'split-units': {
174
+ desc: '存在可切分的需求文档(converted/、sources/ 或 REQUIREMENT.md 有实质内容)',
175
+ impact: '无需求文档则切分功能单元无从谈起,下游 analyze 拿不到输入',
176
+ remedy: `先导入需求: speccore doc2spec -I ${iteration}(或 speccore run --from doc2spec -I ${iteration})`,
177
+ bypassNote: '需求已由手动方式准备',
178
+ hard: true,
179
+ check: hasRequirementDocs,
180
+ },
181
+ analyze: {
182
+ desc: '存在需求文档(converted/、sources/ 或 REQUIREMENT.md 有实质内容)',
183
+ impact: '无需求文档 analyze 无输入,会产出空 Spec 骨架',
184
+ remedy: `先导入需求: speccore doc2spec -I ${iteration}`,
185
+ bypassNote: '需求已由手动方式准备',
186
+ hard: true,
187
+ check: hasRequirementDocs,
188
+ },
189
+ taskify: {
190
+ desc: '功能单元已切分(010-requirements/features/ 下存在功能单元目录)',
191
+ impact: '未切分将按需求文档粒度拆分,任务粒度过粗;AI 易把骨架引导标题(质量标准/写作要求)误当功能单元,产出垃圾任务',
192
+ remedy: `先切分功能单元: speccore doc2spec --split -I ${iteration}(或 speccore run --from split-units -I ${iteration})`,
193
+ bypassNote: '确认按需求文档粒度拆分(小型项目)',
194
+ hard: true,
195
+ check: async () => await hasFeatureDirs(iterDir),
196
+ },
197
+ plan: {
198
+ desc: '开发任务已拆分(030-tasks 下存在真实任务)',
199
+ impact: '无任务无法生成执行计划,后续 execute 空转假成功',
200
+ remedy: `先拆分任务: speccore iteration taskify -I ${iteration} --force(或 speccore run --from taskify -I ${iteration})`,
201
+ bypassNote: '任务目录由手动创建',
202
+ hard: true,
203
+ check: async () => {
204
+ try {
205
+ const { scanTasks } = await Promise.resolve().then(() => __importStar(require('../core/state')));
206
+ return (await scanTasks(iteration)).length > 0;
207
+ }
208
+ catch {
209
+ return false;
210
+ }
211
+ },
212
+ },
213
+ execute: {
214
+ desc: '开发任务已拆分(030-tasks 下存在真实任务)',
215
+ impact: '无任务 execute 0 秒空转假成功,用户误以为代码已开发',
216
+ remedy: `先拆分任务: speccore iteration taskify -I ${iteration} --force(或 speccore run --from taskify -I ${iteration})`,
217
+ bypassNote: '任务目录由手动创建',
218
+ hard: true,
219
+ check: async () => {
220
+ try {
221
+ const { scanTasks } = await Promise.resolve().then(() => __importStar(require('../core/state')));
222
+ return (await scanTasks(iteration)).length > 0;
223
+ }
224
+ catch {
225
+ return false;
226
+ }
227
+ },
228
+ },
229
+ verify: {
230
+ desc: '存在已完成的开发任务(代码已生成)',
231
+ impact: '无任务产物 verify 没有验证对象',
232
+ remedy: `先执行开发: speccore run --from execute -I ${iteration}`,
233
+ bypassNote: '跳过验证',
234
+ hard: false,
235
+ check: async () => {
236
+ try {
237
+ const { scanTasks } = await Promise.resolve().then(() => __importStar(require('../core/state')));
238
+ const tasks = await scanTasks(iteration);
239
+ return tasks.length > 0 && tasks.some(t => t.status === 'completed');
240
+ }
241
+ catch {
242
+ return false;
243
+ }
244
+ },
245
+ },
246
+ };
146
247
  // v8.3.190+: 读取 optional_steps(off 跳过)+ pipelines(命名流水线)配置
147
248
  let optionalSteps = {};
148
249
  let pipelinesConfig = {};
@@ -272,6 +373,12 @@ async function autoPipeline(options) {
272
373
  endIdx = sorted[sorted.length - 1];
273
374
  logger_1.logger.info(`🎯 自动步骤: ${stepKeys.join(' → ')}\n`);
274
375
  }
376
+ // v8.3.223+: 提示被跳过的上游阶段(--from 起点之前的阶段不会执行,依赖需已满足)
377
+ if (startIdx > 0) {
378
+ const skipped = PIPELINE_PHASES.slice(0, startIdx).map(p => p.key);
379
+ logger_1.logger.warn(`⏭️ 从 ${PIPELINE_PHASES[startIdx].key} 开始,上游阶段已跳过: ${skipped.join(' → ')}`);
380
+ logger_1.logger.warn(` 每个阶段执行前会校验前置依赖,缺失时硬阻断(--no-dep-check 可强制跳过检查)\n`);
381
+ }
275
382
  // ── 逐步执行 ──
276
383
  let pausedGate = null;
277
384
  let prevLayer = '';
@@ -284,6 +391,30 @@ async function autoPipeline(options) {
284
391
  ? '\n────────── 🏗️ 准备层(初始化 + 需求入口)──────────'
285
392
  : '\n────────── 🚀 主流程(分析→拆分→执行→验证→部署→归档→导出)──────────');
286
393
  }
394
+ // v8.3.223+: 阶段前置依赖校验——上游依赖未满足时阻断流水线。
395
+ // 解决「--from taskify 跳过 split-units 仍继续拆分」类问题:依赖缺失必须停下并给补救命令。
396
+ // 注意:必须在 review 闸口软停之前——依赖不满足时应第一时间硬阻断,
397
+ // 而不是让用户先在闸口确认、之后才被告知依赖缺失。
398
+ if (!options.noDepCheck) {
399
+ const pre = PRECONDITIONS[phase.key];
400
+ if (pre) {
401
+ const preOk = await pre.check();
402
+ if (!preOk) {
403
+ if (pre.hard) {
404
+ logger_1.logger.error(`\n🛑 [SPECCORE_GATE] 阶段前置依赖未满足: ${phase.key}`);
405
+ logger_1.logger.error(` 缺少: ${pre.desc}`);
406
+ logger_1.logger.error(` 影响: ${pre.impact}`);
407
+ logger_1.logger.error(` 补救: ${pre.remedy}`);
408
+ logger_1.logger.error(` 继续: 补齐依赖后重新执行 speccore run --from ${phase.key} -I ${iteration}`);
409
+ logger_1.logger.error(` 绕过: 如确需跳过检查(${pre.bypassNote}),加 --no-dep-check 显式继续\n`);
410
+ process.exitCode = 1;
411
+ return;
412
+ }
413
+ logger_1.logger.warn(` ⚠️ 前置依赖建议: ${pre.desc}`);
414
+ logger_1.logger.warn(` ${pre.remedy}(软依赖,继续执行...)`);
415
+ }
416
+ }
417
+ }
287
418
  // v8.3.184+: review 闸口软停(功能开发质量底线)
288
419
  const gate = GATES[phase.key];
289
420
  if (gate) {
@@ -352,12 +483,17 @@ async function autoPipeline(options) {
352
483
  // v8.3.191+: 切分功能单元(结构化,独立于澄清)
353
484
  // 已切分(features/ 非空)则跳过;否则对 converted/ 和 REQUIREMENT.md 文档切分
354
485
  const featuresDir = (0, path_1.join)(iterDir, '010-requirements', 'features');
355
- let hasFeatures = false;
356
- try {
357
- const entries = await (0, fs_extra_1.readdir)(featuresDir, { withFileTypes: true });
358
- hasFeatures = entries.some((e) => e.isDirectory() && !e.name.startsWith('.'));
359
- }
360
- catch { }
486
+ // v8.3.222+: 统计 features/ 一级子目录(功能单元)数,排除 . / _ 开头系统目录
487
+ const countFeatureDirs = async () => {
488
+ try {
489
+ const entries = await (0, fs_extra_1.readdir)(featuresDir, { withFileTypes: true });
490
+ return entries.filter((e) => e.isDirectory() && !e.name.startsWith('.') && !e.name.startsWith('_')).length;
491
+ }
492
+ catch {
493
+ return 0;
494
+ }
495
+ };
496
+ let hasFeatures = (await countFeatureDirs()) > 0;
361
497
  if (hasFeatures) {
362
498
  logger_1.logger.info(' ✅ 功能单元已切分,跳过');
363
499
  phaseStatus = 'skipped';
@@ -381,23 +517,49 @@ async function autoPipeline(options) {
381
517
  phaseMessage = '无需求文档可切分';
382
518
  break;
383
519
  }
520
+ // v8.3.222+: 切分前统计需求文档的功能单元候选(## 二级标题数),用于切分后覆盖验证
521
+ let candidateUnits = 0;
522
+ for (const doc of docsToSplit) {
523
+ try {
524
+ const c = await (0, fs_extra_1.readFile)(doc, 'utf-8');
525
+ const h2 = c.split('\n').filter(l => /^##\s+.+/.test(l));
526
+ candidateUnits += h2.length;
527
+ }
528
+ catch { /* ignore */ }
529
+ }
384
530
  const { splitDocumentToUnits } = await Promise.resolve().then(() => __importStar(require('./doc2spec')));
385
- let written = 0;
386
531
  for (const doc of docsToSplit) {
387
532
  try {
388
533
  await splitDocumentToUnits(iterDir, doc, '', (0, path_1.basename)(doc));
389
- written++;
390
534
  }
391
535
  catch (e) {
392
536
  logger_1.logger.warn(` ⚠️ 切分失败: ${(0, path_1.basename)(doc)} — ${e?.message || e}`);
393
537
  }
394
538
  }
395
- logger_1.logger.info(` 🔪 切分功能单元完成: ${written}/${docsToSplit.length} 个文档`);
539
+ // v8.3.222+: 切分结果验证——以「实际产出的功能单元目录数」为准,而非「调用次数」。
540
+ // 修复「切分完成 4/4 但 features/ 一个单元都没产出」的假完成。
541
+ const producedUnits = await countFeatureDirs();
542
+ logger_1.logger.info(` 🔪 切分功能单元: 实际产出 ${producedUnits} 个功能单元(${docsToSplit.length} 个需求文档,${candidateUnits} 个候选章节)`);
543
+ if (producedUnits === 0) {
544
+ logger_1.logger.error(`\n🛑 [SPECCORE_GATE] 切分功能单元失败——features/ 未产出任何功能单元`);
545
+ logger_1.logger.error(' 需求文档可能不含可识别的功能单元章节(## 二级标题),或切分逻辑未生效。');
546
+ logger_1.logger.error(` 涉及文档: ${docsToSplit.map(d => (0, path_1.basename)(d)).join(', ')}`);
547
+ logger_1.logger.error(' 功能单元应体现为需求文档的「## 章节」(如 ## 会议室管理、## 预订管理)。');
548
+ process.exitCode = 1;
549
+ return;
550
+ }
551
+ // v8.3.222+: 覆盖验证——产出数明显少于候选章节数时警告(可能漏切),不阻断(AI 语义合并是合理的)
552
+ if (candidateUnits > 0 && producedUnits < Math.floor(candidateUnits * 0.5)) {
553
+ logger_1.logger.warn(` ⚠️ 功能单元产出 ${producedUnits} 个,候选章节 ${candidateUnits} 个,可能漏切(部分 ## 章节被合并或未识别)`);
554
+ logger_1.logger.warn(` 如需完整拆分,可检查 features/ 是否覆盖所有功能章节,或手动补切。`);
555
+ }
396
556
  break;
397
557
  }
398
558
  case 'analyze': {
399
559
  const analysis = (0, path_1.join)(iterDir, '020-specs', 'ANALYSIS.md');
400
- const techSpec = (0, path_1.join)(iterDir, '020-specs', 'ANALYSIS.md');
560
+ // v8.3.223+: 修复复制粘贴 bug——techSpec 原指向 ANALYSIS.md,
561
+ // 与 analysis 同文件导致技术方案校验形同虚设,应指向 TECH.md
562
+ const techSpec = (0, path_1.join)(iterDir, '020-specs', 'TECH.md');
401
563
  let needsAnalysis = !(await (0, fs_extra_1.pathExists)(analysis));
402
564
  let needsSpecs = false;
403
565
  if (!needsAnalysis) {
@@ -533,10 +695,14 @@ async function autoPipeline(options) {
533
695
  process.exitCode = 1;
534
696
  return;
535
697
  }
698
+ // v8.3.223+: 功能单元切分校验已提升到阶段级前置依赖检查(PRECONDITIONS.taskify,硬阻断),
699
+ // 此处不再重复 warn——只有 --no-dep-check 逃生舱时才可能走到这且 features/ 为空。
700
+ // v8.3.223+: 改用 scanTasks 判断任务是否已拆分——游离目录(无 .meta/TASK.md)
701
+ // 不再误判为已拆分(旧逻辑只看 030-tasks 根下 Task- 前缀目录,垃圾目录导致 taskify 假跳过)
536
702
  let hasTasks = false;
537
703
  try {
538
- const entries = await (0, fs_extra_1.readdir)((0, path_1.join)(iterDir, '030-tasks'), { withFileTypes: true });
539
- hasTasks = entries.some((e) => e.isDirectory() && e.name.startsWith('Task-'));
704
+ const { scanTasks } = await Promise.resolve().then(() => __importStar(require('../core/state')));
705
+ hasTasks = (await scanTasks(iteration)).length > 0;
540
706
  }
541
707
  catch { }
542
708
  if (!hasTasks) {
@@ -580,7 +746,8 @@ async function autoPipeline(options) {
580
746
  logger_1.logger.info(' ✅ 执行计划已存在,跳过');
581
747
  }
582
748
  else {
583
- (0, child_process_1.execSync)(`speccore plan -i ${iteration} --force`, { stdio: 'inherit' });
749
+ // v8.3.223+: plan 命令无 --force 选项,此前调用必然报 unknown option 失败
750
+ (0, child_process_1.execSync)(`speccore plan -i ${iteration}`, { stdio: 'inherit' });
584
751
  }
585
752
  break;
586
753
  }
@@ -597,7 +764,8 @@ async function autoPipeline(options) {
597
764
  logger_1.logger.info(' ✅ 所有任务已完成,跳过 execute');
598
765
  }
599
766
  else {
600
- (0, child_process_1.execSync)(`speccore execute --auto -i ${iteration}`, { stdio: 'inherit' });
767
+ // v8.3.223+: --auto 仅执行第一个待执行任务,必须加 --all 覆盖全部 pending
768
+ (0, child_process_1.execSync)(`speccore execute --auto --all -i ${iteration}`, { stdio: 'inherit' });
601
769
  }
602
770
  break;
603
771
  }