@delete101020/aidlc 4.0.26 → 4.0.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/epic-context.skill.md +9 -2
- package/dist/bundle.js +228 -14
- package/package.json +11 -10
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: epic-context
|
|
3
|
-
description: Load and maintain an epic's compact memory so continuing it (with any agent) is cheap on tokens. Reads docs/epics/<epic>/epic-memory.json FIRST as primary context, appends durable decisions/constraints as you work, and records a reflection on how to prompt/work better next time. Invoke /epic-context <epic> when starting or continuing an epic.
|
|
3
|
+
description: Load and maintain an epic's compact memory so continuing it (with any agent) is cheap on tokens. Reads docs/epics/<epic>/epic-memory.json FIRST as primary context, appends durable decisions/constraints as you work, and records a reflection on how to prompt/work better next time. Invoke /epic-context <epic> when starting or continuing an epic (no id = the active epic from .aidlc/user.yaml).
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# /epic-context — cheap, portable epic memory
|
|
@@ -20,9 +20,16 @@ Each write is auto-attributed (git identity, hostname fallback) + timestamped.
|
|
|
20
20
|
|
|
21
21
|
## Arguments
|
|
22
22
|
|
|
23
|
-
`/epic-context
|
|
23
|
+
`/epic-context [epic]` — e.g. `/epic-context EPIC-001`. Paths are relative to the
|
|
24
24
|
open project: `EPIC_DIR = docs/epics/<epic>`.
|
|
25
25
|
|
|
26
|
+
No id given → use the **active epic**: the `active_epic:` line of
|
|
27
|
+
`.aidlc/user.yaml` (set from the VS Code status bar / Go to Epic, or with
|
|
28
|
+
`aidlc epic use <id>`). Read it with
|
|
29
|
+
`grep -m1 '^active_epic:' .aidlc/user.yaml | sed 's/^active_epic:[[:space:]]*//'`.
|
|
30
|
+
Say which epic you picked in one line. If there is no active epic either, ask
|
|
31
|
+
for the id — don't guess from the epics folder.
|
|
32
|
+
|
|
26
33
|
## On start (continuing an epic)
|
|
27
34
|
|
|
28
35
|
1. **Load memory first**: `$M show "$EPIC_DIR"`.
|
package/dist/bundle.js
CHANGED
|
@@ -30209,8 +30209,9 @@ var require_userConfig = __commonJS({
|
|
|
30209
30209
|
exports2.userConfigPath = userConfigPath;
|
|
30210
30210
|
exports2.readUserConfig = readUserConfig3;
|
|
30211
30211
|
exports2.writeUserEpicIdPrefix = writeUserEpicIdPrefix;
|
|
30212
|
+
exports2.updateUserConfig = updateUserConfig;
|
|
30212
30213
|
exports2.readGitUserName = readGitUserName2;
|
|
30213
|
-
exports2.ensureUserConfigIgnored =
|
|
30214
|
+
exports2.ensureUserConfigIgnored = ensureUserConfigIgnored2;
|
|
30214
30215
|
var child_process_1 = require("child_process");
|
|
30215
30216
|
var fs_1 = __importDefault(require("fs"));
|
|
30216
30217
|
var path_1 = __importDefault(require("path"));
|
|
@@ -30236,15 +30237,22 @@ var require_userConfig = __commonJS({
|
|
|
30236
30237
|
"# Settings for this checkout only \u2014 NOT committed (see .gitignore).",
|
|
30237
30238
|
"# epic_id_prefix is your own two letters, so the epics you open are filed",
|
|
30238
30239
|
"# under you and never collide with a colleague's numbering.",
|
|
30240
|
+
"# active_epic / pinned_epics / recent_epics are your own working set; the",
|
|
30241
|
+
"# extension and `aidlc epic use|pin` keep them, and hand edits are fine.",
|
|
30239
30242
|
""
|
|
30240
30243
|
].join("\n");
|
|
30241
30244
|
function writeUserEpicIdPrefix(root, prefix) {
|
|
30245
|
+
updateUserConfig(root, (doc) => {
|
|
30246
|
+
if (prefix) {
|
|
30247
|
+
doc.epic_id_prefix = prefix.toUpperCase();
|
|
30248
|
+
} else {
|
|
30249
|
+
delete doc.epic_id_prefix;
|
|
30250
|
+
}
|
|
30251
|
+
});
|
|
30252
|
+
}
|
|
30253
|
+
function updateUserConfig(root, mutate) {
|
|
30242
30254
|
const doc = readUserConfig3(root) ?? {};
|
|
30243
|
-
|
|
30244
|
-
doc.epic_id_prefix = prefix.toUpperCase();
|
|
30245
|
-
} else {
|
|
30246
|
-
delete doc.epic_id_prefix;
|
|
30247
|
-
}
|
|
30255
|
+
mutate(doc);
|
|
30248
30256
|
const file = userConfigPath(root);
|
|
30249
30257
|
fs_1.default.mkdirSync(path_1.default.dirname(file), { recursive: true });
|
|
30250
30258
|
if (Object.keys(doc).length === 0) {
|
|
@@ -30267,7 +30275,7 @@ var require_userConfig = __commonJS({
|
|
|
30267
30275
|
return null;
|
|
30268
30276
|
}
|
|
30269
30277
|
}
|
|
30270
|
-
function
|
|
30278
|
+
function ensureUserConfigIgnored2(root) {
|
|
30271
30279
|
const file = path_1.default.join(root, ".gitignore");
|
|
30272
30280
|
try {
|
|
30273
30281
|
const existing = fs_1.default.existsSync(file) ? fs_1.default.readFileSync(file, "utf8") : "";
|
|
@@ -30277,7 +30285,7 @@ var require_userConfig = __commonJS({
|
|
|
30277
30285
|
}
|
|
30278
30286
|
const sep4 = existing === "" || existing.endsWith("\n") ? "" : "\n";
|
|
30279
30287
|
fs_1.default.writeFileSync(file, `${existing}${sep4}
|
|
30280
|
-
# Per-checkout AIDLC settings (epic_id_prefix) \u2014 never shared
|
|
30288
|
+
# Per-checkout AIDLC settings (epic_id_prefix, active/pinned epics) \u2014 never shared
|
|
30281
30289
|
${exports2.USER_CONFIG_IGNORE_LINE}
|
|
30282
30290
|
`, "utf8");
|
|
30283
30291
|
return true;
|
|
@@ -30288,6 +30296,114 @@ ${exports2.USER_CONFIG_IGNORE_LINE}
|
|
|
30288
30296
|
}
|
|
30289
30297
|
});
|
|
30290
30298
|
|
|
30299
|
+
// ../core/dist/loader/epicFocus.js
|
|
30300
|
+
var require_epicFocus = __commonJS({
|
|
30301
|
+
"../core/dist/loader/epicFocus.js"(exports2) {
|
|
30302
|
+
"use strict";
|
|
30303
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
30304
|
+
exports2.RECENT_EPICS_LIMIT = exports2.RECENT_EPICS_KEY = exports2.PINNED_EPICS_KEY = exports2.ACTIVE_EPIC_KEY = void 0;
|
|
30305
|
+
exports2.epicFocusFrom = epicFocusFrom;
|
|
30306
|
+
exports2.readEpicFocus = readEpicFocus2;
|
|
30307
|
+
exports2.pushRecent = pushRecent;
|
|
30308
|
+
exports2.recordEpicOpened = recordEpicOpened;
|
|
30309
|
+
exports2.setActiveEpic = setActiveEpic2;
|
|
30310
|
+
exports2.setEpicPinned = setEpicPinned2;
|
|
30311
|
+
exports2.epicIdFromBranch = epicIdFromBranch;
|
|
30312
|
+
var userConfig_1 = require_userConfig();
|
|
30313
|
+
exports2.ACTIVE_EPIC_KEY = "active_epic";
|
|
30314
|
+
exports2.PINNED_EPICS_KEY = "pinned_epics";
|
|
30315
|
+
exports2.RECENT_EPICS_KEY = "recent_epics";
|
|
30316
|
+
exports2.RECENT_EPICS_LIMIT = 10;
|
|
30317
|
+
function asId(v) {
|
|
30318
|
+
return typeof v === "string" && v.trim() !== "" ? v.trim() : null;
|
|
30319
|
+
}
|
|
30320
|
+
function asIdList(v) {
|
|
30321
|
+
if (!Array.isArray(v)) {
|
|
30322
|
+
return [];
|
|
30323
|
+
}
|
|
30324
|
+
const out2 = [];
|
|
30325
|
+
for (const item of v) {
|
|
30326
|
+
const id = asId(item);
|
|
30327
|
+
if (id && !out2.includes(id)) {
|
|
30328
|
+
out2.push(id);
|
|
30329
|
+
}
|
|
30330
|
+
}
|
|
30331
|
+
return out2;
|
|
30332
|
+
}
|
|
30333
|
+
function epicFocusFrom(doc) {
|
|
30334
|
+
return {
|
|
30335
|
+
active: asId(doc?.[exports2.ACTIVE_EPIC_KEY]),
|
|
30336
|
+
pinned: asIdList(doc?.[exports2.PINNED_EPICS_KEY]),
|
|
30337
|
+
recent: asIdList(doc?.[exports2.RECENT_EPICS_KEY])
|
|
30338
|
+
};
|
|
30339
|
+
}
|
|
30340
|
+
function readEpicFocus2(root) {
|
|
30341
|
+
return epicFocusFrom((0, userConfig_1.readUserConfig)(root));
|
|
30342
|
+
}
|
|
30343
|
+
function pushRecent(list, id, limit = exports2.RECENT_EPICS_LIMIT) {
|
|
30344
|
+
return [id, ...list.filter((x) => x !== id)].slice(0, limit);
|
|
30345
|
+
}
|
|
30346
|
+
function writeList(doc, key, list) {
|
|
30347
|
+
if (list.length > 0) {
|
|
30348
|
+
doc[key] = list;
|
|
30349
|
+
} else {
|
|
30350
|
+
delete doc[key];
|
|
30351
|
+
}
|
|
30352
|
+
}
|
|
30353
|
+
function recordEpicOpened(root, id) {
|
|
30354
|
+
(0, userConfig_1.updateUserConfig)(root, (doc) => {
|
|
30355
|
+
writeList(doc, exports2.RECENT_EPICS_KEY, pushRecent(asIdList(doc[exports2.RECENT_EPICS_KEY]), id));
|
|
30356
|
+
});
|
|
30357
|
+
}
|
|
30358
|
+
function setActiveEpic2(root, id) {
|
|
30359
|
+
(0, userConfig_1.updateUserConfig)(root, (doc) => {
|
|
30360
|
+
if (id) {
|
|
30361
|
+
doc[exports2.ACTIVE_EPIC_KEY] = id;
|
|
30362
|
+
writeList(doc, exports2.RECENT_EPICS_KEY, pushRecent(asIdList(doc[exports2.RECENT_EPICS_KEY]), id));
|
|
30363
|
+
} else {
|
|
30364
|
+
delete doc[exports2.ACTIVE_EPIC_KEY];
|
|
30365
|
+
}
|
|
30366
|
+
});
|
|
30367
|
+
}
|
|
30368
|
+
function setEpicPinned2(root, id, pinned) {
|
|
30369
|
+
(0, userConfig_1.updateUserConfig)(root, (doc) => {
|
|
30370
|
+
const list = asIdList(doc[exports2.PINNED_EPICS_KEY]).filter((x) => x !== id);
|
|
30371
|
+
if (pinned) {
|
|
30372
|
+
list.push(id);
|
|
30373
|
+
}
|
|
30374
|
+
writeList(doc, exports2.PINNED_EPICS_KEY, list);
|
|
30375
|
+
});
|
|
30376
|
+
}
|
|
30377
|
+
function epicIdFromBranch(branch, knownIds) {
|
|
30378
|
+
if (!branch) {
|
|
30379
|
+
return null;
|
|
30380
|
+
}
|
|
30381
|
+
const hay = branch.toLowerCase();
|
|
30382
|
+
let best = null;
|
|
30383
|
+
for (const id of knownIds) {
|
|
30384
|
+
const needle = id.toLowerCase();
|
|
30385
|
+
let from = 0;
|
|
30386
|
+
for (; ; ) {
|
|
30387
|
+
const at = hay.indexOf(needle, from);
|
|
30388
|
+
if (at < 0) {
|
|
30389
|
+
break;
|
|
30390
|
+
}
|
|
30391
|
+
const before = at === 0 ? "" : hay[at - 1];
|
|
30392
|
+
const after = hay[at + needle.length] ?? "";
|
|
30393
|
+
if (!/[a-z0-9]/.test(before) && !/[0-9]/.test(after)) {
|
|
30394
|
+
if (!best || id.length > best.length) {
|
|
30395
|
+
best = id;
|
|
30396
|
+
}
|
|
30397
|
+
break;
|
|
30398
|
+
}
|
|
30399
|
+
from = at + 1;
|
|
30400
|
+
}
|
|
30401
|
+
}
|
|
30402
|
+
return best;
|
|
30403
|
+
}
|
|
30404
|
+
}
|
|
30405
|
+
});
|
|
30406
|
+
|
|
30291
30407
|
// ../core/dist/presets/commandBodyFreshness.js
|
|
30292
30408
|
var require_commandBodyFreshness = __commonJS({
|
|
30293
30409
|
"../core/dist/presets/commandBodyFreshness.js"(exports2) {
|
|
@@ -33536,11 +33652,11 @@ var require_dist = __commonJS({
|
|
|
33536
33652
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
33537
33653
|
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;
|
|
33538
33654
|
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.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 = void 0;
|
|
33539
|
-
exports2.
|
|
33540
|
-
exports2.
|
|
33541
|
-
exports2.
|
|
33542
|
-
exports2.
|
|
33543
|
-
exports2.AIDLC_CORE_VERSION = exports2.AIDLC_CLI_GUIDE_TEXT = exports2.AIDLC_KNOWLEDGE = exports2.clearResolveCommandCache = exports2.resolveCommand = exports2.remapClaudePath = exports2.claudeConfigEnv = exports2.claudeJsonPath = exports2.isDefaultClaudeConfigDir = exports2.claudeConfigDir = exports2.resolveClaudeConfigDir = exports2.defaultClaudeConfigDir = exports2.getClaudeConfigDirOverride = void 0;
|
|
33655
|
+
exports2.epicIdFromBranch = exports2.epicFocusFrom = exports2.RECENT_EPICS_LIMIT = exports2.RECENT_EPICS_KEY = exports2.PINNED_EPICS_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 = void 0;
|
|
33656
|
+
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 = 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.setEpicPinned = exports2.setActiveEpic = exports2.recordEpicOpened = exports2.readEpicFocus = exports2.pushRecent = void 0;
|
|
33657
|
+
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 = 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 = void 0;
|
|
33658
|
+
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 = 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 = void 0;
|
|
33659
|
+
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 = void 0;
|
|
33544
33660
|
var WorkspaceSchema_1 = require_WorkspaceSchema();
|
|
33545
33661
|
Object.defineProperty(exports2, "WorkspaceSchema", { enumerable: true, get: function() {
|
|
33546
33662
|
return WorkspaceSchema_1.WorkspaceSchema;
|
|
@@ -33992,12 +34108,49 @@ var require_dist = __commonJS({
|
|
|
33992
34108
|
Object.defineProperty(exports2, "readUserConfig", { enumerable: true, get: function() {
|
|
33993
34109
|
return userConfig_1.readUserConfig;
|
|
33994
34110
|
} });
|
|
34111
|
+
Object.defineProperty(exports2, "updateUserConfig", { enumerable: true, get: function() {
|
|
34112
|
+
return userConfig_1.updateUserConfig;
|
|
34113
|
+
} });
|
|
33995
34114
|
Object.defineProperty(exports2, "userConfigPath", { enumerable: true, get: function() {
|
|
33996
34115
|
return userConfig_1.userConfigPath;
|
|
33997
34116
|
} });
|
|
33998
34117
|
Object.defineProperty(exports2, "writeUserEpicIdPrefix", { enumerable: true, get: function() {
|
|
33999
34118
|
return userConfig_1.writeUserEpicIdPrefix;
|
|
34000
34119
|
} });
|
|
34120
|
+
var epicFocus_1 = require_epicFocus();
|
|
34121
|
+
Object.defineProperty(exports2, "ACTIVE_EPIC_KEY", { enumerable: true, get: function() {
|
|
34122
|
+
return epicFocus_1.ACTIVE_EPIC_KEY;
|
|
34123
|
+
} });
|
|
34124
|
+
Object.defineProperty(exports2, "PINNED_EPICS_KEY", { enumerable: true, get: function() {
|
|
34125
|
+
return epicFocus_1.PINNED_EPICS_KEY;
|
|
34126
|
+
} });
|
|
34127
|
+
Object.defineProperty(exports2, "RECENT_EPICS_KEY", { enumerable: true, get: function() {
|
|
34128
|
+
return epicFocus_1.RECENT_EPICS_KEY;
|
|
34129
|
+
} });
|
|
34130
|
+
Object.defineProperty(exports2, "RECENT_EPICS_LIMIT", { enumerable: true, get: function() {
|
|
34131
|
+
return epicFocus_1.RECENT_EPICS_LIMIT;
|
|
34132
|
+
} });
|
|
34133
|
+
Object.defineProperty(exports2, "epicFocusFrom", { enumerable: true, get: function() {
|
|
34134
|
+
return epicFocus_1.epicFocusFrom;
|
|
34135
|
+
} });
|
|
34136
|
+
Object.defineProperty(exports2, "epicIdFromBranch", { enumerable: true, get: function() {
|
|
34137
|
+
return epicFocus_1.epicIdFromBranch;
|
|
34138
|
+
} });
|
|
34139
|
+
Object.defineProperty(exports2, "pushRecent", { enumerable: true, get: function() {
|
|
34140
|
+
return epicFocus_1.pushRecent;
|
|
34141
|
+
} });
|
|
34142
|
+
Object.defineProperty(exports2, "readEpicFocus", { enumerable: true, get: function() {
|
|
34143
|
+
return epicFocus_1.readEpicFocus;
|
|
34144
|
+
} });
|
|
34145
|
+
Object.defineProperty(exports2, "recordEpicOpened", { enumerable: true, get: function() {
|
|
34146
|
+
return epicFocus_1.recordEpicOpened;
|
|
34147
|
+
} });
|
|
34148
|
+
Object.defineProperty(exports2, "setActiveEpic", { enumerable: true, get: function() {
|
|
34149
|
+
return epicFocus_1.setActiveEpic;
|
|
34150
|
+
} });
|
|
34151
|
+
Object.defineProperty(exports2, "setEpicPinned", { enumerable: true, get: function() {
|
|
34152
|
+
return epicFocus_1.setEpicPinned;
|
|
34153
|
+
} });
|
|
34001
34154
|
var strictMode_1 = require_strictMode();
|
|
34002
34155
|
Object.defineProperty(exports2, "STRICT_MODE_HEADING", { enumerable: true, get: function() {
|
|
34003
34156
|
return strictMode_1.STRICT_MODE_HEADING;
|
|
@@ -43212,7 +43365,7 @@ var require_package = __commonJS({
|
|
|
43212
43365
|
"package.json"(exports2, module2) {
|
|
43213
43366
|
module2.exports = {
|
|
43214
43367
|
name: "@delete101020/aidlc",
|
|
43215
|
-
version: "4.0.
|
|
43368
|
+
version: "4.0.27",
|
|
43216
43369
|
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.",
|
|
43217
43370
|
license: "MIT",
|
|
43218
43371
|
repository: {
|
|
@@ -50216,6 +50369,67 @@ ${plan.length} pipeline(s) would move. Re-run without --dry-run.`));
|
|
|
50216
50369
|
});
|
|
50217
50370
|
console.log((0, import_core19.suggestEpicId)(existing, prefix));
|
|
50218
50371
|
});
|
|
50372
|
+
const requireKnownEpic = (root, id) => {
|
|
50373
|
+
const all = listEpics(root, readYaml(root)).map((e) => e.id);
|
|
50374
|
+
const hit = all.find((x) => x.toLowerCase() === id.toLowerCase());
|
|
50375
|
+
if (!hit) {
|
|
50376
|
+
console.error(import_chalk15.default.red(`Epic "${id}" not found.`));
|
|
50377
|
+
if (all.length > 0) {
|
|
50378
|
+
console.error(import_chalk15.default.dim(`Available: ${all.join(", ")}`));
|
|
50379
|
+
}
|
|
50380
|
+
process.exit(1);
|
|
50381
|
+
}
|
|
50382
|
+
return hit;
|
|
50383
|
+
};
|
|
50384
|
+
const noteIgnored = (root) => {
|
|
50385
|
+
if ((0, import_core19.ensureUserConfigIgnored)(root)) {
|
|
50386
|
+
console.log(import_chalk15.default.dim(` Added ${import_core19.USER_CONFIG_IGNORE_LINE} to .gitignore \u2014 it is yours, not the team's.`));
|
|
50387
|
+
}
|
|
50388
|
+
};
|
|
50389
|
+
cmd.command("current").description("Print the active epic id (from .aidlc/user.yaml); exits 1 when none is set").option("--json", "Print active, pinned and recent as JSON").action((opts, actionCmd) => {
|
|
50390
|
+
const root = resolveWorkspaceRoot(actionCmd);
|
|
50391
|
+
const focus = (0, import_core19.readEpicFocus)(root);
|
|
50392
|
+
if (opts.json) {
|
|
50393
|
+
console.log(JSON.stringify(focus, null, 2));
|
|
50394
|
+
return;
|
|
50395
|
+
}
|
|
50396
|
+
if (!focus.active) {
|
|
50397
|
+
process.exit(1);
|
|
50398
|
+
}
|
|
50399
|
+
console.log(focus.active);
|
|
50400
|
+
});
|
|
50401
|
+
cmd.command("use [id]").description("Make an epic the active one \u2014 what skills like /epic-context pick up when given no id").option("--clear", "unset the active epic").action((id, opts, actionCmd) => {
|
|
50402
|
+
const root = resolveWorkspaceRoot(actionCmd);
|
|
50403
|
+
if (opts.clear) {
|
|
50404
|
+
(0, import_core19.setActiveEpic)(root, null);
|
|
50405
|
+
console.log(import_chalk15.default.green("\u2714") + " No active epic.");
|
|
50406
|
+
return;
|
|
50407
|
+
}
|
|
50408
|
+
if (!id) {
|
|
50409
|
+
console.error(import_chalk15.default.red("Give an epic id, or --clear."));
|
|
50410
|
+
process.exit(1);
|
|
50411
|
+
}
|
|
50412
|
+
const epicId = requireKnownEpic(root, id);
|
|
50413
|
+
(0, import_core19.setActiveEpic)(root, epicId);
|
|
50414
|
+
console.log(import_chalk15.default.green("\u2714") + ` Active epic: ${import_chalk15.default.bold(epicId)}`);
|
|
50415
|
+
noteIgnored(root);
|
|
50416
|
+
});
|
|
50417
|
+
for (const [name, pinned] of [["pin", true], ["unpin", false]]) {
|
|
50418
|
+
cmd.command(`${name} [id]`).description(pinned ? "Pin an epic to the top of the sidebar and Go to Epic picker; bare `pin` lists pins" : "Unpin an epic").action((id, _opts, actionCmd) => {
|
|
50419
|
+
const root = resolveWorkspaceRoot(actionCmd);
|
|
50420
|
+
if (!id) {
|
|
50421
|
+
const list = (0, import_core19.readEpicFocus)(root).pinned;
|
|
50422
|
+
console.log(list.length > 0 ? import_chalk15.default.cyan(list.join(" ")) : import_chalk15.default.dim("(nothing pinned)"));
|
|
50423
|
+
return;
|
|
50424
|
+
}
|
|
50425
|
+
const epicId = pinned ? requireKnownEpic(root, id) : id;
|
|
50426
|
+
(0, import_core19.setEpicPinned)(root, epicId, pinned);
|
|
50427
|
+
console.log(import_chalk15.default.green("\u2714") + ` ${pinned ? "Pinned" : "Unpinned"} ${import_chalk15.default.bold(epicId)}`);
|
|
50428
|
+
if (pinned) {
|
|
50429
|
+
noteIgnored(root);
|
|
50430
|
+
}
|
|
50431
|
+
});
|
|
50432
|
+
}
|
|
50219
50433
|
cmd.command("strict <epicId> [value]").description("Show or set an epic's depth of work (strict_mode in its state.json)").action((epicId, value, _opts, actionCmd) => {
|
|
50220
50434
|
const root = resolveWorkspaceRoot(actionCmd);
|
|
50221
50435
|
const doc = requireYaml(root);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@delete101020/aidlc",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.27",
|
|
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": {
|
|
@@ -36,11 +36,19 @@
|
|
|
36
36
|
"README.md",
|
|
37
37
|
"AUTOMATION.md"
|
|
38
38
|
],
|
|
39
|
+
"scripts": {
|
|
40
|
+
"compile": "tsc -p ./",
|
|
41
|
+
"build": "tsc -p ./",
|
|
42
|
+
"clean": "rm -rf dist",
|
|
43
|
+
"bundle": "esbuild src/index.ts --bundle --platform=node --target=node18 --outfile=dist/bundle.js --external:fsevents && rm -rf dist/templates && cp -R ../core/templates dist/templates && rm -rf dist/tools dist/vendor dist/assets && cp -R ../../tools dist/tools && node -e \"require('fs').mkdirSync('dist/vendor', { recursive: true })\" && cp -R ../../vendor/annotron dist/vendor/annotron && cp -R ../extension/assets dist/assets",
|
|
44
|
+
"prepublishOnly": "pnpm bundle"
|
|
45
|
+
},
|
|
39
46
|
"publishConfig": {
|
|
40
47
|
"access": "public",
|
|
41
48
|
"registry": "https://registry.npmjs.org/"
|
|
42
49
|
},
|
|
43
50
|
"devDependencies": {
|
|
51
|
+
"@aidlc/core": "workspace:*",
|
|
44
52
|
"@types/js-yaml": "^4.0.9",
|
|
45
53
|
"@types/node": "^20.0.0",
|
|
46
54
|
"chalk": "^4.1.2",
|
|
@@ -48,13 +56,6 @@
|
|
|
48
56
|
"cli-table3": "^0.6.5",
|
|
49
57
|
"commander": "^11.1.0",
|
|
50
58
|
"esbuild": "^0.21.0",
|
|
51
|
-
"js-yaml": "^4.1.1"
|
|
52
|
-
"@aidlc/core": "0.0.1"
|
|
53
|
-
},
|
|
54
|
-
"scripts": {
|
|
55
|
-
"compile": "tsc -p ./",
|
|
56
|
-
"build": "tsc -p ./",
|
|
57
|
-
"clean": "rm -rf dist",
|
|
58
|
-
"bundle": "esbuild src/index.ts --bundle --platform=node --target=node18 --outfile=dist/bundle.js --external:fsevents && rm -rf dist/templates && cp -R ../core/templates dist/templates && rm -rf dist/tools dist/vendor dist/assets && cp -R ../../tools dist/tools && node -e \"require('fs').mkdirSync('dist/vendor', { recursive: true })\" && cp -R ../../vendor/annotron dist/vendor/annotron && cp -R ../extension/assets dist/assets"
|
|
59
|
+
"js-yaml": "^4.1.1"
|
|
59
60
|
}
|
|
60
|
-
}
|
|
61
|
+
}
|