@relayflows/sdk 2.0.22 → 2.0.24

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 (193) hide show
  1. package/dist/agent-artifacts.d.ts +18 -9
  2. package/dist/agent-artifacts.d.ts.map +1 -1
  3. package/dist/agent-artifacts.js +27 -11
  4. package/dist/agent-artifacts.js.map +1 -1
  5. package/dist/authored-flow-error.d.ts +33 -1
  6. package/dist/authored-flow-error.d.ts.map +1 -1
  7. package/dist/authored-flow-error.js +20 -1
  8. package/dist/authored-flow-error.js.map +1 -1
  9. package/dist/authored-flow-executor.d.ts.map +1 -1
  10. package/dist/authored-flow-executor.js +4 -1
  11. package/dist/authored-flow-executor.js.map +1 -1
  12. package/dist/authored-node-entry.js +5 -1
  13. package/dist/authored-node-entry.js.map +1 -1
  14. package/dist/authored-node-runner.d.ts +11 -0
  15. package/dist/authored-node-runner.d.ts.map +1 -1
  16. package/dist/authored-node-runner.js +30 -1
  17. package/dist/authored-node-runner.js.map +1 -1
  18. package/dist/authored-root.js +3 -1
  19. package/dist/authored-root.js.map +1 -1
  20. package/dist/authored-source-authority.js +13 -0
  21. package/dist/authored-source-authority.js.map +1 -1
  22. package/dist/authored-step-index.d.ts +82 -0
  23. package/dist/authored-step-index.d.ts.map +1 -0
  24. package/dist/authored-step-index.js +120 -0
  25. package/dist/authored-step-index.js.map +1 -0
  26. package/dist/authored-step-output.d.ts +23 -2
  27. package/dist/authored-step-output.d.ts.map +1 -1
  28. package/dist/authored-step-output.js +47 -5
  29. package/dist/authored-step-output.js.map +1 -1
  30. package/dist/authored-worker-step.d.ts +10 -2
  31. package/dist/authored-worker-step.d.ts.map +1 -1
  32. package/dist/authored-worker-step.js +81 -7
  33. package/dist/authored-worker-step.js.map +1 -1
  34. package/dist/cli/check.d.ts.map +1 -1
  35. package/dist/cli/check.js +67 -12
  36. package/dist/cli/check.js.map +1 -1
  37. package/dist/cli/cloud-read.d.ts +31 -0
  38. package/dist/cli/cloud-read.d.ts.map +1 -0
  39. package/dist/cli/cloud-read.js +482 -0
  40. package/dist/cli/cloud-read.js.map +1 -0
  41. package/dist/cli/run.d.ts +2 -0
  42. package/dist/cli/run.d.ts.map +1 -1
  43. package/dist/cli/run.js +53 -25
  44. package/dist/cli/run.js.map +1 -1
  45. package/dist/cli/status.d.ts +9 -0
  46. package/dist/cli/status.d.ts.map +1 -1
  47. package/dist/cli/status.js +14 -0
  48. package/dist/cli/status.js.map +1 -1
  49. package/dist/cli/step-failure.d.ts +26 -0
  50. package/dist/cli/step-failure.d.ts.map +1 -1
  51. package/dist/cli/step-failure.js +68 -3
  52. package/dist/cli/step-failure.js.map +1 -1
  53. package/dist/cli-commands.d.ts +29 -1
  54. package/dist/cli-commands.d.ts.map +1 -1
  55. package/dist/cli-commands.js +23 -1
  56. package/dist/cli-commands.js.map +1 -1
  57. package/dist/cli.d.ts +2 -1
  58. package/dist/cli.d.ts.map +1 -1
  59. package/dist/cli.js +19 -2
  60. package/dist/cli.js.map +1 -1
  61. package/dist/cloud-http.d.ts +12 -0
  62. package/dist/cloud-http.d.ts.map +1 -1
  63. package/dist/cloud-http.js +14 -6
  64. package/dist/cloud-http.js.map +1 -1
  65. package/dist/cloud-read.d.ts +154 -0
  66. package/dist/cloud-read.d.ts.map +1 -0
  67. package/dist/cloud-read.js +373 -0
  68. package/dist/cloud-read.js.map +1 -0
  69. package/dist/cloud-transcript.d.ts +94 -0
  70. package/dist/cloud-transcript.d.ts.map +1 -0
  71. package/dist/cloud-transcript.js +342 -0
  72. package/dist/cloud-transcript.js.map +1 -0
  73. package/dist/communication/environment.d.ts +3 -0
  74. package/dist/communication/environment.d.ts.map +1 -0
  75. package/dist/communication/environment.js +34 -0
  76. package/dist/communication/environment.js.map +1 -0
  77. package/dist/communication/history.d.ts +6 -0
  78. package/dist/communication/history.d.ts.map +1 -0
  79. package/dist/communication/history.js +38 -0
  80. package/dist/communication/history.js.map +1 -0
  81. package/dist/communication/local.d.ts +6 -0
  82. package/dist/communication/local.d.ts.map +1 -0
  83. package/dist/communication/local.js +56 -0
  84. package/dist/communication/local.js.map +1 -0
  85. package/dist/communication/preflight.d.ts +6 -0
  86. package/dist/communication/preflight.d.ts.map +1 -0
  87. package/dist/communication/preflight.js +37 -0
  88. package/dist/communication/preflight.js.map +1 -0
  89. package/dist/communication/projection.d.ts +8 -0
  90. package/dist/communication/projection.d.ts.map +1 -0
  91. package/dist/communication/projection.js +23 -0
  92. package/dist/communication/projection.js.map +1 -0
  93. package/dist/communication/relay.d.ts +78 -0
  94. package/dist/communication/relay.d.ts.map +1 -0
  95. package/dist/communication/relay.js +89 -0
  96. package/dist/communication/relay.js.map +1 -0
  97. package/dist/communication/session.d.ts +24 -0
  98. package/dist/communication/session.d.ts.map +1 -0
  99. package/dist/communication/session.js +100 -0
  100. package/dist/communication/session.js.map +1 -0
  101. package/dist/communication/spec.d.ts +20 -0
  102. package/dist/communication/spec.d.ts.map +1 -0
  103. package/dist/communication/spec.js +113 -0
  104. package/dist/communication/spec.js.map +1 -0
  105. package/dist/communication/tool.d.ts +3 -0
  106. package/dist/communication/tool.d.ts.map +1 -0
  107. package/dist/communication/tool.js +23 -0
  108. package/dist/communication/tool.js.map +1 -0
  109. package/dist/communication/tools.d.ts +11 -0
  110. package/dist/communication/tools.d.ts.map +1 -0
  111. package/dist/communication/tools.js +65 -0
  112. package/dist/communication/tools.js.map +1 -0
  113. package/dist/communication/worker.d.ts +6 -0
  114. package/dist/communication/worker.d.ts.map +1 -0
  115. package/dist/communication/worker.js +120 -0
  116. package/dist/communication/worker.js.map +1 -0
  117. package/dist/compile.d.ts.map +1 -1
  118. package/dist/compile.js +8 -1
  119. package/dist/compile.js.map +1 -1
  120. package/dist/failure-kinds.d.ts +16 -1
  121. package/dist/failure-kinds.d.ts.map +1 -1
  122. package/dist/failure-kinds.js +1 -0
  123. package/dist/failure-kinds.js.map +1 -1
  124. package/dist/index.d.ts +3 -1
  125. package/dist/index.d.ts.map +1 -1
  126. package/dist/index.js +2 -0
  127. package/dist/index.js.map +1 -1
  128. package/dist/journal-client.d.ts +4 -1
  129. package/dist/journal-client.d.ts.map +1 -1
  130. package/dist/journal-client.js +11 -2
  131. package/dist/journal-client.js.map +1 -1
  132. package/dist/preflight.d.ts +13 -2
  133. package/dist/preflight.d.ts.map +1 -1
  134. package/dist/preflight.js +23 -6
  135. package/dist/preflight.js.map +1 -1
  136. package/dist/protocol.d.ts +39 -1
  137. package/dist/protocol.d.ts.map +1 -1
  138. package/dist/spec.d.ts +8 -0
  139. package/dist/spec.d.ts.map +1 -1
  140. package/dist/spec.js.map +1 -1
  141. package/dist/worker-cli.d.ts.map +1 -1
  142. package/dist/worker-cli.js +29 -50
  143. package/dist/worker-cli.js.map +1 -1
  144. package/dist/worker.d.ts +1 -0
  145. package/dist/worker.d.ts.map +1 -1
  146. package/dist/worker.js +10 -1
  147. package/dist/worker.js.map +1 -1
  148. package/dist/wrapper-session.d.ts +8 -0
  149. package/dist/wrapper-session.d.ts.map +1 -1
  150. package/dist/wrapper-session.js +156 -23
  151. package/dist/wrapper-session.js.map +1 -1
  152. package/package.json +14 -2
  153. package/src/agent-artifacts.ts +27 -11
  154. package/src/authored-flow-error.ts +17 -0
  155. package/src/authored-flow-executor.ts +4 -1
  156. package/src/authored-node-entry.ts +5 -1
  157. package/src/authored-node-runner.ts +33 -1
  158. package/src/authored-root.ts +2 -1
  159. package/src/authored-source-authority.ts +13 -0
  160. package/src/authored-step-index.ts +157 -0
  161. package/src/authored-step-output.ts +66 -14
  162. package/src/authored-worker-step.ts +88 -15
  163. package/src/cli/check.ts +69 -11
  164. package/src/cli/cloud-read.ts +518 -0
  165. package/src/cli/run.ts +43 -25
  166. package/src/cli/status.ts +20 -0
  167. package/src/cli/step-failure.ts +68 -3
  168. package/src/cli-commands.ts +23 -1
  169. package/src/cli.ts +20 -1
  170. package/src/cloud-http.ts +32 -6
  171. package/src/cloud-read.ts +515 -0
  172. package/src/cloud-transcript.ts +422 -0
  173. package/src/communication/environment.ts +33 -0
  174. package/src/communication/history.ts +38 -0
  175. package/src/communication/local.ts +41 -0
  176. package/src/communication/preflight.ts +34 -0
  177. package/src/communication/projection.ts +23 -0
  178. package/src/communication/relay.ts +102 -0
  179. package/src/communication/session.ts +84 -0
  180. package/src/communication/spec.ts +106 -0
  181. package/src/communication/tool.ts +22 -0
  182. package/src/communication/tools.ts +50 -0
  183. package/src/communication/worker.ts +95 -0
  184. package/src/compile.ts +4 -1
  185. package/src/failure-kinds.ts +16 -0
  186. package/src/index.ts +10 -1
  187. package/src/journal-client.ts +12 -2
  188. package/src/preflight.ts +36 -7
  189. package/src/protocol.ts +15 -0
  190. package/src/spec.ts +2 -0
  191. package/src/worker-cli.ts +28 -47
  192. package/src/worker.ts +10 -0
  193. package/src/wrapper-session.ts +159 -24
