@farmslot/recipe-harness 0.8.0 → 0.9.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/CHANGELOG.md +7 -1
- package/README.md +83 -188
- package/dist/adapters/core.d.ts.map +1 -1
- package/dist/adapters/core.js +8 -32
- package/dist/adapters/core.js.map +1 -1
- package/dist/adapters/ui.d.ts +0 -2
- package/dist/adapters/ui.d.ts.map +1 -1
- package/dist/adapters/ui.js +0 -2
- package/dist/adapters/ui.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +0 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/run-command.d.ts.map +1 -1
- package/dist/cli/run-command.js +143 -22
- package/dist/cli/run-command.js.map +1 -1
- package/dist/cli/support.d.ts +5 -2
- package/dist/cli/support.d.ts.map +1 -1
- package/dist/cli/support.js +131 -25
- package/dist/cli/support.js.map +1 -1
- package/dist/cli/validate-command.d.ts.map +1 -1
- package/dist/cli/validate-command.js +4 -1
- package/dist/cli/validate-command.js.map +1 -1
- package/dist/core/compose.d.ts +21 -33
- package/dist/core/compose.d.ts.map +1 -1
- package/dist/core/compose.js +93 -127
- package/dist/core/compose.js.map +1 -1
- package/dist/core/execution.d.ts +40 -0
- package/dist/core/execution.d.ts.map +1 -0
- package/dist/core/execution.js +263 -0
- package/dist/core/execution.js.map +1 -0
- package/dist/core/graph.d.ts +4 -5
- package/dist/core/graph.d.ts.map +1 -1
- package/dist/core/graph.js +51 -103
- package/dist/core/graph.js.map +1 -1
- package/dist/core/hud.d.ts.map +1 -1
- package/dist/core/hud.js +2 -6
- package/dist/core/hud.js.map +1 -1
- package/dist/core/library.d.ts +17 -51
- package/dist/core/library.d.ts.map +1 -1
- package/dist/core/library.js +129 -156
- package/dist/core/library.js.map +1 -1
- package/dist/core/parameters.d.ts +5 -0
- package/dist/core/parameters.d.ts.map +1 -0
- package/dist/core/parameters.js +57 -0
- package/dist/core/parameters.js.map +1 -0
- package/dist/core/passive-observations.d.ts +2 -5
- package/dist/core/passive-observations.d.ts.map +1 -1
- package/dist/core/passive-observations.js +4 -40
- package/dist/core/passive-observations.js.map +1 -1
- package/dist/core/resolution-error.d.ts +7 -0
- package/dist/core/resolution-error.d.ts.map +1 -0
- package/dist/core/resolution-error.js +9 -0
- package/dist/core/resolution-error.js.map +1 -0
- package/dist/core/runner.d.ts.map +1 -1
- package/dist/core/runner.js +108 -379
- package/dist/core/runner.js.map +1 -1
- package/dist/core/trace.d.ts +3 -4
- package/dist/core/trace.d.ts.map +1 -1
- package/dist/core/trace.js +3 -4
- package/dist/core/trace.js.map +1 -1
- package/dist/core/trust-input.d.ts.map +1 -1
- package/dist/core/trust-input.js +0 -1
- package/dist/core/trust-input.js.map +1 -1
- package/dist/core/trust.d.ts +7 -10
- package/dist/core/trust.d.ts.map +1 -1
- package/dist/core/trust.js +51 -52
- package/dist/core/trust.js.map +1 -1
- package/dist/core/types.d.ts +23 -50
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/node/writers.d.ts +3 -8
- package/dist/node/writers.d.ts.map +1 -1
- package/dist/node/writers.js +19 -10
- package/dist/node/writers.js.map +1 -1
- package/dist/runtime/cdp.js +1 -3
- package/dist/runtime/cdp.js.map +1 -1
- package/package.json +2 -2
- package/dist/cli/flows-command.d.ts +0 -3
- package/dist/cli/flows-command.d.ts.map +0 -1
- package/dist/cli/flows-command.js +0 -313
- package/dist/cli/flows-command.js.map +0 -1
- package/dist/core/flows.d.ts +0 -47
- package/dist/core/flows.d.ts.map +0 -1
- package/dist/core/flows.js +0 -389
- package/dist/core/flows.js.map +0 -1
- package/dist/core/predicates.d.ts +0 -7
- package/dist/core/predicates.d.ts.map +0 -1
- package/dist/core/predicates.js +0 -102
- package/dist/core/predicates.js.map +0 -1
- package/dist/core/promote.d.ts +0 -41
- package/dist/core/promote.d.ts.map +0 -1
- package/dist/core/promote.js +0 -254
- package/dist/core/promote.js.map +0 -1
package/dist/cli/run-command.js
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
import { getRecipeActionManifestActionNames, } from '@farmslot/protocol';
|
|
1
|
+
import { getRecipeActionManifestActionNames, isRecord, } from '@farmslot/protocol';
|
|
2
2
|
import { createStandardCoreAdapters } from '../adapters/core.js';
|
|
3
|
-
import { resolveRecipeLibrarySources } from '../core/library.js';
|
|
3
|
+
import { applyTaskLocalInvocationTrust, loadRecipeLibraries, resolveRecipeLibrarySources, } from '../core/library.js';
|
|
4
|
+
import { RecipeResolutionError } from '../core/resolution-error.js';
|
|
4
5
|
import { createRecipeRunner } from '../core/runner.js';
|
|
5
6
|
import { RecipeTrustError } from '../core/trust-error.js';
|
|
6
7
|
import { resolveRecipeTrustInput } from '../core/trust-input.js';
|
|
7
|
-
import { parsePositiveInteger, parseRecordingTarget, readRecipeCliJsonFile, resolveRecipeCliPath, } from './support.js';
|
|
8
|
+
import { parsePositiveInteger, parseRecipeParamAssignments, parseRecordingTarget, readRecipeCliJsonFile, resolveRecipeCliPath, } from './support.js';
|
|
8
9
|
export function registerRunCommand(program) {
|
|
9
10
|
program
|
|
10
11
|
.command('run')
|
|
11
12
|
.description('Run a recipe and write a v1 artifact package')
|
|
12
|
-
.argument('
|
|
13
|
-
.
|
|
14
|
-
.
|
|
13
|
+
.argument('[recipe]', 'Recipe id from the active libraries, or a recipe.json path')
|
|
14
|
+
.argument('[params...]', 'Recipe parameters as key=value')
|
|
15
|
+
.option('--artifacts-dir <dir>', 'Directory where artifacts are written')
|
|
16
|
+
.option('--action-manifest <manifest>', 'Runner action manifest JSON')
|
|
15
17
|
.option('--project-root <dir>', 'Project root used by command/artifact adapters')
|
|
16
18
|
.option('--library <entry>', 'Recipe library source as name=path or path (repeatable; order is precedence, first wins). Defaults to RECIPE_LIBRARY_PATH, then the personal library under the farmslot home.', collectRepeatable, [])
|
|
17
19
|
.option('--record-video [mode]', 'Record one whole-recipe MP4 when visual motion proof helps')
|
|
@@ -26,9 +28,54 @@ export function registerRunCommand(program) {
|
|
|
26
28
|
.option('--source-name <name>', 'Human-readable recipe source name')
|
|
27
29
|
.option('--source-digest <digest>', 'Caller-computed source digest')
|
|
28
30
|
.option('--approve-plan <digest>', 'Approve exactly one resolved execution-plan digest')
|
|
31
|
+
.option('--adapter <name>', 'Select adapter-specific recipe variants')
|
|
32
|
+
.option('--list', 'List runnable recipes from the active libraries')
|
|
33
|
+
.option('--describe', 'Describe the selected recipe and its parameters without running it')
|
|
29
34
|
.option('--json', 'Print run result as JSON')
|
|
30
|
-
.action(async (
|
|
35
|
+
.action(async (recipeInput, params, options) => {
|
|
31
36
|
try {
|
|
37
|
+
let librarySources = await resolveRecipeLibrarySources({
|
|
38
|
+
cliEntries: options.library,
|
|
39
|
+
});
|
|
40
|
+
let library = await loadRecipeLibraries(librarySources, {
|
|
41
|
+
adapter: options.adapter,
|
|
42
|
+
});
|
|
43
|
+
if (recipeInput && !library.recipes.has(recipeInput)) {
|
|
44
|
+
librarySources = await resolveRecipeLibrarySources({
|
|
45
|
+
cliEntries: options.library,
|
|
46
|
+
recipePath: resolveRecipeCliPath(recipeInput),
|
|
47
|
+
});
|
|
48
|
+
library = await loadRecipeLibraries(librarySources, {
|
|
49
|
+
adapter: options.adapter,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
librarySources = librarySources.map((source) => ({
|
|
53
|
+
...source,
|
|
54
|
+
provenance: source.provenance ?? {
|
|
55
|
+
kind: 'library',
|
|
56
|
+
trust: 'unknown',
|
|
57
|
+
name: source.name,
|
|
58
|
+
path: source.root,
|
|
59
|
+
},
|
|
60
|
+
}));
|
|
61
|
+
if (options.list) {
|
|
62
|
+
printRecipeList(library.recipes, options.json === true);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (!recipeInput)
|
|
66
|
+
throw new Error('Missing recipe. Use --list to discover recipes.');
|
|
67
|
+
const selected = library.recipes.get(recipeInput);
|
|
68
|
+
if (options.describe) {
|
|
69
|
+
const document = selected
|
|
70
|
+
? selected.document
|
|
71
|
+
: await readRecipeCliJsonFile(recipeInput);
|
|
72
|
+
printRecipeDescription(recipeInput, document, selected, options.json === true);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (!options.artifactsDir)
|
|
76
|
+
throw new Error('Missing --artifacts-dir.');
|
|
77
|
+
if (!options.actionManifest)
|
|
78
|
+
throw new Error('Missing --action-manifest.');
|
|
32
79
|
const manifest = await readRecipeCliJsonFile(options.actionManifest);
|
|
33
80
|
const runner = createRecipeRunner({
|
|
34
81
|
actionManifest: manifest,
|
|
@@ -42,17 +89,6 @@ export function registerRunCommand(program) {
|
|
|
42
89
|
},
|
|
43
90
|
logger: console,
|
|
44
91
|
});
|
|
45
|
-
const librarySources = (await resolveRecipeLibrarySources({
|
|
46
|
-
cliEntries: options.library,
|
|
47
|
-
})).map((source) => ({
|
|
48
|
-
...source,
|
|
49
|
-
provenance: source.provenance ?? {
|
|
50
|
-
kind: 'library',
|
|
51
|
-
trust: 'unknown',
|
|
52
|
-
name: source.name,
|
|
53
|
-
path: source.root,
|
|
54
|
-
},
|
|
55
|
-
}));
|
|
56
92
|
const trust = resolveRecipeTrustInput({
|
|
57
93
|
sourceTrust: options.sourceTrust,
|
|
58
94
|
sourceKind: options.sourceKind,
|
|
@@ -60,15 +96,22 @@ export function registerRunCommand(program) {
|
|
|
60
96
|
sourceDigest: options.sourceDigest,
|
|
61
97
|
approvalDigest: options.approvePlan,
|
|
62
98
|
});
|
|
99
|
+
const invocationTrust = trust.source?.trust ?? 'trusted';
|
|
100
|
+
const executionLibrarySources = applyTaskLocalInvocationTrust(librarySources, invocationTrust);
|
|
63
101
|
const result = await runner.run({
|
|
64
|
-
recipePath: resolveRecipeCliPath(
|
|
102
|
+
recipePath: selected ? selected.path : resolveRecipeCliPath(recipeInput),
|
|
65
103
|
artifactsDir: resolveRecipeCliPath(options.artifactsDir),
|
|
66
104
|
projectRoot: options.projectRoot
|
|
67
105
|
? resolveRecipeCliPath(options.projectRoot)
|
|
68
106
|
: resolveRecipeCliPath('.'),
|
|
69
107
|
recordVideo: parseRecordVideoOptions(options),
|
|
108
|
+
params: parseRecipeParamAssignments(params),
|
|
109
|
+
...(options.adapter ? { adapter: options.adapter } : {}),
|
|
70
110
|
...trust,
|
|
71
|
-
...(
|
|
111
|
+
...(!trust.source && selected ? { source: selected.provenance } : {}),
|
|
112
|
+
...(executionLibrarySources.length > 0
|
|
113
|
+
? { librarySources: executionLibrarySources }
|
|
114
|
+
: {}),
|
|
72
115
|
});
|
|
73
116
|
if (options.json) {
|
|
74
117
|
console.log(JSON.stringify(result, null, 2));
|
|
@@ -81,10 +124,13 @@ export function registerRunCommand(program) {
|
|
|
81
124
|
process.exitCode = 1;
|
|
82
125
|
}
|
|
83
126
|
catch (error) {
|
|
84
|
-
if (!(error instanceof RecipeTrustError))
|
|
127
|
+
if (!(error instanceof RecipeTrustError) && !(error instanceof RecipeResolutionError)) {
|
|
85
128
|
throw error;
|
|
129
|
+
}
|
|
86
130
|
if (options.json) {
|
|
87
|
-
console.log(JSON.stringify(error
|
|
131
|
+
console.log(JSON.stringify(error instanceof RecipeTrustError
|
|
132
|
+
? error.failure
|
|
133
|
+
: { code: error.code, message: error.message, userAction: error.userAction }, null, 2));
|
|
88
134
|
}
|
|
89
135
|
else {
|
|
90
136
|
console.error(`Error [${error.code}]: ${error.message}`);
|
|
@@ -94,6 +140,81 @@ export function registerRunCommand(program) {
|
|
|
94
140
|
}
|
|
95
141
|
});
|
|
96
142
|
}
|
|
143
|
+
function recipeParameters(document) {
|
|
144
|
+
if (!isRecord(document) || !isRecord(document.paramsSchema))
|
|
145
|
+
return [];
|
|
146
|
+
const schema = document.paramsSchema;
|
|
147
|
+
const required = new Set(Array.isArray(schema.required)
|
|
148
|
+
? schema.required.filter((entry) => typeof entry === 'string')
|
|
149
|
+
: []);
|
|
150
|
+
if (!isRecord(schema.properties))
|
|
151
|
+
return [];
|
|
152
|
+
return Object.entries(schema.properties).map(([name, value]) => {
|
|
153
|
+
const property = isRecord(value) ? value : {};
|
|
154
|
+
return {
|
|
155
|
+
name,
|
|
156
|
+
...(typeof property.type === 'string' ? { type: property.type } : {}),
|
|
157
|
+
required: required.has(name),
|
|
158
|
+
...(Object.hasOwn(property, 'default') ? { default: property.default } : {}),
|
|
159
|
+
...(typeof property.description === 'string' ? { description: property.description } : {}),
|
|
160
|
+
};
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
function recipeSummary(ref, document, selected) {
|
|
164
|
+
const record = isRecord(document) ? document : {};
|
|
165
|
+
return {
|
|
166
|
+
ref,
|
|
167
|
+
...(typeof record.title === 'string' ? { title: record.title } : {}),
|
|
168
|
+
...(typeof record.description === 'string' ? { description: record.description } : {}),
|
|
169
|
+
parameters: recipeParameters(document),
|
|
170
|
+
...(selected
|
|
171
|
+
? {
|
|
172
|
+
source: selected.source,
|
|
173
|
+
file: selected.file,
|
|
174
|
+
adapter: selected.adapter ?? null,
|
|
175
|
+
shadows: selected.shadows,
|
|
176
|
+
}
|
|
177
|
+
: {}),
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
function printRecipeList(recipes, json) {
|
|
181
|
+
const entries = [...recipes.values()]
|
|
182
|
+
.sort((left, right) => left.ref.localeCompare(right.ref))
|
|
183
|
+
.map((entry) => recipeSummary(entry.ref, entry.document, entry));
|
|
184
|
+
if (json) {
|
|
185
|
+
console.log(JSON.stringify(entries, null, 2));
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
console.log(`Runnable recipes (${entries.length})`);
|
|
189
|
+
for (const entry of entries) {
|
|
190
|
+
const shadows = entry.shadows?.length ? ` (shadows: ${entry.shadows.join(', ')})` : '';
|
|
191
|
+
console.log(` ${entry.ref}${entry.description ? ` — ${entry.description}` : ''}${shadows}`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function printRecipeDescription(ref, document, selected, json) {
|
|
195
|
+
const entry = recipeSummary(ref, document, selected);
|
|
196
|
+
if (json) {
|
|
197
|
+
console.log(JSON.stringify(entry, null, 2));
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
console.log(entry.title ? `${entry.ref} — ${entry.title}` : entry.ref);
|
|
201
|
+
if (entry.description)
|
|
202
|
+
console.log(entry.description);
|
|
203
|
+
if (entry.shadows?.length)
|
|
204
|
+
console.log(`Shadows: ${entry.shadows.join(', ')}`);
|
|
205
|
+
if (entry.parameters.length === 0) {
|
|
206
|
+
console.log('Parameters: none');
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
console.log('Parameters:');
|
|
210
|
+
for (const parameter of entry.parameters) {
|
|
211
|
+
const defaultValue = Object.hasOwn(parameter, 'default')
|
|
212
|
+
? ` default=${JSON.stringify(parameter.default)}`
|
|
213
|
+
: '';
|
|
214
|
+
const requirement = parameter.required ? ' required' : '';
|
|
215
|
+
console.log(` ${parameter.name}${parameter.type ? ` (${parameter.type})` : ''}${requirement}${defaultValue}${parameter.description ? ` — ${parameter.description}` : ''}`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
97
218
|
function collectRepeatable(value, previous) {
|
|
98
219
|
return [...previous, value];
|
|
99
220
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-command.js","sourceRoot":"","sources":["../../src/cli/run-command.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"run-command.js","sourceRoot":"","sources":["../../src/cli/run-command.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/support.d.ts
CHANGED
|
@@ -6,8 +6,9 @@ interface RecipeValidationInputOptions {
|
|
|
6
6
|
artifactManifestPath?: string;
|
|
7
7
|
artifactDir?: string;
|
|
8
8
|
baseDir?: string;
|
|
9
|
-
/** Library sources whose
|
|
9
|
+
/** Library sources whose recipe refs count as resolvable, mirroring run resolution. */
|
|
10
10
|
librarySources?: RecipeLibrarySource[];
|
|
11
|
+
params?: Record<string, unknown>;
|
|
11
12
|
}
|
|
12
13
|
interface RecipeCliRecordingTargetOptions {
|
|
13
14
|
recordAppName?: string;
|
|
@@ -18,8 +19,10 @@ interface RecipeCliRecordingTargetOptions {
|
|
|
18
19
|
export declare function recipeCliBaseDir(): string;
|
|
19
20
|
export declare function resolveRecipeCliPath(filePath: string, baseDir?: string): string;
|
|
20
21
|
export declare function parsePositiveInteger(value: string): number;
|
|
22
|
+
export declare function parseRecipeParamAssignments(values: readonly string[]): Record<string, unknown>;
|
|
21
23
|
export declare function parseRecordingTarget(options: RecipeCliRecordingTargetOptions): RecordingTarget | undefined;
|
|
22
24
|
export declare function readRecipeCliJsonFile(filePath: string, baseDir?: string): Promise<unknown>;
|
|
23
|
-
export declare function
|
|
25
|
+
export declare function readRecipeCliJsonFileWithinRoot(root: string, relativePath: string): Promise<unknown>;
|
|
26
|
+
export declare function validateRecipeCliInput({ recipePath, actionManifestPath, artifactManifestPath, artifactDir, baseDir, librarySources, params, }: RecipeValidationInputOptions): Promise<RecipeValidationResult>;
|
|
24
27
|
export {};
|
|
25
28
|
//# sourceMappingURL=support.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"support.d.ts","sourceRoot":"","sources":["../../src/cli/support.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"support.d.ts","sourceRoot":"","sources":["../../src/cli/support.ts"],"names":[],"mappings":"AAGA,OAAO,EAKL,KAAK,sBAAsB,EAO5B,MAAM,oBAAoB,CAAC;AAU5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE7E,UAAU,4BAA4B;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,UAAU,+BAA+B;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,SAAqB,GAAG,MAAM,CAE3F;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8B9F;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,+BAA+B,GACvC,eAAe,GAAG,SAAS,CAc7B;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,SAAqB,GAC3B,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC,CASlB;AAuBD,wBAAsB,sBAAsB,CAAC,EAC3C,UAAU,EACV,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,EACX,OAA4B,EAC5B,cAAc,EACd,MAAW,GACZ,EAAE,4BAA4B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA4HhE"}
|
package/dist/cli/support.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { readdir, readFile } from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import { isRecord, mergeRecipeValidationResults, validateArtifactManifestDocument, validateRecipeArtifactPackage, validateRecipeDocument, validateRecipeWithManifest, } from '@farmslot/protocol';
|
|
3
|
+
import { applyRecipeParamDefaults, digestRecipeDocument, isRecord, mergeRecipeValidationResults, resolvedRecipeArtifactPath, validateArtifactManifestDocument, validateRecipeArtifactPackage, validateRecipeDocument, validateRecipeParams, validateRecipeWithManifest, } from '@farmslot/protocol';
|
|
4
|
+
import { resolveRecipeDependencies, rootResolutionRef, validateRecipeDependencyParams, } from '../core/compose.js';
|
|
4
5
|
import { loadRecipeLibraries } from '../core/library.js';
|
|
6
|
+
import { readFileWithinRoot } from '../core/path.js';
|
|
7
|
+
import { RecipeResolutionError } from '../core/resolution-error.js';
|
|
5
8
|
export function recipeCliBaseDir() {
|
|
6
9
|
return process.env.INIT_CWD ?? process.cwd();
|
|
7
10
|
}
|
|
@@ -15,6 +18,36 @@ export function parsePositiveInteger(value) {
|
|
|
15
18
|
}
|
|
16
19
|
return parsed;
|
|
17
20
|
}
|
|
21
|
+
export function parseRecipeParamAssignments(values) {
|
|
22
|
+
const params = {};
|
|
23
|
+
for (const value of values) {
|
|
24
|
+
const separator = value.indexOf('=');
|
|
25
|
+
if (separator <= 0) {
|
|
26
|
+
throw new Error(`Recipe parameter ${JSON.stringify(value)} must use key=value.`);
|
|
27
|
+
}
|
|
28
|
+
const key = value.slice(0, separator).trim();
|
|
29
|
+
if (!key || Object.hasOwn(params, key)) {
|
|
30
|
+
throw new Error(Object.hasOwn(params, key)
|
|
31
|
+
? `Recipe parameter ${key} was provided more than once.`
|
|
32
|
+
: `Recipe parameter ${JSON.stringify(value)} has an empty key.`);
|
|
33
|
+
}
|
|
34
|
+
const raw = value.slice(separator + 1);
|
|
35
|
+
let parsed;
|
|
36
|
+
try {
|
|
37
|
+
parsed = JSON.parse(raw);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
parsed = raw;
|
|
41
|
+
}
|
|
42
|
+
Object.defineProperty(params, key, {
|
|
43
|
+
value: parsed,
|
|
44
|
+
enumerable: true,
|
|
45
|
+
configurable: true,
|
|
46
|
+
writable: true,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return params;
|
|
50
|
+
}
|
|
18
51
|
export function parseRecordingTarget(options) {
|
|
19
52
|
if (options.recordPid)
|
|
20
53
|
return { kind: 'pid', pid: parsePositiveInteger(options.recordPid) };
|
|
@@ -44,19 +77,26 @@ export async function readRecipeCliJsonFile(filePath, baseDir = recipeCliBaseDir
|
|
|
44
77
|
}
|
|
45
78
|
return parseRecipeCliJsonText(filePath, text);
|
|
46
79
|
}
|
|
47
|
-
async function
|
|
48
|
-
const resolvedPath = resolveRecipeCliPath(filePath, baseDir);
|
|
80
|
+
export async function readRecipeCliJsonFileWithinRoot(root, relativePath) {
|
|
49
81
|
let text;
|
|
50
82
|
try {
|
|
51
|
-
text = await
|
|
83
|
+
text = (await readFileWithinRoot(root, relativePath)).toString('utf-8');
|
|
52
84
|
}
|
|
53
85
|
catch (error) {
|
|
54
|
-
if (error?.code === 'ENOENT')
|
|
55
|
-
return undefined;
|
|
56
86
|
const message = error instanceof Error ? error.message : String(error);
|
|
57
|
-
throw new Error(`Failed to read JSON from ${
|
|
87
|
+
throw new Error(`Failed to read JSON from ${relativePath}: ${message}`, { cause: error });
|
|
88
|
+
}
|
|
89
|
+
return parseRecipeCliJsonText(relativePath, text);
|
|
90
|
+
}
|
|
91
|
+
async function readOptionalRecipeCliJsonFileWithinRoot(root, relativePath) {
|
|
92
|
+
try {
|
|
93
|
+
return await readRecipeCliJsonFileWithinRoot(root, relativePath);
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
if (error?.cause?.code === 'ENOENT')
|
|
97
|
+
return undefined;
|
|
98
|
+
throw error;
|
|
58
99
|
}
|
|
59
|
-
return parseRecipeCliJsonText(filePath, text);
|
|
60
100
|
}
|
|
61
101
|
function parseRecipeCliJsonText(filePath, text) {
|
|
62
102
|
try {
|
|
@@ -67,12 +107,44 @@ function parseRecipeCliJsonText(filePath, text) {
|
|
|
67
107
|
throw new Error(`Failed to parse JSON from ${filePath}: ${message}`);
|
|
68
108
|
}
|
|
69
109
|
}
|
|
70
|
-
export async function validateRecipeCliInput({ recipePath, actionManifestPath, artifactManifestPath, artifactDir, baseDir = recipeCliBaseDir(), librarySources, }) {
|
|
110
|
+
export async function validateRecipeCliInput({ recipePath, actionManifestPath, artifactManifestPath, artifactDir, baseDir = recipeCliBaseDir(), librarySources, params = {}, }) {
|
|
71
111
|
const recipe = await readRecipeCliJsonFile(recipePath, baseDir);
|
|
72
112
|
const results = [];
|
|
73
|
-
const
|
|
74
|
-
?
|
|
113
|
+
const effectiveParams = isRecord(recipe)
|
|
114
|
+
? applyRecipeParamDefaults(params, recipe.paramsSchema)
|
|
115
|
+
: params;
|
|
116
|
+
if (isRecord(recipe))
|
|
117
|
+
results.push(validateRecipeParams(effectiveParams, recipe.paramsSchema));
|
|
118
|
+
const artifactRoot = artifactDir ? resolveRecipeCliPath(artifactDir, baseDir) : undefined;
|
|
119
|
+
const artifactPaths = artifactRoot ? await listRelativeRecipeCliFiles(artifactRoot) : undefined;
|
|
120
|
+
const recipeResolution = artifactRoot
|
|
121
|
+
? await readOptionalRecipeCliJsonFileWithinRoot(artifactRoot, 'recipe-resolution.json')
|
|
75
122
|
: undefined;
|
|
123
|
+
const resolvedRecipes = {};
|
|
124
|
+
if (artifactRoot && isRecord(recipeResolution) && Array.isArray(recipeResolution.dependencies)) {
|
|
125
|
+
for (const dependency of recipeResolution.dependencies) {
|
|
126
|
+
if (!isRecord(dependency))
|
|
127
|
+
continue;
|
|
128
|
+
const artifact = resolvedRecipeArtifactPath(dependency.digest);
|
|
129
|
+
if (!artifact)
|
|
130
|
+
continue;
|
|
131
|
+
const document = await readOptionalRecipeCliJsonFileWithinRoot(artifactRoot, artifact);
|
|
132
|
+
if (document !== undefined)
|
|
133
|
+
resolvedRecipes[String(dependency.digest)] = document;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const libraryResolution = librarySources && librarySources.length > 0
|
|
137
|
+
? await loadRecipeLibraries(librarySources)
|
|
138
|
+
: undefined;
|
|
139
|
+
const externalRecipeIds = new Set(libraryResolution?.recipes.keys() ?? []);
|
|
140
|
+
if (isRecord(recipeResolution) && Array.isArray(recipeResolution.dependencies)) {
|
|
141
|
+
for (const dependency of recipeResolution.dependencies) {
|
|
142
|
+
if (isRecord(dependency) && typeof dependency.ref === 'string') {
|
|
143
|
+
externalRecipeIds.add(dependency.ref);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const validationOptions = externalRecipeIds.size > 0 ? { externalRecipeIds } : undefined;
|
|
76
148
|
if (actionManifestPath) {
|
|
77
149
|
const actionManifest = await readRecipeCliJsonFile(actionManifestPath, baseDir);
|
|
78
150
|
results.push(validateRecipeWithManifest(recipe, actionManifest, validationOptions));
|
|
@@ -80,16 +152,57 @@ export async function validateRecipeCliInput({ recipePath, actionManifestPath, a
|
|
|
80
152
|
else {
|
|
81
153
|
results.push(validateRecipeDocument(recipe, validationOptions));
|
|
82
154
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
155
|
+
if (!artifactDir &&
|
|
156
|
+
libraryResolution &&
|
|
157
|
+
isRecord(recipe) &&
|
|
158
|
+
results.every((result) => result.status === 'valid')) {
|
|
159
|
+
try {
|
|
160
|
+
const rootDigest = digestRecipeDocument(recipe);
|
|
161
|
+
resolveRecipeDependencies({
|
|
162
|
+
rootRef: rootResolutionRef(rootDigest),
|
|
163
|
+
root: recipe,
|
|
164
|
+
rootSource: {
|
|
165
|
+
kind: 'operator',
|
|
166
|
+
trust: 'unknown',
|
|
167
|
+
path: resolveRecipeCliPath(recipePath, baseDir),
|
|
168
|
+
digest: rootDigest,
|
|
169
|
+
},
|
|
170
|
+
recipes: libraryResolution.recipes,
|
|
171
|
+
});
|
|
172
|
+
validateRecipeDependencyParams({
|
|
173
|
+
root: recipe,
|
|
174
|
+
params: effectiveParams,
|
|
175
|
+
recipes: libraryResolution.recipes,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
results.push({
|
|
180
|
+
status: 'invalid',
|
|
181
|
+
findings: [
|
|
182
|
+
{
|
|
183
|
+
severity: 'error',
|
|
184
|
+
code: error instanceof RecipeResolutionError
|
|
185
|
+
? error.code.toLowerCase()
|
|
186
|
+
: 'recipe.unresolved_dependency_graph',
|
|
187
|
+
path: 'workflow',
|
|
188
|
+
message: error instanceof RecipeResolutionError
|
|
189
|
+
? `${error.message} Next: ${error.userAction}.`
|
|
190
|
+
: error instanceof Error
|
|
191
|
+
? error.message
|
|
192
|
+
: String(error),
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
summary: { errors: 1, warnings: 0 },
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
86
199
|
const manifestPath = artifactManifestPath ??
|
|
87
200
|
(artifactDir ? path.join(artifactDir, 'artifact-manifest.json') : undefined);
|
|
88
201
|
let manifest;
|
|
89
202
|
if (manifestPath) {
|
|
90
203
|
manifest = artifactManifestPath
|
|
91
204
|
? await readRecipeCliJsonFile(manifestPath, baseDir)
|
|
92
|
-
: await
|
|
205
|
+
: await readOptionalRecipeCliJsonFileWithinRoot(artifactRoot, 'artifact-manifest.json');
|
|
93
206
|
if (manifest !== undefined && !artifactDir) {
|
|
94
207
|
results.push(validateArtifactManifestDocument(manifest, {
|
|
95
208
|
recipe,
|
|
@@ -98,19 +211,12 @@ export async function validateRecipeCliInput({ recipePath, actionManifestPath, a
|
|
|
98
211
|
}
|
|
99
212
|
}
|
|
100
213
|
if (artifactDir) {
|
|
101
|
-
// Flow-call resolution already ran above via validateRecipeWithManifest with the
|
|
102
|
-
// configured library. Always read resolved-recipe.json so a present-but-malformed
|
|
103
|
-
// file throws (never silently skipped); the validator then checks the composition
|
|
104
|
-
// in full only for a passing run (runPassed) — matching the runner/gateway.
|
|
105
|
-
const resolvedRecipe = await readOptionalRecipeCliJsonFile(path.join(artifactDir, 'resolved-recipe.json'), baseDir);
|
|
106
214
|
results.push(validateRecipeArtifactPackage({
|
|
107
215
|
recipe,
|
|
108
216
|
manifest,
|
|
109
217
|
artifactPaths,
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
// status still requires the composition to be proven.
|
|
113
|
-
runPassed: !(isRecord(manifest) && manifest.runStatus === 'fail'),
|
|
218
|
+
resolvedRecipes,
|
|
219
|
+
recipeResolution,
|
|
114
220
|
}));
|
|
115
221
|
}
|
|
116
222
|
return mergeRecipeValidationResults(results);
|
|
@@ -124,7 +230,7 @@ async function listRelativeRecipeCliFiles(root) {
|
|
|
124
230
|
if (entry.isDirectory()) {
|
|
125
231
|
await visit(relativePath);
|
|
126
232
|
}
|
|
127
|
-
else if (entry.isFile()) {
|
|
233
|
+
else if (entry.isFile() || entry.isSymbolicLink()) {
|
|
128
234
|
output.push(relativePath.split(path.sep).join('/'));
|
|
129
235
|
}
|
|
130
236
|
}
|
package/dist/cli/support.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"support.js","sourceRoot":"","sources":["../../src/cli/support.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,QAAQ,EACR,4BAA4B,EAE5B,gCAAgC,EAChC,6BAA6B,EAC7B,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"support.js","sourceRoot":"","sources":["../../src/cli/support.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-command.d.ts","sourceRoot":"","sources":["../../src/cli/validate-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"validate-command.d.ts","sourceRoot":"","sources":["../../src/cli/validate-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuC9D"}
|
|
@@ -11,7 +11,10 @@ export function registerValidateCommand(program) {
|
|
|
11
11
|
.option('--library <entry>', 'Recipe library source as name=path or path (repeatable; order is precedence, first wins). Defaults to RECIPE_LIBRARY_PATH, then the personal library under the farmslot home — same resolution as run.', collectRepeatable, [])
|
|
12
12
|
.option('--json', 'Print validation result as JSON')
|
|
13
13
|
.action(async (recipePath, options) => {
|
|
14
|
-
const librarySources = await resolveRecipeLibrarySources({
|
|
14
|
+
const librarySources = await resolveRecipeLibrarySources({
|
|
15
|
+
cliEntries: options.library,
|
|
16
|
+
recipePath,
|
|
17
|
+
});
|
|
15
18
|
const result = await validateRecipeCliInput({
|
|
16
19
|
recipePath,
|
|
17
20
|
actionManifestPath: options.actionManifest,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-command.js","sourceRoot":"","sources":["../../src/cli/validate-command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAUtD,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,oDAAoD,CAAC;SACjE,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;SAC3C,MAAM,CAAC,8BAA8B,EAAE,6BAA6B,CAAC;SACrE,MAAM,CAAC,gCAAgC,EAAE,wBAAwB,CAAC;SAClE,MAAM,CAAC,sBAAsB,EAAE,4BAA4B,CAAC;SAC5D,MAAM,CACL,mBAAmB,EACnB,wMAAwM,EACxM,iBAAiB,EACjB,EAAc,CACf;SACA,MAAM,CAAC,QAAQ,EAAE,iCAAiC,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,UAAkB,EAAE,OAA+B,EAAE,EAAE;QACpE,MAAM,cAAc,GAAG,MAAM,2BAA2B,CAAC,
|
|
1
|
+
{"version":3,"file":"validate-command.js","sourceRoot":"","sources":["../../src/cli/validate-command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAUtD,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,oDAAoD,CAAC;SACjE,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;SAC3C,MAAM,CAAC,8BAA8B,EAAE,6BAA6B,CAAC;SACrE,MAAM,CAAC,gCAAgC,EAAE,wBAAwB,CAAC;SAClE,MAAM,CAAC,sBAAsB,EAAE,4BAA4B,CAAC;SAC5D,MAAM,CACL,mBAAmB,EACnB,wMAAwM,EACxM,iBAAiB,EACjB,EAAc,CACf;SACA,MAAM,CAAC,QAAQ,EAAE,iCAAiC,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,UAAkB,EAAE,OAA+B,EAAE,EAAE;QACpE,MAAM,cAAc,GAAG,MAAM,2BAA2B,CAAC;YACvD,UAAU,EAAE,OAAO,CAAC,OAAO;YAC3B,UAAU;SACX,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;YAC1C,UAAU;YACV,kBAAkB,EAAE,OAAO,CAAC,cAAc;YAC1C,oBAAoB,EAAE,OAAO,CAAC,gBAAgB;YAC9C,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzD,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,sBAAsB,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM,YAAY,MAAM,CAAC,OAAO,CAAC,QAAQ,YAAY,CAC7G,CAAC;YACF,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3F,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa,EAAE,QAAkB;IAC1D,OAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC"}
|