@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,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aidlc start` command — begin a new lifecycle instance.
|
|
3
|
+
*
|
|
4
|
+
* Behavior:
|
|
5
|
+
* - Load templates from the package `templates/` dir and `.aidlc/templates/` (custom).
|
|
6
|
+
* - If no template argument is given:
|
|
7
|
+
* - In interactive mode: list available templates and prompt for selection (Req 8.2).
|
|
8
|
+
* - In non-interactive mode: exit with error.
|
|
9
|
+
* - Resolve the template (apply inheritance if needed).
|
|
10
|
+
* - Determine scope from `--scope` option or template default.
|
|
11
|
+
* - Determine initial phase based on scope (Req 5.1):
|
|
12
|
+
* full → ideation, standard → requirements, micro → implementation.
|
|
13
|
+
* - Create instance namespace under `.aidlc/state/<name>/`.
|
|
14
|
+
* - Write `instance.yaml` with initial state.
|
|
15
|
+
* - Write initial `phase-<name>.yaml` files for all applicable phases (status: pending).
|
|
16
|
+
* - Print summary to stdout.
|
|
17
|
+
*
|
|
18
|
+
* Requirements: 5.1, 8.2, 23.1
|
|
19
|
+
*
|
|
20
|
+
* @module
|
|
21
|
+
*/
|
|
22
|
+
import { Command } from 'commander';
|
|
23
|
+
import { existsSync } from 'node:fs';
|
|
24
|
+
import { join, resolve } from 'node:path';
|
|
25
|
+
import { fileURLToPath } from 'node:url';
|
|
26
|
+
import * as clack from '@clack/prompts';
|
|
27
|
+
import { loadTemplates, resolveTemplate, phasesForScope, } from '../core/template-resolver.js';
|
|
28
|
+
import { saveSnapshot, createInstanceDir } from '../state/snapshot-store.js';
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Constants
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
/** Maps cycle scope to the initial phase (Req 5.1). */
|
|
33
|
+
const INITIAL_PHASE = {
|
|
34
|
+
full: 'ideation',
|
|
35
|
+
standard: 'requirements',
|
|
36
|
+
micro: 'implementation',
|
|
37
|
+
};
|
|
38
|
+
const VALID_SCOPES = ['full', 'standard', 'micro'];
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
// Helpers
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
/**
|
|
43
|
+
* Resolve the package root directory.
|
|
44
|
+
*/
|
|
45
|
+
function getPackageRoot() {
|
|
46
|
+
const thisFile = fileURLToPath(import.meta.url);
|
|
47
|
+
return resolve(thisFile, '..', '..', '..');
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Load all templates: built-in from the package + custom from the project.
|
|
51
|
+
*/
|
|
52
|
+
function loadAllTemplates(packageRoot, projectRoot) {
|
|
53
|
+
const builtInDir = join(packageRoot, 'templates');
|
|
54
|
+
const customDir = join(projectRoot, '.aidlc', 'templates');
|
|
55
|
+
const templates = loadTemplates(builtInDir);
|
|
56
|
+
// Custom templates override/supplement built-in ones
|
|
57
|
+
if (existsSync(customDir)) {
|
|
58
|
+
const custom = loadTemplates(customDir);
|
|
59
|
+
for (const [name, tpl] of custom) {
|
|
60
|
+
templates.set(name, tpl);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return templates;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Determine the creator identity from environment.
|
|
67
|
+
* Prefers git user, falls back to OS username.
|
|
68
|
+
*/
|
|
69
|
+
function getCreatorIdentity() {
|
|
70
|
+
// Try common env vars
|
|
71
|
+
return (process.env.USER ||
|
|
72
|
+
process.env.USERNAME ||
|
|
73
|
+
process.env.LOGNAME ||
|
|
74
|
+
'unknown');
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Generate a URL-safe instance name from a template name.
|
|
78
|
+
* Appends a short timestamp suffix for uniqueness.
|
|
79
|
+
*/
|
|
80
|
+
function generateInstanceName(templateName) {
|
|
81
|
+
const base = templateName.replace(/[^a-z0-9-]/gi, '-').toLowerCase();
|
|
82
|
+
const suffix = Date.now().toString(36).slice(-6);
|
|
83
|
+
return `${base}-${suffix}`;
|
|
84
|
+
}
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// Command registration
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
/**
|
|
89
|
+
* Register the `aidlc start` command on the given commander program.
|
|
90
|
+
*/
|
|
91
|
+
export function registerStart(program) {
|
|
92
|
+
program
|
|
93
|
+
.command('start')
|
|
94
|
+
.description('Begin a new lifecycle instance')
|
|
95
|
+
.argument('[template]', 'Workflow template to use')
|
|
96
|
+
.option('--name <instance-name>', 'Instance name (URL-safe)')
|
|
97
|
+
.option('--scope <scope>', `Cycle scope (${VALID_SCOPES.join(', ')})`)
|
|
98
|
+
.option('--non-interactive', 'Disable interactive prompts (for AI agents)')
|
|
99
|
+
.action(async (templateArg, opts) => {
|
|
100
|
+
await runStart(templateArg, opts);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
// Core logic
|
|
105
|
+
// ---------------------------------------------------------------------------
|
|
106
|
+
async function runStart(templateArg, opts) {
|
|
107
|
+
const packageRoot = getPackageRoot();
|
|
108
|
+
const projectRoot = process.cwd();
|
|
109
|
+
const stateDir = join(projectRoot, '.aidlc', 'state');
|
|
110
|
+
// Load all available templates
|
|
111
|
+
const allTemplates = loadAllTemplates(packageRoot, projectRoot);
|
|
112
|
+
if (allTemplates.size === 0) {
|
|
113
|
+
process.stderr.write('Error: no templates found. Ensure the package templates/ directory exists.\n');
|
|
114
|
+
process.exitCode = 1;
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
// Select template
|
|
118
|
+
let selectedTemplateName;
|
|
119
|
+
if (templateArg) {
|
|
120
|
+
if (!allTemplates.has(templateArg)) {
|
|
121
|
+
process.stderr.write(`Error: unknown template '${templateArg}'\n` +
|
|
122
|
+
`Available templates: ${[...allTemplates.keys()].join(', ')}\n`);
|
|
123
|
+
process.exitCode = 1;
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
selectedTemplateName = templateArg;
|
|
127
|
+
}
|
|
128
|
+
else if (opts.nonInteractive) {
|
|
129
|
+
process.stderr.write('Error: template must be specified in non-interactive mode.\n' +
|
|
130
|
+
`Available templates: ${[...allTemplates.keys()].join(', ')}\n`);
|
|
131
|
+
process.exitCode = 1;
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
// Interactive: prompt for template selection (Req 8.2)
|
|
136
|
+
const templateOptions = [...allTemplates.entries()].map(([name, tpl]) => ({
|
|
137
|
+
value: name,
|
|
138
|
+
label: name,
|
|
139
|
+
hint: tpl.description || '',
|
|
140
|
+
}));
|
|
141
|
+
const selected = await clack.select({
|
|
142
|
+
message: 'Select a workflow template:',
|
|
143
|
+
options: templateOptions,
|
|
144
|
+
});
|
|
145
|
+
if (clack.isCancel(selected)) {
|
|
146
|
+
process.stderr.write('Cancelled.\n');
|
|
147
|
+
process.exitCode = 1;
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
selectedTemplateName = selected;
|
|
151
|
+
}
|
|
152
|
+
// Resolve the template (apply inheritance)
|
|
153
|
+
const rawTemplate = allTemplates.get(selectedTemplateName);
|
|
154
|
+
let resolvedTemplate;
|
|
155
|
+
try {
|
|
156
|
+
resolvedTemplate = resolveTemplate(rawTemplate, allTemplates);
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
process.stderr.write(`Error resolving template: ${err.message}\n`);
|
|
160
|
+
process.exitCode = 1;
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
// Determine scope
|
|
164
|
+
let scope;
|
|
165
|
+
if (opts.scope) {
|
|
166
|
+
if (!VALID_SCOPES.includes(opts.scope)) {
|
|
167
|
+
process.stderr.write(`Error: invalid scope '${opts.scope}'. Must be one of: ${VALID_SCOPES.join(', ')}\n`);
|
|
168
|
+
process.exitCode = 1;
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
scope = opts.scope;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
scope = resolvedTemplate.scope;
|
|
175
|
+
}
|
|
176
|
+
// Determine instance name
|
|
177
|
+
const instanceName = opts.name || generateInstanceName(selectedTemplateName);
|
|
178
|
+
// Check for existing instance with the same name
|
|
179
|
+
const instanceDir = join(stateDir, instanceName);
|
|
180
|
+
if (existsSync(instanceDir)) {
|
|
181
|
+
process.stderr.write(`Error: instance '${instanceName}' already exists.\n`);
|
|
182
|
+
process.exitCode = 1;
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
// Determine initial phase (Req 5.1)
|
|
186
|
+
const currentPhase = INITIAL_PHASE[scope];
|
|
187
|
+
// Get applicable phases for the scope
|
|
188
|
+
const applicablePhases = phasesForScope(resolvedTemplate, scope);
|
|
189
|
+
// Create instance namespace (Req 23.1)
|
|
190
|
+
createInstanceDir(stateDir, instanceName);
|
|
191
|
+
// Write instance.yaml
|
|
192
|
+
const now = new Date().toISOString();
|
|
193
|
+
const createdBy = getCreatorIdentity();
|
|
194
|
+
const instanceState = {
|
|
195
|
+
name: instanceName,
|
|
196
|
+
template: selectedTemplateName,
|
|
197
|
+
scope,
|
|
198
|
+
created_at: now,
|
|
199
|
+
created_by: createdBy,
|
|
200
|
+
current_phase: currentPhase,
|
|
201
|
+
claim: null,
|
|
202
|
+
scope_history: [],
|
|
203
|
+
};
|
|
204
|
+
saveSnapshot(stateDir, instanceName, 'instance.yaml', instanceState);
|
|
205
|
+
// Write phase-<name>.yaml for each applicable phase (status: pending)
|
|
206
|
+
for (const phase of applicablePhases) {
|
|
207
|
+
const artifacts = phase.required_artifacts.map((a) => ({
|
|
208
|
+
name: a.name,
|
|
209
|
+
status: 'not-started',
|
|
210
|
+
}));
|
|
211
|
+
// Include optional artifacts too if present
|
|
212
|
+
if (phase.optional_artifacts) {
|
|
213
|
+
for (const a of phase.optional_artifacts) {
|
|
214
|
+
artifacts.push({ name: a.name, status: 'not-started' });
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const phaseState = {
|
|
218
|
+
phase: phase.name,
|
|
219
|
+
status: 'pending',
|
|
220
|
+
owner: null,
|
|
221
|
+
entered_at: null,
|
|
222
|
+
completed_at: null,
|
|
223
|
+
completed_by: null,
|
|
224
|
+
skip_reason: null,
|
|
225
|
+
artifacts,
|
|
226
|
+
metrics: {
|
|
227
|
+
elapsed_seconds: 0,
|
|
228
|
+
artifact_count: 0,
|
|
229
|
+
},
|
|
230
|
+
};
|
|
231
|
+
saveSnapshot(stateDir, instanceName, `phase-${phase.name}.yaml`, phaseState);
|
|
232
|
+
}
|
|
233
|
+
// Print summary to stdout
|
|
234
|
+
process.stdout.write(`\nLifecycle instance created:\n`);
|
|
235
|
+
process.stdout.write(` Name: ${instanceName}\n`);
|
|
236
|
+
process.stdout.write(` Template: ${selectedTemplateName}\n`);
|
|
237
|
+
process.stdout.write(` Scope: ${scope}\n`);
|
|
238
|
+
process.stdout.write(` Phase: ${currentPhase}\n`);
|
|
239
|
+
process.stdout.write(` Phases: ${applicablePhases.map((p) => p.name).join(' → ')}\n`);
|
|
240
|
+
process.stdout.write(` Path: .aidlc/state/${instanceName}/\n`);
|
|
241
|
+
process.stdout.write(`\n`);
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aidlc status` command — show progress across active lifecycle instances.
|
|
3
|
+
*
|
|
4
|
+
* Behavior:
|
|
5
|
+
* - Scan `.aidlc/state/` for instance directories.
|
|
6
|
+
* - For each instance: load instance.yaml, load phase states, resolve template.
|
|
7
|
+
* - Compute: completionPercent, isStalled, current owner.
|
|
8
|
+
* - Output a table (default) or JSON array (with --json).
|
|
9
|
+
*
|
|
10
|
+
* Table columns: Name | Template | Phase | Completion | Owner | Stalled
|
|
11
|
+
*
|
|
12
|
+
* Options:
|
|
13
|
+
* --json Machine-readable JSON output (Req 9.2, 11.4)
|
|
14
|
+
* --all Include instances from all local branches (Req 23.6)
|
|
15
|
+
*
|
|
16
|
+
* Requirements: 11.1, 11.2, 11.3, 11.4
|
|
17
|
+
*
|
|
18
|
+
* @module
|
|
19
|
+
*/
|
|
20
|
+
import { Command } from 'commander';
|
|
21
|
+
/**
|
|
22
|
+
* Register the `aidlc status` command on the given commander program.
|
|
23
|
+
*/
|
|
24
|
+
export declare function registerStatus(program: Command): void;
|
|
25
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoQpC;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CASrD"}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aidlc status` command — show progress across active lifecycle instances.
|
|
3
|
+
*
|
|
4
|
+
* Behavior:
|
|
5
|
+
* - Scan `.aidlc/state/` for instance directories.
|
|
6
|
+
* - For each instance: load instance.yaml, load phase states, resolve template.
|
|
7
|
+
* - Compute: completionPercent, isStalled, current owner.
|
|
8
|
+
* - Output a table (default) or JSON array (with --json).
|
|
9
|
+
*
|
|
10
|
+
* Table columns: Name | Template | Phase | Completion | Owner | Stalled
|
|
11
|
+
*
|
|
12
|
+
* Options:
|
|
13
|
+
* --json Machine-readable JSON output (Req 9.2, 11.4)
|
|
14
|
+
* --all Include instances from all local branches (Req 23.6)
|
|
15
|
+
*
|
|
16
|
+
* Requirements: 11.1, 11.2, 11.3, 11.4
|
|
17
|
+
*
|
|
18
|
+
* @module
|
|
19
|
+
*/
|
|
20
|
+
import { Command } from 'commander';
|
|
21
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
22
|
+
import { join, resolve } from 'node:path';
|
|
23
|
+
import { parse as parseYaml } from 'yaml';
|
|
24
|
+
import { fileURLToPath } from 'node:url';
|
|
25
|
+
import { listInstanceDirs, loadSnapshot } from '../state/snapshot-store.js';
|
|
26
|
+
import { completionPercent, isStalled } from '../core/lifecycle.js';
|
|
27
|
+
import { loadTemplates, resolveTemplate } from '../core/template-resolver.js';
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Constants
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
/** Default stalled threshold in days (Req 11.3). */
|
|
32
|
+
const DEFAULT_STALLED_THRESHOLD_DAYS = 7;
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
// Helpers
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
/**
|
|
37
|
+
* Resolve the package root directory.
|
|
38
|
+
*/
|
|
39
|
+
function getPackageRoot() {
|
|
40
|
+
const thisFile = fileURLToPath(import.meta.url);
|
|
41
|
+
return resolve(thisFile, '..', '..', '..');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Load all templates: built-in from the package + custom from the project.
|
|
45
|
+
*/
|
|
46
|
+
function loadAllTemplates(packageRoot, projectRoot) {
|
|
47
|
+
const builtInDir = join(packageRoot, 'templates');
|
|
48
|
+
const customDir = join(projectRoot, '.aidlc', 'templates');
|
|
49
|
+
const templates = loadTemplates(builtInDir);
|
|
50
|
+
if (existsSync(customDir)) {
|
|
51
|
+
const custom = loadTemplates(customDir);
|
|
52
|
+
for (const [name, tpl] of custom) {
|
|
53
|
+
templates.set(name, tpl);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return templates;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Load stalled threshold from project config if it exists.
|
|
60
|
+
*/
|
|
61
|
+
function loadStalledThreshold(projectRoot) {
|
|
62
|
+
const configPath = join(projectRoot, '.aidlc', 'config.yaml');
|
|
63
|
+
try {
|
|
64
|
+
if (existsSync(configPath)) {
|
|
65
|
+
const raw = readFileSync(configPath, 'utf8');
|
|
66
|
+
const config = parseYaml(raw);
|
|
67
|
+
if (config &&
|
|
68
|
+
typeof config.stalled_threshold_days === 'number' &&
|
|
69
|
+
config.stalled_threshold_days > 0) {
|
|
70
|
+
return config.stalled_threshold_days;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Fall through to default
|
|
76
|
+
}
|
|
77
|
+
return DEFAULT_STALLED_THRESHOLD_DAYS;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Load all phase state files for a given instance.
|
|
81
|
+
*
|
|
82
|
+
* Scans for `phase-*.yaml` files in the instance directory.
|
|
83
|
+
*/
|
|
84
|
+
function loadPhaseStates(stateDir, instanceName) {
|
|
85
|
+
const phases = new Map();
|
|
86
|
+
const instanceDir = join(stateDir, instanceName);
|
|
87
|
+
let entries;
|
|
88
|
+
try {
|
|
89
|
+
entries = readdirSync(instanceDir);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return phases;
|
|
93
|
+
}
|
|
94
|
+
const phaseFiles = entries.filter((f) => f.startsWith('phase-') && f.endsWith('.yaml'));
|
|
95
|
+
for (const file of phaseFiles) {
|
|
96
|
+
try {
|
|
97
|
+
const phaseState = loadSnapshot(stateDir, instanceName, file);
|
|
98
|
+
if (phaseState && phaseState.phase) {
|
|
99
|
+
phases.set(phaseState.phase, phaseState);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Skip corrupt phase files — status should still report what it can
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return phases;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Determine the owner of an instance.
|
|
110
|
+
*
|
|
111
|
+
* Checks the current phase's owner first, then falls back to the instance claim session.
|
|
112
|
+
*/
|
|
113
|
+
function determineOwner(instanceState, phaseStates) {
|
|
114
|
+
// Check current phase owner
|
|
115
|
+
const currentPhase = phaseStates.get(instanceState.current_phase);
|
|
116
|
+
if (currentPhase?.owner) {
|
|
117
|
+
return currentPhase.owner;
|
|
118
|
+
}
|
|
119
|
+
// Fall back to instance claim
|
|
120
|
+
if (instanceState.claim?.session) {
|
|
121
|
+
return instanceState.claim.session;
|
|
122
|
+
}
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Build an InstanceSummary for a single instance.
|
|
127
|
+
*/
|
|
128
|
+
function buildInstanceSummary(stateDir, instanceName, allTemplates, now, thresholdDays) {
|
|
129
|
+
// Load instance.yaml
|
|
130
|
+
let instanceState;
|
|
131
|
+
try {
|
|
132
|
+
instanceState = loadSnapshot(stateDir, instanceName, 'instance.yaml');
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// Cannot load instance — skip with no output
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
// Load phase states
|
|
139
|
+
const phaseStates = loadPhaseStates(stateDir, instanceName);
|
|
140
|
+
// Resolve template
|
|
141
|
+
let resolvedTemplate = null;
|
|
142
|
+
const rawTemplate = allTemplates.get(instanceState.template);
|
|
143
|
+
if (rawTemplate) {
|
|
144
|
+
try {
|
|
145
|
+
resolvedTemplate = resolveTemplate(rawTemplate, allTemplates);
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// Template resolution failed — use raw if it has phases
|
|
149
|
+
if (rawTemplate.phases && rawTemplate.phases.length > 0) {
|
|
150
|
+
resolvedTemplate = rawTemplate;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Compute completion and stall
|
|
155
|
+
let percent = 0;
|
|
156
|
+
let stalled = false;
|
|
157
|
+
if (resolvedTemplate) {
|
|
158
|
+
percent = completionPercent(phaseStates, resolvedTemplate, instanceState.scope);
|
|
159
|
+
stalled = isStalled(instanceState, phaseStates, resolvedTemplate, now, thresholdDays);
|
|
160
|
+
}
|
|
161
|
+
// Determine owner
|
|
162
|
+
const owner = determineOwner(instanceState, phaseStates);
|
|
163
|
+
// Determine last updated — use the most recent entered_at or completed_at across phases
|
|
164
|
+
let lastUpdated = instanceState.created_at;
|
|
165
|
+
for (const [, ps] of phaseStates) {
|
|
166
|
+
if (ps.completed_at && ps.completed_at > lastUpdated) {
|
|
167
|
+
lastUpdated = ps.completed_at;
|
|
168
|
+
}
|
|
169
|
+
if (ps.entered_at && ps.entered_at > lastUpdated) {
|
|
170
|
+
lastUpdated = ps.entered_at;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
name: instanceState.name,
|
|
175
|
+
template: instanceState.template,
|
|
176
|
+
current_phase: instanceState.current_phase,
|
|
177
|
+
owner,
|
|
178
|
+
completion_percent: percent,
|
|
179
|
+
last_updated: lastUpdated,
|
|
180
|
+
stalled,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
// ---------------------------------------------------------------------------
|
|
184
|
+
// Output formatting
|
|
185
|
+
// ---------------------------------------------------------------------------
|
|
186
|
+
/**
|
|
187
|
+
* Render a text table from instance summaries.
|
|
188
|
+
*
|
|
189
|
+
* Columns: Name | Template | Phase | Completion | Owner | Stalled
|
|
190
|
+
*/
|
|
191
|
+
function renderTable(summaries) {
|
|
192
|
+
if (summaries.length === 0) {
|
|
193
|
+
return 'No active lifecycle instances.\n';
|
|
194
|
+
}
|
|
195
|
+
// Column headers
|
|
196
|
+
const headers = ['Name', 'Template', 'Phase', 'Completion', 'Owner', 'Stalled'];
|
|
197
|
+
// Build rows
|
|
198
|
+
const rows = summaries.map((s) => [
|
|
199
|
+
s.name,
|
|
200
|
+
s.template,
|
|
201
|
+
String(s.current_phase),
|
|
202
|
+
`${s.completion_percent}%`,
|
|
203
|
+
s.owner || '-',
|
|
204
|
+
s.stalled ? 'yes' : 'no',
|
|
205
|
+
]);
|
|
206
|
+
// Calculate column widths
|
|
207
|
+
const colWidths = headers.map((h, i) => Math.max(h.length, ...rows.map((r) => r[i].length)));
|
|
208
|
+
// Format header
|
|
209
|
+
const headerLine = headers
|
|
210
|
+
.map((h, i) => h.padEnd(colWidths[i]))
|
|
211
|
+
.join(' ');
|
|
212
|
+
const separator = colWidths.map((w) => '-'.repeat(w)).join(' ');
|
|
213
|
+
// Format rows
|
|
214
|
+
const dataLines = rows.map((row) => row.map((cell, i) => cell.padEnd(colWidths[i])).join(' '));
|
|
215
|
+
return [headerLine, separator, ...dataLines, ''].join('\n');
|
|
216
|
+
}
|
|
217
|
+
// ---------------------------------------------------------------------------
|
|
218
|
+
// Command registration
|
|
219
|
+
// ---------------------------------------------------------------------------
|
|
220
|
+
/**
|
|
221
|
+
* Register the `aidlc status` command on the given commander program.
|
|
222
|
+
*/
|
|
223
|
+
export function registerStatus(program) {
|
|
224
|
+
program
|
|
225
|
+
.command('status')
|
|
226
|
+
.description('Show progress across active lifecycle instances')
|
|
227
|
+
.option('--json', 'Output in JSON format for machine consumption')
|
|
228
|
+
.option('--all', 'Include instances from all local branches')
|
|
229
|
+
.action((opts) => {
|
|
230
|
+
runStatus(opts);
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
// ---------------------------------------------------------------------------
|
|
234
|
+
// Core logic
|
|
235
|
+
// ---------------------------------------------------------------------------
|
|
236
|
+
function runStatus(opts) {
|
|
237
|
+
const packageRoot = getPackageRoot();
|
|
238
|
+
const projectRoot = process.cwd();
|
|
239
|
+
const stateDir = join(projectRoot, '.aidlc', 'state');
|
|
240
|
+
// Load templates for resolving instance templates
|
|
241
|
+
const allTemplates = loadAllTemplates(packageRoot, projectRoot);
|
|
242
|
+
// Load configuration for stalled threshold
|
|
243
|
+
const thresholdDays = loadStalledThreshold(projectRoot);
|
|
244
|
+
const now = new Date();
|
|
245
|
+
// List all instance directories
|
|
246
|
+
const instanceNames = listInstanceDirs(stateDir);
|
|
247
|
+
// Build summaries
|
|
248
|
+
const summaries = [];
|
|
249
|
+
for (const name of instanceNames) {
|
|
250
|
+
const summary = buildInstanceSummary(stateDir, name, allTemplates, now, thresholdDays);
|
|
251
|
+
if (summary) {
|
|
252
|
+
summaries.push(summary);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// Output
|
|
256
|
+
if (opts.json) {
|
|
257
|
+
process.stdout.write(JSON.stringify(summaries, null, 2) + '\n');
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
process.stdout.write(renderTable(summaries));
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQzC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE9E,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,oDAAoD;AACpD,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAEzC,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;GAEG;AACH,SAAS,cAAc;IACrB,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,OAAO,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,WAAmB,EACnB,WAAmB;IAEnB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAE3D,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAE5C,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC;YACjC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,WAAmB;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC9B,IACE,MAAM;gBACN,OAAO,MAAM,CAAC,sBAAsB,KAAK,QAAQ;gBACjD,MAAM,CAAC,sBAAsB,GAAG,CAAC,EACjC,CAAC;gBACD,OAAO,MAAM,CAAC,sBAAsB,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;IACD,OAAO,8BAA8B,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CACtB,QAAgB,EAChB,YAAoB;IAEpB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEjD,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CACrD,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,YAAY,CAAa,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;YAC1E,IAAI,UAAU,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oEAAoE;QACtE,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CACrB,aAA4B,EAC5B,WAAoC;IAEpC,4BAA4B;IAC5B,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAClE,IAAI,YAAY,EAAE,KAAK,EAAE,CAAC;QACxB,OAAO,YAAY,CAAC,KAAK,CAAC;IAC5B,CAAC;IAED,8BAA8B;IAC9B,IAAI,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;QACjC,OAAO,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;IACrC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAC3B,QAAgB,EAChB,YAAoB,EACpB,YAA2C,EAC3C,GAAS,EACT,aAAqB;IAErB,qBAAqB;IACrB,IAAI,aAA4B,CAAC;IACjC,IAAI,CAAC;QACH,aAAa,GAAG,YAAY,CAAgB,QAAQ,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;IACvF,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oBAAoB;IACpB,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAE5D,mBAAmB;IACnB,IAAI,gBAAgB,GAA4B,IAAI,CAAC;IACrD,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC7D,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,gBAAgB,GAAG,eAAe,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACP,wDAAwD;YACxD,IAAI,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxD,gBAAgB,GAAG,WAAW,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,GAAG,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;QAChF,OAAO,GAAG,SAAS,CAAC,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;IACxF,CAAC;IAED,kBAAkB;IAClB,MAAM,KAAK,GAAG,cAAc,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IAEzD,wFAAwF;IACxF,IAAI,WAAW,GAAG,aAAa,CAAC,UAAU,CAAC;IAC3C,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC;QACjC,IAAI,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,YAAY,GAAG,WAAW,EAAE,CAAC;YACrD,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC;QAChC,CAAC;QACD,IAAI,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,UAAU,GAAG,WAAW,EAAE,CAAC;YACjD,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,IAAI;QACxB,QAAQ,EAAE,aAAa,CAAC,QAAQ;QAChC,aAAa,EAAE,aAAa,CAAC,aAAa;QAC1C,KAAK;QACL,kBAAkB,EAAE,OAAO;QAC3B,YAAY,EAAE,WAAW;QACzB,OAAO;KACR,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E;;;;GAIG;AACH,SAAS,WAAW,CAAC,SAA4B;IAC/C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,kCAAkC,CAAC;IAC5C,CAAC;IAED,iBAAiB;IACjB,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAEhF,aAAa;IACb,MAAM,IAAI,GAAe,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC5C,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,QAAQ;QACV,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC;QACvB,GAAG,CAAC,CAAC,kBAAkB,GAAG;QAC1B,CAAC,CAAC,KAAK,IAAI,GAAG;QACd,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;KACzB,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACrC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CACpD,CAAC;IAEF,gBAAgB;IAChB,MAAM,UAAU,GAAG,OAAO;SACvB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SACrC,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjE,cAAc;IACd,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACjC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC3D,CAAC;IAEF,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,QAAQ,EAAE,+CAA+C,CAAC;SACjE,MAAM,CAAC,OAAO,EAAE,2CAA2C,CAAC;SAC5D,MAAM,CAAC,CAAC,IAAgB,EAAE,EAAE;QAC3B,SAAS,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC;AAOD,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,SAAS,SAAS,CAAC,IAAgB;IACjC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEtD,kDAAkD;IAClD,MAAM,YAAY,GAAG,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAEhE,2CAA2C;IAC3C,MAAM,aAAa,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,gCAAgC;IAChC,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAEjD,kBAAkB;IAClB,MAAM,SAAS,GAAsB,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,oBAAoB,CAClC,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,GAAG,EACH,aAAa,CACd,CAAC;QACF,IAAI,OAAO,EAAE,CAAC;YACZ,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,SAAS;IACT,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aidlc transition <instance>` command — evaluate gates and advance phase.
|
|
3
|
+
*
|
|
4
|
+
* Behavior:
|
|
5
|
+
* - Load instance state, phase states, and resolve template.
|
|
6
|
+
* - Call `evaluateTransition(state, phaseStates, template, actor, findings, override)`.
|
|
7
|
+
* - Call `nextStep(state, phaseStates, template)` to determine the target phase.
|
|
8
|
+
* - If transition is allowed:
|
|
9
|
+
* - Update current_phase in instance.yaml to the next phase.
|
|
10
|
+
* - Update source phase status to 'complete'.
|
|
11
|
+
* - Update target phase status to 'in-progress'.
|
|
12
|
+
* - Append a TransitionRecord to transitions.log.
|
|
13
|
+
* - Fire on-phase-exit and on-phase-enter events.
|
|
14
|
+
* - Print success message.
|
|
15
|
+
* - If blocked: print all violations, exit code 1.
|
|
16
|
+
*
|
|
17
|
+
* Options:
|
|
18
|
+
* --override Override ownership gate
|
|
19
|
+
* --json Output result as JSON
|
|
20
|
+
*
|
|
21
|
+
* Requirements: 3.6, 6.6, 11.5, 5.5
|
|
22
|
+
*
|
|
23
|
+
* @module
|
|
24
|
+
*/
|
|
25
|
+
import { Command } from 'commander';
|
|
26
|
+
/**
|
|
27
|
+
* Register the `aidlc transition` command on the given commander program.
|
|
28
|
+
*/
|
|
29
|
+
export declare function registerTransition(program: Command): void;
|
|
30
|
+
//# sourceMappingURL=transition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transition.d.ts","sourceRoot":"","sources":["../../src/commands/transition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4KpC;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAUzD"}
|