@delete101020/aidlc 4.0.36 → 4.0.38
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 +7 -0
- package/dist/bundle.js +127 -22
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -313,6 +313,13 @@ the pipeline it was derived from) and inherits its tags; override with
|
|
|
313
313
|
runs: the child waits at its first step until someone starts it. The
|
|
314
314
|
extension's card offers the same as **New follow-up epic**.
|
|
315
315
|
|
|
316
|
+
One epic can follow several: `epic follow-up SEAL-CUT --also SEAL-CLASSIFY`
|
|
317
|
+
(repeatable; **Also follows** in the extension) when one change reworks what two
|
|
318
|
+
earlier epics built. The extra parents go into `also_from` — linked from both
|
|
319
|
+
cards, while the child stays grouped under `<parent>`. Every phase prompt tells
|
|
320
|
+
the agent to read each parent's `intent.md` and `spec.md` first, so the child
|
|
321
|
+
starts from their rules instead of a change request on each.
|
|
322
|
+
|
|
316
323
|
**Tags** are free text in and one canonical form on disk: uppercase, ASCII,
|
|
317
324
|
dash-separated — `"thanh toán VNPay"` is stored as `THANH-TOAN-VNPAY`, and the
|
|
318
325
|
accents and case are folded on the way *in* to a filter too, so `--tag "thanh
|
package/dist/bundle.js
CHANGED
|
@@ -27076,11 +27076,12 @@ var require_FollowUps = __commonJS({
|
|
|
27076
27076
|
};
|
|
27077
27077
|
}();
|
|
27078
27078
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
27079
|
-
exports2.MANUAL_FOLLOW_UP_KEY_PREFIX = exports2.FollowUpsParseError = exports2.FollowUpManifestSchema = exports2.FollowUpItemSchema = exports2.FOLLOW_UP_INTENT = exports2.FOLLOW_UPS_FILE = void 0;
|
|
27079
|
+
exports2.MANUAL_FOLLOW_UP_KEY_PREFIX = exports2.ALSO_FROM_INPUT = exports2.FollowUpsParseError = exports2.FollowUpManifestSchema = exports2.FollowUpItemSchema = exports2.FOLLOW_UP_INTENT = exports2.FOLLOW_UPS_FILE = void 0;
|
|
27080
27080
|
exports2.parseFollowUps = parseFollowUps;
|
|
27081
27081
|
exports2.readEpicFollowUps = readEpicFollowUps;
|
|
27082
27082
|
exports2.followUpsOf = followUpsOf;
|
|
27083
27083
|
exports2.followUpChildId = followUpChildId;
|
|
27084
|
+
exports2.combinedParentId = combinedParentId;
|
|
27084
27085
|
exports2.openManifestFollowUp = openManifestFollowUp;
|
|
27085
27086
|
exports2.withFollowUpProvenance = withFollowUpProvenance2;
|
|
27086
27087
|
exports2.nextManualFollowUpKey = nextManualFollowUpKey;
|
|
@@ -27205,6 +27206,17 @@ var require_FollowUps = __commonJS({
|
|
|
27205
27206
|
}
|
|
27206
27207
|
throw new EpicScaffold_1.EpicScaffoldError(`Could not derive a free epic id from "${base}".`);
|
|
27207
27208
|
}
|
|
27209
|
+
function combinedParentId(parentEpicId, alsoFrom = []) {
|
|
27210
|
+
const head = parentEpicId.split("-");
|
|
27211
|
+
return parentEpicId + alsoFrom.map((id) => {
|
|
27212
|
+
const segs = id.split("-");
|
|
27213
|
+
let i = 0;
|
|
27214
|
+
while (i < segs.length - 1 && segs[i] === head[i]) {
|
|
27215
|
+
i++;
|
|
27216
|
+
}
|
|
27217
|
+
return segs.slice(i).join("-");
|
|
27218
|
+
}).join("");
|
|
27219
|
+
}
|
|
27208
27220
|
function openManifestFollowUp(args) {
|
|
27209
27221
|
const { workspaceRoot, doc, parentEpicId, item, pipeline } = args;
|
|
27210
27222
|
const steps = Array.isArray(pipeline.steps) ? pipeline.steps : [];
|
|
@@ -27235,8 +27247,16 @@ var require_FollowUps = __commonJS({
|
|
|
27235
27247
|
intentPath: path17.join(result.artifactsDir, exports2.FOLLOW_UP_INTENT)
|
|
27236
27248
|
};
|
|
27237
27249
|
}
|
|
27238
|
-
|
|
27239
|
-
|
|
27250
|
+
exports2.ALSO_FROM_INPUT = "also_from";
|
|
27251
|
+
function withFollowUpProvenance2(inputs, parentEpicId, key, alsoFrom = []) {
|
|
27252
|
+
const { [exports2.ALSO_FROM_INPUT]: _ignored, ...rest } = inputs;
|
|
27253
|
+
const others = [...new Set(alsoFrom.map((id) => id.trim()).filter((id) => id && id !== parentEpicId))];
|
|
27254
|
+
return {
|
|
27255
|
+
...rest,
|
|
27256
|
+
from_epic: parentEpicId,
|
|
27257
|
+
follow_up_key: key,
|
|
27258
|
+
...others.length > 0 ? { [exports2.ALSO_FROM_INPUT]: others.join(",") } : {}
|
|
27259
|
+
};
|
|
27240
27260
|
}
|
|
27241
27261
|
exports2.MANUAL_FOLLOW_UP_KEY_PREFIX = "F";
|
|
27242
27262
|
function nextManualFollowUpKey(taken) {
|
|
@@ -27283,7 +27303,7 @@ var require_FollowUps = __commonJS({
|
|
|
27283
27303
|
}
|
|
27284
27304
|
return void 0;
|
|
27285
27305
|
}
|
|
27286
|
-
function followUpDefaults2(workspaceRoot, doc, parentEpicId) {
|
|
27306
|
+
function followUpDefaults2(workspaceRoot, doc, parentEpicId, alsoFrom = []) {
|
|
27287
27307
|
const root = (0, EpicScaffold_1.epicsRoot)(workspaceRoot, doc);
|
|
27288
27308
|
const dir = path17.join(root, parentEpicId);
|
|
27289
27309
|
const stateFile = path17.join(dir, "state.json");
|
|
@@ -27312,14 +27332,15 @@ var require_FollowUps = __commonJS({
|
|
|
27312
27332
|
if (!own && typeof state.pipeline === "string") {
|
|
27313
27333
|
own = pipelines.find((p) => p.id === state.pipeline) ?? null;
|
|
27314
27334
|
}
|
|
27315
|
-
const key = nextManualFollowUpKey(followUpsOf(workspaceRoot, doc, parentEpicId).map((f) => f.key ?? ""));
|
|
27316
27335
|
const taken = fs14.existsSync(root) ? fs14.readdirSync(root) : [];
|
|
27336
|
+
const combined = combinedParentId(parentEpicId, alsoFrom);
|
|
27337
|
+
const key = alsoFrom.length > 0 ? nextManualFollowUpKey(taken.filter((id) => id.startsWith(`${combined}-`)).map((id) => id.slice(combined.length + 1))) : nextManualFollowUpKey(followUpsOf(workspaceRoot, doc, parentEpicId).map((f) => f.key ?? ""));
|
|
27317
27338
|
const target = parentTarget(own, pipelines, recipes);
|
|
27318
27339
|
return {
|
|
27319
27340
|
parentEpicId,
|
|
27320
27341
|
parentTitle: typeof state.title === "string" ? state.title : "",
|
|
27321
27342
|
key,
|
|
27322
|
-
epicId: followUpChildId(
|
|
27343
|
+
epicId: followUpChildId(combined, key, taken),
|
|
27323
27344
|
tags: (0, epicTags_1.normalizeTags)(state.tags),
|
|
27324
27345
|
...target ? { target } : {}
|
|
27325
27346
|
};
|
|
@@ -30677,6 +30698,24 @@ var require_epicFocus = __commonJS({
|
|
|
30677
30698
|
}
|
|
30678
30699
|
});
|
|
30679
30700
|
|
|
30701
|
+
// ../core/dist/loader/inheritedContext.js
|
|
30702
|
+
var require_inheritedContext = __commonJS({
|
|
30703
|
+
"../core/dist/loader/inheritedContext.js"(exports2) {
|
|
30704
|
+
"use strict";
|
|
30705
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
30706
|
+
exports2.INHERITED_CONTEXT_MARKER = void 0;
|
|
30707
|
+
exports2.inheritedContextNote = inheritedContextNote;
|
|
30708
|
+
exports2.commandBodyPredatesInheritedContext = commandBodyPredatesInheritedContext;
|
|
30709
|
+
exports2.INHERITED_CONTEXT_MARKER = "`also_from`";
|
|
30710
|
+
function inheritedContextNote(epicRoot) {
|
|
30711
|
+
return `If it has \`from_epic\` (and ${exports2.INHERITED_CONTEXT_MARKER}, comma-separated), this epic follows those epics and inherits their business rules: before writing, read each one's \`${epicRoot}/<parent>/artifacts/intent.md\` and \`spec.md\` (whichever exist), keep what this epic does not change, and say what it changes.`;
|
|
30712
|
+
}
|
|
30713
|
+
function commandBodyPredatesInheritedContext(existing) {
|
|
30714
|
+
return !existing.includes(exports2.INHERITED_CONTEXT_MARKER);
|
|
30715
|
+
}
|
|
30716
|
+
}
|
|
30717
|
+
});
|
|
30718
|
+
|
|
30680
30719
|
// ../core/dist/presets/commandBodyFreshness.js
|
|
30681
30720
|
var require_commandBodyFreshness = __commonJS({
|
|
30682
30721
|
"../core/dist/presets/commandBodyFreshness.js"(exports2) {
|
|
@@ -30685,8 +30724,9 @@ var require_commandBodyFreshness = __commonJS({
|
|
|
30685
30724
|
exports2.commandBodyIsStale = commandBodyIsStale;
|
|
30686
30725
|
var artifactLanguage_1 = require_artifactLanguage();
|
|
30687
30726
|
var strictMode_1 = require_strictMode();
|
|
30727
|
+
var inheritedContext_1 = require_inheritedContext();
|
|
30688
30728
|
function commandBodyIsStale(existing) {
|
|
30689
|
-
return (0, artifactLanguage_1.commandBodyPredatesArtifactLanguage)(existing) || (0, strictMode_1.commandBodyPredatesStrictMode)(existing);
|
|
30729
|
+
return (0, artifactLanguage_1.commandBodyPredatesArtifactLanguage)(existing) || (0, strictMode_1.commandBodyPredatesStrictMode)(existing) || (0, inheritedContext_1.commandBodyPredatesInheritedContext)(existing);
|
|
30690
30730
|
}
|
|
30691
30731
|
}
|
|
30692
30732
|
});
|
|
@@ -31337,8 +31377,46 @@ Expected a JS/TS module at "${scriptPath}" with a default-exported function retu
|
|
|
31337
31377
|
var require_execEngine = __commonJS({
|
|
31338
31378
|
"../core/dist/runs/execEngine.js"(exports2) {
|
|
31339
31379
|
"use strict";
|
|
31380
|
+
var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
31381
|
+
if (k2 === void 0) k2 = k;
|
|
31382
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
31383
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
31384
|
+
desc = { enumerable: true, get: function() {
|
|
31385
|
+
return m[k];
|
|
31386
|
+
} };
|
|
31387
|
+
}
|
|
31388
|
+
Object.defineProperty(o, k2, desc);
|
|
31389
|
+
} : function(o, m, k, k2) {
|
|
31390
|
+
if (k2 === void 0) k2 = k;
|
|
31391
|
+
o[k2] = m[k];
|
|
31392
|
+
});
|
|
31393
|
+
var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
|
|
31394
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
31395
|
+
} : function(o, v) {
|
|
31396
|
+
o["default"] = v;
|
|
31397
|
+
});
|
|
31398
|
+
var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
|
|
31399
|
+
var ownKeys = function(o) {
|
|
31400
|
+
ownKeys = Object.getOwnPropertyNames || function(o2) {
|
|
31401
|
+
var ar = [];
|
|
31402
|
+
for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
|
|
31403
|
+
return ar;
|
|
31404
|
+
};
|
|
31405
|
+
return ownKeys(o);
|
|
31406
|
+
};
|
|
31407
|
+
return function(mod) {
|
|
31408
|
+
if (mod && mod.__esModule) return mod;
|
|
31409
|
+
var result = {};
|
|
31410
|
+
if (mod != null) {
|
|
31411
|
+
for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31412
|
+
}
|
|
31413
|
+
__setModuleDefault(result, mod);
|
|
31414
|
+
return result;
|
|
31415
|
+
};
|
|
31416
|
+
}();
|
|
31340
31417
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
31341
31418
|
exports2.runExecLoop = runExecLoop2;
|
|
31419
|
+
var path17 = __importStar(require("path"));
|
|
31342
31420
|
var WorkspaceLoader_1 = require_WorkspaceLoader();
|
|
31343
31421
|
var RunStateStore_1 = require_RunStateStore();
|
|
31344
31422
|
var PipelineRunner_1 = require_PipelineRunner();
|
|
@@ -31353,6 +31431,7 @@ var require_execEngine = __commonJS({
|
|
|
31353
31431
|
var WorkspaceSchema_1 = require_WorkspaceSchema();
|
|
31354
31432
|
var artifactLanguage_1 = require_artifactLanguage();
|
|
31355
31433
|
var strictMode_1 = require_strictMode();
|
|
31434
|
+
var inheritedContext_1 = require_inheritedContext();
|
|
31356
31435
|
var promptComposer_1 = require_promptComposer();
|
|
31357
31436
|
var projectInstructions_1 = require_projectInstructions();
|
|
31358
31437
|
var types_1 = require_types();
|
|
@@ -31553,7 +31632,11 @@ var require_execEngine = __commonJS({
|
|
|
31553
31632
|
const skillText = prompt2.text;
|
|
31554
31633
|
const env = ws.envResolver.resolveLayered(ws.config.environment ?? {}, agent.env ?? {});
|
|
31555
31634
|
const contextStr = Object.entries(state.context).map(([k, v]) => `${k}=${v}`).join(" ");
|
|
31556
|
-
const
|
|
31635
|
+
const epicRoot = path17.relative(root, (0, EpicScaffold_1.epicsRoot)(root, ws.config)).split(path17.sep).join("/");
|
|
31636
|
+
const inherited = state.context.from_epic ? `
|
|
31637
|
+
|
|
31638
|
+
About these inputs: ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}` : "";
|
|
31639
|
+
const userMessage = opts.message ?? (contextStr ? contextStr + inherited : `Execute step: ${agentId}`);
|
|
31557
31640
|
if (opts.dryRun) {
|
|
31558
31641
|
hooks.onDryRunPreview?.({
|
|
31559
31642
|
skills: skillIds.join(", "),
|
|
@@ -32094,6 +32177,7 @@ var require_builtinWorkflows = __commonJS({
|
|
|
32094
32177
|
var path17 = __importStar(require("path"));
|
|
32095
32178
|
var artifactLanguage_1 = require_artifactLanguage();
|
|
32096
32179
|
var strictMode_1 = require_strictMode();
|
|
32180
|
+
var inheritedContext_1 = require_inheritedContext();
|
|
32097
32181
|
var models_1 = require_models();
|
|
32098
32182
|
var templateRenderer_1 = require_templateRenderer();
|
|
32099
32183
|
var PHASES = [
|
|
@@ -32890,7 +32974,7 @@ The user invoked you with epic id \`$ARGUMENTS\`.
|
|
|
32890
32974
|
1. Read \`${epicRoot}/$ARGUMENTS/state.json\` to understand the current run state.
|
|
32891
32975
|
- If the step has \`feedback\` from a prior rejection, address it explicitly in this revision.
|
|
32892
32976
|
- Check \`history\` entries for rejection reasons and context.
|
|
32893
|
-
2. Read \`${epicRoot}/$ARGUMENTS/inputs.json\` for capability inputs (Jira ticket, Figma URL, files glob, GitHub repo, etc.).
|
|
32977
|
+
2. Read \`${epicRoot}/$ARGUMENTS/inputs.json\` for capability inputs (Jira ticket, Figma URL, files glob, GitHub repo, etc.). ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}
|
|
32894
32978
|
${artifactInstruction}
|
|
32895
32979
|
4. When finished, summarize what you produced and tell the user to click **"Mark step done"** in the AIDLC panel to advance the pipeline.
|
|
32896
32980
|
|
|
@@ -33308,6 +33392,7 @@ var require_commandModel = __commonJS({
|
|
|
33308
33392
|
var path17 = __importStar(require("path"));
|
|
33309
33393
|
var artifactLanguage_1 = require_artifactLanguage();
|
|
33310
33394
|
var strictMode_1 = require_strictMode();
|
|
33395
|
+
var inheritedContext_1 = require_inheritedContext();
|
|
33311
33396
|
var commandBodyFreshness_1 = require_commandBodyFreshness();
|
|
33312
33397
|
var WorkspaceSchema_1 = require_WorkspaceSchema();
|
|
33313
33398
|
var runProgress_1 = require_runProgress();
|
|
@@ -33466,7 +33551,7 @@ Claude \u2014 but still follow the structural contract below.
|
|
|
33466
33551
|
|
|
33467
33552
|
1. Read \`${epicRoot}/<epic>/state.json\` for prior feedback/history and address
|
|
33468
33553
|
any rejection reasons in this revision.
|
|
33469
|
-
2. Read \`${epicRoot}/<epic>/inputs.json\` for capability inputs.
|
|
33554
|
+
2. Read \`${epicRoot}/<epic>/inputs.json\` for capability inputs. ${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}
|
|
33470
33555
|
3. Before writing, read the blank template for that artifact at
|
|
33471
33556
|
\`.aidlc/aidlc-templates/<templatesId>/<FILE>\` and follow its structure \u2014
|
|
33472
33557
|
\`<templatesId>\` is the pipeline's \`derived_from\` when it has one (a
|
|
@@ -33509,7 +33594,7 @@ procedure exactly as \`/aidlc <epic> ${phase.id}\` would:
|
|
|
33509
33594
|
ones \u2014 and only fall back to \`.claude/skills/<id>.md\` and
|
|
33510
33595
|
\`.claude/agents/<id>.md\` when none is declared. Adopt them (unless the
|
|
33511
33596
|
active standard is \`none\`), then follow the structural contract: read
|
|
33512
|
-
state/inputs, write to
|
|
33597
|
+
state/inputs (${(0, inheritedContext_1.inheritedContextNote)(epicRoot)}), write to
|
|
33513
33598
|
\`${epicRoot}/<epic>/artifacts/${phase.artifact}\` (or the step's declared
|
|
33514
33599
|
artifact), and tell the user to click **"Mark step done"**.
|
|
33515
33600
|
|
|
@@ -34032,12 +34117,12 @@ var require_dist = __commonJS({
|
|
|
34032
34117
|
"use strict";
|
|
34033
34118
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
34034
34119
|
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.pipelineRecipeLabel = 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;
|
|
34035
|
-
exports2.
|
|
34036
|
-
exports2.
|
|
34037
|
-
exports2.
|
|
34038
|
-
exports2.
|
|
34039
|
-
exports2.
|
|
34040
|
-
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 = 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 = void 0;
|
|
34120
|
+
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.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 = void 0;
|
|
34121
|
+
exports2.RECENT_EPICS_KEY = exports2.EPIC_LIST_FLAT_KEY = exports2.EPIC_SORT_KEY = exports2.ACTIVE_EPIC_KEY = exports2.writeUserEpicIdPrefix = exports2.userConfigPath = exports2.updateUserConfig = 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 = void 0;
|
|
34122
|
+
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.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 = void 0;
|
|
34123
|
+
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.unchangedProduces = exports2.snapshotProduces = exports2.checkBudget = exports2.weighStepProgress = exports2.isActiveStatus = exports2.isStepOptional = exports2.isRunComplete = exports2.deriveRunProgress = exports2.PipelineRunError = exports2.retryAutoReview = exports2.submitAutoReviewVerdict = exports2.dirtyUpstreamOf = exports2.rerunApprovedStep = exports2.canRerunApprovedStep = 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 = void 0;
|
|
34124
|
+
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 = 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 = void 0;
|
|
34125
|
+
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 = 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 = void 0;
|
|
34041
34126
|
var WorkspaceSchema_1 = require_WorkspaceSchema();
|
|
34042
34127
|
Object.defineProperty(exports2, "WorkspaceSchema", { enumerable: true, get: function() {
|
|
34043
34128
|
return WorkspaceSchema_1.WorkspaceSchema;
|
|
@@ -34248,6 +34333,9 @@ var require_dist = __commonJS({
|
|
|
34248
34333
|
Object.defineProperty(exports2, "followUpChildId", { enumerable: true, get: function() {
|
|
34249
34334
|
return FollowUps_1.followUpChildId;
|
|
34250
34335
|
} });
|
|
34336
|
+
Object.defineProperty(exports2, "combinedParentId", { enumerable: true, get: function() {
|
|
34337
|
+
return FollowUps_1.combinedParentId;
|
|
34338
|
+
} });
|
|
34251
34339
|
Object.defineProperty(exports2, "openManifestFollowUp", { enumerable: true, get: function() {
|
|
34252
34340
|
return FollowUps_1.openManifestFollowUp;
|
|
34253
34341
|
} });
|
|
@@ -34575,6 +34663,13 @@ var require_dist = __commonJS({
|
|
|
34575
34663
|
Object.defineProperty(exports2, "strictModeSection", { enumerable: true, get: function() {
|
|
34576
34664
|
return strictMode_1.strictModeSection;
|
|
34577
34665
|
} });
|
|
34666
|
+
var inheritedContext_1 = require_inheritedContext();
|
|
34667
|
+
Object.defineProperty(exports2, "INHERITED_CONTEXT_MARKER", { enumerable: true, get: function() {
|
|
34668
|
+
return inheritedContext_1.INHERITED_CONTEXT_MARKER;
|
|
34669
|
+
} });
|
|
34670
|
+
Object.defineProperty(exports2, "inheritedContextNote", { enumerable: true, get: function() {
|
|
34671
|
+
return inheritedContext_1.inheritedContextNote;
|
|
34672
|
+
} });
|
|
34578
34673
|
var epicTags_1 = require_epicTags();
|
|
34579
34674
|
Object.defineProperty(exports2, "EPIC_TAGS_KEY", { enumerable: true, get: function() {
|
|
34580
34675
|
return epicTags_1.EPIC_TAGS_KEY;
|
|
@@ -43796,7 +43891,7 @@ var require_package = __commonJS({
|
|
|
43796
43891
|
"package.json"(exports2, module2) {
|
|
43797
43892
|
module2.exports = {
|
|
43798
43893
|
name: "@delete101020/aidlc",
|
|
43799
|
-
version: "4.0.
|
|
43894
|
+
version: "4.0.38",
|
|
43800
43895
|
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.",
|
|
43801
43896
|
license: "MIT",
|
|
43802
43897
|
repository: {
|
|
@@ -50515,7 +50610,7 @@ Run ${import_chalk15.default.cyan(`${runCmd} ${epicId}`)} in Claude to begin.`);
|
|
|
50515
50610
|
throw err;
|
|
50516
50611
|
}
|
|
50517
50612
|
});
|
|
50518
|
-
cmd.command("follow-up <parentEpic>").description("Open a follow-up epic of <parentEpic> to park work found while doing it \u2014 nothing runs yet").requiredOption("--title <title>", "what the follow-up is").option("--desc <description>", "the note: what turned up, and why it is not part of the parent").option("--recipe <id>", "recipe for the follow-up (default: the one the parent runs on)").option("--pipeline <id>", "use an existing pipeline as-is (default: the parent's workflow)").option("--from <pipelineId>", "override the recipe's source pipeline").option("--epic <id>", "id for the follow-up (default: <parentEpic>-F<n>)").option("--input <kv>", "capability input as key=value (repeatable)", collectKv, []).option("--tag <tag>", "extra tag (repeatable) \u2014 added to the ones inherited from the parent", collectKv, []).option("--no-inherit-tags", "do not copy the parent's tags").option("--no-strict", "work to the size of this epic \u2014 no invented NFR / risk / alternatives sections").option("--json", "output the result as JSON").action((parentEpic, opts, actionCmd) => {
|
|
50613
|
+
cmd.command("follow-up <parentEpic>").description("Open a follow-up epic of <parentEpic> to park work found while doing it \u2014 nothing runs yet").requiredOption("--title <title>", "what the follow-up is").option("--desc <description>", "the note: what turned up, and why it is not part of the parent").option("--recipe <id>", "recipe for the follow-up (default: the one the parent runs on)").option("--pipeline <id>", "use an existing pipeline as-is (default: the parent's workflow)").option("--from <pipelineId>", "override the recipe's source pipeline").option("--epic <id>", "id for the follow-up (default: <parentEpic>-F<n>)").option("--also <epic>", "another epic this one also follows (repeatable) \u2014 linked and read for context; <parentEpic> stays the one it is grouped under", collectKv, []).option("--input <kv>", "capability input as key=value (repeatable)", collectKv, []).option("--tag <tag>", "extra tag (repeatable) \u2014 added to the ones inherited from the parent", collectKv, []).option("--no-inherit-tags", "do not copy the parent's tags").option("--no-strict", "work to the size of this epic \u2014 no invented NFR / risk / alternatives sections").option("--json", "output the result as JSON").action((parentEpic, opts, actionCmd) => {
|
|
50519
50614
|
const root = resolveWorkspaceRoot(actionCmd);
|
|
50520
50615
|
const doc = requireYaml(root);
|
|
50521
50616
|
if (opts.recipe && opts.pipeline) {
|
|
@@ -50532,11 +50627,19 @@ Run ${import_chalk15.default.cyan(`${runCmd} ${epicId}`)} in Claude to begin.`);
|
|
|
50532
50627
|
}
|
|
50533
50628
|
let defaults;
|
|
50534
50629
|
try {
|
|
50535
|
-
defaults = (0, import_core19.followUpDefaults)(root, doc, parentEpic);
|
|
50630
|
+
defaults = (0, import_core19.followUpDefaults)(root, doc, parentEpic, opts.also.map((id) => id.trim()));
|
|
50536
50631
|
} catch (err) {
|
|
50537
50632
|
console.error(import_chalk15.default.red(err instanceof Error ? err.message : String(err)));
|
|
50538
50633
|
process.exit(1);
|
|
50539
50634
|
}
|
|
50635
|
+
for (const other of opts.also) {
|
|
50636
|
+
try {
|
|
50637
|
+
(0, import_core19.followUpDefaults)(root, doc, other.trim());
|
|
50638
|
+
} catch (err) {
|
|
50639
|
+
console.error(import_chalk15.default.red(err instanceof Error ? err.message : String(err)));
|
|
50640
|
+
process.exit(1);
|
|
50641
|
+
}
|
|
50642
|
+
}
|
|
50540
50643
|
const epicId = opts.epic?.trim() || defaults.epicId;
|
|
50541
50644
|
const target = opts.pipeline ? { pipeline: opts.pipeline } : opts.recipe ? { recipe: opts.recipe } : defaults.target?.kind === "pipeline" ? { pipeline: defaults.target.id } : defaults.target ? { recipe: defaults.target.id } : void 0;
|
|
50542
50645
|
if (!target) {
|
|
@@ -50563,7 +50666,7 @@ Run ${import_chalk15.default.cyan(`${runCmd} ${epicId}`)} in Claude to begin.`);
|
|
|
50563
50666
|
description: opts.desc?.trim() ?? "",
|
|
50564
50667
|
target: { kind: "pipeline", id: pipelineCfg.id },
|
|
50565
50668
|
agents,
|
|
50566
|
-
inputs: (0, import_core19.withFollowUpProvenance)(inputs, parentEpic, defaults.key),
|
|
50669
|
+
inputs: (0, import_core19.withFollowUpProvenance)(inputs, parentEpic, defaults.key, opts.also),
|
|
50567
50670
|
pipeline: pipelineCfg,
|
|
50568
50671
|
strictMode: opts.strict,
|
|
50569
50672
|
tags
|
|
@@ -50574,12 +50677,14 @@ Run ${import_chalk15.default.cyan(`${runCmd} ${epicId}`)} in Claude to begin.`);
|
|
|
50574
50677
|
epicDir,
|
|
50575
50678
|
pipeline: pipelineCfg.id,
|
|
50576
50679
|
fromEpic: parentEpic,
|
|
50680
|
+
alsoFrom: opts.also,
|
|
50577
50681
|
followUpKey: defaults.key,
|
|
50578
50682
|
tags
|
|
50579
50683
|
}, null, 2));
|
|
50580
50684
|
return;
|
|
50581
50685
|
}
|
|
50582
|
-
|
|
50686
|
+
const others = opts.also.length > 0 ? ` (also ${opts.also.map((id) => import_chalk15.default.bold(id)).join(", ")})` : "";
|
|
50687
|
+
console.log(import_chalk15.default.green("\u2714") + ` Opened follow-up ${import_chalk15.default.bold(epicId)} of ${import_chalk15.default.bold(parentEpic)}${others}`);
|
|
50583
50688
|
console.log(import_chalk15.default.dim(` Pipeline: ${pipelineCfg.id}`));
|
|
50584
50689
|
console.log(import_chalk15.default.dim(` Steps: ${agents.join(" \u2192 ")}`));
|
|
50585
50690
|
console.log(import_chalk15.default.dim(` Dir: ${epicDir}`));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@delete101020/aidlc",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.38",
|
|
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": {
|