@somewhere-tech/cli 0.29.1 → 0.30.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 (45) hide show
  1. package/dist/commands/auth.js +50 -4
  2. package/dist/commands/auth.js.map +1 -1
  3. package/dist/commands/browser.js +115 -16
  4. package/dist/commands/browser.js.map +1 -1
  5. package/dist/commands/check.js +7 -0
  6. package/dist/commands/check.js.map +1 -1
  7. package/dist/commands/deploy.js +82 -6
  8. package/dist/commands/deploy.js.map +1 -1
  9. package/dist/commands/dev.js +64 -7
  10. package/dist/commands/dev.js.map +1 -1
  11. package/dist/commands/docs.js +139 -7
  12. package/dist/commands/docs.js.map +1 -1
  13. package/dist/commands/errors.js +29 -6
  14. package/dist/commands/errors.js.map +1 -1
  15. package/dist/commands/status.js +89 -4
  16. package/dist/commands/status.js.map +1 -1
  17. package/dist/lib/client.js +59 -4
  18. package/dist/lib/client.js.map +1 -1
  19. package/dist/lib/config.js +18 -0
  20. package/dist/lib/config.js.map +1 -1
  21. package/dist/lib/files.js +57 -6
  22. package/dist/lib/files.js.map +1 -1
  23. package/dist/lib/output.js +4 -2
  24. package/dist/lib/output.js.map +1 -1
  25. package/dist/lib/publish-surface.js +94 -0
  26. package/dist/lib/publish-surface.js.map +1 -0
  27. package/dist/local/browser-run.js +321 -0
  28. package/dist/local/browser-run.js.map +1 -0
  29. package/dist/local/chrome.js +320 -0
  30. package/dist/local/chrome.js.map +1 -0
  31. package/dist/local/compiler.js +67 -12
  32. package/dist/local/compiler.js.map +1 -1
  33. package/dist/local/runtime.js +72 -2
  34. package/dist/local/runtime.js.map +1 -1
  35. package/dist/local/telemetry-filter.js +120 -0
  36. package/dist/local/telemetry-filter.js.map +1 -0
  37. package/npm-shrinkwrap.json +2 -2
  38. package/package.json +2 -2
  39. package/runtime/VENDOR.json +4 -3
  40. package/runtime/browser-probes.mjs +6 -0
  41. package/runtime/compiler/VENDOR.json +40 -3
  42. package/runtime/compiler/compile-core.cjs +18 -0
  43. package/runtime/compiler/typed-functions.cjs +31 -1
  44. package/runtime/platform-context.mjs +241 -23
  45. package/runtime/sw-init.mjs +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import { extname } from 'node:path';
