@deepseek-insight/dsi 0.5.33 → 0.5.34

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 (150) hide show
  1. package/build/client/_app/immutable/assets/0.9KCWnpRq.css +2 -0
  2. package/build/client/_app/immutable/assets/2.DEfYr14g.css +1 -0
  3. package/build/client/_app/immutable/chunks/-BV4MEqr.js +1 -0
  4. package/build/client/_app/immutable/chunks/{BO15_-NJ.js → B2hm1w7K.js} +1 -1
  5. package/build/client/_app/immutable/chunks/{B3Lta-Nn.js → B52Khb6E.js} +1 -1
  6. package/build/client/_app/immutable/chunks/{DGget9Lk.js → B53Y9F3N.js} +1 -1
  7. package/build/client/_app/immutable/chunks/B5GSQvZ-.js +1 -0
  8. package/build/client/_app/immutable/chunks/{Da0rl5Rb.js → B9fOkvHb.js} +1 -1
  9. package/build/client/_app/immutable/chunks/{CIZRvqf3.js → BC5nqwvj.js} +1 -1
  10. package/build/client/_app/immutable/chunks/{CVJBb63S.js → BFsDYOFz.js} +1 -1
  11. package/build/client/_app/immutable/chunks/{BOGXkyy3.js → BGQXNvll.js} +1 -1
  12. package/build/client/_app/immutable/chunks/{1KjP5PPV.js → BIUi504d.js} +1 -1
  13. package/build/client/_app/immutable/chunks/{wRPKccfz.js → BIvFR1xA.js} +1 -1
  14. package/build/client/_app/immutable/chunks/{BS84xqUl.js → BKYpDGvC.js} +1 -1
  15. package/build/client/_app/immutable/chunks/{DzNl4lTU.js → BNx4_m7U.js} +1 -1
  16. package/build/client/_app/immutable/chunks/{BhMqa9V0.js → BOKyldQm.js} +1 -1
  17. package/build/client/_app/immutable/chunks/{BFYiBR8b.js → BRNBFqQ_.js} +1 -1
  18. package/build/client/_app/immutable/chunks/{B5bIZjCh.js → B_6pr4k2.js} +1 -1
  19. package/build/client/_app/immutable/chunks/{BoJ5ww2X.js → BfChGCnE.js} +1 -1
  20. package/build/client/_app/immutable/chunks/{BK9wQfnJ.js → Bi25XSWW.js} +1 -1
  21. package/build/client/_app/immutable/chunks/{CXDjw6BI.js → Bi5NvDds.js} +1 -1
  22. package/build/client/_app/immutable/chunks/{CjMviqoD.js → Bl78Sc72.js} +1 -1
  23. package/build/client/_app/immutable/chunks/{D2Punuji.js → Bn64J6A-.js} +1 -1
  24. package/build/client/_app/immutable/chunks/{BQFPW2iU.js → Bp4vT1Ke.js} +1 -1
  25. package/build/client/_app/immutable/chunks/{DnA33f7e.js → C-58cZAk.js} +1 -1
  26. package/build/client/_app/immutable/chunks/{FDKaBHdO.js → C1rk31qs.js} +1 -1
  27. package/build/client/_app/immutable/chunks/{eNqKaSDb.js → C2vkjTiv.js} +1 -1
  28. package/build/client/_app/immutable/chunks/{C7xeaPF2.js → C48u-2qp.js} +1 -1
  29. package/build/client/_app/immutable/chunks/{D9XozwcM.js → C7a8i7sD.js} +1 -1
  30. package/build/client/_app/immutable/chunks/{tziyL5EM.js → C7iYNw8X.js} +1 -1
  31. package/build/client/_app/immutable/chunks/{CA7VtFsM.js → C8wGq5T2.js} +1 -1
  32. package/build/client/_app/immutable/chunks/{DVsJyQaB.js → CDTTZjYW.js} +1 -1
  33. package/build/client/_app/immutable/chunks/{CQNMOuVz.js → CEj_BGCY.js} +1 -1
  34. package/build/client/_app/immutable/chunks/{dg-Ik0Xp.js → CG77uzLI.js} +1 -1
  35. package/build/client/_app/immutable/chunks/{DfxnqpU2.js → CI1tkkzb.js} +1 -1
  36. package/build/client/_app/immutable/chunks/{DTVIMflS.js → CItDRTlN.js} +1 -1
  37. package/build/client/_app/immutable/chunks/{BKMUCRSB.js → CLvIgAhR.js} +1 -1
  38. package/build/client/_app/immutable/chunks/{7Qwz4TD3.js → CPbUcKPc.js} +1 -1
  39. package/build/client/_app/immutable/chunks/CPhcxli7.js +1 -0
  40. package/build/client/_app/immutable/chunks/{BtWgux0k.js → CRe9IZg0.js} +1 -1
  41. package/build/client/_app/immutable/chunks/CT1m72HM.js +1 -0
  42. package/build/client/_app/immutable/chunks/{DHChdxxK.js → CaAId7nh.js} +1 -1
  43. package/build/client/_app/immutable/chunks/{5W1abxrJ.js → CdFbOrCf.js} +1 -1
  44. package/build/client/_app/immutable/chunks/{Dufckt0T.js → Cdn_bzx2.js} +1 -1
  45. package/build/client/_app/immutable/chunks/{D_4vyw9k.js → CmNEu9LM.js} +1 -1
  46. package/build/client/_app/immutable/chunks/{BNCXVe_Y.js → CnAA0dO8.js} +1 -1
  47. package/build/client/_app/immutable/chunks/{_OxPZn8v.js → CpX84bXa.js} +1 -1
  48. package/build/client/_app/immutable/chunks/{D-p2gaJO.js → CvWnUnS1.js} +1 -1
  49. package/build/client/_app/immutable/chunks/{qDr7l6ST.js → CvjdFV1E.js} +1 -1
  50. package/build/client/_app/immutable/chunks/{XM-sjL-p.js → Cx__ttXF.js} +1 -1
  51. package/build/client/_app/immutable/chunks/CxnI-Htc.js +8 -0
  52. package/build/client/_app/immutable/chunks/D07HHvcI.js +2 -0
  53. package/build/client/_app/immutable/chunks/D0uZseUH.js +1 -0
  54. package/build/client/_app/immutable/chunks/D25JjSwh.js +1 -0
  55. package/build/client/_app/immutable/chunks/{T453H1uG.js → D3bC95qg.js} +1 -1
  56. package/build/client/_app/immutable/chunks/{DtdNJetN.js → D4Ogpdhb.js} +1 -1
  57. package/build/client/_app/immutable/chunks/{DrLWFO8Z.js → D4xFb7_b.js} +1 -1
  58. package/build/client/_app/immutable/chunks/{CfqeI44h.js → D5ecapQY.js} +1 -1
  59. package/build/client/_app/immutable/chunks/{NxBjh70M.js → DJ36HFmi.js} +1 -1
  60. package/build/client/_app/immutable/chunks/{CfKp2keY.js → Dea0pTfN.js} +4 -4
  61. package/build/client/_app/immutable/chunks/{CWRt23V2.js → Dn4fSUjR.js} +1 -1
  62. package/build/client/_app/immutable/chunks/{BnEcDyty.js → DqRXQwgi.js} +1 -1
  63. package/build/client/_app/immutable/chunks/{CT33sMmw.js → DsZdPfqt.js} +1 -1
  64. package/build/client/_app/immutable/chunks/{CKk3hDrH.js → DypDva7F.js} +1 -1
  65. package/build/client/_app/immutable/chunks/{CwpTIVX4.js → GNZHLVjs.js} +1 -1
  66. package/build/client/_app/immutable/chunks/{KCYBrblk.js → GhVfcgWW.js} +4 -4
  67. package/build/client/_app/immutable/chunks/HwuqC1sa.js +1 -0
  68. package/build/client/_app/immutable/chunks/{hFCLiR2C.js → J3KpJGd_.js} +1 -1
  69. package/build/client/_app/immutable/chunks/{pRzztTzl.js → OVDjSnH6.js} +1 -1
  70. package/build/client/_app/immutable/chunks/{BDws8KMN.js → RIIj2qfU.js} +1 -1
  71. package/build/client/_app/immutable/chunks/{CbmGLQlS.js → ZwJo3zrp.js} +1 -1
  72. package/build/client/_app/immutable/chunks/{CWJVj28H.js → a1Hqq5w-.js} +1 -1
  73. package/build/client/_app/immutable/chunks/{BP1EDRMh.js → iK_uzrhN.js} +1 -1
  74. package/build/client/_app/immutable/chunks/{4BUyCMHs.js → l5GiMY16.js} +1 -1
  75. package/build/client/_app/immutable/chunks/{5BuKkouu.js → qkxAgKjo.js} +1 -1
  76. package/build/client/_app/immutable/chunks/{CfPrYC2A.js → xRO38jd8.js} +1 -1
  77. package/build/client/_app/immutable/entry/app.JnGE9QaY.js +2 -0
  78. package/build/client/_app/immutable/entry/start.B82JjWXe.js +1 -0
  79. package/build/client/_app/immutable/nodes/0.Ba4j9lPa.js +1 -0
  80. package/build/client/_app/immutable/nodes/1.DibfLi2p.js +1 -0
  81. package/build/client/_app/immutable/nodes/2.ChfcYWGA.js +331 -0
  82. package/build/client/_app/version.json +1 -1
  83. package/build/handler.js +4 -4
  84. package/build/index.js +4 -4
  85. package/build/server/chunks/chunks/{dsh-connection.js-BSzUs8-n.js → dsh-connection.js-Lnv7PlHw.js} +23 -1
  86. package/build/server/chunks/chunks/{dsh-events.js-DEZgATm-.js → dsh-events.js-CyvSb4O3.js} +40 -3
  87. package/build/server/chunks/chunks/{git-probe.js-DoWgYcXG.js → git-probe.js-dOJ4Z5Hb.js} +3 -3
  88. package/build/server/chunks/chunks/{internal.js-L3lTruRr.js → internal.js-CiAyaHU8.js} +2 -2
  89. package/build/server/chunks/chunks/{state.js-YbeUlJBc.js → state.js-DDFKGUCM.js} +2 -2
  90. package/build/server/chunks/chunks/{watcher.js-ZBFDj7d0.js → watcher.js-bCH9-ZiR.js} +3 -3
  91. package/build/server/chunks/entries/endpoints/api/a2a/{_server.ts.js-C12q5Acf.js → _server.ts.js-CqAXkMAm.js} +4 -4
  92. package/build/server/chunks/entries/endpoints/api/a2a/register/{_server.ts.js-CdMcLL0n.js → _server.ts.js-FBi0PplP.js} +4 -4
  93. package/build/server/chunks/entries/endpoints/api/dsh/directory/{_server.ts.js-BJMlDa_R.js → _server.ts.js-BAfRDeE_.js} +2 -2
  94. package/build/server/chunks/entries/endpoints/api/dsh/pick-directory/{_server.ts.js-C5xgupWg.js → _server.ts.js-N21TnqYh.js} +2 -2
  95. package/build/server/chunks/entries/endpoints/api/dsh/presets/{_server.ts.js-DG0cxf9Y.js → _server.ts.js-C5ckDTov.js} +2 -2
  96. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/attachment/{_server.ts.js-CjIzvUMY.js → _server.ts.js-CEPz4kVZ.js} +2 -2
  97. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/cancel/{_server.ts.js-DqvT86T0.js → _server.ts.js-CUB5TKnW.js} +2 -2
  98. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/catalog/{_server.ts.js-BzBZnI3P.js → _server.ts.js-BfDAa0Vb.js} +2 -2
  99. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/changes/_server.ts.js-QiLS5yAj.js +142 -0
  100. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/command/{_server.ts.js-DHWvuiKn.js → _server.ts.js-C5kJrRx-.js} +2 -2
  101. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/events/{_server.ts.js-ARtFWpnE.js → _server.ts.js-CYZUxBob.js} +3 -3
  102. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/fork/{_server.ts.js-rH3qhAct.js → _server.ts.js-y5sqH_UC.js} +2 -2
  103. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/goal/{_server.ts.js-D_fm0cJY.js → _server.ts.js-BoYIpj-f.js} +2 -2
  104. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/history/{_server.ts.js-BqpeQTZq.js → _server.ts.js-DGGCIii3.js} +3 -3
  105. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/models/{_server.ts.js-CHKAkZEq.js → _server.ts.js-B8bmQCwT.js} +2 -2
  106. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/permission/{_server.ts.js-DmjKvFqc.js → _server.ts.js-BBexDstc.js} +2 -2
  107. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/prompt/{_server.ts.js-N1651orW.js → _server.ts.js-fd9StFXw.js} +2 -2
  108. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/rename/{_server.ts.js-w1dYBirS.js → _server.ts.js-98HaDusY.js} +2 -2
  109. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/respond/{_server.ts.js-Bwb62OTc.js → _server.ts.js-DN9APffn.js} +2 -2
  110. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/select-model/{_server.ts.js-D2BCSITG.js → _server.ts.js-CeROEmUY.js} +2 -2
  111. package/build/server/chunks/entries/endpoints/api/dsh/sessions/{_server.ts.js-t_DpnCyJ.js → _server.ts.js-DKHmiqIs.js} +2 -2
  112. package/build/server/chunks/entries/endpoints/api/dsh/workspace-file/{_server.ts.js-BddU8qpx.js → _server.ts.js-S6XZDJmC.js} +2 -2
  113. package/build/server/chunks/entries/endpoints/api/dsh/workspace-file-bytes/{_server.ts.js-Di_7wqCI.js → _server.ts.js-Boxbod_L.js} +2 -2
  114. package/build/server/chunks/entries/endpoints/api/dsh/workspace-tree/{_server.ts.js-DPz9GQJJ.js → _server.ts.js-CA4PUERZ.js} +2 -2
  115. package/build/server/chunks/entries/endpoints/api/dsh/workspaces/{_server.ts.js-C1jO88hY.js → _server.ts.js-BObM3Axz.js} +2 -2
  116. package/build/server/chunks/entries/endpoints/api/dsh/workspaces/_workspaceId_/delete/{_server.ts.js-C1akVoP3.js → _server.ts.js-CA34p4GV.js} +2 -2
  117. package/build/server/chunks/entries/endpoints/api/dsh/workspaces/_workspaceId_/rename/{_server.ts.js-C4RkBuGZ.js → _server.ts.js-DPoRM_7u.js} +2 -2
  118. package/build/server/chunks/entries/endpoints/api/workspace/file-write/{_server.ts.js-D1gyOGEM.js → _server.ts.js-BIOHsnn2.js} +4 -4
  119. package/build/server/chunks/entries/endpoints/api/workspace/git-events/{_server.ts.js-D5XlAzdL.js → _server.ts.js-Ci5XitWP.js} +4 -4
  120. package/build/server/chunks/entries/endpoints/api/workspace/git-file-head/{_server.ts.js-BKJbQR9z.js → _server.ts.js-p-potXo3.js} +4 -4
  121. package/build/server/chunks/entries/endpoints/api/workspace/git-map/{_server.ts.js-CehoxXA_.js → _server.ts.js-DYFs7MEO.js} +4 -4
  122. package/build/server/chunks/entries/endpoints/api/workspace/git-status/{_server.ts.js-DMhaSADa.js → _server.ts.js-BB2bcMwC.js} +4 -4
  123. package/build/server/chunks/entries/endpoints/api/workspace/write-gate/{_server.ts.js-BQRvPo9G.js → _server.ts.js-DFnO84k1.js} +4 -4
  124. package/build/server/chunks/entries/pages/{_error.svelte.js-CYWDZLI7.js → _error.svelte.js-CfEcN0a5.js} +3 -3
  125. package/build/server/chunks/entries/pages/{_page.server.ts.js-C3_-EdaG.js → _page.server.ts.js-Cqf2xfOc.js} +3 -3
  126. package/build/server/chunks/entries/pages/{_page.svelte.js-D-nbMlOD.js → _page.svelte.js-5qYAGNkZ.js} +572 -86
  127. package/build/server/chunks/{handler-Dtl9b654.js → handler-C29GDWFA.js} +3 -3
  128. package/build/server/chunks/{index.js-Dm6-G-_6.js → index.js-CzsX25WI.js} +2 -2
  129. package/build/server/chunks/{manifest.js-CqSIh_aQ.js → manifest.js-BKlTd1KI.js} +44 -37
  130. package/build/server/chunks/nodes/{0.js-CWZQcgo6.js → 0.js-D1vjUdTF.js} +3 -3
  131. package/build/server/chunks/nodes/1.js-Dv0mcT1C.js +9 -0
  132. package/build/server/chunks/nodes/{2.js-BUXLNNKI.js → 2.js-043RuGl0.js} +7 -7
  133. package/package.json +3 -2
  134. package/build/client/_app/immutable/assets/0.BU1D48E8.css +0 -2
  135. package/build/client/_app/immutable/assets/2.PKDcj4V6.css +0 -1
  136. package/build/client/_app/immutable/chunks/C6qkDvEg.js +0 -2
  137. package/build/client/_app/immutable/chunks/CCeZTRyg.js +0 -1
  138. package/build/client/_app/immutable/chunks/CM2YlsBZ.js +0 -1
  139. package/build/client/_app/immutable/chunks/CWCyOfZL.js +0 -1
  140. package/build/client/_app/immutable/chunks/DB0_Ut01.js +0 -1
  141. package/build/client/_app/immutable/chunks/DFZg0vdm.js +0 -8
  142. package/build/client/_app/immutable/chunks/DKLs56Hm.js +0 -1
  143. package/build/client/_app/immutable/chunks/E-1cXrsM.js +0 -1
  144. package/build/client/_app/immutable/chunks/N_z8g1dA.js +0 -1
  145. package/build/client/_app/immutable/entry/app.CivPp_F8.js +0 -2
  146. package/build/client/_app/immutable/entry/start.BS5ewb9B.js +0 -1
  147. package/build/client/_app/immutable/nodes/0.ze9O6tWo.js +0 -1
  148. package/build/client/_app/immutable/nodes/1.DLvBQOBf.js +0 -1
  149. package/build/client/_app/immutable/nodes/2.BCq5Ttag.js +0 -174
  150. package/build/server/chunks/nodes/1.js-BXDgJSsl.js +0 -9
