@farmslot/recipe-cli 0.6.0 → 0.7.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 CHANGED
@@ -6,6 +6,19 @@ All notable changes to `@farmslot/recipe-cli` are tracked here.
6
6
 
7
7
  - Active-development baseline; add user-facing changes here before release or package publication.
8
8
 
9
+ ## 0.7.0 - 2026-10-06
10
+
11
+ - Add `createHarnessCli({ host, adapters, libraries, commands, help, beforeDispatch, catalog, adopt, configuredLibraries, replacedOptions })` to `@farmslot/recipe-cli/harness`, the generic front door a product harness presets. `main(argv)` returns `{ exitCode, exit }` and `run()` exits with it.
12
+ - It provides the grouped help (the host's intro, groups and footer, the `<PREFIX>_BIN` dev override line and the prepared-slot line), per-command `--help`, `-v/--version`, which prints the host's package version as one line (a host `package.json` without a version is a startup error), and `--version --verbose`, which adds `@farmslot/recipe-cli <version>` (one line when the host is recipe-cli itself).
13
+ - Each public command carries its `contract`, so the command list and the grammar can't drift apart. Hidden commands keep their private grammar.
14
+ - Order per invocation: `beforeDispatch` (unless the command sets `nudge: false`); help for no arguments; `raw` commands; the public grammar; `libraries.hydrate(--target)`; `ensureAdapterLoaded` for the adapter the command selects (`selectedAdapterId`), with the `--library` entries, the host's `configuredLibraries()` and `adopt`, and the environment the operator started the command with (libraries that `libraries.hydrate` adds never load plugins) (a refused plugin, `AdapterPluginError` or the import fence's `RECIPE_SOURCE_INVALID`, prints its code and next step, or the NDJSON `error` and `complete` events under `--json-stream`, exit 2); `--help` after `--` handed to the command; `call <action> --help` through the `catalog`; commander.
15
+ - One error mapper: a command that throws exits with the error's `exitCode` (a `CliError`), else 1. A public command sets `process.exitCode` by default and a hidden one exits at once; `exit` overrides either.
16
+ - Add the public command contract to `@farmslot/recipe-cli/harness`: `validatePublicInvocation(argv, commands, { replacedOptions })` returns a stable `CLI_*` usage error naming the host, or null.
17
+ - Option builders: `booleanOption`, `valueOption`, `optionalValueOption`, `contractOptions`. `OptionSpec.choices` can be a function of the tokens after the command, read at validation time (for example `(tokens) => adapterChoices(optionValues(tokens, '--library'))`). `optionValues(tokens, option)` returns every value an option takes before `--`.
18
+ - Command hooks: `bypass` (a sub-grammar another tool checks), `refine` (command rules, given `ContractFailures`) and `missingPositionalAction`.
19
+ - `publicCommandTokens(commands)` lists every name and alias.
20
+ - Publish with adapter-sdk 0.5.1, agent-runtime 0.17.0, protocol 0.34.0 and recipe-runner 0.26.0.
21
+
9
22
  ## 0.6.0 - 2026-10-06
10
23
 
11
24
  - **BREAKING:** a run plans with a runner that has no trusted mutation. `createRunner` no longer receives the mutation `trustedMutation.load` returned for the runner that computes the plan; only the mutation `authorize` returns reaches a runner. A host whose runner reads `options.trustedMutation` during construction or preflight now sees `undefined` there; move that check to `authorize`, which receives the loaded mutation and the plan.
