@claude-sessions/web 0.4.5 → 0.4.6

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 (175) hide show
  1. package/build/client/_app/immutable/assets/0.cQgYior5.css +1 -0
  2. package/build/client/_app/immutable/assets/0.cQgYior5.css.br +0 -0
  3. package/build/client/_app/immutable/assets/0.cQgYior5.css.gz +0 -0
  4. package/build/client/_app/immutable/chunks/B8g5xi4b.js +1 -0
  5. package/build/client/_app/immutable/chunks/B8g5xi4b.js.br +0 -0
  6. package/build/client/_app/immutable/chunks/B8g5xi4b.js.gz +0 -0
  7. package/build/client/_app/immutable/chunks/CG99hqDQ.js +2 -0
  8. package/build/client/_app/immutable/chunks/CG99hqDQ.js.br +0 -0
  9. package/build/client/_app/immutable/chunks/CG99hqDQ.js.gz +0 -0
  10. package/build/client/_app/immutable/chunks/CiIZzKcO.js +1 -0
  11. package/build/client/_app/immutable/chunks/CiIZzKcO.js.br +0 -0
  12. package/build/client/_app/immutable/chunks/CiIZzKcO.js.gz +0 -0
  13. package/build/client/_app/immutable/chunks/{BmH_exS6.js → DDmWtjsj.js} +1 -1
  14. package/build/client/_app/immutable/chunks/DDmWtjsj.js.br +0 -0
  15. package/build/client/_app/immutable/chunks/DDmWtjsj.js.gz +0 -0
  16. package/build/client/_app/immutable/chunks/DWa7QuMS.js +1 -0
  17. package/build/client/_app/immutable/chunks/DWa7QuMS.js.br +0 -0
  18. package/build/client/_app/immutable/chunks/DWa7QuMS.js.gz +0 -0
  19. package/build/client/_app/immutable/chunks/Dw50LpzA.js +1 -0
  20. package/build/client/_app/immutable/chunks/Dw50LpzA.js.br +0 -0
  21. package/build/client/_app/immutable/chunks/Dw50LpzA.js.gz +0 -0
  22. package/build/client/_app/immutable/chunks/aZi3OCpL.js +96 -0
  23. package/build/client/_app/immutable/chunks/aZi3OCpL.js.br +0 -0
  24. package/build/client/_app/immutable/chunks/aZi3OCpL.js.gz +0 -0
  25. package/build/client/_app/immutable/entry/app.CYY1PZCN.js +2 -0
  26. package/build/client/_app/immutable/entry/app.CYY1PZCN.js.br +0 -0
  27. package/build/client/_app/immutable/entry/app.CYY1PZCN.js.gz +0 -0
  28. package/build/client/_app/immutable/entry/start.D84fuMw9.js +1 -0
  29. package/build/client/_app/immutable/entry/start.D84fuMw9.js.br +2 -0
  30. package/build/client/_app/immutable/entry/start.D84fuMw9.js.gz +0 -0
  31. package/build/client/_app/immutable/nodes/0.B2uv-WBM.js +1 -0
  32. package/build/client/_app/immutable/nodes/0.B2uv-WBM.js.br +0 -0
  33. package/build/client/_app/immutable/nodes/0.B2uv-WBM.js.gz +0 -0
  34. package/build/client/_app/immutable/nodes/1.BoxEAqK6.js +1 -0
  35. package/build/client/_app/immutable/nodes/1.BoxEAqK6.js.br +3 -0
  36. package/build/client/_app/immutable/nodes/1.BoxEAqK6.js.gz +0 -0
  37. package/build/client/_app/immutable/nodes/{2.yd31CwaR.js → 2.mKAMmHlh.js} +1 -1
  38. package/build/client/_app/immutable/nodes/2.mKAMmHlh.js.br +0 -0
  39. package/build/client/_app/immutable/nodes/2.mKAMmHlh.js.gz +0 -0
  40. package/build/client/_app/immutable/nodes/3.Dj8iwfME.js +4 -0
  41. package/build/client/_app/immutable/nodes/3.Dj8iwfME.js.br +0 -0
  42. package/build/client/_app/immutable/nodes/3.Dj8iwfME.js.gz +0 -0
  43. package/build/client/_app/version.json +1 -1
  44. package/build/client/_app/version.json.br +0 -0
  45. package/build/client/_app/version.json.gz +0 -0
  46. package/build/handler.js +290 -228
  47. package/build/server/chunks/0-DChhR3gd.js +17 -0
  48. package/build/server/chunks/{0-D3SWM5E2.js.map → 0-DChhR3gd.js.map} +1 -1
  49. package/build/server/chunks/1-BBSPd3nB.js +9 -0
  50. package/build/server/chunks/{1-CXfgX4ux.js.map → 1-BBSPd3nB.js.map} +1 -1
  51. package/build/server/chunks/2-C20RW_lJ.js +9 -0
  52. package/build/server/chunks/{2-MV5uDYTL.js.map → 2-C20RW_lJ.js.map} +1 -1
  53. package/build/server/chunks/3-D3wL2YSE.js +9 -0
  54. package/build/server/chunks/{3-CsnDqfbG.js.map → 3-D3wL2YSE.js.map} +1 -1
  55. package/build/server/chunks/{InputModal-B9P0hP_j.js → InputModal-1qJGryUa.js} +6 -7
  56. package/build/server/chunks/InputModal-1qJGryUa.js.map +1 -0
  57. package/build/server/chunks/{Toast-DWQ-hmJu.js → Toast-C9b_dWm4.js} +7 -8
  58. package/build/server/chunks/Toast-C9b_dWm4.js.map +1 -0
  59. package/build/server/chunks/_layout.svelte-CdDMC1RI.js +134 -0
  60. package/build/server/chunks/_layout.svelte-CdDMC1RI.js.map +1 -0
  61. package/build/server/chunks/{_page.svelte-CGQGusC6.js → _page.svelte-CVL9fjg-.js} +10 -13
  62. package/build/server/chunks/_page.svelte-CVL9fjg-.js.map +1 -0
  63. package/build/server/chunks/{_page.svelte-BiD6gfpa.js → _page.svelte-Dx2ikKP_.js} +451 -497
  64. package/build/server/chunks/_page.svelte-Dx2ikKP_.js.map +1 -0
  65. package/build/server/chunks/{_server.ts-CDdRYdYO.js → _server.ts-B3M-jxF5.js} +2 -2
  66. package/build/server/chunks/{_server.ts-CDdRYdYO.js.map → _server.ts-B3M-jxF5.js.map} +1 -1
  67. package/build/server/chunks/{_server.ts-iCUks3KF.js → _server.ts-BCOHCAjW.js} +2 -2
  68. package/build/server/chunks/{_server.ts-iCUks3KF.js.map → _server.ts-BCOHCAjW.js.map} +1 -1
  69. package/build/server/chunks/{_server.ts-ChObRyrd.js → _server.ts-BGA9W8aM.js} +2 -2
  70. package/build/server/chunks/{_server.ts-ChObRyrd.js.map → _server.ts-BGA9W8aM.js.map} +1 -1
  71. package/build/server/chunks/{_server.ts-D5wsc-pR.js → _server.ts-BWxgSwZN.js} +2 -2
  72. package/build/server/chunks/{_server.ts-D5wsc-pR.js.map → _server.ts-BWxgSwZN.js.map} +1 -1
  73. package/build/server/chunks/{_server.ts-kfmLCgu8.js → _server.ts-C0mKXnG1.js} +2 -2
  74. package/build/server/chunks/{_server.ts-kfmLCgu8.js.map → _server.ts-C0mKXnG1.js.map} +1 -1
  75. package/build/server/chunks/{_server.ts-BsgoVOBd.js → _server.ts-C9GYaVf1.js} +3 -3
  76. package/build/server/chunks/{_server.ts-BsgoVOBd.js.map → _server.ts-C9GYaVf1.js.map} +1 -1
  77. package/build/server/chunks/{_server.ts-CPDPReZU.js → _server.ts-COPvamIQ.js} +2 -2
  78. package/build/server/chunks/{_server.ts-CPDPReZU.js.map → _server.ts-COPvamIQ.js.map} +1 -1
  79. package/build/server/chunks/{_server.ts-DLSXCOEM.js → _server.ts-CrKc6LEy.js} +2 -2
  80. package/build/server/chunks/{_server.ts-DLSXCOEM.js.map → _server.ts-CrKc6LEy.js.map} +1 -1
  81. package/build/server/chunks/{_server.ts-CKxzPqOL.js → _server.ts-DOSGEHuw.js} +2 -2
  82. package/build/server/chunks/{_server.ts-CKxzPqOL.js.map → _server.ts-DOSGEHuw.js.map} +1 -1
  83. package/build/server/chunks/{_server.ts-Be1LFWpG.js → _server.ts-DP0i5Bdl.js} +2 -2
  84. package/build/server/chunks/{_server.ts-Be1LFWpG.js.map → _server.ts-DP0i5Bdl.js.map} +1 -1
  85. package/build/server/chunks/{_server.ts-crvQ7CTS.js → _server.ts-DmN9rdOH.js} +3 -3
  86. package/build/server/chunks/{_server.ts-crvQ7CTS.js.map → _server.ts-DmN9rdOH.js.map} +1 -1
  87. package/build/server/chunks/{_server.ts-Brg38LxG.js → _server.ts-DmWsoikX.js} +2 -2
  88. package/build/server/chunks/{_server.ts-Brg38LxG.js.map → _server.ts-DmWsoikX.js.map} +1 -1
  89. package/build/server/chunks/{_server.ts-BOyCbZXG.js → _server.ts-F01KLghS.js} +2 -2
  90. package/build/server/chunks/{_server.ts-BOyCbZXG.js.map → _server.ts-F01KLghS.js.map} +1 -1
  91. package/build/server/chunks/{_server.ts-blDzB5RZ.js → _server.ts-QLTE_2dV.js} +2 -2
  92. package/build/server/chunks/{_server.ts-blDzB5RZ.js.map → _server.ts-QLTE_2dV.js.map} +1 -1
  93. package/build/server/chunks/{_server.ts-Fv64R5tZ.js → _server.ts-WZF_VFnZ.js} +2 -2
  94. package/build/server/chunks/{_server.ts-Fv64R5tZ.js.map → _server.ts-WZF_VFnZ.js.map} +1 -1
  95. package/build/server/chunks/{_server.ts-Dc0z7zpD.js → _server.ts-rTWeIoSC.js} +3 -3
  96. package/build/server/chunks/{_server.ts-Dc0z7zpD.js.map → _server.ts-rTWeIoSC.js.map} +1 -1
  97. package/build/server/chunks/{index4-B6vRxXfo.js → client-BtcIwznP.js} +3 -23
  98. package/build/server/chunks/client-BtcIwznP.js.map +1 -0
  99. package/build/server/chunks/{error.svelte-BNCG_dZH.js → error.svelte-B02-pvoO.js} +5 -4
  100. package/build/server/chunks/error.svelte-B02-pvoO.js.map +1 -0
  101. package/build/server/chunks/index-CoD1IJuy.js.map +1 -1
  102. package/build/server/chunks/index2-B2Ld-FFX.js +3575 -0
  103. package/build/server/chunks/index2-B2Ld-FFX.js.map +1 -0
  104. package/build/server/chunks/{index3-D8yIZRD-.js → index3-DNyQGNm8.js} +3 -3
  105. package/build/server/chunks/index3-DNyQGNm8.js.map +1 -0
  106. package/build/server/chunks/index4-CfOR2iO6.js +21 -0
  107. package/build/server/chunks/index4-CfOR2iO6.js.map +1 -0
  108. package/build/server/chunks/root-B5iYE7yO.js +1182 -0
  109. package/build/server/chunks/root-B5iYE7yO.js.map +1 -0
  110. package/build/server/chunks/{session-BwU3zV40.js → session-Dxp1vf6f.js} +2 -2
  111. package/build/server/chunks/{session-BwU3zV40.js.map → session-Dxp1vf6f.js.map} +1 -1
  112. package/build/server/index.js +703 -1411
  113. package/build/server/index.js.map +1 -1
  114. package/build/server/manifest.js +21 -21
  115. package/build/server/manifest.js.map +1 -1
  116. package/package.json +23 -23
  117. package/build/client/_app/immutable/assets/0.BTIBK81-.css +0 -1
  118. package/build/client/_app/immutable/assets/0.BTIBK81-.css.br +0 -0
  119. package/build/client/_app/immutable/assets/0.BTIBK81-.css.gz +0 -0
  120. package/build/client/_app/immutable/chunks/B-Z9hXPk.js +0 -1
  121. package/build/client/_app/immutable/chunks/B-Z9hXPk.js.br +0 -0
  122. package/build/client/_app/immutable/chunks/B-Z9hXPk.js.gz +0 -0
  123. package/build/client/_app/immutable/chunks/BmH_exS6.js.br +0 -0
  124. package/build/client/_app/immutable/chunks/BmH_exS6.js.gz +0 -0
  125. package/build/client/_app/immutable/chunks/Cr0eW1j3.js +0 -1
  126. package/build/client/_app/immutable/chunks/Cr0eW1j3.js.br +0 -0
  127. package/build/client/_app/immutable/chunks/Cr0eW1j3.js.gz +0 -0
  128. package/build/client/_app/immutable/chunks/DOXVKi87.js +0 -2
  129. package/build/client/_app/immutable/chunks/DOXVKi87.js.br +0 -0
  130. package/build/client/_app/immutable/chunks/DOXVKi87.js.gz +0 -0
  131. package/build/client/_app/immutable/chunks/WodlV_jD.js +0 -96
  132. package/build/client/_app/immutable/chunks/WodlV_jD.js.br +0 -0
  133. package/build/client/_app/immutable/chunks/WodlV_jD.js.gz +0 -0
  134. package/build/client/_app/immutable/chunks/YXuXYbOb.js +0 -1
  135. package/build/client/_app/immutable/chunks/YXuXYbOb.js.br +0 -0
  136. package/build/client/_app/immutable/chunks/YXuXYbOb.js.gz +0 -0
  137. package/build/client/_app/immutable/chunks/vDyoI7lw.js +0 -1
  138. package/build/client/_app/immutable/chunks/vDyoI7lw.js.br +0 -0
  139. package/build/client/_app/immutable/chunks/vDyoI7lw.js.gz +0 -0
  140. package/build/client/_app/immutable/entry/app.Kf_4i_t0.js +0 -2
  141. package/build/client/_app/immutable/entry/app.Kf_4i_t0.js.br +0 -0
  142. package/build/client/_app/immutable/entry/app.Kf_4i_t0.js.gz +0 -0
  143. package/build/client/_app/immutable/entry/start.DrVGwFzz.js +0 -1
  144. package/build/client/_app/immutable/entry/start.DrVGwFzz.js.br +0 -0
  145. package/build/client/_app/immutable/entry/start.DrVGwFzz.js.gz +0 -0
  146. package/build/client/_app/immutable/nodes/0.Dfn2ZpXY.js +0 -1
  147. package/build/client/_app/immutable/nodes/0.Dfn2ZpXY.js.br +0 -0
  148. package/build/client/_app/immutable/nodes/0.Dfn2ZpXY.js.gz +0 -0
  149. package/build/client/_app/immutable/nodes/1.CWRD2TOY.js +0 -1
  150. package/build/client/_app/immutable/nodes/1.CWRD2TOY.js.br +0 -0
  151. package/build/client/_app/immutable/nodes/1.CWRD2TOY.js.gz +0 -0
  152. package/build/client/_app/immutable/nodes/2.yd31CwaR.js.br +0 -0
  153. package/build/client/_app/immutable/nodes/2.yd31CwaR.js.gz +0 -0
  154. package/build/client/_app/immutable/nodes/3.Dh5fbLPm.js +0 -4
  155. package/build/client/_app/immutable/nodes/3.Dh5fbLPm.js.br +0 -0
  156. package/build/client/_app/immutable/nodes/3.Dh5fbLPm.js.gz +0 -0
  157. package/build/server/chunks/0-D3SWM5E2.js +0 -17
  158. package/build/server/chunks/1-CXfgX4ux.js +0 -9
  159. package/build/server/chunks/2-MV5uDYTL.js +0 -9
  160. package/build/server/chunks/3-CsnDqfbG.js +0 -9
  161. package/build/server/chunks/InputModal-B9P0hP_j.js.map +0 -1
  162. package/build/server/chunks/Toast-DWQ-hmJu.js.map +0 -1
  163. package/build/server/chunks/_layout.svelte-Cgt3CiZy.js +0 -106
  164. package/build/server/chunks/_layout.svelte-Cgt3CiZy.js.map +0 -1
  165. package/build/server/chunks/_page.svelte-BiD6gfpa.js.map +0 -1
  166. package/build/server/chunks/_page.svelte-CGQGusC6.js.map +0 -1
  167. package/build/server/chunks/error.svelte-BNCG_dZH.js.map +0 -1
  168. package/build/server/chunks/exports-BXvEiaiv.js +0 -238
  169. package/build/server/chunks/exports-BXvEiaiv.js.map +0 -1
  170. package/build/server/chunks/index-D4ev3Ona.js +0 -1352
  171. package/build/server/chunks/index-D4ev3Ona.js.map +0 -1
  172. package/build/server/chunks/index2-ybZwlzIk.js +0 -1925
  173. package/build/server/chunks/index2-ybZwlzIk.js.map +0 -1
  174. package/build/server/chunks/index3-D8yIZRD-.js.map +0 -1
  175. package/build/server/chunks/index4-B6vRxXfo.js.map +0 -1
