@deepseek-insight/dsi 0.6.21 → 0.7.0

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 (96) hide show
  1. package/bin/dsi.mjs +16 -8
  2. package/bin/lib/dev-mode.mjs +6 -2
  3. package/build/client/_app/immutable/assets/0.CrT3Lf0L.css +2 -0
  4. package/build/client/_app/immutable/chunks/{DygY_IXG.js → CFofWD1C.js} +1 -1
  5. package/build/client/_app/immutable/chunks/CW7JStOk.js +1 -0
  6. package/build/client/_app/immutable/chunks/{BtiOY3LQ.js → CzXb6qus.js} +2 -2
  7. package/build/client/_app/immutable/chunks/DwWy6K0V.js +1 -0
  8. package/build/client/_app/immutable/entry/{app.a14BvSUo.js → app.DID8VW1I.js} +2 -2
  9. package/build/client/_app/immutable/entry/start.CkxDcwJy.js +1 -0
  10. package/build/client/_app/immutable/nodes/{1.BKoLqRXA.js → 1.2U7ECroT.js} +1 -1
  11. package/build/client/_app/immutable/nodes/2.D1lz0hMu.js +337 -0
  12. package/build/client/_app/version.json +1 -1
  13. package/build/handler.js +4 -4
  14. package/build/index.js +4 -4
  15. package/build/server/chunks/chunks/{db.js-DRhjT6xK.js → db.js-BmnKaIBo.js} +2 -2
  16. package/build/server/chunks/chunks/{db2.js-DUta2B-n.js → db2.js-CpSDQEUB.js} +2 -2
  17. package/build/server/chunks/chunks/{dsh-connection.js-DL5qjlq2.js → dsh-connection.js-CE6s1mIM.js} +2 -2
  18. package/build/server/chunks/chunks/{git-probe.js-6ARRicD2.js → git-probe.js-DBbLffkp.js} +2 -2
  19. package/build/server/chunks/chunks/{insight-config.js-CA-iT3lB.js → insight-config.js-DZBwKFH9.js} +31 -2
  20. package/build/server/chunks/chunks/{internal2.js-Bcxjr5x2.js → internal2.js-DgxNmZhS.js} +2 -2
  21. package/build/server/chunks/chunks/registry.js-D0ldrcNB.js +577 -0
  22. package/build/server/chunks/chunks/{registry.js-G1hzOje_.js → registry2.js-D3Pr1Rv9.js} +2 -2
  23. package/build/server/chunks/chunks/{state.js-ez_uUx9I.js → state.js-DPoVCoAg.js} +2 -2
  24. package/build/server/chunks/chunks/{watcher.js-Dogr6xsl.js → watcher.js-Ck2BsXQf.js} +4 -4
  25. package/build/server/chunks/entries/endpoints/api/a2a/_id_/{_server.ts.js-CpeC2QLb.js → _server.ts.js-B7qOvtA5.js} +3 -3
  26. package/build/server/chunks/entries/endpoints/api/a2a/{_server.ts.js-BkLuKDZr.js → _server.ts.js-DBLFNFXT.js} +5 -5
  27. package/build/server/chunks/entries/endpoints/api/a2a/register/{_server.ts.js-BOyrp9zt.js → _server.ts.js-COyQSOOR.js} +5 -5
  28. package/build/server/chunks/entries/endpoints/api/browser/_id_/close/_server.ts.js-CJjvHo1Z.js +32 -0
  29. package/build/server/chunks/entries/endpoints/api/browser/_id_/input/_server.ts.js-_XEUfVid.js +78 -0
  30. package/build/server/chunks/entries/endpoints/api/browser/_id_/mcp/_server.ts.js-e7j-kKSK.js +50 -0
  31. package/build/server/chunks/entries/endpoints/api/browser/_id_/navigate/_server.ts.js-BYiU0Wvv.js +62 -0
  32. package/build/server/chunks/entries/endpoints/api/browser/_id_/page/_server.ts.js-RL1-uaVR.js +33 -0
  33. package/build/server/chunks/entries/endpoints/api/browser/_id_/stream/_server.ts.js-Cxc2r0BD.js +74 -0
  34. package/build/server/chunks/entries/endpoints/api/browser/_id_/viewport/_server.ts.js-DQ1jgFuc.js +42 -0
  35. package/build/server/chunks/entries/endpoints/api/browser/_server.ts.js-DfbmPmUH.js +37 -0
  36. package/build/server/chunks/entries/endpoints/api/config/{_server.ts.js-BG78X__J.js → _server.ts.js-CfcgdS1G.js} +3 -3
  37. package/build/server/chunks/entries/endpoints/api/dsh/directory/{_server.ts.js-Cae4x1c7.js → _server.ts.js-BOgNWE9k.js} +3 -3
  38. package/build/server/chunks/entries/endpoints/api/dsh/jobs/{_server.ts.js-hGmoSsDv.js → _server.ts.js-DExfzwju.js} +3 -3
  39. package/build/server/chunks/entries/endpoints/api/dsh/pick-directory/{_server.ts.js-BLb8o1cY.js → _server.ts.js-vuxSBOKD.js} +3 -3
  40. package/build/server/chunks/entries/endpoints/api/dsh/presets/{_server.ts.js-BFeDKrPz.js → _server.ts.js-DYh0lUVR.js} +3 -3
  41. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/attachment/{_server.ts.js-DmSTTfI5.js → _server.ts.js-CzmMoP9-.js} +3 -3
  42. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/cancel/{_server.ts.js-Cus9XrC9.js → _server.ts.js-CXnfYfR4.js} +3 -3
  43. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/catalog/{_server.ts.js-DcrNU0_y.js → _server.ts.js-CF2s7GwI.js} +3 -3
  44. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/changes/{_server.ts.js-CpuEcp6p.js → _server.ts.js-DKw9ktIO.js} +3 -3
  45. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/command/{_server.ts.js-CU9o8Tho.js → _server.ts.js-pT2AO2S0.js} +3 -3
  46. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/events/{_server.ts.js-LWw-YpVI.js → _server.ts.js-D4H2h6fc.js} +3 -3
  47. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/fork/{_server.ts.js-BMMZlvr7.js → _server.ts.js-iwuADbdv.js} +3 -3
  48. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/goal/{_server.ts.js-DZ6qFrfm.js → _server.ts.js-C36DpiRX.js} +3 -3
  49. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/history/{_server.ts.js-CYt4aYoc.js → _server.ts.js-WApWfRu-.js} +3 -3
  50. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/models/{_server.ts.js-CPZuvN-_.js → _server.ts.js-B8DQEsx6.js} +3 -3
  51. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/path/{_server.ts.js-_SIiC8sn.js → _server.ts.js-B0ACEjPX.js} +2 -2
  52. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/permission/{_server.ts.js-Dcfp7gSm.js → _server.ts.js-CmYfLvHD.js} +3 -3
  53. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/prompt/{_server.ts.js-CmxqUwLT.js → _server.ts.js-DrZveeFq.js} +3 -3
  54. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/rename/{_server.ts.js-DCNKXRwy.js → _server.ts.js-C-nVpTN7.js} +3 -3
  55. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/respond/{_server.ts.js-AURyR2ll.js → _server.ts.js-C-cuYV40.js} +3 -3
  56. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/select-model/{_server.ts.js-BVF36vTO.js → _server.ts.js-BoiybbwX.js} +3 -3
  57. package/build/server/chunks/entries/endpoints/api/dsh/sessions/{_server.ts.js-LX3JZbRr.js → _server.ts.js-DDqjDxoc.js} +3 -3
  58. package/build/server/chunks/entries/endpoints/api/dsh/workspace-file/{_server.ts.js-BJ0d199o.js → _server.ts.js-DG0MHUkj.js} +3 -3
  59. package/build/server/chunks/entries/endpoints/api/dsh/workspace-tree/{_server.ts.js-BDy9jQXv.js → _server.ts.js-Cz4XSEfb.js} +3 -3
  60. package/build/server/chunks/entries/endpoints/api/dsh/workspaces/{_server.ts.js-DoTpSXIc.js → _server.ts.js-DV4wF7XG.js} +3 -3
  61. package/build/server/chunks/entries/endpoints/api/dsh/workspaces/_workspaceId_/delete/{_server.ts.js-BnfIobo7.js → _server.ts.js-X0mwkV_4.js} +3 -3
  62. package/build/server/chunks/entries/endpoints/api/dsh/workspaces/_workspaceId_/rename/{_server.ts.js-KRyjIODB.js → _server.ts.js-D_AEj6qx.js} +3 -3
  63. package/build/server/chunks/entries/endpoints/api/prompts/_id_/{_server.ts.js-bRLZ5TWI.js → _server.ts.js-Cj3S-2MC.js} +3 -3
  64. package/build/server/chunks/entries/endpoints/api/prompts/{_server.ts.js-ChzWZoFk.js → _server.ts.js-DuuhbcTE.js} +3 -3
  65. package/build/server/chunks/entries/endpoints/api/prompts/use/{_server.ts.js-DdH5QmPS.js → _server.ts.js-C72akYlH.js} +3 -3
  66. package/build/server/chunks/entries/endpoints/api/settings/{_server.ts.js-DwGQj520.js → _server.ts.js-CEO2aw-C.js} +2 -2
  67. package/build/server/chunks/entries/endpoints/api/terminal/_id_/output/{_server.ts.js-m6Cug5hN.js → _server.ts.js-BNBxebgG.js} +3 -3
  68. package/build/server/chunks/entries/endpoints/api/terminal/_id_/reattach/{_server.ts.js-wSsMKLiw.js → _server.ts.js-DDRJBGIr.js} +3 -3
  69. package/build/server/chunks/entries/endpoints/api/terminal/_id_/send/{_server.ts.js-CTc5xP72.js → _server.ts.js-CA0vc_Cm.js} +3 -3
  70. package/build/server/chunks/entries/endpoints/api/terminal/_id_/stream/{_server.ts.js-C8PLMU0Y.js → _server.ts.js-D6L8Gd_f.js} +3 -3
  71. package/build/server/chunks/entries/endpoints/api/terminal/{_server.ts.js-CwXC6Stk.js → _server.ts.js-BhR4Cblt.js} +4 -4
  72. package/build/server/chunks/entries/endpoints/api/workspace/file-write/{_server.ts.js-CWWi0aa8.js → _server.ts.js-BFdpm_he.js} +4 -4
  73. package/build/server/chunks/entries/endpoints/api/workspace/git-events/{_server.ts.js-Dc0g7HPl.js → _server.ts.js-D5eW-2fL.js} +4 -4
  74. package/build/server/chunks/entries/endpoints/api/workspace/git-file-head/{_server.ts.js-CvPoP9yH.js → _server.ts.js-iax8K9x8.js} +4 -4
  75. package/build/server/chunks/entries/endpoints/api/workspace/git-map/{_server.ts.js-f5Gk_lb6.js → _server.ts.js-CdfiRwgl.js} +4 -4
  76. package/build/server/chunks/entries/endpoints/api/workspace/git-status/{_server.ts.js-BMkKlCgS.js → _server.ts.js-CBU0ug30.js} +4 -4
  77. package/build/server/chunks/entries/endpoints/api/workspace/write-gate/{_server.ts.js-DUL-2q1R.js → _server.ts.js-CLozZQT3.js} +4 -4
  78. package/build/server/chunks/entries/pages/{_error.svelte.js-DDQEX5e3.js → _error.svelte.js-B9CGiiZy.js} +3 -3
  79. package/build/server/chunks/entries/pages/{_page.server.ts.js-DFRnK-I2.js → _page.server.ts.js-yB-zbLkm.js} +2 -2
  80. package/build/server/chunks/entries/pages/{_page.svelte.js-DrMNc6ih.js → _page.svelte.js-D3F2fiR4.js} +722 -48
  81. package/build/server/chunks/{handler-Cqw6zPgE.js → handler-CF16q5dY.js} +3 -3
  82. package/build/server/chunks/{index.js-CZ6hvqti.js → index.js-DsT3Sxoa.js} +2 -2
  83. package/build/server/chunks/{manifest.js-SFcYF8ua.js → manifest.js-CW2r9Rb1.js} +106 -50
  84. package/build/server/chunks/nodes/{0.js-BqYWZcQy.js → 0.js-gr8Z-ETs.js} +3 -3
  85. package/build/server/chunks/nodes/1.js-BrruRgxj.js +9 -0
  86. package/build/server/chunks/nodes/{2.js-CnybOb74.js → 2.js-Cif5vNvc.js} +6 -6
  87. package/package.json +4 -1
  88. package/template/.dsi/prompts.sqlite-shm +0 -0
  89. package/template/.dsi/prompts.sqlite-wal +0 -0
  90. package/build/client/_app/immutable/assets/0.BQzh2ktU.css +0 -2
  91. package/build/client/_app/immutable/chunks/6lkFuaQJ.js +0 -1
  92. package/build/client/_app/immutable/chunks/Ct20Yiq1.js +0 -1
  93. package/build/client/_app/immutable/entry/start.DwHZM5ia.js +0 -1
  94. package/build/client/_app/immutable/nodes/2.CSRBDmmw.js +0 -337
  95. package/build/server/chunks/nodes/1.js-CoGgQITW.js +0 -9
  96. /package/build/client/_app/immutable/nodes/{0.BE97Xr19.js → 0.oyzYR3-4.js} +0 -0
