@automatalabs/workflows 0.48.1 → 0.50.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 +12 -3
- package/dist/cli.js +54 -5
- package/dist/config.d.ts +27 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +75 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/mcp-server.js +389 -115
- package/dist/validate.d.ts +55 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +96 -1
- package/package.json +6 -6
package/dist/validate.d.ts
CHANGED
|
@@ -126,6 +126,60 @@ export declare const MOCK_TOKENS_PER_AGENT = 1000;
|
|
|
126
126
|
/** Maximum advertised model count for client-side ordered thought-domain enumeration.
|
|
127
127
|
* Larger catalogs stay on exact advertised-value validation so zero-token validation remains bounded. */
|
|
128
128
|
export declare const ORDERED_THOUGHT_LEVEL_ENUMERATION_MODEL_LIMIT = 32;
|
|
129
|
+
type SelectConfigOption = Extract<SessionConfigOption, {
|
|
130
|
+
type: "select";
|
|
131
|
+
}>;
|
|
132
|
+
/** Every leaf {value,label} the select advertises, flattening any advertised optgroups. */
|
|
133
|
+
export declare function selectChoicePairs(option: SelectConfigOption): {
|
|
134
|
+
value: string;
|
|
135
|
+
label?: string;
|
|
136
|
+
}[];
|
|
137
|
+
/**
|
|
138
|
+
* Above this many advertised choices, a select's inline enumeration is replaced by a
|
|
139
|
+
* grouped summary in every RENDERED surface — the human table AND `--json` — so a harness
|
|
140
|
+
* with a huge model catalog (pi, opencode) cannot flood an agent's context on either flag.
|
|
141
|
+
* The complete list stays in the in-memory report (validation reads it, SDK embedders get
|
|
142
|
+
* it) and is reachable only through the explicit `config <harness> --models[=<filter>]`
|
|
143
|
+
* path. Small catalogs — claude, codex, and every effort/mode/boolean option — stay under
|
|
144
|
+
* this bound and render verbatim, unchanged.
|
|
145
|
+
*/
|
|
146
|
+
export declare const MAX_INLINE_SELECT_CHOICES = 24;
|
|
147
|
+
export interface SelectChoiceGroup {
|
|
148
|
+
group: string;
|
|
149
|
+
count: number;
|
|
150
|
+
}
|
|
151
|
+
export interface SelectChoiceSummary {
|
|
152
|
+
total: number;
|
|
153
|
+
groups: SelectChoiceGroup[];
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Group a select's choices for summary display. Prefers the harness-advertised optgroup
|
|
157
|
+
* labels; absent those, groups by the first "/"-segment of each value. Groups come back
|
|
158
|
+
* largest-first, ties broken by first appearance.
|
|
159
|
+
*/
|
|
160
|
+
export declare function summarizeSelectChoices(option: SelectConfigOption): SelectChoiceSummary;
|
|
161
|
+
/** A select whose leaf-choice count exceeds the inline bound — rendered as a summary. */
|
|
162
|
+
export declare function isOversizedSelect(option: SessionConfigOption): option is SelectConfigOption;
|
|
163
|
+
/** A select option reshaped for SERIALIZED output (--json): the huge `options` leaf array
|
|
164
|
+
* is dropped in favor of a compact grouped summary. Every scalar field is preserved. */
|
|
165
|
+
export type CollapsedSelectOption = Omit<SelectConfigOption, "options"> & {
|
|
166
|
+
truncated: true;
|
|
167
|
+
choiceSummary: SelectChoiceSummary & {
|
|
168
|
+
expand: string;
|
|
169
|
+
};
|
|
170
|
+
};
|
|
171
|
+
export type RenderedConfigOption = SessionConfigOption | CollapsedSelectOption;
|
|
172
|
+
export interface RenderedHarnessOptions extends Omit<ValidateHarnessOptions, "options"> {
|
|
173
|
+
options?: RenderedConfigOption[];
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Collapse each harness's oversized select options for serialized (`--json`) output — the
|
|
177
|
+
* only place the full catalog would otherwise reach an agent's context through a machine
|
|
178
|
+
* flag. Small options and every non-select option pass through untouched. Applied ONLY at
|
|
179
|
+
* the CLI print boundary; the in-memory report keeps the complete catalog so validation
|
|
180
|
+
* and programmatic `probeHarnessConfig()` callers are unaffected.
|
|
181
|
+
*/
|
|
182
|
+
export declare function collapseHarnessOptionsForOutput(harnesses: readonly ValidateHarnessOptions[] | undefined): RenderedHarnessOptions[] | undefined;
|
|
129
183
|
/**
|
|
130
184
|
* Validate a workflow script: parse it, dry-run against a mock AgentRunner, then probe
|
|
131
185
|
* each routed backend/model pair's advertised config options. Never throws for an invalid script —
|
|
@@ -138,4 +192,5 @@ export declare function validateWorkflowScript(script: string, options?: Validat
|
|
|
138
192
|
export declare function renderHarnessOptionLines(harnesses: readonly ValidateHarnessOptions[], indent: string): string[];
|
|
139
193
|
/** Render a ValidateWorkflowReport as the human-readable CLI output. */
|
|
140
194
|
export declare function formatValidateReport(report: ValidateWorkflowReport): string;
|
|
195
|
+
export {};
|
|
141
196
|
//# sourceMappingURL=validate.d.ts.map
|
package/dist/validate.d.ts.map
CHANGED
|
@@ -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
|
@@ -959,12 +959,107 @@ function clampSelectValue(requested, supported, recognized) {
|
|
|
959
959
|
function selectChoiceValues(option) {
|
|
960
960
|
return option.options.flatMap((entry) => ("options" in entry ? entry.options : [entry])).map((entry) => entry.value);
|
|
961
961
|
}
|
|
962
|
+
/** Every leaf {value,label} the select advertises, flattening any advertised optgroups. */
|
|
963
|
+
export function selectChoicePairs(option) {
|
|
964
|
+
return option.options
|
|
965
|
+
.flatMap((entry) => ("options" in entry ? entry.options : [entry]))
|
|
966
|
+
.map((entry) => ({ value: entry.value, label: entry.name }));
|
|
967
|
+
}
|
|
968
|
+
/**
|
|
969
|
+
* Above this many advertised choices, a select's inline enumeration is replaced by a
|
|
970
|
+
* grouped summary in every RENDERED surface — the human table AND `--json` — so a harness
|
|
971
|
+
* with a huge model catalog (pi, opencode) cannot flood an agent's context on either flag.
|
|
972
|
+
* The complete list stays in the in-memory report (validation reads it, SDK embedders get
|
|
973
|
+
* it) and is reachable only through the explicit `config <harness> --models[=<filter>]`
|
|
974
|
+
* path. Small catalogs — claude, codex, and every effort/mode/boolean option — stay under
|
|
975
|
+
* this bound and render verbatim, unchanged.
|
|
976
|
+
*/
|
|
977
|
+
export const MAX_INLINE_SELECT_CHOICES = 24;
|
|
978
|
+
/** The group a bare (ungrouped) choice value belongs to: its first "/"-segment
|
|
979
|
+
* (pi/opencode ids are "<provider>/<model>"); a value with no "/" is "(ungrouped)". */
|
|
980
|
+
function groupOfValue(value) {
|
|
981
|
+
const slash = value.indexOf("/");
|
|
982
|
+
return slash > 0 ? value.slice(0, slash) : "(ungrouped)";
|
|
983
|
+
}
|
|
984
|
+
/**
|
|
985
|
+
* Group a select's choices for summary display. Prefers the harness-advertised optgroup
|
|
986
|
+
* labels; absent those, groups by the first "/"-segment of each value. Groups come back
|
|
987
|
+
* largest-first, ties broken by first appearance.
|
|
988
|
+
*/
|
|
989
|
+
export function summarizeSelectChoices(option) {
|
|
990
|
+
const counts = new Map();
|
|
991
|
+
const order = [];
|
|
992
|
+
const bump = (name, n) => {
|
|
993
|
+
if (!counts.has(name))
|
|
994
|
+
order.push(name);
|
|
995
|
+
counts.set(name, (counts.get(name) ?? 0) + n);
|
|
996
|
+
};
|
|
997
|
+
const hasAdvertisedGroups = option.options.some((entry) => "options" in entry);
|
|
998
|
+
for (const entry of option.options) {
|
|
999
|
+
if ("options" in entry)
|
|
1000
|
+
bump(entry.name ?? entry.group, entry.options.length);
|
|
1001
|
+
else if (hasAdvertisedGroups)
|
|
1002
|
+
bump(groupOfValue(entry.value), 1); // stray leaf beside groups
|
|
1003
|
+
else
|
|
1004
|
+
bump(groupOfValue(entry.value), 1);
|
|
1005
|
+
}
|
|
1006
|
+
const total = [...counts.values()].reduce((sum, n) => sum + n, 0);
|
|
1007
|
+
const groups = order
|
|
1008
|
+
.map((group) => ({ group, count: counts.get(group) ?? 0 }))
|
|
1009
|
+
.sort((a, b) => b.count - a.count || order.indexOf(a.group) - order.indexOf(b.group));
|
|
1010
|
+
return { total, groups };
|
|
1011
|
+
}
|
|
1012
|
+
/** A select whose leaf-choice count exceeds the inline bound — rendered as a summary. */
|
|
1013
|
+
export function isOversizedSelect(option) {
|
|
1014
|
+
return option.type === "select" && selectChoicePairs(option).length > MAX_INLINE_SELECT_CHOICES;
|
|
1015
|
+
}
|
|
1016
|
+
/** The collapsed choices-cell for an oversized select in the human option table. */
|
|
1017
|
+
function summaryChoicesCell(option, backendId) {
|
|
1018
|
+
const { total, groups } = summarizeSelectChoices(option);
|
|
1019
|
+
const shown = groups.slice(0, 3).map((group) => `${group.group} (${group.count})`).join(", ");
|
|
1020
|
+
const more = groups.length > 3 ? ", …" : "";
|
|
1021
|
+
return (`${total} choices across ${groups.length} group(s): ${shown}${more} — ` +
|
|
1022
|
+
`list with \`config ${backendId} --models[=<filter>]\``);
|
|
1023
|
+
}
|
|
962
1024
|
function displayValue(value) {
|
|
963
1025
|
return JSON.stringify(value) ?? String(value);
|
|
964
1026
|
}
|
|
965
1027
|
function displayAlternatives(values) {
|
|
966
1028
|
return values.length > 0 ? values.map((value) => JSON.stringify(value)).join(", ") : "(none advertised)";
|
|
967
1029
|
}
|
|
1030
|
+
/** The choices-cell text for a select: verbatim when small, summarized when oversized. */
|
|
1031
|
+
function selectChoicesCell(option, backendId) {
|
|
1032
|
+
return isOversizedSelect(option)
|
|
1033
|
+
? summaryChoicesCell(option, backendId)
|
|
1034
|
+
: displayAlternatives(selectChoiceValues(option));
|
|
1035
|
+
}
|
|
1036
|
+
function collapseSelectOption(option, backendId) {
|
|
1037
|
+
const { options: _leaves, ...scalars } = option;
|
|
1038
|
+
return {
|
|
1039
|
+
...scalars,
|
|
1040
|
+
truncated: true,
|
|
1041
|
+
choiceSummary: { ...summarizeSelectChoices(option), expand: `config ${backendId} --models=<filter>` },
|
|
1042
|
+
};
|
|
1043
|
+
}
|
|
1044
|
+
/**
|
|
1045
|
+
* Collapse each harness's oversized select options for serialized (`--json`) output — the
|
|
1046
|
+
* only place the full catalog would otherwise reach an agent's context through a machine
|
|
1047
|
+
* flag. Small options and every non-select option pass through untouched. Applied ONLY at
|
|
1048
|
+
* the CLI print boundary; the in-memory report keeps the complete catalog so validation
|
|
1049
|
+
* and programmatic `probeHarnessConfig()` callers are unaffected.
|
|
1050
|
+
*/
|
|
1051
|
+
export function collapseHarnessOptionsForOutput(harnesses) {
|
|
1052
|
+
if (!harnesses)
|
|
1053
|
+
return harnesses === undefined ? undefined : [];
|
|
1054
|
+
return harnesses.map((harness) => {
|
|
1055
|
+
if (!harness.options)
|
|
1056
|
+
return harness;
|
|
1057
|
+
return {
|
|
1058
|
+
...harness,
|
|
1059
|
+
options: harness.options.map((option) => isOversizedSelect(option) ? collapseSelectOption(option, harness.backendId) : option),
|
|
1060
|
+
};
|
|
1061
|
+
});
|
|
1062
|
+
}
|
|
968
1063
|
/**
|
|
969
1064
|
* Validate a workflow script: parse it, dry-run against a mock AgentRunner, then probe
|
|
970
1065
|
* each routed backend/model pair's advertised config options. Never throws for an invalid script —
|
|
@@ -1211,7 +1306,7 @@ export function renderHarnessOptionLines(harnesses, indent) {
|
|
|
1211
1306
|
continue;
|
|
1212
1307
|
}
|
|
1213
1308
|
for (const option of harness.options ?? []) {
|
|
1214
|
-
const choices = option.type === "select" ?
|
|
1309
|
+
const choices = option.type === "select" ? selectChoicesCell(option, harness.backendId) : "true, false";
|
|
1215
1310
|
lines.push(`${indent} ${option.id} | ${option.type} | ${displayValue(option.currentValue)} | ${choices}`);
|
|
1216
1311
|
}
|
|
1217
1312
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@automatalabs/workflows",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.50.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=22"
|
|
@@ -31,16 +31,16 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"typebox": "1.3.2",
|
|
34
|
-
"@automatalabs/repl-engine": "0.3.
|
|
35
|
-
"@automatalabs/shared-types": "0.
|
|
36
|
-
"@automatalabs/
|
|
37
|
-
"@automatalabs/
|
|
34
|
+
"@automatalabs/repl-engine": "0.3.3",
|
|
35
|
+
"@automatalabs/shared-types": "0.31.0",
|
|
36
|
+
"@automatalabs/acp-agents": "0.38.0",
|
|
37
|
+
"@automatalabs/workflow-engine": "0.36.1"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"esbuild": "^0.28.1"
|
|
41
41
|
},
|
|
42
42
|
"scripts": {
|
|
43
|
-
"build": "node ../../scripts/ensure-run-monitor-html.mjs && tsc -b &&
|
|
43
|
+
"build": "node ../../scripts/ensure-run-monitor-html.mjs && tsc -b && node scripts/bundle-mcp-server.mjs && node ../../scripts/check-workflows-bundle-deps.mjs",
|
|
44
44
|
"typecheck": "tsc -p tsconfig.test.json --noEmit",
|
|
45
45
|
"test": "tsx --test \"test/**/*.test.ts\""
|
|
46
46
|
}
|