chrome-devtools-axi 0.1.19 → 0.1.21
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/README.md +16 -9
- package/dist/src/bridge.d.ts +16 -1
- package/dist/src/bridge.js +36 -6
- package/dist/src/bridge.js.map +1 -1
- package/dist/src/cli.d.ts +11 -3
- package/dist/src/cli.js +160 -60
- package/dist/src/cli.js.map +1 -1
- package/dist/src/client.d.ts +32 -3
- package/dist/src/client.js +129 -22
- package/dist/src/client.js.map +1 -1
- package/dist/src/generation.d.ts +9 -0
- package/dist/src/generation.js +46 -0
- package/dist/src/generation.js.map +1 -0
- package/dist/src/run.d.ts +2 -0
- package/dist/src/run.js +70 -3
- package/dist/src/run.js.map +1 -1
- package/dist/src/snapshot.d.ts +35 -0
- package/dist/src/snapshot.js +40 -0
- package/dist/src/snapshot.js.map +1 -1
- package/dist/src/suggestions.js +2 -2
- package/dist/src/suggestions.js.map +1 -1
- package/package.json +1 -1
package/dist/src/client.d.ts
CHANGED
|
@@ -10,14 +10,40 @@ import { AxiError } from "axi-sdk-js";
|
|
|
10
10
|
* 1s to avoid pathological retries.
|
|
11
11
|
*/
|
|
12
12
|
export declare function resolveBridgeTimeoutMs(): number;
|
|
13
|
-
export type ErrorCode = "BRIDGE_NOT_READY" | "REF_NOT_FOUND" | "TIMEOUT" | "BROWSER_ERROR" | "VALIDATION_ERROR" | "UNKNOWN";
|
|
13
|
+
export type ErrorCode = "BRIDGE_NOT_READY" | "REF_NOT_FOUND" | "STALE_REF" | "TIMEOUT" | "BROWSER_ERROR" | "VALIDATION_ERROR" | "UNKNOWN";
|
|
14
14
|
export declare class CdpError extends AxiError {
|
|
15
15
|
readonly code: ErrorCode;
|
|
16
16
|
readonly suggestions: string[];
|
|
17
17
|
constructor(message: string, code: ErrorCode, suggestions?: string[]);
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Probe the bridge's `/health` endpoint. With `deep: true`, asks the bridge
|
|
21
|
+
* to drive one CDP-backed MCP call (`list_pages`) so callers can distinguish
|
|
22
|
+
* "MCP server is up but the attached browser is gone" from genuine readiness.
|
|
23
|
+
*
|
|
24
|
+
* Exported for tests; production code uses it via `ensureBridge`.
|
|
25
|
+
*/
|
|
26
|
+
export declare function checkBridgeHealth(port: number, opts?: {
|
|
27
|
+
deep?: boolean;
|
|
28
|
+
}): Promise<boolean>;
|
|
29
|
+
export declare function waitForProcessExit(pid: number, timeoutMs: number): Promise<boolean>;
|
|
30
|
+
/**
|
|
31
|
+
* Terminate a bridge process and reap its detached process group. Sends
|
|
32
|
+
* SIGTERM, polls up to ~2s for exit, then escalates to SIGKILL on the entire
|
|
33
|
+
* process group so chrome-devtools-mcp / Chrome children can't survive as
|
|
34
|
+
* orphans. Returns once the bridge PID is gone (or the SIGKILL grace window
|
|
35
|
+
* expires).
|
|
36
|
+
*/
|
|
37
|
+
export declare function terminateBridgeProcess(pid: number, opts?: {
|
|
38
|
+
killProcessGroup?: boolean;
|
|
39
|
+
}): Promise<void>;
|
|
19
40
|
/**
|
|
20
41
|
* Ensure the bridge is running, starting it if needed. Returns the port.
|
|
42
|
+
*
|
|
43
|
+
* Verifies a *deep* health check (one round-trip CDP-backed MCP call) before
|
|
44
|
+
* declaring the bridge ready, so a bridge whose attached browser/Electron
|
|
45
|
+
* target was killed while still answering local /health requests gets torn
|
|
46
|
+
* down + restarted instead of being reused as a stale endpoint.
|
|
21
47
|
*/
|
|
22
48
|
export declare function ensureBridge(): Promise<number>;
|
|
23
49
|
/**
|
|
@@ -31,6 +57,9 @@ export declare function mapErrorMessage(message: string): CdpError;
|
|
|
31
57
|
*/
|
|
32
58
|
export declare function getSessionSnapshotIfRunning(): Promise<string | null>;
|
|
33
59
|
/**
|
|
34
|
-
* Stop the bridge process.
|
|
60
|
+
* Stop the bridge process. Waits for the bridge PID to actually exit (bounded
|
|
61
|
+
* poll, ~2s) before escalating to SIGKILL on the entire detached process
|
|
62
|
+
* group, so chrome-devtools-mcp + Chrome children get reaped together rather
|
|
63
|
+
* than orphaned. Resolves once the bridge process is gone.
|
|
35
64
|
*/
|
|
36
|
-
export declare function stopBridge(): boolean
|
|
65
|
+
export declare function stopBridge(): Promise<boolean>;
|
package/dist/src/client.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* HTTP client for the chrome-devtools-axi bridge + bridge lifecycle management.
|
|
3
3
|
*/
|
|
4
|
-
import { spawn } from "node:child_process";
|
|
4
|
+
import { execFileSync, spawn } from "node:child_process";
|
|
5
5
|
import { readFileSync, existsSync } from "node:fs";
|
|
6
6
|
import { join } from "node:path";
|
|
7
7
|
import { homedir } from "node:os";
|
|
@@ -13,6 +13,8 @@ const PID_FILE = join(STATE_DIR, "bridge.pid");
|
|
|
13
13
|
const DEFAULT_PORT = 9224;
|
|
14
14
|
const DEFAULT_BRIDGE_TIMEOUT_MS = 30_000;
|
|
15
15
|
const MIN_BRIDGE_TIMEOUT_MS = 1_000;
|
|
16
|
+
const HEALTH_TIMEOUT_MS = 2_000;
|
|
17
|
+
const DEEP_HEALTH_TIMEOUT_MS = 5_000;
|
|
16
18
|
/**
|
|
17
19
|
* Resolve the bridge readiness deadline in milliseconds.
|
|
18
20
|
*
|
|
@@ -111,9 +113,18 @@ function httpPost(port, path, body, timeoutMs = 120_000) {
|
|
|
111
113
|
req.end();
|
|
112
114
|
});
|
|
113
115
|
}
|
|
114
|
-
|
|
116
|
+
/**
|
|
117
|
+
* Probe the bridge's `/health` endpoint. With `deep: true`, asks the bridge
|
|
118
|
+
* to drive one CDP-backed MCP call (`list_pages`) so callers can distinguish
|
|
119
|
+
* "MCP server is up but the attached browser is gone" from genuine readiness.
|
|
120
|
+
*
|
|
121
|
+
* Exported for tests; production code uses it via `ensureBridge`.
|
|
122
|
+
*/
|
|
123
|
+
export async function checkBridgeHealth(port, opts = {}) {
|
|
115
124
|
try {
|
|
116
|
-
const
|
|
125
|
+
const path = opts.deep ? "/health?deep=1" : "/health";
|
|
126
|
+
const timeoutMs = opts.deep ? DEEP_HEALTH_TIMEOUT_MS : HEALTH_TIMEOUT_MS;
|
|
127
|
+
const resp = await httpGet(port, path, timeoutMs);
|
|
117
128
|
const data = JSON.parse(resp);
|
|
118
129
|
return data.status === "ok";
|
|
119
130
|
}
|
|
@@ -124,23 +135,101 @@ async function checkBridgeHealth(port) {
|
|
|
124
135
|
function sleep(ms) {
|
|
125
136
|
return new Promise((r) => setTimeout(r, ms));
|
|
126
137
|
}
|
|
138
|
+
export async function waitForProcessExit(pid, timeoutMs) {
|
|
139
|
+
const deadline = Date.now() + timeoutMs;
|
|
140
|
+
while (Date.now() < deadline) {
|
|
141
|
+
if (!isProcessAlive(pid))
|
|
142
|
+
return true;
|
|
143
|
+
await sleep(50);
|
|
144
|
+
}
|
|
145
|
+
return !isProcessAlive(pid);
|
|
146
|
+
}
|
|
147
|
+
function isBridgeProcess(pid) {
|
|
148
|
+
try {
|
|
149
|
+
const command = execFileSync("ps", ["-p", String(pid), "-o", "command="], {
|
|
150
|
+
encoding: "utf-8",
|
|
151
|
+
timeout: 1000,
|
|
152
|
+
});
|
|
153
|
+
return command.includes("chrome-devtools-axi-bridge");
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Terminate a bridge process and reap its detached process group. Sends
|
|
161
|
+
* SIGTERM, polls up to ~2s for exit, then escalates to SIGKILL on the entire
|
|
162
|
+
* process group so chrome-devtools-mcp / Chrome children can't survive as
|
|
163
|
+
* orphans. Returns once the bridge PID is gone (or the SIGKILL grace window
|
|
164
|
+
* expires).
|
|
165
|
+
*/
|
|
166
|
+
export async function terminateBridgeProcess(pid, opts = {}) {
|
|
167
|
+
if (!isProcessAlive(pid))
|
|
168
|
+
return;
|
|
169
|
+
const killProcessGroup = opts.killProcessGroup === true;
|
|
170
|
+
// Give the bridge a chance to run its own shutdown handler (which kills its
|
|
171
|
+
// process group on `exit`).
|
|
172
|
+
try {
|
|
173
|
+
process.kill(pid, "SIGTERM");
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
if (await waitForProcessExit(pid, 2000)) {
|
|
179
|
+
if (killProcessGroup) {
|
|
180
|
+
try {
|
|
181
|
+
process.kill(-pid, "SIGKILL");
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
// Group already gone or pid was never a group leader — fine.
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
// Escalate: kill the whole process group so children get reaped together.
|
|
190
|
+
if (killProcessGroup) {
|
|
191
|
+
try {
|
|
192
|
+
process.kill(-pid, "SIGKILL");
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
try {
|
|
196
|
+
process.kill(pid, "SIGKILL");
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
// Already dead.
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
try {
|
|
205
|
+
process.kill(pid, "SIGKILL");
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
// Already dead.
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
await waitForProcessExit(pid, 1000);
|
|
212
|
+
}
|
|
127
213
|
/**
|
|
128
214
|
* Ensure the bridge is running, starting it if needed. Returns the port.
|
|
215
|
+
*
|
|
216
|
+
* Verifies a *deep* health check (one round-trip CDP-backed MCP call) before
|
|
217
|
+
* declaring the bridge ready, so a bridge whose attached browser/Electron
|
|
218
|
+
* target was killed while still answering local /health requests gets torn
|
|
219
|
+
* down + restarted instead of being reused as a stale endpoint.
|
|
129
220
|
*/
|
|
130
221
|
export async function ensureBridge() {
|
|
131
222
|
const port = parseInt(process.env.CHROME_DEVTOOLS_AXI_PORT ?? String(DEFAULT_PORT), 10);
|
|
132
|
-
// Check existing bridge via PID file
|
|
223
|
+
// Check existing bridge via PID file. Use a deep probe so a bridge whose
|
|
224
|
+
// attached CDP target has gone away gets recycled instead of returned.
|
|
133
225
|
const pidInfo = readPidFile();
|
|
134
226
|
if (pidInfo && isProcessAlive(pidInfo.pid)) {
|
|
135
|
-
if (await checkBridgeHealth(pidInfo.port)) {
|
|
227
|
+
if (await checkBridgeHealth(pidInfo.port, { deep: true })) {
|
|
136
228
|
return pidInfo.port;
|
|
137
229
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
catch {
|
|
142
|
-
// Best effort — if shutdown fails, the startup poll below will time out.
|
|
143
|
-
}
|
|
230
|
+
await terminateBridgeProcess(pidInfo.pid, {
|
|
231
|
+
killProcessGroup: isBridgeProcess(pidInfo.pid),
|
|
232
|
+
});
|
|
144
233
|
}
|
|
145
234
|
// Start a new bridge
|
|
146
235
|
const bridgeScript = resolveBridgeScript(import.meta.dirname);
|
|
@@ -155,16 +244,31 @@ export async function ensureBridge() {
|
|
|
155
244
|
detached: true,
|
|
156
245
|
});
|
|
157
246
|
child.unref();
|
|
158
|
-
// Poll for health — Chrome launch + npx bootstrap can be slow
|
|
247
|
+
// Poll for health — Chrome launch + npx bootstrap can be slow.
|
|
248
|
+
// Track whether the *shallow* health check ever passed so we can attribute
|
|
249
|
+
// the failure correctly: shallow-but-no-deep means the MCP server came up
|
|
250
|
+
// but the attached CDP target is dead, vs. nothing-came-up which is the
|
|
251
|
+
// generic startup-timeout case.
|
|
159
252
|
const timeoutMs = resolveBridgeTimeoutMs();
|
|
160
253
|
const deadline = Date.now() + timeoutMs;
|
|
254
|
+
let sawShallowReady = false;
|
|
161
255
|
while (Date.now() < deadline) {
|
|
162
|
-
if (await checkBridgeHealth(port)) {
|
|
256
|
+
if (await checkBridgeHealth(port, { deep: true })) {
|
|
163
257
|
return port;
|
|
164
258
|
}
|
|
259
|
+
if (!sawShallowReady && (await checkBridgeHealth(port))) {
|
|
260
|
+
sawShallowReady = true;
|
|
261
|
+
}
|
|
165
262
|
await sleep(500);
|
|
166
263
|
}
|
|
167
264
|
const seconds = Math.round(timeoutMs / 1000);
|
|
265
|
+
if (sawShallowReady) {
|
|
266
|
+
throw new CdpError("Bridge is running but the attached CDP target appears to have gone away", "BRIDGE_NOT_READY", [
|
|
267
|
+
"The Chrome/Electron instance the bridge was attached to may have exited.",
|
|
268
|
+
"Verify the target is still listening on its remote-debugging port, then re-run the command.",
|
|
269
|
+
"If the target was restarted, the bridge has already been recycled — this run will succeed once the target is reachable.",
|
|
270
|
+
]);
|
|
271
|
+
}
|
|
168
272
|
const usingNpx = !process.env.CHROME_DEVTOOLS_AXI_MCP_PATH;
|
|
169
273
|
const suggestions = [
|
|
170
274
|
"Check that chrome-devtools-mcp is installed: npx chrome-devtools-mcp@latest --help",
|
|
@@ -248,17 +352,20 @@ export async function getSessionSnapshotIfRunning() {
|
|
|
248
352
|
}
|
|
249
353
|
}
|
|
250
354
|
/**
|
|
251
|
-
* Stop the bridge process.
|
|
355
|
+
* Stop the bridge process. Waits for the bridge PID to actually exit (bounded
|
|
356
|
+
* poll, ~2s) before escalating to SIGKILL on the entire detached process
|
|
357
|
+
* group, so chrome-devtools-mcp + Chrome children get reaped together rather
|
|
358
|
+
* than orphaned. Resolves once the bridge process is gone.
|
|
252
359
|
*/
|
|
253
|
-
export function stopBridge() {
|
|
360
|
+
export async function stopBridge() {
|
|
254
361
|
const pidInfo = readPidFile();
|
|
255
|
-
if (!pidInfo)
|
|
362
|
+
if (!pidInfo)
|
|
256
363
|
return false;
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
}
|
|
262
|
-
return
|
|
364
|
+
if (!isProcessAlive(pidInfo.pid))
|
|
365
|
+
return false;
|
|
366
|
+
await terminateBridgeProcess(pidInfo.pid, {
|
|
367
|
+
killProcessGroup: isBridgeProcess(pidInfo.pid),
|
|
368
|
+
});
|
|
369
|
+
return true;
|
|
263
370
|
}
|
|
264
371
|
//# sourceMappingURL=client.js.map
|
package/dist/src/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snapshot generation persistence. The counter survives across CLI
|
|
3
|
+
* invocations (which are short-lived processes sharing one bridge) by
|
|
4
|
+
* writing to a file in STATE_DIR. Each new snapshot bumps the counter,
|
|
5
|
+
* so refs minted in older snapshots can be detected as stale.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getCurrentGeneration(): number;
|
|
8
|
+
export declare function bumpGeneration(): number;
|
|
9
|
+
export declare function resetGeneration(): void;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snapshot generation persistence. The counter survives across CLI
|
|
3
|
+
* invocations (which are short-lived processes sharing one bridge) by
|
|
4
|
+
* writing to a file in STATE_DIR. Each new snapshot bumps the counter,
|
|
5
|
+
* so refs minted in older snapshots can be detected as stale.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
8
|
+
import { homedir } from "node:os";
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
const STATE_DIR = join(homedir(), ".chrome-devtools-axi");
|
|
11
|
+
const GEN_FILE = join(STATE_DIR, "snapshot-generation");
|
|
12
|
+
export function getCurrentGeneration() {
|
|
13
|
+
try {
|
|
14
|
+
if (!existsSync(GEN_FILE))
|
|
15
|
+
return 0;
|
|
16
|
+
const parsed = Number.parseInt(readFileSync(GEN_FILE, "utf-8").trim(), 10);
|
|
17
|
+
return Number.isNaN(parsed) ? 0 : parsed;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return 0;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function bumpGeneration() {
|
|
24
|
+
const next = getCurrentGeneration() + 1;
|
|
25
|
+
try {
|
|
26
|
+
mkdirSync(STATE_DIR, { recursive: true });
|
|
27
|
+
writeFileSync(GEN_FILE, String(next));
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Best-effort: a write failure still returns the bumped value so the
|
|
31
|
+
// current invocation behaves consistently. The next process will
|
|
32
|
+
// re-read the on-disk value (potentially the prior one) and the
|
|
33
|
+
// worst case is one missed stale-ref detection, not a hang.
|
|
34
|
+
}
|
|
35
|
+
return next;
|
|
36
|
+
}
|
|
37
|
+
export function resetGeneration() {
|
|
38
|
+
try {
|
|
39
|
+
if (existsSync(GEN_FILE))
|
|
40
|
+
unlinkSync(GEN_FILE);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// ignore
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=generation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generation.js","sourceRoot":"","sources":["../../src/generation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,CAAC;AAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;AAExD,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3E,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,IAAI,GAAG,oBAAoB,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC;QACH,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;QACrE,iEAAiE;QACjE,gEAAgE;QAChE,4DAA4D;IAC9D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,QAAQ,CAAC;YAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC"}
|
package/dist/src/run.d.ts
CHANGED
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
* Only the script's own console.log output is visible to the caller.
|
|
6
6
|
*/
|
|
7
7
|
type CallTool = (name: string, args?: Record<string, unknown>) => Promise<string>;
|
|
8
|
+
/** Wrap plain JS expressions for MCP evaluate_script, but pass functions through unchanged. */
|
|
9
|
+
export declare function wrapJsExpression(js: string): string;
|
|
8
10
|
/** Extract the actual JS value from MCP evaluate_script response wrapper. */
|
|
9
11
|
export declare function parseEvalOutput(output: string): unknown;
|
|
10
12
|
/** Returns true when the string looks like a @uid ref (e.g. "@12", "26_181"). */
|
package/dist/src/run.js
CHANGED
|
@@ -8,6 +8,73 @@ import { mkdtempSync, writeFileSync, unlinkSync, rmdirSync } from "node:fs";
|
|
|
8
8
|
import { join } from "node:path";
|
|
9
9
|
import { tmpdir } from "node:os";
|
|
10
10
|
import { CdpError } from "./client.js";
|
|
11
|
+
import { parseStampedUid } from "./snapshot.js";
|
|
12
|
+
// --- JS expression wrapping ---
|
|
13
|
+
/**
|
|
14
|
+
* If `s` is a no-arg IIFE of the form `(<fn-expr>)()`, return `<fn-expr>`.
|
|
15
|
+
* Returns `s` unchanged otherwise. Walks parens with depth-tracking and
|
|
16
|
+
* skips string literals so nested parens inside strings don't fool us.
|
|
17
|
+
*
|
|
18
|
+
* Conservative: only unwraps when the trailing call is `()` (empty args),
|
|
19
|
+
* which covers the common documented IIFE form.
|
|
20
|
+
*/
|
|
21
|
+
function unwrapNoArgIIFE(s) {
|
|
22
|
+
const candidate = s.endsWith(";") ? s.slice(0, -1).trimEnd() : s;
|
|
23
|
+
if (candidate.length < 4 || candidate[0] !== "(" || !candidate.endsWith(")")) {
|
|
24
|
+
return s;
|
|
25
|
+
}
|
|
26
|
+
let depth = 0;
|
|
27
|
+
let inString = null;
|
|
28
|
+
let escape = false;
|
|
29
|
+
let closeIdx = -1;
|
|
30
|
+
for (let i = 0; i < candidate.length; i++) {
|
|
31
|
+
const c = candidate[i];
|
|
32
|
+
if (escape) {
|
|
33
|
+
escape = false;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (inString) {
|
|
37
|
+
if (c === "\\") {
|
|
38
|
+
escape = true;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (c === inString)
|
|
42
|
+
inString = null;
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (c === '"' || c === "'" || c === "`") {
|
|
46
|
+
inString = c;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (c === "(")
|
|
50
|
+
depth++;
|
|
51
|
+
else if (c === ")") {
|
|
52
|
+
depth--;
|
|
53
|
+
if (depth === 0) {
|
|
54
|
+
closeIdx = i;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (closeIdx < 0)
|
|
60
|
+
return s;
|
|
61
|
+
const rest = candidate.slice(closeIdx + 1).trim();
|
|
62
|
+
if (rest !== "()")
|
|
63
|
+
return s;
|
|
64
|
+
const inner = candidate.slice(1, closeIdx).trim();
|
|
65
|
+
if (/^(async\s*)?(\(.*?\)\s*=>|[a-zA-Z_$][a-zA-Z0-9_$]*\s*=>|function[\s*(])/.test(inner)) {
|
|
66
|
+
return inner;
|
|
67
|
+
}
|
|
68
|
+
return s;
|
|
69
|
+
}
|
|
70
|
+
/** Wrap plain JS expressions for MCP evaluate_script, but pass functions through unchanged. */
|
|
71
|
+
export function wrapJsExpression(js) {
|
|
72
|
+
const trimmed = unwrapNoArgIIFE(js.trim());
|
|
73
|
+
if (/^(async\s*)?(\(.*?\)\s*=>|[a-zA-Z_$][a-zA-Z0-9_$]*\s*=>|function[\s*(])/.test(trimmed)) {
|
|
74
|
+
return trimmed;
|
|
75
|
+
}
|
|
76
|
+
return `() => (${trimmed})`;
|
|
77
|
+
}
|
|
11
78
|
// --- Value parsing ---
|
|
12
79
|
/** Extract the actual JS value from MCP evaluate_script response wrapper. */
|
|
13
80
|
export function parseEvalOutput(output) {
|
|
@@ -42,7 +109,7 @@ function stripSnapshotHeader(text) {
|
|
|
42
109
|
}
|
|
43
110
|
/** Strip leading @ from uid ref string. */
|
|
44
111
|
function parseUid(ref) {
|
|
45
|
-
return ref
|
|
112
|
+
return parseStampedUid(ref).uid;
|
|
46
113
|
}
|
|
47
114
|
/** Check if an open error is recoverable by falling back to new_page. */
|
|
48
115
|
function isRecoverableOpenError(error) {
|
|
@@ -53,7 +120,7 @@ function isRecoverableOpenError(error) {
|
|
|
53
120
|
return /not connected|session (?:closed|not found)|no page/i.test(error.message);
|
|
54
121
|
}
|
|
55
122
|
// --- Selector detection ---
|
|
56
|
-
const UID_RE =
|
|
123
|
+
const UID_RE = /^@?(?:\d[\d_]*|g\d+:.+)$/;
|
|
57
124
|
/** Returns true when the string looks like a @uid ref (e.g. "@12", "26_181"). */
|
|
58
125
|
export function isUidRef(s) {
|
|
59
126
|
return UID_RE.test(s);
|
|
@@ -90,7 +157,7 @@ export function createPageHelper(callTool) {
|
|
|
90
157
|
async eval(jsOrFn) {
|
|
91
158
|
const fn = typeof jsOrFn === "function"
|
|
92
159
|
? String(jsOrFn)
|
|
93
|
-
:
|
|
160
|
+
: wrapJsExpression(jsOrFn);
|
|
94
161
|
return evalJs(fn);
|
|
95
162
|
},
|
|
96
163
|
async wait(msOrSelector, timeout) {
|
package/dist/src/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAOhD,iCAAiC;AAEjC;;;;;;;GAOG;AACH,SAAS,eAAe,CAAC,CAAS;IAChC,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7E,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,KAAK,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACf,MAAM,GAAG,IAAI,CAAC;gBACd,SAAS;YACX,CAAC;YACD,IAAI,CAAC,KAAK,QAAQ;gBAAE,QAAQ,GAAG,IAAI,CAAC;YACpC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACxC,QAAQ,GAAG,CAAC,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,GAAG;YAAE,KAAK,EAAE,CAAC;aAClB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACnB,KAAK,EAAE,CAAC;YACR,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,QAAQ,GAAG,CAAC,CAAC;gBACb,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,IACE,yEAAyE,CAAC,IAAI,CAC5E,KAAK,CACN,EACD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,gBAAgB,CAAC,EAAU;IACzC,MAAM,OAAO,GAAG,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,IACE,yEAAyE,CAAC,IAAI,CAC5E,OAAO,CACR,EACD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,UAAU,OAAO,GAAG,CAAC;AAC9B,CAAC;AAED,wBAAwB;AAExB,6EAA6E;AAC7E,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC3D,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,kCAAkC,CAAC;IACpD,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5E,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,4FAA4F;AAC5F,SAAS,mBAAmB,CAAC,IAAY;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,IAAI,SAAS,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO,IAAI,CAAC,OAAO,CAAC,yCAAyC,EAAE,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,2CAA2C;AAC3C,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AAClC,CAAC;AAED,yEAAyE;AACzE,SAAS,sBAAsB,CAAC,KAAc;IAC5C,IAAI,CAAC,CAAC,KAAK,YAAY,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe;QAAE,OAAO,KAAK,CAAC;IACjD,OAAO,qDAAqD,CAAC,IAAI,CAC/D,KAAK,CAAC,OAAO,CACd,CAAC;AACJ,CAAC;AAED,6BAA6B;AAE7B,MAAM,MAAM,GAAG,0BAA0B,CAAC;AAE1C,iFAAiF;AACjF,MAAM,UAAU,QAAQ,CAAC,CAAS;IAChC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAsBpC,MAAM,UAAU,gBAAgB,CAAC,QAAkB;IACjD,sDAAsD;IACtD,KAAK,UAAU,MAAM,CAAC,IAAY;QAChC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,GAAW;YACpB,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,QAAQ,CAAC,aAAa,EAAE,kBAAkB,EAAE;oBACpD,qDAAqD;iBACtD,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YACxD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;oBAAE,MAAM,KAAK,CAAC;gBAChD,MAAM,QAAQ,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACtC,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,MAAM,CACvB,kHAAkH,CACnH,CAAC;YACF,MAAM,MAAM,GAAG,IAA+B,CAAC;YAC/C,OAAO;gBACL,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC;gBAC/B,MAAM,EAAE,OAAO,MAAM,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;aAClE,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,IAAI,CACR,MAAkD;YAElD,MAAM,EAAE,GACN,OAAO,MAAM,KAAK,UAAU;gBAC1B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBAChB,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC/B,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,YAA6B,EAAE,OAAgB;YACxD,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;gBACrC,MAAM,QAAQ,CAAC,iBAAiB,EAAE;oBAChC,QAAQ,EAAE,kCAAkC,YAAY,IAAI;iBAC7D,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,GAAG,OAAO,IAAI,oBAAoB,CAAC;gBAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;gBACzC,MAAM,QAAQ,CAAC,iBAAiB,EAAE;oBAChC,QAAQ,EAAE;gBACJ,GAAG;;;;;;;;;;;;OAYZ,EAAE;;GAEN;iBACM,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,KAAK,CAAC,QAAQ;YACZ,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,CAAC;YAC/C,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,aAAqB;YAC/B,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC5B,MAAM,QAAQ,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;gBAC1C,MAAM,QAAQ,CAAC,iBAAiB,EAAE;oBAChC,QAAQ,EAAE;sCACkB,GAAG;qDACY,GAAG;;;KAGnD;iBACI,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,aAAqB,EAAE,IAAY;YAC5C,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC5B,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACxE,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;gBAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,QAAQ,CAAC,iBAAiB,EAAE;oBAChC,QAAQ,EAAE;sCACkB,GAAG;qDACY,GAAG;;eAEzC,GAAG;;;KAGb;iBACI,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,IAAY;YACrB,MAAM,QAAQ,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,GAAW;YACrB,MAAM,QAAQ,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,KAAK,CAAC,IAAI;YACR,MAAM,QAAQ,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACpD,CAAC;KACF,CAAC;AACJ,CAAC;AAQD,uCAAuC;AACvC,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAe,EACf,QAAkB;IAElB,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAExC,kEAAkE;IAClE,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC3C,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAEzC,6CAA6C;IAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAC5B,MAAM,UAAU,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;QACxC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF,yCAAyC;IACzC,MAAM,QAAQ,GAAI,UAAsC,CAAC,IAAI,CAAC;IAC7D,UAAsC,CAAC,IAAI,GAAG,IAAI,CAAC;IACpD,OAAO,CAAC,GAAG,GAAG,UAAU,CAAC;IAEzB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QAElC,2CAA2C;QAC3C,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACtC,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;QACtB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAQ,UAAsC,CAAC,IAAI,CAAC;QACtD,CAAC;aAAM,CAAC;YACL,UAAsC,CAAC,IAAI,GAAG,QAAQ,CAAC;QAC1D,CAAC;QACD,qBAAqB;QACrB,IAAI,CAAC;YACH,UAAU,CAAC,OAAO,CAAC,CAAC;YACpB,SAAS,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,OAAO,EAAE,MAAM,EAAE,CAAC;AACpB,CAAC"}
|
package/dist/src/snapshot.d.ts
CHANGED
|
@@ -7,6 +7,41 @@ export interface RefInfo {
|
|
|
7
7
|
export declare function countRefs(snapshot: string): number;
|
|
8
8
|
/** Extract ref IDs with labels and types from snapshot text. */
|
|
9
9
|
export declare function extractRefs(snapshot: string): RefInfo[];
|
|
10
|
+
export interface ParsedUid {
|
|
11
|
+
/** The raw upstream uid (without @ prefix and without generation tag). */
|
|
12
|
+
uid: string;
|
|
13
|
+
/** The snapshot generation the ref was minted in, or null if untagged (legacy). */
|
|
14
|
+
generation: number | null;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Parse a uid argument that may carry an `@` prefix and/or a generation tag.
|
|
18
|
+
* Examples: `@g7:237_15` -> { uid: "237_15", generation: 7 }
|
|
19
|
+
* `@237_15` -> { uid: "237_15", generation: null }
|
|
20
|
+
* `g3:abc` -> { uid: "abc", generation: 3 }
|
|
21
|
+
*/
|
|
22
|
+
export declare function parseStampedUid(arg: string): ParsedUid;
|
|
23
|
+
/**
|
|
24
|
+
* Rewrite every `uid=<id>` token in snapshot text to carry a generation tag,
|
|
25
|
+
* e.g. `uid=237_15` -> `uid=g7:237_15`. Already-stamped tokens are left alone
|
|
26
|
+
* so this is idempotent. Agents detect re-render churn by feeding tagged refs
|
|
27
|
+
* back to action commands - mismatched generations fail loudly instead of
|
|
28
|
+
* silently no-op'ing against a stale tree.
|
|
29
|
+
*/
|
|
30
|
+
export declare function stampSnapshotGeneration(snapshot: string, generation: number): string;
|
|
31
|
+
export interface UidCheckResult {
|
|
32
|
+
/** The raw upstream uid (no @ prefix, no generation tag). */
|
|
33
|
+
uid: string;
|
|
34
|
+
/** True when the ref carries a generation tag that does not match current. */
|
|
35
|
+
stale: boolean;
|
|
36
|
+
/** The generation embedded in the ref, or null if the ref was untagged. */
|
|
37
|
+
refGeneration: number | null;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Pure validation: given a ref argument and the current snapshot generation,
|
|
41
|
+
* return the upstream uid plus whether the ref is stale. Untagged refs are
|
|
42
|
+
* accepted (legacy compatibility) and reported as not-stale.
|
|
43
|
+
*/
|
|
44
|
+
export declare function checkUidGeneration(arg: string, currentGeneration: number): UidCheckResult;
|
|
10
45
|
/** Extract page title from snapshot (RootWebArea or first heading). */
|
|
11
46
|
export declare function extractTitle(snapshot: string): string;
|
|
12
47
|
export interface TruncationResult {
|
package/dist/src/snapshot.js
CHANGED
|
@@ -14,6 +14,46 @@ export function extractRefs(snapshot) {
|
|
|
14
14
|
}
|
|
15
15
|
return refs;
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Parse a uid argument that may carry an `@` prefix and/or a generation tag.
|
|
19
|
+
* Examples: `@g7:237_15` -> { uid: "237_15", generation: 7 }
|
|
20
|
+
* `@237_15` -> { uid: "237_15", generation: null }
|
|
21
|
+
* `g3:abc` -> { uid: "abc", generation: 3 }
|
|
22
|
+
*/
|
|
23
|
+
export function parseStampedUid(arg) {
|
|
24
|
+
const stripped = arg.startsWith("@") ? arg.slice(1) : arg;
|
|
25
|
+
const m = stripped.match(/^g(\d+):(.+)$/);
|
|
26
|
+
if (m)
|
|
27
|
+
return { uid: m[2], generation: Number.parseInt(m[1], 10) };
|
|
28
|
+
return { uid: stripped, generation: null };
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Rewrite every `uid=<id>` token in snapshot text to carry a generation tag,
|
|
32
|
+
* e.g. `uid=237_15` -> `uid=g7:237_15`. Already-stamped tokens are left alone
|
|
33
|
+
* so this is idempotent. Agents detect re-render churn by feeding tagged refs
|
|
34
|
+
* back to action commands - mismatched generations fail loudly instead of
|
|
35
|
+
* silently no-op'ing against a stale tree.
|
|
36
|
+
*/
|
|
37
|
+
export function stampSnapshotGeneration(snapshot, generation) {
|
|
38
|
+
return snapshot.replace(/\buid=(\S+)/g, (match, uid) => {
|
|
39
|
+
if (/^g\d+:/.test(uid))
|
|
40
|
+
return match;
|
|
41
|
+
return `uid=g${generation}:${uid}`;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Pure validation: given a ref argument and the current snapshot generation,
|
|
46
|
+
* return the upstream uid plus whether the ref is stale. Untagged refs are
|
|
47
|
+
* accepted (legacy compatibility) and reported as not-stale.
|
|
48
|
+
*/
|
|
49
|
+
export function checkUidGeneration(arg, currentGeneration) {
|
|
50
|
+
const { uid, generation } = parseStampedUid(arg);
|
|
51
|
+
return {
|
|
52
|
+
uid,
|
|
53
|
+
stale: generation !== null && generation !== currentGeneration,
|
|
54
|
+
refGeneration: generation,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
17
57
|
/** Extract page title from snapshot (RootWebArea or first heading). */
|
|
18
58
|
export function extractTitle(snapshot) {
|
|
19
59
|
const rootMatch = snapshot.match(/RootWebArea\s+"([^"]+)"/);
|
package/dist/src/snapshot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/snapshot.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/snapshot.ts"],"names":[],"mappings":"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"}
|
package/dist/src/suggestions.js
CHANGED
|
@@ -44,8 +44,8 @@ export function getSuggestions(ctx) {
|
|
|
44
44
|
if (refs.length > 5) {
|
|
45
45
|
lines.push("Run `chrome-devtools-axi scroll down` to scroll down");
|
|
46
46
|
}
|
|
47
|
-
// Teach eval syntax
|
|
48
|
-
lines.push('Use `chrome-devtools-axi eval <expr>` for JS expressions. For multi-statement code,
|
|
47
|
+
// Teach eval syntax - pass a function for multi-statement logic
|
|
48
|
+
lines.push('Use `chrome-devtools-axi eval <expr>` for JS expressions. For multi-statement code, pass a function: `eval "() => { ...; return result }"`');
|
|
49
49
|
return lines;
|
|
50
50
|
}
|
|
51
51
|
//# sourceMappingURL=suggestions.js.map
|