@@ -8,7 +8,7 @@ import { D as DEFAULT_IMAGE_LIMITS } from '../../chunks/image-limits.js-CUdJ0f7r
8
8
  import { s as sanitizeWorkspaceProfile, d as dsiKey, t as themePrefs } from '../../chunks/theme-prefs.svelte.js-8CaWz46g.js';
9
9
  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-D7wkLUkK.js';
10
10
  import { c as getLocale } from '../../chunks/runtime.js-CCJi3XaY.js';
11
- 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-ez_uUx9I.js';
11
+ 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-DPoVCoAg.js';
12
12
  import 'yaml';
13
13
  import 'html-to-image';
14
14
  import hljs from 'highlight.js/lib/core';
@@ -20,7 +20,7 @@ import xml from 'highlight.js/lib/languages/xml';
20
20
  import css from 'highlight.js/lib/languages/css';
21
21
  import '../../chunks/uneval.js-BJ9Qq2SF.js';
22
22
  import '../../chunks/shared.js-HQ0rfhm4.js';
23
- import '../../chunks/internal2.js-Bcxjr5x2.js';
23
+ import '../../chunks/internal2.js-DgxNmZhS.js';
24
24
  import '../../chunks/exports.js-DH_tjtdv.js';
25
25
  import '../../chunks/utils.js-CAdNO8Tu.js';
26
26
 
@@ -888,6 +888,326 @@ var broadcastsyncedto2 = ((inputs, options = {}) => {
888
888
  return en_broadcastsyncedto2(inputs);
889
889
  });
890
890
  //#endregion
