@deepseek-insight/dsi 0.10.0 → 0.10.1

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.
Files changed (58) hide show
  1. package/.agents/skills/glass-dsi/scripts/_connect.mjs +49 -9
  2. package/.agents/skills/glass-dsi/scripts/glass.mjs +6 -5
  3. package/.agents/skills/glass-url/scripts/_connect.mjs +56 -9
  4. package/.agents/skills/glass-url/scripts/glass-url.mjs +5 -4
  5. package/README.md +21 -0
  6. package/bin/dsi.mjs +44 -7
  7. package/bin/lib/dev-mode.mjs +8 -5
  8. package/bin/lib/glass-browser-bootstrap.mjs +115 -0
  9. package/bin/lib/mcp-banner.mjs +26 -0
  10. package/build/client/_app/immutable/assets/0.CxUWwepa.css +2 -0
  11. package/build/client/_app/immutable/assets/{2.D0QOh44D.css → 2.CSFboNRO.css} +1 -1
  12. package/build/client/_app/immutable/chunks/C4M9oU_3.js +1 -0
  13. package/build/client/_app/immutable/chunks/CNT-CapI.js +1 -0
  14. package/build/client/_app/immutable/chunks/DttyJZuo.js +2 -0
  15. package/build/client/_app/immutable/chunks/{Bu2owQS4.js → UcxQDPMg.js} +1 -1
  16. package/build/client/_app/immutable/entry/{app.DjLAWmJH.js → app.GxH1nznH.js} +2 -2
  17. package/build/client/_app/immutable/entry/start.P-LmBYpD.js +1 -0
  18. package/build/client/_app/immutable/nodes/{1.w6Hz6-dJ.js → 1.BVvBJtMj.js} +1 -1
  19. package/build/client/_app/immutable/nodes/{2.CFmqEODJ.js → 2.D0JzdegJ.js} +107 -107
  20. package/build/client/_app/version.json +1 -1
  21. package/build/handler.js +4 -4
  22. package/build/index.js +4 -4
  23. package/build/server/chunks/chunks/{internal2.js-DRFhzPda.js → internal2.js-BRzR_ZGp.js} +2 -2
  24. package/build/server/chunks/chunks/{registry.js-CWnRQ4vx.js → registry.js-6St5Biiy.js} +96 -10
  25. package/build/server/chunks/chunks/{state.js-kZHonU4N.js → state.js-Ct6h8rMl.js} +2 -2
  26. package/build/server/chunks/entries/endpoints/api/browser/_id_/activate/{_server.ts.js-sXqf-okw.js → _server.ts.js-DYvCel9L.js} +2 -2
  27. package/build/server/chunks/entries/endpoints/api/browser/_id_/close/{_server.ts.js-Byj9ApJh.js → _server.ts.js-CDNbpOqu.js} +2 -2
  28. package/build/server/chunks/entries/endpoints/api/browser/_id_/closetab/{_server.ts.js-DOIsrzvg.js → _server.ts.js-C8UZMTcb.js} +2 -2
  29. package/build/server/chunks/entries/endpoints/api/browser/_id_/element/{_server.ts.js-Cq3gmRfE.js → _server.ts.js-CERwttQS.js} +2 -2
  30. package/build/server/chunks/entries/endpoints/api/browser/_id_/history/{_server.ts.js-BGSLIV0t.js → _server.ts.js-DtVkS-mH.js} +2 -2
  31. package/build/server/chunks/entries/endpoints/api/browser/_id_/input/{_server.ts.js-8slca75-.js → _server.ts.js-C85umKKr.js} +2 -2
  32. package/build/server/chunks/entries/endpoints/api/browser/_id_/mcp/{_server.ts.js-CpbdTYds.js → _server.ts.js-CrTtygPQ.js} +2 -2
  33. package/build/server/chunks/entries/endpoints/api/browser/_id_/navigate/{_server.ts.js-Bls9LtLY.js → _server.ts.js-DgJ6DXVr.js} +2 -2
  34. package/build/server/chunks/entries/endpoints/api/browser/_id_/opentab/{_server.ts.js-DqNi_iW_.js → _server.ts.js-Bj9bKEEv.js} +2 -2
  35. package/build/server/chunks/entries/endpoints/api/browser/_id_/page/{_server.ts.js-DuXWwo7i.js → _server.ts.js--1WTGEfT.js} +2 -2
  36. package/build/server/chunks/entries/endpoints/api/browser/_id_/stream/{_server.ts.js-DXfqBDEw.js → _server.ts.js-D8hQe810.js} +2 -2
  37. package/build/server/chunks/entries/endpoints/api/browser/_id_/tabs/{_server.ts.js-Bgnl8lYs.js → _server.ts.js-CSYYFlm2.js} +2 -2
  38. package/build/server/chunks/entries/endpoints/api/browser/_id_/viewport/{_server.ts.js-FHmQVbrv.js → _server.ts.js-KJjT8zXH.js} +2 -2
  39. package/build/server/chunks/entries/endpoints/api/browser/_id_/zoom/{_server.ts.js-BV4cBtSA.js → _server.ts.js-DQtzgPeG.js} +2 -2
  40. package/build/server/chunks/entries/endpoints/api/browser/{_server.ts.js-4vgkwh7v.js → _server.ts.js-DSkCBGRA.js} +6 -3
  41. package/build/server/chunks/entries/pages/{_error.svelte.js-BKhpJygh.js → _error.svelte.js-BXD7Pthk.js} +3 -3
  42. package/build/server/chunks/entries/pages/{_page.svelte.js-BlbGdGej.js → _page.svelte.js-DaZfwP76.js} +234 -24
  43. package/build/server/chunks/{handler-BtG6aVza.js → handler-C5_-AjlT.js} +3 -3
  44. package/build/server/chunks/{index.js-rGfUdWOY.js → index.js-BECscw6k.js} +2 -2
  45. package/build/server/chunks/{manifest.js-DwQ7BEt1.js → manifest.js-aksIjogg.js} +20 -20
  46. package/build/server/chunks/nodes/{0.js-Cum-Y-us.js → 0.js-xX4GZsu5.js} +3 -3
  47. package/build/server/chunks/nodes/1.js-BaNGyV1A.js +9 -0
  48. package/build/server/chunks/nodes/{2.js-ButkUErW.js → 2.js-CBdFoBFK.js} +4 -4
  49. package/package.json +1 -1
  50. package/template/.dsi/prompts.sqlite-shm +0 -0
  51. package/template/.dsi/prompts.sqlite-wal +0 -0
  52. package/build/client/_app/immutable/assets/0.uhYTRapi.css +0 -2
  53. package/build/client/_app/immutable/chunks/0Uk2rkmL.js +0 -1
  54. package/build/client/_app/immutable/chunks/BaH6C3xD.js +0 -2
  55. package/build/client/_app/immutable/chunks/DXba8Dom.js +0 -1
  56. package/build/client/_app/immutable/entry/start.D-t6KuoK.js +0 -1
  57. package/build/server/chunks/nodes/1.js-D0EwPqp_.js +0 -9
  58. /package/build/client/_app/immutable/nodes/{0.DeDuCaDD.js → 0.CfpMgVS-.js} +0 -0
