@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.
- package/README.md +251 -0
- package/capabilities/claude-code.yaml +9 -0
- package/capabilities/codex.yaml +8 -0
- package/capabilities/cursor.yaml +8 -0
- package/capabilities/kiro.yaml +9 -0
- package/capabilities/windsurf.yaml +8 -0
- package/ci/aidlc-gate.yml +100 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +39 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add-action.d.ts +83 -0
- package/dist/commands/add-action.d.ts.map +1 -0
- package/dist/commands/add-action.js +437 -0
- package/dist/commands/add-action.js.map +1 -0
- package/dist/commands/continue.d.ts +23 -0
- package/dist/commands/continue.d.ts.map +1 -0
- package/dist/commands/continue.js +238 -0
- package/dist/commands/continue.js.map +1 -0
- package/dist/commands/discover.d.ts +19 -0
- package/dist/commands/discover.d.ts.map +1 -0
- package/dist/commands/discover.js +85 -0
- package/dist/commands/discover.js.map +1 -0
- package/dist/commands/docs.d.ts +25 -0
- package/dist/commands/docs.d.ts.map +1 -0
- package/dist/commands/docs.js +282 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/gate.d.ts +25 -0
- package/dist/commands/gate.d.ts.map +1 -0
- package/dist/commands/gate.js +168 -0
- package/dist/commands/gate.js.map +1 -0
- package/dist/commands/init.d.ts +24 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +187 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/review.d.ts +60 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +264 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/setup.d.ts +24 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +206 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/start.d.ts +27 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +243 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +25 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +263 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/transition.d.ts +30 -0
- package/dist/commands/transition.d.ts.map +1 -0
- package/dist/commands/transition.js +353 -0
- package/dist/commands/transition.js.map +1 -0
- package/dist/compile/adapters/claude-code.d.ts +24 -0
- package/dist/compile/adapters/claude-code.d.ts.map +1 -0
- package/dist/compile/adapters/claude-code.js +271 -0
- package/dist/compile/adapters/claude-code.js.map +1 -0
- package/dist/compile/adapters/codex.d.ts +19 -0
- package/dist/compile/adapters/codex.d.ts.map +1 -0
- package/dist/compile/adapters/codex.js +157 -0
- package/dist/compile/adapters/codex.js.map +1 -0
- package/dist/compile/adapters/cursor.d.ts +21 -0
- package/dist/compile/adapters/cursor.d.ts.map +1 -0
- package/dist/compile/adapters/cursor.js +181 -0
- package/dist/compile/adapters/cursor.js.map +1 -0
- package/dist/compile/adapters/index.d.ts +16 -0
- package/dist/compile/adapters/index.d.ts.map +1 -0
- package/dist/compile/adapters/index.js +26 -0
- package/dist/compile/adapters/index.js.map +1 -0
- package/dist/compile/adapters/kiro.d.ts +24 -0
- package/dist/compile/adapters/kiro.d.ts.map +1 -0
- package/dist/compile/adapters/kiro.js +222 -0
- package/dist/compile/adapters/kiro.js.map +1 -0
- package/dist/compile/adapters/windsurf.d.ts +25 -0
- package/dist/compile/adapters/windsurf.d.ts.map +1 -0
- package/dist/compile/adapters/windsurf.js +242 -0
- package/dist/compile/adapters/windsurf.js.map +1 -0
- package/dist/compile/install-plan.d.ts +49 -0
- package/dist/compile/install-plan.d.ts.map +1 -0
- package/dist/compile/install-plan.js +112 -0
- package/dist/compile/install-plan.js.map +1 -0
- package/dist/compile/loaders.d.ts +81 -0
- package/dist/compile/loaders.d.ts.map +1 -0
- package/dist/compile/loaders.js +293 -0
- package/dist/compile/loaders.js.map +1 -0
- package/dist/compile/merger.d.ts +32 -0
- package/dist/compile/merger.d.ts.map +1 -0
- package/dist/compile/merger.js +60 -0
- package/dist/compile/merger.js.map +1 -0
- package/dist/core/gate.d.ts +36 -0
- package/dist/core/gate.d.ts.map +1 -0
- package/dist/core/gate.js +97 -0
- package/dist/core/gate.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lifecycle.d.ts +89 -0
- package/dist/core/lifecycle.d.ts.map +1 -0
- package/dist/core/lifecycle.js +356 -0
- package/dist/core/lifecycle.js.map +1 -0
- package/dist/core/template-resolver.d.ts +56 -0
- package/dist/core/template-resolver.d.ts.map +1 -0
- package/dist/core/template-resolver.js +261 -0
- package/dist/core/template-resolver.js.map +1 -0
- package/dist/core/types.d.ts +527 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +8 -0
- package/dist/core/types.js.map +1 -0
- package/dist/discover/scanner.d.ts +58 -0
- package/dist/discover/scanner.d.ts.map +1 -0
- package/dist/discover/scanner.js +772 -0
- package/dist/discover/scanner.js.map +1 -0
- package/dist/events/event-bus.d.ts +53 -0
- package/dist/events/event-bus.d.ts.map +1 -0
- package/dist/events/event-bus.js +263 -0
- package/dist/events/event-bus.js.map +1 -0
- package/dist/events/plugin-hooks.d.ts +44 -0
- package/dist/events/plugin-hooks.d.ts.map +1 -0
- package/dist/events/plugin-hooks.js +225 -0
- package/dist/events/plugin-hooks.js.map +1 -0
- package/dist/orchestrator/budget-packer.d.ts +57 -0
- package/dist/orchestrator/budget-packer.d.ts.map +1 -0
- package/dist/orchestrator/budget-packer.js +70 -0
- package/dist/orchestrator/budget-packer.js.map +1 -0
- package/dist/orchestrator/config.d.ts +43 -0
- package/dist/orchestrator/config.d.ts.map +1 -0
- package/dist/orchestrator/config.js +109 -0
- package/dist/orchestrator/config.js.map +1 -0
- package/dist/orchestrator/endpoint-clients.d.ts +23 -0
- package/dist/orchestrator/endpoint-clients.d.ts.map +1 -0
- package/dist/orchestrator/endpoint-clients.js +129 -0
- package/dist/orchestrator/endpoint-clients.js.map +1 -0
- package/dist/orchestrator/orchestrator-loop.d.ts +93 -0
- package/dist/orchestrator/orchestrator-loop.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator-loop.js +185 -0
- package/dist/orchestrator/orchestrator-loop.js.map +1 -0
- package/dist/security/confirmation.d.ts +90 -0
- package/dist/security/confirmation.d.ts.map +1 -0
- package/dist/security/confirmation.js +140 -0
- package/dist/security/confirmation.js.map +1 -0
- package/dist/setup/setup-compute.d.ts +54 -0
- package/dist/setup/setup-compute.d.ts.map +1 -0
- package/dist/setup/setup-compute.js +66 -0
- package/dist/setup/setup-compute.js.map +1 -0
- package/dist/state/snapshot-store.d.ts +79 -0
- package/dist/state/snapshot-store.d.ts.map +1 -0
- package/dist/state/snapshot-store.js +164 -0
- package/dist/state/snapshot-store.js.map +1 -0
- package/dist/state/state-recovery.d.ts +87 -0
- package/dist/state/state-recovery.d.ts.map +1 -0
- package/dist/state/state-recovery.js +274 -0
- package/dist/state/state-recovery.js.map +1 -0
- package/dist/state/transition-log.d.ts +40 -0
- package/dist/state/transition-log.d.ts.map +1 -0
- package/dist/state/transition-log.js +83 -0
- package/dist/state/transition-log.js.map +1 -0
- package/dist/state/yaml-helpers.d.ts +53 -0
- package/dist/state/yaml-helpers.d.ts.map +1 -0
- package/dist/state/yaml-helpers.js +110 -0
- package/dist/state/yaml-helpers.js.map +1 -0
- package/examples/.gitkeep +0 -0
- package/guidance/accessibility.md +67 -0
- package/guidance/api-conventions.md +124 -0
- package/guidance/index.yaml +7 -0
- package/guidance/secure-defaults.md +71 -0
- package/package.json +52 -0
- package/phases/.gitkeep +0 -0
- package/skills/00-overview.md +74 -0
- package/skills/10-ideation.md +45 -0
- package/skills/20-requirements.md +54 -0
- package/skills/30-design.md +57 -0
- package/skills/40-implementation.md +64 -0
- package/skills/50-testing.md +60 -0
- package/skills/60-deployment.md +63 -0
- package/skills/70-maintenance.md +56 -0
- package/skills/80-review.md +85 -0
- package/skills/81-continue.md +57 -0
- package/skills/82-add-action.md +71 -0
- package/templates/.gitkeep +0 -0
- package/templates/bugfix.yaml +14 -0
- package/templates/full-feature.yaml +44 -0
- package/templates/micro-task.yaml +11 -0
- package/templates/quick-feature.yaml +20 -0
- 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"}
|