@tagma/sdk 0.7.3 → 0.7.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 (230) hide show
  1. package/README.md +85 -57
  2. package/dist/approval.d.ts +2 -12
  3. package/dist/approval.d.ts.map +1 -1
  4. package/dist/approval.js +1 -90
  5. package/dist/approval.js.map +1 -1
  6. package/dist/bootstrap.d.ts +1 -1
  7. package/dist/bootstrap.d.ts.map +1 -1
  8. package/dist/completions/file-exists.js +1 -1
  9. package/dist/completions/file-exists.js.map +1 -1
  10. package/dist/completions/output-check.d.ts.map +1 -1
  11. package/dist/completions/output-check.js +17 -4
  12. package/dist/completions/output-check.js.map +1 -1
  13. package/dist/config.d.ts +4 -4
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +2 -2
  16. package/dist/config.js.map +1 -1
  17. package/dist/dataflow.d.ts +3 -0
  18. package/dist/dataflow.d.ts.map +1 -0
  19. package/dist/dataflow.js +2 -0
  20. package/dist/dataflow.js.map +1 -0
  21. package/dist/drivers/opencode.d.ts.map +1 -1
  22. package/dist/drivers/opencode.js +23 -71
  23. package/dist/drivers/opencode.js.map +1 -1
  24. package/dist/engine.d.ts +5 -56
  25. package/dist/engine.d.ts.map +1 -1
  26. package/dist/engine.js +7 -297
  27. package/dist/engine.js.map +1 -1
  28. package/dist/index.d.ts +4 -6
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +2 -4
  31. package/dist/index.js.map +1 -1
  32. package/dist/logger.d.ts +2 -60
  33. package/dist/logger.d.ts.map +1 -1
  34. package/dist/logger.js +1 -153
  35. package/dist/logger.js.map +1 -1
  36. package/dist/middlewares/static-context.d.ts.map +1 -1
  37. package/dist/middlewares/static-context.js +1 -2
  38. package/dist/middlewares/static-context.js.map +1 -1
  39. package/dist/pipeline-runner.d.ts.map +1 -1
  40. package/dist/pipeline-runner.js +2 -2
  41. package/dist/pipeline-runner.js.map +1 -1
  42. package/dist/plugins.d.ts +2 -2
  43. package/dist/plugins.d.ts.map +1 -1
  44. package/dist/plugins.js +1 -1
  45. package/dist/plugins.js.map +1 -1
  46. package/dist/runner.d.ts +1 -35
  47. package/dist/runner.d.ts.map +1 -1
  48. package/dist/runner.js +1 -610
  49. package/dist/runner.js.map +1 -1
  50. package/dist/runtime/adapters/stdin-approval.d.ts +2 -0
  51. package/dist/runtime/adapters/stdin-approval.d.ts.map +1 -0
  52. package/dist/runtime/adapters/stdin-approval.js +2 -0
  53. package/dist/runtime/adapters/stdin-approval.js.map +1 -0
  54. package/dist/runtime/adapters/websocket-approval.d.ts +2 -0
  55. package/dist/runtime/adapters/websocket-approval.d.ts.map +1 -0
  56. package/dist/runtime/adapters/websocket-approval.js +2 -0
  57. package/dist/runtime/adapters/websocket-approval.js.map +1 -0
  58. package/dist/runtime/bun-process-runner.d.ts +2 -0
  59. package/dist/runtime/bun-process-runner.d.ts.map +1 -0
  60. package/dist/runtime/bun-process-runner.js +2 -0
  61. package/dist/runtime/bun-process-runner.js.map +1 -0
  62. package/dist/runtime.d.ts +2 -8
  63. package/dist/runtime.d.ts.map +1 -1
  64. package/dist/runtime.js +1 -7
  65. package/dist/runtime.js.map +1 -1
  66. package/dist/schema.d.ts.map +1 -1
  67. package/dist/schema.js +3 -4
  68. package/dist/schema.js.map +1 -1
  69. package/dist/tagma.d.ts +3 -4
  70. package/dist/tagma.d.ts.map +1 -1
  71. package/dist/tagma.js +2 -3
  72. package/dist/tagma.js.map +1 -1
  73. package/dist/triggers/file.d.ts.map +1 -1
  74. package/dist/triggers/file.js +74 -108
  75. package/dist/triggers/file.js.map +1 -1
  76. package/dist/triggers/manual.d.ts.map +1 -1
  77. package/dist/triggers/manual.js +1 -2
  78. package/dist/triggers/manual.js.map +1 -1
  79. package/dist/types.d.ts +1 -2
  80. package/dist/types.d.ts.map +1 -1
  81. package/dist/types.js +1 -12
  82. package/dist/types.js.map +1 -1
  83. package/dist/utils-api.d.ts +1 -1
  84. package/dist/utils-api.d.ts.map +1 -1
  85. package/dist/utils-api.js +1 -1
  86. package/dist/utils-api.js.map +1 -1
  87. package/dist/validate-raw.d.ts.map +1 -1
  88. package/dist/validate-raw.js +5 -12
  89. package/dist/validate-raw.js.map +1 -1
  90. package/package.json +20 -22
  91. package/dist/adapters/stdin-approval.d.ts +0 -6
  92. package/dist/adapters/stdin-approval.d.ts.map +0 -1
  93. package/dist/adapters/stdin-approval.js +0 -90
  94. package/dist/adapters/stdin-approval.js.map +0 -1
  95. package/dist/adapters/websocket-approval.d.ts +0 -28
  96. package/dist/adapters/websocket-approval.d.ts.map +0 -1
  97. package/dist/adapters/websocket-approval.js +0 -147
  98. package/dist/adapters/websocket-approval.js.map +0 -1
  99. package/dist/core/dataflow.d.ts +0 -23
  100. package/dist/core/dataflow.d.ts.map +0 -1
  101. package/dist/core/dataflow.js +0 -99
  102. package/dist/core/dataflow.js.map +0 -1
  103. package/dist/core/log-prune.d.ts +0 -16
  104. package/dist/core/log-prune.d.ts.map +0 -1
  105. package/dist/core/log-prune.js +0 -34
  106. package/dist/core/log-prune.js.map +0 -1
  107. package/dist/core/preflight.d.ts +0 -13
  108. package/dist/core/preflight.d.ts.map +0 -1
  109. package/dist/core/preflight.js +0 -61
  110. package/dist/core/preflight.js.map +0 -1
  111. package/dist/core/run-context.d.ts +0 -55
  112. package/dist/core/run-context.d.ts.map +0 -1
  113. package/dist/core/run-context.js +0 -158
  114. package/dist/core/run-context.js.map +0 -1
  115. package/dist/core/run-state.d.ts +0 -25
  116. package/dist/core/run-state.d.ts.map +0 -1
  117. package/dist/core/run-state.js +0 -93
  118. package/dist/core/run-state.js.map +0 -1
  119. package/dist/core/scheduler.d.ts +0 -13
  120. package/dist/core/scheduler.d.ts.map +0 -1
  121. package/dist/core/scheduler.js +0 -35
  122. package/dist/core/scheduler.js.map +0 -1
  123. package/dist/core/task-executor.d.ts +0 -13
  124. package/dist/core/task-executor.d.ts.map +0 -1
  125. package/dist/core/task-executor.js +0 -601
  126. package/dist/core/task-executor.js.map +0 -1
  127. package/dist/core/trigger-errors.d.ts +0 -9
  128. package/dist/core/trigger-errors.d.ts.map +0 -1
  129. package/dist/core/trigger-errors.js +0 -15
  130. package/dist/core/trigger-errors.js.map +0 -1
  131. package/dist/dag.d.ts +0 -45
  132. package/dist/dag.d.ts.map +0 -1
  133. package/dist/dag.js +0 -177
  134. package/dist/dag.js.map +0 -1
  135. package/dist/hooks.d.ts +0 -73
  136. package/dist/hooks.d.ts.map +0 -1
  137. package/dist/hooks.js +0 -106
  138. package/dist/hooks.js.map +0 -1
  139. package/dist/pipeline-definition.d.ts +0 -3
  140. package/dist/pipeline-definition.d.ts.map +0 -1
  141. package/dist/pipeline-definition.js +0 -4
  142. package/dist/pipeline-definition.js.map +0 -1
  143. package/dist/ports.d.ts +0 -196
  144. package/dist/ports.d.ts.map +0 -1
  145. package/dist/ports.js +0 -688
  146. package/dist/ports.js.map +0 -1
  147. package/dist/prompt-doc.d.ts +0 -70
  148. package/dist/prompt-doc.d.ts.map +0 -1
  149. package/dist/prompt-doc.js +0 -154
  150. package/dist/prompt-doc.js.map +0 -1
  151. package/dist/registry.d.ts +0 -67
  152. package/dist/registry.d.ts.map +0 -1
  153. package/dist/registry.js +0 -293
  154. package/dist/registry.js.map +0 -1
  155. package/dist/task-ref.d.ts +0 -55
  156. package/dist/task-ref.d.ts.map +0 -1
  157. package/dist/task-ref.js +0 -103
  158. package/dist/task-ref.js.map +0 -1
  159. package/dist/utils.d.ts +0 -13
  160. package/dist/utils.d.ts.map +0 -1
  161. package/dist/utils.js +0 -177
  162. package/dist/utils.js.map +0 -1
  163. package/src/adapters/stdin-approval.ts +0 -106
  164. package/src/adapters/websocket-approval.ts +0 -224
  165. package/src/approval.ts +0 -131
  166. package/src/bootstrap.ts +0 -55
  167. package/src/completions/exit-code.ts +0 -34
  168. package/src/completions/file-exists.ts +0 -66
  169. package/src/completions/output-check.test.ts +0 -50
  170. package/src/completions/output-check.ts +0 -92
  171. package/src/config-ops.test.ts +0 -70
  172. package/src/config-ops.ts +0 -328
  173. package/src/config.ts +0 -26
  174. package/src/core/dataflow.test.ts +0 -166
  175. package/src/core/dataflow.ts +0 -161
  176. package/src/core/log-prune.test.ts +0 -58
  177. package/src/core/log-prune.ts +0 -43
  178. package/src/core/preflight.test.ts +0 -49
  179. package/src/core/preflight.ts +0 -89
  180. package/src/core/run-context.test.ts +0 -256
  181. package/src/core/run-context.ts +0 -211
  182. package/src/core/run-state.test.ts +0 -98
  183. package/src/core/run-state.ts +0 -122
  184. package/src/core/scheduler.test.ts +0 -83
  185. package/src/core/scheduler.ts +0 -42
  186. package/src/core/task-executor.ts +0 -743
  187. package/src/core/trigger-errors.ts +0 -15
  188. package/src/dag.test.ts +0 -56
  189. package/src/dag.ts +0 -245
  190. package/src/drivers/opencode.ts +0 -410
  191. package/src/engine-ports-mixed.test.ts +0 -156
  192. package/src/engine-ports.test.ts +0 -166
  193. package/src/engine-task-type.test.ts +0 -56
  194. package/src/engine.ts +0 -458
  195. package/src/hooks.ts +0 -193
  196. package/src/index.ts +0 -33
  197. package/src/logger.ts +0 -182
  198. package/src/middlewares/static-context.ts +0 -49
  199. package/src/pipeline-definition.ts +0 -5
  200. package/src/pipeline-runner.test.ts +0 -91
  201. package/src/pipeline-runner.ts +0 -194
  202. package/src/plugin-registry.test.ts +0 -382
  203. package/src/plugins.ts +0 -21
  204. package/src/ports.test.ts +0 -678
  205. package/src/ports.ts +0 -925
  206. package/src/prompt-doc.test.ts +0 -174
  207. package/src/prompt-doc.ts +0 -169
  208. package/src/registry.ts +0 -353
  209. package/src/runner.test.ts +0 -142
  210. package/src/runner.ts +0 -666
  211. package/src/runtime.ts +0 -20
  212. package/src/schema-ports.test.ts +0 -172
  213. package/src/schema.test.ts +0 -213
  214. package/src/schema.ts +0 -379
  215. package/src/tagma.test.ts +0 -155
  216. package/src/tagma.ts +0 -62
  217. package/src/task-ref.test.ts +0 -401
  218. package/src/task-ref.ts +0 -121
  219. package/src/triggers/file.ts +0 -164
  220. package/src/triggers/manual.ts +0 -86
  221. package/src/types.ts +0 -18
  222. package/src/utils-api.ts +0 -8
  223. package/src/utils.test.ts +0 -28
  224. package/src/utils.ts +0 -203
  225. package/src/validate-raw-plugin-types.test.ts +0 -60
  226. package/src/validate-raw-ports.test.ts +0 -136
  227. package/src/validate-raw.ts +0 -852
  228. package/src/yaml-compiler.test.ts +0 -108
  229. package/src/yaml-compiler.ts +0 -110
  230. package/src/yaml.ts +0 -11
