@automatalabs/workflows 0.50.1 → 0.52.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 +2 -2
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +38 -14
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/mcp-server.js +524 -55
- package/dist/validate-internal.d.ts +10 -1
- package/dist/validate-internal.d.ts.map +1 -1
- package/dist/validate.d.ts +7 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +48 -13
- package/package.json +4 -4
|
@@ -3,8 +3,17 @@ export interface ValidateProbeRunner {
|
|
|
3
3
|
probeConfigOptions(spec?: string, opts?: {
|
|
4
4
|
cwd?: string;
|
|
5
5
|
selectModel?: boolean;
|
|
6
|
+
backends?: Record<string, CustomBackendConfig>;
|
|
7
|
+
signal?: AbortSignal;
|
|
6
8
|
}): Promise<ProbedConfigOptions>;
|
|
7
|
-
|
|
9
|
+
/** Every host-routable backend name. Used by protocol-native discovery. */
|
|
10
|
+
listBackends?(): string[];
|
|
11
|
+
/** Host-registered custom names, including deliberate built-in shadows. */
|
|
12
|
+
listCustomBackends?(): string[];
|
|
13
|
+
/** The host's backend selected when a workflow omits model. */
|
|
14
|
+
defaultBackendId?(): string;
|
|
15
|
+
/** Present on owned probe runners; shared host runners are never disposed by validation. */
|
|
16
|
+
dispose?(): Promise<void>;
|
|
8
17
|
}
|
|
9
18
|
export type ValidateProbeFactory = (backends: Record<string, CustomBackendConfig> | undefined) => ValidateProbeRunner;
|
|
10
19
|
export declare function createValidateProbeRunner(backends: Record<string, CustomBackendConfig> | undefined): ValidateProbeRunner;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-internal.d.ts","sourceRoot":"","sources":["../src/validate-internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,mBAAmB;IAClC,kBAAkB,CAChB,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,
|
|
1
|
+
{"version":3,"file":"validate-internal.d.ts","sourceRoot":"","sources":["../src/validate-internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,mBAAmB;IAClC,kBAAkB,CAChB,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACnH,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAChC,2EAA2E;IAC3E,YAAY,CAAC,IAAI,MAAM,EAAE,CAAC;IAC1B,2EAA2E;IAC3E,kBAAkB,CAAC,IAAI,MAAM,EAAE,CAAC;IAChC,+DAA+D;IAC/D,gBAAgB,CAAC,IAAI,MAAM,CAAC;IAC5B,4FAA4F;IAC5F,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,MAAM,oBAAoB,GAAG,CACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAAG,SAAS,KACtD,mBAAmB,CAAC;AAIzB,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAAG,SAAS,GACxD,mBAAmB,CAErB;AAED,6FAA6F;AAC7F,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAMzF"}
|
package/dist/validate.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { SessionConfigOption } from "@automatalabs/acp-agents";
|
|
2
2
|
import type { WorkflowDir } from "@automatalabs/workflow-engine";
|
|
3
3
|
import type { WorkflowMeta } from "@automatalabs/shared-types";
|
|
4
|
+
import { type ValidateProbeRunner } from "./validate-internal.js";
|
|
4
5
|
export type MockAnswerJson = null | boolean | number | string | MockAnswerJson[] | {
|
|
5
6
|
[key: string]: MockAnswerJson;
|
|
6
7
|
};
|
|
@@ -25,6 +26,12 @@ export interface ValidateWorkflowOptions {
|
|
|
25
26
|
maxAgents?: number;
|
|
26
27
|
/** Dry-run wall-clock limit. Default 30_000 ms. */
|
|
27
28
|
timeoutMs?: number;
|
|
29
|
+
/** Per routed backend/model config-probe limit. Default 60_000 ms. */
|
|
30
|
+
probeTimeoutMs?: number;
|
|
31
|
+
/** Host-owned no-prompt probe runner. When supplied it is reused and never disposed. */
|
|
32
|
+
probeRunner?: ValidateProbeRunner;
|
|
33
|
+
/** Optional saved-workflow resolver used by nested workflow("name") calls in the dry run. */
|
|
34
|
+
loadSavedWorkflow?: (name: string) => string | undefined;
|
|
28
35
|
/** Dry-run answers selected by the resolved agent label. */
|
|
29
36
|
mockAnswers?: MockAnswers;
|
|
30
37
|
}
|
package/dist/validate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
|
package/dist/validate.js
CHANGED
|
@@ -11,7 +11,7 @@ import { mkdtempSync, rmSync } from "node:fs";
|
|
|
11
11
|
import { tmpdir } from "node:os";
|
|
12
12
|
import { join } from "node:path";
|
|
13
13
|
import { openWorkflowDir, WorkflowError, WorkflowErrorCode, WorkflowManager, parseWorkflowScript, redactText, } from "@automatalabs/workflow-engine";
|
|
14
|
-
import { builtinThoughtLevelDomainSemantics, registryWithRunBackends, resolveBackendRegistry, selectBackend, } from "@automatalabs/acp-agents";
|
|
14
|
+
import { BUILTIN_BACKEND_IDS, builtinThoughtLevelDomainSemantics, registryWithRunBackends, resolveBackendRegistry, selectBackend, } from "@automatalabs/acp-agents";
|
|
15
15
|
import { Check, Errors } from "typebox/value";
|
|
16
16
|
import { createValidateProbeRunner } from "./validate-internal.js";
|
|
17
17
|
const MAX_MOCK_ANSWERS_BYTES = 256 * 1024;
|
|
@@ -602,15 +602,16 @@ function probeTargetName(target) {
|
|
|
602
602
|
? `${target.backendId} (session default model)`
|
|
603
603
|
: `${target.backendId} model ${JSON.stringify(target.model)}`;
|
|
604
604
|
}
|
|
605
|
-
async function probeHarnessConfigOptions(calls, cwd, registry, hostRegistry, declared, warnings) {
|
|
605
|
+
async function probeHarnessConfigOptions(calls, cwd, registry, hostRegistry, declared, warnings, probeRunner, probeTimeoutMs) {
|
|
606
606
|
const targets = configProbeTargets(calls, registry, hostRegistry, declared);
|
|
607
607
|
const harnessOptions = [];
|
|
608
608
|
const catalogs = new Map();
|
|
609
609
|
if (targets.length === 0)
|
|
610
610
|
return { harnessOptions, catalogs };
|
|
611
611
|
let runner;
|
|
612
|
+
const ownsRunner = probeRunner === undefined;
|
|
612
613
|
try {
|
|
613
|
-
runner = createValidateProbeRunner(registryOptions(registry));
|
|
614
|
+
runner = probeRunner ?? createValidateProbeRunner(registryOptions(registry));
|
|
614
615
|
}
|
|
615
616
|
catch (error) {
|
|
616
617
|
const reason = errorMessage(error);
|
|
@@ -635,10 +636,12 @@ async function probeHarnessConfigOptions(calls, cwd, registry, hostRegistry, dec
|
|
|
635
636
|
if (failures.has(key))
|
|
636
637
|
return undefined;
|
|
637
638
|
try {
|
|
638
|
-
const result = await runner.probeConfigOptions(target.model ?? target.backendId, {
|
|
639
|
+
const result = await withValidationProbeTimeout((signal) => runner.probeConfigOptions(target.model ?? target.backendId, {
|
|
639
640
|
cwd,
|
|
640
641
|
selectModel: target.model !== undefined,
|
|
641
|
-
|
|
642
|
+
backends: declared,
|
|
643
|
+
signal,
|
|
644
|
+
}), probeTimeoutMs);
|
|
642
645
|
catalogs.set(key, result.options);
|
|
643
646
|
if (reportHarness) {
|
|
644
647
|
harnessOptions.push({
|
|
@@ -684,15 +687,34 @@ async function probeHarnessConfigOptions(calls, cwd, registry, hostRegistry, dec
|
|
|
684
687
|
}
|
|
685
688
|
}
|
|
686
689
|
finally {
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
690
|
+
if (ownsRunner) {
|
|
691
|
+
try {
|
|
692
|
+
await runner.dispose?.();
|
|
693
|
+
}
|
|
694
|
+
catch {
|
|
695
|
+
// Probe results are complete; process cleanup must not change validation semantics.
|
|
696
|
+
}
|
|
692
697
|
}
|
|
693
698
|
}
|
|
694
699
|
return { harnessOptions, catalogs };
|
|
695
700
|
}
|
|
701
|
+
function withValidationProbeTimeout(operation, timeoutMs) {
|
|
702
|
+
return new Promise((resolve, reject) => {
|
|
703
|
+
const controller = new AbortController();
|
|
704
|
+
const timer = setTimeout(() => {
|
|
705
|
+
controller.abort();
|
|
706
|
+
reject(new Error(`config probe timed out after ${timeoutMs}ms`));
|
|
707
|
+
}, timeoutMs);
|
|
708
|
+
timer.unref?.();
|
|
709
|
+
operation(controller.signal).then((value) => {
|
|
710
|
+
clearTimeout(timer);
|
|
711
|
+
resolve(value);
|
|
712
|
+
}, (error) => {
|
|
713
|
+
clearTimeout(timer);
|
|
714
|
+
reject(error);
|
|
715
|
+
});
|
|
716
|
+
});
|
|
717
|
+
}
|
|
696
718
|
function isThoughtLevelSelect(option) {
|
|
697
719
|
return option.type === "select" &&
|
|
698
720
|
(option.category === "thought_level" || option.id === "thinkingLevel");
|
|
@@ -1068,6 +1090,10 @@ export function collapseHarnessOptionsForOutput(harnesses) {
|
|
|
1068
1090
|
export async function validateWorkflowScript(script, options = {}) {
|
|
1069
1091
|
const mockAnswerState = options.mockAnswers === undefined ? undefined : normalizeMockAnswers(options.mockAnswers);
|
|
1070
1092
|
const warnings = [];
|
|
1093
|
+
const probeTimeoutMs = options.probeTimeoutMs ?? 60_000;
|
|
1094
|
+
if (!Number.isFinite(probeTimeoutMs) || probeTimeoutMs <= 0) {
|
|
1095
|
+
throw new TypeError("validateWorkflowScript: probeTimeoutMs must be a positive number");
|
|
1096
|
+
}
|
|
1071
1097
|
let meta;
|
|
1072
1098
|
try {
|
|
1073
1099
|
meta = parseWorkflowScript(script).meta;
|
|
@@ -1083,7 +1109,16 @@ export async function validateWorkflowScript(script, options = {}) {
|
|
|
1083
1109
|
const declaredBackends = meta.backends && Object.keys(meta.backends).length > 0
|
|
1084
1110
|
? meta.backends
|
|
1085
1111
|
: undefined;
|
|
1086
|
-
const
|
|
1112
|
+
const configuredHostRegistry = resolveBackendRegistry();
|
|
1113
|
+
const runnerCustomBackends = options.probeRunner?.listCustomBackends?.() ??
|
|
1114
|
+
(options.probeRunner?.listBackends?.() ?? []).filter((name) => !BUILTIN_BACKEND_IDS.includes(name.toLowerCase()));
|
|
1115
|
+
const discoveredHostBackends = Object.fromEntries(runnerCustomBackends
|
|
1116
|
+
.map((name) => name.toLowerCase())
|
|
1117
|
+
.filter((name) => !configuredHostRegistry.has(name))
|
|
1118
|
+
.map((name) => [name, { command: "__host_owned_probe_runner__" }]));
|
|
1119
|
+
const hostRegistry = Object.keys(discoveredHostBackends).length === 0
|
|
1120
|
+
? configuredHostRegistry
|
|
1121
|
+
: resolveBackendRegistry(discoveredHostBackends);
|
|
1087
1122
|
const backendRegistry = registryWithRunBackends(hostRegistry, declaredBackends);
|
|
1088
1123
|
if (declaredBackends) {
|
|
1089
1124
|
warnings.push(`script declares custom backends (${Object.keys(declaredBackends).join(", ")}) — real runs must approve them ` +
|
|
@@ -1160,7 +1195,7 @@ export async function validateWorkflowScript(script, options = {}) {
|
|
|
1160
1195
|
...(mockAnswerState ? { concurrency: 1 } : {}),
|
|
1161
1196
|
journaling: false,
|
|
1162
1197
|
persistenceRoot,
|
|
1163
|
-
loadSavedWorkflow: flows?.resolve,
|
|
1198
|
+
loadSavedWorkflow: options.loadSavedWorkflow ?? flows?.resolve,
|
|
1164
1199
|
});
|
|
1165
1200
|
manager.on("agentStart", (event) => {
|
|
1166
1201
|
const extra = mockMeta.get(event.label) ?? mockMeta.get("") ?? { schema: false };
|
|
@@ -1235,7 +1270,7 @@ export async function validateWorkflowScript(script, options = {}) {
|
|
|
1235
1270
|
const mockAnswers = mockAnswerState ? buildMockAnswersReport(mockAnswerState) : undefined;
|
|
1236
1271
|
if (mockAnswerState && mockAnswers)
|
|
1237
1272
|
appendMockAnswerWarnings(mockAnswerState, mockAnswers, warnings);
|
|
1238
|
-
const probed = await probeHarnessConfigOptions(agentCalls, baseCwd, backendRegistry, hostRegistry, declaredBackends, warnings);
|
|
1273
|
+
const probed = await probeHarnessConfigOptions(agentCalls, baseCwd, backendRegistry, hostRegistry, declaredBackends, warnings, options.probeRunner, probeTimeoutMs);
|
|
1239
1274
|
const optionErrors = configOptionErrors(agentCalls, probed.catalogs, backendRegistry, hostRegistry, declaredBackends, warnings);
|
|
1240
1275
|
const ok = runOk && optionErrors.length === 0;
|
|
1241
1276
|
const runReason = timedOut ? `dry run exceeded ${timeoutMs}ms and was aborted` : run.reason;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@automatalabs/workflows",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.52.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.
|
|
34
|
+
"@automatalabs/repl-engine": "0.4.1",
|
|
35
|
+
"@automatalabs/workflow-engine": "0.37.0",
|
|
35
36
|
"@automatalabs/shared-types": "0.31.0",
|
|
36
|
-
"@automatalabs/
|
|
37
|
-
"@automatalabs/acp-agents": "0.38.1"
|
|
37
|
+
"@automatalabs/acp-agents": "0.40.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"esbuild": "^0.28.1"
|