@delete101020/aidlc 4.0.31 → 4.0.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/bundle.js +97 -16
  2. package/package.json +1 -1
package/dist/bundle.js CHANGED
@@ -19802,6 +19802,12 @@ var require_WorkspaceSchema = __commonJS({
19802
19802
  /** Skill ids — every entry must reference a skill in the workspace `skills` list. */
19803
19803
  skills: zod_1.z.array(zod_1.z.string().min(1)).min(1, "Agent must reference at least one skill"),
19804
19804
  model: zod_1.z.string().optional(),
19805
+ /**
19806
+ * Models the user may pick between on the epic card (e.g. `[sonnet, opus]`),
19807
+ * `model` preselected. For steps where two tiers are both good enough and
19808
+ * the trade is cost against depth. Omitted = the agent runs on `model` only.
19809
+ */
19810
+ models: zod_1.z.array(zod_1.z.string().min(1)).optional(),
19805
19811
  // `default` keeps meaning Claude Code: renaming it to `claude` would
19806
19812
  // invalidate every workspace.yaml already on disk and buy nothing
19807
19813
  // (MULTI_PROVIDER_ALIGNMENT.md P0/D1). A closed enum is what lets
@@ -19905,6 +19911,11 @@ var require_WorkspaceSchema = __commonJS({
19905
19911
  * once, as before.
19906
19912
  */
19907
19913
  default_skill: zod_1.z.string().min(1).optional(),
19914
+ /**
19915
+ * Model this step runs on by default, over the agent's `model`. Joins the
19916
+ * agent's `models` as one more choice on the card; a pick there wins.
19917
+ */
19918
+ model: zod_1.z.string().min(1).optional(),
19908
19919
  /** Artifact paths required from upstream. Gate-checked before work AND on Mark step done. */
19909
19920
  requires: zod_1.z.array(zod_1.z.string().min(1)).default([]),
19910
19921
  /**
@@ -20067,6 +20078,7 @@ var require_WorkspaceSchema = __commonJS({
20067
20078
  ...typeof obj.description === "string" && obj.description.trim() ? { description: obj.description.trim() } : {},
20068
20079
  skills,
20069
20080
  ...typeof obj.default_skill === "string" && skills?.includes(obj.default_skill) ? { default_skill: obj.default_skill } : {},
20081
+ ...typeof obj.model === "string" && obj.model.trim() ? { model: obj.model.trim() } : {},
20070
20082
  enabled: typeof obj.enabled === "boolean" ? obj.enabled : true,
20071
20083
  optional: obj.optional === true,
20072
20084
  produces,
@@ -20448,6 +20460,9 @@ var require_PipelineAssembler = __commonJS({
20448
20460
  if (norm.default_skill) {
20449
20461
  step.default_skill = norm.default_skill;
20450
20462
  }
20463
+ if (norm.model) {
20464
+ step.model = norm.model;
20465
+ }
20451
20466
  if (auto_review_runner) {
20452
20467
  step.auto_review_runner = auto_review_runner;
20453
20468
  }
@@ -20794,6 +20809,9 @@ ${raw.slice(0, 200)}`);
20794
20809
  if (norm.default_skill) {
20795
20810
  step.default_skill = norm.default_skill;
20796
20811
  }
20812
+ if (norm.model) {
20813
+ step.model = norm.model;
20814
+ }
20797
20815
  if (norm.auto_review_runner) {
20798
20816
  step.auto_review_runner = norm.auto_review_runner;
20799
20817
  }
@@ -21237,6 +21255,7 @@ var require_PipelineRunner = __commonJS({
21237
21255
  exports2.rejectStep = rejectStep3;
21238
21256
  exports2.rerunStep = rerunStep3;
21239
21257
  exports2.chooseStepSkill = chooseStepSkill;
21258
+ exports2.chooseStepModel = chooseStepModel;
21240
21259
  exports2.requestStepUpdate = requestStepUpdate2;
21241
21260
  exports2.dirtyUpstreamOf = dirtyUpstreamOf2;
21242
21261
  exports2.canRerunApprovedStep = canRerunApprovedStep;
@@ -21522,7 +21541,8 @@ var require_PipelineRunner = __commonJS({
21522
21541
  revision: nextStep.revision,
21523
21542
  reason: verdict.reason,
21524
21543
  sentBackToIdx: idx,
21525
- ...nextStep.skill ? { skill: nextStep.skill } : {}
21544
+ ...nextStep.skill ? { skill: nextStep.skill } : {},
21545
+ ...nextStep.chosenModel ? { model: nextStep.chosenModel } : {}
21526
21546
  });
21527
21547
  next.status = "running";
21528
21548
  settleOptionalRejection(next, idx, pipeline);
@@ -21600,7 +21620,8 @@ var require_PipelineRunner = __commonJS({
21600
21620
  revision: next2.steps[idx].revision,
21601
21621
  reason,
21602
21622
  sentBackToIdx: targetIdx,
21603
- ...next2.steps[idx].skill ? { skill: next2.steps[idx].skill } : {}
21623
+ ...next2.steps[idx].skill ? { skill: next2.steps[idx].skill } : {},
21624
+ ...next2.steps[idx].chosenModel ? { model: next2.steps[idx].chosenModel } : {}
21604
21625
  });
21605
21626
  const usesDag = pipeline ? pipeline.steps.map(WorkspaceSchema_1.normalizeStep).some((s) => s.depends_on.length > 0) : false;
21606
21627
  const targetIdxN = targetIdx;
@@ -21664,7 +21685,8 @@ var require_PipelineRunner = __commonJS({
21664
21685
  revision: step.revision,
21665
21686
  reason,
21666
21687
  sentBackToIdx: idx,
21667
- ...step.skill ? { skill: step.skill } : {}
21688
+ ...step.skill ? { skill: step.skill } : {},
21689
+ ...step.chosenModel ? { model: step.chosenModel } : {}
21668
21690
  })
21669
21691
  };
21670
21692
  next.status = "running";
@@ -21723,6 +21745,19 @@ var require_PipelineRunner = __commonJS({
21723
21745
  next.steps[stepIdx] = { ...target, skill };
21724
21746
  return next;
21725
21747
  }
21748
+ function chooseStepModel(args) {
21749
+ const { state, stepIdx, models, model } = args;
21750
+ if (!Number.isInteger(stepIdx) || stepIdx < 0 || stepIdx >= state.steps.length) {
21751
+ throw new PipelineRunError3(`Invalid stepIdx ${stepIdx}`);
21752
+ }
21753
+ const target = state.steps[stepIdx];
21754
+ if (!models?.includes(model)) {
21755
+ throw new PipelineRunError3(`Model "${model}" is not one agent "${target.agent}" offers (${models?.join(", ") || "none"}).`);
21756
+ }
21757
+ const next = clone(state);
21758
+ next.steps[stepIdx] = { ...target, chosenModel: model };
21759
+ return next;
21760
+ }
21726
21761
  function requestStepUpdate2(args) {
21727
21762
  const { state, pipeline, stepIdx, feedback } = args;
21728
21763
  if (!Number.isInteger(stepIdx) || stepIdx < 0 || stepIdx >= state.steps.length) {
@@ -21940,7 +21975,8 @@ var require_PipelineRunner = __commonJS({
21940
21975
  kind: "approve",
21941
21976
  at: finishedAt,
21942
21977
  revision: approved.revision,
21943
- ...approved.skill ? { skill: approved.skill } : {}
21978
+ ...approved.skill ? { skill: approved.skill } : {},
21979
+ ...approved.chosenModel ? { model: approved.chosenModel } : {}
21944
21980
  })
21945
21981
  };
21946
21982
  const normalized = pipeline.steps.map(WorkspaceSchema_1.normalizeStep);
@@ -28719,11 +28755,20 @@ var require_models = __commonJS({
28719
28755
  "use strict";
28720
28756
  Object.defineProperty(exports2, "__esModule", { value: true });
28721
28757
  exports2.CLAUDE_TIER_ALIASES = exports2.FAST_MODEL = exports2.CODING_MODEL = exports2.PLANNING_MODEL = void 0;
28758
+ exports2.pickAgentModel = pickAgentModel;
28759
+ exports2.stepModelOptions = stepModelOptions;
28722
28760
  exports2.isClaudeTierAlias = isClaudeTierAlias2;
28723
28761
  exports2.resolveProviderModel = resolveProviderModel2;
28724
28762
  exports2.PLANNING_MODEL = "opus";
28725
28763
  exports2.CODING_MODEL = "sonnet";
28726
28764
  exports2.FAST_MODEL = "haiku";
28765
+ function pickAgentModel(agent, chosen) {
28766
+ return chosen && agent.models?.includes(chosen) ? chosen : agent.model ?? agent.models?.[0];
28767
+ }
28768
+ function stepModelOptions(agent, stepModel) {
28769
+ const models = [.../* @__PURE__ */ new Set([...agent.models ?? [], ...stepModel ? [stepModel] : []])];
28770
+ return { model: stepModel ?? agent.model, ...models.length > 1 ? { models } : {} };
28771
+ }
28727
28772
  exports2.CLAUDE_TIER_ALIASES = [exports2.PLANNING_MODEL, exports2.CODING_MODEL, exports2.FAST_MODEL];
28728
28773
  function isClaudeTierAlias2(model) {
28729
28774
  return !!model && exports2.CLAUDE_TIER_ALIASES.includes(model.trim().toLowerCase());
@@ -31489,6 +31534,8 @@ var require_execEngine = __commonJS({
31489
31534
  const alternatives = norm ? (0, WorkspaceSchema_1.stepSkillAlternatives)(norm) : void 0;
31490
31535
  const chosen = opts.skill && alternatives?.options.includes(opts.skill) ? opts.skill : stepRec.skill;
31491
31536
  const skillIds = norm ? (0, WorkspaceSchema_1.resolveStepSkills)(norm, agent.skills, chosen) : [...agent.skills];
31537
+ const modelOpts = (0, models_1.stepModelOptions)(agent, norm?.model);
31538
+ const agentModel = (0, models_1.pickAgentModel)(modelOpts, stepRec.chosenModel);
31492
31539
  let runner;
31493
31540
  let prompt2;
31494
31541
  try {
@@ -31522,19 +31569,19 @@ var require_execEngine = __commonJS({
31522
31569
  agent: agentId,
31523
31570
  revision: stepRec.revision,
31524
31571
  skills: skillIds,
31525
- model: agent.model,
31572
+ model: agentModel,
31526
31573
  context: userMessage,
31527
31574
  dirtyUpstream: (0, PipelineRunner_1.dirtyUpstreamOf)({ state, pipeline, stepIdx }).map((d) => ({ stepIdx: d.stepIdx, step: d.step, byStep: d.dirty.byStep }))
31528
31575
  });
31529
31576
  const aliases = (0, pricing_1.providerAliases)(ws.config.providers, agent.runner);
31530
- const resolvedModel = (0, models_1.resolveProviderModel)(agent.runner, agent.model, aliases);
31577
+ const resolvedModel = (0, models_1.resolveProviderModel)(agent.runner, agentModel, aliases);
31531
31578
  const producedBefore = (0, producesSnapshot_1.snapshotProduces)({ state, pipeline, workspaceRoot: root, stepIdx });
31532
31579
  const result = await runner.run({
31533
31580
  skill: skillText,
31534
31581
  env,
31535
31582
  args: userMessage ? [userMessage] : [],
31536
31583
  workspaceRoot: root,
31537
- model: agent.model,
31584
+ model: agentModel,
31538
31585
  modelAliases: aliases,
31539
31586
  onOutput: (chunk) => hooks.onOutput?.(chunk),
31540
31587
  onError: (chunk) => hooks.onErrorOutput?.(chunk),
@@ -31563,6 +31610,9 @@ var require_execEngine = __commonJS({
31563
31610
  if (alternatives) {
31564
31611
  rec.skill = skillIds[0];
31565
31612
  }
31613
+ if (modelOpts.models) {
31614
+ rec.chosenModel = agentModel;
31615
+ }
31566
31616
  rec.usage = result.usage;
31567
31617
  if (typeof result.costUsd === "number") {
31568
31618
  rec.costUsd = result.costUsd;
@@ -31571,7 +31621,7 @@ var require_execEngine = __commonJS({
31571
31621
  const est = (0, pricing_1.estimateCostUsd)({
31572
31622
  table: (0, pricing_1.ratesFromConfig)(ws.config.providers),
31573
31623
  provider: agent.runner,
31574
- model: resolvedModel ?? agent.model,
31624
+ model: resolvedModel ?? agentModel,
31575
31625
  usage: result.usage
31576
31626
  });
31577
31627
  if (est) {
@@ -31806,13 +31856,13 @@ var require_runReport = __commonJS({
31806
31856
  return history.map((h) => {
31807
31857
  switch (h.kind) {
31808
31858
  case "reject":
31809
- return ` - \u2718 rejected (rev ${h.revision}${h.skill ? `, ${h.skill}` : ""})${h.reason ? `: ${h.reason}` : ""}`;
31859
+ return ` - \u2718 rejected (rev ${h.revision}${h.skill ? `, ${h.skill}` : ""}${h.model ? `, ${h.model}` : ""})${h.reason ? `: ${h.reason}` : ""}`;
31810
31860
  case "rerun":
31811
31861
  return ` - \u21BA rerun \u2192 rev ${h.revision}${h.feedback ? ` (feedback: ${h.feedback})` : ""}`;
31812
31862
  case "auto_review":
31813
31863
  return ` - \u{1F916} auto-review ${h.decision} (rev ${h.revision}): ${h.reason}`;
31814
31864
  case "approve":
31815
- return ` - \u2714 approved (rev ${h.revision}${h.skill ? `, ${h.skill}` : ""})`;
31865
+ return ` - \u2714 approved (rev ${h.revision}${h.skill ? `, ${h.skill}` : ""}${h.model ? `, ${h.model}` : ""})`;
31816
31866
  case "undo":
31817
31867
  return ` - \u21B6 mark-done undone (rev ${h.revision}, was ${h.from})`;
31818
31868
  default:
@@ -33985,9 +34035,9 @@ var require_dist = __commonJS({
33985
34035
  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.MANUAL_FOLLOW_UP_KEY_PREFIX = exports2.followUpDefaults = exports2.nextManualFollowUpKey = exports2.withFollowUpProvenance = 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 = exports2.openIncidentEpic = void 0;
33986
34036
  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 = 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 = void 0;
33987
34037
  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.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.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 = void 0;
33988
- 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.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.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 = void 0;
33989
- 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 = 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 = void 0;
33990
- 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 = void 0;
34038
+ 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.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 = void 0;
34039
+ 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 = 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 = void 0;
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;
33991
34041
  var WorkspaceSchema_1 = require_WorkspaceSchema();
33992
34042
  Object.defineProperty(exports2, "WorkspaceSchema", { enumerable: true, get: function() {
33993
34043
  return WorkspaceSchema_1.WorkspaceSchema;
@@ -34694,6 +34744,9 @@ var require_dist = __commonJS({
34694
34744
  Object.defineProperty(exports2, "chooseStepSkill", { enumerable: true, get: function() {
34695
34745
  return PipelineRunner_1.chooseStepSkill;
34696
34746
  } });
34747
+ Object.defineProperty(exports2, "chooseStepModel", { enumerable: true, get: function() {
34748
+ return PipelineRunner_1.chooseStepModel;
34749
+ } });
34697
34750
  Object.defineProperty(exports2, "canRerunApprovedStep", { enumerable: true, get: function() {
34698
34751
  return PipelineRunner_1.canRerunApprovedStep;
34699
34752
  } });
@@ -34886,6 +34939,12 @@ var require_dist = __commonJS({
34886
34939
  Object.defineProperty(exports2, "resolveProviderModel", { enumerable: true, get: function() {
34887
34940
  return models_1.resolveProviderModel;
34888
34941
  } });
34942
+ Object.defineProperty(exports2, "pickAgentModel", { enumerable: true, get: function() {
34943
+ return models_1.pickAgentModel;
34944
+ } });
34945
+ Object.defineProperty(exports2, "stepModelOptions", { enumerable: true, get: function() {
34946
+ return models_1.stepModelOptions;
34947
+ } });
34889
34948
  var globalDefaults_1 = require_globalDefaults();
34890
34949
  Object.defineProperty(exports2, "installGlobalDefaults", { enumerable: true, get: function() {
34891
34950
  return globalDefaults_1.installGlobalDefaults;
@@ -43737,7 +43796,7 @@ var require_package = __commonJS({
43737
43796
  "package.json"(exports2, module2) {
43738
43797
  module2.exports = {
43739
43798
  name: "@delete101020/aidlc",
43740
- version: "4.0.31",
43799
+ version: "4.0.33",
43741
43800
  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.",
43742
43801
  license: "MIT",
43743
43802
  repository: {
@@ -49497,6 +49556,7 @@ function listEpics(workspaceRoot, doc) {
49497
49556
  status: asStatus(parsed.status),
49498
49557
  createdAt: typeof parsed.createdAt === "string" ? parsed.createdAt : "",
49499
49558
  tags: (0, import_core17.readEpicTags)(parsed),
49559
+ archived: parsed.archived === true,
49500
49560
  pipeline: pipelineId,
49501
49561
  agents: Array.isArray(parsed.agents) ? parsed.agents.map(String) : [],
49502
49562
  currentStep: typeof parsed.currentStep === "number" ? parsed.currentStep : 0,
@@ -50306,10 +50366,10 @@ function registerEpic(program3) {
50306
50366
  'Filter by tag \u2014 repeatable, and an epic must carry all of them. Case and accents are folded, so --tag "thanh to\xE1n" finds THANH-TOAN',
50307
50367
  collectKv,
50308
50368
  []
50309
- ).action((opts, actionCmd) => {
50369
+ ).option("--archived", "List only archived epics (they are hidden otherwise)").action((opts, actionCmd) => {
50310
50370
  const root = resolveWorkspaceRoot(actionCmd);
50311
50371
  const doc = readYaml(root);
50312
- let epics = listEpics(root, doc);
50372
+ let epics = listEpics(root, doc).filter((e) => e.archived === (opts.archived === true));
50313
50373
  if (opts.status) {
50314
50374
  epics = epics.filter((e) => e.status === opts.status);
50315
50375
  }
@@ -50845,6 +50905,27 @@ ${plan.length} pipeline(s) would move. Re-run without --dry-run.`));
50845
50905
  console.log(import_chalk15.default.green("\u2714") + ` ${epicId}: strict_mode ${truthy.includes(v)}`);
50846
50906
  console.log(import_chalk15.default.dim(" Takes effect on the next phase run \u2014 nothing already written changes."));
50847
50907
  });
50908
+ for (const archived of [true, false]) {
50909
+ cmd.command(`${archived ? "archive" : "unarchive"} <epicId>`).description(archived ? "Hide an epic from `epic list` and the Epics panel (any status; nothing is deleted)" : "Bring an archived epic back to `epic list` and the Epics panel").action((epicId, _opts, actionCmd) => {
50910
+ const root = resolveWorkspaceRoot(actionCmd);
50911
+ const file = path12.join((0, import_core19.epicsRoot)(root, readYaml(root)), epicId, "state.json");
50912
+ let state;
50913
+ try {
50914
+ state = JSON.parse(fs10.readFileSync(file, "utf8"));
50915
+ } catch (err) {
50916
+ console.error(import_chalk15.default.red(`Could not read ${file}: ${err instanceof Error ? err.message : String(err)}`));
50917
+ process.exit(1);
50918
+ return;
50919
+ }
50920
+ if (archived) {
50921
+ state.archived = true;
50922
+ } else {
50923
+ delete state.archived;
50924
+ }
50925
+ fs10.writeFileSync(file, JSON.stringify(state, null, 2) + "\n", "utf8");
50926
+ console.log(import_chalk15.default.green("\u2714") + ` ${epicId} ${archived ? "archived" : "unarchived"}`);
50927
+ });
50928
+ }
50848
50929
  const stepCmd = cmd.command("step").description(
50849
50930
  `Add, remove or re-gate a step on a running epic. add/remove update the
50850
50931
  pipeline, the run state and the epic's state.json together; set changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@delete101020/aidlc",
3
- "version": "4.0.31",
3
+ "version": "4.0.33",
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": {