891
+ //#region src/lib/paraglide/messages/browserback1.js
892
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
893
+ /** @typedef {{}} Browserback1Inputs */
894
+ var en_browserback1 = () => {
895
+ return `Back`;
896
+ };
897
+ var zh_browserback1 = () => {
898
+ return `后退`;
899
+ };
900
+ var id_browserback1 = () => {
901
+ return `Kembali`;
902
+ };
903
+ var es_browserback1 = () => {
904
+ return `Atrás`;
905
+ };
906
+ /**
907
+ * | output |
908
+ * | --- |
909
+ * | "Back" |
910
+ *
911
+ * @param {Browserback1Inputs} inputs
912
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
913
+ * @returns {LocalizedString}
914
+ */
915
+ var browserback1 = ((inputs = {}, options = {}) => {
916
+ const locale = options.locale ?? getLocale();
917
+ if (locale === "zh") return zh_browserback1();
918
+ if (locale === "id") return id_browserback1();
919
+ if (locale === "es") return es_browserback1();
920
+ return en_browserback1();
921
+ });
922
+ //#endregion
923
+ //#region src/lib/paraglide/messages/browserchiplabel2.js
924
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
925
+ /** @typedef {{}} Browserchiplabel2Inputs */
926
+ var en_browserchiplabel2 = () => {
927
+ return `⌖ Browser`;
928
+ };
929
+ var zh_browserchiplabel2 = () => {
930
+ return `⌖ 浏览器`;
931
+ };
932
+ var id_browserchiplabel2 = () => {
933
+ return `⌖ Peramban`;
934
+ };
935
+ var es_browserchiplabel2 = () => {
936
+ return `⌖ Navegador`;
937
+ };
938
+ /**
939
+ * | output |
940
+ * | --- |
941
+ * | "⌖ Browser" |
942
+ *
943
+ * @param {Browserchiplabel2Inputs} inputs
944
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
945
+ * @returns {LocalizedString}
946
+ */
947
+ var browserchiplabel2 = ((inputs = {}, options = {}) => {
948
+ const locale = options.locale ?? getLocale();
949
+ if (locale === "zh") return zh_browserchiplabel2();
950
+ if (locale === "id") return id_browserchiplabel2();
951
+ if (locale === "es") return es_browserchiplabel2();
952
+ return en_browserchiplabel2();
953
+ });
954
+ //#endregion
955
+ //#region src/lib/paraglide/messages/browserforward1.js
956
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
957
+ /** @typedef {{}} Browserforward1Inputs */
958
+ var en_browserforward1 = () => {
959
+ return `Forward`;
960
+ };
961
+ var zh_browserforward1 = () => {
962
+ return `前进`;
963
+ };
964
+ var id_browserforward1 = () => {
965
+ return `Maju`;
966
+ };
967
+ var es_browserforward1 = () => {
968
+ return `Adelante`;
969
+ };
970
+ /**
971
+ * | output |
972
+ * | --- |
973
+ * | "Forward" |
974
+ *
975
+ * @param {Browserforward1Inputs} inputs
976
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
977
+ * @returns {LocalizedString}
978
+ */
979
+ var browserforward1 = ((inputs = {}, options = {}) => {
980
+ const locale = options.locale ?? getLocale();
981
+ if (locale === "zh") return zh_browserforward1();
982
+ if (locale === "id") return id_browserforward1();
983
+ if (locale === "es") return es_browserforward1();
984
+ return en_browserforward1();
985
+ });
986
+ //#endregion
987
+ //#region src/lib/paraglide/messages/browserlaunching1.js
988
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
989
+ /** @typedef {{}} Browserlaunching1Inputs */
990
+ var en_browserlaunching1 = () => {
991
+ return `launching browser…`;
992
+ };
993
+ var zh_browserlaunching1 = () => {
994
+ return `正在启动浏览器…`;
995
+ };
996
+ var id_browserlaunching1 = () => {
997
+ return `meluncurkan peramban…`;
998
+ };
999
+ var es_browserlaunching1 = () => {
1000
+ return `iniciando navegador…`;
1001
+ };
1002
+ /**
1003
+ * | output |
1004
+ * | --- |
1005
+ * | "launching browser…" |
1006
+ *
1007
+ * @param {Browserlaunching1Inputs} inputs
1008
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
1009
+ * @returns {LocalizedString}
1010
+ */
1011
+ var browserlaunching1 = ((inputs = {}, options = {}) => {
1012
+ const locale = options.locale ?? getLocale();
1013
+ if (locale === "zh") return zh_browserlaunching1();
1014
+ if (locale === "id") return id_browserlaunching1();
1015
+ if (locale === "es") return es_browserlaunching1();
1016
+ return en_browserlaunching1();
1017
+ });
1018
+ //#endregion
1019
+ //#region src/lib/paraglide/messages/browseropentitle2.js
1020
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
1021
+ /** @typedef {{}} Browseropentitle2Inputs */
1022
+ var en_browseropentitle2 = () => {
1023
+ return `Open the glass browser`;
1024
+ };
1025
+ var zh_browseropentitle2 = () => {
1026
+ return `打开玻璃浏览器`;
1027
+ };
1028
+ var id_browseropentitle2 = () => {
1029
+ return `Buka peramban kaca`;
1030
+ };
1031
+ var es_browseropentitle2 = () => {
1032
+ return `Abrir el navegador de cristal`;
1033
+ };
1034
+ /**
1035
+ * | output |
1036
+ * | --- |
1037
+ * | "Open the glass browser" |
1038
+ *
1039
+ * @param {Browseropentitle2Inputs} inputs
1040
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
1041
+ * @returns {LocalizedString}
1042
+ */
1043
+ var browseropentitle2 = ((inputs = {}, options = {}) => {
1044
+ const locale = options.locale ?? getLocale();
1045
+ if (locale === "zh") return zh_browseropentitle2();
1046
+ if (locale === "id") return id_browseropentitle2();
1047
+ if (locale === "es") return es_browseropentitle2();
1048
+ return en_browseropentitle2();
1049
+ });
1050
+ //#endregion
1051
+ //#region src/lib/paraglide/messages/browserpaneltitle2.js
1052
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
1053
+ /** @typedef {{}} Browserpaneltitle2Inputs */
1054
+ var en_browserpaneltitle2 = () => {
1055
+ return `Browser`;
1056
+ };
1057
+ var zh_browserpaneltitle2 = () => {
1058
+ return `浏览器`;
1059
+ };
1060
+ var id_browserpaneltitle2 = () => {
1061
+ return `Peramban`;
1062
+ };
1063
+ var es_browserpaneltitle2 = () => {
1064
+ return `Navegador`;
1065
+ };
1066
+ /**
1067
+ * | output |
1068
+ * | --- |
1069
+ * | "Browser" |
1070
+ *
1071
+ * @param {Browserpaneltitle2Inputs} inputs
1072
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
1073
+ * @returns {LocalizedString}
1074
+ */
1075
+ var browserpaneltitle2 = ((inputs = {}, options = {}) => {
1076
+ const locale = options.locale ?? getLocale();
1077
+ if (locale === "zh") return zh_browserpaneltitle2();
1078
+ if (locale === "id") return id_browserpaneltitle2();
1079
+ if (locale === "es") return es_browserpaneltitle2();
1080
+ return en_browserpaneltitle2();
1081
+ });
1082
+ //#endregion
1083
+ //#region src/lib/paraglide/messages/browserreload1.js
1084
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
1085
+ /** @typedef {{}} Browserreload1Inputs */
1086
+ var en_browserreload1 = () => {
1087
+ return `Reload`;
1088
+ };
1089
+ var zh_browserreload1 = () => {
1090
+ return `重新加载`;
1091
+ };
1092
+ var id_browserreload1 = () => {
1093
+ return `Muat ulang`;
1094
+ };
1095
+ var es_browserreload1 = () => {
1096
+ return `Recargar`;
1097
+ };
1098
+ /**
1099
+ * | output |
1100
+ * | --- |
1101
+ * | "Reload" |
1102
+ *
1103
+ * @param {Browserreload1Inputs} inputs
1104
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
1105
+ * @returns {LocalizedString}
1106
+ */
1107
+ var browserreload1 = ((inputs = {}, options = {}) => {
1108
+ const locale = options.locale ?? getLocale();
1109
+ if (locale === "zh") return zh_browserreload1();
1110
+ if (locale === "id") return id_browserreload1();
1111
+ if (locale === "es") return es_browserreload1();
1112
+ return en_browserreload1();
1113
+ });
1114
+ //#endregion
1115
+ //#region src/lib/paraglide/messages/browsersessionfailed2.js
1116
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
1117
+ /** @typedef {{ reason: NonNullable<unknown> }} Browsersessionfailed2Inputs */
1118
+ var en_browsersessionfailed2 = (i) => {
1119
+ return `browser session failed ${i?.reason} — close and reopen the panel`;
1120
+ };
1121
+ var zh_browsersessionfailed2 = (i) => {
1122
+ return `浏览器会话失败${i?.reason} — 请关闭并重新打开面板`;
1123
+ };
1124
+ var id_browsersessionfailed2 = (i) => {
1125
+ return `sesi peramban gagal ${i?.reason} — tutup dan buka kembali panel`;
1126
+ };
1127
+ var es_browsersessionfailed2 = (i) => {
1128
+ return `la sesión del navegador falló ${i?.reason} — cierra y reabre el panel`;
1129
+ };
1130
+ /**
1131
+ * | output |
1132
+ * | --- |
1133
+ * | "browser session failed {reason} — close and reopen the panel" |
1134
+ *
1135
+ * @param {Browsersessionfailed2Inputs} inputs
1136
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
1137
+ * @returns {LocalizedString}
1138
+ */
1139
+ var browsersessionfailed2 = ((inputs, options = {}) => {
1140
+ const locale = options.locale ?? getLocale();
1141
+ if (locale === "zh") return zh_browsersessionfailed2(inputs);
1142
+ if (locale === "id") return id_browsersessionfailed2(inputs);
1143
+ if (locale === "es") return es_browsersessionfailed2(inputs);
1144
+ return en_browsersessionfailed2(inputs);
1145
+ });
1146
+ //#endregion
1147
+ //#region src/lib/paraglide/messages/browserurlplaceholder2.js
1148
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
1149
+ /** @typedef {{}} Browserurlplaceholder2Inputs */
1150
+ var en_browserurlplaceholder2 = () => {
1151
+ return `Search or type a URL`;
1152
+ };
1153
+ var zh_browserurlplaceholder2 = () => {
1154
+ return `搜索或输入网址`;
1155
+ };
1156
+ var id_browserurlplaceholder2 = () => {
1157
+ return `Cari atau ketik URL`;
1158
+ };
1159
+ var es_browserurlplaceholder2 = () => {
1160
+ return `Buscar o escribir una URL`;
1161
+ };
1162
+ /**
1163
+ * | output |
1164
+ * | --- |
1165
+ * | "Search or type a URL" |
1166
+ *
1167
+ * @param {Browserurlplaceholder2Inputs} inputs
1168
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
1169
+ * @returns {LocalizedString}
1170
+ */
1171
+ var browserurlplaceholder2 = ((inputs = {}, options = {}) => {
1172
+ const locale = options.locale ?? getLocale();
1173
+ if (locale === "zh") return zh_browserurlplaceholder2();
1174
+ if (locale === "id") return id_browserurlplaceholder2();
1175
+ if (locale === "es") return es_browserurlplaceholder2();
1176
+ return en_browserurlplaceholder2();
1177
+ });
1178
+ //#endregion
1179
+ //#region src/lib/paraglide/messages/browserwaitingframes2.js
1180
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
1181
+ /** @typedef {{}} Browserwaitingframes2Inputs */
1182
+ var en_browserwaitingframes2 = () => {
1183
+ return `waiting for frames…`;
1184
+ };
1185
+ var zh_browserwaitingframes2 = () => {
1186
+ return `等待画面帧…`;
1187
+ };
1188
+ var id_browserwaitingframes2 = () => {
1189
+ return `menunggu frame…`;
1190
+ };
1191
+ var es_browserwaitingframes2 = () => {
1192
+ return `esperando fotogramas…`;
1193
+ };
1194
+ /**
1195
+ * | output |
1196
+ * | --- |
1197
+ * | "waiting for frames…" |
1198
+ *
1199
+ * @param {Browserwaitingframes2Inputs} inputs
1200
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
1201
+ * @returns {LocalizedString}
1202
+ */
1203
+ var browserwaitingframes2 = ((inputs = {}, options = {}) => {
1204
+ const locale = options.locale ?? getLocale();
1205
+ if (locale === "zh") return zh_browserwaitingframes2();
1206
+ if (locale === "id") return id_browserwaitingframes2();
1207
+ if (locale === "es") return es_browserwaitingframes2();
1208
+ return en_browserwaitingframes2();
1209
+ });
1210
+ //#endregion
891
1211
  //#region src/lib/paraglide/messages/cachehit1.js
