@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 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/discover/scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Event bus: lifecycle event dispatcher and `.aidlc/actions.yaml` loader/executor.
3
+ *
4
+ * The event system fires actions on lifecycle events (on-instance-start,
5
+ * on-phase-enter, on-phase-exit, on-instance-complete, on-artifact-created).
6
+ *
7
+ * `.aidlc/actions.yaml` is the user-facing declarative configuration layer
8
+ * over the shared event system used by plugin hooks (Req 20.9).
9
+ *
10
+ * Requirements: 20.1, 20.9
11
+ */
12
+ import type { ActionsConfig, EventPayload, DispatchReport } from '../core/types.js';
13
+ /**
14
+ * Load and parse `.aidlc/actions.yaml` into an ActionsConfig.
15
+ *
16
+ * @param actionsPath - Absolute path to the `actions.yaml` file.
17
+ * @returns The parsed config, or `null` if the file does not exist.
18
+ * @throws Error if the file exists but is malformed or fails validation.
19
+ */
20
+ export declare function loadActionsConfig(actionsPath: string): ActionsConfig | null;
21
+ /**
22
+ * Built-in action registry — maps `use` identifiers to handler functions.
23
+ *
24
+ * Each handler receives the event payload and the action's `with` config.
25
+ * Returns `{ success: true }` or `{ success: false; error: string }`.
26
+ */
27
+ export type BuiltInHandler = (event: EventPayload, config: Record<string, unknown> | undefined) => {
28
+ success: boolean;
29
+ error?: string;
30
+ };
31
+ /**
32
+ * Register a custom built-in action handler (for testing / extensibility).
33
+ */
34
+ export declare function registerBuiltIn(name: string, handler: BuiltInHandler): void;
35
+ /**
36
+ * Emit a lifecycle event, matching and executing enabled actions.
37
+ *
38
+ * Behavior (Req 20.5-20.8):
39
+ * - Only actions with `enabled: true` are considered.
40
+ * - Actions must match event type and optional phase filter.
41
+ * - `dryRun: true` → return what would fire, execute nothing.
42
+ * - Non-blocking failure: log + continue.
43
+ * - Blocking failure: halt + report.
44
+ *
45
+ * @param event - The lifecycle event payload.
46
+ * @param actions - Parsed actions config (or null if no actions.yaml).
47
+ * @param opts - Options: `dryRun` to skip execution.
48
+ * @returns A DispatchReport listing what fired and outcomes.
49
+ */
50
+ export declare function emit(event: EventPayload, actions: ActionsConfig | null, opts?: {
51
+ dryRun?: boolean;
52
+ }): DispatchReport;
53
+ //# sourceMappingURL=event-bus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/events/event-bus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EACV,aAAa,EAEb,YAAY,EACZ,cAAc,EAEf,MAAM,kBAAkB,CAAC;AAkD1B;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAyB3E;AAMD;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,KACxC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAqD1C;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAE3E;AA8ED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,IAAI,CAClB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,aAAa,GAAG,IAAI,EAC7B,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,cAAc,CAmChB"}
@@ -0,0 +1,263 @@
1
+ /**
2
+ * Event bus: lifecycle event dispatcher and `.aidlc/actions.yaml` loader/executor.
3
+ *
4
+ * The event system fires actions on lifecycle events (on-instance-start,
5
+ * on-phase-enter, on-phase-exit, on-instance-complete, on-artifact-created).
6
+ *
7
+ * `.aidlc/actions.yaml` is the user-facing declarative configuration layer
8
+ * over the shared event system used by plugin hooks (Req 20.9).
9
+ *
10
+ * Requirements: 20.1, 20.9
11
+ */
12
+ import { readFileSync, existsSync } from 'node:fs';
13
+ import { execSync } from 'node:child_process';
14
+ import { parse } from 'yaml';
15
+ // ---------------------------------------------------------------------------
16
+ // Actions config loader
17
+ // ---------------------------------------------------------------------------
18
+ /**
19
+ * Validate that an actions config object has the expected shape.
20
+ */
21
+ function validateActionsConfig(data) {
22
+ if (data == null || typeof data !== 'object') {
23
+ return 'actions.yaml must be a YAML mapping';
24
+ }
25
+ const obj = data;
26
+ if (typeof obj.version !== 'number') {
27
+ return "missing or invalid 'version' field (expected number)";
28
+ }
29
+ if (!Array.isArray(obj.actions)) {
30
+ return "missing or invalid 'actions' field (expected array)";
31
+ }
32
+ for (let i = 0; i < obj.actions.length; i++) {
33
+ const action = obj.actions[i];
34
+ if (typeof action.id !== 'string') {
35
+ return `actions[${i}]: missing or invalid 'id' field`;
36
+ }
37
+ if (typeof action.event !== 'string') {
38
+ return `actions[${i}]: missing or invalid 'event' field`;
39
+ }
40
+ if (typeof action.enabled !== 'boolean') {
41
+ return `actions[${i}]: missing or invalid 'enabled' field`;
42
+ }
43
+ if (typeof action.blocking !== 'boolean') {
44
+ return `actions[${i}]: missing or invalid 'blocking' field`;
45
+ }
46
+ if (typeof action.description !== 'string') {
47
+ return `actions[${i}]: missing or invalid 'description' field`;
48
+ }
49
+ // Must have either 'use' or 'run', not both
50
+ const hasUse = 'use' in action && typeof action.use === 'string';
51
+ const hasRun = 'run' in action && typeof action.run === 'string';
52
+ if (!hasUse && !hasRun) {
53
+ return `actions[${i}]: must have either 'use' or 'run' field`;
54
+ }
55
+ if (hasUse && hasRun) {
56
+ return `actions[${i}]: cannot have both 'use' and 'run' fields`;
57
+ }
58
+ }
59
+ return null;
60
+ }
61
+ /**
62
+ * Load and parse `.aidlc/actions.yaml` into an ActionsConfig.
63
+ *
64
+ * @param actionsPath - Absolute path to the `actions.yaml` file.
65
+ * @returns The parsed config, or `null` if the file does not exist.
66
+ * @throws Error if the file exists but is malformed or fails validation.
67
+ */
68
+ export function loadActionsConfig(actionsPath) {
69
+ if (!existsSync(actionsPath)) {
70
+ return null;
71
+ }
72
+ let raw;
73
+ try {
74
+ raw = readFileSync(actionsPath, 'utf8');
75
+ }
76
+ catch (err) {
77
+ throw new Error(`Failed to read actions.yaml: ${err.message}`);
78
+ }
79
+ let data;
80
+ try {
81
+ data = parse(raw);
82
+ }
83
+ catch (err) {
84
+ throw new Error(`Failed to parse actions.yaml: ${err.message}`);
85
+ }
86
+ const validationError = validateActionsConfig(data);
87
+ if (validationError) {
88
+ throw new Error(`Invalid actions.yaml: ${validationError}`);
89
+ }
90
+ return data;
91
+ }
92
+ const builtInHandlers = {
93
+ /**
94
+ * git-branch: Create a git branch using a configurable naming pattern.
95
+ * Default pattern: `feature/{instance-name}`
96
+ * Fires on Implementation enter (matched by action config, not hardcoded here).
97
+ */
98
+ 'git-branch': (event, config) => {
99
+ const pattern = config?.pattern ?? 'feature/{instance-name}';
100
+ const branchName = pattern.replace('{instance-name}', event.instance);
101
+ try {
102
+ execSync(`git checkout -b ${branchName}`, { stdio: 'pipe' });
103
+ return { success: true };
104
+ }
105
+ catch (err) {
106
+ return { success: false, error: `git-branch failed: ${err.message}` };
107
+ }
108
+ },
109
+ /**
110
+ * github-issue: Create or update a GitHub issue via `gh` CLI.
111
+ */
112
+ 'github-issue': (event, config) => {
113
+ const title = config?.title ?? `[${event.template}] ${event.instance}`;
114
+ try {
115
+ execSync(`gh issue create --title "${title}" --body "Lifecycle instance: ${event.instance}"`, {
116
+ stdio: 'pipe',
117
+ });
118
+ return { success: true };
119
+ }
120
+ catch (err) {
121
+ return { success: false, error: `github-issue failed: ${err.message}` };
122
+ }
123
+ },
124
+ /**
125
+ * doc-update: Append to a configured documentation file.
126
+ */
127
+ 'doc-update': (event, config) => {
128
+ const file = config?.file;
129
+ if (!file) {
130
+ return { success: false, error: 'doc-update: missing "file" config' };
131
+ }
132
+ const entry = `- [${event.instance}] Phase: ${event.phase ?? 'n/a'} (${event.event})\n`;
133
+ try {
134
+ const { appendFileSync } = require('node:fs');
135
+ appendFileSync(file, entry, 'utf8');
136
+ return { success: true };
137
+ }
138
+ catch (err) {
139
+ return { success: false, error: `doc-update failed: ${err.message}` };
140
+ }
141
+ },
142
+ };
143
+ /**
144
+ * Register a custom built-in action handler (for testing / extensibility).
145
+ */
146
+ export function registerBuiltIn(name, handler) {
147
+ builtInHandlers[name] = handler;
148
+ }
149
+ // ---------------------------------------------------------------------------
150
+ // Action matching
151
+ // ---------------------------------------------------------------------------
152
+ /**
153
+ * Determine whether an action should fire for a given event payload.
154
+ *
155
+ * Conditions:
156
+ * - `action.enabled` must be true
157
+ * - `action.event` must equal `event.event`
158
+ * - If action specifies a `phase` filter, it must match `event.phase`
159
+ */
160
+ function actionMatchesEvent(action, event) {
161
+ if (!action.enabled)
162
+ return false;
163
+ if (action.event !== event.event)
164
+ return false;
165
+ if (action.phase != null && action.phase !== event.phase)
166
+ return false;
167
+ return true;
168
+ }
169
+ // ---------------------------------------------------------------------------
170
+ // Action execution
171
+ // ---------------------------------------------------------------------------
172
+ /**
173
+ * Build environment variables passed to custom actions (Req 20.4).
174
+ */
175
+ function buildEnvVars(event) {
176
+ return {
177
+ AIDLC_EVENT: event.event,
178
+ AIDLC_INSTANCE: event.instance,
179
+ AIDLC_PHASE: event.phase ?? '',
180
+ AIDLC_TEMPLATE: event.template,
181
+ };
182
+ }
183
+ /**
184
+ * Execute a single action (built-in or custom).
185
+ * Returns `{ success, error? }`.
186
+ */
187
+ function executeAction(action, event) {
188
+ if ('use' in action && action.use) {
189
+ // Built-in action
190
+ const handler = builtInHandlers[action.use];
191
+ if (!handler) {
192
+ return { success: false, error: `Unknown built-in action: ${action.use}` };
193
+ }
194
+ return handler(event, action.with);
195
+ }
196
+ if ('run' in action && action.run) {
197
+ // Custom shell command
198
+ const env = { ...process.env, ...buildEnvVars(event) };
199
+ const stdinPayload = JSON.stringify(event);
200
+ try {
201
+ execSync(action.run, {
202
+ env,
203
+ input: stdinPayload,
204
+ stdio: ['pipe', 'pipe', 'pipe'],
205
+ timeout: 30_000,
206
+ });
207
+ return { success: true };
208
+ }
209
+ catch (err) {
210
+ return { success: false, error: `Command failed: ${err.message}` };
211
+ }
212
+ }
213
+ return { success: false, error: 'Action has neither "use" nor "run" field' };
214
+ }
215
+ // ---------------------------------------------------------------------------
216
+ // Event dispatcher
217
+ // ---------------------------------------------------------------------------
218
+ /**
219
+ * Emit a lifecycle event, matching and executing enabled actions.
220
+ *
221
+ * Behavior (Req 20.5-20.8):
222
+ * - Only actions with `enabled: true` are considered.
223
+ * - Actions must match event type and optional phase filter.
224
+ * - `dryRun: true` → return what would fire, execute nothing.
225
+ * - Non-blocking failure: log + continue.
226
+ * - Blocking failure: halt + report.
227
+ *
228
+ * @param event - The lifecycle event payload.
229
+ * @param actions - Parsed actions config (or null if no actions.yaml).
230
+ * @param opts - Options: `dryRun` to skip execution.
231
+ * @returns A DispatchReport listing what fired and outcomes.
232
+ */
233
+ export function emit(event, actions, opts) {
234
+ const dryRun = opts?.dryRun ?? false;
235
+ const report = { fired: [], dryRun };
236
+ if (!actions || !actions.actions.length) {
237
+ return report;
238
+ }
239
+ // Match enabled actions
240
+ const matched = actions.actions.filter((a) => actionMatchesEvent(a, event));
241
+ if (dryRun) {
242
+ // Dry run: report what would fire without executing
243
+ for (const action of matched) {
244
+ report.fired.push({ id: action.id, success: true });
245
+ }
246
+ return report;
247
+ }
248
+ // Execute matched actions
249
+ for (const action of matched) {
250
+ const result = executeAction(action, event);
251
+ report.fired.push({
252
+ id: action.id,
253
+ success: result.success,
254
+ error: result.error,
255
+ });
256
+ // Blocking failure halts further action execution
257
+ if (!result.success && action.blocking) {
258
+ break;
259
+ }
260
+ }
261
+ return report;
262
+ }
263
+ //# sourceMappingURL=event-bus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../src/events/event-bus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Plugin hooks: discovery from `.aidlc/plugins/<name>/plugin.yaml` and
3
+ * hook firing alongside lifecycle actions.
4
+ *
5
+ * Plugin hooks fire on the same lifecycle events as user-configured actions
6
+ * (Req 20.9). All plugin hooks are currently non-blocking — they log errors
7
+ * but never halt transitions. Network failures in plugins are also non-blocking
8
+ * (Req 14.5).
9
+ *
10
+ * Requirements: 10.1, 10.2, 10.5, 10.6, 10.7, 14.5
11
+ */
12
+ import type { PluginManifest, EventPayload, DispatchReport } from '../core/types.js';
13
+ /**
14
+ * Discover plugins from a `.aidlc/plugins/` directory.
15
+ *
16
+ * Scans subdirectories for `plugin.yaml` manifest files, validates them,
17
+ * and returns an array of valid PluginManifest objects.
18
+ *
19
+ * Malformed plugins are logged to stderr and skipped — they do not prevent
20
+ * other plugins from loading (Req 10.6).
21
+ *
22
+ * @param pluginsDir - Absolute path to the `.aidlc/plugins/` directory.
23
+ * @returns Array of valid plugin manifests discovered.
24
+ */
25
+ export declare function discoverPlugins(pluginsDir: string): PluginManifest[];
26
+ /**
27
+ * Fire plugin hooks that match a lifecycle event.
28
+ *
29
+ * Hooks fire alongside user-configured actions (same lifecycle events).
30
+ * All plugin hooks are currently non-blocking: errors are logged but
31
+ * transitions are never halted.
32
+ *
33
+ * Network failures in a plugin are treated as non-blocking (Req 14.5):
34
+ * logged and continued.
35
+ *
36
+ * @param plugins - Array of discovered plugin manifests.
37
+ * @param event - The lifecycle event payload.
38
+ * @param opts - Options: `dryRun` to skip execution and just report matches.
39
+ * @returns A DispatchReport listing what fired and outcomes.
40
+ */
41
+ export declare function firePluginHooks(plugins: PluginManifest[], event: EventPayload, opts?: {
42
+ dryRun?: boolean;
43
+ }): DispatchReport;
44
+ //# sourceMappingURL=plugin-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-hooks.d.ts","sourceRoot":"","sources":["../../src/events/plugin-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EACV,cAAc,EAEd,YAAY,EACZ,cAAc,EAEf,MAAM,kBAAkB,CAAC;AA0E1B;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE,CA6EpE;AAmBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,cAAc,EAAE,EACzB,KAAK,EAAE,YAAY,EACnB,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,cAAc,CA2ChB"}
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Plugin hooks: discovery from `.aidlc/plugins/<name>/plugin.yaml` and
3
+ * hook firing alongside lifecycle actions.
4
+ *
5
+ * Plugin hooks fire on the same lifecycle events as user-configured actions
6
+ * (Req 20.9). All plugin hooks are currently non-blocking — they log errors
7
+ * but never halt transitions. Network failures in plugins are also non-blocking
8
+ * (Req 14.5).
9
+ *
10
+ * Requirements: 10.1, 10.2, 10.5, 10.6, 10.7, 14.5
11
+ */
12
+ import { readdirSync, readFileSync, existsSync, statSync } from 'node:fs';
13
+ import { execSync } from 'node:child_process';
14
+ import { join, resolve } from 'node:path';
15
+ import { parse } from 'yaml';
16
+ // ---------------------------------------------------------------------------
17
+ // Plugin manifest validation
18
+ // ---------------------------------------------------------------------------
19
+ /** Valid lifecycle events for plugin hooks. */
20
+ const VALID_EVENTS = new Set([
21
+ 'on-instance-start',
22
+ 'on-phase-enter',
23
+ 'on-phase-exit',
24
+ 'on-instance-complete',
25
+ 'on-artifact-created',
26
+ ]);
27
+ /**
28
+ * Validate a parsed plugin manifest object.
29
+ * Returns null if valid, or an error string describing the first failure.
30
+ */
31
+ function validatePluginManifest(data, pluginDir) {
32
+ if (data == null || typeof data !== 'object') {
33
+ return `plugin.yaml in ${pluginDir} must be a YAML mapping`;
34
+ }
35
+ const obj = data;
36
+ if (typeof obj.name !== 'string' || obj.name.trim() === '') {
37
+ return `plugin.yaml in ${pluginDir}: missing or invalid 'name' field (expected non-empty string)`;
38
+ }
39
+ if (typeof obj.version !== 'string' || obj.version.trim() === '') {
40
+ return `plugin.yaml in ${pluginDir}: missing or invalid 'version' field (expected non-empty string)`;
41
+ }
42
+ if (typeof obj.description !== 'string') {
43
+ return `plugin.yaml in ${pluginDir}: missing or invalid 'description' field (expected string)`;
44
+ }
45
+ // skills: optional array of strings (defaults to [])
46
+ if (obj.skills != null) {
47
+ if (!Array.isArray(obj.skills)) {
48
+ return `plugin.yaml in ${pluginDir}: 'skills' must be an array`;
49
+ }
50
+ for (let i = 0; i < obj.skills.length; i++) {
51
+ if (typeof obj.skills[i] !== 'string') {
52
+ return `plugin.yaml in ${pluginDir}: skills[${i}] must be a string`;
53
+ }
54
+ }
55
+ }
56
+ // hooks: optional array of hook objects (defaults to [])
57
+ if (obj.hooks != null) {
58
+ if (!Array.isArray(obj.hooks)) {
59
+ return `plugin.yaml in ${pluginDir}: 'hooks' must be an array`;
60
+ }
61
+ for (let i = 0; i < obj.hooks.length; i++) {
62
+ const hook = obj.hooks[i];
63
+ if (hook == null || typeof hook !== 'object') {
64
+ return `plugin.yaml in ${pluginDir}: hooks[${i}] must be an object`;
65
+ }
66
+ if (typeof hook.event !== 'string' || !VALID_EVENTS.has(hook.event)) {
67
+ return `plugin.yaml in ${pluginDir}: hooks[${i}].event must be one of: ${[...VALID_EVENTS].join(', ')}`;
68
+ }
69
+ if (typeof hook.run !== 'string' || hook.run.trim() === '') {
70
+ return `plugin.yaml in ${pluginDir}: hooks[${i}].run must be a non-empty string`;
71
+ }
72
+ }
73
+ }
74
+ return null;
75
+ }
76
+ // ---------------------------------------------------------------------------
77
+ // Plugin discovery
78
+ // ---------------------------------------------------------------------------
79
+ /**
80
+ * Discover plugins from a `.aidlc/plugins/` directory.
81
+ *
82
+ * Scans subdirectories for `plugin.yaml` manifest files, validates them,
83
+ * and returns an array of valid PluginManifest objects.
84
+ *
85
+ * Malformed plugins are logged to stderr and skipped — they do not prevent
86
+ * other plugins from loading (Req 10.6).
87
+ *
88
+ * @param pluginsDir - Absolute path to the `.aidlc/plugins/` directory.
89
+ * @returns Array of valid plugin manifests discovered.
90
+ */
91
+ export function discoverPlugins(pluginsDir) {
92
+ const plugins = [];
93
+ if (!existsSync(pluginsDir)) {
94
+ return plugins;
95
+ }
96
+ let entries;
97
+ try {
98
+ entries = readdirSync(pluginsDir);
99
+ }
100
+ catch {
101
+ return plugins;
102
+ }
103
+ for (const entry of entries) {
104
+ const entryPath = join(pluginsDir, entry);
105
+ // Only consider directories
106
+ let stat;
107
+ try {
108
+ stat = statSync(entryPath);
109
+ }
110
+ catch {
111
+ continue;
112
+ }
113
+ if (!stat.isDirectory()) {
114
+ continue;
115
+ }
116
+ const manifestPath = join(entryPath, 'plugin.yaml');
117
+ if (!existsSync(manifestPath)) {
118
+ continue;
119
+ }
120
+ // Read and parse the manifest
121
+ let raw;
122
+ try {
123
+ raw = readFileSync(manifestPath, 'utf8');
124
+ }
125
+ catch (err) {
126
+ process.stderr.write(`[aidlc] plugin error: failed to read ${manifestPath}: ${err.message}\n`);
127
+ continue;
128
+ }
129
+ let data;
130
+ try {
131
+ data = parse(raw);
132
+ }
133
+ catch (err) {
134
+ process.stderr.write(`[aidlc] plugin error: failed to parse ${manifestPath}: ${err.message}\n`);
135
+ continue;
136
+ }
137
+ const validationError = validatePluginManifest(data, entry);
138
+ if (validationError) {
139
+ process.stderr.write(`[aidlc] plugin error: ${validationError}\n`);
140
+ continue;
141
+ }
142
+ // Build the manifest object with defaults for optional fields
143
+ const obj = data;
144
+ const manifest = {
145
+ name: obj.name,
146
+ version: obj.version,
147
+ description: obj.description,
148
+ skills: obj.skills ?? [],
149
+ hooks: (obj.hooks ?? []).map((h) => ({
150
+ event: h.event,
151
+ run: h.run,
152
+ })),
153
+ };
154
+ plugins.push(manifest);
155
+ }
156
+ return plugins;
157
+ }
158
+ // ---------------------------------------------------------------------------
159
+ // Plugin hook firing
160
+ // ---------------------------------------------------------------------------
161
+ /**
162
+ * Build environment variables passed to plugin hook commands.
163
+ * Same contract as user-configured actions (Req 20.4).
164
+ */
165
+ function buildEnvVars(event) {
166
+ return {
167
+ AIDLC_EVENT: event.event,
168
+ AIDLC_INSTANCE: event.instance,
169
+ AIDLC_PHASE: event.phase ?? '',
170
+ AIDLC_TEMPLATE: event.template,
171
+ };
172
+ }
173
+ /**
174
+ * Fire plugin hooks that match a lifecycle event.
175
+ *
176
+ * Hooks fire alongside user-configured actions (same lifecycle events).
177
+ * All plugin hooks are currently non-blocking: errors are logged but
178
+ * transitions are never halted.
179
+ *
180
+ * Network failures in a plugin are treated as non-blocking (Req 14.5):
181
+ * logged and continued.
182
+ *
183
+ * @param plugins - Array of discovered plugin manifests.
184
+ * @param event - The lifecycle event payload.
185
+ * @param opts - Options: `dryRun` to skip execution and just report matches.
186
+ * @returns A DispatchReport listing what fired and outcomes.
187
+ */
188
+ export function firePluginHooks(plugins, event, opts) {
189
+ const dryRun = opts?.dryRun ?? false;
190
+ const report = { fired: [], dryRun };
191
+ // Collect matching hooks across all plugins
192
+ for (const plugin of plugins) {
193
+ for (const hook of plugin.hooks) {
194
+ if (hook.event !== event.event) {
195
+ continue;
196
+ }
197
+ const hookId = `${plugin.name}:${hook.event}`;
198
+ if (dryRun) {
199
+ report.fired.push({ id: hookId, success: true });
200
+ continue;
201
+ }
202
+ // Execute the hook command (non-blocking: errors logged, never halt)
203
+ const env = { ...process.env, ...buildEnvVars(event) };
204
+ const stdinPayload = JSON.stringify(event);
205
+ try {
206
+ execSync(hook.run, {
207
+ env,
208
+ input: stdinPayload,
209
+ stdio: ['pipe', 'pipe', 'pipe'],
210
+ timeout: 30_000,
211
+ cwd: undefined,
212
+ });
213
+ report.fired.push({ id: hookId, success: true });
214
+ }
215
+ catch (err) {
216
+ const errorMsg = err.message;
217
+ process.stderr.write(`[aidlc] plugin hook error (${plugin.name}): ${hook.run} failed: ${errorMsg}\n`);
218
+ report.fired.push({ id: hookId, success: false, error: errorMsg });
219
+ // Non-blocking: continue to next hook
220
+ }
221
+ }
222
+ }
223
+ return report;
224
+ }
225
+ //# sourceMappingURL=plugin-hooks.js.map