package/dist/worker.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { communicationInstruction } from './communication/spec.js';
1
2
  import { workerSpend } from './worker-spend.js';
2
3
  import { EventEmitter } from 'node:events';
3
4
  import { runAgentCli } from './worker-cli.js';
@@ -42,7 +43,7 @@ export class AgentWorker extends EventEmitter {
42
43
  throw new Error('agent worker: cannot attach a closed worker (construct a new one)');
43
44
  this.client.on('step.dispatch', this.onDispatch);
44
45
  try {
45
- await this.client.workerAttach(this.options.workerId, ['agent'], this.options.pins, this.options.capacity);
46
+ await this.client.workerAttach(this.options.workerId, ['agent'], this.options.pins, this.options.capacity, this.options.requiredStreams);
46
47
  this.attached = true;
47
48
  }
48
49
  catch (error) {
@@ -90,6 +91,14 @@ export class AgentWorker extends EventEmitter {
90
91
  await completeHelperDispatch(this.client, dispatch, helper, this.options.dataDir);
91
92
  return;
92
93
  }
94
+ const communication = communicationInstruction(spec.instruction);
95
+ if (communication) {
96
+ if (!this.options.dataDir)
97
+ throw new Error('Agent communication requires a worker data directory');
98
+ const { completeCommunicationDispatch } = await import('./communication/worker.js');
99
+ await completeCommunicationDispatch(this.client, dispatch, communication, this.options.dataDir);
100
+ return;
101
+ }
93
102
  let humanIntervention = false;
94
103
  const effectiveModel = typeof spec.cli === 'string' ? resolveCliModel(spec.cli, spec.model) : spec.model;
95
104
  const completed = await withWorkerLease(this.client, dispatch, signal => typeof spec.cli === 'string' && typeof spec.instruction === 'string'
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,13 @@
1
1
  export interface WrapperSessionLimits {
2
2
  handshakeTimeoutMs: number;
3
+ /**
4
+ * How long the wrapper may work after acknowledging the request, or `0` for
5
+ * no deadline at all — the same convention `CliInvocation.timeoutMs` already
6
+ * uses for a native CLI spawn, where `worker-cli.ts` arms its timer only
7
+ * `if (invocation.timeoutMs > 0)`. `0` is the default, so a wrapper-backed
8
+ * step is bounded by the lease abort exactly as a `claude` or `codex` step
9
+ * is, and not by a constant neither of those pays.
10
+ */
3
11
  executionTimeoutMs: number;
4
12
  maxOutputBytes: number;
5
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"wrapper-session.d.ts","sourceRoot":"","sources":["../src/wrapper-session.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAgBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,OAAO,EACpB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,SAAS,GAAE,OAAO,CAAC,oBAAoB,CAAM,EAC7C,MAAM,CAAC,EAAE,WAAW;AACpB,0FAA0F;AAC1F,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,oBAAoB,CAAC,CA6B/B"}
1
+ {"version":3,"file":"wrapper-session.d.ts","sourceRoot":"","sources":["../src/wrapper-session.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;;;;;OAOG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AA6BD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,OAAO,EACpB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,SAAS,GAAE,OAAO,CAAC,oBAAoB,CAAM,EAC7C,MAAM,CAAC,EAAE,WAAW;AACpB,0FAA0F;AAC1F,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,oBAAoB,CAAC,CA6B/B"}
@@ -4,7 +4,7 @@ import { WRAPPER_EXECUTE_TOKEN, WRAPPER_IDENTIFY_ARG, WRAPPER_IDENTIFY_TOKEN, }
4
4
  import { captureWrapperIdentity, sameWrapperIdentity, } from './wrapper-runtime.js';
5
5
  const DEFAULT_LIMITS = {
6
6
  handshakeTimeoutMs: 10_000,
7
- executionTimeoutMs: 300_000,
7
+ executionTimeoutMs: 0,
8
8
  maxOutputBytes: 1_048_576,
9
9
  };
10
10
  const HANDSHAKE_OUTPUT_LIMIT = 8_192;
@@ -15,6 +15,19 @@ const HANDSHAKE_OUTPUT_LIMIT = 8_192;
15
15
  * not depend on `'close'`: past this point the reader settles regardless.
16
16
  */
17
17
  const SETTLE_AFTER_KILL_MS = 250;
18
+ /**
19
+ * How long a session with NO execution deadline waits, after the wrapper
20
+ * process itself is gone, for its stdio to finish draining.
21
+ *
22
+ * The execution deadline used to be what settled a wrapper that exited while a
23
+ * descendant still held an inherited pipe, because `'close'` waits on every
24
+ * one of them. That job is real; keying it on elapsed time was not. It is
25
+ * keyed on the wrapper's own exit instead, which is the fact that actually
26
+ * matters. Reaching the end of this grace is not proof that a pipe was leaked
27
+ * — buffered output may simply still be in flight — so the grace is a policy
28
+ * and the stop that follows it is bounded, not a diagnosis.
29
+ */
30
+ const DRAIN_AFTER_EXIT_MS = 250;
18
31
  /**
19
32
  * Identify and execute a custom wrapper in one pinned process. No private
20
33
  * request is written until its declared path still names the captured file.
@@ -67,8 +80,21 @@ function executePinnedWrapper(cli, identity, request, env, limits, signal, cwd)
67
80
  let phase = 'identity';
68
81
  let protocolError;
69
82
  let settled = false;
83
+ let outputFinalized = false;
84
+ let childExited = false;
85
+ let exitCode = null;
86
+ /** The handshake deadline, then the execution deadline if there is one. */
70
87
  let lifecycleTimer;
88
+ /** `terminate`'s own settle deadline. */
71
89
  let settleTimer;
90
+ /** The post-exit drain grace, armed only when execution is unlimited. */
91
+ let drainTimer;
92
+ /** The settle deadline the drain's own stop owes, after its escalation. */
93
+ let drainSettleTimer;
94
+ // Each deadline owns its own handle. They can be armed at the same time —
95
+ // a drain grace can be running when an over-limit final line terminates
96
+ // the session — and a shared variable would drop the only reference to
97
+ // one of them and leave it pending past the settle.
72
98
  const finish = (result) => {
73
99
  if (settled)
74
100
  return;
@@ -77,6 +103,10 @@ function executePinnedWrapper(cli, identity, request, env, limits, signal, cwd)
77
103
  clearTimeout(lifecycleTimer);
78
104
  if (settleTimer !== undefined)
79
105
  clearTimeout(settleTimer);
106
+ if (drainTimer !== undefined)
107
+ clearTimeout(drainTimer);
108
+ if (drainSettleTimer !== undefined)
109
+ clearTimeout(drainSettleTimer);
80
110
  signal?.removeEventListener('abort', onAbort);
81
111
  resolve(result);
82
112
  };
@@ -119,6 +149,13 @@ function executePinnedWrapper(cli, identity, request, env, limits, signal, cwd)
119
149
  protocolError = message;
120
150
  if (lifecycleTimer !== undefined)
121
151
  clearTimeout(lifecycleTimer);
152
+ lifecycleTimer = undefined;
153
+ // A refusal wins over a drain that was going to report the wrapper's own
154
+ // exit as a success: from here this settle belongs to the deadline armed
155
+ // below, and a drain that still fired would stop the tree a second time.
156
+ if (drainTimer !== undefined)
157
+ clearTimeout(drainTimer);
158
+ drainTimer = undefined;
122
159
  // Same reach as an abort, only gentler first: this stop must find the
123
160
  // whole group, or a descendant outlives the session still holding the
124
161
  // stdio it inherited.
@@ -136,6 +173,14 @@ function executePinnedWrapper(cli, identity, request, env, limits, signal, cwd)
136
173
  const startExecutionTimer = () => {
137
174
  if (lifecycleTimer !== undefined)
138
175
  clearTimeout(lifecycleTimer);
176
+ lifecycleTimer = undefined;
177
+ // `0` is no deadline, exactly as `worker-cli.ts` reads
178
+ // `invocation.timeoutMs` for a native CLI. The handshake deadline it
179
+ // just replaced was a liveness check and is over; nothing else is armed,
180
+ // and what bounds the work from here is the lease abort — the same thing
181
+ // that bounds a `claude` or `codex` step.
182
+ if (limits.executionTimeoutMs <= 0)
183
+ return;
139
184
  lifecycleTimer = setTimeout(() => terminate(`CLI ${JSON.stringify(cli)} execution timed out after ${limits.executionTimeoutMs}ms.`), limits.executionTimeoutMs);
140
185
  };
141
186
  const exceedsOutputLimit = (additionalBytes) => {
@@ -172,6 +217,12 @@ function executePinnedWrapper(cli, identity, request, env, limits, signal, cwd)
172
217
  }
173
218
  phase = 'execute';
174
219
  startExecutionTimer();
220
+ // The wrapper may already be gone: `'exit'` is delivered as soon as the
221
+ // process dies, while the bytes it wrote are still being read out of
222
+ // the pipe. The exit is remembered rather than acted on, and the drain
223
+ // grace starts here, once the acknowledgement it waits behind has
224
+ // actually been consumed.
225
+ startDrainGrace();
175
226
  }
176
227
  };
177
228
  const acceptExecutionData = (chunk) => {
@@ -192,10 +243,93 @@ function executePinnedWrapper(cli, identity, request, env, limits, signal, cwd)
192
243
  }
193
244
  };
194
245
  const handshakeComplete = () => phase === 'execute';
246
+ /**
247
+ * Fold the last un-terminated line into the captured output, exactly once.
248
+ *
249
+ * Two settles can now reach this — `'close'` and the drain grace — and the
250
+ * pending buffer may only be spent by one of them. A second finalization
251
+ * that appended it again would duplicate the wrapper's own result, and a
252
+ * buffer left in place would go on being counted against `maxOutputBytes`
253
+ * by any later chunk.
254
+ */
255
+ const finalizeOutput = () => {
256
+ if (outputFinalized)
257
+ return;
258
+ outputFinalized = true;
259
+ if (protocolError === undefined && phase === 'execute' && executionPending.length > 0) {
260
+ if (normalizeLine(executionPending) === WRAPPER_EXECUTE_TOKEN) {
261
+ protocolError = `CLI ${JSON.stringify(cli)} emitted a duplicate execute protocol frame.`;
262
+ }
263
+ else if (!exceedsOutputLimit(0)) {
264
+ appendStdout(executionPending);
265
+ }
266
+ }
267
+ executionPending = '';
268
+ };
269
+ /**
270
+ * The one result builder. A recorded protocol or output failure outranks
271
+ * the exit status: a wrapper that violated the contract is refused even
272
+ * when the process it ran in went on to exit 0.
273
+ */
274
+ const executionResult = (code) => {
275
+ finalizeOutput();
276
+ if (protocolError !== undefined || phase !== 'execute') {
277
+ return failure(protocolError
278
+ ?? `CLI ${JSON.stringify(cli)} exited before completing the ${WRAPPER_IDENTIFY_TOKEN} same-process handshake.`);
279
+ }
280
+ return {
281
+ exit_code: code,
282
+ stdout_tail: stdout.join(''),
283
+ stderr_tail: Buffer.concat(stderr).toString('utf8'),
284
+ };
285
+ };
286
+ const drainExpired = () => {
287
+ drainTimer = undefined;
288
+ if (settled)
289
+ return;
290
+ const result = executionResult(exitCode);
291
+ // Finalizing can itself refuse the session — an over-limit final line —
292
+ // and `terminate` has then already stopped the tree and armed its own
293
+ // settle deadline. Stopping or arming a second time here would leave two
294
+ // deadlines racing for one settle.
295
+ if (settleTimer !== undefined)
296
+ return;
297
+ // The wrapper is gone and `'close'` has still not arrived, so something
298
+ // it left behind is holding stdio it inherited. Stop what is reachable —
299
+ // a settle that releases no pipes lets the step complete while
300
+ // `flows run` never exits — and then own the settle regardless: the
301
+ // force kill has no callback, and a descendant that escaped into its own
302
+ // group before the wrapper died is not traceable to this spawn at all.
303
+ stop.terminate();
304
+ drainSettleTimer = setTimeout(() => finish(executionResult(exitCode)), FORCE_KILL_DELAY_MS + SETTLE_AFTER_KILL_MS);
305
+ // Settle now if the stop turned out to have nothing to reach; otherwise
306
+ // the deadline above owns it, and a `'close'` that arrives once the
307
+ // group is empty may still settle earlier.
308
+ finishOnChildExit(result);
309
+ };
310
+ /**
311
+ * Arm the post-exit drain, for an unlimited session that has both seen the
312
+ * wrapper exit and consumed its acknowledgement. A session with an explicit
313
+ * execution deadline keeps its existing behaviour: that deadline is what
314
+ * bounds a withheld `'close'` there, and nothing about it changes.
315
+ */
316
+ const startDrainGrace = () => {
317
+ if (limits.executionTimeoutMs > 0)
318
+ return;
319
+ if (!childExited || phase !== 'execute')
320
+ return;
321
+ if (settled || drainTimer !== undefined || protocolError !== undefined)
322
+ return;
323
+ drainTimer = setTimeout(drainExpired, DRAIN_AFTER_EXIT_MS);
324
+ };
195
325
  lifecycleTimer = setTimeout(() => terminate(`CLI ${JSON.stringify(cli)} did not identify as ${WRAPPER_IDENTIFY_TOKEN} within ${limits.handshakeTimeoutMs}ms.`), limits.handshakeTimeoutMs);
196
326
  child.stdout.setEncoding('utf8');
197
327
  child.stdout.on('data', (chunk) => {
198
- if (protocolError !== undefined)
328
+ // Once the output has been finalized the result is built and the
329
+ // captured bytes are spent. A late chunk — the drain grace has expired
330
+ // and a descendant still owns the pipe — may neither be appended to a
331
+ // result already reported nor re-judged against a limit already applied.
332
+ if (protocolError !== undefined || outputFinalized)
199
333
  return;
200
334
  if (phase === 'execute') {
201
335
  acceptExecutionData(chunk);
@@ -234,7 +368,7 @@ function executePinnedWrapper(cli, identity, request, env, limits, signal, cwd)
234
368
  }
235
369
  });
236
370
  child.stderr.on('data', (chunk) => {
237
- if (protocolError !== undefined || exceedsOutputLimit(chunk.byteLength))
371
+ if (protocolError !== undefined || outputFinalized || exceedsOutputLimit(chunk.byteLength))
238
372
  return;
239
373
  capturedBytes += chunk.byteLength;
240
374
  stderr.push(chunk);
@@ -243,38 +377,37 @@ function executePinnedWrapper(cli, identity, request, env, limits, signal, cwd)
243
377
  // A child that closes stdin before acknowledgement is classified on close.
244
378
  });
245
379
  child.once('error', (error) => finishOnChildExit(failure(error.message)));
246
- child.once('close', (code) => {
247
- if (protocolError === undefined && phase === 'execute' && executionPending.length > 0) {
248
- if (normalizeLine(executionPending) === WRAPPER_EXECUTE_TOKEN) {
249
- protocolError = `CLI ${JSON.stringify(cli)} emitted a duplicate execute protocol frame.`;
250
- }
251
- else if (!exceedsOutputLimit(0)) {
252
- appendStdout(executionPending);
253
- }
254
- }
255
- if (protocolError !== undefined || phase !== 'execute') {
256
- finishOnChildExit(failure(protocolError
257
- ?? `CLI ${JSON.stringify(cli)} exited before completing the ${WRAPPER_IDENTIFY_TOKEN} same-process handshake.`));
258
- return;
259
- }
260
- finishOnChildExit({
261
- exit_code: code,
262
- stdout_tail: stdout.join(''),
263
- stderr_tail: Buffer.concat(stderr).toString('utf8'),
264
- });
380
+ // `'exit'` is evidence about the DIRECT CHILD only: the wrapper process is
381
+ // gone, whether or not anything it spawned still holds the stdio it
382
+ // inherited. That is exactly the fact the drain grace waits on, and it is
383
+ // not evidence of a dead group — nothing here settles or stops.
384
+ child.once('exit', (code) => {
385
+ childExited = true;
386
+ exitCode = code;
387
+ startDrainGrace();
265
388
  });
389
+ child.once('close', (code) => finishOnChildExit(executionResult(code)));
266
390
  });
267
391
  }
268
392
  function sessionLimits(overrides) {
269
393
  return {
270
394
  handshakeTimeoutMs: positiveLimit(overrides.handshakeTimeoutMs, DEFAULT_LIMITS.handshakeTimeoutMs),
271
- executionTimeoutMs: positiveLimit(overrides.executionTimeoutMs, DEFAULT_LIMITS.executionTimeoutMs),
395
+ executionTimeoutMs: durationLimit(overrides.executionTimeoutMs, DEFAULT_LIMITS.executionTimeoutMs),
272
396
  maxOutputBytes: positiveLimit(overrides.maxOutputBytes, DEFAULT_LIMITS.maxOutputBytes),
273
397
  };
274
398
  }
399
+ /** A bound a wrapper may not switch off: `0` and below fall back. */
275
400
  function positiveLimit(value, fallback) {
276
401
  return value !== undefined && Number.isSafeInteger(value) && value > 0 ? value : fallback;
277
402
  }
403
+ /**
404
+ * A duration that may be switched off, so `0` is a value and not a missing
405
+ * one. Reusing {@link positiveLimit} here would coerce an explicit "no
406
+ * deadline" back to the fallback, which is how the default became unreachable.
407
+ */
408
+ function durationLimit(value, fallback) {
409
+ return value !== undefined && Number.isSafeInteger(value) && value >= 0 ? value : fallback;
410
+ }
278
411
  function normalizeLine(line) {
279
412
  return line.endsWith('\r') ? line.slice(0, -1) : line;
280
413
  }
@@ -1 +1 @@
1
- {"version":3,"file":"wrapper-session.js","sourceRoot":"","sources":["../src/wrapper-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,sBAAsB,EACtB,mBAAmB,GAEpB,MAAM,sBAAsB,CAAC;AAc9B,MAAM,cAAc,GAAyB;IAC3C,kBAAkB,EAAE,MAAM;IAC1B,kBAAkB,EAAE,OAAO;IAC3B,cAAc,EAAE,SAAS;CAC1B,CAAC;AACF,MAAM,sBAAsB,GAAG,KAAK,CAAC;AACrC;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAEjC;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAW,EACX,WAAmB,EACnB,WAAoB,EACpB,KAAyB,EACzB,GAAsB,EACtB,YAA2C,EAAE,EAC7C,MAAoB;AACpB,0FAA0F;AAC1F,GAAY;IAEZ,IAAI,MAAM,EAAE,OAAO;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2GAA2G,CAAC,CAAC,CAAC;IAChJ,CAAC;IACD,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YACvB,QAAQ,EAAE,sBAAsB;YAChC,WAAW;YACX,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtD,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAC5B,0DAA0D,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1E,CAAC,CAAC;IACL,CAAC;IACD,IAAI,QAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,QAAQ,GAAG,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,0CAA0C,MAAM,CAAC,KAAK,CAAC,EAAE,CACpF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,oBAAoB,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,oBAAoB,CAC3B,GAAW,EACX,QAAyB,EACzB,OAAe,EACf,GAAsB,EACtB,MAA4B,EAC5B,MAAoB,EACpB,GAAY;IAEZ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,oBAAoB,CAAC,EAAE;YAC/D,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,GAAG;YACH,QAAQ,EAAE,SAAS;YACnB,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;SACtC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACzC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,gBAAgB,GAAG,EAAE,CAAC;QAC1B,IAAI,gBAAgB,GAAG,EAAE,CAAC;QAC1B,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,KAAK,GAAmC,UAAU,CAAC;QACvD,IAAI,aAAiC,CAAC;QACtC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,cAA0C,CAAC;QAC/C,IAAI,WAAuC,CAAC;QAE5C,MAAM,MAAM,GAAG,CAAC,MAA4B,EAAQ,EAAE;YACpD,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,cAAc,KAAK,SAAS;gBAAE,YAAY,CAAC,cAAc,CAAC,CAAC;YAC/D,IAAI,WAAW,KAAK,SAAS;gBAAE,YAAY,CAAC,WAAW,CAAC,CAAC;YACzD,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;QACF;;;;;;;;;;;;;;;WAeG;QACH,MAAM,iBAAiB,GAAG,CAAC,MAA4B,EAAQ,EAAE;YAC/D,sEAAsE;YACtE,wEAAwE;YACxE,yEAAyE;YACzE,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;gBAAE,OAAO;YACzC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjB,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC;QACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YAAC,OAAO,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,CAAC,OAAe,EAAQ,EAAE;YAC1C,IAAI,aAAa,KAAK,SAAS;gBAAE,OAAO;YACxC,aAAa,GAAG,OAAO,CAAC;YACxB,IAAI,cAAc,KAAK,SAAS;gBAAE,YAAY,CAAC,cAAc,CAAC,CAAC;YAC/D,sEAAsE;YACtE,sEAAsE;YACtE,sBAAsB;YACtB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,mEAAmE;YACnE,qEAAqE;YACrE,gEAAgE;YAChE,sEAAsE;YACtE,sEAAsE;YACtE,mEAAmE;YACnE,qEAAqE;YACrE,iEAAiE;YACjE,WAAW,GAAG,UAAU,CACtB,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAC9B,mBAAmB,GAAG,oBAAoB,CAC3C,CAAC;QACJ,CAAC,CAAC;QACF,MAAM,mBAAmB,GAAG,GAAS,EAAE;YACrC,IAAI,cAAc,KAAK,SAAS;gBAAE,YAAY,CAAC,cAAc,CAAC,CAAC;YAC/D,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CACzC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,kBAAkB,KAAK,CACvF,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAChC,CAAC,CAAC;QACF,MAAM,kBAAkB,GAAG,CAAC,eAAuB,EAAW,EAAE;YAC9D,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;YACzD,IAAI,aAAa,GAAG,YAAY,GAAG,eAAe,IAAI,MAAM,CAAC,cAAc;gBAAE,OAAO,KAAK,CAAC;YAC1F,SAAS,CACP,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,0CAA0C,MAAM,CAAC,cAAc,SAAS,CACnG,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QACF,MAAM,YAAY,GAAG,CAAC,KAAa,EAAQ,EAAE;YAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACvC,aAAa,IAAI,KAAK,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC;QACF,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAQ,EAAE;YACjD,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;gBACzB,IAAI,UAAU,KAAK,sBAAsB,EAAE,CAAC;oBAC1C,SAAS,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,wBAAwB,sBAAsB,uBAAuB,CAAC,CAAC;oBAC3G,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;oBAC7C,SAAS,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;oBAClG,OAAO;gBACT,CAAC;gBACD,KAAK,GAAG,KAAK,CAAC;gBACd,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;gBAChC,OAAO;YACT,CAAC;YACD,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;gBACpB,IAAI,UAAU,KAAK,qBAAqB,EAAE,CAAC;oBACzC,SAAS,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAuB,sBAAsB,kCAAkC,CAAC,CAAC;oBACrH,OAAO;gBACT,CAAC;gBACD,KAAK,GAAG,SAAS,CAAC;gBAClB,mBAAmB,EAAE,CAAC;YACxB,CAAC;QACH,CAAC,CAAC;QACF,MAAM,mBAAmB,GAAG,CAAC,KAAa,EAAQ,EAAE;YAClD,gBAAgB,IAAI,KAAK,CAAC;YAC1B,IAAI,kBAAkB,CAAC,CAAC,CAAC;gBAAE,OAAO;YAClC,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC/C,IAAI,OAAO,GAAG,CAAC;oBAAE,OAAO;gBACxB,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAChD,gBAAgB,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBACvD,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,qBAAqB,EAAE,CAAC;oBAClD,SAAS,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;oBACpF,OAAO;gBACT,CAAC;gBACD,YAAY,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC;QACF,MAAM,iBAAiB,GAAG,GAAY,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;QAE7D,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CACzC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,wBAAwB,sBAAsB,WAAW,MAAM,CAAC,kBAAkB,KAAK,CAClH,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAE9B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,IAAI,aAAa,KAAK,SAAS;gBAAE,OAAO;YACxC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,mBAAmB,CAAC,KAAK,CAAC,CAAC;gBAC3B,OAAO;YACT,CAAC;YACD,gBAAgB,IAAI,KAAK,CAAC;YAC1B,sEAAsE;YACtE,qEAAqE;YACrE,oEAAoE;YACpE,uEAAuE;YACvE,wEAAwE;YACxE,oEAAoE;YACpE,mEAAmE;YACnE,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC/C,IAAI,OAAO,GAAG,CAAC;oBAAE,MAAM;gBACvB,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAChD,gBAAgB,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBACvD,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAC1B,IAAI,aAAa,KAAK,SAAS;oBAAE,OAAO;YAC1C,CAAC;YACD,IAAI,iBAAiB,EAAE,EAAE,CAAC;gBACxB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAChC,MAAM,SAAS,GAAG,gBAAgB,CAAC;oBACnC,gBAAgB,GAAG,EAAE,CAAC;oBACtB,mBAAmB,CAAC,SAAS,CAAC,CAAC;gBACjC,CAAC;gBACD,OAAO;YACT,CAAC;YACD,wEAAwE;YACxE,mCAAmC;YACnC,IAAI,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,GAAG,sBAAsB,EAAE,CAAC;gBACjE,SAAS,CACP,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,4CAA4C,sBAAsB,gCAAgC,sBAAsB,aAAa,CAChK,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,IAAI,aAAa,KAAK,SAAS,IAAI,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC;gBAAE,OAAO;YAChF,aAAa,IAAI,KAAK,CAAC,UAAU,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC3B,2EAA2E;QAC7E,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1E,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAC3B,IAAI,aAAa,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtF,IAAI,aAAa,CAAC,gBAAgB,CAAC,KAAK,qBAAqB,EAAE,CAAC;oBAC9D,aAAa,GAAG,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,8CAA8C,CAAC;gBAC3F,CAAC;qBAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;oBAClC,YAAY,CAAC,gBAAgB,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;YACD,IAAI,aAAa,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACvD,iBAAiB,CAAC,OAAO,CACvB,aAAa;uBACR,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,iCAAiC,sBAAsB,0BAA0B,CACjH,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,iBAAiB,CAAC;gBAChB,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;aACpD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,SAAwC;IAC7D,OAAO;QACL,kBAAkB,EAAE,aAAa,CAAC,SAAS,CAAC,kBAAkB,EAAE,cAAc,CAAC,kBAAkB,CAAC;QAClG,kBAAkB,EAAE,aAAa,CAAC,SAAS,CAAC,kBAAkB,EAAE,cAAc,CAAC,kBAAkB,CAAC;QAClG,cAAc,EAAE,aAAa,CAAC,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC,cAAc,CAAC;KACvF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAyB,EAAE,QAAgB;IAChE,OAAO,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC5F,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD,CAAC;AAED,SAAS,OAAO,CAAC,WAAmB;IAClC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"wrapper-session.js","sourceRoot":"","sources":["../src/wrapper-session.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@relayflows/sdk",
3
- "version": "2.0.22",
3
+ "version": "2.0.24",
4
4
  "description": "TypeScript-first authoring SDK for Relayflows. Compiles specs; speaks the journal protocol.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -49,7 +49,7 @@
49
49
  "@modelcontextprotocol/sdk": "^1.30.0",
50
50
  "@relayfile/adapter-core": "0.5.26",
51
51
  "@relayfile/relay-helpers": "0.4.11",
52
- "@relayflows/surface": "2.0.22",
52
+ "@relayflows/surface": "2.0.24",
53
53
  "@types/js-yaml": "^4.0.9",
54
54
  "ai-hist": "0.4.1",
55
55
  "ajv": "^8.17.1",
@@ -68,5 +68,17 @@
68
68
  "type": "git",
69
69
  "url": "git+https://github.com/AgentWorkforce/flows.git",
70
70
  "directory": "packages/sdk"
71
+ },
72
+ "peerDependencies": {
73
+ "@agent-relay/harness-driver": ">=12.3.1 <13",
74
+ "@agent-relay/sdk": ">=12.3.1 <13"
75
+ },
76
+ "peerDependenciesMeta": {
77
+ "@agent-relay/harness-driver": {
78
+ "optional": true
79
+ },
80
+ "@agent-relay/sdk": {
81
+ "optional": true
82
+ }
71
83
  }
72
84
  }
@@ -6,7 +6,14 @@ function isEnoent(error: unknown): boolean {
6
6
  return error instanceof Error && (error as NodeJS.ErrnoException).code === 'ENOENT';
7
7
  }
8
8
 
9
- const SKIPPED_DIR_NAMES = new Set(['node_modules']);
9
+ /**
10
+ * Entry names never walked and never reported, matched exactly, at any depth,
11
+ * before the entry's type is consulted — so a `.git` *file* (a worktree's
12
+ * gitdir pointer) is skipped as surely as a `.git` directory. Exact names, not
13
+ * prefixes: `.github`, `.relayflowd-notes` and every other author-chosen name
14
+ * that merely starts the same way stays eligible.
15
+ */
16
+ const SKIPPED_ENTRY_NAMES = new Set(['.git', '.relayflowd', 'node_modules']);
10
17
 
11
18
  /**
12
19
  * A recursive snapshot of every regular file under `dir`, keyed by its
@@ -14,15 +21,24 @@ const SKIPPED_DIR_NAMES = new Set(['node_modules']);
14
21
  * Content, not mtime: a fast rewrite inside the filesystem's timestamp
15
22
  * resolution must still count as a change — the same rule
16
23
  * `examples/research/shims/agent-cli.ts`'s `snapshot()` uses for the same
17
- * "did the agent actually write something" question. Dotfiles/dotdirs
18
- * (`.git`, the kernel's own `.relayflowd` data dir, editor swap files, ...)
19
- * are never agent-authored content and are skipped, as is `node_modules`.
20
- * A missing `dir` (an agent step whose cwd does not exist yet) yields an
21
- * empty snapshot rather than throwing. Only a vanished path (`ENOENT`) is
22
- * ever swallowed this way; any other filesystem error (permissions,
23
- * `ENOTDIR`, `EISDIR`, ...) propagates, because a step whose artifact scan
24
- * silently dropped files it could not read must not report a successful,
25
- * incomplete `artifacts` list as if it were the truth.
24
+ * "did the agent actually write something" question.
25
+ *
26
+ * Dotfiles and dot-directories ARE eligible. `.workflow-artifacts/` is the
27
+ * conventional place a flow tells its agents to write, and a blanket dot-prefix
28
+ * skip made every review, report and evidence file written there invisible to
29
+ * the journal — and so to an `artifact_exists` gate naming one, which could
30
+ * then never pass. Only the three names in `SKIPPED_ENTRY_NAMES` are excluded:
31
+ * `.git`, the default `.relayflowd` data dir, and `node_modules`. A data dir
32
+ * the caller named explicitly is not one of those; the caller drops that whole
33
+ * subtree from the diff instead (`worker-cli.ts`).
34
+ *
35
+ * Only regular files are signed; symlinks are not followed and directories are
36
+ * descended, not recorded. A missing `dir` (an agent step whose cwd does not
37
+ * exist yet) yields an empty snapshot rather than throwing. Only a vanished
38
+ * path (`ENOENT`) is ever swallowed this way; any other filesystem error
39
+ * (permissions, `ENOTDIR`, `EISDIR`, ...) propagates, because a step whose
40
+ * artifact scan silently dropped files it could not read must not report a
41
+ * successful, incomplete `artifacts` list as if it were the truth.
26
42
  */
27
43
  export async function snapshotWorkspaceFiles(dir: string): Promise<Map<string, string>> {
28
44
  const out = new Map<string, string>();
@@ -39,7 +55,7 @@ async function walk(root: string, current: string, out: Map<string, string>): Pr
39
55
  throw error;
40
56
  }
41
57
  for (const entry of entries) {
42
- if (entry.name.startsWith('.') || SKIPPED_DIR_NAMES.has(entry.name)) continue;
58
+ if (SKIPPED_ENTRY_NAMES.has(entry.name)) continue;
43
59
  const path = join(current, entry.name);
44
60
  if (entry.isDirectory()) {
45
61
  await walk(root, path, out);
@@ -1,4 +1,5 @@
1
1
  import type { HumanRecipient } from './human-to.js';
2
+ import type { StepFailedDetails } from './failure-kinds.js';
2
3
  import type {
3
4
  CompletionReason as ProtocolCompletionReason,
4
5
  RunCompletionReason as ProtocolRunCompletionReason,
@@ -39,11 +40,27 @@ export type AuthoredFlowExecutionErrorCode =
39
40
  | 'unsupported_verb';
40
41
 
41
42
  export class AuthoredFlowExecutionError extends Error {
43
+ /** Set by the durable root driver after the child error crosses any IPC boundary. */
44
+ rootRunId?: string;
42
45
  constructor(
43
46
  readonly code: AuthoredFlowExecutionErrorCode,
44
47
  message: string,
45
48
  readonly completionReason?: ProtocolCompletionReason | ProtocolRunCompletionReason,
49
+ /**
50
+ * The CHILD run whose journal holds the evidence — an authored operation
51
+ * is its own single-step kernel run. Unchanged by `details`: the root run
52
+ * identity and the failing child identity stay distinct fields.
53
+ */
46
54
  readonly runId?: string,
55
+ /**
56
+ * What the failed step left in its journal, already extracted and bounded
57
+ * by `cli/step-failure.ts`. Carried structurally, not only rendered into
58
+ * `message`, so `authoredStepFailure` can lift it into the machine-readable
59
+ * `RunDiagnostic` (which already `extends StepFailedDetails`) and so every
60
+ * wrapper on the way out — the `lease_exceeded` remap, the authenticated
61
+ * Node-child error frame — can forward it instead of dropping it.
62
+ */
63
+ readonly details?: StepFailedDetails,
47
64
  ) {
48
65
  super(`${code}: ${message}`);
49
66
  this.name = 'AuthoredFlowExecutionError';
@@ -206,7 +206,10 @@ export async function executeAuthoredFlow<Input = undefined>(
206
206
  let requestedCompletion: LoweredCompletionReason | undefined;
207
207
 
208
208
  const lowerDeterministic = authoredDeterministicRunner(
209
- definition.name, journal, journalSteps, budget, options.rootRunId,
209
+ definition.name, journal, journalSteps, budget, {
210
+ ...(options.rootRunId === undefined ? {} : { rootRunId: options.rootRunId }),
211
+ ...(options.dataDir === undefined ? {} : { dataDir: options.dataDir }),
212
+ },
210
213
  );
211
214
 
212
215
  const worker = authoredWorkerRunner(
@@ -81,8 +81,12 @@ try {
81
81
  const message = error instanceof Error ? error.message : 'authored body failed';
82
82
  const prefix = error instanceof AuthoredFlowExecutionError ? `${error.code}: ` : '';
83
83
  send({ type: 'error', message: prefix && message.startsWith(prefix) ? message.slice(prefix.length) : message,
84
+ // `details` is the failing child step's journal evidence. Without it the
85
+ // parent can only re-render the message, and the machine-readable
86
+ // diagnostic loses the command's exit code and output tails.
84
87
  ...(error instanceof AuthoredFlowExecutionError ? { code: error.code,
85
- completionReason: error.completionReason, runId: error.runId } : {}),
88
+ completionReason: error.completionReason, runId: error.runId,
89
+ details: error.details } : {}),
86
90
  ...(error instanceof AuthoredHumanParked ? { wait: error.wait } : {}) });
87
91
  process.exitCode = 1;
88
92
  } finally {
@@ -13,6 +13,7 @@ import {
13
13
  AuthoredFlowExecutionError, AuthoredHumanParked,
14
14
  type AuthoredFlowExecutionErrorCode, type AuthoredHumanWait,
15
15
  } from './authored-flow-error.js';
16
+ import type { StepFailedDetails } from './failure-kinds.js';
16
17
  import { HUMAN_WAIT_ID } from './authored-human.js';
17
18
  import { assertAuthoredPromiseHooks } from './authored-runtime-capability.js';
18
19
 
@@ -139,7 +140,8 @@ export async function runAuthoredInNode(
139
140
  ? new AuthoredHumanParked(message.wait, rootRunId)
140
141
  : typeof message.code === 'string'
141
142
  ? new AuthoredFlowExecutionError(message.code as AuthoredFlowExecutionErrorCode,
142
- message.message, message.completionReason, message.runId)
143
+ message.message, message.completionReason, message.runId,
144
+ stepFailedFrame(message.details))
143
145
  : new Error(message.message);
144
146
  } else throw new Error('unknown authored runtime message');
145
147
  } catch (error) { stop(error instanceof Error ? error : new Error('invalid authored runtime message')); }
@@ -171,6 +173,36 @@ function isHumanWaitFrame(value: unknown): value is AuthoredHumanWait {
171
173
  && typeof wait.to === 'string' && wait.to !== '';
172
174
  }
173
175
 
176
+ /**
177
+ * Step evidence arriving over IPC, reduced to the fields `StepFailedDetails`
178
+ * declares and the types it declares them as. The child is the same pinned
179
+ * payload the parent hashed, but the frame is still a claim: an unrecognised
180
+ * or mistyped field is dropped rather than trusted, and a malformed `details`
181
+ * yields no details at all. It throws on nothing `JSON.parse` can produce —
182
+ * the run is already failing, and losing the original failure to report a bad
183
+ * evidence frame would replace the answer with a worse one.
184
+ */
185
+ export function stepFailedFrame(value: unknown): StepFailedDetails | undefined {
186
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) return undefined;
187
+ const frame = value as Record<string, unknown>;
188
+ const text = (key: string): string | undefined =>
189
+ typeof frame[key] === 'string' ? (frame[key] as string).slice(0, 8192) : undefined;
190
+ const count = (key: string): number | undefined =>
191
+ typeof frame[key] === 'number' && Number.isSafeInteger(frame[key]) ? frame[key] as number : undefined;
192
+ const details: StepFailedDetails = {};
193
+ for (const [key, parsed] of [
194
+ ['stepId', text('stepId')], ['stepType', text('stepType')],
195
+ ['completionReason', text('completionReason')], ['attempt', count('attempt')],
196
+ ['maxIterations', count('maxIterations')], ['exitCode', count('exitCode')],
197
+ ['stdoutTail', text('stdoutTail')], ['stderrTail', text('stderrTail')],
198
+ ['detail', text('detail')], ['transcriptPath', text('transcriptPath')],
199
+ ['hint', text('hint')], ['journalPath', text('journalPath')],
200
+ ] as const) {
201
+ if (parsed !== undefined) (details as Record<string, unknown>)[key] = parsed;
202
+ }
203
+ return Object.keys(details).length === 0 ? undefined : details;
204
+ }
205
+
174
206
  /** The IPC frame is a claim, not a durable terminal fact or a sandbox boundary. */
175
207
  export async function verifyAuthoredNodeResult(
176
208
  result: AuthoredFlowExecutionResult, metadata: AuthoredRootMetadata,
@@ -15,7 +15,7 @@ import type { RunOutcome, StepDispatchEvent } from './protocol.js';
15
15
  import { SPEC_SCHEMA_VERSION } from './spec.js';
16
16
  import type { RunLifecycleOptions } from './cli/run.js';
17
17
  import { withWorkerLease } from './worker-lease.js';
18
- import { AuthoredHumanParked } from './authored-flow-error.js';
18
+ import { AuthoredFlowExecutionError, AuthoredHumanParked } from './authored-flow-error.js';
19
19
  import { readOpenHumanWaits } from './authored-human.js';
20
20
  import { isSurfaceCompletionReason } from './authored-step-output.js';
21
21
 
@@ -234,6 +234,7 @@ async function driveRoot(
234
234
  throw error;
235
235
  }
236
236
  await terminalizeRootFailure(peer, dispatch, error);
237
+ if (error instanceof AuthoredFlowExecutionError) error.rootRunId = dispatch.run_id;
237
238
  throw error;
238
239
  }
239
240
  }