892
1212
  /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
893
1213
  /** @typedef {{}} Cachehit1Inputs */
@@ -14486,6 +14806,16 @@ var _index_exports = /* @__PURE__ */ __exportAll({
14486
14806
  backToWorkspace: () => backtoworkspace2,
14487
14807
  broadcast: () => broadcast,
14488
14808
  broadcastSyncedTo: () => broadcastsyncedto2,
14809
+ browserBack: () => browserback1,
14810
+ browserChipLabel: () => browserchiplabel2,
14811
+ browserForward: () => browserforward1,
14812
+ browserLaunching: () => browserlaunching1,
14813
+ browserOpenTitle: () => browseropentitle2,
14814
+ browserPanelTitle: () => browserpaneltitle2,
14815
+ browserReload: () => browserreload1,
14816
+ browserSessionFailed: () => browsersessionfailed2,
14817
+ browserUrlPlaceholder: () => browserurlplaceholder2,
14818
+ browserWaitingFrames: () => browserwaitingframes2,
14489
14819
  cacheHit: () => cachehit1,
14490
14820
  cachedInput: () => cachedinput1,
14491
14821
  cancel: () => cancel,
@@ -14946,6 +15276,16 @@ var messages_exports = /* @__PURE__ */ __exportAll({
14946
15276
  backToWorkspace: () => backtoworkspace2,
14947
15277
  broadcast: () => broadcast,
14948
15278
  broadcastSyncedTo: () => broadcastsyncedto2,
15279
+ browserBack: () => browserback1,
15280
+ browserChipLabel: () => browserchiplabel2,
15281
+ browserForward: () => browserforward1,
15282
+ browserLaunching: () => browserlaunching1,
15283
+ browserOpenTitle: () => browseropentitle2,
15284
+ browserPanelTitle: () => browserpaneltitle2,
15285
+ browserReload: () => browserreload1,
15286
+ browserSessionFailed: () => browsersessionfailed2,
15287
+ browserUrlPlaceholder: () => browserurlplaceholder2,
15288
+ browserWaitingFrames: () => browserwaitingframes2,
14949
15289
  cacheHit: () => cachehit1,
14950
15290
  cachedInput: () => cachedinput1,
14951
15291
  cancel: () => cancel,
@@ -18443,7 +18783,7 @@ function ThemeToggle($$renderer, $$props) {
18443
18783
  }
18444
18784
  //#endregion
18445
18785
  //#region package.json
18446
- var version = "0.6.21";
18786
+ var version = "0.7.0";
18447
18787
  var dsh = { "webVersion": "0.2.1-rc.2" };
18448
18788
  //#endregion
18449
18789
  //#region src/lib/version.ts
@@ -21508,6 +21848,7 @@ function workspaceFileTitle(path) {
21508
21848
  */
21509
21849
  function panelHeaderLabel(panel) {
21510
21850
  if (panel.kind === "terminal") return "Terminal";
21851
+ if (panel.kind === "browser") return "Browser";
21511
21852
  if (panel.kind === "prompt-manager") return MANAGER_ROW_TITLE;
21512
21853
  if (panel.kind === "skill-shelf") return "Skill Shelf";
21513
21854
  if (panel.kind === "plugin-rack") return "Plugin Rack";
@@ -21536,9 +21877,9 @@ function panelRowsFor(input) {
21536
21877
  const { panels, spineRows, coldCache, deadSessions, edgeCache, lineageFacts, moveFacts } = input;
21537
21878
  const openSessionIds = openSessionIdsOf(panels);
21538
21879
  return panels.map((p, index) => {
21539
- if (p.kind === "terminal" || p.kind === "prompt-manager" || p.kind === "settings-editor" || p.kind === "skill-shelf" || p.kind === "plugin-rack") return {
21880
+ if (p.kind === "terminal" || p.kind === "browser" || p.kind === "prompt-manager" || p.kind === "settings-editor" || p.kind === "skill-shelf" || p.kind === "plugin-rack") return {
21540
21881
  panel: p,
21541
- title: p.kind === "terminal" ? "Terminal" : p.kind === "prompt-manager" ? MANAGER_ROW_TITLE : p.kind === "skill-shelf" ? "Skill Shelf" : p.kind === "plugin-rack" ? "Plugin Rack" : SETTINGS_ROW_TITLE[p.target],
21882
+ title: p.kind === "terminal" ? "Terminal" : p.kind === "browser" ? "Browser" : p.kind === "prompt-manager" ? MANAGER_ROW_TITLE : p.kind === "skill-shelf" ? "Skill Shelf" : p.kind === "plugin-rack" ? "Plugin Rack" : p.kind === "settings-editor" ? SETTINGS_ROW_TITLE[p.target] : "",
21542
21883
  workspace: null,
21543
21884
  dead: false,
21544
21885
  running: false,
@@ -23640,38 +23981,45 @@ function ToolsAndStatusHeader($$renderer, $$props) {
23640
23981
  //#endregion
23641
23982
  //#region src/lib/components/conversation/ConversationHeader.svelte
23642
23983
  function ConversationHeader($$renderer, $$props) {
23643
- /**
23644
- * ConversationHeader — the conversation page's top bar (extracted
23645
- * from the page, 2026-08-24): the identity cluster (SessionIdAndName:
23646
- * copy-id prefix, workspace chip, title display, inline rename) on
23647
- * the left; the agent chip, the running/idle status, the session
23648
- * fork (2026-09-01), and the conversation capture on the right
23649
- * (ToolsAndStatusHeader, extracted 2026-08-24). Purely presentational
23650
- * — title state and the streaming flag arrive as props; writes report
23651
- * upward.
23652
- */
23653
- let { sessionId, title, workspace = null, workspaces = [], access = null, agent, agentId = null, isStreaming, transcript = null, subagent = false, plan = null, parentSessionId = null, focused = false, onOpenExplorer = void 0 } = $$props;
23654
- $$renderer.push(`<header data-svelte="ConversationHeader"${attr_class(`flex items-center gap-3 border-b border-surface-border px-2 py-1 ${focused ? "bg-header-wash" : "bg-surface-elevated"}`)} data-testid="conversation-header"${attr("data-focused", focused ? "true" : "false")}>`);
23655
- SessionIdAndName($$renderer, {
23656
- sessionId,
23657
- title,
23658
- workspace,
23659
- workspaces,
23660
- access,
23661
- subagent,
23662
- onOpenExplorer
23663
- });
23664
- $$renderer.push(`<!----> `);
23665
- ToolsAndStatusHeader($$renderer, {
23666
- agent,
23667
- agentId,
23668
- isStreaming,
23669
- transcript,
23670
- plan,
23671
- parentSessionId,
23672
- subagent
23984
+ $$renderer.component(($$renderer) => {
23985
+ /**
23986
+ * ConversationHeader — the conversation page's top bar (extracted
23987
+ * from the page, 2026-08-24): the identity cluster (SessionIdAndName:
23988
+ * copy-id prefix, workspace chip, title display, inline rename) on
23989
+ * the left; the agent chip, the running/idle status, the session
23990
+ * fork (2026-09-01), and the conversation capture on the right
23991
+ * (ToolsAndStatusHeader, extracted 2026-08-24). Purely presentational
23992
+ * — title state and the streaming flag arrive as props; writes report
23993
+ * upward.
23994
+ */
23995
+ let { sessionId, title, workspace = null, workspaces = [], access = null, agent, agentId = null, isStreaming, transcript = null, subagent = false, plan = null, parentSessionId = null, focused = false, onOpenExplorer = void 0, onOpenBrowser = void 0 } = $$props;
23996
+ $$renderer.push(`<header data-svelte="ConversationHeader"${attr_class(`flex items-center gap-3 border-b border-surface-border px-2 py-1 ${focused ? "bg-header-wash" : "bg-surface-elevated"}`)} data-testid="conversation-header"${attr("data-focused", focused ? "true" : "false")}>`);
23997
+ SessionIdAndName($$renderer, {
23998
+ sessionId,
23999
+ title,
24000
+ workspace,
24001
+ workspaces,
24002
+ access,
24003
+ subagent,
24004
+ onOpenExplorer
24005
+ });
24006
+ $$renderer.push(`<!----> `);
24007
+ if (onOpenBrowser) {
24008
+ $$renderer.push("<!--[0-->");
24009
+ $$renderer.push(`<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>`);
24010
+ } else $$renderer.push("<!--[-1-->");
24011
+ $$renderer.push(`<!--]--> `);
24012
+ ToolsAndStatusHeader($$renderer, {
24013
+ agent,
24014
+ agentId,
24015
+ isStreaming,
24016
+ transcript,
24017
+ plan,
24018
+ parentSessionId,
24019
+ subagent
24020
+ });
24021
+ $$renderer.push(`<!----></header>`);
23673
24022
  });
23674
- $$renderer.push(`<!----></header>`);
23675
24023
  }
23676
24024
  //#endregion
23677
24025
  //#region src/lib/components/message/LoadOlderSentinel.svelte
@@ -30810,7 +31158,7 @@ function ConversationPanel($$renderer, $$props) {
30810
31158
  * existing command banner. Catalog reads fire on first menu open,
30811
31159
  * never at mount (cold sessions stay cold).
30812
31160
  */
30813
- let { panelId = null, sessionId, title: initialTitleProp = null, workspace = null, workspaces = [], agent, agentDisplay = null, subagent = false, depth = 0, parentSessionId = null, entries, lastSeq, running, hasMore = void 0, pendingAnswers = [], settledAnswers = [], permission = null, imageLimits = void 0, knobEvents = void 0, deliverables = void 0, a2aRows = [], a2aTitles = {}, onNeedCold = void 0, onClose = void 0, focusComposer = false, oncomposerfocus = void 0, focused = false, onOpenExplorer = void 0, onFileLink = void 0, onFileOpen = void 0 } = $$props;
31161
+ let { panelId = null, sessionId, title: initialTitleProp = null, workspace = null, workspaces = [], agent, agentDisplay = null, subagent = false, depth = 0, parentSessionId = null, entries, lastSeq, running, hasMore = void 0, pendingAnswers = [], settledAnswers = [], permission = null, imageLimits = void 0, knobEvents = void 0, deliverables = void 0, a2aRows = [], a2aTitles = {}, onNeedCold = void 0, onClose = void 0, focusComposer = false, oncomposerfocus = void 0, focused = false, onOpenExplorer = void 0, onOpenBrowser = void 0, onFileLink = void 0, onFileOpen = void 0 } = $$props;
30814
31162
  setPanelMode(true);
30815
31163
  setConversationSession(sessionId);
30816
31164
  const store = createConversationStore(sessionId);
@@ -31039,7 +31387,8 @@ function ConversationPanel($$renderer, $$props) {
31039
31387
  plan: store.planMode,
31040
31388
  parentSessionId,
31041
31389
  focused,
31042
- onOpenExplorer
31390
+ onOpenExplorer,
31391
+ onOpenBrowser
31043
31392
  });
31044
31393
  $$renderer.push(`<!----> `);
31045
31394
  ConversationError($$renderer, { error: topError() });
@@ -31458,6 +31807,262 @@ function TerminalDesk($$renderer, $$props) {
31458
31807
  });
31459
31808
  }
31460
31809
  //#endregion
31810
+ //#region src/lib/components/browser/BrowserHeader.svelte
31811
+ function BrowserHeader($$renderer, $$props) {
31812
+ $$renderer.component(($$renderer) => {
31813
+ let { status, reBound = false, sessionId = null, closing = false, busy = false, canBack = false, canForward = false, onclose, onnavigate, onreload, onhistory } = $$props;
31814
+ /** Ephemeral intent, never state (D2): the panel clears it on the
31815
+ * route ANSWER via clearInput() — success or refusal both answer. */
31816
+ let urlText = "";
31817
+ /** The panel's handle: clears the box when the navigate route answers. */
31818
+ function clearInput() {
31819
+ urlText = "";
31820
+ }
31821
+ $$renderer.push(`<div data-svelte="BrowserHeader" class="flex items-center gap-2 border-b border-surface-border px-2 py-1 text-xs"><span class="flex min-w-0 flex-1 items-center gap-2"><button class="rounded px-1 hover:bg-surface-active disabled:opacity-40" data-testid="browser-back"${attr("aria-label", browserback1())}${attr("disabled", busy || !canBack, true)}>←</button> <button class="rounded px-1 hover:bg-surface-active disabled:opacity-40" data-testid="browser-forward"${attr("aria-label", browserforward1())}${attr("disabled", busy || !canForward, true)}>→</button> <button class="rounded px-1 hover:bg-surface-active disabled:opacity-40" data-testid="browser-reload"${attr("aria-label", browserreload1())}${attr("disabled", status !== "live" || busy, true)}>⟳</button> <input class="min-w-0 flex-1 rounded border border-surface-border bg-surface px-2 py-0.5" type="text" data-testid="browser-url-input"${attr("placeholder", browserurlplaceholder2())}${attr("disabled", status !== "live" || busy, true)}${attr("value", urlText)}/></span> <span class="flex items-center gap-2" data-testid="browser-status"${attr("data-status", status)}${attr("data-rebound", reBound)}><span${attr_class(`inline-block h-2 w-2 rounded-full ${status === "live" ? "bg-emerald-500" : status === "failed" || status === "closed" ? "bg-red-500" : "bg-amber-400"}`)}></span> `);
31822
+ if (sessionId) {
31823
+ $$renderer.push("<!--[0-->");
31824
+ $$renderer.push(`<span class="rounded-t-md border border-b-0 border-surface-border bg-surface-elevated px-2 py-0.5 font-mono text-[10px] opacity-80" data-testid="browser-session-tab">${escape_html(sessionId.slice(0, 8))}</span>`);
31825
+ } else $$renderer.push("<!--[-1-->");
31826
+ $$renderer.push(`<!--]--> <button class="rounded px-1 hover:bg-surface-active" data-testid="panel-close"${attr("disabled", closing, true)}>✕</button></span></div>`);
31827
+ bind_props($$props, { clearInput });
31828
+ });
31829
+ }
31830
+ //#endregion
31831
+ //#region src/lib/components/browser/BrowserContent.svelte
31832
+ function BrowserContent($$renderer, $$props) {
31833
+ $$renderer.component(($$renderer) => {
31834
+ let { status, failReason = null, wrap = null, canvas = null, ondown, onup, onmove, onwheel, onkey } = $$props;
31835
+ if (status === "failed") {
31836
+ $$renderer.push("<!--[0-->");
31837
+ $$renderer.push(`<div data-svelte="BrowserContent" class="p-3 text-xs text-red-500" data-testid="browser-failed">${escape_html(browsersessionfailed2({ reason: failReason ?? "" }))}</div>`);
31838
+ } else {
31839
+ $$renderer.push("<!--[-1-->");
31840
+ $$renderer.push(`<div data-svelte="BrowserContent" class="relative min-h-0 flex-1 overflow-hidden" data-testid="browser-glass"><canvas class="h-full w-full object-contain" tabindex="0"></canvas> `);
31841
+ if (status !== "live") {
31842
+ $$renderer.push("<!--[0-->");
31843
+ $$renderer.push(`<div class="absolute inset-0 grid place-items-center text-xs opacity-60" data-testid="browser-placeholder">${escape_html(status === "opening" ? browserlaunching1() : browserwaitingframes2())}</div>`);
31844
+ } else $$renderer.push("<!--[-1-->");
31845
+ $$renderer.push(`<!--]--></div>`);
31846
+ }
31847
+ $$renderer.push(`<!--]-->`);
31848
+ bind_props($$props, {
31849
+ wrap,
31850
+ canvas
31851
+ });
31852
+ });
31853
+ }
31854
+ //#endregion
31855
+ //#region src/lib/components/browser/mirror-input.ts
31856
+ /** The on-screen rect of the PAGE image inside its wrapper. The frame is
31857
+ * drawn aspect-true (canvas object-contain): when the frame is wider or
31858
+ * taller than the panel the image LETTERBOXES — clicks must map against
31859
+ * this contained rect, not the wrapper (bug 2026-10-19: width-only
31860
+ * scaling zoomed the cursor whenever the frame aspect ≠ panel aspect). */
31861
+ function containedRect(boundsLeft, boundsTop, boundsWidth, boundsHeight, viewportWidth, viewportHeight) {
31862
+ return null;
31863
+ }
31864
+ /** Map a click on the GLASS to viewport CSS pixels. Coordinates outside the
31865
+ * contained image return null — the panel must not dispatch clicks that
31866
+ * land on letterbox bars (they would miss the page). */
31867
+ function scalePoint(clientX, clientY, boundsLeft, boundsTop, boundsWidth, boundsHeight, viewportWidth, viewportHeight) {
31868
+ const rect = containedRect();
31869
+ if (rect === null) return null;
31870
+ if (clientX < rect.left || clientX > rect.left + rect.width) return null;
31871
+ if (clientY < rect.top || clientY > rect.top + rect.height) return null;
31872
+ return {
31873
+ x: Math.round((clientX - rect.left) / rect.scale),
31874
+ y: Math.round((clientY - rect.top) / rect.scale)
31875
+ };
31876
+ }
31877
+ /** At most ONE mouseMoved dispatch per animation frame — the flood guard.
31878
+ * The LAST move in a frame wins (the pointer's true position). */
31879
+ function createMoveCoalescer(raf, fire) {
31880
+ let pending = null;
31881
+ let scheduled = false;
31882
+ return { push(x, y) {
31883
+ pending = {
31884
+ x,
31885
+ y
31886
+ };
31887
+ if (scheduled) return;
31888
+ scheduled = true;
31889
+ raf(() => {
31890
+ scheduled = false;
31891
+ const m = pending;
31892
+ pending = null;
31893
+ if (m) fire(m.x, m.y);
31894
+ });
31895
+ } };
31896
+ }
31897
+ //#endregion
31898
+ //#region src/lib/services/panels/browser-session-resolver.ts
31899
+ /**
31900
+ * browser-session-resolver — the ONE re-bind-or-open seam (The Sticky Glass
31901
+ * spec Wave 2 task 2.1; ADR-0030 D1/D4). The chip, the floor placement, and
31902
+ * the panel's remount all ask here; none of them POSTs /api/browser open
31903
+ * directly. Policy: the persisted localStorage id wins if the registry still
31904
+ * lists it live (RE-BIND — reload survival); a dead id falls through to a
31905
+ * fresh open, never an error surface. The resolved id is persisted so the
31906
+ * NEXT reload re-binds too.
31907
+ */
31908
+ var LS_KEY = "dsi.browser.sessionId";
31909
+ /** localStorage guarded — SSR and privacy modes have no window.localStorage. */
31910
+ function defaultStorage() {
31911
+ try {
31912
+ return typeof localStorage !== "undefined" ? localStorage : null;
31913
+ } catch {
31914
+ return null;
31915
+ }
31916
+ }
31917
+ function readPersistedId(storage = defaultStorage()) {
31918
+ try {
31919
+ return storage?.getItem(LS_KEY) ?? null;
31920
+ } catch {
31921
+ return null;
31922
+ }
31923
+ }
31924
+ var IDX_KEY = "dsi.browser.panelIndex";
31925
+ function readPersistedIndex(storage = defaultStorage()) {
31926
+ try {
31927
+ const raw = storage?.getItem(IDX_KEY);
31928
+ const n = raw === null || raw === void 0 ? NaN : Number(raw);
31929
+ return Number.isInteger(n) && n >= 0 ? n : null;
31930
+ } catch {
31931
+ return null;
31932
+ }
31933
+ }
31934
+ //#endregion
31935
+ //#region src/lib/components/browser/BrowserPanel.svelte
31936
+ function BrowserPanel($$renderer, $$props) {
31937
+ $$renderer.component(($$renderer) => {
31938
+ let sessionId = null;
31939
+ /** True when mount re-bound to a surviving session (ADR-0030 D1) —
31940
+ * surfaced in the status strip for the operator. */
31941
+ let reBound = false;
31942
+ let status = "opening";
31943
+ let failReason = null;
31944
+ let canvas = null;
31945
+ let wrap = null;
31946
+ let closing = false;
31947
+ /** Proxy verbs (ADR-0031 D1/D2): the panel ACTS on the header's
31948
+ * intent — one in-flight guard for the whole proxy row, history
31949
+ * bounds from the last navigate answer (the documented give-up). */
31950
+ let proxyBusy = false;
31951
+ let canBack = false;
31952
+ let canForward = false;
31953
+ const moves = createMoveCoalescer((cb) => requestAnimationFrame(cb), (x, y) => void post());
31954
+ async function post(input) {}
31955
+ function toViewportCx(e) {
31956
+ if (!wrap) return null;
31957
+ const r = wrap.getBoundingClientRect();
31958
+ return scalePoint(e.clientX, e.clientY, r.left, r.top, r.width, r.height);
31959
+ }
31960
+ function onPointerDown(e) {
31961
+ if (e.button !== 0) return;
31962
+ const p = toViewportCx(e);
31963
+ if (p) post({
31964
+ x: p.x,
31965
+ y: p.y});
31966
+ }
31967
+ function onPointerUp(e) {
31968
+ if (e.button !== 0) return;
31969
+ const p = toViewportCx(e);
31970
+ if (p) post({
31971
+ x: p.x,
31972
+ y: p.y});
31973
+ }
31974
+ function onPointerMove(e) {
31975
+ const p = toViewportCx(e);
31976
+ if (p) moves.push(p.x, p.y);
31977
+ }
31978
+ function onWheel(e) {
31979
+ const p = toViewportCx(e);
31980
+ if (!p) return;
31981
+ e.preventDefault();
31982
+ post({
31983
+ x: p.x,
31984
+ y: p.y,
31985
+ deltaX: e.deltaX,
31986
+ deltaY: e.deltaY
31987
+ });
31988
+ }
31989
+ function onKey(e) {
31990
+ post({
31991
+ type: e.type === "keydown" ? "keyDown" : "keyUp",
31992
+ key: e.key,
31993
+ code: e.code,
31994
+ windowsVirtualKeyCode: e.keyCode,
31995
+ text: e.type === "keydown" && e.key.length === 1 ? e.key : void 0
31996
+ });
31997
+ }
31998
+ /** One POST for every proxy verb; the ANSWER (success or refusal)
31999
+ * clears the input and refreshes the history bounds. A dead session
32000
+ * surfaces as the closed status, never a crash (404/409). */
32001
+ async function proxy(body) {}
32002
+ function submitUrl(text) {
32003
+ proxy();
32004
+ }
32005
+ function goHistory(dir) {
32006
+ proxy();
32007
+ }
32008
+ /** D8 owner-release: close the SERVER session first (kills the browser),
32009
+ * then report upward so the floor removes the panel. Exactly once —
32010
+ * the closing flag guards double-invocations (the single-close-post
32011
+ * unit contract). */
32012
+ async function closePanel() {}
32013
+ onDestroy(() => {});
32014
+ let $$settled = true;
32015
+ let $$inner_renderer;
32016
+ function $$render_inner($$renderer) {
32017
+ $$renderer.push(`<div data-svelte="BrowserPanel" class="flex h-full flex-col bg-surface-elevated" data-testid="panel-browser">`);
32018
+ BrowserHeader($$renderer, {
32019
+ status,
32020
+ reBound,
32021
+ sessionId,
32022
+ closing,
32023
+ busy: proxyBusy,
32024
+ canBack,
32025
+ canForward,
32026
+ onclose: () => void closePanel(),
32027
+ onnavigate: submitUrl,
32028
+ onreload: () => void proxy(),
32029
+ onhistory: goHistory
32030
+ });
32031
+ $$renderer.push(`<!----> `);
32032
+ BrowserContent($$renderer, {
32033
+ status,
32034
+ failReason,
32035
+ ondown: onPointerDown,
32036
+ onup: onPointerUp,
32037
+ onmove: onPointerMove,
32038
+ onwheel: onWheel,
32039
+ onkey: onKey,
32040
+ get wrap() {
32041
+ return wrap;
32042
+ },
32043
+ set wrap($$value) {
32044
+ wrap = $$value;
32045
+ $$settled = false;
32046
+ },
32047
+ get canvas() {
32048
+ return canvas;
32049
+ },
32050
+ set canvas($$value) {
32051
+ canvas = $$value;
32052
+ $$settled = false;
32053
+ }
32054
+ });
32055
+ $$renderer.push(`<!----></div>`);
32056
+ }
32057
+ do {
32058
+ $$settled = true;
32059
+ $$inner_renderer = $$renderer.copy();
32060
+ $$render_inner($$inner_renderer);
32061
+ } while (!$$settled);
32062
+ $$renderer.subsume($$inner_renderer);
32063
+ });
32064
+ }
32065
+ //#endregion
31461
32066
  //#region src/lib/components/settings-skills/SettingsSkillsToolbar.svelte
31462
32067
  function SettingsSkillsToolbar($$renderer, $$props) {
31463
32068
  $$renderer.component(($$renderer) => {
@@ -33678,6 +34283,22 @@ function openWorkspaceExplorer(sessionId, workspace) {
33678
34283
  }
33679
34284
  insertPanel(makeWorkspaceExplorerPanel(sessionId, workspace), workspaceExplorerSlot(st.panels, selectedIndex_(), d$4().getMoveFacts()));
33680
34285
  }
34286
+ /** Chip click action (The Glass Browser spec W2, ADR-0029 D4): ONE live
34287
+ * browser panel across the floor — the terminal singleton rule (Terminal
34288
+ * Desk ADR D2). A click on an open browser FOCUSES it; a miss inserts at
34289
+ * the focused slot. */
34290
+ function openBrowserPanel(index, keepSelection = false) {
34291
+ const open = st.panels.find((p) => p.kind === "browser");
34292
+ if (open) {
34293
+ st.selectedPanelId = open.id;
34294
+ return;
34295
+ }
34296
+ const prevSelected = st.selectedPanelId;
34297
+ insertPanel(makeBrowserPanel(), index === void 0 ? insertionSlot() : Math.max(0, Math.min(index, st.panels.length)));
34298
+ if (keepSelection && prevSelected !== null && prevSelected !== void 0) {
34299
+ if (st.panels.some((p) => p.id === prevSelected)) st.selectedPanelId = prevSelected;
34300
+ }
34301
+ }
33681
34302
  /** The open explorer for a session's workspace (The Shared Tree D1):
33682
34303
  * matched by ROOT across sessions — the panel's provenance sessionId
33683
34304
  * is not the key. */
@@ -33940,6 +34561,13 @@ function makePanel(sessionId, agentPreset) {
33940
34561
  width: clampPanelWidth(d$1().getPanelWidth())
33941
34562
  };
33942
34563
  }
34564
+ function makeBrowserPanel() {
34565
+ return {
34566
+ id: nextPanelId(),
34567
+ kind: "browser",
34568
+ width: clampPanelWidth(d$1().getPanelWidth())
34569
+ };
34570
+ }
33943
34571
  function makeWorkspaceExplorerPanel(sessionId, root) {
33944
34572
  return {
33945
34573
  id: nextPanelId(),
@@ -33956,6 +34584,9 @@ function insertPanel(entry, index) {
33956
34584
  st.panels = next;
33957
34585
  st.selectedPanelId = entry.id;
33958
34586
  }
34587
+ function insertionSlot() {
34588
+ return focusedInsertionSlot(st.panels, selectedIndex_(), d$1().getMoveFacts().parentOf);
34589
+ }
33959
34590
  //#endregion
33960
34591
  //#region src/lib/services/panels/floor-registry.svelte.ts
33961
34592
  var deps = null;
@@ -33977,8 +34608,18 @@ var st = {
33977
34608
  loupePanelId: null,
33978
34609
  focusComposerId: null,
33979
34610
  panelIdSeq: 0,
34611
+ terminalDeskMirrors: {},
33980
34612
  pendingFileIntents: {},
33981
- fileIntentSeq: 0};
34613
+ fileIntentSeq: 0,
34614
+ drag: null,
34615
+ widthBadgeFading: false
34616
+ };
34617
+ /** Non-reactive gesture refs (drag start index, fade timer, badge ids) —
34618
+ * written by floor-registry/drag.svelte.ts; the ids set is a live
34619
+ * SvelteSet so badge visibility stays reactive. */
34620
+ var dragRefs = {
34621
+ ids: new SvelteSet()
34622
+ };
33982
34623
  var floor = {
33983
34624
  get panels() {
33984
34625
  return st.panels;
@@ -33986,12 +34627,27 @@ var floor = {
33986
34627
  get selectedPanelId() {
33987
34628
  return st.selectedPanelId;
33988
34629
  },
34630
+ get loupePanelId() {
34631
+ return st.loupePanelId;
34632
+ },
33989
34633
  get focusComposerId() {
33990
34634
  return st.focusComposerId;
33991
34635
  },
34636
+ get terminalDeskMirrors() {
34637
+ return st.terminalDeskMirrors;
34638
+ },
33992
34639
  get pendingFileIntents() {
33993
34640
  return st.pendingFileIntents;
33994
34641
  },
34642
+ get drag() {
34643
+ return st.drag;
34644
+ },
34645
+ get widthBadgeFading() {
34646
+ return st.widthBadgeFading;
34647
+ },
34648
+ get widthBadgeIds() {
34649
+ return dragRefs.ids;
34650
+ },
33995
34651
  get selected() {
33996
34652
  return st.panels.find((p) => p.id === st.selectedPanelId) ?? null;
33997
34653
  },
@@ -34180,6 +34836,16 @@ function _page($$renderer, $$props) {
34180
34836
  initFloor(seededInitially ? [makePanel(seedSessionId(), seedCold?.agentPreset ?? null)] : initialPrefs.panels, seededInitially ? null : initialPrefs.selectedPanelId);
34181
34837
  if (seededInitially) selectPanel(floor.panels[0]?.id ?? null);
34182
34838
  if (seededInitially && seedCold !== void 0) pageFeeds.primeSeed(seedSessionId(), seedCold);
34839
+ (async () => {
34840
+ try {
34841
+ const persisted = readPersistedId();
34842
+ if (!persisted) return;
34843
+ if (floor.panels.some((panel) => panel.kind === "browser")) return;
34844
+ const res = await fetch("/api/browser");
34845
+ if (!res.ok) return;
34846
+ if ((await res.json()).sessions?.some((s) => s.id === persisted)) openBrowserPanel(readPersistedIndex() ?? void 0, true);
34847
+ } catch {}
34848
+ })();
34183
34849
  const panels = derived(() => floor.panels);
34184
34850
  const selectedPanelId = derived(() => floor.selectedPanelId);
34185
34851
  const selected = derived(() => floor.selected);
@@ -34232,8 +34898,14 @@ function _page($$renderer, $$props) {
34232
34898
  onShellExit: () => removePanel(panel.id)
34233
34899
  });
34234
34900
  $$renderer.push(`<!----></div>`);
34235
- } else if (panel.kind === "prompt-manager") {
34901
+ } else if (panel.kind === "browser") {
34236
34902
  $$renderer.push("<!--[1-->");
34903
+ $$renderer.push(`<div class="panel-manager-body svelte-1uha8ag" data-testid="panel-browser-slot">`);
34904
+ BrowserPanel($$renderer, {
34905
+ browserSessionId: "browserSessionId" in panel ? panel.browserSessionId : void 0});
34906
+ $$renderer.push(`<!----></div>`);
34907
+ } else if (panel.kind === "prompt-manager") {
34908
+ $$renderer.push("<!--[2-->");
34237
34909
  $$renderer.push(`<div class="panel-manager-body svelte-1uha8ag" data-testid="panel-manager">`);
34238
34910
  PromptManagerPanel($$renderer, {
34239
34911
  onclose: hostClose ?? (() => removePanel(panel.id)),
@@ -34242,14 +34914,14 @@ function _page($$renderer, $$props) {
34242
34914
  });
34243
34915
  $$renderer.push(`<!----></div>`);
34244
34916
  } else if (panel.kind === "plugin-rack") {
34245
- $$renderer.push("<!--[2-->");
34917
+ $$renderer.push("<!--[3-->");
34246
34918
  $$renderer.push(`<div class="panel-manager-body svelte-1uha8ag" data-testid="panel-plugins">`);
34247
34919
  PluginManagerPanel($$renderer, {
34248
34920
  refreshToken: panel.refresh ?? 0,
34249
34921
  initialTab: panel.tab ?? "install"});
34250
34922
  $$renderer.push(`<!----></div>`);
34251
34923
  } else if (panel.kind === "skill-shelf") {
34252
- $$renderer.push("<!--[3-->");
34924
+ $$renderer.push("<!--[4-->");
34253
34925
  $$renderer.push(`<div class="panel-manager-body svelte-1uha8ag" data-testid="panel-skills">`);
34254
34926
  SettingsSkillsPanel($$renderer, {
34255
34927
  refreshToken: panel.refresh ?? 0,
@@ -34259,13 +34931,13 @@ function _page($$renderer, $$props) {
34259
34931
  initialReload: panel.reload ?? null});
34260
34932
  $$renderer.push(`<!----></div>`);
34261
34933
  } else if (panel.kind === "settings-editor") {
34262
- $$renderer.push("<!--[4-->");
34934
+ $$renderer.push("<!--[5-->");
34263
34935
  $$renderer.push(`<div class="panel-manager-body svelte-1uha8ag" data-testid="panel-settings">`);
34264
34936
  SettingsEditorPanel($$renderer, {
34265
34937
  target: panel.target});
34266
34938
  $$renderer.push(`<!----></div>`);
34267
34939
  } else if (panel.kind === "injected-doc") {
34268
- $$renderer.push("<!--[5-->");
34940
+ $$renderer.push("<!--[6-->");
34269
34941
  $$renderer.push(`<div class="panel-manager-body svelte-1uha8ag">`);
34270
34942
  InjectedDocPanel($$renderer, {
34271
34943
  sourceSessionId: panel.sourceSessionId,
@@ -34273,7 +34945,7 @@ function _page($$renderer, $$props) {
34273
34945
  entries: pageFeeds.coldCache[panel.sourceSessionId]?.entries ?? []});
34274
34946
  $$renderer.push(`<!----></div>`);
34275
34947
  } else if (panel.kind === "workspace-explorer") {
34276
- $$renderer.push("<!--[6-->");
34948
+ $$renderer.push("<!--[7-->");
34277
34949
  WorkspaceExplorerPanel($$renderer, {
34278
34950
  sessionId: panel.sessionId,
34279
34951
  root: panel.root,
@@ -34304,7 +34976,7 @@ function _page($$renderer, $$props) {
34304
34976
  onActivateTab: (path) => activateExplorerTab(panel.id, path)
34305
34977
  });
34306
34978
  } else if (panel.kind === "workspace-file") {
34307
- $$renderer.push("<!--[7-->");
34979
+ $$renderer.push("<!--[8-->");
34308
34980
  WorkspaceFilePanel($$renderer, {
34309
34981
  sessionId: panel.sessionId,
34310
34982
  path: panel.path,
@@ -34314,7 +34986,7 @@ function _page($$renderer, $$props) {
34314
34986
  onclose: () => removePanel(panel.id)
34315
34987
  });
34316
34988
  } else if (panel.kind === "conversation") {
34317
- $$renderer.push("<!--[8-->");
34989
+ $$renderer.push("<!--[9-->");
34318
34990
  const p = panel;
34319
34991
  $$renderer.push(`<!---->`);
34320
34992
  if (pageFeeds.deadSessions[p.sessionId]) {
@@ -34349,6 +35021,7 @@ function _page($$renderer, $$props) {
34349
35021
  a2aRows: a2aRowsFor(p.sessionId),
34350
35022
  a2aTitles: spineTitles(),
34351
35023
  onOpenExplorer: openWorkspaceExplorer,
35024
+ onOpenBrowser: lineageFacts().subagentIds.has(p.sessionId) ? void 0 : () => openBrowserPanel(),
34352
35025
  focusComposer: p.id === focusComposerId(),
34353
35026
  oncomposerfocus: () => clearFocusComposer(),
34354
35027
  focused: p.id === selectedPanelId()
@@ -34377,6 +35050,7 @@ function _page($$renderer, $$props) {
34377
35050
  a2aTitles: spineTitles(),
34378
35051
  onNeedCold: (sid) => void ensureCold(sid),
34379
35052
  onOpenExplorer: openWorkspaceExplorer,
35053
+ onOpenBrowser: lineageFacts().subagentIds.has(p.sessionId) ? void 0 : () => openBrowserPanel(),
34380
35054
  focusComposer: p.id === focusComposerId(),
34381
35055
  oncomposerfocus: () => clearFocusComposer(),
34382
35056
  focused: p.id === selectedPanelId()
@@ -34482,4 +35156,4 @@ function _page($$renderer, $$props) {
34482
35156
  }
34483
35157
 
34484
35158
  export { _page as default };
34485
- //# sourceMappingURL=_page.svelte.js-DrMNc6ih.js.map
35159
+ //# sourceMappingURL=_page.svelte.js-D3F2fiR4.js.map