@automatalabs/workflows 0.30.1 → 0.31.0

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/README.md CHANGED
@@ -15,10 +15,10 @@ If you want to expose a `workflow` tool to an MCP host (Claude Code, Zed, …),
15
15
  you want to embed the runner in your own program, use this one.
16
16
 
17
17
  It is a **programmatic library**, not an MCP stdio server. It is a thin facade over the engine +
18
- ACP packages and adds one convenience helper, `runDynamicWorkflow`, which defaults the agent
19
- backend to ACP. The ACP layer does use `@modelcontextprotocol/sdk` internally when it hosts the
20
- optional StructuredOutput tool for eligible agents; consumers still interact through this SDK's
21
- workflow/runner APIs rather than MCP server schemas.
18
+ ACP packages and adds ACP-defaulted helpers for ordinary runs (`runDynamicWorkflow`) and
19
+ substitution tests (`runIsolation`). The ACP layer does use `@modelcontextprotocol/sdk` internally
20
+ when it hosts the optional StructuredOutput tool for eligible agents; consumers still interact
21
+ through this SDK's workflow/runner APIs rather than MCP server schemas.
22
22
 
23
23
  ---
24
24
 
@@ -116,6 +116,27 @@ Every script **must** begin with `export const meta = { name, description, phase
116
116
  statement, and must be **deterministic** — `Date.now()`, `Math.random()`, and `new Date()` are
117
117
  unavailable inside the realm (they would break journal replay on resume).
118
118
 
119
+ ### Substitution testing (isolation mode)
120
+
121
+ Record a normal managed run, then re-run its recorded script with one selected step live while all
122
+ other calls are served from the recording:
123
+
124
+ ```ts
125
+ import { runIsolation } from "@automatalabs/workflows";
126
+
127
+ const isolated = await runIsolation({
128
+ baselineRunId: recorded.runId,
129
+ live: [{ label: "step-2", model: "codex/gpt-5.3-codex" }],
130
+ });
131
+
132
+ const target = isolated.report.calls.find((call) => call.mode === "live-target");
133
+ console.log(isolated.status, target?.recordedUsage, target?.liveUsage);
134
+ ```
135
+
136
+ The SDK defaults the live runner to ACP and disposes it; pass `runner` to inject and retain your own.
137
+ See the [Isolation mode API](../../docs/api.md#isolation-mode) for baseline admissibility, target
138
+ selection, typed refusals, report semantics, and the lower-level `createReplayRunner` composition.
139
+
119
140
  ### b) `createAcpRunner().run(...)` — drive a single agent
120
141
 
121
142
  Skip the script realm entirely and call one agent directly. The runner is the default ACP
@@ -612,6 +633,8 @@ size is `AGENTPRISM_ACP_POOL_SIZE` (or `AcpPoolOptions.size`).
612
633
  ```ts
613
634
  // ── Run entry & helper ──
614
635
  runDynamicWorkflow, // (script, { args?, runner?, exec? }) => Promise<WorkflowRunResult>
636
+ runIsolation, // ACP-defaulted single-target substitution over a recorded run
637
+ createReplayRunner, // backend-neutral in-memory replay composition primitive
615
638
  runWorkflow, // the bare engine run (no status trio)
616
639
  parseWorkflowScript, // parse a script's meta + body
617
640
  validateWorkflowScript, // token-free parse + mock-runner dry run (the `validate` CLI's core)
@@ -639,7 +662,10 @@ WorkflowError, WorkflowErrorCode, isWorkflowError, isProviderUsageLimit, isAuthR
639
662
  AGENTPRISM_PERSISTENCE_ROOT_ENV,
640
663
 
641
664
  // ── Types ──
642
- RunDynamicWorkflowOptions, WorkflowRunOptions, AgentOptions, ExecOptions,
665
+ RunDynamicWorkflowOptions, RunIsolationSdkOptions, RunIsolationOptions, IsolationRunResult,
666
+ IsolationTarget, ReplayRunnerOptions, ReplayRunner, ReplayObservation, ReplayReport,
667
+ ReplayCallReport, ReplayDivergenceEvent, ResolvedIsolationTarget,
668
+ WorkflowRunOptions, AgentOptions, ExecOptions, CheckpointCallContext,
643
669
  MockAnswerJson, MockAnswerSequence, MockAnswerRule, MockAnswers,