@@ -0,0 +1,69 @@
1
+ export type CliUsageErrorCode = 'CLI_UNKNOWN_COMMAND' | 'CLI_UNKNOWN_OPTION' | 'CLI_MISSING_OPTION_VALUE' | 'CLI_INVALID_OPTION_VALUE' | 'CLI_MISSING_POSITIONAL' | 'CLI_INVALID_POSITIONAL' | 'CLI_EXCESS_POSITIONAL' | 'CLI_UNEXPECTED_PASSTHROUGH';
2
+ export interface OptionSpec {
3
+ kind: 'boolean' | 'value' | 'optional-value';
4
+ /**
5
+ * Accepted values. A function is read at validation time with the tokens
6
+ * after the command (registry ids plus the ids `--library` entries declare).
7
+ */
8
+ choices?: readonly string[] | ((tokens: readonly string[]) => readonly string[]);
9
+ }
10
+ export interface PositionalSpec {
11
+ label: string;
12
+ choices?: readonly string[];
13
+ pattern?: RegExp;
14
+ validate?: (value: string) => boolean;
15
+ validDescription?: string;
16
+ }
17
+ export interface CliUsageError {
18
+ code: CliUsageErrorCode;
19
+ command: string;
20
+ message: string;
21
+ userAction: string;
22
+ }
23
+ /** The failures a command's `refine` hook builds, with the command's own recovery lines. */
24
+ export interface ContractFailures {
25
+ usage(code: CliUsageErrorCode, message: string): CliUsageError;
26
+ missingPositional(message: string): CliUsageError;
27
+ }
28
+ export interface CommandContract {
29
+ usage?: string;
30
+ options: Readonly<Record<string, OptionSpec>>;
31
+ positionals?: readonly PositionalSpec[];
32
+ minimumPositionals?: number;
33
+ variadic?: PositionalSpec;
34
+ requiredUnless?: readonly string[];
35
+ noPositionalsWith?: readonly string[];
36
+ leadingPositionals?: number;
37
+ allowPassthrough?: boolean;
38
+ /** A sub-grammar another tool validates: skip this contract entirely. */
39
+ bypass?: (tokens: readonly string[]) => boolean;
40
+ /** Command-specific rules, after option parsing and before the positional checks. */
41
+ refine?: (positionals: readonly string[], seenOptions: ReadonlySet<string>, fail: ContractFailures) => CliUsageError | null;
42
+ /** The recovery for a missing positional, given the command's example. */
43
+ missingPositionalAction?: (example: string) => string;
44
+ }
45
+ /** A command the contract knows: its name, aliases, example and grammar. */
46
+ export interface ContractedCommand {
47
+ name: string;
48
+ aliases?: readonly string[];
49
+ example: string;
50
+ contract: CommandContract;
51
+ }
52
+ export interface ContractValidationOptions {
53
+ /** Retired option spellings and the option that replaces each, for the suggestion. */
54
+ replacedOptions?: Readonly<Record<string, string>>;
55
+ }
56
+ export declare const booleanOption: () => OptionSpec;
57
+ export declare const valueOption: (choices?: OptionSpec["choices"]) => OptionSpec;
58
+ export declare const optionalValueOption: (choices?: OptionSpec["choices"]) => OptionSpec;
59
+ export declare const contractOptions: (...groups: Record<string, OptionSpec>[]) => Readonly<Record<string, OptionSpec>>;
60
+ /**
61
+ * The usage error for `argv`, or null when it is valid. `commands` is the
62
+ * host's public table; its order is the order "Valid commands" lists.
63
+ */
64
+ export declare function validatePublicInvocation(argv: readonly string[], commands: readonly ContractedCommand[], validation?: ContractValidationOptions): CliUsageError | null;
65
+ /** Every value `option` takes in `tokens` before any `--`, separate (`--x v`) or inline (`--x=v`). */
66
+ export declare function optionValues(tokens: readonly string[], option: string): string[];
67
+ /** Every public command name and alias, in table order. */
68
+ export declare function publicCommandTokens(commands: readonly ContractedCommand[]): string[];
69
+ //# sourceMappingURL=command-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-contract.d.ts","sourceRoot":"","sources":["../../src/harness/command-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,243 @@
1
+ // The strict public grammar a host CLI checks before commander can consume a
2
+ // typo as a value: each public command declares its options and positionals,
3
+ // and a mismatch becomes a stable, machine-readable usage error.
4
+ import { harnessHost } from './host.js';
5
+ import { closest } from './suggest.js';
6
+ export const booleanOption = () => ({ kind: 'boolean' });
7
+ export const valueOption = (choices) => ({
8
+ kind: 'value',
9
+ ...(choices ? { choices } : {}),
10
+ });
11
+ export const optionalValueOption = (choices) => ({
12
+ kind: 'optional-value',
13
+ ...(choices ? { choices } : {}),
14
+ });
15
+ export const contractOptions = (...groups) => Object.assign({}, ...groups);
16
+ /**
17
+ * The usage error for `argv`, or null when it is valid. `commands` is the
18
+ * host's public table; its order is the order "Valid commands" lists.
19
+ */
20
+ export function validatePublicInvocation(argv, commands, validation = {}) {
21
+ const host = harnessHost().name;
22
+ const examples = Object.fromEntries(commands.map((command) => [command.name, command.example]));
23
+ const token = argv[0];
24
+ if (!token || token === '--help' || token === '-h' || token === '--version' || token === '-v')
25
+ return null;
26
+ const resolved = resolveContractedCommand(token, commands);
27
+ if (!resolved) {
28
+ const suggestion = closest(token, publicCommandTokens(commands));
29
+ if (token.startsWith('-')) {
30
+ return {
31
+ code: 'CLI_UNKNOWN_OPTION',
32
+ command: host,
33
+ message: `unknown top-level option '${token}'. Valid top-level options: --help, --version.`,
34
+ userAction: actionFor(token, closest(token, ['--help', '--version']), `${host} --help`),
35
+ };
36
+ }
37
+ return {
38
+ code: 'CLI_UNKNOWN_COMMAND',
39
+ command: token,
40
+ message: `unknown command '${token}'. Valid commands: ${commands.map((command) => command.name).join(', ')}.`,
41
+ userAction: actionFor(token, suggestion, suggestion
42
+ ? exampleFor(host, resolveContractedCommand(suggestion, commands)?.name, examples)
43
+ : `${host} --help`),
44
+ };
45
+ }
46
+ const { name, contract } = resolved;
47
+ const tokens = argv.slice(1);
48
+ if (contract.bypass?.(tokens))
49
+ return null;
50
+ const fail = {
51
+ usage: (code, message) => usageFailure(host, code, name, message, examples),
52
+ missingPositional: (message) => missingPositionalFailure(host, name, message, contract, examples),
53
+ };
54
+ const positionals = [];
55
+ const seenOptions = new Set();
56
+ const validOptions = Object.keys(contract.options);
57
+ for (let index = 0; index < tokens.length; index += 1) {
58
+ const argument = tokens[index] ?? '';
59
+ if (argument === '--') {
60
+ if (!contract.allowPassthrough) {
61
+ return fail.usage('CLI_UNEXPECTED_PASSTHROUGH', 'this command does not accept `--` passthrough.');
62
+ }
63
+ break;
64
+ }
65
+ if (!argument.startsWith('-') || argument === '-') {
66
+ positionals.push(argument);
67
+ continue;
68
+ }
69
+ const equals = argument.indexOf('=');
70
+ const optionName = equals === -1 ? argument : argument.slice(0, equals);
71
+ const inlineValue = equals === -1 ? undefined : argument.slice(equals + 1);
72
+ const spec = contract.options[optionName];
73
+ if (!spec) {
74
+ const suggestion = validation.replacedOptions?.[optionName] ?? closest(optionName, validOptions);
75
+ return {
76
+ code: 'CLI_UNKNOWN_OPTION',
77
+ command: name,
78
+ message: `unknown option '${optionName}'.`,
79
+ userAction: actionFor(optionName, suggestion, exampleFor(host, name, examples)),
80
+ };
81
+ }
82
+ seenOptions.add(optionName);
83
+ if (spec.kind === 'boolean') {
84
+ if (inlineValue !== undefined) {
85
+ return fail.usage('CLI_INVALID_OPTION_VALUE', `${optionName} is a flag and does not take a value.`);
86
+ }
87
+ continue;
88
+ }
89
+ if (spec.kind === 'optional-value' && inlineValue === undefined)
90
+ continue;
91
+ const optionValue = inlineValue ?? tokens[index + 1];
92
+ const nextTokenIsOption = inlineValue === undefined &&
93
+ (optionValue === '-h' || optionValue === '--' || optionValue?.startsWith('--'));
94
+ if (optionValue === undefined ||
95
+ (spec.kind === 'value' && optionValue === '') ||
96
+ nextTokenIsOption) {
97
+ return fail.usage('CLI_MISSING_OPTION_VALUE', `${optionName} requires a value.`);
98
+ }
99
+ if (inlineValue === undefined)
100
+ index += 1;
101
+ const choices = typeof spec.choices === 'function' ? spec.choices(tokens) : spec.choices;
102
+ if (choices && !choices.includes(optionValue)) {
103
+ const suggestion = closest(optionValue, choices);
104
+ return {
105
+ code: 'CLI_INVALID_OPTION_VALUE',
106
+ command: name,
107
+ message: `${optionName} must be ${formatChoiceList(choices)}; received '${optionValue}'.`,
108
+ userAction: actionFor(optionValue, suggestion, exampleFor(host, name, examples)),
109
+ };
110
+ }
111
+ }
112
+ if (seenOptions.has('--help') || seenOptions.has('-h'))
113
+ return null;
114
+ const refined = contract.refine?.(positionals, seenOptions, fail);
115
+ if (refined)
116
+ return refined;
117
+ if (contract.leadingPositionals &&
118
+ !contract.requiredUnless?.some((option) => seenOptions.has(option)) &&
119
+ tokens
120
+ .slice(0, contract.leadingPositionals)
121
+ .some((argument) => !argument || argument.startsWith('-'))) {
122
+ const missing = contract.positionals?.[0]?.label ?? 'argument';
123
+ return fail.missingPositional(`${name} requires <${missing}> first.`);
124
+ }
125
+ const forbiddingOption = contract.noPositionalsWith?.find((option) => seenOptions.has(option));
126
+ if (forbiddingOption && positionals.length > 0) {
127
+ return fail.usage('CLI_EXCESS_POSITIONAL', `${forbiddingOption} does not accept positional '${positionals[0]}'.`);
128
+ }
129
+ const minimum = contract.requiredUnless?.some((option) => seenOptions.has(option))
130
+ ? 0
131
+ : (contract.minimumPositionals ?? 0);
132
+ if (positionals.length < minimum) {
133
+ const missingSpec = contract.positionals?.[positionals.length];
134
+ const missing = missingSpec?.label ?? 'argument';
135
+ const valid = missingSpec?.choices?.length
136
+ ? ` Choose one: ${missingSpec.choices.join('|')}.`
137
+ : '';
138
+ const usage = contract.usage ? ` Usage: ${contract.usage}.` : '';
139
+ return fail.missingPositional(`missing required <${missing}>.${valid}${usage}`);
140
+ }
141
+ const fixed = contract.positionals ?? [];
142
+ for (let index = 0; index < Math.min(positionals.length, fixed.length); index += 1) {
143
+ if (invalidPositional(positionals[index] ?? '', fixed[index]))
144
+ return positionalFailure(host, name, positionals[index] ?? '', fixed[index], examples);
145
+ }
146
+ if (positionals.length > fixed.length && !contract.variadic) {
147
+ const unexpected = positionals[fixed.length] ?? '';
148
+ return fail.usage('CLI_EXCESS_POSITIONAL', `unexpected positional '${unexpected}'; this command accepts ${formatPositionals(contract)}.`);
149
+ }
150
+ if (contract.variadic) {
151
+ for (const positional of positionals.slice(fixed.length)) {
152
+ if (invalidPositional(positional, contract.variadic)) {
153
+ return positionalFailure(host, name, positional, contract.variadic, examples);
154
+ }
155
+ }
156
+ }
157
+ return null;
158
+ }
159
+ /** Every value `option` takes in `tokens` before any `--`, separate (`--x v`) or inline (`--x=v`). */
160
+ export function optionValues(tokens, option) {
161
+ const values = [];
162
+ const divider = tokens.indexOf('--');
163
+ const scope = divider === -1 ? tokens : tokens.slice(0, divider);
164
+ for (let index = 0; index < scope.length; index += 1) {
165
+ const token = scope[index] ?? '';
166
+ if (token === option && index + 1 < scope.length)
167
+ values.push(scope[(index += 1)] ?? '');
168
+ else if (token.startsWith(`${option}=`))
169
+ values.push(token.slice(option.length + 1));
170
+ }
171
+ return values;
172
+ }
173
+ /** Every public command name and alias, in table order. */
174
+ export function publicCommandTokens(commands) {
175
+ return commands.flatMap((command) => [command.name, ...(command.aliases ?? [])]);
176
+ }
177
+ function resolveContractedCommand(token, commands) {
178
+ return (commands.find((command) => command.name === token) ??
179
+ commands.find((command) => command.aliases?.includes(token)));
180
+ }
181
+ function usageFailure(host, code, command, message, examples) {
182
+ return {
183
+ code,
184
+ command,
185
+ message,
186
+ userAction: `Try: ${exampleFor(host, command, examples)}. Inspect options: ${host} ${command} --help`,
187
+ };
188
+ }
189
+ function missingPositionalFailure(host, command, message, contract, examples) {
190
+ if (contract.missingPositionalAction) {
191
+ return {
192
+ code: 'CLI_MISSING_POSITIONAL',
193
+ command,
194
+ message,
195
+ userAction: contract.missingPositionalAction(exampleFor(host, command, examples)),
196
+ };
197
+ }
198
+ return usageFailure(host, 'CLI_MISSING_POSITIONAL', command, message, examples);
199
+ }
200
+ function positionalFailure(host, command, received, spec, examples) {
201
+ const valid = spec.validDescription ??
202
+ (spec.choices
203
+ ? spec.choices.join(', ')
204
+ : spec.pattern || spec.validate
205
+ ? `a valid <${spec.label}>`
206
+ : `<${spec.label}>`);
207
+ const suggestion = spec.choices ? closest(received, spec.choices) : undefined;
208
+ return {
209
+ code: 'CLI_INVALID_POSITIONAL',
210
+ command,
211
+ message: `invalid <${spec.label}> '${received}'. Valid values: ${valid}.`,
212
+ userAction: actionFor(received, suggestion, exampleFor(host, command, examples)),
213
+ };
214
+ }
215
+ function invalidPositional(value, spec) {
216
+ if (!spec)
217
+ return true;
218
+ if (spec.choices && !spec.choices.includes(value))
219
+ return true;
220
+ if (spec.validate && !spec.validate(value))
221
+ return true;
222
+ return Boolean(spec.pattern && !spec.pattern.test(value));
223
+ }
224
+ function formatChoiceList(choices) {
225
+ if (choices.length === 1)
226
+ return choices[0] ?? '';
227
+ if (choices.length === 2)
228
+ return `${choices[0]} or ${choices[1]}`;
229
+ return `${choices.slice(0, -1).join(', ')}, or ${choices[choices.length - 1]}`;
230
+ }
231
+ function formatPositionals(contract) {
232
+ const fixed = (contract.positionals ?? []).map((spec) => `<${spec.label}>`);
233
+ if (contract.variadic)
234
+ fixed.push(`[<${contract.variadic.label}> ...]`);
235
+ return fixed.length > 0 ? fixed.join(' ') : 'no positionals';
236
+ }
237
+ function actionFor(received, suggestion, example) {
238
+ return `${suggestion ? `Did you mean '${suggestion}' instead of '${received}'? ` : ''}Try: ${example}`;
239
+ }
240
+ function exampleFor(host, command, examples) {
241
+ return command ? (examples[command] ?? `${host} ${command} --help`) : `${host} --help`;
242
+ }
243
+ //# sourceMappingURL=command-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-contract.js","sourceRoot":"","sources":["../../src/harness/command-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import type { AdapterRegistry } from '@farmslot/adapter-sdk';
2
+ import { type AdapterLoadOptions } from './adapter-plugins.js';
3
+ import type { RecipeCatalog } from './catalog.js';
4
+ import { type CommandContract } from './command-contract.js';
5
+ import { type HarnessHostConfig } from './host.js';
6
+ interface CommandBase {
7
+ name: string;
8
+ /** `now`: process.exit(code) at once. `code`: set process.exitCode and let open work drain. */
9
+ exit?: 'now' | 'code';
10
+ /** Whether the host's `beforeDispatch` hook runs for this command. Default true. */
11
+ nudge?: boolean;
12
+ /** `argv` is everything after the command token. A thrown error exits with its `exitCode`, else 1. */
13
+ run(argv: string[]): number | Promise<number>;
14
+ }
15
+ /** A command the grouped help lists and the public grammar checks. Default exit: `code`. */
16
+ export interface PublicHarnessCommand extends CommandBase {
17
+ hidden?: false;
18
+ aliases?: readonly string[];
19
+ summary: string;
20
+ example: string;
21
+ /** Printed for `<command> --help`. */
22
+ helpText: string;
23
+ contract: CommandContract;
24
+ /** Runs before the grammar check, library hydration and commander (a bootstrap command). */
25
+ raw?: boolean;
26
+ }
27
+ /** Real routing absent from the help, with its own private grammar. Default exit: `now`. */
28
+ export interface HiddenHarnessCommand extends CommandBase {
29
+ hidden: true;
30
+ }
31
+ export type HarnessCommand = PublicHarnessCommand | HiddenHarnessCommand;
32
+ export type HelpPaint = (style: string, text: string) => string;
33
+ export interface HarnessHelpGroup {
34
+ title: string;
35
+ blurb: string;
36
+ commands: readonly string[];
37
+ }
38
+ export interface HarnessHelp {
39
+ /** The commander program description. */
40
+ description: string;
41
+ /** The lines above the groups. */
42
+ intro(paint: HelpPaint): string[];
43
+ groups: readonly HarnessHelpGroup[];
44
+ /** The lines below the groups, after one blank line. */
45
+ footer(paint: HelpPaint): string[];
46
+ /** The adapter a runtime context's `platform` names, when it is not an adapter id. */
47
+ slotAdapter?(platform: string): string | undefined;
48
+ }
49
+ export interface HarnessCliOptions {
50
+ host: HarnessHostConfig;
51
+ adapters: AdapterRegistry;
52
+ /** Makes every library this machine resolves visible (RECIPE_LIBRARY_PATH) before dispatch. */
53
+ libraries?: {
54
+ hydrate(target: string): Promise<void>;
55
+ };
56
+ /** Public commands in the order "Valid commands" lists them, plus hidden ones. */
57
+ commands: readonly HarnessCommand[];
58
+ help: HarnessHelp;
59
+ /** Runs once per invocation before any command (an update nudge). */
60
+ beforeDispatch?(argv: readonly string[]): void;
61
+ /** When set, `call <action> --help` renders the action's fields above call's help. */
62
+ catalog?: RecipeCatalog;
63
+ /** Turns a library-declared adapter into the host's adapter before it registers. */
64
+ adopt?: AdapterLoadOptions['adopt'];
65
+ /** Libraries the host configures (a config file), searched after the others for adapters. */
66
+ configuredLibraries?(): AdapterLoadOptions['configured'];
67
+ /** Retired option spellings and their replacements, for the unknown-option suggestion. */
68
+ replacedOptions?: Readonly<Record<string, string>>;
69
+ }
70
+ export interface HarnessCliResult {
71
+ exitCode: number;
72
+ exit: 'now' | 'code';
73
+ }
74
+ export interface HarnessCli {
75
+ /** Parse and dispatch `argv` (without node and script); never exits the process. */
76
+ main(argv: readonly string[]): Promise<HarnessCliResult>;
77
+ /** `main(process.argv.slice(2))`, then exit as the command asked. */
78
+ run(argv?: readonly string[]): Promise<void>;
79
+ }
80
+ export declare function createHarnessCli(options: HarnessCliOptions): HarnessCli;
81
+ export {};
82
+ //# sourceMappingURL=harness-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-cli.d.ts","sourceRoot":"","sources":["../../src/harness/harness-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,319 @@
1
+ // createHarnessCli: the generic front door a product harness presets. It owns
2
+ // the commander program, grouped and per-command help, the version line, the
3
+ // strict public grammar, library hydration and dispatch; the host supplies its
4
+ // identity, adapters, commands and help prose.
5
+ import fs from 'node:fs';
6
+ import path from 'node:path';
7
+ import { Command, CommanderError } from 'commander';
8
+ import { RecipeTrustError } from '@farmslot/recipe-runner';
9
+ import { RECIPE_CLI_VERSION } from '../version.js';
10
+ import { handleCallHelp } from './commands/call.js';
11
+ import { AdapterPluginError, adapterSelectionFailureOut, ensureAdapterLoaded, selectedAdapterId, } from './adapter-plugins.js';
12
+ import { configureHarnessAdapters, detectAdapter, harnessAdapter } from './adapters.js';
13
+ import { color } from './cli-color.js';
14
+ import { optionValues, validatePublicInvocation, } from './command-contract.js';
15
+ import { withCommandJournal } from './command-journal.js';
16
+ import { configureHarnessHost, hostEnvName } from './host.js';
17
+ import { JsonStreamWriter } from './json-stream.js';
18
+ import { DEFAULT_RECIPE_RUNTIME_DIR } from './paths.js';
19
+ const RECIPE_CLI_PACKAGE = '@farmslot/recipe-cli';
20
+ export function createHarnessCli(options) {
21
+ const host = configureHarnessHost(options.host);
22
+ configureHarnessAdapters(options.adapters);
23
+ const publicCommands = options.commands.filter((command) => !command.hidden);
24
+ const find = (token) => token === undefined
25
+ ? undefined
26
+ : (options.commands.find((command) => command.name === token) ??
27
+ publicCommands.find((command) => command.aliases?.includes(token)));
28
+ const version = readPackageVersion(host.packageRoot);
29
+ // `--version --verbose` adds the recipe-cli a preset runs on; `--version`
30
+ // stays the one line scripts compare.
31
+ const verboseVersion = host.packageName === RECIPE_CLI_PACKAGE
32
+ ? version
33
+ : `${version}\n${RECIPE_CLI_PACKAGE} ${RECIPE_CLI_VERSION}`;
34
+ const renderHelp = () => groupedHelp(options.help, publicCommands);
35
+ async function main(argv) {
36
+ // The libraries the operator started the command with: plugins load only
37
+ // from these, never from the ones library hydration discovers.
38
+ const operatorEnv = { ...process.env };
39
+ const command = find(argv[0]);
40
+ if (argv.length > 0 && command?.nudge !== false)
41
+ options.beforeDispatch?.(argv);
42
+ if (argv.length === 0) {
43
+ process.stdout.write(renderHelp());
44
+ return { exitCode: 0, exit: 'now' };
45
+ }
46
+ // Commander prints `--version` and exits at the flag, so it never sees `--verbose`.
47
+ if ((argv[0] === '--version' || argv[0] === '-v') && argv.slice(1).includes('--verbose')) {
48
+ process.stdout.write(`${verboseVersion}\n`);
49
+ return { exitCode: 0, exit: 'now' };
50
+ }
51
+ if (command && !command.hidden && command.raw) {
52
+ return { exitCode: await dispatch(command, argv), exit: exitOf(command) };
53
+ }
54
+ // Public commands use a strict grammar before commander can consume a typo
55
+ // as a value. Hidden commands keep their private grammar.
56
+ if (!command?.hidden) {
57
+ const usageError = validatePublicInvocation(argv, publicCommands, {
58
+ replacedOptions: options.replacedOptions,
59
+ });
60
+ if (usageError) {
61
+ writeUsageError(host.name, usageError, requested(argv, '--json'), requested(argv, '--json-stream'));
62
+ return { exitCode: 2, exit: 'now' };
63
+ }
64
+ }
65
+ await options.libraries?.hydrate(targetFromArgv(argv));
66
+ // A library-declared adapter loads only when the command selects it.
67
+ if (command) {
68
+ const refused = await loadSelectedAdapter(command.name, argv, {
69
+ adopt: options.adopt,
70
+ configured: options.configuredLibraries?.(),
71
+ env: operatorEnv,
72
+ });
73
+ if (refused !== undefined)
74
+ return { exitCode: refused, exit: 'now' };
75
+ }
76
+ // Leaves own --help after `--`; commander would intercept it.
77
+ if (command && hasPassthroughHelp(argv)) {
78
+ return { exitCode: await dispatch(command, argv), exit: 'now' };
79
+ }
80
+ // `call <action> --help` renders the action's field schema; commander would
81
+ // show only the generic call help, which follows it.
82
+ const call = publicCommands.find((entry) => entry.name === 'call');
83
+ if (options.catalog && call && isCallActionHelp(argv)) {
84
+ const catalog = options.catalog;
85
+ const exitCode = await mapErrors(() => handleCallHelp(argv.slice(1), call.helpText, { catalog }));
86
+ return { exitCode, exit: 'now' };
87
+ }
88
+ let result = { exitCode: 0, exit: 'code' };
89
+ const program = new Command();
90
+ program
91
+ .name(host.name)
92
+ .description(options.help.description)
93
+ .version(version, '-v, --version', `Print the ${host.name} version`)
94
+ .addHelpCommand(false)
95
+ .helpOption('-h, --help', 'Show grouped help')
96
+ .showHelpAfterError(`(run \`${host.name} --help\` for the full surface)`)
97
+ .configureHelp({ formatHelp: renderHelp })
98
+ .exitOverride();
99
+ for (const entry of options.commands) {
100
+ const registered = entry.hidden
101
+ ? program.command(entry.name, { hidden: true }).allowUnknownOption().helpOption(false)
102
+ : program
103
+ .command(entry.name)
104
+ .description(entry.summary)
105
+ .allowUnknownOption()
106
+ .helpOption('-h, --help', 'Show command help')
107
+ .configureHelp({ formatHelp: () => `${entry.helpText}\n` });
108
+ if (!entry.hidden && entry.aliases?.length)
109
+ registered.aliases([...entry.aliases]);
110
+ registered.argument('[args...]').action(async () => {
111
+ const exitCode = entry.hidden
112
+ ? await dispatch(entry, argv)
113
+ : await withCommandJournal(entry.name, argv, () => dispatch(entry, argv));
114
+ result = { exitCode, exit: exitOf(entry) };
115
+ });
116
+ }
117
+ try {
118
+ await program.parseAsync([...argv], { from: 'user' });
119
+ }
120
+ catch (error) {
121
+ // Help, version and commander's own errors end here after printing.
122
+ if (error instanceof CommanderError)
123
+ return { exitCode: error.exitCode, exit: 'now' };
124
+ throw error;
125
+ }
126
+ return result;
127
+ }
128
+ return {
129
+ main,
130
+ async run(argv = process.argv.slice(2)) {
131
+ const { exitCode, exit } = await main(argv);
132
+ if (exit === 'now')
133
+ process.exit(exitCode);
134
+ process.exitCode = exitCode;
135
+ },
136
+ };
137
+ }
138
+ // Loads the adapter the command selects (`selectedAdapterId`), if a library
139
+ // declares it. A refused plugin prints its code and next step; returns that exit.
140
+ async function loadSelectedAdapter(command, argv, load) {
141
+ const tokens = argv.slice(1);
142
+ const selected = selectedAdapterId(tokens);
143
+ if (selected === undefined)
144
+ return undefined;
145
+ try {
146
+ await ensureAdapterLoaded(selected, { ...load, libraries: optionValues(tokens, '--library') });
147
+ return undefined;
148
+ }
149
+ catch (error) {
150
+ // A refused plugin, or the library reader's refusal of its source.
151
+ if (error instanceof AdapterPluginError || error instanceof RecipeTrustError) {
152
+ const failure = { code: error.code, message: error.message, userAction: error.userAction };
153
+ if (requested(argv, '--json-stream')) {
154
+ const stream = new JsonStreamWriter(command, true);
155
+ stream.error(failure);
156
+ stream.complete('fail', 2);
157
+ return 2;
158
+ }
159
+ return adapterSelectionFailureOut(requested(argv, '--json'), command, failure);
160
+ }
161
+ return mapErrors(() => {
162
+ throw error;
163
+ });
164
+ }
165
+ }
166
+ function exitOf(command) {
167
+ return command.exit ?? (command.hidden ? 'now' : 'code');
168
+ }
169
+ function dispatch(command, argv) {
170
+ return mapErrors(() => command.run(argv.slice(1)));
171
+ }
172
+ // The one place a command's failure becomes an exit code: a CliError carries
173
+ // its own (usage 2, validation 5), anything else is 1.
174
+ async function mapErrors(execute) {
175
+ try {
176
+ return await execute();
177
+ }
178
+ catch (error) {
179
+ console.error(error instanceof Error ? error.message : String(error));
180
+ return error !== null &&
181
+ typeof error === 'object' &&
182
+ 'exitCode' in error &&
183
+ typeof error.exitCode === 'number'
184
+ ? error.exitCode
185
+ : 1;
186
+ }
187
+ }
188
+ // The host's own version. `host.packageRoot` is required config, so a missing or
189
+ // unreadable package.json is a host wiring error, not a version to guess.
190
+ function readPackageVersion(packageRoot) {
191
+ const file = path.join(packageRoot, 'package.json');
192
+ const parsed = JSON.parse(fs.readFileSync(file, 'utf8'));
193
+ if (typeof parsed.version !== 'string')
194
+ throw new Error(`${file} has no version.`);
195
+ return parsed.version;
196
+ }
197
+ function groupedHelp(help, commands) {
198
+ const out = (style, text) => color(style, text, { stream: process.stdout });
199
+ const lines = [...help.intro(out)];
200
+ const binEnv = hostEnvName('BIN');
201
+ const bin = process.env[binEnv];
202
+ const runMode = process.env[hostEnvName('RUN_MODE')];
203
+ if (bin) {
204
+ lines.push('');
205
+ lines.push(`${out('warn', 'DEV OVERRIDE ACTIVE')} — this run is served by ${binEnv}=${out('path', bin)} (unset it to return to the installed/global bin).`);
206
+ }
207
+ if (bin && runMode) {
208
+ lines.push(`${out('label', 'running from:')} ${out('path', runMode)} (source checkout; dist shadows src when both exist)`);
209
+ }
210
+ const slotLine = detectedSlotLine(out, help.slotAdapter);
211
+ if (slotLine) {
212
+ lines.push('');
213
+ lines.push(slotLine);
214
+ }
215
+ for (const group of help.groups) {
216
+ lines.push('');
217
+ lines.push(`${out('label', group.title)} — ${group.blurb}:`);
218
+ for (const name of group.commands) {
219
+ const command = commands.find((entry) => entry.name === name);
220
+ lines.push(` ${out('cmd', name.padEnd(10))} ${command?.summary ?? ''}`);
221
+ lines.push(` ${out('comment', command?.example ?? '')}`);
222
+ }
223
+ }
224
+ lines.push('');
225
+ lines.push(...help.footer(out));
226
+ return `${lines.join('\n')}\n`;
227
+ }
228
+ // The slot context the orchestrator's prepare wrote into the checkout, when
229
+ // help runs from inside one. Presence-gated: no context, no line.
230
+ function detectedSlotLine(out, slotAdapter) {
231
+ const ctxPath = path.join(process.cwd(), process.env.RECIPE_RUNTIME_DIR || DEFAULT_RECIPE_RUNTIME_DIR, 'agentic-runtime.json');
232
+ let ctx;
233
+ try {
234
+ ctx = JSON.parse(fs.readFileSync(ctxPath, 'utf8'));
235
+ }
236
+ catch (error) {
237
+ // No context file, or one mid-write: no slot line. Anything else is a bug.
238
+ if (error instanceof SyntaxError || error.code === 'ENOENT') {
239
+ return null;
240
+ }
241
+ throw error;
242
+ }
243
+ if (ctx === null || typeof ctx !== 'object')
244
+ return null;
245
+ const platform = typeof ctx.platform === 'string' ? ctx.platform : undefined;
246
+ const adapter = (platform ? slotAdapter?.(platform) : undefined) ?? detectAdapter(process.cwd());
247
+ const parts = [];
248
+ if (ctx.slotId)
249
+ parts.push(`slot ${out('ok', String(ctx.slotId))}`);
250
+ if (ctx.simulator)
251
+ parts.push(`device ${out('ok', String(ctx.simulator))}`);
252
+ const devServerPort = ctx.watcherPort ?? ctx.devServerPort ?? ctx.metroPort;
253
+ const surface = adapter ? harnessAdapter(adapter) : undefined;
254
+ if (surface && !surface.headless && devServerPort) {
255
+ parts.push(`${surface.devServer.label} :${out('ok', String(devServerPort))}`);
256
+ }
257
+ if (ctx.gitBranch)
258
+ parts.push(`branch ${out('info', String(ctx.gitBranch))}`);
259
+ if (parts.length === 0)
260
+ return null;
261
+ return `${out('label', 'SLOT')} — this checkout is a prepared slot: ${parts.join(' · ')}`;
262
+ }
263
+ function writeUsageError(hostName, error, json, jsonStream) {
264
+ if (jsonStream) {
265
+ const stream = new JsonStreamWriter(error.command, true);
266
+ stream.error({ code: error.code, message: error.message, userAction: error.userAction });
267
+ stream.complete('fail', 2);
268
+ }
269
+ else if (json) {
270
+ process.stdout.write(`${JSON.stringify({
271
+ schemaVersion: 1,
272
+ command: error.command,
273
+ status: 'fail',
274
+ error: { code: error.code, message: error.message, userAction: error.userAction },
275
+ exitCode: 2,
276
+ }, null, 2)}\n`);
277
+ }
278
+ else {
279
+ const scope = error.command === hostName ? '' : ` ${error.command}`;
280
+ process.stderr.write(`✗ ${hostName}${scope}: ${error.message}\n Next: ${error.userAction}\n`);
281
+ }
282
+ }
283
+ // The checkout a run is about, read before commander parses: library locations
284
+ // resolve against it and every command accepts the same --target spelling.
285
+ function targetFromArgv(argv) {
286
+ const index = argv.indexOf('--target');
287
+ const separate = index !== -1 ? argv[index + 1] : undefined;
288
+ const inline = argv
289
+ .find((argument) => argument.startsWith('--target='))
290
+ ?.slice('--target='.length);
291
+ return path.resolve(separate ?? inline ?? process.cwd());
292
+ }
293
+ function beforePassthrough(argv) {
294
+ const divider = argv.indexOf('--');
295
+ return divider === -1 ? argv : argv.slice(0, divider);
296
+ }
297
+ function hasPassthroughHelp(argv) {
298
+ const divider = argv.indexOf('--');
299
+ if (divider === -1)
300
+ return false;
301
+ return argv.slice(divider + 1).some((arg) => arg === '-h' || arg === '--help');
302
+ }
303
+ // Requires the grammar call enforces (the action first, before flags), so
304
+ // `call --help` still gets commander's generic call help.
305
+ function isCallActionHelp(argv) {
306
+ if (argv[0] !== 'call')
307
+ return false;
308
+ if (!argv[1] || argv[1].startsWith('-'))
309
+ return false;
310
+ const scope = beforePassthrough(argv);
311
+ return scope.includes('--help') || scope.includes('-h');
312
+ }
313
+ function requested(argv, option) {
314
+ const scope = beforePassthrough(argv);
315
+ return option === '--json'
316
+ ? scope.some((argument) => argument === '--json' || argument.startsWith('--json='))
317
+ : scope.includes('--json-stream');
318
+ }
319
+ //# sourceMappingURL=harness-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-cli.js","sourceRoot":"","sources":["../../src/harness/harness-cli.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ export { type ArtifactManifestEntry, indexArtifactManifest, readContainedJsonArt
4
4
  export { type ActionCapabilitySource, type DescribedAction, describeManifestActions, type RecipeCatalog, type ResolvedActionManifest, } from './catalog.js';
