@automatalabs/workflows 0.52.1 → 0.53.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.
@@ -1,4 +1,4 @@
1
- import type { SessionConfigOption } from "@automatalabs/acp-agents";
1
+ import type { SessionConfigOption, SessionModeState } from "@automatalabs/acp-agents";
2
2
  import type { WorkflowDir } from "@automatalabs/workflow-engine";
3
3
  import type { WorkflowMeta } from "@automatalabs/shared-types";
4
4
  import { type ValidateProbeRunner } from "./validate-internal.js";
@@ -85,6 +85,8 @@ export interface ValidateHarnessOptions {
85
85
  probed: boolean;
86
86
  /** Present when probed=false: the harness's spawn/auth/session error. */
87
87
  error?: string;
88
+ /** Effective advertised ACP modes; null means this backend/model supports no session modes. */
89
+ modes?: SessionModeState | null;
88
90
  options?: SessionConfigOption[];
89
91
  }
90
92
  export interface ValidatedCheckpoint {
@@ -114,7 +116,7 @@ export interface ValidateWorkflowReport {
114
116
  phasesVisited: string[];
115
117
  logs: string[];
116
118
  durationMs: number;
117
- /** Fresh, per-run advertised config-option catalogs for every routed backend/model pair. */
119
+ /** Fresh, per-run advertised mode and config-option catalogs for every routed backend/model pair. */
118
120
  harnessOptions?: ValidateHarnessOptions[];
119
121
  /** The script's return value, composed from fabricated agent results. */
120
122
  result?: unknown;
@@ -189,7 +191,7 @@ export interface RenderedHarnessOptions extends Omit<ValidateHarnessOptions, "op
189
191
  export declare function collapseHarnessOptionsForOutput(harnesses: readonly ValidateHarnessOptions[] | undefined): RenderedHarnessOptions[] | undefined;
190
192
  /**
191
193
  * Validate a workflow script: parse it, dry-run against a mock AgentRunner, then probe
192
- * each routed backend/model pair's advertised config options. Never throws for an invalid script —
194
+ * each routed backend/model pair's advertised modes and config options. Never throws for an invalid script —
193
195
  * read `report.ok` / `report.exitCode`.
194
196
  */
195
197
  export declare function validateWorkflowScript(script: string, options?: ValidateWorkflowOptions): Promise<ValidateWorkflowReport>;
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
package/dist/validate.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // direct nondeterministic call expressions) followed by an optional DRY RUN — the script
3
3
  // executes for real in the engine's deterministic realm, but every agent() call is served by
4
4
  // an in-process mock AgentRunner that fabricates schema-conforming results. Afterward, each
5
- // routed ACP backend/model pair is opened once without a prompt to read its advertised config options.
5
+ // routed ACP backend/model pair is opened once without a prompt to read its advertised modes and config options.
6
6
  // No tokens are spent, a mock live confirm resolves checkpoints to their declared defaults,
7
7
  // and run state is journaled nowhere (journaling off + a throwaway persistence root for the run lease).
8
8
  //
@@ -606,8 +606,9 @@ async function probeHarnessConfigOptions(calls, cwd, registry, hostRegistry, dec
606
606
  const targets = configProbeTargets(calls, registry, hostRegistry, declared);
607
607
  const harnessOptions = [];
608
608
  const catalogs = new Map();
609
+ const modes = new Map();
609
610
  if (targets.length === 0)
610
- return { harnessOptions, catalogs };
611
+ return { harnessOptions, catalogs, modes };
611
612
  let runner;
612
613
  const ownsRunner = probeRunner === undefined;
613
614
  try {
@@ -624,7 +625,7 @@ async function probeHarnessConfigOptions(calls, cwd, registry, hostRegistry, dec
624
625
  error: reason,
625
626
  });
626
627
  }
627
- return { harnessOptions, catalogs };
628
+ return { harnessOptions, catalogs, modes };
628
629
  }
629
630
  try {
630
631
  const failures = new Map();
@@ -643,11 +644,13 @@ async function probeHarnessConfigOptions(calls, cwd, registry, hostRegistry, dec
643
644
  signal,
644
645
  }), probeTimeoutMs);
645
646
  catalogs.set(key, result.options);
647
+ modes.set(key, result.modes ?? null);
646
648
  if (reportHarness) {
647
649
  harnessOptions.push({
648
650
  backendId: result.backendId,
649
651
  ...(target.model === undefined ? {} : { model: target.model }),
650
652
  probed: true,
653
+ modes: result.modes ?? null,
651
654
  options: result.options,
652
655
  });
653
656
  }
@@ -696,7 +699,7 @@ async function probeHarnessConfigOptions(calls, cwd, registry, hostRegistry, dec
696
699
  }
697
700
  }
698
701
  }
699
- return { harnessOptions, catalogs };
702
+ return { harnessOptions, catalogs, modes };
700
703
  }
