@tangle-network/browser-agent-driver 0.15.0 → 0.16.1

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 (47) hide show
  1. package/dist/artifacts/filesystem-sink.d.ts +23 -0
  2. package/dist/artifacts/filesystem-sink.d.ts.map +1 -1
  3. package/dist/artifacts/filesystem-sink.js +49 -0
  4. package/dist/artifacts/filesystem-sink.js.map +1 -1
  5. package/dist/brain/index.d.ts +22 -1
  6. package/dist/brain/index.d.ts.map +1 -1
  7. package/dist/brain/index.js +57 -1
  8. package/dist/brain/index.js.map +1 -1
  9. package/dist/cli-view-live.d.ts +60 -0
  10. package/dist/cli-view-live.d.ts.map +1 -0
  11. package/dist/cli-view-live.js +216 -0
  12. package/dist/cli-view-live.js.map +1 -0
  13. package/dist/cli-view.d.ts +13 -0
  14. package/dist/cli-view.d.ts.map +1 -1
  15. package/dist/cli-view.js +69 -2
  16. package/dist/cli-view.js.map +1 -1
  17. package/dist/cli.js +57 -1
  18. package/dist/cli.js.map +1 -1
  19. package/dist/extensions/loader.d.ts +40 -0
  20. package/dist/extensions/loader.d.ts.map +1 -0
  21. package/dist/extensions/loader.js +85 -0
  22. package/dist/extensions/loader.js.map +1 -0
  23. package/dist/extensions/types.d.ts +132 -0
  24. package/dist/extensions/types.d.ts.map +1 -0
  25. package/dist/extensions/types.js +161 -0
  26. package/dist/extensions/types.js.map +1 -0
  27. package/dist/runner/decision-cache.d.ts +105 -0
  28. package/dist/runner/decision-cache.d.ts.map +1 -0
  29. package/dist/runner/decision-cache.js +150 -0
  30. package/dist/runner/decision-cache.js.map +1 -0
  31. package/dist/runner/deterministic-patterns.d.ts +41 -0
  32. package/dist/runner/deterministic-patterns.d.ts.map +1 -0
  33. package/dist/runner/deterministic-patterns.js +169 -0
  34. package/dist/runner/deterministic-patterns.js.map +1 -0
  35. package/dist/runner/events.d.ts +224 -0
  36. package/dist/runner/events.d.ts.map +1 -0
  37. package/dist/runner/events.js +147 -0
  38. package/dist/runner/events.js.map +1 -0
  39. package/dist/runner/runner.d.ts +22 -0
  40. package/dist/runner/runner.d.ts.map +1 -1
  41. package/dist/runner/runner.js +299 -18
  42. package/dist/runner/runner.js.map +1 -1
  43. package/dist/test-runner.d.ts +19 -1
  44. package/dist/test-runner.d.ts.map +1 -1
  45. package/dist/test-runner.js +41 -3
  46. package/dist/test-runner.js.map +1 -1
  47. package/package.json +1 -1
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Live mode for `bad view` — wraps cli-view.ts with an SSE endpoint that
3
+ * streams TurnEvents from a passed-in TurnEventBus to any subscribed viewer.
4
+ *
5
+ * Architecture:
6
+ * - The same single-file viewer.html is served. When the URL has `?live=1`
7
+ * it opens an EventSource on /events and switches to streaming UI.
8
+ * - The /events endpoint holds the connection open, replays the bus's
9
+ * buffered history first (so late connectors catch up), then streams
10
+ * subsequent events as they fire.
11
+ * - Heartbeat ping every 15s keeps the connection alive across NAT.
12
+ * - Multiple concurrent viewers are supported (each gets its own
13
+ * subscription to the bus).
14
+ * - /cancel POST aborts the run via the supplied AbortController.
15
+ *
16
+ * No external SSE library — Node's native http supports SSE cleanly with
17
+ * just `res.write('data: ...\n\n')`.
18
+ */
19
+ import * as fs from 'node:fs';
20
+ import * as http from 'node:http';
21
+ import * as path from 'node:path';
22
+ import { spawn } from 'node:child_process';
23
+ import { fileURLToPath } from 'node:url';
24
+ import chalk from 'chalk';
25
+ import { serializeForJsonl } from './runner/events.js';
26
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
27
+ /** Resolved at module load — single canonical path. */
28
+ const VIEWER_HTML_PATH = (() => {
29
+ const distPath = path.join(__dirname, 'viewer/viewer.html');
30
+ if (fs.existsSync(distPath))
31
+ return distPath;
32
+ const srcPath = path.join(__dirname, '../viewer/viewer.html');
33
+ if (fs.existsSync(srcPath))
34
+ return srcPath;
35
+ const upPath = path.join(__dirname, '../../src/viewer/viewer.html');
36
+ if (fs.existsSync(upPath))
37
+ return upPath;
38
+ return '';
39
+ })();
40
+ export class LiveViewError extends Error {
41
+ constructor(message) {
42
+ super(message);
43
+ this.name = 'LiveViewError';
44
+ }
45
+ }
46
+ function openInBrowser(url) {
47
+ const cmd = process.platform === 'darwin' ? 'open'
48
+ : process.platform === 'win32' ? 'start'
49
+ : 'xdg-open';
50
+ try {
51
+ spawn(cmd, [url], { detached: true, stdio: 'ignore' }).unref();
52
+ }
53
+ catch {
54
+ /* best effort */
55
+ }
56
+ }
57
+ async function listenWithRetry(server, startPort, maxRetries) {
58
+ for (let i = 0; i <= maxRetries; i++) {
59
+ const port = startPort + i;
60
+ try {
61
+ await new Promise((resolve, reject) => {
62
+ const onError = (err) => {
63
+ server.removeListener('listening', onListening);
64
+ reject(err);
65
+ };
66
+ const onListening = () => {
67
+ server.removeListener('error', onError);
68
+ resolve();
69
+ };
70
+ server.once('error', onError);
71
+ server.once('listening', onListening);
72
+ server.listen(port, '127.0.0.1');
73
+ });
74
+ return port;
75
+ }
76
+ catch (err) {
77
+ if (err.code !== 'EADDRINUSE')
78
+ throw err;
79
+ }
80
+ }
81
+ throw new LiveViewError(`could not bind to any port in range ${startPort}-${startPort + maxRetries} (all in use)`);
82
+ }
83
+ /**
84
+ * Format a TurnEvent for SSE wire transport.
85
+ *
86
+ * event: <type>
87
+ * id: <seq>
88
+ * data: <json>
89
+ * <blank line>
90
+ *
91
+ * EventSource auto-reconnects with the last seen `id` in the
92
+ * Last-Event-ID header so server-side replay can be resumed.
93
+ */
94
+ export function formatSseEvent(event) {
95
+ const data = serializeForJsonl(event);
96
+ return `event: ${event.type}\nid: ${event.seq}\ndata: ${data}\n\n`;
97
+ }
98
+ /**
99
+ * Spin up the live view server.
100
+ *
101
+ * GET / — serves viewer.html with `?live=1` injected
102
+ * GET /events — SSE stream of TurnEvents
103
+ * POST /cancel — sends abort signal to the run
104
+ * GET /<file> — static asset under the viewer subtree
105
+ */
106
+ export async function runLiveView(opts) {
107
+ if (!VIEWER_HTML_PATH) {
108
+ throw new LiveViewError('viewer.html not found. The package may be missing dist/viewer/viewer.html — try reinstalling.');
109
+ }
110
+ const viewerSource = fs.readFileSync(VIEWER_HTML_PATH, 'utf-8');
111
+ // The live page injects ?live=1 into the existing viewer HTML and exposes
112
+ // a global flag that the viewer's bootstrap script reads. The static replay
113
+ // path is left intact: when no events are streamed, the viewer falls back
114
+ // to its existing window.__bad_runData reading. Live mode just appends a
115
+ // small bootstrap that opens an EventSource and re-renders on each event.
116
+ const liveBootstrap = `
117
+ <script>
118
+ (() => {
119
+ window.__bad_live = true;
120
+ const events = [];
121
+ const subscribers = new Set();
122
+ window.__bad_subscribeEvents = (fn) => {
123
+ subscribers.add(fn);
124
+ for (const e of events) fn(e);
125
+ return () => subscribers.delete(fn);
126
+ };
127
+ window.__bad_cancelRun = async () => {
128
+ try { await fetch('/cancel', { method: 'POST' }); } catch {}
129
+ };
130
+ const es = new EventSource('/events');
131
+ es.onmessage = (msg) => {
132
+ try {
133
+ const event = JSON.parse(msg.data);
134
+ events.push(event);
135
+ for (const fn of subscribers) fn(event);
136
+ } catch {}
137
+ };
138
+ es.onerror = () => {
139
+ // EventSource auto-reconnects via Last-Event-ID; nothing to do.
140
+ };
141
+ })();
142
+ </script>
143
+ `;
144
+ const liveHtml = viewerSource.replace('</body>', `${liveBootstrap}</body>`);
145
+ const server = http.createServer((req, res) => {
146
+ const urlPath = (req.url ?? '/').split('?')[0];
147
+ if (req.method === 'GET' && (urlPath === '/' || urlPath === '/index.html')) {
148
+ res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
149
+ res.end(liveHtml);
150
+ return;
151
+ }
152
+ if (req.method === 'GET' && urlPath === '/events') {
153
+ // SSE handshake
154
+ res.writeHead(200, {
155
+ 'Content-Type': 'text/event-stream',
156
+ 'Cache-Control': 'no-cache, no-transform',
157
+ Connection: 'keep-alive',
158
+ 'X-Accel-Buffering': 'no', // disable nginx buffering if behind proxy
159
+ });
160
+ // Initial comment so EventSource considers the connection open
161
+ res.write(': bad live stream\n\n');
162
+ // Subscribe with replay so the viewer catches up to current state
163
+ const unsub = opts.bus.subscribe((event) => {
164
+ try {
165
+ res.write(formatSseEvent(event));
166
+ }
167
+ catch {
168
+ // Connection closed mid-write — unsubscribe and stop
169
+ unsub();
170
+ }
171
+ }, true);
172
+ // Heartbeat to keep the connection alive across NATs / proxies
173
+ const heartbeat = setInterval(() => {
174
+ try {
175
+ res.write(': heartbeat\n\n');
176
+ }
177
+ catch {
178
+ // ignore
179
+ }
180
+ }, 15_000);
181
+ req.on('close', () => {
182
+ clearInterval(heartbeat);
183
+ unsub();
184
+ });
185
+ return;
186
+ }
187
+ if (req.method === 'POST' && urlPath === '/cancel') {
188
+ if (opts.cancelController) {
189
+ opts.cancelController.abort('cancelled by user via live viewer');
190
+ }
191
+ res.writeHead(202, { 'Content-Type': 'application/json' });
192
+ res.end(JSON.stringify({ cancelled: true }));
193
+ return;
194
+ }
195
+ res.writeHead(404);
196
+ res.end('not found');
197
+ });
198
+ const port = await listenWithRetry(server, opts.port ?? 7777, opts.portRetries ?? 10);
199
+ // Use 127.0.0.1 explicitly so the URL matches the bind address. Linux
200
+ // runners can resolve "localhost" to ::1 (IPv6) first, which fails to
201
+ // connect because the server only listens on the IPv4 loopback.
202
+ const url = `http://127.0.0.1:${port}`;
203
+ console.log('');
204
+ console.log(` ${chalk.bold('bad live')}`);
205
+ console.log(` ${chalk.dim('URL:')} ${chalk.cyan(url)}`);
206
+ console.log(` ${chalk.dim('Press Ctrl+C to stop')}`);
207
+ console.log('');
208
+ if (!opts.noOpen) {
209
+ openInBrowser(url);
210
+ }
211
+ const close = () => new Promise(resolve => {
212
+ server.close(() => resolve());
213
+ });
214
+ return { url, close };
215
+ }
216
+ //# sourceMappingURL=cli-view-live.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-view-live.js","sourceRoot":"","sources":["../src/cli-view-live.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,19 @@ export declare function findRecordings(reportRoot: string): Array<{
43
43
  testId: string;
