@tangle-network/browser-agent-driver 0.8.0 → 0.8.7
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/dist/brain/index.d.ts +24 -7
- package/dist/brain/index.d.ts.map +1 -1
- package/dist/brain/index.js +227 -93
- package/dist/brain/index.js.map +1 -1
- package/dist/captcha.d.ts +55 -0
- package/dist/captcha.d.ts.map +1 -0
- package/dist/captcha.js +403 -0
- package/dist/captcha.js.map +1 -0
- package/dist/cli-design-audit.d.ts.map +1 -1
- package/dist/cli-design-audit.js +81 -59
- package/dist/cli-design-audit.js.map +1 -1
- package/dist/cli-ui.d.ts +49 -0
- package/dist/cli-ui.d.ts.map +1 -0
- package/dist/cli-ui.js +383 -0
- package/dist/cli-ui.js.map +1 -0
- package/dist/cli.js +54 -186
- package/dist/cli.js.map +1 -1
- package/dist/drivers/cdp-snapshot.d.ts.map +1 -1
- package/dist/drivers/cdp-snapshot.js +2 -1
- package/dist/drivers/cdp-snapshot.js.map +1 -1
- package/dist/drivers/playwright.d.ts +6 -0
- package/dist/drivers/playwright.d.ts.map +1 -1
- package/dist/drivers/playwright.js +34 -9
- package/dist/drivers/playwright.js.map +1 -1
- package/dist/drivers/snapshot.d.ts +1 -0
- package/dist/drivers/snapshot.d.ts.map +1 -1
- package/dist/drivers/snapshot.js +12 -5
- package/dist/drivers/snapshot.js.map +1 -1
- package/dist/drivers/types.d.ts +2 -0
- package/dist/drivers/types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +16 -35
- package/dist/recovery.js.map +1 -1
- package/dist/runner/runner.d.ts +1 -0
- package/dist/runner/runner.d.ts.map +1 -1
- package/dist/runner/runner.js +133 -98
- package/dist/runner/runner.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -2
package/dist/cli-ui.js
ADDED
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI rendering — colors, spinners, progress display.
|
|
3
|
+
*
|
|
4
|
+
* Zero external deps beyond chalk. Spinner is custom (no ora needed).
|
|
5
|
+
* Degrades gracefully: colors off when piped, spinner disabled in non-TTY.
|
|
6
|
+
*/
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
// ── Formatting ──
|
|
9
|
+
export function fmtDuration(ms) {
|
|
10
|
+
const s = Math.round(ms / 1000);
|
|
11
|
+
if (s < 60)
|
|
12
|
+
return `${s}s`;
|
|
13
|
+
const m = Math.floor(s / 60);
|
|
14
|
+
const rem = s % 60;
|
|
15
|
+
return rem > 0 ? `${m}m ${rem}s` : `${m}m`;
|
|
16
|
+
}
|
|
17
|
+
export function cliError(msg) {
|
|
18
|
+
console.error(` ${chalk.red('error:')} ${msg}`);
|
|
19
|
+
}
|
|
20
|
+
export function cliWarn(msg) {
|
|
21
|
+
console.warn(` ${chalk.yellow('warn:')} ${msg}`);
|
|
22
|
+
}
|
|
23
|
+
export function cliLog(prefix, msg) {
|
|
24
|
+
console.log(` ${chalk.dim(`[${prefix}]`)} ${msg}`);
|
|
25
|
+
}
|
|
26
|
+
// ── Spinner ──
|
|
27
|
+
const FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
28
|
+
let cursorHookInstalled = false;
|
|
29
|
+
class Spinner {
|
|
30
|
+
timer = null;
|
|
31
|
+
frame = 0;
|
|
32
|
+
text = '';
|
|
33
|
+
textFn;
|
|
34
|
+
constructor() {
|
|
35
|
+
if (process.stdout.isTTY && !cursorHookInstalled) {
|
|
36
|
+
cursorHookInstalled = true;
|
|
37
|
+
process.on('exit', () => process.stdout.write('\x1B[?25h'));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
get running() { return this.timer !== null; }
|
|
41
|
+
start(text) {
|
|
42
|
+
if (!process.stdout.isTTY)
|
|
43
|
+
return;
|
|
44
|
+
this.textFn = undefined;
|
|
45
|
+
this.text = text;
|
|
46
|
+
process.stdout.write('\x1B[?25l');
|
|
47
|
+
this.tick();
|
|
48
|
+
this.timer = setInterval(() => this.tick(), 80);
|
|
49
|
+
}
|
|
50
|
+
/** Start with a dynamic text function — re-evaluated every tick for live updates */
|
|
51
|
+
startDynamic(fn) {
|
|
52
|
+
if (!process.stdout.isTTY)
|
|
53
|
+
return;
|
|
54
|
+
this.textFn = fn;
|
|
55
|
+
this.text = fn();
|
|
56
|
+
process.stdout.write('\x1B[?25l');
|
|
57
|
+
this.tick();
|
|
58
|
+
this.timer = setInterval(() => this.tick(), 80);
|
|
59
|
+
}
|
|
60
|
+
update(text) {
|
|
61
|
+
this.textFn = undefined;
|
|
62
|
+
this.text = text;
|
|
63
|
+
}
|
|
64
|
+
updateDynamic(fn) {
|
|
65
|
+
this.textFn = fn;
|
|
66
|
+
}
|
|
67
|
+
/** Clear spinner line — call before console.log to avoid collision */
|
|
68
|
+
clear() {
|
|
69
|
+
if (!this.timer)
|
|
70
|
+
return;
|
|
71
|
+
clearInterval(this.timer);
|
|
72
|
+
this.timer = null;
|
|
73
|
+
if (process.stdout.isTTY)
|
|
74
|
+
process.stdout.write('\r\x1B[K');
|
|
75
|
+
}
|
|
76
|
+
stop() {
|
|
77
|
+
this.clear();
|
|
78
|
+
this.text = '';
|
|
79
|
+
this.textFn = undefined;
|
|
80
|
+
}
|
|
81
|
+
tick() {
|
|
82
|
+
if (this.textFn)
|
|
83
|
+
this.text = this.textFn();
|
|
84
|
+
const f = FRAMES[this.frame++ % FRAMES.length];
|
|
85
|
+
process.stdout.write(`\r\x1B[K ${f} ${this.text}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// ── Renderer ──
|
|
89
|
+
export class CliRenderer {
|
|
90
|
+
spinner = new Spinner();
|
|
91
|
+
active = new Map();
|
|
92
|
+
done = 0;
|
|
93
|
+
total = 0;
|
|
94
|
+
totalTurns = 0;
|
|
95
|
+
showDebug;
|
|
96
|
+
constructor(opts) {
|
|
97
|
+
this.showDebug = opts?.debug ?? false;
|
|
98
|
+
}
|
|
99
|
+
// ── Banner ──
|
|
100
|
+
banner(opts) {
|
|
101
|
+
const { version, provider, model, browser, testCount, concurrency, mode, profile, adaptiveRouting, outputDir } = opts;
|
|
102
|
+
const n = testCount;
|
|
103
|
+
console.log('');
|
|
104
|
+
console.log(` ${chalk.bold('bad')} ${chalk.dim(`v${version}`)}`);
|
|
105
|
+
console.log(` ${chalk.cyan(`${provider}/${model}`)} ${chalk.dim('·')} ${browser} ${chalk.dim('·')} ${chalk.bold(String(n))} test${n !== 1 ? 's' : ''} ${chalk.dim('·')} ×${concurrency}`);
|
|
106
|
+
const meta = [];
|
|
107
|
+
if (mode)
|
|
108
|
+
meta.push(mode);
|
|
109
|
+
if (profile && profile !== 'default')
|
|
110
|
+
meta.push(profile);
|
|
111
|
+
if (adaptiveRouting) {
|
|
112
|
+
meta.push(`adaptive ${chalk.dim(`(${adaptiveRouting.navProvider}/${adaptiveRouting.navModel})`)}`);
|
|
113
|
+
}
|
|
114
|
+
meta.push(chalk.dim(`→ ${outputDir}`));
|
|
115
|
+
console.log(` ${meta.join(chalk.dim(' · '))}`);
|
|
116
|
+
console.log('');
|
|
117
|
+
}
|
|
118
|
+
// ── Launch phase ──
|
|
119
|
+
launchStart(browser) {
|
|
120
|
+
this.spinner.start(`Launching ${browser}…`);
|
|
121
|
+
}
|
|
122
|
+
launchDone() {
|
|
123
|
+
this.spinner.stop();
|
|
124
|
+
}
|
|
125
|
+
// ── Progress events ──
|
|
126
|
+
suiteStart(totalTests) {
|
|
127
|
+
this.total = totalTests;
|
|
128
|
+
this.done = 0;
|
|
129
|
+
this.totalTurns = 0;
|
|
130
|
+
}
|
|
131
|
+
testStart(testId, testName) {
|
|
132
|
+
this.active.set(testId, { name: testName, startedAt: Date.now() });
|
|
133
|
+
this.syncSpinner();
|
|
134
|
+
}
|
|
135
|
+
testTurn(testId, turn, action, durationMs, modelUsed) {
|
|
136
|
+
const t = this.active.get(testId);
|
|
137
|
+
if (t) {
|
|
138
|
+
t.turn = turn;
|
|
139
|
+
t.action = action;
|
|
140
|
+
}
|
|
141
|
+
if (this.showDebug) {
|
|
142
|
+
this.spinner.clear();
|
|
143
|
+
const tag = modelUsed ? chalk.dim(` [${modelUsed}]`) : '';
|
|
144
|
+
console.log(` ${chalk.dim(`turn ${turn}:`)} ${action} ${chalk.dim(`(${durationMs}ms)`)}${tag}`);
|
|
145
|
+
}
|
|
146
|
+
this.syncSpinner();
|
|
147
|
+
}
|
|
148
|
+
testComplete(testId, passed, verdict, turnsUsed, durationMs, estimatedCostUsd) {
|
|
149
|
+
this.active.delete(testId);
|
|
150
|
+
this.done++;
|
|
151
|
+
this.totalTurns += turnsUsed;
|
|
152
|
+
this.spinner.clear();
|
|
153
|
+
const icon = passed ? chalk.green('✓') : chalk.red('✗');
|
|
154
|
+
const name = passed ? chalk.green(testId) : chalk.red(testId);
|
|
155
|
+
const cost = estimatedCostUsd ? ` · ${chalk.yellow(`$${estimatedCostUsd.toFixed(3)}`)}` : '';
|
|
156
|
+
const stats = `${turnsUsed} turns · ${fmtDuration(durationMs)}${cost}`;
|
|
157
|
+
// Single-task: show full result on its own line for readability
|
|
158
|
+
if (this.total === 1) {
|
|
159
|
+
console.log(` ${icon} ${name} ${chalk.dim(`(${stats})`)}`);
|
|
160
|
+
const resultText = passed ? verdict : chalk.red(verdict);
|
|
161
|
+
console.log(` ${resultText}`);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
const truncated = verdict.length > 80 ? verdict.slice(0, 77) + '…' : verdict;
|
|
165
|
+
const verdictText = passed ? truncated : chalk.red(truncated);
|
|
166
|
+
console.log(` ${icon} ${name} ${chalk.dim('—')} ${verdictText} ${chalk.dim(`(${stats})`)}`);
|
|
167
|
+
}
|
|
168
|
+
this.syncSpinner();
|
|
169
|
+
}
|
|
170
|
+
suiteComplete(passed, failed, skipped, totalMs, totalCostUsd, manifestUri) {
|
|
171
|
+
this.spinner.stop();
|
|
172
|
+
console.log('');
|
|
173
|
+
console.log(` ${chalk.dim('─'.repeat(52))}`);
|
|
174
|
+
const parts = [];
|
|
175
|
+
if (passed > 0)
|
|
176
|
+
parts.push(chalk.green.bold(`${passed} passed`));
|
|
177
|
+
if (failed > 0)
|
|
178
|
+
parts.push(chalk.red.bold(`${failed} failed`));
|
|
179
|
+
if (skipped > 0)
|
|
180
|
+
parts.push(chalk.yellow(`${skipped} skipped`));
|
|
181
|
+
const extras = [fmtDuration(totalMs)];
|
|
182
|
+
if (this.totalTurns > 0)
|
|
183
|
+
extras.push(`${this.totalTurns} turns`);
|
|
184
|
+
if (totalCostUsd)
|
|
185
|
+
extras.push(chalk.yellow(`$${totalCostUsd.toFixed(2)}`));
|
|
186
|
+
console.log(` ${parts.join(chalk.dim(' · '))} ${chalk.dim('·')} ${extras.join(chalk.dim(' · '))}`);
|
|
187
|
+
if (manifestUri)
|
|
188
|
+
console.log(` ${chalk.dim('Artifacts →')} ${manifestUri}`);
|
|
189
|
+
console.log('');
|
|
190
|
+
}
|
|
191
|
+
report(reportPath) {
|
|
192
|
+
console.log(` ${chalk.dim('Report →')} ${reportPath}`);
|
|
193
|
+
}
|
|
194
|
+
destroy() {
|
|
195
|
+
this.spinner.stop();
|
|
196
|
+
}
|
|
197
|
+
// ── Internal ──
|
|
198
|
+
buildSpinnerText() {
|
|
199
|
+
const items = [...this.active.values()];
|
|
200
|
+
const names = items.slice(0, 3).map(t => t.name).join(chalk.dim(', '));
|
|
201
|
+
const overflow = items.length > 3 ? chalk.dim(` +${items.length - 3}`) : '';
|
|
202
|
+
// Show latest turn number and action
|
|
203
|
+
const latest = items.find(t => t.turn);
|
|
204
|
+
const turnInfo = latest
|
|
205
|
+
? chalk.dim(` · turn ${latest.turn}`) + (latest.action ? ` ${chalk.dim(latest.action)}` : '')
|
|
206
|
+
: '';
|
|
207
|
+
// Live elapsed time — recomputed every spinner tick
|
|
208
|
+
const oldest = items.reduce((a, b) => a.startedAt < b.startedAt ? a : b);
|
|
209
|
+
const elapsed = chalk.dim(` · ${fmtDuration(Date.now() - oldest.startedAt)}`);
|
|
210
|
+
const counter = chalk.dim(`[${this.done}/${this.total}]`);
|
|
211
|
+
return `${counter} ${names}${overflow}${turnInfo}${elapsed}`;
|
|
212
|
+
}
|
|
213
|
+
syncSpinner() {
|
|
214
|
+
if (this.active.size === 0) {
|
|
215
|
+
this.spinner.stop();
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
const textFn = () => this.buildSpinnerText();
|
|
219
|
+
if (this.spinner.running) {
|
|
220
|
+
this.spinner.updateDynamic(textFn);
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
this.spinner.startDynamic(textFn);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// ── Help ──
|
|
228
|
+
export function printStyledHelp(runModes, driverProfiles, personaIds) {
|
|
229
|
+
const H = chalk.bold;
|
|
230
|
+
const C = chalk.cyan;
|
|
231
|
+
const D = chalk.dim;
|
|
232
|
+
console.log(`
|
|
233
|
+
${chalk.bold('bad')} ${D('— LLM-driven browser automation CLI')}
|
|
234
|
+
|
|
235
|
+
${H('USAGE')}
|
|
236
|
+
bad run [options]
|
|
237
|
+
bad design-audit --url <url>
|
|
238
|
+
|
|
239
|
+
${H('SINGLE TASK')}
|
|
240
|
+
${D('$')} bad run ${C('--goal')} "Sign up for account" ${C('--url')} http://localhost:3000
|
|
241
|
+
${D('$')} bad run ${C('-g')} "Build a todo app" ${C('-u')} http://localhost:5173 ${C('-m')} claude-sonnet-4-20250514
|
|
242
|
+
${D('$')} bad run ${C('--goal')} "Explore key routes" ${C('--url')} https://example.com ${C('--mode')} fast-explore
|
|
243
|
+
|
|
244
|
+
${H('TEST SUITE')}
|
|
245
|
+
${D('$')} bad run ${C('--cases')} ./cases.json ${C('--concurrency')} 4
|
|
246
|
+
${D('$')} bad run ${C('--cases')} ./cases.json ${C('--sink')} ./results/ ${C('--model')} gpt-5.4
|
|
247
|
+
|
|
248
|
+
${H('DESIGN AUDIT')}
|
|
249
|
+
${D('$')} bad design-audit ${C('--url')} https://stripe.com
|
|
250
|
+
${D('$')} bad design-audit ${C('--url')} https://app.uniswap.org ${C('--profile')} defi
|
|
251
|
+
${D('$')} bad design-audit ${C('--url')} http://localhost:3000 ${C('--profile')} saas ${C('--pages')} 10
|
|
252
|
+
|
|
253
|
+
Profiles: ${C('general')}, ${C('saas')}, ${C('defi')}, ${C('marketing')}
|
|
254
|
+
|
|
255
|
+
${H('DESIGN TOKEN EXTRACTION')}
|
|
256
|
+
${D('$')} bad design-audit ${C('--url')} https://stripe.com ${C('--extract-tokens')}
|
|
257
|
+
${D('$')} bad design-audit ${C('--url')} https://app.example.com ${C('--extract-tokens')} ${C('--json')}
|
|
258
|
+
|
|
259
|
+
Extracts colors, typography, spacing, components, logos, icons,
|
|
260
|
+
CSS custom properties, and brand assets at mobile/tablet/desktop viewports.
|
|
261
|
+
Outputs tokens.json — no LLM calls, pure DOM extraction.
|
|
262
|
+
|
|
263
|
+
${H('DOCKER')}
|
|
264
|
+
${D('$')} docker run -v ./cases.json:/data/cases.json -v ./out:/output \\
|
|
265
|
+
bad run ${C('--cases')} /data/cases.json ${C('--sink')} /output/
|
|
266
|
+
|
|
267
|
+
${H('OPTIONS')}
|
|
268
|
+
|
|
269
|
+
${D('Config')}
|
|
270
|
+
${C('--config')} <path> Path to config file ${D('(default: auto-detect)')}
|
|
271
|
+
|
|
272
|
+
${D('Test specification')}
|
|
273
|
+
${C('-g, --goal')} <text> Natural language goal for single task
|
|
274
|
+
${C('-u, --url')} <url> Starting URL
|
|
275
|
+
${C('-c, --cases')} <file> JSON file with test cases array
|
|
276
|
+
${C('--allowed-domains')} <csv> Comma-separated host allowlist
|
|
277
|
+
${C('--vision-strategy')} <m> Vision policy: ${D('always, never, auto')}
|
|
278
|
+
|
|
279
|
+
${D('LLM configuration')}
|
|
280
|
+
${C('-m, --model')} <name> LLM model ${D('(default: gpt-5.4)')}
|
|
281
|
+
${C('--provider')} <name> LLM provider: ${D('openai, anthropic, google, codex-cli, claude-code, sandbox-backend')}
|
|
282
|
+
${C('--model-adaptive')} Enable adaptive model routing for decide() turns
|
|
283
|
+
${C('--nav-model')} <name> Fast navigation model for adaptive routing
|
|
284
|
+
${C('--nav-provider')} <name> Provider for nav model
|
|
285
|
+
${C('--api-key')} <key> API key ${D('(or set OPENAI_API_KEY / ANTHROPIC_API_KEY)')}
|
|
286
|
+
${C('--base-url')} <url> Custom LLM endpoint ${D('(e.g., LiteLLM proxy)')}
|
|
287
|
+
${C('--persona')} <id> Append persona directive ${D(`(${personaIds.join(', ')})`)}
|
|
288
|
+
|
|
289
|
+
${D('Execution')}
|
|
290
|
+
${C('--mode')} <name> Mode preset: ${D(runModes.join(', '))}
|
|
291
|
+
${C('--profile')} <name> Execution profile: ${D(driverProfiles.join(', '))}
|
|
292
|
+
${C('--prompt-file')} <path> Load system prompt from file
|
|
293
|
+
${C('--browser')} <name> Browser: ${D('chromium, firefox, webkit')}
|
|
294
|
+
${C('--storage-state')} <file> Playwright storage state JSON
|
|
295
|
+
${C('--concurrency')} <n> Parallel workers ${D('(default: 1)')}
|
|
296
|
+
${C('--max-turns')} <n> Max turns per test ${D('(default: 30)')}
|
|
297
|
+
${C('--llm-timeout')} <ms> Timeout per LLM call
|
|
298
|
+
${C('--retries')} <n> Retries for transient failures
|
|
299
|
+
${C('--retry-delay-ms')} <ms> Base retry backoff
|
|
300
|
+
${C('--timeout')} <ms> Per-test timeout ${D('(default: 600000)')}
|
|
301
|
+
${C('--headless')} Run browser headless ${D('(default: true)')}
|
|
302
|
+
${C('--no-headless')} Show browser window
|
|
303
|
+
${C('--screenshot-interval')} <n> Capture every N turns ${D('(default: 5)')}
|
|
304
|
+
|
|
305
|
+
${D('Scout')}
|
|
306
|
+
${C('--scout')} Enable scout/ranker recommendations
|
|
307
|
+
${C('--scout-model')} <name> Model override for scout
|
|
308
|
+
${C('--scout-provider')} <name> Provider override for scout
|
|
309
|
+
${C('--scout-vision')} Let scout inspect screenshots
|
|
310
|
+
${C('--scout-max-candidates')} <n>
|
|
311
|
+
${C('--scout-min-top-score')} <n>
|
|
312
|
+
${C('--scout-max-score-gap')} <n>
|
|
313
|
+
|
|
314
|
+
${D('Wallet mode')}
|
|
315
|
+
${C('--wallet')} Enable wallet mode ${D('(persistent Chromium profile)')}
|
|
316
|
+
${C('--extension')} <path> Load unpacked wallet/browser extension ${D('(repeatable)')}
|
|
317
|
+
${C('--user-data-dir')} <dir> Persistent profile directory
|
|
318
|
+
${C('--wallet-auto-approve')} Extension prompt auto-approval ${D('(default: true)')}
|
|
319
|
+
${C('--wallet-password')} <v> Wallet unlock password
|
|
320
|
+
${C('--wallet-preflight')} Run wallet origin preflight ${D('(default: true)')}
|
|
321
|
+
${C('--wallet-seed-url')} <u> Preflight URL ${D('(repeatable)')}
|
|
322
|
+
${C('--wallet-chain-id')} <n> Target chain ID for preflight
|
|
323
|
+
${C('--wallet-chain-rpc-url')} <u> RPC URL for preflight
|
|
324
|
+
|
|
325
|
+
${D('Memory & scoring')}
|
|
326
|
+
${C('--memory')} Enable trajectory memory ${D('(default: on)')}
|
|
327
|
+
${C('--no-memory')} Disable trajectory memory
|
|
328
|
+
${C('--memory-dir')} <dir> Memory directory ${D('(default: .agent-memory)')}
|
|
329
|
+
${C('--quality-threshold')} <n> Min quality score 1-10 ${D('(default: 0 = skip)')}
|
|
330
|
+
${C('--trace-scoring')} Enable trajectory scoring
|
|
331
|
+
${C('--trace-ttl-days')} <n> Retention window ${D('(default: 30)')}
|
|
332
|
+
|
|
333
|
+
${D('Output')}
|
|
334
|
+
${C('-s, --sink')} <dir> Output directory ${D('(default: ./agent-results)')}
|
|
335
|
+
${C('--json')} Output progress as JSON lines ${D('(for piping)')}
|
|
336
|
+
${C('-q, --quiet')} Suppress all output
|
|
337
|
+
${C('--goal-verification')} Verify goal completion ${D('(default: true)')}
|
|
338
|
+
${C('--no-goal-verification')} Skip goal verification
|
|
339
|
+
${C('--vision')} Enable vision/screenshots ${D('(default: true)')}
|
|
340
|
+
${C('--no-vision')} Disable vision
|
|
341
|
+
${C('--block-analytics')} Block analytics/tracking scripts
|
|
342
|
+
${C('--block-images')} Block image loading
|
|
343
|
+
${C('--block-media')} Block media loading
|
|
344
|
+
|
|
345
|
+
${D('Other')}
|
|
346
|
+
${C('-d, --debug')} Enable debug logging
|
|
347
|
+
${C('-h, --help')} Show this help
|
|
348
|
+
${C('-v, --version')} Show version
|
|
349
|
+
|
|
350
|
+
${D('Sandbox backend')}
|
|
351
|
+
${C('--sandbox-backend-type')} <type>
|
|
352
|
+
${C('--sandbox-backend-profile')} <id>
|
|
353
|
+
${C('--sandbox-backend-provider')} <id>
|
|
354
|
+
|
|
355
|
+
${H('TEST CASES JSON FORMAT')}
|
|
356
|
+
[
|
|
357
|
+
{
|
|
358
|
+
${C('"id"')}: "signup",
|
|
359
|
+
${C('"name"')}: "User signup flow",
|
|
360
|
+
${C('"goal"')}: "Create a new account with email test@example.com",
|
|
361
|
+
${C('"startUrl"')}: "http://localhost:3000/signup",
|
|
362
|
+
${C('"maxTurns"')}: 20,
|
|
363
|
+
${C('"timeoutMs"')}: 300000,
|
|
364
|
+
${C('"successDescription"')}: "Account created and redirected to dashboard"
|
|
365
|
+
}
|
|
366
|
+
]
|
|
367
|
+
|
|
368
|
+
${H('ENVIRONMENT VARIABLES')}
|
|
369
|
+
${C('OPENAI_API_KEY')} OpenAI API key
|
|
370
|
+
${C('ANTHROPIC_API_KEY')} Anthropic API key
|
|
371
|
+
${C('LLM_BASE_URL')} Custom LLM endpoint URL
|
|
372
|
+
${C('BROWSER_ENDPOINT')} Remote browser endpoint ${D('(CDP or Playwright)')}
|
|
373
|
+
${C('CODEX_CLI_PATH')} Optional Codex CLI binary path
|
|
374
|
+
${C('CODEX_ALLOW_NPX')} Set to 0 to disable npx fallback for codex-cli
|
|
375
|
+
${C('CLAUDE_CODE_CLI_PATH')} Optional Claude CLI binary path
|
|
376
|
+
${C('SANDBOX_BACKEND_TYPE')} Native backend type for sandbox-backend
|
|
377
|
+
${C('SANDBOX_BACKEND_PROFILE')} Native backend profile/preset
|
|
378
|
+
${C('SANDBOX_BACKEND_MODEL_PROVIDER')} Native backend provider override
|
|
379
|
+
${C('SANDBOX_SIDECAR_URL')} Sidecar API URL ${D('(default: http://127.0.0.1:$SIDECAR_PORT)')}
|
|
380
|
+
${C('SANDBOX_SIDECAR_AUTH_TOKEN')} Sidecar API bearer token
|
|
381
|
+
`);
|
|
382
|
+
}
|
|
383
|
+
//# sourceMappingURL=cli-ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-ui.js","sourceRoot":"","sources":["../src/cli-ui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,mBAAmB;AAEnB,MAAM,UAAU,WAAW,CAAC,EAAU;IACpC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;IAC/B,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC,GAAG,CAAA;IAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;IAC5B,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,CAAA;IAClB,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,MAAc,EAAE,GAAW;IAChD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;AACrD,CAAC;AAED,gBAAgB;AAEhB,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AACjE,IAAI,mBAAmB,GAAG,KAAK,CAAA;AAE/B,MAAM,OAAO;IACH,KAAK,GAA0C,IAAI,CAAA;IACnD,KAAK,GAAG,CAAC,CAAA;IACT,IAAI,GAAG,EAAE,CAAA;IACT,MAAM,CAAe;IAE7B;QACE,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACjD,mBAAmB,GAAG,IAAI,CAAA;YAC1B,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;QAC7D,CAAC;IACH,CAAC;IAED,IAAI,OAAO,KAAc,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAA,CAAC,CAAC;IAErD,KAAK,CAAC,IAAY;QAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;YAAE,OAAM;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QACjC,IAAI,CAAC,IAAI,EAAE,CAAA;QACX,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;IACjD,CAAC;IAED,oFAAoF;IACpF,YAAY,CAAC,EAAgB;QAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;YAAE,OAAM;QACjC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,CAAA;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QACjC,IAAI,CAAC,IAAI,EAAE,CAAA;QACX,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;IACjD,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAED,aAAa,CAAC,EAAgB;QAC5B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;IAClB,CAAC;IAED,sEAAsE;IACtE,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAM;QACvB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IAC5D,CAAC;IAED,IAAI;QACF,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;IACzB,CAAC;IAEO,IAAI;QACV,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;QAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;QAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IACrD,CAAC;CACF;AAED,iBAAiB;AAEjB,MAAM,OAAO,WAAW;IACd,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;IACvB,MAAM,GAAG,IAAI,GAAG,EAA+E,CAAA;IAC/F,IAAI,GAAG,CAAC,CAAA;IACR,KAAK,GAAG,CAAC,CAAA;IACT,UAAU,GAAG,CAAC,CAAA;IACd,SAAS,CAAS;IAE1B,YAAY,IAA0B;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,KAAK,IAAI,KAAK,CAAA;IACvC,CAAC;IAED,eAAe;IAEf,MAAM,CAAC,IAWN;QACC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;QACrH,MAAM,CAAC,GAAG,SAAS,CAAA;QACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;QACjE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,WAAW,EAAE,CAAC,CAAA;QAC1L,MAAM,IAAI,GAAa,EAAE,CAAA;QACzB,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,IAAI,OAAO,IAAI,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxD,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,WAAW,IAAI,eAAe,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAA;QACpG,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC,CAAA;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;QACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACjB,CAAC;IAED,qBAAqB;IAErB,WAAW,CAAC,OAAe;QACzB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,OAAO,GAAG,CAAC,CAAA;IAC7C,CAAC;IAED,UAAU;QACR,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;IACrB,CAAC;IAED,wBAAwB;IAExB,UAAU,CAAC,UAAkB;QAC3B,IAAI,CAAC,KAAK,GAAG,UAAU,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;QACb,IAAI,CAAC,UAAU,GAAG,CAAC,CAAA;IACrB,CAAC;IAED,SAAS,CAAC,MAAc,EAAE,QAAgB;QACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QAClE,IAAI,CAAC,WAAW,EAAE,CAAA;IACpB,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,IAAY,EAAE,MAAc,EAAE,UAAkB,EAAE,SAAkB;QAC3F,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACjC,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,IAAI,GAAG,IAAI,CAAA;YACb,CAAC,CAAC,MAAM,GAAG,MAAM,CAAA;QACnB,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;YACpB,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;YACzD,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,UAAU,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAA;QACvG,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAA;IACpB,CAAC;IAED,YAAY,CACV,MAAc,EACd,MAAe,EACf,OAAe,EACf,SAAiB,EACjB,UAAkB,EAClB,gBAAyB;QAEzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAA;QACX,IAAI,CAAC,UAAU,IAAI,SAAS,CAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QAEpB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC7D,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QAC5F,MAAM,KAAK,GAAG,GAAG,SAAS,YAAY,WAAW,CAAC,UAAU,CAAC,GAAG,IAAI,EAAE,CAAA;QACtE,gEAAgE;QAChE,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC,CAAA;YAC3D,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACxD,OAAO,CAAC,GAAG,CAAC,QAAQ,UAAU,EAAE,CAAC,CAAA;QACnC,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAA;YAC5E,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,WAAW,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC,CAAA;QAC9F,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAA;IACpB,CAAC;IAED,aAAa,CACX,MAAc,EACd,MAAc,EACd,OAAe,EACf,OAAe,EACf,YAAqB,EACrB,WAAoB;QAEpB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;QACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;QAE7C,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,IAAI,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,SAAS,CAAC,CAAC,CAAA;QAChE,IAAI,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,SAAS,CAAC,CAAC,CAAA;QAC9D,IAAI,OAAO,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC,CAAA;QAE/D,MAAM,MAAM,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA;QACrC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,QAAQ,CAAC,CAAA;QAChE,IAAI,YAAY;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAE1E,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAA;QACvG,IAAI,WAAW;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,WAAW,EAAE,CAAC,CAAA;QAC5E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,CAAC,UAAkB;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,UAAU,EAAE,CAAC,CAAA;IACzD,CAAC;IAED,OAAO;QACL,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;IACrB,CAAC;IAED,iBAAiB;IAET,gBAAgB;QACtB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;QACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAC3E,qCAAqC;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACtC,MAAM,QAAQ,GAAG,MAAM;YACrB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7F,CAAC,CAAC,EAAE,CAAA;QACN,oDAAoD;QACpD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACxE,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAC7E,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;QACzD,OAAO,GAAG,OAAO,IAAI,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,EAAE,CAAA;IAC9D,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;YACnB,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QACpC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QACnC,CAAC;IACH,CAAC;CACF;AAED,aAAa;AAEb,MAAM,UAAU,eAAe,CAAC,QAA2B,EAAE,cAAiC,EAAE,UAA6B;IAC3H,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAA;IACpB,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAA;IACpB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAA;IAEnB,OAAO,CAAC,GAAG,CAAC;EACZ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,qCAAqC,CAAC;;EAE7D,CAAC,CAAC,OAAO,CAAC;;;;EAIV,CAAC,CAAC,aAAa,CAAC;IACd,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC;IACjE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC;IACxF,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC;;EAErG,CAAC,CAAC,YAAY,CAAC;IACb,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,eAAe,CAAC;IACjE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC;;EAEvF,CAAC,CAAC,cAAc,CAAC;IACf,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC;IACrC,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,WAAW,CAAC;IAC/E,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;;cAExF,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC;;EAEvE,CAAC,CAAC,yBAAyB,CAAC;IAC1B,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,kBAAkB,CAAC;IACjF,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;;;;;;EAMvG,CAAC,CAAC,QAAQ,CAAC;IACT,CAAC,CAAC,GAAG,CAAC;cACI,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC;;EAExD,CAAC,CAAC,SAAS,CAAC;;IAEV,CAAC,CAAC,QAAQ,CAAC;QACP,CAAC,CAAC,UAAU,CAAC,uCAAuC,CAAC,CAAC,wBAAwB,CAAC;;IAEnF,CAAC,CAAC,oBAAoB,CAAC;IACvB,CAAC,CAAC,YAAY,CAAC;IACf,CAAC,CAAC,WAAW,CAAC;IACd,CAAC,CAAC,aAAa,CAAC;QACZ,CAAC,CAAC,mBAAmB,CAAC;QACtB,CAAC,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,CAAC,qBAAqB,CAAC;;IAE3E,CAAC,CAAC,mBAAmB,CAAC;IACtB,CAAC,CAAC,aAAa,CAAC,8BAA8B,CAAC,CAAC,oBAAoB,CAAC;QACjE,CAAC,CAAC,YAAY,CAAC,+BAA+B,CAAC,CAAC,oEAAoE,CAAC;QACrH,CAAC,CAAC,kBAAkB,CAAC;QACrB,CAAC,CAAC,aAAa,CAAC;QAChB,CAAC,CAAC,gBAAgB,CAAC;QACnB,CAAC,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC,6CAA6C,CAAC;QACxF,CAAC,CAAC,YAAY,CAAC,qCAAqC,CAAC,CAAC,uBAAuB,CAAC;QAC9E,CAAC,CAAC,WAAW,CAAC,2CAA2C,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;;IAE5F,CAAC,CAAC,WAAW,CAAC;QACV,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,CAAC,CAAC,WAAW,CAAC,qCAAqC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/E,CAAC,CAAC,eAAe,CAAC;QAClB,CAAC,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC,2BAA2B,CAAC;QACvE,CAAC,CAAC,iBAAiB,CAAC;QACpB,CAAC,CAAC,eAAe,CAAC,+BAA+B,CAAC,CAAC,cAAc,CAAC;QAClE,CAAC,CAAC,aAAa,CAAC,mCAAmC,CAAC,CAAC,eAAe,CAAC;QACrE,CAAC,CAAC,eAAe,CAAC;QAClB,CAAC,CAAC,WAAW,CAAC;QACd,CAAC,CAAC,kBAAkB,CAAC;QACrB,CAAC,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC,mBAAmB,CAAC;QACvE,CAAC,CAAC,YAAY,CAAC,sCAAsC,CAAC,CAAC,iBAAiB,CAAC;QACzE,CAAC,CAAC,eAAe,CAAC;QAClB,CAAC,CAAC,uBAAuB,CAAC,+BAA+B,CAAC,CAAC,cAAc,CAAC;;IAE9E,CAAC,CAAC,OAAO,CAAC;QACN,CAAC,CAAC,SAAS,CAAC;QACZ,CAAC,CAAC,eAAe,CAAC;QAClB,CAAC,CAAC,kBAAkB,CAAC;QACrB,CAAC,CAAC,gBAAgB,CAAC;QACnB,CAAC,CAAC,wBAAwB,CAAC;QAC3B,CAAC,CAAC,uBAAuB,CAAC;QAC1B,CAAC,CAAC,uBAAuB,CAAC;;IAE9B,CAAC,CAAC,aAAa,CAAC;QACZ,CAAC,CAAC,UAAU,CAAC,qCAAqC,CAAC,CAAC,+BAA+B,CAAC;QACpF,CAAC,CAAC,aAAa,CAAC,sDAAsD,CAAC,CAAC,cAAc,CAAC;QACvF,CAAC,CAAC,iBAAiB,CAAC;QACpB,CAAC,CAAC,uBAAuB,CAAC,oCAAoC,CAAC,CAAC,iBAAiB,CAAC;QAClF,CAAC,CAAC,mBAAmB,CAAC;QACtB,CAAC,CAAC,oBAAoB,CAAC,oCAAoC,CAAC,CAAC,iBAAiB,CAAC;QAC/E,CAAC,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,CAAC,cAAc,CAAC;QAC9D,CAAC,CAAC,mBAAmB,CAAC;QACtB,CAAC,CAAC,wBAAwB,CAAC;;IAE/B,CAAC,CAAC,kBAAkB,CAAC;QACjB,CAAC,CAAC,UAAU,CAAC,2CAA2C,CAAC,CAAC,eAAe,CAAC;QAC1E,CAAC,CAAC,aAAa,CAAC;QAChB,CAAC,CAAC,cAAc,CAAC,+BAA+B,CAAC,CAAC,0BAA0B,CAAC;QAC7E,CAAC,CAAC,qBAAqB,CAAC,+BAA+B,CAAC,CAAC,qBAAqB,CAAC;QAC/E,CAAC,CAAC,iBAAiB,CAAC;QACpB,CAAC,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,CAAC,eAAe,CAAC;;IAEvE,CAAC,CAAC,QAAQ,CAAC;IACX,CAAC,CAAC,YAAY,CAAC,sCAAsC,CAAC,CAAC,4BAA4B,CAAC;QAChF,CAAC,CAAC,QAAQ,CAAC,mDAAmD,CAAC,CAAC,cAAc,CAAC;IACnF,CAAC,CAAC,aAAa,CAAC;QACZ,CAAC,CAAC,qBAAqB,CAAC,+BAA+B,CAAC,CAAC,iBAAiB,CAAC;QAC3E,CAAC,CAAC,wBAAwB,CAAC;QAC3B,CAAC,CAAC,UAAU,CAAC,6CAA6C,CAAC,CAAC,iBAAiB,CAAC;QAC9E,CAAC,CAAC,aAAa,CAAC;QAChB,CAAC,CAAC,mBAAmB,CAAC;QACtB,CAAC,CAAC,gBAAgB,CAAC;QACnB,CAAC,CAAC,eAAe,CAAC;;IAEtB,CAAC,CAAC,OAAO,CAAC;IACV,CAAC,CAAC,aAAa,CAAC;IAChB,CAAC,CAAC,YAAY,CAAC;IACf,CAAC,CAAC,eAAe,CAAC;;IAElB,CAAC,CAAC,iBAAiB,CAAC;QAChB,CAAC,CAAC,wBAAwB,CAAC;QAC3B,CAAC,CAAC,2BAA2B,CAAC;QAC9B,CAAC,CAAC,4BAA4B,CAAC;;EAErC,CAAC,CAAC,wBAAwB,CAAC;;;QAGrB,CAAC,CAAC,MAAM,CAAC;QACT,CAAC,CAAC,QAAQ,CAAC;QACX,CAAC,CAAC,QAAQ,CAAC;QACX,CAAC,CAAC,YAAY,CAAC;QACf,CAAC,CAAC,YAAY,CAAC;QACf,CAAC,CAAC,aAAa,CAAC;QAChB,CAAC,CAAC,sBAAsB,CAAC;;;;EAI/B,CAAC,CAAC,uBAAuB,CAAC;IACxB,CAAC,CAAC,gBAAgB,CAAC;IACnB,CAAC,CAAC,mBAAmB,CAAC;IACtB,CAAC,CAAC,cAAc,CAAC;IACjB,CAAC,CAAC,kBAAkB,CAAC,uCAAuC,CAAC,CAAC,qBAAqB,CAAC;IACpF,CAAC,CAAC,gBAAgB,CAAC;IACnB,CAAC,CAAC,iBAAiB,CAAC;IACpB,CAAC,CAAC,sBAAsB,CAAC;IACzB,CAAC,CAAC,sBAAsB,CAAC;IACzB,CAAC,CAAC,yBAAyB,CAAC;IAC5B,CAAC,CAAC,gCAAgC,CAAC;IACnC,CAAC,CAAC,qBAAqB,CAAC,4BAA4B,CAAC,CAAC,2CAA2C,CAAC;IAClG,CAAC,CAAC,4BAA4B,CAAC;CAClC,CAAC,CAAA;AACF,CAAC"}
|