@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.
- package/dist/agent-artifacts.d.ts +18 -9
- package/dist/agent-artifacts.d.ts.map +1 -1
- package/dist/agent-artifacts.js +27 -11
- package/dist/agent-artifacts.js.map +1 -1
- package/dist/authored-flow-error.d.ts +33 -1
- package/dist/authored-flow-error.d.ts.map +1 -1
- package/dist/authored-flow-error.js +20 -1
- package/dist/authored-flow-error.js.map +1 -1
- package/dist/authored-flow-executor.d.ts.map +1 -1
- package/dist/authored-flow-executor.js +4 -1
- package/dist/authored-flow-executor.js.map +1 -1
- package/dist/authored-node-entry.js +5 -1
- package/dist/authored-node-entry.js.map +1 -1
- package/dist/authored-node-runner.d.ts +11 -0
- package/dist/authored-node-runner.d.ts.map +1 -1
- package/dist/authored-node-runner.js +30 -1
- package/dist/authored-node-runner.js.map +1 -1
- package/dist/authored-root.js +3 -1
- package/dist/authored-root.js.map +1 -1
- package/dist/authored-source-authority.js +13 -0
- package/dist/authored-source-authority.js.map +1 -1
- package/dist/authored-step-index.d.ts +82 -0
- package/dist/authored-step-index.d.ts.map +1 -0
- package/dist/authored-step-index.js +120 -0
- package/dist/authored-step-index.js.map +1 -0
- package/dist/authored-step-output.d.ts +23 -2
- package/dist/authored-step-output.d.ts.map +1 -1
- package/dist/authored-step-output.js +47 -5
- package/dist/authored-step-output.js.map +1 -1
- package/dist/authored-worker-step.d.ts +10 -2
- package/dist/authored-worker-step.d.ts.map +1 -1
- package/dist/authored-worker-step.js +81 -7
- package/dist/authored-worker-step.js.map +1 -1
- package/dist/cli/check.d.ts.map +1 -1
- package/dist/cli/check.js +67 -12
- package/dist/cli/check.js.map +1 -1
- package/dist/cli/cloud-read.d.ts +31 -0
- package/dist/cli/cloud-read.d.ts.map +1 -0
- package/dist/cli/cloud-read.js +482 -0
- package/dist/cli/cloud-read.js.map +1 -0
- package/dist/cli/run.d.ts +2 -0
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +53 -25
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/status.d.ts +9 -0
- package/dist/cli/status.d.ts.map +1 -1
- package/dist/cli/status.js +14 -0
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/step-failure.d.ts +26 -0
- package/dist/cli/step-failure.d.ts.map +1 -1
- package/dist/cli/step-failure.js +68 -3
- package/dist/cli/step-failure.js.map +1 -1
- package/dist/cli-commands.d.ts +29 -1
- package/dist/cli-commands.d.ts.map +1 -1
- package/dist/cli-commands.js +23 -1
- package/dist/cli-commands.js.map +1 -1
- package/dist/cli.d.ts +2 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +19 -2
- package/dist/cli.js.map +1 -1
- package/dist/cloud-http.d.ts +12 -0
- package/dist/cloud-http.d.ts.map +1 -1
- package/dist/cloud-http.js +14 -6
- package/dist/cloud-http.js.map +1 -1
- package/dist/cloud-read.d.ts +154 -0
- package/dist/cloud-read.d.ts.map +1 -0
- package/dist/cloud-read.js +373 -0
- package/dist/cloud-read.js.map +1 -0
- package/dist/cloud-transcript.d.ts +94 -0
- package/dist/cloud-transcript.d.ts.map +1 -0
- package/dist/cloud-transcript.js +342 -0
- package/dist/cloud-transcript.js.map +1 -0
- package/dist/communication/environment.d.ts +3 -0
- package/dist/communication/environment.d.ts.map +1 -0
- package/dist/communication/environment.js +34 -0
- package/dist/communication/environment.js.map +1 -0
- package/dist/communication/history.d.ts +6 -0
- package/dist/communication/history.d.ts.map +1 -0
- package/dist/communication/history.js +38 -0
- package/dist/communication/history.js.map +1 -0
- package/dist/communication/local.d.ts +6 -0
- package/dist/communication/local.d.ts.map +1 -0
- package/dist/communication/local.js +56 -0
- package/dist/communication/local.js.map +1 -0
- package/dist/communication/preflight.d.ts +6 -0
- package/dist/communication/preflight.d.ts.map +1 -0
- package/dist/communication/preflight.js +37 -0
- package/dist/communication/preflight.js.map +1 -0
- package/dist/communication/projection.d.ts +8 -0
- package/dist/communication/projection.d.ts.map +1 -0
- package/dist/communication/projection.js +23 -0
- package/dist/communication/projection.js.map +1 -0
- package/dist/communication/relay.d.ts +78 -0
- package/dist/communication/relay.d.ts.map +1 -0
- package/dist/communication/relay.js +89 -0
- package/dist/communication/relay.js.map +1 -0
- package/dist/communication/session.d.ts +24 -0
- package/dist/communication/session.d.ts.map +1 -0
- package/dist/communication/session.js +100 -0
- package/dist/communication/session.js.map +1 -0
- package/dist/communication/spec.d.ts +20 -0
- package/dist/communication/spec.d.ts.map +1 -0
- package/dist/communication/spec.js +113 -0
- package/dist/communication/spec.js.map +1 -0
- package/dist/communication/tool.d.ts +3 -0
- package/dist/communication/tool.d.ts.map +1 -0
- package/dist/communication/tool.js +23 -0
- package/dist/communication/tool.js.map +1 -0
- package/dist/communication/tools.d.ts +11 -0
- package/dist/communication/tools.d.ts.map +1 -0
- package/dist/communication/tools.js +65 -0
- package/dist/communication/tools.js.map +1 -0
- package/dist/communication/worker.d.ts +6 -0
- package/dist/communication/worker.d.ts.map +1 -0
- package/dist/communication/worker.js +120 -0
- package/dist/communication/worker.js.map +1 -0
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +8 -1
- package/dist/compile.js.map +1 -1
- package/dist/failure-kinds.d.ts +16 -1
- package/dist/failure-kinds.d.ts.map +1 -1
- package/dist/failure-kinds.js +1 -0
- package/dist/failure-kinds.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/journal-client.d.ts +4 -1
- package/dist/journal-client.d.ts.map +1 -1
- package/dist/journal-client.js +11 -2
- package/dist/journal-client.js.map +1 -1
- package/dist/preflight.d.ts +13 -2
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js +23 -6
- package/dist/preflight.js.map +1 -1
- package/dist/protocol.d.ts +39 -1
- package/dist/protocol.d.ts.map +1 -1
- package/dist/spec.d.ts +8 -0
- package/dist/spec.d.ts.map +1 -1
- package/dist/spec.js.map +1 -1
- package/dist/worker-cli.d.ts.map +1 -1
- package/dist/worker-cli.js +29 -50
- package/dist/worker-cli.js.map +1 -1
- package/dist/worker.d.ts +1 -0
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +10 -1
- package/dist/worker.js.map +1 -1
- package/dist/wrapper-session.d.ts +8 -0
- package/dist/wrapper-session.d.ts.map +1 -1
- package/dist/wrapper-session.js +156 -23
- package/dist/wrapper-session.js.map +1 -1
- package/package.json +14 -2
- package/src/agent-artifacts.ts +27 -11
- package/src/authored-flow-error.ts +17 -0
- package/src/authored-flow-executor.ts +4 -1
- package/src/authored-node-entry.ts +5 -1
- package/src/authored-node-runner.ts +33 -1
- package/src/authored-root.ts +2 -1
- package/src/authored-source-authority.ts +13 -0
- package/src/authored-step-index.ts +157 -0
- package/src/authored-step-output.ts +66 -14
- package/src/authored-worker-step.ts +88 -15
- package/src/cli/check.ts +69 -11
- package/src/cli/cloud-read.ts +518 -0
- package/src/cli/run.ts +43 -25
- package/src/cli/status.ts +20 -0
- package/src/cli/step-failure.ts +68 -3
- package/src/cli-commands.ts +23 -1
- package/src/cli.ts +20 -1
- package/src/cloud-http.ts +32 -6
- package/src/cloud-read.ts +515 -0
- package/src/cloud-transcript.ts +422 -0
- package/src/communication/environment.ts +33 -0
- package/src/communication/history.ts +38 -0
- package/src/communication/local.ts +41 -0
- package/src/communication/preflight.ts +34 -0
- package/src/communication/projection.ts +23 -0
- package/src/communication/relay.ts +102 -0
- package/src/communication/session.ts +84 -0
- package/src/communication/spec.ts +106 -0
- package/src/communication/tool.ts +22 -0
- package/src/communication/tools.ts +50 -0
- package/src/communication/worker.ts +95 -0
- package/src/compile.ts +4 -1
- package/src/failure-kinds.ts +16 -0
- package/src/index.ts +10 -1
- package/src/journal-client.ts +12 -2
- package/src/preflight.ts +36 -7
- package/src/protocol.ts +15 -0
- package/src/spec.ts +2 -0
- package/src/worker-cli.ts +28 -47
- package/src/worker.ts +10 -0
- 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'
|
package/dist/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAyB,MAAM,uBAAuB,CAAC;AAEzG,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;
|
|
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;
|
|
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"}
|
package/dist/wrapper-session.js
CHANGED
|
@@ -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:
|
|
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
|
-
|
|
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
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
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:
|
|
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":"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"}
|
|
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;AAsB9B,MAAM,cAAc,GAAyB;IAC3C,kBAAkB,EAAE,MAAM;IAC1B,kBAAkB,EAAE,CAAC;IACrB,cAAc,EAAE,SAAS;CAC1B,CAAC;AACF,MAAM,sBAAsB,GAAG,KAAK,CAAC;AACrC;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC;;;;;;;;;;;GAWG;AACH,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC;;;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,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,QAAQ,GAAkB,IAAI,CAAC;QACnC,2EAA2E;QAC3E,IAAI,cAA0C,CAAC;QAC/C,yCAAyC;QACzC,IAAI,WAAuC,CAAC;QAC5C,yEAAyE;QACzE,IAAI,UAAsC,CAAC;QAC3C,2EAA2E;QAC3E,IAAI,gBAA4C,CAAC;QACjD,0EAA0E;QAC1E,wEAAwE;QACxE,uEAAuE;QACvE,oDAAoD;QAEpD,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,IAAI,UAAU,KAAK,SAAS;gBAAE,YAAY,CAAC,UAAU,CAAC,CAAC;YACvD,IAAI,gBAAgB,KAAK,SAAS;gBAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC;YACnE,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,cAAc,GAAG,SAAS,CAAC;YAC3B,yEAAyE;YACzE,yEAAyE;YACzE,yEAAyE;YACzE,IAAI,UAAU,KAAK,SAAS;gBAAE,YAAY,CAAC,UAAU,CAAC,CAAC;YACvD,UAAU,GAAG,SAAS,CAAC;YACvB,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,SAAS,CAAC;YAC3B,uDAAuD;YACvD,qEAAqE;YACrE,yEAAyE;YACzE,yEAAyE;YACzE,0CAA0C;YAC1C,IAAI,MAAM,CAAC,kBAAkB,IAAI,CAAC;gBAAE,OAAO;YAC3C,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;gBACtB,wEAAwE;gBACxE,qEAAqE;gBACrE,uEAAuE;gBACvE,kEAAkE;gBAClE,0BAA0B;gBAC1B,eAAe,EAAE,CAAC;YACpB,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;QAC7D;;;;;;;;WAQG;QACH,MAAM,cAAc,GAAG,GAAS,EAAE;YAChC,IAAI,eAAe;gBAAE,OAAO;YAC5B,eAAe,GAAG,IAAI,CAAC;YACvB,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,gBAAgB,GAAG,EAAE,CAAC;QACxB,CAAC,CAAC;QACF;;;;WAIG;QACH,MAAM,eAAe,GAAG,CAAC,IAAmB,EAAwB,EAAE;YACpE,cAAc,EAAE,CAAC;YACjB,IAAI,aAAa,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACvD,OAAO,OAAO,CACZ,aAAa;uBACR,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,iCAAiC,sBAAsB,0BAA0B,CACjH,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,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;QACJ,CAAC,CAAC;QACF,MAAM,YAAY,GAAG,GAAS,EAAE;YAC9B,UAAU,GAAG,SAAS,CAAC;YACvB,IAAI,OAAO;gBAAE,OAAO;YACpB,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YACzC,wEAAwE;YACxE,sEAAsE;YACtE,yEAAyE;YACzE,mCAAmC;YACnC,IAAI,WAAW,KAAK,SAAS;gBAAE,OAAO;YACtC,wEAAwE;YACxE,yEAAyE;YACzE,+DAA+D;YAC/D,oEAAoE;YACpE,yEAAyE;YACzE,uEAAuE;YACvE,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,gBAAgB,GAAG,UAAU,CAC3B,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,EACvC,mBAAmB,GAAG,oBAAoB,CAC3C,CAAC;YACF,wEAAwE;YACxE,oEAAoE;YACpE,2CAA2C;YAC3C,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC;QACF;;;;;WAKG;QACH,MAAM,eAAe,GAAG,GAAS,EAAE;YACjC,IAAI,MAAM,CAAC,kBAAkB,GAAG,CAAC;gBAAE,OAAO;YAC1C,IAAI,CAAC,WAAW,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO;YAChD,IAAI,OAAO,IAAI,UAAU,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS;gBAAE,OAAO;YAC/E,UAAU,GAAG,UAAU,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;QAC7D,CAAC,CAAC;QAEF,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,iEAAiE;YACjE,uEAAuE;YACvE,sEAAsE;YACtE,yEAAyE;YACzE,IAAI,aAAa,KAAK,SAAS,IAAI,eAAe;gBAAE,OAAO;YAC3D,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,eAAe,IAAI,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC;gBAAE,OAAO;YACnG,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,2EAA2E;QAC3E,oEAAoE;QACpE,0EAA0E;QAC1E,gEAAgE;QAChE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,WAAW,GAAG,IAAI,CAAC;YACnB,QAAQ,GAAG,IAAI,CAAC;YAChB,eAAe,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1E,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,qEAAqE;AACrE,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;;;;GAIG;AACH,SAAS,aAAa,CAAC,KAAyB,EAAE,QAAgB;IAChE,OAAO,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC7F,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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@relayflows/sdk",
|
|
3
|
-
"version": "2.0.
|
|
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.
|
|
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
|
}
|
package/src/agent-artifacts.ts
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
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 (
|
|
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,
|
|
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,
|
package/src/authored-root.ts
CHANGED
|
@@ -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
|
}
|