@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,540 @@
1
+ // StageExecutor — extracted from PipelineEngine.executeStage()
2
+ // Handles the execution of a single pipeline stage: ralph loop, validation, hooks, observability.
3
+ import { randomUUID } from 'node:crypto';
4
+ import { join } from 'node:path';
5
+ import { ralph, validateSchema, validateToolCalls, validateRequiredTools, validateCountedTools, validateToolGroups, compose, exponentialBackoff, fixedDelay, noDelay, } from '@studio-foundation/ralph';
6
+ import { runAgent, runScript, AnonymizationMiddleware, } from '@studio-foundation/runner';
7
+ import { loadAgentProfile } from './agent-loader.js';
8
+ import { loadContract } from './contract-loader.js';
9
+ import { loadSkillFiles } from './skill-loader.js';
10
+ import { runStageHook, runToolHook } from './hook-executor.js';
11
+ import { getContextForStage, buildContextKeys, buildContextContent, } from './context-propagation.js';
12
+ import { evaluateCondition } from './condition-evaluator.js';
13
+ import { deriveStageStatus } from '../state/status-derivation.js';
14
+ import { transition } from '../state/state-machine.js';
15
+ import { postValidate } from './post-validator.js';
16
+ import { loadContextPacks } from './context-pack-loader.js';
17
+ // Module-level helpers — verbatim from engine.ts lines 73-95
18
+ function summarizeOutput(output) {
19
+ if (!output || typeof output !== 'object')
20
+ return 'no structured output';
21
+ const o = output;
22
+ const keys = Object.keys(o);
23
+ return `${keys.length} fields: ${keys.slice(0, 3).join(', ')}${keys.length > 3 ? '...' : ''}`;
24
+ }
25
+ export class StageExecutor {
26
+ config;
27
+ constructor(config) {
28
+ this.config = config;
29
+ }
30
+ async execute(stageDef, pipelineContext, previousStageName, userInput, stageIndex, totalStages, paths, toolRegistry, runMiddleware, runId, signal) {
31
+ const stageRunId = randomUUID();
32
+ const stageStartedAt = new Date().toISOString();
33
+ // Create stage run shell
34
+ const stageRun = {
35
+ id: stageRunId,
36
+ stage_name: stageDef.name,
37
+ status: 'running',
38
+ started_at: stageStartedAt,
39
+ tasks: [],
40
+ };
41
+ this.config.events?.onStageStart?.({
42
+ stage_name: stageDef.name,
43
+ stage_index: stageIndex,
44
+ total_stages: totalStages,
45
+ max_attempts: stageDef.ralph?.max_attempts ?? 3,
46
+ });
47
+ this.config.emitter.emit({ type: 'stage_start', stageId: stageRunId, stageName: stageDef.name });
48
+ // Evaluate condition — skip stage if false
49
+ if (stageDef.condition !== undefined) {
50
+ const shouldRun = evaluateCondition(stageDef.condition, {
51
+ input: pipelineContext.input,
52
+ stageOutputs: pipelineContext.stageOutputs,
53
+ });
54
+ if (!shouldRun) {
55
+ stageRun.status = 'skipped';
56
+ stageRun.completed_at = new Date().toISOString();
57
+ stageRun.tasks = [];
58
+ this.config.events?.onStageComplete?.({
59
+ stage_name: stageDef.name,
60
+ stage_index: stageIndex,
61
+ total_stages: totalStages,
62
+ status: 'skipped',
63
+ attempts: 0,
64
+ duration_ms: 0,
65
+ });
66
+ this.config.emitter.emit({ type: 'stage_complete', stageId: stageRunId, stageName: stageDef.name });
67
+ return { stageRun, status: 'skipped' };
68
+ }
69
+ }
70
+ // Load agent profile — only for LLM stages (script stages have no agent)
71
+ let agentConfig = null;
72
+ if (stageDef.agent) {
73
+ agentConfig = await loadAgentProfile(stageDef.agent, paths.agentsDir);
74
+ // Apply defaults from config.yaml when agent YAML omits provider/model
75
+ if (!agentConfig.provider)
76
+ agentConfig.provider = this.config.defaultProvider;
77
+ if (!agentConfig.model)
78
+ agentConfig.model = this.config.defaultModel;
79
+ if (this.config.providerOverride) {
80
+ agentConfig.provider = this.config.providerOverride;
81
+ }
82
+ if (!agentConfig.provider) {
83
+ throw new Error(`Agent '${stageDef.agent}' has no provider and no default is configured. Run: studio config set provider <name>`);
84
+ }
85
+ if (!agentConfig.model) {
86
+ throw new Error(`Agent '${stageDef.agent}' has no model and no default is configured. Run: studio config set defaults.model <model>`);
87
+ }
88
+ // Inject plugin skills into system_prompt for agents that declare plugins
89
+ if (agentConfig.plugins?.length && this.config.pluginSkills) {
90
+ const skillChunks = agentConfig.plugins
91
+ .flatMap((p) => this.config.pluginSkills[p] ?? []);
92
+ if (skillChunks.length > 0) {
93
+ agentConfig.system_prompt = `${agentConfig.system_prompt ?? ''}\n\n${skillChunks.join('\n\n---\n\n')}`;
94
+ }
95
+ }
96
+ // Inject project skills (.studio/skills/*.skill.md) for agents that declare skills
97
+ if (agentConfig.skills?.length) {
98
+ const skillsDir = join(paths.projectDir, 'skills');
99
+ const loaded = await loadSkillFiles(agentConfig.skills, skillsDir);
100
+ if (loaded.length > 0) {
101
+ const skillChunks = loaded.map((s) => `## Skill: ${s.name}\n\n${s.content}`);
102
+ agentConfig.system_prompt = `${agentConfig.system_prompt ?? ''}\n\n${skillChunks.join('\n\n---\n\n')}`;
103
+ }
104
+ }
105
+ // Inject project domain invariants (.studio/invariants.md) into system_prompt
106
+ if (pipelineContext.invariantsContent) {
107
+ agentConfig.system_prompt = `${agentConfig.system_prompt ?? ''}\n\n---\n\n## Project Invariants\n\n${pipelineContext.invariantsContent}`;
108
+ }
109
+ }
110
+ // Validate: stage must have either agent (LLM) or script (script executor)
111
+ if (!stageDef.agent && !stageDef.script) {
112
+ throw new Error(`Stage '${stageDef.name}' must have either 'agent' (for LLM) or 'script' (for script executor)`);
113
+ }
114
+ const stageHooks = stageDef.hooks;
115
+ const hookCwd = this.config.repoPath ?? this.config.configsDir;
116
+ // Load output contract if specified
117
+ let contract = null;
118
+ if (stageDef.contract) {
119
+ const contractName = stageDef.contract.replace('.contract.yaml', '');
120
+ contract = await loadContract(contractName, paths.contractsDir);
121
+ }
122
+ // Build context for this stage
123
+ const agentContext = getContextForStage(pipelineContext, stageDef, previousStageName);
124
+ // Load context packs if stage defines any
125
+ if (stageDef.context?.packs?.length) {
126
+ agentContext.context_packs = await loadContextPacks(stageDef.context.packs, paths.projectDir, pipelineContext.repoPath);
127
+ }
128
+ // Emit context observability event (zero work if no handler registered)
129
+ if (this.config.events?.onStageContext) {
130
+ const debugFlag = process.env.DEBUG ?? '';
131
+ const includeContent = debugFlag.includes('studio:context');
132
+ const includePrompt = debugFlag.includes('studio:context:verbose');
133
+ const contextEvent = {
134
+ stage: stageDef.name,
135
+ run_id: runId ?? '',
136
+ context_keys: buildContextKeys(agentContext, pipelineContext.stageOutputSizes),
137
+ ...(includeContent ? { context_content: buildContextContent(agentContext) } : {}),
138
+ ...(includePrompt && agentConfig ? { system_prompt: agentConfig.system_prompt } : {}),
139
+ };
140
+ this.config.events.onStageContext(contextEvent);
141
+ }
142
+ // Create a single task run (v7: 1 stage = 1 task = 1 ralph call)
143
+ const taskRun = {
144
+ id: randomUUID(),
145
+ task_name: stageDef.name,
146
+ status: 'running',
147
+ started_at: stageStartedAt,
148
+ agent_runs: [],
149
+ };
150
+ // Build the validator for ralph using ralph's own validators
151
+ const ralphValidator = this.buildValidator(contract, stageDef);
152
+ // Resolve retry strategy
153
+ const retryStrategy = this.resolveRetryStrategy(stageDef.ralph?.retry_strategy);
154
+ // Create per-stage middleware if agent requests it (and no run-level middleware)
155
+ const stageMiddleware = (!runMiddleware && agentConfig?.anonymize)
156
+ ? new AnonymizationMiddleware()
157
+ : null;
158
+ // Run on_stage_start hooks before the ralph loop
159
+ if (stageHooks?.on_stage_start?.length) {
160
+ for (const hook of stageHooks.on_stage_start) {
161
+ const hookResult = await runStageHook(hook, hookCwd);
162
+ if (!hookResult.success) {
163
+ const onFailure = hook.on_failure ?? 'warn';
164
+ if (onFailure === 'fail') {
165
+ stageRun.status = 'failed';
166
+ stageRun.completed_at = new Date().toISOString();
167
+ stageRun.tasks = [];
168
+ this.config.events?.onStageComplete?.({
169
+ stage_name: stageDef.name,
170
+ stage_index: stageIndex,
171
+ total_stages: totalStages,
172
+ status: 'failed',
173
+ attempts: 0,
174
+ duration_ms: Date.now() - new Date(stageStartedAt).getTime(),
175
+ });
176
+ this.config.emitter.emit({ type: 'stage_complete', stageId: stageRunId, stageName: stageDef.name });
177
+ return { stageRun, status: 'failed' };
178
+ }
179
+ else if (onFailure === 'reject') {
180
+ stageRun.status = 'rejected';
181
+ stageRun.completed_at = new Date().toISOString();
182
+ stageRun.tasks = [];
183
+ this.config.events?.onStageComplete?.({
184
+ stage_name: stageDef.name,
185
+ stage_index: stageIndex,
186
+ total_stages: totalStages,
187
+ status: 'rejected',
188
+ attempts: 0,
189
+ duration_ms: Date.now() - new Date(stageStartedAt).getTime(),
190
+ });
191
+ this.config.emitter.emit({ type: 'stage_complete', stageId: stageRunId, stageName: stageDef.name });
192
+ return {
193
+ stageRun,
194
+ status: 'rejected',
195
+ postValidation: {
196
+ accepted: false,
197
+ rejection_reason: `on_stage_start hook failed: ${hook.command}`,
198
+ rejection_details: hookResult.stderr ? [hookResult.stderr] : [],
199
+ },
200
+ };
201
+ }
202
+ else {
203
+ // warn (default)
204
+ console.warn(`[on_stage_start] hook failed for stage "${stageDef.name}": ${hookResult.stderr}`);
205
+ }
206
+ }
207
+ }
208
+ }
209
+ // Build tool hook callbacks for runAgent
210
+ const onPreToolUse = stageHooks?.pre_tool_use?.length
211
+ ? async (event) => {
212
+ const matchingHooks = stageHooks.pre_tool_use.filter(h => h.matcher === event.tool);
213
+ // Fail-fast: first matching hook that fails blocks the tool call; remaining hooks are skipped
214
+ for (const hook of matchingHooks) {
215
+ const hookResult = await runToolHook(hook, event.params, hookCwd);
216
+ if (!hookResult.success) {
217
+ return { blocked: true, error: `Pre-hook failed: ${hookResult.stderr || hookResult.stdout}` };
218
+ }
219
+ }
220
+ return { blocked: false };
221
+ }
222
+ : undefined;
223
+ const onPostToolUse = stageHooks?.post_tool_use?.length
224
+ ? async (event) => {
225
+ const matchingHooks = stageHooks.post_tool_use.filter(h => h.matcher === event.tool);
226
+ for (const hook of matchingHooks) {
227
+ const hookResult = await runToolHook(hook, event.params, hookCwd);
228
+ if (!hookResult.success) {
229
+ const onFailure = hook.on_failure ?? 'warn';
230
+ if (onFailure === 'reject') {
231
+ return { append_message: `Post-hook failed: ${hookResult.stderr || hookResult.stdout}` };
232
+ }
233
+ else {
234
+ console.warn(`[post_tool_use] hook failed for "${event.tool}" in stage "${stageDef.name}": ${hookResult.stderr}`);
235
+ }
236
+ }
237
+ }
238
+ return {};
239
+ }
240
+ : undefined;
241
+ // Execute ralph loop — catch unexpected executor throws (network errors, etc.)
242
+ // and convert them to a failed stage rather than crashing the pipeline.
243
+ let ralphResult;
244
+ try {
245
+ ralphResult = await ralph({
246
+ executor: async (execContext) => {
247
+ const agentRunId = randomUUID();
248
+ const agentRunStartedAt = new Date().toISOString();
249
+ const taskInput = {
250
+ description: typeof userInput === 'string' ? userInput : JSON.stringify(userInput),
251
+ contract_name: contract?.name,
252
+ };
253
+ // Map ralph context to runner context
254
+ const runnerExecContext = {
255
+ attempt: execContext.attempt,
256
+ previous_failures: execContext.previousFailures.map(f => ({
257
+ error: f,
258
+ tool_calls_count: 0,
259
+ })),
260
+ };
261
+ const result = stageDef.agent
262
+ ? await runAgent({
263
+ agent: agentConfig,
264
+ task: taskInput,
265
+ context: agentContext,
266
+ executionContext: runnerExecContext,
267
+ toolRegistry: toolRegistry,
268
+ providerRegistry: this.config.providerRegistry,
269
+ outputContract: contract ?? undefined,
270
+ maxToolCalls: stageDef.ralph?.max_tool_calls,
271
+ anonymizationMiddleware: runMiddleware ?? stageMiddleware ?? undefined,
272
+ signal,
273
+ callbacks: {
274
+ ...(this.config.events ? {
275
+ onToolCallStart: this.config.events.onToolCallStart
276
+ ? (e) => this.config.events.onToolCallStart({ stage: stageDef.name, ...e })
277
+ : undefined,
278
+ onToolCallComplete: this.config.events.onToolCallComplete
279
+ ? (e) => this.config.events.onToolCallComplete({ stage: stageDef.name, ...e })
280
+ : undefined,
281
+ onAgentThinking: this.config.events.onAgentThinking
282
+ ? (e) => this.config.events.onAgentThinking({ stage: stageDef.name, ...e })
283
+ : undefined,
284
+ onAgentProgress: this.config.events.onAgentProgress
285
+ ? (e) => this.config.events.onAgentProgress({ stage: stageDef.name, ...e })
286
+ : undefined,
287
+ onAgentToken: this.config.events.onAgentToken
288
+ ? (e) => this.config.events.onAgentToken({ stage: stageDef.name, ...e })
289
+ : undefined,
290
+ } : {}),
291
+ ...(onPreToolUse ? { onPreToolUse } : {}),
292
+ ...(onPostToolUse ? { onPostToolUse } : {}),
293
+ },
294
+ })
295
+ : await runScript({
296
+ scriptPath: stageDef.script,
297
+ runtime: stageDef.runtime ?? 'shell',
298
+ context: agentContext,
299
+ cwd: this.config.repoPath ?? this.config.configsDir,
300
+ timeoutMs: stageDef.timeout_ms,
301
+ });
302
+ // Record agent run
303
+ const agentRun = {
304
+ id: agentRunId,
305
+ agent_name: agentConfig?.name ?? `script:${stageDef.script ?? 'unknown'}`,
306
+ attempt: execContext.attempt,
307
+ status: 'success',
308
+ tool_calls: result.tool_calls_count,
309
+ started_at: agentRunStartedAt,
310
+ completed_at: new Date().toISOString(),
311
+ output: result.output,
312
+ };
313
+ taskRun.agent_runs.push(agentRun);
314
+ return result;
315
+ },
316
+ validator: ralphValidator,
317
+ maxAttempts: stageDef.ralph?.max_attempts ?? 3,
318
+ retryStrategy,
319
+ signal,
320
+ onRetry: async (event) => {
321
+ // Extract raw output for diagnostic logging
322
+ const rawOutput = typeof event.result.output === 'string'
323
+ ? event.result.output
324
+ : JSON.stringify(event.result.output, null, 2);
325
+ this.config.events?.onTaskRetry?.({
326
+ stage: stageDef.name,
327
+ attempt: event.attempt,
328
+ max_attempts: stageDef.ralph?.max_attempts ?? 3,
329
+ failures: event.allFailures,
330
+ agent_output_raw: rawOutput,
331
+ tool_calls_count: event.result.tool_calls_count,
332
+ });
333
+ this.config.emitter.emit({
334
+ type: 'task_retry',
335
+ stageName: stageDef.name,
336
+ attempt: event.attempt,
337
+ failures: event.allFailures,
338
+ rawOutput,
339
+ });
340
+ },
341
+ });
342
+ }
343
+ catch (err) {
344
+ // AbortError from signal propagation is handled inside ralph (returns 'cancelled').
345
+ // Any other throw is a technical failure (network, timeout, etc.) — mark stage failed.
346
+ stageRun.status = transition('running', 'fail');
347
+ stageRun.completed_at = new Date().toISOString();
348
+ stageRun.tasks = [taskRun];
349
+ this.config.events?.onStageComplete?.({
350
+ stage_name: stageDef.name,
351
+ stage_index: stageIndex,
352
+ total_stages: totalStages,
353
+ status: 'failed',
354
+ attempts: 1,
355
+ duration_ms: Date.now() - new Date(stageStartedAt).getTime(),
356
+ });
357
+ this.config.emitter.emit({ type: 'stage_complete', stageId: stageRunId, stageName: stageDef.name });
358
+ return { stageRun, status: 'failed' };
359
+ }
360
+ // Persist stage-level keymap if we created a stage middleware
361
+ if (stageMiddleware) {
362
+ await this.persistKeymap(runId ?? stageRunId, stageMiddleware.getKeymap());
363
+ }
364
+ // Derive stage status from ralph result
365
+ let stageStatus = deriveStageStatus(ralphResult);
366
+ // Cancelled — skip post-validation and hooks
367
+ if (stageStatus === 'cancelled') {
368
+ stageRun.status = transition('running', 'cancel');
369
+ stageRun.completed_at = new Date().toISOString();
370
+ taskRun.status = 'failed'; // closest existing TaskRun status
371
+ taskRun.completed_at = new Date().toISOString();
372
+ stageRun.tasks = [taskRun];
373
+ this.config.events?.onStageComplete?.({
374
+ stage_name: stageDef.name,
375
+ stage_index: stageIndex,
376
+ total_stages: totalStages,
377
+ status: 'cancelled',
378
+ attempts: ralphResult.attempts,
379
+ duration_ms: Date.now() - new Date(stageStartedAt).getTime(),
380
+ });
381
+ this.config.emitter.emit({ type: 'stage_complete', stageId: stageRunId, stageName: stageDef.name });
382
+ return { stageRun, status: 'cancelled' };
383
+ }
384
+ // Post-validation: check if a successful output is semantically rejected
385
+ // (e.g. QA stage returned valid JSON but status says "implementation_incomplete")
386
+ let postResult;
387
+ if (stageStatus === 'success' && contract?.post_validation?.rejection_detection) {
388
+ const agentOutput = ralphResult.status === 'success' ? ralphResult.result?.output : undefined;
389
+ postResult = postValidate(agentOutput, contract);
390
+ if (!postResult.accepted) {
391
+ stageStatus = 'rejected';
392
+ }
393
+ }
394
+ // Run on_stage_complete hooks — only when stage succeeded (including post-validation)
395
+ if (stageStatus === 'success' && stageHooks?.on_stage_complete?.length) {
396
+ const stageOutput = ralphResult.status === 'success'
397
+ ? (ralphResult.result?.output ?? {})
398
+ : {};
399
+ for (const hook of stageHooks.on_stage_complete) {
400
+ const hookResult = await runStageHook(hook, hookCwd, stageOutput);
401
+ if (!hookResult.success) {
402
+ const onFailure = hook.on_failure ?? 'warn';
403
+ if (onFailure === 'reject') {
404
+ stageStatus = 'rejected';
405
+ postResult = {
406
+ accepted: false,
407
+ rejection_reason: `on_stage_complete hook failed: ${hook.command}`,
408
+ rejection_details: hookResult.stderr ? [hookResult.stderr] : [],
409
+ };
410
+ break;
411
+ }
412
+ else if (onFailure === 'fail') {
413
+ stageStatus = 'failed';
414
+ postResult = {
415
+ accepted: false,
416
+ rejection_reason: `on_stage_complete hook failed: ${hook.command}`,
417
+ rejection_details: hookResult.stderr ? [hookResult.stderr] : [],
418
+ };
419
+ break;
420
+ }
421
+ else {
422
+ // warn (default)
423
+ console.warn(`[on_stage_complete] hook failed for stage "${stageDef.name}": ${hookResult.stderr}`);
424
+ }
425
+ }
426
+ }
427
+ }
428
+ // Finalize task run
429
+ taskRun.status = stageStatus === 'success' ? 'success' : 'failed';
430
+ taskRun.completed_at = new Date().toISOString();
431
+ stageRun.tasks = [taskRun];
432
+ stageRun.status = stageStatus;
433
+ stageRun.completed_at = new Date().toISOString();
434
+ // Extract result data for observability
435
+ const lastResult = ralphResult.status === 'success' ? ralphResult.result : undefined;
436
+ // Populate stage output for observability and context propagation
437
+ if (lastResult?.output !== undefined) {
438
+ stageRun.output = lastResult.output;
439
+ }
440
+ const stageDurationMs = stageRun.completed_at && stageRun.started_at
441
+ ? new Date(stageRun.completed_at).getTime() - new Date(stageRun.started_at).getTime()
442
+ : 0;
443
+ this.config.events?.onStageComplete?.({
444
+ stage_name: stageDef.name,
445
+ stage_index: stageIndex,
446
+ total_stages: totalStages,
447
+ status: stageStatus,
448
+ attempts: ralphResult.attempts,
449
+ duration_ms: stageDurationMs,
450
+ output_summary: stageStatus === 'rejected'
451
+ ? `REJECTED: ${postResult.rejection_reason}`
452
+ : lastResult ? summarizeOutput(lastResult.output) : undefined,
453
+ output: lastResult?.output,
454
+ tool_calls: lastResult ? lastResult.tool_calls : undefined,
455
+ token_usage: lastResult?.token_usage,
456
+ rejection_reason: postResult?.rejection_reason,
457
+ rejection_details: postResult?.rejection_details,
458
+ });
459
+ this.config.emitter.emit({ type: 'stage_complete', stageId: stageRunId, stageName: stageDef.name });
460
+ return {
461
+ stageRun: stageRun,
462
+ status: stageStatus,
463
+ postValidation: postResult,
464
+ lastAgentOutput: lastResult?.output,
465
+ toolCalls: lastResult?.tool_calls,
466
+ tokensDelta: lastResult?.token_usage?.total_tokens ?? 0,
467
+ toolCallsDelta: lastResult?.tool_calls_count ?? 0,
468
+ };
469
+ }
470
+ buildValidator(contract, stageDef) {
471
+ // Always fail if runner returned a terminal error (e.g. max tool iterations)
472
+ const errorCheck = (result) => result.error
473
+ ? { valid: false, errors: [result.error], warnings: [] }
474
+ : { valid: true, errors: [], warnings: [] };
475
+ // No contract → only the error check applies
476
+ if (!contract) {
477
+ return errorCheck;
478
+ }
479
+ // Compose ralph's built-in validators
480
+ const validators = [errorCheck];
481
+ // Schema validation (required_fields)
482
+ if (contract.schema?.required_fields) {
483
+ validators.push((result) => validateSchema(result.output, contract));
484
+ }
485
+ // Normalize tool call requirements from contract or stage definition
486
+ const toolCallReqs = contract.tool_calls
487
+ ?? (stageDef.tools?.required ? { required_tools: stageDef.tools.required } : undefined);
488
+ // Tool calls count validation
489
+ if (toolCallReqs?.minimum !== undefined || toolCallReqs?.maximum !== undefined || toolCallReqs?.required_tools) {
490
+ validators.push((result) => validateToolCalls(result.tool_calls, toolCallReqs));
491
+ }
492
+ // Required tools validation
493
+ if (toolCallReqs?.required_tools?.length) {
494
+ validators.push((result) => validateRequiredTools(result.tool_calls, toolCallReqs));
495
+ }
496
+ // Counted tools validation (OR semantics — any of these count toward minimum)
497
+ if (toolCallReqs?.counted_tools?.length) {
498
+ validators.push((result) => validateCountedTools(result.tool_calls, toolCallReqs));
499
+ }
500
+ // Tool groups validation (OR per group — at least one tool from each group must be called)
501
+ if (toolCallReqs?.required_tool_groups?.length) {
502
+ validators.push((result) => validateToolGroups(result.tool_calls, toolCallReqs));
503
+ }
504
+ if (validators.length === 0) {
505
+ return () => ({ valid: true, errors: [], warnings: [] });
506
+ }
507
+ return compose(...validators);
508
+ }
509
+ resolveRetryStrategy(strategyName) {
510
+ switch (strategyName) {
511
+ case 'exponential':
512
+ return exponentialBackoff(1000, 30000);
513
+ case 'fixed':
514
+ return fixedDelay(2000);
515
+ case 'none':
516
+ case 'prompt_escalation':
517
+ // Prompt escalation happens in runner via executionContext
518
+ // No delay needed — ralph handles the retry, runner handles the escalation
519
+ return noDelay();
520
+ default:
521
+ return exponentialBackoff(1000, 30000);
522
+ }
523
+ }
524
+ async persistKeymap(runId, keymap) {
525
+ if (Object.keys(keymap).length === 0)
526
+ return;
527
+ try {
528
+ const { mkdir, writeFile } = await import('node:fs/promises');
529
+ // configsDir is .studio/ directly — keymap goes in .studio/runs/anonymization/
530
+ const anonDir = join(this.config.configsDir, 'runs', 'anonymization');
531
+ await mkdir(anonDir, { recursive: true });
532
+ const keymapPath = join(anonDir, `${runId}.keymap.json`);
533
+ await writeFile(keymapPath, JSON.stringify(keymap, null, 2), 'utf-8');
534
+ }
535
+ catch {
536
+ // Non-fatal — keymap persistence is best-effort
537
+ }
538
+ }
539
+ }
540
+ //# sourceMappingURL=stage-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-executor.js","sourceRoot":"","sources":["../../src/pipeline/stage-executor.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,kGAAkG;AAElG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AASjC,OAAO,EACL,KAAK,EACL,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,OAAO,EACP,kBAAkB,EAClB,UAAU,EACV,OAAO,GAIR,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,QAAQ,EACR,SAAS,EAKT,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,GAEpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,YAAY,EAA6B,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAK5D,6DAA6D;AAE7D,SAAS,eAAe,CAAC,MAAe;IACtC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,sBAAsB,CAAC;IACzE,MAAM,CAAC,GAAG,MAAiC,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,GAAG,IAAI,CAAC,MAAM,YAAY,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAChG,CAAC;AAeD,MAAM,OAAO,aAAa;IACJ;IAApB,YAAoB,MAA2B;QAA3B,WAAM,GAAN,MAAM,CAAqB;IAAG,CAAC;IAEnD,KAAK,CAAC,OAAO,CACX,QAAyB,EACzB,eAAgC,EAChC,iBAAqC,EACrC,SAA2C,EAC3C,UAAkB,EAClB,WAAmB,EACnB,KAAmB,EACnB,YAAsC,EACtC,aAA8C,EAC9C,KAAc,EACd,MAAoB;QAEpB,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;QAChC,MAAM,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAEhD,yBAAyB;QACzB,MAAM,QAAQ,GAAa;YACzB,EAAE,EAAE,UAAU;YACd,UAAU,EAAE,QAAQ,CAAC,IAAI;YACzB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,cAAc;YAC1B,KAAK,EAAE,EAAE;SACV,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;YACjC,UAAU,EAAE,QAAQ,CAAC,IAAI;YACzB,WAAW,EAAE,UAAU;YACvB,YAAY,EAAE,WAAW;YACzB,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC;SAChD,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAEjG,2CAA2C;QAC3C,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,SAAS,EAAE;gBACtD,KAAK,EAAE,eAAe,CAAC,KAAK;gBAC5B,YAAY,EAAE,eAAe,CAAC,YAAY;aAC3C,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;gBAC5B,QAAQ,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACjD,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;oBACpC,UAAU,EAAE,QAAQ,CAAC,IAAI;oBACzB,WAAW,EAAE,UAAU;oBACvB,YAAY,EAAE,WAAW;oBACzB,MAAM,EAAE,SAAS;oBACjB,QAAQ,EAAE,CAAC;oBACX,WAAW,EAAE,CAAC;iBACf,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;gBACpG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YACzC,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,IAAI,WAAW,GAAwD,IAAI,CAAC;QAC5E,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,WAAW,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YACtE,uEAAuE;YACvE,IAAI,CAAC,WAAW,CAAC,QAAQ;gBAAE,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YAC9E,IAAI,CAAC,WAAW,CAAC,KAAK;gBAAE,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YACrE,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBACjC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;YACtD,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,CAAC,KAAK,wFAAwF,CAAC,CAAC;YACpI,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,CAAC,KAAK,4FAA4F,CAAC,CAAC;YACxI,CAAC;YACD,0EAA0E;YAC1E,IAAI,WAAW,CAAC,OAAO,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;gBAC5D,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO;qBACpC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,YAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACtD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC3B,WAAW,CAAC,aAAa,GAAG,GAAG,WAAW,CAAC,aAAa,IAAI,EAAE,OAAO,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;gBACzG,CAAC;YACH,CAAC;YAED,mFAAmF;YACnF,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBACnD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBACnE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC7E,WAAW,CAAC,aAAa,GAAG,GAAG,WAAW,CAAC,aAAa,IAAI,EAAE,OAAO,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;gBACzG,CAAC;YACH,CAAC;YAED,8EAA8E;YAC9E,IAAI,eAAe,CAAC,iBAAiB,EAAE,CAAC;gBACtC,WAAW,CAAC,aAAa,GAAG,GAAG,WAAW,CAAC,aAAa,IAAI,EAAE,uCAAuC,eAAe,CAAC,iBAAiB,EAAE,CAAC;YAC3I,CAAC;QACH,CAAC;QAED,2EAA2E;QAC3E,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,CAAC,IAAI,wEAAwE,CAAC,CAAC;QACnH,CAAC;QAED,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;QAE/D,oCAAoC;QACpC,IAAI,QAAQ,GAA0B,IAAI,CAAC;QAC3C,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;YACrE,QAAQ,GAAG,MAAM,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAClE,CAAC;QAED,+BAA+B;QAC/B,MAAM,YAAY,GAAG,kBAAkB,CAAC,eAAe,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QAEtF,0CAA0C;QAC1C,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YACpC,YAAY,CAAC,aAAa,GAAG,MAAM,gBAAgB,CACjD,QAAQ,CAAC,OAAO,CAAC,KAAK,EACtB,KAAK,CAAC,UAAU,EAChB,eAAe,CAAC,QAAQ,CACzB,CAAC;QACJ,CAAC;QAED,wEAAwE;QACxE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC1C,MAAM,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YAC5D,MAAM,aAAa,GAAI,SAAS,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;YAEpE,MAAM,YAAY,GAAsB;gBACtC,KAAK,EAAE,QAAQ,CAAC,IAAI;gBACpB,MAAM,EAAE,KAAK,IAAI,EAAE;gBACnB,YAAY,EAAE,gBAAgB,CAAC,YAAY,EAAE,eAAe,CAAC,gBAAgB,CAAC;gBAC9E,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,mBAAmB,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,GAAG,CAAC,aAAa,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACtF,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAClD,CAAC;QAED,iEAAiE;QACjE,MAAM,OAAO,GAAY;YACvB,EAAE,EAAE,UAAU,EAAE;YAChB,SAAS,EAAE,QAAQ,CAAC,IAAI;YACxB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,cAAc;YAC1B,UAAU,EAAE,EAAE;SACf,CAAC;QAEF,6DAA6D;QAC7D,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE/D,yBAAyB;QACzB,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAEhF,iFAAiF;QACjF,MAAM,eAAe,GAAG,CAAC,CAAC,aAAa,IAAI,WAAW,EAAE,SAAS,CAAC;YAChE,CAAC,CAAC,IAAI,uBAAuB,EAAE;YAC/B,CAAC,CAAC,IAAI,CAAC;QAET,iDAAiD;QACjD,IAAI,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;gBAC7C,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACrD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;oBACxB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC;oBAC5C,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;wBACzB,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC;wBAC3B,QAAQ,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;wBACjD,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;wBACpB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;4BACpC,UAAU,EAAE,QAAQ,CAAC,IAAI;4BACzB,WAAW,EAAE,UAAU;4BACvB,YAAY,EAAE,WAAW;4BACzB,MAAM,EAAE,QAAQ;4BAChB,QAAQ,EAAE,CAAC;4BACX,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE;yBAC7D,CAAC,CAAC;wBACH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;wBACpG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;oBACxC,CAAC;yBAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;wBAClC,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC;wBAC7B,QAAQ,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;wBACjD,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;wBACpB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;4BACpC,UAAU,EAAE,QAAQ,CAAC,IAAI;4BACzB,WAAW,EAAE,UAAU;4BACvB,YAAY,EAAE,WAAW;4BACzB,MAAM,EAAE,UAAU;4BAClB,QAAQ,EAAE,CAAC;4BACX,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE;yBAC7D,CAAC,CAAC;wBACH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;wBACpG,OAAO;4BACL,QAAQ;4BACR,MAAM,EAAE,UAAU;4BAClB,cAAc,EAAE;gCACd,QAAQ,EAAE,KAAK;gCACf,gBAAgB,EAAE,+BAA+B,IAAI,CAAC,OAAO,EAAE;gCAC/D,iBAAiB,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;6BAChE;yBACF,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,iBAAiB;wBACjB,OAAO,CAAC,IAAI,CAAC,2CAA2C,QAAQ,CAAC,IAAI,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;oBAClG,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,MAAM,YAAY,GAAG,UAAU,EAAE,YAAY,EAAE,MAAM;YACnD,CAAC,CAAC,KAAK,EAAE,KAA2E,EAAE,EAAE;gBACpF,MAAM,aAAa,GAAG,UAAW,CAAC,YAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;gBACtF,8FAA8F;gBAC9F,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;oBACjC,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBAClE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;wBACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;oBAChG,CAAC;gBACH,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5B,CAAC;YACH,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,aAAa,GAAG,UAAU,EAAE,aAAa,EAAE,MAAM;YACrD,CAAC,CAAC,KAAK,EAAE,KAA4G,EAAE,EAAE;gBACrH,MAAM,aAAa,GAAG,UAAW,CAAC,aAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;gBACvF,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;oBACjC,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBAClE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;wBACxB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC;wBAC5C,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;4BAC3B,OAAO,EAAE,cAAc,EAAE,qBAAqB,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;wBAC3F,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,IAAI,CAAC,oCAAoC,KAAK,CAAC,IAAI,eAAe,QAAQ,CAAC,IAAI,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;wBACpH,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;YACH,CAAC,CAAC,SAAS,CAAC;QAEd,+EAA+E;QAC/E,wEAAwE;QACxE,IAAI,WAA8D,CAAC;QACnE,IAAI,CAAC;YACH,WAAW,GAAG,MAAM,KAAK,CAAiB;gBAC1C,QAAQ,EAAE,KAAK,EAAE,WAAkC,EAAE,EAAE;oBACrD,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;oBAChC,MAAM,iBAAiB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;oBAEnD,MAAM,SAAS,GAAc;wBAC3B,WAAW,EAAE,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;wBAClF,aAAa,EAAE,QAAQ,EAAE,IAAI;qBAC9B,CAAC;oBAEF,sCAAsC;oBACtC,MAAM,iBAAiB,GAAG;wBACxB,OAAO,EAAE,WAAW,CAAC,OAAO;wBAC5B,iBAAiB,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BACxD,KAAK,EAAE,CAAC;4BACR,gBAAgB,EAAE,CAAC;yBACpB,CAAC,CAAC;qBACJ,CAAC;oBAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK;wBAC3B,CAAC,CAAC,MAAM,QAAQ,CAAC;4BACb,KAAK,EAAE,WAAkC;4BACzC,IAAI,EAAE,SAAS;4BACf,OAAO,EAAE,YAAY;4BACrB,gBAAgB,EAAE,iBAAiB;4BACnC,YAAY,EAAE,YAAa;4BAC3B,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;4BAC9C,cAAc,EAAE,QAAQ,IAAI,SAAS;4BACrC,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,cAAc;4BAC5C,uBAAuB,EAAE,aAAa,IAAI,eAAe,IAAI,SAAS;4BACtE,MAAM;4BACN,SAAS,EAAE;gCACT,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;oCACvB,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe;wCACjD,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAO,CAAC,eAAgB,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;wCAC7E,CAAC,CAAC,SAAS;oCACb,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB;wCACvD,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAO,CAAC,kBAAmB,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;wCAChF,CAAC,CAAC,SAAS;oCACb,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe;wCACjD,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAO,CAAC,eAAgB,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;wCAC7E,CAAC,CAAC,SAAS;oCACb,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe;wCACjD,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAO,CAAC,eAAgB,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;wCAC7E,CAAC,CAAC,SAAS;oCACb,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY;wCAC3C,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAO,CAAC,YAAa,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;wCAC1E,CAAC,CAAC,SAAS;iCACd,CAAC,CAAC,CAAC,EAAE,CAAC;gCACP,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCACzC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;6BAC5C;yBACF,CAAC;wBACJ,CAAC,CAAC,MAAM,SAAS,CAAC;4BACd,UAAU,EAAE,QAAQ,CAAC,MAAO;4BAC5B,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,OAAO;4BACpC,OAAO,EAAE,YAAY;4BACrB,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU;4BACnD,SAAS,EAAE,QAAQ,CAAC,UAAU;yBAC/B,CAAC,CAAC;oBAEP,mBAAmB;oBACnB,MAAM,QAAQ,GAAa;wBACzB,EAAE,EAAE,UAAU;wBACd,UAAU,EAAE,WAAW,EAAE,IAAI,IAAI,UAAU,QAAQ,CAAC,MAAM,IAAI,SAAS,EAAE;wBACzE,OAAO,EAAE,WAAW,CAAC,OAAO;wBAC5B,MAAM,EAAE,SAAS;wBACjB,UAAU,EAAE,MAAM,CAAC,gBAAgB;wBACnC,UAAU,EAAE,iBAAiB;wBAC7B,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;wBACtC,MAAM,EAAE,MAAM,CAAC,MAAM;qBACtB,CAAC;oBACF,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAElC,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,SAAS,EAAE,cAAc;gBACzB,WAAW,EAAE,QAAQ,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC;gBAC9C,aAAa;gBACb,MAAM;gBACN,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;oBACvB,4CAA4C;oBAC5C,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ;wBACvD,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;wBACrB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;oBAEjD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;wBAChC,KAAK,EAAE,QAAQ,CAAC,IAAI;wBACpB,OAAO,EAAE,KAAK,CAAC,OAAO;wBACtB,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC;wBAC/C,QAAQ,EAAE,KAAK,CAAC,WAAW;wBAC3B,gBAAgB,EAAE,SAAS;wBAC3B,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,gBAAgB;qBAChD,CAAC,CAAC;oBACH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;wBACvB,IAAI,EAAE,YAAY;wBAClB,SAAS,EAAE,QAAQ,CAAC,IAAI;wBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;wBACtB,QAAQ,EAAE,KAAK,CAAC,WAAW;wBAC3B,SAAS;qBACV,CAAC,CAAC;gBACL,CAAC;aACA,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,oFAAoF;YACpF,uFAAuF;YACvF,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAChD,QAAQ,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACjD,QAAQ,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;gBACpC,UAAU,EAAE,QAAQ,CAAC,IAAI;gBACzB,WAAW,EAAE,UAAU;gBACvB,YAAY,EAAE,WAAW;gBACzB,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,CAAC;gBACX,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE;aAC7D,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YACpG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACxC,CAAC;QAED,8DAA8D;QAC9D,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,UAAU,EAAE,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,wCAAwC;QACxC,IAAI,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAEjD,6CAA6C;QAC7C,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;YAChC,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAClD,QAAQ,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACjD,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,kCAAkC;YAC7D,OAAO,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAChD,QAAQ,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;gBACpC,UAAU,EAAE,QAAQ,CAAC,IAAI;gBACzB,WAAW,EAAE,UAAU;gBACvB,YAAY,EAAE,WAAW;gBACzB,MAAM,EAAE,WAAW;gBACnB,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE;aAC7D,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YACpG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAC3C,CAAC;QAED,yEAAyE;QACzE,kFAAkF;QAClF,IAAI,UAA4C,CAAC;QACjD,IAAI,WAAW,KAAK,SAAS,IAAI,QAAQ,EAAE,eAAe,EAAE,mBAAmB,EAAE,CAAC;YAChF,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9F,UAAU,GAAG,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAEjD,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACzB,WAAW,GAAG,UAAU,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,sFAAsF;QACtF,IAAI,WAAW,KAAK,SAAS,IAAI,UAAU,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC;YACvE,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,KAAK,SAAS;gBAClD,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,MAAiC,IAAI,EAAE,CAAC;gBAC/D,CAAC,CAAC,EAAE,CAAC;YACP,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC;gBAChD,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;gBAClE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;oBACxB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC;oBAC5C,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;wBAC3B,WAAW,GAAG,UAAU,CAAC;wBACzB,UAAU,GAAG;4BACX,QAAQ,EAAE,KAAK;4BACf,gBAAgB,EAAE,kCAAkC,IAAI,CAAC,OAAO,EAAE;4BAClE,iBAAiB,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;yBAChE,CAAC;wBACF,MAAM;oBACR,CAAC;yBAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;wBAChC,WAAW,GAAG,QAAQ,CAAC;wBACvB,UAAU,GAAG;4BACX,QAAQ,EAAE,KAAK;4BACf,gBAAgB,EAAE,kCAAkC,IAAI,CAAC,OAAO,EAAE;4BAClE,iBAAiB,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;yBAChE,CAAC;wBACF,MAAM;oBACR,CAAC;yBAAM,CAAC;wBACN,iBAAiB;wBACjB,OAAO,CAAC,IAAI,CAAC,8CAA8C,QAAQ,CAAC,IAAI,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;oBACrG,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,OAAO,CAAC,MAAM,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;QAClE,OAAO,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAEhD,QAAQ,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3B,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC;QAC9B,QAAQ,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAEjD,wCAAwC;QACxC,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAErF,kEAAkE;QAClE,IAAI,UAAU,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;YACrC,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QACtC,CAAC;QACD,MAAM,eAAe,GAAG,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,UAAU;YAClE,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE;YACrF,CAAC,CAAC,CAAC,CAAC;QAEN,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;YACpC,UAAU,EAAE,QAAQ,CAAC,IAAI;YACzB,WAAW,EAAE,UAAU;YACvB,YAAY,EAAE,WAAW;YACzB,MAAM,EAAE,WAAW;YACnB,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,WAAW,EAAE,eAAe;YAC5B,cAAc,EAAE,WAAW,KAAK,UAAU;gBACxC,CAAC,CAAC,aAAa,UAAW,CAAC,gBAAgB,EAAE;gBAC7C,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;YAC/D,MAAM,EAAE,UAAU,EAAE,MAAM;YAC1B,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YAC1D,WAAW,EAAE,UAAU,EAAE,WAAW;YACpC,gBAAgB,EAAE,UAAU,EAAE,gBAAgB;YAC9C,iBAAiB,EAAE,UAAU,EAAE,iBAAiB;SACjD,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAEpG,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,WAAW;YACnB,cAAc,EAAE,UAAU;YAC1B,eAAe,EAAE,UAAU,EAAE,MAAM;YACnC,SAAS,EAAE,UAAU,EAAE,UAAU;YACjC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,IAAI,CAAC;YACvD,cAAc,EAAE,UAAU,EAAE,gBAAgB,IAAI,CAAC;SAClD,CAAC;IACJ,CAAC;IAEO,cAAc,CACpB,QAA+B,EAC/B,QAAyB;QAEzB,6EAA6E;QAC7E,MAAM,UAAU,GAA8B,CAAC,MAAM,EAAE,EAAE,CACvD,MAAM,CAAC,KAAK;YACV,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxD,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QAEhD,6CAA6C;QAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,sCAAsC;QACtC,MAAM,UAAU,GAAgC,CAAC,UAAU,CAAC,CAAC;QAE7D,sCAAsC;QACtC,IAAI,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;YACrC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;QACvE,CAAC;QAED,qEAAqE;QACrE,MAAM,YAAY,GAAqC,QAAQ,CAAC,UAAU;eACrE,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAE1F,8BAA8B;QAC9B,IAAI,YAAY,EAAE,OAAO,KAAK,SAAS,IAAI,YAAY,EAAE,OAAO,KAAK,SAAS,IAAI,YAAY,EAAE,cAAc,EAAE,CAAC;YAC/G,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;QAClF,CAAC;QAED,4BAA4B;QAC5B,IAAI,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;YACzC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;QACtF,CAAC;QAED,8EAA8E;QAC9E,IAAI,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;YACxC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;QACrF,CAAC;QAED,2FAA2F;QAC3F,IAAI,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC;YAC/C,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC;IAChC,CAAC;IAEO,oBAAoB,CAAC,YAAqB;QAChD,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,aAAa;gBAChB,OAAO,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACzC,KAAK,OAAO;gBACV,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;YAC1B,KAAK,MAAM,CAAC;YACZ,KAAK,mBAAmB;gBACtB,2DAA2D;gBAC3D,2EAA2E;gBAC3E,OAAO,OAAO,EAAE,CAAC;YACnB;gBACE,OAAO,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,MAA8B;QACvE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC7C,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC9D,+EAA+E;YAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;YACtE,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,cAAc,CAAC,CAAC;YACzD,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACxE,CAAC;QAAC,MAAM,CAAC;YACP,gDAAgD;QAClD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ import type { StageDefinition } from '@studio-foundation/contracts';
2
+ export declare function resolveStages(stages: StageDefinition[]): StageDefinition[];
3
+ //# sourceMappingURL=stage-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-resolver.d.ts","sourceRoot":"","sources":["../../src/pipeline/stage-resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAI1E"}
@@ -0,0 +1,6 @@
1
+ export function resolveStages(stages) {
2
+ // For v7: just return stages in order (sequential execution)
3
+ // Future: could support DAG, parallel stages
4
+ return stages;
5
+ }
6
+ //# sourceMappingURL=stage-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-resolver.js","sourceRoot":"","sources":["../../src/pipeline/stage-resolver.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,aAAa,CAAC,MAAyB;IACrD,6DAA6D;IAC7D,6CAA6C;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { StartupCommand } from '@studio-foundation/contracts';
2
+ export declare function executeStartupCommands(commands: StartupCommand[], cwd?: string): Promise<Record<string, string>>;
3
+ //# sourceMappingURL=startup-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-executor.d.ts","sourceRoot":"","sources":["../../src/pipeline/startup-executor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAKnE,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,cAAc,EAAE,EAC1B,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAmBjC"}
@@ -0,0 +1,23 @@
1
+ // Execute on_pipeline_start commands and collect their stdout
2
+ import { exec } from 'node:child_process';
3
+ import { promisify } from 'node:util';
4
+ const execAsync = promisify(exec);
5
+ const COMMAND_TIMEOUT_MS = 10_000;
6
+ export async function executeStartupCommands(commands, cwd) {
7
+ const result = {};
8
+ for (const cmd of commands) {
9
+ try {
10
+ const { stdout } = await execAsync(cmd.command, {
11
+ cwd,
12
+ timeout: COMMAND_TIMEOUT_MS,
13
+ maxBuffer: 1024 * 1024 * 10,
14
+ });
15
+ result[cmd.inject_as] = stdout.trim();
16
+ }
17
+ catch (err) {
18
+ console.warn(`[on_pipeline_start] command failed: "${cmd.command}" — ${err.message}`);
19
+ }
20
+ }
21
+ return result;
22
+ }
23
+ //# sourceMappingURL=startup-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-executor.js","sourceRoot":"","sources":["../../src/pipeline/startup-executor.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAE9D,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAClC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,QAA0B,EAC1B,GAAY;IAEZ,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE;gBAC9C,GAAG;gBACH,OAAO,EAAE,kBAAkB;gBAC3B,SAAS,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE;aAC5B,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CACV,wCAAwC,GAAG,CAAC,OAAO,OAAQ,GAAa,CAAC,OAAO,EAAE,CACnF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=startup-executor.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-executor.test.d.ts","sourceRoot":"","sources":["../../src/pipeline/startup-executor.test.ts"],"names":[],"mappings":""}