@deepseek-insight/dsi 0.5.32 → 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/{n6wHvlqG.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-DFJpTf_o.js → internal.js-CiAyaHU8.js} +2 -2
  89. package/build/server/chunks/chunks/{state.js-CpGQrOQj.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-D1ggHK75.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-C-gx9imA.js → _page.svelte.js-5qYAGNkZ.js} +664 -178
  127. package/build/server/chunks/{handler-C-ZkJfQi.js → handler-C29GDWFA.js} +3 -3
  128. package/build/server/chunks/{index.js-BHhoIUPw.js → index.js-CzsX25WI.js} +2 -2
  129. package/build/server/chunks/{manifest.js-DkA6N6z6.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-CTiax7zN.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.DUjQJ-eX.css +0 -1
  136. package/build/client/_app/immutable/chunks/CM2YlsBZ.js +0 -1
  137. package/build/client/_app/immutable/chunks/CWCyOfZL.js +0 -1
  138. package/build/client/_app/immutable/chunks/DBe02xXt.js +0 -1
  139. package/build/client/_app/immutable/chunks/DFZg0vdm.js +0 -8
  140. package/build/client/_app/immutable/chunks/DKLs56Hm.js +0 -1
  141. package/build/client/_app/immutable/chunks/DU8_fdC7.js +0 -2
  142. package/build/client/_app/immutable/chunks/E-1cXrsM.js +0 -1
  143. package/build/client/_app/immutable/chunks/N_z8g1dA.js +0 -1
  144. package/build/client/_app/immutable/chunks/kgRREf9p.js +0 -1
  145. package/build/client/_app/immutable/entry/app.DbINeXv9.js +0 -2
  146. package/build/client/_app/immutable/entry/start.CfKDOfK5.js +0 -1
  147. package/build/client/_app/immutable/nodes/0.ze9O6tWo.js +0 -1
  148. package/build/client/_app/immutable/nodes/1.CgN4qkEI.js +0 -1
  149. package/build/client/_app/immutable/nodes/2.D-rt0knM.js +0 -174
  150. package/build/server/chunks/nodes/1.js-7HAwHjCf.js +0 -9
@@ -1,13 +1,13 @@
1
- import { c as onDestroy, d as __exportAll } from '../../chunks/internal.js-DFJpTf_o.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-CpGQrOQj.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,16 +15174,22 @@ 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
14880
- //#region src/lib/components/chat/StripTip.svelte
15192
+ //#region src/lib/components/chat/suggest-strip/StripTip.svelte
14881
15193
  function StripTip($$renderer, $$props) {
14882
15194
  $$renderer.component(($$renderer) => {
14883
15195
  /**
@@ -14900,7 +15212,7 @@ function StripTip($$renderer, $$props) {
14900
15212
  });
14901
15213
  }
14902
15214
  //#endregion
14903
- //#region src/lib/components/chat/StripChip.svelte
15215
+ //#region src/lib/components/chat/suggest-strip/StripChip.svelte
14904
15216
  function StripChip($$renderer, $$props) {
14905
15217
  $$renderer.component(($$renderer) => {
14906
15218
  /**
@@ -14931,13 +15243,13 @@ function StripChip($$renderer, $$props) {
14931
15243
  let editLabel = row.label ?? "";
14932
15244
  let editUses = String(row.use_count);
14933
15245
  let editText = row.text;
14934
- $$renderer.push(`<div data-svelte="StripChip"${attr_class("strip-chip svelte-1ylllv7", void 0, { "active": active })}><button type="button" class="strip-pick svelte-1ylllv7" role="option"${attr("aria-selected", active)}${attr("title", row.text)}><span class="strip-label svelte-1ylllv7" role="presentation"><!--[-->`);
15246
+ $$renderer.push(`<div data-svelte="StripChip"${attr_class("strip-chip svelte-exwam9", void 0, { "active": active })}><button type="button" class="strip-pick svelte-exwam9" role="option"${attr("aria-selected", active)}${attr("title", row.text)}><span class="strip-label svelte-exwam9" role="presentation"><!--[-->`);
14935
15247
  const each_array = ensure_array_like(segments());
14936
15248
  for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
14937
15249
  let seg = each_array[$$index];
14938
15250
  if (seg.hit) {
14939
15251
  $$renderer.push("<!--[0-->");
14940
- $$renderer.push(`<span class="hl svelte-1ylllv7">${escape_html(seg.text)}</span>`);
15252
+ $$renderer.push(`<span class="hl svelte-exwam9">${escape_html(seg.text)}</span>`);
14941
15253
  } else {
14942
15254
  $$renderer.push("<!--[-1-->");
14943
15255
  $$renderer.push(`${escape_html(seg.text)}`);
@@ -14947,17 +15259,17 @@ function StripChip($$renderer, $$props) {
14947
15259
  $$renderer.push(`<!--]--></span> `);
14948
15260
  if (row.text.includes("\n")) {
14949
15261
  $$renderer.push("<!--[0-->");
14950
- $$renderer.push(`<span class="strip-ml svelte-1ylllv7">⏎</span>`);
15262
+ $$renderer.push(`<span class="strip-ml svelte-exwam9">⏎</span>`);
14951
15263
  } else $$renderer.push("<!--[-1-->");
14952
- $$renderer.push(`<!--]--> <span class="strip-count svelte-1ylllv7">×${escape_html(row.use_count)}</span></button> `);
15264
+ $$renderer.push(`<!--]--> <span class="strip-count svelte-exwam9">×${escape_html(row.use_count)}</span></button> `);
14953
15265
  if (mode === "run" && onstep !== void 0) {
14954
15266
  $$renderer.push("<!--[0-->");
14955
- $$renderer.push(`<div class="strip-step svelte-1ylllv7"><button type="button" class="strip-step-btn svelte-1ylllv7"${attr("aria-label", t(stepthismacro2))}${attr("title", t(stepheldtitle2))}>⏯</button></div>`);
15267
+ $$renderer.push(`<div class="strip-step svelte-exwam9"><button type="button" class="strip-step-btn svelte-exwam9"${attr("aria-label", t(stepthismacro2))}${attr("title", t(stepheldtitle2))}>⏯</button></div>`);
14956
15268
  } else $$renderer.push("<!--[-1-->");
14957
15269
  $$renderer.push(`<!--]--> `);
14958
15270
  if (hasMenu()) {
14959
15271
  $$renderer.push("<!--[0-->");
14960
- $$renderer.push(`<div class="strip-menu svelte-1ylllv7"><button type="button" class="strip-menu-btn svelte-1ylllv7"${attr("aria-label", t(promptoptions1))}>⋯</button></div>`);
15272
+ $$renderer.push(`<div class="strip-menu svelte-exwam9"><button type="button" class="strip-menu-btn svelte-exwam9"${attr("aria-label", t(promptoptions1))}>⋯</button></div>`);
14961
15273
  } else $$renderer.push("<!--[-1-->");
14962
15274
  $$renderer.push(`<!--]--> `);
14963
15275
  StripTip($$renderer, {
@@ -14968,16 +15280,16 @@ function StripChip($$renderer, $$props) {
14968
15280
  $$renderer.push(`<!----> `);
14969
15281
  if (menuOpen && onrename !== void 0 && ondelete !== void 0) {
14970
15282
  $$renderer.push("<!--[0-->");
14971
- $$renderer.push(`<div class="strip-menu-pop svelte-1ylllv7" role="menu" tabindex="-1"${attr_style("")}><div class="strip-menu-form svelte-1ylllv7"><label class="strip-menu-field svelte-1ylllv7"><span>${escape_html(t(uses))}</span> <input type="number" class="strip-menu-input strip-menu-uses svelte-1ylllv7"${attr("value", editUses)} min="1"${attr("aria-label", t(uses))}/></label> <label class="strip-menu-field svelte-1ylllv7"><span>${escape_html(t(label))}</span> <input type="text" class="strip-menu-input svelte-1ylllv7"${attr("value", editLabel)}${attr("placeholder", t(label))} maxlength="60"${attr("aria-label", t(promptlabelaria2))}/></label> <label class="strip-menu-field svelte-1ylllv7"><span>${escape_html(t(text))}</span> <textarea class="strip-menu-text svelte-1ylllv7"${attr("aria-label", t(prompttextaria2))}>`);
15283
+ $$renderer.push(`<div class="strip-menu-pop svelte-exwam9" role="menu" tabindex="-1"${attr_style("")}><div class="strip-menu-form svelte-exwam9"><label class="strip-menu-field svelte-exwam9"><span>${escape_html(t(uses))}</span> <input type="number" class="strip-menu-input strip-menu-uses svelte-exwam9"${attr("value", editUses)} min="1"${attr("aria-label", t(uses))}/></label> <label class="strip-menu-field svelte-exwam9"><span>${escape_html(t(label))}</span> <input type="text" class="strip-menu-input svelte-exwam9"${attr("value", editLabel)}${attr("placeholder", t(label))} maxlength="60"${attr("aria-label", t(promptlabelaria2))}/></label> <label class="strip-menu-field svelte-exwam9"><span>${escape_html(t(text))}</span> <textarea class="strip-menu-text svelte-exwam9"${attr("aria-label", t(prompttextaria2))}>`);
14972
15284
  const $$body = escape_html(editText);
14973
15285
  if ($$body) $$renderer.push(`${$$body}`);
14974
- $$renderer.push(`</textarea></label></div> <div class="strip-menu-actions svelte-1ylllv7"><button type="button" class="strip-menu-save svelte-1ylllv7">${escape_html(t(save))}</button> <button type="button" class="strip-menu-delete svelte-1ylllv7">${escape_html(t(_delete))}</button></div></div>`);
15286
+ $$renderer.push(`</textarea></label></div> <div class="strip-menu-actions svelte-exwam9"><button type="button" class="strip-menu-save svelte-exwam9">${escape_html(t(save))}</button> <button type="button" class="strip-menu-delete svelte-exwam9">${escape_html(t(_delete))}</button></div></div>`);
14975
15287
  } else $$renderer.push("<!--[-1-->");
14976
15288
  $$renderer.push(`<!--]--></div>`);
14977
15289
  });
14978
15290
  }
14979
15291
  //#endregion
14980
- //#region src/lib/components/chat/SuggestLine.svelte
15292
+ //#region src/lib/components/chat/suggest-strip/SuggestLine.svelte
14981
15293
  function SuggestLine($$renderer, $$props) {
14982
15294
  $$renderer.component(($$renderer) => {
14983
15295
  /**
@@ -14989,13 +15301,13 @@ function SuggestLine($$renderer, $$props) {
14989
15301
  let { onmanage } = $$props;
14990
15302
  if (onmanage) {
14991
15303
  $$renderer.push("<!--[0-->");
14992
- $$renderer.push(`<button data-svelte="SuggestLine" type="button" class="strip-manage svelte-rgc8xj">${escape_html(t(manageprompts1))}</button>`);
15304
+ $$renderer.push(`<button data-svelte="SuggestLine" type="button" class="strip-manage svelte-pzs55x">${escape_html(t(manageprompts1))}</button>`);
14993
15305
  } else $$renderer.push("<!--[-1-->");
14994
15306
  $$renderer.push(`<!--]-->`);
14995
15307
  });
14996
15308
  }
14997
15309
  //#endregion
14998
- //#region src/lib/components/chat/StripTagChips.svelte
15310
+ //#region src/lib/components/chat/suggest-strip/StripTagChips.svelte
14999
15311
  function StripTagChips($$renderer, $$props) {
15000
15312
  $$renderer.component(($$renderer) => {
15001
15313
  /**
@@ -15008,11 +15320,11 @@ function StripTagChips($$renderer, $$props) {
15008
15320
  let { recTags, checked} = $$props;
15009
15321
  if (recTags.length > 0) {
15010
15322
  $$renderer.push("<!--[0-->");
15011
- $$renderer.push(`<div data-svelte="StripTagChips" class="strip-tag-chips svelte-1dki9fw" role="group"${attr("aria-label", t(filterbytags2))}><!--[-->`);
15323
+ $$renderer.push(`<div data-svelte="StripTagChips" class="strip-tag-chips svelte-1kzzzu2" role="group"${attr("aria-label", t(filterbytags2))}><!--[-->`);
15012
15324
  const each_array = ensure_array_like(recTags);
15013
15325
  for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
15014
15326
  let word = each_array[$$index];
15015
- $$renderer.push(`<label${attr_class("strip-tag-chip svelte-1dki9fw", void 0, { "on": checked.includes(word) })}><input type="checkbox"${attr("checked", checked.includes(word), true)} class="svelte-1dki9fw"/> ${escape_html(word)}</label>`);
15327
+ $$renderer.push(`<label${attr_class("strip-tag-chip svelte-1kzzzu2", void 0, { "on": checked.includes(word) })}><input type="checkbox"${attr("checked", checked.includes(word), true)} class="svelte-1kzzzu2"/> ${escape_html(word)}</label>`);
15016
15328
  }
15017
15329
  $$renderer.push(`<!--]--></div>`);
15018
15330
  } else $$renderer.push("<!--[-1-->");
@@ -15027,7 +15339,7 @@ function saveTagFilter(base, words, profile) {
15027
15339
  } catch {}
15028
15340
  }
15029
15341
  //#endregion
15030
- //#region src/lib/components/chat/SuggestStrip.svelte
15342
+ //#region src/lib/components/chat/suggest-strip/SuggestStrip.svelte
15031
15343
  function SuggestStrip($$renderer, $$props) {
15032
15344
  $$renderer.component(($$renderer) => {
15033
15345
  /**
@@ -15086,7 +15398,7 @@ function SuggestStrip($$renderer, $$props) {
15086
15398
  });
15087
15399
  if (rows.length > 0) {
15088
15400
  $$renderer.push("<!--[0-->");
15089
- $$renderer.push(`<div data-svelte="SuggestStrip" class="suggest-strip svelte-17pdojr" role="listbox"${attr("aria-label", t(promptsuggestions1))} data-testid="suggest-strip"><!--[-->`);
15401
+ $$renderer.push(`<div data-svelte="SuggestStrip" class="suggest-strip svelte-172t8ad" role="listbox"${attr("aria-label", t(promptsuggestions1))} data-testid="suggest-strip"><!--[-->`);
15090
15402
  const each_array = ensure_array_like(visibleItems());
15091
15403
  for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
15092
15404
  let { row, index } = each_array[$$index];
@@ -16215,7 +16527,7 @@ function bytesToBase64(data) {
16215
16527
  return btoa(binary);
16216
16528
  }
16217
16529
  //#endregion
16218
- //#region src/lib/components/chat/ConversationError.svelte
16530
+ //#region src/lib/components/conversation/ConversationError.svelte
16219
16531
  function ConversationError($$renderer, $$props) {
16220
16532
  $$renderer.component(($$renderer) => {
16221
16533
  /**
@@ -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-->");
@@ -16705,7 +17017,7 @@ function AttachmentChips($$renderer, $$props) {
16705
17017
  });
16706
17018
  }
16707
17019
  //#endregion
16708
- //#region src/lib/components/chat/CommandHelpCard.svelte
17020
+ //#region src/lib/components/card/CommandHelpCard.svelte
16709
17021
  function CommandHelpCard($$renderer, $$props) {
16710
17022
  $$renderer.component(($$renderer) => {
16711
17023
  /**
@@ -16727,34 +17039,34 @@ function CommandHelpCard($$renderer, $$props) {
16727
17039
  * `?`/`!`, the help intent on a leading `/` or an `@token ?` tail).
16728
17040
  */
16729
17041
  let { view } = $$props;
16730
- $$renderer.push(`<div data-svelte="CommandHelpCard" class="command-help svelte-1tbbgiz" role="note"${attr("aria-label", t(commandhelp1))} data-testid="command-help"><div class="help-usage svelte-1tbbgiz"><code class="svelte-1tbbgiz">${escape_html(view.usage)}</code> <span class="help-tag svelte-1tbbgiz">${escape_html(view.tag)}</span></div> <p class="help-summary svelte-1tbbgiz">${escape_html(view.summary)}</p> `);
17042
+ $$renderer.push(`<div data-svelte="CommandHelpCard" class="command-help svelte-y0c21v" role="note"${attr("aria-label", t(commandhelp1))} data-testid="command-help"><div class="help-usage svelte-y0c21v"><code class="svelte-y0c21v">${escape_html(view.usage)}</code> <span class="help-tag svelte-y0c21v">${escape_html(view.tag)}</span></div> <p class="help-summary svelte-y0c21v">${escape_html(view.summary)}</p> `);
16731
17043
  if (view.params.length > 0) {
16732
17044
  $$renderer.push("<!--[0-->");
16733
- $$renderer.push(`<dl class="help-params svelte-1tbbgiz"><!--[-->`);
17045
+ $$renderer.push(`<dl class="help-params svelte-y0c21v"><!--[-->`);
16734
17046
  const each_array = ensure_array_like(view.params);
16735
17047
  for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
16736
17048
  let p = each_array[$$index];
16737
- $$renderer.push(`<dt class="svelte-1tbbgiz"><code class="svelte-1tbbgiz">${escape_html(p.name)}</code></dt> <dd class="svelte-1tbbgiz">${escape_html(p.description)}</dd>`);
17049
+ $$renderer.push(`<dt class="svelte-y0c21v"><code class="svelte-y0c21v">${escape_html(p.name)}</code></dt> <dd class="svelte-y0c21v">${escape_html(p.description)}</dd>`);
16738
17050
  }
16739
17051
  $$renderer.push(`<!--]--></dl>`);
16740
17052
  } else $$renderer.push("<!--[-1-->");
16741
17053
  $$renderer.push(`<!--]--> `);
16742
17054
  if (view.examples.length > 0) {
16743
17055
  $$renderer.push("<!--[0-->");
16744
- $$renderer.push(`<ul class="help-examples svelte-1tbbgiz"><!--[-->`);
17056
+ $$renderer.push(`<ul class="help-examples svelte-y0c21v"><!--[-->`);
16745
17057
  const each_array_1 = ensure_array_like(view.examples);
16746
17058
  for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
16747
17059
  let ex = each_array_1[$$index_1];
16748
- $$renderer.push(`<li class="svelte-1tbbgiz"><code class="svelte-1tbbgiz">${escape_html(ex.line)}</code><span>${escape_html(ex.description)}</span></li>`);
17060
+ $$renderer.push(`<li class="svelte-y0c21v"><code class="svelte-y0c21v">${escape_html(ex.line)}</code><span>${escape_html(ex.description)}</span></li>`);
16749
17061
  }
16750
17062
  $$renderer.push(`<!--]--></ul>`);
16751
17063
  } else $$renderer.push("<!--[-1-->");
16752
17064
  $$renderer.push(`<!--]--> `);
16753
17065
  if (view.note !== void 0) {
16754
17066
  $$renderer.push("<!--[0-->");
16755
- $$renderer.push(`<p class="help-note svelte-1tbbgiz">${escape_html(view.note)}</p>`);
17067
+ $$renderer.push(`<p class="help-note svelte-y0c21v">${escape_html(view.note)}</p>`);
16756
17068
  } else $$renderer.push("<!--[-1-->");
16757
- $$renderer.push(`<!--]--> <p class="help-hint svelte-1tbbgiz">${escape_html(t(eschidesa2))} <code>?</code> ${escape_html(t(eschidesb2))}</p></div>`);
17069
+ $$renderer.push(`<!--]--> <p class="help-hint svelte-y0c21v">${escape_html(t(eschidesa2))} <code>?</code> ${escape_html(t(eschidesb2))}</p></div>`);
16758
17070
  });
