@farmslot/recipe-cli 0.7.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 (101) hide show
  1. package/CHANGELOG.md +29 -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 +26 -13
  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 +9 -9
  61. package/dist/harness/harness-cli.js.map +1 -1
  62. package/dist/harness/heal-bounds.d.ts +1 -1
  63. package/dist/harness/heal-bounds.d.ts.map +1 -1
  64. package/dist/harness/heal-bounds.js +33 -2
  65. package/dist/harness/heal-bounds.js.map +1 -1
  66. package/dist/harness/index.d.ts +15 -3
  67. package/dist/harness/index.d.ts.map +1 -1
  68. package/dist/harness/index.js +14 -2
  69. package/dist/harness/index.js.map +1 -1
  70. package/dist/harness/json-stream.d.ts +7 -1
  71. package/dist/harness/json-stream.d.ts.map +1 -1
  72. package/dist/harness/json-stream.js +12 -0
  73. package/dist/harness/json-stream.js.map +1 -1
  74. package/dist/harness/paths.d.ts +2 -0
  75. package/dist/harness/paths.d.ts.map +1 -1
  76. package/dist/harness/paths.js +2 -0
  77. package/dist/harness/paths.js.map +1 -1
  78. package/dist/harness/readiness.d.ts +31 -0
  79. package/dist/harness/readiness.d.ts.map +1 -0
  80. package/dist/harness/readiness.js +12 -0
  81. package/dist/harness/readiness.js.map +1 -0
  82. package/dist/harness/recording-target.d.ts +11 -0
  83. package/dist/harness/recording-target.d.ts.map +1 -1
  84. package/dist/harness/recording-target.js +31 -2
  85. package/dist/harness/recording-target.js.map +1 -1
  86. package/dist/harness/run-engine.d.ts.map +1 -1
  87. package/dist/harness/run-engine.js.map +1 -1
  88. package/dist/harness/run-options.js +2 -11
  89. package/dist/harness/run-options.js.map +1 -1
  90. package/dist/harness/shared.d.ts.map +1 -1
  91. package/dist/harness/shared.js +60 -44
  92. package/dist/harness/shared.js.map +1 -1
  93. package/dist/harness/stage-progress.d.ts +25 -0
  94. package/dist/harness/stage-progress.d.ts.map +1 -0
  95. package/dist/harness/stage-progress.js +162 -0
  96. package/dist/harness/stage-progress.js.map +1 -0
  97. package/dist/harness/task-view.d.ts +142 -0
  98. package/dist/harness/task-view.d.ts.map +1 -0
  99. package/dist/harness/task-view.js +451 -0
  100. package/dist/harness/task-view.js.map +1 -0
  101. package/package.json +2 -2
