@studio-foundation/engine 0.3.0-beta.1 → 0.3.0-beta.5

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 (246) hide show
  1. package/dist/__tests__/engine.conditions-group.test.d.ts +2 -0
  2. package/dist/__tests__/engine.conditions-group.test.d.ts.map +1 -0
  3. package/dist/__tests__/engine.conditions-group.test.js +222 -0
  4. package/dist/__tests__/engine.conditions-group.test.js.map +1 -0
  5. package/dist/__tests__/engine.conditions.test.d.ts +2 -0
  6. package/dist/__tests__/engine.conditions.test.d.ts.map +1 -0
  7. package/dist/__tests__/engine.conditions.test.js +164 -0
  8. package/dist/__tests__/engine.conditions.test.js.map +1 -0
  9. package/dist/__tests__/engine.resume.test.d.ts +2 -0
  10. package/dist/__tests__/engine.resume.test.d.ts.map +1 -0
  11. package/dist/__tests__/engine.resume.test.js +93 -0
  12. package/dist/__tests__/engine.resume.test.js.map +1 -0
  13. package/dist/__tests__/engine.script-stage.test.d.ts +2 -0
  14. package/dist/__tests__/engine.script-stage.test.d.ts.map +1 -0
  15. package/dist/__tests__/engine.script-stage.test.js +108 -0
  16. package/dist/__tests__/engine.script-stage.test.js.map +1 -0
  17. package/dist/db/client.d.ts +3 -0
  18. package/dist/db/client.d.ts.map +1 -0
  19. package/{src/db/client.ts → dist/db/client.js} +1 -2
  20. package/dist/db/client.js.map +1 -0
  21. package/dist/engine.context-event.test.d.ts +2 -0
  22. package/dist/engine.context-event.test.d.ts.map +1 -0
  23. package/dist/engine.context-event.test.js +111 -0
  24. package/dist/engine.context-event.test.js.map +1 -0
  25. package/dist/engine.d.ts +52 -0
  26. package/dist/engine.d.ts.map +1 -0
  27. package/dist/engine.js +364 -0
  28. package/dist/engine.js.map +1 -0
  29. package/dist/events.d.ts +163 -0
  30. package/dist/events.d.ts.map +1 -0
  31. package/dist/events.js +12 -0
  32. package/dist/events.js.map +1 -0
  33. package/{src/index.ts → dist/index.d.ts} +3 -45
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +24 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/pipeline/agent-loader.d.ts +4 -0
  38. package/dist/pipeline/agent-loader.d.ts.map +1 -0
  39. package/dist/pipeline/agent-loader.js +28 -0
  40. package/dist/pipeline/agent-loader.js.map +1 -0
  41. package/dist/pipeline/agent-loader.test.d.ts +2 -0
  42. package/dist/pipeline/agent-loader.test.d.ts.map +1 -0
  43. package/dist/pipeline/agent-loader.test.js +134 -0
  44. package/dist/pipeline/agent-loader.test.js.map +1 -0
  45. package/dist/pipeline/condition-evaluator.d.ts +6 -0
  46. package/dist/pipeline/condition-evaluator.d.ts.map +1 -0
  47. package/dist/pipeline/condition-evaluator.js +105 -0
  48. package/dist/pipeline/condition-evaluator.js.map +1 -0
  49. package/dist/pipeline/condition-evaluator.test.d.ts +2 -0
  50. package/dist/pipeline/condition-evaluator.test.d.ts.map +1 -0
  51. package/dist/pipeline/condition-evaluator.test.js +103 -0
  52. package/dist/pipeline/condition-evaluator.test.js.map +1 -0
  53. package/dist/pipeline/context-pack-loader.d.ts +3 -0
  54. package/dist/pipeline/context-pack-loader.d.ts.map +1 -0
  55. package/dist/pipeline/context-pack-loader.js +51 -0
  56. package/dist/pipeline/context-pack-loader.js.map +1 -0
  57. package/dist/pipeline/context-propagation.d.ts +28 -0
  58. package/dist/pipeline/context-propagation.d.ts.map +1 -0
  59. package/dist/pipeline/context-propagation.js +161 -0
  60. package/dist/pipeline/context-propagation.js.map +1 -0
  61. package/dist/pipeline/context-propagation.test.d.ts +2 -0
  62. package/dist/pipeline/context-propagation.test.d.ts.map +1 -0
  63. package/dist/pipeline/context-propagation.test.js +194 -0
  64. package/dist/pipeline/context-propagation.test.js.map +1 -0
  65. package/dist/pipeline/contract-loader.d.ts +4 -0
  66. package/dist/pipeline/contract-loader.d.ts.map +1 -0
  67. package/dist/pipeline/contract-loader.js +30 -0
  68. package/dist/pipeline/contract-loader.js.map +1 -0
  69. package/dist/pipeline/group-orchestrator.d.ts +19 -0
  70. package/dist/pipeline/group-orchestrator.d.ts.map +1 -0
  71. package/dist/pipeline/group-orchestrator.js +376 -0
  72. package/dist/pipeline/group-orchestrator.js.map +1 -0
  73. package/dist/pipeline/hook-executor.d.ts +28 -0
  74. package/dist/pipeline/hook-executor.d.ts.map +1 -0
  75. package/dist/pipeline/hook-executor.js +63 -0
  76. package/dist/pipeline/hook-executor.js.map +1 -0
  77. package/dist/pipeline/hook-executor.test.d.ts +2 -0
  78. package/dist/pipeline/hook-executor.test.d.ts.map +1 -0
  79. package/dist/pipeline/hook-executor.test.js +71 -0
  80. package/dist/pipeline/hook-executor.test.js.map +1 -0
  81. package/dist/pipeline/invariants-loader.d.ts +6 -0
  82. package/dist/pipeline/invariants-loader.d.ts.map +1 -0
  83. package/dist/pipeline/invariants-loader.js +15 -0
  84. package/dist/pipeline/invariants-loader.js.map +1 -0
  85. package/dist/pipeline/invariants-loader.test.d.ts +2 -0
  86. package/dist/pipeline/invariants-loader.test.d.ts.map +1 -0
  87. package/dist/pipeline/invariants-loader.test.js +39 -0
  88. package/dist/pipeline/invariants-loader.test.js.map +1 -0
  89. package/dist/pipeline/loader.d.ts +5 -0
  90. package/dist/pipeline/loader.d.ts.map +1 -0
  91. package/dist/pipeline/loader.js +132 -0
  92. package/dist/pipeline/loader.js.map +1 -0
  93. package/dist/pipeline/loader.test.d.ts +2 -0
  94. package/dist/pipeline/loader.test.d.ts.map +1 -0
  95. package/dist/pipeline/loader.test.js +120 -0
  96. package/dist/pipeline/loader.test.js.map +1 -0
  97. package/dist/pipeline/output-validator.d.ts +10 -0
  98. package/dist/pipeline/output-validator.d.ts.map +1 -0
  99. package/dist/pipeline/output-validator.js +20 -0
  100. package/dist/pipeline/output-validator.js.map +1 -0
  101. package/dist/pipeline/output-validator.test.d.ts +2 -0
  102. package/dist/pipeline/output-validator.test.d.ts.map +1 -0
  103. package/dist/pipeline/output-validator.test.js +77 -0
  104. package/dist/pipeline/output-validator.test.js.map +1 -0
  105. package/dist/pipeline/post-validator.d.ts +8 -0
  106. package/dist/pipeline/post-validator.d.ts.map +1 -0
  107. package/dist/pipeline/post-validator.js +103 -0
  108. package/dist/pipeline/post-validator.js.map +1 -0
  109. package/dist/pipeline/skill-loader.d.ts +10 -0
  110. package/dist/pipeline/skill-loader.d.ts.map +1 -0
  111. package/dist/pipeline/skill-loader.js +26 -0
  112. package/dist/pipeline/skill-loader.js.map +1 -0
  113. package/dist/pipeline/skill-loader.test.d.ts +2 -0
  114. package/dist/pipeline/skill-loader.test.d.ts.map +1 -0
  115. package/dist/pipeline/skill-loader.test.js +38 -0
  116. package/dist/pipeline/skill-loader.test.js.map +1 -0
  117. package/dist/pipeline/stage-executor.d.ts +26 -0
  118. package/dist/pipeline/stage-executor.d.ts.map +1 -0
  119. package/dist/pipeline/stage-executor.js +540 -0
  120. package/dist/pipeline/stage-executor.js.map +1 -0
  121. package/dist/pipeline/stage-resolver.d.ts +3 -0
  122. package/dist/pipeline/stage-resolver.d.ts.map +1 -0
  123. package/dist/pipeline/stage-resolver.js +6 -0
  124. package/dist/pipeline/stage-resolver.js.map +1 -0
  125. package/dist/pipeline/startup-executor.d.ts +3 -0
  126. package/dist/pipeline/startup-executor.d.ts.map +1 -0
  127. package/dist/pipeline/startup-executor.js +23 -0
  128. package/dist/pipeline/startup-executor.js.map +1 -0
  129. package/dist/pipeline/startup-executor.test.d.ts +2 -0
  130. package/dist/pipeline/startup-executor.test.d.ts.map +1 -0
  131. package/dist/pipeline/startup-executor.test.js +34 -0
  132. package/dist/pipeline/startup-executor.test.js.map +1 -0
  133. package/dist/pipeline/types.d.ts +28 -0
  134. package/dist/pipeline/types.d.ts.map +1 -0
  135. package/dist/pipeline/types.js +12 -0
  136. package/dist/pipeline/types.js.map +1 -0
  137. package/dist/repo-resolver.d.ts +10 -0
  138. package/dist/repo-resolver.d.ts.map +1 -0
  139. package/dist/repo-resolver.js +39 -0
  140. package/dist/repo-resolver.js.map +1 -0
  141. package/dist/spawners/direct-engine-spawner.d.ts +8 -0
  142. package/dist/spawners/direct-engine-spawner.d.ts.map +1 -0
  143. package/dist/spawners/direct-engine-spawner.js +24 -0
  144. package/dist/spawners/direct-engine-spawner.js.map +1 -0
  145. package/dist/state/run-store.d.ts +74 -0
  146. package/dist/state/run-store.d.ts.map +1 -0
  147. package/dist/state/run-store.js +269 -0
  148. package/dist/state/run-store.js.map +1 -0
  149. package/dist/state/run-store.test.d.ts +2 -0
  150. package/dist/state/run-store.test.d.ts.map +1 -0
  151. package/dist/state/run-store.test.js +130 -0
  152. package/dist/state/run-store.test.js.map +1 -0
  153. package/dist/state/state-machine.d.ts +6 -0
  154. package/dist/state/state-machine.d.ts.map +1 -0
  155. package/dist/state/state-machine.js +27 -0
  156. package/dist/state/state-machine.js.map +1 -0
  157. package/dist/state/status-derivation.d.ts +12 -0
  158. package/dist/state/status-derivation.d.ts.map +1 -0
  159. package/dist/state/status-derivation.js +30 -0
  160. package/dist/state/status-derivation.js.map +1 -0
  161. package/package.json +7 -4
  162. package/ARCHITECTURE.md +0 -57
  163. package/src/__tests__/__fixtures__/script-stage/contracts/book-context.contract.yaml +0 -4
  164. package/src/__tests__/engine.conditions-group.test.ts +0 -244
  165. package/src/__tests__/engine.conditions.test.ts +0 -186
  166. package/src/__tests__/engine.resume.test.ts +0 -108
  167. package/src/__tests__/engine.script-stage.test.ts +0 -125
  168. package/src/engine.context-event.test.ts +0 -175
  169. package/src/engine.ts +0 -491
  170. package/src/events.ts +0 -167
  171. package/src/pipeline/agent-loader.test.ts +0 -151
  172. package/src/pipeline/agent-loader.ts +0 -39
  173. package/src/pipeline/condition-evaluator.test.ts +0 -129
  174. package/src/pipeline/condition-evaluator.ts +0 -121
  175. package/src/pipeline/context-pack-loader.ts +0 -63
  176. package/src/pipeline/context-propagation.test.ts +0 -237
  177. package/src/pipeline/context-propagation.ts +0 -235
  178. package/src/pipeline/contract-loader.ts +0 -41
  179. package/src/pipeline/group-orchestrator.ts +0 -483
  180. package/src/pipeline/hook-executor.test.ts +0 -121
  181. package/src/pipeline/hook-executor.ts +0 -87
  182. package/src/pipeline/invariants-loader.test.ts +0 -51
  183. package/src/pipeline/invariants-loader.ts +0 -14
  184. package/src/pipeline/loader.test.ts +0 -128
  185. package/src/pipeline/loader.ts +0 -149
  186. package/src/pipeline/output-validator.test.ts +0 -100
  187. package/src/pipeline/output-validator.ts +0 -40
  188. package/src/pipeline/post-validator.ts +0 -124
  189. package/src/pipeline/skill-loader.test.ts +0 -44
  190. package/src/pipeline/skill-loader.ts +0 -32
  191. package/src/pipeline/stage-executor.ts +0 -654
  192. package/src/pipeline/stage-resolver.ts +0 -8
  193. package/src/pipeline/startup-executor.test.ts +0 -37
  194. package/src/pipeline/startup-executor.ts +0 -32
  195. package/src/pipeline/types.ts +0 -42
  196. package/src/repo-resolver.ts +0 -61
  197. package/src/spawners/direct-engine-spawner.ts +0 -26
  198. package/src/state/run-store.test.ts +0 -157
  199. package/src/state/run-store.ts +0 -362
  200. package/src/state/state-machine.ts +0 -35
  201. package/src/state/status-derivation.ts +0 -36
  202. package/tests/context-pack-loader.test.ts +0 -113
  203. package/tests/context-propagation.test.ts +0 -267
  204. package/tests/direct-engine-spawner.test.ts +0 -102
  205. package/tests/e2e/feature-v5.test.ts +0 -57
  206. package/tests/events.test.ts +0 -56
  207. package/tests/fixtures/agents/test-agent.agent.yaml +0 -5
  208. package/tests/fixtures/contracts/code-gen.contract.yaml +0 -6
  209. package/tests/fixtures/contracts/qa-gate.contract.yaml +0 -15
  210. package/tests/fixtures/contracts/test-contract.contract.yaml +0 -6
  211. package/tests/fixtures/pipelines/group-test.pipeline.yaml +0 -40
  212. package/tests/fixtures/pipelines/simple.pipeline.yaml +0 -15
  213. package/tests/fixtures/pipelines/two-stage.pipeline.yaml +0 -24
  214. package/tests/fixtures/software/pipelines/feature-builder.pipeline.yaml +0 -75
  215. package/tests/fixtures/test-project/agents/test-agent.agent.yaml +0 -5
  216. package/tests/fixtures/test-project/contracts/basic-result.contract.yaml +0 -6
  217. package/tests/fixtures/test-project/contracts/code-gen.contract.yaml +0 -6
  218. package/tests/fixtures/test-project/contracts/maximum-only.contract.yaml +0 -8
  219. package/tests/fixtures/test-project/contracts/qa-gate.contract.yaml +0 -15
  220. package/tests/fixtures/test-project/contracts/strict-result.contract.yaml +0 -7
  221. package/tests/fixtures/test-project/contracts/test-contract.contract.yaml +0 -6
  222. package/tests/fixtures/test-project/pipelines/group-simple.pipeline.yaml +0 -26
  223. package/tests/fixtures/test-project/pipelines/group-test.pipeline.yaml +0 -40
  224. package/tests/fixtures/test-project/pipelines/hook-output-template.pipeline.yaml +0 -19
  225. package/tests/fixtures/test-project/pipelines/hook-reject-on-failure.pipeline.yaml +0 -19
  226. package/tests/fixtures/test-project/pipelines/maximum-only.pipeline.yaml +0 -15
  227. package/tests/fixtures/test-project/pipelines/parallel-collect-all-test.pipeline.yaml +0 -39
  228. package/tests/fixtures/test-project/pipelines/parallel-context-isolation-test.pipeline.yaml +0 -38
  229. package/tests/fixtures/test-project/pipelines/parallel-fail-test.pipeline.yaml +0 -39
  230. package/tests/fixtures/test-project/pipelines/parallel-test.pipeline.yaml +0 -39
  231. package/tests/fixtures/test-project/pipelines/parallel-then-sequential-test.pipeline.yaml +0 -38
  232. package/tests/fixtures/test-project/pipelines/simple.pipeline.yaml +0 -15
  233. package/tests/fixtures/test-project/pipelines/two-stage.pipeline.yaml +0 -24
  234. package/tests/fixtures/test-project/pipelines/with-startup.pipeline.yaml +0 -19
  235. package/tests/loader.test.ts +0 -385
  236. package/tests/post-validator.test.ts +0 -297
  237. package/tests/repo-resolver.test.ts +0 -102
  238. package/tests/run-store.test.ts +0 -143
  239. package/tests/state-machine.test.ts +0 -110
  240. package/tests/unit/context-propagation.test.ts +0 -45
  241. package/tests/unit/engine.test.ts +0 -770
  242. package/tests/unit/group-loop.test.ts +0 -389
  243. package/tests/unit/group-parallel.test.ts +0 -423
  244. package/tests/unit/state/status-derivation.test.ts +0 -88
  245. package/tsconfig.json +0 -24
  246. package/vitest.config.ts +0 -14
