visionclaw 0.1.200-dev.feat-issue-534-browser-singleton.1 → 0.1.200-dev.feat-issue-534-browser-singleton.2

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.
@@ -20570,7 +20570,7 @@ var require_prompts3 = __commonJS({
20570
20570
 
20571
20571
  // dist/utils/version-check.js
20572
20572
  function isBundled() {
20573
- const v14 = "0.1.200-dev.feat-issue-534-browser-singleton.1";
20573
+ const v14 = "0.1.200-dev.feat-issue-534-browser-singleton.2";
20574
20574
  return typeof v14 === "string" && v14 !== "undefined";
20575
20575
  }
20576
20576
  function getPackageRoot() {
@@ -20587,7 +20587,7 @@ function getInstallationInfo() {
20587
20587
  };
20588
20588
  }
20589
20589
  function getCurrentVersion() {
20590
- const bundledVersion = "0.1.200-dev.feat-issue-534-browser-singleton.1";
20590
+ const bundledVersion = "0.1.200-dev.feat-issue-534-browser-singleton.2";
20591
20591
  if (bundledVersion && bundledVersion !== "undefined") {
20592
20592
  return bundledVersion;
20593
20593
  }
@@ -31540,13 +31540,17 @@ var init_generate_wallpaper = __esm({
31540
31540
  });
31541
31541
 
31542
31542
  // dist/onboarding/playwriter-extension.js
31543
- function resolveBundledExtensionDir() {
31543
+ function getExpectedExtensionJson() {
31544
+ return JSON.stringify({ external_update_url: PLAYWRITER_UPDATE_URL }, null, 2);
31545
+ }
31546
+ function isExtensionJsonValid(jsonPath) {
31547
+ if (!(0, import_node_fs13.existsSync)(jsonPath))
31548
+ return false;
31544
31549
  try {
31545
- const require4 = (0, import_node_module.createRequire)(__importMetaUrl);
31546
- const extDir = (0, import_node_path12.join)((0, import_node_path12.dirname)(require4.resolve("playwriter/package.json")), "dist", "extension");
31547
- return (0, import_node_fs13.existsSync)((0, import_node_path12.join)(extDir, "manifest.json")) ? extDir : null;
31550
+ const parsed = JSON.parse((0, import_node_fs13.readFileSync)(jsonPath, "utf-8"));
31551
+ return parsed.external_update_url === PLAYWRITER_UPDATE_URL;
31548
31552
  } catch {
31549
- return null;
31553
+ return false;
31550
31554
  }
31551
31555
  }
31552
31556
  function getChromeExternalExtensionsDir() {
@@ -31559,7 +31563,7 @@ function getProfileExtensionJsonPath() {
31559
31563
  return (0, import_node_path12.join)(getPlaywriterProfileDir(), "External Extensions", `${PLAYWRITER_EXTENSION_ID}.json`);
31560
31564
  }
31561
31565
  function isPlaywriterExtensionAvailable() {
31562
- return resolveBundledExtensionDir() !== null;
31566
+ return isExtensionJsonValid(getProfileExtensionJsonPath());
31563
31567
  }
31564
31568
  function cleanPlaywriterExternalUninstalls(profileDir = getPlaywriterProfileDir()) {
31565
31569
  const prefsPath = (0, import_node_path12.join)(profileDir, "Default", "Preferences");
@@ -31602,15 +31606,23 @@ function ensurePlaywriterExtension() {
31602
31606
  logger.system(`Playwriter: legacy enterprise policy removed`);
31603
31607
  }
31604
31608
  }
31605
- for (const jsonPath of [getExtensionJsonPath(), getProfileExtensionJsonPath()]) {
31606
- try {
31607
- if ((0, import_node_fs13.existsSync)(jsonPath)) {
31608
- (0, import_node_fs13.rmSync)(jsonPath);
31609
- logger.system(`Playwriter: removed legacy External Extensions JSON (${jsonPath})`);
31610
- }
31611
- } catch (err9) {
31612
- logger.system(`Playwriter: failed to remove legacy External Extensions JSON: ${err9 instanceof Error ? err9.message : String(err9)}`);
31609
+ const systemJsonPath = getExtensionJsonPath();
31610
+ try {
31611
+ if ((0, import_node_fs13.existsSync)(systemJsonPath)) {
31612
+ (0, import_node_fs13.rmSync)(systemJsonPath);
31613
+ logger.system(`Playwriter: removed legacy system External Extensions JSON (${systemJsonPath})`);
31613
31614
  }
31615
+ } catch (err9) {
31616
+ logger.system(`Playwriter: failed to remove legacy system External Extensions JSON: ${err9 instanceof Error ? err9.message : String(err9)}`);
31617
+ }
31618
+ try {
31619
+ const profileExtDir = (0, import_node_path12.join)(getPlaywriterProfileDir(), "External Extensions");
31620
+ (0, import_node_fs13.mkdirSync)(profileExtDir, { recursive: true });
31621
+ (0, import_node_fs13.writeFileSync)((0, import_node_path12.join)(profileExtDir, `${PLAYWRITER_EXTENSION_ID}.json`), getExpectedExtensionJson(), "utf-8");
31622
+ logger.system("Playwriter: wrote External Extensions JSON to dedicated profile");
31623
+ } catch (err9) {
31624
+ logger.system(`Playwriter: failed to write External Extensions JSON: ${err9 instanceof Error ? err9.message : String(err9)}`);
31625
+ return false;
31614
31626
  }
31615
31627
  return isPlaywriterExtensionAvailable();
31616
31628
  }
@@ -31670,18 +31682,18 @@ function scrubPlaywriterFromPolicyPlist(plistPath) {
31670
31682
  } catch {
31671
31683
  }
31672
31684
  }
31673
- var import_node_child_process6, import_node_fs13, import_node_module, import_node_os7, import_node_path12, PLAYWRITER_EXTENSION_ID;
31685
+ var import_node_child_process6, import_node_fs13, import_node_os7, import_node_path12, PLAYWRITER_EXTENSION_ID, PLAYWRITER_UPDATE_URL;
31674
31686
  var init_playwriter_extension = __esm({
31675
31687
  "dist/onboarding/playwriter-extension.js"() {
31676
31688
  "use strict";
31677
31689
  import_node_child_process6 = require("node:child_process");
31678
31690
  import_node_fs13 = require("node:fs");
31679
- import_node_module = require("node:module");
31680
31691
  import_node_os7 = require("node:os");
31681
31692
  import_node_path12 = require("node:path");
31682
31693
  init_config();
31683
31694
  init_logger();
31684
31695
  PLAYWRITER_EXTENSION_ID = "jfeammnjpkecdekppnclgkkffahnhfhe";
31696
+ PLAYWRITER_UPDATE_URL = "https://clients2.google.com/service/update2/crx";
31685
31697
  }
31686
31698
  });
31687
31699
 
@@ -32648,10 +32660,10 @@ function isPlaywriterPolicyConfigured2() {
32648
32660
  }
32649
32661
  function _checkPlaywriterExtension() {
32650
32662
  heading("Playwriter Extension");
32651
- if (isPlaywriterExtensionAvailable()) {
32652
- ok3("Playwriter extension resolved from bundled package (loaded via --load-extension at runtime).");
32663
+ if (ensurePlaywriterExtension()) {
32664
+ ok3("Playwriter extension configured for the dedicated automation profile (External Extensions JSON).");
32653
32665
  } else {
32654
- fail3("Playwriter bundled extension not resolvable \u2014 reinstall dependencies.");
32666
+ fail3("Failed to configure Playwriter extension for the automation profile.");
32655
32667
  }
32656
32668
  if (isPlaywriterPolicyConfigured2()) {
32657
32669
  warn3("Legacy Playwriter enterprise policy detected \u2014 removing it.");
@@ -694276,10 +694288,10 @@ async function setupSkills(ctx) {
694276
694288
  try {
694277
694289
  const versionId = await resolveSkillVersion(client, skill.skill_id, skill.version);
694278
694290
  const version6 = await client.beta.skills.versions.retrieve(versionId, { skill_id: skill.skill_id });
694279
- let dirname34 = path16.basename(version6.name.trim());
694280
- if (dirname34 === "" || dirname34 === "." || dirname34 === "..")
694281
- dirname34 = skill.skill_id;
694282
- const dest = path16.resolve(skillsRoot, dirname34);
694291
+ let dirname33 = path16.basename(version6.name.trim());
694292
+ if (dirname33 === "" || dirname33 === "." || dirname33 === "..")
694293
+ dirname33 = skill.skill_id;
694294
+ const dest = path16.resolve(skillsRoot, dirname33);
694283
694295
  if (dest !== skillsRoot && !dest.startsWith(skillsRoot + path16.sep)) {
694284
694296
  log.warn("skill name escapes the skills dir; skipping", {
694285
694297
  component: "agent-tool-context",
@@ -724633,12 +724645,12 @@ var import_node_path24, getNodeModulesParentDirs;
724633
724645
  var init_getNodeModulesParentDirs = __esm({
724634
724646
  "node_modules/.pnpm/@aws-sdk+core@3.974.11/node_modules/@aws-sdk/core/dist-es/submodules/client/util-user-agent-node/getNodeModulesParentDirs.js"() {
724635
724647
  import_node_path24 = require("node:path");
724636
- getNodeModulesParentDirs = (dirname34) => {
724648
+ getNodeModulesParentDirs = (dirname33) => {
724637
724649
  const cwd = process.cwd();
724638
- if (!dirname34) {
724650
+ if (!dirname33) {
724639
724651
  return [cwd];
724640
724652
  }
724641
- const normalizedPath = (0, import_node_path24.normalize)(dirname34);
724653
+ const normalizedPath = (0, import_node_path24.normalize)(dirname33);
724642
724654
  const parts = normalizedPath.split(import_node_path24.sep);
724643
724655
  const nodeModulesIndex = parts.indexOf("node_modules");
724644
724656
  const parentDir = nodeModulesIndex !== -1 ? parts.slice(0, nodeModulesIndex).join(import_node_path24.sep) : normalizedPath;
@@ -724713,8 +724725,8 @@ var init_getTypeScriptUserAgentPair = __esm({
724713
724725
  tscVersion = null;
724714
724726
  return void 0;
724715
724727
  }
724716
- const dirname34 = typeof __dirname !== "undefined" ? __dirname : void 0;
724717
- const nodeModulesParentDirs = getNodeModulesParentDirs(dirname34);
724728
+ const dirname33 = typeof __dirname !== "undefined" ? __dirname : void 0;
724729
+ const nodeModulesParentDirs = getNodeModulesParentDirs(dirname33);
724718
724730
  let versionFromApp;
724719
724731
  for (const nodeModulesParentDir of nodeModulesParentDirs) {
724720
724732
  try {
@@ -738546,12 +738558,12 @@ var require_dist_cjs65 = __commonJS({
738546
738558
  }
738547
738559
  return ["md/nodejs", node_process.versions.node];
738548
738560
  };
738549
- var getNodeModulesParentDirs2 = (dirname34) => {
738561
+ var getNodeModulesParentDirs2 = (dirname33) => {
738550
738562
  const cwd = process.cwd();
738551
- if (!dirname34) {
738563
+ if (!dirname33) {
738552
738564
  return [cwd];
738553
738565
  }
738554
- const normalizedPath = node_path.normalize(dirname34);
738566
+ const normalizedPath = node_path.normalize(dirname33);
738555
738567
  const parts = normalizedPath.split(node_path.sep);
738556
738568
  const nodeModulesIndex = parts.indexOf("node_modules");
738557
738569
  const parentDir = nodeModulesIndex !== -1 ? parts.slice(0, nodeModulesIndex).join(node_path.sep) : normalizedPath;
@@ -738599,8 +738611,8 @@ var require_dist_cjs65 = __commonJS({
738599
738611
  tscVersion2 = null;
738600
738612
  return void 0;
738601
738613
  }
738602
- const dirname34 = typeof __dirname !== "undefined" ? __dirname : void 0;
738603
- const nodeModulesParentDirs = getNodeModulesParentDirs2(dirname34);
738614
+ const dirname33 = typeof __dirname !== "undefined" ? __dirname : void 0;
738615
+ const nodeModulesParentDirs = getNodeModulesParentDirs2(dirname33);
738604
738616
  let versionFromApp;
738605
738617
  for (const nodeModulesParentDir of nodeModulesParentDirs) {
738606
738618
  try {
@@ -934742,10 +934754,10 @@ function rz(e13, t10) {
934742
934754
  }
934743
934755
  return null;
934744
934756
  }
934745
- var import_node_module2, import_child_process, import_crypto24, import_fs2, import_promises7, import_module2, import_os, import_path81, import_readline, import_url218, import_events5, import_fs3, import_path82, import_child_process2, import_fs4, import_readline2, import_os2, import_path83, import_crypto25, import_path84, import_async_hooks, import_promises8, import_crypto26, import_promises9, import_fs5, import_process, import_crypto27, import_crypto28, import_promises10, import_path85, Y, import_promises11, pt, import_fs6, import_promises12, import_events6, import_fs7, import_promises13, import_path86, import_child_process3, import_util14, import_child_process4, import_fs8, import_path87, import_promises14, import_path88, import_fs9, import_promises15, import_path89, import_crypto29, import_path90, import_promises16, import_path91, import_crypto30, import_os3, import_path92, import_path93, import_path94, import_node_path29, import_node_os13, import_node_process3, import_path95, import_promises17, import_os4, import_path96, import_path97, import_os5, import_path98, import_child_process5, import_fs10, Pz, Iz, Ig, Rz, $z, Az, Cz, Rg, k11, Mz, wr, At, jz, Uz, _e11, ve, JT, XT, YT, Bh, iP, yo, dP, kd, gP, bo, SP, kP, Zh, Qa, AP, ty, qP, ny, JP, tc, cy, Pd, Id2, dy, Rd, my, gy, TI, hy, OI, CI, DI, UI, ZI, KI, XI, eR, nR, aR, uR, mR, bR, wR, TR, AR, DR, HR, Ml, kS, re2, ue, rn, Nl, IA, AS, CS, jl, HA, tr, YA, rC, LS, iC, Ul, Fl, Nm, Bl, Um, DC, XS, VC, YC, tM, lM, dM, yM, _M, SM, wM, TM, IM, $M, AM, MM, NM, Km, LM, BM, qM, VM, sx, ax, tD, oD, sD, pD, gD, lx, vD, ED, PD, RD, OD, CD, jD, zD, FD, HD, ZD, KD, XD, tN, oN, iN, fx, hN, bN, xN, Lz, Qo, Hz, qz, Zz, Vz, Wz, Og, ot, Yz, xu, Qz, eL, Ht, tL, qt, Tw, rL, nL, Js, Pw, iL, sL, Iw, cL, lL, Rw, kr, Qe, pL, fL, mL, gL, ei, yL, wu, $w, Ow, _L, vL, Aw, xL, wL, kL, EL, TL, PL, IL, Cw, Mw, ti, AL, Mr, Dw, Nw, DL, NL, jL, jw, zL, LL, Uw, BL, zw, Ag, Lw, dn, pn, WL, KL, Fw, Bw, Hw, qw, fn, QL, ku, Zw, Vw, mn, Ww, Kw, Gw, Jw, Xs, a1, Ce, Zt, Fie, Mg, Ys, z3, We, et, to, Qs, ea, ta, ra, na, oa, ia, sa, aa, d1, Xw, Dg, Ng, Qw, Tu, ek, Vt, ok4, f1, tk, rk, nk, ca, ak, uk, dk, Iu, ro, pk, fk, ii, mk, lk, zg, y1, he, Lg, ge, gk, hk, Mu, Bg, _1, bk, Nr, Du, v12, vk, Sk, Hg, S1, xk, Ct, Mt, gn, da, Dt, Ik, pa, no, ju, Wg, Uu, sr, ye, Gg, Jg, ai, Rk, O1, A1, Kg, $k, C1, M1, J3, Ok2, E2, Ak, U12, M, ma, ga, ha, ya, ba, _a10, ci, va, Sa, io, li, xa, Bu, J1, ui, X1, Y1, Hu, Wt, hn, di, wa, qu, ka, Ea, Zu, Ta, jr, Pa, Vu, Wu, so, Ku, Gu, Ia, th, Nk, Ju, rh, nh, oh, jk, Uk, Ra, pi, Fk, Bk, $a, fi, ao, Ke, vt, Nt, Ur, yn, Oa, Hk, ih, Aa, Zk, eF, bn, Ca, Ma, co, Da, mi, Na, gi, it, hi, Kt, _n, yi, ja, Xu, Ua, za, Yu, La, zr, Fa, Qu, ed, lo, td, rd, Ba, ch, Kk, lh, uh, dh, ph, Gk, Jk, Ha, qa, uo, Qk, dF, bi, fh, mh, nd, eE, tE, rE, Ue, po, _F, vF, lE, PF, fo, xi, fE, mE, gE, hE, CF, yE, bE, DF, ki, Ei, jF, UF, od, _E4, vE, Gt, HF, _h8, SE, ZF, VF, WF, Fr, KF, dt, sd, xE, EE, wE, JF, kE, XF, YF, Za, QF, e42, vn, r42, Ti, o42, i42, s4, a42, c42, l42, u4, d42, p42, f42, m42, g42, h42, y4, b42, _4, v43, S4, x4, w4, k42, E4, T42, P4, $e, TE, PE, cd, IE, Va, $4, vh, O4, ld, RE, A4, ud, C4, M4, $E, N4, dd, OE, Pi2, AE, F4, B4, CE, pd, md, jE, ME, Z4, DE, NE, Sh, UE, zE, G4, gd, J4, xh, LE, FE, BE, Q4, HE, qE, t22, Ii, n22, o22, ZE, s22, VE, c22, l22, u22, WE, KE, p22, GE, JE, YE, QE, Sn, g22, Ri, eT, tT, rT, nT, hd, oT, x22, eme, k22, wh, yd, E22, T22, P2, I2, R2, kh, $2, A22, M2, D2, N22, xme, j22, wme, U22, kme, z22, Eme, L2, Tme, bT, B2, vT, tB, rB, oB, kT, Bme, iB, PT, $T, sB, IT, aB, cB, RT, Oh, mB, gB, Ah, hB, NT, jT, bB, _B, _d, Ih, Ka, Rh, Ch, FT, dge, xB, Pe, Ze, IB, Sd, qT, Nh, $i, Ga, NB, zh, WT, Lh, xd, wd, jB, Fh, xg, Ni, a62, c62, m62, cr, b62, ji, x6, JR, w6, Ad, E6, nc2, T62, P6, B6, Y6, aZ, x0, cZ, lZ, uZ, $be, S0, dZ, fZ, k0, hZ, ae, P0, C3, qr, I3, jt, yZ, En, bZ, Ud, st, W, Li, ft, Wy, Ky, xo, ac, F3, ur, I0, oe, _Z, vZ, SZ, xZ, wZ, kZ, EZ, TZ, PZ, Gy, IZ, RZ, $Z, OZ, AZ, CZ, R0, MZ, Vr, Bi, Hi, zd, lc, Ld, uc, dc, Fd, wo, Wr, Bd, Tr, ze, pc, Zr, Xy, fc, Kr2, Hd, qd, qi, cc, mc, gc, ko, hc, Zi, Pr, Jt, Tn, yc, bc, Zd, Yy, Vd, _c11, r_e, R, n_e, o_e, i_e, s_e, a_e, c_e, l_e, u_e, d_e, p_e, f_e, m_e, g_e, h_e, A0, y_e, b_e, __e, v_e, S_e, x_e, w_e, k_e, E_e, T_e, P_e, I_e, R_e, $_e, O_e, A_e, C_e, M_e, D_e, dr, Wd, Kd, Gr, vc, O, Gd, nb, JZ, Ec, ob, sb, ab, C0, M0, Ic, Ki, Yd, Po, Qd, Io, ep, In, tp, Rn, $n, lb, ub, db, pb, fb, mb, gb, sV, hb, Ro, aV, cV, lV, yb, uV, dV, pV, fV, mV, _b, vb, Sb, xb, wb, rp, kb, gV, Eb, N0, Tb, Rb, $b, Ob, Ab, Cb, Mb, Db, Nb, jb, Me, z0, np, op3, Ub, zb, Lb, Fb, Bb, Hb, qb, Zb, Vb, Xi, Wb, Kb, Gb, Jb, Xb, Yb, Qb, e_, t_, ip, r_, G3, On, xe, cp2, lp, up, dp, pp, fp, mp, gp, hp, yp, bp, o_, i_, s_, a_, _p, vp, Sp, xp, wp, kp, Ep, Tp, Pp, Rc, Ip, Yi, $c, Rp, $p, Op2, Ap, Cp, $o, Mp, Dp, Np, Qi, Oc, Ac, jp, Up, An, zp, Lp, Fp2, Bp, Hp, qp, es, Zp, Vp, Wp, Kp, Gp, Jp, Xp, Yp, ts, Qp, ef, tf, rf, nf, rs, hV, yV, bV, _V4, vV, SV, xV, wV, kV, EV, TV, PV, IV2, RV, $V, OV, AV, CV, MV, DV, NV, jV, UV, zV, LV, FV, BV, HV, qV, ZV, VV, WV, KV, GV, JV, XV, YV, QV, eW, tW, rW, nW, of, sf, Mc, Et, cf, cv, Cf, n$, TW, PW, l7, ls, jf, Uf, zf, Lf, a$, $W, us, mv, gv, hv, yv, ne, _v, yl, Ie, vv, Ff, en, Sv, xv, wv, kv, Ev, Tv, Pv, Iv, Rv, $v, Ov, Av, Cv, Mv, Dv, Nv, c$, bl, ds, _l, vl, jv, l$, u$, d$, p$, f$, m$, g$, Vf, h$, Wf, Uv, y$, b$, _$, zv, v$, S$, hl, x$, w$, Lv, Bv, k$, E$, P$, Hv, $$, O$, C$, qv, M$, N$, j$, z$, Gf, PK, RK, Vv, H$, Wv, Kv, q$, Nn, Yf, Xe, Z$, V$, pxe, UK, zK, Gv, zt, xl, W$, tt, Qt, er, rt, Qf, K$, Jv, G$, J$, Xv, wl, Z3, Yv, X$, fxe, mxe, em, LK, tm, FK, kl, ps, Y$, BK, HK, qK, ZK, VK, WK, Qv, KK, GK, eS, rm2, JK, XK, nm, YK, El, Tl, QK, Pl, fs21, eG, Il, om, im, sm, gxe, am, cm, lm, Q$, eO, tO, tS, rO, Rl, ms, nO, tG, um, rG, dm, nG, rS, oG, pm, iG, sG, aG, cG, lG, uG, dG, pG, fG, mG, fm, gG, hG, mm, nS, oS, iS, yG, bG, _G, sS, vG, SG, xG, wG, kG, oO, gm, EG, hm, hxe, TG, gs, PG, yxe, $l, IG, aS, RG, $G, OG, AG, CG, MG, DG, Xf, NG, jG, UG, Ol, cS, zG, LG, FG, BG, HG, qG, ZG, VG, WG, KG, GG, JG, XG, YG, QG, e92, t9, r92, hs, n9, o9, i92, ym, s9, a92, c92, lS, l9, bxe, _xe, vxe, Sxe, xxe, wxe, H3, aO, lO, cO, uO, dO, bm, gO, u9, d92, pS, pr, p9, Al, TO, OO, AO, UO, zO, h92, y9, mS, _9, bS, wN, kN, wx, kx, Ex, IN, PN, BQ, Ix, $x, ZQ, ru, MN, JQ, vr, NN, jN, iee, see, zN, LN, FN, BN, Vn, Ax, $s, fee, mee, gee, AIe, yee, Mx, _ee, ZN, nRe, Os, WN, Dx, KN, sg, VN, vee, Wn, GN, ou, As, ag, See, XN, Cs, Ho, RRe, $Re, ORe, qo, NRe, iu, ej, Tee, tj, rj, Iee, Ree, $ee, nj, Oee, Aee, oj, su, ij, sj, cj, lj, uj, cg, dj, Lee, pj, Fee, Bee, Hee, fj, Zee, lg, mj, gj, hj, Gee, sn, yj, bj, _j, vj, Sj, wj, kj, Ej, rte, ug, ote, Nx, ite2, Ij, Rj, au, cu, Kn, $j, Oj, Aj, jx, Ms, lte, ute, Dj, Nj, jj, Uj, dte, zj, V$e, lu, pte, Lj, eOe, tOe, Fj, uu, Bj, Hj, Zo, dOe, pOe, Ds, Gn, mte, gte, qj, hte, yte, bte, _te, vte, Ste, Ux, xte, pg, fOe, wte, kte, Kj, Ete, Tte, Sr, Vo, Zj, Lx, Fx, Gj, Bx, Ite, SOe, Rte, $te, Ote, Ate, Cte, Jj, Xj, Mte, Vj, Dte, Nte, Yj, jte, Ute, Wj, zte, Lte, Qj, Fte, eU, Bte, Hte, qte, du, zx, tU, Zte, Vte, Wte, Kte, Gte, xOe, rU, Xte, Yte, Qte, ere, tre, rre, nre, wOe, ore, kOe, ire, fg, mg, sU, aU, DOe, NOe, gg, Kx, mU, ure, nAe, dre, hg, yg, pre, hU, yU, fre, Ko, bU, an, mre, gre, vAe, bre, vre, Xx, Ure, Yn, HU, qU, ZU, vg, qre, JU, Zre, Vre, Wre, cne;
934757
+ var import_node_module, import_child_process, import_crypto24, import_fs2, import_promises7, import_module2, import_os, import_path81, import_readline, import_url218, import_events5, import_fs3, import_path82, import_child_process2, import_fs4, import_readline2, import_os2, import_path83, import_crypto25, import_path84, import_async_hooks, import_promises8, import_crypto26, import_promises9, import_fs5, import_process, import_crypto27, import_crypto28, import_promises10, import_path85, Y, import_promises11, pt, import_fs6, import_promises12, import_events6, import_fs7, import_promises13, import_path86, import_child_process3, import_util14, import_child_process4, import_fs8, import_path87, import_promises14, import_path88, import_fs9, import_promises15, import_path89, import_crypto29, import_path90, import_promises16, import_path91, import_crypto30, import_os3, import_path92, import_path93, import_path94, import_node_path29, import_node_os13, import_node_process3, import_path95, import_promises17, import_os4, import_path96, import_path97, import_os5, import_path98, import_child_process5, import_fs10, Pz, Iz, Ig, Rz, $z, Az, Cz, Rg, k11, Mz, wr, At, jz, Uz, _e11, ve, JT, XT, YT, Bh, iP, yo, dP, kd, gP, bo, SP, kP, Zh, Qa, AP, ty, qP, ny, JP, tc, cy, Pd, Id2, dy, Rd, my, gy, TI, hy, OI, CI, DI, UI, ZI, KI, XI, eR, nR, aR, uR, mR, bR, wR, TR, AR, DR, HR, Ml, kS, re2, ue, rn, Nl, IA, AS, CS, jl, HA, tr, YA, rC, LS, iC, Ul, Fl, Nm, Bl, Um, DC, XS, VC, YC, tM, lM, dM, yM, _M, SM, wM, TM, IM, $M, AM, MM, NM, Km, LM, BM, qM, VM, sx, ax, tD, oD, sD, pD, gD, lx, vD, ED, PD, RD, OD, CD, jD, zD, FD, HD, ZD, KD, XD, tN, oN, iN, fx, hN, bN, xN, Lz, Qo, Hz, qz, Zz, Vz, Wz, Og, ot, Yz, xu, Qz, eL, Ht, tL, qt, Tw, rL, nL, Js, Pw, iL, sL, Iw, cL, lL, Rw, kr, Qe, pL, fL, mL, gL, ei, yL, wu, $w, Ow, _L, vL, Aw, xL, wL, kL, EL, TL, PL, IL, Cw, Mw, ti, AL, Mr, Dw, Nw, DL, NL, jL, jw, zL, LL, Uw, BL, zw, Ag, Lw, dn, pn, WL, KL, Fw, Bw, Hw, qw, fn, QL, ku, Zw, Vw, mn, Ww, Kw, Gw, Jw, Xs, a1, Ce, Zt, Fie, Mg, Ys, z3, We, et, to, Qs, ea, ta, ra, na, oa, ia, sa, aa, d1, Xw, Dg, Ng, Qw, Tu, ek, Vt, ok4, f1, tk, rk, nk, ca, ak, uk, dk, Iu, ro, pk, fk, ii, mk, lk, zg, y1, he, Lg, ge, gk, hk, Mu, Bg, _1, bk, Nr, Du, v12, vk, Sk, Hg, S1, xk, Ct, Mt, gn, da, Dt, Ik, pa, no, ju, Wg, Uu, sr, ye, Gg, Jg, ai, Rk, O1, A1, Kg, $k, C1, M1, J3, Ok2, E2, Ak, U12, M, ma, ga, ha, ya, ba, _a10, ci, va, Sa, io, li, xa, Bu, J1, ui, X1, Y1, Hu, Wt, hn, di, wa, qu, ka, Ea, Zu, Ta, jr, Pa, Vu, Wu, so, Ku, Gu, Ia, th, Nk, Ju, rh, nh, oh, jk, Uk, Ra, pi, Fk, Bk, $a, fi, ao, Ke, vt, Nt, Ur, yn, Oa, Hk, ih, Aa, Zk, eF, bn, Ca, Ma, co, Da, mi, Na, gi, it, hi, Kt, _n, yi, ja, Xu, Ua, za, Yu, La, zr, Fa, Qu, ed, lo, td, rd, Ba, ch, Kk, lh, uh, dh, ph, Gk, Jk, Ha, qa, uo, Qk, dF, bi, fh, mh, nd, eE, tE, rE, Ue, po, _F, vF, lE, PF, fo, xi, fE, mE, gE, hE, CF, yE, bE, DF, ki, Ei, jF, UF, od, _E4, vE, Gt, HF, _h8, SE, ZF, VF, WF, Fr, KF, dt, sd, xE, EE, wE, JF, kE, XF, YF, Za, QF, e42, vn, r42, Ti, o42, i42, s4, a42, c42, l42, u4, d42, p42, f42, m42, g42, h42, y4, b42, _4, v43, S4, x4, w4, k42, E4, T42, P4, $e, TE, PE, cd, IE, Va, $4, vh, O4, ld, RE, A4, ud, C4, M4, $E, N4, dd, OE, Pi2, AE, F4, B4, CE, pd, md, jE, ME, Z4, DE, NE, Sh, UE, zE, G4, gd, J4, xh, LE, FE, BE, Q4, HE, qE, t22, Ii, n22, o22, ZE, s22, VE, c22, l22, u22, WE, KE, p22, GE, JE, YE, QE, Sn, g22, Ri, eT, tT, rT, nT, hd, oT, x22, eme, k22, wh, yd, E22, T22, P2, I2, R2, kh, $2, A22, M2, D2, N22, xme, j22, wme, U22, kme, z22, Eme, L2, Tme, bT, B2, vT, tB, rB, oB, kT, Bme, iB, PT, $T, sB, IT, aB, cB, RT, Oh, mB, gB, Ah, hB, NT, jT, bB, _B, _d, Ih, Ka, Rh, Ch, FT, dge, xB, Pe, Ze, IB, Sd, qT, Nh, $i, Ga, NB, zh, WT, Lh, xd, wd, jB, Fh, xg, Ni, a62, c62, m62, cr, b62, ji, x6, JR, w6, Ad, E6, nc2, T62, P6, B6, Y6, aZ, x0, cZ, lZ, uZ, $be, S0, dZ, fZ, k0, hZ, ae, P0, C3, qr, I3, jt, yZ, En, bZ, Ud, st, W, Li, ft, Wy, Ky, xo, ac, F3, ur, I0, oe, _Z, vZ, SZ, xZ, wZ, kZ, EZ, TZ, PZ, Gy, IZ, RZ, $Z, OZ, AZ, CZ, R0, MZ, Vr, Bi, Hi, zd, lc, Ld, uc, dc, Fd, wo, Wr, Bd, Tr, ze, pc, Zr, Xy, fc, Kr2, Hd, qd, qi, cc, mc, gc, ko, hc, Zi, Pr, Jt, Tn, yc, bc, Zd, Yy, Vd, _c11, r_e, R, n_e, o_e, i_e, s_e, a_e, c_e, l_e, u_e, d_e, p_e, f_e, m_e, g_e, h_e, A0, y_e, b_e, __e, v_e, S_e, x_e, w_e, k_e, E_e, T_e, P_e, I_e, R_e, $_e, O_e, A_e, C_e, M_e, D_e, dr, Wd, Kd, Gr, vc, O, Gd, nb, JZ, Ec, ob, sb, ab, C0, M0, Ic, Ki, Yd, Po, Qd, Io, ep, In, tp, Rn, $n, lb, ub, db, pb, fb, mb, gb, sV, hb, Ro, aV, cV, lV, yb, uV, dV, pV, fV, mV, _b, vb, Sb, xb, wb, rp, kb, gV, Eb, N0, Tb, Rb, $b, Ob, Ab, Cb, Mb, Db, Nb, jb, Me, z0, np, op3, Ub, zb, Lb, Fb, Bb, Hb, qb, Zb, Vb, Xi, Wb, Kb, Gb, Jb, Xb, Yb, Qb, e_, t_, ip, r_, G3, On, xe, cp2, lp, up, dp, pp, fp, mp, gp, hp, yp, bp, o_, i_, s_, a_, _p, vp, Sp, xp, wp, kp, Ep, Tp, Pp, Rc, Ip, Yi, $c, Rp, $p, Op2, Ap, Cp, $o, Mp, Dp, Np, Qi, Oc, Ac, jp, Up, An, zp, Lp, Fp2, Bp, Hp, qp, es, Zp, Vp, Wp, Kp, Gp, Jp, Xp, Yp, ts, Qp, ef, tf, rf, nf, rs, hV, yV, bV, _V4, vV, SV, xV, wV, kV, EV, TV, PV, IV2, RV, $V, OV, AV, CV, MV, DV, NV, jV, UV, zV, LV, FV, BV, HV, qV, ZV, VV, WV, KV, GV, JV, XV, YV, QV, eW, tW, rW, nW, of, sf, Mc, Et, cf, cv, Cf, n$, TW, PW, l7, ls, jf, Uf, zf, Lf, a$, $W, us, mv, gv, hv, yv, ne, _v, yl, Ie, vv, Ff, en, Sv, xv, wv, kv, Ev, Tv, Pv, Iv, Rv, $v, Ov, Av, Cv, Mv, Dv, Nv, c$, bl, ds, _l, vl, jv, l$, u$, d$, p$, f$, m$, g$, Vf, h$, Wf, Uv, y$, b$, _$, zv, v$, S$, hl, x$, w$, Lv, Bv, k$, E$, P$, Hv, $$, O$, C$, qv, M$, N$, j$, z$, Gf, PK, RK, Vv, H$, Wv, Kv, q$, Nn, Yf, Xe, Z$, V$, pxe, UK, zK, Gv, zt, xl, W$, tt, Qt, er, rt, Qf, K$, Jv, G$, J$, Xv, wl, Z3, Yv, X$, fxe, mxe, em, LK, tm, FK, kl, ps, Y$, BK, HK, qK, ZK, VK, WK, Qv, KK, GK, eS, rm2, JK, XK, nm, YK, El, Tl, QK, Pl, fs21, eG, Il, om, im, sm, gxe, am, cm, lm, Q$, eO, tO, tS, rO, Rl, ms, nO, tG, um, rG, dm, nG, rS, oG, pm, iG, sG, aG, cG, lG, uG, dG, pG, fG, mG, fm, gG, hG, mm, nS, oS, iS, yG, bG, _G, sS, vG, SG, xG, wG, kG, oO, gm, EG, hm, hxe, TG, gs, PG, yxe, $l, IG, aS, RG, $G, OG, AG, CG, MG, DG, Xf, NG, jG, UG, Ol, cS, zG, LG, FG, BG, HG, qG, ZG, VG, WG, KG, GG, JG, XG, YG, QG, e92, t9, r92, hs, n9, o9, i92, ym, s9, a92, c92, lS, l9, bxe, _xe, vxe, Sxe, xxe, wxe, H3, aO, lO, cO, uO, dO, bm, gO, u9, d92, pS, pr, p9, Al, TO, OO, AO, UO, zO, h92, y9, mS, _9, bS, wN, kN, wx, kx, Ex, IN, PN, BQ, Ix, $x, ZQ, ru, MN, JQ, vr, NN, jN, iee, see, zN, LN, FN, BN, Vn, Ax, $s, fee, mee, gee, AIe, yee, Mx, _ee, ZN, nRe, Os, WN, Dx, KN, sg, VN, vee, Wn, GN, ou, As, ag, See, XN, Cs, Ho, RRe, $Re, ORe, qo, NRe, iu, ej, Tee, tj, rj, Iee, Ree, $ee, nj, Oee, Aee, oj, su, ij, sj, cj, lj, uj, cg, dj, Lee, pj, Fee, Bee, Hee, fj, Zee, lg, mj, gj, hj, Gee, sn, yj, bj, _j, vj, Sj, wj, kj, Ej, rte, ug, ote, Nx, ite2, Ij, Rj, au, cu, Kn, $j, Oj, Aj, jx, Ms, lte, ute, Dj, Nj, jj, Uj, dte, zj, V$e, lu, pte, Lj, eOe, tOe, Fj, uu, Bj, Hj, Zo, dOe, pOe, Ds, Gn, mte, gte, qj, hte, yte, bte, _te, vte, Ste, Ux, xte, pg, fOe, wte, kte, Kj, Ete, Tte, Sr, Vo, Zj, Lx, Fx, Gj, Bx, Ite, SOe, Rte, $te, Ote, Ate, Cte, Jj, Xj, Mte, Vj, Dte, Nte, Yj, jte, Ute, Wj, zte, Lte, Qj, Fte, eU, Bte, Hte, qte, du, zx, tU, Zte, Vte, Wte, Kte, Gte, xOe, rU, Xte, Yte, Qte, ere, tre, rre, nre, wOe, ore, kOe, ire, fg, mg, sU, aU, DOe, NOe, gg, Kx, mU, ure, nAe, dre, hg, yg, pre, hU, yU, fre, Ko, bU, an, mre, gre, vAe, bre, vre, Xx, Ure, Yn, HU, qU, ZU, vg, qre, JU, Zre, Vre, Wre, cne;
934746
934758
  var init_sdk4 = __esm({
934747
934759
  "node_modules/.pnpm/@anthropic-ai+claude-agent-sdk@0.3.185_@anthropic-ai+sdk@0.105.0_zod@4.3.6__@modelconte_67a396f8f23422d326082c0748c7ae39/node_modules/@anthropic-ai/claude-agent-sdk/sdk.mjs"() {
934748
- import_node_module2 = require("node:module");
934760
+ import_node_module = require("node:module");
934749
934761
  import_child_process = require("child_process");
934750
934762
  import_crypto24 = require("crypto");
934751
934763
  import_fs2 = require("fs");
@@ -934835,7 +934847,7 @@ var init_sdk4 = __esm({
934835
934847
  wr = (e13, t10) => {
934836
934848
  for (var r14 in t10) Ig(e13, r14, { get: t10[r14], enumerable: true, configurable: true, set: Dz.bind(t10, r14) });
934837
934849
  };
934838
- At = (0, import_node_module2.createRequire)(__importMetaUrl);
934850
+ At = (0, import_node_module.createRequire)(__importMetaUrl);
934839
934851
  jz = Symbol.dispose || /* @__PURE__ */ Symbol.for("Symbol.dispose");
934840
934852
  Uz = Symbol.asyncDispose || /* @__PURE__ */ Symbol.for("Symbol.asyncDispose");
934841
934853
  _e11 = (e13, t10, r14) => {
@@ -990054,7 +990066,7 @@ var init_browser_launcher = __esm({
990054
990066
 
990055
990067
  // dist/utils/playwriter-relay.js
990056
990068
  function isBundled2() {
990057
- const v14 = "0.1.200-dev.feat-issue-534-browser-singleton.1";
990069
+ const v14 = "0.1.200-dev.feat-issue-534-browser-singleton.2";
990058
990070
  return typeof v14 === "string" && v14 !== "undefined";
990059
990071
  }
990060
990072
  function resolveRelayEntryPath() {
@@ -990090,7 +990102,7 @@ function getPm2RelayProcess() {
990090
990102
  }
990091
990103
  }
990092
990104
  function pm2Start(entryPath, host, port) {
990093
- const versionStr = "0.1.200-dev.feat-issue-534-browser-singleton.1";
990105
+ const versionStr = "0.1.200-dev.feat-issue-534-browser-singleton.2";
990094
990106
  (0, import_node_child_process19.execFileSync)("pm2", ["start", entryPath, "--name", PM2_PROCESS_NAME, "--update-env"], {
990095
990107
  encoding: "utf-8",
990096
990108
  stdio: "pipe",
@@ -990116,7 +990128,7 @@ function pm2Delete() {
990116
990128
  }
990117
990129
  }
990118
990130
  function pm2Restart(host, port) {
990119
- const versionStr = "0.1.200-dev.feat-issue-534-browser-singleton.1";
990131
+ const versionStr = "0.1.200-dev.feat-issue-534-browser-singleton.2";
990120
990132
  (0, import_node_child_process19.execFileSync)("pm2", ["restart", PM2_PROCESS_NAME, "--update-env"], {
990121
990133
  encoding: "utf-8",
990122
990134
  stdio: "pipe",
@@ -990242,7 +990254,7 @@ function reconcilePlaywriterRelay(host = "127.0.0.1", port = 19988) {
990242
990254
  pm2Restart(host, port);
990243
990255
  return;
990244
990256
  }
990245
- const currentVersion = "0.1.200-dev.feat-issue-534-browser-singleton.1";
990257
+ const currentVersion = "0.1.200-dev.feat-issue-534-browser-singleton.2";
990246
990258
  if (currentEnv.VISIONCLAW_VERSION && currentEnv.VISIONCLAW_VERSION !== currentVersion) {
990247
990259
  logger.system(`Playwriter relay: VisionClaw version changed (${currentEnv.VISIONCLAW_VERSION} \u2192 ${currentVersion}), recreating`);
990248
990260
  pm2Delete();
@@ -990266,7 +990278,7 @@ function reconcilePlaywriterRelay(host = "127.0.0.1", port = 19988) {
990266
990278
  async function ensurePlaywriterRelay(host = "127.0.0.1", port = 19988) {
990267
990279
  assertPm2Available();
990268
990280
  if (!hasPlaywriterExtension()) {
990269
- throw new Error("Playwriter bundled extension not found (playwriter npm package unresolved).");
990281
+ throw new Error("Playwriter extension not configured (dedicated-profile External Extensions JSON missing). Run extension install first.");
990270
990282
  }
990271
990283
  reconcilePlaywriterRelay(host, port);
990272
990284
  const deadline = Date.now() + 15e3;
@@ -990351,19 +990363,13 @@ function launchPlaywriterProfileChrome() {
990351
990363
  logger.warn(`Chrome not found at ${chromePath}`);
990352
990364
  return;
990353
990365
  }
990366
+ cleanPlaywriterExternalUninstalls(getDataDir());
990354
990367
  const flags = [
990355
990368
  `--user-data-dir=${getDataDir()}`,
990356
990369
  "--no-first-run",
990357
990370
  "--no-default-browser-check",
990358
990371
  "--profile-directory=Default"
990359
990372
  ];
990360
- const extensionDir = resolveBundledExtensionDir();
990361
- if (extensionDir) {
990362
- cleanPlaywriterExternalUninstalls(getDataDir());
990363
- flags.push(`--disable-extensions-except=${extensionDir}`, `--load-extension=${extensionDir}`);
990364
- } else {
990365
- logger.warn("Playwriter: bundled extension dir not resolvable \u2014 launching Chrome without it");
990366
- }
990367
990373
  const child = (0, import_node_child_process20.spawn)(chromePath, flags, {
990368
990374
  detached: true,
990369
990375
  stdio: "ignore"
@@ -1087196,7 +1087202,7 @@ var require_snapshot_recorder = __commonJS({
1087196
1087202
  "node_modules/.pnpm/undici@8.5.0/node_modules/undici/lib/mock/snapshot-recorder.js"(exports2, module2) {
1087197
1087203
  "use strict";
1087198
1087204
  var { writeFile: writeFile5, readFile: readFile8, mkdir: mkdir5 } = require("node:fs/promises");
1087199
- var { dirname: dirname34, resolve: resolve23 } = require("node:path");
1087205
+ var { dirname: dirname33, resolve: resolve23 } = require("node:path");
1087200
1087206
  var { setTimeout: setTimeout2, clearTimeout: clearTimeout2 } = require("node:timers");
1087201
1087207
  var { InvalidArgumentError, UndiciError } = require_errors3();
1087202
1087208
  var { hashId, isUrlExcludedFactory, normalizeHeaders: normalizeHeaders2, createHeaderFilters } = require_snapshot_utils();
@@ -1087442,7 +1087448,7 @@ var require_snapshot_recorder = __commonJS({
1087442
1087448
  throw new InvalidArgumentError("Snapshot path is required");
1087443
1087449
  }
1087444
1087450
  const resolvedPath3 = resolve23(path130);
1087445
- await mkdir5(dirname34(resolvedPath3), { recursive: true });
1087451
+ await mkdir5(dirname33(resolvedPath3), { recursive: true });
1087446
1087452
  const data3 = Array.from(this.#snapshots.entries()).map(([hash3, snapshot]) => ({
1087447
1087453
  hash: hash3,
1087448
1087454
  snapshot
@@ -1173897,7 +1173903,7 @@ function getGlimpseBinaryPath() {
1173897
1173903
  return process.env.GLIMPSE_BINARY;
1173898
1173904
  }
1173899
1173905
  try {
1173900
- const require4 = (0, import_node_module7.createRequire)(__importMetaUrl);
1173906
+ const require4 = (0, import_node_module6.createRequire)(__importMetaUrl);
1173901
1173907
  const glimpseuiPath = require4.resolve("glimpseui");
1173902
1173908
  const binaryPath = (0, import_node_path74.join)((0, import_node_path74.dirname)(glimpseuiPath), "glimpse");
1173903
1173909
  if ((0, import_node_fs64.existsSync)(binaryPath)) return binaryPath;
@@ -1173933,14 +1173939,14 @@ async function openGlimpseWindow(html2, options2) {
1173933
1173939
  }
1173934
1173940
  };
1173935
1173941
  }
1173936
- var import_node_fs64, import_node_child_process34, import_node_path74, import_node_os35, import_node_module7, glimpseAvailable, resolvedBinaryPath;
1173942
+ var import_node_fs64, import_node_child_process34, import_node_path74, import_node_os35, import_node_module6, glimpseAvailable, resolvedBinaryPath;
1173937
1173943
  var init_glimpse_ui = __esm({
1173938
1173944
  "node_modules/.pnpm/pi-mcp-adapter@2.6.1_react-dom@19.2.5_react@19.2.5__react@19.2.5_ws@8.20.0_zod@4.3.6/node_modules/pi-mcp-adapter/glimpse-ui.ts"() {
1173939
1173945
  import_node_fs64 = require("node:fs");
1173940
1173946
  import_node_child_process34 = require("node:child_process");
1173941
1173947
  import_node_path74 = require("node:path");
1173942
1173948
  import_node_os35 = require("node:os");
1173943
- import_node_module7 = require("node:module");
1173949
+ import_node_module6 = require("node:module");
1173944
1173950
  glimpseAvailable = null;
1173945
1173951
  resolvedBinaryPath = null;
1173946
1173952
  }
@@ -1178656,13 +1178662,13 @@ var init_stdin_buffer = __esm({
1178656
1178662
  });
1178657
1178663
 
1178658
1178664
  // node_modules/.pnpm/@earendil-works+pi-tui@0.74.1/node_modules/@earendil-works/pi-tui/dist/terminal.js
1178659
- var import_node_module8, cjsRequire3;
1178665
+ var import_node_module7, cjsRequire3;
1178660
1178666
  var init_terminal = __esm({
1178661
1178667
  "node_modules/.pnpm/@earendil-works+pi-tui@0.74.1/node_modules/@earendil-works/pi-tui/dist/terminal.js"() {
1178662
- import_node_module8 = require("node:module");
1178668
+ import_node_module7 = require("node:module");
1178663
1178669
  init_keys2();
1178664
1178670
  init_stdin_buffer();
1178665
- cjsRequire3 = (0, import_node_module8.createRequire)(__importMetaUrl);
1178671
+ cjsRequire3 = (0, import_node_module7.createRequire)(__importMetaUrl);
1178666
1178672
  }
1178667
1178673
  });
1178668
1178674
 
@@ -1312370,7 +1312376,7 @@ var init_plugin_sdk2 = __esm({
1312370
1312376
 
1312371
1312377
  // dist/tos-storage.js
1312372
1312378
  function createTosClient(credentials, bucket, endpointOverride) {
1312373
- const _require = (0, import_node_module9.createRequire)(__importMetaUrl);
1312379
+ const _require = (0, import_node_module8.createRequire)(__importMetaUrl);
1312374
1312380
  const { TosClient } = _require("@volcengine/tos-sdk");
1312375
1312381
  return new TosClient({
1312376
1312382
  accessKeyId: credentials.accessKeyId,
@@ -1312493,14 +1312499,14 @@ function createTosSignedUrl(options2) {
1312493
1312499
  expires: options2.expiresSeconds
1312494
1312500
  });
1312495
1312501
  }
1312496
- var import_node_fs78, import_node_os42, import_node_path92, import_node_module9, DEFAULT_TOS_MULTIPART_THRESHOLD, DEFAULT_TOS_PART_SIZE, DEFAULT_TOS_TASK_NUM, DEFAULT_TOS_UPLOAD_MAX_ATTEMPTS, DEFAULT_TOS_UPLOAD_RETRY_BASE_DELAY_MS, RETRYABLE_UPLOAD_ERROR_RE;
1312502
+ var import_node_fs78, import_node_os42, import_node_path92, import_node_module8, DEFAULT_TOS_MULTIPART_THRESHOLD, DEFAULT_TOS_PART_SIZE, DEFAULT_TOS_TASK_NUM, DEFAULT_TOS_UPLOAD_MAX_ATTEMPTS, DEFAULT_TOS_UPLOAD_RETRY_BASE_DELAY_MS, RETRYABLE_UPLOAD_ERROR_RE;
1312497
1312503
  var init_tos_storage = __esm({
1312498
1312504
  "dist/tos-storage.js"() {
1312499
1312505
  "use strict";
1312500
1312506
  import_node_fs78 = __toESM(require("node:fs"), 1);
1312501
1312507
  import_node_os42 = __toESM(require("node:os"), 1);
1312502
1312508
  import_node_path92 = __toESM(require("node:path"), 1);
1312503
- import_node_module9 = require("node:module");
1312509
+ import_node_module8 = require("node:module");
1312504
1312510
  DEFAULT_TOS_MULTIPART_THRESHOLD = 64 * 1024 * 1024;
1312505
1312511
  DEFAULT_TOS_PART_SIZE = 20 * 1024 * 1024;
1312506
1312512
  DEFAULT_TOS_TASK_NUM = 1;
@@ -1319049,7 +1319055,7 @@ async function detectBrowserBackend(config3) {
1319049
1319055
  logger.system(`Browser backend: Playwright CDP (relay startup failed: ${err9 instanceof Error ? err9.message : String(err9)})`);
1319050
1319056
  }
1319051
1319057
  } else {
1319052
- logger.system("Browser backend: Playwright CDP (Playwriter bundled extension not found)");
1319058
+ logger.system("Browser backend: Playwright CDP (Playwriter External Extensions JSON not installed)");
1319053
1319059
  cleanupOrphanRelay();
1319054
1319060
  }
1319055
1319061
  } catch {
@@ -1329799,18 +1329805,13 @@ Switched to ${getModelLabel(nextModel)} via ${getProviderLabel2(nextProvider)}.`
1329799
1329805
  console.log("\nPlaywriter extension installation is only supported on macOS.");
1329800
1329806
  break;
1329801
1329807
  }
1329802
- if (!isPlaywriterExtensionAvailable()) {
1329803
- console.log("\nPlaywriter bundled extension is not resolvable in this install.");
1329804
- console.log("Reinstall dependencies (the extension ships inside the 'playwriter' package).");
1329805
- break;
1329806
- }
1329807
- console.log("\nPlaywriter extension is loaded directly from the bundled package via --load-extension.");
1329808
- console.log("No Chrome external-install configuration is needed.");
1329808
+ console.log("\nInstalling the Playwriter extension into the dedicated automation profile");
1329809
+ console.log("(via that profile's External Extensions JSON \u2014 the user's normal Chrome is untouched).");
1329809
1329810
  const ok15 = ensurePlaywriterExtension();
1329810
1329811
  if (ok15) {
1329811
- console.log("Legacy install artifacts cleaned up (if any were present).");
1329812
+ console.log("Playwriter extension configured for the automation profile.");
1329812
1329813
  } else {
1329813
- console.log("Cleanup of legacy install artifacts reported a problem; check logs.");
1329814
+ console.log("Failed to configure the Playwriter extension; check logs.");
1329814
1329815
  }
1329815
1329816
  break;
1329816
1329817
  }
@@ -1344323,15 +1344324,15 @@ var StdinBuffer = class extends import_events7.EventEmitter {
1344323
1344324
 
1344324
1344325
  // node_modules/.pnpm/@earendil-works+pi-tui@0.79.9/node_modules/@earendil-works/pi-tui/dist/terminal.js
1344325
1344326
  var fs48 = __toESM(require("node:fs"), 1);
1344326
- var import_node_module4 = require("node:module");
1344327
+ var import_node_module3 = require("node:module");
1344327
1344328
  var path50 = __toESM(require("node:path"), 1);
1344328
1344329
  var import_node_url7 = require("node:url");
1344329
1344330
 
1344330
1344331
  // node_modules/.pnpm/@earendil-works+pi-tui@0.79.9/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js
1344331
- var import_node_module3 = require("node:module");
1344332
+ var import_node_module2 = require("node:module");
1344332
1344333
  var path49 = __toESM(require("node:path"), 1);
1344333
1344334
  var import_node_url6 = require("node:url");
1344334
- var cjsRequire = (0, import_node_module3.createRequire)(__importMetaUrl);
1344335
+ var cjsRequire = (0, import_node_module2.createRequire)(__importMetaUrl);
1344335
1344336
  var nativeModifiersHelper;
1344336
1344337
  function isNativeModifiersHelper(value2) {
1344337
1344338
  if (typeof value2 !== "object" || value2 === null)
@@ -1344379,7 +1344380,7 @@ function isNativeModifierPressed(key) {
1344379
1344380
  }
1344380
1344381
 
1344381
1344382
  // node_modules/.pnpm/@earendil-works+pi-tui@0.79.9/node_modules/@earendil-works/pi-tui/dist/terminal.js
1344382
- var cjsRequire2 = (0, import_node_module4.createRequire)(__importMetaUrl);
1344383
+ var cjsRequire2 = (0, import_node_module3.createRequire)(__importMetaUrl);
1344383
1344384
  var TERMINAL_PROGRESS_KEEPALIVE_MS = 1e3;
1344384
1344385
  var TERMINAL_PROGRESS_ACTIVE_SEQUENCE = "\x1B]9;4;3\x07";
1344385
1344386
  var TERMINAL_PROGRESS_CLEAR_SEQUENCE = "\x1B]9;4;0;\x07";
@@ -1353577,7 +1353578,7 @@ function createToolHtmlRenderer(deps) {
1353577
1353578
 
1353578
1353579
  // node_modules/.pnpm/@earendil-works+pi-coding-agent@0.79.9_@modelcontextprotocol+sdk@1.29.0_zod@4.3.6__ws@8.20.0_zod@4.3.6/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/loader.js
1353579
1353580
  var fs50 = __toESM(require("node:fs"), 1);
1353580
- var import_node_module6 = require("node:module");
1353581
+ var import_node_module5 = require("node:module");
1353581
1353582
  var path52 = __toESM(require("node:path"), 1);
1353582
1353583
  var import_node_url8 = require("node:url");
1353583
1353584
  init_dist2();
@@ -1354890,7 +1354891,7 @@ async function getOAuthApiKey(providerId, credentials) {
1354890
1354891
  }
1354891
1354892
 
1354892
1354893
  // node_modules/.pnpm/jiti@2.7.0/node_modules/jiti/lib/jiti-static.mjs
1354893
- var import_node_module5 = require("node:module");
1354894
+ var import_node_module4 = require("node:module");
1354894
1354895
  var import_jiti = __toESM(require_jiti(), 1);
1354895
1354896
  var import_babel = __toESM(require_babel(), 1);
1354896
1354897
  function onError(err9) {
@@ -1354904,7 +1354905,7 @@ function createJiti(id3, opts = {}) {
1354904
1354905
  return (0, import_jiti.default)(id3, opts, {
1354905
1354906
  onError,
1354906
1354907
  nativeImport,
1354907
- createRequire: import_node_module5.createRequire
1354908
+ createRequire: import_node_module4.createRequire
1354908
1354909
  });
1354909
1354910
  }
1354910
1354911
 
@@ -1355038,7 +1355039,7 @@ var VIRTUAL_MODULES = {
1355038
1355039
  "@mariozechner/pi-ai/oauth": oauth_exports,
1355039
1355040
  "@mariozechner/pi-coding-agent": dist_exports4
1355040
1355041
  };
1355041
- var require2 = (0, import_node_module6.createRequire)(__importMetaUrl);
1355042
+ var require2 = (0, import_node_module5.createRequire)(__importMetaUrl);
1355042
1355043
  var _aliases = null;
1355043
1355044
  function getAliases() {
1355044
1355045
  if (_aliases)
@@ -1,26 +1,4 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __copyProps = (to, from, except, desc) => {
9
- if (from && typeof from === "object" || typeof from === "function") {
10
- for (let key of __getOwnPropNames(from))
11
- if (!__hasOwnProp.call(to, key) && key !== except)
12
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
- }
14
- return to;
15
- };
16
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
- // If the importer is in node compatibility mode or this is not an ESM
18
- // file that has been converted to a CommonJS file using a Babel-
19
- // compatible transform (i.e. "__esModule" has not been set), then set
20
- // "default" to the CommonJS "module.exports" for node compatibility.
21
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
- mod
23
- ));
24
2
 
25
3
  // dist/entry/playwriter-relay.js
26
4
  var import_playwriter = require("playwriter");
@@ -34,12 +12,9 @@ function getRelayInfoPath() {
34
12
  return process.env.RELAY_INFO_PATH ?? (0, import_node_path.join)((0, import_node_os.homedir)(), ".visionclaw", "profiles", "default", ".playwriter-relay-info.json");
35
13
  }
36
14
  function hasExtensionConfig() {
37
- try {
38
- const extDir = (0, import_node_path.join)((0, import_node_path.dirname)(require.resolve("playwriter/package.json")), "dist", "extension");
39
- return (0, import_node_fs.existsSync)((0, import_node_path.join)(extDir, "manifest.json"));
40
- } catch {
41
- return false;
42
- }
15
+ const configDir = (0, import_node_path.dirname)(getRelayInfoPath());
16
+ const jsonPath = (0, import_node_path.join)(configDir, ".playwriter-chrome", "External Extensions", `${EXTENSION_ID}.json`);
17
+ return (0, import_node_fs.existsSync)(jsonPath);
43
18
  }
44
19
  function hasConflictingPolicyInstall() {
45
20
  if (process.platform !== "darwin")
@@ -75,7 +50,7 @@ function removeRelayInfo() {
75
50
  }
76
51
  async function main() {
77
52
  if (!hasExtensionConfig()) {
78
- console.error("Playwriter bundled extension not found (expected node_modules/playwriter/dist/extension/manifest.json). Reinstall the playwriter npm package.");
53
+ console.error("Playwriter extension not configured (dedicated-profile External Extensions JSON not found). Run extension install first.");
79
54
  process.exit(1);
80
55
  }
81
56
  if (hasConflictingPolicyInstall()) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "visionclaw",
3
- "version": "0.1.200-dev.feat-issue-534-browser-singleton.1",
3
+ "version": "0.1.200-dev.feat-issue-534-browser-singleton.2",
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",