5
5
  export { acquireCheckoutLock, type CheckoutLock, type CheckoutLockFailure, trackCheckoutChild, } from './checkout-lock.js';
6
6
  export { classifyLogEvent, color, colorEnabled, colorHumanMessage, colorKv, colorLogEvent, colorStatusWord, stripAnsi, } from './cli-color.js';
7
+ export { booleanOption, type CliUsageError, type CliUsageErrorCode, type CommandContract, type ContractedCommand, type ContractFailures, contractOptions, type ContractValidationOptions, optionalValueOption, type OptionSpec, optionValues, type PositionalSpec, publicCommandTokens, validatePublicInvocation, valueOption, } from './command-contract.js';
7
8
  export { COMMAND_JOURNAL_FILE, commandJournalPath, type CommandJournalRecord, isSensitiveKey, readCommandJournal, recordCommandEvidence, recordCommandOutput, recordCommandStage, redactCommandArgs, redactStructuredValue, withCommandJournal, } from './command-journal.js';
8
9
  export { type CallCommandOptions, handleCall, handleCallHelp } from './commands/call.js';
9
10
  export { handleActions } from './commands/discover.js';
@@ -13,6 +14,7 @@ export { handleReload } from './commands/reload.js';
13
14
  export { type DeviceTargeting, handleRun, type RunCommandOptions, type RunPlanStep, } from './commands/run.js';