@@ -0,0 +1,163 @@
1
+ import type { ToolCall, ToolCallStartEvent, ToolCallCompleteEvent, AgentThinkingEvent, AgentProgressEvent, AgentTokenEvent } from '@studio-foundation/contracts';
2
+ export interface ToolCallSummary {
3
+ name: string;
4
+ arguments_summary: string;
5
+ }
6
+ export interface TokenUsage {
7
+ prompt_tokens: number;
8
+ completion_tokens: number;
9
+ total_tokens: number;
10
+ }
11
+ export interface PipelineStartEvent {
12
+ pipeline_name: string;
13
+ run_id: string;
14
+ }
15
+ export interface PipelineCompleteEvent {
16
+ pipeline_name: string;
17
+ run_id: string;
18
+ status: string;
19
+ duration_ms: number;
20
+ total_tokens: number;
21
+ total_tool_calls: number;
22
+ }
23
+ export interface PipelineCancelledEvent {
24
+ run_id: string;
25
+ cancelled_at_stage: string;
26
+ duration_ms: number;
27
+ }
28
+ export interface StageStartEvent {
29
+ stage_name: string;
30
+ stage_index: number;
31
+ total_stages: number;
32
+ max_attempts: number;
33
+ }
34
+ export interface StageCompleteEvent {
35
+ stage_name: string;
36
+ stage_index: number;
37
+ total_stages: number;
38
+ status: string;
39
+ attempts: number;
40
+ duration_ms: number;
41
+ output_summary?: string;
42
+ output?: unknown;
43
+ tool_calls?: ToolCall[];
44
+ token_usage?: TokenUsage;
45
+ rejection_reason?: string;
46
+ rejection_details?: string[];
47
+ skipped_reason?: string;
48
+ }
49
+ export interface StageRetryEvent {
50
+ stage: string;
51
+ attempt: number;
52
+ max_attempts: number;
53
+ failures: string[];
54
+ agent_output_raw?: string;
55
+ tool_calls_count?: number;
56
+ }
57
+ export interface GroupStartEvent {
58
+ group_name: string;
59
+ max_iterations: number;
60
+ parallel?: boolean;
61
+ }
62
+ export interface GroupIterationEvent {
63
+ group_name: string;
64
+ iteration: number;
65
+ max_iterations: number;
66
+ }
67
+ export interface GroupFeedbackEvent {
68
+ group_name: string;
69
+ iteration: number;
70
+ rejection_reason: string;
71
+ rejection_details: string[];
72
+ }
73
+ export interface GroupCompleteEvent {
74
+ group_name: string;
75
+ iterations: number;
76
+ status: string;
77
+ }
78
+ export interface StageContextEvent {
79
+ stage: string;
80
+ run_id: string;
81
+ context_keys: Record<string, number>;
82
+ context_content?: Record<string, unknown>;
83
+ system_prompt?: string;
84
+ }
85
+ export interface StagedToolCallStartEvent extends ToolCallStartEvent {
86
+ stage: string;
87
+ }
88
+ export interface StagedToolCallCompleteEvent extends ToolCallCompleteEvent {
89
+ stage: string;
90
+ }
91
+ export interface StagedAgentThinkingEvent extends AgentThinkingEvent {
92
+ stage: string;
93
+ }
94
+ export interface StagedAgentProgressEvent extends AgentProgressEvent {
95
+ stage: string;
96
+ }
97
+ export interface StagedAgentTokenEvent extends AgentTokenEvent {
98
+ stage: string;
99
+ }
100
+ export interface EngineEvents {
101
+ onPipelineStart?: (event: PipelineStartEvent) => void;
102
+ onPipelineComplete?: (event: PipelineCompleteEvent) => void;
103
+ onPipelineCancelled?: (event: PipelineCancelledEvent) => void;
104
+ onStageStart?: (event: StageStartEvent) => void;
105
+ onStageComplete?: (event: StageCompleteEvent) => void;
106
+ onTaskRetry?: (event: StageRetryEvent) => void;
107
+ onGroupStart?: (event: GroupStartEvent) => void;
108
+ onGroupIteration?: (event: GroupIterationEvent) => void;
109
+ onGroupFeedback?: (event: GroupFeedbackEvent) => void;
110
+ onGroupComplete?: (event: GroupCompleteEvent) => void;
111
+ onStageContext?: (event: StageContextEvent) => void;
112
+ onToolCallStart?: (event: StagedToolCallStartEvent) => void;
113
+ onToolCallComplete?: (event: StagedToolCallCompleteEvent) => void;
114
+ onAgentThinking?: (event: StagedAgentThinkingEvent) => void;
115
+ onAgentProgress?: (event: StagedAgentProgressEvent) => void;
116
+ onAgentToken?: (event: StagedAgentTokenEvent) => void;
117
+ }
118
+ export type PipelineEvent = {
119
+ type: 'pipeline_start';
120
+ pipelineId: string;
121
+ } | {
122
+ type: 'pipeline_complete';
123
+ pipelineId: string;
124
+ } | {
125
+ type: 'stage_start';
126
+ stageId: string;
127
+ stageName: string;
128
+ } | {
129
+ type: 'stage_complete';
130
+ stageId: string;
131
+ stageName: string;
132
+ } | {
133
+ type: 'task_retry';
134
+ stageName: string;
135
+ attempt: number;
136
+ failures: string[];
137
+ rawOutput?: string;
138
+ } | {
139
+ type: 'group_start';
140
+ groupName: string;
141
+ maxIterations: number;
142
+ } | {
143
+ type: 'group_iteration';
144
+ groupName: string;
145
+ iteration: number;
146
+ maxIterations: number;
147
+ } | {
148
+ type: 'group_feedback';
149
+ groupName: string;
150
+ iteration: number;
151
+ rejectionReason: string;
152
+ } | {
153
+ type: 'group_complete';
154
+ groupName: string;
155
+ iterations: number;
156
+ status: string;
157
+ };
158
+ export declare class PipelineEventEmitter {
159
+ private listeners;
160
+ on(listener: (event: PipelineEvent) => void): void;
161
+ emit(event: PipelineEvent): void;
162
+ }
163
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAKjK,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,wBAAyB,SAAQ,kBAAkB;IAClE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,2BAA4B,SAAQ,qBAAqB;IACxE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAyB,SAAQ,kBAAkB;IAClE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAyB,SAAQ,kBAAkB;IAClE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC5D,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACtD,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC5D,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAC9D,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAChD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACtD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/C,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAChD,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACxD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACtD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACtD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAEpD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAC5D,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,CAAC;IAElE,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAC5D,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAC5D,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACvD;AAGD,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAClG;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACxF;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,GACzF;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtF,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,SAAS,CAA6C;IAE9D,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI;IAIlD,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;CAKjC"}
package/dist/events.js ADDED
@@ -0,0 +1,12 @@
1
+ export class PipelineEventEmitter {
2
+ listeners = [];
3
+ on(listener) {
4
+ this.listeners.push(listener);
5
+ }
6
+ emit(event) {
7
+ for (const listener of this.listeners) {
8
+ listener(event);
9
+ }
10
+ }
11
+ }
12
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AA0JA,MAAM,OAAO,oBAAoB;IACvB,SAAS,GAA0C,EAAE,CAAC;IAE9D,EAAE,CAAC,QAAwC;QACzC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,KAAoB;QACvB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF"}
@@ -1,64 +1,22 @@
1
- // Export barrel for @studio/engine
2
-
3
- // Main engine
4
1
  export { PipelineEngine } from './engine.js';