@@ -9,7 +9,7 @@ import { D as DEFAULT_IMAGE_LIMITS } from '../../chunks/image-limits.js-CUdJ0f7r
9
9
  import { s as sanitizeWorkspaceProfile, d as dsiKey, t as themePrefs } from '../../chunks/theme-prefs.svelte.js-8CaWz46g.js';
10
10
  import { a as appConfig, p as previewSegments, b as parseTagWords, i as isValidTagWord, s as shouldRecordPrompt, g as getTrigger, t as triggerMode, c as searchKey, d as textPreviewOf } from '../../chunks/app-config.svelte.js-BXjvTmJu.js';
11
11
  import { c as getLocale } from '../../chunks/runtime.js-CCJi3XaY.js';
12
- import { p as page, a as afterNavigate, t, c as currentLocale, e as replaceState, u as unexpectederror1, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, b as backtoworkspace2 } from '../../chunks/state.js-kZHonU4N.js';
12
+ import { p as page, a as afterNavigate, t, c as currentLocale, e as replaceState, u as unexpectederror1, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, b as backtoworkspace2 } from '../../chunks/state.js-Ct6h8rMl.js';
13
13
  import 'yaml';
14
14
  import 'html-to-image';
15
15
  import hljs from 'highlight.js/lib/core';
@@ -21,7 +21,7 @@ import xml from 'highlight.js/lib/languages/xml';
21
21
  import css from 'highlight.js/lib/languages/css';
22
22
  import '../../chunks/uneval.js-BJ9Qq2SF.js';
23
23
  import '../../chunks/shared.js-HQ0rfhm4.js';
24
- import '../../chunks/internal2.js-DRFhzPda.js';
24
+ import '../../chunks/internal2.js-BRzR_ZGp.js';
25
25
  import '../../chunks/utils.js-CAdNO8Tu.js';
26
26
 
27
27
  //#region src/lib/paraglide/messages/abort.js