701
704
  function withValidationProbeTimeout(operation, timeoutMs) {
702
705
  return new Promise((resolve, reject) => {
@@ -871,6 +874,24 @@ function attachClientRecognizedDomains(catalogs, backendId, recognizedByOption)
871
874
  function errorMessage(error) {
872
875
  return redactText(error instanceof Error ? error.message : String(error)).value;
873
876
  }
877
+ function sessionModeErrors(calls, modes, registry, hostRegistry, declared) {
878
+ const errors = [];
879
+ for (const call of calls) {
880
+ if (call.mode === undefined)
881
+ continue;
882
+ const backendId = routeBackend(call.model, call.tier, registry, hostRegistry, declared).backendId;
883
+ const key = configCatalogKey(backendId, call.model);
884
+ if (!modes.has(key))
885
+ continue;
886
+ const advertised = modes.get(key)?.availableModes.map((mode) => mode.id) ?? [];
887
+ if (advertised.includes(call.mode))
888
+ continue;
889
+ errors.push(`agent "${call.label}" mode authored value ${JSON.stringify(call.mode)} is not advertised by ` +
890
+ `${callModelName(backendId, call.model)}; advertised modes: ${displayAlternatives(advertised)}; ` +
891
+ "omit mode unless action:\"config\" explicitly lists the exact id");
892
+ }
893
+ return errors;
894
+ }
874
895
  function configOptionErrors(calls, catalogs, registry, hostRegistry, declared, warnings) {
875
896
  const errors = [];
876
897
  for (const call of calls) {
@@ -1084,7 +1105,7 @@ export function collapseHarnessOptionsForOutput(harnesses) {
1084
1105
  }
1085
1106
  /**
1086
1107
  * Validate a workflow script: parse it, dry-run against a mock AgentRunner, then probe
1087
- * each routed backend/model pair's advertised config options. Never throws for an invalid script —
1108
+ * each routed backend/model pair's advertised modes and config options. Never throws for an invalid script —
1088
1109
  * read `report.ok` / `report.exitCode`.
1089
1110
  */
1090
1111
  export async function validateWorkflowScript(script, options = {}) {
@@ -1272,11 +1293,13 @@ export async function validateWorkflowScript(script, options = {}) {
1272
1293
  appendMockAnswerWarnings(mockAnswerState, mockAnswers, warnings);
1273
1294
  const probed = await probeHarnessConfigOptions(agentCalls, baseCwd, backendRegistry, hostRegistry, declaredBackends, warnings, options.probeRunner, probeTimeoutMs);
1274
1295
  const optionErrors = configOptionErrors(agentCalls, probed.catalogs, backendRegistry, hostRegistry, declaredBackends, warnings);
1275
- const ok = runOk && optionErrors.length === 0;
1296
+ const modeErrors = sessionModeErrors(agentCalls, probed.modes, backendRegistry, hostRegistry, declaredBackends);
1297
+ const configurationErrors = [...modeErrors, ...optionErrors];
1298
+ const ok = runOk && configurationErrors.length === 0;
1276
1299
  const runReason = timedOut ? `dry run exceeded ${timeoutMs}ms and was aborted` : run.reason;
1277
- const reason = optionErrors.length === 0
1300
+ const reason = configurationErrors.length === 0
1278
1301
  ? runReason
1279
- : [runReason, "configOptions validation failed:", ...optionErrors.map((error) => `- ${error}`)]
1302
+ : [runReason, "agent configuration validation failed:", ...configurationErrors.map((error) => `- ${error}`)]
1280
1303
  .filter(Boolean)
1281
1304
  .join("\n");
1282
1305
  return {
@@ -1335,6 +1358,18 @@ export function renderHarnessOptionLines(harnesses, indent) {
1335
1358
  continue;
1336
1359
  }
1337
1360
  lines.push(`${indent}${target}:`);
1361
+ const modes = harness.modes;
1362
+ if (modes === null) {
1363
+ lines.push(`${indent} modes: (none advertised — omit mode)`);
1364
+ }
1365
+ else if (modes === undefined) {
1366
+ lines.push(`${indent} modes: (catalog unavailable — omit mode)`);
1367
+ }
1368
+ else {
1369
+ lines.push(`${indent} modes: current ${displayValue(modes.currentModeId)} | advertised ` +
1370
+ displayAlternatives(modes.availableModes.map((mode) => mode.id)));
1371
+ }
1372
+ lines.push(`${indent} config options:`);
1338
1373
  lines.push(`${indent} id | type | current | choices`);
1339
1374
  if ((harness.options ?? []).length === 0) {
1340
1375
  lines.push(`${indent} (none advertised)`);
@@ -1376,7 +1411,7 @@ export function formatValidateReport(report) {
1376
1411
  .join(" ");
1377
1412
  lines.push(` • ${call.label} ${bits}`);
1378
1413
  }
1379
- lines.push(" advertised config options:");
1414
+ lines.push(" advertised modes and config options:");
1380
1415
  lines.push(...renderHarnessOptionLines(dry.harnessOptions ?? [], " "));
1381
1416
  if ((dry.harnessOptions ?? []).length === 0)
1382
1417
  lines.push(" (no routed harnesses)");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@automatalabs/workflows",
3
- "version": "0.52.1",
3
+ "version": "0.53.0",
4
4
  "license": "Apache-2.0",
5
5
  "engines": {
6
6
  "node": ">=22"
@@ -31,10 +31,10 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "typebox": "1.3.2",
34
- "@automatalabs/repl-engine": "0.4.2",
35
- "@automatalabs/workflow-engine": "0.37.1",
36
- "@automatalabs/acp-agents": "0.40.0",
37
- "@automatalabs/shared-types": "0.31.0"
34
+ "@automatalabs/repl-engine": "0.4.3",
35
+ "@automatalabs/shared-types": "0.31.0",
36
+ "@automatalabs/workflow-engine": "0.37.2",
37
+ "@automatalabs/acp-agents": "0.41.0"
38
38
  },
39
39
  "devDependencies": {
40
40
  "esbuild": "^0.28.1"