5
2
  export type { EngineConfig, RunInput } from './engine.js';
6
-
7
- // Events
8
3
  export { PipelineEventEmitter } from './events.js';
9
- export type {
10
- EngineEvents,
11
- PipelineEvent,
12
- PipelineStartEvent,
13
- PipelineCompleteEvent,
14
- PipelineCancelledEvent,
15
- StageStartEvent,
16
- StageCompleteEvent,
17
- StageRetryEvent,
18
- ToolCallSummary,
19
- TokenUsage,
20
- GroupStartEvent,
21
- GroupIterationEvent,
22
- GroupFeedbackEvent,
23
- GroupCompleteEvent,
24
- StageContextEvent,
25
- StagedToolCallStartEvent,
26
- StagedToolCallCompleteEvent,
27
- } from './events.js';
28
-
29
- // State management
4
+ export type { EngineEvents, PipelineEvent, PipelineStartEvent, PipelineCompleteEvent, PipelineCancelledEvent, StageStartEvent, StageCompleteEvent, StageRetryEvent, ToolCallSummary, TokenUsage, GroupStartEvent, GroupIterationEvent, GroupFeedbackEvent, GroupCompleteEvent, StageContextEvent, StagedToolCallStartEvent, StagedToolCallCompleteEvent, } from './events.js';
30
5
  export { deriveStageStatus } from './state/status-derivation.js';
