@juspay/shooter 1.6.1 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/build/client/_app/immutable/assets/0.BafSE-sr.css +1 -0
  2. package/build/client/_app/immutable/assets/0.BafSE-sr.css.br +0 -0
  3. package/build/client/_app/immutable/assets/0.BafSE-sr.css.gz +0 -0
  4. package/build/client/_app/immutable/assets/1.B_AnTlN1.css +1 -0
  5. package/build/client/_app/immutable/assets/1.B_AnTlN1.css.br +0 -0
  6. package/build/client/_app/immutable/assets/1.B_AnTlN1.css.gz +0 -0
  7. package/build/client/_app/immutable/assets/{2.Dk9NfqnS.css → 2.DjiwkLqE.css} +1 -1
  8. package/build/client/_app/immutable/assets/2.DjiwkLqE.css.br +0 -0
  9. package/build/client/_app/immutable/assets/2.DjiwkLqE.css.gz +0 -0
  10. package/build/client/_app/immutable/assets/4.D4EDSN4H.css +1 -0
  11. package/build/client/_app/immutable/assets/4.D4EDSN4H.css.br +0 -0
  12. package/build/client/_app/immutable/assets/4.D4EDSN4H.css.gz +0 -0
  13. package/build/client/_app/immutable/assets/6.DzV0p3l-.css +1 -0
  14. package/build/client/_app/immutable/assets/6.DzV0p3l-.css.br +0 -0
  15. package/build/client/_app/immutable/assets/6.DzV0p3l-.css.gz +0 -0
  16. package/build/client/_app/immutable/assets/7.CEbRAOOf.css +1 -0
  17. package/build/client/_app/immutable/assets/7.CEbRAOOf.css.br +0 -0
  18. package/build/client/_app/immutable/assets/7.CEbRAOOf.css.gz +0 -0
  19. package/build/client/_app/immutable/assets/8.BhoBXADL.css +1 -0
  20. package/build/client/_app/immutable/assets/8.BhoBXADL.css.br +0 -0
  21. package/build/client/_app/immutable/assets/8.BhoBXADL.css.gz +0 -0
  22. package/build/client/_app/immutable/assets/9.v5KA95xm.css +1 -0
  23. package/build/client/_app/immutable/assets/9.v5KA95xm.css.br +0 -0
  24. package/build/client/_app/immutable/assets/9.v5KA95xm.css.gz +0 -0
  25. package/build/client/_app/immutable/assets/ChatView.Bnlg-oAF.css +1 -0
  26. package/build/client/_app/immutable/assets/ChatView.Bnlg-oAF.css.br +0 -0
  27. package/build/client/_app/immutable/assets/ChatView.Bnlg-oAF.css.gz +0 -0
  28. package/build/client/_app/immutable/assets/ColorPicker.Hf6zQzuB.css +1 -0
  29. package/build/client/_app/immutable/assets/ColorPicker.Hf6zQzuB.css.br +0 -0
  30. package/build/client/_app/immutable/assets/ColorPicker.Hf6zQzuB.css.gz +0 -0
  31. package/build/client/_app/immutable/chunks/{DlnAjkg1.js → 1R757KKW.js} +1 -1
  32. package/build/client/_app/immutable/chunks/1R757KKW.js.br +0 -0
  33. package/build/client/_app/immutable/chunks/{DlnAjkg1.js.gz → 1R757KKW.js.gz} +0 -0
  34. package/build/client/_app/immutable/chunks/3MMtouT7.js +2 -0
  35. package/build/client/_app/immutable/chunks/3MMtouT7.js.br +0 -0
  36. package/build/client/_app/immutable/chunks/3MMtouT7.js.gz +0 -0
  37. package/build/client/_app/immutable/chunks/{Dc_Gg2H6.js → 82KkiYvP.js} +1 -1
  38. package/build/client/_app/immutable/chunks/82KkiYvP.js.br +0 -0
  39. package/build/client/_app/immutable/chunks/82KkiYvP.js.gz +0 -0
  40. package/build/client/_app/immutable/chunks/{CGMJxf7r.js → B-XSrufh.js} +1 -1
  41. package/build/client/_app/immutable/chunks/B-XSrufh.js.br +0 -0
  42. package/build/client/_app/immutable/chunks/B-XSrufh.js.gz +0 -0
  43. package/build/client/_app/immutable/chunks/BCwT4WOg.js +60 -0
  44. package/build/client/_app/immutable/chunks/BCwT4WOg.js.br +0 -0
  45. package/build/client/_app/immutable/chunks/BCwT4WOg.js.gz +0 -0
  46. package/build/client/_app/immutable/chunks/BTu-2gkj.js +21 -0
  47. package/build/client/_app/immutable/chunks/BTu-2gkj.js.br +0 -0
  48. package/build/client/_app/immutable/chunks/BTu-2gkj.js.gz +0 -0
  49. package/build/client/_app/immutable/chunks/Bn-6X1BO.js +5 -0
  50. package/build/client/_app/immutable/chunks/Bn-6X1BO.js.br +0 -0
  51. package/build/client/_app/immutable/chunks/Bn-6X1BO.js.gz +0 -0
  52. package/build/client/_app/immutable/chunks/BsNWiLas.js +1 -0
  53. package/build/client/_app/immutable/chunks/BsNWiLas.js.br +0 -0
  54. package/build/client/_app/immutable/chunks/BsNWiLas.js.gz +0 -0
  55. package/build/client/_app/immutable/chunks/C0VhPQz3.js +3 -0
  56. package/build/client/_app/immutable/chunks/C0VhPQz3.js.br +0 -0
  57. package/build/client/_app/immutable/chunks/C0VhPQz3.js.gz +0 -0
  58. package/build/client/_app/immutable/chunks/CG453M9q.js +5 -0
  59. package/build/client/_app/immutable/chunks/CG453M9q.js.br +0 -0
  60. package/build/client/_app/immutable/chunks/CG453M9q.js.gz +0 -0
  61. package/build/client/_app/immutable/chunks/CMQw-Fc-.js +1 -0
  62. package/build/client/_app/immutable/chunks/CMQw-Fc-.js.br +0 -0
  63. package/build/client/_app/immutable/chunks/CMQw-Fc-.js.gz +0 -0
  64. package/build/client/_app/immutable/chunks/CRXYOhph.js +5 -0
  65. package/build/client/_app/immutable/chunks/CRXYOhph.js.br +0 -0
  66. package/build/client/_app/immutable/chunks/CRXYOhph.js.gz +0 -0
  67. package/build/client/_app/immutable/chunks/CSjf4fBs.js +2 -0
  68. package/build/client/_app/immutable/chunks/CSjf4fBs.js.br +0 -0
  69. package/build/client/_app/immutable/chunks/CSjf4fBs.js.gz +0 -0
  70. package/build/client/_app/immutable/chunks/{CJFjKwJ7.js → Ce0VRwE1.js} +1 -1
  71. package/build/client/_app/immutable/chunks/Ce0VRwE1.js.br +0 -0
  72. package/build/client/_app/immutable/chunks/Ce0VRwE1.js.gz +0 -0
  73. package/build/client/_app/immutable/chunks/DFPEaIHz.js +1 -0
  74. package/build/client/_app/immutable/chunks/DFPEaIHz.js.br +0 -0
  75. package/build/client/_app/immutable/chunks/DFPEaIHz.js.gz +0 -0
  76. package/build/client/_app/immutable/chunks/DQM017d5.js +1 -0
  77. package/build/client/_app/immutable/chunks/DQM017d5.js.br +0 -0
  78. package/build/client/_app/immutable/chunks/DQM017d5.js.gz +0 -0
  79. package/build/client/_app/immutable/chunks/Dqgg-a0I.js +1 -0
  80. package/build/client/_app/immutable/chunks/Dqgg-a0I.js.br +0 -0
  81. package/build/client/_app/immutable/chunks/Dqgg-a0I.js.gz +0 -0
  82. package/build/client/_app/immutable/chunks/DzuS5Nbr.js +6 -0
  83. package/build/client/_app/immutable/chunks/DzuS5Nbr.js.br +0 -0
  84. package/build/client/_app/immutable/chunks/DzuS5Nbr.js.gz +0 -0
  85. package/build/client/_app/immutable/entry/app.BBj54tOn.js +2 -0
  86. package/build/client/_app/immutable/entry/app.BBj54tOn.js.br +0 -0
  87. package/build/client/_app/immutable/entry/app.BBj54tOn.js.gz +0 -0
  88. package/build/client/_app/immutable/entry/start.hE8cZTT9.js +1 -0
  89. package/build/client/_app/immutable/entry/start.hE8cZTT9.js.br +2 -0
  90. package/build/client/_app/immutable/entry/start.hE8cZTT9.js.gz +0 -0
  91. package/build/client/_app/immutable/nodes/0.tGEagUxT.js +7 -0
  92. package/build/client/_app/immutable/nodes/0.tGEagUxT.js.br +0 -0
  93. package/build/client/_app/immutable/nodes/0.tGEagUxT.js.gz +0 -0
  94. package/build/client/_app/immutable/nodes/1.CTMQXGCN.js +1 -0
  95. package/build/client/_app/immutable/nodes/1.CTMQXGCN.js.br +0 -0
  96. package/build/client/_app/immutable/nodes/1.CTMQXGCN.js.gz +0 -0
  97. package/build/client/_app/immutable/nodes/2._DiTJ6NZ.js +13 -0
  98. package/build/client/_app/immutable/nodes/2._DiTJ6NZ.js.br +0 -0
  99. package/build/client/_app/immutable/nodes/2._DiTJ6NZ.js.gz +0 -0
  100. package/build/client/_app/immutable/nodes/{3.CsY6J5HS.js → 3.BpFIHCgE.js} +3 -3
  101. package/build/client/_app/immutable/nodes/3.BpFIHCgE.js.br +0 -0
  102. package/build/client/_app/immutable/nodes/3.BpFIHCgE.js.gz +0 -0
  103. package/build/client/_app/immutable/nodes/4.BcK1571T.js +16 -0
  104. package/build/client/_app/immutable/nodes/4.BcK1571T.js.br +0 -0
  105. package/build/client/_app/immutable/nodes/4.BcK1571T.js.gz +0 -0
  106. package/build/client/_app/immutable/nodes/5.DRvLQ5NR.js +1 -0
  107. package/build/client/_app/immutable/nodes/5.DRvLQ5NR.js.br +0 -0
  108. package/build/client/_app/immutable/nodes/5.DRvLQ5NR.js.gz +0 -0
  109. package/build/client/_app/immutable/nodes/6.BnaLvG49.js +1 -0
  110. package/build/client/_app/immutable/nodes/6.BnaLvG49.js.br +0 -0
  111. package/build/client/_app/immutable/nodes/6.BnaLvG49.js.gz +0 -0
  112. package/build/client/_app/immutable/nodes/7.C9odxWmO.js +4 -0
  113. package/build/client/_app/immutable/nodes/7.C9odxWmO.js.br +0 -0
  114. package/build/client/_app/immutable/nodes/7.C9odxWmO.js.gz +0 -0
  115. package/build/client/_app/immutable/nodes/8.CT86dtkE.js +2 -0
  116. package/build/client/_app/immutable/nodes/8.CT86dtkE.js.br +0 -0
  117. package/build/client/_app/immutable/nodes/8.CT86dtkE.js.gz +0 -0
  118. package/build/client/_app/immutable/nodes/9.JmYAqwbO.js +2 -0
  119. package/build/client/_app/immutable/nodes/9.JmYAqwbO.js.br +0 -0
  120. package/build/client/_app/immutable/nodes/9.JmYAqwbO.js.gz +0 -0
  121. package/build/client/_app/version.json +1 -1
  122. package/build/client/_app/version.json.br +0 -0
  123. package/build/client/_app/version.json.gz +0 -0
  124. package/build/server/chunks/{0-DC2VLooL.js → 0-9YbbJhFw.js} +4 -4
  125. package/build/server/chunks/0-9YbbJhFw.js.map +1 -0
  126. package/build/server/chunks/1-DULDAXgW.js +9 -0
  127. package/build/server/chunks/1-DULDAXgW.js.map +1 -0
  128. package/build/server/chunks/2-vevFT-GW.js +21 -0
  129. package/build/server/chunks/2-vevFT-GW.js.map +1 -0
  130. package/build/server/chunks/3-Bp3qDEwZ.js +21 -0
  131. package/build/server/chunks/3-Bp3qDEwZ.js.map +1 -0
  132. package/build/server/chunks/4-DXZnoGK3.js +23 -0
  133. package/build/server/chunks/4-DXZnoGK3.js.map +1 -0
  134. package/build/server/chunks/{5-BBIP1PzX.js → 5-Bj49x3to.js} +4 -4
  135. package/build/server/chunks/5-Bj49x3to.js.map +1 -0
  136. package/build/server/chunks/6-BsyQ_s8I.js +9 -0
  137. package/build/server/chunks/6-BsyQ_s8I.js.map +1 -0
  138. package/build/server/chunks/7-B2i23jNm.js +9 -0
  139. package/build/server/chunks/7-B2i23jNm.js.map +1 -0
  140. package/build/server/chunks/8-BHREyW3X.js +9 -0
  141. package/build/server/chunks/8-BHREyW3X.js.map +1 -0
  142. package/build/server/chunks/9-BqFD2wVL.js +9 -0
  143. package/build/server/chunks/9-BqFD2wVL.js.map +1 -0
  144. package/build/server/chunks/{Button-WKgiLWZI.js → Button-DPcpECFE.js} +18 -11
  145. package/build/server/chunks/Button-DPcpECFE.js.map +1 -0
  146. package/build/server/chunks/Icon-C2-613_Z.js +29 -0
  147. package/build/server/chunks/Icon-C2-613_Z.js.map +1 -0
  148. package/build/server/chunks/{close-BGlLztTb.js → Input-M7rFN1IJ.js} +25 -14
  149. package/build/server/chunks/Input-M7rFN1IJ.js.map +1 -0
  150. package/build/server/chunks/Pill-CbH1G79Z.js +57 -0
  151. package/build/server/chunks/Pill-CbH1G79Z.js.map +1 -0
  152. package/build/server/chunks/Shimmer-BrakrBeG.js +10 -0
  153. package/build/server/chunks/Shimmer-BrakrBeG.js.map +1 -0
  154. package/build/server/chunks/{_error.svelte-DkIwmECt.js → _error.svelte-BfckZRui.js} +24 -6
  155. package/build/server/chunks/_error.svelte-BfckZRui.js.map +1 -0
  156. package/build/server/chunks/_layout.svelte-B6wbenkT.js +73 -0
  157. package/build/server/chunks/_layout.svelte-B6wbenkT.js.map +1 -0
  158. package/build/server/chunks/{_page.svelte-fcX09N4d.js → _page.svelte-BRz-x9-s.js} +9 -9
  159. package/build/server/chunks/_page.svelte-BRz-x9-s.js.map +1 -0
  160. package/build/server/chunks/{_page.svelte-JIkgFUFf.js → _page.svelte-CKydRPy6.js} +5 -5
  161. package/build/server/chunks/_page.svelte-CKydRPy6.js.map +1 -0
  162. package/build/server/chunks/{_page.svelte-DDSzYLUs.js → _page.svelte-COFpm-S2.js} +49 -27
  163. package/build/server/chunks/_page.svelte-COFpm-S2.js.map +1 -0
  164. package/build/server/chunks/{_page.svelte-Y9-O5a5w.js → _page.svelte-CwCypx0G.js} +36 -37
  165. package/build/server/chunks/_page.svelte-CwCypx0G.js.map +1 -0
  166. package/build/server/chunks/{_page.svelte-CpL3R-VI.js → _page.svelte-D1Iaycsm.js} +11 -11
  167. package/build/server/chunks/_page.svelte-D1Iaycsm.js.map +1 -0
  168. package/build/server/chunks/_page.svelte-DKdaYz0t.js +70 -0
  169. package/build/server/chunks/_page.svelte-DKdaYz0t.js.map +1 -0
  170. package/build/server/chunks/{_page.svelte-Cmuco1mC.js → _page.svelte-DfZBq0p5.js} +58 -52
  171. package/build/server/chunks/_page.svelte-DfZBq0p5.js.map +1 -0
  172. package/build/server/chunks/_page.svelte-io210vyT.js +117 -0
  173. package/build/server/chunks/_page.svelte-io210vyT.js.map +1 -0
  174. package/build/server/chunks/{_server.ts-Ds_SUGC3.js → _server.ts-BQarRaho.js} +86 -73
  175. package/build/server/chunks/_server.ts-BQarRaho.js.map +1 -0
  176. package/build/server/chunks/cache-tQqq4VCX.js +35 -0
  177. package/build/server/chunks/cache-tQqq4VCX.js.map +1 -0
  178. package/build/server/chunks/{client-DRtPDkMh.js → client-Do_WijF3.js} +4 -4
  179. package/build/server/chunks/{client-DRtPDkMh.js.map → client-Do_WijF3.js.map} +1 -1
  180. package/build/server/chunks/client2-DQ2fYrJe.js +7 -0
  181. package/build/server/chunks/{client2-bqqmu0b7.js.map → client2-DQ2fYrJe.js.map} +1 -1
  182. package/build/server/chunks/close-DR469d4F.js +4 -0
  183. package/build/server/chunks/close-DR469d4F.js.map +1 -0
  184. package/build/server/chunks/{index-DP9bWJrR.js → index-BHoOpAe1.js} +2 -2
  185. package/build/server/chunks/{index-DP9bWJrR.js.map → index-BHoOpAe1.js.map} +1 -1
  186. package/build/server/chunks/{index-server-BUmV4MIG.js → index-server-BVf8_1QW.js} +2 -2
  187. package/build/server/chunks/{index-server-BUmV4MIG.js.map → index-server-BVf8_1QW.js.map} +1 -1
  188. package/build/server/chunks/{index2-D5Y19GKR.js → index2-CKh4I94n.js} +2 -2
  189. package/build/server/chunks/{index2-D5Y19GKR.js.map → index2-CKh4I94n.js.map} +1 -1
  190. package/build/server/chunks/{root-CATOR_0t.js → root-CW7Ox2wn.js} +2 -2
  191. package/build/server/chunks/{root-CATOR_0t.js.map → root-CW7Ox2wn.js.map} +1 -1
  192. package/build/server/chunks/settings-Dv3Esboo.js +4 -0
  193. package/build/server/chunks/settings-Dv3Esboo.js.map +1 -0
  194. package/build/server/chunks/{state.svelte-CftllyvC.js → state.svelte-Cg5VK5nH.js} +3 -3
  195. package/build/server/chunks/{state.svelte-CftllyvC.js.map → state.svelte-Cg5VK5nH.js.map} +1 -1
  196. package/build/server/chunks/{stores-BjL57aOK.js → stores-D6TajUdj.js} +4 -4
  197. package/build/server/chunks/{stores-BjL57aOK.js.map → stores-D6TajUdj.js.map} +1 -1
  198. package/build/server/index.js +4 -4
  199. package/build/server/index.js.map +1 -1
  200. package/build/server/manifest.js +12 -12
  201. package/build/server/manifest.js.map +1 -1
  202. package/package.json +2 -2
  203. package/src/app.css +128 -18
  204. package/src/lib/assets/icons/dashboard.svg +6 -0
  205. package/src/lib/modules/client/common/index.ts +0 -5
  206. package/src/lib/modules/client/terminal/ChatView.svelte +20 -37
  207. package/src/lib/modules/client/terminal/ConnectionStatus.svelte +7 -17
  208. package/src/lib/modules/client/terminal/LaunchSheet.svelte +83 -153
  209. package/src/lib/modules/client/terminal/QuickKeys.svelte +4 -4
  210. package/src/lib/modules/server/sessions/jsonl-reader.ts +103 -92
  211. package/src/lib/theme.css +125 -5
  212. package/src/lib/types/terminal-client.ts +1 -1
  213. package/src/routes/+error.svelte +9 -25
  214. package/src/routes/+layout.svelte +52 -78
  215. package/src/routes/+page.svelte +55 -40
  216. package/src/routes/config/+page.svelte +13 -28
  217. package/src/routes/project/+page.svelte +12 -9
  218. package/src/routes/session/[id]/+page.svelte +12 -38
  219. package/src/routes/terminals/+page.svelte +22 -118
  220. package/src/routes/terminals/[id]/+page.svelte +33 -42
  221. package/build/client/_app/immutable/assets/0.BhZOCxO4.css +0 -1
  222. package/build/client/_app/immutable/assets/0.BhZOCxO4.css.br +0 -0
  223. package/build/client/_app/immutable/assets/0.BhZOCxO4.css.gz +0 -0
  224. package/build/client/_app/immutable/assets/1.BYutk3aU.css +0 -1
  225. package/build/client/_app/immutable/assets/1.BYutk3aU.css.br +0 -0
  226. package/build/client/_app/immutable/assets/1.BYutk3aU.css.gz +0 -0
  227. package/build/client/_app/immutable/assets/2.Dk9NfqnS.css.br +0 -0
  228. package/build/client/_app/immutable/assets/2.Dk9NfqnS.css.gz +0 -0
  229. package/build/client/_app/immutable/assets/4.D5l1JxgO.css +0 -1
  230. package/build/client/_app/immutable/assets/4.D5l1JxgO.css.br +0 -0
  231. package/build/client/_app/immutable/assets/4.D5l1JxgO.css.gz +0 -0
  232. package/build/client/_app/immutable/assets/6.BFUut--w.css +0 -1
  233. package/build/client/_app/immutable/assets/6.BFUut--w.css.br +0 -0
  234. package/build/client/_app/immutable/assets/6.BFUut--w.css.gz +0 -0
  235. package/build/client/_app/immutable/assets/7.BTOx7yt7.css +0 -1
  236. package/build/client/_app/immutable/assets/7.BTOx7yt7.css.br +0 -0
  237. package/build/client/_app/immutable/assets/7.BTOx7yt7.css.gz +0 -0
  238. package/build/client/_app/immutable/assets/8.eZGZN-BF.css +0 -1
  239. package/build/client/_app/immutable/assets/8.eZGZN-BF.css.br +0 -0
  240. package/build/client/_app/immutable/assets/8.eZGZN-BF.css.gz +0 -0
  241. package/build/client/_app/immutable/assets/9.DwS5ZHBh.css +0 -1
  242. package/build/client/_app/immutable/assets/9.DwS5ZHBh.css.br +0 -0
  243. package/build/client/_app/immutable/assets/9.DwS5ZHBh.css.gz +0 -0
  244. package/build/client/_app/immutable/assets/ChatView.CwWbzIL-.css +0 -1
  245. package/build/client/_app/immutable/assets/ChatView.CwWbzIL-.css.br +0 -0
  246. package/build/client/_app/immutable/assets/ChatView.CwWbzIL-.css.gz +0 -0
  247. package/build/client/_app/immutable/assets/Phone.FQEfwCX2.css +0 -1
  248. package/build/client/_app/immutable/assets/Phone.FQEfwCX2.css.br +0 -0
  249. package/build/client/_app/immutable/assets/Phone.FQEfwCX2.css.gz +0 -0
  250. package/build/client/_app/immutable/assets/markdown.Dc-OSJWY.css +0 -1
  251. package/build/client/_app/immutable/assets/markdown.Dc-OSJWY.css.br +0 -0
  252. package/build/client/_app/immutable/assets/markdown.Dc-OSJWY.css.gz +0 -0
  253. package/build/client/_app/immutable/chunks/1mEchsPO.js +0 -1
  254. package/build/client/_app/immutable/chunks/1mEchsPO.js.br +0 -0
  255. package/build/client/_app/immutable/chunks/1mEchsPO.js.gz +0 -0
  256. package/build/client/_app/immutable/chunks/B7X-vhXI.js +0 -1
  257. package/build/client/_app/immutable/chunks/B7X-vhXI.js.br +0 -0
  258. package/build/client/_app/immutable/chunks/B7X-vhXI.js.gz +0 -0
  259. package/build/client/_app/immutable/chunks/BRkqKgVG.js +0 -1
  260. package/build/client/_app/immutable/chunks/BRkqKgVG.js.br +0 -0
  261. package/build/client/_app/immutable/chunks/BRkqKgVG.js.gz +0 -0
  262. package/build/client/_app/immutable/chunks/BfJ-f-Tu.js +0 -1
  263. package/build/client/_app/immutable/chunks/BfJ-f-Tu.js.br +0 -2
  264. package/build/client/_app/immutable/chunks/BfJ-f-Tu.js.gz +0 -0
  265. package/build/client/_app/immutable/chunks/CGMJxf7r.js.br +0 -0
  266. package/build/client/_app/immutable/chunks/CGMJxf7r.js.gz +0 -0
  267. package/build/client/_app/immutable/chunks/CJFjKwJ7.js.br +0 -0
  268. package/build/client/_app/immutable/chunks/CJFjKwJ7.js.gz +0 -0
  269. package/build/client/_app/immutable/chunks/CNH2HlKj.js +0 -20
  270. package/build/client/_app/immutable/chunks/CNH2HlKj.js.br +0 -0
  271. package/build/client/_app/immutable/chunks/CNH2HlKj.js.gz +0 -0
  272. package/build/client/_app/immutable/chunks/CVtJ6yRM.js +0 -1
  273. package/build/client/_app/immutable/chunks/CVtJ6yRM.js.br +0 -0
  274. package/build/client/_app/immutable/chunks/CVtJ6yRM.js.gz +0 -0
  275. package/build/client/_app/immutable/chunks/CaiJSUi3.js +0 -1
  276. package/build/client/_app/immutable/chunks/CaiJSUi3.js.br +0 -0
  277. package/build/client/_app/immutable/chunks/CaiJSUi3.js.gz +0 -0
  278. package/build/client/_app/immutable/chunks/CmczWE_d.js +0 -41
  279. package/build/client/_app/immutable/chunks/CmczWE_d.js.br +0 -0
  280. package/build/client/_app/immutable/chunks/CmczWE_d.js.gz +0 -0
  281. package/build/client/_app/immutable/chunks/CsgHjHGZ.js +0 -1
  282. package/build/client/_app/immutable/chunks/CsgHjHGZ.js.br +0 -0
  283. package/build/client/_app/immutable/chunks/CsgHjHGZ.js.gz +0 -0
  284. package/build/client/_app/immutable/chunks/CtrCjGZT.js +0 -1
  285. package/build/client/_app/immutable/chunks/CtrCjGZT.js.br +0 -0
  286. package/build/client/_app/immutable/chunks/CtrCjGZT.js.gz +0 -0
  287. package/build/client/_app/immutable/chunks/DDiOVAd8.js +0 -61
  288. package/build/client/_app/immutable/chunks/DDiOVAd8.js.br +0 -0
  289. package/build/client/_app/immutable/chunks/DDiOVAd8.js.gz +0 -0
  290. package/build/client/_app/immutable/chunks/DVl0sebP.js +0 -2
  291. package/build/client/_app/immutable/chunks/DVl0sebP.js.br +0 -0
  292. package/build/client/_app/immutable/chunks/DVl0sebP.js.gz +0 -0
  293. package/build/client/_app/immutable/chunks/Dc_Gg2H6.js.br +0 -0
  294. package/build/client/_app/immutable/chunks/Dc_Gg2H6.js.gz +0 -0
  295. package/build/client/_app/immutable/chunks/DlnAjkg1.js.br +0 -0
  296. package/build/client/_app/immutable/chunks/YKoRJzXZ.js +0 -3
  297. package/build/client/_app/immutable/chunks/YKoRJzXZ.js.br +0 -0
  298. package/build/client/_app/immutable/chunks/YKoRJzXZ.js.gz +0 -0
  299. package/build/client/_app/immutable/entry/app.CFPgQOa8.js +0 -2
  300. package/build/client/_app/immutable/entry/app.CFPgQOa8.js.br +0 -0
  301. package/build/client/_app/immutable/entry/app.CFPgQOa8.js.gz +0 -0
  302. package/build/client/_app/immutable/entry/start.BnJOVqhI.js +0 -1
  303. package/build/client/_app/immutable/entry/start.BnJOVqhI.js.br +0 -2
  304. package/build/client/_app/immutable/entry/start.BnJOVqhI.js.gz +0 -0
  305. package/build/client/_app/immutable/nodes/0.DR-BBF5r.js +0 -1
  306. package/build/client/_app/immutable/nodes/0.DR-BBF5r.js.br +0 -0
  307. package/build/client/_app/immutable/nodes/0.DR-BBF5r.js.gz +0 -0
  308. package/build/client/_app/immutable/nodes/1.CNm6rAwf.js +0 -1
  309. package/build/client/_app/immutable/nodes/1.CNm6rAwf.js.br +0 -0
  310. package/build/client/_app/immutable/nodes/1.CNm6rAwf.js.gz +0 -0
  311. package/build/client/_app/immutable/nodes/2.B08usYzr.js +0 -13
  312. package/build/client/_app/immutable/nodes/2.B08usYzr.js.br +0 -0
  313. package/build/client/_app/immutable/nodes/2.B08usYzr.js.gz +0 -0
  314. package/build/client/_app/immutable/nodes/3.CsY6J5HS.js.br +0 -0
  315. package/build/client/_app/immutable/nodes/3.CsY6J5HS.js.gz +0 -0
  316. package/build/client/_app/immutable/nodes/4.B_pbOZoD.js +0 -4
  317. package/build/client/_app/immutable/nodes/4.B_pbOZoD.js.br +0 -0
  318. package/build/client/_app/immutable/nodes/4.B_pbOZoD.js.gz +0 -0
  319. package/build/client/_app/immutable/nodes/5.CdLPNo5-.js +0 -1
  320. package/build/client/_app/immutable/nodes/5.CdLPNo5-.js.br +0 -0
  321. package/build/client/_app/immutable/nodes/5.CdLPNo5-.js.gz +0 -0
  322. package/build/client/_app/immutable/nodes/6.CbQQ3FtZ.js +0 -1
  323. package/build/client/_app/immutable/nodes/6.CbQQ3FtZ.js.br +0 -0
  324. package/build/client/_app/immutable/nodes/6.CbQQ3FtZ.js.gz +0 -0
  325. package/build/client/_app/immutable/nodes/7.CCKgiNNk.js +0 -4
  326. package/build/client/_app/immutable/nodes/7.CCKgiNNk.js.br +0 -0
  327. package/build/client/_app/immutable/nodes/7.CCKgiNNk.js.gz +0 -0
  328. package/build/client/_app/immutable/nodes/8.C7AaheUD.js +0 -2
  329. package/build/client/_app/immutable/nodes/8.C7AaheUD.js.br +0 -0
  330. package/build/client/_app/immutable/nodes/8.C7AaheUD.js.gz +0 -0
  331. package/build/client/_app/immutable/nodes/9.DfL9kMC4.js +0 -2
  332. package/build/client/_app/immutable/nodes/9.DfL9kMC4.js.br +0 -0
  333. package/build/client/_app/immutable/nodes/9.DfL9kMC4.js.gz +0 -0
  334. package/build/server/chunks/0-DC2VLooL.js.map +0 -1
  335. package/build/server/chunks/1-XJaf8Jvf.js +0 -9
  336. package/build/server/chunks/1-XJaf8Jvf.js.map +0 -1
  337. package/build/server/chunks/2-D4Cx-1QL.js +0 -21
  338. package/build/server/chunks/2-D4Cx-1QL.js.map +0 -1
  339. package/build/server/chunks/3-CVhIEP-u.js +0 -21
  340. package/build/server/chunks/3-CVhIEP-u.js.map +0 -1
  341. package/build/server/chunks/4-0UE_6Ep-.js +0 -23
  342. package/build/server/chunks/4-0UE_6Ep-.js.map +0 -1
  343. package/build/server/chunks/5-BBIP1PzX.js.map +0 -1
  344. package/build/server/chunks/6-QFSbzRMP.js +0 -9
  345. package/build/server/chunks/6-QFSbzRMP.js.map +0 -1
  346. package/build/server/chunks/7-CZ_YGjMV.js +0 -9
  347. package/build/server/chunks/7-CZ_YGjMV.js.map +0 -1
  348. package/build/server/chunks/8-Xe2Rugb4.js +0 -9
  349. package/build/server/chunks/8-Xe2Rugb4.js.map +0 -1
  350. package/build/server/chunks/9-IwHpC4SO.js +0 -9
  351. package/build/server/chunks/9-IwHpC4SO.js.map +0 -1
  352. package/build/server/chunks/Button-WKgiLWZI.js.map +0 -1
  353. package/build/server/chunks/EmptyState-BUBqASsp.js +0 -26
  354. package/build/server/chunks/EmptyState-BUBqASsp.js.map +0 -1
  355. package/build/server/chunks/Icon-BNBAg85a.js +0 -36
  356. package/build/server/chunks/Icon-BNBAg85a.js.map +0 -1
  357. package/build/server/chunks/Shimmer-C4uBVwxz.js +0 -10
  358. package/build/server/chunks/Shimmer-C4uBVwxz.js.map +0 -1
  359. package/build/server/chunks/_error.svelte-DkIwmECt.js.map +0 -1
  360. package/build/server/chunks/_layout.svelte-DllETxmJ.js +0 -62
  361. package/build/server/chunks/_layout.svelte-DllETxmJ.js.map +0 -1
  362. package/build/server/chunks/_page.svelte-BZSdLKE_.js +0 -118
  363. package/build/server/chunks/_page.svelte-BZSdLKE_.js.map +0 -1
  364. package/build/server/chunks/_page.svelte-Cmuco1mC.js.map +0 -1
  365. package/build/server/chunks/_page.svelte-Co5sF7W-.js +0 -102
  366. package/build/server/chunks/_page.svelte-Co5sF7W-.js.map +0 -1
  367. package/build/server/chunks/_page.svelte-CpL3R-VI.js.map +0 -1
  368. package/build/server/chunks/_page.svelte-DDSzYLUs.js.map +0 -1
  369. package/build/server/chunks/_page.svelte-JIkgFUFf.js.map +0 -1
  370. package/build/server/chunks/_page.svelte-Y9-O5a5w.js.map +0 -1
  371. package/build/server/chunks/_page.svelte-fcX09N4d.js.map +0 -1
  372. package/build/server/chunks/_server.ts-Ds_SUGC3.js.map +0 -1
  373. package/build/server/chunks/client2-bqqmu0b7.js +0 -7
  374. package/build/server/chunks/close-BGlLztTb.js.map +0 -1
  375. package/build/server/chunks/html-FW6Ia4bL.js +0 -8
  376. package/build/server/chunks/html-FW6Ia4bL.js.map +0 -1
  377. package/src/lib/modules/client/common/Card.svelte +0 -19
  378. package/src/lib/modules/client/common/EmptyState.svelte +0 -18
  379. package/src/lib/modules/client/common/Icon.svelte +0 -57
  380. package/src/lib/modules/client/common/StatusBadge.svelte +0 -36