2
+ /**
3
+ * Root-level publish surface (tsk_c166924f).
4
+ *
5
+ * A deploy publishes the APP, not the folder the app was built in. Coding
6
+ * agents keep their working notes next to the code — NOTES.md, TODO.md,
7
+ * transcripts, *.log, *.jsonl, design docs — and a blind test run shipped a
8
+ * tester's private NOTES.md to the live site (GET /NOTES.md -> 200, whole
9
+ * evaluation log, including the account address).
10
+ *
11
+ * The rule is scoped to the PROJECT ROOT only, and is "not referenced and not
12
+ * app surface":
13
+ *
14
+ * publish a root file when it is
15
+ * 1. a known app-surface name (index.html, robots.txt, vite.config.ts, …), or
16
+ * 2. a known app-surface extension (.html/.css/.tsx/images/fonts/…), or
17
+ * 3. REFERENCED — its filename appears anywhere in the published source
18
+ * (so `fetch('/data.json')`, a <link> href, an import specifier all
19
+ * keep working), or
20
+ * 4. explicitly opted in (`--include`, or a `!<name>` line in
21
+ * .somewhereignore / .gitignore).
22
+ * otherwise exclude it and NAME it in the output.
23
+ *
24
+ * Everything BELOW the root keeps today's behavior byte for byte: src/,
25
+ * public/, api/, functions/, db/, assets/, and any directory an app invented
26
+ * are untouched by this rule. That is deliberate — an allowlist of directories
27
+ * would silently drop `images/`, `fonts/`, `vendor/` and every other folder an
28
+ * app made up, which is exactly the class of breakage rule 9 forbids. The root
29
+ * is where agent scratch actually lands, and the reference check is the escape
30
+ * hatch for anything at the root we did not think of.
31
+ */
32
+ /** Exact root filenames that are app surface even when nothing references them. */
33
+ const APP_ROOT_FILES = new Set([
34
+ // The app itself / platform inputs
35
+ 'index.html', '404.html', '200.html', 'package.json', 'package-lock.json',
36
+ 'npm-shrinkwrap.json', 'yarn.lock', 'pnpm-lock.yaml', 'bun.lockb',
37
+ // Compile inputs the platform's compiler reads
38
+ 'tsconfig.json', 'tsconfig.app.json', 'tsconfig.node.json', 'jsconfig.json',
39
+ 'components.json', 'import-map.json', 'importmap.json', 'deno.json', 'deno.jsonc',
40
+ // Conventional static roots served at the top level
41
+ 'robots.txt', 'humans.txt', 'ads.txt', 'app-ads.txt', 'security.txt',
42
+ 'sitemap.xml', 'sitemap-index.xml', 'rss.xml', 'atom.xml', 'feed.xml',
43
+ 'browserconfig.xml', 'favicon.ico', 'manifest.json', 'manifest.webmanifest',
44
+ 'site.webmanifest', '_redirects', '_headers',
45
+ ]);
46
+ /** Root filename patterns that are app surface (config files, mostly). */
47
+ const APP_ROOT_PATTERNS = [
48
+ /^tsconfig\..+\.json$/i,
49
+ /^(vite|rollup|webpack|esbuild|astro|svelte|nuxt|remix|rsbuild|rspack|parcel)\.config\.[cm]?[jt]s$/i,
50
+ /^(tailwind|postcss|uno|windi|panda)\.config\.[cm]?[jt]s$/i,
51
+ /^(babel|eslint|prettier|vitest|jest|playwright)\.config\.[cm]?[jt]s$/i,
52
+ ];
53
+ /**
54
+ * Extensions that are app surface at the root. Deliberately excludes the
55
+ * note/record shapes an agent produces: .md, .log, .jsonl, .csv, .yaml, .txt
56
+ * (robots/humans/ads/security are named above), and extensionless files
57
+ * (LICENSE, Dockerfile, Procfile, Makefile).
58
+ */
59
+ const APP_ROOT_EXTS = new Set([
60
+ '.html', '.htm', '.css', '.scss', '.sass', '.less',
61
+ '.js', '.jsx', '.ts', '.tsx', '.mjs', '.cjs', '.mts', '.cts',
62
+ '.svg', '.ico', '.png', '.jpg', '.jpeg', '.gif', '.webp', '.avif', '.bmp',
63
+ '.woff', '.woff2', '.ttf', '.otf', '.eot',
64
+ '.mp3', '.mp4', '.wav', '.ogg', '.webm', '.mov', '.m4a',
65
+ '.pdf', '.wasm', '.webmanifest', '.map', '.sql',
66
+ ]);
67
+ /** Text file kinds worth scanning for a reference to a root filename. */
68
+ const REFERENCE_CORPUS_EXTS = new Set([
69
+ '.html', '.htm', '.css', '.scss', '.sass', '.less',
70
+ '.js', '.jsx', '.ts', '.tsx', '.mjs', '.cjs', '.mts', '.cts',
71
+ '.json', '.svg', '.xml', '.webmanifest',
72
+ ]);
73
+ export function isReferenceCorpusPath(relPath) {
74
+ return REFERENCE_CORPUS_EXTS.has(extname(relPath).toLowerCase());
75
+ }
76
+ /** True when `name` is app surface at the project root on shape alone. */
77
+ export function isAppSurfaceRootFile(name) {
78
+ if (APP_ROOT_FILES.has(name))
79
+ return true;
80
+ if (APP_ROOT_PATTERNS.some((re) => re.test(name)))
81
+ return true;
82
+ const ext = extname(name).toLowerCase();
83
+ if (!ext)
84
+ return false;
85
+ return APP_ROOT_EXTS.has(ext);
86
+ }
87
+ /**
88
+ * The customer-facing reason a root file was held back. Rule 8: say what was
89
+ * excluded and how to publish it on purpose — no internals, no ticket ids.
90
+ */
91
+ export function excludedRootFileReason(name) {
92
+ return `not part of the app (nothing references ${name}) — publish it with \`somewhere deploy --include ${name}\``;
93
+ }
94
+ //# sourceMappingURL=publish-surface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish-surface.js","sourceRoot":"","sources":["../../src/lib/publish-surface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,mFAAmF;AACnF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,mCAAmC;IACnC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,mBAAmB;IACzE,qBAAqB,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW;IACjE,+CAA+C;IAC/C,eAAe,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,eAAe;IAC3E,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY;IACjF,oDAAoD;IACpD,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc;IACpE,aAAa,EAAE,mBAAmB,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU;IACrE,mBAAmB,EAAE,aAAa,EAAE,eAAe,EAAE,sBAAsB;IAC3E,kBAAkB,EAAE,YAAY,EAAE,UAAU;CAC7C,CAAC,CAAC;AAEH,0EAA0E;AAC1E,MAAM,iBAAiB,GAAsB;IAC3C,uBAAuB;IACvB,oGAAoG;IACpG,2DAA2D;IAC3D,uEAAuE;CACxE,CAAC;AAEF;;;;;GAKG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;IAClD,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC5D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM;IACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IACzC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IACvD,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM;CAChD,CAAC,CAAC;AAEH,yEAAyE;AACzE,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;IAClD,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc;CACxC,CAAC,CAAC;AAEH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,OAAO,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/D,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACxC,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,OAAO,2CAA2C,IAAI,oDAAoD,IAAI,IAAI,CAAC;AACrH,CAAC"}
@@ -0,0 +1,321 @@
1
+ /**
2
+ * Run the `somewhere browser` health check against a page on this machine.
3
+ *
4
+ * Produces exactly the report shape the hosted browser produces, so the
5
+ * command's formatter, exit code, and `--json` output do not care which half
6
+ * answered. The interactive-element map comes from the platform's own vendored
7
+ * probe (runtime/browser-probes.mjs) — the point of the local path is a
8
+ * preview of the hosted answer, not a second opinion.
9
+ */
10
+ import { writeFileSync } from 'node:fs';
11
+ import { dirname, join } from 'node:path';
12
+ import { fileURLToPath, pathToFileURL } from 'node:url';
13
+ import { findBrowser, launchLocalBrowser, NO_BROWSER_MESSAGE, } from './chrome.js';
14
+ /** Loopback and link-local hosts: the addresses only this machine can reach. */
15
+ const LOOPBACK_HOSTS = new Set(['localhost', '127.0.0.1', '[::1]', '::1', '0.0.0.0', '[::]']);
16
+ /**
17
+ * Is this URL an address only this machine can reach? The hosted browser is
18
+ * remote, so these can only ever be served by the local half.
19
+ */
20
+ export function isLoopbackUrl(raw) {
21
+ let url;
22
+ try {
23
+ url = new URL(raw);
24
+ }
25
+ catch {
26
+ return false;
27
+ }
28
+ const host = url.hostname.toLowerCase();
29
+ if (LOOPBACK_HOSTS.has(host) || LOOPBACK_HOSTS.has(`[${host}]`))
30
+ return true;
31
+ if (host.endsWith('.localhost'))
32
+ return true;
33
+ // 127.0.0.0/8 in full.
34
+ return /^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(host);
35
+ }
36
+ /** The platform's interactive-element probe, vendored verbatim. */
37
+ async function domOutlineScript() {
38
+ const path = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'runtime', 'browser-probes.mjs');
39
+ const probes = (await import(pathToFileURL(path).href));
40
+ return probes.DOM_OUTLINE_SCRIPT;
41
+ }
42
+ const SETTLE_MS = 250;
43
+ const POLL_MS = 100;
44
+ /** How long the preflight waits for the target to answer at all. */
45
+ const REACHABILITY_TIMEOUT_MS = 5_000;
46
+ /** How long the page gets to finish loading before the run says so and moves on. */
47
+ const NAVIGATION_TIMEOUT_MS = 30_000;
48
+ /**
49
+ * Is this the browser's OWN favicon request rather than one the page made?
50
+ *
51
+ * Chrome fetches /favicon.ico for every document whether or not the page asks
52
+ * for one, so a 404 there says nothing about the app — and the hosted verdict
53
+ * never counted it, because a deployed project answers that path. Counting it
54
+ * locally made `somewhere init`'s own scaffold report FAIL with a clean page
55
+ * underneath (tsk_10be456b). A favicon the page DECLARES has initiator type
56
+ * `parser`, so a broken declared icon still fails, as it should.
57
+ */
58
+ export function isBrowserOwnFaviconRequest(url, initiatorType) {
59
+ if (initiatorType !== 'other')
60
+ return false;
61
+ if (!url)
62
+ return false;
63
+ try {
64
+ return new URL(url).pathname === '/favicon.ico';
65
+ }
66
+ catch {
67
+ return false;
68
+ }
69
+ }
70
+ /**
71
+ * Confirm something is actually serving the local address BEFORE launching a
72
+ * browser at it.
73
+ *
74
+ * Without this, a URL nothing is listening on (a stopped `somewhere dev`, the
75
+ * wrong port, another tool's server that never completes a document) reached
76
+ * the browser anyway, and the run drained its whole budget in silence. The
77
+ * check is a bounded request, and its failure is the one sentence that says
78
+ * what to run.
79
+ */
80
+ export async function assertLocalTargetReachable(url, timeoutMs = REACHABILITY_TIMEOUT_MS) {
81
+ try {
82
+ await fetch(url, {
83
+ method: 'GET',
84
+ redirect: 'manual',
85
+ signal: AbortSignal.timeout(timeoutMs),
86
+ });
87
+ }
88
+ catch (err) {
89
+ const timedOut = err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError');
90
+ if (timedOut) {
91
+ throw new Error(`${url} accepted the connection but did not answer within ${Math.round(timeoutMs / 1000)}s, ` +
92
+ 'so there was nothing to inspect. Check that the server on that port is healthy, then run this again.');
93
+ }
94
+ throw new Error(`Nothing is serving ${url} on this machine. Start your app with \`somewhere dev\` and point this at the ` +
95
+ 'address it prints — or check the deployed app instead with `somewhere browser --project <name>`.');
96
+ }
97
+ }
98
+ /**
99
+ * Timers are unref'd: the load race below arms one for the whole remaining
100
+ * budget, and a ref'd timer would hold the process open for the rest of it
101
+ * after the page had already loaded.
102
+ */
103
+ function sleep(ms) {
104
+ return new Promise((resolve) => {
105
+ setTimeout(resolve, ms).unref();
106
+ });
107
+ }
108
+ /** Evaluate an expression in the page and return its JSON-ish value. */
109
+ async function evaluate(session, expression) {
110
+ const res = (await session.send('Runtime.evaluate', {
111
+ expression,
112
+ returnByValue: true,
113
+ awaitPromise: true,
114
+ }));
115
+ if (res.exceptionDetails) {
116
+ const detail = res.exceptionDetails.exception?.description ?? res.exceptionDetails.text ?? 'evaluation failed';
117
+ throw new Error(detail);
118
+ }
119
+ return res.result?.value;
120
+ }
121
+ /**
122
+ * Drive the local browser and return the report.
123
+ *
124
+ * The whole run shares one deadline. A step that fails is reported as a failed
125
+ * step and the run still returns everything it captured — the caller asked what
126
+ * the page looks like, and "it broke here, and here is the rest" is the useful
127
+ * answer.
128
+ */
129
+ export async function runLocalBrowser(req) {
130
+ const found = findBrowser();
131
+ if (!found)
132
+ throw new Error(NO_BROWSER_MESSAGE);
133
+ // Cheapest refusal first: no browser is launched at an address nothing serves.
134
+ const startUrl = req.path ? new URL(req.path, req.url).toString() : req.url;
135
+ await assertLocalTargetReachable(startUrl);
136
+ const deadline = Date.now() + req.timeoutMs;
137
+ const launched = await launchLocalBrowser({
138
+ executablePath: found.path,
139
+ viewport: req.viewport,
140
+ timeoutMs: Math.min(req.timeoutMs, 20_000),
141
+ });
142
+ const { session } = launched;
143
+ const consoleErrors = [];
144
+ const pageErrors = [];
145
+ const failedRequests = [];
146
+ const steps = [];
147
+ const screenshots = [];
148
+ const requestMethods = new Map();
149
+ const requestInitiators = new Map();
150
+ try {
151
+ session.on('Runtime.consoleAPICalled', (params) => {
152
+ if (params['type'] !== 'error')
153
+ return;
154
+ const args = params['args'] ?? [];
155
+ consoleErrors.push(args.map((a) => (a.value !== undefined ? String(a.value) : a.description ?? '')).join(' ').trim());
156
+ });
157
+ session.on('Runtime.exceptionThrown', (params) => {
158
+ const details = params['exceptionDetails'];
159
+ pageErrors.push(details?.exception?.description ?? details?.text ?? 'uncaught error');
160
+ });
161
+ session.on('Network.requestWillBeSent', (params) => {
162
+ const id = String(params['requestId'] ?? '');
163
+ const request = params['request'];
164
+ if (id)
165
+ requestMethods.set(id, request?.method ?? 'GET');
166
+ const initiator = params['initiator'];
167
+ if (id)
168
+ requestInitiators.set(id, initiator?.type);
169
+ });
170
+ session.on('Network.responseReceived', (params) => {
171
+ const response = params['response'];
172
+ if (!response || typeof response.status !== 'number' || response.status < 400)
173
+ return;
174
+ const requestId = String(params['requestId'] ?? '');
175
+ // The browser's own favicon fetch is not a request the page made.
176
+ if (response.status === 404
177
+ && isBrowserOwnFaviconRequest(response.url, requestInitiators.get(requestId)))
178
+ return;
179
+ failedRequests.push({
180
+ status: response.status,
181
+ method: requestMethods.get(requestId) ?? 'GET',
182
+ url: response.url,
183
+ });
184
+ });
185
+ session.on('Network.loadingFailed', (params) => {
186
+ // A cancelled request is the page's own choice, not a failure.
187
+ if (params['canceled'] === true)
188
+ return;
189
+ failedRequests.push({
190
+ method: requestMethods.get(String(params['requestId'] ?? '')) ?? 'GET',
191
+ url: String(params['errorText'] ?? 'request failed'),
192
+ });
193
+ });
194
+ await session.send('Page.enable');
195
+ await session.send('Runtime.enable');
196
+ await session.send('Network.enable');
197
+ await session.send('Emulation.setDeviceMetricsOverride', {
198
+ width: req.viewport.width,
199
+ height: req.viewport.height,
200
+ deviceScaleFactor: 1,
201
+ mobile: false,
202
+ });
203
+ let loadFired = false;
204
+ const loaded = new Promise((resolve) => {
205
+ session.on('Page.loadEventFired', () => { loadFired = true; resolve(); });
206
+ });
207
+ await session.send('Page.navigate', { url: startUrl });
208
+ // Either the page loads or its own navigation budget runs out; whichever
209
+ // comes first, drop the other's timer rather than leaving it armed. The
210
+ // budget is the navigation's, NOT the whole run's: spending every second on
211
+ // a document that never loads and then reporting as if it had is what made
212
+ // this command look hung (tsk_a605ff7b).
213
+ const navigationBudgetMs = Math.max(0, Math.min(NAVIGATION_TIMEOUT_MS, deadline - Date.now()));
214
+ let loadTimer;
215
+ await Promise.race([
216
+ loaded,
217
+ new Promise((resolve) => {
218
+ loadTimer = setTimeout(resolve, navigationBudgetMs);
219
+ loadTimer.unref();
220
+ }),
221
+ ]);
222
+ if (loadTimer)
223
+ clearTimeout(loadTimer);
224
+ if (!loadFired) {
225
+ steps.push({
226
+ action: 'goto',
227
+ ok: false,
228
+ path: req.path,
229
+ error: `${startUrl} did not finish loading within ${Math.round(navigationBudgetMs / 1000)}s. ` +
230
+ 'Everything the page had produced by then is reported below.',
231
+ });
232
+ }
233
+ await sleep(SETTLE_MS);
234
+ if (req.path && loadFired)
235
+ steps.push({ action: 'goto', ok: true, path: req.path });
236
+ if (req.wait) {
237
+ const selector = req.wait;
238
+ const step = { action: 'wait_for', ok: false, selector };
239
+ const expression = `!!document.querySelector(${JSON.stringify(selector)})`;
240
+ while (Date.now() < deadline) {
241
+ let matched = false;
242
+ try {
243
+ matched = (await evaluate(session, expression)) === true;
244
+ }
245
+ catch (err) {
246
+ step.error = err instanceof Error ? err.message : String(err);
247
+ break;
248
+ }
249
+ if (matched) {
250
+ step.ok = true;
251
+ break;
252
+ }
253
+ await sleep(POLL_MS);
254
+ }
255
+ if (!step.ok && !step.error)
256
+ step.error = `Timed out waiting for \`${selector}\`.`;
257
+ steps.push(step);
258
+ }
259
+ if (req.eval) {
260
+ const step = { action: 'eval', ok: true, script: req.eval };
261
+ try {
262
+ step.result = await evaluate(session, req.eval);
263
+ }
264
+ catch (err) {
265
+ step.ok = false;
266
+ step.error = err instanceof Error ? err.message : String(err);
267
+ }
268
+ steps.push(step);
269
+ }
270
+ // The interactive-element map, read AFTER the steps — the same ordering the
271
+ // hosted browser uses, so the map describes the page the run left behind
272
+ // rather than the page before the wait resolved.
273
+ let domOutline = [];
274
+ let testidMap = {};
275
+ try {
276
+ const probe = (await evaluate(session, await domOutlineScript()));
277
+ domOutline = Array.isArray(probe?.outline) ? probe.outline : [];
278
+ testidMap = probe?.testid_map ?? {};
279
+ }
280
+ catch (err) {
281
+ consoleErrors.push(`[inspect] DOM probe failed: ${err instanceof Error ? err.message : String(err)}`);
282
+ }
283
+ if (req.screenshotPath) {
284
+ const step = { action: 'screenshot', ok: true, path: req.screenshotPath };
285
+ try {
286
+ const shot = (await session.send('Page.captureScreenshot', { format: 'jpeg', quality: 70 }));
287
+ writeFileSync(req.screenshotPath, Buffer.from(shot.data ?? '', 'base64'));
288
+ screenshots.push({ label: 'page', path: req.screenshotPath });
289
+ }
290
+ catch (err) {
291
+ step.ok = false;
292
+ step.error = err instanceof Error ? err.message : String(err);
293
+ }
294
+ steps.push(step);
295
+ }
296
+ let finalUrl = startUrl;
297
+ try {
298
+ finalUrl = String(await evaluate(session, 'location.href'));
299
+ }
300
+ catch {
301
+ /* keep the URL we navigated to */
302
+ }
303
+ const passed = steps.every((s) => s.ok) && pageErrors.length === 0 && failedRequests.length === 0;
304
+ return {
305
+ passed,
306
+ final_url: finalUrl,
307
+ console_errors: consoleErrors,
308
+ page_errors: pageErrors,
309
+ failed_requests: failedRequests,
310
+ steps,
311
+ screenshots,
312
+ dom_outline: domOutline,
313
+ testid_map: testidMap,
314
+ environment: 'local',
315
+ };
316
+ }
317
+ finally {
318
+ await launched.close();
319
+ }
320
+ }
321
+ //# sourceMappingURL=browser-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-run.js","sourceRoot":"","sources":["../../src/local/browser-run.ts"],"names":[],"mappings":"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"}