31
6
  export { isValidTransition, transition } from './state/state-machine.js';
32
7
  export type { StageLifecycleState } from './state/state-machine.js';
33
-
34
- // Run store
35
8
  export { InMemoryRunStore, SQLiteRunStore, PgRunStore } from './state/run-store.js';
36
9
  export type { RunStore, AsyncRunStore, AnyRunStore } from './state/run-store.js';
37
-
38
- // Pipeline loaders
39
10
  export { loadPipeline, loadPipelineByName, parsePipelineYaml } from './pipeline/loader.js';
40
11
  export { loadAgentProfile, parseAgentYaml } from './pipeline/agent-loader.js';
41
12
  export { loadContract, parseContractYaml } from './pipeline/contract-loader.js';
42
-
43
- // Context propagation
44
- export {
45
- createInitialContext,
46
- addStageOutput,
47
- getContextForStage,
48
- setGroupFeedback,
49
- clearGroupFeedback,
50
- } from './pipeline/context-propagation.js';
13
+ export { createInitialContext, addStageOutput, getContextForStage, setGroupFeedback, clearGroupFeedback, } from './pipeline/context-propagation.js';
51
14
  export type { PipelineContext, PipelineInput, GroupFeedback } from './pipeline/context-propagation.js';
52
-
53
- // Contract validation
54
15
  export { validateOutput } from './pipeline/output-validator.js';