@@ -1,13 +1,13 @@
1
- import { c as onDestroy, d as __exportAll } from '../../chunks/internal.js-L3lTruRr.js';
1
+ import { c as onDestroy, d as __exportAll } from '../../chunks/internal.js-CiAyaHU8.js';
2
2
  import { V as head, y as derived, X as bind_props, W as escape_html, Y as attr, Z as attr_style, _ as attr_class, x as setContext, $ as spread_props, a0 as attributes, a1 as clsx, a2 as ensure_array_like, a3 as element, J as getContext, a4 as stringify, a5 as html, F as run, a6 as props_id } from '../../chunks/server.js-11-pxAWV.js';
3
3
  import { U as UI_LOCALES } from '../../chunks/config.js-B0w1-uCA.js';
4
- import { m as mergeEntries, c as collapseSystemPromptEntries, t as truncate } from '../../chunks/dsh-events.js-DEZgATm-.js';
4
+ import { m as mergeEntries, c as collapseSystemPromptEntries, t as truncate } from '../../chunks/dsh-events.js-CyvSb4O3.js';
5
5
  import { p as parseA2aSignature, m as mintA2aId, b as buildDeliveredText } from '../../chunks/a2a-protocol.js-C77mVg2Q.js';
6
6
  import { b as applyKnobEvent, E as EMPTY_KNOBS, r as resolvePermission, l as localPermission, c as presetLabel, d as presetDescription, C as CUSTOM_PRESET, F as FULL_ACCESS_PRESET } from '../../chunks/permission-state.js-B7UpAHBv.js';
