@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.
- package/README.md +19 -16
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -3
- package/dist/mcp-server.js +449 -24
- package/dist/validate.d.ts +5 -3
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +44 -9
- package/package.json +5 -5
package/dist/validate.d.ts
CHANGED
|
@@ -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>;
|
package/dist/validate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAGV,mBAAmB,
|
|
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
|
|
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 =
|
|
1300
|
+
const reason = configurationErrors.length === 0
|
|
1278
1301
|
? runReason
|
|
1279
|
-
: [runReason, "
|
|
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.
|
|
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.
|
|
35
|
-
"@automatalabs/
|
|
36
|
-
"@automatalabs/
|
|
37
|
-
"@automatalabs/
|
|
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"
|