@@ -1,10 +1,11 @@
1
1
  <script lang="ts">
2
2
  import type { CreateTerminalResponse, LaunchSheetProps, Preset } from '$lib/types';
3
3
 
4
- import { Banner, Button, Choicebox, Input, Select } from '@juspay/svelte-ui-components';
4
+ import { Banner, Button, Choicebox, Input, Select, Sheet } from '@juspay/svelte-ui-components';
5
5
  import { onMount } from 'svelte';
6
6
 
7
- const { apiKey, onClose, onLaunch, open }: LaunchSheetProps = $props();
7
+ // eslint-disable-next-line prefer-const -- open is mutated via bind:open from parent
8
+ let { apiKey, onClose, onLaunch, open = $bindable(false) }: LaunchSheetProps = $props();
8
9
 
9
10
  const presets: Preset[] = [
10
11
  { args: [], command: 'claude', label: 'Claude Code' },
@@ -107,174 +108,103 @@
107
108
  }
108
109
  }
109
110
 
110
- function handleBackdropClick(event: MouseEvent): void {
111
- if (event.target === event.currentTarget) {
112
- onClose();
113
- }
114
- }
115
111
 
116
- function handleKeydown(event: KeyboardEvent): void {
117
- if (!open) {
118
- return;
119
- }
120
- if (event.key === 'Escape') {
121
- onClose();
122
- }
123
- }
124
112
  </script>