7
7
  import { D as DEFAULT_IMAGE_LIMITS } from '../../chunks/image-limits.js-CUdJ0f7r.js';
8
8
  import { a as appConfig, t as triggerMode, g as getTrigger, p as previewSegments, i as isValidTagWord, b as textPreviewOf, s as searchKey, c as shouldRecordPrompt, d as parseTagWords } from '../../chunks/app-config.svelte.js-BBPHOX4N.js';
9
9
  import { c as getLocale } from '../../chunks/runtime.js-CCJi3XaY.js';
10
- import { p as page, a as afterNavigate, t, c as replaceState, e as currentLocale, u as unexpectederror1, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, b as backtoworkspace2 } from '../../chunks/state.js-YbeUlJBc.js';
10
+ import { p as page, a as afterNavigate, t, c as replaceState, e as currentLocale, u as unexpectederror1, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, b as backtoworkspace2 } from '../../chunks/state.js-DDFKGUCM.js';
11
11
  import 'yaml';
12
12
  import 'html-to-image';
13
13
  import hljs from 'highlight.js/lib/core';
@@ -1302,38 +1302,6 @@ var clearsearch1 = ((inputs = {}, options = {}) => {
1302
1302
  return en_clearsearch1();
1303
1303
  });
1304
1304
  //#endregion
1305
- //#region src/lib/paraglide/messages/clearsessionnamefilter3.js
1306
- /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
1307
- /** @typedef {{}} Clearsessionnamefilter3Inputs */
1308
- var en_clearsessionnamefilter3 = () => {
1309
- return `Clear session name filter`;
1310
- };
1311
- var zh_clearsessionnamefilter3 = () => {
1312
- return `清除会话名筛选`;
1313
- };
1314
- var id_clearsessionnamefilter3 = () => {
1315
- return `Hapus filter nama sesi`;
1316
- };
1317
- var es_clearsessionnamefilter3 = () => {
1318
- return `Limpiar filtro de nombre de sesión`;
1319
- };
1320
- /**
1321
- * | output |
1322
- * | --- |
1323
- * | "Clear session name filter" |
1324
- *
1325
- * @param {Clearsessionnamefilter3Inputs} inputs
1326
- * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
1327
- * @returns {LocalizedString}
1328
- */
1329
- var clearsessionnamefilter3 = ((inputs = {}, options = {}) => {
1330
- const locale = options.locale ?? getLocale();
1331
- if (locale === "zh") return zh_clearsessionnamefilter3();
1332
- if (locale === "id") return id_clearsessionnamefilter3();
1333
- if (locale === "es") return es_clearsessionnamefilter3();
1334
- return en_clearsessionnamefilter3();
1335
- });
1336
- //#endregion
1337
1305
  //#region src/lib/paraglide/messages/clearthegoal2.js
1338
1306
  /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
1339
1307
  /** @typedef {{}} Clearthegoal2Inputs */
@@ -3510,6 +3478,294 @@ var editprompt1 = ((inputs = {}, options = {}) => {
3510
3478
  return en_editprompt1();
3511
3479
  });
3512
3480
  //#endregion
3481
+ //#region src/lib/paraglide/messages/editedfilesadded2.js
3482
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
3483
+ /** @typedef {{ count: NonNullable<unknown> }} Editedfilesadded2Inputs */
3484
+ var en_editedfilesadded2 = (i) => {
3485
+ return `+${i?.count}`;
3486
+ };
3487
+ var zh_editedfilesadded2 = (i) => {
3488
+ return `+${i?.count}`;
3489
+ };
3490
+ var id_editedfilesadded2 = (i) => {
3491
+ return `+${i?.count}`;
3492
+ };
3493
+ var es_editedfilesadded2 = (i) => {
3494
+ return `+${i?.count}`;
3495
+ };
3496
+ /**
3497
+ * | output |
3498
+ * | --- |
3499
+ * | "+{count}" |
3500
+ *
3501
+ * @param {Editedfilesadded2Inputs} inputs
3502
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
3503
+ * @returns {LocalizedString}
3504
+ */
3505
+ var editedfilesadded2 = ((inputs, options = {}) => {
3506
+ const locale = options.locale ?? getLocale();
3507
+ if (locale === "zh") return zh_editedfilesadded2(inputs);
3508
+ if (locale === "id") return id_editedfilesadded2(inputs);
3509
+ if (locale === "es") return es_editedfilesadded2(inputs);
3510
+ return en_editedfilesadded2(inputs);
3511
+ });
3512
+ //#endregion
3513
+ //#region src/lib/paraglide/messages/editedfilesbinary2.js
3514
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
3515
+ /** @typedef {{}} Editedfilesbinary2Inputs */
3516
+ var en_editedfilesbinary2 = () => {
3517
+ return `binary`;
3518
+ };
3519
+ var zh_editedfilesbinary2 = () => {
3520
+ return `二进制`;
3521
+ };
3522
+ var id_editedfilesbinary2 = () => {
3523
+ return `biner`;
3524
+ };
3525
+ var es_editedfilesbinary2 = () => {
3526
+ return `binario`;
3527
+ };
3528
+ /**
3529
+ * | output |
3530
+ * | --- |
3531
+ * | "binary" |
3532
+ *
3533
+ * @param {Editedfilesbinary2Inputs} inputs
3534
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
3535
+ * @returns {LocalizedString}
3536
+ */
3537
+ var editedfilesbinary2 = ((inputs = {}, options = {}) => {
3538
+ const locale = options.locale ?? getLocale();
3539
+ if (locale === "zh") return zh_editedfilesbinary2();
3540
+ if (locale === "id") return id_editedfilesbinary2();
3541
+ if (locale === "es") return es_editedfilesbinary2();
3542
+ return en_editedfilesbinary2();
3543
+ });
3544
+ //#endregion
3545
+ //#region src/lib/paraglide/messages/editedfilescaphint3.js
3546
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
3547
+ /** @typedef {{ count: NonNullable<unknown> }} Editedfilescaphint3Inputs */
3548
+ var en_editedfilescaphint3 = (i) => {
3549
+ return `and ${i?.count} more`;
3550
+ };
3551
+ var zh_editedfilescaphint3 = (i) => {
3552
+ return `还有 ${i?.count} 个`;
3553
+ };
3554
+ var id_editedfilescaphint3 = (i) => {
3555
+ return `dan ${i?.count} lagi`;
3556
+ };
3557
+ var es_editedfilescaphint3 = (i) => {
3558
+ return `y ${i?.count} más`;
3559
+ };
3560
+ /**
3561
+ * | output |
3562
+ * | --- |
3563
+ * | "and {count} more" |
3564
+ *
3565
+ * @param {Editedfilescaphint3Inputs} inputs
3566
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
3567
+ * @returns {LocalizedString}
3568
+ */
3569
+ var editedfilescaphint3 = ((inputs, options = {}) => {
3570
+ const locale = options.locale ?? getLocale();
3571
+ if (locale === "zh") return zh_editedfilescaphint3(inputs);
3572
+ if (locale === "id") return id_editedfilescaphint3(inputs);
3573
+ if (locale === "es") return es_editedfilescaphint3(inputs);
3574
+ return en_editedfilescaphint3(inputs);
3575
+ });
3576
+ //#endregion
3577
+ //#region src/lib/paraglide/messages/editedfileschip2.js
3578
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
3579
+ /** @typedef {{}} Editedfileschip2Inputs */
3580
+ var en_editedfileschip2 = () => {
3581
+ return `edited files`;
3582
+ };
3583
+ var zh_editedfileschip2 = () => {
3584
+ return `已编辑文件`;
3585
+ };
3586
+ var id_editedfileschip2 = () => {
3587
+ return `berkas diedit`;
3588
+ };
3589
+ var es_editedfileschip2 = () => {
3590
+ return `archivos editados`;
3591
+ };
3592
+ /**
3593
+ * | output |
3594
+ * | --- |
3595
+ * | "edited files" |
3596
+ *
3597
+ * @param {Editedfileschip2Inputs} inputs
3598
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
3599
+ * @returns {LocalizedString}
3600
+ */
3601
+ var editedfileschip2 = ((inputs = {}, options = {}) => {
3602
+ const locale = options.locale ?? getLocale();
3603
+ if (locale === "zh") return zh_editedfileschip2();
3604
+ if (locale === "id") return id_editedfileschip2();
3605
+ if (locale === "es") return es_editedfileschip2();
3606
+ return en_editedfileschip2();
3607
+ });
3608
+ //#endregion
3609
+ //#region src/lib/paraglide/messages/editedfilesdeleted2.js
3610
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
3611
+ /** @typedef {{ count: NonNullable<unknown> }} Editedfilesdeleted2Inputs */
3612
+ var en_editedfilesdeleted2 = (i) => {
3613
+ return `-${i?.count}`;
3614
+ };
3615
+ var zh_editedfilesdeleted2 = (i) => {
3616
+ return `-${i?.count}`;
3617
+ };
3618
+ var id_editedfilesdeleted2 = (i) => {
3619
+ return `-${i?.count}`;
3620
+ };
3621
+ var es_editedfilesdeleted2 = (i) => {
3622
+ return `-${i?.count}`;
3623
+ };
3624
+ /**
3625
+ * | output |
3626
+ * | --- |
3627
+ * | "-{count}" |
3628
+ *
3629
+ * @param {Editedfilesdeleted2Inputs} inputs
3630
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
3631
+ * @returns {LocalizedString}
3632
+ */
3633
+ var editedfilesdeleted2 = ((inputs, options = {}) => {
3634
+ const locale = options.locale ?? getLocale();
3635
+ if (locale === "zh") return zh_editedfilesdeleted2(inputs);
3636
+ if (locale === "id") return id_editedfilesdeleted2(inputs);
3637
+ if (locale === "es") return es_editedfilesdeleted2(inputs);
3638
+ return en_editedfilesdeleted2(inputs);
3639
+ });
3640
+ //#endregion
3641
+ //#region src/lib/paraglide/messages/editedfilesgone2.js
3642
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
3643
+ /** @typedef {{}} Editedfilesgone2Inputs */
3644
+ var en_editedfilesgone2 = () => {
3645
+ return `Files were edited this turn — counts are no longer available`;
3646
+ };
3647
+ var zh_editedfilesgone2 = () => {
3648
+ return `本轮编辑了文件 — 计数已不可用`;
3649
+ };
3650
+ var id_editedfilesgone2 = () => {
3651
+ return `Berkas diedit giliran ini — hitungan sudah tidak tersedia`;
3652
+ };
3653
+ var es_editedfilesgone2 = () => {
3654
+ return `Se editaron archivos en este turno — los conteos ya no están disponibles`;
3655
+ };
3656
+ /**
3657
+ * | output |
3658
+ * | --- |
3659
+ * | "Files were edited this turn — counts are no longer available" |
3660
+ *
3661
+ * @param {Editedfilesgone2Inputs} inputs
3662
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
3663
+ * @returns {LocalizedString}
3664
+ */
3665
+ var editedfilesgone2 = ((inputs = {}, options = {}) => {
3666
+ const locale = options.locale ?? getLocale();
3667
+ if (locale === "zh") return zh_editedfilesgone2();
3668
+ if (locale === "id") return id_editedfilesgone2();
3669
+ if (locale === "es") return es_editedfilesgone2();
3670
+ return en_editedfilesgone2();
3671
+ });
3672
+ //#endregion
3673
+ //#region src/lib/paraglide/messages/editedfilesoversized2.js
3674
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
3675
+ /** @typedef {{}} Editedfilesoversized2Inputs */
3676
+ var en_editedfilesoversized2 = () => {
3677
+ return `too large`;
3678
+ };
3679
+ var zh_editedfilesoversized2 = () => {
3680
+ return `文件过大`;
3681
+ };
3682
+ var id_editedfilesoversized2 = () => {
3683
+ return `terlalu besar`;
3684
+ };
3685
+ var es_editedfilesoversized2 = () => {
3686
+ return `demasiado grande`;
3687
+ };
3688
+ /**
3689
+ * | output |
3690
+ * | --- |
3691
+ * | "too large" |
3692
+ *
3693
+ * @param {Editedfilesoversized2Inputs} inputs
3694
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
3695
+ * @returns {LocalizedString}
3696
+ */
3697
+ var editedfilesoversized2 = ((inputs = {}, options = {}) => {
3698
+ const locale = options.locale ?? getLocale();
3699
+ if (locale === "zh") return zh_editedfilesoversized2();
3700
+ if (locale === "id") return id_editedfilesoversized2();
3701
+ if (locale === "es") return es_editedfilesoversized2();
3702
+ return en_editedfilesoversized2();
3703
+ });
3704
+ //#endregion
3705
+ //#region src/lib/paraglide/messages/editedfilestitle2.js
3706
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
3707
+ /** @typedef {{ count: NonNullable<unknown> }} Editedfilestitle2Inputs */
3708
+ var en_editedfilestitle2 = (i) => {
3709
+ return `Edited ${i?.count} files`;
3710
+ };
3711
+ var zh_editedfilestitle2 = (i) => {
3712
+ return `编辑了 ${i?.count} 个文件`;
3713
+ };
3714
+ var id_editedfilestitle2 = (i) => {
3715
+ return `Mengedit ${i?.count} berkas`;
3716
+ };
3717
+ var es_editedfilestitle2 = (i) => {
3718
+ return `Se editaron ${i?.count} archivos`;
3719
+ };
3720
+ /**
3721
+ * | output |
3722
+ * | --- |
3723
+ * | "Edited {count} files" |
3724
+ *
3725
+ * @param {Editedfilestitle2Inputs} inputs
3726
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
3727
+ * @returns {LocalizedString}
3728
+ */
3729
+ var editedfilestitle2 = ((inputs, options = {}) => {
3730
+ const locale = options.locale ?? getLocale();
3731
+ if (locale === "zh") return zh_editedfilestitle2(inputs);
3732
+ if (locale === "id") return id_editedfilestitle2(inputs);
3733
+ if (locale === "es") return es_editedfilestitle2(inputs);
3734
+ return en_editedfilestitle2(inputs);
3735
+ });
3736
+ //#endregion
3737
+ //#region src/lib/paraglide/messages/editedfilestitleone3.js
3738
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
3739
+ /** @typedef {{}} Editedfilestitleone3Inputs */
3740
+ var en_editedfilestitleone3 = () => {
3741
+ return `Edited 1 file`;
3742
+ };
3743
+ var zh_editedfilestitleone3 = () => {
3744
+ return `编辑了 1 个文件`;
3745
+ };
3746
+ var id_editedfilestitleone3 = () => {
3747
+ return `Mengedit 1 berkas`;
3748
+ };
3749
+ var es_editedfilestitleone3 = () => {
3750
+ return `Se editó 1 archivo`;
3751
+ };
3752
+ /**
3753
+ * | output |
3754
+ * | --- |
3755
+ * | "Edited 1 file" |
3756
+ *
3757
+ * @param {Editedfilestitleone3Inputs} inputs
3758
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
3759
+ * @returns {LocalizedString}
3760
+ */
3761
+ var editedfilestitleone3 = ((inputs = {}, options = {}) => {
3762
+ const locale = options.locale ?? getLocale();
3763
+ if (locale === "zh") return zh_editedfilestitleone3();
3764
+ if (locale === "id") return id_editedfilestitleone3();
3765
+ if (locale === "es") return es_editedfilestitleone3();
3766
+ return en_editedfilestitleone3();
3767
+ });
3768
+ //#endregion
3513
3769
  //#region src/lib/paraglide/messages/enablefullaccess2.js
