visionclaw 0.1.200-beta.7 → 0.1.200-beta.9
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/agent/browser-launcher.d.ts.map +1 -1
- package/dist/agent/browser-launcher.js +37 -0
- package/dist/agent/browser-launcher.js.map +1 -1
- package/dist/agent/engines/browser-tool-policy.d.ts.map +1 -1
- package/dist/agent/engines/browser-tool-policy.js +27 -1
- package/dist/agent/engines/browser-tool-policy.js.map +1 -1
- package/dist/agent/engines/claude/session-browser-policy.d.ts +9 -1
- package/dist/agent/engines/claude/session-browser-policy.d.ts.map +1 -1
- package/dist/agent/engines/claude/session-browser-policy.js +25 -3
- package/dist/agent/engines/claude/session-browser-policy.js.map +1 -1
- package/dist/agent/runtime-surface.d.ts +3 -2
- package/dist/agent/runtime-surface.d.ts.map +1 -1
- package/dist/agent/runtime-surface.js +25 -19
- package/dist/agent/runtime-surface.js.map +1 -1
- package/dist/entry/playwriter-relay.js +8 -3
- package/dist/entry/playwriter-relay.js.map +1 -1
- package/dist/onboarding/playwriter-extension.d.ts +44 -1
- package/dist/onboarding/playwriter-extension.d.ts.map +1 -1
- package/dist/onboarding/playwriter-extension.js +90 -22
- package/dist/onboarding/playwriter-extension.js.map +1 -1
- package/dist/onboarding/prepare-mac.d.ts +0 -1
- package/dist/onboarding/prepare-mac.d.ts.map +1 -1
- package/dist/onboarding/prepare-mac.js +23 -69
- package/dist/onboarding/prepare-mac.js.map +1 -1
- package/dist/reconfigure.d.ts.map +1 -1
- package/dist/reconfigure.js +9 -22
- package/dist/reconfigure.js.map +1 -1
- package/dist/utils/playwriter-relay.d.ts +137 -0
- package/dist/utils/playwriter-relay.d.ts.map +1 -1
- package/dist/utils/playwriter-relay.js +223 -7
- package/dist/utils/playwriter-relay.js.map +1 -1
- package/dist-agent/bundle.cjs +1711 -1650
- package/dist-agent/playwriter-relay.cjs +4 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-launcher.d.ts","sourceRoot":"","sources":["../../src/agent/browser-launcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"browser-launcher.d.ts","sourceRoot":"","sources":["../../src/agent/browser-launcher.ts"],"names":[],"mappings":"AAuOA;;;;GAIG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBnD;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAIpD;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC"}
|
|
@@ -89,6 +89,29 @@ async function arePagesHealthy() {
|
|
|
89
89
|
}
|
|
90
90
|
return true;
|
|
91
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Check whether a Chrome process launched with our CDP debug port already
|
|
94
|
+
* exists, regardless of whether it is responding on the port yet.
|
|
95
|
+
*
|
|
96
|
+
* {@link isCdpAlive} only sees a *ready* CDP server; a Chrome that was just
|
|
97
|
+
* spawned but hasn't bound the port yet looks dead to it, which would let
|
|
98
|
+
* {@link launchBrowser} spawn a second instance that races for port 9222.
|
|
99
|
+
* This pgrep guard closes that window (issue #534, layer 3). Windows has no
|
|
100
|
+
* pgrep, so we conservatively report "not running" and fall back to the CDP
|
|
101
|
+
* probe there.
|
|
102
|
+
*/
|
|
103
|
+
function isCdpChromeProcessRunning() {
|
|
104
|
+
if (process.platform === "win32")
|
|
105
|
+
return false;
|
|
106
|
+
try {
|
|
107
|
+
execSync(`pgrep -f -- '--remote-debugging-port=${CDP_PORT}'`, { stdio: "ignore" });
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
// pgrep exits non-zero when no matching process is found — expected.
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
92
115
|
/**
|
|
93
116
|
* Kill any Chrome processes that were launched with our CDP port and
|
|
94
117
|
* profile dir. Best-effort — failures are silently ignored.
|
|
@@ -132,6 +155,20 @@ async function launchBrowser() {
|
|
|
132
155
|
if (await isCdpAlive()) {
|
|
133
156
|
return false;
|
|
134
157
|
}
|
|
158
|
+
// A Chrome may have been spawned already but not yet bound the CDP port
|
|
159
|
+
// (isCdpAlive still false). Don't spawn a second one racing for port 9222 —
|
|
160
|
+
// reuse the in-flight instance and let the readiness poll below pick it up.
|
|
161
|
+
if (isCdpChromeProcessRunning()) {
|
|
162
|
+
logger.system(`Chrome with CDP port ${CDP_PORT} already launching — reusing instead of double-launch`);
|
|
163
|
+
const deadline = Date.now() + CDP_STARTUP_TIMEOUT_MS;
|
|
164
|
+
while (Date.now() < deadline) {
|
|
165
|
+
await new Promise((r) => setTimeout(r, CDP_POLL_INTERVAL_MS));
|
|
166
|
+
if (await isCdpAlive())
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
logger.warn(`Existing Chrome with CDP port ${CDP_PORT} not responding after ${CDP_STARTUP_TIMEOUT_MS}ms`);
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
135
172
|
if (!fs.existsSync(CHROME_PATH)) {
|
|
136
173
|
logger.warn(`Chrome not found at ${CHROME_PATH}. Please install Google Chrome.`);
|
|
137
174
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-launcher.js","sourceRoot":"","sources":["../../src/agent/browser-launcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browser-launcher.js","sourceRoot":"","sources":["../../src/agent/browser-launcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-tool-policy.d.ts","sourceRoot":"","sources":["../../../src/agent/engines/browser-tool-policy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;IAC/B,kCAAkC,EAAE,OAAO,CAAC;IAC5C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,GAAG,OAAO,CAAC;IAAE,kCAAkC,EAAE,OAAO,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"browser-tool-policy.d.ts","sourceRoot":"","sources":["../../../src/agent/engines/browser-tool-policy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;IAC/B,kCAAkC,EAAE,OAAO,CAAC;IAC5C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,GAAG,OAAO,CAAC;IAAE,kCAAkC,EAAE,OAAO,CAAA;CAAE,CAAC,CA0D3D"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ensureBrowser } from "../browser-launcher.js";
|
|
2
2
|
import { ensurePlaywriterChrome } from "./claude/session-browser-policy.js";
|
|
3
|
-
import { getCachedRelayStatus, reconcilePlaywriterRelay, invalidateRelayStatusCache } from "../../utils/playwriter-relay.js";
|
|
3
|
+
import { getCachedRelayStatus, reconcilePlaywriterRelay, invalidateRelayStatusCache, waitForSingleRelayExtension, waitForRelayExtensionReady } from "../../utils/playwriter-relay.js";
|
|
4
4
|
import { logger } from "../../logger.js";
|
|
5
5
|
export function isPlaywrightToolName(toolName) {
|
|
6
6
|
return toolName.startsWith("mcp__playwright__") || toolName.startsWith("playwright_");
|
|
@@ -17,10 +17,36 @@ export async function ensureBrowserForTool(options) {
|
|
|
17
17
|
reconcilePlaywriterRelay(host, port);
|
|
18
18
|
}
|
|
19
19
|
if (status.extensionConnected) {
|
|
20
|
+
// The extension is connected, but on a cold start the relay can briefly
|
|
21
|
+
// hold a stale prior connection alongside the fresh one (>1 extension).
|
|
22
|
+
// Because we connect with a bare /cdp endpoint (no extensionId — the relay
|
|
23
|
+
// keys by per-connection instance id, not Chrome id, so it can't
|
|
24
|
+
// disambiguate), a connect during that overlap is rejected with 4003
|
|
25
|
+
// "Multiple extensions connected". Hold until the relay settles to exactly
|
|
26
|
+
// one before this tool drives @playwright/mcp's connect (issue #534,
|
|
27
|
+
// layer 3). In steady state this is a single localhost probe that returns
|
|
28
|
+
// immediately (already converged → "ok").
|
|
29
|
+
const diagnosis = await waitForSingleRelayExtension(host, port);
|
|
30
|
+
if (diagnosis.kind === "multiple") {
|
|
31
|
+
logger.system(`Playwriter: relay still reports >1 extension after settle wait (${diagnosis.message}); proceeding — the connect may need one retry`);
|
|
32
|
+
}
|
|
20
33
|
logger.debug("Playwriter extension already connected — skipping Chrome restart");
|
|
21
34
|
return { playwriterConnectionsResetThisTurn: options.playwriterConnectionsResetThisTurn };
|
|
22
35
|
}
|
|
23
36
|
const didReset = await ensurePlaywriterChrome(options.playwriterConnectionsResetThisTurn, host, port);
|
|
37
|
+
// Chrome was just launched (or restarted) — its extension connects to the
|
|
38
|
+
// relay asynchronously over the next few seconds. The @playwright/mcp
|
|
39
|
+
// subprocess froze a BARE /cdp endpoint at warm-up (no extension was
|
|
40
|
+
// connected then to bind a stableKey), and its connect fires the moment this
|
|
41
|
+
// hook returns. A bare connect resolves only when the relay holds exactly one
|
|
42
|
+
// socket, so hold here until it settles — otherwise the first connect races
|
|
43
|
+
// the still-connecting / briefly-overlapping extension and is rejected with
|
|
44
|
+
// 4003 "Multiple extensions connected" (issue #534, the cold-start timing
|
|
45
|
+
// bug). Steady state returns after a single probe.
|
|
46
|
+
const diagnosis = await waitForRelayExtensionReady(host, port);
|
|
47
|
+
if (diagnosis.connectedIds.length !== 1) {
|
|
48
|
+
logger.system(`Playwriter: relay did not settle to a single extension socket after launch (${diagnosis.kind}: ${diagnosis.message}); proceeding — the connect may need one retry`);
|
|
49
|
+
}
|
|
24
50
|
return { playwriterConnectionsResetThisTurn: options.playwriterConnectionsResetThisTurn || didReset };
|
|
25
51
|
}
|
|
26
52
|
await ensureBrowser();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-tool-policy.js","sourceRoot":"","sources":["../../../src/agent/engines/browser-tool-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-tool-policy.js","sourceRoot":"","sources":["../../../src/agent/engines/browser-tool-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AACtL,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,OAAO,QAAQ,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAM1C;IACC,MAAM,CAAC,KAAK,CAAC,kCAAkC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnE,IAAI,OAAO,CAAC,cAAc,KAAK,YAAY,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,mBAAmB,IAAI,WAAW,CAAC;QACxD,MAAM,IAAI,GAAG,OAAO,CAAC,mBAAmB,IAAI,KAAK,CAAC;QAElD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YAC5D,0BAA0B,EAAE,CAAC;YAC7B,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC9B,wEAAwE;YACxE,wEAAwE;YACxE,2EAA2E;YAC3E,iEAAiE;YACjE,qEAAqE;YACrE,2EAA2E;YAC3E,qEAAqE;YACrE,0EAA0E;YAC1E,0CAA0C;YAC1C,MAAM,SAAS,GAAG,MAAM,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAChE,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAClC,MAAM,CAAC,MAAM,CACX,mEAAmE,SAAS,CAAC,OAAO,gDAAgD,CACrI,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;YACjF,OAAO,EAAE,kCAAkC,EAAE,OAAO,CAAC,kCAAkC,EAAE,CAAC;QAC5F,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAC3C,OAAO,CAAC,kCAAkC,EAC1C,IAAI,EACJ,IAAI,CACL,CAAC;QACF,0EAA0E;QAC1E,sEAAsE;QACtE,qEAAqE;QACrE,6EAA6E;QAC7E,8EAA8E;QAC9E,4EAA4E;QAC5E,4EAA4E;QAC5E,0EAA0E;QAC1E,mDAAmD;QACnD,MAAM,SAAS,GAAG,MAAM,0BAA0B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,SAAS,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,CAAC,MAAM,CACX,+EAA+E,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO,gDAAgD,CACpK,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,kCAAkC,EAAE,OAAO,CAAC,kCAAkC,IAAI,QAAQ,EAAE,CAAC;IACxG,CAAC;IAED,MAAM,aAAa,EAAE,CAAC;IACtB,OAAO,EAAE,kCAAkC,EAAE,OAAO,CAAC,kCAAkC,EAAE,CAAC;AAC5F,CAAC"}
|
|
@@ -14,7 +14,15 @@ export declare function killPlaywrightProfileCdpChrome(): void;
|
|
|
14
14
|
export declare function killPlaywriterChrome(): void;
|
|
15
15
|
/**
|
|
16
16
|
* Launch Chrome with a dedicated user-data-dir for Playwriter.
|
|
17
|
-
*
|
|
17
|
+
*
|
|
18
|
+
* The Playwriter extension installs into this profile from its own
|
|
19
|
+
* `External Extensions/<id>.json` (web-store `external_update_url`), written by
|
|
20
|
+
* {@link ensurePlaywriterExtension}. Chrome installs externally-declared
|
|
21
|
+
* extensions on launch, so we only scrub any stale `external_uninstalls`
|
|
22
|
+
* blacklist entry first — while this profile's Chrome is guaranteed not
|
|
23
|
+
* running — so a previously-removed copy is re-added. We deliberately do NOT use
|
|
24
|
+
* `--load-extension`: that command-line switch is disabled by default on
|
|
25
|
+
* Chrome 137+ (and fully on 149), so it silently loads nothing (issue #534).
|
|
18
26
|
*/
|
|
19
27
|
export declare function launchPlaywriterProfileChrome(): void;
|
|
20
28
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-browser-policy.d.ts","sourceRoot":"","sources":["../../../../src/agent/engines/claude/session-browser-policy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-browser-policy.d.ts","sourceRoot":"","sources":["../../../../src/agent/engines/claude/session-browser-policy.ts"],"names":[],"mappings":"AAwCA;;;GAGG;AACH,wBAAgB,8BAA8B,IAAI,IAAI,CAMrD;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAM3C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,IAAI,IAAI,CA4BpD;AAED;;GAEG;AACH,wBAAgB,gCAAgC,IAAI,OAAO,CAO1D;AAYD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,sBAAsB,CAC1C,2BAA2B,EAAE,OAAO,EACpC,IAAI,SAAc,EAClB,IAAI,SAAQ,GACX,OAAO,CAAC,OAAO,CAAC,CA0BlB"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { execFileSync, spawn } from "node:child_process";
|
|
2
2
|
import fs from "node:fs";
|
|
3
3
|
import { getPlaywriterProfileDir } from "../../../config/index.js";
|
|
4
|
-
import {
|
|
4
|
+
import { cleanPlaywriterExternalUninstalls, } from "../../../onboarding/playwriter-extension.js";
|
|
5
|
+
import { getPlaywriterRelayStatus, getRelayExtensionDiagnosis, invalidateRelayStatusCache, } from "../../../utils/playwriter-relay.js";
|
|
5
6
|
import { logger } from "../../../logger.js";
|
|
6
7
|
let _dataDir = null;
|
|
7
8
|
function getDataDir() {
|
|
@@ -58,7 +59,15 @@ export function killPlaywriterChrome() {
|
|
|
58
59
|
}
|
|
59
60
|
/**
|
|
60
61
|
* Launch Chrome with a dedicated user-data-dir for Playwriter.
|
|
61
|
-
*
|
|
62
|
+
*
|
|
63
|
+
* The Playwriter extension installs into this profile from its own
|
|
64
|
+
* `External Extensions/<id>.json` (web-store `external_update_url`), written by
|
|
65
|
+
* {@link ensurePlaywriterExtension}. Chrome installs externally-declared
|
|
66
|
+
* extensions on launch, so we only scrub any stale `external_uninstalls`
|
|
67
|
+
* blacklist entry first — while this profile's Chrome is guaranteed not
|
|
68
|
+
* running — so a previously-removed copy is re-added. We deliberately do NOT use
|
|
69
|
+
* `--load-extension`: that command-line switch is disabled by default on
|
|
70
|
+
* Chrome 137+ (and fully on 149), so it silently loads nothing (issue #534).
|
|
62
71
|
*/
|
|
63
72
|
export function launchPlaywriterProfileChrome() {
|
|
64
73
|
const chromePath = getChromePath();
|
|
@@ -66,6 +75,10 @@ export function launchPlaywriterProfileChrome() {
|
|
|
66
75
|
logger.warn(`Chrome not found at ${chromePath}`);
|
|
67
76
|
return;
|
|
68
77
|
}
|
|
78
|
+
// Scrub any stale external_uninstalls blacklist entry while this profile's
|
|
79
|
+
// Chrome is guaranteed not running, so Chrome re-installs the Playwriter
|
|
80
|
+
// extension from the profile's External Extensions JSON on launch.
|
|
81
|
+
cleanPlaywriterExternalUninstalls(getDataDir());
|
|
69
82
|
const flags = [
|
|
70
83
|
`--user-data-dir=${getDataDir()}`,
|
|
71
84
|
"--no-first-run",
|
|
@@ -97,6 +110,11 @@ export function isPlaywriterProfileChromeRunning() {
|
|
|
97
110
|
function restartChromeForPlaywriter() {
|
|
98
111
|
killPlaywriterChrome();
|
|
99
112
|
launchPlaywriterProfileChrome();
|
|
113
|
+
// The restart kills + relaunches Chrome, so the old relay status (cached up to
|
|
114
|
+
// 30s by the caller) may still report extensionConnected for a connection that
|
|
115
|
+
// is already gone. Drop it so the next tool call does a fresh probe against the
|
|
116
|
+
// freshly relaunched Chrome (issue #534, layer 3).
|
|
117
|
+
invalidateRelayStatusCache();
|
|
100
118
|
}
|
|
101
119
|
/**
|
|
102
120
|
* Ensure Chrome is up and usable for Playwriter, launching it lazily.
|
|
@@ -130,7 +148,11 @@ export async function ensurePlaywriterChrome(didResetConnectionsThisTurn, host =
|
|
|
130
148
|
logger.debug("Playwriter Chrome running and relay healthy — reusing");
|
|
131
149
|
return false;
|
|
132
150
|
}
|
|
133
|
-
|
|
151
|
+
// Honest diagnosis of *why* the extension isn't connected (0 vs >1 connected)
|
|
152
|
+
// instead of relying on the relay's misleading 4003 "Multiple extensions"
|
|
153
|
+
// close reason (issue #534, layer 2).
|
|
154
|
+
const diagnosis = await getRelayExtensionDiagnosis(host, port);
|
|
155
|
+
logger.system(`Playwriter Chrome running but relay extension not connected (${diagnosis.kind}: ${diagnosis.message}) — restarting`);
|
|
134
156
|
restartChromeForPlaywriter();
|
|
135
157
|
return true;
|
|
136
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-browser-policy.js","sourceRoot":"","sources":["../../../../src/agent/engines/claude/session-browser-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,
|
|
1
|
+
{"version":3,"file":"session-browser-policy.js","sourceRoot":"","sources":["../../../../src/agent/engines/claude/session-browser-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EACL,iCAAiC,GAClC,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,IAAI,QAAQ,GAAkB,IAAI,CAAC;AACnC,SAAS,UAAU;IACjB,QAAQ,KAAK,uBAAuB,EAAE,CAAC;IACvC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,8DAA8D,CAAC;IACxE,CAAC;IACD,MAAM,UAAU,GAAG;QACjB,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,mBAAmB,2CAA2C;QAC7F,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,yBAAyB,2CAA2C;QAC3G,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,2CAA2C;KAC7E,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED,IAAI,WAAW,GAAkB,IAAI,CAAC;AACtC,SAAS,aAAa;IACpB,WAAW,KAAK,cAAc,EAAE,CAAC;IACjC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B;IAC5C,IAAI,CAAC;QACH,YAAY,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,8BAA8B,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3F,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;IACvE,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,YAAY,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,mBAAmB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9F,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,6BAA6B;IAC3C,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;QACjD,OAAO;IACT,CAAC;IAED,2EAA2E;IAC3E,yEAAyE;IACzE,mEAAmE;IACnE,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC;IAEhD,MAAM,KAAK,GAAG;QACZ,mBAAmB,UAAU,EAAE,EAAE;QACjC,gBAAgB;QAChB,4BAA4B;QAC5B,6BAA6B;KAC9B,CAAC;IAEF,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE;QACrC,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;KAChB,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACxB,MAAM,CAAC,IAAI,CAAC,oCAAoC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,MAAM,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gCAAgC;IAC9C,IAAI,CAAC;QACH,YAAY,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,mBAAmB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B;IACjC,oBAAoB,EAAE,CAAC;IACvB,6BAA6B,EAAE,CAAC;IAChC,+EAA+E;IAC/E,+EAA+E;IAC/E,gFAAgF;IAChF,mDAAmD;IACnD,0BAA0B,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,2BAAoC,EACpC,IAAI,GAAG,WAAW,EAClB,IAAI,GAAG,KAAK;IAEZ,IAAI,CAAC,gCAAgC,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC;QAC3D,6BAA6B,EAAE,CAAC;QAChC,OAAO,2BAA2B,CAAC;IACrC,CAAC;IAED,4EAA4E;IAC5E,sBAAsB;IACtB,IAAI,2BAA2B;QAAE,OAAO,KAAK,CAAC;IAE9C,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1D,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8EAA8E;IAC9E,0EAA0E;IAC1E,sCAAsC;IACtC,MAAM,SAAS,GAAG,MAAM,0BAA0B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/D,MAAM,CAAC,MAAM,CACX,gEAAgE,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO,gBAAgB,CACrH,CAAC;IACF,0BAA0B,EAAE,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -37,8 +37,9 @@ export interface BuiltRuntimeSurface {
|
|
|
37
37
|
*
|
|
38
38
|
* Returns the resolved {@link BrowserBackend} rather than mutating config — the
|
|
39
39
|
* backend is an internal runtime value (see {@link RuntimeSurface}). Playwriter
|
|
40
|
-
* is selected only when
|
|
41
|
-
* everything else (including all non-macOS)
|
|
40
|
+
* is selected only when the dedicated profile's External Extensions JSON is
|
|
41
|
+
* installed AND the relay is viable; everything else (including all non-macOS)
|
|
42
|
+
* falls back to plain Playwright CDP.
|
|
42
43
|
*/
|
|
43
44
|
export declare function detectBrowserBackend(config: VisionClawConfig): Promise<BrowserBackend>;
|
|
44
45
|
export declare function buildRuntimeSurface(config: VisionClawConfig): Promise<BuiltRuntimeSurface>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-surface.d.ts","sourceRoot":"","sources":["../../src/agent/runtime-surface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-surface.d.ts","sourceRoot":"","sources":["../../src/agent/runtime-surface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AA4B3D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,YAAY,GAAG,WAAW,CAAC;IACtC,yBAAyB,EAAE,OAAO,CAAC;CACpC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,YAAY,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,iBAAiB,CAAC;IAC/B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,uBAAuB,EAAE,uBAAuB,CAAC;IACjD,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5D,qEAAqE;IACrE,sBAAsB,EAAE,cAAc,CAAC;CACxC;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,cAAc,CAAC;IAC/B,4BAA4B,EAAE,MAAM,CAAC;CACtC;AAkDD;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAiC5F;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAoChG"}
|
|
@@ -4,8 +4,8 @@ import { getCdpEndpoint } from "./browser-launcher.js";
|
|
|
4
4
|
import { resolvePhonecallApiKey } from "../phonecall-credentials.js";
|
|
5
5
|
import { resolveFinancialToolApiKey, resolveFinancialToolBaseUrl } from "../financial-tool-credentials.js";
|
|
6
6
|
import { resolveSerpApiKey } from "../serpapi-credentials.js";
|
|
7
|
-
import { ensurePlaywriterExtension,
|
|
8
|
-
import { ensurePlaywriterRelay, reconcilePlaywriterRelay, getPlaywriterRelayStatus, cleanupOrphanRelay,
|
|
7
|
+
import { ensurePlaywriterExtension, isPlaywriterExtensionAvailable, } from "../onboarding/playwriter-extension.js";
|
|
8
|
+
import { ensurePlaywriterRelay, reconcilePlaywriterRelay, getPlaywriterRelayStatus, cleanupOrphanRelay, resolveRelayCdpEndpoint, } from "../utils/playwriter-relay.js";
|
|
9
9
|
import { killPlaywriterChrome, launchPlaywriterProfileChrome, isPlaywriterProfileChromeRunning, } from "./engines/claude/session-browser-policy.js";
|
|
10
10
|
import { fileURLToPath } from "url";
|
|
11
11
|
import path from "path";
|
|
@@ -43,9 +43,10 @@ async function bringUpPlaywriterLazily(host, port) {
|
|
|
43
43
|
}
|
|
44
44
|
// Chrome is not running. Per the lazy-launch policy we do not start it at
|
|
45
45
|
// detection time; it launches on first browser tool use. Keep Playwriter only
|
|
46
|
-
// when the
|
|
47
|
-
// would come up without
|
|
48
|
-
|
|
46
|
+
// when the dedicated profile's External Extensions JSON is installed —
|
|
47
|
+
// otherwise the deferred Chrome would come up without the extension and never
|
|
48
|
+
// connect.
|
|
49
|
+
if (!isPlaywriterExtensionAvailable()) {
|
|
49
50
|
return { viable: false, mode: "deferred" };
|
|
50
51
|
}
|
|
51
52
|
// Make sure the (persistent) relay process is up and ready to accept the
|
|
@@ -58,8 +59,9 @@ async function bringUpPlaywriterLazily(host, port) {
|
|
|
58
59
|
*
|
|
59
60
|
* Returns the resolved {@link BrowserBackend} rather than mutating config — the
|
|
60
61
|
* backend is an internal runtime value (see {@link RuntimeSurface}). Playwriter
|
|
61
|
-
* is selected only when
|
|
62
|
-
* everything else (including all non-macOS)
|
|
62
|
+
* is selected only when the dedicated profile's External Extensions JSON is
|
|
63
|
+
* installed AND the relay is viable; everything else (including all non-macOS)
|
|
64
|
+
* falls back to plain Playwright CDP.
|
|
63
65
|
*/
|
|
64
66
|
export async function detectBrowserBackend(config) {
|
|
65
67
|
if (process.platform !== "darwin")
|
|
@@ -68,15 +70,11 @@ export async function detectBrowserBackend(config) {
|
|
|
68
70
|
const port = config.playwriterRelayPort ?? 19988;
|
|
69
71
|
ensurePlaywriterExtension();
|
|
70
72
|
try {
|
|
71
|
-
if (
|
|
72
|
-
const chromeProfiles = isPlaywriterExtensionInChromeProfiles();
|
|
73
|
+
if (isPlaywriterExtensionAvailable()) {
|
|
73
74
|
try {
|
|
74
75
|
const { viable, mode } = await bringUpPlaywriterLazily(host, port);
|
|
75
76
|
if (viable) {
|
|
76
|
-
|
|
77
|
-
? ` (extension in ${chromeProfiles.profiles.join(", ")})`
|
|
78
|
-
: "";
|
|
79
|
-
logger.system(`Browser backend: Playwriter (${mode}${profileInfo})`);
|
|
77
|
+
logger.system(`Browser backend: Playwriter (${mode})`);
|
|
80
78
|
return "playwriter";
|
|
81
79
|
}
|
|
82
80
|
logger.system(`Browser backend: Playwright CDP (Playwriter not viable [${mode}] at ${host}:${port})`);
|
|
@@ -86,7 +84,7 @@ export async function detectBrowserBackend(config) {
|
|
|
86
84
|
}
|
|
87
85
|
}
|
|
88
86
|
else {
|
|
89
|
-
logger.system("Browser backend: Playwright CDP (Playwriter
|
|
87
|
+
logger.system("Browser backend: Playwright CDP (Playwriter External Extensions JSON not installed)");
|
|
90
88
|
cleanupOrphanRelay();
|
|
91
89
|
}
|
|
92
90
|
}
|
|
@@ -124,7 +122,7 @@ export async function buildRuntimeSurface(config) {
|
|
|
124
122
|
supportsSwitchSessionTool: true,
|
|
125
123
|
},
|
|
126
124
|
externalMcpServers: {
|
|
127
|
-
...buildBuiltinExternalMcpServers(config, resolvedBrowserBackend),
|
|
125
|
+
...(await buildBuiltinExternalMcpServers(config, resolvedBrowserBackend)),
|
|
128
126
|
...dynamicExternalMcpServers,
|
|
129
127
|
},
|
|
130
128
|
},
|
|
@@ -159,11 +157,19 @@ function buildPlaywrightMcpServer() {
|
|
|
159
157
|
},
|
|
160
158
|
};
|
|
161
159
|
}
|
|
162
|
-
function buildPlaywriterRelayMcpServer(config) {
|
|
160
|
+
async function buildPlaywriterRelayMcpServer(config) {
|
|
163
161
|
const screenshotsDir = getScreenshotsDir();
|
|
164
162
|
const host = config.playwriterRelayHost ?? "127.0.0.1";
|
|
165
163
|
const port = config.playwriterRelayPort ?? 19988;
|
|
166
|
-
|
|
164
|
+
// Bind the connect to the connected extension's relay stableKey when it is
|
|
165
|
+
// unambiguous. This is fixed here (warm-up) because @playwright/mcp reads the
|
|
166
|
+
// endpoint once at startup. A stableKey-bound endpoint resolves to the newest
|
|
167
|
+
// live socket, so the first connect survives the cold-start dead+fresh
|
|
168
|
+
// same-install overlap that a bare endpoint hits with 4003 "Multiple
|
|
169
|
+
// extensions" (issue #534). Falls back to a bare endpoint when zero or >1
|
|
170
|
+
// distinct stableKeys are attached. NOT the Chrome extension id — that is the
|
|
171
|
+
// L2 regression the relay rejects with 4003 "Unknown extensionId".
|
|
172
|
+
const cdpEndpoint = await resolveRelayCdpEndpoint(host, port);
|
|
167
173
|
const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
|
|
168
174
|
const binDir = path.join(packageRoot, "node_modules", ".bin");
|
|
169
175
|
const playwrightConfig = {
|
|
@@ -184,9 +190,9 @@ function buildPlaywriterRelayMcpServer(config) {
|
|
|
184
190
|
},
|
|
185
191
|
};
|
|
186
192
|
}
|
|
187
|
-
function buildBuiltinExternalMcpServers(config, resolvedBrowserBackend) {
|
|
193
|
+
async function buildBuiltinExternalMcpServers(config, resolvedBrowserBackend) {
|
|
188
194
|
const browserServer = resolvedBrowserBackend === "playwriter"
|
|
189
|
-
? buildPlaywriterRelayMcpServer(config)
|
|
195
|
+
? await buildPlaywriterRelayMcpServer(config)
|
|
190
196
|
: buildPlaywrightMcpServer();
|
|
191
197
|
const externalMcpServers = {
|
|
192
198
|
...browserServer,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-surface.js","sourceRoot":"","sources":["../../src/agent/runtime-surface.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACrH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC3G,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EACL,yBAAyB,EACzB,
|
|
1
|
+
{"version":3,"file":"runtime-surface.js","sourceRoot":"","sources":["../../src/agent/runtime-surface.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,13 @@ function getRelayInfoPath() {
|
|
|
10
10
|
?? join(homedir(), ".visionclaw", "profiles", "default", ".playwriter-relay-info.json");
|
|
11
11
|
}
|
|
12
12
|
function hasExtensionConfig() {
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
// The extension installs into the dedicated Playwriter profile from that
|
|
14
|
+
// profile's own External Extensions JSON (issue #534). The relay precondition
|
|
15
|
+
// is that this install config exists. The config dir is the parent of the
|
|
16
|
+
// relay-info path, so this honors RELAY_INFO_PATH overrides too.
|
|
17
|
+
const configDir = dirname(getRelayInfoPath());
|
|
18
|
+
const jsonPath = join(configDir, ".playwriter-chrome", "External Extensions", `${EXTENSION_ID}.json`);
|
|
19
|
+
return existsSync(jsonPath);
|
|
15
20
|
}
|
|
16
21
|
function hasConflictingPolicyInstall() {
|
|
17
22
|
if (process.platform !== "darwin")
|
|
@@ -50,7 +55,7 @@ function removeRelayInfo() {
|
|
|
50
55
|
}
|
|
51
56
|
async function main() {
|
|
52
57
|
if (!hasExtensionConfig()) {
|
|
53
|
-
console.error("Playwriter extension External Extensions JSON not found. Run extension install first.");
|
|
58
|
+
console.error("Playwriter extension not configured (dedicated-profile External Extensions JSON not found). Run extension install first.");
|
|
54
59
|
process.exit(1);
|
|
55
60
|
}
|
|
56
61
|
if (hasConflictingPolicyInstall()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwriter-relay.js","sourceRoot":"","sources":["../../src/entry/playwriter-relay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,YAAY,GAAG,kCAAkC,CAAC;AACxD,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAEjC,SAAS,gBAAgB;IACvB,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe;WAC7B,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,6BAA6B,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,
|
|
1
|
+
{"version":3,"file":"playwriter-relay.js","sourceRoot":"","sources":["../../src/entry/playwriter-relay.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,53 @@
|
|
|
1
1
|
declare const PLAYWRITER_EXTENSION_ID = "jfeammnjpkecdekppnclgkkffahnhfhe";
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* The Playwriter backend is viable when the dedicated automation profile's
|
|
4
|
+
* External Extensions JSON is installed. Chrome installs the extension into that
|
|
5
|
+
* profile (and only that profile) from the JSON's web-store `external_update_url`
|
|
6
|
+
* on the next launch — verified working on Chrome 149, where the older
|
|
7
|
+
* `--load-extension` command-line switch is disabled by default
|
|
8
|
+
* (`DisableLoadExtensionCommandLineSwitch`). Writing the JSON to the profile's
|
|
9
|
+
* own `External Extensions` dir (not the system-wide one) keeps the install
|
|
10
|
+
* scoped to automation Chrome, so the user's everyday Chrome is untouched and
|
|
11
|
+
* can't add a second same-id connection to the relay (issue #534 / #545).
|
|
12
|
+
*/
|
|
13
|
+
export declare function isPlaywriterExtensionAvailable(): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Drop {@link PLAYWRITER_EXTENSION_ID} from the dedicated Playwriter profile's
|
|
16
|
+
* `external_uninstalls` blacklist (`Default/Preferences` →
|
|
17
|
+
* `extensions.external_uninstalls`). Chrome records an id there when an
|
|
18
|
+
* externally-installed extension is removed; while present it blocks Chrome
|
|
19
|
+
* from re-installing the extension from the External Extensions JSON on the next
|
|
20
|
+
* launch. Scrubbing it lets the profile-scoped External Extensions install take
|
|
21
|
+
* effect again — this is exactly the silent-uninstall case behind issue #545.
|
|
22
|
+
*
|
|
23
|
+
* Must only run while this profile's Chrome is NOT live (a running Chrome would
|
|
24
|
+
* overwrite Preferences on exit), which is exactly the pre-launch moment the
|
|
25
|
+
* launcher calls it from. Returns true when residue was actually removed.
|
|
26
|
+
*/
|
|
27
|
+
export declare function cleanPlaywriterExternalUninstalls(profileDir?: string): boolean;
|
|
3
28
|
export declare function isPlaywriterPolicyConfigured(): boolean;
|
|
4
29
|
export declare function isPlaywriterExtensionInChromeProfiles(): {
|
|
5
30
|
installed: boolean;
|
|
6
31
|
profiles: string[];
|
|
7
32
|
};
|
|
33
|
+
/**
|
|
34
|
+
* Prepare the host so the Playwriter backend can come up. The extension is
|
|
35
|
+
* installed into the dedicated `.playwriter-chrome` profile via that profile's
|
|
36
|
+
* own External Extensions JSON (web-store `external_update_url`): Chrome honors
|
|
37
|
+
* `<user-data-dir>/External Extensions/<id>.json` and installs the extension
|
|
38
|
+
* into only that profile. This:
|
|
39
|
+
* - removes the legacy *system-wide* External Extensions JSON that older
|
|
40
|
+
* versions wrote — keeping it would also install the extension into the
|
|
41
|
+
* user's everyday Chrome, producing the duplicate same-id relay connection
|
|
42
|
+
* behind issue #545 (and polluting the user's normal Chrome);
|
|
43
|
+
* - removes any legacy enterprise force-install policy;
|
|
44
|
+
* - writes the profile-scoped External Extensions JSON.
|
|
45
|
+
*
|
|
46
|
+
* The `external_uninstalls` blacklist is scrubbed at launch time
|
|
47
|
+
* ({@link cleanPlaywriterExternalUninstalls}) — while this profile's Chrome is
|
|
48
|
+
* guaranteed not running — so a previously-removed external install is re-added.
|
|
49
|
+
* Returns true when the profile JSON is in place (the backend is viable here).
|
|
50
|
+
*/
|
|
8
51
|
export declare function ensurePlaywriterExtension(): boolean;
|
|
9
52
|
export interface LegacyCleanupResult {
|
|
10
53
|
policyRemoved: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwriter-extension.d.ts","sourceRoot":"","sources":["../../src/onboarding/playwriter-extension.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,uBAAuB,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"playwriter-extension.d.ts","sourceRoot":"","sources":["../../src/onboarding/playwriter-extension.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,uBAAuB,qCAAqC,CAAC;AA6BnE;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,IAAI,OAAO,CAExD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iCAAiC,CAAC,UAAU,SAA4B,GAAG,OAAO,CAoBjG;AAED,wBAAgB,4BAA4B,IAAI,OAAO,CAatD;AAED,wBAAgB,qCAAqC,IAAI;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAkBlG;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAuCnD;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,8BAA8B,IAAI,mBAAmB,CAoCpE;AA4CD,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
|