@rasensio/aidlc 0.1.0

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 (187) hide show
  1. package/README.md +251 -0
  2. package/capabilities/claude-code.yaml +9 -0
  3. package/capabilities/codex.yaml +8 -0
  4. package/capabilities/cursor.yaml +8 -0
  5. package/capabilities/kiro.yaml +9 -0
  6. package/capabilities/windsurf.yaml +8 -0
  7. package/ci/aidlc-gate.yml +100 -0
  8. package/dist/cli.d.ts +11 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +39 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/commands/add-action.d.ts +83 -0
  13. package/dist/commands/add-action.d.ts.map +1 -0
  14. package/dist/commands/add-action.js +437 -0
  15. package/dist/commands/add-action.js.map +1 -0
  16. package/dist/commands/continue.d.ts +23 -0
  17. package/dist/commands/continue.d.ts.map +1 -0
  18. package/dist/commands/continue.js +238 -0
  19. package/dist/commands/continue.js.map +1 -0
  20. package/dist/commands/discover.d.ts +19 -0
  21. package/dist/commands/discover.d.ts.map +1 -0
  22. package/dist/commands/discover.js +85 -0
  23. package/dist/commands/discover.js.map +1 -0
  24. package/dist/commands/docs.d.ts +25 -0
  25. package/dist/commands/docs.d.ts.map +1 -0
  26. package/dist/commands/docs.js +282 -0
  27. package/dist/commands/docs.js.map +1 -0
  28. package/dist/commands/gate.d.ts +25 -0
  29. package/dist/commands/gate.d.ts.map +1 -0
  30. package/dist/commands/gate.js +168 -0
  31. package/dist/commands/gate.js.map +1 -0
  32. package/dist/commands/init.d.ts +24 -0
  33. package/dist/commands/init.d.ts.map +1 -0
  34. package/dist/commands/init.js +187 -0
  35. package/dist/commands/init.js.map +1 -0
  36. package/dist/commands/review.d.ts +60 -0
  37. package/dist/commands/review.d.ts.map +1 -0
  38. package/dist/commands/review.js +264 -0
  39. package/dist/commands/review.js.map +1 -0
  40. package/dist/commands/setup.d.ts +24 -0
  41. package/dist/commands/setup.d.ts.map +1 -0
  42. package/dist/commands/setup.js +206 -0
  43. package/dist/commands/setup.js.map +1 -0
  44. package/dist/commands/start.d.ts +27 -0
  45. package/dist/commands/start.d.ts.map +1 -0
  46. package/dist/commands/start.js +243 -0
  47. package/dist/commands/start.js.map +1 -0
  48. package/dist/commands/status.d.ts +25 -0
  49. package/dist/commands/status.d.ts.map +1 -0
  50. package/dist/commands/status.js +263 -0
  51. package/dist/commands/status.js.map +1 -0
  52. package/dist/commands/transition.d.ts +30 -0
  53. package/dist/commands/transition.d.ts.map +1 -0
  54. package/dist/commands/transition.js +353 -0
  55. package/dist/commands/transition.js.map +1 -0
  56. package/dist/compile/adapters/claude-code.d.ts +24 -0
  57. package/dist/compile/adapters/claude-code.d.ts.map +1 -0
  58. package/dist/compile/adapters/claude-code.js +271 -0
  59. package/dist/compile/adapters/claude-code.js.map +1 -0
  60. package/dist/compile/adapters/codex.d.ts +19 -0
  61. package/dist/compile/adapters/codex.d.ts.map +1 -0
  62. package/dist/compile/adapters/codex.js +157 -0
  63. package/dist/compile/adapters/codex.js.map +1 -0
  64. package/dist/compile/adapters/cursor.d.ts +21 -0
  65. package/dist/compile/adapters/cursor.d.ts.map +1 -0
  66. package/dist/compile/adapters/cursor.js +181 -0
  67. package/dist/compile/adapters/cursor.js.map +1 -0
  68. package/dist/compile/adapters/index.d.ts +16 -0
  69. package/dist/compile/adapters/index.d.ts.map +1 -0
  70. package/dist/compile/adapters/index.js +26 -0
  71. package/dist/compile/adapters/index.js.map +1 -0
  72. package/dist/compile/adapters/kiro.d.ts +24 -0
  73. package/dist/compile/adapters/kiro.d.ts.map +1 -0
  74. package/dist/compile/adapters/kiro.js +222 -0
  75. package/dist/compile/adapters/kiro.js.map +1 -0
  76. package/dist/compile/adapters/windsurf.d.ts +25 -0
  77. package/dist/compile/adapters/windsurf.d.ts.map +1 -0
  78. package/dist/compile/adapters/windsurf.js +242 -0
  79. package/dist/compile/adapters/windsurf.js.map +1 -0
  80. package/dist/compile/install-plan.d.ts +49 -0
  81. package/dist/compile/install-plan.d.ts.map +1 -0
  82. package/dist/compile/install-plan.js +112 -0
  83. package/dist/compile/install-plan.js.map +1 -0
  84. package/dist/compile/loaders.d.ts +81 -0
  85. package/dist/compile/loaders.d.ts.map +1 -0
  86. package/dist/compile/loaders.js +293 -0
  87. package/dist/compile/loaders.js.map +1 -0
  88. package/dist/compile/merger.d.ts +32 -0
  89. package/dist/compile/merger.d.ts.map +1 -0
  90. package/dist/compile/merger.js +60 -0
  91. package/dist/compile/merger.js.map +1 -0
  92. package/dist/core/gate.d.ts +36 -0
  93. package/dist/core/gate.d.ts.map +1 -0
  94. package/dist/core/gate.js +97 -0
  95. package/dist/core/gate.js.map +1 -0
  96. package/dist/core/index.d.ts +7 -0
  97. package/dist/core/index.d.ts.map +1 -0
  98. package/dist/core/index.js +7 -0
  99. package/dist/core/index.js.map +1 -0
  100. package/dist/core/lifecycle.d.ts +89 -0
  101. package/dist/core/lifecycle.d.ts.map +1 -0
  102. package/dist/core/lifecycle.js +356 -0
  103. package/dist/core/lifecycle.js.map +1 -0
  104. package/dist/core/template-resolver.d.ts +56 -0
  105. package/dist/core/template-resolver.d.ts.map +1 -0
  106. package/dist/core/template-resolver.js +261 -0
  107. package/dist/core/template-resolver.js.map +1 -0
  108. package/dist/core/types.d.ts +527 -0
  109. package/dist/core/types.d.ts.map +1 -0
  110. package/dist/core/types.js +8 -0
  111. package/dist/core/types.js.map +1 -0
  112. package/dist/discover/scanner.d.ts +58 -0
  113. package/dist/discover/scanner.d.ts.map +1 -0
  114. package/dist/discover/scanner.js +772 -0
  115. package/dist/discover/scanner.js.map +1 -0
  116. package/dist/events/event-bus.d.ts +53 -0
  117. package/dist/events/event-bus.d.ts.map +1 -0
  118. package/dist/events/event-bus.js +263 -0
  119. package/dist/events/event-bus.js.map +1 -0
  120. package/dist/events/plugin-hooks.d.ts +44 -0
  121. package/dist/events/plugin-hooks.d.ts.map +1 -0
  122. package/dist/events/plugin-hooks.js +225 -0
  123. package/dist/events/plugin-hooks.js.map +1 -0
  124. package/dist/orchestrator/budget-packer.d.ts +57 -0
  125. package/dist/orchestrator/budget-packer.d.ts.map +1 -0
  126. package/dist/orchestrator/budget-packer.js +70 -0
  127. package/dist/orchestrator/budget-packer.js.map +1 -0
  128. package/dist/orchestrator/config.d.ts +43 -0
  129. package/dist/orchestrator/config.d.ts.map +1 -0
  130. package/dist/orchestrator/config.js +109 -0
  131. package/dist/orchestrator/config.js.map +1 -0
  132. package/dist/orchestrator/endpoint-clients.d.ts +23 -0
  133. package/dist/orchestrator/endpoint-clients.d.ts.map +1 -0
  134. package/dist/orchestrator/endpoint-clients.js +129 -0
  135. package/dist/orchestrator/endpoint-clients.js.map +1 -0
  136. package/dist/orchestrator/orchestrator-loop.d.ts +93 -0
  137. package/dist/orchestrator/orchestrator-loop.d.ts.map +1 -0
  138. package/dist/orchestrator/orchestrator-loop.js +185 -0
  139. package/dist/orchestrator/orchestrator-loop.js.map +1 -0
  140. package/dist/security/confirmation.d.ts +90 -0
  141. package/dist/security/confirmation.d.ts.map +1 -0
  142. package/dist/security/confirmation.js +140 -0
  143. package/dist/security/confirmation.js.map +1 -0
  144. package/dist/setup/setup-compute.d.ts +54 -0
  145. package/dist/setup/setup-compute.d.ts.map +1 -0
  146. package/dist/setup/setup-compute.js +66 -0
  147. package/dist/setup/setup-compute.js.map +1 -0
  148. package/dist/state/snapshot-store.d.ts +79 -0
  149. package/dist/state/snapshot-store.d.ts.map +1 -0
  150. package/dist/state/snapshot-store.js +164 -0
  151. package/dist/state/snapshot-store.js.map +1 -0
  152. package/dist/state/state-recovery.d.ts +87 -0
  153. package/dist/state/state-recovery.d.ts.map +1 -0
  154. package/dist/state/state-recovery.js +274 -0
  155. package/dist/state/state-recovery.js.map +1 -0
  156. package/dist/state/transition-log.d.ts +40 -0
  157. package/dist/state/transition-log.d.ts.map +1 -0
  158. package/dist/state/transition-log.js +83 -0
  159. package/dist/state/transition-log.js.map +1 -0
  160. package/dist/state/yaml-helpers.d.ts +53 -0
  161. package/dist/state/yaml-helpers.d.ts.map +1 -0
  162. package/dist/state/yaml-helpers.js +110 -0
  163. package/dist/state/yaml-helpers.js.map +1 -0
  164. package/examples/.gitkeep +0 -0
  165. package/guidance/accessibility.md +67 -0
  166. package/guidance/api-conventions.md +124 -0
  167. package/guidance/index.yaml +7 -0
  168. package/guidance/secure-defaults.md +71 -0
  169. package/package.json +52 -0
  170. package/phases/.gitkeep +0 -0
  171. package/skills/00-overview.md +74 -0
  172. package/skills/10-ideation.md +45 -0
  173. package/skills/20-requirements.md +54 -0
  174. package/skills/30-design.md +57 -0
  175. package/skills/40-implementation.md +64 -0
  176. package/skills/50-testing.md +60 -0
  177. package/skills/60-deployment.md +63 -0
  178. package/skills/70-maintenance.md +56 -0
  179. package/skills/80-review.md +85 -0
  180. package/skills/81-continue.md +57 -0
  181. package/skills/82-add-action.md +71 -0
  182. package/templates/.gitkeep +0 -0
  183. package/templates/bugfix.yaml +14 -0
  184. package/templates/full-feature.yaml +44 -0
  185. package/templates/micro-task.yaml +11 -0
  186. package/templates/quick-feature.yaml +20 -0
  187. package/templates/spike.yaml +15 -0