3514
3770
  /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
3515
3771
  /** @typedef {{}} Enablefullaccess2Inputs */
@@ -11574,6 +11830,38 @@ var turnfailed1 = ((inputs = {}, options = {}) => {
11574
11830
  return en_turnfailed1();
11575
11831
  });
11576
11832
  //#endregion
11833
+ //#region src/lib/paraglide/messages/turnstopped1.js
11834
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
11835
+ /** @typedef {{}} Turnstopped1Inputs */
11836
+ var en_turnstopped1 = () => {
11837
+ return `stopped`;
11838
+ };
11839
+ var zh_turnstopped1 = () => {
11840
+ return `已停止`;
11841
+ };
11842
+ var id_turnstopped1 = () => {
11843
+ return `dihentikan`;
11844
+ };
11845
+ var es_turnstopped1 = () => {
11846
+ return `detenido`;
11847
+ };
11848
+ /**
11849
+ * | output |
11850
+ * | --- |
11851
+ * | "stopped" |
11852
+ *
11853
+ * @param {Turnstopped1Inputs} inputs
11854
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
11855
+ * @returns {LocalizedString}
11856
+ */
11857
+ var turnstopped1 = ((inputs = {}, options = {}) => {
11858
+ const locale = options.locale ?? getLocale();
11859
+ if (locale === "zh") return zh_turnstopped1();
11860
+ if (locale === "id") return id_turnstopped1();
11861
+ if (locale === "es") return es_turnstopped1();
11862
+ return en_turnstopped1();
11863
+ });
11864
+ //#endregion
11577
11865
  //#region src/lib/paraglide/messages/turntokenusage2.js
11578
11866
  /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
11579
11867
  /** @typedef {{}} Turntokenusage2Inputs */
