@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,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":"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"}
@@ -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"}