14
15
  export { handleStop, type StopCommandOptions, type StoppedCompanion } from './commands/stop.js';
15
16
  export { captureExecutionProvenance, type ExecutionProvenanceDrift, executionProvenanceDrift, type ExecutionProvenanceInput, type ExecutionProvenancePhase, type ExecutionProvenanceRecord, type ExecutionProvenanceSnapshot, ProvenanceDriftError, type SourceProvenanceSnapshot, writeExecutionProvenance, } from './execution-provenance.js';
17
+ export { createHarnessCli, type HarnessCli, type HarnessCliOptions, type HarnessCliResult, type HarnessCommand, type HarnessHelp, type HarnessHelpGroup, type HelpPaint, type HiddenHarnessCommand, type PublicHarnessCommand, } from './harness-cli.js';
16
18
  export { checkHealBounds, classifyFailure, conciseFailureForHuman, ensureOverlay, type FailureClass, newHealState, parseHeal, recipeRunning, } from './heal-bounds.js';
17
19
  export { configureHarnessHost, type HarnessHost, harnessHost, type HarnessHostConfig, hostEnvName, recipeEnvName, validateRelativeRecipePath, } from './host.js';
18
20
  export { JsonStreamWriter } from './json-stream.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/harness/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/harness/index.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export { indexArtifactManifest, readContainedJsonArtifact, writeContainedArtifac
