@farmslot/recipe-cli 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.
Files changed (97) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/harness/adapter-plugins.d.ts +1 -0
  3. package/dist/harness/adapter-plugins.d.ts.map +1 -1
  4. package/dist/harness/adapter-plugins.js +3 -0
  5. package/dist/harness/adapter-plugins.js.map +1 -1
  6. package/dist/harness/adapters.d.ts +0 -2
  7. package/dist/harness/adapters.d.ts.map +1 -1
  8. package/dist/harness/adapters.js +0 -4
  9. package/dist/harness/adapters.js.map +1 -1
  10. package/dist/harness/command-contract.d.ts +16 -1
  11. package/dist/harness/command-contract.d.ts.map +1 -1
  12. package/dist/harness/command-contract.js +8 -0
  13. package/dist/harness/command-contract.js.map +1 -1
  14. package/dist/harness/commands/call.d.ts.map +1 -1
  15. package/dist/harness/commands/call.js +30 -9
  16. package/dist/harness/commands/call.js.map +1 -1
  17. package/dist/harness/commands/checklist.d.ts +16 -0
  18. package/dist/harness/commands/checklist.d.ts.map +1 -0
  19. package/dist/harness/commands/checklist.js +171 -0
  20. package/dist/harness/commands/checklist.js.map +1 -0
  21. package/dist/harness/commands/doctor.d.ts +45 -0
  22. package/dist/harness/commands/doctor.d.ts.map +1 -0
  23. package/dist/harness/commands/doctor.js +591 -0
  24. package/dist/harness/commands/doctor.js.map +1 -0
  25. package/dist/harness/commands/execution-template.d.ts +2 -0
  26. package/dist/harness/commands/execution-template.d.ts.map +1 -0
  27. package/dist/harness/commands/execution-template.js +27 -0
  28. package/dist/harness/commands/execution-template.js.map +1 -0
  29. package/dist/harness/commands/launch.js +3 -0
  30. package/dist/harness/commands/launch.js.map +1 -1
  31. package/dist/harness/commands/prepare.d.ts +35 -0
  32. package/dist/harness/commands/prepare.d.ts.map +1 -0
  33. package/dist/harness/commands/prepare.js +570 -0
  34. package/dist/harness/commands/prepare.js.map +1 -0
  35. package/dist/harness/commands/recipe-quality.d.ts +13 -0
  36. package/dist/harness/commands/recipe-quality.d.ts.map +1 -0
  37. package/dist/harness/commands/recipe-quality.js +112 -0
  38. package/dist/harness/commands/recipe-quality.js.map +1 -0
  39. package/dist/harness/commands/run.d.ts.map +1 -1
  40. package/dist/harness/commands/run.js +13 -1
  41. package/dist/harness/commands/run.js.map +1 -1
  42. package/dist/harness/commands/status-watch.d.ts +20 -0
  43. package/dist/harness/commands/status-watch.d.ts.map +1 -0
  44. package/dist/harness/commands/status-watch.js +402 -0
  45. package/dist/harness/commands/status-watch.js.map +1 -0
  46. package/dist/harness/commands/status.d.ts +5 -0
  47. package/dist/harness/commands/status.d.ts.map +1 -0
  48. package/dist/harness/commands/status.js +167 -0
  49. package/dist/harness/commands/status.js.map +1 -0
  50. package/dist/harness/commands/task-init.d.ts +5 -0
  51. package/dist/harness/commands/task-init.d.ts.map +1 -0
  52. package/dist/harness/commands/task-init.js +54 -0
  53. package/dist/harness/commands/task-init.js.map +1 -0
  54. package/dist/harness/doctor-report.d.ts +58 -0
  55. package/dist/harness/doctor-report.d.ts.map +1 -0
  56. package/dist/harness/doctor-report.js +154 -0
  57. package/dist/harness/doctor-report.js.map +1 -0
  58. package/dist/harness/harness-cli.d.ts +10 -1
  59. package/dist/harness/harness-cli.d.ts.map +1 -1
  60. package/dist/harness/harness-cli.js +4 -6
  61. package/dist/harness/harness-cli.js.map +1 -1
  62. package/dist/harness/heal-bounds.d.ts.map +1 -1
  63. package/dist/harness/heal-bounds.js +6 -0
  64. package/dist/harness/heal-bounds.js.map +1 -1
  65. package/dist/harness/index.d.ts +15 -3
  66. package/dist/harness/index.d.ts.map +1 -1
  67. package/dist/harness/index.js +14 -2
  68. package/dist/harness/index.js.map +1 -1
  69. package/dist/harness/json-stream.d.ts +7 -1
  70. package/dist/harness/json-stream.d.ts.map +1 -1
  71. package/dist/harness/json-stream.js +12 -0
  72. package/dist/harness/json-stream.js.map +1 -1
  73. package/dist/harness/paths.d.ts +2 -0
  74. package/dist/harness/paths.d.ts.map +1 -1
  75. package/dist/harness/paths.js +2 -0
  76. package/dist/harness/paths.js.map +1 -1
  77. package/dist/harness/readiness.d.ts +31 -0
  78. package/dist/harness/readiness.d.ts.map +1 -0
  79. package/dist/harness/readiness.js +12 -0
  80. package/dist/harness/readiness.js.map +1 -0
  81. package/dist/harness/recording-target.d.ts +11 -0
  82. package/dist/harness/recording-target.d.ts.map +1 -1
  83. package/dist/harness/recording-target.js +31 -2
  84. package/dist/harness/recording-target.js.map +1 -1
  85. package/dist/harness/run-engine.d.ts.map +1 -1
  86. package/dist/harness/run-engine.js.map +1 -1
  87. package/dist/harness/run-options.js +2 -11
  88. package/dist/harness/run-options.js.map +1 -1
  89. package/dist/harness/stage-progress.d.ts +25 -0
  90. package/dist/harness/stage-progress.d.ts.map +1 -0
  91. package/dist/harness/stage-progress.js +162 -0
  92. package/dist/harness/stage-progress.js.map +1 -0
  93. package/dist/harness/task-view.d.ts +142 -0
  94. package/dist/harness/task-view.d.ts.map +1 -0
  95. package/dist/harness/task-view.js +451 -0
  96. package/dist/harness/task-view.js.map +1 -0
  97. package/package.json +2 -2