55
16
  export type { OutputValidationResult } from './pipeline/output-validator.js';
56
17
  export type { PostValidationResult } from './pipeline/post-validator.js';
57
18
  export { validateSchema } from '@studio-foundation/ralph';
58
-
59
- // Spawners
60
19
  export { DirectEngineSpawner } from './spawners/direct-engine-spawner.js';
61
-
62
- // Repo resolution
63
20
  export { resolveRepoPath, cloneRepo } from './repo-resolver.js';
64
21
  export type { RepoResolveOptions } from './repo-resolver.js';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EACV,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACzE,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAGpE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACpF,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGjF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGhF,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAGvG,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,YAAY,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAG1E,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAChE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
1
+ // Export barrel for @studio/engine
2
+ // Main engine
3
+ export { PipelineEngine } from './engine.js';
4
+ // Events
5
+ export { PipelineEventEmitter } from './events.js';
6
+ // State management
7
+ export { deriveStageStatus } from './state/status-derivation.js';
8
+ export { isValidTransition, transition } from './state/state-machine.js';
9
+ // Run store
10
+ export { InMemoryRunStore, SQLiteRunStore, PgRunStore } from './state/run-store.js';
11
+ // Pipeline loaders
12
+ export { loadPipeline, loadPipelineByName, parsePipelineYaml } from './pipeline/loader.js';
13
+ export { loadAgentProfile, parseAgentYaml } from './pipeline/agent-loader.js';
14
+ export { loadContract, parseContractYaml } from './pipeline/contract-loader.js';
15
+ // Context propagation
16
+ export { createInitialContext, addStageOutput, getContextForStage, setGroupFeedback, clearGroupFeedback, } from './pipeline/context-propagation.js';
17
+ // Contract validation
18
+ export { validateOutput } from './pipeline/output-validator.js';
19
+ export { validateSchema } from '@studio-foundation/ralph';
20
+ // Spawners
21
+ export { DirectEngineSpawner } from './spawners/direct-engine-spawner.js';
22
+ // Repo resolution
23
+ export { resolveRepoPath, cloneRepo } from './repo-resolver.js';
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC,cAAc;AACd,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,SAAS;AACT,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAqBnD,mBAAmB;AACnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGzE,YAAY;AACZ,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGpF,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEhF,sBAAsB;AACtB,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,mCAAmC,CAAC;AAG3C,sBAAsB;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,WAAW;AACX,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,kBAAkB;AAClB,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { AgentConfig } from '@studio-foundation/contracts';
2
+ export declare function loadAgentProfile(name: string, agentsDir: string): Promise<AgentConfig>;
3
+ export declare function parseAgentYaml(yamlContent: string, sourcePath?: string): AgentConfig;
4
+ //# sourceMappingURL=agent-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loader.d.ts","sourceRoot":"","sources":["../../src/pipeline/agent-loader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEhE,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,CAAC,CAWtB;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,CAepF"}
@@ -0,0 +1,28 @@
1
+ // Load agent profiles from YAML files
2
+ import { readFile } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import * as yaml from 'js-yaml';
5
+ export async function loadAgentProfile(name, agentsDir) {
6
+ const path = join(agentsDir, `${name}.agent.yaml`);
7
+ let content;
8
+ try {
9
+ content = await readFile(path, 'utf-8');
10
+ }
11
+ catch (err) {
12
+ throw new Error(`Failed to load agent profile '${name}' at ${path}: ${err.message}`);
13
+ }
14
+ return parseAgentYaml(content, path);
15
+ }
16
+ export function parseAgentYaml(yamlContent, sourcePath) {
17
+ const parsed = yaml.load(yamlContent);
18
+ const context = sourcePath ? ` (from ${sourcePath})` : '';
19
+ if (!parsed || typeof parsed !== 'object') {
20
+ throw new Error(`Invalid agent YAML: expected an object${context}`);
21
+ }
22
+ if (!parsed.name || typeof parsed.name !== 'string') {
23
+ throw new Error(`Agent config missing required field 'name'${context}`);
24
+ }
25
+ // provider and model are optional — defaults are applied at execution time
26
+ return parsed;
27
+ }
28
+ //# sourceMappingURL=agent-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loader.js","sourceRoot":"","sources":["../../src/pipeline/agent-loader.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAGhC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,SAAiB;IAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC;IAEnD,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,QAAQ,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,OAAO,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,UAAmB;IACrE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAA4B,CAAC;IACjE,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1D,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,6CAA6C,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,2EAA2E;IAE3E,OAAO,MAAgC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent-loader.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loader.test.d.ts","sourceRoot":"","sources":["../../src/pipeline/agent-loader.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,134 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { parseAgentYaml } from './agent-loader.js';
3
+ describe('parseAgentYaml', () => {
4
+ it('parses plugins field from agent YAML', () => {
5
+ const yaml = `
6
+ name: code-reviewer
7
+ provider: anthropic
8
+ model: claude-sonnet-4-20250514
9
+ plugins:
10
+ - code-review
11
+ - analysis
12
+ tools:
13
+ - repo_manager-read_file
14
+ `;
15
+ const result = parseAgentYaml(yaml);
16
+ expect(result.plugins).toEqual(['code-review', 'analysis']);
17
+ });
18
+ it('returns undefined plugins when not specified', () => {
19
+ const yaml = `
20
+ name: analyst
21
+ provider: anthropic
22
+ model: claude-haiku-4-5-20251001
23
+ `;
24
+ const result = parseAgentYaml(yaml);
25
+ expect(result.plugins).toBeUndefined();
26
+ });
27
+ });
28
+ describe('skill injection logic', () => {
29
+ it('appends skill content to system_prompt when plugins match', () => {
30
+ // Test the injection logic directly
31
+ const agent = parseAgentYaml(`
32
+ name: test-agent
33
+ provider: anthropic
34
+ model: claude-haiku-4-5-20251001
35
+ system_prompt: "You are a reviewer."
36
+ plugins:
37
+ - code-review
38
+ `);
39
+ // Simulate what engine does
40
+ const pluginSkills = {
41
+ 'code-review': ['## Skill: review-guidelines\n\nAlways check for bugs.'],
42
+ };
43
+ if (agent.plugins?.length && pluginSkills) {
44
+ const skillChunks = agent.plugins.flatMap((p) => pluginSkills[p] ?? []);
45
+ if (skillChunks.length > 0) {
46
+ agent.system_prompt = `${agent.system_prompt ?? ''}\n\n${skillChunks.join('\n\n---\n\n')}`;
47
+ }
48
+ }
49
+ expect(agent.system_prompt).toContain('You are a reviewer.');
50
+ expect(agent.system_prompt).toContain('## Skill: review-guidelines');
51
+ expect(agent.system_prompt).toContain('Always check for bugs.');
52
+ });
53
+ it('does not modify system_prompt when no matching plugin skills', () => {
54
+ const agent = parseAgentYaml(`
55
+ name: test-agent
56
+ provider: anthropic
57
+ model: claude-haiku-4-5-20251001
58
+ system_prompt: "Original prompt."
59
+ plugins:
60
+ - unknown-plugin
61
+ `);
62
+ const pluginSkills = {
63
+ 'code-review': ['## Skill: review-guidelines\n\nAlways check for bugs.'],
64
+ };
65
+ const originalPrompt = agent.system_prompt;
66
+ if (agent.plugins?.length && pluginSkills) {
67
+ const skillChunks = agent.plugins.flatMap((p) => pluginSkills[p] ?? []);
68
+ if (skillChunks.length > 0) {
69
+ agent.system_prompt = `${agent.system_prompt ?? ''}\n\n${skillChunks.join('\n\n---\n\n')}`;
70
+ }
71
+ }
72
+ expect(agent.system_prompt).toBe(originalPrompt);
73
+ });
74
+ });
75
+ describe('skills field parsing', () => {
76
+ it('parses skills field from agent YAML', () => {
77
+ const yaml = `
78
+ name: coder
79
+ provider: anthropic
80
+ model: claude-sonnet-4-6
81
+ skills:
82
+ - git-workflow
83
+ - code-conventions
84
+ `;
85
+ const result = parseAgentYaml(yaml);
86
+ expect(result.skills).toEqual(['git-workflow', 'code-conventions']);
87
+ });
88
+ it('returns undefined skills when not specified', () => {
89
+ const yaml = `
90
+ name: analyst
91
+ provider: anthropic
92
+ model: claude-haiku-4-5-20251001
93
+ `;
94
+ const result = parseAgentYaml(yaml);
95
+ expect(result.skills).toBeUndefined();
96
+ });
97
+ });
98
+ describe('project skill injection logic', () => {
99
+ it('appends skill content to system_prompt for declared skills', () => {
100
+ const agent = parseAgentYaml(`
101
+ name: coder
102
+ provider: anthropic
103
+ model: claude-sonnet-4-6
104
+ system_prompt: "You are a developer."
105
+ skills:
106
+ - git-workflow
107
+ `);
108
+ // Simulate what engine does: format loaded skills and append to system_prompt
109
+ const loadedSkills = [{ name: 'git-workflow', content: '# Git Workflow\n\nAlways branch from main.' }];
110
+ if (agent.skills?.length && loadedSkills.length > 0) {
111
+ const skillChunks = loadedSkills.map((s) => `## Skill: ${s.name}\n\n${s.content}`);
112
+ agent.system_prompt = `${agent.system_prompt ?? ''}\n\n${skillChunks.join('\n\n---\n\n')}`;
113
+ }
114
+ expect(agent.system_prompt).toContain('You are a developer.');
115
+ expect(agent.system_prompt).toContain('## Skill: git-workflow');
116
+ expect(agent.system_prompt).toContain('Always branch from main.');
117
+ });
118
+ it('does not modify system_prompt when no skills declared', () => {
119
+ const agent = parseAgentYaml(`
120
+ name: analyst
121
+ provider: anthropic
122
+ model: claude-sonnet-4-6
123
+ system_prompt: "You are an analyst."
124
+ `);
125
+ const originalPrompt = agent.system_prompt;
126
+ const loadedSkills = [];
127
+ if (agent.skills?.length && loadedSkills.length > 0) {
128
+ const skillChunks = loadedSkills.map((s) => `## Skill: ${s.name}\n\n${s.content}`);
129
+ agent.system_prompt = `${agent.system_prompt ?? ''}\n\n${skillChunks.join('\n\n---\n\n')}`;
130
+ }
131
+ expect(agent.system_prompt).toBe(originalPrompt);
132
+ });
133
+ });
134
+ //# sourceMappingURL=agent-loader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loader.test.js","sourceRoot":"","sources":["../../src/pipeline/agent-loader.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,IAAI,GAAG;;;;;;;;;CAShB,CAAC;QACE,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,IAAI,GAAG;;;;CAIhB,CAAC;QACE,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,oCAAoC;QACpC,MAAM,KAAK,GAAG,cAAc,CAAC;;;;;;;CAOhC,CAAC,CAAC;QAEC,4BAA4B;QAC5B,MAAM,YAAY,GAA6B;YAC7C,aAAa,EAAE,CAAC,uDAAuD,CAAC;SACzE,CAAC;QAEF,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,CAAC;YAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACxE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,aAAa,GAAG,GAAG,KAAK,CAAC,aAAa,IAAI,EAAE,OAAO,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAC7F,CAAC;QACH,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;QACrE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,KAAK,GAAG,cAAc,CAAC;;;;;;;CAOhC,CAAC,CAAC;QAEC,MAAM,YAAY,GAA6B;YAC7C,aAAa,EAAE,CAAC,uDAAuD,CAAC;SACzE,CAAC;QAEF,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC;QAC3C,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,CAAC;YAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACxE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,aAAa,GAAG,GAAG,KAAK,CAAC,aAAa,IAAI,EAAE,OAAO,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAC7F,CAAC;QACH,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,IAAI,GAAG;;;;;;;CAOhB,CAAC;QACE,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,IAAI,GAAG;;;;CAIhB,CAAC;QACE,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,KAAK,GAAG,cAAc,CAAC;;;;;;;CAOhC,CAAC,CAAC;QAEC,8EAA8E;QAC9E,MAAM,YAAY,GAAG,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,4CAA4C,EAAE,CAAC,CAAC;QACvG,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACnF,KAAK,CAAC,aAAa,GAAG,GAAG,KAAK,CAAC,aAAa,IAAI,EAAE,OAAO,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7F,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAC9D,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,KAAK,GAAG,cAAc,CAAC;;;;;CAKhC,CAAC,CAAC;QAEC,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC;QAC3C,MAAM,YAAY,GAA6C,EAAE,CAAC;QAClE,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACnF,KAAK,CAAC,aAAa,GAAG,GAAG,KAAK,CAAC,aAAa,IAAI,EAAE,OAAO,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7F,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { PipelineInput } from './context-propagation.js';
2
+ export declare function evaluateCondition(condition: string, context: {
3
+ input: PipelineInput;
4
+ stageOutputs: Map<string, unknown>;
5
+ }): boolean;
6
+ //# sourceMappingURL=condition-evaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition-evaluator.d.ts","sourceRoot":"","sources":["../../src/pipeline/condition-evaluator.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAM9D,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACpE,OAAO,CAyBT"}
@@ -0,0 +1,105 @@
1
+ // Secure condition evaluator — no eval(), no external dependencies.
2
+ // Supported syntax:
3
+ // input.<field.path> compared to a literal
4
+ // stages.<stage-name>.output.<field.path> compared to a literal
5
+ // Operators: ===, !==, >=, <=, ==, !=, >, <
6
+ // Returns false for any undefined/invalid path (skip-safe).
7
+ // Longest-first to avoid '>' matching inside '>='
8
+ const OPERATORS = ['===', '!==', '>=', '<=', '==', '!=', '>', '<'];
9
+ export function evaluateCondition(condition, context) {
10
+ const trimmed = condition.trim();
11
+ // Find operator (longest-first)
12
+ let operator;
13
+ let lhsStr = '';
14
+ let rhsStr = '';
15
+ for (const op of OPERATORS) {
16
+ const idx = trimmed.indexOf(op);
17
+ if (idx !== -1) {
18
+ operator = op;
19
+ lhsStr = trimmed.slice(0, idx).trim();
20
+ rhsStr = trimmed.slice(idx + op.length).trim();
21
+ break;
22
+ }
23
+ }
24
+ if (!operator || !lhsStr || !rhsStr)
25
+ return false;
26
+ const lhsValue = resolveLhs(lhsStr, context);
27
+ if (lhsValue === undefined)
28
+ return false;
29
+ const rhsValue = parseRhs(rhsStr);
30
+ return compare(lhsValue, operator, rhsValue);
31
+ }
32
+ function resolveLhs(lhs, context) {
33
+ if (lhs.startsWith('input.')) {
34
+ const fieldPath = lhs.slice('input.'.length);
35
+ if (typeof context.input !== 'object' || context.input === null)
36
+ return undefined;
37
+ return traversePath(context.input, fieldPath);
38
+ }
39
+ if (lhs.startsWith('stages.')) {
40
+ // Format: stages.<stage-name>.output.<field.path>
41
+ // Stage names can contain hyphens — split on first '.output.' occurrence
42
+ const rest = lhs.slice('stages.'.length);
43
+ const outputMarker = '.output.';
44
+ const markerIdx = rest.indexOf(outputMarker);
45
+ if (markerIdx === -1)
46
+ return undefined;
47
+ const stageName = rest.slice(0, markerIdx);
48
+ const fieldPath = rest.slice(markerIdx + outputMarker.length);
49
+ const stageOutput = context.stageOutputs.get(stageName);
50
+ if (stageOutput === undefined || stageOutput === null)
51
+ return undefined;
52
+ return traversePath(stageOutput, fieldPath);
53
+ }
54
+ return undefined;
55
+ }
56
+ function traversePath(obj, path) {
57
+ const parts = path.split('.');
58
+ let current = obj;
59
+ for (const part of parts) {
60
+ if (current === null || current === undefined || typeof current !== 'object') {
61
+ return undefined;
62
+ }
63
+ current = current[part];
64
+ }
65
+ return current;
66
+ }
67
+ function parseRhs(rhs) {
68
+ // Number (int or float, optional leading minus)
69
+ if (/^-?\d+(\.\d+)?$/.test(rhs))
70
+ return Number(rhs);
71
+ // Boolean
72
+ if (rhs === 'true')
73
+ return true;
74
+ if (rhs === 'false')
75
+ return false;
76
+ // Quoted string
77
+ if ((rhs.startsWith('"') && rhs.endsWith('"')) || (rhs.startsWith("'") && rhs.endsWith("'"))) {
78
+ return rhs.slice(1, -1);
79
+ }
80
+ // Plain string (e.g. input.mode == fast)
81
+ return rhs;
82
+ }
83
+ function compare(lhs, op, rhs) {
84
+ // Coerce lhs to number if rhs is a number and lhs is a string
85
+ let lhsCoerced = lhs;
86
+ if (typeof rhs === 'number' && typeof lhs === 'string') {
87
+ const n = Number(lhs);
88
+ if (!isNaN(n))
89
+ lhsCoerced = n;
90
+ }
91
+ switch (op) {
92
+ case '>': return typeof lhsCoerced === 'number' && typeof rhs === 'number' && lhsCoerced > rhs;
93
+ case '>=': return typeof lhsCoerced === 'number' && typeof rhs === 'number' && lhsCoerced >= rhs;
94
+ case '<': return typeof lhsCoerced === 'number' && typeof rhs === 'number' && lhsCoerced < rhs;
95
+ case '<=': return typeof lhsCoerced === 'number' && typeof rhs === 'number' && lhsCoerced <= rhs;
96
+ // eslint-disable-next-line eqeqeq
97
+ case '==': return lhsCoerced == rhs;
98
+ case '===': return lhsCoerced === rhs;
99
+ // eslint-disable-next-line eqeqeq
100
+ case '!=': return lhsCoerced != rhs;
101
+ case '!==': return lhsCoerced !== rhs;
102
+ default: return false;
103
+ }
104
+ }
105
+ //# sourceMappingURL=condition-evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition-evaluator.js","sourceRoot":"","sources":["../../src/pipeline/condition-evaluator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=condition-evaluator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition-evaluator.test.d.ts","sourceRoot":"","sources":["../../src/pipeline/condition-evaluator.test.ts"],"names":[],"mappings":""}