@@ -1,8 +1,7 @@
1
- import { a1 as escape_html, a2 as is_array, a3 as get_prototype_of, a4 as object_prototype } from './index2-ybZwlzIk.js';
2
- import { T as Toast, C as ConfirmModal, f as formatProjectName, a as appConfig, t as truncate, b as formatDate, m as maskHomePath } from './Toast-DWQ-hmJu.js';
3
- import { I as InputModal } from './InputModal-B9P0hP_j.js';
4
- import { x as sortProjects, T as TREE_ICONS, v as validateChain, y as validateProgressMessages, z as getTotalTodoCount, A as getDisplayTitle, B as sessionHasSubItems, C as getSessionTooltip, D as parseCommandMessage, E as deleteMessageWithChainRepair } from './index3-D8yIZRD-.js';
5
- import { k as store_get, l as ensure_array_like, d as attr, f as attr_class, j as stringify, m as unsubscribe_stores, n as clsx, o as attributes, p as await_block } from './index-D4ev3Ona.js';
1
+ import { k as escape_html, q as ensure_array_like, d as attr, l as attr_class, f as stringify, m as derived, j as store_get, t as clsx, x as attributes, o as unsubscribe_stores, y as await_block, z as is_array, A as get_prototype_of, B as object_prototype } from './index2-B2Ld-FFX.js';
2
+ import { T as Toast, C as ConfirmModal, f as formatProjectName, a as appConfig, t as truncate, b as formatDate, m as maskHomePath } from './Toast-C9b_dWm4.js';
3
+ import { I as InputModal } from './InputModal-1qJGryUa.js';
4
+ import { T as TREE_ICONS, x as sortProjects, y as getTotalTodoCount, z as getDisplayTitle, A as sessionHasSubItems, B as getSessionTooltip, C as validateProgressMessages, v as validateChain, D as parseCommandMessage, E as deleteMessageWithChainRepair } from './index3-DNyQGNm8.js';
6
5
  import 'marked';
7
6
  import 'fs';
8
7
  import 'fs/promises';