7
7
  export { describeManifestActions, } from './catalog.js';
8
8
  export { acquireCheckoutLock, trackCheckoutChild, } from './checkout-lock.js';
9
9
  export { classifyLogEvent, color, colorEnabled, colorHumanMessage, colorKv, colorLogEvent, colorStatusWord, stripAnsi, } from './cli-color.js';
10
+ export { booleanOption, contractOptions, optionalValueOption, optionValues, publicCommandTokens, validatePublicInvocation, valueOption, } from './command-contract.js';
10
11
  export { COMMAND_JOURNAL_FILE, commandJournalPath, isSensitiveKey, readCommandJournal, recordCommandEvidence, recordCommandOutput, recordCommandStage, redactCommandArgs, redactStructuredValue, withCommandJournal, } from './command-journal.js';
11
12
  export { handleCall, handleCallHelp } from './commands/call.js';
12
13
  export { handleActions } from './commands/discover.js';
@@ -16,6 +17,7 @@ export { handleReload } from './commands/reload.js';
16
17
  export { handleRun, } from './commands/run.js';
17
18
  export { handleStop } from './commands/stop.js';
18
19
  export { captureExecutionProvenance, executionProvenanceDrift, ProvenanceDriftError, writeExecutionProvenance, } from './execution-provenance.js';