125
113
 
126
- <svelte:window onkeydown={handleKeydown} />
127
-
128
- {#if open}
129
- <div class="overlay" role="presentation" onclick={handleBackdropClick}>
130
- <div class="sheet" role="dialog" aria-modal="true" aria-label="New Terminal">
131
- <div class="handle-bar">
132
- <div class="handle"></div>
133
- </div>
134
-
135
- <h2 class="sheet-title">New Terminal</h2>
136
-
137
- <div class="section">
138
- <span class="section-label">Quick Launch</span>
139
- <div class="preset-grid">
140
- {#each presets as preset, i (preset.label)}
141
- <Choicebox
142
- mode="radio"
143
- selected={selectedPreset === i}
144
- onclick={(): void => {
145
- selectPreset(i);
146
- }}
147
- classes="preset-choice"
148
- >
149
- {preset.label}
150
- </Choicebox>
151
- {/each}
152
- </div>
114
+ <Sheet
115
+ bind:open
116
+ side="bottom"
117
+ title="New Terminal"
118
+ onclose={onClose}
119
+ classes="launch-sheet"
120
+ >
121
+ {#snippet content()}
122
+ <div class="section">
123
+ <span class="section-label">Quick Launch</span>
124
+ <div class="preset-grid">
125
+ {#each presets as preset, i (preset.label)}
126
+ <Choicebox
127
+ mode="radio"
128
+ selected={selectedPreset === i}
129
+ onclick={() => {
130
+ selectPreset(i);
131
+ }}
132
+ classes="preset-choice"
133
+ >
134
+ {preset.label}
135
+ </Choicebox>
136
+ {/each}
153
137
  </div>
138
+ </div>
154
139
 
155
- <div class="section">
156
- <span class="section-label">Working Directory</span>
157
- <Select
158
- items={projectPaths.length > 0
159
- ? projectPaths.map((p) => ({ id: p, label: p }))
160
- : [{ id: '', label: 'No recent projects' }]}
161
- value={selectedCwd ? [selectedCwd] : projectPaths.length > 0 ? [projectPaths[0]] : ['']}
162
- placeholder="Select a project"
163
- onchange={(value: string[]): void => {
164
- selectedCwd = value[0] || '';
165
- }}
166
- classes="launch-select"
140
+ <div class="section">
141
+ <span class="section-label">Working Directory</span>
142
+ <Select
143
+ items={projectPaths.length > 0
144
+ ? projectPaths.map((p) => ({ id: p, label: p }))
145
+ : [{ id: '', label: 'No recent projects' }]}
146
+ value={selectedCwd ? [selectedCwd] : projectPaths.length > 0 ? [projectPaths[0]] : ['']}
147
+ placeholder="Select a project"
148
+ onchange={(value) => {
149
+ selectedCwd = value[0] || '';
150
+ }}
151
+ classes="launch-select"
152
+ />
153
+ <div class="custom-cwd-group">
154
+ <Input
155
+ label="Or enter a custom path"
156
+ bind:value={customCwd}
157
+ dataType="text"
158
+ placeholder="/path/to/project"
159
+ classes="input-mono launch-input"
167
160
  />
168
- <div class="custom-cwd-group">
169
- <Input
170
- label="Or enter a custom path"
171
- bind:value={customCwd}
172
- dataType="text"
173
- placeholder="/path/to/project"
174
- classes="input-mono launch-input"
175
- />
176
- </div>
177
161
  </div>
178
-
179
- <Button
180
- classes="btn-launch"
181
- disabled={launching}
182
- onclick={handleLaunch}
183
- showLoader={launching}
184
- text={launching ? 'Launching...' : 'Launch Terminal'}
185
- />
186
-
187
- {#if launchError}
188
- <Banner text={launchError} classes="banner-error launch-error-banner" />
189
- {/if}
190
162
  </div>
191
- </div>
192
- {/if}
193
163
 
194
- <style>
195
- .overlay {
196
- position: fixed;
197
- inset: 0;
198
- background: rgba(0, 0, 0, 0.6);
199
- z-index: 200;
200
- display: flex;
201
- align-items: flex-end;
202
- justify-content: center;
203
- }
164
+ <Button
165
+ classes="btn-launch"
166
+ disabled={launching}
167
+ onclick={handleLaunch}
168
+ showLoader={launching}
169
+ text={launching ? 'Launching...' : 'Launch Terminal'}
170
+ />
204
171
 
205
- .sheet {
206
- background: var(--ds-gray-100);
207
- border-top-left-radius: var(--radius-xl);
208
- border-top-right-radius: var(--radius-xl);
209
- width: 100%;
210
- max-height: 90vh;
211
- overflow-y: auto;
212
- padding: var(--space-4) var(--space-5)
213
- calc(var(--space-8, 32px) + env(safe-area-inset-bottom, 0px));
214
- animation: slideUp 0.25s ease;
215
- }
172
+ {#if launchError}
173
+ <Banner text={launchError} classes="banner-error launch-error-banner" />
174
+ {/if}
175
+ {/snippet}
176
+ </Sheet>
216
177
 
217
- @keyframes slideUp {
218
- from {
219
- transform: translateY(100%);
220
- }
221
- to {
222
- transform: translateY(0);
223
- }
224
- }
225
-
226
- /* Desktop: centered modal */
227
- @media (min-width: 768px) {
228
- .overlay {
229
- align-items: center;
230
- }
231
-
232
- .sheet {
233
- max-width: 480px;
234
- border-radius: var(--radius-xl);
235
- animation: fadeScale 0.2s ease;
236
- }
237
-
238
- @keyframes fadeScale {
239
- from {
240
- opacity: 0;
241
- transform: scale(0.96);
242
- }
243
- to {
244
- opacity: 1;
245
- transform: scale(1);
246
- }
247
- }
248
- }
249
-
250
- .handle-bar {
251
- display: flex;
252
- justify-content: center;
253
- padding-bottom: var(--space-3);
254
- }
255
-
256
- .handle {
257
- width: 36px;
258
- height: 4px;
259
- border-radius: var(--radius-full);
260
- background: var(--ds-gray-500);
178
+ <style>
179
+ :global(.launch-sheet) {
180
+ --sheet-overlay-z-index: 200;
181
+ --sheet-overlay-background: rgba(0, 0, 0, 0.6);
182
+ --sheet-background: var(--ds-gray-100);
183
+ --sheet-z-index: 201;
184
+ --sheet-max-height: 90vh;
185
+ --sheet-height: auto;
186
+ --sheet-border: none;
187
+ --sheet-box-shadow: 0 -4px 24px rgba(0, 0, 0, 0.3);
188
+ --sheet-header-padding: var(--space-4) var(--space-5);
189
+ --sheet-header-background: var(--ds-gray-100);
190
+ --sheet-header-border-bottom: none;
191
+ --sheet-title-font-size: var(--text-xl);
192
+ --sheet-title-font-weight: 600;
193
+ --sheet-title-color: var(--text-primary);
194
+ --sheet-close-button-color: var(--text-secondary);
195
+ --sheet-close-button-hover-background: var(--component-bg-hover);
196
+ --sheet-content-padding: 0 var(--space-5) calc(var(--space-8, 32px) + env(safe-area-inset-bottom, 0px));
261
197
  }
262
198
 
263
- /* Hide handle bar on desktop */
199
+ /* Desktop: override bottom sheet to appear as centered modal */
264
200
  @media (min-width: 768px) {
265
- .handle-bar {
266
- display: none;
201
+ :global(.launch-sheet) {
202
+ --sheet-max-height: 80vh;
203
+ --sheet-width: 480px;
204
+ --sheet-max-width: 90vw;
267
205
  }
268
206
  }
269
207
 
270
- .sheet-title {
271
- font-size: var(--text-xl);
272
- font-weight: 600;
273
- color: var(--text-primary);
274
- margin-bottom: var(--space-5);
275
- letter-spacing: var(--tracking-tight);
276
- }
277
-
278
208
  .section {
279
209
  margin-bottom: var(--space-4);
280
210
  }
@@ -44,11 +44,11 @@
44
44
  }
45
45
 
46
46
  :global(.btn-quick-key) {
47
- --button-color: #1e293b;
48
- --button-text-color: #94a3b8;
47
+ --button-color: var(--ds-gray-200);
48
+ --button-text-color: var(--ds-gray-700);
49
49
  --button-border: 1px solid var(--ds-gray-400);
50
- --button-hover-color: #334155;
51
- --button-hover-text-color: #e2e8f0;
50
+ --button-hover-color: var(--ds-gray-300);
51
+ --button-hover-text-color: var(--text-primary);
52
52
  --button-hover-border: 1px solid var(--ds-gray-400);
53
53
  --button-height: 44px;
54
54
  --button-padding: 0 var(--space-3);
@@ -103,16 +103,29 @@ export function getSessionConversation(
103
103
  }
104
104
  }
105
105
 
106
+ // Deduplicate messages by ID — JSONL files can contain duplicate entries
107
+ // (e.g., from compaction or streaming). Keep the last occurrence since it
108
+ // has the most complete content.
109
+ const seenIds = new Set<string>();
110
+ const deduped: ConversationMessage[] = [];
111
+ for (let i = messages.length - 1; i >= 0; i--) {
112
+ if (!seenIds.has(messages[i].id)) {
113
+ seenIds.add(messages[i].id);
114
+ deduped.push(messages[i]);
115
+ }
116
+ }
117
+ deduped.reverse();
118
+
106
119
  // If no explicit offset, return the LAST `limit` messages (most recent conversation)
107
- if (offset === 0 && messages.length > limit) {
108
- let startIdx = messages.length - limit;
120
+ if (offset === 0 && deduped.length > limit) {
121
+ let startIdx = deduped.length - limit;
109
122
  // Adjust to start at a 'user' message boundary so we don't clip mid-turn
110
- while (startIdx > 0 && startIdx < messages.length && messages[startIdx].role !== 'user') {
123
+ while (startIdx > 0 && startIdx < deduped.length && deduped[startIdx].role !== 'user') {
111
124
  startIdx--;
112
125
  }
113
- return messages.slice(startIdx);
126
+ return deduped.slice(startIdx);
114
127
  }
115
- return messages.slice(offset, offset + limit);
128
+ return deduped.slice(offset, offset + limit);
116
129
  } catch (error) {
117
130
  console.error('[sessions] Failed to parse session JSONL:', error);
118
131
  return [];
@@ -277,37 +290,39 @@ function getProjectDir(): string {
277
290
 
278
291
  function listSessionsForProject(projectDir: string): SessionInfo[] {
279
292
  const indexPath = path.join(projectDir, 'sessions-index.json');
293
+ const hasIndex = fs.existsSync(indexPath);
280
294
 
281
- if (!fs.existsSync(indexPath)) {
282
- return [];
283
- }
295
+ const indexedIds = new Set<string>();
296
+ const sessions: SessionInfo[] = [];
284
297
 
285
- try {
286
- const raw = fs.readFileSync(indexPath, 'utf-8');
287
- const index = JSON.parse(raw) as {
288
- entries: {
289
- created?: string;
290
- firstPrompt?: string;
291
- gitBranch?: string;
292
- isSidechain?: boolean;
293
- messageCount?: number;
294
- modified?: string;
295
- projectPath?: string;
296
- sessionId: string;
297
- summary?: string;
298
- }[];
299
- };
300
-
301
- const indexedIds = new Set<string>();
302
- const sessions: SessionInfo[] = index.entries
303
- .filter((e) => !e.isSidechain)
304
- .filter((e) => {
305
- const jsonlFile = path.join(projectDir, `${e.sessionId}.jsonl`);
306
- return fs.existsSync(jsonlFile);
307
- })
308
- .map((entry) => {
298
+ // Phase 1: Read from sessions-index.json if it exists
299
+ if (hasIndex) {
300
+ try {
301
+ const raw = fs.readFileSync(indexPath, 'utf-8');
302
+ const index = JSON.parse(raw) as {
303
+ entries: {
304
+ created?: string;
305
+ firstPrompt?: string;
306
+ gitBranch?: string;
307
+ isSidechain?: boolean;
308
+ messageCount?: number;
309
+ modified?: string;
310
+ projectPath?: string;
311
+ sessionId: string;
312
+ summary?: string;
313
+ }[];
314
+ };
315
+
316
+ for (const entry of index.entries) {
317
+ if (entry.isSidechain) {
318
+ continue;
319
+ }
320
+ const jsonlFile = path.join(projectDir, `${entry.sessionId}.jsonl`);
321
+ if (!fs.existsSync(jsonlFile)) {
322
+ continue;
323
+ }
309
324
  indexedIds.add(entry.sessionId);
310
- return {
325
+ sessions.push({
311
326
  created: entry.created || '',
312
327
  gitBranch: entry.gitBranch || '',
313
328
  id: entry.sessionId,
@@ -317,72 +332,68 @@ function listSessionsForProject(projectDir: string): SessionInfo[] {
317
332
  source: 'claude-code' as const,
318
333
  summary: entry.summary || '',
319
334
  title: cleanTitle(entry.firstPrompt || entry.summary || 'Untitled Session'),
320
- };
321
- });
335
+ });
336
+ }
337
+ } catch (error) {
338
+ console.error('[sessions] Failed to read sessions index:', error);
339
+ }
340
+ }
322
341
 
323
- // Also scan for JSONL files not in the index (e.g., active sessions)
324
- try {
325
- const files = fs.readdirSync(projectDir);
326
- for (const file of files) {
327
- if (!file.endsWith('.jsonl')) {
328
- continue;
329
- }
330
- const sessionId = file.replace('.jsonl', '');
331
- if (indexedIds.has(sessionId)) {
332
- continue;
333
- }
334
- // Read first user message as title
335
- const filePath = path.join(projectDir, file);
336
- const stat = fs.statSync(filePath);
337
- let firstPrompt = 'Active Session';
338
- let messageCount = 0;
339
- try {
340
- const content = fs.readFileSync(filePath, 'utf-8');
341
- // Count user + assistant messages by searching each line for the type field.
342
- // The type field may appear anywhere on the line (after parentUuid, isSidechain, etc.)
343
- // so a prefix-only check is not reliable with the current JSONL format.
344
- let countPos = 0;
345
- while (countPos < content.length) {
346
- const nl = content.indexOf('\n', countPos);
347
- const lineEnd = nl === -1 ? content.length : nl;
348
- const line = content.substring(countPos, lineEnd);
349
- if (line.includes('"type":"user"') || line.includes('"type":"assistant"')) {
350
- messageCount++;
351
- }
352
- if (nl === -1) {
353
- break;
354
- }
355
- countPos = nl + 1;
342
+ // Phase 2: Scan for JSONL files not in the index (or all files when no index exists)
343
+ try {
344
+ const files = fs.readdirSync(projectDir);
345
+ for (const file of files) {
346
+ if (!file.endsWith('.jsonl')) {
347
+ continue;
348
+ }
349
+ const sessionId = file.replace('.jsonl', '');
350
+ if (indexedIds.has(sessionId)) {
351
+ continue;
352
+ }
353
+ const filePath = path.join(projectDir, file);
354
+ const stat = fs.statSync(filePath);
355
+ let firstPrompt = 'Active Session';
356
+ let messageCount = 0;
357
+ try {
358
+ const content = fs.readFileSync(filePath, 'utf-8');
359
+ let countPos = 0;
360
+ while (countPos < content.length) {
361
+ const nl = content.indexOf('\n', countPos);
362
+ const lineEnd = nl === -1 ? content.length : nl;
363
+ const line = content.substring(countPos, lineEnd);
364
+ if (line.includes('"type":"user"') || line.includes('"type":"assistant"')) {
365
+ messageCount++;
356
366
  }
357
- const prompt = findFirstUserPrompt(content);
358
- if (prompt) {
359
- firstPrompt = prompt;
367
+ if (nl === -1) {
368
+ break;
360
369
  }
361
- } catch {
362
- // ignore read errors
370
+ countPos = nl + 1;
363
371
  }
364
-
365
- sessions.push({
366
- created: stat.birthtime.toISOString(),
367
- gitBranch: '',
368
- id: sessionId,
369
- messageCount,
370
- modified: stat.mtime.toISOString(),
371
- projectPath: '',
372
- source: 'claude-code' as const,
373
- summary: '',
374
- title: cleanTitle(firstPrompt),
375
- });
372
+ const prompt = findFirstUserPrompt(content);
373
+ if (prompt) {
374
+ firstPrompt = prompt;
375
+ }
376
+ } catch {
377
+ // ignore read errors
376
378
  }
377
- } catch {
378
- // ignore scan errors
379
- }
380
379
 
381
- return sessions.sort((a, b) => new Date(b.modified).getTime() - new Date(a.modified).getTime());
382
- } catch (error) {
383
- console.error('[sessions] Failed to read sessions index:', error);
384
- return [];
380
+ sessions.push({
381
+ created: stat.birthtime.toISOString(),
382
+ gitBranch: '',
383
+ id: sessionId,
384
+ messageCount,
385
+ modified: stat.mtime.toISOString(),
386
+ projectPath: '',
387
+ source: 'claude-code' as const,
388
+ summary: '',
389
+ title: cleanTitle(firstPrompt),
390
+ });
391
+ }
392
+ } catch {
393
+ // ignore scan errors
385
394
  }
395
+
396
+ return sessions.sort((a, b) => new Date(b.modified).getTime() - new Date(a.modified).getTime());
386
397
  }
387
398
 
388
399
  function readCwdFromProjectDir(projectDir: string, sessions: SessionInfo[]): string {
package/src/lib/theme.css CHANGED
@@ -421,13 +421,13 @@
421
421
  }
422
422
 
423
423
  .pill-live {
424
- --pill-background: rgba(34, 197, 94, 0.15);
425
- --pill-color: #22c55e;
426
- --pill-border: 1px solid rgba(34, 197, 94, 0.3);
424
+ --pill-background: var(--ds-green-alpha-200);
425
+ --pill-color: var(--ds-green-700);
426
+ --pill-border: 1px solid var(--ds-green-alpha-400);
427
427
  --pill-font-size: 0.7rem;
428
428
  --pill-padding: 2px 10px;
429
- --pill-hover-background: rgba(34, 197, 94, 0.15);
430
- --pill-hover-color: #22c55e;
429
+ --pill-hover-background: var(--ds-green-alpha-200);
430
+ --pill-hover-color: var(--ds-green-700);
431
431
  --pill-cursor: default;
432
432
  font-weight: 700;
433
433
  letter-spacing: 0.05em;
@@ -506,6 +506,126 @@
506
506
  --pill-cursor: inherit;
507
507
  }
508
508
 
509
+ /* ===== Icon Sizes ===== */
510
+ .icon-14 {
511
+ --icon-width: 14px;
512
+ --icon-height: 14px;
513
+ --icon-padding: 0;
514
+ --icon-container-paddding: 0;
515
+ }
516
+
517
+ .icon-16 {
518
+ --icon-width: 16px;
519
+ --icon-height: 16px;
520
+ --icon-padding: 0;
521
+ --icon-container-paddding: 0;
522
+ }
523
+
524
+ .icon-18 {
525
+ --icon-width: 18px;
526
+ --icon-height: 18px;
527
+ --icon-padding: 0;
528
+ --icon-container-paddding: 0;
529
+ }
530
+
531
+ .icon-24 {
532
+ --icon-width: 24px;
533
+ --icon-height: 24px;
534
+ --icon-padding: 0;
535
+ --icon-container-paddding: 0;
536
+ }
537
+
538
+ .icon-26 {
539
+ --icon-width: 26px;
540
+ --icon-height: 26px;
541
+ --icon-padding: 0;
542
+ --icon-container-paddding: 0;
543
+ }
544
+
545
+ /* ===== RelativeTime ===== */
546
+ .terminal-time {
547
+ --relative-time-font-size: var(--text-xs);
548
+ --relative-time-color: var(--text-tertiary);
549
+ --relative-time-font-weight: 400;
550
+ white-space: nowrap;
551
+ flex-shrink: 0;
552
+ }
553
+
554
+ /* ===== Status Badge Pill Variants ===== */
555
+
556
+ .pill-status-online {
557
+ --pill-background: var(--ds-green-100);
558
+ --pill-color: var(--ds-green-900);
559
+ --pill-font-size: var(--text-xs);
560
+ --pill-font-weight: 500;
561
+ --pill-padding: 0 var(--space-3);
562
+ --pill-border-radius: var(--radius-full);
563
+ --pill-hover-background: var(--ds-green-100);
564
+ --pill-hover-color: var(--ds-green-900);
565
+ --pill-cursor: default;
566
+ height: 26px;
567
+ text-transform: uppercase;
568
+ letter-spacing: 0.02em;
569
+ }
570
+
571
+ .pill-status-offline {
572
+ --pill-background: var(--ds-red-100);
573
+ --pill-color: var(--ds-red-900);
574
+ --pill-font-size: var(--text-xs);
575
+ --pill-font-weight: 500;
576
+ --pill-padding: 0 var(--space-3);
577
+ --pill-border-radius: var(--radius-full);
578
+ --pill-hover-background: var(--ds-red-100);
579
+ --pill-hover-color: var(--ds-red-900);
580
+ --pill-cursor: default;
581
+ height: 26px;
582
+ text-transform: uppercase;
583
+ letter-spacing: 0.02em;
584
+ }
585
+
586
+ .pill-status-degraded {
587
+ --pill-background: var(--ds-amber-100);
588
+ --pill-color: var(--ds-amber-900);
589
+ --pill-font-size: var(--text-xs);
590
+ --pill-font-weight: 500;
591
+ --pill-padding: 0 var(--space-3);
592
+ --pill-border-radius: var(--radius-full);
593
+ --pill-hover-background: var(--ds-amber-100);
594
+ --pill-hover-color: var(--ds-amber-900);
595
+ --pill-cursor: default;
596
+ height: 26px;
597
+ text-transform: uppercase;
598
+ letter-spacing: 0.02em;
599
+ }
600
+
601
+ .pill-status-unknown {
602
+ --pill-background: var(--ds-gray-300);
603
+ --pill-color: var(--text-secondary);
604
+ --pill-font-size: var(--text-xs);
605
+ --pill-font-weight: 500;
606
+ --pill-padding: 0 var(--space-3);
607
+ --pill-border-radius: var(--radius-full);
608
+ --pill-hover-background: var(--ds-gray-300);
609
+ --pill-hover-color: var(--text-secondary);
610
+ --pill-cursor: default;
611
+ height: 26px;
612
+ text-transform: uppercase;
613
+ letter-spacing: 0.02em;
614
+ }
615
+
616
+ .pill-status-online::before,
617
+ .pill-status-offline::before,
618
+ .pill-status-degraded::before,
619
+ .pill-status-unknown::before {
620
+ content: '';
621
+ display: inline-block;
622
+ width: 6px;
623
+ height: 6px;
624
+ border-radius: 50%;
625
+ background: currentColor;
626
+ flex-shrink: 0;
627
+ }
628
+
509
629
  /* ===== Shimmer Variant Classes ===== */
510
630
 
511
631
  .shimmer-header {
@@ -51,7 +51,7 @@ export interface LaunchSheetProps {
51
51
  apiKey: string;
52
52
  onClose: () => void;
53
53
  onLaunch: (response: CreateTerminalResponse) => void;
54
- open: boolean;
54
+ open?: boolean;
55
55
  }
56
56
 
57
57
  export interface LayoutData {