visionclaw 0.1.206-beta.17 → 0.1.206-beta.18
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/engines/browser-tool-policy.js +1 -1
- package/dist/agent/engines/browser-tool-policy.js.map +1 -1
- package/dist/agent/runtime-surface.js +1 -1
- package/dist/agent/runtime-surface.js.map +1 -1
- package/dist/utils/playwriter-relay.d.ts +7 -1
- package/dist/utils/playwriter-relay.d.ts.map +1 -1
- package/dist/utils/playwriter-relay.js +351 -57
- package/dist/utils/playwriter-relay.js.map +1 -1
- package/dist-agent/bundle.cjs +208 -41
- package/package.json +1 -1
|
@@ -14,7 +14,7 @@ export async function ensureBrowserForTool(options) {
|
|
|
14
14
|
if (!status.reachable) {
|
|
15
15
|
logger.system("Playwriter relay unreachable — reconciling");
|
|
16
16
|
invalidateRelayStatusCache();
|
|
17
|
-
reconcilePlaywriterRelay(host, port);
|
|
17
|
+
await reconcilePlaywriterRelay(host, port);
|
|
18
18
|
}
|
|
19
19
|
if (status.extensionConnected) {
|
|
20
20
|
// The extension is connected, but on a cold start the relay can briefly
|
|
@@ -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,2BAA2B,EAAE,0BAA0B,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AACrN,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;
|
|
1
|
+
{"version":3,"file":"browser-tool-policy.js","sourceRoot":"","sources":["../../../src/agent/engines/browser-tool-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,7 +51,7 @@ async function bringUpPlaywriterLazily(host, port) {
|
|
|
51
51
|
}
|
|
52
52
|
// Make sure the (persistent) relay process is up and ready to accept the
|
|
53
53
|
// extension when Chrome launches later. Throws if the relay can't be started.
|
|
54
|
-
reconcilePlaywriterRelay(host, port);
|
|
54
|
+
await reconcilePlaywriterRelay(host, port);
|
|
55
55
|
return { viable: true, mode: "deferred" };
|
|
56
56
|
}
|
|
57
57
|
/**
|
|
@@ -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,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC3G,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EACL,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,oBAAoB,EACpB,6BAA6B,EAC7B,gCAAgC,GACjC,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAwCtC;;;;;;;;;;;;;;;GAeG;AACH,KAAK,UAAU,uBAAuB,CACpC,IAAY,EACZ,IAAY;IAEZ,IAAI,gCAAgC,EAAE,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC9B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC1C,CAAC;QACD,oEAAoE;QACpE,uEAAuE;QACvE,aAAa;QACb,oBAAoB,EAAE,CAAC;QACvB,6BAA6B,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5D,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IACvE,CAAC;IAED,0EAA0E;IAC1E,8EAA8E;IAC9E,uEAAuE;IACvE,8EAA8E;IAC9E,WAAW;IACX,IAAI,CAAC,8BAA8B,EAAE,EAAE,CAAC;QACtC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAC7C,CAAC;IACD,yEAAyE;IACzE,8EAA8E;IAC9E,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-surface.js","sourceRoot":"","sources":["../../src/agent/runtime-surface.ts"],"names":[],"mappings":"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"}
|
|
@@ -201,7 +201,13 @@ export declare function getRelayInfoFromFile(): {
|
|
|
201
201
|
} | null;
|
|
202
202
|
export declare function getCachedRelayStatus(host?: string, port?: number): Promise<PlaywriterRelayStatus>;
|
|
203
203
|
export declare function invalidateRelayStatusCache(): void;
|
|
204
|
-
|
|
204
|
+
/**
|
|
205
|
+
* Converge the pm2-managed relay to "one healthy process, current version,
|
|
206
|
+
* correct env". Async because recovery may need HTTP fingerprinting and port
|
|
207
|
+
* reclamation (see {@link ensureRelayPortAvailable} and
|
|
208
|
+
* {@link healUnlistablePm2State}).
|
|
209
|
+
*/
|
|
210
|
+
export declare function reconcilePlaywriterRelay(host?: string, port?: number): Promise<void>;
|
|
205
211
|
export declare function ensurePlaywriterRelay(host?: string, port?: number): Promise<PlaywriterRelayStatus>;
|
|
206
212
|
export declare function cleanupOrphanRelay(): void;
|
|
207
213
|
export { RELAY_PROTOCOL_VERSION };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwriter-relay.d.ts","sourceRoot":"","sources":["../../src/utils/playwriter-relay.ts"],"names":[],"mappings":"AASA,QAAA,MAAM,sBAAsB,IAAI,CAAC;AAajC,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAoCD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAQzC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAyC3C;
|
|
1
|
+
{"version":3,"file":"playwriter-relay.d.ts","sourceRoot":"","sources":["../../src/utils/playwriter-relay.ts"],"names":[],"mappings":"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"}
|
|
@@ -115,19 +115,74 @@ export function warnOnPm2VersionSkew() {
|
|
|
115
115
|
+ "(disruptive: it restarts all pm2-managed processes) when convenient.");
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
|
-
function
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
118
|
+
function runPm2Jlist() {
|
|
119
|
+
const output = execFileSync("pm2", ["jlist"], {
|
|
120
|
+
encoding: "utf-8",
|
|
121
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
122
|
+
timeout: 10_000,
|
|
123
|
+
});
|
|
124
|
+
// pm2 may print banner lines before the JSON (update notices, and daemon
|
|
125
|
+
// startup lines like `[PM2] Spawning PM2 daemon...` that ALSO begin with
|
|
126
|
+
// `[`). The JSON array is always the LAST such block, on its own line -- so
|
|
127
|
+
// parse from the last line-starting `[` first, then fall back to the first
|
|
128
|
+
// `[` for outputs where the array is not newline-separated.
|
|
129
|
+
const lastLineStart = output.lastIndexOf("\n[");
|
|
130
|
+
if (lastLineStart >= 0) {
|
|
131
|
+
try {
|
|
132
|
+
return JSON.parse(output.slice(lastLineStart + 1));
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// fall through to the first-bracket heuristic
|
|
136
|
+
}
|
|
127
137
|
}
|
|
128
|
-
|
|
129
|
-
|
|
138
|
+
const start = output.indexOf("[");
|
|
139
|
+
if (start < 0)
|
|
140
|
+
throw new Error(`pm2 jlist produced no JSON array: ${output.slice(0, 200)}`);
|
|
141
|
+
return JSON.parse(output.slice(start));
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* List the pm2 entries named `playwriter-relay`, DISTINGUISHING "none exist"
|
|
145
|
+
* from "the pm2 state could not be read".
|
|
146
|
+
*
|
|
147
|
+
* The old list helper swallowed every `pm2 jlist` failure as an empty list.
|
|
148
|
+
* That misread is what let a whole machine wedge: after a pm2 CLI upgrade the
|
|
149
|
+
* CLI could no longer talk to the still-running older daemon, `jlist` threw,
|
|
150
|
+
* reconcile concluded "no relay exists", and then backed off forever from the
|
|
151
|
+
* port its OWN stale relay was holding -- while that relay predated stableKey
|
|
152
|
+
* reporting, permanently bypassing the pinned `/cdp` connect (4003 on every
|
|
153
|
+
* browser tool).
|
|
154
|
+
*
|
|
155
|
+
* `jlist` is retried once (transient daemon hiccups); a missing pm2 binary
|
|
156
|
+
* still reads as an ordinary empty state (`assertPm2Available` owns that
|
|
157
|
+
* error). Persistent failure logs loudly -- including the manual `pm2 update`
|
|
158
|
+
* guidance -- and returns `ok: false` so callers switch to port-fingerprint
|
|
159
|
+
* reconciliation ({@link healUnlistablePm2State}) instead of trusting an
|
|
160
|
+
* empty list. We deliberately do NOT auto-run `pm2 update`: it kills and
|
|
161
|
+
* respawns the daemon and EVERY pm2-managed app -- including VisionClaw
|
|
162
|
+
* itself on pm2-managed installs -- which is far too disruptive to trigger
|
|
163
|
+
* implicitly from a reconcile.
|
|
164
|
+
*/
|
|
165
|
+
function listPm2RelayProcessesChecked() {
|
|
166
|
+
let lastError;
|
|
167
|
+
for (let attempt = 0; attempt < 2; attempt++) {
|
|
168
|
+
try {
|
|
169
|
+
const processes = runPm2Jlist();
|
|
170
|
+
return { ok: true, procs: processes.filter((p) => p.name === PM2_PROCESS_NAME) };
|
|
171
|
+
}
|
|
172
|
+
catch (err) {
|
|
173
|
+
if (err.code === "ENOENT") {
|
|
174
|
+
// pm2 binary not installed: genuinely nothing managed.
|
|
175
|
+
return { ok: true, procs: [] };
|
|
176
|
+
}
|
|
177
|
+
lastError = err;
|
|
178
|
+
}
|
|
130
179
|
}
|
|
180
|
+
logger.warn("Playwriter relay: `pm2 jlist` failed twice; the pm2 process list is unreadable "
|
|
181
|
+
+ `(${lastError instanceof Error ? lastError.message : String(lastError)}). `
|
|
182
|
+
+ "This usually means the pm2 CLI and daemon are out of sync after an upgrade -- run `pm2 update` "
|
|
183
|
+
+ "manually to reload the daemon (disruptive: it restarts ALL pm2-managed apps, including VisionClaw "
|
|
184
|
+
+ "itself when pm2-managed). Falling back to port-based reconciliation.");
|
|
185
|
+
return { ok: false, procs: [] };
|
|
131
186
|
}
|
|
132
187
|
/**
|
|
133
188
|
* Delete a pm2 process by its numeric `pm_id`.
|
|
@@ -149,27 +204,33 @@ function pm2DeleteById(pmId) {
|
|
|
149
204
|
}
|
|
150
205
|
}
|
|
151
206
|
/**
|
|
152
|
-
* Return the single canonical relay process, pruning
|
|
207
|
+
* Return the single canonical relay process from a successful listing, pruning
|
|
208
|
+
* every other entry that shares the name.
|
|
153
209
|
*
|
|
154
|
-
* pm2 is idempotent by name for `pm2 start --name`, but legacy installs
|
|
155
|
-
* start/delete races can
|
|
156
|
-
* `playwriter-relay
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
210
|
+
* pm2 is idempotent by name for `pm2 start --name`, but legacy installs,
|
|
211
|
+
* upgrades, and start/delete races can leave SEVERAL entries named
|
|
212
|
+
* `playwriter-relay` -- typically one per past VisionClaw version, all but one
|
|
213
|
+
* crash-looping on EADDRINUSE. Canonical = the entry whose `pm_exec_path`
|
|
214
|
+
* matches the CURRENT bundle's relay entry, preferring `online`, then the
|
|
215
|
+
* highest `pm_id` (newest). Everything else -- including an online relay still
|
|
216
|
+
* running an OLD version's bundle -- is deleted by id, so a stale-version
|
|
217
|
+
* survivor cannot keep the port and silently pin the machine to an outdated
|
|
218
|
+
* relay. Deletes are by numeric id taken from name-matched entries only; no
|
|
219
|
+
* other pm2 app (e.g. the `visionclaw` process itself) can ever be selected.
|
|
220
|
+
* Best-effort: prune failures are logged, not thrown.
|
|
162
221
|
*/
|
|
163
|
-
function
|
|
164
|
-
const matches = listPm2RelayProcesses();
|
|
222
|
+
function selectAndPruneCanonicalRelay(matches, expectedEntry) {
|
|
165
223
|
if (matches.length === 0)
|
|
166
224
|
return null;
|
|
167
225
|
if (matches.length === 1)
|
|
168
226
|
return matches[0];
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
const
|
|
172
|
-
|
|
227
|
+
const score = (p) => (p.pm2_env?.pm_exec_path === expectedEntry ? 2 : 0)
|
|
228
|
+
+ (p.pm2_env?.status === "online" ? 1 : 0);
|
|
229
|
+
const canonical = matches.reduce((best, p) => {
|
|
230
|
+
if (score(p) !== score(best))
|
|
231
|
+
return score(p) > score(best) ? p : best;
|
|
232
|
+
return p.pm_id > best.pm_id ? p : best;
|
|
233
|
+
}, matches[0]);
|
|
173
234
|
const orphans = matches.filter((p) => p.pm_id !== canonical.pm_id);
|
|
174
235
|
logger.system(`Playwriter relay: found ${matches.length} pm2 entries named "${PM2_PROCESS_NAME}"; `
|
|
175
236
|
+ `keeping pm_id=${canonical.pm_id} (status=${canonical.pm2_env?.status ?? "?"}), `
|
|
@@ -261,19 +322,225 @@ function getForeignPortListenerPids(port, canonicalPid) {
|
|
|
261
322
|
return getPortListenerPids(port).filter((pid) => pid !== canonicalPid);
|
|
262
323
|
}
|
|
263
324
|
/**
|
|
264
|
-
*
|
|
325
|
+
* Read the relay's own playwriter version over HTTP (`GET /version`).
|
|
326
|
+
* Served by both current and legacy relays; undefined when unreadable.
|
|
327
|
+
*/
|
|
328
|
+
async function probeRelayPlaywriterVersion(host, port) {
|
|
329
|
+
try {
|
|
330
|
+
const response = await fetch(`${getRelayBaseUrl(host, port)}/version`, {
|
|
331
|
+
signal: AbortSignal.timeout(1_500),
|
|
332
|
+
});
|
|
333
|
+
if (!response.ok)
|
|
334
|
+
return undefined;
|
|
335
|
+
const text = await response.text();
|
|
336
|
+
try {
|
|
337
|
+
const parsed = JSON.parse(text);
|
|
338
|
+
if (typeof parsed.version === "string" && parsed.version.length > 0)
|
|
339
|
+
return parsed.version;
|
|
340
|
+
}
|
|
341
|
+
catch {
|
|
342
|
+
// fall through to the plain-text form
|
|
343
|
+
}
|
|
344
|
+
return /\d+\.\d+\.\d+[-.\w]*/.exec(text)?.[0];
|
|
345
|
+
}
|
|
346
|
+
catch {
|
|
347
|
+
return undefined;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Fingerprint whatever is listening on the relay port over HTTP.
|
|
265
352
|
*
|
|
266
|
-
*
|
|
267
|
-
*
|
|
268
|
-
*
|
|
353
|
+
* `kind: "relay"` only when the listener answers one of the relay's status
|
|
354
|
+
* endpoints with the relay's response shape -- `/extensions/status` (current)
|
|
355
|
+
* or `/extension/status` (legacy, pre-stableKey relays). Anything else --
|
|
356
|
+
* connection refused, non-JSON, JSON of a different shape -- reads as
|
|
357
|
+
* `"unknown"`, and callers must then treat the port holder as a foreign
|
|
358
|
+
* process they may not touch.
|
|
269
359
|
*/
|
|
270
|
-
function
|
|
271
|
-
const
|
|
360
|
+
async function probeRelayPortIdentity(host, port) {
|
|
361
|
+
const base = getRelayBaseUrl(host, port);
|
|
362
|
+
try {
|
|
363
|
+
const response = await fetch(`${base}/extensions/status`, { signal: AbortSignal.timeout(1_500) });
|
|
364
|
+
if (response.ok) {
|
|
365
|
+
const body = (await response.json());
|
|
366
|
+
if (Array.isArray(body.extensions)) {
|
|
367
|
+
return { kind: "relay", playwriterVersion: await probeRelayPlaywriterVersion(host, port) };
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
catch {
|
|
372
|
+
// fall through to the legacy endpoint
|
|
373
|
+
}
|
|
374
|
+
try {
|
|
375
|
+
const response = await fetch(`${base}/extension/status`, { signal: AbortSignal.timeout(1_500) });
|
|
376
|
+
if (response.ok) {
|
|
377
|
+
const body = (await response.json());
|
|
378
|
+
if (typeof body.connected === "boolean") {
|
|
379
|
+
return { kind: "relay", playwriterVersion: await probeRelayPlaywriterVersion(host, port) };
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
catch {
|
|
384
|
+
// not a relay (or nothing at all) -- fall through
|
|
385
|
+
}
|
|
386
|
+
return { kind: "unknown" };
|
|
387
|
+
}
|
|
388
|
+
/** The playwriter version this VisionClaw ships (from its own node_modules). */
|
|
389
|
+
function getBundledPlaywriterVersion() {
|
|
390
|
+
try {
|
|
391
|
+
const __dir = path.dirname(fileURLToPath(import.meta.url));
|
|
392
|
+
const packageRoot = path.resolve(__dir, isBundled() ? ".." : "../..");
|
|
393
|
+
const pkgPath = path.join(packageRoot, "node_modules", "playwriter", "package.json");
|
|
394
|
+
const parsed = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
395
|
+
return typeof parsed.version === "string" && parsed.version.length > 0 ? parsed.version : undefined;
|
|
396
|
+
}
|
|
397
|
+
catch {
|
|
398
|
+
return undefined;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Send a signal to a pid, refusing anything that could be this VisionClaw
|
|
403
|
+
* process itself. Relay reclamation must NEVER be able to take down its own
|
|
404
|
+
* host: VisionClaw is commonly pm2-managed too, so every raw kill is gated on
|
|
405
|
+
* "not me, not my parent" in addition to the positive relay fingerprint the
|
|
406
|
+
* callers require. Returns whether the signal was actually sent.
|
|
407
|
+
*/
|
|
408
|
+
function killPidSafely(pid, signal) {
|
|
409
|
+
if (!Number.isInteger(pid) || pid <= 1)
|
|
410
|
+
return false;
|
|
411
|
+
if (pid === process.pid || pid === process.ppid) {
|
|
412
|
+
logger.warn(`Playwriter relay: refusing to send ${signal} to pid ${pid} -- it is this VisionClaw process (or its parent)`);
|
|
413
|
+
return false;
|
|
414
|
+
}
|
|
415
|
+
try {
|
|
416
|
+
process.kill(pid, signal);
|
|
417
|
+
return true;
|
|
418
|
+
}
|
|
419
|
+
catch {
|
|
420
|
+
return false;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
/** Poll until none of `pids` still LISTENs on `port` (true) or time runs out (false). */
|
|
424
|
+
async function waitForPortRelease(port, pids, timeoutMs) {
|
|
425
|
+
const deadline = Date.now() + timeoutMs;
|
|
426
|
+
for (;;) {
|
|
427
|
+
const holders = getPortListenerPids(port);
|
|
428
|
+
if (!pids.some((pid) => holders.includes(pid)))
|
|
429
|
+
return true;
|
|
430
|
+
if (Date.now() >= deadline)
|
|
431
|
+
return false;
|
|
432
|
+
await new Promise((r) => setTimeout(r, 120));
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Take the relay port back from a listener already fingerprinted as a stale
|
|
437
|
+
* Playwriter relay of ours.
|
|
438
|
+
*
|
|
439
|
+
* When `useNameDelete` is set, try `pm2 delete playwriter-relay` first: a
|
|
440
|
+
* stale relay is usually still pm2-managed (even when `jlist` cannot see it),
|
|
441
|
+
* and a NAME-scoped delete both kills it and stops pm2 from resurrecting it --
|
|
442
|
+
* while by construction it cannot touch any other pm2 app. Callers with a
|
|
443
|
+
* live listed canonical must NOT use it (the canonical shares the name and
|
|
444
|
+
* would be deleted too); they fall through to pid-level SIGTERM -> SIGKILL,
|
|
445
|
+
* each gated by {@link killPidSafely}. Returns whether the port was freed.
|
|
446
|
+
*/
|
|
447
|
+
async function reclaimRelayPort(port, holderPids, useNameDelete) {
|
|
448
|
+
if (useNameDelete) {
|
|
449
|
+
pm2Delete();
|
|
450
|
+
if (await waitForPortRelease(port, holderPids, 1_500))
|
|
451
|
+
return true;
|
|
452
|
+
}
|
|
453
|
+
const survivors = getPortListenerPids(port).filter((pid) => holderPids.includes(pid));
|
|
454
|
+
for (const pid of survivors)
|
|
455
|
+
killPidSafely(pid, "SIGTERM");
|
|
456
|
+
if (await waitForPortRelease(port, holderPids, 1_000))
|
|
457
|
+
return true;
|
|
458
|
+
const stubborn = getPortListenerPids(port).filter((pid) => holderPids.includes(pid));
|
|
459
|
+
for (const pid of stubborn)
|
|
460
|
+
killPidSafely(pid, "SIGKILL");
|
|
461
|
+
return waitForPortRelease(port, holderPids, 800);
|
|
462
|
+
}
|
|
463
|
+
/**
|
|
464
|
+
* Make sure the relay port is free for the caller's mutation (start/restart/
|
|
465
|
+
* recreate), returning whether it is safe to proceed.
|
|
466
|
+
*
|
|
467
|
+
* The old guard backed off from ANY unexpected listener, which was correct for
|
|
468
|
+
* genuinely foreign processes but wedged machines whose OWN stale relay held
|
|
469
|
+
* the port (an old version's process whose pm2 entry is gone, unreadable, or
|
|
470
|
+
* mis-attributed). Now the listener is fingerprinted first over HTTP: only a
|
|
471
|
+
* positive relay-shaped answer authorizes reclamation -- anything else keeps
|
|
472
|
+
* the conservative back-off. `canonical` is the currently listed relay entry
|
|
473
|
+
* (null when none): its own pid is never treated as a conflict, and its
|
|
474
|
+
* existence forces pid-level reclamation (see {@link reclaimRelayPort}).
|
|
475
|
+
*/
|
|
476
|
+
async function ensureRelayPortAvailable(host, port, canonical, action) {
|
|
477
|
+
const foreignPids = getForeignPortListenerPids(port, canonical?.pid);
|
|
272
478
|
if (foreignPids.length === 0)
|
|
479
|
+
return true;
|
|
480
|
+
const identity = await probeRelayPortIdentity(host, port);
|
|
481
|
+
if (identity.kind !== "relay") {
|
|
482
|
+
logger.warn(`Playwriter relay: port ${port} is held by a foreign process (pids: ${foreignPids.join(", ")}); `
|
|
483
|
+
+ `refusing to ${action} into an EADDRINUSE loop. Free the port, then the next reconcile will recover it.`);
|
|
273
484
|
return false;
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
485
|
+
}
|
|
486
|
+
logger.system(`Playwriter relay: port ${port} is held by a stale relay instance (pids: ${foreignPids.join(", ")}, `
|
|
487
|
+
+ `playwriter ${identity.playwriterVersion ?? "unknown"}); reclaiming it before we ${action}`);
|
|
488
|
+
const reclaimed = await reclaimRelayPort(port, foreignPids, canonical === null);
|
|
489
|
+
if (!reclaimed) {
|
|
490
|
+
logger.warn(`Playwriter relay: could not reclaim port ${port} from the stale relay (pids: ${foreignPids.join(", ")}); `
|
|
491
|
+
+ "skipping this mutation -- the next reconcile will retry.");
|
|
492
|
+
}
|
|
493
|
+
return reclaimed;
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Reconcile from the PORT when the pm2 process list is unreadable.
|
|
497
|
+
*
|
|
498
|
+
* This is the wedge {@link listPm2RelayProcessesChecked} detects: a skewed pm2
|
|
499
|
+
* CLI cannot read the daemon's state, yet that daemon may still be running a
|
|
500
|
+
* relay from an OLD VisionClaw version on the relay port. With no usable
|
|
501
|
+
* listing, identity comes from the port itself: fingerprint the listener,
|
|
502
|
+
* compare its `/version` against the playwriter version bundled here, and only
|
|
503
|
+
* a CONFIRMED stale relay is reclaimed (name-scoped pm2 delete, then guarded
|
|
504
|
+
* pid kills) and rebuilt. A current-version relay is left running, an
|
|
505
|
+
* unfingerprintable listener is left alone entirely, and an unreadable version
|
|
506
|
+
* comparison conservatively changes nothing -- every ambiguous case degrades
|
|
507
|
+
* to "log loudly, touch nothing".
|
|
508
|
+
*/
|
|
509
|
+
async function healUnlistablePm2State(host, port, expectedEntry) {
|
|
510
|
+
const holderPids = getPortListenerPids(port);
|
|
511
|
+
if (holderPids.length === 0) {
|
|
512
|
+
// Port free: any relay entries the unreadable daemon still tracks are dead
|
|
513
|
+
// weight. Sweep them by NAME (touches nothing but `playwriter-relay`
|
|
514
|
+
// entries, and works even when jlist does not), then start fresh.
|
|
515
|
+
logger.system("Playwriter relay: pm2 state unreadable and the relay port is free -- sweeping relay entries by name and starting fresh");
|
|
516
|
+
pm2Delete();
|
|
517
|
+
pm2Start(expectedEntry, host, port);
|
|
518
|
+
return;
|
|
519
|
+
}
|
|
520
|
+
const identity = await probeRelayPortIdentity(host, port);
|
|
521
|
+
if (identity.kind !== "relay") {
|
|
522
|
+
logger.warn(`Playwriter relay: pm2 state unreadable and port ${port} is held by a process that does not answer like a `
|
|
523
|
+
+ `Playwriter relay (pids: ${holderPids.join(", ")}); leaving it untouched. Free the port or run \`pm2 update\`, `
|
|
524
|
+
+ "then the next reconcile will recover.");
|
|
525
|
+
return;
|
|
526
|
+
}
|
|
527
|
+
const bundled = getBundledPlaywriterVersion();
|
|
528
|
+
if (identity.playwriterVersion !== undefined && bundled !== undefined && identity.playwriterVersion === bundled) {
|
|
529
|
+
logger.system(`Playwriter relay: pm2 state unreadable, but a current relay (playwriter ${bundled}) already holds port ${port} -- leaving it running`);
|
|
530
|
+
return;
|
|
531
|
+
}
|
|
532
|
+
if (identity.playwriterVersion === undefined || bundled === undefined) {
|
|
533
|
+
logger.warn(`Playwriter relay: pm2 state unreadable and the relay on port ${port} has an unverifiable version `
|
|
534
|
+
+ `(running: ${identity.playwriterVersion ?? "unknown"}, bundled: ${bundled ?? "unknown"}); leaving it untouched.`);
|
|
535
|
+
return;
|
|
536
|
+
}
|
|
537
|
+
logger.system(`Playwriter relay: pm2 state unreadable and a STALE relay (playwriter ${identity.playwriterVersion}, bundled ${bundled}) `
|
|
538
|
+
+ `holds port ${port} -- reclaiming it and rebuilding at the current version`);
|
|
539
|
+
if (!(await reclaimRelayPort(port, holderPids, true))) {
|
|
540
|
+
logger.warn(`Playwriter relay: could not reclaim port ${port} from the stale relay; will retry next reconcile`);
|
|
541
|
+
return;
|
|
542
|
+
}
|
|
543
|
+
pm2Start(expectedEntry, host, port);
|
|
277
544
|
}
|
|
278
545
|
/**
|
|
279
546
|
* Has this relay entered a crash loop? True once its rapid-restart count
|
|
@@ -640,15 +907,31 @@ export function invalidateRelayStatusCache() {
|
|
|
640
907
|
cachedStatus = null;
|
|
641
908
|
cachedStatusAt = 0;
|
|
642
909
|
}
|
|
643
|
-
|
|
910
|
+
/**
|
|
911
|
+
* Converge the pm2-managed relay to "one healthy process, current version,
|
|
912
|
+
* correct env". Async because recovery may need HTTP fingerprinting and port
|
|
913
|
+
* reclamation (see {@link ensureRelayPortAvailable} and
|
|
914
|
+
* {@link healUnlistablePm2State}).
|
|
915
|
+
*/
|
|
916
|
+
export async function reconcilePlaywriterRelay(host = "127.0.0.1", port = 19988) {
|
|
644
917
|
warnOnPm2VersionSkew();
|
|
645
918
|
const expectedEntry = resolveRelayEntryPath();
|
|
646
|
-
const
|
|
919
|
+
const listing = listPm2RelayProcessesChecked();
|
|
920
|
+
if (!listing.ok) {
|
|
921
|
+
// The pm2 state is unreadable (daemon down or CLI/daemon skew). The old
|
|
922
|
+
// behavior read this as "no relay exists", then backed off forever from
|
|
923
|
+
// the port its own stale relay was holding. Reconcile from the port
|
|
924
|
+
// instead.
|
|
925
|
+
await healUnlistablePm2State(host, port, expectedEntry);
|
|
926
|
+
return;
|
|
927
|
+
}
|
|
928
|
+
const current = selectAndPruneCanonicalRelay(listing.procs, expectedEntry);
|
|
647
929
|
if (!current) {
|
|
648
|
-
// Nothing managed by pm2
|
|
649
|
-
// port, spawning a binder here just crash-loops on EADDRINUSE.
|
|
650
|
-
//
|
|
651
|
-
|
|
930
|
+
// Nothing managed by pm2 -- but if some other process already holds the
|
|
931
|
+
// port, spawning a binder here just crash-loops on EADDRINUSE.
|
|
932
|
+
// ensureRelayPortAvailable reclaims the port when the holder is a stale
|
|
933
|
+
// relay of ours, and backs off when it is genuinely foreign.
|
|
934
|
+
if (!(await ensureRelayPortAvailable(host, port, null, "start the relay")))
|
|
652
935
|
return;
|
|
653
936
|
logger.system("Playwriter relay: starting new pm2 process");
|
|
654
937
|
pm2Start(expectedEntry, host, port);
|
|
@@ -657,9 +940,9 @@ export function reconcilePlaywriterRelay(host = "127.0.0.1", port = 19988) {
|
|
|
657
940
|
const currentPath = current.pm2_env?.pm_exec_path ?? "";
|
|
658
941
|
const currentStatus = current.pm2_env?.status ?? "";
|
|
659
942
|
if (currentPath !== expectedEntry) {
|
|
660
|
-
if (
|
|
943
|
+
if (!(await ensureRelayPortAvailable(host, port, current, "recreate after an entry-path change")))
|
|
661
944
|
return;
|
|
662
|
-
logger.system(`Playwriter relay: entry path changed (${currentPath}
|
|
945
|
+
logger.system(`Playwriter relay: entry path changed (${currentPath} -> ${expectedEntry}), recreating`);
|
|
663
946
|
pm2Delete();
|
|
664
947
|
pm2Start(expectedEntry, host, port);
|
|
665
948
|
return;
|
|
@@ -667,7 +950,7 @@ export function reconcilePlaywriterRelay(host = "127.0.0.1", port = 19988) {
|
|
|
667
950
|
const currentEnv = current.pm2_env?.env ?? {};
|
|
668
951
|
if (currentEnv.PLAYWRITER_RELAY_PORT !== String(port) ||
|
|
669
952
|
currentEnv.PLAYWRITER_RELAY_HOST !== host) {
|
|
670
|
-
if (
|
|
953
|
+
if (!(await ensureRelayPortAvailable(host, port, current, "restart with updated environment")))
|
|
671
954
|
return;
|
|
672
955
|
logger.system("Playwriter relay: env mismatch, restarting with updated env");
|
|
673
956
|
pm2Restart(host, port);
|
|
@@ -675,18 +958,18 @@ export function reconcilePlaywriterRelay(host = "127.0.0.1", port = 19988) {
|
|
|
675
958
|
}
|
|
676
959
|
const currentVersion = process.env.VISIONCLAW_BUNDLED_VERSION ?? "dev";
|
|
677
960
|
if (currentEnv.VISIONCLAW_VERSION && currentEnv.VISIONCLAW_VERSION !== currentVersion) {
|
|
678
|
-
if (
|
|
961
|
+
if (!(await ensureRelayPortAvailable(host, port, current, "recreate after a version change")))
|
|
679
962
|
return;
|
|
680
|
-
logger.system(`Playwriter relay: VisionClaw version changed (${currentEnv.VISIONCLAW_VERSION}
|
|
963
|
+
logger.system(`Playwriter relay: VisionClaw version changed (${currentEnv.VISIONCLAW_VERSION} -> ${currentVersion}), recreating`);
|
|
681
964
|
pm2Delete();
|
|
682
965
|
pm2Start(expectedEntry, host, port);
|
|
683
966
|
return;
|
|
684
967
|
}
|
|
685
968
|
if (currentStatus !== "online") {
|
|
686
969
|
// A relay that keeps failing to come up (classically: it cannot bind port
|
|
687
|
-
// 19988 because
|
|
970
|
+
// 19988 because another process holds it) must NOT be blindly restarted --
|
|
688
971
|
// that is exactly what drives the 1600+ restart pileups. Diagnose first.
|
|
689
|
-
if (
|
|
972
|
+
if (!(await ensureRelayPortAvailable(host, port, current, `recover from status "${currentStatus}"`)))
|
|
690
973
|
return;
|
|
691
974
|
if (isRelayCrashLooping(current)) {
|
|
692
975
|
const endpoint = `${host}:${port}`;
|
|
@@ -700,7 +983,7 @@ export function reconcilePlaywriterRelay(host = "127.0.0.1", port = 19988) {
|
|
|
700
983
|
// repeated reconciles cannot turn this into a delete/start loop.
|
|
701
984
|
crashLoopRecoveryAttempts.add(endpoint);
|
|
702
985
|
logger.warn(`Playwriter relay: status is "${currentStatus}" with ${current.pm2_env?.unstable_restarts ?? 0} unstable restarts `
|
|
703
|
-
+ `(${current.pm2_env?.restart_time ?? 0} total)
|
|
986
|
+
+ `(${current.pm2_env?.restart_time ?? 0} total) -- recreating once instead of restarting.`);
|
|
704
987
|
pm2Delete();
|
|
705
988
|
pm2Start(expectedEntry, host, port);
|
|
706
989
|
return;
|
|
@@ -713,7 +996,7 @@ export function reconcilePlaywriterRelay(host = "127.0.0.1", port = 19988) {
|
|
|
713
996
|
const relayInfo = getRelayInfoFromFile();
|
|
714
997
|
if (relayInfo?.relayProtocolVersion !== undefined &&
|
|
715
998
|
relayInfo.relayProtocolVersion < RELAY_PROTOCOL_VERSION) {
|
|
716
|
-
if (
|
|
999
|
+
if (!(await ensureRelayPortAvailable(host, port, current, "recreate after a protocol upgrade")))
|
|
717
1000
|
return;
|
|
718
1001
|
logger.system(`Playwriter relay: protocol version stale (${relayInfo.relayProtocolVersion} < ${RELAY_PROTOCOL_VERSION}), recreating`);
|
|
719
1002
|
pm2Delete();
|
|
@@ -727,7 +1010,7 @@ export async function ensurePlaywriterRelay(host = "127.0.0.1", port = 19988) {
|
|
|
727
1010
|
if (!hasPlaywriterExtension()) {
|
|
728
1011
|
throw new Error("Playwriter extension not configured (dedicated-profile External Extensions JSON missing). Run extension install first.");
|
|
729
1012
|
}
|
|
730
|
-
reconcilePlaywriterRelay(host, port);
|
|
1013
|
+
await reconcilePlaywriterRelay(host, port);
|
|
731
1014
|
const deadline = Date.now() + 15_000;
|
|
732
1015
|
while (Date.now() < deadline) {
|
|
733
1016
|
const status = await getPlaywriterRelayStatus(host, port);
|
|
@@ -748,12 +1031,23 @@ export async function ensurePlaywriterRelay(host = "127.0.0.1", port = 19988) {
|
|
|
748
1031
|
return finalStatus;
|
|
749
1032
|
}
|
|
750
1033
|
export function cleanupOrphanRelay() {
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
1034
|
+
const listing = listPm2RelayProcessesChecked();
|
|
1035
|
+
if (!listing.ok) {
|
|
1036
|
+
// The pm2 state is unreadable, so entries cannot be enumerated by id --
|
|
1037
|
+
// but a NAME-scoped delete still reaps every entry called
|
|
1038
|
+
// `playwriter-relay` (and can touch nothing else), even against a skewed
|
|
1039
|
+
// daemon.
|
|
1040
|
+
logger.system("Playwriter relay: pm2 state unreadable during cleanup -- deleting relay entries by name");
|
|
1041
|
+
pm2Delete();
|
|
1042
|
+
return;
|
|
1043
|
+
}
|
|
1044
|
+
// Enumerate ALL entries named `playwriter-relay`, not just the first --
|
|
1045
|
+
// legacy or race-created duplicates must all be reaped when the backend is
|
|
1046
|
+
// disabled, otherwise the leftovers crash-loop forever. Delete each by id so
|
|
1047
|
+
// we remove exactly the relay processes (delete-by-name would also work, but
|
|
1048
|
+
// by-id is consistent with the prune path and robust to any name-collision
|
|
1049
|
+
// surprises).
|
|
1050
|
+
const matches = listing.procs;
|
|
757
1051
|
if (matches.length === 0)
|
|
758
1052
|
return;
|
|
759
1053
|
logger.system(`Playwriter relay: cleaning up ${matches.length} orphan pm2 process(es) (backend disabled): `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwriter-relay.js","sourceRoot":"","sources":["../../src/utils/playwriter-relay.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"playwriter-relay.js","sourceRoot":"","sources":["../../src/utils/playwriter-relay.ts"],"names":[],"mappings":"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"}
|
package/dist-agent/bundle.cjs
CHANGED
|
@@ -20829,7 +20829,7 @@ var require_prompts3 = __commonJS({
|
|
|
20829
20829
|
|
|
20830
20830
|
// dist/utils/version-check.js
|
|
20831
20831
|
function isBundled() {
|
|
20832
|
-
const v16 = "0.1.206-beta.
|
|
20832
|
+
const v16 = "0.1.206-beta.18";
|
|
20833
20833
|
return typeof v16 === "string" && v16 !== "undefined";
|
|
20834
20834
|
}
|
|
20835
20835
|
function getPackageRoot() {
|
|
@@ -20846,7 +20846,7 @@ function getInstallationInfo() {
|
|
|
20846
20846
|
};
|
|
20847
20847
|
}
|
|
20848
20848
|
function getCurrentVersion() {
|
|
20849
|
-
const bundledVersion = "0.1.206-beta.
|
|
20849
|
+
const bundledVersion = "0.1.206-beta.18";
|
|
20850
20850
|
if (bundledVersion && bundledVersion !== "undefined") {
|
|
20851
20851
|
return bundledVersion;
|
|
20852
20852
|
}
|
|
@@ -990461,7 +990461,7 @@ var init_browser_launcher = __esm({
|
|
|
990461
990461
|
|
|
990462
990462
|
// dist/utils/playwriter-relay.js
|
|
990463
990463
|
function isBundled2() {
|
|
990464
|
-
const v16 = "0.1.206-beta.
|
|
990464
|
+
const v16 = "0.1.206-beta.18";
|
|
990465
990465
|
return typeof v16 === "string" && v16 !== "undefined";
|
|
990466
990466
|
}
|
|
990467
990467
|
function resolveRelayEntryPath() {
|
|
@@ -990514,18 +990514,39 @@ function warnOnPm2VersionSkew() {
|
|
|
990514
990514
|
logger.warn(`Playwriter relay: pm2 CLI (${cliVersion}) and daemon (${daemonVersion}) versions differ. This skew can cause jlist/control inconsistencies. Run \`pm2 update\` to reload the daemon (disruptive: it restarts all pm2-managed processes) when convenient.`);
|
|
990515
990515
|
}
|
|
990516
990516
|
}
|
|
990517
|
-
function
|
|
990518
|
-
|
|
990519
|
-
|
|
990520
|
-
|
|
990521
|
-
|
|
990522
|
-
|
|
990523
|
-
|
|
990524
|
-
|
|
990525
|
-
|
|
990526
|
-
|
|
990527
|
-
|
|
990517
|
+
function runPm2Jlist() {
|
|
990518
|
+
const output2 = (0, import_node_child_process19.execFileSync)("pm2", ["jlist"], {
|
|
990519
|
+
encoding: "utf-8",
|
|
990520
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
990521
|
+
timeout: 1e4
|
|
990522
|
+
});
|
|
990523
|
+
const lastLineStart = output2.lastIndexOf("\n[");
|
|
990524
|
+
if (lastLineStart >= 0) {
|
|
990525
|
+
try {
|
|
990526
|
+
return JSON.parse(output2.slice(lastLineStart + 1));
|
|
990527
|
+
} catch {
|
|
990528
|
+
}
|
|
990528
990529
|
}
|
|
990530
|
+
const start = output2.indexOf("[");
|
|
990531
|
+
if (start < 0)
|
|
990532
|
+
throw new Error(`pm2 jlist produced no JSON array: ${output2.slice(0, 200)}`);
|
|
990533
|
+
return JSON.parse(output2.slice(start));
|
|
990534
|
+
}
|
|
990535
|
+
function listPm2RelayProcessesChecked() {
|
|
990536
|
+
let lastError;
|
|
990537
|
+
for (let attempt = 0; attempt < 2; attempt++) {
|
|
990538
|
+
try {
|
|
990539
|
+
const processes = runPm2Jlist();
|
|
990540
|
+
return { ok: true, procs: processes.filter((p10) => p10.name === PM2_PROCESS_NAME) };
|
|
990541
|
+
} catch (err9) {
|
|
990542
|
+
if (err9.code === "ENOENT") {
|
|
990543
|
+
return { ok: true, procs: [] };
|
|
990544
|
+
}
|
|
990545
|
+
lastError = err9;
|
|
990546
|
+
}
|
|
990547
|
+
}
|
|
990548
|
+
logger.warn(`Playwriter relay: \`pm2 jlist\` failed twice; the pm2 process list is unreadable (${lastError instanceof Error ? lastError.message : String(lastError)}). This usually means the pm2 CLI and daemon are out of sync after an upgrade -- run \`pm2 update\` manually to reload the daemon (disruptive: it restarts ALL pm2-managed apps, including VisionClaw itself when pm2-managed). Falling back to port-based reconciliation.`);
|
|
990549
|
+
return { ok: false, procs: [] };
|
|
990529
990550
|
}
|
|
990530
990551
|
function pm2DeleteById(pmId) {
|
|
990531
990552
|
try {
|
|
@@ -990538,15 +990559,17 @@ function pm2DeleteById(pmId) {
|
|
|
990538
990559
|
logger.system(`Playwriter relay: pm2 delete id=${pmId} failed: ${err9 instanceof Error ? err9.message : String(err9)}`);
|
|
990539
990560
|
}
|
|
990540
990561
|
}
|
|
990541
|
-
function
|
|
990542
|
-
const matches = listPm2RelayProcesses();
|
|
990562
|
+
function selectAndPruneCanonicalRelay(matches, expectedEntry) {
|
|
990543
990563
|
if (matches.length === 0)
|
|
990544
990564
|
return null;
|
|
990545
990565
|
if (matches.length === 1)
|
|
990546
990566
|
return matches[0];
|
|
990547
|
-
const
|
|
990548
|
-
const
|
|
990549
|
-
|
|
990567
|
+
const score = (p10) => (p10.pm2_env?.pm_exec_path === expectedEntry ? 2 : 0) + (p10.pm2_env?.status === "online" ? 1 : 0);
|
|
990568
|
+
const canonical = matches.reduce((best, p10) => {
|
|
990569
|
+
if (score(p10) !== score(best))
|
|
990570
|
+
return score(p10) > score(best) ? p10 : best;
|
|
990571
|
+
return p10.pm_id > best.pm_id ? p10 : best;
|
|
990572
|
+
}, matches[0]);
|
|
990550
990573
|
const orphans = matches.filter((p10) => p10.pm_id !== canonical.pm_id);
|
|
990551
990574
|
logger.system(`Playwriter relay: found ${matches.length} pm2 entries named "${PM2_PROCESS_NAME}"; keeping pm_id=${canonical.pm_id} (status=${canonical.pm2_env?.status ?? "?"}), pruning ${orphans.length} duplicate(s): ${orphans.map((p10) => p10.pm_id).join(", ")}`);
|
|
990552
990575
|
for (const orphan of orphans) {
|
|
@@ -990564,7 +990587,7 @@ function getPm2RelayProcess() {
|
|
|
990564
990587
|
return canonical;
|
|
990565
990588
|
}
|
|
990566
990589
|
function pm2Start(entryPath, host, port) {
|
|
990567
|
-
const versionStr = "0.1.206-beta.
|
|
990590
|
+
const versionStr = "0.1.206-beta.18";
|
|
990568
990591
|
(0, import_node_child_process19.execFileSync)("pm2", ["start", entryPath, "--name", PM2_PROCESS_NAME, "--update-env"], {
|
|
990569
990592
|
encoding: "utf-8",
|
|
990570
990593
|
stdio: "pipe",
|
|
@@ -990590,7 +990613,7 @@ function pm2Delete() {
|
|
|
990590
990613
|
}
|
|
990591
990614
|
}
|
|
990592
990615
|
function pm2Restart(host, port) {
|
|
990593
|
-
const versionStr = "0.1.206-beta.
|
|
990616
|
+
const versionStr = "0.1.206-beta.18";
|
|
990594
990617
|
(0, import_node_child_process19.execFileSync)("pm2", ["restart", PM2_PROCESS_NAME, "--update-env"], {
|
|
990595
990618
|
encoding: "utf-8",
|
|
990596
990619
|
stdio: "pipe",
|
|
@@ -990619,12 +990642,145 @@ function getPortListenerPids(port) {
|
|
|
990619
990642
|
function getForeignPortListenerPids(port, canonicalPid) {
|
|
990620
990643
|
return getPortListenerPids(port).filter((pid) => pid !== canonicalPid);
|
|
990621
990644
|
}
|
|
990622
|
-
function
|
|
990623
|
-
|
|
990645
|
+
async function probeRelayPlaywriterVersion(host, port) {
|
|
990646
|
+
try {
|
|
990647
|
+
const response = await fetch(`${getRelayBaseUrl(host, port)}/version`, {
|
|
990648
|
+
signal: AbortSignal.timeout(1500)
|
|
990649
|
+
});
|
|
990650
|
+
if (!response.ok)
|
|
990651
|
+
return void 0;
|
|
990652
|
+
const text = await response.text();
|
|
990653
|
+
try {
|
|
990654
|
+
const parsed = JSON.parse(text);
|
|
990655
|
+
if (typeof parsed.version === "string" && parsed.version.length > 0)
|
|
990656
|
+
return parsed.version;
|
|
990657
|
+
} catch {
|
|
990658
|
+
}
|
|
990659
|
+
return /\d+\.\d+\.\d+[-.\w]*/.exec(text)?.[0];
|
|
990660
|
+
} catch {
|
|
990661
|
+
return void 0;
|
|
990662
|
+
}
|
|
990663
|
+
}
|
|
990664
|
+
async function probeRelayPortIdentity(host, port) {
|
|
990665
|
+
const base = getRelayBaseUrl(host, port);
|
|
990666
|
+
try {
|
|
990667
|
+
const response = await fetch(`${base}/extensions/status`, { signal: AbortSignal.timeout(1500) });
|
|
990668
|
+
if (response.ok) {
|
|
990669
|
+
const body = await response.json();
|
|
990670
|
+
if (Array.isArray(body.extensions)) {
|
|
990671
|
+
return { kind: "relay", playwriterVersion: await probeRelayPlaywriterVersion(host, port) };
|
|
990672
|
+
}
|
|
990673
|
+
}
|
|
990674
|
+
} catch {
|
|
990675
|
+
}
|
|
990676
|
+
try {
|
|
990677
|
+
const response = await fetch(`${base}/extension/status`, { signal: AbortSignal.timeout(1500) });
|
|
990678
|
+
if (response.ok) {
|
|
990679
|
+
const body = await response.json();
|
|
990680
|
+
if (typeof body.connected === "boolean") {
|
|
990681
|
+
return { kind: "relay", playwriterVersion: await probeRelayPlaywriterVersion(host, port) };
|
|
990682
|
+
}
|
|
990683
|
+
}
|
|
990684
|
+
} catch {
|
|
990685
|
+
}
|
|
990686
|
+
return { kind: "unknown" };
|
|
990687
|
+
}
|
|
990688
|
+
function getBundledPlaywriterVersion() {
|
|
990689
|
+
try {
|
|
990690
|
+
const __dir = import_node_path45.default.dirname((0, import_node_url4.fileURLToPath)(__importMetaUrl));
|
|
990691
|
+
const packageRoot = import_node_path45.default.resolve(__dir, isBundled2() ? ".." : "../..");
|
|
990692
|
+
const pkgPath = import_node_path45.default.join(packageRoot, "node_modules", "playwriter", "package.json");
|
|
990693
|
+
const parsed = JSON.parse((0, import_node_fs38.readFileSync)(pkgPath, "utf-8"));
|
|
990694
|
+
return typeof parsed.version === "string" && parsed.version.length > 0 ? parsed.version : void 0;
|
|
990695
|
+
} catch {
|
|
990696
|
+
return void 0;
|
|
990697
|
+
}
|
|
990698
|
+
}
|
|
990699
|
+
function killPidSafely(pid, signal) {
|
|
990700
|
+
if (!Number.isInteger(pid) || pid <= 1)
|
|
990701
|
+
return false;
|
|
990702
|
+
if (pid === process.pid || pid === process.ppid) {
|
|
990703
|
+
logger.warn(`Playwriter relay: refusing to send ${signal} to pid ${pid} -- it is this VisionClaw process (or its parent)`);
|
|
990704
|
+
return false;
|
|
990705
|
+
}
|
|
990706
|
+
try {
|
|
990707
|
+
process.kill(pid, signal);
|
|
990708
|
+
return true;
|
|
990709
|
+
} catch {
|
|
990710
|
+
return false;
|
|
990711
|
+
}
|
|
990712
|
+
}
|
|
990713
|
+
async function waitForPortRelease(port, pids, timeoutMs) {
|
|
990714
|
+
const deadline = Date.now() + timeoutMs;
|
|
990715
|
+
for (; ; ) {
|
|
990716
|
+
const holders = getPortListenerPids(port);
|
|
990717
|
+
if (!pids.some((pid) => holders.includes(pid)))
|
|
990718
|
+
return true;
|
|
990719
|
+
if (Date.now() >= deadline)
|
|
990720
|
+
return false;
|
|
990721
|
+
await new Promise((r12) => setTimeout(r12, 120));
|
|
990722
|
+
}
|
|
990723
|
+
}
|
|
990724
|
+
async function reclaimRelayPort(port, holderPids, useNameDelete) {
|
|
990725
|
+
if (useNameDelete) {
|
|
990726
|
+
pm2Delete();
|
|
990727
|
+
if (await waitForPortRelease(port, holderPids, 1500))
|
|
990728
|
+
return true;
|
|
990729
|
+
}
|
|
990730
|
+
const survivors = getPortListenerPids(port).filter((pid) => holderPids.includes(pid));
|
|
990731
|
+
for (const pid of survivors)
|
|
990732
|
+
killPidSafely(pid, "SIGTERM");
|
|
990733
|
+
if (await waitForPortRelease(port, holderPids, 1e3))
|
|
990734
|
+
return true;
|
|
990735
|
+
const stubborn = getPortListenerPids(port).filter((pid) => holderPids.includes(pid));
|
|
990736
|
+
for (const pid of stubborn)
|
|
990737
|
+
killPidSafely(pid, "SIGKILL");
|
|
990738
|
+
return waitForPortRelease(port, holderPids, 800);
|
|
990739
|
+
}
|
|
990740
|
+
async function ensureRelayPortAvailable(host, port, canonical, action2) {
|
|
990741
|
+
const foreignPids = getForeignPortListenerPids(port, canonical?.pid);
|
|
990624
990742
|
if (foreignPids.length === 0)
|
|
990743
|
+
return true;
|
|
990744
|
+
const identity = await probeRelayPortIdentity(host, port);
|
|
990745
|
+
if (identity.kind !== "relay") {
|
|
990746
|
+
logger.warn(`Playwriter relay: port ${port} is held by a foreign process (pids: ${foreignPids.join(", ")}); refusing to ${action2} into an EADDRINUSE loop. Free the port, then the next reconcile will recover it.`);
|
|
990625
990747
|
return false;
|
|
990626
|
-
|
|
990627
|
-
|
|
990748
|
+
}
|
|
990749
|
+
logger.system(`Playwriter relay: port ${port} is held by a stale relay instance (pids: ${foreignPids.join(", ")}, playwriter ${identity.playwriterVersion ?? "unknown"}); reclaiming it before we ${action2}`);
|
|
990750
|
+
const reclaimed = await reclaimRelayPort(port, foreignPids, canonical === null);
|
|
990751
|
+
if (!reclaimed) {
|
|
990752
|
+
logger.warn(`Playwriter relay: could not reclaim port ${port} from the stale relay (pids: ${foreignPids.join(", ")}); skipping this mutation -- the next reconcile will retry.`);
|
|
990753
|
+
}
|
|
990754
|
+
return reclaimed;
|
|
990755
|
+
}
|
|
990756
|
+
async function healUnlistablePm2State(host, port, expectedEntry) {
|
|
990757
|
+
const holderPids = getPortListenerPids(port);
|
|
990758
|
+
if (holderPids.length === 0) {
|
|
990759
|
+
logger.system("Playwriter relay: pm2 state unreadable and the relay port is free -- sweeping relay entries by name and starting fresh");
|
|
990760
|
+
pm2Delete();
|
|
990761
|
+
pm2Start(expectedEntry, host, port);
|
|
990762
|
+
return;
|
|
990763
|
+
}
|
|
990764
|
+
const identity = await probeRelayPortIdentity(host, port);
|
|
990765
|
+
if (identity.kind !== "relay") {
|
|
990766
|
+
logger.warn(`Playwriter relay: pm2 state unreadable and port ${port} is held by a process that does not answer like a Playwriter relay (pids: ${holderPids.join(", ")}); leaving it untouched. Free the port or run \`pm2 update\`, then the next reconcile will recover.`);
|
|
990767
|
+
return;
|
|
990768
|
+
}
|
|
990769
|
+
const bundled = getBundledPlaywriterVersion();
|
|
990770
|
+
if (identity.playwriterVersion !== void 0 && bundled !== void 0 && identity.playwriterVersion === bundled) {
|
|
990771
|
+
logger.system(`Playwriter relay: pm2 state unreadable, but a current relay (playwriter ${bundled}) already holds port ${port} -- leaving it running`);
|
|
990772
|
+
return;
|
|
990773
|
+
}
|
|
990774
|
+
if (identity.playwriterVersion === void 0 || bundled === void 0) {
|
|
990775
|
+
logger.warn(`Playwriter relay: pm2 state unreadable and the relay on port ${port} has an unverifiable version (running: ${identity.playwriterVersion ?? "unknown"}, bundled: ${bundled ?? "unknown"}); leaving it untouched.`);
|
|
990776
|
+
return;
|
|
990777
|
+
}
|
|
990778
|
+
logger.system(`Playwriter relay: pm2 state unreadable and a STALE relay (playwriter ${identity.playwriterVersion}, bundled ${bundled}) holds port ${port} -- reclaiming it and rebuilding at the current version`);
|
|
990779
|
+
if (!await reclaimRelayPort(port, holderPids, true)) {
|
|
990780
|
+
logger.warn(`Playwriter relay: could not reclaim port ${port} from the stale relay; will retry next reconcile`);
|
|
990781
|
+
return;
|
|
990782
|
+
}
|
|
990783
|
+
pm2Start(expectedEntry, host, port);
|
|
990628
990784
|
}
|
|
990629
990785
|
function isRelayCrashLooping(proc) {
|
|
990630
990786
|
const unstable = proc.pm2_env?.unstable_restarts ?? 0;
|
|
@@ -990821,12 +990977,17 @@ function invalidateRelayStatusCache() {
|
|
|
990821
990977
|
cachedStatus = null;
|
|
990822
990978
|
cachedStatusAt = 0;
|
|
990823
990979
|
}
|
|
990824
|
-
function reconcilePlaywriterRelay(host = "127.0.0.1", port = 19988) {
|
|
990980
|
+
async function reconcilePlaywriterRelay(host = "127.0.0.1", port = 19988) {
|
|
990825
990981
|
warnOnPm2VersionSkew();
|
|
990826
990982
|
const expectedEntry = resolveRelayEntryPath();
|
|
990827
|
-
const
|
|
990983
|
+
const listing = listPm2RelayProcessesChecked();
|
|
990984
|
+
if (!listing.ok) {
|
|
990985
|
+
await healUnlistablePm2State(host, port, expectedEntry);
|
|
990986
|
+
return;
|
|
990987
|
+
}
|
|
990988
|
+
const current = selectAndPruneCanonicalRelay(listing.procs, expectedEntry);
|
|
990828
990989
|
if (!current) {
|
|
990829
|
-
if (
|
|
990990
|
+
if (!await ensureRelayPortAvailable(host, port, null, "start the relay"))
|
|
990830
990991
|
return;
|
|
990831
990992
|
logger.system("Playwriter relay: starting new pm2 process");
|
|
990832
990993
|
pm2Start(expectedEntry, host, port);
|
|
@@ -990835,32 +990996,32 @@ function reconcilePlaywriterRelay(host = "127.0.0.1", port = 19988) {
|
|
|
990835
990996
|
const currentPath = current.pm2_env?.pm_exec_path ?? "";
|
|
990836
990997
|
const currentStatus = current.pm2_env?.status ?? "";
|
|
990837
990998
|
if (currentPath !== expectedEntry) {
|
|
990838
|
-
if (
|
|
990999
|
+
if (!await ensureRelayPortAvailable(host, port, current, "recreate after an entry-path change"))
|
|
990839
991000
|
return;
|
|
990840
|
-
logger.system(`Playwriter relay: entry path changed (${currentPath}
|
|
991001
|
+
logger.system(`Playwriter relay: entry path changed (${currentPath} -> ${expectedEntry}), recreating`);
|
|
990841
991002
|
pm2Delete();
|
|
990842
991003
|
pm2Start(expectedEntry, host, port);
|
|
990843
991004
|
return;
|
|
990844
991005
|
}
|
|
990845
991006
|
const currentEnv = current.pm2_env?.env ?? {};
|
|
990846
991007
|
if (currentEnv.PLAYWRITER_RELAY_PORT !== String(port) || currentEnv.PLAYWRITER_RELAY_HOST !== host) {
|
|
990847
|
-
if (
|
|
991008
|
+
if (!await ensureRelayPortAvailable(host, port, current, "restart with updated environment"))
|
|
990848
991009
|
return;
|
|
990849
991010
|
logger.system("Playwriter relay: env mismatch, restarting with updated env");
|
|
990850
991011
|
pm2Restart(host, port);
|
|
990851
991012
|
return;
|
|
990852
991013
|
}
|
|
990853
|
-
const currentVersion = "0.1.206-beta.
|
|
991014
|
+
const currentVersion = "0.1.206-beta.18";
|
|
990854
991015
|
if (currentEnv.VISIONCLAW_VERSION && currentEnv.VISIONCLAW_VERSION !== currentVersion) {
|
|
990855
|
-
if (
|
|
991016
|
+
if (!await ensureRelayPortAvailable(host, port, current, "recreate after a version change"))
|
|
990856
991017
|
return;
|
|
990857
|
-
logger.system(`Playwriter relay: VisionClaw version changed (${currentEnv.VISIONCLAW_VERSION}
|
|
991018
|
+
logger.system(`Playwriter relay: VisionClaw version changed (${currentEnv.VISIONCLAW_VERSION} -> ${currentVersion}), recreating`);
|
|
990858
991019
|
pm2Delete();
|
|
990859
991020
|
pm2Start(expectedEntry, host, port);
|
|
990860
991021
|
return;
|
|
990861
991022
|
}
|
|
990862
991023
|
if (currentStatus !== "online") {
|
|
990863
|
-
if (
|
|
991024
|
+
if (!await ensureRelayPortAvailable(host, port, current, `recover from status "${currentStatus}"`))
|
|
990864
991025
|
return;
|
|
990865
991026
|
if (isRelayCrashLooping(current)) {
|
|
990866
991027
|
const endpoint = `${host}:${port}`;
|
|
@@ -990869,7 +991030,7 @@ function reconcilePlaywriterRelay(host = "127.0.0.1", port = 19988) {
|
|
|
990869
991030
|
return;
|
|
990870
991031
|
}
|
|
990871
991032
|
crashLoopRecoveryAttempts.add(endpoint);
|
|
990872
|
-
logger.warn(`Playwriter relay: status is "${currentStatus}" with ${current.pm2_env?.unstable_restarts ?? 0} unstable restarts (${current.pm2_env?.restart_time ?? 0} total)
|
|
991033
|
+
logger.warn(`Playwriter relay: status is "${currentStatus}" with ${current.pm2_env?.unstable_restarts ?? 0} unstable restarts (${current.pm2_env?.restart_time ?? 0} total) -- recreating once instead of restarting.`);
|
|
990873
991034
|
pm2Delete();
|
|
990874
991035
|
pm2Start(expectedEntry, host, port);
|
|
990875
991036
|
return;
|
|
@@ -990881,7 +991042,7 @@ function reconcilePlaywriterRelay(host = "127.0.0.1", port = 19988) {
|
|
|
990881
991042
|
crashLoopRecoveryAttempts.delete(`${host}:${port}`);
|
|
990882
991043
|
const relayInfo = getRelayInfoFromFile();
|
|
990883
991044
|
if (relayInfo?.relayProtocolVersion !== void 0 && relayInfo.relayProtocolVersion < RELAY_PROTOCOL_VERSION) {
|
|
990884
|
-
if (
|
|
991045
|
+
if (!await ensureRelayPortAvailable(host, port, current, "recreate after a protocol upgrade"))
|
|
990885
991046
|
return;
|
|
990886
991047
|
logger.system(`Playwriter relay: protocol version stale (${relayInfo.relayProtocolVersion} < ${RELAY_PROTOCOL_VERSION}), recreating`);
|
|
990887
991048
|
pm2Delete();
|
|
@@ -990895,7 +991056,7 @@ async function ensurePlaywriterRelay(host = "127.0.0.1", port = 19988) {
|
|
|
990895
991056
|
if (!hasPlaywriterExtension()) {
|
|
990896
991057
|
throw new Error("Playwriter extension not configured (dedicated-profile External Extensions JSON missing). Run extension install first.");
|
|
990897
991058
|
}
|
|
990898
|
-
reconcilePlaywriterRelay(host, port);
|
|
991059
|
+
await reconcilePlaywriterRelay(host, port);
|
|
990899
991060
|
const deadline = Date.now() + 15e3;
|
|
990900
991061
|
while (Date.now() < deadline) {
|
|
990901
991062
|
const status = await getPlaywriterRelayStatus(host, port);
|
|
@@ -990912,7 +991073,13 @@ async function ensurePlaywriterRelay(host = "127.0.0.1", port = 19988) {
|
|
|
990912
991073
|
return finalStatus;
|
|
990913
991074
|
}
|
|
990914
991075
|
function cleanupOrphanRelay() {
|
|
990915
|
-
const
|
|
991076
|
+
const listing = listPm2RelayProcessesChecked();
|
|
991077
|
+
if (!listing.ok) {
|
|
991078
|
+
logger.system("Playwriter relay: pm2 state unreadable during cleanup -- deleting relay entries by name");
|
|
991079
|
+
pm2Delete();
|
|
991080
|
+
return;
|
|
991081
|
+
}
|
|
991082
|
+
const matches = listing.procs;
|
|
990916
991083
|
if (matches.length === 0)
|
|
990917
991084
|
return;
|
|
990918
991085
|
logger.system(`Playwriter relay: cleaning up ${matches.length} orphan pm2 process(es) (backend disabled): ` + matches.map((p10) => p10.pm_id).join(", "));
|
|
@@ -991058,7 +991225,7 @@ async function ensureBrowserForTool(options2) {
|
|
|
991058
991225
|
if (!status.reachable) {
|
|
991059
991226
|
logger.system("Playwriter relay unreachable \u2014 reconciling");
|
|
991060
991227
|
invalidateRelayStatusCache();
|
|
991061
|
-
reconcilePlaywriterRelay(host, port);
|
|
991228
|
+
await reconcilePlaywriterRelay(host, port);
|
|
991062
991229
|
}
|
|
991063
991230
|
if (status.extensionConnected) {
|
|
991064
991231
|
const diagnosis2 = await waitForSingleRelayExtension(host, port);
|
|
@@ -1406091,7 +1406258,7 @@ async function bringUpPlaywriterLazily(host, port) {
|
|
|
1406091
1406258
|
if (!isPlaywriterExtensionAvailable()) {
|
|
1406092
1406259
|
return { viable: false, mode: "deferred" };
|
|
1406093
1406260
|
}
|
|
1406094
|
-
reconcilePlaywriterRelay(host, port);
|
|
1406261
|
+
await reconcilePlaywriterRelay(host, port);
|
|
1406095
1406262
|
return { viable: true, mode: "deferred" };
|
|
1406096
1406263
|
}
|
|
1406097
1406264
|
async function detectBrowserBackend(config3) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "visionclaw",
|
|
3
|
-
"version": "0.1.206-beta.
|
|
3
|
+
"version": "0.1.206-beta.18",
|
|
4
4
|
"description": "A personal assistant agent that runs on your desktop, receives commands from messaging channels, and executes tasks autonomously.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|