@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.
- package/dist/artifacts/filesystem-sink.d.ts +23 -0
- package/dist/artifacts/filesystem-sink.d.ts.map +1 -1
- package/dist/artifacts/filesystem-sink.js +49 -0
- package/dist/artifacts/filesystem-sink.js.map +1 -1
- package/dist/brain/index.d.ts +22 -1
- package/dist/brain/index.d.ts.map +1 -1
- package/dist/brain/index.js +57 -1
- package/dist/brain/index.js.map +1 -1
- package/dist/cli-view-live.d.ts +60 -0
- package/dist/cli-view-live.d.ts.map +1 -0
- package/dist/cli-view-live.js +216 -0
- package/dist/cli-view-live.js.map +1 -0
- package/dist/cli-view.d.ts +13 -0
- package/dist/cli-view.d.ts.map +1 -1
- package/dist/cli-view.js +69 -2
- package/dist/cli-view.js.map +1 -1
- package/dist/cli.js +57 -1
- package/dist/cli.js.map +1 -1
- package/dist/extensions/loader.d.ts +40 -0
- package/dist/extensions/loader.d.ts.map +1 -0
- package/dist/extensions/loader.js +85 -0
- package/dist/extensions/loader.js.map +1 -0
- package/dist/extensions/types.d.ts +132 -0
- package/dist/extensions/types.d.ts.map +1 -0
- package/dist/extensions/types.js +161 -0
- package/dist/extensions/types.js.map +1 -0
- package/dist/runner/decision-cache.d.ts +105 -0
- package/dist/runner/decision-cache.d.ts.map +1 -0
- package/dist/runner/decision-cache.js +150 -0
- package/dist/runner/decision-cache.js.map +1 -0
- package/dist/runner/deterministic-patterns.d.ts +41 -0
- package/dist/runner/deterministic-patterns.d.ts.map +1 -0
- package/dist/runner/deterministic-patterns.js +169 -0
- package/dist/runner/deterministic-patterns.js.map +1 -0
- package/dist/runner/events.d.ts +224 -0
- package/dist/runner/events.d.ts.map +1 -0
- package/dist/runner/events.js +147 -0
- package/dist/runner/events.js.map +1 -0
- package/dist/runner/runner.d.ts +22 -0
- package/dist/runner/runner.d.ts.map +1 -1
- package/dist/runner/runner.js +299 -18
- package/dist/runner/runner.js.map +1 -1
- package/dist/test-runner.d.ts +19 -1
- package/dist/test-runner.d.ts.map +1 -1
- package/dist/test-runner.js +41 -3
- package/dist/test-runner.js.map +1 -1
- 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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"}
|
package/dist/cli-view.d.ts
CHANGED
|
@@ -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
|
*
|
package/dist/cli-view.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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
|
-
|
|
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}`);
|
package/dist/cli-view.js.map
CHANGED
|
@@ -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":"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;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,UAAkB;IAElB,MAAM,GAAG,GAAsE,EAAE,CAAA;IACjF,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAyC,EAAE;QAC3E,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YAChE,MAAM,MAAM,GAAmC,EAAE,CAAA;YACjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAA;oBAC1D,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACrB,CAAC;gBAAC,MAAM,CAAC;oBACP,mBAAmB;gBACrB,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,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,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;gBAC9D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;gBAC7B,IAAI,MAAM,EAAE,CAAC;oBACX,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;gBAC1C,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACzC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;gBAC7B,IAAI,MAAM,EAAE,CAAC;oBACX,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAA;gBACzC,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,8EAA8E;IAC9E,6EAA6E;IAC7E,yEAAyE;IACzE,4EAA4E;IAC5E,uEAAuE;IACvE,0BAA0B;IAC1B,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;IAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;IAC/C,MAAM,aAAa,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAA;IAExD,MAAM,WAAW,GAAG,YAAY;SAC7B,OAAO,CACN,+CAA+C,EAC/C,mBAAmB,QAAQ,qCAAqC,aAAa,GAAG,CACjF,CAAA;IAEH,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,0EAA0E;IAC1E,0EAA0E;IAC1E,gDAAgD;IAChD,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"}
|
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) {
|