@@ -0,0 +1,171 @@
1
+ // checklist — expose @farmslot/agent-runtime checklist progress through the
2
+ // host's front door: `mark <task-dir> <step>` and, when the host stages them,
3
+ // `closeout <task-dir>`.
4
+ import { spawnSync } from 'node:child_process';
5
+ import fs from 'node:fs';
6
+ import { createRequire } from 'node:module';
7
+ import path from 'node:path';
8
+ import { HANDOFF_INPUT } from '@farmslot/agent-runtime';
9
+ import { enumerateChecklistCheckboxes, isTerminalWorkerSignalStatus, } from '@farmslot/protocol';
10
+ import { harnessHost } from '../host.js';
11
+ import { EXIT } from '../shared.js';
12
+ const require = createRequire(import.meta.url);
13
+ const MARK_SCRIPT = require.resolve('@farmslot/agent-runtime/scripts/mark-checklist-step.cjs');
14
+ // The runtime owns which checklist and signal a task directory marks. An absent
15
+ // checklist-target.json means the worker default; only a role switch writes it,
16
+ // and an invalid one is an error the resolver raises rather than a silent
17
+ // fallback to a different file than the one gateway progress counts.
18
+ const { resolveChecklistPaths } = require('@farmslot/agent-runtime/scripts/checklist-target.cjs');
19
+ const { readSubtaskIndex, SubtaskRefusal } = require('@farmslot/agent-runtime/scripts/subtask-unit.cjs');
20
+ const CHECKLIST_VALUE_OPTIONS = new Set([
21
+ '--reason',
22
+ '--checklist',
23
+ '--signal',
24
+ '--config',
25
+ '--destination',
26
+ '--metadata',
27
+ ]);
28
+ function parseChecklistArgv(argv) {
29
+ const positionals = [];
30
+ for (let index = 0; index < argv.length; index += 1) {
31
+ const arg = argv[index] ?? '';
32
+ if (arg.startsWith('-')) {
33
+ const option = arg.split('=', 1)[0] ?? arg;
34
+ if (CHECKLIST_VALUE_OPTIONS.has(option) && !arg.includes('='))
35
+ index += 1;
36
+ continue;
37
+ }
38
+ positionals.push({ index, value: arg });
39
+ }
40
+ const consumed = new Set(positionals.slice(0, 2).map(({ index }) => index));
41
+ return {
42
+ action: positionals[0]?.value,
43
+ taskDir: positionals[1]?.value,
44
+ step: positionals[2]?.value,
45
+ forwarded: argv.filter((_, index) => !consumed.has(index)),
46
+ };
47
+ }
48
+ function stageLearningPackage(taskDir, step, markArgs, options) {
49
+ if (!options.closeout ||
50
+ !['complete', 'no-change'].includes(step ?? '') ||
51
+ markArgs.includes('--skip-learnings') ||
52
+ !fs.existsSync(path.join(taskDir, HANDOFF_INPUT))) {
53
+ return;
54
+ }
55
+ try {
56
+ const result = options.closeout(taskDir, ['--json'], 'pipe');
57
+ if (result.status === 0)
58
+ return;
59
+ }
60
+ catch {
61
+ // Learning capture cannot change a successful task verdict.
62
+ }
63
+ console.error(`Warning: learning capture could not be staged; rerun: ${harnessHost().name} checklist closeout ${taskDir}; task verdict is unchanged.`);
64
+ }
65
+ function terminalSignalStatus(taskDir) {
66
+ const { signalPath } = resolveChecklistPaths(taskDir);
67
+ let signal;
68
+ try {
69
+ signal = JSON.parse(fs.readFileSync(signalPath, 'utf8'));
70
+ }
71
+ catch {
72
+ // No signal yet (or a half-written one): the task has no terminal verdict to
73
+ // preserve, which is the normal state before the first mark.
74
+ return null;
75
+ }
76
+ return isTerminalWorkerSignalStatus(signal.status) ? (signal.status ?? null) : null;
77
+ }
78
+ function preserveTerminalSignal(taskDir, step) {
79
+ if (step !== 'start' && numericMarkStep(step) === null)
80
+ return false;
81
+ const status = terminalSignalStatus(taskDir);
82
+ if (!status)
83
+ return false;
84
+ console.log(`signal already terminal: status=${status}; ignoring non-terminal mark ${step}`);
85
+ return true;
86
+ }
87
+ function numericMarkStep(step) {
88
+ const stepNumber = Number(step);
89
+ return Number.isInteger(stepNumber) && stepNumber >= 1 ? stepNumber : null;
90
+ }
91
+ // Step N is the box `mark N` ticks: the protocol enumeration, so a gate reads the
92
+ // same row the mark writes (skip sections and <details> included).
93
+ function stepGatesReady(taskDir, step, gates, parentChecklist) {
94
+ const stepNumber = numericMarkStep(step);
95
+ if (stepNumber === null || gates.length === 0)
96
+ return true;
97
+ const taskPath = parentChecklist
98
+ ? path.join(taskDir, parentChecklist)
99
+ : resolveChecklistPaths(taskDir).taskPath;
100
+ let checklist = '';
101
+ try {
102
+ checklist = fs.readFileSync(taskPath, 'utf8');
103
+ }
104
+ catch {
105
+ // No checklist file means no step declares a gate; marking is unblocked.
106
+ return true;
107
+ }
108
+ const row = enumerateChecklistCheckboxes(checklist).find((item) => item.stepNumber === stepNumber);
109
+ if (!row)
110
+ return true;
111
+ return gates.every((gate) => !gate.label.test(row.rawLabel) || gate.ready(taskDir, String(step)));
112
+ }
113
+ export async function handleChecklist(argv, options = {}) {
114
+ const host = harnessHost().name;
115
+ const usage = options.closeout
116
+ ? `${host} checklist <mark <task-dir> <step> | closeout <task-dir>> [options]`
117
+ : `${host} checklist mark <task-dir> <step> [options]`;
118
+ const { action, taskDir, step, forwarded } = parseChecklistArgv(argv);
119
+ if (!taskDir) {
120
+ console.error(`usage: ${usage}`);
121
+ return EXIT.usage;
122
+ }
123
+ const resolvedTaskDir = path.resolve(taskDir);
124
+ if (action === 'closeout' && options.closeout) {
125
+ const result = options.closeout(resolvedTaskDir, forwarded, 'inherit');
126
+ if (result.error) {
127
+ console.error(`${host} checklist closeout: ${result.error.message}`);
128
+ return EXIT.runtime;
129
+ }
130
+ return result.status ?? EXIT.runtime;
131
+ }
132
+ if (action !== 'mark' || !step) {
133
+ console.error(`usage: ${usage}`);
134
+ return EXIT.usage;
135
+ }
136
+ if (preserveTerminalSignal(resolvedTaskDir, step))
137
+ return EXIT.ok;
138
+ const gates = options.stepGates ?? [];
139
+ if (step === 'sub' && forwarded[2] === 'complete') {
140
+ try {
141
+ const unit = readSubtaskIndex(resolvedTaskDir)?.units.find((candidate) => candidate.id === forwarded[1]);
142
+ if (unit &&
143
+ !stepGatesReady(resolvedTaskDir, String(unit.parent.stepNumber), gates, unit.parent.checklist)) {
144
+ return EXIT.runtime;
145
+ }
146
+ }
147
+ catch (error) {
148
+ if (!(error instanceof SubtaskRefusal))
149
+ throw error;
150
+ console.error(error.message);
151
+ return error.code;
152
+ }
153
+ }
154
+ if (!stepGatesReady(resolvedTaskDir, step, gates))
155
+ return EXIT.runtime;
156
+ if (step === 'complete')
157
+ options.beforeComplete?.(resolvedTaskDir);
158
+ const result = spawnSync(process.execPath, [MARK_SCRIPT, resolvedTaskDir, ...forwarded], {
159
+ stdio: 'inherit',
160
+ });
161
+ if (result.error) {
162
+ console.error(`${host} checklist mark: ${result.error.message}`);
163
+ return EXIT.runtime;
164
+ }
165
+ const status = result.status ?? EXIT.runtime;
166
+ if (status === EXIT.ok) {
167
+ stageLearningPackage(resolvedTaskDir, step, forwarded, options);
168
+ }
169
+ return status;
170
+ }
171
+ //# sourceMappingURL=checklist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checklist.js","sourceRoot":"","sources":["../../../src/harness/commands/checklist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { type DoctorReportOptions } from '../doctor-report.js';
2
+ import { type ParsedArgs } from '../parse-args.js';
3
+ import { type Paint, type ReadinessViewOptions } from '../readiness.js';
4
+ /** A block the host adds to the doctor envelope and its human output. */
5
+ export interface DoctorAdvisorySection {
6
+ key: string;
7
+ value: unknown;
8
+ render(out: Paint): void;
9
+ }
10
+ export interface DoctorFixOptions {
11
+ ensureRuntimeContext?(target: string, adapter: string): {
12
+ created: boolean;
13
+ };
14
+ repair?(target: string, adapter: string, json: boolean): {
15
+ fixed: string[];
16
+ failed: string[];
17
+ };
18
+ nextActions?(failed: readonly string[], context: {
19
+ adapter: string;
20
+ target: string;
21
+ executable: string;
22
+ scope: string;
23
+ }): string[];
24
+ userAction?(failed: readonly string[], retry: string): string | undefined;
25
+ }
26
+ export interface DoctorCommandOptions extends ReadinessViewOptions {
27
+ manifest(adapter: string, overridePath: string | undefined): Promise<{
28
+ summary?: {
29
+ errors?: number;
30
+ } & Record<string, unknown>;
31
+ }>;
32
+ report?: DoctorReportOptions;
33
+ fix?: DoctorFixOptions;
34
+ advisory?(target: string): DoctorAdvisorySection[];
35
+ orphanDevServers?: {
36
+ field: string;
37
+ label: string;
38
+ };
39
+ }
40
+ export declare function handleDoctor({ options }: ParsedArgs, commandOptions: DoctorCommandOptions): Promise<number>;
41
+ export declare function doctorFixNextActions(failed: string[], adapter: string, target: string, block?: {
42
+ id: string;
43
+ userAction?: string;
44
+ }, fix?: DoctorFixOptions): string[];
45
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/harness/commands/doctor.ts"],"names":[],"mappings":"AAqBA,OAAO,EAIL,KAAK,mBAAmB,EAEzB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAML,KAAK,UAAU,EAGhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,oBAAoB,EAE1B,MAAM,iBAAiB,CAAC;AAIzB,yEAAyE;AACzE,MAAM,WAAW,qBAAqB;IAEpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAE/B,oBAAoB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAE7E,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAE/F,WAAW,CAAC,CACV,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAC9E,MAAM,EAAE,CAAC;IAEZ,UAAU,CAAC,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAC3E;AAED,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAEhE,QAAQ,CACN,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IACxE,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,GAAG,CAAC,EAAE,gBAAgB,CAAC;IAEvB,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAAC;IAGnD,gBAAgB,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACrD;AA6BD,wBAAsB,YAAY,CAChC,EAAE,OAAO,EAAE,EAAE,UAAU,EACvB,cAAc,EAAE,oBAAoB,GACnC,OAAO,CAAC,MAAM,CAAC,CA4WjB;AAoDD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EAEd,KAAK,CAAC,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3C,GAAG,CAAC,EAAE,gBAAgB,GACrB,MAAM,EAAE,CAcV"}