@@ -12321,7 +12609,6 @@ var _index_exports = /* @__PURE__ */ __exportAll({
12321
12609
  clearFilters: () => clearfilters1,
12322
12610
  clearGoal: () => cleargoal1,
12323
12611
  clearSearch: () => clearsearch1,
12324
- clearSessionNameFilter: () => clearsessionnamefilter3,
12325
12612
  clearTheGoal: () => clearthegoal2,
12326
12613
  clearTitle: () => cleartitle1,
12327
12614
  close: () => close,
@@ -12391,6 +12678,15 @@ var _index_exports = /* @__PURE__ */ __exportAll({
12391
12678
  editObjective: () => editobjective1,
12392
12679
  editObjectiveTitle: () => editobjectivetitle2,
12393
12680
  editPrompt: () => editprompt1,
12681
+ editedFilesAdded: () => editedfilesadded2,
12682
+ editedFilesBinary: () => editedfilesbinary2,
12683
+ editedFilesCapHint: () => editedfilescaphint3,
12684
+ editedFilesChip: () => editedfileschip2,
12685
+ editedFilesDeleted: () => editedfilesdeleted2,
12686
+ editedFilesGone: () => editedfilesgone2,
12687
+ editedFilesOversized: () => editedfilesoversized2,
12688
+ editedFilesTitle: () => editedfilestitle2,
12689
+ editedFilesTitleOne: () => editedfilestitleone3,
12394
12690
  enableFullAccess: () => enablefullaccess2,
12395
12691
  enableFullAccessQ: () => enablefullaccessq3,
12396
12692
  escHidesA: () => eschidesa2,
@@ -12645,6 +12941,7 @@ var _index_exports = /* @__PURE__ */ __exportAll({
12645
12941
  toolTitleToolCall: () => tooltitletoolcall3,
12646
12942
  toolTitleWrite: () => tooltitlewrite2,
12647
12943
  turnFailed: () => turnfailed1,
12944
+ turnStopped: () => turnstopped1,
12648
12945
  turnTokenUsage: () => turntokenusage2,
12649
12946
  turnUsage: () => turnusage1,
12650
12947
  uncachedInput: () => uncachedinput1,
@@ -12713,7 +13010,6 @@ var messages_exports = /* @__PURE__ */ __exportAll({
12713
13010
  clearFilters: () => clearfilters1,
12714
13011
  clearGoal: () => cleargoal1,
12715
13012
  clearSearch: () => clearsearch1,
12716
- clearSessionNameFilter: () => clearsessionnamefilter3,
12717
13013
  clearTheGoal: () => clearthegoal2,
12718
13014
  clearTitle: () => cleartitle1,
12719
13015
  close: () => close,
@@ -12783,6 +13079,15 @@ var messages_exports = /* @__PURE__ */ __exportAll({
12783
13079
  editObjective: () => editobjective1,
12784
13080
  editObjectiveTitle: () => editobjectivetitle2,
12785
13081
  editPrompt: () => editprompt1,
13082
+ editedFilesAdded: () => editedfilesadded2,
13083
+ editedFilesBinary: () => editedfilesbinary2,
13084
+ editedFilesCapHint: () => editedfilescaphint3,
13085
+ editedFilesChip: () => editedfileschip2,
13086
+ editedFilesDeleted: () => editedfilesdeleted2,
13087
+ editedFilesGone: () => editedfilesgone2,
13088
+ editedFilesOversized: () => editedfilesoversized2,
13089
+ editedFilesTitle: () => editedfilestitle2,
13090
+ editedFilesTitleOne: () => editedfilestitleone3,
12786
13091
  enableFullAccess: () => enablefullaccess2,
12787
13092
  enableFullAccessQ: () => enablefullaccessq3,
12788
13093
  escHidesA: () => eschidesa2,
@@ -13038,6 +13343,7 @@ var messages_exports = /* @__PURE__ */ __exportAll({
13038
13343
  toolTitleToolCall: () => tooltitletoolcall3,
13039
13344
  toolTitleWrite: () => tooltitlewrite2,
13040
13345
  turnFailed: () => turnfailed1,
13346
+ turnStopped: () => turnstopped1,
13041
13347
  turnTokenUsage: () => turntokenusage2,
13042
13348
  turnUsage: () => turnusage1,
13043
13349
  uncachedInput: () => uncachedinput1,
@@ -14868,12 +15174,18 @@ function renderInline(text) {
14868
15174
  function emphasis(text) {
14869
15175
  return text.replace(/\*\*\*(.+?)\*\*\*/g, "<strong><em>$1</em></strong>").replace(/\*\*(.+?)\*\*/g, "<strong>$1</strong>").replace(/\*(.+?)\*/g, "<em>$1</em>").replace(/(?<![\w])_(.+?)_(?![\w])/g, "<em>$1</em>").replace(/~~(.+?)~~/g, "<del>$1</del>");
14870
15176
  }
14871
- /** [label](href) — only http(s) hrefs become anchors; everything else is text. */
15177
+ /**
15178
+ * [label](href) — http(s) hrefs become hardened external anchors; SCHEME-FREE
15179
+ * relative hrefs (assistant file links like [card](src/lib/…)) become same-
15180
+ * origin anchors; anything carrying a scheme (javascript:, data:, mailto:,
15181
+ * //evil.com protocol-relative, …) stays inert text (BC-12).
15182
+ */
14872
15183
  function links(text) {
14873
15184
  return text.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g, (whole, label, href) => {
14874
15185
  const unescaped = href.replaceAll("&amp;", "&").replaceAll("&lt;", "<").replaceAll("&gt;", ">").replaceAll("&quot;", "\"").replaceAll("&#39;", "'");
14875
- if (!/^https?:\/\//i.test(unescaped)) return whole;
14876
- return `<a href="${href}" rel="noopener noreferrer" target="_blank">${label}</a>`;
15186
+ if (/^https?:\/\//i.test(unescaped)) return `<a href="${href}" rel="noopener noreferrer" target="_blank">${label}</a>`;
15187
+ if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(unescaped) || unescaped.startsWith("//")) return whole;
15188
+ return `<a href="${href}">${label}</a>`;
14877
15189
  });
14878
15190
  }
14879
15191
  //#endregion
@@ -16299,7 +16611,7 @@ function TokenCounter($$renderer, $$props) {
16299
16611
  */
16300
16612
  let { text } = $$props;
16301
16613
  const count = derived(() => estimateTokens(text));
16302
- $$renderer.push(`<span data-svelte="TokenCounter" class="shrink-0 font-mono text-[11px] tabular-nums text-text-muted" data-testid="token-counter"${attr("title", t(tokencountertitle2))}>~${escape_html(count())} tokens</span>`);
16614
+ $$renderer.push(`<span data-svelte="TokenCounter" class="shrink-0 font-mono text-[11px] tabular-nums text-[#7c3aed]" data-testid="token-counter"${attr("title", t(tokencountertitle2))}>~${escape_html(count())} tokens</span>`);
16303
16615
  });
16304
16616
  }
16305
16617
  //#endregion
@@ -16336,10 +16648,10 @@ function ContextConsumption($$renderer, $$props) {
16336
16648
  $$renderer.push(`<div data-svelte="ContextConsumption" class="flex items-center gap-1"${attr("title", t(() => ctxwindowtitle2({
16337
16649
  used,
16338
16650
  limit
16339
- })))} data-testid="context-consumption"><div class="h-1 w-15 overflow-hidden rounded-sm bg-surface-border"><div${attr_class(`h-full rounded-sm transition-[width] duration-300 ${percent() < 60 ? "bg-emerald-500" : percent() < 85 ? "bg-amber-500" : "bg-red-500"}`)}${attr_style(`width: ${stringify(Math.min(percent(), 100))}%`)}></div></div> <span class="text-[11px] tabular-nums text-text-muted">${escape_html(percent())}%</span></div>`);
16651
+ })))} data-testid="context-consumption"><div class="h-1 w-15 overflow-hidden rounded-sm bg-surface-border"><div class="h-full rounded-sm transition-[width] duration-300 bg-[#7c3aed]"${attr_style(`width: ${stringify(Math.min(percent(), 100))}%`)}></div></div> <span class="text-[11px] tabular-nums text-[#7c3aed]">${escape_html(percent())}%</span></div>`);
16340
16652
  } else if (used !== void 0) {
16341
16653
  $$renderer.push("<!--[1-->");
16342
- $$renderer.push(`<span data-svelte="ContextConsumption" class="text-[11px] tabular-nums text-text-muted"${attr("title", t(ctxwindowunknown2))} data-testid="context-consumption">≈${escape_html(formatK(used))} ctx</span>`);
16654
+ $$renderer.push(`<span data-svelte="ContextConsumption" class="text-[11px] tabular-nums text-[#7c3aed]"${attr("title", t(ctxwindowunknown2))} data-testid="context-consumption">≈${escape_html(formatK(used))} ctx</span>`);
16343
16655
  } else $$renderer.push("<!--[-1-->");
16344
16656
  $$renderer.push(`<!--]-->`);
16345
16657
  });
@@ -16364,7 +16676,7 @@ function ModelSelector($$renderer, $$props) {
16364
16676
  const currentLabel = derived(() => {
16365
16677
  return "model —";
16366
16678
  });
16367
- $$renderer.push(`<div data-svelte="ModelSelector" class="relative"><button type="button" class="inline-flex items-center gap-1 rounded-md border border-slate-300 px-2 py-1 text-xs font-medium text-slate-600 hover:bg-slate-100 disabled:opacity-50"${attr("disabled", disabled, true)} aria-haspopup="listbox"${attr("aria-expanded", open)} data-testid="model-selector-button">${escape_html(currentLabel())} <span class="text-slate-400" aria-hidden="true">▾</span></button> `);
16679
+ $$renderer.push(`<div data-svelte="ModelSelector" class="relative"><button type="button" class="inline-flex items-center gap-1 rounded-md border border-[#7c3aed] px-2 py-1 text-xs font-medium text-[#7c3aed] hover:bg-slate-100 disabled:opacity-50"${attr("disabled", disabled, true)} aria-haspopup="listbox"${attr("aria-expanded", open)} data-testid="model-selector-button">${escape_html(currentLabel())} <span class="text-[#7c3aed]" aria-hidden="true"><svg width="12" height="12" viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M4 6l4 4 4-4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></span></button> `);
16368
16680
  $$renderer.push("<!--[-1-->");
16369
16681
  $$renderer.push(`<!--]--></div>`);
16370
16682
  });
@@ -16431,7 +16743,7 @@ function AccessModeChip($$renderer, $$props) {
16431
16743
  });
16432
16744
  if (permission !== null) {
16433
16745
  $$renderer.push("<!--[0-->");
16434
- $$renderer.push(`<div data-svelte="AccessModeChip" class="relative"><button type="button" class="inline-flex items-center gap-1 rounded-md border border-slate-300 px-2 py-1 text-xs font-medium text-slate-600 hover:bg-slate-100 disabled:opacity-50"${attr("disabled", disabled || false, true)} aria-haspopup="listbox"${attr("aria-expanded", open)}${attr("aria-label", t(() => accessmodecurrent2({ label: currentLabel() })))}${attr("title", currentDescription())} data-testid="access-mode-chip"><span class="text-slate-500" aria-hidden="true">`);
16746
+ $$renderer.push(`<div data-svelte="AccessModeChip" class="relative"><button type="button" class="inline-flex items-center gap-1 rounded-md border border-[#7c3aed] px-2 py-1 text-xs font-medium text-[#7c3aed] hover:bg-slate-100 disabled:opacity-50"${attr("disabled", disabled || false, true)} aria-haspopup="listbox"${attr("aria-expanded", open)}${attr("aria-label", t(() => accessmodecurrent2({ label: currentLabel() })))}${attr("title", currentDescription())} data-testid="access-mode-chip"><span class="text-[#7c3aed]" aria-hidden="true">`);
16435
16747
  if (permission.current === "read-only") {
16436
16748
  $$renderer.push("<!--[0-->");
16437
16749
  $$renderer.push(`<svg width="14" height="14" viewBox="0 0 16 16" fill="none"><path d="M8.20554 0.899994L14.7901 3.36857V7.01026C14.7901 12 11.0466 14.2103 8.20554 15.3C5.36446 14.2103 1.62012 12 1.62012 7.01026V3.36857L8.20554 0.899994Z" stroke="currentColor" stroke-width="1.31831" stroke-linejoin="round"></path><path d="M12.1654 5.7552L8.9447 9.41475C8.73044 9.65816 8.53628 9.8804 8.35774 10.0423C8.1713 10.2114 7.94235 10.3717 7.64016 10.4254C7.48207 10.4535 7.32 10.4552 7.16151 10.4294C6.85843 10.3801 6.62728 10.2223 6.43836 10.0559C6.25752 9.89653 6.06037 9.67732 5.84264 9.43705L4.72925 8.20897L5.63557 7.38707L6.74897 8.61594C6.98603 8.87755 7.12974 9.03533 7.24673 9.13839C7.31033 9.19443 7.34485 9.21476 7.35823 9.22122C7.38068 9.22484 7.40352 9.22515 7.42593 9.22122C7.40522 9.22502 7.42893 9.23294 7.53583 9.136C7.65132 9.03126 7.79316 8.87139 8.02643 8.60638L11.2479 4.94763L12.1654 5.7552Z" fill="currentColor"></path></svg>`);
@@ -16442,7 +16754,7 @@ function AccessModeChip($$renderer, $$props) {
16442
16754
  $$renderer.push("<!--[-1-->");
16443
16755
  $$renderer.push(`<svg width="14" height="14" viewBox="0 0 16 16" fill="none"><path d="M8.08887 0.251709C8.20479 0.23085 8.32486 0.241168 8.43652 0.282959L15.0215 2.75171C15.2787 2.84819 15.4492 3.09414 15.4492 3.3689V7.0105C15.4492 7.10986 15.4441 7.2081 15.4414 7.30542C15.0285 7.07175 14.5905 6.87695 14.1309 6.73022V3.82495L8.20508 1.60327L2.2793 3.82495V7.0105C2.27936 9.7171 3.4745 11.5379 5.02734 12.7947C5.01025 12.9942 5 13.1962 5 13.4001C5.00001 13.7617 5.02722 14.1169 5.08008 14.4636C2.91555 13.0393 0.961014 10.752 0.960938 7.0105V3.3689C0.960938 3.09417 1.13146 2.84821 1.38867 2.75171L7.97461 0.282959L8.08887 0.251709Z" fill="currentColor"></path><path d="M11.3525 5.64688V6.85688H5V5.64688H11.3525Z" fill="currentColor"></path><path d="M9.5824 8.29376V9.50376H5V8.29376H9.5824Z" fill="currentColor"></path><path d="M14.6647 15.6852H10.0338C10.3878 15.3751 10.7567 15.0517 11.0772 14.7706C11.2531 14.6164 11.4144 14.4746 11.5511 14.3547H14.6647V15.6852Z" fill="currentColor"></path><path d="M8.14852 14.1308L7.33925 15.4976C7.22458 15.6912 7.42245 15.9194 7.63037 15.8333L9.09785 15.2254L15.0399 10.0719L14.0905 8.97733L8.14852 14.1308Z" fill="currentColor"></path></svg>`);
16444
16756
  }
16445
- $$renderer.push(`<!--]--></span> ${escape_html(currentLabel())} <span class="text-slate-400" aria-hidden="true">▾</span></button> `);
16757
+ $$renderer.push(`<!--]--></span> ${escape_html(currentLabel())} <span class="text-[#7c3aed]" aria-hidden="true"><svg width="12" height="12" viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M4 6l4 4 4-4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></span></button> `);
16446
16758
  $$renderer.push("<!--[-1-->");
16447
16759
  $$renderer.push(`<!--]--></div> `);
16448
16760
  $$renderer.push("<!--[-1-->");
@@ -18300,12 +18612,26 @@ var MENU_GESTURES = [
18300
18612
  seed: "/workspace ",
18301
18613
  description: COMMAND_HELP.workspace.summary
18302
18614
  },
18615
+ {
18616
+ name: "terminal",
18617
+ display: "/dsi-terminal",
18618
+ seed: "/dsi-terminal ",
18619
+ description: COMMAND_HELP.terminal.summary
18620
+ },
18303
18621
  {
18304
18622
  name: "promptmanager",
18305
18623
  display: "/dsi-prompts",
18306
18624
  seed: "/dsi-prompts ",
18307
18625
  description: COMMAND_HELP.promptmanager.summary
18308
18626
  },
18627
+ {
18628
+ name: "skillshelf",
18629
+ display: "/dsi-skills",
18630
+ seed: "/dsi-skills ",
18631
+ get description() {
18632
+ return t(commandhelpskillshelfsummary3);
18633
+ }
18634
+ },
18309
18635
  {
18310
18636
  name: "dsisettings",
18311
18637
  display: "/dsi-settings",
@@ -18318,20 +18644,6 @@ var MENU_GESTURES = [
18318
18644
  seed: "/dsh-settings ",
18319
18645
  description: COMMAND_HELP.dshsettings.summary
18320
18646
  },
18321
- {
18322
- name: "terminal",
18323
- display: "/dsi-terminal",
18324
- seed: "/dsi-terminal ",
18325
- description: COMMAND_HELP.terminal.summary
18326
- },
18327
- {
18328
- name: "skillshelf",
18329
- display: "/dsi-skills",
18330
- seed: "/dsi-skills ",
18331
- get description() {
18332
- return t(commandhelpskillshelfsummary3);
18333
- }
18334
- },
18335
18647
  {
18336
18648
  name: "@mention",
18337
18649
  display: "@mention",
@@ -20455,7 +20767,16 @@ function AssistantTurn($$renderer, $$props) {
20455
20767
  * members through the existing components (reasoning section, markdown
20456
20768
  * body, tool chips); this component owns the grouping visual contract.
20457
20769
  */
20458
- let { time, start = void 0, usage = void 0, text, children, fork = null } = $$props;
20770
+ let { time, start = void 0, usage = void 0, text, children, fork = null, lifecycle = void 0 } = $$props;
20771
+ /** Operator-stopped turn (ADR D2): chip + duration-prefix suppression. */
20772
+ const stoppedByUser = derived(() => lifecycle?.reasonKind === "aborted" && lifecycle?.abortKind === "user");
20773
+ /** Completed turns read elapsed from the WIRE pair (ADR D3); the
20774
+ * entry-time reconstruction stays only as fallback. */
20775
+ const ranPrefix = derived(() => {
20776
+ if (stoppedByUser()) return void 0;
20777
+ if (lifecycle?.reasonKind === "completed" && lifecycle.endMs !== void 0 && lifecycle.endMs >= lifecycle.startMs) return `Ran for ${formatRunDuration(lifecycle.endMs - lifecycle.startMs)}`;
20778
+ return start !== void 0 && time !== void 0 ? `Ran for ${formatRunDuration(time - start)}` : void 0;
20779
+ });
20459
20780
  /** Raw ⇄ rendered flip state — owned here, wired to ToolsMessage. */
20460
20781
  let showRaw = false;
20461
20782
  /** Bubble element ref — capture target for the canvas copy button. */
@@ -20508,11 +20829,16 @@ function AssistantTurn($$renderer, $$props) {
20508
20829
  RelativeTime($$renderer, {
20509
20830
  time,
20510
20831
  role: "assistant",
20511
- prefix: start !== void 0 ? `Ran for ${formatRunDuration(time - start)}` : void 0,
20832
+ prefix: ranPrefix(),
20512
20833
  class: "absolute bottom-0.5 right-3 text-[10px] leading-none text-text-muted/60 group-hover/bubble:text-[#7c3aed]"
20513
20834
  });
20514
20835
  } else $$renderer.push("<!--[-1-->");
20515
20836
  $$renderer.push(`<!--]--> `);
20837
+ if (stoppedByUser()) {
20838
+ $$renderer.push("<!--[0-->");
20839
+ $$renderer.push(`<span class="absolute bottom-0.5 left-1/2 -translate-x-1/2 rounded-full border border-amber-500/30 bg-amber-500/10 px-1.5 py-0.5 text-[10px] leading-none text-amber-600" data-testid="turn-stopped-chip"${attr("title", t(turnstopped1))}>${escape_html(t(turnstopped1))}</span>`);
20840
+ } else $$renderer.push("<!--[-1-->");
20841
+ $$renderer.push(`<!--]--> `);
20516
20842
  if (usage !== void 0) {
20517
20843
  $$renderer.push("<!--[0-->");
20518
20844
  TurnUsagePanel($$renderer, {
@@ -22089,6 +22415,32 @@ function TodoCard($$renderer, $$props) {
22089
22415
  });
22090
22416
  }
22091
22417
  //#endregion
22418
+ //#region src/lib/services/conversation/session-context.svelte.ts
22419
+ var SESSION_KEY = Symbol("dsi-conversation-session");
22420
+ function setConversationSession(sessionId) {
22421
+ setContext(SESSION_KEY, sessionId);
22422
+ }
22423
+ /** The owning sessionId, or null when no provider is present (standalone
22424
+ * mode, tests, non-panel contexts). */
22425
+ function getConversationSession() {
22426
+ return getContext(SESSION_KEY) ?? null;
22427
+ }
22428
+ //#endregion
22429
+ //#region src/lib/components/message/cards/FilesEditedCard.svelte
22430
+ function FilesEditedCard($$renderer, $$props) {
22431
+ $$renderer.component(($$renderer) => {
22432
+ /** Wire: the file's real path — drives language pickup. */
22433
+ let open = false;
22434
+ getConversationSession();
22435
+ $$renderer.push(`<div data-svelte="FilesEditedCard" class="self-start text-xs" data-testid="files-edited-section"${attr("data-open", open)}><button type="button"${attr("aria-expanded", open)} data-testid="files-edited-toggle"${attr_class(`chip-button inline-flex items-center gap-1 px-1.5 py-0.5 rounded-md text-xs font-mono font-medium mx-0.5 my-0.5 align-middle shrink-0 transition-colors select-none cursor-pointer bg-surface-alt text-text-secondary border border-surface-border hover:bg-surface-hover hover:text-text-primary`)}>`);
22436
+ $$renderer.push("<!--[-1-->");
22437
+ Chevron_right($$renderer, { size: 10 });
22438
+ $$renderer.push(`<!--]--> <span class="text-[10px]">${escape_html(t(() => editedfileschip2()))}</span></button> `);
22439
+ $$renderer.push("<!--[-1-->");
22440
+ $$renderer.push(`<!--]--></div>`);
22441
+ });
22442
+ }
22443
+ //#endregion
22092
22444
  //#region src/lib/components/common/viewers/ReasoningContentViewer.svelte
22093
22445
  function ReasoningContentViewer($$renderer, $$props) {
22094
22446
  $$renderer.component(($$renderer) => {
@@ -22276,6 +22628,13 @@ function InlineToolCalls($$renderer, $$props) {
22276
22628
  function chipToolTitle(name) {
22277
22629
  return t(TOOL_TITLE_MESSAGES[classifyTool(name)]);
22278
22630
  }
22631
+ /** Peek-list membership (2026-09-25 bug fix): every chip EXCEPT the
22632
+ * self-rendering kinds — a files-edited entry IS its own card
22633
+ * (FilesEditedCard), so counting it as a chip made the peek button
22634
+ * claim a tool call the row did not show. */
22635
+ function isPeekMember(entry) {
22636
+ return entry.kind !== "assistant-message" && entry.kind !== "files-edited";
22637
+ }
22279
22638
  /** Peek-list row label (ToolPeekButton port): match the chip skins. */
22280
22639
  function peekLabel(entry) {
22281
22640
  if (entry.kind === "tool-call") return chipToolTitle(entry.toolName);
@@ -22305,9 +22664,9 @@ function InlineToolCalls($$renderer, $$props) {
22305
22664
  let $$inner_renderer;
22306
22665
  function $$render_inner($$renderer) {
22307
22666
  $$renderer.push(`<div data-svelte="InlineToolCalls" class="flex flex-wrap items-center">`);
22308
- if (entries.some((e) => e.kind !== "assistant-message")) {
22667
+ if (entries.some(isPeekMember)) {
22309
22668
  $$renderer.push("<!--[0-->");
22310
- const chipCount = entries.filter((e) => e.kind !== "assistant-message").length;
22669
+ const chipCount = entries.filter(isPeekMember).length;
22311
22670
  ToolPeekButton($$renderer, {
22312
22671
  count: chipCount,
22313
22672
  active: peekOpen});
@@ -22359,8 +22718,14 @@ function InlineToolCalls($$renderer, $$props) {
22359
22718
  open: openChipId === entry.id,
22360
22719
  ontoggle: () => ontoggleChip(entry.id)
22361
22720
  });
22362
- } else if (entry.kind === "unknown-event") {
22721
+ } else if (entry.kind === "files-edited") {
22363
22722
  $$renderer.push("<!--[5-->");
22723
+ FilesEditedCard($$renderer, {
22724
+ turn: entry.turn,
22725
+ seq: entry.seq
22726
+ });
22727
+ } else if (entry.kind === "unknown-event") {
22728
+ $$renderer.push("<!--[6-->");
22364
22729
  ToolCallChip($$renderer, {
22365
22730
  kind: "unknown",
22366
22731
  toolName: entry.eventType,
@@ -22368,7 +22733,7 @@ function InlineToolCalls($$renderer, $$props) {
22368
22733
  ontoggle: () => ontoggleChip(entry.id)
22369
22734
  });
22370
22735
  } else if (entry.kind === "user-message") {
22371
- $$renderer.push("<!--[6-->");
22736
+ $$renderer.push("<!--[7-->");
22372
22737
  ContextInjection($$renderer, {
22373
22738
  producer: entry.meta,
22374
22739
  text: entry.text,
@@ -22378,7 +22743,7 @@ function InlineToolCalls($$renderer, $$props) {
22378
22743
  onopen: subagentOpenOf(entry.meta, entry.metaSource)
22379
22744
  });
22380
22745
  } else if (entry.kind === "turn-error") {
22381
- $$renderer.push("<!--[7-->");
22746
+ $$renderer.push("<!--[8-->");
22382
22747
  TurnErrorChip($$renderer, {
22383
22748
  message: entry.message,
22384
22749
  code: entry.code,
@@ -22395,7 +22760,7 @@ function InlineToolCalls($$renderer, $$props) {
22395
22760
  const each_array_1 = ensure_array_like(entries);
22396
22761
  for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
22397
22762
  let entry = each_array_1[$$index_1];
22398
- if (entry.kind !== "assistant-message") {
22763
+ if (isPeekMember(entry)) {
22399
22764
  $$renderer.push("<!--[0-->");
22400
22765
  const preview = peekPreview(entry);
22401
22766
  $$renderer.push(`<li class="px-3 py-1 text-xs flex items-center gap-2"><span${attr_class(`w-1.5 h-1.5 rounded-full shrink-0 ${stringify(peekDotClass(entry))}`)}></span> <span class="font-mono font-medium text-text-primary shrink-0">${escape_html(peekLabel(entry))}</span> `);
@@ -22734,6 +23099,7 @@ function groupTurns(entries) {
22734
23099
  });
22735
23100
  continue;
22736
23101
  }
23102
+ if (entry.kind === "turn-lifecycle") continue;
22737
23103
  const side = entry;
22738
23104
  const last = groups[groups.length - 1];
22739
23105
  if (last?.kind === "assistant-turn") last.entries.push(side);
@@ -22893,6 +23259,58 @@ function turnProcess(entries, opts) {
22893
23259
  };
22894
23260
  }
22895
23261
  //#endregion
23262
+ //#region src/lib/services/conversation/turn-projection.ts
23263
+ function isLifecycleEntry(entry) {
23264
+ return entry.kind === "turn-lifecycle";
23265
+ }
23266
+ /**
23267
+ * Fold all turn-lifecycle markers into per-turn records keyed by the
23268
+ * harness's turn number. Pure; last-write-wins per phase (ledger replays
23269
+ * may re-serve a bracket).
23270
+ */
23271
+ function projectTurnLifecycle(entries) {
23272
+ const map = /* @__PURE__ */ new Map();
23273
+ for (const entry of entries) {
23274
+ if (!isLifecycleEntry(entry)) continue;
23275
+ const prev = map.get(entry.turn);
23276
+ if (entry.phase === "start") {
23277
+ const keepEnd = prev?.endSeq !== void 0 && prev.endSeq > entry.seq;
23278
+ map.set(entry.turn, {
23279
+ startSeq: entry.seq,
23280
+ startMs: entry.time,
23281
+ ...keepEnd ? {
23282
+ endSeq: prev?.endSeq,
23283
+ endMs: prev?.endMs,
23284
+ reasonKind: prev?.reasonKind,
23285
+ abortKind: prev?.abortKind
23286
+ } : {}
23287
+ });
23288
+ } else {
23289
+ const base = prev ?? {
23290
+ startSeq: Number.MAX_SAFE_INTEGER,
23291
+ startMs: entry.time
23292
+ };
23293
+ map.set(entry.turn, {
23294
+ ...base,
23295
+ endSeq: entry.seq,
23296
+ endMs: entry.time,
23297
+ reasonKind: entry.reasonKind,
23298
+ ...entry.abortKind !== void 0 ? { abortKind: entry.abortKind } : {}
23299
+ });
23300
+ }
23301
+ }
23302
+ return map;
23303
+ }
23304
+ /**
23305
+ * Join a turn group to its lifecycle record: the record must BRACKET the
23306
+ * group — start seq strictly before the group's first entry seq, end seq
23307
+ * strictly after the group's last entry seq. Unpaired (in-flight or
23308
+ * start-less) records never join, so an open turn renders nothing.
23309
+ */
23310
+ function lifecycleForGroup(map, firstSeq, lastSeq) {
23311
+ for (const record of map.values()) if (record.startSeq < firstSeq && record.endSeq !== void 0 && record.endSeq > lastSeq) return record;
23312
+ }
23313
+ //#endregion
22896
23314
  //#region src/lib/components/conversation/ConversationScrollArea.svelte
22897
23315
  function ConversationScrollArea($$renderer, $$props) {
22898
23316
  $$renderer.component(($$renderer) => {
@@ -23052,6 +23470,7 @@ function ConversationScrollArea($$renderer, $$props) {
23052
23470
  start: turnStartTime(group.entries),
23053
23471
  usage: turnUsage(group.entries),
23054
23472
  text: turnText(group.entries),
23473
+ lifecycle: lifecycleForGroup(projectTurnLifecycle(entries), group.entries[0].seq, group.entries[group.entries.length - 1].seq),
23055
23474
  fork: subagent ? null : {
23056
23475
  sessionId,
23057
23476
  atSeq: turnAnchorSeq(group.entries),
@@ -25324,6 +25743,7 @@ function ConversationPanel($$renderer, $$props) {
25324
25743
  */
25325
25744
  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, a2aRows = [], a2aTitles = {}, onNeedCold = void 0, onClose = void 0, focusComposer = false, oncomposerfocus = void 0, focused = false, onOpenExplorer = void 0 } = $$props;
25326
25745
  setPanelMode(true);
25746
+ setConversationSession(sessionId);
25327
25747
  const store = createConversationStore(sessionId);
25328
25748
  const orchestrator = createPollingOrchestrator(store);
25329
25749
  if (entries !== void 0) store.replaceAll(entries);
@@ -25859,8 +26279,13 @@ var initialTerminalPanelState = {
25859
26279
  //#region src/lib/components/terminal/TerminalPanel.svelte
25860
26280
  function TerminalPanel($$renderer, $$props) {
25861
26281
  $$renderer.component(($$renderer) => {
26282
+ let { onShellExit, assigned = null, onAssigned } = $$props;
25862
26283
  let panelState = { ...initialTerminalPanelState };
25863
26284
  Promise.resolve();
26285
+ /** Focus the live xterm surface (the desk's ⌥+N tab shortcut,
26286
+ * 2026-09-25): the real terminal when attached, the fallback
26287
+ * input's textarea otherwise. */
26288
+ function focusTerminal() {}
25864
26289
  function settleText(reason) {
25865
26290
  if (reason === "stdin_read") return t(terminalsettlestdinread3);
25866
26291
  if (reason === "inferred_idle") return t(terminalsettleinferredidle3);
@@ -25868,7 +26293,7 @@ function TerminalPanel($$renderer, $$props) {
25868
26293
  if (reason === "session_exit") return t(terminalsettlesessionexit3);
25869
26294
  return "";
25870
26295
  }
25871
- $$renderer.push(`<div data-svelte="TerminalPanel" class="terminal-panel flex h-full min-h-80 flex-col rounded-lg bg-slate-900 p-1" data-testid="terminal-panel"><div class="mb-1 flex items-center gap-2 px-1 text-[10px] text-slate-400"><span class="font-medium text-slate-300">${escape_html(t(terminalpaneltitle2))}</span> `);
26296
+ $$renderer.push(`<div data-svelte="TerminalPanel" class="terminal-panel flex h-full min-h-80 flex-col rounded-lg bg-slate-900 p-1" data-testid="terminal-panel"><div class="mb-1 flex items-center gap-2 px-1 text-[10px] text-slate-400">`);
25872
26297
  if (panelState.lastSettle) {
25873
26298
  $$renderer.push("<!--[0-->");
25874
26299
  $$renderer.push(`<span data-testid="terminal-settle-badge" class="rounded bg-slate-700 px-1.5 py-0.5">${escape_html(settleText(panelState.lastSettle))}</span>`);
@@ -25886,15 +26311,23 @@ function TerminalPanel($$renderer, $$props) {
25886
26311
  $$renderer.push(`<div class="px-2 pb-1 text-[10px] text-slate-500" data-testid="terminal-closed">${escape_html(t(terminalclosed1))}${escape_html(panelState.quiescent === false ? " (lingering)" : "")}</div>`);
25887
26312
  } else $$renderer.push("<!--[-1-->");
25888
26313
  $$renderer.push(`<!--]--></div>`);
26314
+ bind_props($$props, { focusTerminal });
25889
26315
  });
25890
26316
  }
25891
26317
  //#endregion
25892
26318
  //#region src/lib/components/terminal/TerminalTabHeader.svelte
25893
26319
  function TerminalTabHeader($$renderer, $$props) {
25894
- let { children } = $$props;
26320
+ let { children, actions } = $$props;
25895
26321
  $$renderer.push(`<div data-svelte="TerminalTabHeader" role="tablist" class="flex items-center gap-1 border-b border-slate-800 px-1 py-0.5" data-testid="terminal-tab-header">`);
25896
26322
  children($$renderer);
25897
- $$renderer.push(`<!----></div>`);
26323
+ $$renderer.push(`<!----> `);
26324
+ if (actions) {
26325
+ $$renderer.push("<!--[0-->");
26326
+ $$renderer.push(`<div class="ml-auto flex items-center" data-testid="terminal-tab-header-actions">`);
26327
+ actions($$renderer);
26328
+ $$renderer.push(`<!----></div>`);
26329
+ } else $$renderer.push("<!--[-1-->");
26330
+ $$renderer.push(`<!--]--></div>`);
25898
26331
  }
25899
26332
  //#endregion
25900
26333
  //#region src/lib/components/terminal/TerminalTabButton.svelte
@@ -25939,6 +26372,7 @@ function TerminalDesk($$renderer, $$props) {
25939
26372
  /** Null = self-open (the panel runs its own ladder and reports back
25940
26373
  * via onAssigned); set = the desk holds this session's lease. */
25941
26374
  let { onShellExit, restored = null, onMirror } = $$props;
26375
+ const captureEl = derived(() => null);
25942
26376
  let nextKey = 1;
25943
26377
  const mkKey = () => nextKey++;
25944
26378
  const defaultTab = () => ({
@@ -25996,25 +26430,74 @@ function TerminalDesk($$renderer, $$props) {
25996
26430
  } else tabs[selectedTab].rows.push(row);
25997
26431
  })();
25998
26432
  }
26433
+ /** Tab close (D5): ladder-close every row's session, remove the tab,
26434
+ * move selection to the right neighbor (or left if last); the last
26435
+ * tab's close removes the desk slot via onShellExit (the floor's
26436
+ * removePanel path — the same mutation as the column close). */
26437
+ function closeTab(tabIndex) {
26438
+ const tab = tabs[tabIndex];
26439
+ for (const row of tab.rows) if (row.assigned) fetch("/api/terminal/" + row.assigned.sessionId + "/send", {
26440
+ method: "POST",
26441
+ headers: { "content-type": "application/json" },
26442
+ body: JSON.stringify({
26443
+ token: row.assigned.token,
26444
+ action: "close"
26445
+ }),
26446
+ keepalive: true
26447
+ }).catch(() => void 0);
26448
+ tabs.splice(tabIndex, 1);
26449
+ if (tabs.length === 0) {
26450
+ onShellExit?.();
26451
+ return;
26452
+ }
26453
+ selectedTab = Math.min(tabIndex, tabs.length - 1);
26454
+ }
26455
+ /** Shell exit in a row (D5): the session is already dead — shrink the
26456
+ * tab; an empty tab closes (selection rules as closeTab); the desk's
26457
+ * last shell dying removes the slot (if only one terminal overall, it
26458
+ * means closing the PanelColumn). */
26459
+ function removeRow(tabIndex, row) {
26460
+ const tab = tabs[tabIndex];
26461
+ const i = tab.rows.indexOf(row);
26462
+ if (i >= 0) tab.rows.splice(i, 1);
26463
+ if (tab.rows.length === 0) closeTab(tabIndex);
26464
+ }
26465
+ function recordAssigned(row, sessionId, token) {
26466
+ row.assigned = {
26467
+ sessionId,
26468
+ token
26469
+ };
26470
+ }
25999
26471
  $$renderer.push(`<div data-svelte="TerminalDesk" class="flex h-full min-h-0 flex-col rounded-lg bg-slate-900" data-testid="terminal-desk">`);
26000
26472
  if (restoring) {
26001
26473
  $$renderer.push("<!--[0-->");
26002
26474
  $$renderer.push(`<div class="p-3 text-xs text-slate-500" data-testid="terminal-desk-restoring">...</div>`);
26003
26475
  } else {
26004
26476
  $$renderer.push("<!--[-1-->");
26005
- TerminalTabHeader($$renderer, {
26006
- children: ($$renderer) => {
26007
- $$renderer.push(`<!--[-->`);
26008
- const each_array = ensure_array_like(tabs);
26009
- for (let i = 0, $$length = each_array.length; i < $$length; i++) {
26010
- each_array[i];
26011
- TerminalTabButton($$renderer, {
26012
- index: i,
26013
- label: "T" + (i + 1),
26014
- selected: i === selectedTab});
26015
- }
26016
- $$renderer.push(`<!--]-->`);
26017
- }});
26477
+ {
26478
+ function actions($$renderer) {
26479
+ CanvasCopyButton($$renderer, {
26480
+ container: captureEl(),
26481
+ mode: "visible",
26482
+ title: t(copypanelasimage3),
26483
+ size: 12
26484
+ });
26485
+ }
26486
+ TerminalTabHeader($$renderer, {
26487
+ actions,
26488
+ children: ($$renderer) => {
26489
+ $$renderer.push(`<!--[-->`);
26490
+ const each_array = ensure_array_like(tabs);
26491
+ for (let i = 0, $$length = each_array.length; i < $$length; i++) {
26492
+ each_array[i];
26493
+ TerminalTabButton($$renderer, {
26494
+ index: i,
26495
+ label: "T" + (i + 1),
26496
+ selected: i === selectedTab});
26497
+ }
26498
+ $$renderer.push(`<!--]-->`);
26499
+ }});
26500
+ }
26018
26501
  $$renderer.push(`<!----> <!--[-->`);
26019
26502
  const each_array_1 = ensure_array_like(tabs);
26020
26503
  for (let i = 0, $$length = each_array_1.length; i < $$length; i++) {
@@ -26032,7 +26515,10 @@ function TerminalDesk($$renderer, $$props) {
26032
26515
  let row = each_array_2[$$index_1];
26033
26516
  $$renderer.push(`<div class="min-h-0" style="flex: 1 1 0; min-height: 10rem;">`);
26034
26517
  TerminalPanel($$renderer, {
26035
- assigned: row.assigned});
26518
+ assigned: row.assigned,
26519
+ onAssigned: (sessionId, token) => recordAssigned(row, sessionId, token),
26520
+ onShellExit: () => removeRow(i, row)
26521
+ });
26036
26522
  $$renderer.push(`<!----></div>`);
26037
26523
  }
26038
26524
  $$renderer.push(`<!--]-->`);
@@ -29245,4 +29731,4 @@ function _page($$renderer, $$props) {
29245
29731
  }
29246
29732
 
29247
29733
  export { _page as default };
29248
- //# sourceMappingURL=_page.svelte.js-D-nbMlOD.js.map
29734
+ //# sourceMappingURL=_page.svelte.js-5qYAGNkZ.js.map