@farmslot/recipe-cli 0.8.0 → 0.10.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 +29 -0
- package/dist/harness/adapter-plugins.d.ts +1 -0
- package/dist/harness/adapter-plugins.d.ts.map +1 -1
- package/dist/harness/adapter-plugins.js +3 -0
- package/dist/harness/adapter-plugins.js.map +1 -1
- package/dist/harness/adapters.d.ts +0 -2
- package/dist/harness/adapters.d.ts.map +1 -1
- package/dist/harness/adapters.js +0 -4
- package/dist/harness/adapters.js.map +1 -1
- package/dist/harness/catalog.d.ts.map +1 -1
- package/dist/harness/catalog.js +2 -5
- package/dist/harness/catalog.js.map +1 -1
- package/dist/harness/command-contract.d.ts +16 -1
- package/dist/harness/command-contract.d.ts.map +1 -1
- package/dist/harness/command-contract.js +8 -0
- package/dist/harness/command-contract.js.map +1 -1
- package/dist/harness/command-journal.d.ts.map +1 -1
- package/dist/harness/command-journal.js +1 -10
- package/dist/harness/command-journal.js.map +1 -1
- package/dist/harness/commands/call.d.ts +3 -3
- package/dist/harness/commands/call.d.ts.map +1 -1
- package/dist/harness/commands/call.js +49 -27
- package/dist/harness/commands/call.js.map +1 -1
- package/dist/harness/commands/checklist.d.ts +16 -0
- package/dist/harness/commands/checklist.d.ts.map +1 -0
- package/dist/harness/commands/checklist.js +171 -0
- package/dist/harness/commands/checklist.js.map +1 -0
- package/dist/harness/commands/doctor.d.ts +45 -0
- package/dist/harness/commands/doctor.d.ts.map +1 -0
- package/dist/harness/commands/doctor.js +636 -0
- package/dist/harness/commands/doctor.js.map +1 -0
- package/dist/harness/commands/execution-template.d.ts +2 -0
- package/dist/harness/commands/execution-template.d.ts.map +1 -0
- package/dist/harness/commands/execution-template.js +27 -0
- package/dist/harness/commands/execution-template.js.map +1 -0
- package/dist/harness/commands/launch.js +3 -0
- package/dist/harness/commands/launch.js.map +1 -1
- package/dist/harness/commands/prepare.d.ts +35 -0
- package/dist/harness/commands/prepare.d.ts.map +1 -0
- package/dist/harness/commands/prepare.js +608 -0
- package/dist/harness/commands/prepare.js.map +1 -0
- package/dist/harness/commands/recipe-quality.d.ts +13 -0
- package/dist/harness/commands/recipe-quality.d.ts.map +1 -0
- package/dist/harness/commands/recipe-quality.js +112 -0
- package/dist/harness/commands/recipe-quality.js.map +1 -0
- package/dist/harness/commands/run.d.ts +12 -0
- package/dist/harness/commands/run.d.ts.map +1 -1
- package/dist/harness/commands/run.js +55 -11
- package/dist/harness/commands/run.js.map +1 -1
- package/dist/harness/commands/status-watch.d.ts +20 -0
- package/dist/harness/commands/status-watch.d.ts.map +1 -0
- package/dist/harness/commands/status-watch.js +402 -0
- package/dist/harness/commands/status-watch.js.map +1 -0
- package/dist/harness/commands/status.d.ts +5 -0
- package/dist/harness/commands/status.d.ts.map +1 -0
- package/dist/harness/commands/status.js +167 -0
- package/dist/harness/commands/status.js.map +1 -0
- package/dist/harness/commands/task-init.d.ts +5 -0
- package/dist/harness/commands/task-init.d.ts.map +1 -0
- package/dist/harness/commands/task-init.js +54 -0
- package/dist/harness/commands/task-init.js.map +1 -0
- package/dist/harness/doctor-report.d.ts +58 -0
- package/dist/harness/doctor-report.d.ts.map +1 -0
- package/dist/harness/doctor-report.js +154 -0
- package/dist/harness/doctor-report.js.map +1 -0
- package/dist/harness/harness-cli.d.ts +10 -1
- package/dist/harness/harness-cli.d.ts.map +1 -1
- package/dist/harness/harness-cli.js +4 -6
- package/dist/harness/harness-cli.js.map +1 -1
- package/dist/harness/heal-bounds.d.ts.map +1 -1
- package/dist/harness/heal-bounds.js +6 -0
- package/dist/harness/heal-bounds.js.map +1 -1
- package/dist/harness/index.d.ts +17 -5
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +16 -4
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/json-stream.d.ts +9 -1
- package/dist/harness/json-stream.d.ts.map +1 -1
- package/dist/harness/json-stream.js +26 -0
- package/dist/harness/json-stream.js.map +1 -1
- package/dist/harness/paths.d.ts +2 -0
- package/dist/harness/paths.d.ts.map +1 -1
- package/dist/harness/paths.js +2 -0
- package/dist/harness/paths.js.map +1 -1
- package/dist/harness/readiness.d.ts +31 -0
- package/dist/harness/readiness.d.ts.map +1 -0
- package/dist/harness/readiness.js +12 -0
- package/dist/harness/readiness.js.map +1 -0
- package/dist/harness/recipe-validation.d.ts +0 -2
- package/dist/harness/recipe-validation.d.ts.map +1 -1
- package/dist/harness/recipe-validation.js +11 -25
- package/dist/harness/recipe-validation.js.map +1 -1
- package/dist/harness/recording-target.d.ts +11 -0
- package/dist/harness/recording-target.d.ts.map +1 -1
- package/dist/harness/recording-target.js +31 -2
- package/dist/harness/recording-target.js.map +1 -1
- package/dist/harness/run-engine.d.ts +14 -1
- package/dist/harness/run-engine.d.ts.map +1 -1
- package/dist/harness/run-engine.js +25 -4
- package/dist/harness/run-engine.js.map +1 -1
- package/dist/harness/run-options.js +2 -11
- package/dist/harness/run-options.js.map +1 -1
- package/dist/harness/stage-progress.d.ts +25 -0
- package/dist/harness/stage-progress.d.ts.map +1 -0
- package/dist/harness/stage-progress.js +170 -0
- package/dist/harness/stage-progress.js.map +1 -0
- package/dist/harness/task-view.d.ts +142 -0
- package/dist/harness/task-view.d.ts.map +1 -0
- package/dist/harness/task-view.js +451 -0
- package/dist/harness/task-view.js.map +1 -0
- package/package.json +3 -3
|
@@ -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":"AAAA,+EAA+E;AAC/E,8EAA8E;AAC9E,8BAA8B;AAC9B,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAE5E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EACL,iBAAiB,EACjB,4BAA4B,EAC5B,4BAA4B,EAC5B,8BAA8B,EAC9B,sBAAsB,EACtB,4BAA4B,EAC5B,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,YAAY,EAEZ,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,qBAAqB,EAGrB,8BAA8B,GAC/B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAE5F,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEzE,gFAAgF;AAChF,gDAAgD;AAChD,SAAS,mBAAmB,CAAC,KAAyB;IACpD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,CAAC,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE;YACnC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACnD,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC;AAED,gEAAgE;AAChE,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAE7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAkJxC,+EAA+E;AAC/E,4EAA4E;AAC5E,uEAAuE;AACvE,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnD,2EAA2E;AAC3E,mEAAmE;AACnE,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,MAAc,EACd,OAA2B,EAC3B,GAAW;IAEX,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChF,OAAO,GAAG,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACjG,MAAM,aAAa,GACjB,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC;IAC1F,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,YAAY,CAAC,CAAC;SACnF,MAAM,CACL,CAAC,SAAS,EAAE,EAAE,CACZ,CAAC,aAAa;QACd,IAAI;aACD,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;aAC1B,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAC9E;SACA,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACnB,GAAG,SAAS;QACZ,UAAU,EACR,SAAS,CAAC,MAAM,KAAK,SAAS;YAC9B,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,gBAAgB;KAChE,CAAC,CAAC,CAAC;IACN,MAAM,IAAI,GAAG;QACX,UAAU;QACV,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC;QAC9B,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC;QAChC,SAAS,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,GAAG,CACjE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAmB,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CACjF;KACF,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,GAAG,IAAI;YACP,SAAS,EAAE,EAAE;YACb,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE;SAChD,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;IAC7F,+EAA+E;IAC/E,2EAA2E;IAC3E,cAAc;IACd,MAAM,OAAO,GACX,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;QACjE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC,CAAC;IACxF,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,IAAI,EAAE,kBAAkB,CAAC;IAC7C,IAAI,WAAW,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,6CAA6C,CAClF,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GACX,WAAqC;QACpC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACtB,EAAE,EAAE,qBAAqB,CAAC,KAAK,CAAC;QAChC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;KACnB,CAAC,CAAC;SACF,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnE,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC,CAAC;IACjF,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,8BAA8B,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,0BAA0B,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChG,CAAC;IACD,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,mBAAmB,CACjC,OAAO,EACP,GAAG,EACH,SAAS,EACT,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAC7C,CAAC;IACF,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1C,yEAAyE;IACzE,8EAA8E;IAC9E,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACzC,MAAM,aAAa,GACjB,SAAS,KAAK,SAAS,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,SAAS,IAAI,SAAS,CAAC,CAAC;IACjF,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,MAAM,QAAQ,GAAG,YAAY,CAAC;QAC5B,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC;QACpC,UAAU,EAAE;YACV,SAAS;YACT,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAC1C,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACrE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACrC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;YAClD,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC;gBACnC,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC;gBACjC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC;gBACnC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC;aAC/B,CAAC;SACH;QACD,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;QAC5B,MAAM;QACN,GAAG;KACJ,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,IAAI;QACP,OAAO;QACP,8EAA8E;QAC9E,OAAO,EAAE,OAAO,CAAC;YACf,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;YAC1D,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC;SAC7D,CAAC;QACF,QAAQ,EAAE,OAAO,CAAC;YAChB,EAAE,EAAE,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC;YAC9B,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC;YAC1C,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;YACjC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;YACrC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;YACvC,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;YAChC,MAAM;SACP,CAAC;QACF,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS;YAClC,CAAC,CAAC;gBACE,UAAU,EAAE,sBAAsB,CAChC,QAAQ,EACR,SAAS,CAAC,CAAC,CAAE,SAA+C,CAAC,CAAC,CAAC,IAAI,CACpE;aACF;YACH,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,EAAE,OAAO,CAAC;YACf,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC;YACxC,gBAAgB,EAAE,UAAU,CAAC,QAAQ,EAAE,kBAAkB,CAAC;YAC1D,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC;YACtC,WAAW,EAAE,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC;SAClD,CAAC;QACF,OAAO,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,SAAS;QACT,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC;QAC/B,MAAM,EAAE,OAAO,CAAC;YACd,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC;YACpC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC;YAChC,SAAS,EAAE,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC;YAC1C,SAAS,EAAE,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC;SAC3C,CAAC;QACF,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,MAAM;QACT,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAAe,EACf,GAAW,EACX,aAAiC,EACjC,UAA8B;IAE9B,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAC5F,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;IAClE,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5C,IACE,CAAC,IAAI;QACL,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3B,aAAa,KAAK,SAAS;QAC3B,YAAY,KAAK,SAAS;QAC1B,SAAS,KAAK,SAAS;QACvB,GAAG,GAAG,SAAS,GAAG,MAAM;QACxB,KAAK,KAAK,SAAS;QACnB,KAAK,GAAG,CAAC;QACT,CAAC,aAAa,KAAK,SAAS,IAAI,YAAY,GAAG,aAAa,CAAC;QAC7D,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,IAAI,YAAY,CAAC;QAExD,OAAO,SAAS,CAAC;IACnB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;QAC1C,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAA4B,EAAE;YACzD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC7B,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAClD,OAAO,EAAE;gBACP,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,MAAM;gBACN,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC5C,UAAU,KAAK,SAAS;gBACxB,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;gBAC9B,CAAC,CAAC,EAAE,CAAC;QACT,CAAC,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;IACP,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,SAAmB;QAC9B,SAAS,EAAE,YAAsB;QACjC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,aAAa,CAAC;QAC3C,SAAS,EAAE,KAAK,CAAC,MAAM;QACvB,KAAK;QACL,KAAK;KACN,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,4EAA4E;AAC5E,6CAA6C;AAC7C,SAAS,eAAe,CAAC,MAAc,EAAE,GAAW;IAClD,MAAM,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,4EAA4E;IAC5E,0EAA0E;IAC1E,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,SAAS,CAAC;IACjD,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAC3B,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClE,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAMrB;IACC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,MAAM,mBAAmB,GACvB,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,MAAM,KAAK,GAAG;QACZ,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtE,CAAC;IACF,wEAAwE;IACxE,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QACnD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,CAAC;IACzD,IAAI,4BAA4B,CAAC,KAAK,CAAC,MAAM,CAAC;QAC5C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,CAAC;IAC1D,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,GAAG,oBAAoB;QACvD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,CAAC;IACxD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;AACrC,CAAC;AAED,4EAA4E;AAC5E,8EAA8E;AAC9E,kDAAkD;AAClD,SAAS,WAAW,CAClB,IAAmB,EACnB,MAA2C,EAC3C,YAAgC,EAChC,GAAW;IAEX,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,GAAG,CACvB,4BAA4B,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACrF,IAAI,CAAC,UAAU;QACf,IAAI,CAAC,UAAU;KAChB,CAAC,CACH,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9F,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,UAAU,KAAK,SAAS;YAAE,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;IAC5D,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,OAAO,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,CAAC,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC;IACtE,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC;IAClD,OAAO;QACL,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,4BAA4B;AAC5B,SAAS,cAAc,CACrB,MAA2C;IAE3C,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,MAAM,KAAK,GAAoE,EAAE,CAAC;IAClF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACjD,IAAI,UAAU,KAAK,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,SAAS;YAAE,SAAS;QAC7E,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,SAAmB,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2EAA2E;AAC3E,4EAA4E;AAC5E,2EAA2E;AAC3E,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO,4BAA4B,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACvD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,MAAM,EAAE,IAAI,CAAC,UAAU;QACvB,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/B,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,0EAA0E;AAC1E,8EAA8E;AAC9E,+EAA+E;AAC/E,8DAA8D;AAC9D,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACnF,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC;QACpE,IAAI,EAAE,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS;YAAE,SAAS;QAC3D,yEAAyE;QACzE,2EAA2E;QAC3E,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC;YACT,EAAE;YACF,UAAU;YACV,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,OAAO,EAAE,sBAAsB,CAAC,MAAM,CAAC;YACvC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAC5D,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;gBAC/E,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE;gBAC3F,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gFAAgF;AAChF,6EAA6E;AAC7E,sDAAsD;AACtD,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC;SAClC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;SACzB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,IAAI,EAAE,CAAC;IACV,IAAI,KAAK,CAAC,MAAM,IAAI,qBAAqB;QAAE,OAAO,KAAK,CAAC;IACxD,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;AAC/D,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9E,CAAC;AAED,gFAAgF;AAChF,wEAAwE;AACxE,SAAS,MAAM,CAAC,MAAc,EAAE,IAAY;IAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACjG,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;AAC3C,CAAC;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,MAAM,OAAO,GAAG,cAAc,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO,OAAO,CAAC;QACb,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;QACrC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC;QACzC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC;QAC3C,WAAW,EAAE,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC;QAC/C,aAAa,EAAE,UAAU,CAAC,OAAO,EAAE,eAAe,CAAC;QACnD,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC;QAC3C,aAAa,EAAE,UAAU,CAAC,OAAO,EAAE,eAAe,CAAC;QACnD,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;QACvC,WAAW,EAAE,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC;KAChD,CAAC,CAAC;AACL,CAAC;AAED,iFAAiF;AACjF,iFAAiF;AACjF,mEAAmE;AACnE,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACzE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,uBAAwB,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,8BAA8B,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAClF,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,SAAS,UAAU,CAAC,MAA2C,EAAE,GAAW;IAC1E,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED,SAAS,UAAU,CAAC,MAA2C,EAAE,GAAW;IAC1E,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACjF,CAAC;AAED,SAAS,WAAW,CAClB,MAA2C,EAC3C,GAAW;IAEX,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC;AAED,SAAS,SAAS,CAAC,KAAyB;IAC1C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED,SAAS,OAAO,CAAmB,KAAQ;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@farmslot/recipe-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.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.
|
|
35
|
+
"@farmslot/adapter-sdk": "0.7.1",
|
|
36
36
|
"@farmslot/agent-runtime": "0.17.0",
|
|
37
37
|
"@farmslot/protocol": "0.34.0",
|
|
38
|
-
"@farmslot/recipe-runner": "0.
|
|
38
|
+
"@farmslot/recipe-runner": "0.27.0",
|
|
39
39
|
"commander": "^12.0.0",
|
|
40
40
|
"es-module-lexer": "2.3.1",
|
|
41
41
|
"esbuild": "0.28.1",
|