@@ -1,601 +0,0 @@
1
- import { resolve } from 'path';
2
- import { parseDuration, nowISO } from '../utils';
3
- import { promptDocumentFromString, serializePromptDocument, prependContext, renderInputsBlock, renderOutputSchemaBlock, } from '../prompt-doc';
4
- import { resolveTaskBindingInputs, resolveTaskInputs, substituteInputs } from '../ports';
5
- import { executeHook, buildTaskContext } from '../hooks';
6
- import { clip, tailLines } from '../logger';
7
- import { extractSuccessfulOutputs, inferEffectivePorts } from './dataflow';
8
- import { TriggerBlockedError, TriggerTimeoutError } from './trigger-errors';
9
- const MAX_NORMALIZED_BYTES = 1_000_000;
10
- function isPromptTaskConfig(task) {
11
- return task.prompt !== undefined && task.command === undefined;
12
- }
13
- function isCommandTaskConfig(task) {
14
- return task.command !== undefined && task.prompt === undefined;
15
- }
16
- export async function executeTask(options) {
17
- const { taskId, ctx, registry, log, approvalGateway } = options;
18
- const dag = ctx.dag;
19
- const config = ctx.config;
20
- const workDir = ctx.workDir;
21
- const pipelineInfo = ctx.pipelineInfo;
22
- const state = ctx.states.get(taskId);
23
- const node = dag.nodes.get(taskId);
24
- const task = node.task;
25
- const track = node.track;
26
- log.section(`Task ${taskId}`, taskId);
27
- log.debug(`[task:${taskId}]`, `type=${isPromptTaskConfig(task) ? 'ai' : 'cmd'} track=${track.id} deps=[${node.dependsOn.join(', ') || '(root)'}]`);
28
- // 1. Check dependencies
29
- for (const depId of node.dependsOn) {
30
- const result = ctx.isDependencySatisfied(depId);
31
- if (result === 'skip') {
32
- const depStatus = ctx.states.get(depId)?.status ?? 'unknown';
33
- log.debug(`[task:${taskId}]`, `skipped (upstream "${depId}" status=${depStatus})`);
34
- state.finishedAt = nowISO();
35
- ctx.setTaskStatus(taskId, 'skipped');
36
- return;
37
- }
38
- if (result === 'unsatisfied')
39
- return; // still waiting
40
- }
41
- // 2. Check trigger
42
- if (task.trigger) {
43
- log.debug(`[task:${taskId}]`, `trigger wait: type=${task.trigger.type} ${JSON.stringify(task.trigger)}`);
44
- try {
45
- const triggerPlugin = registry.getHandler('triggers', task.trigger.type);
46
- // R6: race the plugin's watch() against the pipeline's abort signal
47
- // AND the task-level timeout. Third-party triggers may forget to
48
- // wire up ctx.signal — without the abort race, an aborted pipeline
49
- // would hang forever waiting for the plugin's watch promise to
50
- // resolve. And without the timeout race, a buggy watch() that never
51
- // settles would ignore the user's `task.timeout` (which the spawn
52
- // path at step 4 already honours) — a task could wedge the whole
53
- // pipeline until pipeline-level timeout fires (or forever, if none
54
- // is set). Honouring task.timeout here makes the two stages
55
- // symmetric. The cleanup paths in finally never run on the orphaned
56
- // plugin promise (it's allowed to leak a watcher; the pipeline is
57
- // being torn down anyway).
58
- const triggerTimeoutMs = task.timeout ? parseDuration(task.timeout) : 0;
59
- await new Promise((resolve, reject) => {
60
- let settled = false;
61
- let timer = null;
62
- const onAbort = () => {
63
- if (settled)
64
- return;
65
- settled = true;
66
- if (timer !== null)
67
- clearTimeout(timer);
68
- reject(new Error('Pipeline aborted'));
69
- };
70
- if (ctx.abortController.signal.aborted) {
71
- onAbort();
72
- return;
73
- }
74
- ctx.abortController.signal.addEventListener('abort', onAbort, { once: true });
75
- if (triggerTimeoutMs > 0) {
76
- timer = setTimeout(() => {
77
- if (settled)
78
- return;
79
- settled = true;
80
- ctx.abortController.signal.removeEventListener('abort', onAbort);
81
- reject(new TriggerTimeoutError(`Trigger "${task.trigger.type}" did not settle within ${task.timeout} (task-level timeout)`));
82
- }, triggerTimeoutMs);
83
- }
84
- triggerPlugin
85
- .watch(task.trigger, {
86
- taskId: node.taskId,
87
- trackId: track.id,
88
- workDir: task.cwd ?? workDir,
89
- signal: ctx.abortController.signal,
90
- approvalGateway,
91
- })
92
- .then((v) => {
93
- if (settled)
94
- return;
95
- settled = true;
96
- if (timer !== null)
97
- clearTimeout(timer);
98
- ctx.abortController.signal.removeEventListener('abort', onAbort);
99
- resolve(v);
100
- }, (e) => {
101
- if (settled)
102
- return;
103
- settled = true;
104
- if (timer !== null)
105
- clearTimeout(timer);
106
- ctx.abortController.signal.removeEventListener('abort', onAbort);
107
- reject(e);
108
- });
109
- });
110
- log.debug(`[task:${taskId}]`, `trigger fired`);
111
- }
112
- catch (err) {
113
- // If pipeline was aborted while we were still waiting for the trigger,
114
- // this task never entered running state → skipped, not timeout.
115
- state.finishedAt = nowISO();
116
- if (ctx.abortReason !== null) {
117
- ctx.setTaskStatus(taskId, 'skipped');
118
- }
119
- else if (err instanceof TriggerBlockedError) {
120
- ctx.setTaskStatus(taskId, 'blocked'); // user/policy rejection
121
- }
122
- else if (err instanceof TriggerTimeoutError) {
123
- ctx.setTaskStatus(taskId, 'timeout'); // genuine trigger wait timeout
124
- }
125
- else {
126
- // A7 fallback: also check message strings for backward-compat with
127
- // third-party trigger plugins that don't throw typed errors yet.
128
- const msg = err instanceof Error ? err.message : String(err);
129
- if (msg.includes('rejected') || msg.includes('denied')) {
130
- ctx.setTaskStatus(taskId, 'blocked');
131
- }
132
- else if (msg.includes('timeout')) {
133
- ctx.setTaskStatus(taskId, 'timeout');
134
- }
135
- else {
136
- ctx.setTaskStatus(taskId, 'failed'); // plugin error, watcher crash, etc.
137
- }
138
- }
139
- try {
140
- await ctx.fireHook(taskId, 'task_failure');
141
- }
142
- catch (hookErr) {
143
- log.error(`[task:${taskId}]`, `hook execution failed: ${hookErr instanceof Error ? hookErr.message : String(hookErr)}`);
144
- }
145
- return;
146
- }
147
- }
148
- // 3. task_start hook (gate)
149
- const hookResult = await executeHook(config.hooks, 'task_start', buildTaskContext('task_start', pipelineInfo, ctx.trackInfoOf(taskId), ctx.buildTaskInfoObj(taskId)), workDir, ctx.abortController.signal);
150
- if (hookResult.exitCode !== 0 || config.hooks?.task_start) {
151
- log.debug(`[task:${taskId}]`, `task_start hook exit=${hookResult.exitCode} allowed=${hookResult.allowed}`);
152
- }
153
- if (!hookResult.allowed) {
154
- state.finishedAt = nowISO();
155
- ctx.setTaskStatus(taskId, 'blocked');
156
- try {
157
- await ctx.fireHook(taskId, 'task_failure');
158
- }
159
- catch (hookErr) {
160
- log.error(`[task:${taskId}]`, `hook execution failed: ${hookErr instanceof Error ? hookErr.message : String(hookErr)}`);
161
- }
162
- return;
163
- }
164
- // 3.5. Resolve port inputs from upstream outputs. This is the last
165
- // gate before execution: missing-required inputs block the task
166
- // without ever spawning a process, so the caller sees a clear
167
- // "blocked: missing input X" rather than a cryptic runtime error
168
- // from a command that expanded a placeholder to the empty string.
169
- // Resolution runs even for tasks that declare no ports — the call
170
- // is cheap and returns `{kind: 'ready', inputs: {}}` in that case,
171
- // which downstream code handles uniformly.
172
- //
173
- // Prompt Tasks have no declared ports — their I/O contract is
174
- // inferred from direct-neighbor Command Tasks (see ports.ts:
175
- // `inferPromptPorts`). We synthesize a `TaskPorts` object and
176
- // feed it into the same resolve/substitute/render/extract
177
- // pipeline the Command path uses. Collisions that a Prompt can't
178
- // disambiguate (same input name on two upstreams, incompatible
179
- // downstream output types) block the task with a clear message.
180
- const effectivePortsResult = inferEffectivePorts(ctx, taskId);
181
- if (effectivePortsResult.kind === 'blocked') {
182
- log.error(`[task:${taskId}]`, `blocked — prompt port inference failed:\n${effectivePortsResult.reason}`);
183
- state.result = {
184
- exitCode: -1,
185
- stdout: '',
186
- stderr: `[engine] prompt port inference failed:\n${effectivePortsResult.reason}`,
187
- stdoutPath: null,
188
- stderrPath: null,
189
- durationMs: 0,
190
- sessionId: null,
191
- normalizedOutput: null,
192
- failureKind: 'spawn_error',
193
- outputs: null,
194
- };
195
- state.finishedAt = nowISO();
196
- ctx.setTaskStatus(taskId, 'blocked');
197
- try {
198
- await ctx.fireHook(taskId, 'task_failure');
199
- }
200
- catch (hookErr) {
201
- log.error(`[task:${taskId}]`, `hook execution failed: ${hookErr instanceof Error ? hookErr.message : String(hookErr)}`);
202
- }
203
- if (ctx.getOnFailure(taskId) === 'stop_all')
204
- ctx.applyStopAll();
205
- return;
206
- }
207
- const isPromptTask = effectivePortsResult.isPromptTask;
208
- const effectivePorts = effectivePortsResult.effectivePorts;
209
- const bindingResolution = resolveTaskBindingInputs(task, ctx.bindingDataMap, node.dependsOn);
210
- if (bindingResolution.kind === 'blocked') {
211
- log.error(`[task:${taskId}]`, `blocked — cannot resolve task input bindings:\n${bindingResolution.reason}`);
212
- state.result = {
213
- exitCode: -1,
214
- stdout: '',
215
- stderr: `[engine] task input binding resolution failed:\n${bindingResolution.reason}`,
216
- stdoutPath: null,
217
- stderrPath: null,
218
- durationMs: 0,
219
- sessionId: null,
220
- normalizedOutput: null,
221
- failureKind: 'spawn_error',
222
- outputs: null,
223
- };
224
- state.finishedAt = nowISO();
225
- ctx.setTaskStatus(taskId, 'blocked');
226
- try {
227
- await ctx.fireHook(taskId, 'task_failure');
228
- }
229
- catch (hookErr) {
230
- log.error(`[task:${taskId}]`, `hook execution failed: ${hookErr instanceof Error ? hookErr.message : String(hookErr)}`);
231
- }
232
- if (ctx.getOnFailure(taskId) === 'stop_all')
233
- ctx.applyStopAll();
234
- return;
235
- }
236
- if (bindingResolution.missingOptional.length > 0) {
237
- log.debug(`[task:${taskId}]`, `optional input bindings unresolved (empty in placeholders): ${bindingResolution.missingOptional.join(', ')}`);
238
- }
239
- let inferredPromptInputs = {};
240
- if (isPromptTask && effectivePorts?.inputs && effectivePorts.inputs.length > 0) {
241
- const inputResolution = resolveTaskInputs({ ...task, ports: effectivePorts }, ctx.outputValuesMap, node.dependsOn);
242
- if (inputResolution.kind === 'blocked') {
243
- log.error(`[task:${taskId}]`, `blocked — cannot resolve inferred prompt inputs:\n${inputResolution.reason}`);
244
- state.result = {
245
- exitCode: -1,
246
- stdout: '',
247
- stderr: `[engine] inferred prompt input resolution failed:\n${inputResolution.reason}`,
248
- stdoutPath: null,
249
- stderrPath: null,
250
- durationMs: 0,
251
- sessionId: null,
252
- normalizedOutput: null,
253
- failureKind: 'spawn_error',
254
- outputs: null,
255
- };
256
- state.finishedAt = nowISO();
257
- ctx.setTaskStatus(taskId, 'blocked');
258
- try {
259
- await ctx.fireHook(taskId, 'task_failure');
260
- }
261
- catch (hookErr) {
262
- log.error(`[task:${taskId}]`, `hook execution failed: ${hookErr instanceof Error ? hookErr.message : String(hookErr)}`);
263
- }
264
- if (ctx.getOnFailure(taskId) === 'stop_all')
265
- ctx.applyStopAll();
266
- return;
267
- }
268
- inferredPromptInputs = inputResolution.inputs;
269
- }
270
- const resolvedInputs = { ...inferredPromptInputs, ...bindingResolution.inputs };
271
- ctx.resolvedInputsMap.set(taskId, resolvedInputs);
272
- if (effectivePorts?.inputs && effectivePorts.inputs.length > 0) {
273
- log.debug(`[task:${taskId}]`, `resolved inputs: ${JSON.stringify(resolvedInputs)}` +
274
- (isPromptTask ? ' (inferred from upstream Commands)' : ''));
275
- }
276
- // 4. Mark running — set startedAt before emitting so subscribers see a
277
- // complete task_update (startedAt non-null) on the status transition.
278
- state.startedAt = nowISO();
279
- ctx.setTaskStatus(taskId, 'running');
280
- log.info(`[task:${taskId}]`, isCommandTaskConfig(task) ? `running: ${task.command}` : `running (driver task)`);
281
- // File-only: resolved config for this task
282
- const resolvedDriver = task.driver ?? track.driver ?? config.driver ?? 'opencode';
283
- const resolvedModel = task.model ?? track.model ?? config.model ?? '(default)';
284
- const resolvedPerms = task.permissions ?? track.permissions ?? '(default)';
285
- const resolvedCwd = task.cwd ?? track.cwd ?? workDir;
286
- log.debug(`[task:${taskId}]`, `resolved: driver=${resolvedDriver} model=${resolvedModel} cwd=${resolvedCwd}`);
287
- log.debug(`[task:${taskId}]`, `permissions: ${JSON.stringify(resolvedPerms)}`);
288
- if (task.continue_from) {
289
- log.debug(`[task:${taskId}]`, `continue_from: "${task.continue_from}"`);
290
- }
291
- if (task.timeout) {
292
- log.debug(`[task:${taskId}]`, `timeout: ${task.timeout}`);
293
- }
294
- try {
295
- let result;
296
- const timeoutMs = task.timeout ? parseDuration(task.timeout) : undefined;
297
- // Stream child stdout/stderr directly to disk in the logger's run dir
298
- // and keep only a bounded tail in the returned TaskResult. Filenames
299
- // mirror the existing `.stderr` naming — dots in task ids are replaced
300
- // so hierarchical ids (e.g. `track1.task2`) map cleanly to a flat dir.
301
- const fsSafeTaskId = taskId.replace(/\./g, '_');
302
- const stdoutPath = resolve(log.dir, `${fsSafeTaskId}.stdout`);
303
- const stderrPath = resolve(log.dir, `${fsSafeTaskId}.stderr`);
304
- const runOpts = {
305
- timeoutMs,
306
- signal: ctx.abortController.signal,
307
- stdoutPath,
308
- stderrPath,
309
- };
310
- if (isCommandTaskConfig(task)) {
311
- // Substitute `{{inputs.X}}` placeholders into the command
312
- // string. Tasks with no declared inputs always produce the same
313
- // string back (no placeholders to match). Unresolved references
314
- // render empty — validate-raw flags undeclared references as
315
- // errors, so the only way to land here with an unresolved is an
316
- // optional input that had no upstream producer and no default,
317
- // which we surface in the log.
318
- const { text: expandedCommand, unresolved } = substituteInputs(task.command, resolvedInputs);
319
- if (unresolved.length > 0) {
320
- log.debug(`[task:${taskId}]`, `command placeholders rendered empty: ${unresolved.join(', ')}`);
321
- }
322
- log.debug(`[task:${taskId}]`, `command: ${expandedCommand}`);
323
- result = await ctx.runtime.runCommand(expandedCommand, task.cwd ?? workDir, runOpts);
324
- }
325
- else {
326
- // AI task: apply middleware chain against a structured PromptDocument.
327
- const driverName = task.driver ?? track.driver ?? config.driver ?? 'opencode';
328
- const driver = registry.getHandler('drivers', driverName);
329
- // Substitute placeholders in the user-authored prompt before
330
- // wrapping into a PromptDocument so middlewares see the
331
- // already-resolved task text.
332
- const { text: expandedPrompt, unresolved } = substituteInputs(task.prompt, resolvedInputs);
333
- if (unresolved.length > 0) {
334
- log.debug(`[task:${taskId}]`, `prompt placeholders rendered empty: ${unresolved.join(', ')}`);
335
- }
336
- const originalLen = expandedPrompt.length;
337
- let doc = promptDocumentFromString(expandedPrompt);
338
- // Prepend port-related context blocks so the model sees them
339
- // before any middleware-added retrieval / memory blocks. Order
340
- // matters: [Output Format] first (sets the deliverable), then
341
- // [Inputs] (the concrete data to operate on). Empty blocks are
342
- // filtered out — tasks without ports get no extra blocks at all.
343
- const outputFormatBlock = renderOutputSchemaBlock(effectivePorts?.outputs);
344
- if (outputFormatBlock) {
345
- doc = prependContext(doc, outputFormatBlock);
346
- }
347
- const inputsBlock = renderInputsBlock(effectivePorts?.inputs, resolvedInputs);
348
- if (inputsBlock) {
349
- doc = prependContext(doc, inputsBlock);
350
- }
351
- const mws = task.middlewares !== undefined ? task.middlewares : track.middlewares;
352
- if (mws && mws.length > 0) {
353
- log.debug(`[task:${taskId}]`, `middleware chain: ${mws.map((m) => m.type).join(' → ')}`);
354
- const mwCtx = {
355
- task,
356
- track,
357
- workDir: task.cwd ?? workDir,
358
- };
359
- for (const mwConfig of mws) {
360
- const mwPlugin = registry.getHandler('middlewares', mwConfig.type);
361
- const beforeBlocks = doc.contexts.length;
362
- const beforeLen = serializePromptDocument(doc).length;
363
- if (typeof mwPlugin.enhanceDoc !== 'function') {
364
- throw new Error(`middleware "${mwConfig.type}" must provide enhanceDoc`);
365
- }
366
- const next = await mwPlugin.enhanceDoc(doc, mwConfig, mwCtx);
367
- if (!next ||
368
- typeof next !== 'object' ||
369
- !Array.isArray(next.contexts) ||
370
- typeof next.task !== 'string') {
371
- throw new Error(`middleware "${mwConfig.type}".enhanceDoc() returned a malformed PromptDocument`);
372
- }
373
- doc = next;
374
- const afterLen = serializePromptDocument(doc).length;
375
- const addedBlocks = doc.contexts.length - beforeBlocks;
376
- log.debug(`[task:${taskId}]`, ` ${mwConfig.type}: ${beforeLen} → ${afterLen} chars` +
377
- (addedBlocks > 0
378
- ? ` (+${addedBlocks} context block${addedBlocks > 1 ? 's' : ''})`
379
- : ''));
380
- }
381
- }
382
- const prompt = serializePromptDocument(doc);
383
- log.debug(`[task:${taskId}]`, `prompt: ${originalLen} chars (final: ${prompt.length} chars, ${doc.contexts.length} block${doc.contexts.length === 1 ? '' : 's'})`);
384
- log.quiet(`--- prompt (final) ---\n${clip(prompt)}\n--- end prompt ---`, taskId);
385
- // H1: hand the driver a continue_from that has already been
386
- // qualified by dag.ts. Without this, drivers like codex/opencode/
387
- // claude-code look up maps directly with
388
- // the user's raw (possibly bare) string, which races whenever two
389
- // tracks share a task name. dag.ts has the only authoritative
390
- // resolver, so we use its precomputed answer here.
391
- // Drivers key sessionMap/normalizedMap by fully-qualified id. buildDag
392
- // guarantees `resolvedContinueFrom` is set for every task that has a
393
- // `continue_from`, so if we see the bare form here something upstream
394
- // is broken — fail loud instead of silently miskeying the lookup.
395
- if (task.continue_from && !node.resolvedContinueFrom) {
396
- throw new Error(`Internal: task "${taskId}" has continue_from "${task.continue_from}" ` +
397
- `but no resolvedContinueFrom. buildDag should have qualified it.`);
398
- }
399
- const enrichedTask = {
400
- ...task,
401
- prompt,
402
- continue_from: node.resolvedContinueFrom,
403
- };
404
- const driverCtx = {
405
- sessionMap: ctx.sessionMap,
406
- normalizedMap: ctx.normalizedMap,
407
- workDir: task.cwd ?? workDir,
408
- // Structured view for drivers that want fine-grained control
409
- // over serialization (e.g. inserting [Previous Output] between
410
- // contexts and task). Drivers that read task.prompt see the
411
- // default serialization and need no changes.
412
- promptDoc: doc,
413
- // Resolved input values keyed by input name. Typed bindings have
414
- // already been coerced when a binding declares `type`.
415
- inputs: resolvedInputs,
416
- };
417
- const spec = await driver.buildCommand(enrichedTask, track, driverCtx);
418
- log.debug(`[task:${taskId}]`, `driver=${driverName}`);
419
- log.debug(`[task:${taskId}]`, `spawn args: ${JSON.stringify(spec.args)}`);
420
- if (spec.cwd)
421
- log.debug(`[task:${taskId}]`, `spawn cwd: ${spec.cwd}`);
422
- if (spec.env)
423
- log.debug(`[task:${taskId}]`, `spawn env overrides: ${Object.keys(spec.env).join(', ')}`);
424
- if (spec.stdin)
425
- log.debug(`[task:${taskId}]`, `spawn stdin: ${spec.stdin.length} chars`);
426
- result = await ctx.runtime.runSpawn(spec, driver, runOpts);
427
- }
428
- // 6. Determine terminal status (without emitting yet — result must be complete first)
429
- // H2: branch on failureKind so spawn errors no longer masquerade as
430
- // timeouts. Old runners that don't set failureKind still work — we
431
- // fall back to the historical `exitCode === -1 → timeout` heuristic so
432
- // pre-existing third-party drivers don't regress.
433
- let terminalStatus;
434
- const kind = result.failureKind;
435
- if (kind === 'timeout') {
436
- terminalStatus = 'timeout';
437
- }
438
- else if (kind === 'spawn_error') {
439
- terminalStatus = 'failed';
440
- }
441
- else if (kind === undefined && result.exitCode === -1) {
442
- // Legacy path: pre-H2 driver returned -1 with no kind. Treat as
443
- // timeout for backward compatibility (the previous behaviour).
444
- terminalStatus = 'timeout';
445
- }
446
- else if (result.exitCode !== 0) {
447
- terminalStatus = 'failed';
448
- }
449
- else if (task.completion) {
450
- const plugin = registry.getHandler('completions', task.completion.type);
451
- const completionCtx = { workDir: task.cwd ?? workDir, signal: ctx.abortController.signal };
452
- const passed = await plugin.check(task.completion, result, completionCtx);
453
- // R4: strict boolean check. Truthy strings/numbers used to be coerced
454
- // to success — a check returning "ok" would let a failing task pass.
455
- if (typeof passed !== 'boolean') {
456
- throw new Error(`completion "${task.completion.type}".check() returned ${passed === null ? 'null' : typeof passed}, expected boolean`);
457
- }
458
- terminalStatus = passed ? 'success' : 'failed';
459
- }
460
- else {
461
- terminalStatus = 'success';
462
- }
463
- // Extract declared outputs from the task's output stream. Only
464
- // meaningful on success — a failed task's output is whatever the
465
- // child happened to emit before exiting, and downstream tasks
466
- // shouldn't receive partial data.
467
- let extractedOutputs = null;
468
- if (terminalStatus === 'success') {
469
- const outputExtraction = extractSuccessfulOutputs({
470
- task,
471
- effectivePorts,
472
- result,
473
- });
474
- extractedOutputs = outputExtraction.outputs;
475
- if (task.outputs && Object.keys(task.outputs).length > 0) {
476
- log.debug(`[task:${taskId}]`, `extracted binding outputs: ${JSON.stringify(extractedOutputs ?? {})}`);
477
- if (outputExtraction.bindingDiagnostic) {
478
- log.debug(`[task:${taskId}]`, outputExtraction.bindingDiagnostic);
479
- const note = `\n[engine] ${outputExtraction.bindingDiagnostic}`;
480
- result = { ...result, stderr: result.stderr + note };
481
- }
482
- }
483
- if (effectivePorts?.outputs && effectivePorts.outputs.length > 0) {
484
- log.debug(`[task:${taskId}]`, `extracted outputs: ${JSON.stringify(extractedOutputs ?? {})}` +
485
- (isPromptTask ? ' (inferred from downstream Commands)' : ''));
486
- if (outputExtraction.portDiagnostic) {
487
- log.error(`[task:${taskId}]`, outputExtraction.portDiagnostic);
488
- const note = `\n[engine] ${outputExtraction.portDiagnostic}`;
489
- result = { ...result, stderr: result.stderr + note };
490
- }
491
- }
492
- }
493
- // Attach outputs to the result (null when task has no declared
494
- // outputs or extraction failed entirely). Consumers of TaskResult
495
- // — hooks, wire events, test assertions — all go through this
496
- // one field rather than re-running extraction.
497
- result = { ...result, outputs: extractedOutputs };
498
- if (extractedOutputs !== null) {
499
- ctx.outputValuesMap.set(taskId, extractedOutputs);
500
- }
501
- ctx.bindingDataMap.set(taskId, {
502
- outputs: extractedOutputs,
503
- stdout: result.stdout,
504
- stderr: result.stderr,
505
- normalizedOutput: result.normalizedOutput,
506
- exitCode: result.exitCode,
507
- });
508
- // Store normalized text separately (in-memory) for continue_from handoff.
509
- // R15: clip oversized values so a runaway parseResult can't accumulate
510
- // hundreds of MB across tasks.
511
- if (result.normalizedOutput !== null) {
512
- const clipped = result.normalizedOutput.length > MAX_NORMALIZED_BYTES
513
- ? result.normalizedOutput.slice(0, MAX_NORMALIZED_BYTES) +
514
- `\n[…clipped at ${MAX_NORMALIZED_BYTES} bytes]`
515
- : result.normalizedOutput;
516
- ctx.normalizedMap.set(taskId, clipped);
517
- }
518
- // Note: stderr is already persisted by runner.ts as it streams; the
519
- // old "write full string after the fact" block is gone — that's what
520
- // the streaming rewrite fixed (unbounded in-memory buffering).
521
- if (result.sessionId) {
522
- // H1: qualified-only key.
523
- ctx.sessionMap.set(taskId, result.sessionId);
524
- }
525
- // Set result and finishedAt before emitting terminal status so listeners see complete state
526
- state.result = result;
527
- state.finishedAt = nowISO();
528
- ctx.setTaskStatus(taskId, terminalStatus);
529
- // Log task outcome with relevant details
530
- const durSec = (result.durationMs / 1000).toFixed(1);
531
- if (terminalStatus === 'success') {
532
- log.info(`[task:${taskId}]`, `success (${durSec}s)`);
533
- }
534
- else {
535
- log.error(`[task:${taskId}]`, `${terminalStatus} exit=${result.exitCode} duration=${durSec}s`);
536
- if (result.stderr) {
537
- const tail = tailLines(result.stderr, 10);
538
- log.error(`[task:${taskId}]`, `stderr tail:\n${tail}`);
539
- }
540
- }
541
- // File-only: byte counts (prefer full totals from the runner over the
542
- // bounded tail length so oversized outputs show their real size) +
543
- // paths to the on-disk full copies.
544
- const stdoutSize = result.stdoutBytes ?? result.stdout.length;
545
- const stderrSize = result.stderrBytes ?? result.stderr.length;
546
- log.debug(`[task:${taskId}]`, `stdout: ${stdoutSize} bytes, stderr: ${stderrSize} bytes`);
547
- if (result.sessionId) {
548
- log.debug(`[task:${taskId}]`, `sessionId: ${result.sessionId}`);
549
- }
550
- if (result.stdoutPath) {
551
- log.debug(`[task:${taskId}]`, `wrote stdout: ${result.stdoutPath}`);
552
- }
553
- if (result.stderrPath) {
554
- log.debug(`[task:${taskId}]`, `wrote stderr: ${result.stderrPath}`);
555
- }
556
- if (result.stdout) {
557
- log.quiet(`--- stdout (${taskId}) ---\n${clip(result.stdout)}\n--- end stdout ---`, taskId);
558
- }
559
- if (result.stderr) {
560
- log.quiet(`--- stderr (${taskId}) ---\n${clip(result.stderr)}\n--- end stderr ---`, taskId);
561
- }
562
- if (task.completion) {
563
- log.debug(`[task:${taskId}]`, `completion check: type=${task.completion.type} result=${terminalStatus}`);
564
- }
565
- }
566
- catch (err) {
567
- const errMsg = err instanceof Error ? (err.stack ?? err.message) : String(err);
568
- log.error(`[task:${taskId}]`, `failed before execution: ${errMsg}`);
569
- state.result = {
570
- exitCode: -1,
571
- stdout: '',
572
- stderr: errMsg,
573
- stdoutPath: null,
574
- stderrPath: null,
575
- stdoutBytes: 0,
576
- stderrBytes: errMsg.length,
577
- durationMs: 0,
578
- sessionId: null,
579
- normalizedOutput: null,
580
- // H2: Engine-level pre-execution errors (driver throw, middleware
581
- // throw, getHandler 404) classify as spawn_error — the process never
582
- // ran, so calling them "timeout" was actively misleading.
583
- failureKind: 'spawn_error',
584
- };
585
- state.finishedAt = nowISO();
586
- ctx.setTaskStatus(taskId, 'failed');
587
- }
588
- // 7. Fire hooks
589
- const finalStatus = state.status;
590
- try {
591
- await ctx.fireHook(taskId, finalStatus === 'success' ? 'task_success' : 'task_failure');
592
- }
593
- catch (hookErr) {
594
- log.error(`[task:${taskId}]`, `hook execution failed: ${hookErr instanceof Error ? hookErr.message : String(hookErr)}`);
595
- }
596
- // 8. Handle stop_all for failure states
597
- if (finalStatus !== 'success' && ctx.getOnFailure(taskId) === 'stop_all') {
598
- ctx.applyStopAll();
599
- }
600
- }
601
- //# sourceMappingURL=task-executor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-executor.js","sourceRoot":"","sources":["../../src/core/task-executor.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- export declare class TriggerBlockedError extends Error {
2
- readonly code: "TRIGGER_BLOCKED";
3
- constructor(message: string);
4
- }
5
- export declare class TriggerTimeoutError extends Error {
6
- readonly code: "TRIGGER_TIMEOUT";
7
- constructor(message: string);
8
- }
9
- //# sourceMappingURL=trigger-errors.d.ts.map