@@ -50,7 +49,7 @@ function clone(value, cloned, path, paths, original = null, no_tojson = false) {
50
49
  if (original !== null) {
51
50
  cloned.set(original, copy);
52
51
  }
53
- for (var key in value) {
52
+ for (var key of Object.keys(value)) {
54
53
  copy[key] = clone(
55
54
  // @ts-expect-error
56
55
  value[key],
@@ -258,39 +257,35 @@ const parseIdeTags = (content) => {
258
257
  function ExpandableContent($$renderer, $$props) {
259
258
  $$renderer.component(($$renderer2) => {
260
259
  let { content, maxLines = 10, lang } = $$props;
261
- const lines = content.split("\n");
262
- const needsExpand = lines.length > maxLines;
263
- const displayContent = needsExpand && true ? lines.slice(0, maxLines).join("\n") : content;
264
- if (needsExpand) {
265
- $$renderer2.push("<!--[-->");
260
+ const lines = derived(() => content.split("\n"));
261
+ const needsExpand = derived(() => lines().length > maxLines);
262
+ const displayContent = derived(() => needsExpand() && true ? lines().slice(0, maxLines).join("\n") : content);
263
+ if (needsExpand()) {
264
+ $$renderer2.push("<!--[0-->");
266
265
  $$renderer2.push(`<div class="relative">`);
267
266
  if (lang) {
268
- $$renderer2.push("<!--[-->");
269
- $$renderer2.push(`<pre class="whitespace-pre-wrap font-mono text-xs text-gh-text-secondary overflow-x-auto"><code${attr_class(`language-${stringify(lang)}`)}>${escape_html(displayContent)}</code></pre>`);
267
+ $$renderer2.push("<!--[0-->");
268
+ $$renderer2.push(`<pre class="whitespace-pre-wrap font-mono text-xs text-gh-text-secondary overflow-x-auto"><code${attr_class(`language-${stringify(lang)}`)}>${escape_html(displayContent())}</code></pre>`);
270
269
  } else {
271
- $$renderer2.push("<!--[!-->");
272
- $$renderer2.push(`<pre class="whitespace-pre-wrap font-mono text-xs text-gh-text-secondary overflow-x-auto">${escape_html(displayContent)}</pre>`);
270
+ $$renderer2.push("<!--[-1-->");
271
+ $$renderer2.push(`<pre class="whitespace-pre-wrap font-mono text-xs text-gh-text-secondary overflow-x-auto">${escape_html(displayContent())}</pre>`);
273
272
  }
274
273
  $$renderer2.push(`<!--]--> `);
275
274
  {
276
- $$renderer2.push("<!--[-->");
275
+ $$renderer2.push("<!--[0-->");
277
276
  $$renderer2.push(`<div class="absolute bottom-0 left-0 right-0 h-8 bg-gradient-to-t from-gh-canvas to-transparent pointer-events-none"></div> `);
278
277
  {
279
- $$renderer2.push("<!--[!-->");
278
+ $$renderer2.push("<!--[-1-->");
280
279
  }
281
280
  $$renderer2.push(`<!--]-->`);
282
281
  }
283
282
  $$renderer2.push(`<!--]--></div>`);
283
+ } else if (lang) {
284
+ $$renderer2.push("<!--[1-->");
285
+ $$renderer2.push(`<pre class="whitespace-pre-wrap font-mono text-xs text-gh-text-secondary overflow-x-auto"><code${attr_class(`language-${stringify(lang)}`)}>${escape_html(content)}</code></pre>`);
284
286
  } else {
285
- $$renderer2.push("<!--[!-->");
286
- if (lang) {
287
- $$renderer2.push("<!--[-->");
288
- $$renderer2.push(`<pre class="whitespace-pre-wrap font-mono text-xs text-gh-text-secondary overflow-x-auto"><code${attr_class(`language-${stringify(lang)}`)}>${escape_html(content)}</code></pre>`);
289
- } else {
290
- $$renderer2.push("<!--[!-->");
291
- $$renderer2.push(`<pre class="whitespace-pre-wrap font-mono text-xs text-gh-text-secondary overflow-x-auto">${escape_html(content)}</pre>`);
292
- }
293
- $$renderer2.push(`<!--]-->`);
287
+ $$renderer2.push("<!--[-1-->");
288
+ $$renderer2.push(`<pre class="whitespace-pre-wrap font-mono text-xs text-gh-text-secondary overflow-x-auto">${escape_html(content)}</pre>`);
294
289
  }
295
290
  $$renderer2.push(`<!--]-->`);
296
291
  });
@@ -298,84 +293,80 @@ function ExpandableContent($$renderer, $$props) {
298
293
  function IdeTag($$renderer, $$props) {
299
294
  $$renderer.component(($$renderer2) => {
300
295
  const { tag, content } = $$props;
301
- const filePath = (() => {
296
+ const filePath = derived(() => {
302
297
  const pathMatch = content.match(/(?:opened the file |selected.*from )(\/[^\s]+)/);
303
298
  if (pathMatch) return pathMatch[1];
304
299
  if (content.trim().startsWith("/")) {
305
300
  return content.trim().split("\n")[0].split(" ")[0];
306
301
  }
307
302
  return null;
308
- })();
309
- const lineInfo = (() => {
303
+ });
304
+ const lineInfo = derived(() => {
310
305
  const lineMatch = content.match(/lines? (\d+)(?:\s*to\s*(\d+))?/);
311
306
  if (lineMatch) {
312
307
  return lineMatch[2] ? `L${lineMatch[1]}-${lineMatch[2]}` : `L${lineMatch[1]}`;
313
308
  }
314
309
  return null;
315
- })();
310
+ });
316
311
  if (tag === "ide_opened_file") {
317
- $$renderer2.push("<!--[-->");
312
+ $$renderer2.push("<!--[0-->");
318
313
  $$renderer2.push(`<div class="flex items-center gap-2 text-xs text-blue-400 bg-blue-900/20 rounded px-2 py-1"><span class="opacity-60">📂</span> `);
319
- if (filePath) {
320
- $$renderer2.push("<!--[-->");
314
+ if (filePath()) {
315
+ $$renderer2.push("<!--[0-->");
321
316
  await_block(
322
317
  $$renderer2,
323
- checkFileExists(filePath),
318
+ checkFileExists(filePath()),
324
319
  () => {
325
- $$renderer2.push(`<span class="font-mono">${escape_html(filePath.split("/").pop())}</span>`);
320
+ $$renderer2.push(`<span class="font-mono">${escape_html(filePath().split("/").pop())}</span>`);
326
321
  },
327
322
  (exists) => {
328
323
  if (exists) {
329
- $$renderer2.push("<!--[-->");
330
- $$renderer2.push(`<button class="font-mono hover:underline cursor-pointer bg-transparent border-none text-blue-400 p-0"${attr("title", filePath)}>${escape_html(filePath.split("/").pop())}${escape_html(lineInfo ? `:${lineInfo}` : "")}</button>`);
324
+ $$renderer2.push("<!--[0-->");
325
+ $$renderer2.push(`<button class="font-mono hover:underline cursor-pointer bg-transparent border-none text-blue-400 p-0"${attr("title", filePath())}>${escape_html(filePath().split("/").pop())}${escape_html(lineInfo() ? `:${lineInfo()}` : "")}</button>`);
331
326
  } else {
332
- $$renderer2.push("<!--[!-->");
333
- $$renderer2.push(`<span class="font-mono opacity-60"${attr("title", filePath)}>${escape_html(filePath.split("/").pop())}</span>`);
327
+ $$renderer2.push("<!--[-1-->");
328
+ $$renderer2.push(`<span class="font-mono opacity-60"${attr("title", filePath())}>${escape_html(filePath().split("/").pop())}</span>`);
334
329
  }
335
330
  $$renderer2.push(`<!--]-->`);
336
331
  }
337
332
  );
338
333
  $$renderer2.push(`<!--]-->`);
339
334
  } else {
340
- $$renderer2.push("<!--[!-->");
335
+ $$renderer2.push("<!--[-1-->");
341
336
  $$renderer2.push(`<span class="opacity-60">${escape_html(content)}</span>`);
342
337
  }
343
338
  $$renderer2.push(`<!--]--></div>`);
344
- } else {
345
- $$renderer2.push("<!--[!-->");
346
- if (tag === "ide_selection") {
347
- $$renderer2.push("<!--[-->");
348
- $$renderer2.push(`<div class="text-xs text-purple-400 bg-purple-900/20 rounded px-2 py-1"><div class="flex items-center gap-2"><span class="opacity-60">✂️</span> `);
349
- if (filePath) {
350
- $$renderer2.push("<!--[-->");
351
- await_block(
352
- $$renderer2,
353
- checkFileExists(filePath),
354
- () => {
355
- $$renderer2.push(`<span class="font-mono">${escape_html(filePath.split("/").pop())}${escape_html(lineInfo ? `:${lineInfo}` : "")}</span>`);
356
- },
357
- (exists) => {
358
- if (exists) {
359
- $$renderer2.push("<!--[-->");
360
- $$renderer2.push(`<button class="font-mono hover:underline cursor-pointer bg-transparent border-none text-purple-400 p-0"${attr("title", filePath)}>${escape_html(filePath.split("/").pop())}${escape_html(lineInfo ? `:${lineInfo}` : "")}</button>`);
361
- } else {
362
- $$renderer2.push("<!--[!-->");
363
- $$renderer2.push(`<span class="font-mono opacity-60"${attr("title", filePath)}>${escape_html(filePath.split("/").pop())}${escape_html(lineInfo ? `:${lineInfo}` : "")}</span>`);
364
- }
365
- $$renderer2.push(`<!--]-->`);
339
+ } else if (tag === "ide_selection") {
340
+ $$renderer2.push("<!--[1-->");
341
+ $$renderer2.push(`<div class="text-xs text-purple-400 bg-purple-900/20 rounded px-2 py-1"><div class="flex items-center gap-2"><span class="opacity-60">✂️</span> `);
342
+ if (filePath()) {
343
+ $$renderer2.push("<!--[0-->");
344
+ await_block(
345
+ $$renderer2,
346
+ checkFileExists(filePath()),
347
+ () => {
348
+ $$renderer2.push(`<span class="font-mono">${escape_html(filePath().split("/").pop())}${escape_html(lineInfo() ? `:${lineInfo()}` : "")}</span>`);
349
+ },
350
+ (exists) => {
351
+ if (exists) {
352
+ $$renderer2.push("<!--[0-->");
353
+ $$renderer2.push(`<button class="font-mono hover:underline cursor-pointer bg-transparent border-none text-purple-400 p-0"${attr("title", filePath())}>${escape_html(filePath().split("/").pop())}${escape_html(lineInfo() ? `:${lineInfo()}` : "")}</button>`);
354
+ } else {
355
+ $$renderer2.push("<!--[-1-->");
356
+ $$renderer2.push(`<span class="font-mono opacity-60"${attr("title", filePath())}>${escape_html(filePath().split("/").pop())}${escape_html(lineInfo() ? `:${lineInfo()}` : "")}</span>`);
366
357
  }
367
- );
368
- $$renderer2.push(`<!--]-->`);
369
- } else {
370
- $$renderer2.push("<!--[!-->");
371
- $$renderer2.push(`<span class="font-mono">${escape_html(content.split("\n")[0].slice(0, 60))}</span>`);
372
- }
373
- $$renderer2.push(`<!--]--></div></div>`);
358
+ $$renderer2.push(`<!--]-->`);
359
+ }
360
+ );
361
+ $$renderer2.push(`<!--]-->`);
374
362
  } else {
375
- $$renderer2.push("<!--[!-->");
376
- $$renderer2.push(`<div class="text-xs text-yellow-400 bg-yellow-900/20 rounded px-2 py-1"><span class="opacity-60">⚠️</span> <span class="font-mono">&lt;${escape_html(tag)}></span> <span class="opacity-60 ml-1">${escape_html(content.slice(0, 50))}${escape_html(content.length > 50 ? "..." : "")}</span></div>`);
363
+ $$renderer2.push("<!--[-1-->");
364
+ $$renderer2.push(`<span class="font-mono">${escape_html(content.split("\n")[0].slice(0, 60))}</span>`);
377
365
  }
378
- $$renderer2.push(`<!--]-->`);
366
+ $$renderer2.push(`<!--]--></div></div>`);
367
+ } else {
368
+ $$renderer2.push("<!--[-1-->");
369
+ $$renderer2.push(`<div class="text-xs text-yellow-400 bg-yellow-900/20 rounded px-2 py-1"><span class="opacity-60">⚠️</span> <span class="font-mono">&lt;${escape_html(tag)}></span> <span class="opacity-60 ml-1">${escape_html(content.slice(0, 50))}${escape_html(content.length > 50 ? "..." : "")}</span></div>`);
379
370
  }
380
371
  $$renderer2.push(`<!--]-->`);
381
372
  });
@@ -430,7 +421,7 @@ function TooltipButton($$renderer, $$props) {
430
421
  children($$renderer);
431
422
  $$renderer.push(`<!----></button> `);
432
423
  {
433
- $$renderer.push("<!--[!-->");
424
+ $$renderer.push("<!--[-1-->");
434
425
  }
435
426
  $$renderer.push(`<!--]-->`);
436
427
  }
@@ -444,35 +435,35 @@ function MessageItem($$renderer, $$props) {
444
435
  onEditTitle,
445
436
  onSplit
446
437
  } = $$props;
447
- const msgId = msg.uuid ?? "";
448
- const isAssistant = msg.type === "assistant";
449
- const isCustomTitle = msg.type === "custom-title";
450
- const isFileSnapshot = msg.type === "file-history-snapshot";
451
- const isHuman = msg.type === "human" || msg.type === "user";
452
- const isLocalCommand = msg.type === "system" && msg.subtype === "local_command";
453
- const isQueueOperation = msg.type === "queue-operation";
454
- const isToolResult = (() => {
438
+ const msgId = derived(() => msg.uuid ?? "");
439
+ const isAssistant = derived(() => msg.type === "assistant");
440
+ const isCustomTitle = derived(() => msg.type === "custom-title");
441
+ const isFileSnapshot = derived(() => msg.type === "file-history-snapshot");
442
+ const isHuman = derived(() => msg.type === "human" || msg.type === "user");
443
+ const isLocalCommand = derived(() => msg.type === "system" && msg.subtype === "local_command");
444
+ const isQueueOperation = derived(() => msg.type === "queue-operation");
445
+ const isToolResult = derived(() => {
455
446
  if (msg.type !== "user") return false;
456
447
  const m = msg.message;
457
448
  if (!Array.isArray(m?.content)) return false;
458
449
  const first = m.content[0];
459
450
  return first?.type === "tool_result";
460
- })();
461
- const snapshotData = (() => {
462
- if (!isFileSnapshot) return null;
451
+ });
452
+ const snapshotData = derived(() => {
453
+ if (!isFileSnapshot()) return null;
463
454
  const snapshot2 = msg.snapshot;
464
455
  const backups = snapshot2?.trackedFileBackups ?? {};
465
456
  return {
466
457
  files: Object.entries(backups),
467
458
  timestamp: snapshot2?.timestamp
468
459
  };
469
- })();
470
- const commandData = (() => {
471
- if (isLocalCommand) {
460
+ });
461
+ const commandData = derived(() => {
462
+ if (isLocalCommand()) {
472
463
  const content = typeof msg.content === "string" ? msg.content : "";
473
464
  return parseCommandMessage(content);
474
465
  }
475
- if (isHuman) {
466
+ if (isHuman()) {
476
467
  const m = msg.message;
477
468
  const content = typeof m?.content === "string" ? m.content : "";
478
469
  if (content.includes("<command-name>")) {
@@ -480,14 +471,14 @@ function MessageItem($$renderer, $$props) {
480
471
  }
481
472
  }
482
473
  return null;
483
- })();
484
- const isSlashCommand = commandData !== null && !isLocalCommand;
485
- const stopHookData = parseStopHookSummary(msg);
486
- const turnDurationData = parseTurnDuration(msg);
487
- const progressData = parseProgress(msg);
474
+ });
475
+ const isSlashCommand = derived(() => commandData() !== null && !isLocalCommand());
476
+ const stopHookData = derived(() => parseStopHookSummary(msg));
477
+ const turnDurationData = derived(() => parseTurnDuration(msg));
478
+ const progressData = derived(() => parseProgress(msg));
488
479
  const FILE_TOOLS = ["Read", "Write", "Edit"];
489
- const toolUseData = (() => {
490
- if (!isAssistant) return null;
480
+ const toolUseData = derived(() => {
481
+ if (!isAssistant()) return null;
491
482
  const m = msg.message;
492
483
  if (!Array.isArray(m?.content)) return null;
493
484
  const toolUse = m.content.find((item) => typeof item === "object" && item !== null && item.type === "tool_use");
@@ -498,36 +489,36 @@ function MessageItem($$renderer, $$props) {
498
489
  // Extract file path for file tools (Read, Write, Edit)
499
490
  filePath: FILE_TOOLS.includes(toolUse.name) ? toolUse.input.file_path : null
500
491
  };
501
- })();
502
- const thinkingBlocks = (() => {
503
- if (!isAssistant) return [];
492
+ });
493
+ const thinkingBlocks = derived(() => {
494
+ if (!isAssistant()) return [];
504
495
  const m = msg.message;
505
496
  if (!Array.isArray(m?.content)) return [];
506
497
  return m.content.filter((item) => typeof item === "object" && item !== null && item.type === "thinking");
507
- })();
508
- const customTitle = msg.customTitle ?? "";
509
- const messageId = msg.uuid || msg.messageId || "";
510
- const hasContent = (() => {
511
- if (isQueueOperation) return false;
512
- if (isFileSnapshot || isLocalCommand || isCustomTitle || toolUseData) return true;
498
+ });
499
+ const customTitle = derived(() => msg.customTitle ?? "");
500
+ const messageId = derived(() => msg.uuid || msg.messageId || "");
501
+ const hasContent = derived(() => {
502
+ if (isQueueOperation()) return false;
503
+ if (isFileSnapshot() || isLocalCommand() || isCustomTitle() || toolUseData()) return true;
513
504
  const content = getMessageContent(msg);
514
505
  if (content.trim().length > 0) return true;
515
506
  if (msg.type === "user" || msg.type === "human") {
516
- const label = isToolResult ? "Tool result" : "User message";
507
+ const label = isToolResult() ? "Tool result" : "User message";
517
508
  console.warn(`${label} without content:`, snapshot(msg));
518
509
  }
519
510
  return false;
520
- })();
521
- const hasAnyContent = hasContent || thinkingBlocks.length > 0;
522
- const messageClass = (() => {
523
- if (isHuman) return "bg-gh-accent/15 border-l-3 border-l-gh-accent";
524
- if (isAssistant) return "bg-gh-green/15 border-l-3 border-l-gh-green";
525
- if (isCustomTitle) return "bg-purple-500/15 border-l-3 border-l-purple-500";
511
+ });
512
+ const hasAnyContent = derived(() => hasContent() || thinkingBlocks().length > 0);
513
+ const messageClass = derived(() => {
514
+ if (isHuman()) return "bg-gh-accent/15 border-l-3 border-l-gh-accent";
515
+ if (isAssistant()) return "bg-gh-green/15 border-l-3 border-l-gh-green";
516
+ if (isCustomTitle()) return "bg-purple-500/15 border-l-3 border-l-purple-500";
526
517
  return "bg-gh-border-subtle";
527
- })();
518
+ });
528
519
  function splitButton($$renderer3) {
529
520
  if (onSplit && !isFirst && msg.uuid) {
530
- $$renderer3.push("<!--[-->");
521
+ $$renderer3.push("<!--[0-->");
531
522
  TooltipButton($$renderer3, {
532
523
  class: "opacity-0 group-hover:opacity-100 transition-opacity p-1 rounded hover:bg-gh-accent/20 text-xs",
533
524
  onclick: () => onSplit(msg),
@@ -538,7 +529,7 @@ function MessageItem($$renderer, $$props) {
538
529
  $$slots: { default: true }
539
530
  });
540
531
  } else {
541
- $$renderer3.push("<!--[!-->");
532
+ $$renderer3.push("<!--[-1-->");
542
533
  }
543
534
  $$renderer3.push(`<!--]-->`);
544
535
  }
@@ -553,276 +544,236 @@ function MessageItem($$renderer, $$props) {
553
544
  $$slots: { default: true }
554
545
  });
555
546
  }
556
- if (isQueueOperation) {
557
- $$renderer2.push("<!--[-->");
558
- } else {
559
- $$renderer2.push("<!--[!-->");
560
- if (progressData) {
561
- $$renderer2.push("<!--[-->");
562
- $$renderer2.push(`<div${attr("data-msg-id", msgId)} class="p-2 rounded-lg bg-gh-border-subtle/30 group relative"><div class="flex justify-between items-center text-xs text-gh-text-secondary/60"><span>🔄 ${escape_html(progressData.hookName ?? progressData.type)}</span> <div class="flex items-center gap-2">`);
563
- splitButton($$renderer2);
564
- $$renderer2.push(`<!----> `);
565
- deleteButton($$renderer2);
566
- $$renderer2.push(`<!----></div></div></div>`);
547
+ if (isQueueOperation()) {
548
+ $$renderer2.push("<!--[0-->");
549
+ } else if (progressData()) {
550
+ $$renderer2.push("<!--[1-->");
551
+ $$renderer2.push(`<div${attr("data-msg-id", msgId())} class="p-2 rounded-lg bg-gh-border-subtle/30 group relative"><div class="flex justify-between items-center text-xs text-gh-text-secondary/60"><span>🔄 ${escape_html(progressData().hookName ?? progressData().type)}</span> <div class="flex items-center gap-2">`);
552
+ splitButton($$renderer2);
553
+ $$renderer2.push(`<!----> `);
554
+ deleteButton($$renderer2);
555
+ $$renderer2.push(`<!----></div></div></div>`);
556
+ } else if (turnDurationData()) {
557
+ $$renderer2.push("<!--[2-->");
558
+ $$renderer2.push(`<div${attr("data-msg-id", msgId())} class="p-2 rounded-lg bg-gh-border-subtle/50 group relative"><div class="flex justify-between items-center text-xs text-gh-text-secondary"><span class="text-gh-text-secondary/70">⏱️ ${escape_html(turnDurationData().durationFormatted)}</span> <div class="flex items-center gap-2">`);
559
+ splitButton($$renderer2);
560
+ $$renderer2.push(`<!----> `);
561
+ deleteButton($$renderer2);
562
+ $$renderer2.push(`<!----></div></div></div>`);
563
+ } else if (stopHookData()) {
564
+ $$renderer2.push("<!--[3-->");
565
+ $$renderer2.push(`<div${attr("data-msg-id", msgId())} class="p-3 rounded-lg bg-emerald-500/10 border-l-3 border-l-emerald-500 group relative"><div class="flex justify-between items-center text-xs text-gh-text-secondary"><span class="font-semibold text-emerald-400">🪝 Hook (${escape_html(stopHookData().hookCount)})</span> <div class="flex items-center gap-2"><span>${escape_html(formatDate(msg.timestamp))}</span> `);
566
+ splitButton($$renderer2);
567
+ $$renderer2.push(`<!----> `);
568
+ deleteButton($$renderer2);
569
+ $$renderer2.push(`<!----></div></div> `);
570
+ if (stopHookData().hookInfos.length > 0) {
571
+ $$renderer2.push("<!--[0-->");
572
+ $$renderer2.push(`<div class="mt-1 text-xs text-gh-text-secondary"><!--[-->`);
573
+ const each_array = ensure_array_like(stopHookData().hookInfos);
574
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
575
+ let hook = each_array[$$index];
576
+ $$renderer2.push(`<span class="font-mono">${escape_html(hook.command)}</span>`);
577
+ }
578
+ $$renderer2.push(`<!--]--></div>`);
567
579
  } else {
568
- $$renderer2.push("<!--[!-->");
569
- if (turnDurationData) {
570
- $$renderer2.push("<!--[-->");
571
- $$renderer2.push(`<div${attr("data-msg-id", msgId)} class="p-2 rounded-lg bg-gh-border-subtle/50 group relative"><div class="flex justify-between items-center text-xs text-gh-text-secondary"><span class="text-gh-text-secondary/70">⏱️ ${escape_html(turnDurationData.durationFormatted)}</span> <div class="flex items-center gap-2">`);
572
- splitButton($$renderer2);
573
- $$renderer2.push(`<!----> `);
574
- deleteButton($$renderer2);
575
- $$renderer2.push(`<!----></div></div></div>`);
580
+ $$renderer2.push("<!--[-1-->");
581
+ }
582
+ $$renderer2.push(`<!--]--> `);
583
+ if (stopHookData().hookErrors.length > 0) {
584
+ $$renderer2.push("<!--[0-->");
585
+ $$renderer2.push(`<div class="mt-1 text-xs text-red-400"><!--[-->`);
586
+ const each_array_1 = ensure_array_like(stopHookData().hookErrors);
587
+ for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
588
+ let error = each_array_1[$$index_1];
589
+ $$renderer2.push(`<p>${escape_html(error)}</p>`);
590
+ }
591
+ $$renderer2.push(`<!--]--></div>`);
592
+ } else {
593
+ $$renderer2.push("<!--[-1-->");
594
+ }
595
+ $$renderer2.push(`<!--]--></div>`);
596
+ } else if (isFileSnapshot() && snapshotData()) {
597
+ $$renderer2.push("<!--[4-->");
598
+ $$renderer2.push(`<div${attr("data-msg-id", msgId())} class="p-4 rounded-lg bg-amber-500/10 border-l-3 border-l-amber-500 group relative"${attr("title", `messageId: ${stringify(messageId())}`)}><div class="flex justify-between mb-2 text-xs text-gh-text-secondary"><span class="uppercase font-semibold text-amber-400">📁 File Backups (${escape_html(snapshotData().files.length)})</span> <div class="flex items-center gap-2"><span>${escape_html(formatDate(snapshotData().timestamp))}</span> `);
599
+ splitButton($$renderer2);
600
+ $$renderer2.push(`<!----> `);
601
+ deleteButton($$renderer2);
602
+ $$renderer2.push(`<!----></div></div> <ul class="space-y-1"><!--[-->`);
603
+ const each_array_2 = ensure_array_like(snapshotData().files);
604
+ for (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) {
605
+ let [filePath, info] = each_array_2[$$index_2];
606
+ const hasBackup = !!(info.backupFileName && sessionId);
607
+ $$renderer2.push(`<li class="font-mono text-xs truncate"${attr("title", maskHomePaths(filePath))}>`);
608
+ if (hasBackup) {
609
+ $$renderer2.push("<!--[0-->");
610
+ $$renderer2.push(`<button class="text-gh-accent hover:underline cursor-pointer bg-transparent border-none p-0" title="Open backup in VS Code">${escape_html(maskHomePaths(filePath))}</button>`);
576
611
  } else {
577
- $$renderer2.push("<!--[!-->");
578
- if (stopHookData) {
579
- $$renderer2.push("<!--[-->");
580
- $$renderer2.push(`<div${attr("data-msg-id", msgId)} class="p-3 rounded-lg bg-emerald-500/10 border-l-3 border-l-emerald-500 group relative"><div class="flex justify-between items-center text-xs text-gh-text-secondary"><span class="font-semibold text-emerald-400">🪝 Hook (${escape_html(stopHookData.hookCount)})</span> <div class="flex items-center gap-2"><span>${escape_html(formatDate(msg.timestamp))}</span> `);
581
- splitButton($$renderer2);
582
- $$renderer2.push(`<!----> `);
583
- deleteButton($$renderer2);
584
- $$renderer2.push(`<!----></div></div> `);
585
- if (stopHookData.hookInfos.length > 0) {
586
- $$renderer2.push("<!--[-->");
587
- $$renderer2.push(`<div class="mt-1 text-xs text-gh-text-secondary"><!--[-->`);
588
- const each_array = ensure_array_like(stopHookData.hookInfos);
589
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
590
- let hook = each_array[$$index];
591
- $$renderer2.push(`<span class="font-mono">${escape_html(hook.command)}</span>`);
592
- }
593
- $$renderer2.push(`<!--]--></div>`);
594
- } else {
595
- $$renderer2.push("<!--[!-->");
596
- }
597
- $$renderer2.push(`<!--]--> `);
598
- if (stopHookData.hookErrors.length > 0) {
599
- $$renderer2.push("<!--[-->");
600
- $$renderer2.push(`<div class="mt-1 text-xs text-red-400"><!--[-->`);
601
- const each_array_1 = ensure_array_like(stopHookData.hookErrors);
602
- for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
603
- let error = each_array_1[$$index_1];
604
- $$renderer2.push(`<p>${escape_html(error)}</p>`);
605
- }
606
- $$renderer2.push(`<!--]--></div>`);
612
+ $$renderer2.push("<!--[-1-->");
613
+ $$renderer2.push(`<span class="text-gh-text-secondary">${escape_html(maskHomePaths(filePath))}</span>`);
614
+ }
615
+ $$renderer2.push(`<!--]--></li>`);
616
+ }
617
+ $$renderer2.push(`<!--]--></ul></div>`);
618
+ } else if (isSlashCommand() && commandData()) {
619
+ $$renderer2.push("<!--[5-->");
620
+ $$renderer2.push(`<div${attr("data-msg-id", msgId())} class="p-3 rounded-lg bg-gh-accent/15 border-l-3 border-l-gh-accent group relative"><div class="flex justify-between items-center text-xs text-gh-text-secondary"><span class="font-semibold text-gh-accent">${escape_html(commandData().name || "Command")}</span> <div class="flex items-center gap-2"><span>${escape_html(formatDate(msg.timestamp))}</span> `);
621
+ splitButton($$renderer2);
622
+ $$renderer2.push(`<!----> `);
623
+ deleteButton($$renderer2);
624
+ $$renderer2.push(`<!----></div></div></div>`);
625
+ } else if (isLocalCommand() && commandData()) {
626
+ $$renderer2.push("<!--[6-->");
627
+ $$renderer2.push(`<div${attr("data-msg-id", msgId())} class="p-3 rounded-lg bg-cyan-500/10 border-l-3 border-l-cyan-500 group relative"><div class="flex justify-between items-center text-xs text-gh-text-secondary"><span class="font-semibold text-cyan-400">⚡ ${escape_html(commandData().name || "Command")}</span> <div class="flex items-center gap-2"><span>${escape_html(formatDate(msg.timestamp))}</span> `);
628
+ splitButton($$renderer2);
629
+ $$renderer2.push(`<!----> `);
630
+ deleteButton($$renderer2);
631
+ $$renderer2.push(`<!----></div></div> `);
632
+ if (commandData().message && commandData().message !== commandData().name?.slice(1)) {
633
+ $$renderer2.push("<!--[0-->");
634
+ $$renderer2.push(`<p class="mt-1 text-sm text-gh-text-secondary">${escape_html(commandData().message)}</p>`);
635
+ } else {
636
+ $$renderer2.push("<!--[-1-->");
637
+ }
638
+ $$renderer2.push(`<!--]--></div>`);
639
+ } else if (toolUseData()) {
640
+ $$renderer2.push("<!--[7-->");
641
+ $$renderer2.push(`<div${attr("data-msg-id", msgId())} class="p-3 rounded-lg bg-violet-500/10 border-l-3 border-l-violet-500 group relative"><div class="flex justify-between items-center text-xs text-gh-text-secondary"><span class="font-semibold text-violet-400">🔧 ${escape_html(toolUseData().name)}</span> <div class="flex items-center gap-2"><span>${escape_html(formatDate(msg.timestamp))}</span> `);
642
+ splitButton($$renderer2);
643
+ $$renderer2.push(`<!----> `);
644
+ deleteButton($$renderer2);
645
+ $$renderer2.push(`<!----></div></div> `);
646
+ if (toolUseData().filePath) {
647
+ $$renderer2.push("<!--[0-->");
648
+ await_block(
649
+ $$renderer2,
650
+ checkFileExists(toolUseData().filePath),
651
+ () => {
652
+ $$renderer2.push(`<span class="mt-1 text-sm text-gh-text-secondary font-mono">${escape_html(toolUseData().filePath.split("/").pop())}</span>`);
653
+ },
654
+ (exists) => {
655
+ if (exists) {
656
+ $$renderer2.push("<!--[0-->");
657
+ $$renderer2.push(`<button class="mt-1 text-sm text-gh-accent hover:underline cursor-pointer bg-transparent border-none p-0 font-mono truncate block max-w-full text-left"${attr("title", toolUseData().filePath)}>${escape_html(toolUseData().filePath.split("/").pop())}</button>`);
607
658
  } else {
608
- $$renderer2.push("<!--[!-->");
659
+ $$renderer2.push("<!--[-1-->");
660
+ $$renderer2.push(`<span class="mt-1 text-sm text-gh-text-secondary font-mono"${attr("title", toolUseData().filePath)}>${escape_html(toolUseData().filePath.split("/").pop())}</span>`);
609
661
  }
610
- $$renderer2.push(`<!--]--></div>`);
662
+ $$renderer2.push(`<!--]-->`);
663
+ }
664
+ );
665
+ $$renderer2.push(`<!--]-->`);
666
+ } else if (toolUseData().input.command) {
667
+ $$renderer2.push("<!--[1-->");
668
+ if (toolUseData().input.description) {
669
+ $$renderer2.push("<!--[0-->");
670
+ $$renderer2.push(`<p class="mt-1 text-sm text-gh-text-secondary">${escape_html(toolUseData().input.description)}</p>`);
671
+ } else {
672
+ $$renderer2.push("<!--[-1-->");
673
+ }
674
+ $$renderer2.push(`<!--]--> `);
675
+ ExpandableContent($$renderer2, {
676
+ content: String(toolUseData().input.command),
677
+ lang: "sh",
678
+ maxLines: 3
679
+ });
680
+ $$renderer2.push(`<!---->`);
681
+ } else {
682
+ $$renderer2.push("<!--[-1-->");
683
+ const { path: _path, ...input } = toolUseData().input;
684
+ const keys = Object.keys(input);
685
+ if (keys.length === 1) {
686
+ $$renderer2.push("<!--[0-->");
687
+ const key = keys[0];
688
+ const value = input[key];
689
+ $$renderer2.push(`${escape_html((() => {
690
+ console.info(`${key} =`, value);
691
+ return "";
692
+ })())} `);
693
+ if (key === "todos" && Array.isArray(value)) {
694
+ $$renderer2.push("<!--[0-->");
695
+ TodoItem($$renderer2, { todos: value });
611
696
  } else {
612
- $$renderer2.push("<!--[!-->");
613
- if (isFileSnapshot && snapshotData) {
614
- $$renderer2.push("<!--[-->");
615
- $$renderer2.push(`<div${attr("data-msg-id", msgId)} class="p-4 rounded-lg bg-amber-500/10 border-l-3 border-l-amber-500 group relative"${attr("title", `messageId: ${stringify(messageId)}`)}><div class="flex justify-between mb-2 text-xs text-gh-text-secondary"><span class="uppercase font-semibold text-amber-400">📁 File Backups (${escape_html(snapshotData.files.length)})</span> <div class="flex items-center gap-2"><span>${escape_html(formatDate(snapshotData.timestamp))}</span> `);
616
- splitButton($$renderer2);
617
- $$renderer2.push(`<!----> `);
618
- deleteButton($$renderer2);
619
- $$renderer2.push(`<!----></div></div> <ul class="space-y-1"><!--[-->`);
620
- const each_array_2 = ensure_array_like(snapshotData.files);
621
- for (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) {
622
- let [filePath, info] = each_array_2[$$index_2];
623
- const hasBackup = !!(info.backupFileName && sessionId);
624
- $$renderer2.push(`<li class="font-mono text-xs truncate"${attr("title", maskHomePaths(filePath))}>`);
625
- if (hasBackup) {
626
- $$renderer2.push("<!--[-->");
627
- $$renderer2.push(`<button class="text-gh-accent hover:underline cursor-pointer bg-transparent border-none p-0" title="Open backup in VS Code">${escape_html(maskHomePaths(filePath))}</button>`);
628
- } else {
629
- $$renderer2.push("<!--[!-->");
630
- $$renderer2.push(`<span class="text-gh-text-secondary">${escape_html(maskHomePaths(filePath))}</span>`);
631
- }
632
- $$renderer2.push(`<!--]--></li>`);
633
- }
634
- $$renderer2.push(`<!--]--></ul></div>`);
697
+ $$renderer2.push("<!--[-1-->");
698
+ ExpandableContent($$renderer2, {
699
+ content: `${key} = ${JSON.stringify(value, null, 2)}`,
700
+ lang: "js",
701
+ maxLines: 1
702
+ });
703
+ }
704
+ $$renderer2.push(`<!--]-->`);
705
+ } else {
706
+ $$renderer2.push("<!--[-1-->");
707
+ ExpandableContent($$renderer2, {
708
+ content: JSON.stringify(input, null, 2),
709
+ lang: "json",
710
+ maxLines: 6
711
+ });
712
+ }
713
+ $$renderer2.push(`<!--]-->`);
714
+ }
715
+ $$renderer2.push(`<!--]--></div>`);
716
+ } else if (hasAnyContent()) {
717
+ $$renderer2.push("<!--[8-->");
718
+ $$renderer2.push(`<div${attr("data-msg-id", msgId())}${attr_class(`p-4 rounded-lg group relative ${stringify(messageClass())} flex flex-col ${stringify(hasAnyContent() ? "gap-2" : "")}`)}><div class="flex justify-between text-xs text-gh-text-secondary"><span class="uppercase font-semibold">${escape_html(isToolResult() ? "OUT" : msg.type)}</span> <div class="flex items-center gap-2"><span class="group-hover:hidden">${escape_html(formatDate(msg.timestamp))}</span> <span class="hidden group-hover:inline font-mono text-gh-text-secondary/70">${escape_html(messageId())}</span> `);
719
+ if (isCustomTitle() && onEditTitle) {
720
+ $$renderer2.push("<!--[0-->");
721
+ TooltipButton($$renderer2, {
722
+ class: "opacity-0 group-hover:opacity-100 transition-opacity p-1 rounded hover:bg-gh-border text-xs",
723
+ onclick: () => onEditTitle(msg),
724
+ title: "Edit title",
725
+ children: ($$renderer3) => {
726
+ $$renderer3.push(`<!---->✏️`);
727
+ },
728
+ $$slots: { default: true }
729
+ });
730
+ } else {
731
+ $$renderer2.push("<!--[-1-->");
732
+ }
733
+ $$renderer2.push(`<!--]--> `);
734
+ splitButton($$renderer2);
735
+ $$renderer2.push(`<!----> `);
736
+ deleteButton($$renderer2);
737
+ $$renderer2.push(`<!----></div></div> `);
738
+ if (thinkingBlocks().length > 0) {
739
+ $$renderer2.push("<!--[0-->");
740
+ $$renderer2.push(`<div class="message-content text-sm"><!--[-->`);
741
+ const each_array_3 = ensure_array_like(thinkingBlocks());
742
+ for (let i = 0, $$length = each_array_3.length; i < $$length; i++) {
743
+ let block = each_array_3[i];
744
+ $$renderer2.push(`<details class="text-gh-text-secondary"><summary class="cursor-pointer text-xs italic hover:text-gh-text select-none">💭 Thinking ${escape_html(thinkingBlocks().length > 1 ? `(${i + 1}/${thinkingBlocks().length})` : "")}</summary> <p class="mt-1 whitespace-pre-wrap italic opacity-70">${escape_html(block.thinking)}</p></details>`);
745
+ }
746
+ $$renderer2.push(`<!--]--></div>`);
747
+ } else {
748
+ $$renderer2.push("<!--[-1-->");
749
+ }
750
+ $$renderer2.push(`<!--]--> `);
751
+ if (hasContent()) {
752
+ $$renderer2.push("<!--[0-->");
753
+ $$renderer2.push(`<div class="message-content text-sm">`);
754
+ if (isCustomTitle()) {
755
+ $$renderer2.push("<!--[0-->");
756
+ $$renderer2.push(`<span class="font-semibold text-purple-400">${escape_html(customTitle())}</span>`);
757
+ } else {
758
+ $$renderer2.push("<!--[-1-->");
759
+ const msgContent = getMessageContent(msg);
760
+ const segments = parseIdeTags(msgContent);
761
+ $$renderer2.push(`<!--[-->`);
762
+ const each_array_4 = ensure_array_like(segments);
763
+ for (let $$index_4 = 0, $$length = each_array_4.length; $$index_4 < $$length; $$index_4++) {
764
+ let segment = each_array_4[$$index_4];
765
+ if (segment.type === "ide_tag" && segment.tag) {
766
+ $$renderer2.push("<!--[0-->");
767
+ IdeTag($$renderer2, { tag: segment.tag, content: segment.content });
635
768
  } else {
636
- $$renderer2.push("<!--[!-->");
637
- if (isSlashCommand && commandData) {
638
- $$renderer2.push("<!--[-->");
639
- $$renderer2.push(`<div${attr("data-msg-id", msgId)} class="p-3 rounded-lg bg-gh-accent/15 border-l-3 border-l-gh-accent group relative"><div class="flex justify-between items-center text-xs text-gh-text-secondary"><span class="font-semibold text-gh-accent">${escape_html(commandData.name || "Command")}</span> <div class="flex items-center gap-2"><span>${escape_html(formatDate(msg.timestamp))}</span> `);
640
- splitButton($$renderer2);
641
- $$renderer2.push(`<!----> `);
642
- deleteButton($$renderer2);
643
- $$renderer2.push(`<!----></div></div></div>`);
769
+ $$renderer2.push("<!--[-1-->");
770
+ const textLines = segment.content.split("\n");
771
+ if (textLines.length > 10) {
772
+ $$renderer2.push("<!--[0-->");
773
+ ExpandableContent($$renderer2, { content: segment.content, maxLines: 10 });
644
774
  } else {
645
- $$renderer2.push("<!--[!-->");
646
- if (isLocalCommand && commandData) {
647
- $$renderer2.push("<!--[-->");
648
- $$renderer2.push(`<div${attr("data-msg-id", msgId)} class="p-3 rounded-lg bg-cyan-500/10 border-l-3 border-l-cyan-500 group relative"><div class="flex justify-between items-center text-xs text-gh-text-secondary"><span class="font-semibold text-cyan-400">⚡ ${escape_html(commandData.name || "Command")}</span> <div class="flex items-center gap-2"><span>${escape_html(formatDate(msg.timestamp))}</span> `);
649
- splitButton($$renderer2);
650
- $$renderer2.push(`<!----> `);
651
- deleteButton($$renderer2);
652
- $$renderer2.push(`<!----></div></div> `);
653
- if (commandData.message && commandData.message !== commandData.name?.slice(1)) {
654
- $$renderer2.push("<!--[-->");
655
- $$renderer2.push(`<p class="mt-1 text-sm text-gh-text-secondary">${escape_html(commandData.message)}</p>`);
656
- } else {
657
- $$renderer2.push("<!--[!-->");
658
- }
659
- $$renderer2.push(`<!--]--></div>`);
660
- } else {
661
- $$renderer2.push("<!--[!-->");
662
- if (toolUseData) {
663
- $$renderer2.push("<!--[-->");
664
- $$renderer2.push(`<div${attr("data-msg-id", msgId)} class="p-3 rounded-lg bg-violet-500/10 border-l-3 border-l-violet-500 group relative"><div class="flex justify-between items-center text-xs text-gh-text-secondary"><span class="font-semibold text-violet-400">🔧 ${escape_html(toolUseData.name)}</span> <div class="flex items-center gap-2"><span>${escape_html(formatDate(msg.timestamp))}</span> `);
665
- splitButton($$renderer2);
666
- $$renderer2.push(`<!----> `);
667
- deleteButton($$renderer2);
668
- $$renderer2.push(`<!----></div></div> `);
669
- if (toolUseData.filePath) {
670
- $$renderer2.push("<!--[-->");
671
- await_block(
672
- $$renderer2,
673
- checkFileExists(toolUseData.filePath),
674
- () => {
675
- $$renderer2.push(`<span class="mt-1 text-sm text-gh-text-secondary font-mono">${escape_html(toolUseData.filePath.split("/").pop())}</span>`);
676
- },
677
- (exists) => {
678
- if (exists) {
679
- $$renderer2.push("<!--[-->");
680
- $$renderer2.push(`<button class="mt-1 text-sm text-gh-accent hover:underline cursor-pointer bg-transparent border-none p-0 font-mono truncate block max-w-full text-left"${attr("title", toolUseData.filePath)}>${escape_html(toolUseData.filePath.split("/").pop())}</button>`);
681
- } else {
682
- $$renderer2.push("<!--[!-->");
683
- $$renderer2.push(`<span class="mt-1 text-sm text-gh-text-secondary font-mono"${attr("title", toolUseData.filePath)}>${escape_html(toolUseData.filePath.split("/").pop())}</span>`);
684
- }
685
- $$renderer2.push(`<!--]-->`);
686
- }
687
- );
688
- $$renderer2.push(`<!--]-->`);
689
- } else {
690
- $$renderer2.push("<!--[!-->");
691
- if (toolUseData.input.command) {
692
- $$renderer2.push("<!--[-->");
693
- if (toolUseData.input.description) {
694
- $$renderer2.push("<!--[-->");
695
- $$renderer2.push(`<p class="mt-1 text-sm text-gh-text-secondary">${escape_html(toolUseData.input.description)}</p>`);
696
- } else {
697
- $$renderer2.push("<!--[!-->");
698
- }
699
- $$renderer2.push(`<!--]--> `);
700
- ExpandableContent($$renderer2, {
701
- content: String(toolUseData.input.command),
702
- lang: "sh",
703
- maxLines: 3
704
- });
705
- $$renderer2.push(`<!---->`);
706
- } else {
707
- $$renderer2.push("<!--[!-->");
708
- const { path: _path, ...input } = toolUseData.input;
709
- const keys = Object.keys(input);
710
- if (keys.length === 1) {
711
- $$renderer2.push("<!--[-->");
712
- const key = keys[0];
713
- const value = input[key];
714
- $$renderer2.push(`${escape_html((() => {
715
- console.info(`${key} =`, value);
716
- return "";
717
- })())} `);
718
- if (key === "todos" && Array.isArray(value)) {
719
- $$renderer2.push("<!--[-->");
720
- TodoItem($$renderer2, { todos: value });
721
- } else {
722
- $$renderer2.push("<!--[!-->");
723
- ExpandableContent($$renderer2, {
724
- content: `${key} = ${JSON.stringify(value, null, 2)}`,
725
- lang: "js",
726
- maxLines: 1
727
- });
728
- }
729
- $$renderer2.push(`<!--]-->`);
730
- } else {
731
- $$renderer2.push("<!--[!-->");
732
- ExpandableContent($$renderer2, {
733
- content: JSON.stringify(input, null, 2),
734
- lang: "json",
735
- maxLines: 6
736
- });
737
- }
738
- $$renderer2.push(`<!--]-->`);
739
- }
740
- $$renderer2.push(`<!--]-->`);
741
- }
742
- $$renderer2.push(`<!--]--></div>`);
743
- } else {
744
- $$renderer2.push("<!--[!-->");
745
- if (hasAnyContent) {
746
- $$renderer2.push("<!--[-->");
747
- $$renderer2.push(`<div${attr("data-msg-id", msgId)}${attr_class(`p-4 rounded-lg group relative ${stringify(messageClass)} flex flex-col ${stringify(hasAnyContent ? "gap-2" : "")}`)}><div class="flex justify-between text-xs text-gh-text-secondary"><span class="uppercase font-semibold">${escape_html(isToolResult ? "OUT" : msg.type)}</span> <div class="flex items-center gap-2"><span class="group-hover:hidden">${escape_html(formatDate(msg.timestamp))}</span> <span class="hidden group-hover:inline font-mono text-gh-text-secondary/70">${escape_html(messageId)}</span> `);
748
- if (isCustomTitle && onEditTitle) {
749
- $$renderer2.push("<!--[-->");
750
- TooltipButton($$renderer2, {
751
- class: "opacity-0 group-hover:opacity-100 transition-opacity p-1 rounded hover:bg-gh-border text-xs",
752
- onclick: () => onEditTitle(msg),
753
- title: "Edit title",
754
- children: ($$renderer3) => {
755
- $$renderer3.push(`<!---->✏️`);
756
- },
757
- $$slots: { default: true }
758
- });
759
- } else {
760
- $$renderer2.push("<!--[!-->");
761
- }
762
- $$renderer2.push(`<!--]--> `);
763
- splitButton($$renderer2);
764
- $$renderer2.push(`<!----> `);
765
- deleteButton($$renderer2);
766
- $$renderer2.push(`<!----></div></div> `);
767
- if (thinkingBlocks.length > 0) {
768
- $$renderer2.push("<!--[-->");
769
- $$renderer2.push(`<div class="message-content text-sm"><!--[-->`);
770
- const each_array_3 = ensure_array_like(thinkingBlocks);
771
- for (let i = 0, $$length = each_array_3.length; i < $$length; i++) {
772
- let block = each_array_3[i];
773
- $$renderer2.push(`<details class="text-gh-text-secondary"><summary class="cursor-pointer text-xs italic hover:text-gh-text select-none">💭 Thinking ${escape_html(thinkingBlocks.length > 1 ? `(${i + 1}/${thinkingBlocks.length})` : "")}</summary> <p class="mt-1 whitespace-pre-wrap italic opacity-70">${escape_html(block.thinking)}</p></details>`);
774
- }
775
- $$renderer2.push(`<!--]--></div>`);
776
- } else {
777
- $$renderer2.push("<!--[!-->");
778
- }
779
- $$renderer2.push(`<!--]--> `);
780
- if (hasContent) {
781
- $$renderer2.push("<!--[-->");
782
- $$renderer2.push(`<div class="message-content text-sm">`);
783
- if (isCustomTitle) {
784
- $$renderer2.push("<!--[-->");
785
- $$renderer2.push(`<span class="font-semibold text-purple-400">${escape_html(customTitle)}</span>`);
786
- } else {
787
- $$renderer2.push("<!--[!-->");
788
- const msgContent = getMessageContent(msg);
789
- const segments = parseIdeTags(msgContent);
790
- $$renderer2.push(`<!--[-->`);
791
- const each_array_4 = ensure_array_like(segments);
792
- for (let $$index_4 = 0, $$length = each_array_4.length; $$index_4 < $$length; $$index_4++) {
793
- let segment = each_array_4[$$index_4];
794
- if (segment.type === "ide_tag" && segment.tag) {
795
- $$renderer2.push("<!--[-->");
796
- IdeTag($$renderer2, { tag: segment.tag, content: segment.content });
797
- } else {
798
- $$renderer2.push("<!--[!-->");
799
- const textLines = segment.content.split("\n");
800
- if (textLines.length > 10) {
801
- $$renderer2.push("<!--[-->");
802
- ExpandableContent($$renderer2, { content: segment.content, maxLines: 10 });
803
- } else {
804
- $$renderer2.push("<!--[!-->");
805
- $$renderer2.push(`<p class="whitespace-pre-wrap">${escape_html(segment.content)}</p>`);
806
- }
807
- $$renderer2.push(`<!--]-->`);
808
- }
809
- $$renderer2.push(`<!--]-->`);
810
- }
811
- $$renderer2.push(`<!--]-->`);
812
- }
813
- $$renderer2.push(`<!--]--></div>`);
814
- } else {
815
- $$renderer2.push("<!--[!-->");
816
- }
817
- $$renderer2.push(`<!--]--></div>`);
818
- } else {
819
- $$renderer2.push("<!--[!-->");
820
- }
821
- $$renderer2.push(`<!--]-->`);
822
- }
823
- $$renderer2.push(`<!--]-->`);
824
- }
825
- $$renderer2.push(`<!--]-->`);
775
+ $$renderer2.push("<!--[-1-->");
776
+ $$renderer2.push(`<p class="whitespace-pre-wrap">${escape_html(segment.content)}</p>`);
826
777
  }
827
778
  $$renderer2.push(`<!--]-->`);
828
779
  }
@@ -830,9 +781,13 @@ function MessageItem($$renderer, $$props) {
830
781
  }
831
782
  $$renderer2.push(`<!--]-->`);
832
783
  }
833
- $$renderer2.push(`<!--]-->`);
784
+ $$renderer2.push(`<!--]--></div>`);
785
+ } else {
786
+ $$renderer2.push("<!--[-1-->");
834
787
  }
835
- $$renderer2.push(`<!--]-->`);
788
+ $$renderer2.push(`<!--]--></div>`);
789
+ } else {
790
+ $$renderer2.push("<!--[-1-->");
836
791
  }
837
792
  $$renderer2.push(`<!--]-->`);
838
793
  });
@@ -848,7 +803,7 @@ function MessageList($$renderer, $$props) {
848
803
  enableScroll = true,
849
804
  fullWidth = false
850
805
  } = $$props;
851
- const firstMeaningfulIndex = messages.findIndex((m) => m.type === "user" || m.type === "assistant" || m.type === "human");
806
+ const firstMeaningfulIndex = derived(() => messages.findIndex((m) => m.type === "user" || m.type === "assistant" || m.type === "human"));
852
807
  $$renderer2.push(`<section${attr_class(`bg-gh-bg-secondary overflow-hidden flex flex-col ${stringify(fullWidth ? "" : "border border-gh-border rounded-lg")}`)}><div${attr_class(`${stringify(enableScroll ? "overflow-y-auto" : "")} flex-1 p-4 flex flex-col gap-4`)}><!--[-->`);
853
808
  const each_array = ensure_array_like(messages);
854
809
  for (let i = 0, $$length = each_array.length; i < $$length; i++) {
@@ -856,7 +811,7 @@ function MessageList($$renderer, $$props) {
856
811
  MessageItem($$renderer2, {
857
812
  msg,
858
813
  sessionId,
859
- isFirst: i === 0 || i === firstMeaningfulIndex,
814
+ isFirst: i === 0 || i === firstMeaningfulIndex(),
860
815
  onDelete: onDeleteMessage,
861
816
  onEditTitle,
862
817
  onSplit: onSplitSession
@@ -872,7 +827,7 @@ function FloatingTooltip($$renderer, $$props) {
872
827
  children($$renderer2);
873
828
  $$renderer2.push(`<!----></div> `);
874
829
  {
875
- $$renderer2.push("<!--[!-->");
830
+ $$renderer2.push("<!--[-1-->");
876
831
  }
877
832
  $$renderer2.push(`<!--]-->`);
878
833
  });
@@ -880,7 +835,7 @@ function FloatingTooltip($$renderer, $$props) {
880
835
  function CommandTitle($$renderer, $$props) {
881
836
  $$renderer.component(($$renderer2) => {
882
837
  let { title, class: className = "" } = $$props;
883
- const parsed = () => {
838
+ const parsed = derived(() => () => {
884
839
  if (!title.startsWith("/")) return null;
885
840
  const spaceIndex = title.indexOf(" ");
886
841
  if (spaceIndex === -1) return { command: title, args: "" };
@@ -888,19 +843,19 @@ function CommandTitle($$renderer, $$props) {
888
843
  command: title.slice(0, spaceIndex),
889
844
  args: title.slice(spaceIndex + 1)
890
845
  };
891
- };
892
- if (parsed()) {
893
- $$renderer2.push("<!--[-->");
894
- $$renderer2.push(`<span${attr_class(clsx(className))}><span class="text-gh-accent">${escape_html(parsed().command)}</span>`);
895
- if (parsed().args) {
896
- $$renderer2.push("<!--[-->");
897
- $$renderer2.push(` <span class="text-gh-text-secondary">${escape_html(parsed().args)}</span>`);
846
+ });
847
+ if (parsed()()) {
848
+ $$renderer2.push("<!--[0-->");
849
+ $$renderer2.push(`<span${attr_class(clsx(className))}><span class="text-gh-accent">${escape_html(parsed()().command)}</span>`);
850
+ if (parsed()().args) {
851
+ $$renderer2.push("<!--[0-->");
852
+ $$renderer2.push(` <span class="text-gh-text-secondary">${escape_html(parsed()().args)}</span>`);
898
853
  } else {
899
- $$renderer2.push("<!--[!-->");
854
+ $$renderer2.push("<!--[-1-->");
900
855
  }
901
856
  $$renderer2.push(`<!--]--></span>`);
902
857
  } else {
903
- $$renderer2.push("<!--[!-->");
858
+ $$renderer2.push("<!--[-1-->");
904
859
  $$renderer2.push(`<span${attr_class(clsx(className))}>${escape_html(title)}</span>`);
905
860
  }
906
861
  $$renderer2.push(`<!--]-->`);
@@ -974,14 +929,14 @@ function ProjectTree($$renderer, $$props) {
974
929
  }
975
930
  return tooltip;
976
931
  };
977
- const sortedProjects = sortProjects(projects, {
932
+ const sortedProjects = derived(() => sortProjects(projects, {
978
933
  currentProjectName: store_get($$store_subs ??= {}, "$appConfig", appConfig).currentProjectName,
979
934
  homeDir: store_get($$store_subs ??= {}, "$appConfig", appConfig).homeDir
980
- });
935
+ }));
981
936
  let expandedSessions = selectedSession ? /* @__PURE__ */ new Set([selectedSession.id]) : /* @__PURE__ */ new Set();
982
937
  let draggedSession = null;
983
938
  let dropTargetProject = null;
984
- $$renderer2.push(`<aside class="bg-gh-bg-secondary border border-gh-border rounded-lg overflow-hidden flex flex-col"><div class="p-4 border-b border-gh-border bg-gh-bg"><h2 class="text-base font-semibold mb-2">Projects (${escape_html(sortedProjects.length)})</h2> <div class="flex items-center gap-2 text-sm"><span class="text-gh-text-secondary">Sort:</span> `);
939
+ $$renderer2.push(`<aside class="bg-gh-bg-secondary border border-gh-border rounded-lg overflow-hidden flex flex-col"><div class="p-4 border-b border-gh-border bg-gh-bg"><h2 class="text-base font-semibold mb-2">Projects (${escape_html(sortedProjects().length)})</h2> <div class="flex items-center gap-2 text-sm"><span class="text-gh-text-secondary">Sort:</span> `);
985
940
  $$renderer2.select(
986
941
  {
987
942
  class: "bg-gh-bg-secondary border border-gh-border rounded px-2 py-1 text-sm text-gh-text cursor-pointer hover:border-gh-accent focus:border-gh-accent focus:outline-none",
@@ -1001,19 +956,19 @@ function ProjectTree($$renderer, $$props) {
1001
956
  }
1002
957
  );
1003
958
  $$renderer2.push(` <button class="bg-gh-bg-secondary border border-gh-border rounded px-2 py-1 text-sm cursor-pointer hover:border-gh-accent hover:bg-gh-border-subtle"${attr("title", sortOrder === "desc" ? "Descending (newest first)" : "Ascending (oldest first)")}>${escape_html(sortOrder === "desc" ? "↓" : "↑")}</button></div></div> <ul class="overflow-y-auto flex-1"><!--[-->`);
1004
- const each_array_1 = ensure_array_like(sortedProjects);
959
+ const each_array_1 = ensure_array_like(sortedProjects());
1005
960
  for (let $$index_5 = 0, $$length = each_array_1.length; $$index_5 < $$length; $$index_5++) {
1006
961
  let project = each_array_1[$$index_5];
1007
962
  const isDropTarget = dropTargetProject === project.name;
1008
963
  $$renderer2.push(`<li class="border-b border-gh-border-subtle"><button${attr_class(`w-full py-3 px-4 bg-transparent border-none text-gh-text cursor-pointer text-left flex items-center gap-2 font-medium hover:bg-gh-border-subtle ${stringify(expandedProjects.has(project.name) ? "bg-gh-accent/10" : "")} ${stringify(isDropTarget ? "bg-gh-green/20 ring-2 ring-gh-green ring-inset" : "")}`)}><span class="text-xs w-3 text-gh-text-secondary">${escape_html(expandedProjects.has(project.name) ? "▼" : "▶")}</span> <span class="flex-1 overflow-hidden text-ellipsis whitespace-nowrap"${attr("title", project.displayName)}>${escape_html(formatProjectName(project.displayName))}</span> <span class="bg-gh-border px-2 py-0.5 rounded-full text-xs font-normal">${escape_html(project.sessionCount)}</span></button> `);
1009
964
  if (expandedProjects.has(project.name)) {
1010
- $$renderer2.push("<!--[-->");
965
+ $$renderer2.push("<!--[0-->");
1011
966
  $$renderer2.push(`<ul class="bg-gh-bg">`);
1012
967
  if (loadingProject === project.name) {
1013
- $$renderer2.push("<!--[-->");
968
+ $$renderer2.push("<!--[0-->");
1014
969
  $$renderer2.push(`<li class="py-2 px-8 text-gh-text-secondary text-sm">Loading...</li>`);
1015
970
  } else {
1016
- $$renderer2.push("<!--[!-->");
971
+ $$renderer2.push("<!--[-1-->");
1017
972
  $$renderer2.push(`<!--[-->`);
1018
973
  const each_array_2 = ensure_array_like(projectSessions.get(project.name) ?? []);
1019
974
  for (let $$index_4 = 0, $$length2 = each_array_2.length; $$index_4 < $$length2; $$index_4++) {
@@ -1028,10 +983,10 @@ function ProjectTree($$renderer, $$props) {
1028
983
  const hasSubItems = hasSessionSubItems(session);
1029
984
  $$renderer2.push(`<li${attr_class(`relative border-t border-gh-border-subtle group ${stringify(isSelected ? "bg-gh-accent/20 border-l-3 border-l-gh-accent" : "")} ${stringify(isDragging ? "opacity-50" : "")}`)} draggable="true"><div class="flex items-center">`);
1030
985
  if (hasSubItems) {
1031
- $$renderer2.push("<!--[-->");
986
+ $$renderer2.push("<!--[0-->");
1032
987
  $$renderer2.push(`<button class="flex-shrink-0 w-5 h-8 flex items-center justify-center bg-transparent border-none cursor-pointer text-gh-text-secondary text-xs ml-1 z-10 relative"${attr("title", isExpanded ? "Collapse" : "Expand")}>${escape_html(isExpanded ? "▼" : "▶")}</button>`);
1033
988
  } else {
1034
- $$renderer2.push("<!--[!-->");
989
+ $$renderer2.push("<!--[-1-->");
1035
990
  $$renderer2.push(`<span class="w-5 ml-1"></span>`);
1036
991
  }
1037
992
  $$renderer2.push(`<!--]--> `);
@@ -1043,24 +998,24 @@ function ProjectTree($$renderer, $$props) {
1043
998
  CommandTitle($$renderer3, { title: displayTitle });
1044
999
  $$renderer3.push(`<!----></span> <span class="flex-shrink-0 flex items-center gap-2 text-xs text-gh-text-secondary"><span class="flex items-center gap-0.5"><span>${escape_html(TREE_ICONS.session.emoji)}</span><span>${escape_html(session.messageCount)}</span></span> `);
1045
1000
  if (sessionInfo.agents > 0) {
1046
- $$renderer3.push("<!--[-->");
1001
+ $$renderer3.push("<!--[0-->");
1047
1002
  $$renderer3.push(`<span class="flex items-center gap-0.5"><span>${escape_html(TREE_ICONS.agent.emoji)}</span><span>${escape_html(sessionInfo.agents)}</span></span>`);
1048
1003
  } else {
1049
- $$renderer3.push("<!--[!-->");
1004
+ $$renderer3.push("<!--[-1-->");
1050
1005
  }
1051
1006
  $$renderer3.push(`<!--]--> `);
1052
1007
  if (sessionInfo.todos > 0) {
1053
- $$renderer3.push("<!--[-->");
1008
+ $$renderer3.push("<!--[0-->");
1054
1009
  $$renderer3.push(`<span class="flex items-center gap-0.5"><span>${escape_html(TREE_ICONS["todos-group"].emoji)}</span><span>${escape_html(sessionInfo.todos)}</span></span>`);
1055
1010
  } else {
1056
- $$renderer3.push("<!--[!-->");
1011
+ $$renderer3.push("<!--[-1-->");
1057
1012
  }
1058
1013
  $$renderer3.push(`<!--]--></span></button>`);
1059
1014
  }
1060
1015
  });
1061
1016
  $$renderer2.push(`<!----> <div class="absolute right-0 top-0 h-full flex items-center gap-0.5 pr-2 opacity-0 group-hover:opacity-100 transition-opacity bg-gh-bg">`);
1062
1017
  if (onResumeSession) {
1063
- $$renderer2.push("<!--[-->");
1018
+ $$renderer2.push("<!--[0-->");
1064
1019
  TooltipButton($$renderer2, {
1065
1020
  class: "p-1 rounded hover:bg-gh-green/20 text-xs",
1066
1021
  onclick: (e) => onResumeSession(e, session),
@@ -1071,7 +1026,7 @@ function ProjectTree($$renderer, $$props) {
1071
1026
  $$slots: { default: true }
1072
1027
  });
1073
1028
  } else {
1074
- $$renderer2.push("<!--[!-->");
1029
+ $$renderer2.push("<!--[-1-->");
1075
1030
  }
1076
1031
  $$renderer2.push(`<!--]--> `);
1077
1032
  TooltipButton($$renderer2, {
@@ -1095,37 +1050,37 @@ function ProjectTree($$renderer, $$props) {
1095
1050
  });
1096
1051
  $$renderer2.push(`<!----></div></div> `);
1097
1052
  if (isExpanded && hasSubItems) {
1098
- $$renderer2.push("<!--[-->");
1053
+ $$renderer2.push("<!--[0-->");
1099
1054
  $$renderer2.push(`<ul class="bg-gh-bg-secondary/50 border-t border-gh-border-subtle text-xs">`);
1100
1055
  if (data?.summaries && data.summaries.length > 0) {
1101
- $$renderer2.push("<!--[-->");
1056
+ $$renderer2.push("<!--[0-->");
1102
1057
  $$renderer2.push(`<!--[-->`);
1103
1058
  const each_array_3 = ensure_array_like(data.summaries);
1104
1059
  for (let idx = 0, $$length3 = each_array_3.length; idx < $$length3; idx++) {
1105
1060
  let summary = each_array_3[idx];
1106
1061
  $$renderer2.push(`<li${attr_class(`py-1.5 px-4 pl-8 hover:bg-gh-border-subtle/50 flex flex-col gap-0.5 ${stringify(idx === 0 ? "text-gh-text" : "text-gh-text-secondary")}`)}${attr("title", summary.summary)}><div class="flex items-start gap-2"><span class="flex-shrink-0">${escape_html(TREE_ICONS.summary.emoji)}</span> <span class="overflow-hidden text-ellipsis line-clamp-2">${escape_html(summary.summary.length > 100 ? summary.summary.slice(0, 97) + "..." : summary.summary)}</span></div> `);
1107
1062
  if (summary.timestamp) {
1108
- $$renderer2.push("<!--[-->");
1063
+ $$renderer2.push("<!--[0-->");
1109
1064
  $$renderer2.push(`<span class="pl-6 text-[10px] text-gh-text-secondary/70">${escape_html(new Date(summary.timestamp).toLocaleString())}</span>`);
1110
1065
  } else {
1111
- $$renderer2.push("<!--[!-->");
1066
+ $$renderer2.push("<!--[-1-->");
1112
1067
  }
1113
1068
  $$renderer2.push(`<!--]--></li>`);
1114
1069
  }
1115
1070
  $$renderer2.push(`<!--]-->`);
1116
1071
  } else {
1117
- $$renderer2.push("<!--[!-->");
1072
+ $$renderer2.push("<!--[-1-->");
1118
1073
  }
1119
1074
  $$renderer2.push(`<!--]--> `);
1120
1075
  if (data?.todos?.sessionTodos && data.todos.sessionTodos.length > 0) {
1121
- $$renderer2.push("<!--[-->");
1076
+ $$renderer2.push("<!--[0-->");
1122
1077
  $$renderer2.push(`<li class="py-1.5 px-4 pl-8 text-gh-text-secondary hover:bg-gh-border-subtle/50 flex items-start gap-2"><span class="flex-shrink-0">${escape_html(TREE_ICONS["todos-group"].emoji)}</span> <span>Session Todos (${escape_html(data.todos.sessionTodos.length)})</span></li>`);
1123
1078
  } else {
1124
- $$renderer2.push("<!--[!-->");
1079
+ $$renderer2.push("<!--[-1-->");
1125
1080
  }
1126
1081
  $$renderer2.push(`<!--]--> `);
1127
1082
  if (data?.todos?.agentTodos) {
1128
- $$renderer2.push("<!--[-->");
1083
+ $$renderer2.push("<!--[0-->");
1129
1084
  $$renderer2.push(`<!--[-->`);
1130
1085
  const each_array_4 = ensure_array_like(data.todos.agentTodos);
1131
1086
  for (let $$index_2 = 0, $$length3 = each_array_4.length; $$index_2 < $$length3; $$index_2++) {
@@ -1134,11 +1089,11 @@ function ProjectTree($$renderer, $$props) {
1134
1089
  }
1135
1090
  $$renderer2.push(`<!--]-->`);
1136
1091
  } else {
1137
- $$renderer2.push("<!--[!-->");
1092
+ $$renderer2.push("<!--[-1-->");
1138
1093
  }
1139
1094
  $$renderer2.push(`<!--]--> `);
1140
1095
  if (data?.agents && data.agents.length > 0) {
1141
- $$renderer2.push("<!--[-->");
1096
+ $$renderer2.push("<!--[0-->");
1142
1097
  $$renderer2.push(`<!--[-->`);
1143
1098
  const each_array_5 = ensure_array_like(data.agents);
1144
1099
  for (let $$index_3 = 0, $$length3 = each_array_5.length; $$index_3 < $$length3; $$index_3++) {
@@ -1147,11 +1102,11 @@ function ProjectTree($$renderer, $$props) {
1147
1102
  }
1148
1103
  $$renderer2.push(`<!--]-->`);
1149
1104
  } else {
1150
- $$renderer2.push("<!--[!-->");
1105
+ $$renderer2.push("<!--[-1-->");
1151
1106
  }
1152
1107
  $$renderer2.push(`<!--]--></ul>`);
1153
1108
  } else {
1154
- $$renderer2.push("<!--[!-->");
1109
+ $$renderer2.push("<!--[-1-->");
1155
1110
  }
1156
1111
  $$renderer2.push(`<!--]--></li>`);
1157
1112
  }
@@ -1159,7 +1114,7 @@ function ProjectTree($$renderer, $$props) {
1159
1114
  }
1160
1115
  $$renderer2.push(`<!--]--></ul>`);
1161
1116
  } else {
1162
- $$renderer2.push("<!--[!-->");
1117
+ $$renderer2.push("<!--[-1-->");
1163
1118
  }
1164
1119
  $$renderer2.push(`<!--]--></li>`);
1165
1120
  }
@@ -1172,14 +1127,14 @@ function ScrollButtons($$renderer, $$props) {
1172
1127
  let { messages, class: className = "" } = $$props;
1173
1128
  const buttonClass = "p-1.5 text-sm rounded border border-gh-border hover:bg-gh-border-subtle text-gh-text-secondary hover:text-gh-text transition-colors bg-gh-bg";
1174
1129
  if (messages.length > 0) {
1175
- $$renderer2.push("<!--[-->");
1130
+ $$renderer2.push("<!--[0-->");
1176
1131
  $$renderer2.push(`<div${attr_class(`flex gap-0.5 ${stringify(className)}`, "svelte-12kovyu")}><button${attr_class(`nav-btn ${stringify(buttonClass)}`, "svelte-12kovyu")}><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 11l7-7 7 7M5 19l7-7 7 7"></path></svg> <span class="tooltip svelte-12kovyu">Top</span></button> <button${attr_class(`nav-btn ${stringify(buttonClass)}`, "svelte-12kovyu")}><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 15l7-7 7 7"></path></svg> <span class="tooltip svelte-12kovyu">Previous user message</span></button> `);
1177
1132
  {
1178
- $$renderer2.push("<!--[!-->");
1133
+ $$renderer2.push("<!--[-1-->");
1179
1134
  }
1180
1135
  $$renderer2.push(`<!--]--> <button${attr_class(`nav-btn ${stringify(buttonClass)}`, "svelte-12kovyu")}><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 9l7 7 7-7"></path></svg> <span class="tooltip svelte-12kovyu">Next user message</span></button> <button${attr_class(`nav-btn ${stringify(buttonClass)}`, "svelte-12kovyu")}><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 5l7 7 7-7M5 13l7 7 7-7"></path></svg> <span class="tooltip svelte-12kovyu">Bottom</span></button></div>`);
1181
1136
  } else {
1182
- $$renderer2.push("<!--[!-->");
1137
+ $$renderer2.push("<!--[-1-->");
1183
1138
  }
1184
1139
  $$renderer2.push(`<!--]-->`);
1185
1140
  });
@@ -1193,82 +1148,82 @@ function ValidationBadge($$renderer, $$props) {
1193
1148
  onRepair,
1194
1149
  onRepairProgress
1195
1150
  } = $$props;
1196
- const filteredChainErrors = chainErrors.filter((e) => e.type === "broken_chain" || e.type === "orphan_parent");
1197
- const hasChainErrors = filteredChainErrors.length > 0;
1198
- const hasProgressErrors = progressErrors.length > 0;
1199
- if (hasChainErrors) {
1200
- $$renderer2.push("<!--[-->");
1151
+ const filteredChainErrors = derived(() => chainErrors.filter((e) => e.type === "broken_chain" || e.type === "orphan_parent"));
1152
+ const hasChainErrors = derived(() => filteredChainErrors().length > 0);
1153
+ const hasProgressErrors = derived(() => progressErrors.length > 0);
1154
+ if (hasChainErrors()) {
1155
+ $$renderer2.push("<!--[0-->");
1201
1156
  $$renderer2.push(`<div class="relative group">`);
1202
1157
  if (onRepair) {
1203
- $$renderer2.push("<!--[-->");
1158
+ $$renderer2.push("<!--[0-->");
1204
1159
  $$renderer2.push(`<button class="text-xs px-2 py-0.5 rounded bg-red-900/30 text-red-400 border border-red-700 hover:bg-red-900/50 transition-colors flex items-center gap-1"${attr("disabled", isRepairing, true)}>`);
1205
1160
  if (isRepairing) {
1206
- $$renderer2.push("<!--[-->");
1161
+ $$renderer2.push("<!--[0-->");
1207
1162
  $$renderer2.push(`<span class="animate-spin">⟳</span>`);
1208
1163
  } else {
1209
- $$renderer2.push("<!--[!-->");
1164
+ $$renderer2.push("<!--[-1-->");
1210
1165
  $$renderer2.push(`⚠️`);
1211
1166
  }
1212
- $$renderer2.push(`<!--]--> ${escape_html(filteredChainErrors.length)} chain error${escape_html(filteredChainErrors.length > 1 ? "s" : "")} `);
1167
+ $$renderer2.push(`<!--]--> ${escape_html(filteredChainErrors().length)} chain error${escape_html(filteredChainErrors().length > 1 ? "s" : "")} `);
1213
1168
  if (!isRepairing) {
1214
- $$renderer2.push("<!--[-->");
1169
+ $$renderer2.push("<!--[0-->");
1215
1170
  $$renderer2.push(`- Repair`);
1216
1171
  } else {
1217
- $$renderer2.push("<!--[!-->");
1172
+ $$renderer2.push("<!--[-1-->");
1218
1173
  }
1219
1174
  $$renderer2.push(`<!--]--></button>`);
1220
1175
  } else {
1221
- $$renderer2.push("<!--[!-->");
1222
- $$renderer2.push(`<span class="text-xs px-2 py-0.5 rounded bg-red-900/30 text-red-400 border border-red-700">⚠️ ${escape_html(filteredChainErrors.length)} chain error${escape_html(filteredChainErrors.length > 1 ? "s" : "")}</span>`);
1176
+ $$renderer2.push("<!--[-1-->");
1177
+ $$renderer2.push(`<span class="text-xs px-2 py-0.5 rounded bg-red-900/30 text-red-400 border border-red-700">⚠️ ${escape_html(filteredChainErrors().length)} chain error${escape_html(filteredChainErrors().length > 1 ? "s" : "")}</span>`);
1223
1178
  }
1224
1179
  $$renderer2.push(`<!--]--> <div class="absolute left-0 top-full mt-1 z-50 hidden group-hover:block bg-gh-bg border border-gh-border rounded-lg shadow-xl p-2 min-w-[250px] max-w-[400px]"><div class="text-xs text-gh-text-secondary mb-1">Chain errors:</div> <ul class="text-xs space-y-1"><!--[-->`);
1225
- const each_array = ensure_array_like(filteredChainErrors);
1180
+ const each_array = ensure_array_like(filteredChainErrors());
1226
1181
  for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1227
1182
  let error = each_array[$$index];
1228
1183
  $$renderer2.push(`<li class="text-red-400"><span class="text-gh-text-secondary">L${escape_html(error.line)}:</span> ${escape_html(error.type === "broken_chain" ? "Broken chain (null parentUuid)" : "Orphan parent")} `);
1229
1184
  if (error.type === "orphan_parent" && error.parentUuid) {
1230
- $$renderer2.push("<!--[-->");
1185
+ $$renderer2.push("<!--[0-->");
1231
1186
  $$renderer2.push(`<span class="text-gh-text-secondary">→ ${escape_html(error.parentUuid.slice(0, 8))}...</span>`);
1232
1187
  } else {
1233
- $$renderer2.push("<!--[!-->");
1188
+ $$renderer2.push("<!--[-1-->");
1234
1189
  }
1235
1190
  $$renderer2.push(`<!--]--></li>`);
1236
1191
  }
1237
1192
  $$renderer2.push(`<!--]--></ul> `);
1238
1193
  if (onRepair) {
1239
- $$renderer2.push("<!--[-->");
1194
+ $$renderer2.push("<!--[0-->");
1240
1195
  $$renderer2.push(`<div class="text-xs text-gh-text-secondary mt-2 pt-1 border-t border-gh-border">Click to auto-repair by linking to previous message</div>`);
1241
1196
  } else {
1242
- $$renderer2.push("<!--[!-->");
1197
+ $$renderer2.push("<!--[-1-->");
1243
1198
  }
1244
1199
  $$renderer2.push(`<!--]--></div></div>`);
1245
1200
  } else {
1246
- $$renderer2.push("<!--[!-->");
1201
+ $$renderer2.push("<!--[-1-->");
1247
1202
  }
1248
1203
  $$renderer2.push(`<!--]--> `);
1249
- if (hasProgressErrors) {
1250
- $$renderer2.push("<!--[-->");
1204
+ if (hasProgressErrors()) {
1205
+ $$renderer2.push("<!--[0-->");
1251
1206
  $$renderer2.push(`<div class="relative group">`);
1252
1207
  if (onRepairProgress) {
1253
- $$renderer2.push("<!--[-->");
1208
+ $$renderer2.push("<!--[0-->");
1254
1209
  $$renderer2.push(`<button class="text-xs px-2 py-0.5 rounded bg-red-900/30 text-red-400 border border-red-700 hover:bg-red-900/50 transition-colors flex items-center gap-1"${attr("disabled", isRepairing, true)}>`);
1255
1210
  if (isRepairing) {
1256
- $$renderer2.push("<!--[-->");
1211
+ $$renderer2.push("<!--[0-->");
1257
1212
  $$renderer2.push(`<span class="animate-spin">⟳</span>`);
1258
1213
  } else {
1259
- $$renderer2.push("<!--[!-->");
1214
+ $$renderer2.push("<!--[-1-->");
1260
1215
  $$renderer2.push(`⚠️`);
1261
1216
  }
1262
1217
  $$renderer2.push(`<!--]--> ${escape_html(progressErrors.length)} progress `);
1263
1218
  if (!isRepairing) {
1264
- $$renderer2.push("<!--[-->");
1219
+ $$renderer2.push("<!--[0-->");
1265
1220
  $$renderer2.push(`- Remove`);
1266
1221
  } else {
1267
- $$renderer2.push("<!--[!-->");
1222
+ $$renderer2.push("<!--[-1-->");
1268
1223
  }
1269
1224
  $$renderer2.push(`<!--]--></button>`);
1270
1225
  } else {
1271
- $$renderer2.push("<!--[!-->");
1226
+ $$renderer2.push("<!--[-1-->");
1272
1227
  $$renderer2.push(`<span class="text-xs px-2 py-0.5 rounded bg-red-900/30 text-red-400 border border-red-700">⚠️ ${escape_html(progressErrors.length)} progress</span>`);
1273
1228
  }
1274
1229
  $$renderer2.push(`<!--]--> <div class="absolute left-0 top-full mt-1 z-50 hidden group-hover:block bg-gh-bg border border-gh-border rounded-lg shadow-xl p-2 min-w-[200px] max-w-[350px]"><div class="text-xs text-gh-text-secondary mb-1">Progress messages (should be removed):</div> <ul class="text-xs space-y-1"><!--[-->`);
@@ -1279,14 +1234,14 @@ function ValidationBadge($$renderer, $$props) {
1279
1234
  }
1280
1235
  $$renderer2.push(`<!--]--></ul> `);
1281
1236
  if (onRepairProgress) {
1282
- $$renderer2.push("<!--[-->");
1237
+ $$renderer2.push("<!--[0-->");
1283
1238
  $$renderer2.push(`<div class="text-xs text-gh-text-secondary mt-2 pt-1 border-t border-gh-border">Click to remove all progress messages</div>`);
1284
1239
  } else {
1285
- $$renderer2.push("<!--[!-->");
1240
+ $$renderer2.push("<!--[-1-->");
1286
1241
  }
1287
1242
  $$renderer2.push(`<!--]--></div></div>`);
1288
1243
  } else {
1289
- $$renderer2.push("<!--[!-->");
1244
+ $$renderer2.push("<!--[-1-->");
1290
1245
  }
1291
1246
  $$renderer2.push(`<!--]-->`);
1292
1247
  });
@@ -1307,11 +1262,12 @@ function SessionViewer($$renderer, $$props) {
1307
1262
  onEditTitle,
1308
1263
  onSplitSession,
1309
1264
  enableScroll = true,
1265
+ externalScrollContainer = null,
1310
1266
  fullWidth = false
1311
1267
  } = $$props;
1312
- const displayTitle = getDisplayTitle(customTitle, currentSummary, session?.title, 50);
1313
- const chainResult = validateChain(messages);
1314
- const progressResult = validateProgressMessages(messages);
1268
+ const displayTitle = derived(() => getDisplayTitle(customTitle, currentSummary, session?.title, 50));
1269
+ const chainResult = derived(() => validateChain(messages));
1270
+ const progressResult = derived(() => validateProgressMessages(messages));
1315
1271
  let isRepairing = false;
1316
1272
  const handleRepairChain = async () => {
1317
1273
  if (!session || isRepairing) return;
@@ -1331,7 +1287,7 @@ function SessionViewer($$renderer, $$props) {
1331
1287
  if (!session || isRepairing) return;
1332
1288
  isRepairing = true;
1333
1289
  try {
1334
- for (const error of progressResult.errors) {
1290
+ for (const error of progressResult().errors) {
1335
1291
  const msg = messages[error.line - 1];
1336
1292
  if (msg?.uuid) {
1337
1293
  await deleteMessage(session.projectName, session.id, msg.uuid);
@@ -1395,39 +1351,41 @@ function SessionViewer($$renderer, $$props) {
1395
1351
  const handleSessionMessageDelete = (msg) => {
1396
1352
  handleMessageDeleteWithUndo(msg, false);
1397
1353
  };
1354
+ let internalScrollContainer = void 0;
1355
+ const scrollContainer = derived(() => externalScrollContainer ?? internalScrollContainer);
1398
1356
  $$renderer2.push(`<section${attr_class(`bg-gh-bg-secondary overflow-hidden flex flex-col h-full ${stringify(fullWidth ? "" : "border border-gh-border rounded-lg")}`)}><div class="p-4 border-b border-gh-border bg-gh-bg flex flex-wrap justify-between items-start gap-2">`);
1399
1357
  if (backUrl) {
1400
- $$renderer2.push("<!--[-->");
1358
+ $$renderer2.push("<!--[0-->");
1401
1359
  $$renderer2.push(`<a${attr("href", backUrl)} class="text-gh-muted hover:text-gh-fg flex-shrink-0" title="Back to project"><svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18"></path></svg></a>`);
1402
1360
  } else {
1403
- $$renderer2.push("<!--[!-->");
1361
+ $$renderer2.push("<!--[-1-->");
1404
1362
  }
1405
1363
  $$renderer2.push(`<!--]--> <div class="flex-1 min-w-[200px]">`);
1406
1364
  if (session) {
1407
- $$renderer2.push("<!--[-->");
1365
+ $$renderer2.push("<!--[0-->");
1408
1366
  $$renderer2.push(`<h2 class="text-base font-semibold">`);
1409
- CommandTitle($$renderer2, { title: truncate(displayTitle, 50) });
1367
+ CommandTitle($$renderer2, { title: truncate(displayTitle(), 50) });
1410
1368
  $$renderer2.push(`<!----></h2> <div class="flex items-center gap-2 mt-1"><button class="text-xs text-gh-text-secondary font-mono hover:text-gh-accent hover:underline cursor-pointer bg-transparent border-none p-0 text-left" title="Open session file in VSCode">${escape_html(session.id)}</button> `);
1411
1369
  ValidationBadge($$renderer2, {
1412
- chainErrors: chainResult.errors,
1413
- progressErrors: progressResult.errors,
1370
+ chainErrors: chainResult().errors,
1371
+ progressErrors: progressResult().errors,
1414
1372
  isRepairing,
1415
1373
  onRepair: handleRepairChain,
1416
1374
  onRepairProgress: handleRepairProgress
1417
1375
  });
1418
1376
  $$renderer2.push(`<!----></div>`);
1419
1377
  } else {
1420
- $$renderer2.push("<!--[!-->");
1378
+ $$renderer2.push("<!--[-1-->");
1421
1379
  $$renderer2.push(`<h2 class="text-base font-semibold">Messages</h2>`);
1422
1380
  }
1423
1381
  $$renderer2.push(`<!--]--></div> `);
1424
1382
  {
1425
- $$renderer2.push("<!--[-->");
1426
- ScrollButtons($$renderer2, { messages });
1383
+ $$renderer2.push("<!--[0-->");
1384
+ ScrollButtons($$renderer2, { messages, scrollContainer: scrollContainer() });
1427
1385
  }
1428
1386
  $$renderer2.push(`<!--]--></div> `);
1429
1387
  if (session) {
1430
- $$renderer2.push("<!--[-->");
1388
+ $$renderer2.push("<!--[0-->");
1431
1389
  $$renderer2.push(`<div class="flex border-b border-gh-border bg-gh-bg overflow-x-auto"><div class="flex-1 flex justify-center"><button${attr_class(`px-4 py-2 text-sm font-medium transition-colors whitespace-nowrap ${stringify(
1432
1390
  "text-gh-accent border-b-2 border-gh-accent"
1433
1391
  )}`)}>💬 Messages (${escape_html(messages.length)})</button> <!--[-->`);
@@ -1438,48 +1396,44 @@ function SessionViewer($$renderer, $$props) {
1438
1396
  }
1439
1397
  $$renderer2.push(`<!--]--></div> `);
1440
1398
  if (todos.length > 0) {
1441
- $$renderer2.push("<!--[-->");
1399
+ $$renderer2.push("<!--[0-->");
1442
1400
  $$renderer2.push(`<button${attr_class(`px-4 py-2 text-sm font-medium transition-colors whitespace-nowrap ${stringify("text-gh-text-secondary hover:text-gh-text hover:bg-gh-border-subtle")}`)}>✅ Todos (${escape_html(todos.length)})</button>`);
1443
1401
  } else {
1444
- $$renderer2.push("<!--[!-->");
1402
+ $$renderer2.push("<!--[-1-->");
1445
1403
  }
1446
1404
  $$renderer2.push(`<!--]--></div>`);
1447
1405
  } else {
1448
- $$renderer2.push("<!--[!-->");
1406
+ $$renderer2.push("<!--[-1-->");
1449
1407
  }
1450
1408
  $$renderer2.push(`<!--]--> <div${attr_class(`flex-1 ${stringify(enableScroll ? "overflow-y-auto" : "")}`)}>`);
1451
1409
  if (!session) {
1452
- $$renderer2.push("<!--[-->");
1410
+ $$renderer2.push("<!--[0-->");
1453
1411
  $$renderer2.push(`<div class="flex items-center justify-center h-full text-gh-text-secondary">Select a session to view</div>`);
1454
1412
  } else {
1455
- $$renderer2.push("<!--[!-->");
1456
- {
1457
- $$renderer2.push("<!--[-->");
1458
- if (messages.length === 0) {
1459
- $$renderer2.push("<!--[-->");
1460
- $$renderer2.push(`<div class="flex items-center justify-center h-full text-gh-text-secondary">No messages</div>`);
1461
- } else {
1462
- $$renderer2.push("<!--[!-->");
1463
- MessageList($$renderer2, {
1464
- sessionId: session.id,
1465
- messages,
1466
- onDeleteMessage: handleSessionMessageDelete,
1467
- onEditTitle,
1468
- onSplitSession,
1469
- enableScroll: false,
1470
- fullWidth: true
1471
- });
1472
- }
1473
- $$renderer2.push(`<!--]-->`);
1413
+ $$renderer2.push("<!--[1-->");
1414
+ if (messages.length === 0) {
1415
+ $$renderer2.push("<!--[0-->");
1416
+ $$renderer2.push(`<div class="flex items-center justify-center h-full text-gh-text-secondary">No messages</div>`);
1417
+ } else {
1418
+ $$renderer2.push("<!--[-1-->");
1419
+ MessageList($$renderer2, {
1420
+ sessionId: session.id,
1421
+ messages,
1422
+ onDeleteMessage: handleSessionMessageDelete,
1423
+ onEditTitle,
1424
+ onSplitSession,
1425
+ enableScroll: false,
1426
+ fullWidth: true
1427
+ });
1474
1428
  }
1475
1429
  $$renderer2.push(`<!--]-->`);
1476
1430
  }
1477
1431
  $$renderer2.push(`<!--]--></div> `);
1478
1432
  if (undoStack.length > 0) {
1479
- $$renderer2.push("<!--[-->");
1433
+ $$renderer2.push("<!--[0-->");
1480
1434
  $$renderer2.push(`<div class="fixed bottom-4 left-1/2 -translate-x-1/2 bg-neutral-500/20 border border-neutral-600 rounded-lg shadow-2xl px-4 py-3 flex items-center gap-4 z-50 backdrop-blur-sm"><span class="text-sm text-white">${escape_html(undoStack.length === 1 ? "Message deleted" : `${undoStack.length} messages deleted`)}</span> <span class="text-xs text-gh-text-secondary tabular-nums">${escape_html(undoCountdown)}s</span> <button class="px-3 py-1 text-sm font-medium text-gh-accent hover:bg-gh-border-subtle rounded transition-colors">Undo</button> <button class="px-2 py-1 text-sm text-gh-text-secondary hover:text-gh-text hover:bg-gh-border-subtle rounded transition-colors" title="Dismiss (already deleted)">✕</button></div>`);
1481
1435
  } else {
1482
- $$renderer2.push("<!--[!-->");
1436
+ $$renderer2.push("<!--[-1-->");
1483
1437
  }
1484
1438
  $$renderer2.push(`<!--]--></section>`);
1485
1439
  });
@@ -1750,17 +1704,17 @@ Old messages (${oldMessagesCount}) will be moved to a new session.`, async () =>
1750
1704
  });
1751
1705
  $$renderer3.push(`<!----></div> `);
1752
1706
  if (loading) {
1753
- $$renderer3.push("<!--[-->");
1707
+ $$renderer3.push("<!--[0-->");
1754
1708
  $$renderer3.push(`<div class="fixed bottom-4 right-4 bg-gh-accent text-white px-4 py-2 rounded">Loading...</div>`);
1755
1709
  } else {
1756
- $$renderer3.push("<!--[!-->");
1710
+ $$renderer3.push("<!--[-1-->");
1757
1711
  }
1758
1712
  $$renderer3.push(`<!--]--> `);
1759
1713
  if (error) {
1760
- $$renderer3.push("<!--[-->");
1714
+ $$renderer3.push("<!--[0-->");
1761
1715
  $$renderer3.push(`<div class="fixed bottom-4 right-4 bg-gh-red text-white px-4 py-2 rounded">${escape_html(error)}</div>`);
1762
1716
  } else {
1763
- $$renderer3.push("<!--[!-->");
1717
+ $$renderer3.push("<!--[-1-->");
1764
1718
  }
1765
1719
  $$renderer3.push(`<!--]--> `);
1766
1720
  Toast($$renderer3, {
@@ -1802,4 +1756,4 @@ Old messages (${oldMessagesCount}) will be moved to a new session.`, async () =>
1802
1756
  }
1803
1757
 
1804
1758
  export { _page as default };
1805
- //# sourceMappingURL=_page.svelte-BiD6gfpa.js.map
1759
+ //# sourceMappingURL=_page.svelte-Dx2ikKP_.js.map