20
+ export { createHarnessCli, } from './harness-cli.js';
19
21
  export { checkHealBounds, classifyFailure, conciseFailureForHuman, ensureOverlay, newHealState, parseHeal, recipeRunning, } from './heal-bounds.js';
20
22
  export { configureHarnessHost, harnessHost, hostEnvName, recipeEnvName, validateRelativeRecipePath, } from './host.js';
21
23
  export { JsonStreamWriter } from './json-stream.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/harness/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gFAAgF;AAChF,gEAAgE;AAChE,OAAO,EACL,cAAc,EAGd,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAElB,0BAA0B,EAC1B,cAAc,EAEd,kBAAkB,EAClB,mBAAmB,EAEnB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,aAAa,EACb,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAGL,uBAAuB,GAGxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EAGnB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,KAAK,EACL,YAAY,EACZ,iBAAiB,EACjB,OAAO,EACP,aAAa,EACb,eAAe,EACf,SAAS,GACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAElB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAA2B,UAAU,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAEL,SAAS,GAGV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAkD,MAAM,oBAAoB,CAAC;AAChG,OAAO,EACL,0BAA0B,EAE1B,wBAAwB,EAKxB,oBAAoB,EAEpB,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,aAAa,EAEb,YAAY,EACZ,SAAS,EACT,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EAEpB,WAAW,EAEX,WAAW,EACX,aAAa,EACb,0BAA0B,GAC3B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EACL,2BAA2B,EAG3B,wBAAwB,EACxB,kBAAkB,EAClB,aAAa,EACb,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EACL,QAAQ,EACR,aAAa,EAEb,MAAM,EAGN,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,wBAAwB,EACxB,aAAa,EACb,qBAAqB,EACrB,sBAAsB,EACtB,QAAQ,EAGR,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,aAAa,EACb,SAAS,EAGT,SAAS,EACT,2BAA2B,EAC3B,cAAc,EACd,cAAc,EACd,UAAU,EACV,aAAa,EACb,UAAU,EACV,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EAEnB,qBAAqB,EACrB,sBAAsB,GAGvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,EAEvB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,iBAAiB,EACjB,+BAA+B,EAC/B,2CAA2C,EAC3C,6BAA6B,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EAGnB,qBAAqB,EAOrB,oBAAoB,EACpB,4BAA4B,EAC5B,0BAA0B,EAK1B,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,gCAAgC,EAChC,eAAe,EAKf,SAAS,GAGV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAEL,oCAAoC,EAEpC,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,8BAA8B,EAC9B,cAAc,EAEd,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAGL,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,IAAI,EACJ,IAAI,EAEJ,UAAU,EACV,mBAAmB,EACnB,cAAc,EAEd,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,GAAG,EAEH,QAAQ,EACR,QAAQ,EACR,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACL,0BAA0B,EAE1B,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/harness/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farmslot/recipe-cli",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -32,10 +32,10 @@
32
32
  "prepublishOnly": "node ../../scripts/quality/check-farmslot-package-readiness.mjs --publish --packages @farmslot/recipe-cli"
33
33
  },
34
34
  "dependencies": {
35
- "@farmslot/adapter-sdk": "0.5.0",
35
+ "@farmslot/adapter-sdk": "0.5.1",
36
36
  "@farmslot/agent-runtime": "0.17.0",
37
37
  "@farmslot/protocol": "0.34.0",
38
- "@farmslot/recipe-runner": "0.25.0",
38
+ "@farmslot/recipe-runner": "0.26.0",
39
39
  "commander": "^12.0.0",
40
40
  "es-module-lexer": "2.3.1",
41
41
  "esbuild": "0.28.1",