644
670
  ValidatedMockAnswerUse, ValidatedMockAnswerRule, UnusedMockAnswer, ValidatedMockAnswers,
645
671
  ValidateWorkflowOptions, ValidateWorkflowReport, ValidatedAgentCall, ValidatedCheckpoint,
@@ -647,7 +673,7 @@ WorkflowManagerOptions, CheckpointOptions, WorkflowRunResult, WorkflowRunFallbac
647
673
  WorkflowCheckpointTaken, WorkflowCheckpointSource, WorkflowSnapshot,
648
674
  WorkflowPathOptions, RunPersistence, RunPersistenceOptions,
649
675
  AcpPoolOptions, AcpRunnerOptions, AgentRunner, RunOptions, AgentResult, AgentUsage, JournalEntry,
650
- AgentSessionRef, AgentSessionRecord, WorkflowBackendConfig,
676
+ AgentSessionRef, AgentSessionRecord, WorkflowBackendConfig, WorkflowCallRecord, WorkflowRecordedError,
651
677
  InteractiveSessionOptions, InteractiveTurn, PermissionResolver,
652
678
  AuthResolver, AuthContext, AuthResolution, AuthMethodDescriptor, AuthCapableRunner,
653
679
  ProviderCapableRunner, // duck-type gate for the MCP provider tools (providers/list|set|disable)
package/dist/index.d.ts CHANGED
@@ -1,8 +1,11 @@
1
1
  import { WorkflowManager as EngineWorkflowManager } from "@automatalabs/workflow-engine";
2
2
  import type { AcpEventName, AcpRunnerEventMap } from "@automatalabs/acp-agents";
3
3
  import type { ExecOptions, WorkflowDir, WorkflowManagerOptions } from "@automatalabs/workflow-engine";
4
- import type { AgentRunner, WorkflowBackendConfig, WorkflowRunResult } from "@automatalabs/shared-types";
4
+ import type { AgentRunner, WorkflowRunResult } from "@automatalabs/shared-types";
5
+ import { type ScriptBackendApproval } from "./script-backends.js";
5
6
  export { runWorkflow, parseWorkflowScript, redactText, truncateUtf8 } from "@automatalabs/workflow-engine";
7
+ export { runIsolation, createReplayRunner, type RunIsolationSdkOptions } from "./isolation.js";
8
+ export type { RunIsolationOptions, IsolationRunResult, ReplayRunnerOptions, ResolvedIsolationTarget, IsolationTarget, ReplayRunner, ReplayObservation, ReplayReport, ReplayCallReport, ReplayDivergenceEvent, CheckpointCallContext, WorkflowCallRecord, WorkflowRecordedError, } from "./isolation.js";
6
9
  export { openWorkflowDir, type WorkflowDir, type WorkflowDirEntry, type OpenWorkflowDirOptions, } from "@automatalabs/workflow-engine";
7
10
  export { validateWorkflowScript, fabricateFromSchema, formatValidateReport, MOCK_TOKENS_PER_AGENT } from "./validate.js";
8
11
  export type { MockAnswerJson, MockAnswerRule, MockAnswers, MockAnswerSequence, UnusedMockAnswer, ValidateWorkflowOptions, ValidateWorkflowReport, ValidatedAgentCall, ValidatedCheckpoint, ValidatedMockAnswerRule, ValidatedMockAnswers, ValidatedMockAnswerUse, } from "./validate.js";
