@relayflows/sdk 2.0.37 → 2.0.38
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-reaper.d.ts +1 -1
- package/dist/agent-reaper.d.ts.map +1 -1
- package/dist/agent-reaper.js +6 -4
- package/dist/agent-reaper.js.map +1 -1
- package/dist/authored-budget.d.ts +26 -1
- package/dist/authored-budget.d.ts.map +1 -1
- package/dist/authored-budget.js +72 -2
- package/dist/authored-budget.js.map +1 -1
- package/dist/authored-flow-error.d.ts +7 -1
- package/dist/authored-flow-error.d.ts.map +1 -1
- package/dist/authored-flow-error.js.map +1 -1
- package/dist/authored-node-runner.d.ts.map +1 -1
- package/dist/authored-node-runner.js +3 -2
- package/dist/authored-node-runner.js.map +1 -1
- package/dist/authored-root.d.ts.map +1 -1
- package/dist/authored-root.js +141 -6
- package/dist/authored-root.js.map +1 -1
- package/dist/authored-worker-step.js +1 -0
- package/dist/authored-worker-step.js.map +1 -1
- package/dist/child-stop.d.ts +3 -1
- package/dist/child-stop.d.ts.map +1 -1
- package/dist/child-stop.js +42 -2
- package/dist/child-stop.js.map +1 -1
- package/dist/cli/add-extension.js +1 -1
- package/dist/cli/add-extension.js.map +1 -1
- package/dist/cli/check.d.ts.map +1 -1
- package/dist/cli/check.js +25 -7
- package/dist/cli/check.js.map +1 -1
- package/dist/cli/cli-probe.d.ts +1 -0
- package/dist/cli/cli-probe.d.ts.map +1 -1
- package/dist/cli/cli-probe.js +72 -36
- package/dist/cli/cli-probe.js.map +1 -1
- package/dist/cli/direct-run.d.ts.map +1 -1
- package/dist/cli/direct-run.js +4 -1
- package/dist/cli/direct-run.js.map +1 -1
- package/dist/cli/pinned-cli-alias.d.ts +13 -0
- package/dist/cli/pinned-cli-alias.d.ts.map +1 -0
- package/dist/cli/pinned-cli-alias.js +58 -0
- package/dist/cli/pinned-cli-alias.js.map +1 -0
- package/dist/cli/run.d.ts +8 -0
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +91 -8
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/step-failure.d.ts.map +1 -1
- package/dist/cli/step-failure.js +18 -0
- package/dist/cli/step-failure.js.map +1 -1
- package/dist/cloud-run.d.ts.map +1 -1
- package/dist/cloud-run.js +9 -2
- package/dist/cloud-run.js.map +1 -1
- package/dist/communication/worker.d.ts.map +1 -1
- package/dist/communication/worker.js +24 -6
- package/dist/communication/worker.js.map +1 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +16 -7
- package/dist/compile.js.map +1 -1
- package/dist/failure-kinds.d.ts +9 -1
- package/dist/failure-kinds.d.ts.map +1 -1
- package/dist/failure-kinds.js +6 -0
- package/dist/failure-kinds.js.map +1 -1
- package/dist/flow-extension-loader.d.ts +1 -1
- package/dist/flow-extension-loader.d.ts.map +1 -1
- package/dist/flow-extension-loader.js +143 -14
- package/dist/flow-extension-loader.js.map +1 -1
- package/dist/flow-extension-manifest.d.ts +1 -0
- package/dist/flow-extension-manifest.d.ts.map +1 -1
- package/dist/flow-extension-manifest.js +12 -3
- package/dist/flow-extension-manifest.js.map +1 -1
- package/dist/hosted-extension-manifest.d.ts.map +1 -1
- package/dist/hosted-extension-manifest.js +25 -4
- package/dist/hosted-extension-manifest.js.map +1 -1
- package/dist/hosted-extension-runtime.js +1 -1
- package/dist/hosted-extension-sandbox.js +2 -2
- package/dist/llm-worker.d.ts.map +1 -1
- package/dist/llm-worker.js +4 -2
- package/dist/llm-worker.js.map +1 -1
- package/dist/mcp-stdio.d.ts +2 -1
- package/dist/mcp-stdio.d.ts.map +1 -1
- package/dist/mcp-stdio.js +38 -21
- package/dist/mcp-stdio.js.map +1 -1
- package/dist/preflight.d.ts +2 -0
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js.map +1 -1
- package/dist/protocol.d.ts +9 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/resolved-cli-identity.d.ts +14 -0
- package/dist/resolved-cli-identity.d.ts.map +1 -0
- package/dist/resolved-cli-identity.js +19 -0
- package/dist/resolved-cli-identity.js.map +1 -0
- package/dist/worker-cli.d.ts +3 -1
- package/dist/worker-cli.d.ts.map +1 -1
- package/dist/worker-cli.js +116 -40
- package/dist/worker-cli.js.map +1 -1
- package/dist/worker-lease.d.ts +3 -1
- package/dist/worker-lease.d.ts.map +1 -1
- package/dist/worker-lease.js +47 -9
- package/dist/worker-lease.js.map +1 -1
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +4 -2
- package/dist/worker.js.map +1 -1
- package/dist/wrapper-session.d.ts +3 -1
- package/dist/wrapper-session.d.ts.map +1 -1
- package/dist/wrapper-session.js +93 -53
- package/dist/wrapper-session.js.map +1 -1
- package/package.json +2 -2
- package/src/agent-reaper.ts +7 -4
- package/src/authored-budget.ts +73 -1
- package/src/authored-flow-error.ts +6 -0
- package/src/authored-node-runner.ts +3 -2
- package/src/authored-root.ts +150 -7
- package/src/authored-worker-step.ts +1 -0
- package/src/child-stop.ts +40 -1
- package/src/cli/add-extension.ts +1 -1
- package/src/cli/check.ts +25 -4
- package/src/cli/cli-probe.ts +73 -37
- package/src/cli/direct-run.ts +4 -1
- package/src/cli/pinned-cli-alias.ts +74 -0
- package/src/cli/run.ts +103 -7
- package/src/cli/step-failure.ts +18 -0
- package/src/cloud-run.ts +9 -2
- package/src/communication/worker.ts +24 -9
- package/src/compile.ts +28 -13
- package/src/failure-kinds.ts +14 -0
- package/src/flow-extension-loader.ts +154 -14
- package/src/flow-extension-manifest.ts +6 -3
- package/src/hosted-extension-manifest.ts +28 -5
- package/src/hosted-extension-runtime.ts +1 -1
- package/src/hosted-extension-sandbox.ts +2 -2
- package/src/llm-worker.ts +6 -4
- package/src/mcp-stdio.ts +34 -20
- package/src/preflight.ts +2 -0
- package/src/protocol.ts +9 -0
- package/src/resolved-cli-identity.ts +42 -0
- package/src/worker-cli.ts +123 -37
- package/src/worker-lease.ts +50 -9
- package/src/worker.ts +6 -4
- package/src/wrapper-session.ts +89 -56
package/dist/cli/cli-probe.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { accessSync, constants } from 'node:fs';
|
|
2
|
-
import { isAbsolute, resolve } from 'node:path';
|
|
1
|
+
import { accessSync, constants, realpathSync } from 'node:fs';
|
|
2
|
+
import { basename, isAbsolute, resolve } from 'node:path';
|
|
3
3
|
import { execFile, spawnSync } from 'node:child_process';
|
|
4
4
|
import { agentEnvironment, brokerEnvironment } from '../communication/environment.js';
|
|
5
5
|
import { adapterIdentification, authenticationProbe, classifyModelProbeFailure, cliAdapterKind, displayInvocation, modelReadinessProbe } from '../cli-adapter.js';
|
|
6
6
|
import { MODEL_ENV } from '../worker-cli.js';
|
|
7
7
|
import { CliProbeError } from '../preflight.js';
|
|
8
|
+
import { pinCliAlias, pinCliAliasSync } from './pinned-cli-alias.js';
|
|
8
9
|
/** One decision sequence; checking uses synchronous I/O, live flows yield the loop. */
|
|
9
10
|
export function probeCli(...args) {
|
|
10
11
|
return driveSync(probeSequence(...args));
|
|
@@ -23,12 +24,20 @@ function driveSync(sequence) {
|
|
|
23
24
|
let next = sequence.next();
|
|
24
25
|
while (!next.done) {
|
|
25
26
|
const request = next.value;
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
const pinned = pinCliAliasSync(request.executable, request.argv0 ?? basename(request.executable));
|
|
28
|
+
const result = (() => {
|
|
29
|
+
try {
|
|
30
|
+
return spawnSync(pinned.executable, request.invocation.args, {
|
|
31
|
+
...probeOptions(request),
|
|
32
|
+
// Preserve the old synchronous probe contract: provider CLIs must not
|
|
33
|
+
// inherit a readable stdin that can block auth/identify probes.
|
|
34
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
pinned.release();
|
|
39
|
+
}
|
|
40
|
+
})();
|
|
32
41
|
const failure = classifySpawnFailure(result.error, result.signal, request.invocation.timeoutMs);
|
|
33
42
|
if (failure !== undefined)
|
|
34
43
|
throw failure;
|
|
@@ -36,45 +45,61 @@ function driveSync(sequence) {
|
|
|
36
45
|
}
|
|
37
46
|
return next.value;
|
|
38
47
|
}
|
|
39
|
-
function probeOptions({ directory, invocation, environment }) {
|
|
48
|
+
function probeOptions({ argv0, directory, invocation, environment }) {
|
|
40
49
|
const env = { ...environment };
|
|
41
50
|
delete env[MODEL_ENV];
|
|
42
51
|
if (invocation.modelEnv !== undefined)
|
|
43
52
|
env[MODEL_ENV] = invocation.modelEnv;
|
|
44
53
|
return { cwd: directory, encoding: 'utf8', timeout: invocation.timeoutMs,
|
|
45
|
-
maxBuffer: 1024 * 1024, env };
|
|
54
|
+
maxBuffer: 1024 * 1024, env, ...(argv0 === undefined ? {} : { argv0 }) };
|
|
46
55
|
}
|
|
47
|
-
function runProbeAsync(request) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
async function runProbeAsync(request) {
|
|
57
|
+
const pinned = await pinCliAlias(request.executable, request.argv0 ?? basename(request.executable));
|
|
58
|
+
try {
|
|
59
|
+
return await new Promise((resolve, reject) => {
|
|
60
|
+
const child = execFile(pinned.executable, request.invocation.args, probeOptions(request), (error, stdout, stderr) => {
|
|
61
|
+
// Numeric exit codes are probe results; launch, timeout, signal and buffer
|
|
62
|
+
// errors are failures to collect a fact, just as in the synchronous driver.
|
|
63
|
+
if (error?.killed && typeof error.code !== 'string')
|
|
64
|
+
return reject(new CliProbeError(`timeout:${request.invocation.timeoutMs}ms`));
|
|
65
|
+
const failure = classifySpawnFailure(error !== null && typeof error.code !== 'number' && error.signal == null ? error : undefined, error?.signal ?? null, request.invocation.timeoutMs);
|
|
66
|
+
if (failure !== undefined)
|
|
67
|
+
return reject(failure);
|
|
68
|
+
resolve({ status: error === null ? 0 : typeof error.code === 'number' ? error.code : null,
|
|
69
|
+
stdout, stderr });
|
|
70
|
+
});
|
|
71
|
+
child.stdin?.end();
|
|
59
72
|
});
|
|
60
|
-
|
|
61
|
-
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
await pinned.release();
|
|
76
|
+
}
|
|
62
77
|
}
|
|
63
78
|
function* probeSequence(cli, directory, model, execution, sourceEnvironment = process.env) {
|
|
64
79
|
const executable = yield* executableSequence(cli, directory, sourceEnvironment);
|
|
65
80
|
if (executable === undefined)
|
|
66
81
|
return { exists: false, authenticated: false };
|
|
67
|
-
|
|
82
|
+
// The declaration selects the adapter; the canonical executable selects
|
|
83
|
+
// the bytes. Package-manager links commonly name `claude` or `codex` while
|
|
84
|
+
// targeting a generic `cli.js`, whose basename must not rewrite the adapter
|
|
85
|
+
// contract after resolution.
|
|
86
|
+
const kind = cliAdapterKind(cli);
|
|
68
87
|
// Relay owns interactive CLI launch/injection. Its generic PTY path is not
|
|
69
88
|
// the headless wrapper protocol; do not demand that protocol from Gemini,
|
|
70
89
|
// Cursor, OpenCode, or other interactive tools. Never invent an auth pass.
|
|
71
90
|
if (execution === 'managed' && kind === 'relayflows-wrapper-v1') {
|
|
72
|
-
return { exists: true, supported: true, authenticated: 'unverified' };
|
|
91
|
+
return { exists: true, supported: true, authenticated: 'unverified', executable };
|
|
73
92
|
}
|
|
74
93
|
const environment = execution === 'managed'
|
|
75
|
-
? { ...brokerEnvironment(sourceEnvironment), ...agentEnvironment(
|
|
94
|
+
? { ...brokerEnvironment(sourceEnvironment), ...agentEnvironment(cli, sourceEnvironment) }
|
|
76
95
|
: sourceEnvironment;
|
|
77
|
-
const probe = (invocation) => ({
|
|
96
|
+
const probe = (invocation) => ({
|
|
97
|
+
executable,
|
|
98
|
+
argv0: basename(cli),
|
|
99
|
+
directory,
|
|
100
|
+
invocation,
|
|
101
|
+
environment,
|
|
102
|
+
});
|
|
78
103
|
const identification = adapterIdentification(kind);
|
|
79
104
|
const identified = yield probe(identification.invocation);
|
|
80
105
|
if (identified.status !== 0
|
|
@@ -89,6 +114,7 @@ function* probeSequence(cli, directory, model, execution, sourceEnvironment = pr
|
|
|
89
114
|
exists: true,
|
|
90
115
|
supported: true,
|
|
91
116
|
authenticated: (yield probe(auth)).status === 0,
|
|
117
|
+
executable,
|
|
92
118
|
authCommand,
|
|
93
119
|
};
|
|
94
120
|
}
|
|
@@ -104,6 +130,7 @@ function* probeSequence(cli, directory, model, execution, sourceEnvironment = pr
|
|
|
104
130
|
supported: true,
|
|
105
131
|
authenticated: true,
|
|
106
132
|
modelAvailable: true,
|
|
133
|
+
executable,
|
|
107
134
|
authCommand,
|
|
108
135
|
modelCommand,
|
|
109
136
|
};
|
|
@@ -123,6 +150,7 @@ function* probeSequence(cli, directory, model, execution, sourceEnvironment = pr
|
|
|
123
150
|
supported: true,
|
|
124
151
|
authenticated,
|
|
125
152
|
modelAvailable: false,
|
|
153
|
+
executable,
|
|
126
154
|
authCommand,
|
|
127
155
|
modelCommand,
|
|
128
156
|
modelExitCode: scopedProbe.status,
|
|
@@ -155,17 +183,25 @@ function redactProbeOutput(text) {
|
|
|
155
183
|
function* executableSequence(command, directory, environment) {
|
|
156
184
|
if (command.includes('/') || isAbsolute(command)) {
|
|
157
185
|
const path = isAbsolute(command) ? command : resolve(directory, command);
|
|
158
|
-
|
|
159
|
-
accessSync(path, constants.X_OK);
|
|
160
|
-
return path;
|
|
161
|
-
}
|
|
162
|
-
catch {
|
|
163
|
-
return undefined;
|
|
164
|
-
}
|
|
186
|
+
return canonicalExecutable(path);
|
|
165
187
|
}
|
|
166
188
|
const result = yield { executable: 'which', directory: process.cwd(),
|
|
167
189
|
invocation: { args: [command], timeoutMs: 5_000 }, environment };
|
|
168
|
-
return result.status === 0
|
|
190
|
+
return result.status === 0
|
|
191
|
+
? canonicalExecutable(resolve(process.cwd(), result.stdout.trim()))
|
|
192
|
+
: undefined;
|
|
193
|
+
}
|
|
194
|
+
function canonicalExecutable(path) {
|
|
195
|
+
try {
|
|
196
|
+
accessSync(path, constants.X_OK);
|
|
197
|
+
// Dispatch must retain the exact target that readiness probed. Keeping a
|
|
198
|
+
// symlink path would allow the link to be retargeted between admission and
|
|
199
|
+
// worker spawn even though the compiled step carries an absolute path.
|
|
200
|
+
return realpathSync(path);
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return undefined;
|
|
204
|
+
}
|
|
169
205
|
}
|
|
170
206
|
function classifySpawnFailure(error, signal, timeoutMs) {
|
|
171
207
|
if (error !== undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-probe.js","sourceRoot":"","sources":["../../src/cli/cli-probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-probe.js","sourceRoot":"","sources":["../../src/cli/cli-probe.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direct-run.d.ts","sourceRoot":"","sources":["../../src/cli/direct-run.ts"],"names":[],"mappings":"AAoBA,OAAO,EAUL,KAAK,YAAY,EACjB,KAAK,mBAAmB,EAEzB,MAAM,UAAU,CAAC;AAElB,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"direct-run.d.ts","sourceRoot":"","sources":["../../src/cli/direct-run.ts"],"names":[],"mappings":"AAoBA,OAAO,EAUL,KAAK,YAAY,EACjB,KAAK,mBAAmB,EAEzB,MAAM,UAAU,CAAC;AAElB,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,YAAY,CAAC,CA4LvB"}
|
package/dist/cli/direct-run.js
CHANGED
|
@@ -16,7 +16,7 @@ import { JournalClient } from '../journal-client.js';
|
|
|
16
16
|
import { inputFailureReport } from './check.js';
|
|
17
17
|
import { checkAuthoredTriggers } from './check-triggers.js';
|
|
18
18
|
import { authoredInput, authoredWorkerRemedy, localAgentRemedy } from './local-agent-remedy.js';
|
|
19
|
-
import { authoredCompletion, authoredHumanParked, authoredStepFailure, connect, emptyReport, fromCheckReport, protocolFailure, suspendedExecution, socketFor, } from './run.js';
|
|
19
|
+
import { authoredCompletion, authoredHumanParked, authoredStepFailure, rootLeaseLostReport, connect, emptyReport, fromCheckReport, protocolFailure, suspendedExecution, socketFor, } from './run.js';
|
|
20
20
|
export async function runDirectFlow(path, inputArgument, dataDir, options = {}) {
|
|
21
21
|
// Consume and close the agent-only descriptor before authored source is
|
|
22
22
|
// imported by trigger preflight. Authored code never receives this object.
|
|
@@ -181,6 +181,9 @@ export async function runDirectFlow(path, inputArgument, dataDir, options = {})
|
|
|
181
181
|
if (error instanceof AuthoredFlowExecutionError && (error.code === 'step_failed' || error.code === 'gate_failed')) {
|
|
182
182
|
return authoredStepFailure('run', base, socketPath, error);
|
|
183
183
|
}
|
|
184
|
+
if (error instanceof AuthoredFlowExecutionError && error.code === 'root_lease_lost') {
|
|
185
|
+
return rootLeaseLostReport('run', base, socketPath, error);
|
|
186
|
+
}
|
|
184
187
|
if (error instanceof AuthoredHumanParked) {
|
|
185
188
|
return authoredHumanParked('run', base, socketPath, error, { dataDir, localAgent: options.localAgent === true });
|
|
186
189
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direct-run.js","sourceRoot":"","sources":["../../src/cli/direct-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EACL,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"direct-run.js","sourceRoot":"","sources":["../../src/cli/direct-run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface PinnedCliAlias {
|
|
2
|
+
executable: string;
|
|
3
|
+
release(): void;
|
|
4
|
+
}
|
|
5
|
+
export interface PinnedCliAliasSync {
|
|
6
|
+
executable: string;
|
|
7
|
+
release(): void;
|
|
8
|
+
}
|
|
9
|
+
/** Execute pinned canonical bytes through the proved basename, including shebang scripts. */
|
|
10
|
+
export declare function pinCliAlias(executable: string, identity: string): Promise<PinnedCliAlias>;
|
|
11
|
+
/** Synchronous counterpart for the synchronous preflight contract. */
|
|
12
|
+
export declare function pinCliAliasSync(executable: string, identity: string): PinnedCliAliasSync;
|
|
13
|
+
//# sourceMappingURL=pinned-cli-alias.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pinned-cli-alias.d.ts","sourceRoot":"","sources":["../../src/cli/pinned-cli-alias.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,IAAI,IAAI,CAAC;CACjB;AAUD,6FAA6F;AAC7F,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAmB/F;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAmBxF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { mkdtempSync, rmSync, symlinkSync, } from 'node:fs';
|
|
2
|
+
import { mkdtemp, rm, symlink, } from 'node:fs/promises';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { basename, join } from 'node:path';
|
|
5
|
+
function aliasName(identity) {
|
|
6
|
+
const name = basename(identity);
|
|
7
|
+
if (name.length === 0 || name === '.' || name === '..') {
|
|
8
|
+
throw new Error(`Invalid CLI identity basename: ${JSON.stringify(identity)}`);
|
|
9
|
+
}
|
|
10
|
+
return name;
|
|
11
|
+
}
|
|
12
|
+
/** Execute pinned canonical bytes through the proved basename, including shebang scripts. */
|
|
13
|
+
export async function pinCliAlias(executable, identity) {
|
|
14
|
+
const name = aliasName(identity);
|
|
15
|
+
if (basename(executable) === name) {
|
|
16
|
+
return { executable, release() { } };
|
|
17
|
+
}
|
|
18
|
+
const directory = await mkdtemp(join(tmpdir(), 'relayflow-cli-'));
|
|
19
|
+
const alias = join(directory, name);
|
|
20
|
+
try {
|
|
21
|
+
await symlink(executable, alias, 'file');
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
await rm(directory, { recursive: true, force: true });
|
|
25
|
+
throw error;
|
|
26
|
+
}
|
|
27
|
+
let released = false;
|
|
28
|
+
return { executable: alias, release: () => {
|
|
29
|
+
if (released)
|
|
30
|
+
return;
|
|
31
|
+
rmSync(directory, { recursive: true, force: true });
|
|
32
|
+
released = true;
|
|
33
|
+
} };
|
|
34
|
+
}
|
|
35
|
+
/** Synchronous counterpart for the synchronous preflight contract. */
|
|
36
|
+
export function pinCliAliasSync(executable, identity) {
|
|
37
|
+
const name = aliasName(identity);
|
|
38
|
+
if (basename(executable) === name) {
|
|
39
|
+
return { executable, release() { } };
|
|
40
|
+
}
|
|
41
|
+
const directory = mkdtempSync(join(tmpdir(), 'relayflow-cli-'));
|
|
42
|
+
const alias = join(directory, name);
|
|
43
|
+
try {
|
|
44
|
+
symlinkSync(executable, alias, 'file');
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
rmSync(directory, { recursive: true, force: true });
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
let released = false;
|
|
51
|
+
return { executable: alias, release: () => {
|
|
52
|
+
if (released)
|
|
53
|
+
return;
|
|
54
|
+
rmSync(directory, { recursive: true, force: true });
|
|
55
|
+
released = true;
|
|
56
|
+
} };
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=pinned-cli-alias.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pinned-cli-alias.js","sourceRoot":"","sources":["../../src/cli/pinned-cli-alias.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/run.d.ts
CHANGED
|
@@ -145,6 +145,14 @@ export declare function resumeFlow(runId: string, dataDir: string, options?: Run
|
|
|
145
145
|
* drove correctly, and it produces a report with no `status`, which is the
|
|
146
146
|
* whole of what `RUN <id> unknown` ever meant.
|
|
147
147
|
*/
|
|
148
|
+
/**
|
|
149
|
+
* The authored root's lease was lost and not re-dispatched to this process
|
|
150
|
+
* (authored-root.ts driveRootFollowingRetries). Exit 1 because this CLI did
|
|
151
|
+
* not finish the run, but the report says what is true of it: still
|
|
152
|
+
* `running` in the journal, and resumable -- never `protocol_error` with the
|
|
153
|
+
* generic "worker wait canceled" and no run id, which is what it was.
|
|
154
|
+
*/
|
|
155
|
+
export declare function rootLeaseLostReport(command: RunCommand, base: CheckReport | RunReport, socketPath: string, error: AuthoredFlowExecutionError, fallbackRunId?: string): RunExecution;
|
|
148
156
|
export declare function authoredStepFailure(command: RunCommand, base: CheckReport | RunReport, socketPath: string, error: AuthoredFlowExecutionError, fallbackRunId?: string): RunExecution;
|
|
149
157
|
/**
|
|
150
158
|
* An authored body parked on an unanswered `f.human`: exit 3, like every
|
package/dist/cli/run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGpH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAOhF,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExG,OAAO,EAAE,aAAa,EAAwB,MAAM,sBAAsB,CAAC;AAI3E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,KAAK,EACV,mBAAmB,EACnB,UAAU,EACV,SAAS,EACT,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5C,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD,QAAQ,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;IACpE,IAAI,EAAE,cAAc,GAAG,cAAc,GAAG,mBAAmB,GAAG,wBAAwB,CAAC;IACvF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,UAAU,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;IACjC,4EAA4E;IAC5E,UAAU,CAAC,EAAE,2BAA2B,CAAC,YAAY,CAAC,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClG,qEAAqE;IACrE,aAAa,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACvC,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;IACvC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,uEAAuE;IACvE,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,mDAAmD;IACnD,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IACxC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,EAAE,SAAS,CAAC;CACnB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,2BAA2B,GAAG;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACnE,YAAY,CAYd;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC;IAC7C,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,gFAAgF;IAChF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C,yGAAyG;IACzG,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/C,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IACjF,2FAA2F;IAC3F,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC9D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yGAAyG;IACzG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AAED,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,YAAY,CAAC,CAUvB;AA6FD,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,YAAY,CAAC,CA4LvB;AAyCD;;;;;;;;;;;;GAYG;AACH;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,0BAA0B,EACjC,aAAa,CAAC,EAAE,MAAM,GACrB,YAAY,CAiBd;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,0BAA0B,EACjC,aAAa,CAAC,EAAE,MAAM,GACrB,YAAY,CA+Bd;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,mBAAmB,EAC1B,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,GAC/C,YAAY,CAsBd;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,SAAS,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE;IACN,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,uBAAuB,CAAC;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,SAAS,OAAO,EAAE,CAAC;CAClC,EACD,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,YAAY,CAmFd;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,EACf,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAqDnC;AAMD,wBAAsB,eAAe,CACnC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,YAAY,CAAC,CAqJvB;AA+FD,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAyD1C,wBAAgB,eAAe,CAC7B,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,OAAO,EACd,KAAK,CAAC,EAAE,MAAM,GACb,YAAY,CAcd;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,CAWnF;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAE1D;AAUD,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD;AAiBD,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBrE"}
|
package/dist/cli/run.js
CHANGED
|
@@ -265,6 +265,9 @@ export async function resumeFlow(runId, dataDir, options = {}) {
|
|
|
265
265
|
if (error instanceof AuthoredFlowExecutionError && (error.code === 'step_failed' || error.code === 'gate_failed')) {
|
|
266
266
|
return authoredStepFailure('resume', base, socketPath, error, runId);
|
|
267
267
|
}
|
|
268
|
+
if (error instanceof AuthoredFlowExecutionError && error.code === 'root_lease_lost') {
|
|
269
|
+
return rootLeaseLostReport('resume', base, socketPath, error, runId);
|
|
270
|
+
}
|
|
268
271
|
// An authored resume that parks for want of a worker is a park, reported
|
|
269
272
|
// like the run path's — and with the same remedy, because an authored root
|
|
270
273
|
// admits its worker at run start: resuming again cannot attach one, so the
|
|
@@ -375,6 +378,31 @@ function authoredInputArgument(metadata) {
|
|
|
375
378
|
* drove correctly, and it produces a report with no `status`, which is the
|
|
376
379
|
* whole of what `RUN <id> unknown` ever meant.
|
|
377
380
|
*/
|
|
381
|
+
/**
|
|
382
|
+
* The authored root's lease was lost and not re-dispatched to this process
|
|
383
|
+
* (authored-root.ts driveRootFollowingRetries). Exit 1 because this CLI did
|
|
384
|
+
* not finish the run, but the report says what is true of it: still
|
|
385
|
+
* `running` in the journal, and resumable -- never `protocol_error` with the
|
|
386
|
+
* generic "worker wait canceled" and no run id, which is what it was.
|
|
387
|
+
*/
|
|
388
|
+
export function rootLeaseLostReport(command, base, socketPath, error, fallbackRunId) {
|
|
389
|
+
const rootRunId = error.rootRunId ?? fallbackRunId;
|
|
390
|
+
return {
|
|
391
|
+
exitCode: 1,
|
|
392
|
+
report: {
|
|
393
|
+
...fromBase(command, base),
|
|
394
|
+
ok: false,
|
|
395
|
+
...(rootRunId === undefined ? {} : { runId: rootRunId, rootRunId }),
|
|
396
|
+
socketPath,
|
|
397
|
+
status: 'running',
|
|
398
|
+
diagnostics: [...base.diagnostics, {
|
|
399
|
+
severity: 'failure',
|
|
400
|
+
kind: 'root_lease_lost',
|
|
401
|
+
message: error.message.replace(/^root_lease_lost: /, ''),
|
|
402
|
+
}],
|
|
403
|
+
},
|
|
404
|
+
};
|
|
405
|
+
}
|
|
378
406
|
export function authoredStepFailure(command, base, socketPath, error, fallbackRunId) {
|
|
379
407
|
// The failing step runs as its own kernel run, so the error's run id is the
|
|
380
408
|
// one whose journal holds the evidence. The resume target is the fallback.
|
|
@@ -612,13 +640,27 @@ export async function classifyOutcome(client, command, outcome, base, socketPath
|
|
|
612
640
|
let parkedStep;
|
|
613
641
|
let needsHuman = false;
|
|
614
642
|
let unclassifiedPolls = 0;
|
|
615
|
-
|
|
643
|
+
// `running` too: an authored body re-driven after a lost root lease re-admits
|
|
644
|
+
// its child by admission key and gets the EXISTING run back, mid-attempt.
|
|
645
|
+
// Only `parked` was followed, so that child -- on the attempt 2 the kernel
|
|
646
|
+
// retried it to -- fell straight through to "status running without a
|
|
647
|
+
// classifiable completion" and failed the flow (customer rw_3a0fcb71).
|
|
648
|
+
while (current.status === 'parked' || current.status === 'running') {
|
|
616
649
|
const inspection = await inspectOutOfBandStep(client, current.run_id);
|
|
617
650
|
// A runnable sibling may only be waiting for capacity held by a live
|
|
618
|
-
// attempt. Keep driving until that
|
|
619
|
-
|
|
651
|
+
// attempt or by a retry in backoff. Keep driving until that active work
|
|
652
|
+
// settles before declaring a park.
|
|
653
|
+
if (inspection?.parkedStep !== undefined && (inspection.needsHuman
|
|
654
|
+
|| (inspection.runningStep === undefined && inspection.backoffStep === undefined))) {
|
|
620
655
|
parkedStep = inspection.parkedStep;
|
|
621
656
|
needsHuman = inspection.needsHuman;
|
|
657
|
+
// `run.get` reports the live snapshot as `running` for an ordinary
|
|
658
|
+
// runnable worker wait, even when `run.start`/`run.resume` already
|
|
659
|
+
// classified the outcome as parked. Conversely, a re-admitted run can
|
|
660
|
+
// arrive here with a stale `running` outcome after its worker vanished.
|
|
661
|
+
// The step-level inspection is authoritative that this is a park; do
|
|
662
|
+
// not copy its broader run status and lose that classification.
|
|
663
|
+
current = { ...current, status: 'parked' };
|
|
622
664
|
break;
|
|
623
665
|
}
|
|
624
666
|
if (inspection?.runningStep !== undefined) {
|
|
@@ -626,6 +668,20 @@ export async function classifyOutcome(client, command, outcome, base, socketPath
|
|
|
626
668
|
current = await client.runResume(current.run_id, command === 'run' || options.allowHumanInfluenced);
|
|
627
669
|
continue;
|
|
628
670
|
}
|
|
671
|
+
// A step in `backoff` is between attempts: the kernel has scheduled the
|
|
672
|
+
// next one (a dead worker's retry is due at once, but waits for the
|
|
673
|
+
// worker slot the dead attempt held; a failed attempt waits out the
|
|
674
|
+
// retry policy's delay, bounded by its max_backoff_ms). That is progress,
|
|
675
|
+
// not an unclassifiable state -- treating it as one gave up after 2s on a
|
|
676
|
+
// child whose attempt 2 then succeeded (customer rw_3a0fcb71). Once due,
|
|
677
|
+
// the step is dispatched (`running`, followed above) or, with no worker,
|
|
678
|
+
// left `runnable` and reported as a park.
|
|
679
|
+
if (inspection?.backoffStep !== undefined && inspection.runningStep === undefined) {
|
|
680
|
+
throwIfCanceled(options.signal, inspection.backoffStep.id);
|
|
681
|
+
await delay(EXPIRED_LEASE_POLL_MS, options.signal);
|
|
682
|
+
current = await client.runResume(current.run_id, command === 'run' || options.allowHumanInfluenced);
|
|
683
|
+
continue;
|
|
684
|
+
}
|
|
629
685
|
if (inspection?.status === 'completed' || inspection?.status === 'failed') {
|
|
630
686
|
current = await client.runResume(current.run_id, command === 'run' || options.allowHumanInfluenced);
|
|
631
687
|
continue;
|
|
@@ -769,6 +825,7 @@ async function inspectOutOfBandStep(client, runId) {
|
|
|
769
825
|
const humanEntry = entries.find(([, step]) => step.type !== 'deterministic' && step.state === 'needs_human');
|
|
770
826
|
const runnableEntry = entries.find(([, step]) => step.type !== 'deterministic' && step.state === 'runnable');
|
|
771
827
|
const runningEntry = entries.find(([, step]) => step.type !== 'deterministic' && step.state === 'running');
|
|
828
|
+
const backoffEntry = entries.find(([, step]) => step.type !== 'deterministic' && step.state === 'backoff');
|
|
772
829
|
const parkedEntry = humanEntry ?? runnableEntry;
|
|
773
830
|
const parkedStep = parkedEntry === undefined ? undefined : {
|
|
774
831
|
id: parkedEntry[0],
|
|
@@ -784,10 +841,20 @@ async function inspectOutOfBandStep(client, runId) {
|
|
|
784
841
|
needsHuman: humanEntry !== undefined,
|
|
785
842
|
...(parkedStep !== undefined ? { parkedStep } : {}),
|
|
786
843
|
...(runningStep !== undefined ? { runningStep } : {}),
|
|
844
|
+
...(backoffEntry !== undefined ? { backoffStep: {
|
|
845
|
+
id: backoffEntry[0],
|
|
846
|
+
type: backoffEntry[1].type,
|
|
847
|
+
} } : {}),
|
|
787
848
|
};
|
|
788
849
|
}
|
|
789
850
|
// Match kernel/relayflowd/src/server/client.rs: allow the lease sweep to dispatch a retry.
|
|
790
851
|
export const LEASE_SWEEP_GRACE_MS = 5_000;
|
|
852
|
+
// How often to re-ask the daemon about a step whose lease looks expired here.
|
|
853
|
+
const EXPIRED_LEASE_POLL_MS = 250;
|
|
854
|
+
// A deadline unchanged for a whole lease (relayflowd LEASE_RENEWAL_MS, 30s)
|
|
855
|
+
// plus the sweep grace was renewed by nobody: the attempt is dead and the
|
|
856
|
+
// daemon never swept it. Fail rather than hang.
|
|
857
|
+
const STALE_LEASE_MS = 30_000 + LEASE_SWEEP_GRACE_MS;
|
|
791
858
|
async function waitForRunningStep(client, runId, runningStep, options) {
|
|
792
859
|
let leaseDeadlineMs = runningStep.leaseDeadlineMs;
|
|
793
860
|
if (!Number.isFinite(leaseDeadlineMs)) {
|
|
@@ -799,19 +866,28 @@ async function waitForRunningStep(client, runId, runningStep, options) {
|
|
|
799
866
|
stepType: runningStep.type,
|
|
800
867
|
leaseDeadlineMs,
|
|
801
868
|
});
|
|
869
|
+
// When the lease deadline last changed, on this process's monotonic clock.
|
|
870
|
+
// A live worker renews every ~10s, moving the deadline; a dead lease the
|
|
871
|
+
// daemon has not swept keeps it. That -- not a comparison of the daemon's
|
|
872
|
+
// deadline with our wall clock -- is what separates the two under skew.
|
|
873
|
+
let deadlineSeenAt = performance.now();
|
|
802
874
|
while (true) {
|
|
803
875
|
throwIfCanceled(options.signal, runningStep.id);
|
|
804
876
|
const remainingMs = leaseDeadlineMs + LEASE_SWEEP_GRACE_MS - Date.now();
|
|
805
|
-
if (
|
|
877
|
+
if (performance.now() - deadlineSeenAt > STALE_LEASE_MS) {
|
|
806
878
|
throw new Error(`worker lease for step "${runningStep.id}" expired at ${leaseDeadlineMs} without completion`);
|
|
807
879
|
}
|
|
808
|
-
|
|
880
|
+
// Past the deadline by THIS clock alone is not an expiry: the daemon may
|
|
881
|
+
// still hold the lease (skew) or be sweeping it into a retry. Keep
|
|
882
|
+
// following the step, at a slower poll, until the daemon says otherwise.
|
|
883
|
+
await delay(remainingMs <= 0 ? EXPIRED_LEASE_POLL_MS : Math.min(50, remainingMs), options.signal);
|
|
809
884
|
const snapshot = await client.runGet(runId);
|
|
810
885
|
const step = snapshot.steps[runningStep.id];
|
|
811
886
|
if (step?.state !== 'running')
|
|
812
887
|
return;
|
|
813
888
|
if (step.lease_deadline_ms !== undefined && step.lease_deadline_ms !== leaseDeadlineMs) {
|
|
814
889
|
leaseDeadlineMs = step.lease_deadline_ms;
|
|
890
|
+
deadlineSeenAt = performance.now();
|
|
815
891
|
options.onWait?.({
|
|
816
892
|
runId,
|
|
817
893
|
stepId: runningStep.id,
|
|
@@ -865,8 +941,13 @@ function errorMessage(error) {
|
|
|
865
941
|
return error instanceof Error ? error.message : 'unknown protocol error';
|
|
866
942
|
}
|
|
867
943
|
function throwIfCanceled(signal, stepId) {
|
|
868
|
-
if (signal?.aborted === true)
|
|
869
|
-
throw new Error(`waiting for running step "${stepId}" was canceled
|
|
944
|
+
if (signal?.aborted === true) {
|
|
945
|
+
throw new Error(`waiting for running step "${stepId}" was canceled${cancelCause(signal)}`, { cause: signal.reason });
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
/** Why a wait was canceled, when whoever aborted it said (a lost lease does). */
|
|
949
|
+
function cancelCause(signal) {
|
|
950
|
+
return signal.reason instanceof Error && signal.reason.name !== 'AbortError' ? `: ${signal.reason.message}` : '';
|
|
870
951
|
}
|
|
871
952
|
export function delay(ms, signal) {
|
|
872
953
|
return new Promise((resolveDelay, rejectDelay) => {
|
|
@@ -880,7 +961,9 @@ export function delay(ms, signal) {
|
|
|
880
961
|
const cancel = () => {
|
|
881
962
|
clearTimeout(timer);
|
|
882
963
|
signal.removeEventListener('abort', cancel);
|
|
883
|
-
|
|
964
|
+
// Carries the abort reason: a bare "worker wait canceled" was all a
|
|
965
|
+
// lost root lease ever reported (customer rw_3a0fcb71).
|
|
966
|
+
rejectDelay(new Error(`worker wait canceled${cancelCause(signal)}`, { cause: signal.reason }));
|
|
884
967
|
};
|
|
885
968
|
if (signal.aborted)
|
|
886
969
|
cancel();
|