@acpus/runtime 0.6.6 → 0.7.1
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/artifacts.d.ts.map +1 -1
- package/dist/artifacts.js +6 -3
- package/dist/artifacts.js.map +1 -1
- package/dist/fork.d.ts.map +1 -1
- package/dist/fork.js +35 -6
- package/dist/fork.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interpreter.d.ts +2 -2
- package/dist/interpreter.d.ts.map +1 -1
- package/dist/interpreter.js +49 -25
- package/dist/interpreter.js.map +1 -1
- package/dist/keys.d.ts +2 -14
- package/dist/keys.d.ts.map +1 -1
- package/dist/keys.js +12 -17
- package/dist/keys.js.map +1 -1
- package/dist/run-id.d.ts +3 -0
- package/dist/run-id.d.ts.map +1 -0
- package/dist/run-id.js +10 -0
- package/dist/run-id.js.map +1 -0
- package/dist/store.d.ts +12 -2
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +72 -40
- package/dist/store.js.map +1 -1
- package/dist/supervisor-app.d.ts.map +1 -1
- package/dist/supervisor-app.js +2 -3
- package/dist/supervisor-app.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/artifacts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,kBAAkB;IAC7B,IAAI,QAAQ,MAAM,WAAW,MAAM,YAAY,MAAM,GAAG,WAAW;IAQnE,KAAK,MAAM,MAAM,GAAG,uBAAuB;IA2B3C,QAAQ,MAAM,MAAM,GAAG,uBAAuB,GAAG,SAAS;IAQ1D,YAAY,MAAM,MAAM,aAAa,MAAM,WAAW,MAAM,GAAG,MAAM;IAMrE,WAAW,UAAU,MAAM,OAAO,MAAM,iBAAiB,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,GAAG,SAAS;CAmBzG,CAAC;AAEF;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,YAAY,OAAO,CAAC,EAAE,MAAM,EAE3B;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,CAW7F;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAMpE;IAED,qEAAqE;IACrE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,CAM9F;IAED,qCAAqC;IACrC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI7D;IAED,yCAAyC;IACzC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAOlD;IAED,iDAAiD;IACjD,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAGzC;IAID,OAAO,CAAC,OAAO;CAKhB"}
|
package/dist/artifacts.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { appendFileSync, existsSync, mkdirSync, readdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join, resolve } from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { nodeKeyToStorageKey } from "./keys.js";
|
|
4
|
+
import { validateRunId } from "./run-id.js";
|
|
4
5
|
const ARTIFACT_URI_PREFIX = "artifact://runs/";
|
|
5
6
|
export const ArtifactReferences = {
|
|
6
7
|
make(runId, nodeKey, filename) {
|
|
8
|
+
validateRunId(runId);
|
|
7
9
|
validateArtifactFilename(filename);
|
|
8
10
|
const encodedNodeKey = encodeURIComponent(nodeKey);
|
|
9
11
|
const uri = `${ARTIFACT_URI_PREFIX}${runId}/nodes/${encodedNodeKey}/${filename}`;
|
|
@@ -58,7 +60,7 @@ export const ArtifactReferences = {
|
|
|
58
60
|
catch {
|
|
59
61
|
return undefined;
|
|
60
62
|
}
|
|
61
|
-
const safeNodeDir =
|
|
63
|
+
const safeNodeDir = nodeKeyToStorageKey(ref.nodeKey);
|
|
62
64
|
if (!isSafeUriPathSegment(safeNodeDir))
|
|
63
65
|
return undefined;
|
|
64
66
|
const runDir = join(baseDir, ref.runId);
|
|
@@ -132,7 +134,8 @@ export class ArtifactStore {
|
|
|
132
134
|
}
|
|
133
135
|
// ─── Internal helpers ──────────────────────────────────────────
|
|
134
136
|
nodeDir(runId, nodeKey) {
|
|
135
|
-
|
|
137
|
+
validateRunId(runId);
|
|
138
|
+
const safeKey = nodeKeyToStorageKey(nodeKey);
|
|
136
139
|
return join(this.baseDir, runId, "artifacts", safeKey);
|
|
137
140
|
}
|
|
138
141
|
}
|
package/dist/artifacts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,UAAU,EACV,aAAa,EACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"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"}
|
package/dist/fork.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fork.d.ts","sourceRoot":"","sources":["../src/fork.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAU,MAAM,aAAa,CAAC;AAEzF,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"fork.d.ts","sourceRoot":"","sources":["../src/fork.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAU,MAAM,aAAa,CAAC;AAEzF,OAAO,KAAK,EAAqC,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAK3C;;;;;;;;;GASG;AACH,MAAM,WAAW,QAAQ;IACvB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,yEAAyE;IACzE,wBAAwB,EAAE,MAAM,CAAC;IACjC,gEAAgE;IAChE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4DAA4D;IAC5D,cAAc,EAAE,cAAc,CAAC;CAChC;AAED,MAAM,MAAM,cAAc,GACtB,eAAe,GACf,qBAAqB,GACrB,eAAe,GACf,eAAe,GACf,mBAAmB,CAAC;AAExB,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,EAAE,EAAE,OAAO,CAAC;IACZ,8CAA8C;IAC9C,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,2BAA4B,SAAQ,oBAAoB;IACvE,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qFAAqF;IACrF,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC5C,sFAAsF;IACtF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sEAAsE;IACtE,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,qDAAqD;IACrD,GAAG,EAAE,QAAQ,CAAC;IACd,6CAA6C;IAC7C,IAAI,EAAE,QAAQ,CAAC;IACf,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAoLD,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,GAAG,QAAQ,CAGtF;AAkBD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,2BAA2B,GACnC,gBAAgB,CA0DlB;AA+CD,qBAAa,SAAU,SAAQ,KAAK;IAClC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF"}
|
package/dist/fork.js
CHANGED
|
@@ -11,7 +11,7 @@ import { buildWorkflowExpressionContext } from "./workflow-context.js";
|
|
|
11
11
|
* (see ADR-0007 / CONTEXT.md `Fork Origin`).
|
|
12
12
|
*
|
|
13
13
|
* Lifts ONLY when the checkpoint's static path resolves to a Node nested
|
|
14
|
-
* inside a Composite body (`parallel`, `fanout`, `loop`, `switch`,
|
|
14
|
+
* inside a Composite body (`parallel`, `fanout`, `if`, `loop`, `switch`,
|
|
15
15
|
* `subworkflow`). Top-level Nodes and Composite Nodes themselves are returned
|
|
16
16
|
* as-is. Unknown Node Keys (boundary "missing-in-new-spec") fall back to the
|
|
17
17
|
* checkpoint key — those will be re-resolved by the operator anyway.
|
|
@@ -39,13 +39,13 @@ function liftOutOfComposite(nodeKey, irIndex) {
|
|
|
39
39
|
return nodeKey;
|
|
40
40
|
}
|
|
41
41
|
function isCompositeKind(kind) {
|
|
42
|
-
return kind === "pipeline" || kind === "parallel" || kind === "fanout" || kind === "switch" || kind === "loop" || kind === "subworkflow";
|
|
42
|
+
return kind === "pipeline" || kind === "parallel" || kind === "fanout" || kind === "if" || kind === "switch" || kind === "loop" || kind === "subworkflow";
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
45
|
* Walk the IR collecting one entry per static Node, keyed by its joined
|
|
46
46
|
* `nodePath`. Composite container Nodes are themselves indexed (so they can
|
|
47
47
|
* appear in the "valid Fork Origin" set when their parent is a pipeline);
|
|
48
|
-
* Nodes nested inside Composite bodies (parallel/fanout/loop/switch) are also
|
|
48
|
+
* Nodes nested inside Composite bodies (parallel/fanout/if/loop/switch) are also
|
|
49
49
|
* indexed but flagged as not eligible for Fork Origin via parentKind.
|
|
50
50
|
*/
|
|
51
51
|
function indexIrNodes(ir) {
|
|
@@ -67,10 +67,11 @@ function indexIrNodes(ir) {
|
|
|
67
67
|
*
|
|
68
68
|
* @param prior prior Run metadata (must be in a terminal state)
|
|
69
69
|
* @param checkpoints prior Run's ordered Run Checkpoints
|
|
70
|
+
* @param priorNodeStates source Run node states, used for control-flow ancestor hashes
|
|
70
71
|
* @param newIr compiled IR of the new (possibly modified) Workflow Spec
|
|
71
72
|
* @param overrideOriginNodeKey optional operator-specified Fork Origin
|
|
72
73
|
*/
|
|
73
|
-
function computeForkPlan(prior, checkpoints, newIr, overrideOriginNodeKey) {
|
|
74
|
+
function computeForkPlan(prior, checkpoints, priorNodeStates, newIr, overrideOriginNodeKey) {
|
|
74
75
|
if (!isRunTerminal(prior.status)) {
|
|
75
76
|
throw new ForkError(`Cannot fork run ${prior.runId}: source Run is in non-terminal state '${prior.status}'`);
|
|
76
77
|
}
|
|
@@ -86,6 +87,12 @@ function computeForkPlan(prior, checkpoints, newIr, overrideOriginNodeKey) {
|
|
|
86
87
|
boundaryReason = "missing-in-new-spec";
|
|
87
88
|
break;
|
|
88
89
|
}
|
|
90
|
+
const changedBranchingAncestor = changedBranchingAncestorNodeKey(checkpoint.nodeKey, irIndex, priorNodeStates, newIr);
|
|
91
|
+
if (changedBranchingAncestor) {
|
|
92
|
+
defaultOrigin = liftOutOfComposite(changedBranchingAncestor, irIndex);
|
|
93
|
+
boundaryReason = "hash-mismatch";
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
89
96
|
if (checkpoint.state !== "completed") {
|
|
90
97
|
defaultOrigin = liftOutOfComposite(checkpoint.nodeKey, irIndex);
|
|
91
98
|
boundaryReason = "non-completed";
|
|
@@ -147,7 +154,7 @@ function computeForkPlan(prior, checkpoints, newIr, overrideOriginNodeKey) {
|
|
|
147
154
|
}
|
|
148
155
|
export function planForkedRun(store, options) {
|
|
149
156
|
const source = readForkSource(store, options.sourceRunId);
|
|
150
|
-
return computeForkPlan(source.prior, source.checkpoints, options.ir, options.overrideOriginNodeKey);
|
|
157
|
+
return computeForkPlan(source.prior, source.checkpoints, source.nodeStates, options.ir, options.overrideOriginNodeKey);
|
|
151
158
|
}
|
|
152
159
|
/**
|
|
153
160
|
* Materialize a Forked Run on disk. The caller is expected to have already
|
|
@@ -237,9 +244,31 @@ function readForkSource(store, sourceRunId) {
|
|
|
237
244
|
}
|
|
238
245
|
return {
|
|
239
246
|
prior,
|
|
240
|
-
checkpoints: store.readCheckpoints(sourceRunId)
|
|
247
|
+
checkpoints: store.readCheckpoints(sourceRunId),
|
|
248
|
+
nodeStates: new Map(store.listNodeStates(sourceRunId).map((state) => [state.nodeKey, state]))
|
|
241
249
|
};
|
|
242
250
|
}
|
|
251
|
+
function changedBranchingAncestorNodeKey(nodeKey, irIndex, priorNodeStates, newIr) {
|
|
252
|
+
const workflow = buildWorkflowExpressionContext(newIr);
|
|
253
|
+
const staticPath = staticNodePathFromKey(nodeKey);
|
|
254
|
+
const segments = staticPath.split("/");
|
|
255
|
+
for (let i = 1; i < segments.length; i++) {
|
|
256
|
+
const ancestorStaticPath = segments.slice(0, i).join("/");
|
|
257
|
+
const ancestor = irIndex.get(ancestorStaticPath)?.node;
|
|
258
|
+
if (ancestor?.kind !== "if" && ancestor?.kind !== "switch")
|
|
259
|
+
continue;
|
|
260
|
+
const ancestorNodeKey = nodeKeyWithSameDynamics(nodeKey, ancestorStaticPath);
|
|
261
|
+
const priorState = priorNodeStates.get(ancestorNodeKey);
|
|
262
|
+
if (priorState?.definitionHash && priorState.definitionHash !== hashIrNode(ancestor, { workflow })) {
|
|
263
|
+
return ancestorNodeKey;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return undefined;
|
|
267
|
+
}
|
|
268
|
+
function nodeKeyWithSameDynamics(nodeKey, staticPath) {
|
|
269
|
+
const dynamicSegments = nodeKey.split("/").filter((segment) => /^(item|lane|round|branch):/u.test(segment));
|
|
270
|
+
return [staticPath, ...dynamicSegments].join("/");
|
|
271
|
+
}
|
|
243
272
|
export class ForkError extends Error {
|
|
244
273
|
constructor(message) {
|
|
245
274
|
super(message);
|
package/dist/fork.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fork.js","sourceRoot":"","sources":["../src/fork.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"fork.js","sourceRoot":"","sources":["../src/fork.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type { NodeState, RunStatus, NodeKeyDynamic, NodeExecutionState, RunState, RunLineage, RunCheckpoint, ExpressionContext, ExecutorResult, ArtifactRef, InterpreterOptions, RunOptions, SupervisorConfig, SupervisorMetadata, SupervisorHealth, StartRunRequest, RunSummary, RunCleanItem, RunCleanResult, ReplayResult, ReplayMismatch, NodeDynamicContext, AgentContextUsage, AgentTokenUsage, AgentAttemptTelemetryState, AgentIoPreview, AgentToolCallTelemetry, AgentToolsTelemetry, AgentAttemptTelemetry, AgentTelemetry } from "./types.js";
|
|
2
2
|
export type { AgentExecutionRequest, BaseExecutionRequest, ExecutorAdapter, ExecutionRequest, ProgramExecutionRequest } from "./executors/types.js";
|
|
3
|
-
export { resolveNodeKey, parseNodeKey, staticNodePathFromKey, isNodeKeyAtOrBelow, isNodeKeyInDynamicScope, isNodeKeyBelowAnyAnchor, withNodeKeyPrefix
|
|
3
|
+
export { resolveNodeKey, parseNodeKey, staticNodePathFromKey, isNodeKeyAtOrBelow, isNodeKeyInDynamicScope, isNodeKeyBelowAnyAnchor, withNodeKeyPrefix } from "./keys.js";
|
|
4
4
|
export type { ParsedNodeKey } from "./keys.js";
|
|
5
5
|
export { ExpressionEvaluator } from "./evaluator.js";
|
|
6
6
|
export { buildCompletedStepContext, evaluateWorkflowOutputs, evaluateOutputObject, evaluateTemplatedValue } from "./workflow-outputs.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,SAAS,EACT,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACf,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,SAAS,EACT,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACf,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAGzI,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACrL,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGlE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnE,YAAY,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAG9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC5E,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAG3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAGtE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3E,YAAY,EACV,QAAQ,EACR,cAAc,EACd,oBAAoB,EACpB,2BAA2B,EAC3B,gBAAgB,EACjB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACvJ,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// ─── Keys ────────────────────────────────────────────────────────
|
|
2
|
-
export { resolveNodeKey, parseNodeKey, staticNodePathFromKey, isNodeKeyAtOrBelow, isNodeKeyInDynamicScope, isNodeKeyBelowAnyAnchor, withNodeKeyPrefix
|
|
2
|
+
export { resolveNodeKey, parseNodeKey, staticNodePathFromKey, isNodeKeyAtOrBelow, isNodeKeyInDynamicScope, isNodeKeyBelowAnyAnchor, withNodeKeyPrefix } from "./keys.js";
|
|
3
3
|
// ─── Evaluator ───────────────────────────────────────────────────
|
|
4
4
|
export { ExpressionEvaluator } from "./evaluator.js";
|
|
5
5
|
export { buildCompletedStepContext, evaluateWorkflowOutputs, evaluateOutputObject, evaluateTemplatedValue } from "./workflow-outputs.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA2CA,oEAAoE;AACpE,OAAO,EACL,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA2CA,oEAAoE;AACpE,OAAO,EACL,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,WAAW,CAAC;AAGnB,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEzI,oEAAoE;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,oEAAoE;AACpE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACrL,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAElE,oEAAoE;AACpE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGnE,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,oEAAoE;AACpE,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE5E,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE3F,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErE,oEAAoE;AACpE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAS3E,oEAAoE;AACpE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAEvJ,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/interpreter.d.ts
CHANGED
|
@@ -33,8 +33,6 @@ export declare class WorkflowInterpreter {
|
|
|
33
33
|
* The resolver validates the payload against the node's output schema and
|
|
34
34
|
* throws on mismatch, leaving the node `awaiting`. */
|
|
35
35
|
private readonly signalResolvers;
|
|
36
|
-
/** Absolute paths of subworkflow specs currently on the execution stack (cycle guard). */
|
|
37
|
-
private readonly subworkflowStack;
|
|
38
36
|
constructor(store: RunStore, agentExecutor: ExecutorAdapter<AgentExecutionRequest>, programExecutor: ExecutorAdapter<ProgramExecutionRequest>, options?: InterpreterOptions);
|
|
39
37
|
/**
|
|
40
38
|
* Start a new workflow run to completion (init + execute). Convenience for
|
|
@@ -122,6 +120,7 @@ export declare class WorkflowInterpreter {
|
|
|
122
120
|
private waitForFanout;
|
|
123
121
|
private materializePendingNode;
|
|
124
122
|
private executeSwitch;
|
|
123
|
+
private executeIf;
|
|
125
124
|
private executeLoop;
|
|
126
125
|
private executeGuard;
|
|
127
126
|
private executeSignal;
|
|
@@ -136,6 +135,7 @@ export declare class WorkflowInterpreter {
|
|
|
136
135
|
submitSignal(runId: string, nodeKey: string, payload: unknown): void;
|
|
137
136
|
private executeSubworkflow;
|
|
138
137
|
private resolveExistingSourcePath;
|
|
138
|
+
private withExecutionContext;
|
|
139
139
|
private buildContext;
|
|
140
140
|
private hydrateContextForNodeRetry;
|
|
141
141
|
/** Extract the parent dynamic value-context (fanout item / loop round) from a context, if any. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interpreter.d.ts","sourceRoot":"","sources":["../src/interpreter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAA2B,MAAM,aAAa,CAAC;AAIpE,OAAO,KAAK,EAAwE,kBAAkB,EAAkB,UAAU,EAAE,MAAM,YAAY,CAAC;AACvJ,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAatC,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE5G,OAAO,KAAK,EAAiC,YAAY,EAAkB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"interpreter.d.ts","sourceRoot":"","sources":["../src/interpreter.ts"],"names":[],"mappings":"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"}
|
package/dist/interpreter.js
CHANGED
|
@@ -50,8 +50,6 @@ export class WorkflowInterpreter {
|
|
|
50
50
|
* The resolver validates the payload against the node's output schema and
|
|
51
51
|
* throws on mismatch, leaving the node `awaiting`. */
|
|
52
52
|
signalResolvers = new Map();
|
|
53
|
-
/** Absolute paths of subworkflow specs currently on the execution stack (cycle guard). */
|
|
54
|
-
subworkflowStack = new Set();
|
|
55
53
|
constructor(store, agentExecutor, programExecutor, options) {
|
|
56
54
|
this.store = store;
|
|
57
55
|
this.evaluator = new ExpressionEvaluator({ nowTimestamp: options?.nowTimestamp });
|
|
@@ -267,6 +265,7 @@ export class WorkflowInterpreter {
|
|
|
267
265
|
});
|
|
268
266
|
break;
|
|
269
267
|
}
|
|
268
|
+
case "if":
|
|
270
269
|
case "switch":
|
|
271
270
|
for (const branch of node.branches ?? []) {
|
|
272
271
|
const taken = !branch.when || Boolean(evaluator.evaluateExpression(branch.when, ctx));
|
|
@@ -457,6 +456,9 @@ export class WorkflowInterpreter {
|
|
|
457
456
|
case "fanout":
|
|
458
457
|
output = await this.executeFanout(node, ctx, runId, dynamic, nodeKey, keyPrefix);
|
|
459
458
|
break;
|
|
459
|
+
case "if":
|
|
460
|
+
output = await this.executeIf(node, ctx, runId, dynamic, keyPrefix);
|
|
461
|
+
break;
|
|
460
462
|
case "switch":
|
|
461
463
|
output = await this.executeSwitch(node, ctx, runId, dynamic, keyPrefix);
|
|
462
464
|
break;
|
|
@@ -473,7 +475,7 @@ export class WorkflowInterpreter {
|
|
|
473
475
|
output = await this.executeSignal(node, ctx, runId, controller.signal, nodeKey);
|
|
474
476
|
break;
|
|
475
477
|
case "subworkflow":
|
|
476
|
-
output = await this.executeSubworkflow(node, ctx, runId, dynamic, nodeKey);
|
|
478
|
+
output = await this.executeSubworkflow(node, ctx, runId, dynamic, nodeKey, state);
|
|
477
479
|
break;
|
|
478
480
|
default:
|
|
479
481
|
throw new Error(`Unknown node kind: ${node.kind}`);
|
|
@@ -841,12 +843,13 @@ export class WorkflowInterpreter {
|
|
|
841
843
|
const join = node.metadata.join ?? "all";
|
|
842
844
|
if (join === "all") {
|
|
843
845
|
branches.forEach((branch) => {
|
|
844
|
-
this.
|
|
846
|
+
const branchDynamic = this.withExecutionContext(dynamic, nestedParallelBranchDynamic(dynamic, branch.id));
|
|
847
|
+
this.materializePendingNode(runId, branch.child, ctx, branchDynamic, keyPrefix);
|
|
845
848
|
});
|
|
846
849
|
}
|
|
847
850
|
const limit = pLimit(maxConcurrency);
|
|
848
851
|
const branchPromises = branches.map((branch) => limit(async () => {
|
|
849
|
-
const branchDynamic = nestedParallelBranchDynamic(dynamic, branch.id);
|
|
852
|
+
const branchDynamic = this.withExecutionContext(dynamic, nestedParallelBranchDynamic(dynamic, branch.id));
|
|
850
853
|
let output;
|
|
851
854
|
try {
|
|
852
855
|
output = await this.executeNode(branch.child, { ...ctx, steps: { ...ctx.steps } }, runId, branchDynamic, keyPrefix);
|
|
@@ -931,7 +934,7 @@ export class WorkflowInterpreter {
|
|
|
931
934
|
});
|
|
932
935
|
if (join === "all") {
|
|
933
936
|
for (const lane of lanePlan) {
|
|
934
|
-
const itemDynamic = appendDynamicFrames(dynamic, lane.itemDynamic);
|
|
937
|
+
const itemDynamic = this.withExecutionContext(dynamic, appendDynamicFrames(dynamic, lane.itemDynamic));
|
|
935
938
|
this.materializePendingNode(runId, body, lane.keyCtx, itemDynamic, keyPrefix);
|
|
936
939
|
}
|
|
937
940
|
}
|
|
@@ -947,7 +950,7 @@ export class WorkflowInterpreter {
|
|
|
947
950
|
// not reject) so the join/min_success logic can run. A NodeAbortedError
|
|
948
951
|
// (operator pause/cancel) re-throws so it propagates to the parent.
|
|
949
952
|
const lanePromises = lanePlan.map((lane) => limit(async () => {
|
|
950
|
-
const itemDynamic = appendDynamicFrames(dynamic, lane.itemDynamic);
|
|
953
|
+
const itemDynamic = this.withExecutionContext(dynamic, appendDynamicFrames(dynamic, lane.itemDynamic));
|
|
951
954
|
const itemCtx = {
|
|
952
955
|
...lane.keyCtx,
|
|
953
956
|
steps: { ...ctx.steps },
|
|
@@ -1039,6 +1042,22 @@ export class WorkflowInterpreter {
|
|
|
1039
1042
|
}
|
|
1040
1043
|
throw new Error(`Switch node ${node.id}: no branch matched and no default`);
|
|
1041
1044
|
}
|
|
1045
|
+
async executeIf(node, ctx, runId, dynamic, keyPrefix) {
|
|
1046
|
+
const branches = node.branches ?? [];
|
|
1047
|
+
for (const branch of branches) {
|
|
1048
|
+
if (branch.when && !this.evaluator.evaluateExpression(branch.when, ctx))
|
|
1049
|
+
continue;
|
|
1050
|
+
try {
|
|
1051
|
+
return { output: primaryOutput(await this.executeNode(branch.child, ctx, runId, dynamic, keyPrefix)) };
|
|
1052
|
+
}
|
|
1053
|
+
catch (error) {
|
|
1054
|
+
if (error instanceof ScopeCompleted)
|
|
1055
|
+
return { output: primaryOutput(error.output) };
|
|
1056
|
+
throw error;
|
|
1057
|
+
}
|
|
1058
|
+
}
|
|
1059
|
+
return { output: {} };
|
|
1060
|
+
}
|
|
1042
1061
|
async executeLoop(node, ctx, runId, dynamic, keyPrefix) {
|
|
1043
1062
|
const untilExpr = node.metadata.until;
|
|
1044
1063
|
const maxIterations = node.metadata.max_iterations ?? 100;
|
|
@@ -1052,7 +1071,7 @@ export class WorkflowInterpreter {
|
|
|
1052
1071
|
...ctx,
|
|
1053
1072
|
loop: { iter, last: lastOutput }
|
|
1054
1073
|
};
|
|
1055
|
-
const loopDynamic = appendDynamicFrame(dynamic, { loopRound: iter });
|
|
1074
|
+
const loopDynamic = this.withExecutionContext(dynamic, appendDynamicFrame(dynamic, { loopRound: iter }));
|
|
1056
1075
|
// Check until condition (skip on first iteration)
|
|
1057
1076
|
if (untilExpr && iter > 0) {
|
|
1058
1077
|
const done = this.evaluator.evaluateExpression(untilExpr, loopCtx);
|
|
@@ -1181,16 +1200,17 @@ export class WorkflowInterpreter {
|
|
|
1181
1200
|
// without consuming the awaiting state.
|
|
1182
1201
|
resolver(payload);
|
|
1183
1202
|
}
|
|
1184
|
-
async executeSubworkflow(node, ctx, runId, dynamic, nodeKey) {
|
|
1203
|
+
async executeSubworkflow(node, ctx, runId, dynamic, nodeKey, state) {
|
|
1185
1204
|
const specPath = node.metadata.subworkflow;
|
|
1186
1205
|
const inputSpec = node.metadata.input;
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1206
|
+
const baseDir = dynamic.currentSpecPath
|
|
1207
|
+
? dirname(dynamic.currentSpecPath)
|
|
1208
|
+
: (this.store.readIr(runId)?.source.path ? dirname(this.store.readIr(runId).source.path) : process.cwd());
|
|
1190
1209
|
const childAbs = resolve(baseDir, specPath);
|
|
1191
1210
|
const childReal = this.resolveExistingSourcePath(childAbs, `Subworkflow path '${specPath}' does not exist or is not readable`);
|
|
1192
|
-
//
|
|
1193
|
-
|
|
1211
|
+
// Per-path guard: parallel siblings may call the same child independently.
|
|
1212
|
+
const currentPaths = dynamic.subworkflowPaths;
|
|
1213
|
+
if (currentPaths?.has(childReal)) {
|
|
1194
1214
|
throw new Error(`Subworkflow cycle detected for '${specPath}'`);
|
|
1195
1215
|
}
|
|
1196
1216
|
// Compile the child spec at runtime (file I/O lives in the runtime layer).
|
|
@@ -1216,17 +1236,14 @@ export class WorkflowInterpreter {
|
|
|
1216
1236
|
}
|
|
1217
1237
|
// Validate subworkflow input against the child IR's compiled input schema.
|
|
1218
1238
|
const validatedChildInput = validateInput(compiled.ir.input, childInput);
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
}
|
|
1227
|
-
finally {
|
|
1228
|
-
this.subworkflowStack.delete(childReal);
|
|
1229
|
-
}
|
|
1239
|
+
state.input = validatedChildInput;
|
|
1240
|
+
this.store.writeNodeState(runId, state);
|
|
1241
|
+
const childPaths = new Set(currentPaths);
|
|
1242
|
+
childPaths.add(childReal);
|
|
1243
|
+
const childDynamic = { ...dynamic, subworkflowPaths: childPaths, currentSpecPath: childReal };
|
|
1244
|
+
const childCtx = this.buildContext(compiled.ir, validatedChildInput, runId);
|
|
1245
|
+
await this.executeNode(compiled.ir.root, childCtx, runId, childDynamic, nodeKey);
|
|
1246
|
+
return { output: evaluateWorkflowOutputs(compiled.ir, childCtx, this.evaluator) };
|
|
1230
1247
|
}
|
|
1231
1248
|
resolveExistingSourcePath(path, message) {
|
|
1232
1249
|
const realPath = realPathOrUndefined(path);
|
|
@@ -1236,6 +1253,13 @@ export class WorkflowInterpreter {
|
|
|
1236
1253
|
return realPath;
|
|
1237
1254
|
}
|
|
1238
1255
|
// ─── Helpers ────────────────────────────────────────────────────
|
|
1256
|
+
withExecutionContext(parent, dynamic) {
|
|
1257
|
+
return {
|
|
1258
|
+
...dynamic,
|
|
1259
|
+
subworkflowPaths: parent.subworkflowPaths,
|
|
1260
|
+
currentSpecPath: parent.currentSpecPath
|
|
1261
|
+
};
|
|
1262
|
+
}
|
|
1239
1263
|
buildContext(ir, input, runId) {
|
|
1240
1264
|
return { input, steps: {}, workflow: buildWorkflowExpressionContext(ir), run_id: runId };
|
|
1241
1265
|
}
|