@@ -0,0 +1,437 @@
1
+ /**
2
+ * `aidlc add action` command — AI-assisted action authoring.
3
+ *
4
+ * Translates a natural language description into a Lifecycle_Action entry
5
+ * in `.aidlc/actions.yaml`. Supports interactive confirmation, dry-run,
6
+ * and non-interactive mode.
7
+ *
8
+ * Requirements: 22.1, 22.5, 22.6, 22.7, 22.8, 22.9, 22.10, 22.11, 22.13, 20.2, 20.3
9
+ *
10
+ * @module
11
+ */
12
+ import { Command } from 'commander';
13
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
14
+ import { join, dirname } from 'node:path';
15
+ import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
16
+ import * as clack from '@clack/prompts';
17
+ import { loadActionsConfig, emit } from '../events/event-bus.js';
18
+ // ---------------------------------------------------------------------------
19
+ // Constants
20
+ // ---------------------------------------------------------------------------
21
+ const VALID_EVENTS = [
22
+ 'on-instance-start',
23
+ 'on-phase-enter',
24
+ 'on-phase-exit',
25
+ 'on-instance-complete',
26
+ 'on-artifact-created',
27
+ ];
28
+ const PHASE_NAMES = [
29
+ 'ideation',
30
+ 'requirements',
31
+ 'design',
32
+ 'implementation',
33
+ 'testing',
34
+ 'deployment',
35
+ 'maintenance',
36
+ ];
37
+ // ---------------------------------------------------------------------------
38
+ // Inference rules (heuristic — full AI inference handled by skill 82-add-action)
39
+ // ---------------------------------------------------------------------------
40
+ /**
41
+ * Infer a lifecycle event from a natural language description.
42
+ *
43
+ * Rules:
44
+ * - "when starting" / "on start" → on-instance-start
45
+ * - "when entering" / "on enter" → on-phase-enter
46
+ * - "when exiting" / "on exit" / "after" → on-phase-exit
47
+ * - "when complete" / "on finish" → on-instance-complete
48
+ * - Otherwise → null (cannot infer)
49
+ */
50
+ export function inferEvent(description) {
51
+ const lower = description.toLowerCase();
52
+ // on-instance-start patterns
53
+ if (/\b(when\s+starting|on\s+start|at\s+start|instance\s+start)\b/.test(lower)) {
54
+ return 'on-instance-start';
55
+ }
56
+ // on-instance-complete patterns
57
+ if (/\b(when\s+complete|on\s+finish|when\s+finished|when\s+done|on\s+complete|instance\s+complete)\b/.test(lower)) {
58
+ return 'on-instance-complete';
59
+ }
60
+ // on-phase-enter patterns
61
+ if (/\b(when\s+entering|on\s+enter|entering\s+phase|phase\s+enter)\b/.test(lower)) {
62
+ return 'on-phase-enter';
63
+ }
64
+ // on-phase-exit patterns
65
+ if (/\b(when\s+exiting|on\s+exit|exiting\s+phase|phase\s+exit|after\s+phase)\b/.test(lower)) {
66
+ return 'on-phase-exit';
67
+ }
68
+ // "after" + phase name → on-phase-exit
69
+ if (/\bafter\b/.test(lower)) {
70
+ for (const phase of PHASE_NAMES) {
71
+ if (lower.includes(phase)) {
72
+ return 'on-phase-exit';
73
+ }
74
+ }
75
+ }
76
+ // "when" + phase name + starts/begins → on-phase-enter
77
+ if (/\bwhen\b/.test(lower)) {
78
+ for (const phase of PHASE_NAMES) {
79
+ if (lower.includes(phase) && /\b(starts?|begins?)\b/.test(lower)) {
80
+ return 'on-phase-enter';
81
+ }
82
+ }
83
+ }
84
+ // Fallback: if it mentions a phase with a "done" / "finish" / "complete" → on-phase-exit
85
+ for (const phase of PHASE_NAMES) {
86
+ if (lower.includes(phase)) {
87
+ if (/\b(done|finish|complete|end)\b/.test(lower)) {
88
+ return 'on-phase-exit';
89
+ }
90
+ }
91
+ }
92
+ return null;
93
+ }
94
+ /**
95
+ * Infer a phase filter from the description.
96
+ * Looks for known phase names in the text.
97
+ */
98
+ export function inferPhase(description) {
99
+ const lower = description.toLowerCase();
100
+ for (const phase of PHASE_NAMES) {
101
+ if (lower.includes(phase)) {
102
+ return phase;
103
+ }
104
+ }
105
+ return undefined;
106
+ }
107
+ /**
108
+ * Infer whether the action should use a built-in or a custom command.
109
+ *
110
+ * Rules:
111
+ * - "create branch" / "git branch" → use: git-branch
112
+ * - "issue" / "github" → use: github-issue
113
+ * - Otherwise → run: <description as command>
114
+ */
115
+ export function inferAction(description) {
116
+ const lower = description.toLowerCase();
117
+ // git-branch built-in
118
+ if (/\b(create\s+branch|git\s+branch|feature\s+branch)\b/.test(lower)) {
119
+ return { use: 'git-branch', with: { pattern: 'feature/{instance-name}' } };
120
+ }
121
+ // github-issue built-in
122
+ if (/\b(issue|github)\b/.test(lower)) {
123
+ return { use: 'github-issue' };
124
+ }
125
+ // doc-update built-in (append to doc, update doc, log file)
126
+ if (/\b(doc[-\s]?update|update\s+(a\s+)?doc|append\s+to\b|log\s+file)\b/.test(lower)) {
127
+ return { use: 'doc-update' };
128
+ }
129
+ // Default: treat as a shell command
130
+ return { run: description };
131
+ }
132
+ /**
133
+ * Generate a URL-safe action ID from the description.
134
+ */
135
+ export function generateActionId(description) {
136
+ return description
137
+ .toLowerCase()
138
+ .replace(/[^a-z0-9\s-]/g, '')
139
+ .trim()
140
+ .replace(/\s+/g, '-')
141
+ .slice(0, 40);
142
+ }
143
+ /**
144
+ * Full inference pipeline: take a natural language description and produce
145
+ * an InferredAction. Returns `null` for the event field if it cannot be inferred.
146
+ */
147
+ export function inferActionFromDescription(description, eventOverride, blockingOverride) {
148
+ const event = eventOverride ?? inferEvent(description);
149
+ if (event === null) {
150
+ return { event: null, description };
151
+ }
152
+ const phase = inferPhase(description);
153
+ const action = inferAction(description);
154
+ const blocking = blockingOverride ?? false;
155
+ const id = generateActionId(description);
156
+ return {
157
+ id,
158
+ event,
159
+ phase,
160
+ ...action,
161
+ blocking,
162
+ description,
163
+ };
164
+ }
165
+ // ---------------------------------------------------------------------------
166
+ // Schema validation
167
+ // ---------------------------------------------------------------------------
168
+ /**
169
+ * Validate a single action entry against the ActionsConfig schema.
170
+ * Returns null if valid, or an error string describing the violation.
171
+ */
172
+ export function validateActionEntry(entry) {
173
+ if (!entry.id || typeof entry.id !== 'string') {
174
+ return "missing or invalid 'id' field";
175
+ }
176
+ if (!VALID_EVENTS.includes(entry.event)) {
177
+ return `invalid event '${entry.event}'; must be one of: ${VALID_EVENTS.join(', ')}`;
178
+ }
179
+ if (typeof entry.blocking !== 'boolean') {
180
+ return "missing or invalid 'blocking' field (expected boolean)";
181
+ }
182
+ if (typeof entry.description !== 'string' || !entry.description) {
183
+ return "missing or invalid 'description' field";
184
+ }
185
+ const hasUse = 'use' in entry && typeof entry.use === 'string' && entry.use.length > 0;
186
+ const hasRun = 'run' in entry && typeof entry.run === 'string' && entry.run.length > 0;
187
+ if (!hasUse && !hasRun) {
188
+ return "must have either 'use' or 'run' field";
189
+ }
190
+ if (hasUse && hasRun) {
191
+ return "cannot have both 'use' and 'run' fields";
192
+ }
193
+ return null;
194
+ }
195
+ // ---------------------------------------------------------------------------
196
+ // Actions file writer
197
+ // ---------------------------------------------------------------------------
198
+ /**
199
+ * Convert an InferredAction to an ActionDefinition for storage.
200
+ */
201
+ function toActionDefinition(inferred) {
202
+ const base = {
203
+ id: inferred.id,
204
+ event: inferred.event,
205
+ ...(inferred.phase ? { phase: inferred.phase } : {}),
206
+ enabled: true,
207
+ blocking: inferred.blocking,
208
+ description: inferred.description,
209
+ };
210
+ if (inferred.use) {
211
+ return {
212
+ ...base,
213
+ use: inferred.use,
214
+ ...(inferred.with ? { with: inferred.with } : {}),
215
+ };
216
+ }
217
+ return {
218
+ ...base,
219
+ run: inferred.run,
220
+ };
221
+ }
222
+ /**
223
+ * Append an action to the actions.yaml file (create if it doesn't exist).
224
+ */
225
+ export function appendAction(actionsPath, action) {
226
+ let config;
227
+ if (existsSync(actionsPath)) {
228
+ const raw = readFileSync(actionsPath, 'utf8');
229
+ config = parseYaml(raw);
230
+ }
231
+ else {
232
+ // Ensure directory exists
233
+ const dir = dirname(actionsPath);
234
+ if (!existsSync(dir)) {
235
+ mkdirSync(dir, { recursive: true });
236
+ }
237
+ config = { version: 1, actions: [] };
238
+ }
239
+ const definition = toActionDefinition(action);
240
+ config.actions.push(definition);
241
+ const yaml = stringifyYaml(config, {
242
+ lineWidth: 0,
243
+ defaultKeyType: 'PLAIN',
244
+ defaultStringType: 'PLAIN',
245
+ });
246
+ writeFileSync(actionsPath, yaml, 'utf8');
247
+ }
248
+ // ---------------------------------------------------------------------------
249
+ // YAML preview rendering
250
+ // ---------------------------------------------------------------------------
251
+ /**
252
+ * Render an InferredAction as a YAML preview for user confirmation.
253
+ */
254
+ export function renderActionPreview(action) {
255
+ const lines = [];
256
+ lines.push(`- id: ${action.id}`);
257
+ lines.push(` event: ${action.event}`);
258
+ if (action.phase) {
259
+ lines.push(` phase: ${action.phase}`);
260
+ }
261
+ if (action.use) {
262
+ lines.push(` use: ${action.use}`);
263
+ if (action.with) {
264
+ lines.push(` with:`);
265
+ for (const [k, v] of Object.entries(action.with)) {
266
+ lines.push(` ${k}: "${v}"`);
267
+ }
268
+ }
269
+ }
270
+ if (action.run) {
271
+ lines.push(` run: '${action.run}'`);
272
+ }
273
+ lines.push(` enabled: true`);
274
+ lines.push(` blocking: ${action.blocking}`);
275
+ lines.push(` description: "${action.description}"`);
276
+ return lines.join('\n');
277
+ }
278
+ // ---------------------------------------------------------------------------
279
+ // Command registration
280
+ // ---------------------------------------------------------------------------
281
+ /**
282
+ * Register the `aidlc add action` command on the given commander program.
283
+ */
284
+ export function registerAddAction(program) {
285
+ const addCmd = program
286
+ .command('add')
287
+ .description('Add framework components');
288
+ addCmd
289
+ .command('action')
290
+ .description('Create a Lifecycle_Action from a natural language description')
291
+ .argument('<description>', 'Natural language description of the automation')
292
+ .option('--event <event>', 'Override the inferred lifecycle event')
293
+ .option('--blocking', 'Mark the action as blocking (halts transition on failure)')
294
+ .option('--non-interactive', 'Skip confirmation prompts; fail if event cannot be inferred')
295
+ .option('--dry-run', 'Show what would be added without writing')
296
+ .action(async (description, opts) => {
297
+ await runAddAction(description, opts);
298
+ });
299
+ }
300
+ // ---------------------------------------------------------------------------
301
+ // Core logic
302
+ // ---------------------------------------------------------------------------
303
+ async function runAddAction(description, opts) {
304
+ const projectRoot = process.cwd();
305
+ const actionsPath = join(projectRoot, '.aidlc', 'actions.yaml');
306
+ // Validate --event if provided
307
+ if (opts.event && !VALID_EVENTS.includes(opts.event)) {
308
+ process.stderr.write(`Error: invalid event '${opts.event}'\n` +
309
+ `Available events: ${VALID_EVENTS.join(', ')}\n`);
310
+ process.exitCode = 2;
311
+ return;
312
+ }
313
+ // Run inference
314
+ const result = inferActionFromDescription(description, opts.event, opts.blocking);
315
+ // Handle case where event cannot be inferred
316
+ if (result.event === null) {
317
+ if (opts.nonInteractive) {
318
+ process.stderr.write(`Error: could not infer lifecycle event from description.\n` +
319
+ `Available events: ${VALID_EVENTS.join(', ')}\n` +
320
+ `Use --event <event> to specify explicitly.\n`);
321
+ process.exitCode = 1;
322
+ return;
323
+ }
324
+ // Interactive: prompt for event selection (Req 22.11)
325
+ const selected = await clack.select({
326
+ message: 'Could not infer the lifecycle event. Please select one:',
327
+ options: VALID_EVENTS.map((e) => ({ value: e, label: e })),
328
+ });
329
+ if (clack.isCancel(selected)) {
330
+ process.stderr.write('Cancelled.\n');
331
+ process.exitCode = 1;
332
+ return;
333
+ }
334
+ // Re-run inference with the selected event
335
+ const retried = inferActionFromDescription(description, selected, opts.blocking);
336
+ if (retried.event === null) {
337
+ // Should not happen since we provided an override, but guard anyway
338
+ process.stderr.write('Error: unexpected inference failure.\n');
339
+ process.exitCode = 1;
340
+ return;
341
+ }
342
+ return await processInferredAction(retried, actionsPath, opts);
343
+ }
344
+ return await processInferredAction(result, actionsPath, opts);
345
+ }
346
+ async function processInferredAction(action, actionsPath, opts) {
347
+ // Validate against schema (Req 22.7, 22.9)
348
+ const validationError = validateActionEntry(action);
349
+ if (validationError) {
350
+ process.stderr.write(`Error: generated action fails schema validation: ${validationError}\n`);
351
+ process.exitCode = 1;
352
+ return;
353
+ }
354
+ // Render preview
355
+ const preview = renderActionPreview(action);
356
+ if (opts.dryRun) {
357
+ // Dry run: show what would be added without writing
358
+ process.stdout.write('Dry run — would add the following action:\n\n');
359
+ process.stdout.write(preview + '\n\n');
360
+ process.stdout.write('No changes were written.\n');
361
+ return;
362
+ }
363
+ if (opts.nonInteractive) {
364
+ // Non-interactive: validate and write directly
365
+ appendAction(actionsPath, action);
366
+ process.stdout.write('Action saved to .aidlc/actions.yaml:\n\n');
367
+ process.stdout.write(preview + '\n\n');
368
+ offerTestFire(action);
369
+ return;
370
+ }
371
+ // Interactive: show preview and ask for confirmation (Req 22.5, 22.6)
372
+ process.stdout.write('\nProposed action entry:\n\n');
373
+ process.stdout.write(preview + '\n\n');
374
+ const confirmed = await clack.confirm({
375
+ message: 'Save this action to .aidlc/actions.yaml?',
376
+ });
377
+ if (clack.isCancel(confirmed) || !confirmed) {
378
+ process.stdout.write('Action was not saved.\n');
379
+ return;
380
+ }
381
+ // Save (Req 22.8)
382
+ appendAction(actionsPath, action);
383
+ process.stdout.write('Action saved to .aidlc/actions.yaml.\n');
384
+ // Offer test-fire (Req 22.13)
385
+ await offerTestFireInteractive(action);
386
+ }
387
+ // ---------------------------------------------------------------------------
388
+ // Test-fire (Req 22.13)
389
+ // ---------------------------------------------------------------------------
390
+ function offerTestFire(action) {
391
+ process.stdout.write('Tip: use --dry-run on a lifecycle transition to test-fire this action with a sample payload.\n');
392
+ }
393
+ async function offerTestFireInteractive(action) {
394
+ const testFire = await clack.confirm({
395
+ message: 'Would you like to test-fire this action with a sample payload? (no real transition)',
396
+ });
397
+ if (clack.isCancel(testFire) || !testFire) {
398
+ return;
399
+ }
400
+ // Build a sample payload
401
+ const samplePayload = {
402
+ event: action.event,
403
+ instance: 'sample-instance',
404
+ phase: action.phase,
405
+ template: 'full-feature',
406
+ };
407
+ // Create a temp config with just this action for the dry-run emit
408
+ const config = {
409
+ version: 1,
410
+ actions: [
411
+ {
412
+ id: action.id,
413
+ event: action.event,
414
+ ...(action.phase ? { phase: action.phase } : {}),
415
+ enabled: true,
416
+ blocking: action.blocking,
417
+ description: action.description,
418
+ ...(action.use ? { use: action.use, ...(action.with ? { with: action.with } : {}) } : {}),
419
+ ...(action.run ? { run: action.run } : {}),
420
+ },
421
+ ],
422
+ };
423
+ const report = emit(samplePayload, config, { dryRun: true });
424
+ process.stdout.write('\nTest-fire (dry run):\n');
425
+ process.stdout.write(` Event: ${samplePayload.event}\n`);
426
+ process.stdout.write(` Instance: ${samplePayload.instance}\n`);
427
+ if (samplePayload.phase) {
428
+ process.stdout.write(` Phase: ${samplePayload.phase}\n`);
429
+ }
430
+ process.stdout.write(` Template: ${samplePayload.template}\n`);
431
+ process.stdout.write(` Actions matched: ${report.fired.length}\n`);
432
+ if (report.fired.length > 0) {
433
+ process.stdout.write(` → ${report.fired[0].id} would fire\n`);
434
+ }
435
+ process.stdout.write('\n');
436
+ }
437
+ //# sourceMappingURL=add-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-action.js","sourceRoot":"","sources":["../../src/commands/add-action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * `aidlc continue` command — resume an in-progress lifecycle instance.
3
+ *
4
+ * Behavior:
5
+ * - Load instance state, phase states, and resolve template.
6
+ * - Call `nextStep(state, phaseStates, template)` from the lifecycle engine.
7
+ * - Based on the result:
8
+ * - `artifact`: print what artifact to produce, with context about the phase.
9
+ * - `phase`: print what phase to enter next.
10
+ * - `complete`: print that the lifecycle is complete.
11
+ * - Output is a pre-built continuation prompt that can be pasted into any AI agent.
12
+ * - With `--json`: output `{ nextStep, prompt }` as JSON.
13
+ *
14
+ * Requirements: 26.1, 26.3
15
+ *
16
+ * @module
17
+ */
18
+ import { Command } from 'commander';
19
+ /**
20
+ * Register the `aidlc continue` command on the given commander program.
21
+ */
22
+ export declare function registerContinue(program: Command): void;
23
+ //# sourceMappingURL=continue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continue.d.ts","sourceRoot":"","sources":["../../src/commands/continue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6JpC;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CASvD"}