@delete101020/aidlc 4.0.42 → 4.0.45
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/bundle.js +152 -85
- package/package.json +1 -1
package/dist/bundle.js
CHANGED
|
@@ -19962,8 +19962,9 @@ var require_WorkspaceSchema = __commonJS({
|
|
|
19962
19962
|
* The target is a step name (or agent id) before this one, without
|
|
19963
19963
|
* `human_review` — work a human gate approved goes back through a human.
|
|
19964
19964
|
* A validator can name the same target in its verdict (`sendBackTo`), or
|
|
19965
|
-
* name this step / `null` to stop here instead.
|
|
19966
|
-
*
|
|
19965
|
+
* name this step / `null` to stop here instead. Naming any other earlier
|
|
19966
|
+
* step — a `human_review` one included — sends the work back there and
|
|
19967
|
+
* stops the run for a person. Bounded by the pipeline's `max_send_backs`.
|
|
19967
19968
|
*/
|
|
19968
19969
|
on_reject: zod_1.z.object({ send_back_to: zod_1.z.string().min(1) }).optional(),
|
|
19969
19970
|
/**
|
|
@@ -19993,6 +19994,12 @@ var require_WorkspaceSchema = __commonJS({
|
|
|
19993
19994
|
pause_between_batches: zod_1.z.boolean().optional(),
|
|
19994
19995
|
/** When true, the runner pauses for human approval before advancing. */
|
|
19995
19996
|
human_review: zod_1.z.boolean().default(false),
|
|
19997
|
+
/**
|
|
19998
|
+
* A step only a person can run — the unattended `run exec` loop stops
|
|
19999
|
+
* before it, as a clean stop rather than an error, and leaves it
|
|
20000
|
+
* `awaiting_work` for someone to run by hand.
|
|
20001
|
+
*/
|
|
20002
|
+
attended: zod_1.z.boolean().optional(),
|
|
19996
20003
|
/**
|
|
19997
20004
|
* Command run once after a batch of follow-up epics is opened from the
|
|
19998
20005
|
* `followups.json` this step produces. See `schema/FollowUpHookSchema.ts`,
|
|
@@ -20173,6 +20180,7 @@ var require_WorkspaceSchema = __commonJS({
|
|
|
20173
20180
|
}
|
|
20174
20181
|
} : {},
|
|
20175
20182
|
human_review: obj.human_review === true,
|
|
20183
|
+
...obj.attended === true && { attended: true },
|
|
20176
20184
|
...git && { git }
|
|
20177
20185
|
};
|
|
20178
20186
|
}
|
|
@@ -20665,6 +20673,9 @@ var require_PipelineAssembler = __commonJS({
|
|
|
20665
20673
|
if (norm.model) {
|
|
20666
20674
|
step.model = norm.model;
|
|
20667
20675
|
}
|
|
20676
|
+
if (norm.attended) {
|
|
20677
|
+
step.attended = true;
|
|
20678
|
+
}
|
|
20668
20679
|
if (auto_review_runner) {
|
|
20669
20680
|
step.auto_review_runner = auto_review_runner;
|
|
20670
20681
|
}
|
|
@@ -21484,6 +21495,7 @@ var require_PipelineRunner = __commonJS({
|
|
|
21484
21495
|
exports2.rerunStep = rerunStep3;
|
|
21485
21496
|
exports2.chooseStepSkill = chooseStepSkill;
|
|
21486
21497
|
exports2.chooseStepModel = chooseStepModel;
|
|
21498
|
+
exports2.recordLaunchFeedback = recordLaunchFeedback;
|
|
21487
21499
|
exports2.requestStepUpdate = requestStepUpdate2;
|
|
21488
21500
|
exports2.dirtyUpstreamOf = dirtyUpstreamOf2;
|
|
21489
21501
|
exports2.canRerunApprovedStep = canRerunApprovedStep;
|
|
@@ -21809,7 +21821,6 @@ ${route.note}` : verdict.reason;
|
|
|
21809
21821
|
return advance(next, idx, pipeline);
|
|
21810
21822
|
}
|
|
21811
21823
|
function autoRejectRoute(state, pipeline, idx, norm, verdict) {
|
|
21812
|
-
const label = (i) => `"${(0, RunState_1.stepIdentity)(state.steps[i])}" (step ${i + 1})`;
|
|
21813
21824
|
const configured = norm.on_reject?.send_back_to;
|
|
21814
21825
|
const cfgIdx = configured ? (0, WorkspaceSchema_1.findStepIndex)(pipeline.steps.map(WorkspaceSchema_1.normalizeStep), configured) : -1;
|
|
21815
21826
|
if (configured && !(cfgIdx >= 0 && cfgIdx < idx)) {
|
|
@@ -21829,13 +21840,7 @@ ${route.note}` : verdict.reason;
|
|
|
21829
21840
|
if (v < 0 || v > idx) {
|
|
21830
21841
|
return { note: `The validator asked to send this back to "${asked}", which is not a step before this one.` };
|
|
21831
21842
|
}
|
|
21832
|
-
|
|
21833
|
-
const allowed = cfgIdx >= 0 ? `only ${label(cfgIdx)} is` : "no step is (see `on_reject.send_back_to`)";
|
|
21834
|
-
return {
|
|
21835
|
-
note: `The validator suggests sending this back to ${label(v)}; ${allowed} sent back automatically. Send it back by hand if you agree.`
|
|
21836
|
-
};
|
|
21837
|
-
}
|
|
21838
|
-
return { targetIdx: v, source: "verdict" };
|
|
21843
|
+
return { targetIdx: v, source: v === cfgIdx ? "verdict" : "handoff" };
|
|
21839
21844
|
}
|
|
21840
21845
|
function retryAutoReview(args) {
|
|
21841
21846
|
const { pipeline } = args;
|
|
@@ -21882,7 +21887,7 @@ ${route.note}` : verdict.reason;
|
|
|
21882
21887
|
}
|
|
21883
21888
|
const next = clone(state);
|
|
21884
21889
|
delete next.sendBacks;
|
|
21885
|
-
return advance(next, idx, pipeline);
|
|
21890
|
+
return advance(next, idx, pipeline, args.auto);
|
|
21886
21891
|
}
|
|
21887
21892
|
function rejectStep3(args) {
|
|
21888
21893
|
const { state, reason, targetIdx, pipeline } = args;
|
|
@@ -21988,6 +21993,29 @@ ${route.note}` : verdict.reason;
|
|
|
21988
21993
|
next.steps[stepIdx] = { ...target, chosenModel: model };
|
|
21989
21994
|
return next;
|
|
21990
21995
|
}
|
|
21996
|
+
function recordLaunchFeedback(args) {
|
|
21997
|
+
const { state, stepIdx } = args;
|
|
21998
|
+
if (!Number.isInteger(stepIdx) || stepIdx < 0 || stepIdx >= state.steps.length) {
|
|
21999
|
+
throw new PipelineRunError3(`Invalid stepIdx ${stepIdx}`);
|
|
22000
|
+
}
|
|
22001
|
+
const feedback = args.feedback.trim();
|
|
22002
|
+
const target = state.steps[stepIdx];
|
|
22003
|
+
if (!feedback || feedback === target.feedback?.trim()) {
|
|
22004
|
+
return state;
|
|
22005
|
+
}
|
|
22006
|
+
const next = clone(state);
|
|
22007
|
+
next.steps[stepIdx] = {
|
|
22008
|
+
...target,
|
|
22009
|
+
feedback,
|
|
22010
|
+
history: [...target.history ?? [], {
|
|
22011
|
+
kind: "feedback",
|
|
22012
|
+
at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
22013
|
+
revision: target.revision,
|
|
22014
|
+
feedback
|
|
22015
|
+
}]
|
|
22016
|
+
};
|
|
22017
|
+
return next;
|
|
22018
|
+
}
|
|
21991
22019
|
function requestStepUpdate2(args) {
|
|
21992
22020
|
const { state, pipeline, stepIdx, feedback } = args;
|
|
21993
22021
|
if (!Number.isInteger(stepIdx) || stepIdx < 0 || stepIdx >= state.steps.length) {
|
|
@@ -22192,7 +22220,7 @@ ${route.note}` : verdict.reason;
|
|
|
22192
22220
|
next.status = "running";
|
|
22193
22221
|
return next;
|
|
22194
22222
|
}
|
|
22195
|
-
function advance(next, idx, pipeline) {
|
|
22223
|
+
function advance(next, idx, pipeline, auto) {
|
|
22196
22224
|
const finishedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
22197
22225
|
const approved = next.steps[idx];
|
|
22198
22226
|
next.steps[idx] = {
|
|
@@ -22208,7 +22236,8 @@ ${route.note}` : verdict.reason;
|
|
|
22208
22236
|
at: finishedAt,
|
|
22209
22237
|
revision: approved.revision,
|
|
22210
22238
|
...approved.skill ? { skill: approved.skill } : {},
|
|
22211
|
-
...approved.chosenModel ? { model: approved.chosenModel } : {}
|
|
22239
|
+
...approved.chosenModel ? { model: approved.chosenModel } : {},
|
|
22240
|
+
...auto ? { auto: true } : {}
|
|
22212
22241
|
})
|
|
22213
22242
|
};
|
|
22214
22243
|
const normalized = pipeline.steps.map(WorkspaceSchema_1.normalizeStep);
|
|
@@ -22294,7 +22323,7 @@ ${route.note}` : verdict.reason;
|
|
|
22294
22323
|
const { idx, targetIdx, reason, at: now, pipeline, source } = args;
|
|
22295
22324
|
const before = clone(next);
|
|
22296
22325
|
const step = next.steps[idx];
|
|
22297
|
-
const blame = `Rejected at step ${idx + 1} (${step
|
|
22326
|
+
const blame = `Rejected at step ${idx + 1} (${(0, RunState_1.stepIdentity)(step)})${reason ? `: ${reason}` : ""}`;
|
|
22298
22327
|
const rejectedHistory = pushHistory(step.history, {
|
|
22299
22328
|
kind: "reject",
|
|
22300
22329
|
at: now,
|
|
@@ -29101,7 +29130,7 @@ var require_DefaultRunner = __commonJS({
|
|
|
29101
29130
|
if (evt.type === "assistant" && evt.message?.content) {
|
|
29102
29131
|
for (const block of evt.message.content) {
|
|
29103
29132
|
if (block.type === "text" && typeof block.text === "string") {
|
|
29104
|
-
ctx.onOutput(block.text);
|
|
29133
|
+
ctx.onOutput(block.text.replace(/\s*$/, "\n\n"));
|
|
29105
29134
|
}
|
|
29106
29135
|
}
|
|
29107
29136
|
} else if (evt.type === "result") {
|
|
@@ -32339,6 +32368,7 @@ var require_execEngine = __commonJS({
|
|
|
32339
32368
|
};
|
|
32340
32369
|
}();
|
|
32341
32370
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
32371
|
+
exports2.stepLabel = stepLabel3;
|
|
32342
32372
|
exports2.runExecLoop = runExecLoop2;
|
|
32343
32373
|
var path17 = __importStar(require("path"));
|
|
32344
32374
|
var WorkspaceLoader_1 = require_WorkspaceLoader();
|
|
@@ -32366,6 +32396,9 @@ var require_execEngine = __commonJS({
|
|
|
32366
32396
|
var promptComposer_1 = require_promptComposer();
|
|
32367
32397
|
var projectInstructions_1 = require_projectInstructions();
|
|
32368
32398
|
var types_1 = require_types();
|
|
32399
|
+
function stepLabel3(s) {
|
|
32400
|
+
return s.name ?? s.agent;
|
|
32401
|
+
}
|
|
32369
32402
|
function loadPipelineForRun(root, state) {
|
|
32370
32403
|
try {
|
|
32371
32404
|
const ws = WorkspaceLoader_1.WorkspaceLoader.load(root);
|
|
@@ -32441,6 +32474,9 @@ var require_execEngine = __commonJS({
|
|
|
32441
32474
|
if (!proceed) {
|
|
32442
32475
|
return { kind: "error" };
|
|
32443
32476
|
}
|
|
32477
|
+
if (proceed === "handoff") {
|
|
32478
|
+
return { kind: "attended" };
|
|
32479
|
+
}
|
|
32444
32480
|
continue;
|
|
32445
32481
|
}
|
|
32446
32482
|
if (step.status === "awaiting_review") {
|
|
@@ -32448,7 +32484,7 @@ var require_execEngine = __commonJS({
|
|
|
32448
32484
|
await autoApproveStep(root, state, hooks);
|
|
32449
32485
|
continue;
|
|
32450
32486
|
}
|
|
32451
|
-
hooks.onAwaitingReview?.({ agent: step.agent, runId });
|
|
32487
|
+
hooks.onAwaitingReview?.({ agent: step.agent, label: stepLabel3(step), runId });
|
|
32452
32488
|
return { kind: "awaiting_review" };
|
|
32453
32489
|
}
|
|
32454
32490
|
if (step.status === "rejected") {
|
|
@@ -32458,25 +32494,26 @@ var require_execEngine = __commonJS({
|
|
|
32458
32494
|
hooks.onStepSkipped?.({
|
|
32459
32495
|
stepIdx: state.currentStepIdx,
|
|
32460
32496
|
agent: step.agent,
|
|
32497
|
+
label: stepLabel3(step),
|
|
32461
32498
|
reason: step.rejectReason ?? step.autoReviewVerdict?.reason ?? "rejected",
|
|
32462
32499
|
nextStepIdx: openElsewhere,
|
|
32463
32500
|
runId
|
|
32464
32501
|
});
|
|
32465
|
-
|
|
32502
|
+
persist(root, { ...state, currentStepIdx: openElsewhere });
|
|
32466
32503
|
continue;
|
|
32467
32504
|
}
|
|
32468
|
-
hooks.onRejected?.({ agent: step.agent, runId });
|
|
32505
|
+
hooks.onRejected?.({ agent: step.agent, label: stepLabel3(step), runId });
|
|
32469
32506
|
return { kind: "rejected" };
|
|
32470
32507
|
}
|
|
32471
32508
|
if (step.status === "approved") {
|
|
32472
32509
|
const openElsewhere = state.steps.findIndex((s) => (0, runProgress_1.isActiveStatus)(s.status));
|
|
32473
32510
|
if (openElsewhere >= 0) {
|
|
32474
|
-
|
|
32511
|
+
persist(root, { ...state, currentStepIdx: openElsewhere });
|
|
32475
32512
|
continue;
|
|
32476
32513
|
}
|
|
32477
32514
|
const parked = state.steps.find((s) => s.status === "rejected");
|
|
32478
32515
|
if (parked) {
|
|
32479
|
-
hooks.onRejected?.({ agent: parked.agent, runId });
|
|
32516
|
+
hooks.onRejected?.({ agent: parked.agent, label: stepLabel3(parked), runId });
|
|
32480
32517
|
return { kind: "rejected" };
|
|
32481
32518
|
}
|
|
32482
32519
|
}
|
|
@@ -32484,6 +32521,10 @@ var require_execEngine = __commonJS({
|
|
|
32484
32521
|
hooks.onRunFailed?.(`Unexpected step status "${step.status}" \u2014 cannot exec.`);
|
|
32485
32522
|
return { kind: "error" };
|
|
32486
32523
|
}
|
|
32524
|
+
if (!opts.dryRun && initialPipeline.steps[state.currentStepIdx] && (0, WorkspaceSchema_1.normalizeStep)(initialPipeline.steps[state.currentStepIdx]).attended) {
|
|
32525
|
+
hooks.onAttendedStep?.({ stepIdx: state.currentStepIdx, agent: step.agent, label: stepLabel3(step), runId });
|
|
32526
|
+
return { kind: "attended" };
|
|
32527
|
+
}
|
|
32487
32528
|
const ran = await execStep(root, state, runId, opts, hooks);
|
|
32488
32529
|
if (ran === "failed") {
|
|
32489
32530
|
return { kind: "error" };
|
|
@@ -32510,6 +32551,7 @@ var require_execEngine = __commonJS({
|
|
|
32510
32551
|
hooks.onStalled?.({
|
|
32511
32552
|
stepIdx: idx,
|
|
32512
32553
|
agent: step.agent,
|
|
32554
|
+
label: stepLabel3(step),
|
|
32513
32555
|
revision: step.revision,
|
|
32514
32556
|
runId,
|
|
32515
32557
|
reason: `"${step.agent}" ran ${n} batch${n === 1 ? "" : "es"} (\`max_batches: ${cfg.max}\`) and still says \`Status: continue\`. Read its progress before letting it carry on: running exec again allows ${cfg.max} more.`
|
|
@@ -32520,6 +32562,7 @@ var require_execEngine = __commonJS({
|
|
|
32520
32562
|
hooks.onBatchPause?.({
|
|
32521
32563
|
stepIdx: idx,
|
|
32522
32564
|
agent: step.agent,
|
|
32565
|
+
label: stepLabel3(step),
|
|
32523
32566
|
batch: batchNo,
|
|
32524
32567
|
runId,
|
|
32525
32568
|
report: batchReport(initialPipeline, after ?? state, idx) ?? ""
|
|
@@ -32605,17 +32648,17 @@ var require_execEngine = __commonJS({
|
|
|
32605
32648
|
try {
|
|
32606
32649
|
ws = WorkspaceLoader_1.WorkspaceLoader.load(root);
|
|
32607
32650
|
} catch (err) {
|
|
32608
|
-
hooks.onStepFailed?.({ stepIdx, agent: agentId, message: `Failed to load workspace: ${errMsg(err)}` });
|
|
32651
|
+
hooks.onStepFailed?.({ stepIdx, agent: agentId, label: stepLabel3(stepRec), message: `Failed to load workspace: ${errMsg(err)}` });
|
|
32609
32652
|
return "failed";
|
|
32610
32653
|
}
|
|
32611
32654
|
const pipeline = ws.config.pipelines.find((p) => p.id === state.pipelineId);
|
|
32612
32655
|
if (!pipeline) {
|
|
32613
|
-
hooks.onStepFailed?.({ stepIdx, agent: agentId, message: `Pipeline "${state.pipelineId}" not found in workspace.yaml.` });
|
|
32656
|
+
hooks.onStepFailed?.({ stepIdx, agent: agentId, label: stepLabel3(stepRec), message: `Pipeline "${state.pipelineId}" not found in workspace.yaml.` });
|
|
32614
32657
|
return "failed";
|
|
32615
32658
|
}
|
|
32616
32659
|
const agent = ws.config.agents.find((a) => a.id === agentId);
|
|
32617
32660
|
if (!agent) {
|
|
32618
|
-
hooks.onStepFailed?.({ stepIdx, agent: agentId, message: `Agent "${agentId}" not found in workspace.yaml.` });
|
|
32661
|
+
hooks.onStepFailed?.({ stepIdx, agent: agentId, label: stepLabel3(stepRec), message: `Agent "${agentId}" not found in workspace.yaml.` });
|
|
32619
32662
|
return "failed";
|
|
32620
32663
|
}
|
|
32621
32664
|
const stepCfg = pipeline.steps[stepIdx];
|
|
@@ -32630,13 +32673,13 @@ var require_execEngine = __commonJS({
|
|
|
32630
32673
|
try {
|
|
32631
32674
|
runner = ws.runners.resolve(agent);
|
|
32632
32675
|
} catch (err) {
|
|
32633
|
-
hooks.onStepFailed?.({ stepIdx, agent: agentId, message: `Failed to resolve runner for agent "${agentId}": ${errMsg(err)}` });
|
|
32676
|
+
hooks.onStepFailed?.({ stepIdx, agent: agentId, label: stepLabel3(stepRec), message: `Failed to resolve runner for agent "${agentId}": ${errMsg(err)}` });
|
|
32634
32677
|
return "failed";
|
|
32635
32678
|
}
|
|
32636
32679
|
try {
|
|
32637
32680
|
prompt2 = buildStepPrompt(ws, agent, skillIds, runner, root, state.runId, stepRec, stepIdx);
|
|
32638
32681
|
} catch (err) {
|
|
32639
|
-
hooks.onStepFailed?.({ stepIdx, agent: agentId, message: `Failed to load skills for agent "${agentId}": ${errMsg(err)}` });
|
|
32682
|
+
hooks.onStepFailed?.({ stepIdx, agent: agentId, label: stepLabel3(stepRec), message: `Failed to load skills for agent "${agentId}": ${errMsg(err)}` });
|
|
32640
32683
|
return "failed";
|
|
32641
32684
|
}
|
|
32642
32685
|
const skillText = prompt2.text;
|
|
@@ -32656,6 +32699,7 @@ About these inputs: ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}` :
|
|
|
32656
32699
|
hooks.onStepFailed?.({
|
|
32657
32700
|
stepIdx,
|
|
32658
32701
|
agent: agentId,
|
|
32702
|
+
label: stepLabel3(stepRec),
|
|
32659
32703
|
message: `Step "${agentId}" has \`batches: true\` but no \`produces\` file to write its \`Status:\` line in.`
|
|
32660
32704
|
});
|
|
32661
32705
|
return "failed";
|
|
@@ -32676,6 +32720,7 @@ About these inputs: ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}` :
|
|
|
32676
32720
|
hooks.onStepStart?.({
|
|
32677
32721
|
stepIdx,
|
|
32678
32722
|
agent: agentId,
|
|
32723
|
+
label: stepLabel3(stepRec),
|
|
32679
32724
|
revision: stepRec.revision,
|
|
32680
32725
|
skills: skillIds,
|
|
32681
32726
|
model: agentModel,
|
|
@@ -32727,15 +32772,16 @@ About these inputs: ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}` :
|
|
|
32727
32772
|
hooks.onStepFailed?.({
|
|
32728
32773
|
stepIdx,
|
|
32729
32774
|
agent: agentId,
|
|
32775
|
+
label: stepLabel3(stepRec),
|
|
32730
32776
|
message: `Step "${agentId}" ran past its ${minutes}-minute limit (\`timeout_minutes\`) and was stopped. It is still awaiting work on revision ${stepRec.revision}; nothing was sent back. Whatever it half-wrote is still in the working tree.`
|
|
32731
32777
|
});
|
|
32732
32778
|
return "failed";
|
|
32733
32779
|
}
|
|
32734
|
-
hooks.onStepStopped?.({ stepIdx, agent: agentId, revision: stepRec.revision, runId });
|
|
32780
|
+
hooks.onStepStopped?.({ stepIdx, agent: agentId, label: stepLabel3(stepRec), revision: stepRec.revision, runId });
|
|
32735
32781
|
return "stopped";
|
|
32736
32782
|
}
|
|
32737
32783
|
if (!result || !result.success) {
|
|
32738
|
-
hooks.onStepFailed?.({ stepIdx, agent: agentId, message: `Step "${agentId}" failed (non-zero exit).` });
|
|
32784
|
+
hooks.onStepFailed?.({ stepIdx, agent: agentId, label: stepLabel3(stepRec), message: `Step "${agentId}" failed (non-zero exit).` });
|
|
32739
32785
|
return "failed";
|
|
32740
32786
|
}
|
|
32741
32787
|
const codeUnchanged = codeBefore !== null && (0, codeFingerprint_1.codeFingerprint)(root, codeExclude) === codeBefore;
|
|
@@ -32743,6 +32789,7 @@ About these inputs: ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}` :
|
|
|
32743
32789
|
hooks.onStalled?.({
|
|
32744
32790
|
stepIdx,
|
|
32745
32791
|
agent: agentId,
|
|
32792
|
+
label: stepLabel3(stepRec),
|
|
32746
32793
|
revision: stepRec.revision,
|
|
32747
32794
|
runId,
|
|
32748
32795
|
reason: `Revision ${stepRec.revision} of "${agentId}" changed no code \u2014 the working tree is what it was before it ran (its report aside). Sent back ${state.sendBacks} time${state.sendBacks === 1 ? "" : "s"}; stopping rather than have the same code reviewed again.`
|
|
@@ -32754,6 +32801,7 @@ About these inputs: ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}` :
|
|
|
32754
32801
|
hooks.onStepFailed?.({
|
|
32755
32802
|
stepIdx,
|
|
32756
32803
|
agent: agentId,
|
|
32804
|
+
label: stepLabel3(stepRec),
|
|
32757
32805
|
message: `Step "${agentId}" reported success but left its artifacts unchanged: ${stale.join(", ")}. The agent may have failed to write them. Check its output, then rerun the step.`
|
|
32758
32806
|
});
|
|
32759
32807
|
return "failed";
|
|
@@ -32764,6 +32812,7 @@ About these inputs: ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}` :
|
|
|
32764
32812
|
hooks.onStepFailed?.({
|
|
32765
32813
|
stepIdx,
|
|
32766
32814
|
agent: agentId,
|
|
32815
|
+
label: stepLabel3(stepRec),
|
|
32767
32816
|
message: `Step "${agentId}" runs in batches and its report cannot say whether it is done: ${read.error} Add the line, then run exec again.`
|
|
32768
32817
|
});
|
|
32769
32818
|
return "failed";
|
|
@@ -32773,6 +32822,7 @@ About these inputs: ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}` :
|
|
|
32773
32822
|
hooks.onStalled?.({
|
|
32774
32823
|
stepIdx,
|
|
32775
32824
|
agent: agentId,
|
|
32825
|
+
label: stepLabel3(stepRec),
|
|
32776
32826
|
revision: stepRec.revision,
|
|
32777
32827
|
runId,
|
|
32778
32828
|
reason: `Batch ${batchNo} of "${agentId}" asked for another session but changed no code \u2014 the working tree is what it was before it ran (its report aside). Stopping rather than start the same batch again.`
|
|
@@ -32782,7 +32832,7 @@ About these inputs: ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}` :
|
|
|
32782
32832
|
const fresh = RunStateStore_1.RunStateStore.load(root, runId);
|
|
32783
32833
|
const rec = fresh?.steps[stepIdx];
|
|
32784
32834
|
if (!fresh || !rec) {
|
|
32785
|
-
hooks.onStepFailed?.({ stepIdx, agent: agentId, message: `Run "${runId}" disappeared.` });
|
|
32835
|
+
hooks.onStepFailed?.({ stepIdx, agent: agentId, label: stepLabel3(stepRec), message: `Run "${runId}" disappeared.` });
|
|
32786
32836
|
return "failed";
|
|
32787
32837
|
}
|
|
32788
32838
|
recordProvenance(rec, { agent, resolvedModel, agentModel, skillIds, alternatives, modelOpts });
|
|
@@ -32798,6 +32848,7 @@ About these inputs: ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}` :
|
|
|
32798
32848
|
hooks.onBatchDone?.({
|
|
32799
32849
|
stepIdx,
|
|
32800
32850
|
agent: agentId,
|
|
32851
|
+
label: stepLabel3(stepRec),
|
|
32801
32852
|
revision: rec.revision,
|
|
32802
32853
|
batch: batchNo,
|
|
32803
32854
|
costUsd: cost,
|
|
@@ -32817,9 +32868,9 @@ About these inputs: ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}` :
|
|
|
32817
32868
|
next = (0, PipelineRunner_1.markStepDone)({ state: freshState, pipeline, workspaceRoot: root });
|
|
32818
32869
|
} catch (err) {
|
|
32819
32870
|
if (err instanceof PipelineRunner_1.PipelineRunError && err.missing?.length) {
|
|
32820
|
-
hooks.onStepFailed?.({ stepIdx, agent: agentId, missing: err.missing });
|
|
32871
|
+
hooks.onStepFailed?.({ stepIdx, agent: agentId, label: stepLabel3(stepRec), missing: err.missing });
|
|
32821
32872
|
} else {
|
|
32822
|
-
hooks.onStepFailed?.({ stepIdx, agent: agentId, message: errMsg(err) });
|
|
32873
|
+
hooks.onStepFailed?.({ stepIdx, agent: agentId, label: stepLabel3(stepRec), message: errMsg(err) });
|
|
32823
32874
|
}
|
|
32824
32875
|
return "failed";
|
|
32825
32876
|
}
|
|
@@ -32828,6 +32879,7 @@ About these inputs: ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}` :
|
|
|
32828
32879
|
hooks.onStepResult?.({
|
|
32829
32880
|
stepIdx,
|
|
32830
32881
|
agent: agentId,
|
|
32882
|
+
label: stepLabel3(stepRec),
|
|
32831
32883
|
status: doneStep.status,
|
|
32832
32884
|
costUsd: doneStep.costUsd,
|
|
32833
32885
|
costEstimated: doneStep.costEstimated,
|
|
@@ -32952,19 +33004,19 @@ About these inputs: ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}` :
|
|
|
32952
33004
|
return false;
|
|
32953
33005
|
}
|
|
32954
33006
|
const step = state.steps[state.currentStepIdx];
|
|
32955
|
-
hooks.onAutoReviewStart?.({ agent: step.agent });
|
|
33007
|
+
hooks.onAutoReviewStart?.({ agent: step.agent, label: stepLabel3(step) });
|
|
32956
33008
|
let verdict;
|
|
32957
33009
|
try {
|
|
32958
33010
|
verdict = await (0, AutoReviewer_1.runAutoReview)({ workspaceRoot: root, state, pipeline });
|
|
32959
33011
|
} catch (err) {
|
|
32960
|
-
hooks.onStepFailed?.({ stepIdx: state.currentStepIdx, agent: step.agent, message: `Auto-review could not run: ${errMsg(err)}` });
|
|
33012
|
+
hooks.onStepFailed?.({ stepIdx: state.currentStepIdx, agent: step.agent, label: stepLabel3(step), message: `Auto-review could not run: ${errMsg(err)}` });
|
|
32961
33013
|
return false;
|
|
32962
33014
|
}
|
|
32963
33015
|
let next;
|
|
32964
33016
|
try {
|
|
32965
33017
|
next = (0, PipelineRunner_1.submitAutoReviewVerdict)({ state, pipeline, verdict });
|
|
32966
33018
|
} catch (err) {
|
|
32967
|
-
hooks.onStepFailed?.({ stepIdx: state.currentStepIdx, agent: step.agent, message: errMsg(err) });
|
|
33019
|
+
hooks.onStepFailed?.({ stepIdx: state.currentStepIdx, agent: step.agent, label: stepLabel3(step), message: errMsg(err) });
|
|
32968
33020
|
return false;
|
|
32969
33021
|
}
|
|
32970
33022
|
persist(root, next, state);
|
|
@@ -32972,6 +33024,7 @@ About these inputs: ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}` :
|
|
|
32972
33024
|
const sentBack = verdict.decision === "reject" && next.currentStepIdx !== idx && next.steps[idx].status === "pending";
|
|
32973
33025
|
hooks.onAutoReviewResult?.({
|
|
32974
33026
|
agent: step.agent,
|
|
33027
|
+
label: stepLabel3(step),
|
|
32975
33028
|
decision: verdict.decision,
|
|
32976
33029
|
reason: next.steps[idx].rejectReason ?? verdict.reason,
|
|
32977
33030
|
runId,
|
|
@@ -32979,12 +33032,19 @@ About these inputs: ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}` :
|
|
|
32979
33032
|
sentBackTo: {
|
|
32980
33033
|
stepIdx: next.currentStepIdx,
|
|
32981
33034
|
agent: next.steps[next.currentStepIdx].agent,
|
|
33035
|
+
label: stepLabel3(next.steps[next.currentStepIdx]),
|
|
32982
33036
|
revision: next.steps[next.currentStepIdx].revision,
|
|
32983
33037
|
count: next.sendBacks ?? 0,
|
|
32984
33038
|
max: pipeline.max_send_backs ?? WorkspaceSchema_1.DEFAULT_MAX_SEND_BACKS
|
|
32985
33039
|
}
|
|
32986
33040
|
} : {}
|
|
32987
33041
|
});
|
|
33042
|
+
const last = next.steps[idx].history?.at(-1);
|
|
33043
|
+
if (sentBack && last?.kind === "reject" && last.source === "handoff") {
|
|
33044
|
+
const target = next.steps[next.currentStepIdx];
|
|
33045
|
+
hooks.onAttendedStep?.({ stepIdx: next.currentStepIdx, agent: target.agent, label: stepLabel3(target), runId });
|
|
33046
|
+
return "handoff";
|
|
33047
|
+
}
|
|
32988
33048
|
return true;
|
|
32989
33049
|
}
|
|
32990
33050
|
function isAutoSendBackTarget(state, stepIdx) {
|
|
@@ -33004,15 +33064,12 @@ About these inputs: ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}` :
|
|
|
33004
33064
|
async function autoApproveStep(root, state, hooks) {
|
|
33005
33065
|
const ws = WorkspaceLoader_1.WorkspaceLoader.load(root);
|
|
33006
33066
|
const pipeline = ws.config.pipelines.find((p) => p.id === state.pipelineId);
|
|
33007
|
-
const next = { ...(0, PipelineRunner_1.approveStep)({ state, pipeline }), sendBacks: state.sendBacks };
|
|
33067
|
+
const next = { ...(0, PipelineRunner_1.approveStep)({ state, pipeline, auto: true }), sendBacks: state.sendBacks };
|
|
33008
33068
|
persist(root, next, state);
|
|
33009
|
-
hooks.onAutoApproved?.({ agent: state.steps[state.currentStepIdx].agent });
|
|
33069
|
+
hooks.onAutoApproved?.({ agent: state.steps[state.currentStepIdx].agent, label: stepLabel3(state.steps[state.currentStepIdx]) });
|
|
33010
33070
|
}
|
|
33011
33071
|
function persist(root, next, before) {
|
|
33012
33072
|
RunStateStore_1.RunStateStore.save(root, next);
|
|
33013
|
-
if (!before) {
|
|
33014
|
-
return;
|
|
33015
|
-
}
|
|
33016
33073
|
let doc;
|
|
33017
33074
|
try {
|
|
33018
33075
|
doc = WorkspaceLoader_1.WorkspaceLoader.load(root).config;
|
|
@@ -33020,13 +33077,13 @@ About these inputs: ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}` :
|
|
|
33020
33077
|
return;
|
|
33021
33078
|
}
|
|
33022
33079
|
const cfgDoc = doc;
|
|
33023
|
-
if ((0, EpicArtifactCommit_1.resolveArtifactCommitConfig)(cfgDoc).mode !== "on_approve") {
|
|
33024
|
-
return;
|
|
33025
|
-
}
|
|
33026
33080
|
try {
|
|
33027
33081
|
(0, EpicScaffold_1.mirrorRunStateToEpic)(root, next, cfgDoc);
|
|
33028
33082
|
} catch {
|
|
33029
33083
|
}
|
|
33084
|
+
if (!before || (0, EpicArtifactCommit_1.resolveArtifactCommitConfig)(cfgDoc).mode !== "on_approve") {
|
|
33085
|
+
return;
|
|
33086
|
+
}
|
|
33030
33087
|
(0, EpicArtifactCommit_1.commitApprovedArtifacts)({ workspaceRoot: root, before, after: next, doc: cfgDoc });
|
|
33031
33088
|
}
|
|
33032
33089
|
function errMsg(err) {
|
|
@@ -33176,11 +33233,13 @@ var require_runReport = __commonJS({
|
|
|
33176
33233
|
case "auto_review":
|
|
33177
33234
|
return ` - \u{1F916} auto-review ${h.decision} (rev ${h.revision}): ${h.reason}`;
|
|
33178
33235
|
case "approve":
|
|
33179
|
-
return ` - \u2714 approved (rev ${h.revision}${h.skill ? `, ${h.skill}` : ""}${h.model ? `, ${h.model}` : ""})`;
|
|
33236
|
+
return ` - \u2714 ${h.auto ? "auto-approved" : "approved"} (rev ${h.revision}${h.skill ? `, ${h.skill}` : ""}${h.model ? `, ${h.model}` : ""})`;
|
|
33180
33237
|
case "undo":
|
|
33181
33238
|
return ` - \u21B6 mark-done undone (rev ${h.revision}, was ${h.from})`;
|
|
33182
33239
|
case "interrupted":
|
|
33183
33240
|
return h.why === "timeout" ? ` - \u23F1 stopped after ${h.minutes ?? "?"} min (timeout_minutes, rev ${h.revision})` : ` - \u23F9 stopped mid-step (rev ${h.revision})`;
|
|
33241
|
+
case "feedback":
|
|
33242
|
+
return ` - \u270E launched with feedback (rev ${h.revision}): ${h.feedback}`;
|
|
33184
33243
|
case "batch":
|
|
33185
33244
|
return ` - \u21BB batch ${h.batch} done, more to come (rev ${h.revision}${typeof h.costUsd === "number" ? `, $${h.costUsd.toFixed(4)}` : ""})`;
|
|
33186
33245
|
default:
|
|
@@ -33227,7 +33286,7 @@ var require_runReport = __commonJS({
|
|
|
33227
33286
|
lines.push("| # | Step | Status | Rev | Engine | Duration | Cost |");
|
|
33228
33287
|
lines.push("|---|------|--------|-----|--------|----------|------|");
|
|
33229
33288
|
for (const step of state.steps) {
|
|
33230
|
-
const label =
|
|
33289
|
+
const label = stepLabel3(step, pipeline);
|
|
33231
33290
|
lines.push(`| ${step.stepIdx} | ${cell(label)} | ${step.status} | ${step.revision} | ${cell(formatEngine(step))} | ${formatDuration(step.startedAt, step.finishedAt)} | ${formatCost(step)} |`);
|
|
33232
33291
|
}
|
|
33233
33292
|
const detailed = state.steps.filter((s) => s.rejectReason || s.feedback || s.autoReviewVerdict || s.history && s.history.length > 0);
|
|
@@ -33236,7 +33295,7 @@ var require_runReport = __commonJS({
|
|
|
33236
33295
|
lines.push("## Step details");
|
|
33237
33296
|
for (const step of detailed) {
|
|
33238
33297
|
lines.push("");
|
|
33239
|
-
lines.push(`### Step ${step.stepIdx}: ${
|
|
33298
|
+
lines.push(`### Step ${step.stepIdx}: ${stepLabel3(step, pipeline)}`);
|
|
33240
33299
|
if (step.feedback) {
|
|
33241
33300
|
lines.push(`- **Feedback:** ${step.feedback}`);
|
|
33242
33301
|
}
|
|
@@ -33255,7 +33314,7 @@ var require_runReport = __commonJS({
|
|
|
33255
33314
|
lines.push("");
|
|
33256
33315
|
return lines.join("\n");
|
|
33257
33316
|
}
|
|
33258
|
-
function
|
|
33317
|
+
function stepLabel3(step, pipeline) {
|
|
33259
33318
|
const cfg = pipeline?.steps?.[step.stepIdx];
|
|
33260
33319
|
if (cfg && typeof cfg === "object" && typeof cfg.name === "string") {
|
|
33261
33320
|
return cfg.name;
|
|
@@ -35403,10 +35462,10 @@ var require_dist = __commonJS({
|
|
|
35403
35462
|
exports2.generatePlan = exports2.collectContext = exports2.followUpHookFailures = exports2.pendingFollowUpDone = exports2.applyFollowUpHookRun = exports2.trackFollowUpChildren = exports2.writeFollowUpHookLedger = exports2.readFollowUpHookLedger = exports2.followUpHookLedgerPath = exports2.runFollowUpHook = exports2.fillFollowUpHookCommand = exports2.resolveFollowUpHooks = exports2.epicPipelineId = exports2.FOLLOW_UP_HOOK_TIMEOUT_MS = exports2.FOLLOW_UP_HOOKS_LEDGER = exports2.stepProducesFollowUps = exports2.collectFollowUpHookIssues = exports2.FOLLOW_UP_HOOK_PLACEHOLDERS = exports2.FOLLOW_UP_HOOK_KEYS = exports2.FOLLOW_UP_INTENT = exports2.FOLLOW_UPS_FILE = exports2.MANUAL_FOLLOW_UP_KEY_PREFIX = exports2.followUpDefaults = exports2.nextManualFollowUpKey = exports2.withFollowUpProvenance = exports2.openManifestFollowUp = exports2.combinedParentId = exports2.followUpChildId = exports2.followUpsOf = exports2.readEpicFollowUps = exports2.parseFollowUps = exports2.FollowUpsParseError = exports2.FollowUpManifestSchema = exports2.FollowUpItemSchema = exports2.SIGNAL_FILE = exports2.FOLLOW_UP_ARTIFACT = exports2.readEpicSignal = exports2.existingEpicIds = exports2.followUpIdFor = exports2.followUpEpicId = exports2.renderIntentMarkdown = exports2.openFollowUpEpic = exports2.openIncidentEpic = exports2.SignalParseError = exports2.isSignal = exports2.parseSignal = exports2.SignalSchema = exports2.EpicStepEditError = exports2.resolveStepRef = exports2.describeGateEffect = void 0;
|
|
35404
35463
|
exports2.readUserConfig = exports2.readGitUserName = exports2.ensureUserConfigIgnored = exports2.USER_CONFIG_RELPATH = exports2.USER_CONFIG_IGNORE_LINE = exports2.suggestEpicId = exports2.resolveEpicIdPrefixChain = exports2.resolveEpicIdPrefix = exports2.epicIdDateStamp = exports2.deriveEpicIdPrefix = exports2.EPIC_ID_PREFIX_PATTERN = exports2.EPIC_ID_PREFIX_KEY = exports2.resolveArtifactLanguage = exports2.commandBodyPredatesArtifactLanguage = exports2.artifactLanguageSection = exports2.ARTIFACT_LANGUAGE_HEADING = exports2.stripPersonaDirectives = exports2.composeAgentPrompt = exports2.PROJECT_INSTRUCTION_FILES = exports2.findProjectInstructions = exports2.stripPersonaMetadata = exports2.PersonaLoader = exports2.SkillNotFoundError = exports2.SkillLoader = exports2.EnvVarMissingError = exports2.EnvResolver = exports2.epicPipelineReport = exports2.planEpicPipelineExtraction = exports2.epicOwningPipeline = exports2.unstageEpicPipeline = exports2.stageEpicPipeline = exports2.writeEpicPipelines = exports2.splitEpicPipelines = exports2.mergeEpicPipelines = exports2.epicPipelinePath = exports2.EPIC_PIPELINE_FILENAME = exports2.unusedAfterStepRemoval = exports2.skillReferences = exports2.agentReferences = exports2.renameSkillRefs = exports2.renameAgentRefs = exports2.dropRecipesForPipeline = exports2.dropRecipeStep = exports2.recipesDrawingFrom = exports2.WORKSPACE_DIR = exports2.WORKSPACE_FILENAME = exports2.WorkspaceParseError = exports2.WorkspaceNotFoundError = exports2.WorkspaceLoader = exports2.renderPlanMarkdown = void 0;
|
|
35405
35464
|
exports2.hasEmptyCiChecks = exports2.findApprovalGate = exports2.autopilotPreflight = exports2.STOP_GRACE_MS = exports2.stopProcessTree = exports2.stopOnAbort = exports2.processGroupSpawnOptions = exports2.claudeModelArg = exports2.DefaultRunner = exports2.RunnerRegistry = exports2.targetPath = exports2.scopePaths = exports2.discoverAssets = exports2.commandBodyIsStale = exports2.readEpicTags = exports2.normalizeTags = exports2.normalizeTag = exports2.epicMatchesTags = exports2.applyTagEdit = exports2.MAX_TAG_LENGTH = exports2.EPIC_TAGS_KEY = exports2.inheritedContextNote = exports2.INHERITED_CONTEXT_MARKER = exports2.strictModeSection = exports2.resolveEpicStrictMode = exports2.epicStrictMode = exports2.commandBodyPredatesStrictMode = exports2.STRICT_MODE_KEY = exports2.STRICT_MODE_HEADING = exports2.setEpicWatched = exports2.setEpicListFlat = exports2.setEpicSort = exports2.setActiveEpic = exports2.recordEpicOpened = exports2.readEpicListFlat = exports2.readEpicSort = exports2.readEpicFocus = exports2.pushRecent = exports2.epicSortFrom = exports2.epicIdFromBranch = exports2.epicFocusFrom = exports2.WATCHED_EPICS_KEY = exports2.RECENT_EPICS_LIMIT = exports2.RECENT_EPICS_KEY = exports2.EPIC_LIST_FLAT_KEY = exports2.EPIC_SORT_KEY = exports2.ACTIVE_EPIC_KEY = exports2.writeUserEpicIdPrefix = exports2.userConfigPath = exports2.updateUserConfig = void 0;
|
|
35406
|
-
exports2.
|
|
35407
|
-
exports2.
|
|
35408
|
-
exports2.
|
|
35409
|
-
exports2.AIDLC_CORE_VERSION = exports2.AIDLC_CLI_GUIDE_TEXT = exports2.AIDLC_KNOWLEDGE = exports2.clearResolveCommandCache = exports2.resolveCommand = exports2.remapClaudePath = exports2.claudeConfigEnv = exports2.claudeJsonPath = exports2.isDefaultClaudeConfigDir = exports2.claudeConfigDir = exports2.resolveClaudeConfigDir = void 0;
|
|
35465
|
+
exports2.isRunComplete = exports2.deriveRunProgress = exports2.PipelineRunError = exports2.retryAutoReview = exports2.submitAutoReviewVerdict = exports2.dirtyUpstreamOf = exports2.rerunApprovedStep = exports2.canRerunApprovedStep = exports2.recordLaunchFeedback = exports2.chooseStepModel = exports2.chooseStepSkill = exports2.requestStepUpdate = exports2.rerunStep = exports2.rejectStep = exports2.approveStep = exports2.undoStepDone = exports2.canUndoStepDone = exports2.markStepDone = exports2.canStartStep = exports2.startRun = exports2.activateBackendFromWorkspace = exports2.activateRunStateBackend = exports2.resolveRunStateBackend = exports2.GitRunStateStore = exports2.RUN_ID_PATTERN = exports2.FileRunStateStore = exports2.RunStateStore = exports2.harnessCapabilities = exports2.NO_HARNESS_CAPABILITIES = exports2.RunnerValidationError = exports2.validateRunnerExport = exports2.CustomRunnerLoader = exports2.buildClaudeSpawnEnv = exports2.hasClaudeLogin = exports2.isInsideClaudeCodeSession = exports2.createJsonSink = exports2.createLineSink = exports2.isCodexMcpConfigured = exports2.codexConfigPath = exports2.readProjectMcpServer = exports2.mcpRegistrarFor = exports2.codexMcpRegistrar = exports2.claudeMcpRegistrar = exports2.copilotMcpConfig = exports2.copilotGraphServer = exports2.CopilotRunner = exports2.CodexRunner = exports2.AUTOPILOT_ENV = exports2.APPROVAL_GATE_SCRIPT = exports2.emptyCiChecksMessage = void 0;
|
|
35466
|
+
exports2.FAST_MODEL = exports2.CODING_MODEL = exports2.PLANNING_MODEL = exports2.isBuiltinPreset = exports2.BUILTIN_PRESET_IDS = exports2.writeBuiltinAutoReviewValidators = exports2.resolvePrimaryStack = exports2.getSdlcArtifactTemplates = exports2.getBuiltinArtifactTemplates = exports2.phaseArtifactFileName = exports2.sdlcClaudeCommand = exports2.builtinClaudeCommand = exports2.loadAllBuiltinPresets = exports2.loadBuiltinPreset = exports2.planRecipeMigration = exports2.getBuiltinRecipeSummaries = exports2.getAllBuiltinPipelineSummaries = exports2.getSdlcBuiltinPipelineSummary = exports2.getBuiltinPipelineSummary = exports2.getBuiltinWorkflowByPipelineId = exports2.getBuiltinWorkflow = exports2.workflowSlug = exports2.builtinTemplatesRoot = exports2.pipelineCommandId = exports2.PHASES = exports2.BUILTIN_WORKFLOWS = exports2.withBackfilledStepNames = exports2.describeDrift = exports2.reconcileRunSteps = exports2.RUN_STATE_SCHEMA_VERSION = exports2.migrateRunState = exports2.stepIdentity = exports2.resolvePath = exports2.AutoReviewerError = exports2.runAutoReview = exports2.renderRunReport = exports2.verifyRun = exports2.stepLabel = exports2.runExecLoop = exports2.estimateCostUsd = exports2.providerAliases = exports2.ratesFromConfig = exports2.mergeRates = exports2.BUILTIN_RATES = exports2.unchangedProduces = exports2.snapshotProduces = exports2.checkBudget = exports2.weighStepProgress = exports2.isActiveStatus = exports2.isStepOptional = void 0;
|
|
35467
|
+
exports2.setClaudeConfigDir = exports2.resolveDeclaredPath = exports2.expandHome = exports2.ProfileLoadError = exports2.UnknownStandardError = exports2.builtinProfiles = exports2.loadActiveProfile = exports2.loadProfile = exports2.listProfileManifests = exports2.resolveStandard = exports2.workspaceStandard = exports2.isBuiltinProfileId = exports2.ProfileSchema = exports2.TRACE_RULES = exports2.PROFILES_DIR = exports2.DEFAULT_PROFILE_ID = exports2.BUILTIN_PROFILE_IDS = exports2.setEpicMemoryHook = exports2.isEpicMemoryHookEnabled = exports2.installAnnotationTools = exports2.relativeEpicRoot = exports2.provisionDeclaredWorkflows = exports2.provisionWorkflowFiles = exports2.writeWorkflowArtifactTemplates = exports2.writeWorkflowCommands = exports2.provisionShortcutDocs = exports2.writeTwoLayerCommands = exports2.shortcutCommandDoc = exports2.backboneCommandDoc = exports2.unprovisionedPhases = exports2.nextEligiblePhase = exports2.resolveComposition = exports2.shortcutCommandId = exports2.getCanonicalPhase = exports2.isCanonicalPhase = exports2.BACKBONE_COMMAND_ID = exports2.CANONICAL_PHASE_IDS = exports2.CANONICAL_PHASES = exports2.renderTemplate = exports2.DEFAULT_GLOBAL_WORKFLOW_IDS = exports2.detectGlobalBuiltinSource = exports2.uninstallWorkflowGlobalsByIds = exports2.isWorkflowGloballyInstalled = exports2.installWorkflowGlobalsByIds = exports2.installGlobalDefaults = exports2.stepModelOptions = exports2.pickAgentModel = exports2.resolveProviderModel = exports2.isClaudeTierAlias = exports2.CLAUDE_TIER_ALIASES = void 0;
|
|
35468
|
+
exports2.AIDLC_CORE_VERSION = exports2.AIDLC_CLI_GUIDE_TEXT = exports2.AIDLC_KNOWLEDGE = exports2.clearResolveCommandCache = exports2.resolveCommand = exports2.remapClaudePath = exports2.claudeConfigEnv = exports2.claudeJsonPath = exports2.isDefaultClaudeConfigDir = exports2.claudeConfigDir = exports2.resolveClaudeConfigDir = exports2.defaultClaudeConfigDir = exports2.getClaudeConfigDirOverride = void 0;
|
|
35410
35469
|
var WorkspaceSchema_1 = require_WorkspaceSchema();
|
|
35411
35470
|
Object.defineProperty(exports2, "WorkspaceSchema", { enumerable: true, get: function() {
|
|
35412
35471
|
return WorkspaceSchema_1.WorkspaceSchema;
|
|
@@ -36179,6 +36238,9 @@ var require_dist = __commonJS({
|
|
|
36179
36238
|
Object.defineProperty(exports2, "chooseStepModel", { enumerable: true, get: function() {
|
|
36180
36239
|
return PipelineRunner_1.chooseStepModel;
|
|
36181
36240
|
} });
|
|
36241
|
+
Object.defineProperty(exports2, "recordLaunchFeedback", { enumerable: true, get: function() {
|
|
36242
|
+
return PipelineRunner_1.recordLaunchFeedback;
|
|
36243
|
+
} });
|
|
36182
36244
|
Object.defineProperty(exports2, "canRerunApprovedStep", { enumerable: true, get: function() {
|
|
36183
36245
|
return PipelineRunner_1.canRerunApprovedStep;
|
|
36184
36246
|
} });
|
|
@@ -36244,6 +36306,9 @@ var require_dist = __commonJS({
|
|
|
36244
36306
|
Object.defineProperty(exports2, "runExecLoop", { enumerable: true, get: function() {
|
|
36245
36307
|
return execEngine_1.runExecLoop;
|
|
36246
36308
|
} });
|
|
36309
|
+
Object.defineProperty(exports2, "stepLabel", { enumerable: true, get: function() {
|
|
36310
|
+
return execEngine_1.stepLabel;
|
|
36311
|
+
} });
|
|
36247
36312
|
var verifyRun_1 = require_verifyRun();
|
|
36248
36313
|
Object.defineProperty(exports2, "verifyRun", { enumerable: true, get: function() {
|
|
36249
36314
|
return verifyRun_1.verifyRun;
|
|
@@ -45228,7 +45293,7 @@ var require_package = __commonJS({
|
|
|
45228
45293
|
"package.json"(exports2, module2) {
|
|
45229
45294
|
module2.exports = {
|
|
45230
45295
|
name: "@delete101020/aidlc",
|
|
45231
|
-
version: "4.0.
|
|
45296
|
+
version: "4.0.45",
|
|
45232
45297
|
description: "AIDLC Native CLI, a fork of AIDLC \u2014 drive Claude through the six-stage AI-Native SDLC Playbook: Plan \u2192 Design \u2192 Build \u2192 Test \u2192 Deploy \u2192 Maintain, with artifact gates, requirements traceability, an incident loop back to Plan, and Spec Kit support.",
|
|
45233
45298
|
license: "MIT",
|
|
45234
45299
|
repository: {
|
|
@@ -49034,7 +49099,7 @@ ${import_chalk5.default.bold(state.runId)} ${runColor(state.status)}`);
|
|
|
49034
49099
|
const isCurrent = i === state.currentStepIdx && state.status === "running";
|
|
49035
49100
|
const marker = isCurrent ? import_chalk5.default.yellow("\u25B6") : " ";
|
|
49036
49101
|
const idxLabel = import_chalk5.default.dim(`${i}.`);
|
|
49037
|
-
const agent = isCurrent ? import_chalk5.default.bold(
|
|
49102
|
+
const agent = isCurrent ? import_chalk5.default.bold((0, import_core7.stepLabel)(step)) : import_chalk5.default.dim((0, import_core7.stepLabel)(step));
|
|
49038
49103
|
const status = colorStatus(step.status);
|
|
49039
49104
|
const rev = step.revision > 1 ? import_chalk5.default.dim(` rev${step.revision}`) : "";
|
|
49040
49105
|
const feedback = step.feedback ? import_chalk5.default.dim(` [feedback: ${step.feedback.slice(0, 40)}]`) : "";
|
|
@@ -50057,7 +50122,7 @@ function registerRun(program3) {
|
|
|
50057
50122
|
printRunSummary(state);
|
|
50058
50123
|
const first = state.steps[0];
|
|
50059
50124
|
if (first) {
|
|
50060
|
-
console.log(import_chalk10.default.dim(` Current step: ${import_chalk10.default.bold(
|
|
50125
|
+
console.log(import_chalk10.default.dim(` Current step: ${import_chalk10.default.bold((0, import_core13.stepLabel)(first))} \u2014 awaiting_work`));
|
|
50061
50126
|
console.log(import_chalk10.default.dim(` When done: aidlc run mark-done ${runId}`));
|
|
50062
50127
|
}
|
|
50063
50128
|
});
|
|
@@ -50094,13 +50159,13 @@ function registerRun(program3) {
|
|
|
50094
50159
|
return;
|
|
50095
50160
|
}
|
|
50096
50161
|
if (step.status === prevStatus) {
|
|
50097
|
-
console.log(import_chalk10.default.dim(`\u2022 Step "${step
|
|
50162
|
+
console.log(import_chalk10.default.dim(`\u2022 Step "${(0, import_core13.stepLabel)(step)}" is already ${step.status} \u2014 nothing to do.`));
|
|
50098
50163
|
} else if (step.status === "awaiting_review") {
|
|
50099
|
-
console.log(import_chalk10.default.cyan("\u2714") + ` Step "${step
|
|
50164
|
+
console.log(import_chalk10.default.cyan("\u2714") + ` Step "${(0, import_core13.stepLabel)(step)}" is now ${import_chalk10.default.cyan("awaiting_review")}`);
|
|
50100
50165
|
console.log(import_chalk10.default.dim(` Approve: aidlc run approve ${runId}`));
|
|
50101
50166
|
console.log(import_chalk10.default.dim(` Reject: aidlc run reject ${runId} --reason "..."`));
|
|
50102
50167
|
} else {
|
|
50103
|
-
console.log(import_chalk10.default.green("\u2714") + ` Step "${step
|
|
50168
|
+
console.log(import_chalk10.default.green("\u2714") + ` Step "${(0, import_core13.stepLabel)(step)}" approved, advancing\u2026`);
|
|
50104
50169
|
printRunSummary(next);
|
|
50105
50170
|
}
|
|
50106
50171
|
});
|
|
@@ -50120,7 +50185,7 @@ function registerRun(program3) {
|
|
|
50120
50185
|
}
|
|
50121
50186
|
saveRunState(root, next, state);
|
|
50122
50187
|
const approvedStep = state.steps[state.currentStepIdx];
|
|
50123
|
-
console.log(import_chalk10.default.green("\u2714") + ` Approved "${approvedStep
|
|
50188
|
+
console.log(import_chalk10.default.green("\u2714") + ` Approved "${(0, import_core13.stepLabel)(approvedStep)}"`);
|
|
50124
50189
|
printRunSummary(next);
|
|
50125
50190
|
if (next.status === "completed") {
|
|
50126
50191
|
console.log(import_chalk10.default.green("\u{1F389} Run completed \u2014 all steps approved."));
|
|
@@ -50138,7 +50203,7 @@ function registerRun(program3) {
|
|
|
50138
50203
|
targetIdx = requireStepIdx(state, opts.to);
|
|
50139
50204
|
if (targetIdx >= idx) {
|
|
50140
50205
|
console.error(import_chalk10.default.red(
|
|
50141
|
-
`--to must name a step before the rejected one (${idx}:${state.steps[idx]
|
|
50206
|
+
`--to must name a step before the rejected one (${idx}:${(0, import_core13.stepLabel)(state.steps[idx])}), got ${targetIdx}:${(0, import_core13.stepLabel)(state.steps[targetIdx])}.`
|
|
50142
50207
|
));
|
|
50143
50208
|
process.exit(1);
|
|
50144
50209
|
}
|
|
@@ -50154,13 +50219,13 @@ function registerRun(program3) {
|
|
|
50154
50219
|
const step = state.steps[idx];
|
|
50155
50220
|
if (targetIdx !== void 0) {
|
|
50156
50221
|
const target = next.steps[targetIdx];
|
|
50157
|
-
console.log(import_chalk10.default.red("\u2718") + ` Rejected "${step
|
|
50222
|
+
console.log(import_chalk10.default.red("\u2718") + ` Rejected "${(0, import_core13.stepLabel)(step)}" \u2014 sent back to "${(0, import_core13.stepLabel)(target)}" (rev ${target.revision})`);
|
|
50158
50223
|
console.log(import_chalk10.default.dim(` Reason: ${opts.reason}`));
|
|
50159
50224
|
console.log(import_chalk10.default.dim(` When done: aidlc run mark-done ${runId}`));
|
|
50160
50225
|
printRunSummary(next);
|
|
50161
50226
|
return;
|
|
50162
50227
|
}
|
|
50163
|
-
console.log(import_chalk10.default.red("\u2718") + ` Rejected "${step
|
|
50228
|
+
console.log(import_chalk10.default.red("\u2718") + ` Rejected "${(0, import_core13.stepLabel)(step)}"`);
|
|
50164
50229
|
console.log(import_chalk10.default.dim(` Reason: ${opts.reason}`));
|
|
50165
50230
|
console.log(import_chalk10.default.dim(` Rerun: aidlc run rerun ${runId} [--feedback "..."]`));
|
|
50166
50231
|
});
|
|
@@ -50181,7 +50246,7 @@ function registerRun(program3) {
|
|
|
50181
50246
|
}
|
|
50182
50247
|
saveRunState(root, next, state);
|
|
50183
50248
|
const step = next.steps[stepIdx ?? next.currentStepIdx];
|
|
50184
|
-
console.log(import_chalk10.default.yellow("\u21BA") + ` Rerunning "${step
|
|
50249
|
+
console.log(import_chalk10.default.yellow("\u21BA") + ` Rerunning "${(0, import_core13.stepLabel)(step)}" (rev ${step.revision})`);
|
|
50185
50250
|
if (opts.feedback) {
|
|
50186
50251
|
console.log(import_chalk10.default.dim(` Feedback: ${opts.feedback}`));
|
|
50187
50252
|
}
|
|
@@ -50204,7 +50269,7 @@ function registerRun(program3) {
|
|
|
50204
50269
|
}
|
|
50205
50270
|
saveRunState(root, next, state);
|
|
50206
50271
|
const target = next.steps[stepIdx];
|
|
50207
|
-
console.log(import_chalk10.default.yellow("\u21BB") + ` Reopened "${target
|
|
50272
|
+
console.log(import_chalk10.default.yellow("\u21BB") + ` Reopened "${(0, import_core13.stepLabel)(target)}" for update (rev ${target.revision})`);
|
|
50208
50273
|
if (opts.feedback) {
|
|
50209
50274
|
console.log(import_chalk10.default.dim(` Feedback: ${opts.feedback}`));
|
|
50210
50275
|
}
|
|
@@ -50227,7 +50292,7 @@ function registerRun(program3) {
|
|
|
50227
50292
|
}
|
|
50228
50293
|
saveRunState(root, next, state);
|
|
50229
50294
|
const target = next.steps[stepIdx];
|
|
50230
|
-
console.log(import_chalk10.default.yellow("\u21BA") + ` Rerunning "${target
|
|
50295
|
+
console.log(import_chalk10.default.yellow("\u21BA") + ` Rerunning "${(0, import_core13.stepLabel)(target)}" (rev ${target.revision})`);
|
|
50231
50296
|
if (opts.feedback) {
|
|
50232
50297
|
console.log(import_chalk10.default.dim(` Feedback: ${opts.feedback}`));
|
|
50233
50298
|
}
|
|
@@ -50235,7 +50300,7 @@ function registerRun(program3) {
|
|
|
50235
50300
|
if (marked.length > 0) {
|
|
50236
50301
|
console.log(import_chalk10.default.yellow(` \u26A0 ${marked.length} approved step(s) downstream kept and marked dirty:`));
|
|
50237
50302
|
for (const m of marked) {
|
|
50238
|
-
console.log(import_chalk10.default.dim(` ${m.stepIdx}. ${
|
|
50303
|
+
console.log(import_chalk10.default.dim(` ${m.stepIdx}. ${(0, import_core13.stepLabel)(m)}`));
|
|
50239
50304
|
}
|
|
50240
50305
|
console.log(import_chalk10.default.dim(" They still count as done. Redo each one to clear its mark."));
|
|
50241
50306
|
}
|
|
@@ -50295,7 +50360,7 @@ function registerRun(program3) {
|
|
|
50295
50360
|
console.error(import_chalk10.default.red("\u2718") + ` Drift detected in ${report.drift.length} of ${report.checked} step(s):`);
|
|
50296
50361
|
for (const d of report.drift) {
|
|
50297
50362
|
console.error(import_chalk10.default.yellow(`
|
|
50298
|
-
Step ${d.stepIdx} (${d.
|
|
50363
|
+
Step ${d.stepIdx} (${(0, import_core13.stepLabel)(state.steps[d.stepIdx] ?? d)}) \u2014 ${d.status}`));
|
|
50299
50364
|
for (const m of d.missing) {
|
|
50300
50365
|
console.error(import_chalk10.default.dim(` \u2718 missing file: ${m}`));
|
|
50301
50366
|
}
|
|
@@ -50341,7 +50406,7 @@ function execExitCode(outcome, requireComplete) {
|
|
|
50341
50406
|
if (requireComplete) {
|
|
50342
50407
|
return 1;
|
|
50343
50408
|
}
|
|
50344
|
-
if (outcome.kind === "until") {
|
|
50409
|
+
if (outcome.kind === "until" || outcome.kind === "attended") {
|
|
50345
50410
|
return 0;
|
|
50346
50411
|
}
|
|
50347
50412
|
return 2;
|
|
@@ -50406,7 +50471,7 @@ async function driveAutoReview(root, runId, state) {
|
|
|
50406
50471
|
const pipeline = requirePipelineForRun(root, state);
|
|
50407
50472
|
const step = state.steps[state.currentStepIdx];
|
|
50408
50473
|
console.log(import_chalk10.default.bold(`
|
|
50409
|
-
\u{1F50D} Auto-review: "${step
|
|
50474
|
+
\u{1F50D} Auto-review: "${(0, import_core13.stepLabel)(step)}"`));
|
|
50410
50475
|
let verdict;
|
|
50411
50476
|
try {
|
|
50412
50477
|
verdict = await (0, import_core13.runAutoReview)({ workspaceRoot: root, state, pipeline });
|
|
@@ -50432,7 +50497,7 @@ async function driveAutoReview(root, runId, state) {
|
|
|
50432
50497
|
console.log(import_chalk10.default.green("\u2714") + " Auto-review passed" + import_chalk10.default.dim(` \u2014 ${verdict.reason}`));
|
|
50433
50498
|
const after = next.steps[state.currentStepIdx];
|
|
50434
50499
|
if (after.status === "awaiting_review") {
|
|
50435
|
-
console.log(import_chalk10.default.cyan("\u2714") + ` Step "${after
|
|
50500
|
+
console.log(import_chalk10.default.cyan("\u2714") + ` Step "${(0, import_core13.stepLabel)(after)}" is now ${import_chalk10.default.cyan("awaiting_review")}`);
|
|
50436
50501
|
console.log(import_chalk10.default.dim(` Approve: aidlc run approve ${runId}`));
|
|
50437
50502
|
console.log(import_chalk10.default.dim(` Reject: aidlc run reject ${runId} --reason "..."`));
|
|
50438
50503
|
}
|
|
@@ -50448,7 +50513,7 @@ function cliExecHooks(runId, claudeOut) {
|
|
|
50448
50513
|
${reason}`)),
|
|
50449
50514
|
onStepStart: (e) => {
|
|
50450
50515
|
info(import_chalk10.default.bold(`
|
|
50451
|
-
\u25B6 Step ${e.stepIdx}: ${e.
|
|
50516
|
+
\u25B6 Step ${e.stepIdx}: ${e.label}`) + import_chalk10.default.dim(` (rev ${e.revision})`));
|
|
50452
50517
|
info(import_chalk10.default.dim(` skills: ${e.skills.join(", ")} model: ${e.model ?? import_core13.CODING_MODEL}`));
|
|
50453
50518
|
if (e.context) {
|
|
50454
50519
|
info(import_chalk10.default.dim(` context: ${e.context}`));
|
|
@@ -50464,13 +50529,13 @@ ${reason}`)),
|
|
|
50464
50529
|
sep4();
|
|
50465
50530
|
if (e.status === "awaiting_auto_review") {
|
|
50466
50531
|
info(import_chalk10.default.cyan(`
|
|
50467
|
-
\u2714 Step "${e.
|
|
50532
|
+
\u2714 Step "${e.label}" done \u2014 auto-review pending.`));
|
|
50468
50533
|
} else if (e.status === "awaiting_review") {
|
|
50469
50534
|
info(import_chalk10.default.cyan(`
|
|
50470
|
-
\u2714 Step "${e.
|
|
50535
|
+
\u2714 Step "${e.label}" done \u2014 awaiting review.`));
|
|
50471
50536
|
} else {
|
|
50472
50537
|
info(import_chalk10.default.green(`
|
|
50473
|
-
\u2714 Step "${e.
|
|
50538
|
+
\u2714 Step "${e.label}" approved.`));
|
|
50474
50539
|
}
|
|
50475
50540
|
if (typeof e.costUsd === "number") {
|
|
50476
50541
|
info(import_chalk10.default.dim(` cost: $${e.costUsd.toFixed(4)}`));
|
|
@@ -50485,24 +50550,24 @@ ${reason}`)),
|
|
|
50485
50550
|
console.error(import_chalk10.default.dim("\n Produce the files above, then: aidlc run mark-done " + runId));
|
|
50486
50551
|
} else {
|
|
50487
50552
|
console.error(import_chalk10.default.red(`
|
|
50488
|
-
\u2718 ${e.message ?? `Step "${e.
|
|
50553
|
+
\u2718 ${e.message ?? `Step "${e.label}" failed.`}`));
|
|
50489
50554
|
console.error(import_chalk10.default.dim(" Fix the issue then retry: aidlc run exec " + runId));
|
|
50490
50555
|
}
|
|
50491
50556
|
},
|
|
50492
50557
|
onAwaitingReview: (e) => {
|
|
50493
50558
|
info(import_chalk10.default.cyan(`
|
|
50494
|
-
\u23F8 Step "${e.
|
|
50559
|
+
\u23F8 Step "${e.label}" is awaiting human review.`));
|
|
50495
50560
|
info(import_chalk10.default.dim(` Approve: aidlc run approve ${e.runId}`));
|
|
50496
50561
|
info(import_chalk10.default.dim(` Reject: aidlc run reject ${e.runId} --reason "..."`));
|
|
50497
50562
|
},
|
|
50498
50563
|
onRejected: (e) => {
|
|
50499
50564
|
info(import_chalk10.default.red(`
|
|
50500
|
-
\u2718 Step "${e.
|
|
50565
|
+
\u2718 Step "${e.label}" was rejected.`));
|
|
50501
50566
|
info(import_chalk10.default.dim(` Rerun: aidlc run rerun ${e.runId} [--feedback "..."]`));
|
|
50502
50567
|
},
|
|
50503
50568
|
onStepStopped: (e) => {
|
|
50504
50569
|
info(import_chalk10.default.yellow(`
|
|
50505
|
-
\u23F9 Stopped "${e.
|
|
50570
|
+
\u23F9 Stopped "${e.label}" mid-step (rev ${e.revision}). It is still awaiting work.`));
|
|
50506
50571
|
info(import_chalk10.default.dim(" Anything it half-wrote is still in the working tree \u2014 check git status."));
|
|
50507
50572
|
info(import_chalk10.default.dim(` Resume: aidlc run exec ${e.runId}`));
|
|
50508
50573
|
},
|
|
@@ -50516,14 +50581,14 @@ ${reason}`)),
|
|
|
50516
50581
|
onBatchDone: (e) => {
|
|
50517
50582
|
sep4();
|
|
50518
50583
|
info(import_chalk10.default.cyan(`
|
|
50519
|
-
\u21BB Batch ${e.batch} of "${e.
|
|
50584
|
+
\u21BB Batch ${e.batch} of "${e.label}" done \u2014 starting the next in a fresh session.`));
|
|
50520
50585
|
if (typeof e.costUsd === "number") {
|
|
50521
50586
|
info(import_chalk10.default.dim(` cost: $${e.costUsd.toFixed(4)}`));
|
|
50522
50587
|
}
|
|
50523
50588
|
},
|
|
50524
50589
|
onBatchPause: (e) => {
|
|
50525
50590
|
info(import_chalk10.default.cyan(`
|
|
50526
|
-
\u23F8 Batch ${e.batch} of "${e.
|
|
50591
|
+
\u23F8 Batch ${e.batch} of "${e.label}" done; pausing (pause_between_batches).`));
|
|
50527
50592
|
if (e.report) {
|
|
50528
50593
|
info(import_chalk10.default.dim(` Progress: ${e.report}`));
|
|
50529
50594
|
}
|
|
@@ -50531,23 +50596,23 @@ ${reason}`)),
|
|
|
50531
50596
|
},
|
|
50532
50597
|
onStepSkipped: (e) => {
|
|
50533
50598
|
info(import_chalk10.default.yellow(`
|
|
50534
|
-
\u2933 Step "${e.
|
|
50599
|
+
\u2933 Step "${e.label}" was rejected \u2014 carrying on.`) + import_chalk10.default.dim(` ${e.reason}`));
|
|
50535
50600
|
info(import_chalk10.default.dim(` Want it back? aidlc run rerun ${e.runId} --step ${e.stepIdx}`));
|
|
50536
50601
|
},
|
|
50537
50602
|
onAutoReviewStart: (e) => info(import_chalk10.default.bold(`
|
|
50538
|
-
\u{1F50D} Auto-review: "${e.
|
|
50603
|
+
\u{1F50D} Auto-review: "${e.label}"`)),
|
|
50539
50604
|
onAutoReviewResult: (e) => {
|
|
50540
50605
|
if (e.decision === "pass") {
|
|
50541
50606
|
info(import_chalk10.default.green("\u2714 Auto-review passed") + import_chalk10.default.dim(` \u2014 ${e.reason}`));
|
|
50542
50607
|
} else if (e.sentBackTo) {
|
|
50543
50608
|
const to = e.sentBackTo;
|
|
50544
|
-
info(import_chalk10.default.yellow(`\u21A9 Auto-review rejected \u2014 sent back to "${to.
|
|
50609
|
+
info(import_chalk10.default.yellow(`\u21A9 Auto-review rejected \u2014 sent back to "${to.label}" (rev ${to.revision}, send-back ${to.count} of ${to.max})`) + import_chalk10.default.dim(` \u2014 ${e.reason}`));
|
|
50545
50610
|
} else {
|
|
50546
50611
|
info(import_chalk10.default.red("\u2718 Auto-review rejected") + import_chalk10.default.dim(` \u2014 ${e.reason}`));
|
|
50547
50612
|
info(import_chalk10.default.dim(` Fix the issue, then: aidlc run rerun ${e.runId} [--feedback "..."]`));
|
|
50548
50613
|
}
|
|
50549
50614
|
},
|
|
50550
|
-
onAutoApproved: (e) => info(import_chalk10.default.green(`\u2714 Auto-approved "${e.
|
|
50615
|
+
onAutoApproved: (e) => info(import_chalk10.default.green(`\u2714 Auto-approved "${e.label}" (--auto-approve)`)),
|
|
50551
50616
|
onBudget: (e) => {
|
|
50552
50617
|
const caveats = [];
|
|
50553
50618
|
if (e.estimated && e.estimated > 0) {
|
|
@@ -50571,6 +50636,8 @@ ${reason}`)),
|
|
|
50571
50636
|
},
|
|
50572
50637
|
onUntilStop: (e) => info(import_chalk10.default.dim(`
|
|
50573
50638
|
Stopped at step ${e.untilIdx} as requested.`)),
|
|
50639
|
+
onAttendedStep: (e) => info(import_chalk10.default.dim(`
|
|
50640
|
+
Stopped before step ${e.stepIdx + 1} \xB7 ${e.label} \u2014 a person runs it.`)),
|
|
50574
50641
|
onDryRunPreview: (e) => {
|
|
50575
50642
|
const layers = [
|
|
50576
50643
|
e.inlined.persona ? "persona" : null,
|
|
@@ -50833,12 +50900,12 @@ function render(root, runIdFilter) {
|
|
|
50833
50900
|
for (const run of filtered) {
|
|
50834
50901
|
const stepNum = `${run.currentStepIdx + 1}/${run.steps.length}`;
|
|
50835
50902
|
const current = run.steps[run.currentStepIdx];
|
|
50836
|
-
const
|
|
50903
|
+
const stepLabel3 = current ? `${stepNum} ${current.agent} ${import_chalk12.default.dim(`(${current.status})`)}` : stepNum;
|
|
50837
50904
|
table.push([
|
|
50838
50905
|
import_chalk12.default.bold(run.runId),
|
|
50839
50906
|
import_chalk12.default.dim(run.pipelineId),
|
|
50840
50907
|
colorRunStatus(run.status),
|
|
50841
|
-
|
|
50908
|
+
stepLabel3,
|
|
50842
50909
|
import_chalk12.default.dim(humanizeTime(run.updatedAt))
|
|
50843
50910
|
]);
|
|
50844
50911
|
}
|
|
@@ -51967,12 +52034,12 @@ function registerEpic(program3) {
|
|
|
51967
52034
|
const total = epic.stepDetails.length;
|
|
51968
52035
|
const done = epic.stepDetails.filter((s) => s.status === "done").length;
|
|
51969
52036
|
const pct = epicProgress(epic).percent;
|
|
51970
|
-
const
|
|
52037
|
+
const stepLabel3 = total ? `${done}/${total} (${pct}%)` : "\u2014";
|
|
51971
52038
|
table.push([
|
|
51972
52039
|
import_chalk15.default.bold(epic.id),
|
|
51973
52040
|
truncate(epic.title || import_chalk15.default.dim("(untitled)"), 40),
|
|
51974
52041
|
epic.tags.length > 0 ? import_chalk15.default.cyan(truncate(epic.tags.join(" "), 28)) : import_chalk15.default.dim("\u2014"),
|
|
51975
|
-
|
|
52042
|
+
stepLabel3,
|
|
51976
52043
|
colorEpicStatus(epic.status),
|
|
51977
52044
|
import_chalk15.default.dim(epic.pipeline ?? "\u2014")
|
|
51978
52045
|
]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@delete101020/aidlc",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.45",
|
|
4
4
|
"description": "AIDLC Native CLI, a fork of AIDLC — drive Claude through the six-stage AI-Native SDLC Playbook: Plan → Design → Build → Test → Deploy → Maintain, with artifact gates, requirements traceability, an incident loop back to Plan, and Spec Kit support.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|