44
44
  relPath: string;
45
45
  }>;
46
+ /**
47
+ * Discover events.jsonl files alongside report.json. Each file is a per-test
48
+ * stream of TurnEvents (one JSON object per line) persisted by FilesystemSink
49
+ * via the TurnEventBus subscriber. Returns parsed events grouped by testId
50
+ * so the viewer can show a sub-turn timeline per test.
51
+ *
52
+ * Tolerant: bad JSON lines are skipped (logged to stderr at most once per
53
+ * file). Missing files return an empty array.
54
+ */
55
+ export declare function findEventLogs(reportRoot: string): Array<{
56
+ testId: string;
57
+ events: Array<Record<string, unknown>>;
58
+ }>;
46
59
  /**
47
60
  * Normalize the report shape so the viewer sees a consistent format.
48
61
  *
@@ -1 +1 @@
1
- {"version":3,"file":"cli-view.d.ts","sourceRoot":"","sources":["../src/cli-view.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAyBH,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAA;IACd,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kCAAkC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA4B7F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,OAAO,EACZ,UAAU,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACrD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA0FzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMxD;AAwED,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;IACxD,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B,CAAC,CA4GD;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAWjE"}
1
+ {"version":3,"file":"cli-view.d.ts","sourceRoot":"","sources":["../src/cli-view.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAyBH,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAA;IACd,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kCAAkC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA4B7F;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,GACjB,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAAE,CAAC,CAwCnE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,OAAO,EACZ,UAAU,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACrD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA0FzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMxD;AAwED,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;IACxD,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B,CAAC,CA0HD;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAWjE"}
package/dist/cli-view.js CHANGED
@@ -104,6 +104,60 @@ export function findRecordings(reportRoot) {
104
104
  }
105
105
  return out;
106
106
  }
107
+ /**
108
+ * Discover events.jsonl files alongside report.json. Each file is a per-test
109
+ * stream of TurnEvents (one JSON object per line) persisted by FilesystemSink
110
+ * via the TurnEventBus subscriber. Returns parsed events grouped by testId
111
+ * so the viewer can show a sub-turn timeline per test.
112
+ *
113
+ * Tolerant: bad JSON lines are skipped (logged to stderr at most once per
114
+ * file). Missing files return an empty array.
115
+ */
116
+ export function findEventLogs(reportRoot) {
117
+ const out = [];
118
+ const tryParse = (filePath) => {
119
+ try {
120
+ const raw = fs.readFileSync(filePath, 'utf-8');
121
+ const lines = raw.split('\n').filter((l) => l.trim().length > 0);
122
+ const events = [];
123
+ for (const line of lines) {
124
+ try {
125
+ const parsed = JSON.parse(line);
126
+ events.push(parsed);
127
+ }
128
+ catch {
129
+ /* skip bad line */
130
+ }
131
+ }
132
+ return events.length > 0 ? events : null;
133
+ }
134
+ catch {
135
+ return null;
136
+ }
137
+ };
138
+ try {
139
+ for (const entry of fs.readdirSync(reportRoot, { withFileTypes: true })) {
140
+ if (entry.isDirectory()) {
141
+ const file = path.join(reportRoot, entry.name, 'events.jsonl');
142
+ const events = tryParse(file);
143
+ if (events) {
144
+ out.push({ testId: entry.name, events });
145
+ }
146
+ }
147
+ else if (entry.name === 'events.jsonl') {
148
+ const file = path.join(reportRoot, entry.name);
149
+ const events = tryParse(file);
150
+ if (events) {
151
+ out.push({ testId: 'default', events });
152
+ }
153
+ }
154
+ }
155
+ }
156
+ catch {
157
+ /* ignore */
158
+ }
159
+ return out;
160
+ }
107
161
  /**
108
162
  * Normalize the report shape so the viewer sees a consistent format.
109
163
  *
@@ -315,7 +369,17 @@ export async function runView(opts) {
315
369
  const normalized = normalizeReport(reportObj, recordings);
316
370
  const reportJson = JSON.stringify(normalized);
317
371
  const safeJson = escapeJsonForScript(reportJson);
318
- const inlinedHtml = viewerSource.replace('const runData = window.__bad_runData || null;', `const runData = ${safeJson};`);
372
+ // Sub-turn event logs (per testId, written by FilesystemSink during the run).
373
+ // The viewer can use these to reconstruct the streaming experience post-hoc:
374
+ // a scrubbable timeline of every observe/decide/execute/verify boundary.
375
+ // When no events.jsonl files exist (older runs, runs without an event bus),
376
+ // the inlined value is an empty array and the viewer falls back to the
377
+ // existing turn-level UI.
378
+ const eventLogs = findEventLogs(reportRoot);
379
+ const eventLogsJson = JSON.stringify(eventLogs);
380
+ const safeEventLogs = escapeJsonForScript(eventLogsJson);
381
+ const inlinedHtml = viewerSource
382
+ .replace('const runData = window.__bad_runData || null;', `const runData = ${safeJson};\n window.__bad_eventLogs = ${safeEventLogs};`);
319
383
  const server = http.createServer((req, res) => {
320
384
  const urlPath = (req.url ?? '/').split('?')[0];
321
385
  if (urlPath === '/' || urlPath === '/index.html') {
@@ -364,7 +428,10 @@ export async function runView(opts) {
364
428
  fs.createReadStream(realPath).pipe(res);
365
429
  });
366
430
  const port = await listenWithRetry(server, opts.port ?? 7777, opts.portRetries ?? 10);
367
- const url = `http://localhost:${port}`;
431
+ // Use 127.0.0.1 explicitly so the URL matches the bind address. Linux can
432
+ // resolve "localhost" to ::1 (IPv6) first, which fails to connect because
433
+ // the server only listens on the IPv4 loopback.
434
+ const url = `http://127.0.0.1:${port}`;
368
435
  console.log('');
369
436
  console.log(` ${chalk.bold('bad view')}`);
370
437
  console.log(` ${chalk.dim('Run:')} ${reportRoot}`);
@@ -1 +1 @@
1
- {"version":3,"file":"cli-view.js","sourceRoot":"","sources":["../src/cli-view.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAE9D,2EAA2E;AAC3E,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE;IAC7B,yDAAyD;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAA;IAC3D,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAA;IAC5C,4DAA4D;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAA;IAC7D,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAA;IAC1C,+DAA+D;IAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC,CAAA;IACnE,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAA;IACxC,OAAO,EAAE,CAAA;AACX,CAAC,CAAC,EAAE,CAAA;AAaJ,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,WAAW,CAAA;IACzB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAA;IAExC,IAAI,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACpE,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;gBACxD,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,OAAO,GAAG,CAAA;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,MAAM,GAAG,GAA+C,EAAE,CAAA;IAC1D,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAW,EAAE;QACtD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;YACnC,OAAO,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC,CAAA;IACD,IAAI,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACxE,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;gBACrE,IAAI,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC;oBACjC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAA;gBAC3E,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;gBACnD,IAAI,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC;oBACjC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAA;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAC7B,GAAY,EACZ,UAAsD;IAEtD,MAAM,IAAI,GAAG,GAA8B,CAAA;IAC3C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAA;IAEzE,8DAA8D;IAC9D,IAAI,KAAK,CAAC,OAAO,CAAE,IAA4B,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,2EAA2E;IAC3E,IAAI,KAAK,CAAC,OAAO,CAAE,IAA8B,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAI,IAAoD,CAAC,OAAO,CAAA;QAC7E,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC5B,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAA4B,CAAA;YACpE,MAAM,KAAK,GAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAoC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBAClF,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAA;gBACxD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAgC,CAAA;gBACzD,6DAA6D;gBAC7D,iEAAiE;gBACjE,iEAAiE;gBACjE,qCAAqC;gBACrC,yEAAyE;gBACzE,+DAA+D;gBAC/D,MAAM,iBAAiB,GAAG,CAAC,UAAU;oBACnC,CAAC,CAAC,UAAU;oBACZ,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC;wBAC9B,CAAC,CAAC,UAAU;wBACZ,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;4BACrE,CAAC,CAAC,UAAU;4BACZ,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gCAC1J,CAAC,CAAC,UAAU;gCACZ,CAAC,CAAC,0BAA0B,UAAU,EAAE,CAAA;gBAChD,OAAO;oBACL,GAAG,CAAC;oBACJ,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE;iBACnD,CAAA;YACH,CAAC,CAAC,CAAA;YACF,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAA4B,CAAA;YAC9D,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI,IAAI,UAAU,CAAW,CAAA;YACrE,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC;mBAC1D,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAA;YACrD,OAAO;gBACL,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,MAAM;gBAC7B,OAAO,EAAE,WAAW,CAAC,OAAO,IAAI,CAAC,CAAC,YAAY;gBAC9C,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;gBACpC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;gBAC/C,KAAK;aACN,CAAA;QACH,CAAC,CAAC,CAAA;QACF,OAAO;YACL,GAAG,IAAI;YACP,iEAAiE;YACjE,oCAAoC;YACpC,KAAK;SACN,CAAA;IACH,CAAC;IAED,qEAAqE;IACrE,IAAI,KAAK,CAAC,OAAO,CAAE,IAA4B,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,CAAE,IAAkD,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAChF,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAA;YACxD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAgC,CAAA;YACzD,MAAM,iBAAiB,GAAG,CAAC,UAAU;gBACnC,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC;oBAC9B,CAAC,CAAC,UAAU;oBACZ,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;wBACrE,CAAC,CAAC,UAAU;wBACZ,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;4BAC1J,CAAC,CAAC,UAAU;4BACZ,CAAC,CAAC,0BAA0B,UAAU,EAAE,CAAA;YAChD,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE,CAAA;QACrE,CAAC,CAAC,CAAA;QACF,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;QACnF,OAAO;YACL,GAAG,IAAI;YACP,KAAK,EAAE,CAAC;oBACN,EAAE,EAAE,SAAS;oBACb,IAAI,EAAE,KAAK;oBACX,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;oBAC/C,KAAK;iBACN,CAAC;SACH,CAAA;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI;SACR,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC;SAClC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC;SAC1B,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;SAC7B,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AAClC,CAAC;AAED,MAAM,IAAI,GAA2B;IACnC,OAAO,EAAE,0BAA0B;IACnC,MAAM,EAAE,0BAA0B;IAClC,OAAO,EAAE,iCAAiC;IAC1C,MAAM,EAAE,2BAA2B;IACnC,KAAK,EAAE,8BAA8B;IACrC,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,cAAc;IACtB,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,wBAAwB;IAC/B,MAAM,EAAE,wBAAwB;IAChC,MAAM,EAAE,kBAAkB;IAC1B,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,iBAAiB;CAC1B,CAAA;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM;QAChD,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO;YACxC,CAAC,CAAC,UAAU,CAAA;IACd,IAAI,CAAC;QACH,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;IAC1D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,MAAmB,EACnB,SAAiB,EACjB,UAAkB;IAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC,CAAA;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,MAAM,OAAO,GAAG,CAAC,GAA0B,EAAE,EAAE;oBAC7C,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;oBAC/C,MAAM,CAAC,GAAG,CAAC,CAAA;gBACb,CAAC,CAAA;gBACD,MAAM,WAAW,GAAG,GAAG,EAAE;oBACvB,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;oBACvC,OAAO,EAAE,CAAA;gBACX,CAAC,CAAA;gBACD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;gBAC7B,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;gBACrC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;YAClC,CAAC,CAAC,CAAA;YACF,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAA;YAChD,IAAI,IAAI,KAAK,YAAY;gBAAE,MAAM,GAAG,CAAA;YACpC,oBAAoB;YACpB,SAAQ;QACV,CAAC;IACH,CAAC;IACD,MAAM,IAAI,SAAS,CACjB,uCAAuC,SAAS,IAAI,SAAS,GAAG,UAAU,eAAe,CAC1F,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAiB;IAI7C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACxC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACjE,MAAM,IAAI,SAAS,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAA;IAC3D,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IACzC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,SAAS,CAAC,2BAA2B,MAAM,wBAAwB,CAAC,CAAA;IAChF,CAAC;IAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,IAAI,SAAS,CACjB,+FAA+F,CAChG,CAAA;IACH,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IAC3C,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;IAC/D,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAEtD,wEAAwE;IACxE,qEAAqE;IACrE,oDAAoD;IACpD,IAAI,SAAkB,CAAA;IACtB,IAAI,CAAC;QACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,SAAS,CAAC,kCAAkC,UAAU,EAAE,CAAC,CAAA;IACrE,CAAC;IACD,MAAM,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;IAC7C,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;IAC7C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAA;IAEhD,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CACtC,+CAA+C,EAC/C,mBAAmB,QAAQ,GAAG,CAC/B,CAAA;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5C,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAC9C,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;YACjD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YACrD,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QAED,kEAAkE;QAClE,kEAAkE;QAClE,8DAA8D;QAC9D,qDAAqD;QACrD,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;QACvE,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;QAChD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YAClB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QACD,IAAI,QAAgB,CAAA;QACpB,IAAI,CAAC;YACH,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YAClB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QACnD,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzD,8BAA8B;YAC9B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YAClB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YACpC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YAClB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;QAChD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;YACjB,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,0BAA0B;YACvD,eAAe,EAAE,UAAU;SAC5B,CAAC,CAAA;QACF,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAA;IACrF,MAAM,GAAG,GAAG,oBAAoB,IAAI,EAAE,CAAA;IAEtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC,CAAA;IACnD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACxD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAA;IACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAEf,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,aAAa,CAAC,GAAG,CAAC,CAAA;IACpB,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,EAAE,CACjB,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;QAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;IAEJ,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAiB;IAChD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAErC,0BAA0B;IAC1B,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;QAChC,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;YAClC,KAAK,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC5B,CAAC,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"cli-view.js","sourceRoot":"","sources":["../src/cli-view.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -114,6 +114,8 @@ async function main() {
114
114
  'no-open': { type: 'boolean' },
115
115
  // bad run --show-cursor (overlay)
116
116
  'show-cursor': { type: 'boolean' },
117
+ // bad run --live (open SSE-streaming live viewer alongside the run)
118
+ live: { type: 'boolean' },
117
119
  // showcase
118
120
  script: { type: 'string' },
119
121
  capture: { type: 'string' },
@@ -651,6 +653,43 @@ async function main() {
651
653
  const { PlaywrightDriver } = await import('./drivers/playwright.js');
652
654
  const { TestRunner } = await import('./test-runner.js');
653
655
  const { FilesystemSink } = await import('./artifacts/filesystem-sink.js');
656
+ const { loadExtensions } = await import('./extensions/loader.js');
657
+ const { TurnEventBus } = await import('./runner/events.js');
658
+ // Optional live event bus + SSE viewer. Constructed only when `--live` is
659
+ // passed; otherwise the runner uses an internal no-op bus and pays nothing.
660
+ // The bus is shared across the entire suite so a single SSE connection
661
+ // observes all turns of all test cases.
662
+ const liveEnabled = values.live === true;
663
+ const liveBus = liveEnabled ? new TurnEventBus() : undefined;
664
+ const liveCancelController = liveEnabled ? new AbortController() : undefined;
665
+ let liveViewHandle;
666
+ if (liveEnabled && liveBus) {
667
+ const { runLiveView } = await import('./cli-view-live.js');
668
+ liveViewHandle = await runLiveView({
669
+ bus: liveBus,
670
+ ...(liveCancelController ? { cancelController: liveCancelController } : {}),
671
+ port: values.port ? parseInt(values.port, 10) : undefined,
672
+ noOpen: values['no-open'] === true,
673
+ });
674
+ }
675
+ // Auto-discover bad.config.{ts,mjs,js,...} from cwd plus any explicit
676
+ // --extension paths. Failures are reported but never fatal: a broken user
677
+ // config should warn, not abort the run.
678
+ const explicitExtPaths = (values.extension ?? []);
679
+ const explicitExtArr = Array.isArray(explicitExtPaths)
680
+ ? explicitExtPaths
681
+ : explicitExtPaths
682
+ ? [explicitExtPaths]
683
+ : [];
684
+ const extensionLoad = await loadExtensions({ explicitPaths: explicitExtArr });
685
+ if (extensionLoad.loadedFrom.length > 0 && !values.json) {
686
+ cliLog('extensions', `loaded ${extensionLoad.loadedFrom.length}: ${extensionLoad.loadedFrom.join(', ')}`);
687
+ }
688
+ if (extensionLoad.errors.length > 0 && !values.json) {
689
+ for (const err of extensionLoad.errors) {
690
+ cliWarn(`extension load failed: ${err.path} — ${err.error}`);
691
+ }
692
+ }
654
693
  const concurrency = launchPlan.concurrency;
655
694
  const maxTurns = driverConfig.maxTurns ?? 30;
656
695
  const screenshotInterval = driverConfig.screenshotInterval ?? 5;
@@ -1232,6 +1271,8 @@ async function main() {
1232
1271
  concurrency,
1233
1272
  screenshotInterval,
1234
1273
  artifactSink: sink,
1274
+ extensions: extensionLoad.resolved,
1275
+ ...(liveBus ? { eventBus: liveBus } : {}),
1235
1276
  onProgress: (event) => {
1236
1277
  if (values.json) {
1237
1278
  console.log(JSON.stringify(event));
@@ -1261,7 +1302,7 @@ async function main() {
1261
1302
  let result;
1262
1303
  let runError;
1263
1304
  try {
1264
- result = await runner.runSuite(cases);
1305
+ result = await runner.runSuite(cases, liveCancelController ? { signal: liveCancelController.signal } : undefined);
1265
1306
  // Write reports for each configured format
1266
1307
  const { generateReport } = await import('./test-report.js');
1267
1308
  const reporters = driverConfig.reporters ?? ['json'];
@@ -1303,12 +1344,27 @@ async function main() {
1303
1344
  await browser?.close().catch(() => { });
1304
1345
  }
1305
1346
  if (runError) {
1347
+ if (liveViewHandle) {
1348
+ await liveViewHandle.close().catch(() => { });
1349
+ }
1306
1350
  throw runError;
1307
1351
  }
1308
1352
  const runLabel = values.cases
1309
1353
  ? `${path.basename(values.cases)} · cli run`
1310
1354
  : `${(values.goal || values['resume-run'] || values['fork-run'] || 'run').slice(0, 80)} · cli run`;
1311
1355
  await syncLocalBenchmarkRun(path.resolve(sinkDir), runLabel);
1356
+ // In --live mode, the user usually wants to scrub the final state in the
1357
+ // viewer after the run finishes. Hold the process open until SIGINT and
1358
+ // shut down the live server cleanly when the user hits Ctrl+C.
1359
+ if (liveViewHandle) {
1360
+ cliLog('live', `run complete — viewer at ${liveViewHandle.url} (Ctrl+C to exit)`);
1361
+ await new Promise((resolve) => {
1362
+ const onSigint = () => {
1363
+ liveViewHandle.close().finally(() => resolve());
1364
+ };
1365
+ process.once('SIGINT', onSigint);
1366
+ });
1367
+ }
1312
1368
  process.exit((result?.summary.failed ?? 1) > 0 ? 1 : 0);
1313
1369
  }
1314
1370
  function parseAllowedDomains(value) {