16759
17071
  }
16760
17072
  //#endregion
@@ -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",
@@ -19228,7 +19540,7 @@ function PromptInput($$renderer, $$props) {
19228
19540
  });
19229
19541
  }
19230
19542
  //#endregion
19231
- //#region src/lib/components/chat/ConversationFooter.svelte
19543
+ //#region src/lib/components/conversation/ConversationFooter.svelte
19232
19544
  function ConversationFooter($$renderer, $$props) {
19233
19545
  $$renderer.component(($$renderer) => {
19234
19546
  /**
@@ -19271,7 +19583,7 @@ function ConversationFooter($$renderer, $$props) {
19271
19583
  });
19272
19584
  }
19273
19585
  //#endregion
19274
- //#region src/lib/components/chat/DisplayWorkspace.svelte
19586
+ //#region src/lib/components/conversation/DisplayWorkspace.svelte
19275
19587
  function DisplayWorkspace($$renderer, $$props) {
19276
19588
  $$renderer.component(($$renderer) => {
19277
19589
  /**
@@ -19302,7 +19614,7 @@ function DisplayWorkspace($$renderer, $$props) {
19302
19614
  });
19303
19615
  }
19304
19616
  //#endregion
19305
- //#region src/lib/components/chat/EditingTitle.svelte
19617
+ //#region src/lib/components/conversation/EditingTitle.svelte
19306
19618
  function EditingTitle($$renderer, $$props) {
19307
19619
  $$renderer.component(($$renderer) => {
19308
19620
  /**
@@ -19340,7 +19652,7 @@ function EditingTitle($$renderer, $$props) {
19340
19652
  });
19341
19653
  }
19342
19654
  //#endregion
19343
- //#region src/lib/components/chat/SessionAccess.svelte
19655
+ //#region src/lib/components/conversation/SessionAccess.svelte
19344
19656
  function SessionAccess($$renderer, $$props) {
19345
19657
  /**
19346
19658
  * SessionAccess (2026-08-26) — the header’s access badge, extracted
@@ -19391,7 +19703,7 @@ function SessionAccess($$renderer, $$props) {
19391
19703
  $$renderer.push(`<!--]-->`);
19392
19704
  }
19393
19705
  //#endregion
19394
- //#region src/lib/components/chat/SessionIdAndName.svelte
19706
+ //#region src/lib/components/conversation/SessionIdAndName.svelte
19395
19707
  function SessionIdAndName($$renderer, $$props) {
19396
19708
  $$renderer.component(($$renderer) => {
19397
19709
  /**
@@ -19442,7 +19754,7 @@ function SessionIdAndName($$renderer, $$props) {
19442
19754
  });
19443
19755
  }
19444
19756
  //#endregion
19445
- //#region src/lib/components/chat/ForkButton.svelte
19757
+ //#region src/lib/components/conversation/ForkButton.svelte
19446
19758
  function ForkButton($$renderer, $$props) {
19447
19759
  $$renderer.component(($$renderer) => {
19448
19760
  /**
@@ -19493,7 +19805,7 @@ function ForkButton($$renderer, $$props) {
19493
19805
  });
19494
19806
  }
19495
19807
  //#endregion
19496
- //#region src/lib/components/chat/OpenParentButton.svelte
19808
+ //#region src/lib/components/conversation/OpenParentButton.svelte
19497
19809
  function OpenParentButton($$renderer, $$props) {
19498
19810
  $$renderer.component(($$renderer) => {
19499
19811
  /**
@@ -19537,7 +19849,7 @@ function OpenParentButton($$renderer, $$props) {
19537
19849
  });
19538
19850
  }
19539
19851
  //#endregion
19540
- //#region src/lib/components/chat/PlanModeChip.svelte
19852
+ //#region src/lib/components/conversation/PlanModeChip.svelte
19541
19853
  function PlanModeChip($$renderer, $$props) {
19542
19854
  $$renderer.component(($$renderer) => {
19543
19855
  /**
@@ -19567,7 +19879,7 @@ function PlanModeChip($$renderer, $$props) {
19567
19879
  });
19568
19880
  }
19569
19881
  //#endregion
19570
- //#region src/lib/components/chat/ToolsAndStatusHeader.svelte
19882
+ //#region src/lib/components/conversation/ToolsAndStatusHeader.svelte
19571
19883
  function ToolsAndStatusHeader($$renderer, $$props) {
19572
19884
  $$renderer.component(($$renderer) => {
19573
19885
  /**
@@ -19594,7 +19906,7 @@ function ToolsAndStatusHeader($$renderer, $$props) {
19594
19906
  $$renderer.push(`<!----> `);
19595
19907
  if (agent) {
19596
19908
  $$renderer.push("<!--[0-->");
19597
- $$renderer.push(`<span class="agent-chip svelte-mhnbss" data-testid="agent-chip"${attr("title", agentId ? `agent preset — ${agentId}` : void 0)}>`);
19909
+ $$renderer.push(`<span class="agent-chip svelte-1uiman" data-testid="agent-chip"${attr("title", agentId ? `agent preset — ${agentId}` : void 0)}>`);
19598
19910
  if (agentId) {
19599
19911
  $$renderer.push("<!--[0-->");
19600
19912
  $$renderer.push(`<button type="button" class="shrink-0" data-testid="agent-chip-copy-id"${attr("aria-label", t(copyagentpresetid3))}${attr("title", agentId)}>`);
@@ -19630,7 +19942,7 @@ function ToolsAndStatusHeader($$renderer, $$props) {
19630
19942
  });
19631
19943
  }
19632
19944
  //#endregion
19633
- //#region src/lib/components/chat/ConversationHeader.svelte
19945
+ //#region src/lib/components/conversation/ConversationHeader.svelte
19634
19946
  function ConversationHeader($$renderer, $$props) {
19635
19947
  /**
19636
19948
  * ConversationHeader — the conversation page's top bar (extracted
@@ -19903,7 +20215,7 @@ function ForkHereButton($$renderer, $$props) {
19903
20215
  });
19904
20216
  }
19905
20217
  //#endregion
19906
- //#region src/lib/components/message/ToolsMessage.svelte
20218
+ //#region src/lib/components/message/common/ToolsMessage.svelte
19907
20219
  function ToolsMessage($$renderer, $$props) {
19908
20220
  $$renderer.component(($$renderer) => {
19909
20221
  let { text, container, showSave = true, showRaw = false, fork = null } = $$props;
@@ -19973,7 +20285,7 @@ function ToolsMessage($$renderer, $$props) {
19973
20285
  });
19974
20286
  }
19975
20287
  //#endregion
19976
- //#region src/lib/components/message/RelativeTime.svelte
20288
+ //#region src/lib/components/message/common/RelativeTime.svelte
19977
20289
  function RelativeTime($$renderer, $$props) {
19978
20290
  $$renderer.component(($$renderer) => {
19979
20291
  let { time, role, prefix = void 0, class: className = "" } = $$props;
@@ -19984,7 +20296,7 @@ function RelativeTime($$renderer, $$props) {
19984
20296
  });
19985
20297
  }
19986
20298
  //#endregion
19987
- //#region src/lib/components/message/MessageBubble.svelte
20299
+ //#region src/lib/components/message/prompt/MessageBubble.svelte
19988
20300
  function MessageBubble($$renderer, $$props) {
19989
20301
  /**
19990
20302
  * MessageBubble — the chat bubble shell one message sits in
@@ -20065,7 +20377,7 @@ function MessageBubble($$renderer, $$props) {
20065
20377
  $$renderer.subsume($$inner_renderer);
20066
20378
  }
20067
20379
  //#endregion
20068
- //#region src/lib/components/message/MessageImages.svelte
20380
+ //#region src/lib/components/message/prompt/MessageImages.svelte
20069
20381
  function MessageImages($$renderer, $$props) {
20070
20382
  $$renderer.component(($$renderer) => {
20071
20383
  /**
@@ -20107,7 +20419,7 @@ function MessageImages($$renderer, $$props) {
20107
20419
  });
20108
20420
  }
20109
20421
  //#endregion
20110
- //#region src/lib/components/message/PromptBubble.svelte
20422
+ //#region src/lib/components/message/prompt/PromptBubble.svelte
20111
20423
  function PromptBubble($$renderer, $$props) {
20112
20424
  $$renderer.component(($$renderer) => {
20113
20425
  /**
@@ -20346,7 +20658,7 @@ function ContextSnapshotBody($$renderer, $$props) {
20346
20658
  });
20347
20659
  }
20348
20660
  //#endregion
20349
- //#region src/lib/components/message/SystemPromptChip.svelte
20661
+ //#region src/lib/components/message/chips/SystemPromptChip.svelte
20350
20662
  function SystemPromptChip($$renderer, $$props) {
20351
20663
  $$renderer.component(($$renderer) => {
20352
20664
  /**
@@ -20389,7 +20701,7 @@ function SystemPromptChip($$renderer, $$props) {
20389
20701
  });
20390
20702
  }
20391
20703
  //#endregion
20392
- //#region src/lib/components/message/ChipPopup.svelte
20704
+ //#region src/lib/components/message/assistant/ChipPopup.svelte
20393
20705
  function ChipPopup($$renderer, $$props) {
20394
20706
  $$renderer.component(($$renderer) => {
20395
20707
  /**
@@ -20412,7 +20724,7 @@ function ChipPopup($$renderer, $$props) {
20412
20724
  });
20413
20725
  }
20414
20726
  //#endregion
20415
- //#region src/lib/components/message/TurnUsagePanel.svelte
20727
+ //#region src/lib/components/message/assistant/TurnUsagePanel.svelte
20416
20728
  function TurnUsagePanel($$renderer, $$props) {
20417
20729
  $$renderer.component(($$renderer) => {
20418
20730
  let { usage: usage$1, class: className = "" } = $$props;
@@ -20425,7 +20737,7 @@ function TurnUsagePanel($$renderer, $$props) {
20425
20737
  });
20426
20738
  }
20427
20739
  //#endregion
20428
- //#region src/lib/components/message/AssistantTurn.svelte
20740
+ //#region src/lib/components/message/assistant/AssistantTurn.svelte
20429
20741
  function AssistantTurn($$renderer, $$props) {
20430
20742
  $$renderer.component(($$renderer) => {
20431
20743
  /**
@@ -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, {
@@ -20585,7 +20911,7 @@ function ReasoningSection($$renderer, $$props) {
20585
20911
  });
20586
20912
  }
20587
20913
  //#endregion
20588
- //#region src/lib/components/message/ToolCallChip.svelte
20914
+ //#region src/lib/components/message/chips/ToolCallChip.svelte
20589
20915
  function ToolCallChip($$renderer, $$props) {
20590
20916
  $$renderer.component(($$renderer) => {
20591
20917
  /**
@@ -20614,7 +20940,7 @@ function ToolCallChip($$renderer, $$props) {
20614
20940
  if (kind === "result") return ok === false ? "bg-red-500" : "bg-emerald-500";
20615
20941
  return "bg-slate-400";
20616
20942
  });
20617
- $$renderer.push(`<div data-svelte="ToolCallChip" class="self-start text-xs" data-testid="tool-chip"${attr("data-kind", kind)}${attr("data-status", status)}><button type="button"${attr("aria-expanded", open)} data-testid="tool-chip-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 ${kind === "result" && ok === false ? "bg-red-50 text-red-700 border border-red-200" : kind === "result" ? "bg-emerald-50 text-emerald-700 border border-emerald-200" : status === "fail" ? "bg-red-50 text-red-700 border border-red-200" : open ? "bg-accent-purple/20 text-accent-purple border border-accent-purple/30" : "bg-surface-alt text-text-secondary border border-surface-border hover:bg-surface-hover hover:text-text-primary"}`, "svelte-1p1wfzw")}>`);
20943
+ $$renderer.push(`<div data-svelte="ToolCallChip" class="self-start text-xs" data-testid="tool-chip"${attr("data-kind", kind)}${attr("data-status", status)}><button type="button"${attr("aria-expanded", open)} data-testid="tool-chip-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 ${kind === "result" && ok === false ? "bg-red-50 text-red-700 border border-red-200" : kind === "result" ? "bg-emerald-50 text-emerald-700 border border-emerald-200" : status === "fail" ? "bg-red-50 text-red-700 border border-red-200" : open ? "bg-accent-purple/20 text-accent-purple border border-accent-purple/30" : "bg-surface-alt text-text-secondary border border-surface-border hover:bg-surface-hover hover:text-text-primary"}`, "svelte-12asc4k")}>`);
20618
20944
  if (open) {
20619
20945
  $$renderer.push("<!--[0-->");
20620
20946
  Chevron_down($$renderer, { size: 10 });
@@ -20622,7 +20948,7 @@ function ToolCallChip($$renderer, $$props) {
20622
20948
  $$renderer.push("<!--[-1-->");
20623
20949
  Chevron_right($$renderer, { size: 10 });
20624
20950
  }
20625
- $$renderer.push(`<!--]--> <span class="text-[10px]">${escape_html(label())}</span> <span aria-hidden="true" data-testid="tool-chip-dot"${attr_class(`w-1.5 h-1.5 shrink-0 rounded-full ${stringify(dotClass())}`, "svelte-1p1wfzw")}></span></button></div>`);
20951
+ $$renderer.push(`<!--]--> <span class="text-[10px]">${escape_html(label())}</span> <span aria-hidden="true" data-testid="tool-chip-dot"${attr_class(`w-1.5 h-1.5 shrink-0 rounded-full ${stringify(dotClass())}`, "svelte-12asc4k")}></span></button></div>`);
20626
20952
  });
20627
20953
  }
20628
20954
  //#endregion
@@ -20671,7 +20997,7 @@ function escapeText(text) {
20671
20997
  return text.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
20672
20998
  }
20673
20999
  //#endregion
20674
- //#region src/lib/components/message/FileContentViewer.svelte
21000
+ //#region src/lib/components/common/viewers/FileContentViewer.svelte
20675
21001
  function FileContentViewer($$renderer, $$props) {
20676
21002
  $$renderer.component(($$renderer) => {
20677
21003
  /**
@@ -20783,7 +21109,7 @@ function ToolCallDetail($$renderer, $$props) {
20783
21109
  });
20784
21110
  }
20785
21111
  //#endregion
20786
- //#region src/lib/components/message/TurnErrorChip.svelte
21112
+ //#region src/lib/components/message/chips/TurnErrorChip.svelte
20787
21113
  function TurnErrorChip($$renderer, $$props) {
20788
21114
  $$renderer.component(($$renderer) => {
20789
21115
  /**
@@ -20796,7 +21122,7 @@ function TurnErrorChip($$renderer, $$props) {
20796
21122
  */
20797
21123
  /** Popup split: expanded state is OWNED BY THE PAGE (OCI pattern). */
20798
21124
  let { code, open = false} = $$props;
20799
- $$renderer.push(`<div data-svelte="TurnErrorChip" class="self-start text-xs" data-testid="turn-error-chip"><button type="button"${attr("aria-expanded", open)} data-testid="turn-error-toggle" 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-red-50 text-red-700 border border-red-200 hover:bg-red-100 svelte-1gttfnp">`);
21125
+ $$renderer.push(`<div data-svelte="TurnErrorChip" class="self-start text-xs" data-testid="turn-error-chip"><button type="button"${attr("aria-expanded", open)} data-testid="turn-error-toggle" 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-red-50 text-red-700 border border-red-200 hover:bg-red-100 svelte-1yepfwx">`);
20800
21126
  if (open) {
20801
21127
  $$renderer.push("<!--[0-->");
20802
21128
  Chevron_down($$renderer, { size: 10 });
@@ -20808,7 +21134,7 @@ function TurnErrorChip($$renderer, $$props) {
20808
21134
  });
20809
21135
  }
20810
21136
  //#endregion
20811
- //#region src/lib/components/message/WorkflowRunCard.svelte
21137
+ //#region src/lib/components/message/cards/WorkflowRunCard.svelte
20812
21138
  function WorkflowRunCard($$renderer, $$props) {
20813
21139
  $$renderer.component(($$renderer) => {
20814
21140
  /**
@@ -20965,7 +21291,7 @@ function planReviewOf(questions) {
20965
21291
  };
20966
21292
  }
20967
21293
  //#endregion
20968
- //#region src/lib/components/answerer/QuestionCard.svelte
21294
+ //#region src/lib/components/card/QuestionCard.svelte
20969
21295
  function QuestionCard($$renderer, $$props) {
20970
21296
  $$renderer.component(($$renderer) => {
20971
21297
  /**
@@ -21282,7 +21608,7 @@ function goalVerb(toolName, action) {
21282
21608
  }
21283
21609
  }
21284
21610
  //#endregion
21285
- //#region src/lib/components/message/GoalCard.svelte
21611
+ //#region src/lib/components/message/cards/GoalCard.svelte
21286
21612
  function GoalCard($$renderer, $$props) {
21287
21613
  $$renderer.component(($$renderer) => {
21288
21614
  /**
@@ -21760,7 +22086,7 @@ function buildDispatchReadView(argsRaw, contentText) {
21760
22086
  };
21761
22087
  }
21762
22088
  //#endregion
21763
- //#region src/lib/components/message/CodeCard.svelte
22089
+ //#region src/lib/components/message/cards/CodeCard.svelte
21764
22090
  function CodeCard($$renderer, $$props) {
21765
22091
  $$renderer.component(($$renderer) => {
21766
22092
  /**
@@ -21997,7 +22323,7 @@ function todoListPreview(argsRaw) {
21997
22323
  return line.length > 120 ? line.slice(0, 119) + "…" : line;
21998
22324
  }
21999
22325
  //#endregion
22000
- //#region src/lib/components/message/TodoCard.svelte
22326
+ //#region src/lib/components/message/cards/TodoCard.svelte
22001
22327
  function TodoCard($$renderer, $$props) {
22002
22328
  $$renderer.component(($$renderer) => {
22003
22329
  /**
@@ -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) => {
@@ -22213,7 +22565,7 @@ function createStickToBottom(options = {}) {
22213
22565
  };
22214
22566
  }
22215
22567
  //#endregion
22216
- //#region src/lib/components/message/InlineToolCalls.svelte
22568
+ //#region src/lib/components/message/assistant/InlineToolCalls.svelte
22217
22569
  function InlineToolCalls($$renderer, $$props) {
22218
22570
  $$renderer.component(($$renderer) => {
22219
22571
  /**
@@ -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> `);
@@ -22591,7 +22956,7 @@ function InlineToolCalls($$renderer, $$props) {
22591
22956
  });
22592
22957
  }
22593
22958
  //#endregion
22594
- //#region src/lib/components/chat/TurnProcessDisclosure.svelte
22959
+ //#region src/lib/components/message/assistant/TurnProcessDisclosure.svelte
22595
22960
  function TurnProcessDisclosure($$renderer, $$props) {
22596
22961
  $$renderer.component(($$renderer) => {
22597
22962
  let { toolCallCount, messageCount, subagentCount, open} = $$props;
@@ -22612,7 +22977,7 @@ function TurnProcessDisclosure($$renderer, $$props) {
22612
22977
  });
22613
22978
  }
22614
22979
  //#endregion
22615
- //#region src/lib/components/answerer/ApprovalCard.svelte
22980
+ //#region src/lib/components/card/ApprovalCard.svelte
22616
22981
  function ApprovalCard($$renderer, $$props) {
22617
22982
  $$renderer.component(($$renderer) => {
22618
22983
  /**
@@ -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,7 +23259,59 @@ function turnProcess(entries, opts) {
22893
23259
  };
22894
23260
  }
22895
23261
  //#endregion
22896
- //#region src/lib/components/chat/ConversationScrollArea.svelte
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
23314
+ //#region src/lib/components/conversation/ConversationScrollArea.svelte
22897
23315
  function ConversationScrollArea($$renderer, $$props) {
22898
23316
  $$renderer.component(($$renderer) => {
22899
23317
  /**
@@ -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),
@@ -24329,7 +24748,7 @@ async function resolveWorkspaceToken(token) {
24329
24748
  return { note: `/new: no workspace "${token}" — the registry holds: ${rows.map((w) => w.title).join(", ")}; adopt a new one with /workspace <full-path>` };
24330
24749
  }
24331
24750
  //#endregion
24332
- //#region src/lib/components/chat/InjectedShelfButton.svelte
24751
+ //#region src/lib/components/conversation/InjectedShelfButton.svelte
24333
24752
  function InjectedShelfButton($$renderer, $$props) {
24334
24753
  $$renderer.component(($$renderer) => {
24335
24754
  /**
@@ -24362,7 +24781,7 @@ function InjectedShelfButton($$renderer, $$props) {
24362
24781
  function $$render_inner($$renderer) {
24363
24782
  if (members().length > 0) {
24364
24783
  $$renderer.push("<!--[0-->");
24365
- $$renderer.push(`<div data-svelte="InjectedShelfButton" class="relative svelte-ntohaz"><button type="button"${attr_class("floating-anchor-btn tone-maroon svelte-ntohaz", void 0, { "active": open })}${attr("title", t(injectedtitle1))} data-testid="injected-shelf-button">`);
24784
+ $$renderer.push(`<div data-svelte="InjectedShelfButton" class="relative svelte-1la1glg"><button type="button"${attr_class("floating-anchor-btn tone-maroon svelte-1la1glg", void 0, { "active": open })}${attr("title", t(injectedtitle1))} data-testid="injected-shelf-button">`);
24366
24785
  File_text($$renderer, { size: 14 });
24367
24786
  $$renderer.push(`<!----></button> `);
24368
24787
  FloatingAnchorContainerPopup($$renderer, {
@@ -24384,15 +24803,15 @@ function InjectedShelfButton($$renderer, $$props) {
24384
24803
  let m = each_array[i];
24385
24804
  if (i > 0 && members()[i - 1].firstLoad === true && m.firstLoad === false) {
24386
24805
  $$renderer.push("<!--[0-->");
24387
- $$renderer.push(`<hr class="shelf-divider svelte-ntohaz" data-testid="shelf-first-load-divider"/>`);
24806
+ $$renderer.push(`<hr class="shelf-divider svelte-1la1glg" data-testid="shelf-first-load-divider"/>`);
24388
24807
  } else $$renderer.push("<!--[-1-->");
24389
- $$renderer.push(`<!--]--> <div class="shelf-item svelte-ntohaz" data-testid="injected-shelf-item"${attr("data-display-path", m.displayPath)}>`);
24808
+ $$renderer.push(`<!--]--> <div class="shelf-item svelte-1la1glg" data-testid="injected-shelf-item"${attr("data-display-path", m.displayPath)}>`);
24390
24809
  CopyButton($$renderer, {
24391
24810
  value: m.origin === "system-prompt" ? injectedRecordFor(entries, m.displayPath)?.text ?? m.displayPath : injectedFullPath(workspace, m.displayPath),
24392
24811
  title: m.origin === "system-prompt" ? "Copy prompt text — a shelf name, not a file" : "Copy full path",
24393
24812
  class: "shelf-copy"
24394
24813
  });
24395
- $$renderer.push(`<!----> <button type="button" role="menuitem" class="shelf-pick svelte-ntohaz" data-testid="injected-shelf-pick"${attr("title", m.displayPath)}><span class="shelf-pick-path svelte-ntohaz">${escape_html(m.displayPath)}</span></button></div>`);
24814
+ $$renderer.push(`<!----> <button type="button" role="menuitem" class="shelf-pick svelte-1la1glg" data-testid="injected-shelf-pick"${attr("title", m.displayPath)}><span class="shelf-pick-path svelte-1la1glg">${escape_html(m.displayPath)}</span></button></div>`);
24396
24815
  }
24397
24816
  $$renderer.push(`<!--]-->`);
24398
24817
  },
@@ -24411,7 +24830,7 @@ function InjectedShelfButton($$renderer, $$props) {
24411
24830
  });
24412
24831
  }
24413
24832
  //#endregion
24414
- //#region src/lib/components/chat/ConversationFloatingAnchor.svelte
24833
+ //#region src/lib/components/conversation/ConversationFloatingAnchor.svelte
24415
24834
  function ConversationFloatingAnchor($$renderer, $$props) {
24416
24835
  /**
24417
24836
  * ConversationFloatingAnchor — the conversation page's floating action
@@ -24448,7 +24867,7 @@ function ConversationFloatingAnchor($$renderer, $$props) {
24448
24867
  $$renderer.push(`<!--]-->`);
24449
24868
  }
24450
24869
  //#endregion
24451
- //#region src/lib/components/chat/A2aChipStack.svelte
24870
+ //#region src/lib/components/conversation/A2aChipStack.svelte
24452
24871
  function A2aChipStack($$renderer, $$props) {
24453
24872
  $$renderer.component(($$renderer) => {
24454
24873
  /**
@@ -24536,7 +24955,7 @@ function A2aChipStack($$renderer, $$props) {
24536
24955
  });
24537
24956
  }
24538
24957
  //#endregion
24539
- //#region src/lib/components/chat/ConversationStatsBar.svelte
24958
+ //#region src/lib/components/conversation/ConversationStatsBar.svelte
24540
24959
  function ConversationStatsBar($$renderer, $$props) {
24541
24960
  $$renderer.component(($$renderer) => {
24542
24961
  /**
@@ -24584,15 +25003,15 @@ function ConversationStatsBar($$renderer, $$props) {
24584
25003
  });
24585
25004
  if (stats !== null) {
24586
25005
  $$renderer.push("<!--[0-->");
24587
- $$renderer.push(`<div data-svelte="ConversationStatsBar" class="stats-bar svelte-1bg5es8" data-testid="conversation-stats-bar"${attr("title", segments().join(" | "))}><!--[-->`);
25006
+ $$renderer.push(`<div data-svelte="ConversationStatsBar" class="stats-bar svelte-1v5mccr" data-testid="conversation-stats-bar"${attr("title", segments().join(" | "))}><!--[-->`);
24588
25007
  const each_array = ensure_array_like(segments());
24589
25008
  for (let i = 0, $$length = each_array.length; i < $$length; i++) {
24590
25009
  let segment = each_array[i];
24591
25010
  if (i > 0) {
24592
25011
  $$renderer.push("<!--[0-->");
24593
- $$renderer.push(`<span class="sep svelte-1bg5es8" aria-hidden="true">|</span>`);
25012
+ $$renderer.push(`<span class="sep svelte-1v5mccr" aria-hidden="true">|</span>`);
24594
25013
  } else $$renderer.push("<!--[-1-->");
24595
- $$renderer.push(`<!--]--> <span class="segment svelte-1bg5es8" data-testid="stats-segment">${escape_html(segment)}</span>`);
25014
+ $$renderer.push(`<!--]--> <span class="segment svelte-1v5mccr" data-testid="stats-segment">${escape_html(segment)}</span>`);
24596
25015
  }
24597
25016
  $$renderer.push(`<!--]--></div>`);
24598
25017
  } else $$renderer.push("<!--[-1-->");
@@ -25121,7 +25540,7 @@ var macroRunner = {
25121
25540
  }
25122
25541
  };
25123
25542
  //#endregion
25124
- //#region src/lib/components/chat/MacroRunSheet.svelte
25543
+ //#region src/lib/components/conversation/MacroRunSheet.svelte
25125
25544
  function MacroRunSheet($$renderer, $$props) {
25126
25545
  $$renderer.component(($$renderer) => {
25127
25546
  /**
@@ -25192,15 +25611,15 @@ function MacroRunSheet($$renderer, $$props) {
25192
25611
  });
25193
25612
  if (run.phase !== "idle") {
25194
25613
  $$renderer.push("<!--[0-->");
25195
- $$renderer.push(`<div data-svelte="MacroRunSheet" class="macro-run svelte-zl61ov" data-testid="macro-run"><div class="macro-chip svelte-zl61ov"${attr("data-phase", run.phase)} data-testid="macro-chip"><button type="button" class="macro-chip-label svelte-zl61ov"${attr("aria-expanded", expanded)}${attr("title", run.note ?? "Macro run")}><span class="macro-chip-text svelte-zl61ov">${escape_html(chipLabel())}</span> <span class="macro-chip-caret svelte-zl61ov">${escape_html("▸")}</span></button> `);
25614
+ $$renderer.push(`<div data-svelte="MacroRunSheet" class="macro-run svelte-1ojr83s" data-testid="macro-run"><div class="macro-chip svelte-1ojr83s"${attr("data-phase", run.phase)} data-testid="macro-chip"><button type="button" class="macro-chip-label svelte-1ojr83s"${attr("aria-expanded", expanded)}${attr("title", run.note ?? "Macro run")}><span class="macro-chip-text svelte-1ojr83s">${escape_html(chipLabel())}</span> <span class="macro-chip-caret svelte-1ojr83s">${escape_html("▸")}</span></button> `);
25196
25615
  if (canAbort() && onabort) {
25197
25616
  $$renderer.push("<!--[0-->");
25198
- $$renderer.push(`<button type="button" class="macro-stop svelte-zl61ov" data-testid="macro-stop"${attr("title", t(dropunsubmittedtitle2))}>${escape_html(t(stop))}</button>`);
25617
+ $$renderer.push(`<button type="button" class="macro-stop svelte-1ojr83s" data-testid="macro-stop"${attr("title", t(dropunsubmittedtitle2))}>${escape_html(t(stop))}</button>`);
25199
25618
  } else $$renderer.push("<!--[-1-->");
25200
25619
  $$renderer.push(`<!--]--> `);
25201
25620
  if (ended() && onclose) {
25202
25621
  $$renderer.push("<!--[0-->");
25203
- $$renderer.push(`<button type="button" class="macro-close svelte-zl61ov" data-testid="macro-close"${attr("aria-label", t(dismissrunsheet2))}${attr("title", t(dismiss))}>✕</button>`);
25622
+ $$renderer.push(`<button type="button" class="macro-close svelte-1ojr83s" data-testid="macro-close"${attr("aria-label", t(dismissrunsheet2))}${attr("title", t(dismiss))}>✕</button>`);
25204
25623
  } else $$renderer.push("<!--[-1-->");
25205
25624
  $$renderer.push(`<!--]--></div> `);
25206
25625
  $$renderer.push("<!--[-1-->");
@@ -25210,7 +25629,7 @@ function MacroRunSheet($$renderer, $$props) {
25210
25629
  });
25211
25630
  }
25212
25631
  //#endregion
25213
- //#region src/lib/components/chat/GoalBar.svelte
25632
+ //#region src/lib/components/conversation/GoalBar.svelte
25214
25633
  function GoalBar($$renderer, $$props) {
25215
25634
  $$renderer.component(($$renderer) => {
25216
25635
  /**
@@ -25251,33 +25670,33 @@ function GoalBar($$renderer, $$props) {
25251
25670
  const phaseAction = derived(() => goal?.phase === "active" ? "pause" : goal?.phase === "paused" ? "resume" : void 0);
25252
25671
  if (goal && goal.phase !== "complete") {
25253
25672
  $$renderer.push("<!--[0-->");
25254
- $$renderer.push(`<div data-svelte="GoalBar" class="goal-bar svelte-k3rmjz" data-testid="goal-bar"><div class="goal-chip svelte-k3rmjz"${attr("data-phase", goal.phase)} data-testid="goal-chip"${attr("title", blockedTitle())}><button type="button" class="goal-chip-label svelte-k3rmjz"${attr("aria-expanded", expanded)}${attr("title", blockedTitle() ?? goal.objective)}><span class="goal-chip-glyph svelte-k3rmjz" aria-hidden="true">${escape_html(glyph())}</span> <span class="goal-chip-text svelte-k3rmjz">goal ${escape_html(goal.phase)} · ${escape_html(shortObjective())}</span> <span class="goal-chip-caret svelte-k3rmjz">${escape_html("▸")}</span></button> `);
25673
+ $$renderer.push(`<div data-svelte="GoalBar" class="goal-bar svelte-132xors" data-testid="goal-bar"><div class="goal-chip svelte-132xors"${attr("data-phase", goal.phase)} data-testid="goal-chip"${attr("title", blockedTitle())}><button type="button" class="goal-chip-label svelte-132xors"${attr("aria-expanded", expanded)}${attr("title", blockedTitle() ?? goal.objective)}><span class="goal-chip-glyph svelte-132xors" aria-hidden="true">${escape_html(glyph())}</span> <span class="goal-chip-text svelte-132xors">goal ${escape_html(goal.phase)} · ${escape_html(shortObjective())}</span> <span class="goal-chip-caret svelte-132xors">${escape_html("▸")}</span></button> `);
25255
25674
  if (phaseAction() === "pause" && onpause) {
25256
25675
  $$renderer.push("<!--[0-->");
25257
- $$renderer.push(`<button type="button" class="goal-action svelte-k3rmjz" data-testid="goal-pause"${attr("title", t(pausegoal1))}>${escape_html(t(pause))}</button>`);
25676
+ $$renderer.push(`<button type="button" class="goal-action svelte-132xors" data-testid="goal-pause"${attr("title", t(pausegoal1))}>${escape_html(t(pause))}</button>`);
25258
25677
  } else $$renderer.push("<!--[-1-->");
25259
25678
  $$renderer.push(`<!--]--> `);
25260
25679
  if (phaseAction() === "resume" && onresume) {
25261
25680
  $$renderer.push("<!--[0-->");
25262
- $$renderer.push(`<button type="button" class="goal-action svelte-k3rmjz" data-testid="goal-resume"${attr("title", t(resumegoal1))}>${escape_html(t(resume))}</button>`);
25681
+ $$renderer.push(`<button type="button" class="goal-action svelte-132xors" data-testid="goal-resume"${attr("title", t(resumegoal1))}>${escape_html(t(resume))}</button>`);
25263
25682
  } else $$renderer.push("<!--[-1-->");
25264
25683
  $$renderer.push(`<!--]--> `);
25265
25684
  if (onedit) {
25266
25685
  $$renderer.push("<!--[0-->");
25267
- $$renderer.push(`<button type="button" class="goal-action svelte-k3rmjz" data-testid="goal-edit"${attr("title", t(editobjectivetitle2))}>${escape_html(t(edit))}</button>`);
25686
+ $$renderer.push(`<button type="button" class="goal-action svelte-132xors" data-testid="goal-edit"${attr("title", t(editobjectivetitle2))}>${escape_html(t(edit))}</button>`);
25268
25687
  } else $$renderer.push("<!--[-1-->");
25269
25688
  $$renderer.push(`<!--]--> `);
25270
25689
  if (onclear) {
25271
25690
  $$renderer.push("<!--[0-->");
25272
- $$renderer.push(`<button type="button" class="goal-action goal-clear svelte-k3rmjz" data-testid="goal-clear"${attr("aria-label", t(clearthegoal2))}${attr("title", t(clearbtn1))}>✕</button>`);
25691
+ $$renderer.push(`<button type="button" class="goal-action goal-clear svelte-132xors" data-testid="goal-clear"${attr("aria-label", t(clearthegoal2))}${attr("title", t(clearbtn1))}>✕</button>`);
25273
25692
  } else $$renderer.push("<!--[-1-->");
25274
25693
  $$renderer.push(`<!--]--></div> `);
25275
25694
  if (editor) {
25276
25695
  $$renderer.push("<!--[0-->");
25277
- $$renderer.push(`<div class="goal-edit-form svelte-k3rmjz" data-testid="goal-edit-form"><label class="goal-edit-label svelte-k3rmjz"><span>objective</span> <textarea data-testid="goal-edit-objective" rows="2" class="svelte-k3rmjz">`);
25696
+ $$renderer.push(`<div class="goal-edit-form svelte-132xors" data-testid="goal-edit-form"><label class="goal-edit-label svelte-132xors"><span>objective</span> <textarea data-testid="goal-edit-objective" rows="2" class="svelte-132xors">`);
25278
25697
  const $$body = escape_html(editor.objective);
25279
25698
  if ($$body) $$renderer.push(`${$$body}`);
25280
- $$renderer.push(`</textarea></label> <label class="goal-edit-label svelte-k3rmjz"><span>${escape_html(t(maxrounds1))}</span> <input type="number" min="1" step="1" data-testid="goal-edit-rounds"${attr("value", editor.maxGoalRounds)} class="svelte-k3rmjz"/></label> <div class="goal-controls svelte-k3rmjz"><button type="button" data-testid="goal-edit-submit" class="svelte-k3rmjz">${escape_html(t(save))}</button> <button type="button" data-testid="goal-edit-cancel" class="svelte-k3rmjz">${escape_html(t(cancel))}</button></div></div>`);
25699
+ $$renderer.push(`</textarea></label> <label class="goal-edit-label svelte-132xors"><span>${escape_html(t(maxrounds1))}</span> <input type="number" min="1" step="1" data-testid="goal-edit-rounds"${attr("value", editor.maxGoalRounds)} class="svelte-132xors"/></label> <div class="goal-controls svelte-132xors"><button type="button" data-testid="goal-edit-submit" class="svelte-132xors">${escape_html(t(save))}</button> <button type="button" data-testid="goal-edit-cancel" class="svelte-132xors">${escape_html(t(cancel))}</button></div></div>`);
25281
25700
  } else $$renderer.push("<!--[-1-->");
25282
25701
  $$renderer.push(`<!--]--> `);
25283
25702
  $$renderer.push("<!--[-1-->");
@@ -25295,7 +25714,7 @@ function contextWindowOf(modelId) {
25295
25714
  return void 0;
25296
25715
  }
25297
25716
  //#endregion
25298
- //#region src/lib/components/chat/ConversationPanel.svelte
25717
+ //#region src/lib/components/conversation/ConversationPanel.svelte
25299
25718
  function ConversationPanel($$renderer, $$props) {
25300
25719
  $$renderer.component(($$renderer) => {
25301
25720
  /**
@@ -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);
@@ -25686,7 +26106,7 @@ function ConversationPanel($$renderer, $$props) {
25686
26106
  let $$settled = true;
25687
26107
  let $$inner_renderer;
25688
26108
  function $$render_inner($$renderer) {
25689
- head("18u549u", $$renderer, ($$renderer) => {
26109
+ head("f76kgh", $$renderer, ($$renderer) => {
25690
26110
  $$renderer.title(($$renderer) => {
25691
26111
  $$renderer.push(`<title>${escape_html(title ?? (sessionId ? sessionId.slice(0, 12) + "…" : "deepseek-insight"))}</title>`);
25692
26112
  });
@@ -25762,15 +26182,15 @@ function ConversationPanel($$renderer, $$props) {
25762
26182
  $$renderer.push(`<!----> `);
25763
26183
  if (commandNote !== null) {
25764
26184
  $$renderer.push("<!--[0-->");
25765
- $$renderer.push(`<div${attr_class("command-note svelte-18u549u", void 0, { "command-note-error": commandNote.kind === "error" })} data-testid="command-note" role="status">${escape_html(commandNote.text)}</div>`);
26185
+ $$renderer.push(`<div${attr_class("command-note svelte-f76kgh", void 0, { "command-note-error": commandNote.kind === "error" })} data-testid="command-note" role="status">${escape_html(commandNote.text)}</div>`);
25766
26186
  } else $$renderer.push("<!--[-1-->");
25767
26187
  $$renderer.push(`<!--]--> `);
25768
26188
  if (composerError() !== null) {
25769
26189
  $$renderer.push("<!--[0-->");
25770
- $$renderer.push(`<div class="command-note command-note-error composer-error svelte-18u549u" data-testid="composer-error" role="alert"><span>${escape_html(composerError().message)}</span> `);
26190
+ $$renderer.push(`<div class="command-note command-note-error composer-error svelte-f76kgh" data-testid="composer-error" role="alert"><span>${escape_html(composerError().message)}</span> `);
25771
26191
  if (composerError().reason === "MODEL_DOES_NOT_SUPPORT_IMAGES") {
25772
26192
  $$renderer.push("<!--[0-->");
25773
- $$renderer.push(`<span class="composer-error-hint svelte-18u549u">${escape_html(t(imageskepthint2))}</span>`);
26193
+ $$renderer.push(`<span class="composer-error-hint svelte-f76kgh">${escape_html(t(imageskepthint2))}</span>`);
25774
26194
  } else $$renderer.push("<!--[-1-->");
25775
26195
  $$renderer.push(`<!--]--></div>`);
25776
26196
  } else $$renderer.push("<!--[-1-->");
@@ -25798,10 +26218,10 @@ function ConversationPanel($$renderer, $$props) {
25798
26218
  onclear: () => void runGoalVerb("clear"),
25799
26219
  onedit: openGoalEditor,
25800
26220
  editor: goalEditor});
25801
- $$renderer.push(`<!----> <div class="composer-area svelte-18u549u">`);
26221
+ $$renderer.push(`<!----> <div class="composer-area svelte-f76kgh">`);
25802
26222
  if (agent !== null) {
25803
26223
  $$renderer.push("<!--[0-->");
25804
- $$renderer.push(`<div class="composer-stick svelte-18u549u" data-testid="composer-stick-toggle">`);
26224
+ $$renderer.push(`<div class="composer-stick svelte-f76kgh" data-testid="composer-stick-toggle">`);
25805
26225
  StickToBottomToggle($$renderer, {
25806
26226
  stick,
25807
26227
  ontoggle: onStickToggle
@@ -25830,7 +26250,7 @@ function ConversationPanel($$renderer, $$props) {
25830
26250
  $$renderer.push(`<!--]--> `);
25831
26251
  if (subagent) {
25832
26252
  $$renderer.push("<!--[0-->");
25833
- $$renderer.push(`<div class="floating-stick svelte-18u549u" data-testid="floating-stick-toggle">`);
26253
+ $$renderer.push(`<div class="floating-stick svelte-f76kgh" data-testid="floating-stick-toggle">`);
25834
26254
  StickToBottomToggle($$renderer, {
25835
26255
  stick,
25836
26256
  ontoggle: onStickToggle
@@ -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-C-gx9imA.js.map
29734
+ //# sourceMappingURL=_page.svelte.js-5qYAGNkZ.js.map