@deepseek-insight/dsi 0.8.3 → 0.8.5
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/.agents/skills/dsi-gb-verifier/SKILL.md +143 -0
- package/build/client/_app/immutable/assets/0.C6AGVUc8.css +2 -0
- package/build/client/_app/immutable/assets/{2.BPprd30B.css → 2.gXzZuuwh.css} +1 -1
- package/build/client/_app/immutable/chunks/BFOY8uwF.js +1 -0
- package/build/client/_app/immutable/chunks/CrTRqozz.js +1 -0
- package/build/client/_app/immutable/chunks/DxGYLnDH.js +1 -0
- package/build/client/_app/immutable/chunks/HD-mJtOS.js +6 -0
- package/build/client/_app/immutable/chunks/{BoHeiMOU.js → b4-Ro8NH.js} +1 -1
- package/build/client/_app/immutable/chunks/hC0DBYN6.js +2 -0
- package/build/client/_app/immutable/entry/{app.S_mxIoOg.js → app.DHewwbUQ.js} +2 -2
- package/build/client/_app/immutable/entry/start.C0PcwkeZ.js +1 -0
- package/build/client/_app/immutable/nodes/{0.6dTmg1Xv.js → 0.CP10wY64.js} +1 -1
- package/build/client/_app/immutable/nodes/{1.D20V6eTe.js → 1.qWvE0DiU.js} +1 -1
- package/build/client/_app/immutable/nodes/{2.BHcBdFqH.js → 2.Nw7iFtoh.js} +224 -223
- package/build/client/_app/version.json +1 -1
- package/build/handler.js +4 -4
- package/build/index.js +4 -4
- package/build/server/chunks/chunks/{app-config.svelte.js-BM4WbMFB.js → app-config.svelte.js-DCc9d7A4.js} +6 -2
- package/build/server/chunks/chunks/{config.js-vThvQeMn.js → config.js-s6iKwHD7.js} +3 -2
- package/build/server/chunks/chunks/{db.js-DQm6CZ_r.js → db.js-CxxWK5sn.js} +2 -2
- package/build/server/chunks/chunks/{db2.js-DUhFxA3a.js → db2.js-DwJ9lySe.js} +2 -2
- package/build/server/chunks/chunks/{dsh-connection.js-BgeraFA2.js → dsh-connection.js-Chtudg1p.js} +3 -3
- package/build/server/chunks/chunks/{dsh-events.js-BUkLR6ZV.js → dsh-events.js-BUdvZQmd.js} +6 -3
- package/build/server/chunks/chunks/{git-probe.js-CLF37SRh.js → git-probe.js-BX9FPnet.js} +3 -3
- package/build/server/chunks/chunks/{insight-config.js-Dp_2gB5J.js → insight-config.js-Db5fe5Df.js} +9 -5
- package/build/server/chunks/chunks/{internal2.js-Ba5p8uFM.js → internal2.js-CaZaz-a9.js} +3 -3
- package/build/server/chunks/chunks/ledger-stats.js-BWACyDPg.js +72 -0
- package/build/server/chunks/chunks/{registry.js-C2MdrfNv.js → registry.js-syaTZ_-A.js} +403 -34
- package/build/server/chunks/chunks/{settings-document.js-Gw1puaik.js → settings-document.js-BHESJ7im.js} +2 -2
- package/build/server/chunks/chunks/{state.js-BSiAgink.js → state.js-oYjf745s.js} +3 -3
- package/build/server/chunks/chunks/{watcher.js-BVKnoQUw.js → watcher.js-Ci9jsM5l.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/a2a/_id_/{_server.ts.js-BjzdVwdY.js → _server.ts.js-CHaYhzjy.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/a2a/{_server.ts.js-3kQCQuHT.js → _server.ts.js-CdyqA85c.js} +8 -8
- package/build/server/chunks/entries/endpoints/api/a2a/register/{_server.ts.js-BUBTCLFn.js → _server.ts.js-DO_FS5b4.js} +8 -8
- package/build/server/chunks/entries/endpoints/api/browser/_id_/activate/{_server.ts.js-CogDOHKu.js → _server.ts.js-D7Be4JUf.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/browser/_id_/close/{_server.ts.js-xOt7LnS1.js → _server.ts.js-CGkm2H-U.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/browser/_id_/closetab/{_server.ts.js-CSmVPvSM.js → _server.ts.js-D7SLUfOo.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/browser/_id_/element/{_server.ts.js-BA40oCDW.js → _server.ts.js-C3d_JV-q.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/browser/_id_/input/{_server.ts.js-EX7eVzjp.js → _server.ts.js-DW0hyVML.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/browser/_id_/mcp/{_server.ts.js-B_EcmyFt.js → _server.ts.js-Ev-hdBlf.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/browser/_id_/navigate/{_server.ts.js-C3dYbyS3.js → _server.ts.js-DZ8-wocV.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/browser/_id_/opentab/{_server.ts.js-CMhJJO25.js → _server.ts.js-aapPrIQK.js} +11 -9
- package/build/server/chunks/entries/endpoints/api/browser/_id_/page/{_server.ts.js-DIW4uI2S.js → _server.ts.js-DANA_hMd.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/browser/_id_/stream/{_server.ts.js-CIPIlq5X.js → _server.ts.js-BqfseXFy.js} +26 -9
- package/build/server/chunks/entries/endpoints/api/browser/_id_/tabs/{_server.ts.js-CoEdOiml.js → _server.ts.js-DFFF9qe-.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/browser/_id_/viewport/{_server.ts.js-CdELUoGT.js → _server.ts.js-ek6-D4Zm.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/browser/{_server.ts.js-ea6HpNGh.js → _server.ts.js-CPjKy3ma.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/config/{_server.ts.js-C8XDnDwe.js → _server.ts.js-CWE9NP6g.js} +12 -5
- package/build/server/chunks/entries/endpoints/api/dsh/directory/{_server.ts.js-BFmWshpv.js → _server.ts.js-D-raYQon.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/jobs/{_server.ts.js-DATWy5mQ.js → _server.ts.js-CI4dEHFY.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/jobs/follow/{_server.ts.js-CugOD1Zd.js → _server.ts.js-cnjoSLtY.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/pick-directory/{_server.ts.js-DCupM4da.js → _server.ts.js-0UUtapX5.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/presets/{_server.ts.js-Bh1btvr9.js → _server.ts.js-MK5ezU8u.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/attachment/{_server.ts.js-Cb8SBWVw.js → _server.ts.js-CEiMgzjC.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/cancel/{_server.ts.js-WI9yH2iG.js → _server.ts.js-wGEl1fuF.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/catalog/{_server.ts.js-bN9adUqz.js → _server.ts.js-Bz7u2BlD.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/changes/{_server.ts.js-Bxlm966G.js → _server.ts.js-yue5aEjr.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/command/{_server.ts.js-CM-raN_Q.js → _server.ts.js-BFSs5T2m.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/events/{_server.ts.js-BzP30TXW.js → _server.ts.js-C2i85wQy.js} +7 -70
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/fork/{_server.ts.js-DvNkrTaY.js → _server.ts.js-_toO4f4W.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/goal/{_server.ts.js-DXbCrefw.js → _server.ts.js-BGJnDV85.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/history/{_server.ts.js-B7YRQhuJ.js → _server.ts.js-CQCJg8U8.js} +6 -6
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/models/{_server.ts.js-C_AEaLLJ.js → _server.ts.js-0ADvdE79.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/path/{_server.ts.js-Dj-pF5ik.js → _server.ts.js-DyO4T1Ro.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/permission/{_server.ts.js-BX9FWJ6g.js → _server.ts.js-CIY7oimw.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/prompt/{_server.ts.js-CQ2Bmtu4.js → _server.ts.js-B-9faNHX.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/rename/{_server.ts.js-Ha7xjnKW.js → _server.ts.js-E7-0zfiH.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/respond/{_server.ts.js-BOg6llHk.js → _server.ts.js-CODtLQ3Q.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/select-model/{_server.ts.js-DBqGALzZ.js → _server.ts.js-BiSxsU-j.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/sessions/{_server.ts.js-CvA8WDDb.js → _server.ts.js-C0WJnv2b.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/subagents/_server.ts.js-D5bc4xg4.js +72 -0
- package/build/server/chunks/entries/endpoints/api/dsh/workspace-file/{_server.ts.js-BfjNH40j.js → _server.ts.js-23ycAyUg.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/workspace-tree/{_server.ts.js-De_qumyr.js → _server.ts.js-B4w5Jh7f.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/workspaces/{_server.ts.js-tFpJJHCb.js → _server.ts.js-VQLxDbFE.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/workspaces/_workspaceId_/delete/{_server.ts.js-DVx5GGA_.js → _server.ts.js-vs5N5Cya.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/dsh/workspaces/_workspaceId_/rename/{_server.ts.js-DuKT-aZp.js → _server.ts.js-BOWhoBHV.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/prompts/_id_/{_server.ts.js-DsWFidFY.js → _server.ts.js-aDEAGfJe.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/prompts/{_server.ts.js-C6j0adQs.js → _server.ts.js-BZ-nRrTp.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/prompts/use/{_server.ts.js-BChAg4hm.js → _server.ts.js-CkDY1PQ7.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/settings/{_server.ts.js-BPSHqbZN.js → _server.ts.js-CHvgF47Y.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/terminal/{_server.ts.js-D5CbUe5k.js → _server.ts.js-CbRT4vBo.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/workspace/file-write/{_server.ts.js-B-5YihUA.js → _server.ts.js-BwD0KaXy.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/workspace/git-events/{_server.ts.js-DT5jRZFE.js → _server.ts.js-DgbMRh3d.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/workspace/git-file-head/{_server.ts.js-DtW-utrd.js → _server.ts.js-DRqZawic.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/workspace/git-map/{_server.ts.js-8AIAo9jX.js → _server.ts.js-CTXwwwB1.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/workspace/git-status/{_server.ts.js-CMw96vjY.js → _server.ts.js-B4aJBY2w.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/workspace/write-gate/{_server.ts.js-DKufa14_.js → _server.ts.js-CDJJA18L.js} +7 -7
- package/build/server/chunks/entries/{hooks.server.js-B-e4_ekh.js → hooks.server.js-Iel6oE7w.js} +3 -3
- package/build/server/chunks/entries/pages/{_error.svelte.js-D8-G0evO.js → _error.svelte.js-B-wdFjVG.js} +4 -4
- package/build/server/chunks/entries/pages/{_page.server.ts.js-7x6ZfGoB.js → _page.server.ts.js-CaoeQzem.js} +3 -3
- package/build/server/chunks/entries/pages/{_page.svelte.js-7xWLRsiZ.js → _page.svelte.js-CY7zcWr4.js} +1713 -1077
- package/build/server/chunks/{handler-BedQ0jP-.js → handler-DYk4NJto.js} +3 -3
- package/build/server/chunks/{index.js-BF6tPPQs.js → index.js-kL9MZ99b.js} +2 -2
- package/build/server/chunks/{manifest.js-3c0p7QAl.js → manifest.js-BrMLQqec.js} +67 -60
- package/build/server/chunks/nodes/{0.js-B3i7sGR_.js → 0.js-BembYTTr.js} +3 -3
- package/build/server/chunks/nodes/1.js-CKJjyWGZ.js +9 -0
- package/build/server/chunks/nodes/{2.js-CgnRGwm6.js → 2.js-BezA2RPm.js} +10 -10
- package/package.json +1 -1
- package/skills/{dsi-kb-scenario → dsi-fc-scenario}/SKILL.md +11 -6
- package/template/.dsi/prompts.sqlite-shm +0 -0
- package/template/.dsi/prompts.sqlite-wal +0 -0
- package/template/.dsi/settings.yaml +2 -2
- package/build/client/_app/immutable/assets/0.DyOAkKS-.css +0 -2
- package/build/client/_app/immutable/chunks/C9QAOGL1.js +0 -2
- package/build/client/_app/immutable/chunks/D-Rolhzs.js +0 -1
- package/build/client/_app/immutable/chunks/NcOjFWr3.js +0 -6
- package/build/client/_app/immutable/chunks/QJuSx3RG.js +0 -1
- package/build/client/_app/immutable/chunks/sC_8Ss7w.js +0 -1
- package/build/client/_app/immutable/entry/start.BPQAB3iV.js +0 -1
- package/build/server/chunks/nodes/1.js-eUf50uxI.js +0 -9
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { d as readBrowserConfig } from './insight-config.js-
|
|
1
|
+
import { d as readBrowserConfig } from './insight-config.js-Db5fe5Df.js';
|
|
2
2
|
import { mkdirSync, rmSync, readdirSync } from 'node:fs';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { spawn, spawnSync } from 'node:child_process';
|
|
@@ -95,6 +95,22 @@ var BrowserRelay = class {
|
|
|
95
95
|
};
|
|
96
96
|
for (const sub of this.subscribers) sub(this.latest);
|
|
97
97
|
}
|
|
98
|
+
/** Navigate reseed (ADR-0039 follow-up, 2026-10-25): unlike seed(), this
|
|
99
|
+
* REPLACES an existing frame. A discrete navigation under a paced
|
|
100
|
+
* screencast (everyNthFrame > 2, headless) composites too few frames for
|
|
101
|
+
* Chrome to emit anything — and the ring still holds the OPENER's
|
|
102
|
+
* synthesized frame, which seed() refuses to advance past, so the glass
|
|
103
|
+
* would freeze on the old face forever. A navigation is a real face
|
|
104
|
+
* change: it must land even over a synthesized frame. */
|
|
105
|
+
reseed(frame) {
|
|
106
|
+
if (!this.cdp) throw new RelayClosedError();
|
|
107
|
+
this.seq += 1;
|
|
108
|
+
this.latest = {
|
|
109
|
+
...frame,
|
|
110
|
+
seq: this.seq
|
|
111
|
+
};
|
|
112
|
+
for (const sub of this.subscribers) sub(this.latest);
|
|
113
|
+
}
|
|
98
114
|
latestFrame() {
|
|
99
115
|
if (!this.cdp) throw new RelayClosedError();
|
|
100
116
|
return this.latest;
|
|
@@ -362,6 +378,16 @@ var BrowserRegistry = class {
|
|
|
362
378
|
if (!h) throw new BrowserRegistryRefusal("CLOSED", "no active tab handle");
|
|
363
379
|
return h.relay;
|
|
364
380
|
}
|
|
381
|
+
/** D5 amendment 2026-10-27: watch the active pointer. The stream route
|
|
382
|
+
* re-binds its relay on every fire so a brain-driven activate (creation
|
|
383
|
+
* auto-focus) repoints the MIRROR, not just the strip highlight. */
|
|
384
|
+
onActiveChange(id, cb) {
|
|
385
|
+
const e = this.peek(id);
|
|
386
|
+
(e.activeListeners ??= /* @__PURE__ */ new Set()).add(cb);
|
|
387
|
+
return () => {
|
|
388
|
+
e.activeListeners?.delete(cb);
|
|
389
|
+
};
|
|
390
|
+
}
|
|
365
391
|
/** Resolve a verb's target handle: explicit targetId, else the active tab
|
|
366
392
|
* (ADR-0040 D3 — one verb seam, optional pointer). An ENUMERATED but
|
|
367
393
|
* not-yet-attached target attaches lazily here — attach is not stream
|
|
@@ -398,6 +424,7 @@ var BrowserRegistry = class {
|
|
|
398
424
|
page
|
|
399
425
|
}).catch(() => void 0);
|
|
400
426
|
e.tabs.set(tid, handle);
|
|
427
|
+
(e.tabOrder ??= []).push(tid);
|
|
401
428
|
if (tid === key) break;
|
|
402
429
|
}
|
|
403
430
|
}
|
|
@@ -405,6 +432,48 @@ var BrowserRegistry = class {
|
|
|
405
432
|
if (!h) throw new BrowserRegistryRefusal("NO_TARGET", "no such tab: " + key);
|
|
406
433
|
return h;
|
|
407
434
|
}
|
|
435
|
+
/** BUG 2026-10-27 (brain churn leaves stale handles): the registry's
|
|
436
|
+
* cached CDP sessions can DIE while the pages live on (brain re-home,
|
|
437
|
+
* MCP client reconnect) — listTabs then answers empty, every verb
|
|
438
|
+
* NO_TARGETs, and the mirror starves on one frozen frame. Heal: re-probe
|
|
439
|
+
* every live page with a FRESH CDP session, replace dead handles, and
|
|
440
|
+
* remap the pointer when its target is gone. Called from listTabs when
|
|
441
|
+
* enumeration comes back empty — the panel's 2s poll then heals the
|
|
442
|
+
* whole session without operator action. */
|
|
443
|
+
async healHandles(e) {
|
|
444
|
+
for (const page of e.context.pages()) {
|
|
445
|
+
let scdp = null;
|
|
446
|
+
let tid = null;
|
|
447
|
+
try {
|
|
448
|
+
scdp = await e.context.newCDPSession(page);
|
|
449
|
+
tid = (await scdp.send("Target.getTargetInfo")).targetInfo?.targetId ?? null;
|
|
450
|
+
} catch {
|
|
451
|
+
continue;
|
|
452
|
+
}
|
|
453
|
+
if (!tid || !scdp) {
|
|
454
|
+
await scdp?.detach().catch(() => void 0);
|
|
455
|
+
continue;
|
|
456
|
+
}
|
|
457
|
+
const old = e.tabs.get(tid);
|
|
458
|
+
if (old) {
|
|
459
|
+
if (!await old.cdp.send("Target.getTargetInfo").then(() => false).catch(() => true)) {
|
|
460
|
+
await scdp.detach().catch(() => void 0);
|
|
461
|
+
continue;
|
|
462
|
+
}
|
|
463
|
+
old.relay.stop();
|
|
464
|
+
await old.cdp.detach().catch(() => void 0);
|
|
465
|
+
const cfg = readBrowserConfig();
|
|
466
|
+
e.tabs.set(tid, {
|
|
467
|
+
targetId: tid,
|
|
468
|
+
cdp: scdp,
|
|
469
|
+
relay: new BrowserRelay(scdp, cfg.screencastQuality, cfg.screencastMaxFps),
|
|
470
|
+
page
|
|
471
|
+
});
|
|
472
|
+
if (!e.tabOrder.includes(tid)) e.tabOrder.push(tid);
|
|
473
|
+
} else await scdp.detach().catch(() => void 0);
|
|
474
|
+
}
|
|
475
|
+
if (e.activeTargetId && !e.tabs.has(e.activeTargetId)) e.activeTargetId = [...e.tabs.keys()][0] ?? null;
|
|
476
|
+
}
|
|
408
477
|
/** Enumerate the context's page targets (ADR-0040 D5 feed) — type:page
|
|
409
478
|
* only; iframes/omnibox/service workers are chrome noise (wire capture
|
|
410
479
|
* 2026-10-24). Read-only: never attaches, never streams (D1). */
|
|
@@ -412,12 +481,22 @@ var BrowserRegistry = class {
|
|
|
412
481
|
const e = this.peek(id);
|
|
413
482
|
const src = (e.activeTargetId ? e.tabs.get(e.activeTargetId) : null)?.cdp ?? [...e.tabs.values()][0]?.cdp;
|
|
414
483
|
if (!src) return [];
|
|
415
|
-
|
|
484
|
+
let infos = ((await src.send("Target.getTargets").catch(() => null))?.targetInfos ?? []).filter((t) => t.type === "page");
|
|
485
|
+
if (infos.length === 0 && e.context.pages().length > 0) {
|
|
486
|
+
await this.healHandles(e);
|
|
487
|
+
infos = ((await ((e.activeTargetId ? e.tabs.get(e.activeTargetId) : null)?.cdp ?? [...e.tabs.values()][0]?.cdp)?.send("Target.getTargets").catch(() => null))?.targetInfos ?? []).filter((t) => t.type === "page");
|
|
488
|
+
}
|
|
489
|
+
return infos.map((t) => ({
|
|
416
490
|
targetId: t.targetId,
|
|
417
491
|
url: t.url,
|
|
418
492
|
title: t.title,
|
|
419
493
|
active: t.targetId === e.activeTargetId
|
|
420
|
-
}))
|
|
494
|
+
})).sort((a, b) => {
|
|
495
|
+
const order = e.tabOrder ?? [];
|
|
496
|
+
const ia = order.indexOf(a.targetId);
|
|
497
|
+
const ib = order.indexOf(b.targetId);
|
|
498
|
+
return (ia === -1 ? Infinity : ia) - (ib === -1 ? Infinity : ib);
|
|
499
|
+
});
|
|
421
500
|
}
|
|
422
501
|
/** Attach (lazily), seed the first frame, re-apply the viewport, and move
|
|
423
502
|
* the active pointer (ADR-0040 D1/D2/D4). The OLD active relay pauses —
|
|
@@ -446,6 +525,9 @@ var BrowserRegistry = class {
|
|
|
446
525
|
});
|
|
447
526
|
}
|
|
448
527
|
e.activeTargetId = targetId;
|
|
528
|
+
for (const l of e.activeListeners ?? []) try {
|
|
529
|
+
l(targetId);
|
|
530
|
+
} catch {}
|
|
449
531
|
let url = "";
|
|
450
532
|
let title = "";
|
|
451
533
|
try {
|
|
@@ -538,6 +620,7 @@ var BrowserRegistry = class {
|
|
|
538
620
|
context,
|
|
539
621
|
tabs,
|
|
540
622
|
activeTargetId,
|
|
623
|
+
tabOrder: activeTargetId ? [activeTargetId] : [],
|
|
541
624
|
viewport: {
|
|
542
625
|
width: Math.max(200, Math.min(1920, options.width ?? 730)),
|
|
543
626
|
height: Math.max(120, Math.min(1080, options.height ?? 830))
|
|
@@ -557,6 +640,41 @@ var BrowserRegistry = class {
|
|
|
557
640
|
createdAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
558
641
|
};
|
|
559
642
|
state().entries.set(id, entry);
|
|
643
|
+
if (typeof context.on === "function") context.on("page", (page) => {
|
|
644
|
+
(async () => {
|
|
645
|
+
for (let i = 0; i < 10; i += 1) {
|
|
646
|
+
await new Promise((r) => setTimeout(r, 300));
|
|
647
|
+
try {
|
|
648
|
+
const scdp = await context.newCDPSession(page);
|
|
649
|
+
const info = await scdp.send("Target.getTargetInfo").catch(() => null);
|
|
650
|
+
await scdp.detach().catch(() => void 0);
|
|
651
|
+
const tid = info?.targetInfo?.targetId;
|
|
652
|
+
if (!tid) continue;
|
|
653
|
+
if (!entry.tabOrder.includes(tid)) entry.tabOrder.push(tid);
|
|
654
|
+
if (entry.activeTargetId !== tid && !entry.closed) await this.activate(id, tid);
|
|
655
|
+
return;
|
|
656
|
+
} catch {}
|
|
657
|
+
}
|
|
658
|
+
})();
|
|
659
|
+
});
|
|
660
|
+
if (!entry.headless) {
|
|
661
|
+
await this.applyPanelViewport(entry, {
|
|
662
|
+
cdp,
|
|
663
|
+
relay
|
|
664
|
+
}).catch(() => void 0);
|
|
665
|
+
const birthShot = await cdp.send("Page.captureScreenshot", {
|
|
666
|
+
format: "jpeg",
|
|
667
|
+
quality: cfg.screencastQuality
|
|
668
|
+
}).catch(() => null);
|
|
669
|
+
if (birthShot?.data) relay.reseed({
|
|
670
|
+
seq: 0,
|
|
671
|
+
jpeg: birthShot.data,
|
|
672
|
+
metadata: {
|
|
673
|
+
seeded: true,
|
|
674
|
+
birth: true
|
|
675
|
+
}
|
|
676
|
+
});
|
|
677
|
+
}
|
|
560
678
|
if (options.spawnMcp ?? true) {
|
|
561
679
|
if (process.env.DSI_MCP_IN_PROCESS === "1") {
|
|
562
680
|
evictBrainPort(brainPort, id);
|
|
@@ -678,18 +796,25 @@ var BrowserRegistry = class {
|
|
|
678
796
|
});
|
|
679
797
|
}
|
|
680
798
|
/** Navigate the session's active page — public because causing page
|
|
681
|
-
* damage is the only reliable way to make screencast emit a frame.
|
|
799
|
+
* damage is the only reliable way to make screencast emit a frame.
|
|
800
|
+
* BUGFIX (ADR-0039 follow-up, 2026-10-25): at a paced cadence finer than
|
|
801
|
+
* everyNthFrame=2 (e.g. the operator's live screencastMaxFps: 10 →
|
|
802
|
+
* everyNthFrame 3), a HEADLESS single-damage navigate composites only
|
|
803
|
+
* 1–2 frames and Chrome emits NOTHING — the glass froze on the old face
|
|
804
|
+
* after every header navigate. A bounded no-frame grace re-fires the
|
|
805
|
+
* deterministic captureScreenshot seed (the activate()/resize idiom):
|
|
806
|
+
* pacing still governs LIVE video; a discrete navigation always lands. */
|
|
682
807
|
async navigate(id, url, opts) {
|
|
683
808
|
const e = this.peek(id);
|
|
684
809
|
const h = await this.handleOf(e, opts?.targetId);
|
|
685
810
|
await h.cdp.send("Page.enable").catch(() => void 0);
|
|
811
|
+
const prevSeq = h.relay.latestFrame()?.seq ?? -1;
|
|
686
812
|
if (opts?.waitLoad) {
|
|
687
813
|
const loaded = this.waitLoad(h);
|
|
688
814
|
await h.cdp.send("Page.navigate", { url });
|
|
689
815
|
await loaded;
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
await h.cdp.send("Page.navigate", { url });
|
|
816
|
+
} else await h.cdp.send("Page.navigate", { url });
|
|
817
|
+
this.seedAfterNavigate(h, prevSeq).catch(() => void 0);
|
|
693
818
|
}
|
|
694
819
|
/** Match the page viewport to the panel's glass box (ADR-0031
|
|
695
820
|
* amendment 2): the screencast frame then equals the panel size, so
|
|
@@ -708,16 +833,240 @@ var BrowserRegistry = class {
|
|
|
708
833
|
await handle.cdp.send("Page.enable").catch(() => void 0);
|
|
709
834
|
const prevSeq = handle.relay.latestFrame()?.seq ?? -1;
|
|
710
835
|
await this.applyPanelViewport(e, handle);
|
|
711
|
-
await this.
|
|
712
|
-
}
|
|
713
|
-
/**
|
|
714
|
-
*
|
|
715
|
-
*
|
|
716
|
-
*
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
836
|
+
await this.repairSurfaceAfterResize(e, handle, prevSeq).catch(() => void 0);
|
|
837
|
+
}
|
|
838
|
+
/** The window id, retried — Target.getWindowForTarget on a Playwright
|
|
839
|
+
* page session races out on a COLD headed launch (measured in the
|
|
840
|
+
* surface-lag test: both resizes skipped, the birth window kept its
|
|
841
|
+
* size). Three bounded tries; the caller's race caps still apply. */
|
|
842
|
+
async windowIdOf(anyCdp, race, targetId) {
|
|
843
|
+
for (let i = 0; i < 3; i += 1) {
|
|
844
|
+
const t = await race(anyCdp.send("Target.getWindowForTarget"), null);
|
|
845
|
+
if (t && t.windowId) return t;
|
|
846
|
+
const b = await race(anyCdp.send("Browser.getWindowForTarget", targetId ? { targetId } : {}), null);
|
|
847
|
+
if (b && b.windowId) return b;
|
|
848
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
849
|
+
}
|
|
850
|
+
return null;
|
|
851
|
+
}
|
|
852
|
+
/** ADR-0041 D3 + the surface-lag repair (BUG 2026-10-26): a resize must
|
|
853
|
+
* REPAINT at the REQUESTED size, not just emit SOME fresh frame. Two
|
|
854
|
+
* failure shapes live here:
|
|
855
|
+
* 1. the SILENT page — the screencast speaks only on change, so a
|
|
856
|
+
* static page never repaints (the 2026-10-25 black bands);
|
|
857
|
+
* 2. the STALE SURFACE — a headed off-screen window takes the new
|
|
858
|
+
* RENDERER size but macOS never reallocates the compositor surface:
|
|
859
|
+
* every frame (even captureScreenshot) keeps arriving at the OLD
|
|
860
|
+
* height, and the panel letterboxes it (the operator's top/bottom
|
|
861
|
+
* bands at every height grow). Measured: 53 frames over 6s all at
|
|
862
|
+
* the old 832 while innerHeight was 919; captureScreenshot agreed
|
|
863
|
+
* with the stale surface. A window-state BOUNCE (minimize ->
|
|
864
|
+
* normal — invisible at -32000,-32000) forces the window server to
|
|
865
|
+
* reallocate; frames then arrive at the requested size.
|
|
866
|
+
* Ladder: grace for a frame whose JPEG dims MATCH the request ->
|
|
867
|
+
* bounce (headed only) -> second grace -> deterministic
|
|
868
|
+
* captureScreenshot reseed (reseed: a stale REAL frame may sit atop
|
|
869
|
+
* the ring, and seed() refuses to cover one). Capped throughout —
|
|
870
|
+
* nothing here may hang the verb (the 2.5s rule). */
|
|
871
|
+
async repairSurfaceAfterResize(e, handle, prevSeq) {
|
|
872
|
+
const want = {
|
|
873
|
+
w: e.viewport.width,
|
|
874
|
+
h: e.viewport.height
|
|
875
|
+
};
|
|
876
|
+
const dimsOf = (f) => {
|
|
877
|
+
if (!f) return null;
|
|
878
|
+
const md = f.metadata;
|
|
879
|
+
const mw = Number(md?.deviceWidth);
|
|
880
|
+
const mh = Number(md?.deviceHeight);
|
|
881
|
+
if (Number.isFinite(mw) && Number.isFinite(mh) && mw > 0 && mh > 0) return {
|
|
882
|
+
w: mw,
|
|
883
|
+
h: mh
|
|
884
|
+
};
|
|
885
|
+
const b = Buffer.from(f.jpeg, "base64");
|
|
886
|
+
let i = 2;
|
|
887
|
+
while (i < b.length - 9) {
|
|
888
|
+
if (b[i] !== 255) {
|
|
889
|
+
i += 1;
|
|
890
|
+
continue;
|
|
891
|
+
}
|
|
892
|
+
const marker = b[i + 1];
|
|
893
|
+
if (marker >= 192 && marker <= 207 && marker !== 196 && marker !== 200 && marker !== 204) return {
|
|
894
|
+
h: b.readUInt16BE(i + 5),
|
|
895
|
+
w: b.readUInt16BE(i + 7)
|
|
896
|
+
};
|
|
897
|
+
i += Math.max(2, b.readUInt16BE(i + 2));
|
|
898
|
+
}
|
|
899
|
+
return null;
|
|
900
|
+
};
|
|
901
|
+
const matched = () => {
|
|
902
|
+
const f = handle.relay.latestFrame();
|
|
903
|
+
if (!f || f.seq === prevSeq) return false;
|
|
904
|
+
const d = dimsOf(f);
|
|
905
|
+
return d !== null && Math.abs(d.w - want.w) < 3 && Math.abs(d.h - want.h) < 3;
|
|
906
|
+
};
|
|
907
|
+
for (let i = 0; i < 10 && !matched(); i += 1) await new Promise((r) => setTimeout(r, 100));
|
|
908
|
+
if (matched()) return;
|
|
909
|
+
if (e.headless) {
|
|
910
|
+
const raceH = async (p, fb) => {
|
|
911
|
+
const timeout = new Promise((res) => setTimeout(() => res(fb), 2500));
|
|
912
|
+
return await Promise.race([p.catch(() => fb), timeout]);
|
|
913
|
+
};
|
|
914
|
+
const anyCdpH = handle.cdp;
|
|
915
|
+
await raceH(anyCdpH.send("Emulation.setDeviceMetricsOverride", {
|
|
916
|
+
width: want.w,
|
|
917
|
+
height: want.h,
|
|
918
|
+
deviceScaleFactor: 1,
|
|
919
|
+
mobile: false
|
|
920
|
+
}).then(() => null), null);
|
|
921
|
+
await new Promise((r) => setTimeout(r, 400));
|
|
922
|
+
const shotH = await raceH(handle.cdp.send("Page.captureScreenshot", {
|
|
923
|
+
format: "jpeg",
|
|
924
|
+
quality: readBrowserConfig().screencastQuality
|
|
925
|
+
}).catch(() => null), null);
|
|
926
|
+
if (shotH?.data) handle.relay.reseed({
|
|
927
|
+
seq: 0,
|
|
928
|
+
jpeg: shotH.data,
|
|
929
|
+
metadata: {
|
|
930
|
+
seeded: true,
|
|
931
|
+
resize: true
|
|
932
|
+
}
|
|
933
|
+
});
|
|
934
|
+
return;
|
|
935
|
+
}
|
|
936
|
+
if (!e.headless) {
|
|
937
|
+
const race = async (p, fb) => {
|
|
938
|
+
const timeout = new Promise((res) => setTimeout(() => res(fb), 2500));
|
|
939
|
+
return await Promise.race([p.catch(() => fb), timeout]);
|
|
940
|
+
};
|
|
941
|
+
const anyCdp = handle.cdp;
|
|
942
|
+
const win = await this.windowIdOf(anyCdp, race, e.activeTargetId ?? void 0);
|
|
943
|
+
if (win?.windowId) {
|
|
944
|
+
let cw = e.chrome?.w ?? 0;
|
|
945
|
+
let ch = e.chrome?.h ?? 0;
|
|
946
|
+
console.log("[surface] ladder start want", want.w + "x" + want.h, "learned chrome", cw + "/" + ch);
|
|
947
|
+
for (let i = 0; i < 3; i += 1) {
|
|
948
|
+
await race(anyCdp.send("Browser.setWindowBounds", {
|
|
949
|
+
windowId: win.windowId,
|
|
950
|
+
bounds: {
|
|
951
|
+
width: Math.max(200, want.w + cw),
|
|
952
|
+
height: Math.max(120, want.h + ch),
|
|
953
|
+
windowState: "normal"
|
|
954
|
+
}
|
|
955
|
+
}), null);
|
|
956
|
+
await new Promise((r) => setTimeout(r, 350));
|
|
957
|
+
const shot = await race(anyCdp.send("Page.captureScreenshot", {
|
|
958
|
+
format: "jpeg",
|
|
959
|
+
quality: 60
|
|
960
|
+
}), null);
|
|
961
|
+
const d = shot?.data ? dimsOf({
|
|
962
|
+
jpeg: shot.data,
|
|
963
|
+
metadata: {}
|
|
964
|
+
}) : null;
|
|
965
|
+
if (d && Math.abs(d.w - want.w) < 3 && Math.abs(d.h - want.h) < 3) {
|
|
966
|
+
console.log("[surface] iter", i, "converged: capture", d.w + "x" + d.h, "chrome", cw + "/" + ch);
|
|
967
|
+
e.chrome = {
|
|
968
|
+
w: cw,
|
|
969
|
+
h: ch
|
|
970
|
+
};
|
|
971
|
+
if (shot?.data) handle.relay.reseed({
|
|
972
|
+
seq: 0,
|
|
973
|
+
jpeg: shot.data,
|
|
974
|
+
metadata: {
|
|
975
|
+
seeded: true,
|
|
976
|
+
resize: true
|
|
977
|
+
}
|
|
978
|
+
});
|
|
979
|
+
return;
|
|
980
|
+
}
|
|
981
|
+
console.log("[surface] iter", i, "miss: capture", d ? d.w + "x" + d.h : "null", "at bounds", want.w + cw + "x" + (want.h + ch));
|
|
982
|
+
if (!d) continue;
|
|
983
|
+
const cur = await race(anyCdp.send("Browser.getWindowForTarget", { targetId: e.activeTargetId }), null);
|
|
984
|
+
if (cur?.bounds?.width && cur?.bounds?.height) {
|
|
985
|
+
cw = Math.max(0, cur.bounds.width - d.w);
|
|
986
|
+
ch = Math.max(0, cur.bounds.height - d.h);
|
|
987
|
+
} else {
|
|
988
|
+
cw += Math.max(0, want.w - d.w);
|
|
989
|
+
ch += Math.max(0, want.h - d.h);
|
|
990
|
+
}
|
|
991
|
+
}
|
|
992
|
+
e.chrome = {
|
|
993
|
+
w: cw,
|
|
994
|
+
h: ch
|
|
995
|
+
};
|
|
996
|
+
await race(anyCdp.send("Browser.setWindowBounds", {
|
|
997
|
+
windowId: win.windowId,
|
|
998
|
+
bounds: { windowState: "minimized" }
|
|
999
|
+
}), null);
|
|
1000
|
+
await race(anyCdp.send("Browser.setWindowBounds", {
|
|
1001
|
+
windowId: win.windowId,
|
|
1002
|
+
bounds: { windowState: "normal" }
|
|
1003
|
+
}), null);
|
|
1004
|
+
await race(anyCdp.send("Browser.setWindowBounds", {
|
|
1005
|
+
windowId: win.windowId,
|
|
1006
|
+
bounds: {
|
|
1007
|
+
width: Math.max(200, want.w + cw),
|
|
1008
|
+
height: Math.max(120, want.h + ch),
|
|
1009
|
+
windowState: "normal"
|
|
1010
|
+
}
|
|
1011
|
+
}), null);
|
|
1012
|
+
await new Promise((r) => setTimeout(r, 300));
|
|
1013
|
+
for (let i = 0; i < 10 && !matched(); i += 1) await new Promise((r) => setTimeout(r, 100));
|
|
1014
|
+
if (matched()) return;
|
|
1015
|
+
const parked = {
|
|
1016
|
+
width: Math.max(200, want.w + cw),
|
|
1017
|
+
height: Math.max(120, want.h + ch),
|
|
1018
|
+
windowState: "normal"
|
|
1019
|
+
};
|
|
1020
|
+
await race(anyCdp.send("Browser.setWindowBounds", {
|
|
1021
|
+
windowId: win.windowId,
|
|
1022
|
+
bounds: {
|
|
1023
|
+
...parked,
|
|
1024
|
+
left: 10,
|
|
1025
|
+
top: 10
|
|
1026
|
+
}
|
|
1027
|
+
}), null);
|
|
1028
|
+
await new Promise((r) => setTimeout(r, 400));
|
|
1029
|
+
await race(anyCdp.send("Browser.setWindowBounds", {
|
|
1030
|
+
windowId: win.windowId,
|
|
1031
|
+
bounds: {
|
|
1032
|
+
...parked,
|
|
1033
|
+
left: -32e3,
|
|
1034
|
+
top: -32e3
|
|
1035
|
+
}
|
|
1036
|
+
}), null);
|
|
1037
|
+
await new Promise((r) => setTimeout(r, 300));
|
|
1038
|
+
for (let i = 0; i < 10 && !matched(); i += 1) await new Promise((r) => setTimeout(r, 100));
|
|
1039
|
+
if (matched()) return;
|
|
1040
|
+
console.log("[surface] ladder exhausted: bounce+flash ran, stream frames still", (() => {
|
|
1041
|
+
const d = dimsOf(handle.relay.latestFrame());
|
|
1042
|
+
return d ? d.w + "x" + d.h : "unknown";
|
|
1043
|
+
})());
|
|
1044
|
+
}
|
|
1045
|
+
}
|
|
1046
|
+
const cfg = readBrowserConfig();
|
|
1047
|
+
const shot = await handle.cdp.send("Page.captureScreenshot", {
|
|
1048
|
+
format: "jpeg",
|
|
1049
|
+
quality: cfg.screencastQuality
|
|
1050
|
+
}).catch(() => null);
|
|
1051
|
+
const fd = shot?.data ? dimsOf({
|
|
1052
|
+
jpeg: shot.data,
|
|
1053
|
+
metadata: {}
|
|
1054
|
+
}) : null;
|
|
1055
|
+
console.log("[surface] final reseed capture:", fd ? fd.w + "x" + fd.h : "null", "want", want.w + "x" + want.h);
|
|
1056
|
+
if (shot?.data) handle.relay.reseed({
|
|
1057
|
+
seq: 0,
|
|
1058
|
+
jpeg: shot.data,
|
|
1059
|
+
metadata: {
|
|
1060
|
+
seeded: true,
|
|
1061
|
+
resize: true
|
|
1062
|
+
}
|
|
1063
|
+
});
|
|
1064
|
+
}
|
|
1065
|
+
/** The navigate path's seed arm (ADR-0039 follow-up): same bounded grace,
|
|
1066
|
+
* but the synthesized replacement must land OVER the opener's synthesized
|
|
1067
|
+
* frame — seed() refuses that, reseed() is the honest verb (the mirror
|
|
1068
|
+
* froze on the old face after every paced navigate otherwise). */
|
|
1069
|
+
async seedAfterNavigate(handle, prevSeq) {
|
|
721
1070
|
for (let i = 0; i < 10 && (handle.relay.latestFrame()?.seq ?? -1) === prevSeq; i += 1) await new Promise((r) => setTimeout(r, 100));
|
|
722
1071
|
if ((handle.relay.latestFrame()?.seq ?? -1) !== prevSeq) return;
|
|
723
1072
|
const cfg = readBrowserConfig();
|
|
@@ -725,12 +1074,12 @@ var BrowserRegistry = class {
|
|
|
725
1074
|
format: "jpeg",
|
|
726
1075
|
quality: cfg.screencastQuality
|
|
727
1076
|
}).catch(() => null);
|
|
728
|
-
if (shot?.data) handle.relay.
|
|
1077
|
+
if (shot?.data) handle.relay.reseed({
|
|
729
1078
|
seq: 0,
|
|
730
1079
|
jpeg: shot.data,
|
|
731
1080
|
metadata: {
|
|
732
1081
|
seeded: true,
|
|
733
|
-
|
|
1082
|
+
navigate: true
|
|
734
1083
|
}
|
|
735
1084
|
});
|
|
736
1085
|
}
|
|
@@ -838,8 +1187,14 @@ var BrowserRegistry = class {
|
|
|
838
1187
|
};
|
|
839
1188
|
}
|
|
840
1189
|
}
|
|
841
|
-
/** Open a NEW tab in the glass
|
|
842
|
-
*
|
|
1190
|
+
/** Open a NEW tab in the glass and make it the active face. With a
|
|
1191
|
+
* `url`: the context-menu open-link/image path — create BLANK then
|
|
1192
|
+
* navigate through the verb seam (createTarget with a URL races its own
|
|
1193
|
+
* navigation and lands on chrome-error, observed 2026-10-25). WITHOUT a
|
|
1194
|
+
* url (ADR-0042 D2, the + chip): createTarget ONLY — the birth state
|
|
1195
|
+
* again, no navigation. Either way activate() applies the first-frame
|
|
1196
|
+
* contract (ADR-0040 D4 / ADR-0042 D4: grace, then a captureScreenshot
|
|
1197
|
+
* seed) and returns the boundary payload the caller paints. */
|
|
843
1198
|
async openTab(id, url, opts) {
|
|
844
1199
|
const e = this.peek(id);
|
|
845
1200
|
if (e.closed) throw new BrowserRegistryRefusal("CLOSED", "session is closing");
|
|
@@ -847,22 +1202,21 @@ var BrowserRegistry = class {
|
|
|
847
1202
|
if (!src) throw new BrowserRegistryRefusal("CLOSED", "no tab handle to create from");
|
|
848
1203
|
const targetId = (await src.send("Target.createTarget", { url: "about:blank" }))?.targetId;
|
|
849
1204
|
if (!targetId) throw new BrowserRegistryRefusal("NO_TARGET", "Target.createTarget returned no id");
|
|
850
|
-
await this.navigate(id, url, {
|
|
1205
|
+
if (url) await this.navigate(id, url, {
|
|
851
1206
|
waitLoad: true,
|
|
852
1207
|
targetId
|
|
853
1208
|
});
|
|
854
|
-
if (opts?.activate ?? true)
|
|
1209
|
+
if (opts?.activate ?? true) return {
|
|
1210
|
+
...await this.activate(id, targetId),
|
|
1211
|
+
targetId
|
|
1212
|
+
};
|
|
855
1213
|
const h = e.tabs.get(targetId);
|
|
856
|
-
const pi = await this.pageInfo(id, targetId).catch(() => ({
|
|
857
|
-
url,
|
|
858
|
-
title: ""
|
|
859
|
-
}));
|
|
860
1214
|
return {
|
|
861
1215
|
targetId,
|
|
862
1216
|
seq: h?.relay.latestFrame()?.seq ?? 0,
|
|
863
1217
|
jpeg: h?.relay.latestFrame()?.jpeg ?? null,
|
|
864
|
-
url:
|
|
865
|
-
title:
|
|
1218
|
+
url: url ?? "about:blank",
|
|
1219
|
+
title: ""
|
|
866
1220
|
};
|
|
867
1221
|
}
|
|
868
1222
|
/** Apply the remembered panel viewport by RESIZING THE WINDOW (round 10:
|
|
@@ -885,6 +1239,12 @@ var BrowserRegistry = class {
|
|
|
885
1239
|
width: e.viewport.width,
|
|
886
1240
|
height: e.viewport.height
|
|
887
1241
|
}).catch(() => void 0), new Promise((res) => setTimeout(res, 2500))]);
|
|
1242
|
+
await handle.cdp.send("Emulation.setDeviceMetricsOverride", {
|
|
1243
|
+
width: e.viewport.width,
|
|
1244
|
+
height: e.viewport.height,
|
|
1245
|
+
deviceScaleFactor: 1,
|
|
1246
|
+
mobile: false
|
|
1247
|
+
}).catch(() => void 0);
|
|
888
1248
|
return;
|
|
889
1249
|
}
|
|
890
1250
|
const race = async (p, fb) => await Promise.race([p.catch(() => fb), new Promise((res) => setTimeout(() => res(fb), 2500))]);
|
|
@@ -893,14 +1253,19 @@ var BrowserRegistry = class {
|
|
|
893
1253
|
expression: "JSON.stringify({ oh: window.outerHeight - window.innerHeight, ow: window.outerWidth - window.innerWidth })",
|
|
894
1254
|
returnByValue: true
|
|
895
1255
|
}), null);
|
|
896
|
-
let chromeH =
|
|
1256
|
+
let chromeH = e.chrome?.h ?? 0;
|
|
1257
|
+
let chromeW = e.chrome?.w ?? 0;
|
|
897
1258
|
try {
|
|
898
1259
|
const d = JSON.parse(dims && dims.result && dims.result.value || "{}");
|
|
899
|
-
|
|
900
|
-
|
|
1260
|
+
const oh = Number(d.oh) || 0;
|
|
1261
|
+
const ow = Number(d.ow) || 0;
|
|
1262
|
+
if (oh > 0 || ow > 0) {
|
|
1263
|
+
chromeH = oh;
|
|
1264
|
+
chromeW = ow;
|
|
1265
|
+
}
|
|
901
1266
|
} catch {}
|
|
902
1267
|
const anyCdp2 = handle.cdp;
|
|
903
|
-
const win = await
|
|
1268
|
+
const win = await this.windowIdOf(anyCdp2, race);
|
|
904
1269
|
if (win && win.windowId) {
|
|
905
1270
|
await race(anyCdp2.send("Browser.setWindowBounds", {
|
|
906
1271
|
windowId: win.windowId,
|
|
@@ -910,6 +1275,10 @@ var BrowserRegistry = class {
|
|
|
910
1275
|
windowState: "normal"
|
|
911
1276
|
}
|
|
912
1277
|
}), null);
|
|
1278
|
+
if (chromeW > 0 || chromeH > 0) e.chrome = {
|
|
1279
|
+
w: chromeW,
|
|
1280
|
+
h: chromeH
|
|
1281
|
+
};
|
|
913
1282
|
const check = await race(anyCdp2.send("Browser.getWindowForTarget", { targetId: e.activeTargetId }), null);
|
|
914
1283
|
console.log("[window] resized ->", JSON.stringify(check && check.bounds ? check.bounds : check), "want", e.viewport.width + chromeW, "x", e.viewport.height + chromeH);
|
|
915
1284
|
} else console.log("[window] no windowId — resize skipped (raced out)");
|
|
@@ -951,4 +1320,4 @@ var BrowserRegistry = class {
|
|
|
951
1320
|
var browserRegistry = new BrowserRegistry();
|
|
952
1321
|
|
|
953
1322
|
export { BrowserRegistryRefusal as B, browserRegistry as b };
|
|
954
|
-
//# sourceMappingURL=registry.js-
|
|
1323
|
+
//# sourceMappingURL=registry.js-syaTZ_-A.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as isConfigRecord } from './config.js-
|
|
1
|
+
import { i as isConfigRecord } from './config.js-s6iKwHD7.js';
|
|
2
2
|
import { existsSync, readFileSync, cpSync, mkdirSync, writeFileSync, renameSync } from 'node:fs';
|
|
3
3
|
import { dirname, join } from 'node:path';
|
|
4
4
|
import { homedir } from 'node:os';
|
|
@@ -159,4 +159,4 @@ function parseYamlSettings(text) {
|
|
|
159
159
|
}
|
|
160
160
|
|
|
161
161
|
export { SettingsParseError as S, ensureDsiHome as e, migrateLegacyDsiConfig as m, parseYamlSettings as p, readSettingsDocument as r, saveSettingsDocument as s };
|
|
162
|
-
//# sourceMappingURL=settings-document.js-
|
|
162
|
+
//# sourceMappingURL=settings-document.js-BHESJ7im.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { i as index_server_exports } from './index-server.js-DmIEbDVz.js';
|
|
2
2
|
import './shared.js-HQ0rfhm4.js';
|
|
3
|
-
import './internal2.js-
|
|
3
|
+
import './internal2.js-CaZaz-a9.js';
|
|
4
4
|
import './exports.js-DH_tjtdv.js';
|
|
5
5
|
import { U as snapshot, g as getContext, n as noop } from './server.js-B1bDXhHu.js';
|
|
6
|
-
import { U as UI_LOCALES } from './config.js-
|
|
6
|
+
import { U as UI_LOCALES } from './config.js-s6iKwHD7.js';
|
|
7
7
|
import { c as getLocale } from './runtime.js-CCJi3XaY.js';
|
|
8
8
|
import './utils.js-CAdNO8Tu.js';
|
|
9
9
|
|
|
@@ -304,4 +304,4 @@ var page = {
|
|
|
304
304
|
};
|
|
305
305
|
|
|
306
306
|
export { afterNavigate as a, backtoworkspace2 as b, currentLocale as c, dshunreachable1 as d, replaceState as e, page as p, reapednote1 as r, sessionnotfound2 as s, t, unexpectederror1 as u };
|
|
307
|
-
//# sourceMappingURL=state.js-
|
|
307
|
+
//# sourceMappingURL=state.js-oYjf745s.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { c as readA2aConfig } from './insight-config.js-
|
|
2
|
-
import { i as insertWaiting, o as openA2aDb, s as settleRow, p as pruneTerminalBefore, l as listWaiting } from './db.js-
|
|
3
|
-
import { g as getDshConnection } from './dsh-connection.js-
|
|
4
|
-
import { a as entryForEvent, h as historyToEvents } from './dsh-events.js-
|
|
1
|
+
import { c as readA2aConfig } from './insight-config.js-Db5fe5Df.js';
|
|
2
|
+
import { i as insertWaiting, o as openA2aDb, s as settleRow, p as pruneTerminalBefore, l as listWaiting } from './db.js-CxxWK5sn.js';
|
|
3
|
+
import { g as getDshConnection } from './dsh-connection.js-Chtudg1p.js';
|
|
4
|
+
import { a as entryForEvent, h as historyToEvents } from './dsh-events.js-BUdvZQmd.js';
|
|
5
5
|
|
|
6
6
|
//#region src/lib/server/a2a/matcher.ts
|
|
7
7
|
/**
|
|
@@ -470,4 +470,4 @@ function registerWatch(row) {
|
|
|
470
470
|
}
|
|
471
471
|
|
|
472
472
|
export { configureWatcher as c, ensureStarted as e, registerWatch as r };
|
|
473
|
-
//# sourceMappingURL=watcher.js-
|
|
473
|
+
//# sourceMappingURL=watcher.js-Ci9jsM5l.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { g as getRow } from '../../../../../chunks/db.js-
|
|
1
|
+
import { g as getRow } from '../../../../../chunks/db.js-CxxWK5sn.js';
|
|
2
2
|
import { j as json } from '../../../../../chunks/utils.js-CAdNO8Tu.js';
|
|
3
|
-
import '../../../../../chunks/insight-config.js-
|
|
4
|
-
import '../../../../../chunks/config.js-
|
|
5
|
-
import '../../../../../chunks/settings-document.js-
|
|
3
|
+
import '../../../../../chunks/insight-config.js-Db5fe5Df.js';
|
|
4
|
+
import '../../../../../chunks/config.js-s6iKwHD7.js';
|
|
5
|
+
import '../../../../../chunks/settings-document.js-BHESJ7im.js';
|
|
6
6
|
import 'node:fs';
|
|
7
7
|
import 'node:path';
|
|
8
8
|
import 'node:os';
|
|
@@ -36,4 +36,4 @@ var GET = ({ params }) => {
|
|
|
36
36
|
};
|
|
37
37
|
|
|
38
38
|
export { GET };
|
|
39
|
-
//# sourceMappingURL=_server.ts.js-
|
|
39
|
+
//# sourceMappingURL=_server.ts.js-CHaYhzjy.js.map
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { a as listRecent } from '../../../../chunks/db.js-
|
|
2
|
-
import { e as ensureStarted } from '../../../../chunks/watcher.js-
|
|
1
|
+
import { a as listRecent } from '../../../../chunks/db.js-CxxWK5sn.js';
|
|
2
|
+
import { e as ensureStarted } from '../../../../chunks/watcher.js-Ci9jsM5l.js';
|
|
3
3
|
import { j as json } from '../../../../chunks/utils.js-CAdNO8Tu.js';
|
|
4
|
-
import '../../../../chunks/insight-config.js-
|
|
5
|
-
import '../../../../chunks/config.js-
|
|
6
|
-
import '../../../../chunks/settings-document.js-
|
|
4
|
+
import '../../../../chunks/insight-config.js-Db5fe5Df.js';
|
|
5
|
+
import '../../../../chunks/config.js-s6iKwHD7.js';
|
|
6
|
+
import '../../../../chunks/settings-document.js-BHESJ7im.js';
|
|
7
7
|
import 'node:fs';
|
|
8
8
|
import 'node:path';
|
|
9
9
|
import 'node:os';
|
|
10
10
|
import 'yaml';
|
|
11
11
|
import '../../../../chunks/settings-home2.js-f75-B6RI.js';
|
|
12
12
|
import 'node:sqlite';
|
|
13
|
-
import '../../../../chunks/dsh-connection.js-
|
|
14
|
-
import '../../../../chunks/dsh-events.js-
|
|
13
|
+
import '../../../../chunks/dsh-connection.js-Chtudg1p.js';
|
|
14
|
+
import '../../../../chunks/dsh-events.js-BUdvZQmd.js';
|
|
15
15
|
import '../../../../chunks/merge.js-yMwW440S.js';
|
|
16
16
|
import '../../../../chunks/shared.js-HQ0rfhm4.js';
|
|
17
17
|
import '../../../../chunks/uneval.js-BJ9Qq2SF.js';
|
|
@@ -61,4 +61,4 @@ var GET = ({ url }) => {
|
|
|
61
61
|
};
|
|
62
62
|
|
|
63
63
|
export { GET };
|
|
64
|
-
//# sourceMappingURL=_server.ts.js-
|
|
64
|
+
//# sourceMappingURL=_server.ts.js-CdyqA85c.js.map
|