@delete101020/aidlc 4.0.22 → 4.0.24
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/README.md +15 -3
- package/dist/bundle.js +124 -29
- package/dist/vendor/annotron/src/chrome.html +13 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -192,7 +192,7 @@ description of each.
|
|
|
192
192
|
|
|
193
193
|
```
|
|
194
194
|
aidlc agent add --id <id> --name <n> --skill <skillId>
|
|
195
|
-
[--model
|
|
195
|
+
[--model sonnet]
|
|
196
196
|
[--capabilities files,github,jira]
|
|
197
197
|
[--description "…"]
|
|
198
198
|
[--runner default|codex|custom] [--runner-path .aidlc/runners/foo.js]
|
|
@@ -227,8 +227,20 @@ providers:
|
|
|
227
227
|
```
|
|
228
228
|
|
|
229
229
|
`model_aliases` translates a `model:` value for one runner. Without it, a Claude
|
|
230
|
-
tier alias (`opus` / `sonnet` / `haiku`) resolves to no `--model` at all
|
|
231
|
-
provider CLI applies its own default.
|
|
230
|
+
tier alias (`opus` / `sonnet` / `haiku`) resolves to no `--model` at all on a
|
|
231
|
+
provider runner, and the provider CLI applies its own default.
|
|
232
|
+
|
|
233
|
+
The `default` runner passes the agent's `model:` to Claude Code as `--model`, so
|
|
234
|
+
each step runs on the model its agent asks for rather than your session's
|
|
235
|
+
default. Tier aliases go through as-is and follow the current generation; to pin
|
|
236
|
+
one, declare it under `providers.default.model_aliases`:
|
|
237
|
+
|
|
238
|
+
```yaml
|
|
239
|
+
providers:
|
|
240
|
+
default:
|
|
241
|
+
model_aliases:
|
|
242
|
+
opus: claude-opus-5-5
|
|
243
|
+
``` AIDLC ships **no** built-in tier map: saying
|
|
232
244
|
`sonnet` equals some other vendor's model is a claim about your work that only you
|
|
233
245
|
can make, and a guessed model id fails the run outright.
|
|
234
246
|
|
package/dist/bundle.js
CHANGED
|
@@ -19765,6 +19765,8 @@ var require_WorkspaceSchema = __commonJS({
|
|
|
19765
19765
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
19766
19766
|
exports2.WorkspaceValidationError = exports2.WorkspaceSchema = void 0;
|
|
19767
19767
|
exports2.normalizeStep = normalizeStep4;
|
|
19768
|
+
exports2.stepSkillAlternatives = stepSkillAlternatives;
|
|
19769
|
+
exports2.resolveStepSkills = resolveStepSkills;
|
|
19768
19770
|
exports2.producesEntries = producesEntries;
|
|
19769
19771
|
exports2.stepAgentId = stepAgentId3;
|
|
19770
19772
|
exports2.stepDagId = stepDagId;
|
|
@@ -19891,6 +19893,18 @@ var require_WorkspaceSchema = __commonJS({
|
|
|
19891
19893
|
* string); the normalizer coerces it into a single-entry array.
|
|
19892
19894
|
*/
|
|
19893
19895
|
skills: zod_1.z.array(zod_1.z.string().min(1)).optional(),
|
|
19896
|
+
/**
|
|
19897
|
+
* Turns `skills` from "all of these" into "one of these": the person
|
|
19898
|
+
* picks which skill runs before launching the step, and this one is
|
|
19899
|
+
* preselected — and is what the unattended runner uses when nobody
|
|
19900
|
+
* picked. For interchangeable implementations of one step (two review
|
|
19901
|
+
* skills that differ only in the tool they drive), where loading both
|
|
19902
|
+
* would have the model run both procedures, or blend them.
|
|
19903
|
+
*
|
|
19904
|
+
* Must be one of `skills`. Omitted = every listed skill is available at
|
|
19905
|
+
* once, as before.
|
|
19906
|
+
*/
|
|
19907
|
+
default_skill: zod_1.z.string().min(1).optional(),
|
|
19894
19908
|
/** Artifact paths required from upstream. Gate-checked before work AND on Mark step done. */
|
|
19895
19909
|
requires: zod_1.z.array(zod_1.z.string().min(1)).default([]),
|
|
19896
19910
|
/**
|
|
@@ -19938,6 +19952,9 @@ var require_WorkspaceSchema = __commonJS({
|
|
|
19938
19952
|
/** Open a PR after pushing (only valid when push=true). */
|
|
19939
19953
|
open_pr: zod_1.z.boolean().default(true)
|
|
19940
19954
|
}).optional()
|
|
19955
|
+
}).refine((s) => !s.default_skill || (s.skills ?? []).includes(s.default_skill), {
|
|
19956
|
+
message: "`default_skill` must be one of the step's `skills`.",
|
|
19957
|
+
path: ["default_skill"]
|
|
19941
19958
|
}).refine((s) => !s.auto_review || !!s.auto_review_runner, {
|
|
19942
19959
|
message: "Step with `auto_review: true` must set `auto_review_runner` (path to a JS/TS validator module).",
|
|
19943
19960
|
path: ["auto_review_runner"]
|
|
@@ -20042,6 +20059,7 @@ var require_WorkspaceSchema = __commonJS({
|
|
|
20042
20059
|
name: typeof obj.name === "string" ? obj.name : void 0,
|
|
20043
20060
|
...typeof obj.description === "string" && obj.description.trim() ? { description: obj.description.trim() } : {},
|
|
20044
20061
|
skills,
|
|
20062
|
+
...typeof obj.default_skill === "string" && skills?.includes(obj.default_skill) ? { default_skill: obj.default_skill } : {},
|
|
20045
20063
|
enabled: typeof obj.enabled === "boolean" ? obj.enabled : true,
|
|
20046
20064
|
optional: obj.optional === true,
|
|
20047
20065
|
produces,
|
|
@@ -20056,6 +20074,19 @@ var require_WorkspaceSchema = __commonJS({
|
|
|
20056
20074
|
...git && { git }
|
|
20057
20075
|
};
|
|
20058
20076
|
}
|
|
20077
|
+
function stepSkillAlternatives(norm) {
|
|
20078
|
+
if (!norm.default_skill || !norm.skills?.includes(norm.default_skill)) {
|
|
20079
|
+
return void 0;
|
|
20080
|
+
}
|
|
20081
|
+
return { options: norm.skills, defaultSkill: norm.default_skill };
|
|
20082
|
+
}
|
|
20083
|
+
function resolveStepSkills(norm, agentSkills, chosen) {
|
|
20084
|
+
const alt = stepSkillAlternatives(norm);
|
|
20085
|
+
if (alt) {
|
|
20086
|
+
return [chosen && alt.options.includes(chosen) ? chosen : alt.defaultSkill];
|
|
20087
|
+
}
|
|
20088
|
+
return norm.skills && norm.skills.length > 0 ? [...norm.skills] : [...agentSkills];
|
|
20089
|
+
}
|
|
20059
20090
|
function producesEntries(norm) {
|
|
20060
20091
|
const optional = new Set(norm.produces_optional);
|
|
20061
20092
|
return norm.produces.map((p) => optional.has(p) ? { path: p, optional: true } : p);
|
|
@@ -20406,6 +20437,9 @@ var require_PipelineAssembler = __commonJS({
|
|
|
20406
20437
|
if (norm.skills && norm.skills.length > 0) {
|
|
20407
20438
|
step.skills = norm.skills;
|
|
20408
20439
|
}
|
|
20440
|
+
if (norm.default_skill) {
|
|
20441
|
+
step.default_skill = norm.default_skill;
|
|
20442
|
+
}
|
|
20409
20443
|
if (auto_review_runner) {
|
|
20410
20444
|
step.auto_review_runner = auto_review_runner;
|
|
20411
20445
|
}
|
|
@@ -20734,6 +20768,9 @@ ${raw.slice(0, 200)}`);
|
|
|
20734
20768
|
if (norm.skills && norm.skills.length > 0) {
|
|
20735
20769
|
step.skills = norm.skills;
|
|
20736
20770
|
}
|
|
20771
|
+
if (norm.default_skill) {
|
|
20772
|
+
step.default_skill = norm.default_skill;
|
|
20773
|
+
}
|
|
20737
20774
|
if (norm.auto_review_runner) {
|
|
20738
20775
|
step.auto_review_runner = norm.auto_review_runner;
|
|
20739
20776
|
}
|
|
@@ -21176,6 +21213,7 @@ var require_PipelineRunner = __commonJS({
|
|
|
21176
21213
|
exports2.approveStep = approveStep3;
|
|
21177
21214
|
exports2.rejectStep = rejectStep3;
|
|
21178
21215
|
exports2.rerunStep = rerunStep3;
|
|
21216
|
+
exports2.chooseStepSkill = chooseStepSkill;
|
|
21179
21217
|
exports2.requestStepUpdate = requestStepUpdate2;
|
|
21180
21218
|
exports2.dirtyUpstreamOf = dirtyUpstreamOf2;
|
|
21181
21219
|
exports2.canRerunApprovedStep = canRerunApprovedStep;
|
|
@@ -21460,7 +21498,8 @@ var require_PipelineRunner = __commonJS({
|
|
|
21460
21498
|
at: verdict.at,
|
|
21461
21499
|
revision: nextStep.revision,
|
|
21462
21500
|
reason: verdict.reason,
|
|
21463
|
-
sentBackToIdx: idx
|
|
21501
|
+
sentBackToIdx: idx,
|
|
21502
|
+
...nextStep.skill ? { skill: nextStep.skill } : {}
|
|
21464
21503
|
});
|
|
21465
21504
|
next.status = "running";
|
|
21466
21505
|
settleOptionalRejection(next, idx, pipeline);
|
|
@@ -21537,7 +21576,8 @@ var require_PipelineRunner = __commonJS({
|
|
|
21537
21576
|
at: now,
|
|
21538
21577
|
revision: next2.steps[idx].revision,
|
|
21539
21578
|
reason,
|
|
21540
|
-
sentBackToIdx: targetIdx
|
|
21579
|
+
sentBackToIdx: targetIdx,
|
|
21580
|
+
...next2.steps[idx].skill ? { skill: next2.steps[idx].skill } : {}
|
|
21541
21581
|
});
|
|
21542
21582
|
const usesDag = pipeline ? pipeline.steps.map(WorkspaceSchema_1.normalizeStep).some((s) => s.depends_on.length > 0) : false;
|
|
21543
21583
|
const targetIdxN = targetIdx;
|
|
@@ -21600,7 +21640,8 @@ var require_PipelineRunner = __commonJS({
|
|
|
21600
21640
|
at: now,
|
|
21601
21641
|
revision: step.revision,
|
|
21602
21642
|
reason,
|
|
21603
|
-
sentBackToIdx: idx
|
|
21643
|
+
sentBackToIdx: idx,
|
|
21644
|
+
...step.skill ? { skill: step.skill } : {}
|
|
21604
21645
|
})
|
|
21605
21646
|
};
|
|
21606
21647
|
next.status = "running";
|
|
@@ -21641,6 +21682,24 @@ var require_PipelineRunner = __commonJS({
|
|
|
21641
21682
|
next.status = "running";
|
|
21642
21683
|
return next;
|
|
21643
21684
|
}
|
|
21685
|
+
function chooseStepSkill(args) {
|
|
21686
|
+
const { state, pipeline, stepIdx, skill } = args;
|
|
21687
|
+
if (!Number.isInteger(stepIdx) || stepIdx < 0 || stepIdx >= state.steps.length) {
|
|
21688
|
+
throw new PipelineRunError3(`Invalid stepIdx ${stepIdx}`);
|
|
21689
|
+
}
|
|
21690
|
+
const target = state.steps[stepIdx];
|
|
21691
|
+
const cfg = pipeline.steps[target.stepIdx];
|
|
21692
|
+
const alt = cfg ? (0, WorkspaceSchema_1.stepSkillAlternatives)((0, WorkspaceSchema_1.normalizeStep)(cfg)) : void 0;
|
|
21693
|
+
if (!alt) {
|
|
21694
|
+
throw new PipelineRunError3(`Step "${target.agent}" has no alternative skills to choose from.`);
|
|
21695
|
+
}
|
|
21696
|
+
if (!alt.options.includes(skill)) {
|
|
21697
|
+
throw new PipelineRunError3(`Skill "${skill}" is not one of step "${target.agent}"'s alternatives (${alt.options.join(", ")}).`);
|
|
21698
|
+
}
|
|
21699
|
+
const next = clone(state);
|
|
21700
|
+
next.steps[stepIdx] = { ...target, skill };
|
|
21701
|
+
return next;
|
|
21702
|
+
}
|
|
21644
21703
|
function requestStepUpdate2(args) {
|
|
21645
21704
|
const { state, pipeline, stepIdx, feedback } = args;
|
|
21646
21705
|
if (!Number.isInteger(stepIdx) || stepIdx < 0 || stepIdx >= state.steps.length) {
|
|
@@ -21857,7 +21916,8 @@ var require_PipelineRunner = __commonJS({
|
|
|
21857
21916
|
history: pushHistory(approved.history, {
|
|
21858
21917
|
kind: "approve",
|
|
21859
21918
|
at: finishedAt,
|
|
21860
|
-
revision: approved.revision
|
|
21919
|
+
revision: approved.revision,
|
|
21920
|
+
...approved.skill ? { skill: approved.skill } : {}
|
|
21861
21921
|
})
|
|
21862
21922
|
};
|
|
21863
21923
|
const normalized = pipeline.steps.map(WorkspaceSchema_1.normalizeStep);
|
|
@@ -28437,6 +28497,7 @@ var require_DefaultRunner = __commonJS({
|
|
|
28437
28497
|
"use strict";
|
|
28438
28498
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
28439
28499
|
exports2.DefaultRunner = void 0;
|
|
28500
|
+
exports2.claudeModelArg = claudeModelArg;
|
|
28440
28501
|
var child_process_1 = require("child_process");
|
|
28441
28502
|
var claudeEnv_1 = require_claudeEnv();
|
|
28442
28503
|
var mcp_1 = require_mcp();
|
|
@@ -28470,6 +28531,7 @@ var require_DefaultRunner = __commonJS({
|
|
|
28470
28531
|
async run(ctx) {
|
|
28471
28532
|
const bin = this.opts.claudeBin ?? "claude";
|
|
28472
28533
|
const userMessage = ctx.args.join(" ");
|
|
28534
|
+
const model = claudeModelArg(ctx.model, ctx.modelAliases);
|
|
28473
28535
|
const args = [
|
|
28474
28536
|
"--print",
|
|
28475
28537
|
"--output-format",
|
|
@@ -28477,6 +28539,7 @@ var require_DefaultRunner = __commonJS({
|
|
|
28477
28539
|
"--verbose",
|
|
28478
28540
|
"--append-system-prompt",
|
|
28479
28541
|
ctx.skill,
|
|
28542
|
+
...model ? ["--model", model] : [],
|
|
28480
28543
|
...this.opts.extraArgs ?? [],
|
|
28481
28544
|
userMessage
|
|
28482
28545
|
];
|
|
@@ -28526,6 +28589,13 @@ var require_DefaultRunner = __commonJS({
|
|
|
28526
28589
|
}
|
|
28527
28590
|
};
|
|
28528
28591
|
exports2.DefaultRunner = DefaultRunner3;
|
|
28592
|
+
function claudeModelArg(model, aliases) {
|
|
28593
|
+
const trimmed = model?.trim();
|
|
28594
|
+
if (!trimmed) {
|
|
28595
|
+
return void 0;
|
|
28596
|
+
}
|
|
28597
|
+
return aliases?.[trimmed.toLowerCase()]?.trim() || trimmed;
|
|
28598
|
+
}
|
|
28529
28599
|
}
|
|
28530
28600
|
});
|
|
28531
28601
|
|
|
@@ -29485,6 +29555,10 @@ var require_renameRefs = __commonJS({
|
|
|
29485
29555
|
obj.skill = newId;
|
|
29486
29556
|
moved = true;
|
|
29487
29557
|
}
|
|
29558
|
+
if (obj.default_skill === oldId) {
|
|
29559
|
+
obj.default_skill = newId;
|
|
29560
|
+
moved = true;
|
|
29561
|
+
}
|
|
29488
29562
|
return moved;
|
|
29489
29563
|
}
|
|
29490
29564
|
function declaredSkills(obj) {
|
|
@@ -30707,6 +30781,7 @@ var require_execEngine = __commonJS({
|
|
|
30707
30781
|
var budget_1 = require_budget();
|
|
30708
30782
|
var pricing_1 = require_pricing();
|
|
30709
30783
|
var models_1 = require_models();
|
|
30784
|
+
var WorkspaceSchema_1 = require_WorkspaceSchema();
|
|
30710
30785
|
var artifactLanguage_1 = require_artifactLanguage();
|
|
30711
30786
|
var strictMode_1 = require_strictMode();
|
|
30712
30787
|
var promptComposer_1 = require_promptComposer();
|
|
@@ -30848,13 +30923,13 @@ var require_execEngine = __commonJS({
|
|
|
30848
30923
|
}
|
|
30849
30924
|
}
|
|
30850
30925
|
}
|
|
30851
|
-
function
|
|
30852
|
-
return
|
|
30926
|
+
function loadSkills(ws, skillIds) {
|
|
30927
|
+
return skillIds.map((id) => ws.skills.load(id)).join("\n\n---\n\n");
|
|
30853
30928
|
}
|
|
30854
|
-
function buildStepPrompt(ws, agent, runner, root, epicId) {
|
|
30929
|
+
function buildStepPrompt(ws, agent, skillIds, runner, root, epicId) {
|
|
30855
30930
|
const harness = (0, types_1.harnessCapabilities)(runner);
|
|
30856
30931
|
return (0, promptComposer_1.composeAgentPrompt)({
|
|
30857
|
-
skills:
|
|
30932
|
+
skills: loadSkills(ws, skillIds),
|
|
30858
30933
|
persona: ws.personas.load(agent.id),
|
|
30859
30934
|
instructions: harness.projectInstructions ? null : (0, projectInstructions_1.findProjectInstructions)(root, harness.instructionFile),
|
|
30860
30935
|
harness,
|
|
@@ -30885,6 +30960,11 @@ var require_execEngine = __commonJS({
|
|
|
30885
30960
|
hooks.onStepFailed?.({ stepIdx, agent: agentId, message: `Agent "${agentId}" not found in workspace.yaml.` });
|
|
30886
30961
|
return false;
|
|
30887
30962
|
}
|
|
30963
|
+
const stepCfg = pipeline.steps[stepIdx];
|
|
30964
|
+
const norm = stepCfg ? (0, WorkspaceSchema_1.normalizeStep)(stepCfg) : void 0;
|
|
30965
|
+
const alternatives = norm ? (0, WorkspaceSchema_1.stepSkillAlternatives)(norm) : void 0;
|
|
30966
|
+
const chosen = opts.skill && alternatives?.options.includes(opts.skill) ? opts.skill : stepRec.skill;
|
|
30967
|
+
const skillIds = norm ? (0, WorkspaceSchema_1.resolveStepSkills)(norm, agent.skills, chosen) : [...agent.skills];
|
|
30888
30968
|
let runner;
|
|
30889
30969
|
let prompt2;
|
|
30890
30970
|
try {
|
|
@@ -30894,7 +30974,7 @@ var require_execEngine = __commonJS({
|
|
|
30894
30974
|
return false;
|
|
30895
30975
|
}
|
|
30896
30976
|
try {
|
|
30897
|
-
prompt2 = buildStepPrompt(ws, agent, runner, root, state.runId);
|
|
30977
|
+
prompt2 = buildStepPrompt(ws, agent, skillIds, runner, root, state.runId);
|
|
30898
30978
|
} catch (err) {
|
|
30899
30979
|
hooks.onStepFailed?.({ stepIdx, agent: agentId, message: `Failed to load skills for agent "${agentId}": ${errMsg(err)}` });
|
|
30900
30980
|
return false;
|
|
@@ -30905,7 +30985,7 @@ var require_execEngine = __commonJS({
|
|
|
30905
30985
|
const userMessage = opts.message ?? (contextStr || `Execute step: ${agentId}`);
|
|
30906
30986
|
if (opts.dryRun) {
|
|
30907
30987
|
hooks.onDryRunPreview?.({
|
|
30908
|
-
skills:
|
|
30988
|
+
skills: skillIds.join(", "),
|
|
30909
30989
|
skillText,
|
|
30910
30990
|
userMessage,
|
|
30911
30991
|
env,
|
|
@@ -30917,7 +30997,7 @@ var require_execEngine = __commonJS({
|
|
|
30917
30997
|
stepIdx,
|
|
30918
30998
|
agent: agentId,
|
|
30919
30999
|
revision: stepRec.revision,
|
|
30920
|
-
skills:
|
|
31000
|
+
skills: skillIds,
|
|
30921
31001
|
model: agent.model,
|
|
30922
31002
|
context: userMessage,
|
|
30923
31003
|
dirtyUpstream: (0, PipelineRunner_1.dirtyUpstreamOf)({ state, pipeline, stepIdx }).map((d) => ({ stepIdx: d.stepIdx, step: d.step, byStep: d.dirty.byStep }))
|
|
@@ -30946,6 +31026,9 @@ var require_execEngine = __commonJS({
|
|
|
30946
31026
|
const rec = freshState.steps[stepIdx];
|
|
30947
31027
|
rec.runner = agent.runner;
|
|
30948
31028
|
rec.model = resolvedModel;
|
|
31029
|
+
if (alternatives) {
|
|
31030
|
+
rec.skill = skillIds[0];
|
|
31031
|
+
}
|
|
30949
31032
|
rec.usage = result.usage;
|
|
30950
31033
|
if (typeof result.costUsd === "number") {
|
|
30951
31034
|
rec.costUsd = result.costUsd;
|
|
@@ -31189,13 +31272,13 @@ var require_runReport = __commonJS({
|
|
|
31189
31272
|
return history.map((h) => {
|
|
31190
31273
|
switch (h.kind) {
|
|
31191
31274
|
case "reject":
|
|
31192
|
-
return ` - \u2718 rejected (rev ${h.revision})${h.reason ? `: ${h.reason}` : ""}`;
|
|
31275
|
+
return ` - \u2718 rejected (rev ${h.revision}${h.skill ? `, ${h.skill}` : ""})${h.reason ? `: ${h.reason}` : ""}`;
|
|
31193
31276
|
case "rerun":
|
|
31194
31277
|
return ` - \u21BA rerun \u2192 rev ${h.revision}${h.feedback ? ` (feedback: ${h.feedback})` : ""}`;
|
|
31195
31278
|
case "auto_review":
|
|
31196
31279
|
return ` - \u{1F916} auto-review ${h.decision} (rev ${h.revision}): ${h.reason}`;
|
|
31197
31280
|
case "approve":
|
|
31198
|
-
return ` - \u2714 approved (rev ${h.revision})`;
|
|
31281
|
+
return ` - \u2714 approved (rev ${h.revision}${h.skill ? `, ${h.skill}` : ""})`;
|
|
31199
31282
|
case "undo":
|
|
31200
31283
|
return ` - \u21B6 mark-done undone (rev ${h.revision}, was ${h.from})`;
|
|
31201
31284
|
default:
|
|
@@ -32678,7 +32761,7 @@ var require_commandModel = __commonJS({
|
|
|
32678
32761
|
function shortcutCommandId(phaseId) {
|
|
32679
32762
|
return phaseId;
|
|
32680
32763
|
}
|
|
32681
|
-
function resolveComposition(config, pipelineId, phaseId) {
|
|
32764
|
+
function resolveComposition(config, pipelineId, phaseId, chosenSkill) {
|
|
32682
32765
|
const pipeline = config.pipelines.find((p) => p.id === pipelineId);
|
|
32683
32766
|
if (!pipeline) {
|
|
32684
32767
|
return { found: false, phaseId, pipelineId };
|
|
@@ -32688,11 +32771,8 @@ var require_commandModel = __commonJS({
|
|
|
32688
32771
|
return { found: false, phaseId, pipelineId };
|
|
32689
32772
|
}
|
|
32690
32773
|
const step = (0, WorkspaceSchema_1.normalizeStep)(stepCfg);
|
|
32691
|
-
|
|
32692
|
-
|
|
32693
|
-
const agent = config.agents.find((a) => a.id === step.agent);
|
|
32694
|
-
skills = agent?.skills ?? [];
|
|
32695
|
-
}
|
|
32774
|
+
const agent = config.agents.find((a) => a.id === step.agent);
|
|
32775
|
+
const skills = (0, WorkspaceSchema_1.resolveStepSkills)(step, agent?.skills ?? [], chosenSkill);
|
|
32696
32776
|
return {
|
|
32697
32777
|
found: true,
|
|
32698
32778
|
phaseId,
|
|
@@ -32786,6 +32866,9 @@ The first token is the **epic id**; an optional second token is the **phase**.
|
|
|
32786
32866
|
2. In that pipeline's \`steps\`, find the step whose \`name\` (or \`agent\` when
|
|
32787
32867
|
unnamed) === the chosen phase. That step's \`agent\` + \`skills\` are the
|
|
32788
32868
|
wiring. If the step omits \`skills\`, use the referenced agent's \`skills:\`.
|
|
32869
|
+
If the step sets \`default_skill\`, its \`skills\` are alternatives: load
|
|
32870
|
+
**only one** \u2014 the step's \`skill\` in \`.aidlc/runs/<epic>.json\` when it
|
|
32871
|
+
is one of them, else \`default_skill\`. Never load the others.
|
|
32789
32872
|
3. Load the persona from \`.claude/agents/<agent>.md\` (fall back to
|
|
32790
32873
|
\`~/.claude/agents/<agent>.md\`), and each skill from
|
|
32791
32874
|
\`.claude/skills/<skill>.md\` (fall back to \`~/.claude/skills/<skill>.md\`).
|
|
@@ -33364,13 +33447,13 @@ var require_dist = __commonJS({
|
|
|
33364
33447
|
"../core/dist/index.js"(exports2) {
|
|
33365
33448
|
"use strict";
|
|
33366
33449
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
33367
|
-
exports2.
|
|
33368
|
-
exports2.
|
|
33369
|
-
exports2.
|
|
33370
|
-
exports2.
|
|
33371
|
-
exports2.
|
|
33372
|
-
exports2.
|
|
33373
|
-
exports2.AIDLC_CORE_VERSION = exports2.AIDLC_CLI_GUIDE_TEXT = exports2.AIDLC_KNOWLEDGE = exports2.clearResolveCommandCache = exports2.resolveCommand = void 0;
|
|
33450
|
+
exports2.openIncidentEpic = exports2.SignalParseError = exports2.isSignal = exports2.parseSignal = exports2.SignalSchema = exports2.EpicStepEditError = exports2.resolveStepRef = exports2.describeGateEffect = exports2.commitEpicStepEdit = exports2.planSetEpicStepGates = exports2.planRemoveEpicStep = exports2.planAddEpicStep = exports2.EpicWorkflowSwitchError = exports2.canSwitchEpicWorkflow = exports2.epicWorkflowLock = exports2.applyEpicWorkflowSwitch = exports2.stageEpicWorkflowSwitch = exports2.planEpicWorkflowSwitch = exports2.EpicDescriptionError = exports2.setEpicDescription = exports2.lockedEpicDirError = exports2.EpicScaffoldError = exports2.epicsRoot = exports2.mapStepStatusToEpic = exports2.mirrorRunStateToEpic = exports2.scaffoldEpic = exports2.resolveArtifactCommitConfig = exports2.commitApprovedArtifacts = exports2.PipelineAdaptError = exports2.applyAdaptation = exports2.parseAdaptationVerdict = exports2.buildAdaptationPrompt = exports2.buildPhaseCatalog = exports2.slugEpicId = exports2.parseClassificationVerdict = exports2.buildClassificationPrompt = exports2.heuristicClassify = exports2.PipelineAssembleError = exports2.recipePipelineId = exports2.assemblePipeline = exports2.collectWorkspaceRefIssues = exports2.resolveStepSkills = exports2.stepSkillAlternatives = exports2.stepDagId = exports2.stepAgentId = exports2.producesEntries = exports2.normalizeStep = exports2.WorkspaceValidationError = exports2.validateWorkspace = exports2.WorkspaceSchema = void 0;
|
|
33451
|
+
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 = 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.openManifestFollowUp = 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 = void 0;
|
|
33452
|
+
exports2.normalizeTag = exports2.epicMatchesTags = exports2.applyTagEdit = exports2.MAX_TAG_LENGTH = exports2.EPIC_TAGS_KEY = exports2.strictModeSection = exports2.resolveEpicStrictMode = exports2.epicStrictMode = exports2.commandBodyPredatesStrictMode = exports2.STRICT_MODE_KEY = exports2.STRICT_MODE_HEADING = exports2.writeUserEpicIdPrefix = exports2.userConfigPath = 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 = void 0;
|
|
33453
|
+
exports2.deriveRunProgress = exports2.PipelineRunError = exports2.retryAutoReview = exports2.submitAutoReviewVerdict = exports2.dirtyUpstreamOf = exports2.rerunApprovedStep = exports2.canRerunApprovedStep = 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.CodexRunner = exports2.claudeModelArg = exports2.DefaultRunner = exports2.RunnerRegistry = exports2.targetPath = exports2.scopePaths = exports2.discoverAssets = exports2.commandBodyIsStale = exports2.readEpicTags = exports2.normalizeTags = void 0;
|
|
33454
|
+
exports2.isClaudeTierAlias = exports2.CLAUDE_TIER_ALIASES = 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.runExecLoop = exports2.estimateCostUsd = exports2.providerAliases = exports2.ratesFromConfig = exports2.mergeRates = exports2.BUILTIN_RATES = exports2.checkBudget = exports2.weighStepProgress = exports2.isActiveStatus = exports2.isStepOptional = exports2.isRunComplete = void 0;
|
|
33455
|
+
exports2.claudeConfigDir = exports2.resolveClaudeConfigDir = exports2.defaultClaudeConfigDir = exports2.getClaudeConfigDirOverride = 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.resolveProviderModel = void 0;
|
|
33456
|
+
exports2.AIDLC_CORE_VERSION = exports2.AIDLC_CLI_GUIDE_TEXT = exports2.AIDLC_KNOWLEDGE = exports2.clearResolveCommandCache = exports2.resolveCommand = exports2.remapClaudePath = exports2.claudeConfigEnv = exports2.claudeJsonPath = exports2.isDefaultClaudeConfigDir = void 0;
|
|
33374
33457
|
var WorkspaceSchema_1 = require_WorkspaceSchema();
|
|
33375
33458
|
Object.defineProperty(exports2, "WorkspaceSchema", { enumerable: true, get: function() {
|
|
33376
33459
|
return WorkspaceSchema_1.WorkspaceSchema;
|
|
@@ -33393,6 +33476,12 @@ var require_dist = __commonJS({
|
|
|
33393
33476
|
Object.defineProperty(exports2, "stepDagId", { enumerable: true, get: function() {
|
|
33394
33477
|
return WorkspaceSchema_1.stepDagId;
|
|
33395
33478
|
} });
|
|
33479
|
+
Object.defineProperty(exports2, "stepSkillAlternatives", { enumerable: true, get: function() {
|
|
33480
|
+
return WorkspaceSchema_1.stepSkillAlternatives;
|
|
33481
|
+
} });
|
|
33482
|
+
Object.defineProperty(exports2, "resolveStepSkills", { enumerable: true, get: function() {
|
|
33483
|
+
return WorkspaceSchema_1.resolveStepSkills;
|
|
33484
|
+
} });
|
|
33396
33485
|
Object.defineProperty(exports2, "collectWorkspaceRefIssues", { enumerable: true, get: function() {
|
|
33397
33486
|
return WorkspaceSchema_1.collectWorkspaceRefIssues;
|
|
33398
33487
|
} });
|
|
@@ -33873,6 +33962,9 @@ var require_dist = __commonJS({
|
|
|
33873
33962
|
Object.defineProperty(exports2, "DefaultRunner", { enumerable: true, get: function() {
|
|
33874
33963
|
return DefaultRunner_1.DefaultRunner;
|
|
33875
33964
|
} });
|
|
33965
|
+
Object.defineProperty(exports2, "claudeModelArg", { enumerable: true, get: function() {
|
|
33966
|
+
return DefaultRunner_1.claudeModelArg;
|
|
33967
|
+
} });
|
|
33876
33968
|
var CodexRunner_1 = require_CodexRunner();
|
|
33877
33969
|
Object.defineProperty(exports2, "CodexRunner", { enumerable: true, get: function() {
|
|
33878
33970
|
return CodexRunner_1.CodexRunner;
|
|
@@ -33982,6 +34074,9 @@ var require_dist = __commonJS({
|
|
|
33982
34074
|
Object.defineProperty(exports2, "requestStepUpdate", { enumerable: true, get: function() {
|
|
33983
34075
|
return PipelineRunner_1.requestStepUpdate;
|
|
33984
34076
|
} });
|
|
34077
|
+
Object.defineProperty(exports2, "chooseStepSkill", { enumerable: true, get: function() {
|
|
34078
|
+
return PipelineRunner_1.chooseStepSkill;
|
|
34079
|
+
} });
|
|
33985
34080
|
Object.defineProperty(exports2, "canRerunApprovedStep", { enumerable: true, get: function() {
|
|
33986
34081
|
return PipelineRunner_1.canRerunApprovedStep;
|
|
33987
34082
|
} });
|
|
@@ -43018,7 +43113,7 @@ var require_package = __commonJS({
|
|
|
43018
43113
|
"package.json"(exports2, module2) {
|
|
43019
43114
|
module2.exports = {
|
|
43020
43115
|
name: "@delete101020/aidlc",
|
|
43021
|
-
version: "4.0.
|
|
43116
|
+
version: "4.0.24",
|
|
43022
43117
|
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.",
|
|
43023
43118
|
license: "MIT",
|
|
43024
43119
|
repository: {
|
|
@@ -47964,7 +48059,7 @@ function registerRun(program3) {
|
|
|
47964
48059
|
});
|
|
47965
48060
|
cmd.command("exec <runId>").description(
|
|
47966
48061
|
"Execute the current step by spawning the claude CLI, then auto-advance.\n Streams output live. Stops at human_review steps unless --auto-approve.\n Exit codes: 0 completed (or stopped at --until), 2 paused on a gate\n (awaiting review / rejected / budget), 1 error. --require-complete maps\n any non-completed outcome to 1 for CI gating."
|
|
47967
|
-
).option("--until <step>", "Stop after this step completes (index or agent id)").option("--auto-approve", "Also auto-approve human_review steps without pausing").option("--require-complete", "Exit 1 unless the run reaches completed (for CI gating)").option("--json", "Suppress decorative output; print a final JSON summary to stdout (claude stream goes to stderr)").option("--message <text>", "Override the user message sent to claude (default: context pairs)").option("--dry-run", "Print the assembled prompt without spawning claude").action(async (runId, opts, actionCmd) => {
|
|
48062
|
+
).option("--until <step>", "Stop after this step completes (index or agent id)").option("--auto-approve", "Also auto-approve human_review steps without pausing").option("--require-complete", "Exit 1 unless the run reaches completed (for CI gating)").option("--json", "Suppress decorative output; print a final JSON summary to stdout (claude stream goes to stderr)").option("--message <text>", "Override the user message sent to claude (default: context pairs)").option("--dry-run", "Print the assembled prompt without spawning claude").option("--skill <id>", "On steps that offer alternative skills (default_skill), run this one").action(async (runId, opts, actionCmd) => {
|
|
47968
48063
|
const root = resolveWorkspaceRoot(actionCmd);
|
|
47969
48064
|
if (opts.json) {
|
|
47970
48065
|
setQuiet(true);
|
|
@@ -48073,7 +48168,7 @@ async function execLoop(root, runId, opts) {
|
|
|
48073
48168
|
return (0, import_core13.runExecLoop)(
|
|
48074
48169
|
root,
|
|
48075
48170
|
runId,
|
|
48076
|
-
{ untilIdx, autoApprove: opts.autoApprove, message: opts.message, dryRun: opts.dryRun },
|
|
48171
|
+
{ untilIdx, autoApprove: opts.autoApprove, message: opts.message, dryRun: opts.dryRun, skill: opts.skill },
|
|
48077
48172
|
cliExecHooks(runId, claudeOut)
|
|
48078
48173
|
);
|
|
48079
48174
|
}
|
|
@@ -526,9 +526,9 @@
|
|
|
526
526
|
<div id="model-selector-wrap">
|
|
527
527
|
<select id="model-selector" title="Select model for agent">
|
|
528
528
|
<option value="">Default</option>
|
|
529
|
-
<option value="
|
|
530
|
-
<option value="
|
|
531
|
-
<option value="
|
|
529
|
+
<option value="opus">Opus</option>
|
|
530
|
+
<option value="sonnet">Sonnet</option>
|
|
531
|
+
<option value="haiku">Haiku</option>
|
|
532
532
|
</select>
|
|
533
533
|
</div>
|
|
534
534
|
<label id="ask-mode-wrap" title="Force Ask Mode even with comments (for Q&A over edits)" style="display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--dim-6);">
|
|
@@ -709,7 +709,14 @@ let annotations = [];
|
|
|
709
709
|
let pendingNew = [];
|
|
710
710
|
|
|
711
711
|
// Agent model & metrics
|
|
712
|
+
// Aliases (`opus` / `sonnet` / `haiku`) always resolve to the current
|
|
713
|
+
// generation. A pinned id saved by an older build (e.g. `claude-opus-4-8`) is
|
|
714
|
+
// migrated to its tier's alias so it does not stay stuck on that generation.
|
|
712
715
|
let selectedModel = localStorage.getItem('annotron-model') || '';
|
|
716
|
+
if (selectedModel.startsWith('claude-')) {
|
|
717
|
+
selectedModel = ['opus', 'sonnet', 'haiku'].find((t) => selectedModel.includes(t)) || '';
|
|
718
|
+
localStorage.setItem('annotron-model', selectedModel);
|
|
719
|
+
}
|
|
713
720
|
let forceAskMode = localStorage.getItem('annotron-ask-mode') === 'true';
|
|
714
721
|
let agentMetricsData = { model: '', tokensUsed: 0, tokensMax: 200000, contextUsed: 0, contextMax: 65536 };
|
|
715
722
|
|
|
@@ -734,9 +741,9 @@ const infoTokens = document.getElementById('info-tokens');
|
|
|
734
741
|
function updateInfoBar() {
|
|
735
742
|
// Update model display
|
|
736
743
|
const modelDisplay = selectedModel ?
|
|
737
|
-
(selectedModel.includes('opus') ? 'Opus
|
|
738
|
-
selectedModel.includes('sonnet') ? 'Sonnet
|
|
739
|
-
selectedModel.includes('haiku') ? 'Haiku
|
|
744
|
+
(selectedModel.includes('opus') ? 'Opus' :
|
|
745
|
+
selectedModel.includes('sonnet') ? 'Sonnet' :
|
|
746
|
+
selectedModel.includes('haiku') ? 'Haiku' :
|
|
740
747
|
selectedModel) : 'Default';
|
|
741
748
|
infoModel.textContent = modelDisplay;
|
|
742
749
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@delete101020/aidlc",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.24",
|
|
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": {
|