@@ -0,0 +1,451 @@
1
+ // Read-only view of the task an agent is working through in a checkout. A hand
2
+ // run started from a skill and a dispatched run write the same files, so both
3
+ // report the same facts here.
4
+ //
5
+ // Every value comes from a fixed allowlist. Anything else those files carry —
6
+ // secrets included — can never reach the view model or the rendered output.
7
+ import { spawnSync } from 'node:child_process';
8
+ import fs from 'node:fs';
9
+ import path from 'node:path';
10
+ import { HANDOFF_INPUT, latestTaskDir } from '@farmslot/agent-runtime';
11
+ import { checklistStepName, deriveChecklistStepDurations, enumerateChecklistCheckboxes, INTERACTIVE_CHECKLIST_MARKDOWN, isSettledSubtaskStatus, isTerminalWorkerSignalStatus, READINESS_RECORD, SUBTASK_INDEX_FILE, subtaskPaths, SUBTASKS_DIR, WORKER_SIGNAL_FILE, } from '@farmslot/protocol';
12
+ import { ACCEPTANCE_STATUS_ARTIFACT, acceptanceCriteriaView, acceptanceCriterionId, validateAcceptanceStatusLedger, } from '@farmslot/protocol/contracts/acceptance';
13
+ import { processIdentity, readOperations } from '@farmslot/recipe-runner/runtime/operation';
14
+ import { readCommandJournal } from './command-journal.js';
15
+ import { resolveRuntimeContextPath } from './overlay.js';
16
+ import { PREPARE_PROGRESS_ARTIFACT, recipeRuntimeDir } from './paths.js';
17
+ // RECIPE_LIBRARY_PATH as the task view lists it: name=path or a bare path, each
18
+ // resolved; an entry without a name keeps none.
19
+ function parseLibraryPathEnv(value) {
20
+ if (!value)
21
+ return [];
22
+ return value
23
+ .split(':')
24
+ .map((entry) => entry.trim())
25
+ .filter(Boolean)
26
+ .map((entry) => {
27
+ const equals = entry.indexOf('=');
28
+ if (equals === -1)
29
+ return { root: path.resolve(entry) };
30
+ return {
31
+ name: entry.slice(0, equals).trim(),
32
+ root: path.resolve(entry.slice(equals + 1).trim()),
33
+ };
34
+ });
35
+ }
36
+ // A prepare step id as prepare records it in its progress file.
37
+ const PREPARE_STEP_ID = /^[a-z][a-z0-9-]*$/u;
38
+ export const CHECKLIST_LABEL_LIMIT = 70;
39
+ // A task that has neither marked a row nor run a harness command for this long
40
+ // is treated as abandoned. A long investigation step keeps running commands
41
+ // without ticking rows, so the command journal counts as activity too.
42
+ export const TASK_SILENT_AFTER_MS = 10 * 60 * 1000;
43
+ // The task directory a `--task` flag did not name: the one written to last
44
+ // under temp/tasks/, found the way every Farmslot reader finds it.
45
+ export function findTaskDir(target) {
46
+ return latestTaskDir(path.join(target, 'temp', 'tasks'));
47
+ }
48
+ export function collectTaskView(target, taskDir, now) {
49
+ target = fs.existsSync(target) ? fs.realpathSync(target) : path.resolve(target);
50
+ taskDir = taskDir && (fs.existsSync(taskDir) ? fs.realpathSync(taskDir) : path.resolve(taskDir));
51
+ const taskIsRunning = taskDir && readJsonObject(path.join(taskDir, WORKER_SIGNAL_FILE))?.status === 'running';
52
+ const operations = readOperations(path.join(target, recipeRuntimeDir(), 'operations'))
53
+ .filter((operation) => !taskIsRunning ||
54
+ path
55
+ .resolve(operation.logPath)
56
+ .startsWith(path.resolve(taskDir, 'artifacts', 'operations') + path.sep))
57
+ .map((operation) => ({
58
+ ...operation,
59
+ ownerAlive: operation.status === 'running' &&
60
+ processIdentity(operation.pid) === operation.processStartedAt,
61
+ }));
62
+ const base = {
63
+ operations,
64
+ checkout: readCheckout(target),
65
+ isolation: readIsolation(target),
66
+ libraries: parseLibraryPathEnv(process.env.RECIPE_LIBRARY_PATH).map(({ name, root }) => ({ ...(name ? { name } : {}), path: root })),
67
+ };
68
+ if (!taskDir) {
69
+ return {
70
+ ...base,
71
+ checklist: [],
72
+ subtasks: [],
73
+ activity: { ongoing: false, reason: 'no-task' },
74
+ };
75
+ }
76
+ const handoff = readJsonObject(path.join(taskDir, HANDOFF_INPUT));
77
+ const fixtures = readJsonObject(path.join(taskDir, 'artifacts', 'prepare', 'fixtures.json'));
78
+ // A skill run keeps its readiness record in the task's artifacts; a dispatched
79
+ // run was prepared before the task directory existed, so its record is the
80
+ // checkout's.
81
+ const sandbox = readJsonObject(path.join(taskDir, 'artifacts', READINESS_RECORD)) ??
82
+ readJsonObject(path.join(target, recipeRuntimeDir(), READINESS_RECORD));
83
+ const signal = readJsonObject(path.join(taskDir, WORKER_SIGNAL_FILE));
84
+ const checklist = readChecklistRows(path.join(taskDir, INTERACTIVE_CHECKLIST_MARKDOWN));
85
+ const template = asObject(handoff?.executionTemplate);
86
+ const task = asObject(handoff?.task);
87
+ const rawCriteria = task?.acceptanceCriteria;
88
+ if (rawCriteria !== undefined && !Array.isArray(rawCriteria)) {
89
+ throw new Error(`${path.join(taskDir, HANDOFF_INPUT)}: task.acceptanceCriteria must be an array.`);
90
+ }
91
+ const criteria = rawCriteria
92
+ ?.map((text, index) => ({
93
+ id: acceptanceCriterionId(index),
94
+ text: String(text),
95
+ }))
96
+ .filter((criterion) => criterion.text.trim().length > 0) ?? [];
97
+ const rawLedger = readJsonObject(path.join(taskDir, ACCEPTANCE_STATUS_ARTIFACT));
98
+ if (rawLedger) {
99
+ const issues = validateAcceptanceStatusLedger(rawLedger);
100
+ if (issues.length > 0)
101
+ throw new Error(`${ACCEPTANCE_STATUS_ARTIFACT}: ${issues.join('; ')}`);
102
+ }
103
+ const startedAtIso = pickString(handoff, 'startedAt');
104
+ const startedAt = parseTime(startedAtIso);
105
+ const prepare = readPrepareProgress(taskDir, now, startedAt, parseTime(pickString(sandbox, 'recordedAt')));
106
+ const timing = applyTiming(checklist, signal, startedAtIso, now);
107
+ const ticket = pickString(task, 'ticket');
108
+ // The journal is checkout-scoped: a command run before this task started
109
+ // belongs to an earlier task, so it is neither shown nor counted as activity.
110
+ const journal = readLastCommand(target, now);
111
+ const commandAt = parseTime(journal?.at);
112
+ const commandCounts = commandAt !== undefined && (startedAt === undefined || commandAt >= startedAt);
113
+ const lastCommand = commandCounts ? journal : undefined;
114
+ const activity = taskActivity({
115
+ status: pickString(signal, 'status'),
116
+ lastWrites: [
117
+ startedAt,
118
+ parseTime(pickString(signal, 'timestamp')),
119
+ ...readMarkEvents(signal).map((event) => Date.parse(event.checkedAt)),
120
+ commandCounts ? commandAt : undefined,
121
+ prepare ? parseTime(prepare.updatedAt) : undefined,
122
+ ...operations.flatMap((operation) => [
123
+ parseTime(operation.lastOutputAt),
124
+ parseTime(operation.stageStartedAt),
125
+ parseTime(operation.startedAt),
126
+ ]),
127
+ ],
128
+ branch: base.checkout.branch,
129
+ ticket,
130
+ now,
131
+ });
132
+ return {
133
+ ...base,
134
+ taskDir,
135
+ // The readiness record is the only place a harness records itself for a task.
136
+ harness: section({
137
+ version: pickString(asObject(sandbox?.harness), 'version'),
138
+ sourceKind: pickString(asObject(sandbox?.harness), 'source'),
139
+ }),
140
+ template: section({
141
+ id: pickString(template, 'id'),
142
+ sourceId: pickString(template, 'sourceId'),
143
+ flow: pickString(handoff, 'flow'),
144
+ domain: pickString(handoff, 'domain'),
145
+ surface: pickString(handoff, 'surface'),
146
+ title: pickString(task, 'title'),
147
+ ticket,
148
+ }),
149
+ ...(criteria.length > 0 || rawLedger
150
+ ? {
151
+ acceptance: acceptanceCriteriaView(criteria, rawLedger ? rawLedger : null),
152
+ }
153
+ : {}),
154
+ fixture: section({
155
+ fixture: pickString(fixtures, 'fixture'),
156
+ canonicalFixture: pickString(fixtures, 'canonicalFixture'),
157
+ status: pickString(fixtures, 'status'),
158
+ walletReset: pickBoolean(fixtures, 'walletReset'),
159
+ }),
160
+ sandbox: section({ ready: pickBoolean(sandbox, 'ready') }),
161
+ ...(prepare ? { prepare } : {}),
162
+ checklist,
163
+ subtasks: readSubtasks(taskDir),
164
+ signal: section({
165
+ status: pickString(signal, 'status'),
166
+ step: pickString(signal, 'step'),
167
+ timestamp: pickString(signal, 'timestamp'),
168
+ attemptId: pickString(signal, 'attemptId'),
169
+ }),
170
+ ...(lastCommand ? { lastCommand } : {}),
171
+ ...timing,
172
+ activity,
173
+ };
174
+ }
175
+ function readPrepareProgress(taskDir, now, taskStartedAt, recordedAt) {
176
+ const progress = readJsonObject(path.join(taskDir, 'artifacts', PREPARE_PROGRESS_ARTIFACT));
177
+ const active = asObject(progress?.active);
178
+ const step = pickString(active, 'id');
179
+ const startedAt = pickString(active, 'startedAt');
180
+ const stepStartedAt = parseTime(startedAt);
181
+ const runStartedAt = parseTime(pickString(progress, 'startedAt'));
182
+ const updatedAtIso = pickString(progress, 'updatedAt');
183
+ const updatedAt = parseTime(updatedAtIso);
184
+ const total = pickNumber(progress, 'total');
185
+ if (!step ||
186
+ !PREPARE_STEP_ID.test(step) ||
187
+ stepStartedAt === undefined ||
188
+ runStartedAt === undefined ||
189
+ updatedAt === undefined ||
190
+ now - updatedAt > 30_000 ||
191
+ total === undefined ||
192
+ total < 1 ||
193
+ (taskStartedAt !== undefined && runStartedAt < taskStartedAt) ||
194
+ (recordedAt !== undefined && recordedAt >= runStartedAt))
195
+ return undefined;
196
+ const steps = Array.isArray(progress?.steps)
197
+ ? progress.steps.flatMap((value) => {
198
+ const item = asObject(value);
199
+ const id = pickString(item, 'id');
200
+ const status = pickString(item, 'status');
201
+ const durationMs = pickNumber(item, 'durationMs');
202
+ return id &&
203
+ PREPARE_STEP_ID.test(id) &&
204
+ status &&
205
+ ['pass', 'fail', 'skipped'].includes(status) &&
206
+ durationMs !== undefined
207
+ ? [{ id, status, durationMs }]
208
+ : [];
209
+ })
210
+ : [];
211
+ return {
212
+ step,
213
+ startedAt: startedAt,
214
+ updatedAt: updatedAtIso,
215
+ elapsedMs: Math.max(0, now - stepStartedAt),
216
+ completed: steps.length,
217
+ total,
218
+ steps,
219
+ };
220
+ }
221
+ // `status` is not journaled, so watching a checkout never counts as its activity.
222
+ // The hardened reader refuses symlinks and malformed records; a bad journal
223
+ // means no command line, never a dead watch.
224
+ function readLastCommand(target, now) {
225
+ const { record } = readCommandJournal(target);
226
+ if (!record)
227
+ return undefined;
228
+ // Only a leading positional is a subject (`call ui.navigate`, `run smoke`).
229
+ // Options may precede it and their values are not shown, redacted or not.
230
+ const first = record.args[0];
231
+ const subject = first !== undefined && !first.startsWith('-') ? first : undefined;
232
+ const at = record.finishedAt || record.startedAt;
233
+ const atMs = parseTime(at);
234
+ return {
235
+ command: record.command,
236
+ ...(subject ? { subject } : {}),
237
+ verdict: record.verdict,
238
+ ...(at ? { at } : {}),
239
+ ...(atMs !== undefined ? { ageMs: Math.max(0, now - atMs) } : {}),
240
+ };
241
+ }
242
+ function taskActivity(input) {
243
+ const writes = input.lastWrites.filter((value) => value !== undefined);
244
+ const idleMs = writes.length > 0 ? input.now - Math.max(...writes) : undefined;
245
+ const branchCarriesTicket = input.ticket && input.branch ? input.branch.includes(input.ticket) : undefined;
246
+ const extra = {
247
+ ...(idleMs !== undefined ? { idleMs } : {}),
248
+ ...(branchCarriesTicket !== undefined ? { branchCarriesTicket } : {}),
249
+ };
250
+ // A directory with no signal and no timestamp at all is not a task yet.
251
+ if (input.status === undefined && writes.length === 0)
252
+ return { ongoing: false, reason: 'no-task', ...extra };
253
+ if (isTerminalWorkerSignalStatus(input.status))
254
+ return { ongoing: false, reason: 'finished', ...extra };
255
+ if (idleMs !== undefined && idleMs > TASK_SILENT_AFTER_MS)
256
+ return { ongoing: false, reason: 'silent', ...extra };
257
+ return { ongoing: true, ...extra };
258
+ }
259
+ // Per-row durations are the protocol's derivation from the mark events, the
260
+ // same numbers Command Center shows; this only adds the running row's age and
261
+ // the elapsed time, which need the mark instants.
262
+ function applyTiming(rows, signal, startedAtIso, now) {
263
+ const events = readMarkEvents(signal);
264
+ const durations = new Map(deriveChecklistStepDurations({ schemaVersion: 1, events }, startedAtIso).map((step) => [
265
+ step.stepNumber,
266
+ step.durationMs,
267
+ ]));
268
+ const marks = new Map(events.map((event) => [event.stepNumber, Date.parse(event.checkedAt)]));
269
+ for (const row of rows) {
270
+ const durationMs = durations.get(row.number);
271
+ if (durationMs !== undefined)
272
+ row.durationMs = durationMs;
273
+ }
274
+ const instants = [...marks.values()];
275
+ const lastAt = instants.length > 0 ? Math.max(...instants) : undefined;
276
+ const firstAt = instants.length > 0 ? Math.min(...instants) : undefined;
277
+ const current = rows.find((row) => !row.checked);
278
+ if (current && lastAt !== undefined)
279
+ current.runningMs = now - lastAt;
280
+ const origin = parseTime(startedAtIso) ?? firstAt;
281
+ return {
282
+ ...(current ? { currentStep: current.number } : {}),
283
+ ...(origin !== undefined ? { elapsedMs: now - origin } : {}),
284
+ };
285
+ }
286
+ // Only the allowlisted event fields reach the derivation; the label is display
287
+ // text the view never uses.
288
+ function readMarkEvents(signal) {
289
+ const events = asObject(signal?.checklistTiming)?.events;
290
+ if (!Array.isArray(events))
291
+ return [];
292
+ const marks = [];
293
+ for (const entry of events) {
294
+ const event = asObject(entry);
295
+ const stepNumber = pickNumber(event, 'stepNumber');
296
+ const checkedAt = pickString(event, 'checkedAt');
297
+ if (stepNumber === undefined || parseTime(checkedAt) === undefined)
298
+ continue;
299
+ marks.push({ stepNumber, label: '', checkedAt: checkedAt });
300
+ }
301
+ return marks;
302
+ }
303
+ // Which checkboxes are steps, their numbers and their phases come from the
304
+ // Farmslot protocol: the same enumeration the gateway progress view and the
305
+ // `mark` helper use, so this view counts the box `mark N` ticks as step N.
306
+ function readChecklistRows(file) {
307
+ const text = readTextFile(file);
308
+ if (text === undefined)
309
+ return [];
310
+ return enumerateChecklistCheckboxes(text).map((item) => ({
311
+ ...(item.phase ? { phase: item.phase } : {}),
312
+ number: item.stepNumber,
313
+ label: trimLabel(item.rawLabel),
314
+ checked: item.checked,
315
+ }));
316
+ }
317
+ // Child units come from the registry `mark` maintains; their paths, their
318
+ // settled rule and their row enumeration are all the protocol's, so this view
319
+ // shows the same child progress the gateway and Command Center project. A task
320
+ // directory with no child unit has no index and reports none.
321
+ function readSubtasks(taskDir) {
322
+ const index = readJsonObject(path.join(taskDir, SUBTASKS_DIR, SUBTASK_INDEX_FILE));
323
+ if (!index)
324
+ return [];
325
+ const units = index.units;
326
+ if (!Array.isArray(units))
327
+ return [];
328
+ const views = [];
329
+ for (const entry of units) {
330
+ const unit = asObject(entry);
331
+ const id = pickString(unit, 'id');
332
+ const parentStep = pickNumber(asObject(unit?.parent), 'stepNumber');
333
+ if (id === undefined || parentStep === undefined)
334
+ continue;
335
+ // Trust the registry for the id only: the pair's paths are derived, so a
336
+ // rewritten `checklist`/`signal` field cannot point this reader elsewhere.
337
+ const paths = subtaskPaths(id);
338
+ const signal = readJsonObject(path.join(taskDir, paths.signal));
339
+ const status = pickString(signal, 'status');
340
+ const source = asObject(unit?.source);
341
+ views.push({
342
+ id,
343
+ parentStep,
344
+ ...(status !== undefined ? { status } : {}),
345
+ settled: isSettledSubtaskStatus(status),
346
+ rows: readChecklistRows(path.join(taskDir, paths.checklist)),
347
+ ...(section({ kind: pickString(source, 'kind'), ref: pickString(source, 'ref') })
348
+ ? { source: section({ kind: pickString(source, 'kind'), ref: pickString(source, 'ref') }) }
349
+ : {}),
350
+ });
351
+ }
352
+ return views;
353
+ }
354
+ // Display only. The step name is the protocol's (the gateway and Command Center
355
+ // render the same one); the ordinal is dropped because the row already shows
356
+ // its number, and the rest is fitted to the terminal.
357
+ function trimLabel(text) {
358
+ const plain = checklistStepName(text)
359
+ .replace(/\*\*/gu, '')
360
+ .replace(/^\d+\.\s*/u, '')
361
+ .replace(/\s+/gu, ' ')
362
+ .trim();
363
+ if (plain.length <= CHECKLIST_LABEL_LIMIT)
364
+ return plain;
365
+ return `${plain.slice(0, CHECKLIST_LABEL_LIMIT).trimEnd()}…`;
366
+ }
367
+ function readCheckout(target) {
368
+ const branch = gitRef(target, '--abbrev-ref');
369
+ const head = gitRef(target, '--short');
370
+ return { target, ...(branch ? { branch } : {}), ...(head ? { head } : {}) };
371
+ }
372
+ // `--abbrev-ref` and `--short` are sticky output modes, so one rev-parse cannot
373
+ // answer both. A checkout that is not a repository yet reports neither.
374
+ function gitRef(target, mode) {
375
+ const result = spawnSync('git', ['-C', target, 'rev-parse', mode, 'HEAD'], { encoding: 'utf8' });
376
+ if (result.status !== 0)
377
+ return undefined;
378
+ return result.stdout.trim() || undefined;
379
+ }
380
+ function readIsolation(target) {
381
+ const context = readJsonObject(resolveRuntimeContextPath(target));
382
+ if (!context)
383
+ return undefined;
384
+ return section({
385
+ slotId: pickString(context, 'slotId'),
386
+ platform: pickString(context, 'platform'),
387
+ metroPort: pickNumber(context, 'metroPort'),
388
+ watcherPort: pickNumber(context, 'watcherPort'),
389
+ devServerPort: pickNumber(context, 'devServerPort'),
390
+ simulator: pickString(context, 'simulator'),
391
+ simulatorUdid: pickString(context, 'simulatorUdid'),
392
+ cdpPort: pickNumber(context, 'cdpPort'),
393
+ extensionId: pickString(context, 'extensionId'),
394
+ });
395
+ }
396
+ // A task writes these files as it advances, so one that has not been reached yet
397
+ // is simply absent and its section is omitted. Any other read failure, and every
398
+ // malformed document, is a broken task directory and must surface.
399
+ function readTextFile(file) {
400
+ try {
401
+ return fs.readFileSync(file, 'utf8');
402
+ }
403
+ catch (error) {
404
+ if (error.code === 'ENOENT')
405
+ return undefined;
406
+ throw error;
407
+ }
408
+ }
409
+ function readJsonObject(file) {
410
+ const raw = readTextFile(file);
411
+ if (raw === undefined)
412
+ return undefined;
413
+ let parsed;
414
+ try {
415
+ parsed = JSON.parse(raw);
416
+ }
417
+ catch (error) {
418
+ throw new Error(`${file} is not valid JSON: ${error.message}`);
419
+ }
420
+ const object = asObject(parsed);
421
+ if (!object)
422
+ throw new Error(`${file} must contain a JSON object.`);
423
+ return object;
424
+ }
425
+ function asObject(value) {
426
+ if (!value || typeof value !== 'object' || Array.isArray(value))
427
+ return undefined;
428
+ return value;
429
+ }
430
+ function pickString(source, key) {
431
+ const value = source?.[key];
432
+ return typeof value === 'string' && value !== '' ? value : undefined;
433
+ }
434
+ function pickNumber(source, key) {
435
+ const value = source?.[key];
436
+ return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
437
+ }
438
+ function pickBoolean(source, key) {
439
+ const value = source?.[key];
440
+ return typeof value === 'boolean' ? value : undefined;
441
+ }
442
+ function parseTime(value) {
443
+ if (value === undefined)
444
+ return undefined;
445
+ const parsed = Date.parse(value);
446
+ return Number.isFinite(parsed) ? parsed : undefined;
447
+ }
448
+ function section(value) {
449
+ return Object.values(value).some((entry) => entry !== undefined) ? value : undefined;
450
+ }
451
+ //# sourceMappingURL=task-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-view.js","sourceRoot":"","sources":["../../src/harness/task-view.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.7.0",
3
+ "version": "0.9.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -32,7 +32,7 @@
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.1",
35
+ "@farmslot/adapter-sdk": "0.7.0",
36
36
  "@farmslot/agent-runtime": "0.17.0",
37
37
  "@farmslot/protocol": "0.34.0",
38
38
  "@farmslot/recipe-runner": "0.26.0",