@@ -924,21 +924,21 @@ var browserback1 = ((inputs = {}, options = {}) => {
924
924
  /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
925
925
  /** @typedef {{}} Browserchiplabel2Inputs */
926
926
  var en_browserchiplabel2 = () => {
927
- return `⌖ Browser`;
927
+ return `Browser`;
928
928
  };
929
929
  var zh_browserchiplabel2 = () => {
930
- return `⌖ 浏览器`;
930
+ return `浏览器`;
931
931
  };
932
932
  var id_browserchiplabel2 = () => {
933
- return `⌖ Peramban`;
933
+ return `Peramban`;
934
934
  };
935
935
  var es_browserchiplabel2 = () => {
936
- return `⌖ Navegador`;
936
+ return `Navegador`;
937
937
  };
938
938
  /**
939
939
  * | output |
940
940
  * | --- |
941
- * | "⌖ Browser" |
941
+ * | "Browser" |
942
942
  *
943
943
  * @param {Browserchiplabel2Inputs} inputs
944
944
  * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
@@ -984,6 +984,70 @@ var browserclosedelete2 = ((inputs = {}, options = {}) => {
984
984
  return en_browserclosedelete2();
985
985
  });
986
986
  //#endregion
987
+ //#region src/lib/paraglide/messages/browsercopied1.js
988
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
989
+ /** @typedef {{}} Browsercopied1Inputs */
990
+ var en_browsercopied1 = () => {
991
+ return `Copied`;
992
+ };
993
+ var zh_browsercopied1 = () => {
994
+ return `已复制`;
995
+ };
996
+ var id_browsercopied1 = () => {
997
+ return `Tersalin`;
998
+ };
999
+ var es_browsercopied1 = () => {
1000
+ return `Copiado`;
1001
+ };
1002
+ /**
1003
+ * | output |
1004
+ * | --- |
1005
+ * | "Copied" |
1006
+ *
1007
+ * @param {Browsercopied1Inputs} inputs
1008
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
1009
+ * @returns {LocalizedString}
1010
+ */
1011
+ var browsercopied1 = ((inputs = {}, options = {}) => {
1012
+ const locale = options.locale ?? getLocale();
1013
+ if (locale === "zh") return zh_browsercopied1();
1014
+ if (locale === "id") return id_browsercopied1();
1015
+ if (locale === "es") return es_browsercopied1();
1016
+ return en_browsercopied1();
1017
+ });
1018
+ //#endregion
1019
+ //#region src/lib/paraglide/messages/browsercopyurl2.js
1020
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
1021
+ /** @typedef {{}} Browsercopyurl2Inputs */
1022
+ var en_browsercopyurl2 = () => {
1023
+ return `Copy focused tab URL`;
1024
+ };
1025
+ var zh_browsercopyurl2 = () => {
1026
+ return `复制当前标签页 URL`;
1027
+ };
1028
+ var id_browsercopyurl2 = () => {
1029
+ return `Salin URL tab yang difokus`;
1030
+ };
1031
+ var es_browsercopyurl2 = () => {
1032
+ return `Copiar la URL de la pestaña enfocada`;
1033
+ };
1034
+ /**
1035
+ * | output |
1036
+ * | --- |
1037
+ * | "Copy focused tab URL" |
1038
+ *
1039
+ * @param {Browsercopyurl2Inputs} inputs
1040
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
1041
+ * @returns {LocalizedString}
1042
+ */
1043
+ var browsercopyurl2 = ((inputs = {}, options = {}) => {
1044
+ const locale = options.locale ?? getLocale();
1045
+ if (locale === "zh") return zh_browsercopyurl2();
1046
+ if (locale === "id") return id_browsercopyurl2();
1047
+ if (locale === "es") return es_browsercopyurl2();
1048
+ return en_browsercopyurl2();
1049
+ });
1050
+ //#endregion
987
1051
  //#region src/lib/paraglide/messages/browserctxcopyimage3.js
988
1052
  /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
989
1053
  /** @typedef {{}} Browserctxcopyimage3Inputs */
@@ -1176,6 +1240,38 @@ var browserforward1 = ((inputs = {}, options = {}) => {
1176
1240
  return en_browserforward1();
1177
1241
  });
1178
1242
  //#endregion
1243
+ //#region src/lib/paraglide/messages/browserheadedhint2.js
1244
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
1245
+ /** @typedef {{}} Browserheadedhint2Inputs */
1246
+ var en_browserheadedhint2 = () => {
1247
+ return `Shift opens a HEADED glass - a visible window on a disposable profile`;
1248
+ };
1249
+ var zh_browserheadedhint2 = () => {
1250
+ return `Shift opens a HEADED glass - a visible window on a disposable profile`;
1251
+ };
1252
+ var id_browserheadedhint2 = () => {
1253
+ return `Shift opens a HEADED glass - a visible window on a disposable profile`;
1254
+ };
1255
+ var es_browserheadedhint2 = () => {
1256
+ return `Shift opens a HEADED glass - a visible window on a disposable profile`;
1257
+ };
1258
+ /**
1259
+ * | output |
1260
+ * | --- |
1261
+ * | "Shift opens a HEADED glass - a visible window on a disposable profile" |
1262
+ *
1263
+ * @param {Browserheadedhint2Inputs} inputs
1264
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
1265
+ * @returns {LocalizedString}
1266
+ */
1267
+ var browserheadedhint2 = ((inputs = {}, options = {}) => {
1268
+ const locale = options.locale ?? getLocale();
1269
+ if (locale === "zh") return zh_browserheadedhint2();
1270
+ if (locale === "id") return id_browserheadedhint2();
1271
+ if (locale === "es") return es_browserheadedhint2();
1272
+ return en_browserheadedhint2();
1273
+ });
1274
+ //#endregion
1179
1275
  //#region src/lib/paraglide/messages/browserlaunching1.js
1180
1276
  /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
1181
1277
  /** @typedef {{}} Browserlaunching1Inputs */
@@ -13208,6 +13304,38 @@ var terminaldisabled1 = ((inputs = {}, options = {}) => {
13208
13304
  return en_terminaldisabled1();
13209
13305
  });
13210
13306
  //#endregion
13307
+ //#region src/lib/paraglide/messages/terminalfontslider2.js
13308
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
13309
+ /** @typedef {{}} Terminalfontslider2Inputs */
13310
+ var en_terminalfontslider2 = () => {
13311
+ return `terminal font size`;
13312
+ };
13313
+ var zh_terminalfontslider2 = () => {
13314
+ return `终端字号`;
13315
+ };
13316
+ var id_terminalfontslider2 = () => {
13317
+ return `ukuran font terminal`;
13318
+ };
13319
+ var es_terminalfontslider2 = () => {
13320
+ return `tamaño de fuente de la terminal`;
13321
+ };
13322
+ /**
13323
+ * | output |
13324
+ * | --- |
13325
+ * | "terminal font size" |
13326
+ *
13327
+ * @param {Terminalfontslider2Inputs} inputs
13328
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
13329
+ * @returns {LocalizedString}
13330
+ */
13331
+ var terminalfontslider2 = ((inputs = {}, options = {}) => {
13332
+ const locale = options.locale ?? getLocale();
13333
+ if (locale === "zh") return zh_terminalfontslider2();
13334
+ if (locale === "id") return id_terminalfontslider2();
13335
+ if (locale === "es") return es_terminalfontslider2();
13336
+ return en_terminalfontslider2();
13337
+ });
13338
+ //#endregion
13211
13339
  //#region src/lib/paraglide/messages/terminalopening1.js
13212
13340
  /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
13213
13341
  /** @typedef {{}} Terminalopening1Inputs */
@@ -15865,12 +15993,15 @@ var _index_exports = /* @__PURE__ */ __exportAll({
15865
15993
  browserBack: () => browserback1,
15866
15994
  browserChipLabel: () => browserchiplabel2,
15867
15995
  browserCloseDelete: () => browserclosedelete2,
15996
+ browserCopied: () => browsercopied1,
15997
+ browserCopyUrl: () => browsercopyurl2,
15868
15998
  browserCtxCopyImage: () => browserctxcopyimage3,
15869
15999
  browserCtxCopyLink: () => browserctxcopylink3,
15870
16000
  browserCtxOpenImage: () => browserctxopenimage3,
15871
16001
  browserCtxOpenLink: () => browserctxopenlink3,
15872
16002
  browserCtxSendRightClick: () => browserctxsendrightclick4,
15873
16003
  browserForward: () => browserforward1,
16004
+ browserHeadedHint: () => browserheadedhint2,
15874
16005
  browserLaunching: () => browserlaunching1,
15875
16006
  browserNewTab: () => browsernewtab2,
15876
16007
  browserOpenTitle: () => browseropentitle2,
@@ -16250,6 +16381,7 @@ var _index_exports = /* @__PURE__ */ __exportAll({
16250
16381
  tags: () => tags,
16251
16382
  terminalClosed: () => terminalclosed1,
16252
16383
  terminalDisabled: () => terminaldisabled1,
16384
+ terminalFontSlider: () => terminalfontslider2,
16253
16385
  terminalOpening: () => terminalopening1,
16254
16386
  terminalPanelTitle: () => terminalpaneltitle2,
16255
16387
  terminalSessionCap: () => terminalsessioncap2,
@@ -16368,12 +16500,15 @@ var messages_exports = /* @__PURE__ */ __exportAll({
16368
16500
  browserBack: () => browserback1,
16369
16501
  browserChipLabel: () => browserchiplabel2,
16370
16502
  browserCloseDelete: () => browserclosedelete2,
16503
+ browserCopied: () => browsercopied1,
16504
+ browserCopyUrl: () => browsercopyurl2,
16371
16505
  browserCtxCopyImage: () => browserctxcopyimage3,
16372
16506
  browserCtxCopyLink: () => browserctxcopylink3,
16373
16507
  browserCtxOpenImage: () => browserctxopenimage3,
16374
16508
  browserCtxOpenLink: () => browserctxopenlink3,
16375
16509
  browserCtxSendRightClick: () => browserctxsendrightclick4,
16376
16510
  browserForward: () => browserforward1,
16511
+ browserHeadedHint: () => browserheadedhint2,
16377
16512
  browserLaunching: () => browserlaunching1,
16378
16513
  browserNewTab: () => browsernewtab2,
16379
16514
  browserOpenTitle: () => browseropentitle2,
@@ -16754,6 +16889,7 @@ var messages_exports = /* @__PURE__ */ __exportAll({
16754
16889
  tags: () => tags,
16755
16890
  terminalClosed: () => terminalclosed1,
16756
16891
  terminalDisabled: () => terminaldisabled1,
16892
+ terminalFontSlider: () => terminalfontslider2,
16757
16893
  terminalOpening: () => terminalopening1,
16758
16894
  terminalPanelTitle: () => terminalpaneltitle2,
16759
16895
  terminalSessionCap: () => terminalsessioncap2,
@@ -17311,6 +17447,24 @@ function Git_branch($$renderer, $$props) {
17311
17447
  ]));
17312
17448
  }
17313
17449
  //#endregion
17450
+ //#region node_modules/.pnpm/@lucide+svelte@1.35.0_svelte@5.56.10/node_modules/@lucide/svelte/dist/icons/globe.svelte
17451
+ function Globe($$renderer, $$props) {
17452
+ let { $$slots, $$events, ...props } = $$props;
17453
+ Icon($$renderer, spread_props([
17454
+ { name: "globe" },
17455
+ props,
17456
+ { iconNode: [
17457
+ ["circle", {
17458
+ "cx": "12",
17459
+ "cy": "12",
17460
+ "r": "10"
17461
+ }],
17462
+ ["path", { "d": "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20" }],
17463
+ ["path", { "d": "M2 12h20" }]
17464
+ ] }
17465
+ ]));
17466
+ }
17467
+ //#endregion
17314
17468
  //#region node_modules/.pnpm/@lucide+svelte@1.35.0_svelte@5.56.10/node_modules/@lucide/svelte/dist/icons/hourglass.svelte
17315
17469
  function Hourglass($$renderer, $$props) {
17316
17470
  let { $$slots, $$events, ...props } = $$props;
@@ -18768,7 +18922,7 @@ function ThemeToggle($$renderer, $$props) {
18768
18922
  }
18769
18923
  //#endregion
18770
18924
  //#region package.json
18771
- var version = "0.10.0";
18925
+ var version = "0.10.1";
18772
18926
  var dsh = { "webVersion": "0.2.2-rc.1" };
18773
18927
  //#endregion
18774
18928
  //#region src/lib/version.ts
@@ -20136,6 +20290,13 @@ function panelPrefsKey(profile) {
20136
20290
  return dsiKey(PANEL_PREFS_KEY, profile);
20137
20291
  }
20138
20292
  var PANEL_WORKSPACE_FILE_MAX_WIDTH = 1436;
20293
+ /** The single terminal-font bound site — load-side sanitizing and the
20294
+ * TermFontSlider both route through here; junk (non-finite) falls back
20295
+ * to TERM_FONT_DEFAULT. Mirrors clampTreePct's discipline. */
20296
+ function clampTermFontSize(px) {
20297
+ if (typeof px !== "number" || !Number.isFinite(px)) return 12;
20298
+ return Math.max(8, Math.min(20, Math.round(px)));
20299
+ }
20139
20300
  /** The single treePct bound site — sanitize a stored or dragged value
20140
20301
  * into [TREE_PCT_MIN, TREE_PCT_MAX]; junk (non-finite) falls back to
20141
20302
  * TREE_PCT_DEFAULT. Mirrors clampPanelZoom's discipline. */
@@ -20245,7 +20406,8 @@ function defaultPanelPrefs() {
20245
20406
  panelWidth: defaultPanelWidth(),
20246
20407
  zoom: 1,
20247
20408
  treePct: 30,
20248
- explorerHidden: false
20409
+ explorerHidden: false,
20410
+ termFontSize: 12
20249
20411
  };
20250
20412
  }
20251
20413
  /**
@@ -20417,13 +20579,15 @@ function loadPanelPrefs(profile) {
20417
20579
  const zoom = typeof parsed.zoom === "number" && Number.isFinite(parsed.zoom) ? clampPanelZoom(parsed.zoom) : 1;
20418
20580
  const treePct = typeof parsed.treePct === "number" && Number.isFinite(parsed.treePct) ? clampTreePct(parsed.treePct) : 30;
20419
20581
  const explorerHidden = parsed.explorerHidden === true;
20582
+ const termFontSize = typeof parsed.termFontSize === "number" && Number.isFinite(parsed.termFontSize) ? clampTermFontSize(parsed.termFontSize) : 12;
20420
20583
  return {
20421
20584
  panels,
20422
20585
  selectedPanelId: typeof parsed.selectedPanelId === "string" && panels.some((panel) => panel.id === parsed.selectedPanelId) ? parsed.selectedPanelId : panels[0]?.id ?? null,
20423
20586
  panelWidth,
20424
20587
  zoom,
20425
20588
  treePct,
20426
- explorerHidden
20589
+ explorerHidden,
20590
+ termFontSize
20427
20591
  };
20428
20592
  } catch {
20429
20593
  return defaultPanelPrefs();
@@ -20735,6 +20899,9 @@ var PagePrefs = class {
20735
20899
  /** Explorer hide/show (2026-10-31 toggle RCA): $state is REQUIRED —
20736
20900
  * a plain field swallowed the toggle click silently (no re-render). */
20737
20901
  explorerHidden = false;
20902
+ /** Terminal base font in px (ADR-0041 Am.4): the TermFontSlider's
20903
+ * truth. Zoom multiplies on top — this is the preference NUMBER. */
20904
+ termFontSize = 12;
20738
20905
  /** Sidebar rail state (OCI ControlRail port). */
20739
20906
  sidebarCollapsed = false;
20740
20907
  sidebarWidth = 0;
@@ -20761,6 +20928,7 @@ var PagePrefs = class {
20761
20928
  this.zoom = clampPanelZoom(floor.zoom);
20762
20929
  this.treePct = clampTreePct(floor.treePct);
20763
20930
  this.explorerHidden = floor.explorerHidden === true;
20931
+ this.termFontSize = clampTermFontSize(floor.termFontSize);
20764
20932
  const sidebar = loadSidebarPrefs(profile);
20765
20933
  this.sidebarCollapsed = sidebar.collapsed;
20766
20934
  this.sidebarWidth = sidebar.width;
@@ -25710,7 +25878,7 @@ function ToolsAndStatusHeader($$renderer, $$props) {
25710
25878
  $$renderer.push(`<!----> <span class="inline-flex items-center gap-1 text-xs text-text-secondary" role="status"${attr("aria-label", isStreaming ? "running" : "idle")} data-testid="running-status"><span${attr_class("inline-block h-2 w-2 rounded-full", void 0, {
25711
25879
  "bg-status-pass": isStreaming,
25712
25880
  "bg-surface-border": !isStreaming
25713
- })}></span> ${escape_html(isStreaming ? "running" : "idle")}</span> `);
25881
+ })}></span> <span class="narrow-hide">${escape_html(isStreaming ? "running" : "idle")}</span></span> `);
25714
25882
  ForkButton($$renderer, {
25715
25883
  subagent
25716
25884
  });
@@ -25731,7 +25899,13 @@ function ToolsAndStatusHeader($$renderer, $$props) {
25731
25899
  //#region src/lib/components/conversation/header/BrowserButton.svelte
25732
25900
  function BrowserButton($$renderer, $$props) {
25733
25901
  $$renderer.component(($$renderer) => {
25734
- $$renderer.push(`<button data-svelte="BrowserButton" type="button" class="rounded border border-surface-border px-1.5 py-0.5 text-xs hover:bg-surface-active" data-testid="open-browser"${attr("title", browseropentitle2())}>${escape_html(browserchiplabel2())}</button>`);
25902
+ $$renderer.push(`<button data-svelte="BrowserButton" type="button" class="inline-flex items-center gap-1 rounded border border-surface-border px-1.5 py-0.5 text-xs hover:bg-surface-active" data-testid="open-browser"${attr("title", browseropentitle2() + " · " + browserheadedhint2())}>`);
25903
+ Globe($$renderer, {
25904
+ size: 12,
25905
+ class: "shrink-0",
25906
+ "aria-hidden": "true"
25907
+ });
25908
+ $$renderer.push(`<!----> <span class="narrow-hide">${escape_html(browserchiplabel2())}</span></button>`);
25735
25909
  });
25736
25910
  }
25737
25911
  //#endregion
@@ -33066,7 +33240,7 @@ function openWorkspaceExplorer(sessionId, workspace) {
33066
33240
  * browser panel across the floor — the terminal singleton rule (Terminal
33067
33241
  * Desk ADR D2). A click on an open browser FOCUSES it; a miss inserts at
33068
33242
  * the focused slot. */
33069
- function openBrowserPanel(index, keepSelection = false, width, openedBy, sessionId) {
33243
+ function openBrowserPanel(index, keepSelection = false, width, openedBy, sessionId, headedOpen) {
33070
33244
  const open = st.panels.find((p) => p.kind === "browser" && p.openedBy === openedBy);
33071
33245
  if (open) {
33072
33246
  st.selectedPanelId = open.id;
@@ -33074,7 +33248,7 @@ function openBrowserPanel(index, keepSelection = false, width, openedBy, session
33074
33248
  }
33075
33249
  const prevSelected = st.selectedPanelId;
33076
33250
  const slot = index !== void 0 ? Math.max(0, Math.min(index, st.panels.length)) : openedBy !== void 0 ? glassFirstSlot(st.panels, openedBy) : insertionSlot();
33077
- insertPanel(makeBrowserPanel(width, openedBy, sessionId), slot);
33251
+ insertPanel(makeBrowserPanel(width, openedBy, sessionId, headedOpen), slot);
33078
33252
  if (keepSelection && prevSelected !== null && prevSelected !== void 0) {
33079
33253
  if (st.panels.some((p) => p.id === prevSelected)) st.selectedPanelId = prevSelected;
33080
33254
  }
@@ -33354,13 +33528,14 @@ function makePanel(sessionId, agentPreset) {
33354
33528
  * chip clicks and legacy slots — the honest-slider preset.
33355
33529
  * openedBy: the opener session's provenance, recorded ONCE at spawn and
33356
33530
  * never rewritten (ADR-0036 D1/D2); undefined = no conversation context. */
33357
- function makeBrowserPanel(width, openedBy, sessionId) {
33531
+ function makeBrowserPanel(width, openedBy, sessionId, headedOpen) {
33358
33532
  return {
33359
33533
  id: nextPanelId(),
33360
33534
  kind: "browser",
33361
33535
  width: clampPanelWidth(width ?? browserPanelWidth(), "browser"),
33362
33536
  ...openedBy !== void 0 ? { openedBy } : {},
33363
- ...sessionId !== void 0 ? { browserSessionId: sessionId } : {}
33537
+ ...sessionId !== void 0 ? { browserSessionId: sessionId } : {},
33538
+ ...headedOpen ? { headedOpen: true } : {}
33364
33539
  };
33365
33540
  }
33366
33541
  function makeWorkspaceExplorerPanel(sessionId, root) {
@@ -34701,6 +34876,26 @@ function ChordPalette($$renderer, $$props) {
34701
34876
  });
34702
34877
  }
34703
34878
  //#endregion
34879
+ //#region src/lib/components/terminal/TermFontSlider.svelte
34880
+ function TermFontSlider($$renderer, $$props) {
34881
+ $$renderer.component(($$renderer) => {
34882
+ /**
34883
+ * TermFontSlider — the terminal base font control (ADR-0041 Am.4):
34884
+ * a right-aligned range input plus the px readout, mounted in the
34885
+ * TerminalPanel header row (the settle-badge's parent). Presentational
34886
+ * (house pattern, ZoomSlider 2026-11-02): the CALLER owns what a font
34887
+ * change means — the desk forwards px upward and the route persists
34888
+ * pagePrefs.termFontSize; the panel re-fires the pocket's refit.
34889
+ *
34890
+ * Contract: the prop is the base font in PX (TERM_FONT_MIN–MAX); the
34891
+ * slider renders and reports PX. The readout is exact at floor zoom 1
34892
+ * (zoom multiplies on top).
34893
+ */
34894
+ let { font, label, testid, class: className = "" } = $$props;
34895
+ $$renderer.push(`<div data-svelte="TermFontSlider"${attr_class(`flex shrink-0 items-center gap-1 ${stringify(className)}`)}><input type="range" min="8" max="20" step="1"${attr("value", font)}${attr("data-testid", testid)}${attr("aria-label", label)}${attr("title", label)} class="h-1 w-16 accent-[var(--color-accent-purple)]"/> <span class="text-right font-bold tabular-nums text-[var(--color-accent-purple)]"${attr("data-testid", `${stringify(testid)}-readout`)}>${escape_html(font)}px</span></div>`);
34896
+ });
34897
+ }
34898
+ //#endregion
34704
34899
  //#region src/lib/components/terminal/frame-state.ts
34705
34900
  var initialTerminalPanelState = {
34706
34901
  lastSettle: null,
@@ -34712,9 +34907,11 @@ var initialTerminalPanelState = {
34712
34907
  //#region src/lib/components/terminal/TerminalPanel.svelte
34713
34908
  function TerminalPanel($$renderer, $$props) {
34714
34909
  $$renderer.component(($$renderer) => {
34715
- let { onShellExit, assigned = null, onAssigned, zoom = 1 } = $$props;
34910
+ let { onShellExit, assigned = null, onAssigned, zoom = 1, termFontSize = 12, onFontChange } = $$props;
34716
34911
  /** Coerced zoom — the pocket's single source (null-safe default 1). */
34717
34912
  const pocketZoom = derived(() => zoom ?? 1);
34913
+ /** Coerced base font — the glyph-size preference (null-safe). */
34914
+ const baseFont = derived(() => termFontSize ?? 12);
34718
34915
  let panelState = { ...initialTerminalPanelState };
34719
34916
  Promise.resolve();
34720
34917
  /** Focus the live xterm surface (the desk's ⌥+N tab shortcut,
@@ -34735,7 +34932,13 @@ function TerminalPanel($$renderer, $$props) {
34735
34932
  } else $$renderer.push("<!--[-1-->");
34736
34933
  $$renderer.push(`<!--]--> `);
34737
34934
  $$renderer.push("<!--[-1-->");
34738
- $$renderer.push(`<!--]--> <div class="grow"></div></div> `);
34935
+ $$renderer.push(`<!--]--> <div class="grow"></div> `);
34936
+ TermFontSlider($$renderer, {
34937
+ font: baseFont(),
34938
+ label: t(terminalfontslider2),
34939
+ testid: "terminal-font-slider"
34940
+ });
34941
+ $$renderer.push(`<!----></div> `);
34739
34942
  $$renderer.push("<!--[-1-->");
34740
34943
  $$renderer.push(`<div class="relative min-h-72 grow overflow-hidden" data-testid="terminal-host" role="presentation"><div class="absolute inset-0 origin-top-left"${attr_style(pocketZoom() === 1 ? void 0 : `right: auto; bottom: auto; width: ${pocketZoom() * 100}%; height: ${pocketZoom() * 100}%; transform: scale(${1 / pocketZoom()});`)}><div class="absolute inset-0"></div></div></div> `);
34741
34944
  $$renderer.push("<!--[-1-->");
@@ -35030,9 +35233,11 @@ function TerminalDesk($$renderer, $$props) {
35030
35233
  * bare command behaves byte-identically to the pre-desk panel. */
35031
35234
  /** Null = self-open (the panel runs its own ladder and reports back
35032
35235
  * via onAssigned); set = the desk holds this session's lease. */
35033
- let { onShellExit, restored = null, onMirror, zoom = 1 } = $$props;
35236
+ let { onShellExit, restored = null, onMirror, zoom = 1, termFontSize = 12, onFontChange } = $$props;
35034
35237
  /** Coerced zoom — one pocket source for every row (null-safe default 1). */
35035
35238
  const deskZoom = derived(() => zoom ?? 1);
35239
+ /** Coerced base font — one glyph-size source for every row. */
35240
+ const deskFont = derived(() => termFontSize ?? 12);
35036
35241
  let nextKey = 1;
35037
35242
  const mkKey = () => nextKey++;
35038
35243
  const defaultTab = () => ({
@@ -35282,6 +35487,8 @@ function TerminalDesk($$renderer, $$props) {
35282
35487
  TerminalPanel($$renderer, {
35283
35488
  assigned: row.assigned,
35284
35489
  zoom: deskZoom(),
35490
+ termFontSize: deskFont(),
35491
+ onFontChange: (px) => onFontChange?.(px),
35285
35492
  onAssigned: (sessionId, token) => recordAssigned(row, sessionId, token),
35286
35493
  onShellExit: () => removeRow(i, row)
35287
35494
  });
@@ -35601,8 +35808,8 @@ function BrowserHeader($$renderer, $$props) {
35601
35808
  UrlCopy($$renderer, {
35602
35809
  class: "flex h-6 w-6 shrink-0 items-center justify-center rounded border border-surface-border bg-surface text-surface-muted hover:bg-surface-active disabled:opacity-40",
35603
35810
  copied,
35604
- copiedLabel: "Copied",
35605
- label: "Copy focused tab URL",
35811
+ copiedLabel: browsercopied1(),
35812
+ label: browsercopyurl2(),
35606
35813
  testid: "browser-copy-url",
35607
35814
  disabled: !copyUrl});
35608
35815
  $$renderer.push(`<!----> `);
@@ -38588,6 +38795,8 @@ function _page($$renderer, $$props) {
38588
38795
  TerminalDesk($$renderer, {
38589
38796
  restored: panel.desk ?? null,
38590
38797
  zoom: floorPanelId ? pagePrefs.zoom : 1,
38798
+ termFontSize: pagePrefs.termFontSize,
38799
+ onFontChange: (px) => pagePrefs.termFontSize = clampTermFontSize(px),
38591
38800
  onMirror: (m) => {
38592
38801
  terminalDeskMirrors[panel.id] = m;
38593
38802
  },
@@ -38603,6 +38812,7 @@ function _page($$renderer, $$props) {
38603
38812
  removePanel(panel.id);
38604
38813
  },
38605
38814
  openedBy: panel.openedBy,
38815
+ headedOpen: "headedOpen" in panel ? panel.headedOpen === true : false,
38606
38816
  parentTitle: panel.openedBy ? panelTitleFor(panel.openedBy) ?? panel.openedBy : null,
38607
38817
  depth: panel.openedBy ? lineageFacts().depthById.get(panel.openedBy) ?? 0 : 0});
38608
38818
  } else if (panel.kind === "injected-doc") {
@@ -38726,7 +38936,7 @@ function _page($$renderer, $$props) {
38726
38936
  a2aRows: a2aRowsFor(p.sessionId),
38727
38937
  a2aTitles: spineTitles(),
38728
38938
  onOpenExplorer: openWorkspaceExplorer,
38729
- onOpenBrowser: lineageFacts().subagentIds.has(p.sessionId) ? void 0 : () => openBrowserPanel(void 0, false, void 0, p.sessionId),
38939
+ onOpenBrowser: lineageFacts().subagentIds.has(p.sessionId) ? void 0 : (shift) => openBrowserPanel(void 0, false, void 0, p.sessionId, void 0, shift),
38730
38940
  focusComposer: p.id === focusComposerId(),
38731
38941
  oncomposerfocus: () => clearFocusComposer(),
38732
38942
  focused: p.id === selectedPanelId()
@@ -38755,7 +38965,7 @@ function _page($$renderer, $$props) {
38755
38965
  a2aTitles: spineTitles(),
38756
38966
  onNeedCold: (sid) => void ensureCold(sid),
38757
38967
  onOpenExplorer: openWorkspaceExplorer,
38758
- onOpenBrowser: lineageFacts().subagentIds.has(p.sessionId) ? void 0 : () => openBrowserPanel(void 0, false, void 0, p.sessionId),
38968
+ onOpenBrowser: lineageFacts().subagentIds.has(p.sessionId) ? void 0 : (shift) => openBrowserPanel(void 0, false, void 0, p.sessionId, void 0, shift),
38759
38969
  focusComposer: p.id === focusComposerId(),
38760
38970
  oncomposerfocus: () => clearFocusComposer(),
38761
38971
  focused: p.id === selectedPanelId()
@@ -38846,4 +39056,4 @@ function _page($$renderer, $$props) {
38846
39056
  }
38847
39057
 
38848
39058
  export { _page as default };
38849
- //# sourceMappingURL=_page.svelte.js-BlbGdGej.js.map
39059
+ //# sourceMappingURL=_page.svelte.js-DaZfwP76.js.map
@@ -9,8 +9,8 @@ import * as qs from 'node:querystring';
9
9
  import { Readable } from 'node:stream';
10
10
  import { S as SvelteKitError } from './chunks/shared.js-HQ0rfhm4.js';
11
11
  import './chunks/utils.js-CAdNO8Tu.js';
12
- import { S as Server } from './index.js-rGfUdWOY.js';
13
- import { m as manifest } from './manifest.js-DwQ7BEt1.js';
12
+ import { S as Server } from './index.js-BECscw6k.js';
13
+ import { m as manifest } from './manifest.js-aksIjogg.js';
14
14
  import { env, dir, env_prefix } from '../../env.js';
15
15
  import { format } from 'node:url';
16
16
 
@@ -1732,4 +1732,4 @@ const handler = sequence(
1732
1732
  );
1733
1733
 
1734
1734
  export { format_listening_address as f, handler as h, polka as p };
1735
- //# sourceMappingURL=handler-BtG6aVza.js.map
1735
+ //# sourceMappingURL=handler-C5_-AjlT.js.map
@@ -3,7 +3,7 @@ import { n as noop, T as TRAILING_SLASH_PARAM, I as INVALIDATED_PARAM, R as Redi
3
3
  import { b as base, o as override, a as assets, r as reset, c as app_dir } from './chunks/internal.js-BcS47nI-.js';
4
4
  import { f as format_server_error, j as json, i as is_form_content_type, t as text, h as has_prerendered_path, a as handle_fatal_error, r as redirect_response, g as get_set_cookies, n as negotiate, w as with_request_store, p as parseString, m as merge_tracing, b as method_not_allowed, s as static_error_page, c as handle_error_and_jsonify, d as get_global_name, e as create_replacer, k as serialize_uses, l as clarify_devalue_error, E as ENDPOINT_METHODS, P as PAGE_METHODS, o as get_node_type, q as isRedirect, u as escape_html, v as error, x as deserialize_binary_form } from './chunks/utils.js-CAdNO8Tu.js';
5
5
  import { u as uneval } from './chunks/uneval.js-BJ9Qq2SF.js';
6
- import { o as options, s as set_private_env, a as set_public_env, g as get_hooks, p as public_env, r as read_implementation, b as set_read_implementation } from './chunks/internal2.js-DRFhzPda.js';
6
+ import { o as options, s as set_private_env, a as set_public_env, g as get_hooks, p as public_env, r as read_implementation, b as set_read_implementation } from './chunks/internal2.js-BRzR_ZGp.js';
7
7
  import { d as decode_pathname, f as find_route, n as normalize_path, a as disable_search, v as validate_layout_server_exports, b as validate_layout_exports, c as validate_page_server_exports, e as validate_page_exports, r as resolve, h as hash, m as make_trackable } from './chunks/exports.js-DH_tjtdv.js';
8
8
  import { S as readable, T as writable } from './chunks/server.js-Dijo7DtV.js';
9
9
 
@@ -3862,4 +3862,4 @@ var Server = class {
3862
3862
  };
3863
3863
 
3864
3864
  export { Server as S };
3865
- //# sourceMappingURL=index.js-rGfUdWOY.js.map
3865
+ //# sourceMappingURL=index.js-BECscw6k.js.map