@relayflows/sdk 2.0.11 → 2.0.12
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/adapters/base.d.ts +6 -0
- package/dist/adapters/base.d.ts.map +1 -1
- package/dist/adapters/claude.d.ts.map +1 -1
- package/dist/adapters/claude.js +1 -0
- package/dist/adapters/claude.js.map +1 -1
- package/dist/authored-admission.d.ts +5 -0
- package/dist/authored-admission.d.ts.map +1 -0
- package/dist/authored-admission.js +14 -0
- package/dist/authored-admission.js.map +1 -0
- package/dist/authored-budget.d.ts +1 -1
- package/dist/authored-budget.d.ts.map +1 -1
- package/dist/authored-budget.js +3 -3
- package/dist/authored-budget.js.map +1 -1
- package/dist/authored-flow-error.d.ts +1 -1
- package/dist/authored-flow-error.d.ts.map +1 -1
- package/dist/authored-flow-error.js.map +1 -1
- package/dist/authored-flow-executor.d.ts +10 -0
- package/dist/authored-flow-executor.d.ts.map +1 -1
- package/dist/authored-flow-executor.js +10 -7
- package/dist/authored-flow-executor.js.map +1 -1
- package/dist/authored-flow-loader.d.ts +20 -0
- package/dist/authored-flow-loader.d.ts.map +1 -1
- package/dist/authored-flow-loader.js +86 -11
- package/dist/authored-flow-loader.js.map +1 -1
- package/dist/authored-helper-effect.d.ts +1 -1
- package/dist/authored-helper-effect.d.ts.map +1 -1
- package/dist/authored-helper-effect.js +5 -3
- package/dist/authored-helper-effect.js.map +1 -1
- package/dist/authored-mcp.d.ts +1 -1
- package/dist/authored-mcp.d.ts.map +1 -1
- package/dist/authored-mcp.js +7 -4
- package/dist/authored-mcp.js.map +1 -1
- package/dist/authored-node-entry.d.ts +2 -0
- package/dist/authored-node-entry.d.ts.map +1 -0
- package/dist/authored-node-entry.js +111 -0
- package/dist/authored-node-entry.js.map +1 -0
- package/dist/authored-node-runner.d.ts +11 -0
- package/dist/authored-node-runner.d.ts.map +1 -0
- package/dist/authored-node-runner.js +246 -0
- package/dist/authored-node-runner.js.map +1 -0
- package/dist/authored-plugin-effect.d.ts +1 -1
- package/dist/authored-plugin-effect.d.ts.map +1 -1
- package/dist/authored-plugin-effect.js +7 -4
- package/dist/authored-plugin-effect.js.map +1 -1
- package/dist/authored-root.d.ts +38 -0
- package/dist/authored-root.d.ts.map +1 -0
- package/dist/authored-root.js +329 -0
- package/dist/authored-root.js.map +1 -0
- package/dist/authored-runtime-capability.d.ts +6 -0
- package/dist/authored-runtime-capability.d.ts.map +1 -0
- package/dist/authored-runtime-capability.js +40 -0
- package/dist/authored-runtime-capability.js.map +1 -0
- package/dist/authored-source-authority.d.ts +4 -0
- package/dist/authored-source-authority.d.ts.map +1 -0
- package/dist/authored-source-authority.js +61 -0
- package/dist/authored-source-authority.js.map +1 -0
- package/dist/authored-worker-step.d.ts +2 -2
- package/dist/authored-worker-step.d.ts.map +1 -1
- package/dist/authored-worker-step.js +11 -6
- package/dist/authored-worker-step.js.map +1 -1
- package/dist/budget-preflight.d.ts +17 -3
- package/dist/budget-preflight.d.ts.map +1 -1
- package/dist/budget-preflight.js +31 -24
- package/dist/budget-preflight.js.map +1 -1
- package/dist/cli/check.js +3 -1
- package/dist/cli/check.js.map +1 -1
- package/dist/cli/direct-run.d.ts.map +1 -1
- package/dist/cli/direct-run.js +18 -14
- package/dist/cli/direct-run.js.map +1 -1
- package/dist/cli/run.d.ts +2 -0
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +56 -1
- package/dist/cli/run.js.map +1 -1
- package/dist/cli-adapter.d.ts +16 -0
- package/dist/cli-adapter.d.ts.map +1 -1
- package/dist/cli-adapter.js +17 -0
- package/dist/cli-adapter.js.map +1 -1
- package/dist/cli.js +4 -4
- package/dist/cli.js.map +1 -1
- package/dist/cloud-run.d.ts +11 -1
- package/dist/cloud-run.d.ts.map +1 -1
- package/dist/cloud-run.js +65 -19
- package/dist/cloud-run.js.map +1 -1
- package/dist/failure-kinds.d.ts +7 -3
- package/dist/failure-kinds.d.ts.map +1 -1
- package/dist/failure-kinds.js +5 -1
- package/dist/failure-kinds.js.map +1 -1
- package/dist/journal-client.d.ts +1 -1
- package/dist/journal-client.d.ts.map +1 -1
- package/dist/journal-client.js +6 -2
- package/dist/journal-client.js.map +1 -1
- 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/local-agent.d.ts +1 -1
- package/dist/local-agent.d.ts.map +1 -1
- package/dist/local-agent.js +2 -2
- package/dist/local-agent.js.map +1 -1
- package/dist/model-pricing.d.ts +3 -4
- package/dist/model-pricing.d.ts.map +1 -1
- package/dist/model-pricing.js +4 -4
- package/dist/model-pricing.js.map +1 -1
- package/dist/preflight.d.ts +4 -1
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js +36 -18
- package/dist/preflight.js.map +1 -1
- package/dist/protocol.d.ts +2 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/spec.d.ts +5 -4
- 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 +6 -5
- package/dist/worker-cli.js.map +1 -1
- package/dist/worker-spend.d.ts +4 -3
- package/dist/worker-spend.d.ts.map +1 -1
- package/dist/worker-spend.js +13 -4
- package/dist/worker-spend.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/package.json +2 -2
- package/src/adapters/base.ts +7 -0
- package/src/adapters/claude.ts +1 -0
- package/src/authored-admission.ts +17 -0
- package/src/authored-budget.ts +4 -3
- package/src/authored-flow-error.ts +0 -1
- package/src/authored-flow-executor.ts +27 -7
- package/src/authored-flow-loader.ts +96 -13
- package/src/authored-helper-effect.ts +5 -3
- package/src/authored-mcp.ts +6 -4
- package/src/authored-node-entry.ts +90 -0
- package/src/authored-node-runner.ts +219 -0
- package/src/authored-plugin-effect.ts +6 -3
- package/src/authored-root.ts +396 -0
- package/src/authored-runtime-capability.ts +40 -0
- package/src/authored-source-authority.ts +62 -0
- package/src/authored-worker-step.ts +15 -4
- package/src/budget-preflight.ts +41 -25
- package/src/cli/check.ts +3 -1
- package/src/cli/direct-run.ts +24 -16
- package/src/cli/run.ts +58 -1
- package/src/cli-adapter.ts +27 -0
- package/src/cli.ts +5 -5
- package/src/cloud-run.ts +74 -21
- package/src/failure-kinds.ts +5 -1
- package/src/journal-client.ts +6 -2
- package/src/llm-worker.ts +4 -2
- package/src/local-agent.ts +7 -2
- package/src/model-pricing.ts +4 -4
- package/src/preflight.ts +40 -18
- package/src/protocol.ts +2 -0
- package/src/spec.ts +5 -4
- package/src/worker-cli.ts +7 -5
- package/src/worker-spend.ts +15 -4
- package/src/worker.ts +4 -2
package/dist/spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,EAAE;AACF,iEAAiE;AACjE,0EAA0E;AAC1E,qFAAqF;AACrF,kGAAkG;AAClG,EAAE;AACF,2EAA2E;AAC3E,8EAA8E;AAC9E,yDAAyD;
|
|
1
|
+
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,EAAE;AACF,iEAAiE;AACjE,0EAA0E;AAC1E,qFAAqF;AACrF,kGAAkG;AAClG,EAAE;AACF,2EAA2E;AAC3E,8EAA8E;AAC9E,yDAAyD;AAuWzD,uDAAuD;AACvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAO,CAAC"}
|
package/dist/worker-cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-cli.d.ts","sourceRoot":"","sources":["../src/worker-cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-cli.d.ts","sourceRoot":"","sources":["../src/worker-cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAWhF,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,4BAA4B,CAAC;AAEpC,kFAAkF;AAClF,eAAO,MAAM,gBAAgB,2BAA2B,CAAC;AAEzD;;;;GAIG;AACH,eAAO,MAAM,SAAS,oBAAoB,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,OAAO,0BAA0B,EAAE,gBAAgB,CAAC;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,OAAO,EACpB,KAAK,CAAC,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,EAC7C,MAAM,CAAC,EAAE,WAAW,EACpB,IAAI,GAAE,OAAO,GAAG,KAAe,EAC/B,WAAW,CAAC,EAAE,kBAAkB,EAChC,GAAG,CAAC,EAAE,MAAM,EACZ,SAAS,GAAE,cAAyB,EACpC,YAAY,CAAC,EAAE,iBAAiB,GAC/B,OAAO,CAAC,eAAe,CAAC,CA8C1B"}
|
package/dist/worker-cli.js
CHANGED
|
@@ -2,7 +2,7 @@ import { decodeProviderResult, decodeWrapperResult, requirePricedUsage } from '.
|
|
|
2
2
|
import { openSidechannel } from './pty-sidechannel.js';
|
|
3
3
|
import { spawn } from 'node:child_process';
|
|
4
4
|
import { childStop, ownsProcessGroup } from './child-stop.js';
|
|
5
|
-
import { agentExecution, llmExecution, cliAdapterKind, } from './cli-adapter.js';
|
|
5
|
+
import { agentExecution, llmExecution, cliAdapterKind, resolveCliModel, } from './cli-adapter.js';
|
|
6
6
|
import { runWrapperSession, } from './wrapper-session.js';
|
|
7
7
|
import { wrapperEnvironment } from './wrapper-runtime.js';
|
|
8
8
|
import { runAgentRelayTask, AgentRelayTransportError, } from './agent-relay-transport.js';
|
|
@@ -20,16 +20,17 @@ export async function runAgentCli(cli, instruction, wakeContext, model, wrapperL
|
|
|
20
20
|
throw new Error('Lease-bound agent execution requires macOS or Linux process-group cancellation; Windows is unsupported.');
|
|
21
21
|
}
|
|
22
22
|
const kind = cliAdapterKind(cli);
|
|
23
|
+
const effectiveModel = resolveCliModel(cli, model);
|
|
23
24
|
if (mode === 'agent' && transport === 'relay') {
|
|
24
|
-
return runViaAgentRelay(kind, instruction, wakeContext,
|
|
25
|
+
return runViaAgentRelay(kind, instruction, wakeContext, effectiveModel, relayContext, cwd, signal);
|
|
25
26
|
}
|
|
26
27
|
if (kind === 'relayflows-wrapper-v1') {
|
|
27
|
-
return requirePricedUsage(decodeWrapperResult(await runWrapperSession(cli, instruction, wakeContext,
|
|
28
|
+
return requirePricedUsage(decodeWrapperResult(await runWrapperSession(cli, instruction, wakeContext, effectiveModel, wrapperEnvironment(process.env), wrapperLimits, signal)), effectiveModel);
|
|
28
29
|
}
|
|
29
30
|
const env = { ...process.env };
|
|
30
31
|
delete env[WAKE_CONTEXT_ENV];
|
|
31
32
|
delete env[MODEL_ENV];
|
|
32
|
-
const invocation = mode === 'llm' ? llmExecution(kind, instruction,
|
|
33
|
+
const invocation = mode === 'llm' ? llmExecution(kind, instruction, effectiveModel) : agentExecution(kind, instruction, effectiveModel);
|
|
33
34
|
if (wakeContext !== undefined) {
|
|
34
35
|
try {
|
|
35
36
|
env[WAKE_CONTEXT_ENV] = JSON.stringify(wakeContext);
|
|
@@ -47,7 +48,7 @@ export async function runAgentCli(cli, instruction, wakeContext, model, wrapperL
|
|
|
47
48
|
// Structured provider output carries the authoritative token counts.
|
|
48
49
|
const args = [...invocation.args];
|
|
49
50
|
args.splice(args.length - 1, 0, ...(kind === 'claude' ? ['--output-format', 'json'] : ['--json']));
|
|
50
|
-
return requirePricedUsage(decodeProviderResult(await spawnInvocation(cli, { ...invocation, args }, env, signal, sidechannel, cwd), kind),
|
|
51
|
+
return requirePricedUsage(decodeProviderResult(await spawnInvocation(cli, { ...invocation, args }, env, signal, sidechannel, cwd), kind), effectiveModel);
|
|
51
52
|
}
|
|
52
53
|
/** Wait under the same worker lease for an authoritative task receipt. */
|
|
53
54
|
async function runViaAgentRelay(kind, instruction, wakeContext, model, context, worker_cwd, signal) {
|
package/dist/worker-cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-cli.js","sourceRoot":"","sources":["../src/worker-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAClG,OAAO,EAAE,eAAe,EAA2B,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EACL,cAAc,EACd,YAAY,EACZ,cAAc,
|
|
1
|
+
{"version":3,"file":"worker-cli.js","sourceRoot":"","sources":["../src/worker-cli.ts"],"names":[],"mappings":"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"}
|
package/dist/worker-spend.d.ts
CHANGED
|
@@ -4,9 +4,10 @@ import type { WorkerCliResult } from './worker-cli.js';
|
|
|
4
4
|
* (non-integer or negative) are the one remaining failure mode — those are
|
|
5
5
|
* journaled as `worker_error` with the usage projected from clamped counts.
|
|
6
6
|
*
|
|
7
|
-
* Unpriced models are NOT a failure here:
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* Unpriced models are NOT a failure here: the step journals zero dollars, so it
|
|
8
|
+
* never trips a dollar budget, but its reported tokens still count toward any
|
|
9
|
+
* token budget. Preflight (see `budgetDiagnostics`) warns that such a step is
|
|
10
|
+
* unmetered for dollars.
|
|
10
11
|
*/
|
|
11
12
|
export declare function workerSpend(result: WorkerCliResult, model?: string): {
|
|
12
13
|
result: WorkerCliResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-spend.d.ts","sourceRoot":"","sources":["../src/worker-spend.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-spend.d.ts","sourceRoot":"","sources":["../src/worker-spend.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAQvD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM;;;;;;;EAclE"}
|
package/dist/worker-spend.js
CHANGED
|
@@ -1,16 +1,25 @@
|
|
|
1
1
|
import { pricedUsage } from './model-pricing.js';
|
|
2
|
+
/** Zero-dollar usage for an unpriced step, only when the CLI reported tokens. */
|
|
3
|
+
function unmeteredUsage(input, output) {
|
|
4
|
+
if (input === undefined || output === undefined)
|
|
5
|
+
return undefined;
|
|
6
|
+
return { tokens_in: input, tokens_out: output, dollars: '0.000000' };
|
|
7
|
+
}
|
|
2
8
|
/**
|
|
3
9
|
* Attach token/dollar usage to a worker's CLI result. Invalid token counts
|
|
4
10
|
* (non-integer or negative) are the one remaining failure mode — those are
|
|
5
11
|
* journaled as `worker_error` with the usage projected from clamped counts.
|
|
6
12
|
*
|
|
7
|
-
* Unpriced models are NOT a failure here:
|
|
8
|
-
*
|
|
9
|
-
*
|
|
13
|
+
* Unpriced models are NOT a failure here: the step journals zero dollars, so it
|
|
14
|
+
* never trips a dollar budget, but its reported tokens still count toward any
|
|
15
|
+
* token budget. Preflight (see `budgetDiagnostics`) warns that such a step is
|
|
16
|
+
* unmetered for dollars.
|
|
10
17
|
*/
|
|
11
18
|
export function workerSpend(result, model) {
|
|
12
19
|
try {
|
|
13
|
-
|
|
20
|
+
const usage = pricedUsage(model, result.tokens_input, result.tokens_output)
|
|
21
|
+
?? unmeteredUsage(result.tokens_input, result.tokens_output);
|
|
22
|
+
return { result, usage };
|
|
14
23
|
}
|
|
15
24
|
catch (error) {
|
|
16
25
|
return {
|
package/dist/worker-spend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-spend.js","sourceRoot":"","sources":["../src/worker-spend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD
|
|
1
|
+
{"version":3,"file":"worker-spend.js","sourceRoot":"","sources":["../src/worker-spend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,iFAAiF;AACjF,SAAS,cAAc,CAAC,KAAyB,EAAE,MAA0B;IAC3E,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAClE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACvE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,MAAuB,EAAE,KAAc;IACjE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC;eACtE,cAAc,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QAC/D,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,EAAE,CAAC;QACb,OAAO;YACL,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,EAAE;YACnH,KAAK,EAAE,WAAW,CAAC,SAAS,EAC1B,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,YAAa,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAChG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,aAAc,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;SACvG,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/dist/worker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,IAAI,EAAqB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,IAAI,EAAqB,MAAM,eAAe,CAAC;AAS7D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAMzC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiC;gBAGvC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,kBAAkB;IAKxC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB7B;;;;;;;;OAQG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAQzB;YAEY,OAAO;CA0DtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAa9E"}
|
package/dist/worker.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { workerSpend } from './worker-spend.js';
|
|
2
2
|
import { EventEmitter } from 'node:events';
|
|
3
3
|
import { runAgentCli } from './worker-cli.js';
|
|
4
|
+
import { resolveCliModel } from './cli-adapter.js';
|
|
4
5
|
import { withWorkerLease } from './worker-lease.js';
|
|
5
6
|
import { workerInstruction } from './worker-input.js';
|
|
6
7
|
import { helperCall } from './yaml-helpers.js';
|
|
@@ -89,14 +90,15 @@ export class AgentWorker extends EventEmitter {
|
|
|
89
90
|
return;
|
|
90
91
|
}
|
|
91
92
|
let humanIntervention = false;
|
|
93
|
+
const effectiveModel = typeof spec.cli === 'string' ? resolveCliModel(spec.cli, spec.model) : spec.model;
|
|
92
94
|
const completed = await withWorkerLease(this.client, dispatch, signal => typeof spec.cli === 'string' && typeof spec.instruction === 'string'
|
|
93
|
-
? runAgentCli(spec.cli, workerInstruction(spec.instruction, dispatch), dispatch.wake_context,
|
|
95
|
+
? runAgentCli(spec.cli, workerInstruction(spec.instruction, dispatch), dispatch.wake_context, effectiveModel, undefined, signal, 'agent', this.options.dataDir === undefined ? undefined : {
|
|
94
96
|
dataDir: this.options.dataDir, runId: dispatch.run_id, stepId: dispatch.step_id,
|
|
95
97
|
onReady: this.options.onPtyReady, onDrive: () => { humanIntervention = true; },
|
|
96
98
|
}, typeof spec.cwd === 'string' ? spec.cwd : undefined, spec.transport === 'relay' ? 'relay' : 'direct', { runId: dispatch.run_id, stepId: dispatch.step_id, idempotencyKey: dispatch.idempotency_key,
|
|
97
99
|
dataDir: this.options.dataDir, resultSchema: spec.verification?.json_schema })
|
|
98
100
|
: Promise.resolve({ exit_code: null, stdout_tail: '', stderr_tail: 'agent step has no declared CLI' }));
|
|
99
|
-
const { result, usage } = workerSpend(completed,
|
|
101
|
+
const { result, usage } = workerSpend(completed, effectiveModel);
|
|
100
102
|
const completionReason = result.exit_code === 0 ? 'success' : 'worker_error';
|
|
101
103
|
// Output shape: if the CLI's stdout parses as JSON, promote THAT
|
|
102
104
|
// as the step's `output` value so `json_schema` verification
|
package/dist/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@relayflows/sdk",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.12",
|
|
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",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
46
46
|
"@relayfile/adapter-core": "0.5.24",
|
|
47
47
|
"@relayfile/relay-helpers": "0.4.11",
|
|
48
|
-
"@relayflows/surface": "2.0.
|
|
48
|
+
"@relayflows/surface": "2.0.12",
|
|
49
49
|
"@types/js-yaml": "^4.0.9",
|
|
50
50
|
"ai-hist": "0.4.1",
|
|
51
51
|
"ajv": "^8.17.1",
|
package/src/adapters/base.ts
CHANGED
|
@@ -32,6 +32,13 @@ export interface HeadlessAdapter {
|
|
|
32
32
|
/** Identity of this adapter — matches CliAdapterKind for registry keys. */
|
|
33
33
|
readonly kind: string;
|
|
34
34
|
|
|
35
|
+
/**
|
|
36
|
+
* Stable model used only when neither the step nor its selected named agent
|
|
37
|
+
* declares one. Explicit authoring always wins. A default without an entry
|
|
38
|
+
* in MODEL_PRICING runs unmetered under a dollar budget (a warning).
|
|
39
|
+
*/
|
|
40
|
+
readonly defaultModel?: string;
|
|
41
|
+
|
|
35
42
|
/** Shape-check invocation before classifying an auth failure. */
|
|
36
43
|
buildIdentification(): CliAdapterIdentification;
|
|
37
44
|
|
package/src/adapters/claude.ts
CHANGED
|
@@ -10,6 +10,7 @@ const MODEL_PROBE_PROMPT = 'Reply with exactly RELAYFLOWS_MODEL_READY and nothin
|
|
|
10
10
|
* pre-#141 inline shape in `cli-adapter.ts` — only the packaging changed. */
|
|
11
11
|
export const claudeAdapter: HeadlessAdapter = {
|
|
12
12
|
kind: 'claude',
|
|
13
|
+
defaultModel: 'claude-opus-5',
|
|
13
14
|
|
|
14
15
|
buildIdentification(): CliAdapterIdentification {
|
|
15
16
|
return { invocation: { args: ['auth', 'status', '--help'], timeoutMs: 10_000 } };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
|
|
3
|
+
/** Stable retry identity for one operation in one durable authored root. */
|
|
4
|
+
export function authoredChildAdmissionKey(
|
|
5
|
+
rootRunId: string | undefined,
|
|
6
|
+
stepId: string,
|
|
7
|
+
): string | undefined {
|
|
8
|
+
if (rootRunId === undefined) return undefined;
|
|
9
|
+
return `authored-child:${createHash('sha256').update(`${rootRunId}\0${stepId}`).digest('hex')}`;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** Stable local worker surface for retries of one caller-owned root start. */
|
|
13
|
+
export function authoredLocalAgentStream(admissionIdentity: string): string {
|
|
14
|
+
return `local-agent-${createHash('sha256')
|
|
15
|
+
.update(`authored-root-worker\0${admissionIdentity}`)
|
|
16
|
+
.digest('hex')}`;
|
|
17
|
+
}
|
package/src/authored-budget.ts
CHANGED
|
@@ -20,8 +20,9 @@ export class AuthoredBudget {
|
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
async execute<T>(journal: JournalClient, spec: KernelRunSpec,
|
|
24
|
-
|
|
23
|
+
async execute<T>(journal: JournalClient, spec: KernelRunSpec,
|
|
24
|
+
consume: (outcome: RunOutcome) => Promise<T>, admissionKey?: string): Promise<T> {
|
|
25
|
+
if (this.limit === undefined) return consume(await journal.runStart(spec, undefined, admissionKey));
|
|
25
26
|
const previous = this.tail;
|
|
26
27
|
let release!: () => void;
|
|
27
28
|
this.tail = new Promise<void>(resolve => { release = resolve; });
|
|
@@ -38,7 +39,7 @@ export class AuthoredBudget {
|
|
|
38
39
|
tokens_in: exactNumber(total.input), tokens_out: exactNumber(total.output),
|
|
39
40
|
dollars: `${total.micro / 1_000_000n}.${String(total.micro % 1_000_000n).padStart(6, '0')}`,
|
|
40
41
|
wallclock_ms: exactNumber(total.ms), ...(this.limit.window === 'day' && day !== undefined ? { day } : {}),
|
|
41
|
-
} } });
|
|
42
|
+
} } }, undefined, admissionKey);
|
|
42
43
|
try {
|
|
43
44
|
if (outcome.completion_reason === 'budget_exceeded') throw new AuthoredFlowExecutionError('step_failed', 'Flow budget exceeded before the next step.', 'budget_exceeded', outcome.run_id);
|
|
44
45
|
return await consume(outcome);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { assertAuthoredPromiseHooks } from './authored-runtime-capability.js';
|
|
1
2
|
import { pluginHelpers } from './plugin-loader.js';
|
|
2
3
|
import { runPluginEffect } from './authored-plugin-effect.js';
|
|
3
4
|
import { randomUUID } from 'node:crypto';
|
|
@@ -71,7 +72,16 @@ export interface AuthoredFlowJournalStep {
|
|
|
71
72
|
readonly completionReason: ProtocolCompletionReason;
|
|
72
73
|
}
|
|
73
74
|
|
|
75
|
+
export interface AuthoredExecutionRuntime {
|
|
76
|
+
readonly kind: 'node';
|
|
77
|
+
readonly version: string;
|
|
78
|
+
readonly executableSha256: string;
|
|
79
|
+
readonly payloadSha256: string;
|
|
80
|
+
}
|
|
81
|
+
|
|
74
82
|
export interface AuthoredFlowExecutionResult {
|
|
83
|
+
readonly executionRuntime?: AuthoredExecutionRuntime;
|
|
84
|
+
readonly rootRunId?: string;
|
|
75
85
|
readonly name: string;
|
|
76
86
|
readonly completionReason: FlowCompletionReason;
|
|
77
87
|
readonly journalSteps: readonly AuthoredFlowJournalStep[];
|
|
@@ -122,6 +132,8 @@ export interface ExecuteAuthoredFlowOptions {
|
|
|
122
132
|
readonly onWait?: RunLifecycleOptions['onWait'];
|
|
123
133
|
readonly onProgress?: (event: ProgressEvent) => void;
|
|
124
134
|
readonly localAgentStream?: string;
|
|
135
|
+
/** Durable kernel root that owns this body's child admission identities. */
|
|
136
|
+
readonly rootRunId?: string;
|
|
125
137
|
}
|
|
126
138
|
|
|
127
139
|
export async function executeAuthoredFlow<Input = undefined>(
|
|
@@ -130,6 +142,7 @@ export async function executeAuthoredFlow<Input = undefined>(
|
|
|
130
142
|
input?: Input,
|
|
131
143
|
options: ExecuteAuthoredFlowOptions = {},
|
|
132
144
|
): Promise<AuthoredFlowExecutionResult> {
|
|
145
|
+
assertAuthoredPromiseHooks();
|
|
133
146
|
const getDefinition = options.getDefinition ?? getAuthoredFlowDefinition;
|
|
134
147
|
const localAgentStream = options.localAgentStream;
|
|
135
148
|
const onProgress = options.onProgress;
|
|
@@ -173,9 +186,14 @@ export async function executeAuthoredFlow<Input = undefined>(
|
|
|
173
186
|
let nextStep = 1;
|
|
174
187
|
let requestedCompletion: FlowCompletionReason | undefined;
|
|
175
188
|
|
|
176
|
-
const lowerDeterministic = authoredDeterministicRunner(
|
|
189
|
+
const lowerDeterministic = authoredDeterministicRunner(
|
|
190
|
+
definition.name, journal, journalSteps, budget, options.rootRunId,
|
|
191
|
+
);
|
|
177
192
|
|
|
178
|
-
const worker = authoredWorkerRunner(
|
|
193
|
+
const worker = authoredWorkerRunner(
|
|
194
|
+
definition, journal, flowPath, journalSteps, waitOptions,
|
|
195
|
+
localAgentStream, budget, definition.header.budget, options.rootRunId,
|
|
196
|
+
);
|
|
179
197
|
|
|
180
198
|
function llmOperation(strings: TemplateStringsArray, ...values: unknown[]): Step<string>;
|
|
181
199
|
function llmOperation(prompt: string, options: LlmOptions): Step<unknown>;
|
|
@@ -205,7 +223,7 @@ export async function executeAuthoredFlow<Input = undefined>(
|
|
|
205
223
|
return trackStep(authoredSteps, llmOp);
|
|
206
224
|
}
|
|
207
225
|
|
|
208
|
-
const slackRun = randomUUID();
|
|
226
|
+
const slackRun = options.rootRunId ?? randomUUID();
|
|
209
227
|
function slackOperation<T>(call: SlackCall): Step<T> {
|
|
210
228
|
assertOperationAllowed(`slack.${call.verb}`, definition.name, requestedCompletion);
|
|
211
229
|
const snapshot = snapshotJsonValue(call, 'f.slack call') as unknown as SlackCall;
|
|
@@ -215,7 +233,7 @@ export async function executeAuthoredFlow<Input = undefined>(
|
|
|
215
233
|
() => assertOperationAllowed(`slack.${call.verb}`, definition.name, requestedCompletion),
|
|
216
234
|
async () => {
|
|
217
235
|
const receipt = await runHelperEffect(journal, definition.name, id, snapshot,
|
|
218
|
-
options.dataDir ?? dirname(journal.socketPath), journalSteps);
|
|
236
|
+
options.dataDir ?? dirname(journal.socketPath), journalSteps, options.rootRunId);
|
|
219
237
|
return (call.verb === 'react' ? undefined : receipt) as T;
|
|
220
238
|
},
|
|
221
239
|
lifecycle,
|
|
@@ -231,7 +249,7 @@ export async function executeAuthoredFlow<Input = undefined>(
|
|
|
231
249
|
return trackStep(authoredSteps, new AuthoredFlowOperation<T>(id, verb,
|
|
232
250
|
() => assertOperationAllowed(verb, definition.name, requestedCompletion),
|
|
233
251
|
async () => await runHelperEffect(journal, definition.name, id, snapshot,
|
|
234
|
-
options.dataDir ?? dirname(journal.socketPath), journalSteps) as T,
|
|
252
|
+
options.dataDir ?? dirname(journal.socketPath), journalSteps, options.rootRunId) as T,
|
|
235
253
|
lifecycle));
|
|
236
254
|
}),
|
|
237
255
|
slack: {
|
|
@@ -247,7 +265,7 @@ export async function executeAuthoredFlow<Input = undefined>(
|
|
|
247
265
|
id, 'mcp',
|
|
248
266
|
() => assertOperationAllowed('mcp', definition.name, requestedCompletion),
|
|
249
267
|
() => runMcpEffect(journal, definition.name, id, server, tool, args,
|
|
250
|
-
known, checkedMcp.servers[server]!, journalSteps),
|
|
268
|
+
known, checkedMcp.servers[server]!, journalSteps, options.rootRunId),
|
|
251
269
|
lifecycle,
|
|
252
270
|
));
|
|
253
271
|
}),
|
|
@@ -327,7 +345,8 @@ export async function executeAuthoredFlow<Input = undefined>(
|
|
|
327
345
|
const id = `plugin-${nextStep++}`;
|
|
328
346
|
return trackStep(authoredSteps, new AuthoredFlowOperation(
|
|
329
347
|
id, label, () => assertOperationAllowed(label, definition.name, requestedCompletion),
|
|
330
|
-
() => runPluginEffect(journal, definition.name, id, plugin, verb, args,
|
|
348
|
+
() => runPluginEffect(journal, definition.name, id, plugin, verb, args,
|
|
349
|
+
journalSteps, budget, options.rootRunId),
|
|
331
350
|
lifecycle,
|
|
332
351
|
));
|
|
333
352
|
}));
|
|
@@ -387,6 +406,7 @@ export async function executeAuthoredFlow<Input = undefined>(
|
|
|
387
406
|
await lowerDeterministic(`complete-${nextStep}`, requestedCompletion === 'needs_human'
|
|
388
407
|
? `printf '%s' '{"completionReason":"needs_human"}'` : ':', true);
|
|
389
408
|
return Object.freeze({
|
|
409
|
+
...(options.rootRunId === undefined ? {} : { rootRunId: options.rootRunId }),
|
|
390
410
|
name: definition.name,
|
|
391
411
|
completionReason: requestedCompletion,
|
|
392
412
|
journalSteps: Object.freeze([...journalSteps]),
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { accessSync, constants, realpathSync } from 'node:fs';
|
|
1
|
+
import { accessSync, constants, existsSync, realpathSync } from 'node:fs';
|
|
2
|
+
import { readFile, readdir } from 'node:fs/promises';
|
|
3
|
+
import { createHash } from 'node:crypto';
|
|
2
4
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { dirname, resolve } from 'node:path';
|
|
5
|
+
import { dirname, join, relative, resolve, sep } from 'node:path';
|
|
4
6
|
import { pathToFileURL } from 'node:url';
|
|
5
7
|
import {
|
|
6
8
|
getAuthoredFlowDefinition,
|
|
@@ -18,7 +20,15 @@ export class AuthoredFlowLoadError extends Error {
|
|
|
18
20
|
/** Same signature as `getAuthoredFlowDefinition`, resolved from wherever a flow was loaded. */
|
|
19
21
|
export type GetFlowDefinition = <Input = unknown>(handle: FlowHandle) => AuthoredFlowDefinition<Input>;
|
|
20
22
|
|
|
23
|
+
export interface SurfaceModuleAuthority {
|
|
24
|
+
readonly packageName: '@relayflows/surface';
|
|
25
|
+
readonly version: string;
|
|
26
|
+
readonly packageSha256: string;
|
|
27
|
+
readonly runtimeSha256: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
21
30
|
export interface LoadedAuthoredFlow {
|
|
31
|
+
readonly sourcePath: string;
|
|
22
32
|
readonly handle: FlowHandle;
|
|
23
33
|
/**
|
|
24
34
|
* Bound to the SAME `@relayflows/surface` module instance the flow file
|
|
@@ -28,6 +38,8 @@ export interface LoadedAuthoredFlow {
|
|
|
28
38
|
* `getAuthoredFlowDefinition` import.
|
|
29
39
|
*/
|
|
30
40
|
readonly getDefinition: GetFlowDefinition;
|
|
41
|
+
/** Exact Surface package/runtime that owns the handle's WeakMap identity. */
|
|
42
|
+
readonly surfaceAuthority: SurfaceModuleAuthority;
|
|
31
43
|
/** Dependency-first load order, each canonical absolute path appearing once. */
|
|
32
44
|
readonly graph: readonly LoadedAuthoredFlowNode[];
|
|
33
45
|
}
|
|
@@ -36,6 +48,7 @@ export interface LoadedAuthoredFlowNode {
|
|
|
36
48
|
readonly path: string;
|
|
37
49
|
readonly handle: FlowHandle;
|
|
38
50
|
readonly getDefinition: GetFlowDefinition;
|
|
51
|
+
readonly surfaceAuthority: SurfaceModuleAuthority;
|
|
39
52
|
readonly use: readonly string[];
|
|
40
53
|
}
|
|
41
54
|
|
|
@@ -58,7 +71,7 @@ export async function loadAuthoredFlow(path: string): Promise<LoadedAuthoredFlow
|
|
|
58
71
|
if (cached !== undefined) return cached;
|
|
59
72
|
visiting.add(absolutePath);
|
|
60
73
|
try {
|
|
61
|
-
const { handle, getDefinition } = await importAuthoredFlow(absolutePath);
|
|
74
|
+
const { handle, getDefinition, surfaceAuthority } = await importAuthoredFlow(absolutePath);
|
|
62
75
|
const dependencies: string[] = [];
|
|
63
76
|
for (const entry of getDefinition(handle).header.use ?? []) {
|
|
64
77
|
// Validate again at the SDK boundary: the author's surface package may
|
|
@@ -72,7 +85,7 @@ export async function loadAuthoredFlow(path: string): Promise<LoadedAuthoredFlow
|
|
|
72
85
|
}
|
|
73
86
|
dependencies.push(child.path);
|
|
74
87
|
}
|
|
75
|
-
const node = Object.freeze({ path: absolutePath, handle, getDefinition, use: Object.freeze(dependencies) });
|
|
88
|
+
const node = Object.freeze({ path: absolutePath, handle, getDefinition, surfaceAuthority, use: Object.freeze(dependencies) });
|
|
76
89
|
loaded.set(absolutePath, node);
|
|
77
90
|
return node;
|
|
78
91
|
} catch (error) {
|
|
@@ -85,10 +98,11 @@ export async function loadAuthoredFlow(path: string): Promise<LoadedAuthoredFlow
|
|
|
85
98
|
}
|
|
86
99
|
}
|
|
87
100
|
const root = await visit(resolve(path), true);
|
|
88
|
-
return Object.freeze({ handle: root.handle, getDefinition: root.getDefinition,
|
|
101
|
+
return Object.freeze({ sourcePath: root.path, handle: root.handle, getDefinition: root.getDefinition,
|
|
102
|
+
surfaceAuthority: root.surfaceAuthority, graph: Object.freeze([...loaded.values()]) });
|
|
89
103
|
}
|
|
90
104
|
|
|
91
|
-
async function importAuthoredFlow(path: string): Promise<Pick<LoadedAuthoredFlow, 'handle' | 'getDefinition'>> {
|
|
105
|
+
async function importAuthoredFlow(path: string): Promise<Pick<LoadedAuthoredFlow, 'handle' | 'getDefinition' | 'surfaceAuthority'>> {
|
|
92
106
|
const absolutePath = resolve(path);
|
|
93
107
|
try {
|
|
94
108
|
accessSync(absolutePath, constants.R_OK);
|
|
@@ -98,14 +112,14 @@ async function importAuthoredFlow(path: string): Promise<Pick<LoadedAuthoredFlow
|
|
|
98
112
|
|
|
99
113
|
let authoredModule: Record<string, unknown>;
|
|
100
114
|
try {
|
|
101
|
-
authoredModule = await import(pathToFileURL(absolutePath).href) as Record<string, unknown>;
|
|
115
|
+
authoredModule = await import(/* @vite-ignore */ pathToFileURL(absolutePath).href) as Record<string, unknown>;
|
|
102
116
|
} catch (error) {
|
|
103
117
|
throw new AuthoredFlowLoadError(
|
|
104
118
|
`Flow "${path}" could not be imported: ${errorMessage(error)}`,
|
|
105
119
|
);
|
|
106
120
|
}
|
|
107
121
|
|
|
108
|
-
const getDefinition = await
|
|
122
|
+
const { getDefinition, surfaceAuthority } = await resolveSurfaceRuntime(absolutePath, path);
|
|
109
123
|
const handle = authoredModule['default'] as FlowHandle;
|
|
110
124
|
try {
|
|
111
125
|
getDefinition(handle);
|
|
@@ -114,7 +128,7 @@ async function importAuthoredFlow(path: string): Promise<Pick<LoadedAuthoredFlow
|
|
|
114
128
|
`Flow "${path}" must default-export flow(...): ${errorMessage(error)}`,
|
|
115
129
|
);
|
|
116
130
|
}
|
|
117
|
-
return { handle, getDefinition };
|
|
131
|
+
return { handle, getDefinition, surfaceAuthority };
|
|
118
132
|
}
|
|
119
133
|
|
|
120
134
|
/**
|
|
@@ -138,21 +152,27 @@ async function importAuthoredFlow(path: string): Promise<Pick<LoadedAuthoredFlow
|
|
|
138
152
|
* compatible `@relayflows/surface` is provably resolvable from this same
|
|
139
153
|
* anchor.
|
|
140
154
|
*/
|
|
141
|
-
async function
|
|
155
|
+
async function resolveSurfaceRuntime(
|
|
142
156
|
absolutePath: string,
|
|
143
157
|
displayPath: string,
|
|
144
|
-
): Promise<GetFlowDefinition> {
|
|
158
|
+
): Promise<{ getDefinition: GetFlowDefinition; surfaceAuthority: SurfaceModuleAuthority }> {
|
|
145
159
|
const require = createRequire(pathToFileURL(absolutePath));
|
|
146
160
|
let resolvedRuntimePath: string;
|
|
147
161
|
try {
|
|
148
162
|
resolvedRuntimePath = require.resolve('@relayflows/surface/runtime');
|
|
163
|
+
// Some ESM test/load hooks return a percent-encoded absolute path without
|
|
164
|
+
// a file: scheme. Normalize it only when the literal path does not exist.
|
|
165
|
+
if (!existsSync(resolvedRuntimePath) && resolvedRuntimePath.includes('%')) {
|
|
166
|
+
const decoded = decodeURI(resolvedRuntimePath);
|
|
167
|
+
if (existsSync(decoded)) resolvedRuntimePath = decoded;
|
|
168
|
+
}
|
|
149
169
|
} catch (error) {
|
|
150
170
|
throw new AuthoredFlowLoadError(
|
|
151
171
|
`Flow "${displayPath}" imports @relayflows/surface, but @relayflows/surface/runtime `
|
|
152
172
|
+ `could not be resolved from the same location: ${errorMessage(error)}`,
|
|
153
173
|
);
|
|
154
174
|
}
|
|
155
|
-
const runtimeModule = await import(
|
|
175
|
+
const runtimeModule = await import(/* @vite-ignore */ resolvedRuntimePath) as {
|
|
156
176
|
getFlowDefinition?: unknown;
|
|
157
177
|
};
|
|
158
178
|
if (typeof runtimeModule.getFlowDefinition !== 'function') {
|
|
@@ -161,7 +181,70 @@ async function resolveGetFlowDefinition(
|
|
|
161
181
|
+ 'does not export getFlowDefinition — check its @relayflows/surface version.',
|
|
162
182
|
);
|
|
163
183
|
}
|
|
164
|
-
|
|
184
|
+
let packagePath = dirname(resolvedRuntimePath);
|
|
185
|
+
for (;;) {
|
|
186
|
+
const candidate = resolve(packagePath, 'package.json');
|
|
187
|
+
try {
|
|
188
|
+
const packageBytes = await readFile(candidate);
|
|
189
|
+
const manifest = JSON.parse(packageBytes.toString('utf8')) as { name?: unknown; version?: unknown };
|
|
190
|
+
if (manifest.name === '@relayflows/surface') {
|
|
191
|
+
if (typeof manifest.version !== 'string' || manifest.version.length === 0) {
|
|
192
|
+
throw new AuthoredFlowLoadError(`Flow "${displayPath}": @relayflows/surface has no pinned package version.`);
|
|
193
|
+
}
|
|
194
|
+
const runtimeBytes = await readFile(resolvedRuntimePath);
|
|
195
|
+
return {
|
|
196
|
+
getDefinition: runtimeModule.getFlowDefinition as GetFlowDefinition,
|
|
197
|
+
surfaceAuthority: Object.freeze({
|
|
198
|
+
packageName: '@relayflows/surface', version: manifest.version,
|
|
199
|
+
packageSha256: await packageTreeSha256(packagePath),
|
|
200
|
+
runtimeSha256: createHash('sha256').update(runtimeBytes).digest('hex'),
|
|
201
|
+
}),
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
} catch (error) {
|
|
205
|
+
if (!(error instanceof SyntaxError) && (error as NodeJS.ErrnoException).code !== 'ENOENT') throw error;
|
|
206
|
+
}
|
|
207
|
+
const parent = dirname(packagePath);
|
|
208
|
+
if (parent === packagePath) break;
|
|
209
|
+
packagePath = parent;
|
|
210
|
+
}
|
|
211
|
+
throw new AuthoredFlowLoadError(
|
|
212
|
+
`Flow "${displayPath}": the resolved @relayflows/surface/runtime is not inside its declared package.`,
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Hash the exact installed Surface package payload, including path boundaries.
|
|
218
|
+
*
|
|
219
|
+
* npm may materialize a package-local node_modules tree for workspace and
|
|
220
|
+
* file: dependencies. That tree is installation state, not part of the
|
|
221
|
+
* published Surface package, and can contain platform-specific .bin symlinks.
|
|
222
|
+
* Keep it outside the authority boundary while pinning every package payload
|
|
223
|
+
* file, including the runtime module hashed separately by the caller.
|
|
224
|
+
*/
|
|
225
|
+
export async function packageTreeSha256(root: string): Promise<string> {
|
|
226
|
+
const files: string[] = [];
|
|
227
|
+
async function visit(directory: string): Promise<void> {
|
|
228
|
+
const entries = await readdir(directory, { withFileTypes: true });
|
|
229
|
+
entries.sort((a, b) => a.name.localeCompare(b.name));
|
|
230
|
+
for (const entry of entries) {
|
|
231
|
+
if (directory === root && entry.name === 'node_modules') continue;
|
|
232
|
+
const path = join(directory, entry.name);
|
|
233
|
+
if (entry.isDirectory()) await visit(path);
|
|
234
|
+
else if (entry.isFile()) files.push(path);
|
|
235
|
+
else throw new AuthoredFlowLoadError(
|
|
236
|
+
`@relayflows/surface package contains unsupported entry "${relative(root, path)}".`,
|
|
237
|
+
);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
await visit(root);
|
|
241
|
+
const hash = createHash('sha256');
|
|
242
|
+
for (const path of files) {
|
|
243
|
+
const bytes = await readFile(path);
|
|
244
|
+
const name = relative(root, path).split(sep).join('/');
|
|
245
|
+
hash.update(name).update('\0').update(String(bytes.length)).update('\0').update(bytes);
|
|
246
|
+
}
|
|
247
|
+
return hash.digest('hex');
|
|
165
248
|
}
|
|
166
249
|
|
|
167
250
|
// Exported for callers (internal SDK tests, and any co-located flow that is
|