@@ -78,9 +81,7 @@ export declare class WorkflowManager extends EngineWorkflowManager {
78
81
  * runDynamicWorkflow THROWS with guidance rather than running a script whose declared
79
82
  * dependencies were dropped.
80
83
  */
81
- export type ScriptBackendApproval = boolean | ((backend: {
82
- name: string;
83
- } & WorkflowBackendConfig) => boolean | Promise<boolean>);
84
+ export type { ScriptBackendApproval } from "./script-backends.js";
84
85
  /** Options for {@link runDynamicWorkflow}. */
85
86
  export interface RunDynamicWorkflowOptions {
86
87
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,18 +2,22 @@
2
2
  // @automatalabs/workflows — the importable SDK for the AgentPrism dynamic-workflow
3
3
  // orchestrator. A FACADE re-export barrel: it re-exports the clean public surface of
4
4
  // the three engine packages, adds the SDK-level WorkflowManager ACP-event bridge, and
5
- // adds ONE convenience helper (`runDynamicWorkflow`) that defaults the AgentRunner seam
6
- // to the ACP backend. It is SEPARATE from @automatalabs/mcp-server (the stdio MCP server)
5
+ // adds ACP-defaulted convenience helpers for ordinary and isolation runs. It is
6
+ // SEPARATE from @automatalabs/mcp-server (the stdio MCP server)
7
7
  // and stays a PURE library — it pulls in neither @modelcontextprotocol/sdk nor zod.
8
8
  //
9
9
  // The DSL globals available INSIDE a workflow script (agent, parallel, pipeline, …) are
10
10
  // vm-realm globals, NOT importable symbols; they are documented for author IntelliSense
11
11
  // in ./dsl.d.ts (referenced above), not exported here.
12
12
  import { ACP_CROSS_CUTTING_EVENT_NAMES, createAcpRunner } from "@automatalabs/acp-agents";
13
- import { openWorkflowDir, parseWorkflowScript, WorkflowError, WorkflowErrorCode, WorkflowManager as EngineWorkflowManager, } from "@automatalabs/workflow-engine";
13
+ import { openWorkflowDir, parseWorkflowScript, WorkflowManager as EngineWorkflowManager, } from "@automatalabs/workflow-engine";
14
+ import { approveScriptBackends } from "./script-backends.js";
14
15
  // ── Engine: run entry, script parsing, the managed-run lifecycle, and the
15
16
  // option/result + error types the host composes against. ──
16
17
  export { runWorkflow, parseWorkflowScript, redactText, truncateUtf8 } from "@automatalabs/workflow-engine";
18
+ // ── Isolation mode: deterministic substitution testing over a recorded run. The SDK
19
+ // wrapper defaults the live target runner to ACP and owns that runner's disposal. ──
20
+ export { runIsolation, createReplayRunner } from "./isolation.js";
17
21
  // ── Workflow directory view: openWorkflowDir("./workflows") binds a read-only,
18
22
  // per-call-fresh view over folders of versioned workflow scripts (name = filename
19
23
  // stem). `view.resolve` IS a loadSavedWorkflow resolver; runDynamicWorkflow accepts
@@ -200,7 +204,10 @@ export async function runDynamicWorkflow(script, opts = {}) {
200
204
  }
201
205
  let exec = opts.exec;
202
206
  if (declared && Object.keys(declared).length > 0) {
203
- exec = { ...(exec ?? {}), scriptBackends: await approveScriptBackends(declared, opts.allowScriptBackends) };
207
+ exec = {
208
+ ...(exec ?? {}),
209
+ scriptBackends: await approveScriptBackends(declared, opts.allowScriptBackends, "runDynamicWorkflow"),
210
+ };
204
211
  }
205
212
  const owned = opts.runner === undefined;
206
213
  const runner = opts.runner ?? createAcpRunner();
@@ -214,22 +221,3 @@ export async function runDynamicWorkflow(script, opts = {}) {
214
221
  await runner.dispose();
215
222
  }
216
223
  }
217
- /** Resolve the embedder's approval policy over the declared backends; throw with guidance when
218
- * approval is missing or any backend is declined (an unapproved dependency must abort, never
219
- * silently reroute). */
220
- async function approveScriptBackends(declared, approval) {
221
- const names = Object.keys(declared).join(", ");
222
- if (approval === undefined || approval === false) {
223
- throw new WorkflowError(`script declares custom ACP backends (meta.backends: ${names}) — these spawn commands on this machine and require explicit approval. ` +
224
- `Pass allowScriptBackends: true (or a per-backend approval callback) to runDynamicWorkflow, ` +
225
- `or thread an approved registry yourself via exec.scriptBackends.`, WorkflowErrorCode.SCRIPT_VALIDATION_ERROR, { recoverable: false });
226
- }
227
- if (approval === true)
228
- return declared;
229
- for (const [name, config] of Object.entries(declared)) {
230
- if (!(await approval({ name, ...config }))) {
231
- throw new WorkflowError(`script backend "${name}" (command: ${config.command}) was declined by the allowScriptBackends callback — aborting the run`, WorkflowErrorCode.SCRIPT_VALIDATION_ERROR, { recoverable: false });
232
- }
233
- }
234
- return declared;
235
- }
@@ -0,0 +1,24 @@
1
+ import { createReplayRunner } from "@automatalabs/workflow-engine";
2
+ import type { CheckpointCallContext, IsolationRunResult, IsolationTarget, ReplayCallReport, ReplayDivergenceEvent, ReplayObservation, ReplayReport, ReplayRunner, ReplayRunnerOptions, ResolvedIsolationTarget, RunIsolationOptions } from "@automatalabs/workflow-engine";
3
+ import type { AgentRunner, WorkflowCallRecord, WorkflowRecordedError } from "@automatalabs/shared-types";
4
+ import { type ScriptBackendApproval } from "./script-backends.js";
5
+ type OwnedRunner = AgentRunner & {
6
+ dispose: () => Promise<void>;
7
+ };
8
+ type DefaultRunnerFactory = () => OwnedRunner;
9
+ /** Test-only injection point for the owned default runner. Deliberately absent from the package barrel. */
10
+ export declare function __setDefaultRunnerFactoryForTests(factory: DefaultRunnerFactory | undefined): void;
11
+ export interface RunIsolationSdkOptions extends Omit<RunIsolationOptions, "runner" | "scriptBackends"> {
12
+ /** Omitted => createAcpRunner(), disposed after the run. */
13
+ runner?: AgentRunner;
14
+ /** Approval policy for the recording script's declared meta.backends. */
15
+ allowScriptBackends?: ScriptBackendApproval;
16
+ }
17
+ /**
18
+ * Execute an isolation run with the SDK's ACP-defaulted runner and script-backend
19
+ * approval policy. Caller-supplied runners remain caller-owned.
20
+ */
21
+ export declare function runIsolation<T = unknown>(opts: RunIsolationSdkOptions): Promise<IsolationRunResult<T>>;
22
+ export { createReplayRunner };
23
+ export type { CheckpointCallContext, IsolationRunResult, IsolationTarget, ReplayCallReport, ReplayDivergenceEvent, ReplayObservation, ReplayReport, ReplayRunner, ReplayRunnerOptions, ResolvedIsolationTarget, RunIsolationOptions, WorkflowCallRecord, WorkflowRecordedError, };
24
+ //# sourceMappingURL=isolation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isolation.d.ts","sourceRoot":"","sources":["../src/isolation.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAMnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAyB,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAEzF,KAAK,WAAW,GAAG,WAAW,GAAG;IAAE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC;AAClE,KAAK,oBAAoB,GAAG,MAAM,WAAW,CAAC;AAI9C,2GAA2G;AAC3G,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,oBAAoB,GAAG,SAAS,GAAG,IAAI,CAEjG;AAED,MAAM,WAAW,sBACf,SAAQ,IAAI,CAAC,mBAAmB,EAAE,QAAQ,GAAG,gBAAgB,CAAC;IAC9D,4DAA4D;IAC5D,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,yEAAyE;IACzE,mBAAmB,CAAC,EAAE,qBAAqB,CAAC;CAC7C;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,CAAC,GAAG,OAAO,EAC5C,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CA0ChC;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GACtB,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { createAcpRunner } from "@automatalabs/acp-agents";
2
+ import { createReplayRunner, createRunPersistence, parseWorkflowScript, runIsolation as runEngineIsolation, WorkflowError, WorkflowErrorCode, } from "@automatalabs/workflow-engine";
3
+ import { approveScriptBackends } from "./script-backends.js";
4
+ let defaultRunnerFactory = createAcpRunner;
5
+ /** Test-only injection point for the owned default runner. Deliberately absent from the package barrel. */
6
+ export function __setDefaultRunnerFactoryForTests(factory) {
7
+ defaultRunnerFactory = factory ?? createAcpRunner;
8
+ }
9
+ /**
10
+ * Execute an isolation run with the SDK's ACP-defaulted runner and script-backend
11
+ * approval policy. Caller-supplied runners remain caller-owned.
12
+ */
13
+ export async function runIsolation(opts) {
14
+ let recording;
15
+ try {
16
+ const persistence = createRunPersistence(opts.cwd ?? process.cwd(), undefined, {
17
+ persistenceRoot: opts.persistenceRoot,
18
+ });
19
+ recording = persistence.load(opts.baselineRunId);
20
+ }
21
+ catch (error) {
22
+ if (error instanceof WorkflowError)
23
+ throw error;
24
+ throw new WorkflowError(error instanceof Error ? error.message : String(error), WorkflowErrorCode.PERSISTENCE_ERROR, { recoverable: false });
25
+ }
26
+ let declared;
27
+ if (recording && typeof recording.script === "string") {
28
+ try {
29
+ declared = parseWorkflowScript(recording.script).meta.backends;
30
+ }
31
+ catch {
32
+ // The engine owns malformed-recording diagnosis and will reject it with its
33
+ // typed preflight error after reloading the same persisted bytes.
34
+ }
35
+ }
36
+ const scriptBackends = declared && Object.keys(declared).length > 0
37
+ ? await approveScriptBackends(declared, opts.allowScriptBackends, "runIsolation")
38
+ : undefined;
39
+ const owned = opts.runner === undefined;
40
+ const runner = opts.runner ?? defaultRunnerFactory();
41
+ try {
42
+ const { allowScriptBackends: _approval, ...engineOptions } = opts;
43
+ return await runEngineIsolation({
44
+ ...engineOptions,
45
+ runner,
46
+ ...(scriptBackends === undefined ? {} : { scriptBackends }),
47
+ });
48
+ }
49
+ finally {
50
+ if (owned)
51
+ await runner.dispose();
52
+ }
53
+ }
54
+ export { createReplayRunner };
@@ -0,0 +1,7 @@
1
+ import type { WorkflowBackendConfig } from "@automatalabs/shared-types";
2
+ export type ScriptBackendApproval = boolean | ((backend: {
3
+ name: string;
4
+ } & WorkflowBackendConfig) => boolean | Promise<boolean>);
5
+ /** Resolve explicit host approval for script-declared command-spawning backends. */
6
+ export declare function approveScriptBackends(declared: Record<string, WorkflowBackendConfig>, approval: ScriptBackendApproval | undefined, helperName: "runDynamicWorkflow" | "runIsolation"): Promise<Record<string, WorkflowBackendConfig>>;
7
+ //# sourceMappingURL=script-backends.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-backends.d.ts","sourceRoot":"","sources":["../src/script-backends.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,MAAM,MAAM,qBAAqB,GAC7B,OAAO,GACP,CAAC,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,qBAAqB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAExF,oFAAoF;AACpF,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAC/C,QAAQ,EAAE,qBAAqB,GAAG,SAAS,EAC3C,UAAU,EAAE,oBAAoB,GAAG,cAAc,GAChD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAyBhD"}
@@ -0,0 +1,20 @@
1
+ import { WorkflowError, WorkflowErrorCode } from "@automatalabs/workflow-engine";
2
+ /** Resolve explicit host approval for script-declared command-spawning backends. */
3
+ export async function approveScriptBackends(declared, approval, helperName) {
4
+ const names = Object.keys(declared).join(", ");
5
+ if (approval === undefined || approval === false) {
6
+ const guidance = helperName === "runDynamicWorkflow"
7
+ ? "Pass allowScriptBackends: true (or a per-backend approval callback) to runDynamicWorkflow, or thread an approved registry yourself via exec.scriptBackends."
8
+ : "Pass allowScriptBackends: true (or a per-backend approval callback) to runIsolation.";
9
+ throw new WorkflowError(`script declares custom ACP backends (meta.backends: ${names}) — these spawn commands on this machine and require explicit approval. ` +
10
+ guidance, WorkflowErrorCode.SCRIPT_VALIDATION_ERROR, { recoverable: false });
11
+ }
12
+ if (approval === true)
13
+ return declared;
14
+ for (const [name, config] of Object.entries(declared)) {
15
+ if (!(await approval({ name, ...config }))) {
16
+ throw new WorkflowError(`script backend "${name}" (command: ${config.command}) was declined by the allowScriptBackends callback — aborting the run`, WorkflowErrorCode.SCRIPT_VALIDATION_ERROR, { recoverable: false });
17
+ }
18
+ }
19
+ return declared;
20
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@automatalabs/workflows",
3
- "version": "0.30.1",
3
+ "version": "0.31.0",
4
4
  "license": "Apache-2.0",
5
5
  "engines": {
6
6
  "node": ">=22"
@@ -31,9 +31,9 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "typebox": "1.3.2",
34
- "@automatalabs/shared-types": "0.18.0",
35
- "@automatalabs/workflow-engine": "0.19.1",
36
- "@automatalabs/acp-agents": "0.25.0"
34
+ "@automatalabs/shared-types": "0.19.0",
35
+ "@automatalabs/workflow-engine": "0.20.0",
36
+ "@automatalabs/acp-agents": "0.25.1"
37
37
  },
38
38
  "scripts": {
39
39
  "build": "tsc -b",