@juspay/shooter 1.21.0 → 1.22.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 (207) hide show
  1. package/.claude/hooks/notifier.cjs +94 -1
  2. package/build/client/_app/immutable/assets/2.JWRrnR-w.css +1 -0
  3. package/build/client/_app/immutable/assets/2.JWRrnR-w.css.br +0 -0
  4. package/build/client/_app/immutable/assets/2.JWRrnR-w.css.gz +0 -0
  5. package/build/client/_app/immutable/chunks/BfbPKMXz.js +3 -0
  6. package/build/client/_app/immutable/chunks/BfbPKMXz.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/BfbPKMXz.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/C4Hns_Wl.js +1 -0
  9. package/build/client/_app/immutable/chunks/C4Hns_Wl.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/C4Hns_Wl.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/{BmfLecb1.js → CZg4kn4E.js} +1 -1
  12. package/build/client/_app/immutable/chunks/CZg4kn4E.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/CZg4kn4E.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/{EqMAkEha.js → DhK7PwI_.js} +1 -1
  15. package/build/client/_app/immutable/chunks/DhK7PwI_.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/DhK7PwI_.js.gz +0 -0
  17. package/build/client/_app/immutable/entry/{app.CeSxgGat.js → app.CTqz33nP.js} +2 -2
  18. package/build/client/_app/immutable/entry/app.CTqz33nP.js.br +0 -0
  19. package/build/client/_app/immutable/entry/app.CTqz33nP.js.gz +0 -0
  20. package/build/client/_app/immutable/entry/start.Dj-Kvgwo.js +1 -0
  21. package/build/client/_app/immutable/entry/start.Dj-Kvgwo.js.br +2 -0
  22. package/build/client/_app/immutable/entry/start.Dj-Kvgwo.js.gz +0 -0
  23. package/build/client/_app/immutable/nodes/{0.oaPwxh1O.js → 0.Qn7Ktiht.js} +1 -1
  24. package/build/client/_app/immutable/nodes/0.Qn7Ktiht.js.br +0 -0
  25. package/build/client/_app/immutable/nodes/0.Qn7Ktiht.js.gz +0 -0
  26. package/build/client/_app/immutable/nodes/{1.DMPyoM-M.js → 1.BxWOfNlo.js} +1 -1
  27. package/build/client/_app/immutable/nodes/1.BxWOfNlo.js.br +0 -0
  28. package/build/client/_app/immutable/nodes/1.BxWOfNlo.js.gz +0 -0
  29. package/build/client/_app/immutable/nodes/{10.Cbm7nQKK.js → 10.BGPYD1s1.js} +1 -1
  30. package/build/client/_app/immutable/nodes/10.BGPYD1s1.js.br +0 -0
  31. package/build/client/_app/immutable/nodes/10.BGPYD1s1.js.gz +0 -0
  32. package/build/client/_app/immutable/nodes/{11.CKmZjP_a.js → 11.BxY1PUjC.js} +1 -1
  33. package/build/client/_app/immutable/nodes/11.BxY1PUjC.js.br +0 -0
  34. package/build/client/_app/immutable/nodes/{11.CKmZjP_a.js.gz → 11.BxY1PUjC.js.gz} +0 -0
  35. package/build/client/_app/immutable/nodes/2.Bc2qALkX.js +23 -0
  36. package/build/client/_app/immutable/nodes/2.Bc2qALkX.js.br +0 -0
  37. package/build/client/_app/immutable/nodes/2.Bc2qALkX.js.gz +0 -0
  38. package/build/client/_app/immutable/nodes/{3.BgLpGnzb.js → 3.N2-A8noI.js} +1 -1
  39. package/build/client/_app/immutable/nodes/3.N2-A8noI.js.br +0 -0
  40. package/build/client/_app/immutable/nodes/3.N2-A8noI.js.gz +0 -0
  41. package/build/client/_app/immutable/nodes/{5.Avc1-gVb.js → 5.DziEu9rx.js} +1 -1
  42. package/build/client/_app/immutable/nodes/5.DziEu9rx.js.br +0 -0
  43. package/build/client/_app/immutable/nodes/5.DziEu9rx.js.gz +0 -0
  44. package/build/client/_app/immutable/nodes/{6.Dw2wEssJ.js → 6.BWF9Qx6F.js} +1 -1
  45. package/build/client/_app/immutable/nodes/6.BWF9Qx6F.js.br +0 -0
  46. package/build/client/_app/immutable/nodes/6.BWF9Qx6F.js.gz +0 -0
  47. package/build/client/_app/immutable/nodes/{7.DwKZjoBg.js → 7.DHuDIdpz.js} +1 -1
  48. package/build/client/_app/immutable/nodes/7.DHuDIdpz.js.br +0 -0
  49. package/build/client/_app/immutable/nodes/7.DHuDIdpz.js.gz +0 -0
  50. package/build/client/_app/immutable/nodes/{8.ZUAI6g5E.js → 8.D0Ijt9Vv.js} +1 -1
  51. package/build/client/_app/immutable/nodes/8.D0Ijt9Vv.js.br +0 -0
  52. package/build/client/_app/immutable/nodes/8.D0Ijt9Vv.js.gz +0 -0
  53. package/build/client/_app/immutable/nodes/{9.I_KGXPwB.js → 9.2Piwo35J.js} +1 -1
  54. package/build/client/_app/immutable/nodes/9.2Piwo35J.js.br +0 -0
  55. package/build/client/_app/immutable/nodes/9.2Piwo35J.js.gz +0 -0
  56. package/build/client/_app/version.json +1 -1
  57. package/build/client/_app/version.json.br +0 -0
  58. package/build/client/_app/version.json.gz +0 -0
  59. package/build/pty-holder.cjs +6 -0
  60. package/build/server/chunks/{0-vrTNAfZB.js → 0-CVGsyVKN.js} +2 -2
  61. package/build/server/chunks/{0-vrTNAfZB.js.map → 0-CVGsyVKN.js.map} +1 -1
  62. package/build/server/chunks/{1-nbr-bOoF.js → 1-BAlAsKdp.js} +2 -2
  63. package/build/server/chunks/{1-nbr-bOoF.js.map → 1-BAlAsKdp.js.map} +1 -1
  64. package/build/server/chunks/{10-ChyvvJ6w.js → 10-BUCX7Aqz.js} +2 -2
  65. package/build/server/chunks/{10-ChyvvJ6w.js.map → 10-BUCX7Aqz.js.map} +1 -1
  66. package/build/server/chunks/{11-6ZAjL3uU.js → 11-DHPvc2yA.js} +2 -2
  67. package/build/server/chunks/{11-6ZAjL3uU.js.map → 11-DHPvc2yA.js.map} +1 -1
  68. package/build/server/chunks/{2-DWFRVDWJ.js → 2-DLOMdCHW.js} +4 -4
  69. package/build/server/chunks/{2-DWFRVDWJ.js.map → 2-DLOMdCHW.js.map} +1 -1
  70. package/build/server/chunks/{3-CKANM_WM.js → 3-DCf69LYo.js} +2 -2
  71. package/build/server/chunks/{3-CKANM_WM.js.map → 3-DCf69LYo.js.map} +1 -1
  72. package/build/server/chunks/{5-BxVjs2qi.js → 5-D-Uv1voC.js} +2 -2
  73. package/build/server/chunks/{5-BxVjs2qi.js.map → 5-D-Uv1voC.js.map} +1 -1
  74. package/build/server/chunks/{6-Cbf1AAMQ.js → 6-DUrC2Naz.js} +2 -2
  75. package/build/server/chunks/{6-Cbf1AAMQ.js.map → 6-DUrC2Naz.js.map} +1 -1
  76. package/build/server/chunks/{7-CMK2quEf.js → 7-TXwjMHt2.js} +2 -2
  77. package/build/server/chunks/{7-CMK2quEf.js.map → 7-TXwjMHt2.js.map} +1 -1
  78. package/build/server/chunks/{8-DhdfkfDM.js → 8-D2X_jBsT.js} +2 -2
  79. package/build/server/chunks/{8-DhdfkfDM.js.map → 8-D2X_jBsT.js.map} +1 -1
  80. package/build/server/chunks/{9-CPpxtRM5.js → 9-DK0hH5Xa.js} +2 -2
  81. package/build/server/chunks/{9-CPpxtRM5.js.map → 9-DK0hH5Xa.js.map} +1 -1
  82. package/build/server/chunks/_page.svelte-8OFzwdNA.js +758 -0
  83. package/build/server/chunks/_page.svelte-8OFzwdNA.js.map +1 -0
  84. package/build/server/chunks/{_server.ts-BWVlO8iV.js → _server.ts-05JJOdcX.js} +15 -12
  85. package/build/server/chunks/_server.ts-05JJOdcX.js.map +1 -0
  86. package/build/server/chunks/{_server.ts-CC2K8-L2.js → _server.ts-B54Pvhgc.js} +3 -2
  87. package/build/server/chunks/_server.ts-B54Pvhgc.js.map +1 -0
  88. package/build/server/chunks/{_server.ts-BevnuePu.js → _server.ts-BCljU9Sg.js} +7 -3
  89. package/build/server/chunks/_server.ts-BCljU9Sg.js.map +1 -0
  90. package/build/server/chunks/{_server.ts-D-vgx5UZ.js → _server.ts-BTmknWpO.js} +2 -2
  91. package/build/server/chunks/{_server.ts-D-vgx5UZ.js.map → _server.ts-BTmknWpO.js.map} +1 -1
  92. package/build/server/chunks/{_server.ts-tChyh9FX.js → _server.ts-BXhmLZwN.js} +4 -2
  93. package/build/server/chunks/{_server.ts-tChyh9FX.js.map → _server.ts-BXhmLZwN.js.map} +1 -1
  94. package/build/server/chunks/{_server.ts-CvJKTS3Z.js → _server.ts-BbRSpB74.js} +4 -2
  95. package/build/server/chunks/{_server.ts-CvJKTS3Z.js.map → _server.ts-BbRSpB74.js.map} +1 -1
  96. package/build/server/chunks/{_server.ts-Dp-hXW_I.js → _server.ts-Bol54_Qo.js} +3 -2
  97. package/build/server/chunks/_server.ts-Bol54_Qo.js.map +1 -0
  98. package/build/server/chunks/{_server.ts-X1R7L_QI.js → _server.ts-C0PO_cAu.js} +3 -2
  99. package/build/server/chunks/{_server.ts-X1R7L_QI.js.map → _server.ts-C0PO_cAu.js.map} +1 -1
  100. package/build/server/chunks/_server.ts-C6NRpe7e.js +33 -0
  101. package/build/server/chunks/_server.ts-C6NRpe7e.js.map +1 -0
  102. package/build/server/chunks/_server.ts-CGqCOCdK.js +53 -0
  103. package/build/server/chunks/_server.ts-CGqCOCdK.js.map +1 -0
  104. package/build/server/chunks/{_server.ts-CA5KUENM.js → _server.ts-CZb-BI5H.js} +3 -2
  105. package/build/server/chunks/_server.ts-CZb-BI5H.js.map +1 -0
  106. package/build/server/chunks/{_server.ts-VzDcFFgy.js → _server.ts-DPHRUFYS.js} +4 -2
  107. package/build/server/chunks/_server.ts-DPHRUFYS.js.map +1 -0
  108. package/build/server/chunks/{_server.ts-D0zRDSx0.js → _server.ts-D_WRex0k.js} +4 -2
  109. package/build/server/chunks/_server.ts-D_WRex0k.js.map +1 -0
  110. package/build/server/chunks/{_server.ts-CD7JP3fz.js → _server.ts-DiBMY7Ho.js} +3 -2
  111. package/build/server/chunks/_server.ts-DiBMY7Ho.js.map +1 -0
  112. package/build/server/chunks/{library-apns-Dl3iRE2h.js → library-apns-D8RPINlv.js} +62 -7
  113. package/build/server/chunks/library-apns-D8RPINlv.js.map +1 -0
  114. package/build/server/chunks/{pending-requests-C9p57WoU.js → pending-requests-8rWjrF6d.js} +3 -2
  115. package/build/server/chunks/pending-requests-8rWjrF6d.js.map +1 -0
  116. package/build/server/chunks/presence-store-Bx_g0-Gd.js +23 -0
  117. package/build/server/chunks/presence-store-Bx_g0-Gd.js.map +1 -0
  118. package/build/server/chunks/{pty-manager-ZqXqa-6A.js → pty-manager-CoWVT56F.js} +26 -5
  119. package/build/server/chunks/pty-manager-CoWVT56F.js.map +1 -0
  120. package/build/server/chunks/shooter-home-4f_HkdGI.js +10 -0
  121. package/build/server/chunks/shooter-home-4f_HkdGI.js.map +1 -0
  122. package/build/server/index.js +1 -1
  123. package/build/server/index.js.map +1 -1
  124. package/build/server/manifest.js +38 -24
  125. package/build/server/manifest.js.map +1 -1
  126. package/package.json +2 -2
  127. package/src/lib/modules/client/common/index.ts +1 -0
  128. package/src/lib/modules/client/common/presence.ts +47 -0
  129. package/src/lib/modules/client/dashboard/AutopilotPanel.svelte +188 -4
  130. package/src/lib/modules/client/dashboard/autopilot-driver.svelte.ts +681 -0
  131. package/src/lib/modules/client/dashboard/decide-injection.ts +127 -0
  132. package/src/lib/modules/client/dashboard/store.svelte.ts +65 -24
  133. package/src/lib/modules/client/neurolink/fetch-proxy.ts +38 -1
  134. package/src/lib/modules/server/apn/apns-payload.ts +50 -0
  135. package/src/lib/modules/server/apn/library-apns.ts +50 -8
  136. package/src/lib/modules/server/apn/pending-requests.ts +3 -1
  137. package/src/lib/modules/server/sessions/autopilot-context.ts +57 -0
  138. package/src/lib/modules/server/sessions/autopilot-engine.ts +148 -43
  139. package/src/lib/modules/server/sessions/litellm-client.ts +90 -34
  140. package/src/lib/modules/server/sessions/next-step-consensus.ts +27 -2
  141. package/src/lib/modules/server/sessions/summary-store.ts +3 -1
  142. package/src/lib/modules/server/terminal/agent-launch.ts +26 -0
  143. package/src/lib/modules/server/terminal/pty-holder.cjs +6 -0
  144. package/src/lib/modules/server/terminal/pty-manager.ts +13 -3
  145. package/src/lib/modules/server/terminal/session-watcher.ts +12 -2
  146. package/src/lib/modules/server/terminal/terminal-store.ts +3 -1
  147. package/src/lib/modules/server/utils/shooter-home.ts +16 -0
  148. package/src/lib/modules/server/ws/presence-store.ts +50 -0
  149. package/src/lib/types/autopilot.ts +65 -0
  150. package/src/routes/api/autopilot/goal/+server.ts +72 -0
  151. package/src/routes/api/neurolink-proxy/+server.ts +8 -2
  152. package/src/routes/api/notify/+server.ts +22 -15
  153. package/src/routes/api/presence/+server.ts +39 -0
  154. package/src/routes/api/ws-status/+server.ts +8 -5
  155. package/build/client/_app/immutable/assets/2.BHi6pjT2.css +0 -1
  156. package/build/client/_app/immutable/assets/2.BHi6pjT2.css.br +0 -0
  157. package/build/client/_app/immutable/assets/2.BHi6pjT2.css.gz +0 -0
  158. package/build/client/_app/immutable/chunks/BmfLecb1.js.br +0 -0
  159. package/build/client/_app/immutable/chunks/BmfLecb1.js.gz +0 -0
  160. package/build/client/_app/immutable/chunks/CRkG7oE4.js +0 -1
  161. package/build/client/_app/immutable/chunks/CRkG7oE4.js.br +0 -0
  162. package/build/client/_app/immutable/chunks/CRkG7oE4.js.gz +0 -0
  163. package/build/client/_app/immutable/chunks/DOEXXmsh.js +0 -3
  164. package/build/client/_app/immutable/chunks/DOEXXmsh.js.br +0 -0
  165. package/build/client/_app/immutable/chunks/DOEXXmsh.js.gz +0 -0
  166. package/build/client/_app/immutable/chunks/EqMAkEha.js.br +0 -0
  167. package/build/client/_app/immutable/chunks/EqMAkEha.js.gz +0 -0
  168. package/build/client/_app/immutable/entry/app.CeSxgGat.js.br +0 -0
  169. package/build/client/_app/immutable/entry/app.CeSxgGat.js.gz +0 -0
  170. package/build/client/_app/immutable/entry/start.DrnJFwxA.js +0 -1
  171. package/build/client/_app/immutable/entry/start.DrnJFwxA.js.br +0 -2
  172. package/build/client/_app/immutable/entry/start.DrnJFwxA.js.gz +0 -0
  173. package/build/client/_app/immutable/nodes/0.oaPwxh1O.js.br +0 -0
  174. package/build/client/_app/immutable/nodes/0.oaPwxh1O.js.gz +0 -0
  175. package/build/client/_app/immutable/nodes/1.DMPyoM-M.js.br +0 -0
  176. package/build/client/_app/immutable/nodes/1.DMPyoM-M.js.gz +0 -0
  177. package/build/client/_app/immutable/nodes/10.Cbm7nQKK.js.br +0 -0
  178. package/build/client/_app/immutable/nodes/10.Cbm7nQKK.js.gz +0 -0
  179. package/build/client/_app/immutable/nodes/11.CKmZjP_a.js.br +0 -0
  180. package/build/client/_app/immutable/nodes/2.zlrdNFtH.js +0 -13
  181. package/build/client/_app/immutable/nodes/2.zlrdNFtH.js.br +0 -0
  182. package/build/client/_app/immutable/nodes/2.zlrdNFtH.js.gz +0 -0
  183. package/build/client/_app/immutable/nodes/3.BgLpGnzb.js.br +0 -0
  184. package/build/client/_app/immutable/nodes/3.BgLpGnzb.js.gz +0 -0
  185. package/build/client/_app/immutable/nodes/5.Avc1-gVb.js.br +0 -0
  186. package/build/client/_app/immutable/nodes/5.Avc1-gVb.js.gz +0 -0
  187. package/build/client/_app/immutable/nodes/6.Dw2wEssJ.js.br +0 -0
  188. package/build/client/_app/immutable/nodes/6.Dw2wEssJ.js.gz +0 -0
  189. package/build/client/_app/immutable/nodes/7.DwKZjoBg.js.br +0 -0
  190. package/build/client/_app/immutable/nodes/7.DwKZjoBg.js.gz +0 -0
  191. package/build/client/_app/immutable/nodes/8.ZUAI6g5E.js.br +0 -0
  192. package/build/client/_app/immutable/nodes/8.ZUAI6g5E.js.gz +0 -0
  193. package/build/client/_app/immutable/nodes/9.I_KGXPwB.js.br +0 -0
  194. package/build/client/_app/immutable/nodes/9.I_KGXPwB.js.gz +0 -0
  195. package/build/server/chunks/_page.svelte-tBuIq8Pg.js +0 -159
  196. package/build/server/chunks/_page.svelte-tBuIq8Pg.js.map +0 -1
  197. package/build/server/chunks/_server.ts-BWVlO8iV.js.map +0 -1
  198. package/build/server/chunks/_server.ts-BevnuePu.js.map +0 -1
  199. package/build/server/chunks/_server.ts-CA5KUENM.js.map +0 -1
  200. package/build/server/chunks/_server.ts-CC2K8-L2.js.map +0 -1
  201. package/build/server/chunks/_server.ts-CD7JP3fz.js.map +0 -1
  202. package/build/server/chunks/_server.ts-D0zRDSx0.js.map +0 -1
  203. package/build/server/chunks/_server.ts-Dp-hXW_I.js.map +0 -1
  204. package/build/server/chunks/_server.ts-VzDcFFgy.js.map +0 -1
  205. package/build/server/chunks/library-apns-Dl3iRE2h.js.map +0 -1
  206. package/build/server/chunks/pending-requests-C9p57WoU.js.map +0 -1
  207. package/build/server/chunks/pty-manager-ZqXqa-6A.js.map +0 -1
@@ -1,2 +1,2 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../chunks/J5-Cr5oR.js","../chunks/PPVm8Dsz.js"])))=>i.map(i=>d[i]);
2
- import{_ as Wt}from"../chunks/PPVm8Dsz.js";import{p as ht,i as P,s as te,a as b,f as S,d as Bt,j as pt,b as re,e as zt,c as Jt,g as ct}from"../chunks/BPDiEZo0.js";import{p as ce,w as de,g as e,x as m,c as u,d as i,r as c,t as Y,b as t,s as f,E as Ht,A as we,q as Vt,v as Gt,y as Qt,z as Xt,$ as Yt}from"../chunks/DWmC0QM7.js";import{h as Zt}from"../chunks/2rBV5OkJ.js";import{m as ea,s as be,d as mt,B as W,e as yt,I as Le,M as ta,K as aa,P as dt,l as ut,c as na,T as vt,n as sa}from"../chunks/B1bOvemT.js";import{g as ge}from"../chunks/DOEXXmsh.js";import{p as ra}from"../chunks/BmfLecb1.js";import{A as oa}from"../chunks/DzuS5Nbr.js";import"../chunks/BDcFu3l7.js";import{A as ia}from"../chunks/BdtLzPpO.js";import{C as la}from"../chunks/i5iZvmIH.js";import{g as Re}from"../chunks/gQJcRhou.js";import{E as ca}from"../chunks/DomZZqvG.js";function da(T,o){ce(o,!0);let w=ht(o,"open",15,!1);const v=m(()=>o.commands.map((n,d)=>({label:n.label,value:String(d)})));function k(n){const d=parseInt(n.value,10);o.commands[d]&&o.commands[d].action()}ea(T,{get items(){return e(v)},placeholder:"Type a command...",emptyText:"No matching commands",onselect:k,get onclose(){return o.onClose},classes:"command-palette",get open(){return w()},set open(n){w(n)}}),de()}var ua=S('<div><span></span> <span class="status-label svelte-1cg9pai"> </span> <!></div>');function va(T,o){const w=m(()=>o.status==="connected"?"Connected":o.status==="reconnecting"?"Reconnecting...":"Disconnected");var v=ua();let k;var n=u(v),d=i(n,2),_=u(d,!0);c(d);var y=i(d,2);{var I=M=>{W(M,{classes:"btn-ghost btn-sm btn-retry",get onclick(){return o.onretry},text:"Retry"})};P(y,M=>{o.status==="disconnected"&&o.onretry&&M(I)})}c(v),Y(()=>{k=be(v,1,"connection-status svelte-1cg9pai",null,k,{reconnecting:o.status==="reconnecting",disconnected:o.status==="disconnected",connected:o.status==="connected"}),mt(v,"aria-label",`Connection: ${o.status??""}`),be(n,1,`conn-dot ${o.status??""}`,"svelte-1cg9pai"),te(_,e(w))}),b(T,v)}const gt=typeof navigator<"u"&&/Mac|iPhone|iPad/.test(navigator.userAgent),ft=gt?"⌘":"Ctrl";function fa(T){function o(w){if((gt?w.metaKey:w.ctrlKey)&&!pa()&&w.key==="/"){w.preventDefault(),w.stopPropagation(),T.onHelp();return}}return window.addEventListener("keydown",o,!0),{destroy(){window.removeEventListener("keydown",o,!0)}}}function ha(){return[{description:"Command palette",keys:`${ft}+K`},{description:"Keyboard shortcuts",keys:`${ft}+/`}]}function pa(){const T=document.activeElement;if(!T)return!1;const o=T.tagName;return!!(o==="INPUT"||o==="TEXTAREA"||T.isContentEditable||T.closest(".xterm"))}var ma=S('<div class="quick-keys svelte-64qat5" role="toolbar" aria-label="Quick terminal keys"></div>');function ya(T,o){ce(o,!0);const w=[{escape:"",label:"Ctrl+C"},{escape:" ",label:"Tab"},{escape:"\x1B[A",label:"↑"},{escape:"\x1B[B",label:"↓"},{escape:"\x1B",label:"Esc"},{escape:"",label:"Ctrl+D"},{escape:"",label:"Ctrl+Z"}];var v=ma();yt(v,21,()=>w,k=>k.label,(k,n)=>{W(k,{classes:"btn-quick-key",onclick:()=>{o.onKey(e(n).escape)},get text(){return e(n).label}})}),c(v),b(T,v),de()}var ga=S('<p class="share-gate-error svelte-axsobw"> </p>'),wa=S('<div class="share-gate svelte-axsobw"><div class="share-gate-card svelte-axsobw"><h2 class="share-gate-title svelte-axsobw">Shared terminal</h2> <p class="share-gate-sub svelte-axsobw">This terminal is password protected. Enter the password to view it.</p> <!> <!> <!></div></div>');function ba(T,o){ce(o,!0);let w=f(""),v=f(null),k=f(!1);async function n(){!e(w)||e(k)||(t(k,!0),t(v,null),t(v,await o.onSubmit(e(w)),!0),t(k,!1))}function d(g){g.key==="Enter"&&(g.preventDefault(),n())}var _=wa(),y=u(_),I=i(u(y),4);Le(I,{dataType:"password",placeholder:"Password",classes:"share-gate-input",onKeyDown:d,get value(){return e(w)},set value(g){t(w,g,!0)}});var M=i(I,2);{var B=g=>{var q=ga(),F=u(q,!0);c(q),Y(()=>te(F,e(v))),b(g,q)};P(M,g=>{e(v)&&g(B)})}var x=i(M,2);{let g=m(()=>!e(w)||e(k));W(x,{classes:"btn-primary share-gate-btn",onclick:()=>{n()},get disabled(){return e(g)},get showLoader(){return e(k)},text:"Unlock"})}c(y),c(_),b(T,_),de()}var _a=S('<div class="share-active-row svelte-fj2rhy"><span class="share-active-dot svelte-fj2rhy"></span> <span class="share-active-label svelte-fj2rhy"> </span></div> <div class="share-url-row svelte-fj2rhy"><span class="share-url svelte-fj2rhy"> </span> <!></div>',1),ka=S(`<p class="share-sheet-sub svelte-fj2rhy">Anyone with this page's link and the password below can access this terminal.</p>`),Sa=S('<p class="share-error svelte-fj2rhy"> </p>'),xa=S('<div class="share-backdrop svelte-fj2rhy" role="presentation"><div class="share-sheet svelte-fj2rhy" role="dialog" aria-label="Share terminal" tabindex="-1"><div class="share-sheet-header svelte-fj2rhy"><h2 class="share-sheet-title svelte-fj2rhy">Share terminal</h2> <button class="share-sheet-close svelte-fj2rhy" aria-label="Close">&times;</button></div> <!> <div class="share-field svelte-fj2rhy"><span class="share-field-label svelte-fj2rhy">Access</span> <div class="share-mode-toggle svelte-fj2rhy"><button>View only</button> <button>Full control</button></div></div> <div class="share-field svelte-fj2rhy"><span class="share-field-label svelte-fj2rhy"> </span> <div class="share-password-row svelte-fj2rhy"><!> <!></div></div> <!> <div class="share-actions svelte-fj2rhy"><!> <!></div></div></div>');function ja(T,o){ce(o,!0);const w=ht(o,"open",3,!1);let v=f(!1),k=f(null),n=f("view"),d=f(""),_=f(!1),y=f(null),I=f(!1);const M="ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789",B=m(()=>e(v)?e(d).length===0||e(d).length>=6:e(d).length>=6);Ht(()=>{w()&&x()});async function x(){t(y,null),t(I,!1);try{const K=await fetch(`/api/terminals/${o.terminalId}/share`,{headers:{Authorization:`Bearer ${Re()}`}});if(!K.ok){t(y,"Failed to load share state.");return}const A=await K.json();t(v,A.active,!0),t(k,A.mode??null,!0),t(n,A.mode??"view",!0),t(d,"")}catch{t(y,"Failed to reach the server.")}}function g(){const K=crypto.getRandomValues(new Uint8Array(16));t(d,Array.from(K,A=>M[A%M.length]).join(""),!0)}async function q(){if(!(e(_)||!e(B))){t(_,!0),t(y,null);try{const K=await fetch(`/api/terminals/${o.terminalId}/share`,{body:JSON.stringify({mode:e(n),...e(d)?{password:e(d)}:{}}),headers:{Authorization:`Bearer ${Re()}`,"Content-Type":"application/json"},method:"PUT"});if(!K.ok){const R=await K.json().catch(()=>({}));t(y,R.error??"Failed to save share.",!0);return}const A=await K.json();t(v,A.active,!0),t(k,A.mode??null,!0),t(d,"")}catch{t(y,"Failed to reach the server.")}finally{t(_,!1)}}}async function F(){if(!e(_)){t(_,!0),t(y,null);try{if(!(await fetch(`/api/terminals/${o.terminalId}/share`,{headers:{Authorization:`Bearer ${Re()}`},method:"DELETE"})).ok){t(y,"Failed to revoke share.");return}t(v,!1),t(k,null),t(d,"")}catch{t(y,"Failed to reach the server.")}finally{t(_,!1)}}}async function z(){try{await navigator.clipboard.writeText(o.shareUrl),t(I,!0),setTimeout(()=>{t(I,!1)},2e3)}catch{t(y,"Failed to copy.")}}var ue=pt(),oe=we(ue);{var _e=K=>{var A=xa(),R=u(A),ae=u(R),H=i(u(ae),2);c(ae);var ve=i(ae,2);{var Z=h=>{var L=_a(),Q=we(L),ie=i(u(Q),2),je=u(ie);c(ie),c(Q);var Ce=i(Q,2),le=u(Ce),Te=u(le,!0);c(le);var Ie=i(le,2);{let qe=m(()=>e(I)?"Copied":"Copy");W(Ie,{classes:"btn-secondary btn-sm",onclick:()=>{z()},get text(){return e(qe)}})}c(Ce),Y(()=>{te(je,`Sharing is active (${e(k)==="control"?"full control":"view only"})`),te(Te,o.shareUrl)}),b(h,L)},fe=h=>{var L=ka();b(h,L)};P(ve,h=>{e(v)?h(Z):h(fe,-1)})}var j=i(ve,2),V=i(u(j),2),C=u(V),N=i(C,2);c(V),c(j);var ee=i(j,2),G=u(ee),ke=u(G,!0);c(G);var Se=i(G,2),xe=u(Se);Le(xe,{dataType:"text",placeholder:"Password",classes:"share-password-input",get value(){return e(d)},set value(h){t(d,h,!0)}});var Ke=i(xe,2);W(Ke,{classes:"btn-secondary btn-sm",onclick:g,text:"Generate"}),c(Se),c(ee);var he=i(ee,2);{var Oe=h=>{var L=Sa(),Q=u(L,!0);c(L),Y(()=>te(Q,e(y))),b(h,L)};P(he,h=>{e(y)&&h(Oe)})}var pe=i(he,2),ne=u(pe);{var me=h=>{W(h,{classes:"btn-danger btn-sm",onclick:()=>{F()},get disabled(){return e(_)},text:"Stop sharing"})};P(ne,h=>{e(v)&&h(me)})}var De=i(ne,2);{let h=m(()=>e(_)||!e(B)),L=m(()=>e(v)?"Update":"Start sharing");W(De,{classes:"btn-primary btn-sm",onclick:()=>{q()},get disabled(){return e(h)},get showLoader(){return e(_)},get text(){return e(L)}})}c(pe),c(R),c(A),Y(()=>{be(C,1,`share-mode-btn ${e(n)==="view"?"share-mode-active":""}`,"svelte-fj2rhy"),be(N,1,`share-mode-btn ${e(n)==="control"?"share-mode-active":""}`,"svelte-fj2rhy"),te(ke,e(v)?"New password (leave empty to keep current)":"Password (min 6 chars)")}),re("click",A,function(...h){o.onClose?.apply(this,h)}),re("keydown",A,h=>{h.key==="Escape"&&o.onClose()}),re("click",R,h=>{h.stopPropagation()}),re("keydown",R,h=>{h.key==="Escape"&&o.onClose()}),re("click",H,function(...h){o.onClose?.apply(this,h)}),re("click",C,()=>{t(n,"view")}),re("click",N,()=>{t(n,"control")}),b(K,A)};P(oe,K=>{w()&&K(_e)})}b(T,ue),de()}Bt(["click","keydown"]);var Ca=S('<div class="shortcut-row svelte-1u7lstk"><span class="shortcut-desc svelte-1u7lstk"> </span> <!></div>'),Ta=S('<div class="shortcuts-list svelte-1u7lstk"></div>');function Ia(T,o){ce(o,!0);const w=ha();var v=pt(),k=we(v);{var n=d=>{ta(d,{header:{text:"Keyboard Shortcuts"},get onoverlayClick(){return o.onClose},classes:"shortcuts-modal",content:y=>{var I=Ta();yt(I,21,()=>w,M=>M.keys,(M,B)=>{var x=Ca(),g=u(x),q=u(g,!0);c(g);var F=i(g,2);aa(F,{get keys(){return e(B).keys},classes:"shortcut-kbd"}),c(x),Y(()=>te(q,e(B).description)),b(M,x)}),c(I),b(y,I)},$$slots:{content:!0}})};P(k,d=>{o.open&&d(n)})}b(T,v),de()}var Ea=S('<meta name="description" content="Interactive terminal session"/>'),Aa=S('<div class="term-page svelte-1tubujq"><div class="term-topbar svelte-1tubujq"><div class="skeleton" style="width: 120px; height: 20px;"></div></div> <div class="term-body-loading svelte-1tubujq"><div class="skeleton" style="width: 100%; height: 100%;"></div></div></div>'),Pa=S('<div class="term-page svelte-1tubujq"><!></div>'),Ma=S('<main class="main"><div class="session-back-row"><a href="/terminals" class="back-link"><span class="back-arrow">&larr;</span> Terminals</a></div> <!></main>'),Ka=S('<a href="/terminals" class="term-back svelte-1tubujq" aria-label="Back to terminals">&larr;</a>'),Oa=S("<span></span>"),Da=S('<span class="term-cwd svelte-1tubujq"> </span>'),qa=S('<a class="term-session-link svelte-1tubujq" title="View session history">Session</a>'),Na=S("<!> <!>",1),$a=S('<div class="term-input-area svelte-1tubujq"><!> <div class="term-input-bar svelte-1tubujq"><!> <!></div></div>'),Fa=S('<div class="term-exited-bar svelte-1tubujq"><span>Process exited</span> <!></div>'),Ra=S('<div class="term-page svelte-1tubujq"><div class="term-topbar svelte-1tubujq"><div class="term-topbar-left svelte-1tubujq"><!> <span class="term-command-name svelte-1tubujq"> </span> <!> <!> <!> <!> <!></div> <div class="term-topbar-right svelte-1tubujq"><!> <!> <!></div></div> <div class="term-body svelte-1tubujq"></div> <!> <div class="term-chat-body svelte-1tubujq"><!></div> <!></div>'),La=S("<!> <!> <!> <!>",1);function tn(T,o){ce(o,!0);const w=()=>Jt(ra,"$page",v),[v,k]=zt();let n=f(null),d=f(!0),_=f(null),y=f(!1),I=f(!1),M=f(!1),B=f(null),x=f("raw"),g=f("disconnected"),q=f("disconnected"),F=f(""),z=f(Vt([])),ue=f(!1),oe=f(null),_e=f(null),K=f(!1),A=f(!1),R=f(null),ae=f(null),H=null,ve=null,Z=f(!1),fe=f(!1),j=null,V=null,C=!1;const N=m(()=>w().params.id),ee=m(()=>e(n)?ia.includes((e(n).command.split("/").pop()||"").toLowerCase()):!1),G=m(()=>e(n)?.status==="running"),ke=m(()=>e(n)?.command.split("/").pop()||"terminal"),Se=m(()=>e(ee)?"AI":"SHELL"),xe=m(()=>e(ee)?"pill-badge-ai":"pill-badge-shell"),Ke=["Raw","Chat"],he=m(()=>e(x)==="raw"?e(g):e(q)),Oe=m(()=>e(x)==="raw"?0:1),pe=m(()=>L(e(B)||e(n)?.cwd||"")),ne=m(()=>e(oe)==="owner"),me=m(()=>e(oe)==="guest"&&e(_e)==="view"),De=m(()=>typeof window<"u"?`${window.location.origin}/terminals/${e(N)}`:""),h=m(()=>{const a=[{action:()=>{ge("/")},label:"Go to Home"},{action:()=>{ge("/terminals")},label:"Go to Terminals"},{action:()=>{ge("/config")},label:"Go to Settings"},{action:()=>{t(Z,!0)},label:"Show keyboard shortcuts"}];return e(G)&&e(ne)&&a.push({action:()=>{We()},label:"Kill terminal"}),a});function L(a){if(!a)return"";const s="";let r=a;if(typeof navigator<"u"){const p=a.split("/");p.length>=3&&p[1]==="Users"?r=`~/${p.slice(3).join("/")}`:p.length>=3&&p[1]==="home"&&(r=`~/${p.slice(3).join("/")}`)}if(r.length>30){const p=r.split("/");if(p.length>2)return`.../${p.slice(-2).join("/")}`}return r||s}function Q(){try{const a=localStorage.getItem("shooter_config");if(!a)return null;const s=JSON.parse(a);return typeof s?.apiKey=="string"&&s.apiKey?s:null}catch{return null}}const ie="shooter_share_tokens";function je(){const a=e(N);if(!a)return null;try{const s=localStorage.getItem(ie);if(!s)return null;const r=JSON.parse(s);return typeof r[a]=="string"?r[a]:null}catch{return null}}function Ce(a){const s=e(N);if(!s)return;let r={};try{r=JSON.parse(localStorage.getItem(ie)??"{}")}catch{}r[s]=a,localStorage.setItem(ie,JSON.stringify(r))}function le(){return Q()?.apiKey??je()}async function Te(){const a=Q(),s=a?.apiKey??je();if(!s){await Ie();return}try{const r=await fetch(`/api/terminals/${e(N)}`,{headers:{Authorization:`Bearer ${s}`}});if(r.status===401&&!a){await Ie();return}if(!r.ok){t(_,r.status===404?"Terminal not found":"Failed to load terminal",!0),t(d,!1);return}t(n,await r.json(),!0),a?t(oe,"owner"):(t(oe,"guest"),t(_e,e(n).shareMode??"view",!0))}catch{t(_,"Failed to connect to server")}t(d,!1)}async function Ie(){try{const a=await fetch(`/api/terminals/${e(N)}/share/status`);if(a.ok&&(await a.json()).shared){t(K,!0),t(d,!1);return}}catch{}t(_,"No configuration found. Please configure settings first."),t(d,!1)}async function qe(a){try{const s=await fetch(`/api/terminals/${e(N)}/share/auth`,{body:JSON.stringify({password:a}),headers:{"Content-Type":"application/json"},method:"POST"});if(s.status===429)return"Too many attempts — try again in a minute.";if(!s.ok)return"Incorrect password.";const r=await s.json();return Ce(r.token),t(K,!1),t(d,!0),await Te(),e(n)&&!e(_)&&Ve(),null}catch{return"Failed to reach the server."}}async function Ue(){const a=le();if(!a)return null;try{const s=await fetch("/api/ws-ticket",{headers:{Authorization:`Bearer ${a}`},method:"POST"});return s.ok?(await s.json()).ticket:null}catch{return null}}async function We(){if(!e(n)||e(y))return;const a=Q();if(a){t(y,!0);try{(await fetch(`/api/terminals/${e(N)}`,{headers:{Authorization:`Bearer ${a.apiKey}`},method:"DELETE"})).ok?ge("/terminals"):t(y,!1)}catch{t(y,!1)}}}async function wt(){if(!e(n)||e(I))return;const a=Q();if(a){t(I,!0);try{(await fetch(`/api/terminals/${e(N)}`,{headers:{Authorization:`Bearer ${a.apiKey}`},method:"DELETE"})).ok?ge("/terminals"):t(I,!1)}catch{t(I,!1)}}}async function Ne(){if(!e(R)||!e(n)||C)return;const s=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}${e(n).ws}`,r=async()=>{const p=await Ue();if(!p)throw new Error("Failed to obtain WebSocket ticket");return p};try{const{createTerminal:p}=await Wt(async()=>{const{createTerminal:J}=await import("../chunks/J5-Cr5oR.js");return{createTerminal:J}},__vite__mapDeps([0,1]),import.meta.url);if(C||!e(R))return;const O=await p({apiKey:le()??void 0,container:e(R),fontSize:window.innerWidth<768?12:14,getTicket:r,initialCols:e(n).cols??void 0,initialRows:e(n).rows??void 0,onActivity:J=>{C||t(M,J,!0)},onCwd:J=>{C||t(B,J,!0)},onDisconnect:()=>{C||t(g,"reconnecting")},onExit:J=>{!C&&e(n)&&(t(n,{...e(n),exitCode:J,exitedAt:new Date().toISOString(),status:"exited"},!0),t(g,"disconnected"))},onReconnect:()=>{C||t(g,"connected")},readOnly:e(me),terminalId:e(N),wsUrl:s});if(C){O.dispose();return}H=O,t(g,"connected")}catch(p){console.error("Failed to initialize terminal:",p),t(g,"disconnected")}}function Be(){H&&(H.dispose(),H=null)}async function Ee(){if(!e(n)||C||j&&(j.readyState===WebSocket.OPEN||j.readyState===WebSocket.CONNECTING))return;const a=await Ue();if(!a||C||!e(n)){t(q,"disconnected");return}const r=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}${e(n).sessionWs}?ticket=${a}`;j=new WebSocket(r),j.onopen=()=>{C||(t(q,"connected"),j?.send(JSON.stringify({sessionId:e(N),type:"subscribe"})))},j.onmessage=p=>{if(!C)try{const O=JSON.parse(p.data);bt(O)}catch{}},j.onclose=()=>{!C&&e(n)?.status==="running"&&(t(q,"reconnecting"),V&&clearTimeout(V),V=setTimeout(()=>{V=null,!C&&e(n)?.status==="running"&&Ee()},2e3))},j.onerror=()=>{C||t(q,"disconnected")}}function ye(){return e(z)}function bt(a){if(a.type==="history"){const s=a.messages||[];t(z,s.map(r=>({id:r.id,parts:r.content,role:r.role,timestamp:r.timestamp})),!0)}else if(a.type==="message"){const s=typeof a.role=="string"?a.role:"assistant",r=s==="user"?"user":s==="system"?"system":"assistant",p={id:`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:a.content||[],role:r,timestamp:(typeof a.timestamp=="string"?a.timestamp:"")||new Date().toISOString()};t(z,ye().concat(p),!0)}else if(a.type==="tool-use"){const s={id:a.id||`tool-${Date.now()}`,input:a.input||{},toolName:a.name,type:"tool_use"},r={id:`tool-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[s],role:"assistant",timestamp:new Date().toISOString()};t(z,ye().concat(r),!0)}else if(a.type==="tool-result"){const s={isError:a.isError||!1,output:a.output||"",toolUseId:a.id,type:"tool_result"},r={id:`result-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[s],role:"system",timestamp:new Date().toISOString()};t(z,ye().concat(r),!0)}else if(a.type==="thinking"){const s={content:a.text||"",type:"thinking"},r=ye(),p=r.length-1;if(p>=0&&r[p].role==="assistant"){const O=r[p],J={id:O.id,parts:O.parts.concat(s),role:O.role,timestamp:O.timestamp};t(z,[...r.slice(0,p),J],!0)}else{const O={id:`think-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[s],role:"assistant",timestamp:new Date().toISOString()};t(z,r.concat(O),!0)}}else if(a.type==="error"){const s={content:a.message||"Unknown error",type:"text"},r={id:`err-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[s],role:"system",timestamp:new Date().toISOString()};t(z,ye().concat(r),!0)}else a.type==="session-end"&&(t(ue,!0),e(n)&&t(n,{...e(n),status:"exited"},!0))}function ze(){V&&(clearTimeout(V),V=null),j&&(j.onclose=null,j.close(),j=null)}function Je(){e(F).trim()&&(H&&e(g)==="connected"&&H.sendInput(`${e(F)}\r`),t(F,""),e(ae)?.focus())}function _t(a){!a.trim()||j?.readyState!==WebSocket.OPEN||j.send(JSON.stringify({text:a,type:"send-input"}))}function He(){j?.readyState===WebSocket.OPEN&&j.send(JSON.stringify({type:"cancel"}))}function kt(a){e(x)==="raw"?H&&e(g)==="connected"&&H.sendInput(a):e(x)==="chat"&&a===""&&He()}function St(a){a.key==="Enter"&&!a.shiftKey&&(a.preventDefault(),Je())}let Ae=!1,Pe=!1;function xt(a){a!==e(x)&&(t(x,a,!0),a==="raw"&&!Ae?(requestAnimationFrame(()=>{Ne()}),Ae=!0):a==="chat"&&!Pe&&(Ee(),Pe=!0))}function jt(){e(x)==="raw"?(Be(),t(g,"reconnecting"),Ne(),Ae=!0):(ze(),t(q,"reconnecting"),Ee(),Pe=!0)}function Ve(){e(ee)&&window.innerWidth<768?t(x,"chat"):t(x,"raw"),e(x)==="raw"?(requestAnimationFrame(()=>{Ne()}),Ae=!0):(Ee(),Pe=!0)}Gt(async()=>{await Te(),!C&&(ve=fa({onHelp:()=>{t(Z,!e(Z))}}),!(!e(n)||e(_))&&Ve())}),Qt(()=>{C=!0,Be(),ze(),ve?.destroy()});var Ge=La();Zt("1tubujq",a=>{var s=Ea();Xt(()=>{Yt.title=`${e(ke)??""} - Terminal - Shooter`}),b(a,s)});var Qe=we(Ge);{var Ct=a=>{var s=Aa();b(a,s)},Tt=a=>{var s=Pa(),r=u(s);ba(r,{onSubmit:qe}),c(s),b(a,s)},It=a=>{var s=Ma(),r=i(u(s),2);ca(r,{title:"Error",get description(){return e(_)},icon:O=>{na(O,{get svg(){return oa},classes:"icon-24"})}}),c(s),b(a,s)},Et=a=>{var s=Ra(),r=u(s),p=u(r),O=u(p);{var J=l=>{var E=Ka();b(l,E)};P(O,l=>{e(ne)&&l(J)})}var $e=i(O,2),Pt=u($e,!0);c($e);var Ze=i($e,2);dt(Ze,{get text(){return e(Se)},get classes(){return e(xe)}});var et=i(Ze,2);{var Mt=l=>{{let E=m(()=>e(M)?"Active":"Idle");vt(l,{get text(){return e(E)},position:"bottom",children:($,X)=>{var D=Oa();Y(()=>be(D,1,`activity-dot ${e(M)?"activity-active":"activity-idle"}`,"svelte-1tubujq")),b($,D)},$$slots:{default:!0}})}};P(et,l=>{e(G)&&l(Mt)})}var tt=i(et,2);{var Kt=l=>{{let E=m(()=>e(B)||e(n)?.cwd||"");vt(l,{get text(){return e(E)},position:"bottom",children:($,X)=>{var D=Da(),se=u(D,!0);c(D),Y(()=>te(se,e(pe))),b($,D)},$$slots:{default:!0}})}};P(tt,l=>{e(pe)&&l(Kt)})}var at=i(tt,2);va(at,{get status(){return e(he)},onretry:jt});var Ot=i(at,2);{var Dt=l=>{const E=m(()=>e(n).sessionFile??"");var $=qa();Y(X=>mt($,"href",`/session/${X??""}`),[()=>e(E).split(/[\\/]/).pop()?.replace(".jsonl","")||""]),b(l,$)};P(Ot,l=>{e(ne)&&e(ee)&&e(n)?.sessionFile&&l(Dt)})}c(p);var nt=i(p,2),st=u(nt);{var qt=l=>{sa(l,{get items(){return Ke},get activeIndex(){return e(Oe)},onchange:E=>{xt(E===0?"raw":"chat")},classes:"term-tabs"})};P(st,l=>{e(ee)&&l(qt)})}var rt=i(st,2);W(rt,{classes:"term-shortcuts-btn",onclick:()=>{t(Z,!e(Z))},text:"?",ariaLabel:"Keyboard shortcuts"});var Nt=i(rt,2);{var $t=l=>{var E=Na(),$=we(E);W($,{classes:"btn-secondary btn-sm",onclick:()=>{t(A,!0)},text:"Share"});var X=i($,2);{var D=U=>{W(U,{classes:"btn-danger btn-sm",onclick:We,get disabled(){return e(y)},get showLoader(){return e(y)},text:"Kill"})},se=U=>{W(U,{classes:"btn-secondary btn-sm",onclick:wt,get disabled(){return e(I)},get showLoader(){return e(I)},text:"Remove"})};P(X,U=>{e(G)?U(D):U(se,-1)})}b(l,E)};P(Nt,l=>{e(ne)&&l($t)})}c(nt),c(r);var Fe=i(r,2);let ot;ct(Fe,l=>t(R,l),()=>e(R));var it=i(Fe,2);{var Ft=l=>{var E=$a(),$=u(E);ya($,{onKey:kt});var X=i($,2),D=u(X);ct(Le(D,{dataType:"text",useTextArea:!0,placeholder:"Type command... (Shift+Enter for new line)",classes:"input-mono term-input-field",onKeyDown:St,get value(){return e(F)},set value(U){t(F,U,!0)}}),U=>t(ae,U,!0),()=>e(ae));var se=i(D,2);{let U=m(()=>!e(F).trim());W(se,{classes:"btn-primary btn-send",onclick:Je,get disabled(){return e(U)},text:"↵"})}c(X),c(E),b(l,E)};P(it,l=>{e(G)&&e(x)==="raw"&&!e(me)&&l(Ft)})}var Me=i(it,2);let lt;var Rt=u(Me);{let l=m(()=>e(G)&&!e(me));la(Rt,{get messages(){return e(z)},get connectionState(){return e(he)},get sessionEnded(){return e(ue)},get showInput(){return e(l)},onSendInput:_t,onCancel:He})}c(Me);var Lt=i(Me,2);{var Ut=l=>{var E=Fa(),$=i(u(E),2);{var X=D=>{{let se=m(()=>e(n).exitCode!==0?"pill-exit-error":"pill-exit-ok");dt(D,{get text(){return`code ${e(n).exitCode??""}`},get classes(){return e(se)}})}};P($,D=>{e(n).exitCode!==null&&D(X)})}c(E),b(l,E)};P(Lt,l=>{e(G)||l(Ut)})}c(s),Y(()=>{te(Pt,e(ke)),ot=ut(Fe,"",ot,{display:e(x)==="raw"?"flex":"none"}),lt=ut(Me,"",lt,{display:e(x)==="chat"?"flex":"none"})}),b(a,s)};P(Qe,a=>{e(d)?a(Ct):e(K)?a(Tt,1):e(_)?a(It,2):e(n)&&a(Et,3)})}var Xe=i(Qe,2);Ia(Xe,{get open(){return e(Z)},onClose:()=>{t(Z,!1)}});var Ye=i(Xe,2);{let a=m(()=>e(N)??"");ja(Ye,{get open(){return e(A)},get terminalId(){return e(a)},get shareUrl(){return e(De)},onClose:()=>{t(A,!1)}})}var At=i(Ye,2);da(At,{get commands(){return e(h)},onClose:()=>{t(fe,!1)},get open(){return e(fe)},set open(a){t(fe,a,!0)}}),b(T,Ge),de(),k()}export{tn as component};
2
+ import{_ as Wt}from"../chunks/PPVm8Dsz.js";import{p as ht,i as P,s as te,a as b,f as S,d as Bt,j as pt,b as re,e as zt,c as Jt,g as ct}from"../chunks/BPDiEZo0.js";import{p as ce,w as de,g as e,x as m,c as u,d as i,r as c,t as Y,b as t,s as f,E as Ht,A as we,q as Vt,v as Gt,y as Qt,z as Xt,$ as Yt}from"../chunks/DWmC0QM7.js";import{h as Zt}from"../chunks/2rBV5OkJ.js";import{m as ea,s as be,d as mt,B as W,e as yt,I as Le,M as ta,K as aa,P as dt,l as ut,c as na,T as vt,n as sa}from"../chunks/B1bOvemT.js";import{g as ge}from"../chunks/BfbPKMXz.js";import{p as ra}from"../chunks/CZg4kn4E.js";import{A as oa}from"../chunks/DzuS5Nbr.js";import"../chunks/BDcFu3l7.js";import{A as ia}from"../chunks/BdtLzPpO.js";import{C as la}from"../chunks/i5iZvmIH.js";import{g as Re}from"../chunks/gQJcRhou.js";import{E as ca}from"../chunks/DomZZqvG.js";function da(T,o){ce(o,!0);let w=ht(o,"open",15,!1);const v=m(()=>o.commands.map((n,d)=>({label:n.label,value:String(d)})));function k(n){const d=parseInt(n.value,10);o.commands[d]&&o.commands[d].action()}ea(T,{get items(){return e(v)},placeholder:"Type a command...",emptyText:"No matching commands",onselect:k,get onclose(){return o.onClose},classes:"command-palette",get open(){return w()},set open(n){w(n)}}),de()}var ua=S('<div><span></span> <span class="status-label svelte-1cg9pai"> </span> <!></div>');function va(T,o){const w=m(()=>o.status==="connected"?"Connected":o.status==="reconnecting"?"Reconnecting...":"Disconnected");var v=ua();let k;var n=u(v),d=i(n,2),_=u(d,!0);c(d);var y=i(d,2);{var I=M=>{W(M,{classes:"btn-ghost btn-sm btn-retry",get onclick(){return o.onretry},text:"Retry"})};P(y,M=>{o.status==="disconnected"&&o.onretry&&M(I)})}c(v),Y(()=>{k=be(v,1,"connection-status svelte-1cg9pai",null,k,{reconnecting:o.status==="reconnecting",disconnected:o.status==="disconnected",connected:o.status==="connected"}),mt(v,"aria-label",`Connection: ${o.status??""}`),be(n,1,`conn-dot ${o.status??""}`,"svelte-1cg9pai"),te(_,e(w))}),b(T,v)}const gt=typeof navigator<"u"&&/Mac|iPhone|iPad/.test(navigator.userAgent),ft=gt?"⌘":"Ctrl";function fa(T){function o(w){if((gt?w.metaKey:w.ctrlKey)&&!pa()&&w.key==="/"){w.preventDefault(),w.stopPropagation(),T.onHelp();return}}return window.addEventListener("keydown",o,!0),{destroy(){window.removeEventListener("keydown",o,!0)}}}function ha(){return[{description:"Command palette",keys:`${ft}+K`},{description:"Keyboard shortcuts",keys:`${ft}+/`}]}function pa(){const T=document.activeElement;if(!T)return!1;const o=T.tagName;return!!(o==="INPUT"||o==="TEXTAREA"||T.isContentEditable||T.closest(".xterm"))}var ma=S('<div class="quick-keys svelte-64qat5" role="toolbar" aria-label="Quick terminal keys"></div>');function ya(T,o){ce(o,!0);const w=[{escape:"",label:"Ctrl+C"},{escape:" ",label:"Tab"},{escape:"\x1B[A",label:"↑"},{escape:"\x1B[B",label:"↓"},{escape:"\x1B",label:"Esc"},{escape:"",label:"Ctrl+D"},{escape:"",label:"Ctrl+Z"}];var v=ma();yt(v,21,()=>w,k=>k.label,(k,n)=>{W(k,{classes:"btn-quick-key",onclick:()=>{o.onKey(e(n).escape)},get text(){return e(n).label}})}),c(v),b(T,v),de()}var ga=S('<p class="share-gate-error svelte-axsobw"> </p>'),wa=S('<div class="share-gate svelte-axsobw"><div class="share-gate-card svelte-axsobw"><h2 class="share-gate-title svelte-axsobw">Shared terminal</h2> <p class="share-gate-sub svelte-axsobw">This terminal is password protected. Enter the password to view it.</p> <!> <!> <!></div></div>');function ba(T,o){ce(o,!0);let w=f(""),v=f(null),k=f(!1);async function n(){!e(w)||e(k)||(t(k,!0),t(v,null),t(v,await o.onSubmit(e(w)),!0),t(k,!1))}function d(g){g.key==="Enter"&&(g.preventDefault(),n())}var _=wa(),y=u(_),I=i(u(y),4);Le(I,{dataType:"password",placeholder:"Password",classes:"share-gate-input",onKeyDown:d,get value(){return e(w)},set value(g){t(w,g,!0)}});var M=i(I,2);{var B=g=>{var q=ga(),F=u(q,!0);c(q),Y(()=>te(F,e(v))),b(g,q)};P(M,g=>{e(v)&&g(B)})}var x=i(M,2);{let g=m(()=>!e(w)||e(k));W(x,{classes:"btn-primary share-gate-btn",onclick:()=>{n()},get disabled(){return e(g)},get showLoader(){return e(k)},text:"Unlock"})}c(y),c(_),b(T,_),de()}var _a=S('<div class="share-active-row svelte-fj2rhy"><span class="share-active-dot svelte-fj2rhy"></span> <span class="share-active-label svelte-fj2rhy"> </span></div> <div class="share-url-row svelte-fj2rhy"><span class="share-url svelte-fj2rhy"> </span> <!></div>',1),ka=S(`<p class="share-sheet-sub svelte-fj2rhy">Anyone with this page's link and the password below can access this terminal.</p>`),Sa=S('<p class="share-error svelte-fj2rhy"> </p>'),xa=S('<div class="share-backdrop svelte-fj2rhy" role="presentation"><div class="share-sheet svelte-fj2rhy" role="dialog" aria-label="Share terminal" tabindex="-1"><div class="share-sheet-header svelte-fj2rhy"><h2 class="share-sheet-title svelte-fj2rhy">Share terminal</h2> <button class="share-sheet-close svelte-fj2rhy" aria-label="Close">&times;</button></div> <!> <div class="share-field svelte-fj2rhy"><span class="share-field-label svelte-fj2rhy">Access</span> <div class="share-mode-toggle svelte-fj2rhy"><button>View only</button> <button>Full control</button></div></div> <div class="share-field svelte-fj2rhy"><span class="share-field-label svelte-fj2rhy"> </span> <div class="share-password-row svelte-fj2rhy"><!> <!></div></div> <!> <div class="share-actions svelte-fj2rhy"><!> <!></div></div></div>');function ja(T,o){ce(o,!0);const w=ht(o,"open",3,!1);let v=f(!1),k=f(null),n=f("view"),d=f(""),_=f(!1),y=f(null),I=f(!1);const M="ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789",B=m(()=>e(v)?e(d).length===0||e(d).length>=6:e(d).length>=6);Ht(()=>{w()&&x()});async function x(){t(y,null),t(I,!1);try{const K=await fetch(`/api/terminals/${o.terminalId}/share`,{headers:{Authorization:`Bearer ${Re()}`}});if(!K.ok){t(y,"Failed to load share state.");return}const A=await K.json();t(v,A.active,!0),t(k,A.mode??null,!0),t(n,A.mode??"view",!0),t(d,"")}catch{t(y,"Failed to reach the server.")}}function g(){const K=crypto.getRandomValues(new Uint8Array(16));t(d,Array.from(K,A=>M[A%M.length]).join(""),!0)}async function q(){if(!(e(_)||!e(B))){t(_,!0),t(y,null);try{const K=await fetch(`/api/terminals/${o.terminalId}/share`,{body:JSON.stringify({mode:e(n),...e(d)?{password:e(d)}:{}}),headers:{Authorization:`Bearer ${Re()}`,"Content-Type":"application/json"},method:"PUT"});if(!K.ok){const R=await K.json().catch(()=>({}));t(y,R.error??"Failed to save share.",!0);return}const A=await K.json();t(v,A.active,!0),t(k,A.mode??null,!0),t(d,"")}catch{t(y,"Failed to reach the server.")}finally{t(_,!1)}}}async function F(){if(!e(_)){t(_,!0),t(y,null);try{if(!(await fetch(`/api/terminals/${o.terminalId}/share`,{headers:{Authorization:`Bearer ${Re()}`},method:"DELETE"})).ok){t(y,"Failed to revoke share.");return}t(v,!1),t(k,null),t(d,"")}catch{t(y,"Failed to reach the server.")}finally{t(_,!1)}}}async function z(){try{await navigator.clipboard.writeText(o.shareUrl),t(I,!0),setTimeout(()=>{t(I,!1)},2e3)}catch{t(y,"Failed to copy.")}}var ue=pt(),oe=we(ue);{var _e=K=>{var A=xa(),R=u(A),ae=u(R),H=i(u(ae),2);c(ae);var ve=i(ae,2);{var Z=h=>{var L=_a(),Q=we(L),ie=i(u(Q),2),je=u(ie);c(ie),c(Q);var Ce=i(Q,2),le=u(Ce),Te=u(le,!0);c(le);var Ie=i(le,2);{let qe=m(()=>e(I)?"Copied":"Copy");W(Ie,{classes:"btn-secondary btn-sm",onclick:()=>{z()},get text(){return e(qe)}})}c(Ce),Y(()=>{te(je,`Sharing is active (${e(k)==="control"?"full control":"view only"})`),te(Te,o.shareUrl)}),b(h,L)},fe=h=>{var L=ka();b(h,L)};P(ve,h=>{e(v)?h(Z):h(fe,-1)})}var j=i(ve,2),V=i(u(j),2),C=u(V),N=i(C,2);c(V),c(j);var ee=i(j,2),G=u(ee),ke=u(G,!0);c(G);var Se=i(G,2),xe=u(Se);Le(xe,{dataType:"text",placeholder:"Password",classes:"share-password-input",get value(){return e(d)},set value(h){t(d,h,!0)}});var Ke=i(xe,2);W(Ke,{classes:"btn-secondary btn-sm",onclick:g,text:"Generate"}),c(Se),c(ee);var he=i(ee,2);{var Oe=h=>{var L=Sa(),Q=u(L,!0);c(L),Y(()=>te(Q,e(y))),b(h,L)};P(he,h=>{e(y)&&h(Oe)})}var pe=i(he,2),ne=u(pe);{var me=h=>{W(h,{classes:"btn-danger btn-sm",onclick:()=>{F()},get disabled(){return e(_)},text:"Stop sharing"})};P(ne,h=>{e(v)&&h(me)})}var De=i(ne,2);{let h=m(()=>e(_)||!e(B)),L=m(()=>e(v)?"Update":"Start sharing");W(De,{classes:"btn-primary btn-sm",onclick:()=>{q()},get disabled(){return e(h)},get showLoader(){return e(_)},get text(){return e(L)}})}c(pe),c(R),c(A),Y(()=>{be(C,1,`share-mode-btn ${e(n)==="view"?"share-mode-active":""}`,"svelte-fj2rhy"),be(N,1,`share-mode-btn ${e(n)==="control"?"share-mode-active":""}`,"svelte-fj2rhy"),te(ke,e(v)?"New password (leave empty to keep current)":"Password (min 6 chars)")}),re("click",A,function(...h){o.onClose?.apply(this,h)}),re("keydown",A,h=>{h.key==="Escape"&&o.onClose()}),re("click",R,h=>{h.stopPropagation()}),re("keydown",R,h=>{h.key==="Escape"&&o.onClose()}),re("click",H,function(...h){o.onClose?.apply(this,h)}),re("click",C,()=>{t(n,"view")}),re("click",N,()=>{t(n,"control")}),b(K,A)};P(oe,K=>{w()&&K(_e)})}b(T,ue),de()}Bt(["click","keydown"]);var Ca=S('<div class="shortcut-row svelte-1u7lstk"><span class="shortcut-desc svelte-1u7lstk"> </span> <!></div>'),Ta=S('<div class="shortcuts-list svelte-1u7lstk"></div>');function Ia(T,o){ce(o,!0);const w=ha();var v=pt(),k=we(v);{var n=d=>{ta(d,{header:{text:"Keyboard Shortcuts"},get onoverlayClick(){return o.onClose},classes:"shortcuts-modal",content:y=>{var I=Ta();yt(I,21,()=>w,M=>M.keys,(M,B)=>{var x=Ca(),g=u(x),q=u(g,!0);c(g);var F=i(g,2);aa(F,{get keys(){return e(B).keys},classes:"shortcut-kbd"}),c(x),Y(()=>te(q,e(B).description)),b(M,x)}),c(I),b(y,I)},$$slots:{content:!0}})};P(k,d=>{o.open&&d(n)})}b(T,v),de()}var Ea=S('<meta name="description" content="Interactive terminal session"/>'),Aa=S('<div class="term-page svelte-1tubujq"><div class="term-topbar svelte-1tubujq"><div class="skeleton" style="width: 120px; height: 20px;"></div></div> <div class="term-body-loading svelte-1tubujq"><div class="skeleton" style="width: 100%; height: 100%;"></div></div></div>'),Pa=S('<div class="term-page svelte-1tubujq"><!></div>'),Ma=S('<main class="main"><div class="session-back-row"><a href="/terminals" class="back-link"><span class="back-arrow">&larr;</span> Terminals</a></div> <!></main>'),Ka=S('<a href="/terminals" class="term-back svelte-1tubujq" aria-label="Back to terminals">&larr;</a>'),Oa=S("<span></span>"),Da=S('<span class="term-cwd svelte-1tubujq"> </span>'),qa=S('<a class="term-session-link svelte-1tubujq" title="View session history">Session</a>'),Na=S("<!> <!>",1),$a=S('<div class="term-input-area svelte-1tubujq"><!> <div class="term-input-bar svelte-1tubujq"><!> <!></div></div>'),Fa=S('<div class="term-exited-bar svelte-1tubujq"><span>Process exited</span> <!></div>'),Ra=S('<div class="term-page svelte-1tubujq"><div class="term-topbar svelte-1tubujq"><div class="term-topbar-left svelte-1tubujq"><!> <span class="term-command-name svelte-1tubujq"> </span> <!> <!> <!> <!> <!></div> <div class="term-topbar-right svelte-1tubujq"><!> <!> <!></div></div> <div class="term-body svelte-1tubujq"></div> <!> <div class="term-chat-body svelte-1tubujq"><!></div> <!></div>'),La=S("<!> <!> <!> <!>",1);function tn(T,o){ce(o,!0);const w=()=>Jt(ra,"$page",v),[v,k]=zt();let n=f(null),d=f(!0),_=f(null),y=f(!1),I=f(!1),M=f(!1),B=f(null),x=f("raw"),g=f("disconnected"),q=f("disconnected"),F=f(""),z=f(Vt([])),ue=f(!1),oe=f(null),_e=f(null),K=f(!1),A=f(!1),R=f(null),ae=f(null),H=null,ve=null,Z=f(!1),fe=f(!1),j=null,V=null,C=!1;const N=m(()=>w().params.id),ee=m(()=>e(n)?ia.includes((e(n).command.split("/").pop()||"").toLowerCase()):!1),G=m(()=>e(n)?.status==="running"),ke=m(()=>e(n)?.command.split("/").pop()||"terminal"),Se=m(()=>e(ee)?"AI":"SHELL"),xe=m(()=>e(ee)?"pill-badge-ai":"pill-badge-shell"),Ke=["Raw","Chat"],he=m(()=>e(x)==="raw"?e(g):e(q)),Oe=m(()=>e(x)==="raw"?0:1),pe=m(()=>L(e(B)||e(n)?.cwd||"")),ne=m(()=>e(oe)==="owner"),me=m(()=>e(oe)==="guest"&&e(_e)==="view"),De=m(()=>typeof window<"u"?`${window.location.origin}/terminals/${e(N)}`:""),h=m(()=>{const a=[{action:()=>{ge("/")},label:"Go to Home"},{action:()=>{ge("/terminals")},label:"Go to Terminals"},{action:()=>{ge("/config")},label:"Go to Settings"},{action:()=>{t(Z,!0)},label:"Show keyboard shortcuts"}];return e(G)&&e(ne)&&a.push({action:()=>{We()},label:"Kill terminal"}),a});function L(a){if(!a)return"";const s="";let r=a;if(typeof navigator<"u"){const p=a.split("/");p.length>=3&&p[1]==="Users"?r=`~/${p.slice(3).join("/")}`:p.length>=3&&p[1]==="home"&&(r=`~/${p.slice(3).join("/")}`)}if(r.length>30){const p=r.split("/");if(p.length>2)return`.../${p.slice(-2).join("/")}`}return r||s}function Q(){try{const a=localStorage.getItem("shooter_config");if(!a)return null;const s=JSON.parse(a);return typeof s?.apiKey=="string"&&s.apiKey?s:null}catch{return null}}const ie="shooter_share_tokens";function je(){const a=e(N);if(!a)return null;try{const s=localStorage.getItem(ie);if(!s)return null;const r=JSON.parse(s);return typeof r[a]=="string"?r[a]:null}catch{return null}}function Ce(a){const s=e(N);if(!s)return;let r={};try{r=JSON.parse(localStorage.getItem(ie)??"{}")}catch{}r[s]=a,localStorage.setItem(ie,JSON.stringify(r))}function le(){return Q()?.apiKey??je()}async function Te(){const a=Q(),s=a?.apiKey??je();if(!s){await Ie();return}try{const r=await fetch(`/api/terminals/${e(N)}`,{headers:{Authorization:`Bearer ${s}`}});if(r.status===401&&!a){await Ie();return}if(!r.ok){t(_,r.status===404?"Terminal not found":"Failed to load terminal",!0),t(d,!1);return}t(n,await r.json(),!0),a?t(oe,"owner"):(t(oe,"guest"),t(_e,e(n).shareMode??"view",!0))}catch{t(_,"Failed to connect to server")}t(d,!1)}async function Ie(){try{const a=await fetch(`/api/terminals/${e(N)}/share/status`);if(a.ok&&(await a.json()).shared){t(K,!0),t(d,!1);return}}catch{}t(_,"No configuration found. Please configure settings first."),t(d,!1)}async function qe(a){try{const s=await fetch(`/api/terminals/${e(N)}/share/auth`,{body:JSON.stringify({password:a}),headers:{"Content-Type":"application/json"},method:"POST"});if(s.status===429)return"Too many attempts — try again in a minute.";if(!s.ok)return"Incorrect password.";const r=await s.json();return Ce(r.token),t(K,!1),t(d,!0),await Te(),e(n)&&!e(_)&&Ve(),null}catch{return"Failed to reach the server."}}async function Ue(){const a=le();if(!a)return null;try{const s=await fetch("/api/ws-ticket",{headers:{Authorization:`Bearer ${a}`},method:"POST"});return s.ok?(await s.json()).ticket:null}catch{return null}}async function We(){if(!e(n)||e(y))return;const a=Q();if(a){t(y,!0);try{(await fetch(`/api/terminals/${e(N)}`,{headers:{Authorization:`Bearer ${a.apiKey}`},method:"DELETE"})).ok?ge("/terminals"):t(y,!1)}catch{t(y,!1)}}}async function wt(){if(!e(n)||e(I))return;const a=Q();if(a){t(I,!0);try{(await fetch(`/api/terminals/${e(N)}`,{headers:{Authorization:`Bearer ${a.apiKey}`},method:"DELETE"})).ok?ge("/terminals"):t(I,!1)}catch{t(I,!1)}}}async function Ne(){if(!e(R)||!e(n)||C)return;const s=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}${e(n).ws}`,r=async()=>{const p=await Ue();if(!p)throw new Error("Failed to obtain WebSocket ticket");return p};try{const{createTerminal:p}=await Wt(async()=>{const{createTerminal:J}=await import("../chunks/J5-Cr5oR.js");return{createTerminal:J}},__vite__mapDeps([0,1]),import.meta.url);if(C||!e(R))return;const O=await p({apiKey:le()??void 0,container:e(R),fontSize:window.innerWidth<768?12:14,getTicket:r,initialCols:e(n).cols??void 0,initialRows:e(n).rows??void 0,onActivity:J=>{C||t(M,J,!0)},onCwd:J=>{C||t(B,J,!0)},onDisconnect:()=>{C||t(g,"reconnecting")},onExit:J=>{!C&&e(n)&&(t(n,{...e(n),exitCode:J,exitedAt:new Date().toISOString(),status:"exited"},!0),t(g,"disconnected"))},onReconnect:()=>{C||t(g,"connected")},readOnly:e(me),terminalId:e(N),wsUrl:s});if(C){O.dispose();return}H=O,t(g,"connected")}catch(p){console.error("Failed to initialize terminal:",p),t(g,"disconnected")}}function Be(){H&&(H.dispose(),H=null)}async function Ee(){if(!e(n)||C||j&&(j.readyState===WebSocket.OPEN||j.readyState===WebSocket.CONNECTING))return;const a=await Ue();if(!a||C||!e(n)){t(q,"disconnected");return}const r=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}${e(n).sessionWs}?ticket=${a}`;j=new WebSocket(r),j.onopen=()=>{C||(t(q,"connected"),j?.send(JSON.stringify({sessionId:e(N),type:"subscribe"})))},j.onmessage=p=>{if(!C)try{const O=JSON.parse(p.data);bt(O)}catch{}},j.onclose=()=>{!C&&e(n)?.status==="running"&&(t(q,"reconnecting"),V&&clearTimeout(V),V=setTimeout(()=>{V=null,!C&&e(n)?.status==="running"&&Ee()},2e3))},j.onerror=()=>{C||t(q,"disconnected")}}function ye(){return e(z)}function bt(a){if(a.type==="history"){const s=a.messages||[];t(z,s.map(r=>({id:r.id,parts:r.content,role:r.role,timestamp:r.timestamp})),!0)}else if(a.type==="message"){const s=typeof a.role=="string"?a.role:"assistant",r=s==="user"?"user":s==="system"?"system":"assistant",p={id:`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:a.content||[],role:r,timestamp:(typeof a.timestamp=="string"?a.timestamp:"")||new Date().toISOString()};t(z,ye().concat(p),!0)}else if(a.type==="tool-use"){const s={id:a.id||`tool-${Date.now()}`,input:a.input||{},toolName:a.name,type:"tool_use"},r={id:`tool-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[s],role:"assistant",timestamp:new Date().toISOString()};t(z,ye().concat(r),!0)}else if(a.type==="tool-result"){const s={isError:a.isError||!1,output:a.output||"",toolUseId:a.id,type:"tool_result"},r={id:`result-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[s],role:"system",timestamp:new Date().toISOString()};t(z,ye().concat(r),!0)}else if(a.type==="thinking"){const s={content:a.text||"",type:"thinking"},r=ye(),p=r.length-1;if(p>=0&&r[p].role==="assistant"){const O=r[p],J={id:O.id,parts:O.parts.concat(s),role:O.role,timestamp:O.timestamp};t(z,[...r.slice(0,p),J],!0)}else{const O={id:`think-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[s],role:"assistant",timestamp:new Date().toISOString()};t(z,r.concat(O),!0)}}else if(a.type==="error"){const s={content:a.message||"Unknown error",type:"text"},r={id:`err-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[s],role:"system",timestamp:new Date().toISOString()};t(z,ye().concat(r),!0)}else a.type==="session-end"&&(t(ue,!0),e(n)&&t(n,{...e(n),status:"exited"},!0))}function ze(){V&&(clearTimeout(V),V=null),j&&(j.onclose=null,j.close(),j=null)}function Je(){e(F).trim()&&(H&&e(g)==="connected"&&H.sendInput(`${e(F)}\r`),t(F,""),e(ae)?.focus())}function _t(a){!a.trim()||j?.readyState!==WebSocket.OPEN||j.send(JSON.stringify({text:a,type:"send-input"}))}function He(){j?.readyState===WebSocket.OPEN&&j.send(JSON.stringify({type:"cancel"}))}function kt(a){e(x)==="raw"?H&&e(g)==="connected"&&H.sendInput(a):e(x)==="chat"&&a===""&&He()}function St(a){a.key==="Enter"&&!a.shiftKey&&(a.preventDefault(),Je())}let Ae=!1,Pe=!1;function xt(a){a!==e(x)&&(t(x,a,!0),a==="raw"&&!Ae?(requestAnimationFrame(()=>{Ne()}),Ae=!0):a==="chat"&&!Pe&&(Ee(),Pe=!0))}function jt(){e(x)==="raw"?(Be(),t(g,"reconnecting"),Ne(),Ae=!0):(ze(),t(q,"reconnecting"),Ee(),Pe=!0)}function Ve(){e(ee)&&window.innerWidth<768?t(x,"chat"):t(x,"raw"),e(x)==="raw"?(requestAnimationFrame(()=>{Ne()}),Ae=!0):(Ee(),Pe=!0)}Gt(async()=>{await Te(),!C&&(ve=fa({onHelp:()=>{t(Z,!e(Z))}}),!(!e(n)||e(_))&&Ve())}),Qt(()=>{C=!0,Be(),ze(),ve?.destroy()});var Ge=La();Zt("1tubujq",a=>{var s=Ea();Xt(()=>{Yt.title=`${e(ke)??""} - Terminal - Shooter`}),b(a,s)});var Qe=we(Ge);{var Ct=a=>{var s=Aa();b(a,s)},Tt=a=>{var s=Pa(),r=u(s);ba(r,{onSubmit:qe}),c(s),b(a,s)},It=a=>{var s=Ma(),r=i(u(s),2);ca(r,{title:"Error",get description(){return e(_)},icon:O=>{na(O,{get svg(){return oa},classes:"icon-24"})}}),c(s),b(a,s)},Et=a=>{var s=Ra(),r=u(s),p=u(r),O=u(p);{var J=l=>{var E=Ka();b(l,E)};P(O,l=>{e(ne)&&l(J)})}var $e=i(O,2),Pt=u($e,!0);c($e);var Ze=i($e,2);dt(Ze,{get text(){return e(Se)},get classes(){return e(xe)}});var et=i(Ze,2);{var Mt=l=>{{let E=m(()=>e(M)?"Active":"Idle");vt(l,{get text(){return e(E)},position:"bottom",children:($,X)=>{var D=Oa();Y(()=>be(D,1,`activity-dot ${e(M)?"activity-active":"activity-idle"}`,"svelte-1tubujq")),b($,D)},$$slots:{default:!0}})}};P(et,l=>{e(G)&&l(Mt)})}var tt=i(et,2);{var Kt=l=>{{let E=m(()=>e(B)||e(n)?.cwd||"");vt(l,{get text(){return e(E)},position:"bottom",children:($,X)=>{var D=Da(),se=u(D,!0);c(D),Y(()=>te(se,e(pe))),b($,D)},$$slots:{default:!0}})}};P(tt,l=>{e(pe)&&l(Kt)})}var at=i(tt,2);va(at,{get status(){return e(he)},onretry:jt});var Ot=i(at,2);{var Dt=l=>{const E=m(()=>e(n).sessionFile??"");var $=qa();Y(X=>mt($,"href",`/session/${X??""}`),[()=>e(E).split(/[\\/]/).pop()?.replace(".jsonl","")||""]),b(l,$)};P(Ot,l=>{e(ne)&&e(ee)&&e(n)?.sessionFile&&l(Dt)})}c(p);var nt=i(p,2),st=u(nt);{var qt=l=>{sa(l,{get items(){return Ke},get activeIndex(){return e(Oe)},onchange:E=>{xt(E===0?"raw":"chat")},classes:"term-tabs"})};P(st,l=>{e(ee)&&l(qt)})}var rt=i(st,2);W(rt,{classes:"term-shortcuts-btn",onclick:()=>{t(Z,!e(Z))},text:"?",ariaLabel:"Keyboard shortcuts"});var Nt=i(rt,2);{var $t=l=>{var E=Na(),$=we(E);W($,{classes:"btn-secondary btn-sm",onclick:()=>{t(A,!0)},text:"Share"});var X=i($,2);{var D=U=>{W(U,{classes:"btn-danger btn-sm",onclick:We,get disabled(){return e(y)},get showLoader(){return e(y)},text:"Kill"})},se=U=>{W(U,{classes:"btn-secondary btn-sm",onclick:wt,get disabled(){return e(I)},get showLoader(){return e(I)},text:"Remove"})};P(X,U=>{e(G)?U(D):U(se,-1)})}b(l,E)};P(Nt,l=>{e(ne)&&l($t)})}c(nt),c(r);var Fe=i(r,2);let ot;ct(Fe,l=>t(R,l),()=>e(R));var it=i(Fe,2);{var Ft=l=>{var E=$a(),$=u(E);ya($,{onKey:kt});var X=i($,2),D=u(X);ct(Le(D,{dataType:"text",useTextArea:!0,placeholder:"Type command... (Shift+Enter for new line)",classes:"input-mono term-input-field",onKeyDown:St,get value(){return e(F)},set value(U){t(F,U,!0)}}),U=>t(ae,U,!0),()=>e(ae));var se=i(D,2);{let U=m(()=>!e(F).trim());W(se,{classes:"btn-primary btn-send",onclick:Je,get disabled(){return e(U)},text:"↵"})}c(X),c(E),b(l,E)};P(it,l=>{e(G)&&e(x)==="raw"&&!e(me)&&l(Ft)})}var Me=i(it,2);let lt;var Rt=u(Me);{let l=m(()=>e(G)&&!e(me));la(Rt,{get messages(){return e(z)},get connectionState(){return e(he)},get sessionEnded(){return e(ue)},get showInput(){return e(l)},onSendInput:_t,onCancel:He})}c(Me);var Lt=i(Me,2);{var Ut=l=>{var E=Fa(),$=i(u(E),2);{var X=D=>{{let se=m(()=>e(n).exitCode!==0?"pill-exit-error":"pill-exit-ok");dt(D,{get text(){return`code ${e(n).exitCode??""}`},get classes(){return e(se)}})}};P($,D=>{e(n).exitCode!==null&&D(X)})}c(E),b(l,E)};P(Lt,l=>{e(G)||l(Ut)})}c(s),Y(()=>{te(Pt,e(ke)),ot=ut(Fe,"",ot,{display:e(x)==="raw"?"flex":"none"}),lt=ut(Me,"",lt,{display:e(x)==="chat"?"flex":"none"})}),b(a,s)};P(Qe,a=>{e(d)?a(Ct):e(K)?a(Tt,1):e(_)?a(It,2):e(n)&&a(Et,3)})}var Xe=i(Qe,2);Ia(Xe,{get open(){return e(Z)},onClose:()=>{t(Z,!1)}});var Ye=i(Xe,2);{let a=m(()=>e(N)??"");ja(Ye,{get open(){return e(A)},get terminalId(){return e(a)},get shareUrl(){return e(De)},onClose:()=>{t(A,!1)}})}var At=i(Ye,2);da(At,{get commands(){return e(h)},onClose:()=>{t(fe,!1)},get open(){return e(fe)},set open(a){t(fe,a,!0)}}),b(T,Ge),de(),k()}export{tn as component};
@@ -0,0 +1,23 @@
1
+ import{d as he,i as N,s as _,b as Wt,a as p,f as h}from"../chunks/BPDiEZo0.js";import{s as J,q as qt,g as r,b as w,p as Yt,v as ge,c as l,d as v,r as c,t as R,w as Ft,x as H,A as Mt,y as Ee,D as Te,$ as Ne,B as se}from"../chunks/DWmC0QM7.js";import{s as Tt,g as Dt,d as nt,e as dt,P as ye,l as Oe,j as Qt,B as Jt,c as $t,b as ze,i as ne}from"../chunks/B1bOvemT.js";import{h as Ie}from"../chunks/2rBV5OkJ.js";import{g as ae}from"../chunks/BfbPKMXz.js";import{B as Pe}from"../chunks/Bn-6X1BO.js";import{R as je,S as re}from"../chunks/CJulw9ux.js";import{S as Le}from"../chunks/CG453M9q.js";import{c as Me,s as De,g as Re}from"../chunks/xs1Xl3_e.js";import{g as oe,i as Be}from"../chunks/gQJcRhou.js";import"../chunks/BDcFu3l7.js";import{f as Xt}from"../chunks/BLszSzTT.js";import{S as Ke}from"../chunks/BcpydfqI.js";import{i as We,N as qe}from"../chunks/C4Hns_Wl.js";import{d as Ye}from"../chunks/C87ZRWX0.js";import{E as ie}from"../chunks/DomZZqvG.js";const Fe=2e4;function Ge(e){if(typeof document>"u")return()=>{};const t=()=>{Ut(e,document.visibilityState==="visible"?"foreground":"background")},n=()=>{Ut(e,"background")};t();const a=setInterval(t,Fe);return document.addEventListener("visibilitychange",t),window.addEventListener("pagehide",n),()=>{clearInterval(a),document.removeEventListener("visibilitychange",t),window.removeEventListener("pagehide",n),Ut(e,"background")}}function Ut(e,t){fetch("/api/presence",{body:JSON.stringify({state:t}),headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json"},keepalive:!0,method:"POST"}).catch(()=>{})}const Je={humanGraceMs:5e3,injectConfidence:.7,maxAutoActions:8,minIntervalMs:3e4},ce=400,$e=[/\brm\s+-[a-z]*r[a-z]*f?\s+(\/|~|\/\*|\$home)/i,/\brm\s+-[a-z]*f[a-z]*r?\s+(\/|~|\/\*|\$home)/i,/:\(\)\s*\{\s*:\s*\|\s*:\s*&\s*\}\s*;\s*:/,/\bdd\b[^\n]*\bof=\/dev\//i,/>\s*\/dev\/(sd|nvme|disk|hd)/i,/\bmkfs(\.[a-z0-9]+)?\b/i,/\b(shutdown|reboot|halt|poweroff)\b/i];function Ue(e,t,n,a=Je,s={}){const o=t.steps[0];return o?o.tentative&&!s.allowTentative?{act:!1,reason:"consensus is tentative (no quorum)"}:e.isManaged?e.lastEventType!=="agent-idle"?{act:!1,reason:`agent not idle (last event: ${e.lastEventType})`}:n-e.lastActivityAt<a.humanGraceMs?{act:!1,reason:"recent activity — within human grace window"}:n-e.lastInjectedAt<a.minIntervalMs?{act:!1,reason:"rate-limited (min inject interval)"}:e.autoActionCount>=a.maxAutoActions?{act:!1,reason:"circuit breaker — max consecutive auto-actions reached"}:o.confidence<a.injectConfidence?{act:!1,reason:`confidence ${o.confidence.toFixed(2)} below floor`}:e.lastActedStep!==null&&Zt(o.text)===e.lastActedStep?{act:!1,reason:"already acted on this step"}:{act:!0,reason:"idle + high-confidence consensus",step:o}:{act:!1,reason:"terminal is external / read-only (cannot inject)"}:{act:!1,reason:"no consensus step"}}function He(e,t){const n=e.trim();if(n.length===0)return{command:n,reason:"empty command",safe:!1};if(/[\r\n]/.test(e))return{command:n,reason:"multi-line command rejected (single command only)",safe:!1};if(n.length>ce)return{command:n,reason:`command too long (> ${ce})`,safe:!1};for(const a of $e)if(a.test(n))return{command:n,reason:"matches a dangerous-command pattern",safe:!1};return t!==null&&n===t.trim()?{command:n,reason:"duplicate of last injected command",safe:!1}:{command:n,reason:"ok",safe:!0}}function Zt(e){return e.toLowerCase().trim().replace(/\s+/g," ").replace(/[.,;:!?]+$/,"")}const _e="shooter_autonomy",Ve=6e3,Xe=3e3,Ze=5e3,Qe=40,ts=12e4,es=120,ss=/^[A-Za-z0-9_-]+$/,ns=new Set(["bun","cargo","cat","deno","echo","eslint","git","go","jest","ls","make","node","npm","npx","pnpm","prettier","pwd","python","python3","tsc","vitest","yarn"]),as=new Set(["claude","opencode"]);class rs{#t=J(qt([]));get actions(){return r(this.#t)}set actions(t){w(this.#t,t,!0)}#e=J(!1);get enabled(){return r(this.#e)}set enabled(t){w(this.#e,t,!0)}apiKey="";deps;eventsWs=null;pollTimer=null;reconnectTimer=null;started=!1;terminals=new Map;constructor(t){this.deps={now:t?.now??(()=>Date.now()),produceCommand:t?.produceCommand??os},this.enabled=us()}setEnabled(t){this.enabled=t;try{localStorage.setItem(_e,JSON.stringify({enabled:t}))}catch{}}start(t){this.apiKey=t,!this.started&&(this.started=!0,typeof window<"u"&&window.addEventListener("shooter:wake",this.onWake),this.connectEvents(),this.refresh(),this.pollTimer=setInterval(()=>{this.refresh()},Ve))}stop(){this.started=!1,typeof window<"u"&&window.removeEventListener("shooter:wake",this.onWake),this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null),this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.eventsWs&&(this.eventsWs.onclose=null,this.eventsWs.close(),this.eventsWs=null);for(const t of this.terminals.values())t.injectSocket?.close(),t.injectSocket=null}async connectEvents(){const t=await this.getTicket();if(!t||!this.started)return;const n=window.location.origin.replace(/^http/,"ws"),a=new WebSocket(`${n}/ws/events?ticket=${t}`);this.eventsWs=a,a.onmessage=s=>{try{const o=JSON.parse(s.data);o&&typeof o=="object"&&this.handleEvent(o)}catch{}},a.onclose=()=>{this.eventsWs=null,this.started&&this.scheduleReconnect()},a.onerror=()=>{}}createRuntime(t){const n={autoActionCount:0,busy:!1,command:"",consensus:null,injectSocket:null,isManaged:!1,lastActedStep:null,lastActivityAt:0,lastCommand:null,lastEventAt:0,lastEventType:"",lastInjectedAt:0,recentOutput:""};return this.terminals.set(t,n),n}async evaluate(t){if(!this.enabled)return;const n=this.terminals.get(t);if(!n||n.busy||!n.consensus)return;const a={autoActionCount:n.autoActionCount,isManaged:n.isManaged,lastActedStep:n.lastActedStep,lastActivityAt:n.lastActivityAt,lastEventType:n.lastEventType,lastInjectedAt:n.lastInjectedAt},s=Ue(a,n.consensus,this.deps.now(),void 0,{allowTentative:Ht(n.command)});if(!(!s.act||!s.step)){n.busy=!0;try{const o=Ht(n.command);let f;try{f=await this.deps.produceCommand({apiKey:this.apiKey,isAgentTerminal:o,recentOutput:n.recentOutput,step:s.step,terminalId:t})}catch{f=null}if(!f){this.log(t,"skipped",`no command for: ${s.step.text.slice(0,60)}`);return}const g=o?f.replace(/\s*[\r\n]+\s*/g," ").trim():f,k=He(g,n.lastCommand);if(!k.safe){n.lastActedStep=Zt(s.step.text),this.log(t,"skipped",`guard: ${k.reason}`);return}await this.inject(t,k.command)?(n.lastInjectedAt=this.deps.now(),n.lastCommand=k.command,n.lastActedStep=Zt(s.step.text),n.autoActionCount+=1,this.log(t,"injected",k.command)):this.log(t,"error",`inject failed: ${k.command}`)}finally{n.busy=!1}}}async fetchSummaries(){try{const t=await fetch("/api/summaries?limit=30",{headers:{Authorization:`Bearer ${this.apiKey}`}});if(!t.ok)return;const n=await t.json(),a=new Set;for(const s of n.summaries??[]){const o=s.terminalId;if(!o||a.has(o))continue;const f=this.terminals.get(o);if(!f)continue;a.add(o),f.consensus={agentCount:5,quorum:3,steps:ls(s.nextSteps)};const g=Date.parse(s.createdAt);s.trigger==="agent-idle"&&Number.isFinite(g)&&g>=f.lastEventAt&&this.deps.now()-g<ts&&(f.lastEventType="agent-idle")}}catch{}}async fetchTerminals(){try{const t=await fetch("/api/terminals",{headers:{Authorization:`Bearer ${this.apiKey}`}});if(!t.ok)return;const n=await t.json(),a=new Set;for(const s of n.terminals??[]){if(s.exitedAt!==null||s.status==="exited")continue;a.add(s.id);const o=this.terminals.get(s.id)??this.createRuntime(s.id);o.isManaged=!0,o.command=s.command??""}for(const s of[...this.terminals.keys()])a.has(s)||(this.terminals.get(s)?.injectSocket?.close(),this.terminals.delete(s))}catch{}}async getTicket(){try{const t=await fetch("/api/ws-ticket",{headers:{Authorization:`Bearer ${this.apiKey}`},method:"POST"});if(!t.ok)return null;const{ticket:n}=await t.json();return n}catch{return null}}handleEvent(t){const n=typeof t.type=="string"?t.type:"",a=typeof t.terminalId=="string"?t.terminalId:"";if(!n||n==="welcome"||!a)return;const s=this.terminals.get(a);s&&(s.lastEventType=n,s.lastEventAt=this.deps.now(),n!=="agent-idle"&&n!=="agent-question"&&(s.lastActivityAt=this.deps.now()),n==="tool-completed"&&t.success===!0&&(s.autoActionCount=0),n==="agent-idle"&&this.enabled&&this.evaluate(a))}async inject(t,n){const a=this.terminals.get(t);if(!a||!ss.test(t))return!1;let s=a.injectSocket;if(!s||s.readyState>WebSocket.OPEN){const o=await this.getTicket();if(!o)return!1;const f=window.location.origin.replace(/^http/,"ws");if(s=new WebSocket(`${f}/ws/terminal/${encodeURIComponent(t)}?ticket=${encodeURIComponent(o)}`),a.injectSocket=s,!await vs(s))return a.injectSocket=null,!1}if(s.readyState!==WebSocket.OPEN)return!1;if(Ht(a.command)){const o=n.replace(/\s*[\r\n]+\s*/g," ").trim();return!o||(s.send(JSON.stringify({data:o,type:"input"})),await is(es),s.readyState!==WebSocket.OPEN)?!1:(s.send(JSON.stringify({data:"\r",type:"input"})),!0)}return s.send(JSON.stringify({data:`${n}\r`,type:"input"})),!0}log(t,n,a){this.actions=[{at:this.deps.now(),detail:a,kind:n,terminalId:t},...this.actions].slice(0,Qe)}onWake=()=>{this.refresh()};async refresh(){if(this.apiKey&&(await Promise.allSettled([this.fetchTerminals(),this.fetchSummaries()]),this.enabled))for(const t of this.terminals.keys())this.evaluate(t)}scheduleReconnect(){this.reconnectTimer||(this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connectEvents()},Xe))}}async function os(e){if(e.isAgentTerminal){const f=e.step.text.trim();return f.length>0?f:null}const t=await ds(e);if(t)return t;const n=await cs(e);if(n)return n;const a=e.step.text.trim(),s=/`([^`]+)`/.exec(a);if(s)return s[1].trim();const o=a.split(/\s+/)[0]?.toLowerCase();return o&&ns.has(o)&&!/[\r\n]/.test(a)&&a.length<80?a:null}function is(e){return new Promise(t=>{setTimeout(t,e)})}function Ht(e){const n=(e.trim().split(/\s+/)[0]??"").split("/").pop()??"";return as.has(n)}async function cs(e){const t=le("LITELLM_BASE_URL");if(!t||!e.apiKey)return null;const n=le("LITELLM_MODEL")||"open-large",a=`Recent terminal output:
2
+ ${e.recentOutput.slice(-2e3)}
3
+
4
+ Suggested next step: ${e.step.text}
5
+
6
+ Reply with ONLY the single shell command to run next — no prose, no backticks, no explanation.`;try{const s=await fetch("/api/neurolink-proxy",{body:JSON.stringify({body:{max_tokens:60,messages:[{content:"You are a coding-session copilot. Output ONLY the next shell command.",role:"system"},{content:a,role:"user"}],model:n,temperature:0},headers:{},provider:"litellm",url:`${t}/chat/completions`}),headers:{Authorization:`Bearer ${e.apiKey}`,"Content-Type":"application/json"},method:"POST"});if(!s.ok)return null;const f=(await s.json()).choices?.[0]?.message?.content;if(typeof f!="string")return null;const g=f.trim().replace(/^`+|`+$/g,"").trim();return g.length>0?g:null}catch{return null}}function ls(e){try{const t=JSON.parse(e);return Array.isArray(t)?t.filter(n=>typeof n=="object"&&n!==null&&typeof n.text=="string"&&typeof n.confidence=="number"):[]}catch{return[]}}function us(){if(typeof localStorage>"u")return!1;try{const e=localStorage.getItem(_e);return e?!!JSON.parse(e)?.enabled:!1}catch{return!1}}function le(e){const n=window.process?.env?.[e];return typeof n=="string"?n:""}function ds(e){const t=window.ShooterBridge;if(typeof t?.agentDecide!="function")return Promise.resolve(null);const n=`Recent terminal output:
7
+ ${e.recentOutput.slice(-2e3)}
8
+
9
+ Suggested next step: ${e.step.text}
10
+
11
+ Reply with the single shell command to run next.`;return t.agentDecide(n).then(a=>typeof a=="string"&&a.trim().length>0?a.trim():null).catch(()=>null)}function vs(e){return e.readyState===WebSocket.OPEN?Promise.resolve(!0):new Promise(t=>{const n=setTimeout(()=>{e.close(),t(!1)},Ze);e.addEventListener("open",()=>{clearTimeout(n),t(!0)}),e.addEventListener("error",()=>{clearTimeout(n),e.close(),t(!1)})})}const F=new rs;var fs=h('<span class="status-dot-active svelte-ziwu2n" aria-hidden="true"></span>'),ms=h('<div class="autonomy-warning svelte-ziwu2n" role="alert">⚠ Auto-inject is ON — proposed commands run automatically in idle managed terminals.</div>'),ps=h('<li><span class="action-kind svelte-ziwu2n"> </span> <span class="action-detail svelte-ziwu2n"> </span> <span class="action-time svelte-ziwu2n"> </span></li>'),hs=h('<div class="actions-log svelte-ziwu2n"><span class="actions-label svelte-ziwu2n">Recent actions</span> <ul class="actions-list svelte-ziwu2n"></ul></div>'),gs=h('<p class="session-summary svelte-ziwu2n"> </p>'),ys=h('<li class="step-item svelte-ziwu2n"><span> </span> <span class="step-text svelte-ziwu2n"> </span></li>'),_s=h('<div class="next-steps svelte-ziwu2n"><span class="next-steps-label svelte-ziwu2n">Next steps</span> <ul class="steps-list svelte-ziwu2n"></ul></div>'),Ss=h('<div class="session-card svelte-ziwu2n"><div class="session-header svelte-ziwu2n"><span class="session-name svelte-ziwu2n"> </span> <span class="session-status session-status--idle svelte-ziwu2n"> </span></div> <!> <!> <span class="last-updated svelte-ziwu2n"> </span></div>'),ws=h('<div class="sessions-list svelte-ziwu2n"></div>'),bs=h('<p class="panel-empty svelte-ziwu2n"> </p>'),As=h('<div class="autopilot-panel svelte-ziwu2n"><div class="panel-header svelte-ziwu2n"><div class="panel-title-row svelte-ziwu2n"><span class="panel-title svelte-ziwu2n">Auto-pilot</span> <!></div> <button> </button></div> <div class="autonomy-row svelte-ziwu2n"><div class="autonomy-label svelte-ziwu2n"><span class="autonomy-title svelte-ziwu2n">Autonomy</span> <span class="autonomy-sub svelte-ziwu2n"> </span></div> <button> </button></div> <!> <!> <!></div>');function ks(e,t){Yt(t,!0);let n=J(!1),a=J(qt([]));const s=H(()=>{const i=new Set,d=[];for(const S of r(a)){const x=S.sessionId??S.terminalId??S.id;i.has(x)||(i.add(x),d.push(S))}return d});function o(){const i=oe();return i?{Authorization:`Bearer ${i}`}:{}}async function f(){try{const i=await fetch("/api/autopilot",{headers:o()});i.ok&&w(n,!!(await i.json()).enabled,!0)}catch{}}async function g(){try{const i=await fetch("/api/summaries?limit=30",{headers:o()});i.ok&&w(a,(await i.json()).summaries??[],!0)}catch{}}async function k(){const i=!r(n);w(n,i);try{const d=await fetch("/api/autopilot",{body:JSON.stringify({enabled:i}),headers:{...o(),"Content-Type":"application/json"},method:"POST"});d.ok&&w(n,!!(await d.json()).enabled,!0)}catch{w(n,!i)}}function E(){F.setEnabled(!F.enabled)}function A(i){return Xt(new Date(i).toISOString())}function b(i){try{const d=JSON.parse(i);return Array.isArray(d)?d:[]}catch{return[]}}function O(i){if(i.tentative)return"step-badge step-badge--tentative";const d=i.votes??1;return d>=4?"step-badge step-badge--strong":d>=3?"step-badge step-badge--medium":"step-badge step-badge--weak"}function P(i){return i.tentative?"~":`${i.votes??1}`}ge(()=>{f(),g();const i=oe();i&&F.start(i);const d=i?Ge(i):null,S=setInterval(()=>{g(),f()},8e3);return()=>{clearInterval(S),F.stop(),d?.()}});var j=As(),vt=l(j),et=l(vt),St=v(l(et),2);{var wt=i=>{var d=fs();p(i,d)};N(St,i=>{r(n)&&i(wt)})}c(et);var K=v(et,2),ft=l(K,!0);c(K),c(vt);var V=v(vt,2),$=l(V),at=v(l($),2),bt=l(at,!0);c(at),c($);var W=v($,2),At=l(W,!0);c(W),c(V);var rt=v(V,2);{var kt=i=>{var d=ms();p(i,d)};N(rt,i=>{F.enabled&&i(kt)})}var ot=v(rt,2);{var xt=i=>{var d=hs(),S=v(l(d),2);dt(S,21,()=>F.actions.slice(0,6),x=>`${x.at}-${x.terminalId}`,(x,z)=>{var q=ps(),B=l(q),U=l(B,!0);c(B);var X=v(B,2),T=l(X,!0);c(X);var I=v(X,2),L=l(I,!0);c(I),c(q),R(Z=>{Tt(q,1,`action-item action-item--${r(z).kind??""}`,"svelte-ziwu2n"),_(U,r(z).kind),nt(X,"title",r(z).detail),_(T,r(z).detail),_(L,Z)},[()=>A(r(z).at)]),p(x,q)}),c(S),c(d),p(i,d)};N(ot,i=>{F.actions.length>0&&i(xt)})}var m=v(ot,2);{var y=i=>{var d=ws();dt(d,21,()=>r(s),S=>S.id,(S,x)=>{const z=H(()=>b(r(x).nextSteps));var q=Ss(),B=l(q),U=l(B),X=l(U,!0);c(U);var T=v(U,2),I=l(T,!0);c(T),c(B);var L=v(B,2);{var Z=C=>{var D=gs(),it=l(D,!0);c(D),R(()=>_(it,r(x).summary)),p(C,D)};N(L,C=>{r(x).summary&&C(Z)})}var Y=v(L,2);{var st=C=>{var D=_s(),it=v(l(D),2);dt(it,21,()=>r(z),pt=>pt.text,(pt,ct)=>{var Ct=ys(),lt=l(Ct),Gt=l(lt,!0);c(lt);var zt=v(lt,2),It=l(zt,!0);c(zt),c(Ct),R((Pt,Et)=>{Tt(lt,1,Pt,"svelte-ziwu2n"),nt(lt,"title",`${r(ct).votes??1??""} vote(s)`),_(Gt,Et),_(It,r(ct).text)},[()=>Dt(O(r(ct))),()=>P(r(ct))]),p(pt,Ct)}),c(it),c(D),p(C,D)};N(Y,C=>{r(z).length>0&&C(st)})}var mt=v(Y,2),M=l(mt);c(mt),c(q),R(C=>{_(X,r(x).projectName??r(x).terminalId),_(I,r(x).trigger),_(M,`Updated ${C??""}`)},[()=>Xt(r(x).createdAt)]),p(S,q)}),c(d),p(i,d)},u=i=>{var d=bs(),S=l(d,!0);c(d),R(()=>_(S,r(n)?"Watching all active sessions…":"Start Auto-pilot for AI summaries + next steps across all sessions — runs on the server, even with this page closed.")),p(i,d)};N(m,i=>{r(s).length>0?i(y):i(u,-1)})}c(j),R(()=>{Tt(K,1,Dt(r(n)?"toggle-btn toggle-btn--on":"toggle-btn toggle-btn--off"),"svelte-ziwu2n"),nt(K,"aria-label",r(n)?"Stop Auto-pilot":"Start Auto-pilot"),nt(K,"aria-pressed",r(n)),_(ft,r(n)?"Stop":"Start"),_(bt,F.enabled?"Auto-running commands into idle terminals":"Off — summaries + suggestions only"),Tt(W,1,Dt(F.enabled?"toggle-btn toggle-btn--danger":"toggle-btn toggle-btn--off"),"svelte-ziwu2n"),nt(W,"aria-label",F.enabled?"Disable autonomy":"Enable autonomy"),nt(W,"aria-pressed",F.enabled),_(At,F.enabled?"On":"Off")}),Wt("click",K,k),Wt("click",W,E),p(e,j),Ft()}he(["click"]);var xs=h('<p class="goal-text svelte-1qbe2oo"> </p>'),Cs=h('<span class="summarizing svelte-1qbe2oo">Analyzing…</span>'),Es=h('<span class="summary-text svelte-1qbe2oo"> </span>'),Ts=h('<span class="summary-fallback svelte-1qbe2oo"> </span>'),Ns=h('<span class="stat stat-error svelte-1qbe2oo"> </span>'),Os=h('<div class="card svelte-1qbe2oo" role="button" tabindex="0"><div class="card-header svelte-1qbe2oo"><span class="project-name svelte-1qbe2oo"> </span> <!></div> <!> <div class="summary-row svelte-1qbe2oo"><!></div> <div class="stats-row svelte-1qbe2oo"><span class="stat svelte-1qbe2oo"><span></span> </span> <span class="stat svelte-1qbe2oo"> </span> <!> <span class="stat stat-path svelte-1qbe2oo"> </span></div></div>');function ue(e,t){Yt(t,!0);function n(m){const y=Math.floor(m/1e3);if(y<60)return`${y}s`;const u=Math.floor(y/60);return u<60?`${u}m ${y%60}s`:`${Math.floor(u/60)}h ${u%60}m`}function a(m){const y=m.replace(/\/$/,"").split("/");return y.length<=2?m:y.slice(-2).join("/")}const s=H(()=>t.card.status==="running"&&t.card.isActive?"var(--ds-green-700)":t.card.status==="running"?"var(--ds-blue-700)":t.card.status==="idle"?"var(--ds-amber-700)":t.card.status==="error"?"var(--ds-red-700)":"var(--ds-gray-600)"),o=H(()=>t.card.status==="running"&&t.card.isActive||t.card.status==="running"?"● Running":t.card.status==="idle"?"◎ Idle":t.card.status==="exited"?"○ Done":t.card.status==="error"?"✕ Error":t.card.status),f=H(()=>t.card.status==="running"&&t.card.isActive?"status-pill status-pill--running-active":t.card.status==="running"?"status-pill status-pill--running":t.card.status==="idle"?"status-pill status-pill--idle":t.card.status==="exited"?"status-pill status-pill--exited":t.card.status==="error"?"status-pill status-pill--error":"status-pill"),g=H(()=>t.card.toolCallCount===0?"Waiting for activity…":t.card.toolCallCount===1?"1 tool call so far":`${t.card.toolCallCount} tool calls so far`);function k(m){(m.key==="Enter"||m.key===" ")&&(m.key===" "&&m.preventDefault(),t.onclick?.())}var E=Os(),A=l(E),b=l(A),O=l(b,!0);c(b);var P=v(b,2);ye(P,{get text(){return r(o)},get classes(){return r(f)}}),c(A);var j=v(A,2);{var vt=m=>{var y=xs(),u=l(y,!0);c(y),R(()=>_(u,t.card.goal)),p(m,y)};N(j,m=>{t.card.goal&&m(vt)})}var et=v(j,2),St=l(et);{var wt=m=>{var y=Cs();p(m,y)},K=m=>{var y=Es(),u=l(y,!0);c(y),R(()=>_(u,t.card.summary)),p(m,y)},ft=m=>{var y=Ts(),u=l(y,!0);c(y),R(()=>_(u,r(g))),p(m,y)};N(St,m=>{t.card.isSummarizing?m(wt):t.card.summary?m(K,1):t.card.status==="running"&&m(ft,2)})}c(et);var V=v(et,2),$=l(V),at=l($),bt=v(at);c($);var W=v($,2),At=l(W);c(W);var rt=v(W,2);{var kt=m=>{var y=Ns(),u=l(y);c(y),R(()=>_(u,`${t.card.errorCount??""} errors`)),p(m,y)};N(rt,m=>{t.card.errorCount>0&&m(kt)})}var ot=v(rt,2),xt=l(ot,!0);c(ot),c(V),c(E),R((m,y)=>{Oe(E,`--status-color: ${r(s)??""}`),nt(E,"aria-label",`Open ${t.card.projectName??""} session`),_(O,t.card.projectName),Tt(at,1,Dt(t.card.status==="running"&&t.card.isActive?"status-dot-active":"status-dot-static"),"svelte-1qbe2oo"),_(bt,` ${m??""}`),_(At,`${t.card.toolCallCount??""} tools`),nt(ot,"title",t.card.cwd),_(xt,y)},[()=>n(t.card.duration),()=>a(t.card.cwd)]),Wt("click",E,function(...m){t.onclick?.apply(this,m)}),Wt("keydown",E,k),p(e,E),Ft()}he(["click","keydown"]);var zs=h('<div class="section svelte-14sxgtb"><h3 class="section-label svelte-14sxgtb">Active</h3> <!></div>'),Is=h('<div class="section svelte-14sxgtb"><h3 class="section-label svelte-14sxgtb">Recent</h3> <!></div>'),Ps=h("<!> <!>",1);function js(e,t){Yt(t,!0);const n=H(()=>t.cards.filter(A=>A.status==="running")),a=H(()=>t.cards.filter(A=>A.status!=="running"));function s(A){t.onCardClick?.(A)}var o=Ps(),f=Mt(o);{var g=A=>{var b=zs(),O=v(l(b),2);dt(O,17,()=>r(n),P=>P.terminalId,(P,j)=>{ue(P,{get card(){return r(j)},onclick:()=>{s(r(j))}})}),c(b),p(A,b)};N(f,A=>{r(n).length>0&&A(g)})}var k=v(f,2);{var E=A=>{var b=Is(),O=v(l(b),2);dt(O,17,()=>r(a),P=>P.terminalId,(P,j)=>{ue(P,{get card(){return r(j)},onclick:()=>{s(r(j))}})}),c(b),p(A,b)};N(k,A=>{r(a).length>0&&A(E)})}p(e,o),Ft()}const Ls=new Set(["agent-question","terminal-exited","tool-failed"]);let jt=null,Lt=null,Rt=null;class Ms{async summarize(t){const n=this.chooseTone(t),a=n==="conversational"?this.buildConversationalPrompt(t):this.buildStatusReportPrompt(t);try{const s=await Ds();if(!s)return console.log("[SessionSummarizer] NeuroLink not available, using fallback."),{generatedAt:new Date().toISOString(),text:this.fallbackText(t),tone:n};const o=await s.generate({input:{text:a},...Rt?{model:Rt.model,provider:Rt.provider}:{}}),f=Bs(o.content??"").trim()||this.fallbackText(t);return{generatedAt:new Date().toISOString(),text:f,tone:n}}catch(s){return console.warn("[SessionSummarizer] summarize failed:",s instanceof Error?s.message:String(s)),{generatedAt:new Date().toISOString(),text:this.fallbackText(t),tone:n}}}buildConversationalPrompt(t){const n=t.goal??"unknown",a=t.recentEvents.map(s=>{const o=[s.type];return s.tool&&o.push(`tool=${s.tool}`),s.error&&o.push(`error=${s.error}`),s.command&&o.push(`command=${s.command}`),o.join(" ")}).join(", ");return`You are monitoring a coding session. Based on the context below, write ONE sentence (max 100 chars) describing what's happening in plain English. Be specific about what Claude did or is doing.
12
+
13
+ Goal: ${n}
14
+ Recent events: ${a}
15
+ Conversation excerpt: ${t.conversationExcerpt}
16
+ Status: ${t.status}
17
+
18
+ One sentence only, no quotes, no markdown.`}buildStatusReportPrompt(t){return`You are monitoring a coding session. Write a brief status update (max 60 chars) in the format "Doing X, Y done". Focus on the action.
19
+
20
+ Recent tool calls: ${t.recentEvents.flatMap(a=>a.tool?[a.tool]:[]).join(", ")||"none"}
21
+ Status: ${t.status}
22
+
23
+ Short phrase only, no quotes.`}chooseTone(t){return t.status==="error"||t.errorCount>0||t.recentEvents.some(a=>Ls.has(a.type))?"conversational":"status-report"}fallbackText(t){const n=t.recentEvents.flatMap(s=>s.tool?[s.tool]:[]),a=[...new Set(n)];return a.length>0?`Running: ${a.join(", ")} (${t.toolCallCount} tools)`:`Status: ${t.status} — ${t.toolCallCount} tool calls`}}async function Ds(){if(Lt)return Lt;We();const t=(await Rs()).NeuroLink;if(!t)return null;const n=window.__aiProviders,a=window.process?.env?.NEUROLINK_PROVIDER,s=Ye(n,a);if(!s)return console.warn("[SessionSummarizer] No AI provider configured"),null;const o=window.process;return o?.env&&n&&(n["google-ai"]&&!o.env.GOOGLE_AI_API_KEY&&(o.env.GOOGLE_AI_API_KEY="proxy-via-server"),n.anthropic&&!o.env.ANTHROPIC_API_KEY&&(o.env.ANTHROPIC_API_KEY="proxy-via-server"),n.openai&&!o.env.OPENAI_API_KEY&&(o.env.OPENAI_API_KEY="proxy-via-server"),n.mistral&&!o.env.MISTRAL_API_KEY&&(o.env.MISTRAL_API_KEY="proxy-via-server")),Lt=new t({provider:s.provider}),Rt=s,console.log(`[SessionSummarizer] Using provider: ${s.provider}/${s.model}`),Lt}function Rs(){return jt||(jt=import(qe).catch(e=>{throw console.warn("[SessionSummarizer] Failed to load NeuroLink SDK:",e),jt=null,e})),jt}function Bs(e){return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):""}function te(){return new Date(Date.now()).toISOString()}const Ks=100,Ws=15e3,qs=3e4,Se=2e3,Ys=3e4;let tt=J(qt([])),Nt=J(!1),G=null,yt=null,_t=null,Bt=Se,Fs=0,Q="";const Ot=new Qt,ut=new Qt,Kt=new Ke;async function Gs(e){Q=e||Vs(),Q&&(await fe(Q),await be(Q),yt&&clearInterval(yt),yt=setInterval(()=>{fe(Q)},Ws))}function Js(){G&&(G.onclose=null,G.close(),G=null),yt&&(clearInterval(yt),yt=null),_t&&(clearTimeout(_t),_t=null);for(const[,e]of ut)e.onclose=null,e.close();ut.clear(),Kt.clear(),Ot.clear(),w(Nt,!1),Q=""}function $s(){const e=Date.now();return ee(r(tt)).map(t=>{const n=Date.parse(t.createdAt),a=t.events.length>0?Date.parse(t.events[t.events.length-1].timestamp):0;return{...t,duration:e-n,goal:t.goal,isActive:a>0&&e-a<qs,isSummarizing:t.isSummarizing,summary:t.summary}})}function de(e,t){const n=r(tt).find(a=>a.terminalId===e);n&&(n.goal=t)}function Us(e,t){const n=r(tt).find(a=>a.terminalId===e);n&&(n.summary=t,n.summaryUpdatedAt=te(),n.isSummarizing=!1)}function ht(e,t,n){const a={data:n,id:`evt-${++Fs}`,summarized:!1,terminalId:e.terminalId,timestamp:n.timestamp??te(),type:t},s=e.events.length>=Ks?[...e.events.slice(1),a]:[...e.events,a];e.events=s,e.eventCount+=1}function we(e){return e.split("/").filter(Boolean).pop()??e}function gt(e){const t=ut.get(e);t&&(t.onclose=null,t.close(),ut.delete(e))}async function be(e){if(!(G&&G.readyState<=1))try{const t=await fetch("/api/ws-ticket",{headers:{Authorization:`Bearer ${e}`},method:"POST"});if(!t.ok){Vt(e);return}const{ticket:n}=await t.json(),a=window.location.origin.replace(/^http/,"ws");G=new WebSocket(`${a}/ws/events?ticket=${n}`),G.onopen=()=>{w(Nt,!0),Bt=Se},G.onmessage=s=>{try{const o=JSON.parse(s.data);o&&typeof o=="object"&&Xs(o)}catch{}},G.onclose=()=>{w(Nt,!1),G=null,Vt(e)},G.onerror=()=>{w(Nt,!1)}}catch{w(Nt,!1),Vt(e)}}const Hs=["<local-command","<command-name>","<command-message>","<command-args>","<system-reminder>","<task-notification>","Caveat:"];function ve(e){let t="";typeof e=="string"?t=e:Array.isArray(e)&&(t=e.find(s=>s.type==="text")?.content??"");const n=t.slice(0,200).trim();return Zs(n)?"":n}async function fe(e){if(e)try{const t=await fetch("/api/terminals",{headers:{Authorization:`Bearer ${e}`}});if(!t.ok)return;const a=(await t.json()).terminals??[];w(tt,ee(tn(r(tt),a)),!0)}catch{}}function Vs(){try{const e=localStorage.getItem("shooter_config");if(!e)return"";const t=JSON.parse(e);if(t&&typeof t=="object"){const n=t;if(typeof n.apiKey=="string")return n.apiKey}}catch{}return""}function Xs(e){const t=e.type;if(!t||t==="welcome")return;const n=e.terminalId??null;if(!n)return;const a=r(tt).findIndex(f=>f.terminalId===n);if(a===-1)return;const s=r(tt)[a];switch(t){case"agent-idle":case"agent-question":{s.status="idle",ht(s,t,e);break}case"terminal-exited":{s.status="exited",s.exitedAt=e.exitedAt??te(),ht(s,t,e),gt(n),Ot.delete(n);break}case"tool-completed":{ht(s,t,e);break}case"tool-failed":{s.errorCount+=1,ht(s,t,e);break}case"tool-started":{s.toolCallCount+=1,s.status="running",ht(s,t,e);break}default:{ht(s,t,e);break}}(t==="tool-failed"||t==="agent-question"||s.errorCount>=3||s.eventCount>0&&s.eventCount%20===0)&&!s.isSummarizing&&en(s),w(tt,ee(r(tt)),!0)}function Zs(e){return Hs.some(t=>e.startsWith(t))}function Qs(e){return{command:e.command,createdAt:e.createdAt,cwd:e.cwd,errorCount:0,eventCount:0,events:[],exitedAt:e.exitedAt,goal:"",isSummarizing:!1,projectName:we(e.cwd),projectPath:e.cwd,status:Ae(e.status),summary:"",summaryUpdatedAt:"",terminalId:e.id,toolCallCount:0}}function Ae(e){return e==="running"?"running":e==="idle"?"idle":e==="exited"?"exited":"error"}function tn(e,t){const n=new Set(t.map(s=>s.id));for(const s of e)n.has(s.terminalId)||(gt(s.terminalId),Ot.delete(s.terminalId));const a=new Qt;for(const s of e)n.has(s.terminalId)&&a.set(s.terminalId,s);for(const s of t){const o=a.get(s.id);o?(o.command=s.command,o.cwd=s.cwd,o.projectName=we(s.cwd),o.projectPath=s.cwd,o.exitedAt=s.exitedAt,o.status!=="error"&&(o.status=Ae(s.status)),!o.goal&&s.exitedAt===null&&s.status!=="exited"&&me(s.id)):(a.set(s.id,Qs(s)),s.exitedAt===null&&s.status!=="exited"&&me(s.id))}return Array.from(a.values())}async function me(e){if(Q&&!(ut.has(e)||Kt.has(e))){Kt.add(e),console.log(`[DashboardStore] Opening session socket for ${e}`);try{const t=await fetch("/api/ws-ticket",{headers:{Authorization:`Bearer ${Q}`},method:"POST"});if(!t.ok){console.warn(`[DashboardStore] Failed to get WS ticket for ${e}:`,t.status);return}const{ticket:n}=await t.json(),s=`${window.location.origin.replace(/^http/,"ws")}/ws/session/${e}?ticket=${n}`;console.log(`[DashboardStore] Connecting session socket for ${e}`);const o=new WebSocket(s);ut.set(e,o),o.onopen=()=>{console.log(`[DashboardStore] Session socket opened for ${e}`)},o.onmessage=f=>{try{const g=JSON.parse(f.data);if(!g||typeof g!="object")return;const k=g;if(k.type==="session-end"){gt(e);return}const E=r(tt).find(b=>b.terminalId===e),A=E?.goal&&E.goal.length>0;if(k.type==="history"){console.log(`[DashboardStore] Received history for ${e}, extracting goal...`);const b=k.messages;if(!Array.isArray(b)){console.warn(`[DashboardStore] No messages array in history for ${e}`);return}console.log(`[DashboardStore] Found ${b.length} messages, looking for first user message...`);for(const O of b){if(O.role!=="user")continue;const P=ve(O.content);if(P){de(e,P),pe(e,P),gt(e);return}}return}if(k.type==="message"&&k.role==="user"&&!A){const b=ve(k.content);b&&(de(e,b),pe(e,b),gt(e));return}if(!A)return;gt(e)}catch(g){console.warn("[DashboardStore] Error processing session message:",g)}},o.onclose=()=>{console.log(`[DashboardStore] Session socket closed for ${e}`),ut.delete(e)},o.onerror=f=>{console.warn(`[DashboardStore] Session socket error for ${e}:`,f),ut.delete(e)}}catch(t){console.warn("[DashboardStore] Failed to open session socket:",t)}finally{Kt.delete(e)}}}function Vt(e){_t||(_t=setTimeout(()=>{_t=null,be(e)},Bt),Bt=Math.min(Bt*2,Ys))}function ee(e){return[...e].sort((t,n)=>{const a={error:2,exited:3,idle:1,running:0},s=a[t.status],o=a[n.status];if(s!==o)return s-o;if(t.status!=="exited"&&n.status!=="exited")return n.createdAt.localeCompare(t.createdAt);const f=t.exitedAt??t.createdAt;return(n.exitedAt??n.createdAt).localeCompare(f)})}function pe(e,t){Q&&fetch("/api/autopilot/goal",{body:JSON.stringify({goal:t,terminalId:e}),headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},method:"POST"}).catch(()=>{})}function en(e){e.isSummarizing=!0;let t=Ot.get(e.terminalId);t||(t=new Ms,Ot.set(e.terminalId,t));const n=e.events.slice(-10).map(s=>({command:typeof s.data.command=="string"?s.data.command:null,error:typeof s.data.error=="string"?s.data.error:null,tool:typeof s.data.tool=="string"?s.data.tool:null,type:s.type})),a={conversationExcerpt:e.goal??"",errorCount:e.errorCount,goal:e.goal,recentEvents:n,status:e.status,toolCallCount:e.toolCallCount};(async()=>{try{const s=await t.summarize(a);Us(e.terminalId,s.text)}catch(s){console.error(`[dashboard] Summarization failed for ${e.terminalId}:`,s)}finally{e.isSummarizing=!1}})()}var sn=h('<meta name="description" content="Active terminals and Claude Code sessions"/>'),nn=h("<!> Refresh",1),an=h('<div class="stat-chip stat-chip-active svelte-1uha8ag"><span class="stat-value svelte-1uha8ag"> </span> <span class="stat-label svelte-1uha8ag">active</span></div>'),rn=h('<div class="stats-bar svelte-1uha8ag"><div class="stat-chip svelte-1uha8ag"><span class="stat-value svelte-1uha8ag"> </span> <span class="stat-label svelte-1uha8ag"> </span></div> <div class="stat-chip svelte-1uha8ag"><span class="stat-value svelte-1uha8ag"> </span> <span class="stat-label svelte-1uha8ag"> </span></div> <!></div>'),on=h('<div class="loading-container"></div>'),cn=h('<div class="dashboard-section svelte-1uha8ag"><!></div>'),ln=h('<div class="loading-container"></div>'),un=h('<h3 class="section-label svelte-1uha8ag">Sessions</h3>'),dn=h('<a class="session-card"><div class="session-card-header"><div><h3 class="session-card-title"> </h3> <div class="session-card-subtitle"> </div></div> <!></div> <div class="session-stats"><span><strong> </strong> </span></div></a>'),vn=h('<div style="text-align: center; padding: 1rem;"><!></div>'),fn=h('<!> <div class="projects-container svelte-1uha8ag"></div> <!>',1),mn=h("<!> <!> <!>",1),pn=h('<main class="main"><div class="page-header"><div class="page-header-content"><div><h1 class="page-title">Dashboard</h1> <p class="page-description">Active terminals and Claude Code sessions</p></div> <div class="page-actions"><!></div></div> <!></div> <!> <!></main>');function In(e,t){Yt(t,!0);const n=1e4,a=20;let s=J(qt([])),o=J(!1),f=!1,g=J(null),k=null,E=J(null),A=J(!1),b=J(0);const O=H($s);ge(()=>{P();const u=Re("shooter_projects");u&&(w(s,u,!0),w(o,!1)),j(),k=setInterval(()=>{r(g)?.apiKey&&r(b)<=a&&j()},n)}),Ee(()=>{k&&(clearInterval(k),k=null),Js()});function P(){try{const u=localStorage.getItem("shooter_config");if(u){const i=JSON.parse(u);Be(i)?(w(g,i,!0),Gs(r(g).apiKey)):(localStorage.removeItem("shooter_config"),w(g,null))}}catch{}}async function j(u=!1,i=!1){if(!r(g)?.apiKey||f)return;f=!0,r(s).length===0&&w(o,!0);const d=u?r(b):0;try{const x=await fetch(`${i?"/api/sessions?refresh=true&":"/api/sessions?"}limit=${a}&offset=${d}`,{headers:{Authorization:`Bearer ${r(g).apiKey}`}});if(!x.ok){w(E,`Failed to load projects (HTTP ${x.status})`);return}w(E,null);const z=await x.json();u?w(s,[...r(s),...z.projects],!0):w(s,z.projects,!0),w(b,r(s).length,!0),w(A,z.total!==void 0?r(s).length<z.total:!1,!0),De("shooter_projects",r(s))}catch(S){w(E,"Failed to load projects"),console.error("Failed to fetch sessions:",S)}finally{w(o,!1),f=!1}}async function vt(){await j(!0)}async function et(){w(o,!0),Me("shooter_projects"),await j(!1,!0)}function St(){ae("/config")}function wt(u){ae(`/terminals/${u}`)}function K(){return r(s).reduce((u,i)=>u+i.sessionCount,0)}var ft=pn();Ie("1uha8ag",u=>{var i=sn();Te(()=>{Ne.title="Dashboard - Shooter"}),p(u,i)});var V=l(ft),$=l(V),at=v(l($),2),bt=l(at);Jt(bt,{classes:"btn-secondary",onclick:et,get disabled(){return r(o)},children:(u,i)=>{var d=nn(),S=Mt(d);$t(S,{get svg(){return je},classes:"icon-14"}),se(),p(u,d)},$$slots:{default:!0}}),c(at),c($);var W=v($,2);{var At=u=>{var i=rn(),d=l(i),S=l(d),x=l(S,!0);c(S);var z=v(S,2),q=l(z,!0);c(z),c(d);var B=v(d,2),U=l(B),X=l(U,!0);c(U);var T=v(U,2),I=l(T,!0);c(T),c(B);var L=v(B,2);{var Z=Y=>{var st=an(),mt=l(st),M=l(mt,!0);c(mt),se(2),c(st),R(()=>_(M,r(O).length)),p(Y,st)};N(L,Y=>{r(O).length>0&&Y(Z)})}c(i),R((Y,st)=>{_(x,r(s).length),_(q,r(s).length===1?"project":"projects"),_(X,Y),_(I,st)},[()=>K(),()=>K()===1?"session":"sessions"]),p(u,i)};N(W,u=>{r(s).length>0&&u(At)})}c(V);var rt=v(V,2);{var kt=u=>{ze(u,{get text(){return r(E)},classes:"banner-error"})};N(rt,u=>{r(E)&&u(kt)})}var ot=v(rt,2);{var xt=u=>{var i=on();dt(i,20,()=>Array(3),ne,(d,S)=>{re(d,{classes:"shimmer-card"})}),c(i),p(u,i)},m=u=>{ie(u,{title:"Configuration Required",description:"Set up your API credentials to start tracking sessions",icon:d=>{$t(d,{get svg(){return Le},classes:"icon-24"})},children:(d,S)=>{Jt(d,{classes:"btn-primary",onclick:St,text:"Configure Settings"})}})},y=u=>{var i=mn(),d=Mt(i);ks(d,{});var S=v(d,2);{var x=T=>{var I=cn(),L=l(I);js(L,{get cards(){return r(O)},onCardClick:Z=>{wt(Z.terminalId)}}),c(I),p(T,I)};N(S,T=>{r(O).length>0&&T(x)})}var z=v(S,2);{var q=T=>{var I=ln();dt(I,20,()=>Array(3),ne,(L,Z)=>{re(L,{classes:"shimmer-card"})}),c(I),p(T,I)},B=T=>{ie(T,{title:"No sessions yet",description:"Claude Code sessions will appear here once JSONL files are found",icon:L=>{$t(L,{get svg(){return Pe},classes:"icon-24"})}})},U=H(()=>K()===0&&r(O).length===0),X=T=>{var I=fn(),L=Mt(I);{var Z=M=>{var C=un();p(M,C)};N(L,M=>{r(O).length>0&&M(Z)})}var Y=v(L,2);dt(Y,21,()=>r(s),M=>M.id,(M,C)=>{var D=dn(),it=l(D),pt=l(it),ct=l(pt),Ct=l(ct,!0);c(ct);var lt=v(ct,2),Gt=l(lt,!0);c(lt),c(pt);var zt=v(pt,2);{let Ce=H(()=>Xt(r(C).lastModified));ye(zt,{get text(){return`Last updated ${r(Ce)??""}`},classes:"pill-session-time"})}c(it);var It=v(it,2),Pt=l(It),Et=l(Pt),ke=l(Et,!0);c(Et);var xe=v(Et);c(Pt),c(It),c(D),R(()=>{nt(D,"href",`/project?id=${r(C).id??""}`),_(Ct,r(C).name),_(Gt,r(C).fullPath),_(ke,r(C).sessionCount),_(xe,` ${r(C).sessionCount===1?"session":"sessions"}`)}),p(M,D)}),c(Y);var st=v(Y,2);{var mt=M=>{var C=vn(),D=l(C);Jt(D,{classes:"btn-secondary",onclick:vt,text:"Load More"}),c(C),p(M,C)};N(st,M=>{r(A)&&M(mt)})}p(T,I)};N(z,T=>{r(o)&&r(s).length===0?T(q):r(U)?T(B,1):r(s).length>0&&T(X,2)})}p(u,i)};N(ot,u=>{r(o)&&r(s).length===0&&r(O).length===0?u(xt):r(g)?.apiKey?u(y,-1):u(m,1)})}c(ft),p(e,ft),Ft()}export{In as component};
@@ -1,4 +1,4 @@
1
- import{i as P,s as h,a as g,t as Be,f as A}from"../chunks/BPDiEZo0.js";import{s as b,q as ke,b as _,g as n,p as Ee,v as Pe,y as Ge,c as u,d as p,r as d,t as E,B as He,w as Ne,x as N,D as Ve,$ as We}from"../chunks/DWmC0QM7.js";import{h as Je}from"../chunks/2rBV5OkJ.js";import{g as ce}from"../chunks/DOEXXmsh.js";import{j as ue,e as le,B as qe,s as Ae,b as Xe}from"../chunks/B1bOvemT.js";import{g as je,i as Ze}from"../chunks/gQJcRhou.js";import"../chunks/BDcFu3l7.js";import{f as we}from"../chunks/BLszSzTT.js";import{S as Qe}from"../chunks/BcpydfqI.js";import{i as et,N as tt}from"../chunks/CRkG7oE4.js";import{d as ot}from"../chunks/C87ZRWX0.js";const rt=6e4,Se=3;let Q=null,Y=null,L=0,$e=0;async function st(e,t){if(e.length===0)return{error:null,text:""};let i;try{i=await it()}catch{const o=e.map(x=>w(x.data.tool)||x.type),l=Array.from(new Set(o));return{error:"AI SDK failed to load",text:`${e.length} events: ${l.join(", ")}`}}if(!i){const o=e.map(x=>w(x.data.tool)||x.type),l=Array.from(new Set(o));return{error:"No AI provider configured",text:`${e.length} events: ${l.join(", ")}`}}const s=at(e),a=`You are a coding activity summarizer. Given these events from active Claude Code sessions, write a 1-2 sentence summary (max 150 chars) of what's happening. Be specific — mention tool names, file names, and what's being accomplished.
1
+ import{i as P,s as h,a as g,t as Be,f as A}from"../chunks/BPDiEZo0.js";import{s as b,q as ke,b as _,g as n,p as Ee,v as Pe,y as Ge,c as u,d as p,r as d,t as E,B as He,w as Ne,x as N,D as Ve,$ as We}from"../chunks/DWmC0QM7.js";import{h as Je}from"../chunks/2rBV5OkJ.js";import{g as ce}from"../chunks/BfbPKMXz.js";import{j as ue,e as le,B as qe,s as Ae,b as Xe}from"../chunks/B1bOvemT.js";import{g as je,i as Ze}from"../chunks/gQJcRhou.js";import"../chunks/BDcFu3l7.js";import{f as we}from"../chunks/BLszSzTT.js";import{S as Qe}from"../chunks/BcpydfqI.js";import{i as et,N as tt}from"../chunks/C4Hns_Wl.js";import{d as ot}from"../chunks/C87ZRWX0.js";const rt=6e4,Se=3;let Q=null,Y=null,L=0,$e=0;async function st(e,t){if(e.length===0)return{error:null,text:""};let i;try{i=await it()}catch{const o=e.map(x=>w(x.data.tool)||x.type),l=Array.from(new Set(o));return{error:"AI SDK failed to load",text:`${e.length} events: ${l.join(", ")}`}}if(!i){const o=e.map(x=>w(x.data.tool)||x.type),l=Array.from(new Set(o));return{error:"No AI provider configured",text:`${e.length} events: ${l.join(", ")}`}}const s=at(e),a=`You are a coding activity summarizer. Given these events from active Claude Code sessions, write a 1-2 sentence summary (max 150 chars) of what's happening. Be specific — mention tool names, file names, and what's being accomplished.
2
2
 
3
3
  ${t?`Project: ${t}
4
4
  `:""}Events:
@@ -1 +1 @@
1
- import{d as q,i as T,b as H,a as k,f as N,s as V}from"../chunks/BPDiEZo0.js";import{p as z,s as n,q as J,v as Q,w as W,g as t,b as r,x as _,d as g,c as b,r as c,t as X}from"../chunks/DWmC0QM7.js";import{e as K,I as Z,B as ee,s as te,i as ae,P as I}from"../chunks/B1bOvemT.js";import{i as se,N as S}from"../chunks/CRkG7oE4.js";import{P as O}from"../chunks/C87ZRWX0.js";var re=N('<div class="provider-bar svelte-sjabew"></div>'),ie=N("<div> </div>"),oe=N('<div class="page svelte-sjabew"><header class="svelte-sjabew"><h1 class="svelte-sjabew">NeuroLink</h1> <span class="version svelte-sjabew">new NeuroLink()</span> <!></header> <!> <div class="log svelte-sjabew" id="log"></div> <div class="input-bar svelte-sjabew"><!> <!></div></div>');function pe(M,p){z(p,!0);let u=n(null),m=n(null),h=n(J([])),d=n(""),v=n(!1),f=n(!1),o=n("litellm");function i(e,a="info"){r(h,[...t(h),{text:e,type:a}],!0)}function R(){const e=globalThis.process;if(!e?.env)return;const a=e.env;p.data.litellmBaseUrl&&(a.LITELLM_BASE_URL=p.data.litellmBaseUrl),p.data.litellmModel&&(a.LITELLM_MODEL=p.data.litellmModel);const s=window.__aiProviders;s?.["google-ai"]&&(a.GOOGLE_AI_API_KEY="proxy-via-server"),s?.anthropic&&(a.ANTHROPIC_API_KEY="proxy-via-server"),s?.openai&&(a.OPENAI_API_KEY="proxy-via-server"),s?.mistral&&(a.MISTRAL_API_KEY="proxy-via-server")}Q(async()=>{$(),se(),R(),i("Loading NeuroLink from CDN..."),i(S,"dim");try{r(u,await import(S),!0),i(`Loaded! ${Object.keys(t(u)??{}).length} exports`,"pass"),r(m,new(t(u)).NeuroLink({provider:t(o)}),!0),i(`NeuroLink ready · provider: ${t(o)}`,"pass"),r(f,!0)}catch(e){i(`Failed to load: ${e instanceof Error?e.message:String(e)}`,"fail")}});function D(e){!t(u)||e===t(o)||(r(o,e,!0),r(m,new(t(u)).NeuroLink({provider:e}),!0),i(`Switched to provider: ${e}`,"dim"))}function $(){typeof globalThis.process>"u"&&(globalThis.process={cwd:()=>"/",env:{},platform:"browser",version:"v24.0.0"}),typeof globalThis.global>"u"&&(globalThis.global=globalThis)}async function P(){if(!t(d).trim()||!t(m)||t(v))return;const e=t(d).trim();r(d,""),r(v,!0),i(`> ${e}`,"user");const a=O.find(s=>s.id===t(o));if(!a){r(v,!1);return}try{const s=await t(m).generate({input:{text:e},model:a.model,provider:a.id}),l=typeof s.content=="string"?s.content:"(empty response)",E=s.usage;i(l,"ai"),i(`${a.id}/${a.model} | ${E?.total??"?"} tokens`,"dim")}catch(s){i(`Error: ${s instanceof Error?s.message:String(s)}`,"fail")}r(v,!1)}function B(e){e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),P())}var y=oe(),w=b(y),U=g(b(w),4);{var C=e=>{I(e,{text:"Connected",classes:"pill-connected"})},Y=e=>{I(e,{text:"Loading...",classes:"pill-loading"})};T(U,e=>{t(f)?e(C):e(Y,-1)})}c(w);var j=g(w,2);{var F=e=>{var a=re();K(a,21,()=>O,s=>s.id,(s,l)=>{{let E=_(()=>t(o)===t(l).id?"prov-pill--active":"");I(s,{get text(){return t(l).label},get classes(){return`prov-pill ${t(E)??""}`},onclick:()=>{D(t(l).id)}})}}),c(a),k(e,a)};T(j,e=>{t(f)&&e(F)})}var L=g(j,2);K(L,21,()=>t(h),ae,(e,a)=>{var s=ie(),l=b(s,!0);c(s),X(()=>{te(s,1,`log-entry ${t(a).type??""}`,"svelte-sjabew"),V(l,t(a).text)}),k(e,s)}),c(L);var x=g(L,2),A=b(x);{let e=_(()=>t(f)?`Ask anything... [${t(o)}]`:"Loading SDK...");Z(A,{name:"prompt",get placeholder(){return t(e)},classes:"input-prompt",get value(){return t(d)},set value(a){r(d,a,!0)}})}var G=g(A,2);{let e=_(()=>!t(f)||t(v)||!t(d).trim()),a=_(()=>t(v)?"...":"Send");ee(G,{classes:"btn-primary",onclick:P,get disabled(){return t(e)},get text(){return t(a)}})}c(x),c(y),H("keydown",x,B),k(M,y),W()}q(["keydown"]);export{pe as component};
1
+ import{d as q,i as T,b as H,a as k,f as N,s as V}from"../chunks/BPDiEZo0.js";import{p as z,s as n,q as J,v as Q,w as W,g as t,b as r,x as _,d as g,c as b,r as c,t as X}from"../chunks/DWmC0QM7.js";import{e as K,I as Z,B as ee,s as te,i as ae,P as I}from"../chunks/B1bOvemT.js";import{i as se,N as S}from"../chunks/C4Hns_Wl.js";import{P as O}from"../chunks/C87ZRWX0.js";var re=N('<div class="provider-bar svelte-sjabew"></div>'),ie=N("<div> </div>"),oe=N('<div class="page svelte-sjabew"><header class="svelte-sjabew"><h1 class="svelte-sjabew">NeuroLink</h1> <span class="version svelte-sjabew">new NeuroLink()</span> <!></header> <!> <div class="log svelte-sjabew" id="log"></div> <div class="input-bar svelte-sjabew"><!> <!></div></div>');function pe(M,p){z(p,!0);let u=n(null),m=n(null),h=n(J([])),d=n(""),v=n(!1),f=n(!1),o=n("litellm");function i(e,a="info"){r(h,[...t(h),{text:e,type:a}],!0)}function R(){const e=globalThis.process;if(!e?.env)return;const a=e.env;p.data.litellmBaseUrl&&(a.LITELLM_BASE_URL=p.data.litellmBaseUrl),p.data.litellmModel&&(a.LITELLM_MODEL=p.data.litellmModel);const s=window.__aiProviders;s?.["google-ai"]&&(a.GOOGLE_AI_API_KEY="proxy-via-server"),s?.anthropic&&(a.ANTHROPIC_API_KEY="proxy-via-server"),s?.openai&&(a.OPENAI_API_KEY="proxy-via-server"),s?.mistral&&(a.MISTRAL_API_KEY="proxy-via-server")}Q(async()=>{$(),se(),R(),i("Loading NeuroLink from CDN..."),i(S,"dim");try{r(u,await import(S),!0),i(`Loaded! ${Object.keys(t(u)??{}).length} exports`,"pass"),r(m,new(t(u)).NeuroLink({provider:t(o)}),!0),i(`NeuroLink ready · provider: ${t(o)}`,"pass"),r(f,!0)}catch(e){i(`Failed to load: ${e instanceof Error?e.message:String(e)}`,"fail")}});function D(e){!t(u)||e===t(o)||(r(o,e,!0),r(m,new(t(u)).NeuroLink({provider:e}),!0),i(`Switched to provider: ${e}`,"dim"))}function $(){typeof globalThis.process>"u"&&(globalThis.process={cwd:()=>"/",env:{},platform:"browser",version:"v24.0.0"}),typeof globalThis.global>"u"&&(globalThis.global=globalThis)}async function P(){if(!t(d).trim()||!t(m)||t(v))return;const e=t(d).trim();r(d,""),r(v,!0),i(`> ${e}`,"user");const a=O.find(s=>s.id===t(o));if(!a){r(v,!1);return}try{const s=await t(m).generate({input:{text:e},model:a.model,provider:a.id}),l=typeof s.content=="string"?s.content:"(empty response)",E=s.usage;i(l,"ai"),i(`${a.id}/${a.model} | ${E?.total??"?"} tokens`,"dim")}catch(s){i(`Error: ${s instanceof Error?s.message:String(s)}`,"fail")}r(v,!1)}function B(e){e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),P())}var y=oe(),w=b(y),U=g(b(w),4);{var C=e=>{I(e,{text:"Connected",classes:"pill-connected"})},Y=e=>{I(e,{text:"Loading...",classes:"pill-loading"})};T(U,e=>{t(f)?e(C):e(Y,-1)})}c(w);var j=g(w,2);{var F=e=>{var a=re();K(a,21,()=>O,s=>s.id,(s,l)=>{{let E=_(()=>t(o)===t(l).id?"prov-pill--active":"");I(s,{get text(){return t(l).label},get classes(){return`prov-pill ${t(E)??""}`},onclick:()=>{D(t(l).id)}})}}),c(a),k(e,a)};T(j,e=>{t(f)&&e(F)})}var L=g(j,2);K(L,21,()=>t(h),ae,(e,a)=>{var s=ie(),l=b(s,!0);c(s),X(()=>{te(s,1,`log-entry ${t(a).type??""}`,"svelte-sjabew"),V(l,t(a).text)}),k(e,s)}),c(L);var x=g(L,2),A=b(x);{let e=_(()=>t(f)?`Ask anything... [${t(o)}]`:"Loading SDK...");Z(A,{name:"prompt",get placeholder(){return t(e)},classes:"input-prompt",get value(){return t(d)},set value(a){r(d,a,!0)}})}var G=g(A,2);{let e=_(()=>!t(f)||t(v)||!t(d).trim()),a=_(()=>t(v)?"...":"Send");ee(G,{classes:"btn-primary",onclick:P,get disabled(){return t(e)},get text(){return t(a)}})}c(x),c(y),H("keydown",x,B),k(M,y),W()}q(["keydown"]);export{pe as component};
@@ -1 +1 @@
1
- import{i as w,a as p,f as m,s as $}from"../chunks/BPDiEZo0.js";import{p as Qe,s as k,q as We,v as Xe,y as Ye,w as et,z as tt,g as e,b as c,$ as rt,c as o,d as l,r as a,x as u,A as K,B as Z,t as Q}from"../chunks/DWmC0QM7.js";import{b as st,e as ve,i as at,B as N,c as W,P as X,d as ot}from"../chunks/B1bOvemT.js";import{h as nt}from"../chunks/2rBV5OkJ.js";import{g as it}from"../chunks/DOEXXmsh.js";import{p as ct}from"../chunks/EqMAkEha.js";import{A as lt}from"../chunks/DzuS5Nbr.js";import{B as dt}from"../chunks/Bn-6X1BO.js";import{S as ue,R as vt}from"../chunks/CJulw9ux.js";import{g as ut,s as ft,c as pt}from"../chunks/xs1Xl3_e.js";import{i as mt}from"../chunks/gQJcRhou.js";import"../chunks/BDcFu3l7.js";import{s as fe,a as ht}from"../chunks/BdtLzPpO.js";import{f as _t}from"../chunks/BLszSzTT.js";import{E as pe}from"../chunks/DomZZqvG.js";var gt=m('<meta name="description" content="Project sessions sorted by latest update"/>'),yt=m('<div class="loading-container"><!> <!></div>'),bt=m('<div class="project-back-row svelte-urn6fi"><a href="/" class="back-link"><span class="back-arrow">&larr;</span> Back to Projects</a></div> <!>',1),$t=m("<!> Refresh",1),jt=m('<div class="session-card-subtitle"> </div>'),St=m('<span class="connect-dot svelte-urn6fi"></span> Connect',1),Pt=m('<a class="session-card"><div class="session-card-header"><div><h3 class="session-card-title"> </h3> <!></div> <div class="session-card-actions svelte-urn6fi"><!> <!></div></div> <div class="session-stats"><span><strong> </strong> messages</span> <!> <!></div> <div class="session-meta-row svelte-urn6fi"><span class="session-modified svelte-urn6fi"> </span> <span class="session-duration svelte-urn6fi"> </span></div></a>'),xt=m('<div style="text-align: center; padding: 1rem;"><!></div>'),wt=m('<div class="sessions-container svelte-urn6fi"></div> <!>',1),kt=m('<div class="chat-session-header"><div class="chat-session-header-top svelte-urn6fi"><a href="/" class="back-link">&#8592; Back to Projects</a> <!></div> <h1 class="chat-session-title"> </h1> <div class="chat-session-meta"><span class="session-card-subtitle"> </span> <span> </span></div></div> <!>',1),Bt=m('<main class="main"><!> <!></main>');function Gt(me,he){Qe(he,!0);const _e=15e3,D=20;let i=k(null),g=k(!0),h=k(null),L=k(null),R=null,B=k(D),Y=k(We([])),j=k(null);const S=u(()=>ct.url.searchParams.get("id")||""),ge=u(()=>e(i)?e(i).sessions.slice(0,e(B)):[]),ye=u(()=>e(i)?e(B)<e(i).sessions.length:!1),be=u(()=>new Set(e(Y).map(t=>t.sessionId).filter(t=>typeof t=="string")));Xe(()=>{$e();const t=ut(`shooter_project_${e(S)}`);t&&(c(i,t,!0),c(g,!1)),setTimeout(()=>{M(),z()},50),R=setInterval(()=>{e(h)?.apiKey&&e(S)&&(M(),z())},_e)}),Ye(()=>{R&&(clearInterval(R),R=null)});function $e(){try{const t=localStorage.getItem("shooter_config");if(t){const r=JSON.parse(t);mt(r)?c(h,r,!0):(localStorage.removeItem("shooter_config"),c(h,null))}}catch{}}async function M(t=!1){if(!e(h)?.apiKey||!e(S)){c(g,!1);return}e(i)||c(g,!0);try{const d=await fetch(t?"/api/sessions?refresh=true":"/api/sessions",{headers:{Authorization:`Bearer ${e(h).apiKey}`}});if(!d.ok){c(L,`Failed to load project (HTTP ${d.status})`),c(g,!1);return}c(L,null);const f=(await d.json()).projects.find(T=>T.id===e(S))||null;c(i,f,!0),f&&ft(`shooter_project_${e(S)}`,f)}catch(r){console.error("Failed to fetch project:",r)}finally{c(g,!1)}}async function z(){if(e(h)?.apiKey)try{const t=await fetch("/api/sessions/detect",{headers:{Authorization:`Bearer ${e(h).apiKey}`}});if(t.ok){const r=await t.json();c(Y,r.processes,!0)}}catch{}}async function ee(t,r,d){if(t.preventDefault(),t.stopPropagation(),!(!e(h)?.apiKey||!e(i)||e(j))){c(j,r,!0);try{const v=await fetch("/api/sessions/connect",{body:JSON.stringify({command:d,cwd:e(i).fullPath,sessionId:r}),headers:{Authorization:`Bearer ${e(h).apiKey}`,"Content-Type":"application/json"},method:"POST"});if(v.ok){const f=await v.json();it(`/terminals/${f.terminalId}`)}}catch(v){console.error("Failed to connect to session:",v)}finally{c(j,null)}}}async function je(){c(g,!0),c(i,null),c(B,D),pt(`shooter_project_${e(S)}`),await M(!0),await z()}function Se(){c(B,e(B)+D)}function te(t){if(!t)return"";const r=new Date(t);return isNaN(r.getTime())?"":r.toLocaleDateString("en-US",{day:"numeric",hour:"2-digit",minute:"2-digit",month:"short"})}function Pe(t,r){return t.length<=r?t:`${t.slice(0,r).trimEnd()}...`}var F=Bt();nt("urn6fi",t=>{var r=gt();tt(()=>{rt.title=`${(e(i)?.name||"Project")??""} - Shooter`}),p(t,r)});var re=o(F);{var xe=t=>{st(t,{get text(){return e(L)},classes:"banner-error"})};w(re,t=>{e(L)&&t(xe)})}var we=l(re,2);{var ke=t=>{var r=yt(),d=o(r);ue(d,{classes:"shimmer-header"});var v=l(d,2);ve(v,16,()=>Array(4),at,(f,T)=>{ue(f,{classes:"shimmer-card"})}),a(r),p(t,r)},Be=t=>{var r=bt(),d=l(K(r),2);pe(d,{title:"Project Not Found",description:"The requested project could not be found.",icon:f=>{W(f,{get svg(){return lt},classes:"icon-24"})}}),p(t,r)},Te=t=>{var r=kt(),d=K(r),v=o(d),f=l(o(v),2);N(f,{classes:"btn-secondary",onclick:je,get disabled(){return e(g)},children:(y,E)=>{var b=$t(),q=K(b);W(q,{get svg(){return vt},classes:"icon-14"}),Z(),p(y,b)},$$slots:{default:!0}}),a(v);var T=l(v,2),Ce=o(T,!0);a(T);var se=l(T,2),O=o(se),Ie=o(O,!0);a(O);var ae=l(O,2),Ae=o(ae);a(ae),a(se),a(d);var Le=l(d,2);{var Re=y=>{pe(y,{title:"No sessions yet",description:"Sessions for this project will appear here",icon:b=>{W(b,{get svg(){return dt},classes:"icon-24"})}})},Ee=y=>{var E=wt(),b=K(E);ve(b,21,()=>e(ge),P=>P.id,(P,s)=>{var C=Pt(),I=o(C),J=o(I),G=o(J),Ne=o(G,!0);a(G);var De=l(G,2);{var Me=n=>{var _=jt(),A=o(_,!0);a(_),Q(x=>$(A,x),[()=>Pe(e(s).summary,80)]),p(n,_)};w(De,n=>{e(s).summary&&n(Me)})}a(J);var oe=l(J,2),ne=o(oe);{let n=u(()=>_t(e(s).modified));X(ne,{get text(){return e(n)},classes:"pill-session-time"})}var ze=l(ne,2);{var Fe=n=>{{let _=u(()=>e(j)===e(s).id),A=u(()=>e(j)===e(s).id);N(n,{classes:"btn-connect btn-xs",onclick:x=>{ee(x,e(s).id,fe(e(s).source))},get disabled(){return e(_)},get showLoader(){return e(A)},children:(x,Tt)=>{var Ze=St();Z(),p(x,Ze)},$$slots:{default:!0}})}},Oe=u(()=>e(be).has(e(s).id)),qe=n=>{{let _=u(()=>e(j)===e(s).id),A=u(()=>e(j)===e(s).id);N(n,{classes:"btn-resume btn-xs",onclick:x=>{ee(x,e(s).id,fe(e(s).source))},get disabled(){return e(_)},get showLoader(){return e(A)},text:"Resume"})}};w(ze,n=>{e(Oe)?n(Fe):n(qe,-1)})}a(oe),a(I);var H=l(I,2),U=o(H),ie=o(U),Je=o(ie,!0);a(ie),Z(),a(U);var ce=l(U,2);{var Ge=n=>{X(n,{get text(){return`🌿 ${e(s).gitBranch??""}`},classes:"pill-git-branch"})};w(ce,n=>{e(s).gitBranch&&n(Ge)})}var He=l(ce,2);{let n=u(()=>ht(e(s).source));X(He,{get text(){return e(n)},get classes(){return`pill-source-${e(s).source??""}`}})}a(H);var le=l(H,2),V=o(le),Ue=o(V);a(V);var de=l(V,2),Ve=o(de);a(de),a(le),a(C),Q((n,_)=>{ot(C,"href",`/session/${e(s).id??""}?project=${e(S)??""}`),$(Ne,e(s).title),$(Je,e(s).messageCount),$(Ue,`Last updated ${n??""}`),$(Ve,`Created ${_??""}`)},[()=>te(e(s).modified),()=>te(e(s).created)]),p(P,C)}),a(b);var q=l(b,2);{var Ke=P=>{var s=xt(),C=o(s);{let I=u(()=>`Load More (${e(i).sessions.length-e(B)} remaining)`);N(C,{classes:"btn-secondary",onclick:Se,get text(){return e(I)}})}a(s),p(P,s)};w(q,P=>{e(ye)&&P(Ke)})}p(y,E)};w(Le,y=>{e(i).sessions.length===0?y(Re):y(Ee,-1)})}Q(()=>{$(Ce,e(i).name),$(Ie,e(i).fullPath),$(Ae,`${e(i).sessionCount??""} sessions`)}),p(t,r)};w(we,t=>{e(g)&&!e(i)?t(ke):e(i)?t(Te,-1):t(Be,1)})}a(F),p(me,F),et()}export{Gt as component};
1
+ import{i as w,a as p,f as m,s as $}from"../chunks/BPDiEZo0.js";import{p as Qe,s as k,q as We,v as Xe,y as Ye,w as et,z as tt,g as e,b as c,$ as rt,c as o,d as l,r as a,x as u,A as K,B as Z,t as Q}from"../chunks/DWmC0QM7.js";import{b as st,e as ve,i as at,B as N,c as W,P as X,d as ot}from"../chunks/B1bOvemT.js";import{h as nt}from"../chunks/2rBV5OkJ.js";import{g as it}from"../chunks/BfbPKMXz.js";import{p as ct}from"../chunks/DhK7PwI_.js";import{A as lt}from"../chunks/DzuS5Nbr.js";import{B as dt}from"../chunks/Bn-6X1BO.js";import{S as ue,R as vt}from"../chunks/CJulw9ux.js";import{g as ut,s as ft,c as pt}from"../chunks/xs1Xl3_e.js";import{i as mt}from"../chunks/gQJcRhou.js";import"../chunks/BDcFu3l7.js";import{s as fe,a as ht}from"../chunks/BdtLzPpO.js";import{f as _t}from"../chunks/BLszSzTT.js";import{E as pe}from"../chunks/DomZZqvG.js";var gt=m('<meta name="description" content="Project sessions sorted by latest update"/>'),yt=m('<div class="loading-container"><!> <!></div>'),bt=m('<div class="project-back-row svelte-urn6fi"><a href="/" class="back-link"><span class="back-arrow">&larr;</span> Back to Projects</a></div> <!>',1),$t=m("<!> Refresh",1),jt=m('<div class="session-card-subtitle"> </div>'),St=m('<span class="connect-dot svelte-urn6fi"></span> Connect',1),Pt=m('<a class="session-card"><div class="session-card-header"><div><h3 class="session-card-title"> </h3> <!></div> <div class="session-card-actions svelte-urn6fi"><!> <!></div></div> <div class="session-stats"><span><strong> </strong> messages</span> <!> <!></div> <div class="session-meta-row svelte-urn6fi"><span class="session-modified svelte-urn6fi"> </span> <span class="session-duration svelte-urn6fi"> </span></div></a>'),xt=m('<div style="text-align: center; padding: 1rem;"><!></div>'),wt=m('<div class="sessions-container svelte-urn6fi"></div> <!>',1),kt=m('<div class="chat-session-header"><div class="chat-session-header-top svelte-urn6fi"><a href="/" class="back-link">&#8592; Back to Projects</a> <!></div> <h1 class="chat-session-title"> </h1> <div class="chat-session-meta"><span class="session-card-subtitle"> </span> <span> </span></div></div> <!>',1),Bt=m('<main class="main"><!> <!></main>');function Gt(me,he){Qe(he,!0);const _e=15e3,D=20;let i=k(null),g=k(!0),h=k(null),L=k(null),R=null,B=k(D),Y=k(We([])),j=k(null);const S=u(()=>ct.url.searchParams.get("id")||""),ge=u(()=>e(i)?e(i).sessions.slice(0,e(B)):[]),ye=u(()=>e(i)?e(B)<e(i).sessions.length:!1),be=u(()=>new Set(e(Y).map(t=>t.sessionId).filter(t=>typeof t=="string")));Xe(()=>{$e();const t=ut(`shooter_project_${e(S)}`);t&&(c(i,t,!0),c(g,!1)),setTimeout(()=>{M(),z()},50),R=setInterval(()=>{e(h)?.apiKey&&e(S)&&(M(),z())},_e)}),Ye(()=>{R&&(clearInterval(R),R=null)});function $e(){try{const t=localStorage.getItem("shooter_config");if(t){const r=JSON.parse(t);mt(r)?c(h,r,!0):(localStorage.removeItem("shooter_config"),c(h,null))}}catch{}}async function M(t=!1){if(!e(h)?.apiKey||!e(S)){c(g,!1);return}e(i)||c(g,!0);try{const d=await fetch(t?"/api/sessions?refresh=true":"/api/sessions",{headers:{Authorization:`Bearer ${e(h).apiKey}`}});if(!d.ok){c(L,`Failed to load project (HTTP ${d.status})`),c(g,!1);return}c(L,null);const f=(await d.json()).projects.find(T=>T.id===e(S))||null;c(i,f,!0),f&&ft(`shooter_project_${e(S)}`,f)}catch(r){console.error("Failed to fetch project:",r)}finally{c(g,!1)}}async function z(){if(e(h)?.apiKey)try{const t=await fetch("/api/sessions/detect",{headers:{Authorization:`Bearer ${e(h).apiKey}`}});if(t.ok){const r=await t.json();c(Y,r.processes,!0)}}catch{}}async function ee(t,r,d){if(t.preventDefault(),t.stopPropagation(),!(!e(h)?.apiKey||!e(i)||e(j))){c(j,r,!0);try{const v=await fetch("/api/sessions/connect",{body:JSON.stringify({command:d,cwd:e(i).fullPath,sessionId:r}),headers:{Authorization:`Bearer ${e(h).apiKey}`,"Content-Type":"application/json"},method:"POST"});if(v.ok){const f=await v.json();it(`/terminals/${f.terminalId}`)}}catch(v){console.error("Failed to connect to session:",v)}finally{c(j,null)}}}async function je(){c(g,!0),c(i,null),c(B,D),pt(`shooter_project_${e(S)}`),await M(!0),await z()}function Se(){c(B,e(B)+D)}function te(t){if(!t)return"";const r=new Date(t);return isNaN(r.getTime())?"":r.toLocaleDateString("en-US",{day:"numeric",hour:"2-digit",minute:"2-digit",month:"short"})}function Pe(t,r){return t.length<=r?t:`${t.slice(0,r).trimEnd()}...`}var F=Bt();nt("urn6fi",t=>{var r=gt();tt(()=>{rt.title=`${(e(i)?.name||"Project")??""} - Shooter`}),p(t,r)});var re=o(F);{var xe=t=>{st(t,{get text(){return e(L)},classes:"banner-error"})};w(re,t=>{e(L)&&t(xe)})}var we=l(re,2);{var ke=t=>{var r=yt(),d=o(r);ue(d,{classes:"shimmer-header"});var v=l(d,2);ve(v,16,()=>Array(4),at,(f,T)=>{ue(f,{classes:"shimmer-card"})}),a(r),p(t,r)},Be=t=>{var r=bt(),d=l(K(r),2);pe(d,{title:"Project Not Found",description:"The requested project could not be found.",icon:f=>{W(f,{get svg(){return lt},classes:"icon-24"})}}),p(t,r)},Te=t=>{var r=kt(),d=K(r),v=o(d),f=l(o(v),2);N(f,{classes:"btn-secondary",onclick:je,get disabled(){return e(g)},children:(y,E)=>{var b=$t(),q=K(b);W(q,{get svg(){return vt},classes:"icon-14"}),Z(),p(y,b)},$$slots:{default:!0}}),a(v);var T=l(v,2),Ce=o(T,!0);a(T);var se=l(T,2),O=o(se),Ie=o(O,!0);a(O);var ae=l(O,2),Ae=o(ae);a(ae),a(se),a(d);var Le=l(d,2);{var Re=y=>{pe(y,{title:"No sessions yet",description:"Sessions for this project will appear here",icon:b=>{W(b,{get svg(){return dt},classes:"icon-24"})}})},Ee=y=>{var E=wt(),b=K(E);ve(b,21,()=>e(ge),P=>P.id,(P,s)=>{var C=Pt(),I=o(C),J=o(I),G=o(J),Ne=o(G,!0);a(G);var De=l(G,2);{var Me=n=>{var _=jt(),A=o(_,!0);a(_),Q(x=>$(A,x),[()=>Pe(e(s).summary,80)]),p(n,_)};w(De,n=>{e(s).summary&&n(Me)})}a(J);var oe=l(J,2),ne=o(oe);{let n=u(()=>_t(e(s).modified));X(ne,{get text(){return e(n)},classes:"pill-session-time"})}var ze=l(ne,2);{var Fe=n=>{{let _=u(()=>e(j)===e(s).id),A=u(()=>e(j)===e(s).id);N(n,{classes:"btn-connect btn-xs",onclick:x=>{ee(x,e(s).id,fe(e(s).source))},get disabled(){return e(_)},get showLoader(){return e(A)},children:(x,Tt)=>{var Ze=St();Z(),p(x,Ze)},$$slots:{default:!0}})}},Oe=u(()=>e(be).has(e(s).id)),qe=n=>{{let _=u(()=>e(j)===e(s).id),A=u(()=>e(j)===e(s).id);N(n,{classes:"btn-resume btn-xs",onclick:x=>{ee(x,e(s).id,fe(e(s).source))},get disabled(){return e(_)},get showLoader(){return e(A)},text:"Resume"})}};w(ze,n=>{e(Oe)?n(Fe):n(qe,-1)})}a(oe),a(I);var H=l(I,2),U=o(H),ie=o(U),Je=o(ie,!0);a(ie),Z(),a(U);var ce=l(U,2);{var Ge=n=>{X(n,{get text(){return`🌿 ${e(s).gitBranch??""}`},classes:"pill-git-branch"})};w(ce,n=>{e(s).gitBranch&&n(Ge)})}var He=l(ce,2);{let n=u(()=>ht(e(s).source));X(He,{get text(){return e(n)},get classes(){return`pill-source-${e(s).source??""}`}})}a(H);var le=l(H,2),V=o(le),Ue=o(V);a(V);var de=l(V,2),Ve=o(de);a(de),a(le),a(C),Q((n,_)=>{ot(C,"href",`/session/${e(s).id??""}?project=${e(S)??""}`),$(Ne,e(s).title),$(Je,e(s).messageCount),$(Ue,`Last updated ${n??""}`),$(Ve,`Created ${_??""}`)},[()=>te(e(s).modified),()=>te(e(s).created)]),p(P,C)}),a(b);var q=l(b,2);{var Ke=P=>{var s=xt(),C=o(s);{let I=u(()=>`Load More (${e(i).sessions.length-e(B)} remaining)`);N(C,{classes:"btn-secondary",onclick:Se,get text(){return e(I)}})}a(s),p(P,s)};w(q,P=>{e(ye)&&P(Ke)})}p(y,E)};w(Le,y=>{e(i).sessions.length===0?y(Re):y(Ee,-1)})}Q(()=>{$(Ce,e(i).name),$(Ie,e(i).fullPath),$(Ae,`${e(i).sessionCount??""} sessions`)}),p(t,r)};w(we,t=>{e(g)&&!e(i)?t(ke):e(i)?t(Te,-1):t(Be,1)})}a(F),p(me,F),et()}export{Gt as component};
@@ -1,4 +1,4 @@
1
- import{i as K,a as h,f as g,s as V}from"../chunks/BPDiEZo0.js";import{p as ge,s as v,q as we,v as ye,w as be,z as Se,b as s,g as e,$ as _e,c as _,r as $,x as P,A as H,d as D,t as Q}from"../chunks/DWmC0QM7.js";import{h as $e}from"../chunks/2rBV5OkJ.js";import{d as X,B as ke}from"../chunks/B1bOvemT.js";import{p as x}from"../chunks/EqMAkEha.js";import{g as Ie,s as Y}from"../chunks/xs1Xl3_e.js";import"../chunks/BDcFu3l7.js";import{s as Z}from"../chunks/BdtLzPpO.js";import{C as je}from"../chunks/i5iZvmIH.js";var Ce=g('<meta name="description" content="Session conversation view"/>'),Oe=g('<div class="loading-container" aria-live="polite" aria-busy="true"><div class="shimmer shimmer-header" aria-hidden="true"></div> <div class="chat-container"><div class="shimmer shimmer-bubble shimmer-bubble-user" aria-hidden="true"></div> <div class="shimmer shimmer-bubble shimmer-bubble-assistant" aria-hidden="true"></div> <div class="shimmer shimmer-bubble shimmer-bubble-user-short" aria-hidden="true"></div> <div class="shimmer shimmer-bubble shimmer-bubble-assistant-wide" aria-hidden="true"></div></div></div>'),Me=g('<div class="session-back-row svelte-1a2wdfb"><a class="back-link">← Back</a></div> <p class="error-text svelte-1a2wdfb"> </p>',1),Ne=g('<span class="resume-status svelte-1a2wdfb">Connecting...</span>'),Ae=g('<span class="resume-status svelte-1a2wdfb">Resuming session...</span>'),Te=g('<span class="connection-dot connected svelte-1a2wdfb"></span>'),Pe=g('<span class="connection-dot reconnecting svelte-1a2wdfb"></span>'),De=g('<div class="load-earlier-row svelte-1a2wdfb"><!></div>'),Re=g('<div class="session-header svelte-1a2wdfb"><div class="session-header-row svelte-1a2wdfb"><a class="back-link">← Back</a> <!></div> <h1 class="session-title svelte-1a2wdfb"> </h1></div> <div class="session-chat-container svelte-1a2wdfb"><!> <!></div>',1),We=g('<main class="main session-page-main svelte-1a2wdfb"><!></main>');function Fe(ee,te){ge(te,!0);let f=v(null),i=v(we([])),w=v(!0),I=v(null),R=v(!1),N=v(!1),A=v(200),j=v(null),k=v("idle"),c=v("idle"),y=null,b=null,C=null,O=null,d=!1;const W=P(()=>x.params.id),M=P(()=>x.url.searchParams.get("project")||""),se=P(()=>e(c)==="connecting"||e(c)==="resuming");function T(){try{const t=localStorage.getItem("shooter_config");return t?JSON.parse(t):null}catch{return null}}async function L(){const t=T();if(!t)return null;try{const n=await fetch("/api/ws-ticket",{headers:{Authorization:`Bearer ${t.apiKey}`},method:"POST"});return n.ok?(await n.json()).ticket:null}catch{return null}}async function z(t,n){if(d||C&&(C.readyState===WebSocket.OPEN||C.readyState===WebSocket.CONNECTING))return;const a=await L();if(!a||d)return;s(k,"connecting");const o=window.location.protocol==="https:"?"wss:":"ws:",r=new WebSocket(`${o}//${window.location.host}${t}?ticket=${a}`);r.onopen=()=>{if(d){r.close();return}s(k,"connected"),r.send(JSON.stringify({sessionId:n,type:"subscribe"}))},r.onmessage=u=>{if(!d)try{const p=JSON.parse(u.data);ne(p)}catch{}},r.onclose=()=>{d||(s(k,"disconnected"),C=null,e(j)&&(O&&clearTimeout(O),O=setTimeout(()=>{O=null,!d&&e(j)&&z(`/ws/session/${e(j)}`,e(j))},2e3)))},r.onerror=()=>{d||s(k,"disconnected")},C=r}async function q(t){if(d)return;const n=await L();if(!n||d)return;const a=window.location.protocol==="https:"?"wss:":"ws:",o=new WebSocket(`${a}//${window.location.host}${t}?ticket=${n}`);o.onopen=()=>{if(d){o.close();return}b=o,e(c)==="ready"&&y&&(o.send(JSON.stringify({data:`${y}
1
+ import{i as K,a as h,f as g,s as V}from"../chunks/BPDiEZo0.js";import{p as ge,s as v,q as we,v as ye,w as be,z as Se,b as s,g as e,$ as _e,c as _,r as $,x as P,A as H,d as D,t as Q}from"../chunks/DWmC0QM7.js";import{h as $e}from"../chunks/2rBV5OkJ.js";import{d as X,B as ke}from"../chunks/B1bOvemT.js";import{p as x}from"../chunks/DhK7PwI_.js";import{g as Ie,s as Y}from"../chunks/xs1Xl3_e.js";import"../chunks/BDcFu3l7.js";import{s as Z}from"../chunks/BdtLzPpO.js";import{C as je}from"../chunks/i5iZvmIH.js";var Ce=g('<meta name="description" content="Session conversation view"/>'),Oe=g('<div class="loading-container" aria-live="polite" aria-busy="true"><div class="shimmer shimmer-header" aria-hidden="true"></div> <div class="chat-container"><div class="shimmer shimmer-bubble shimmer-bubble-user" aria-hidden="true"></div> <div class="shimmer shimmer-bubble shimmer-bubble-assistant" aria-hidden="true"></div> <div class="shimmer shimmer-bubble shimmer-bubble-user-short" aria-hidden="true"></div> <div class="shimmer shimmer-bubble shimmer-bubble-assistant-wide" aria-hidden="true"></div></div></div>'),Me=g('<div class="session-back-row svelte-1a2wdfb"><a class="back-link">← Back</a></div> <p class="error-text svelte-1a2wdfb"> </p>',1),Ne=g('<span class="resume-status svelte-1a2wdfb">Connecting...</span>'),Ae=g('<span class="resume-status svelte-1a2wdfb">Resuming session...</span>'),Te=g('<span class="connection-dot connected svelte-1a2wdfb"></span>'),Pe=g('<span class="connection-dot reconnecting svelte-1a2wdfb"></span>'),De=g('<div class="load-earlier-row svelte-1a2wdfb"><!></div>'),Re=g('<div class="session-header svelte-1a2wdfb"><div class="session-header-row svelte-1a2wdfb"><a class="back-link">← Back</a> <!></div> <h1 class="session-title svelte-1a2wdfb"> </h1></div> <div class="session-chat-container svelte-1a2wdfb"><!> <!></div>',1),We=g('<main class="main session-page-main svelte-1a2wdfb"><!></main>');function Fe(ee,te){ge(te,!0);let f=v(null),i=v(we([])),w=v(!0),I=v(null),R=v(!1),N=v(!1),A=v(200),j=v(null),k=v("idle"),c=v("idle"),y=null,b=null,C=null,O=null,d=!1;const W=P(()=>x.params.id),M=P(()=>x.url.searchParams.get("project")||""),se=P(()=>e(c)==="connecting"||e(c)==="resuming");function T(){try{const t=localStorage.getItem("shooter_config");return t?JSON.parse(t):null}catch{return null}}async function L(){const t=T();if(!t)return null;try{const n=await fetch("/api/ws-ticket",{headers:{Authorization:`Bearer ${t.apiKey}`},method:"POST"});return n.ok?(await n.json()).ticket:null}catch{return null}}async function z(t,n){if(d||C&&(C.readyState===WebSocket.OPEN||C.readyState===WebSocket.CONNECTING))return;const a=await L();if(!a||d)return;s(k,"connecting");const o=window.location.protocol==="https:"?"wss:":"ws:",r=new WebSocket(`${o}//${window.location.host}${t}?ticket=${a}`);r.onopen=()=>{if(d){r.close();return}s(k,"connected"),r.send(JSON.stringify({sessionId:n,type:"subscribe"}))},r.onmessage=u=>{if(!d)try{const p=JSON.parse(u.data);ne(p)}catch{}},r.onclose=()=>{d||(s(k,"disconnected"),C=null,e(j)&&(O&&clearTimeout(O),O=setTimeout(()=>{O=null,!d&&e(j)&&z(`/ws/session/${e(j)}`,e(j))},2e3)))},r.onerror=()=>{d||s(k,"disconnected")},C=r}async function q(t){if(d)return;const n=await L();if(!n||d)return;const a=window.location.protocol==="https:"?"wss:":"ws:",o=new WebSocket(`${a}//${window.location.host}${t}?ticket=${n}`);o.onopen=()=>{if(d){o.close();return}b=o,e(c)==="ready"&&y&&(o.send(JSON.stringify({data:`${y}
2
2
  `,type:"input"})),y=null)},o.onclose=()=>{b===o&&(b=null)}}function ne(t){if(t.type==="history"){const n=t.messages||[];s(i,n.map(a=>({id:a.id,parts:a.content,role:a.role,timestamp:a.timestamp})),!0),s(R,!1),e(c)==="resuming"&&(s(c,"ready"),y&&b?.readyState===WebSocket.OPEN&&(b.send(JSON.stringify({data:`${y}
3
3
  `,type:"input"})),y=null))}else if(t.type==="message")s(i,[...e(i),{id:`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:t.content||[],role:t.role||"assistant",timestamp:t.timestamp||new Date().toISOString()}],!0);else if(t.type==="tool-use"){const n={id:t.id||`tool-${Date.now()}`,input:t.input||{},toolName:t.name,type:"tool_use"},a=e(i).length>0?e(i)[e(i).length-1]:null;a?.role==="assistant"?s(i,[...e(i).slice(0,-1),{...a,parts:[...a.parts,n]}],!0):s(i,[...e(i),{id:`tool-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[n],role:"assistant",timestamp:new Date().toISOString()}],!0)}else if(t.type==="tool-result"){const n={isError:t.isError||!1,output:t.output||"",toolUseId:t.id,type:"tool_result"},a=e(i).length>0?e(i)[e(i).length-1]:null;a?.role==="system"?s(i,[...e(i).slice(0,-1),{...a,parts:[...a.parts,n]}],!0):s(i,[...e(i),{id:`result-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[n],role:"system",timestamp:new Date().toISOString()}],!0)}else if(t.type==="thinking"){const n={content:t.text||"",type:"thinking"},a=e(i).length>0?e(i)[e(i).length-1]:null;a?.role==="assistant"?s(i,[...e(i).slice(0,-1),{...a,parts:[...a.parts,n]}],!0):s(i,[...e(i),{id:`think-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,parts:[n],role:"assistant",timestamp:new Date().toISOString()}],!0)}else t.type==="session-end"&&s(c,"idle")}async function ae(){if(!e(f)||d){s(c,"idle");return}const t=T();if(!t){s(c,"idle");return}s(c,"connecting");try{const n=Z(e(f).source),a=await fetch("/api/sessions/connect",{body:JSON.stringify({command:n,cwd:e(f).projectPath,sessionId:e(W)}),headers:{Authorization:`Bearer ${t.apiKey}`,"Content-Type":"application/json"},method:"POST"});if(!a.ok||d){s(c,"idle");return}const o=await a.json();s(j,o.terminalId,!0),s(c,"resuming"),z(o.sessionWs,o.terminalId),q(o.ws)}catch{s(c,"idle")}}function ie(t){if(t.trim()){if(e(c)==="ready"&&b?.readyState===WebSocket.OPEN){b.send(JSON.stringify({data:`${t}
4
4
  `,type:"input"}));return}if(e(c)==="connecting"||e(c)==="resuming"){y=t;return}y=t,ae()}}async function oe(){e(i).length===0&&s(w,!0);try{const t=T();if(!t){s(I,"No configuration found. Please configure settings first."),s(w,!1);return}const n=e(W)??"",a=e(M);if(!n){s(I,"No session ID"),s(w,!1);return}const o=a?`id=${encodeURIComponent(n)}&project=${encodeURIComponent(a)}&limit=${e(A)}`:`id=${encodeURIComponent(n)}&limit=${e(A)}`;let r=await fetch(`/api/sessions?${o}`,{headers:{Authorization:`Bearer ${t.apiKey}`}});if(r.status===404&&!a){const S=await fetch("/api/sessions",{headers:{Authorization:`Bearer ${t.apiKey}`}});if(S.ok){const J=await S.json();for(const B of J.projects||[])if((B.sessions||[]).find(U=>U.id===n)){r=await fetch(`/api/sessions?id=${encodeURIComponent(n)}&project=${encodeURIComponent(B.id)}`,{headers:{Authorization:`Bearer ${t.apiKey}`}});break}}}if(!r.ok){s(I,"Session not found"),s(w,!1);return}const u=await r.json(),p=Array.isArray(u.messages)?u.messages:[];Y(`shooter_session_${n}`,{messages:p,session:u.session}),s(f,u.session,!0),s(i,p,!0),s(R,p.length>=e(A)),s(w,!1);return}catch{s(I,"Failed to load session")}s(w,!1)}async function re(){if(e(N))return;const t=T();if(t){s(N,!0);try{const n=e(A)+200,a=e(W)??"",o=e(M);if(!a)return;const r=[`id=${encodeURIComponent(a)}`,`limit=${n}`];o&&r.push(`project=${encodeURIComponent(o)}`);const u=await fetch(`/api/sessions?${r.join("&")}`,{headers:{Authorization:`Bearer ${t.apiKey}`}});if(!u.ok)return;const p=await u.json(),S=Array.isArray(p.messages)?p.messages:[];s(i,S,!0),s(A,n),s(R,S.length>=n),Y(`shooter_session_${a}`,{messages:S,session:p.session})}catch{}finally{s(N,!1)}}}ye(()=>{const t=Ie(`shooter_session_${x.params.id}`);return t&&(s(f,t.session,!0),s(i,Array.isArray(t.messages)?t.messages:[],!0),s(w,!1)),oe().then(async()=>{if(!e(f)||d)return;const n=T();if(n)try{const a=Z(e(f).source),o=await fetch("/api/sessions/connect",{body:JSON.stringify({command:a,cwd:e(f).projectPath,noCreate:!0,sessionId:e(W)}),headers:{Authorization:`Bearer ${n.apiKey}`,"Content-Type":"application/json"},method:"POST"});if(o.ok&&!d){const r=await o.json();s(j,r.terminalId,!0),s(c,"resuming"),z(r.sessionWs,r.terminalId),q(r.ws)}}catch{}}),()=>{d=!0,O&&clearTimeout(O),C?.close(),b?.close()}});var E=We();$e("1a2wdfb",t=>{var n=Ce();Se(()=>{_e.title=`${(e(f)?.title||"Session")??""} - Shooter`}),h(t,n)});var ce=_(E);{var le=t=>{var n=Oe();h(t,n)},de=t=>{var n=Me(),a=H(n),o=_(a);$(a);var r=D(a,2),u=_(r,!0);$(r),Q(()=>{X(o,"href",e(M)?`/project?id=${e(M)}`:"/"),V(u,e(I))}),h(t,n)},ue=t=>{var n=Re(),a=H(n),o=_(a),r=_(o),u=D(r,2);{var p=l=>{var m=Ne();h(l,m)},S=l=>{var m=Ae();h(l,m)},J=l=>{var m=Te();h(l,m)},B=l=>{var m=Pe();h(l,m)};K(u,l=>{e(c)==="connecting"?l(p):e(c)==="resuming"?l(S,1):e(k)==="connected"?l(J,2):e(k)==="reconnecting"&&l(B,3)})}$(o);var U=D(o,2),fe=_(U,!0);$(U),$(a);var F=D(a,2),G=_(F);{var pe=l=>{var m=De(),he=_(m);{let ve=P(()=>e(N)?"Loading...":"Load earlier messages");ke(he,{get text(){return e(ve)},classes:"btn-ghost btn-sm",get disabled(){return e(N)},onclick:re})}$(m),h(l,m)};K(G,l=>{e(R)&&l(pe)})}var me=D(G,2);{let l=P(()=>[...e(i)].reverse());je(me,{get messages(){return e(l)},newestFirst:!0,get connectionState(){return e(k)},showInput:!0,get sendDisabled(){return e(se)},onSendInput:ie,sessionEnded:!1})}$(F),Q(()=>{X(r,"href",e(M)?`/project?id=${e(M)}`:"/"),V(fe,e(f).title)}),h(t,n)};K(ce,t=>{e(w)&&e(i).length===0?t(le):e(I)?t(de,1):e(f)&&t(ue,2)})}$(E),h(ee,E),be()}export{Fe as component};
@@ -1 +1 @@
1
- import{i as B,a as p,f,s as $}from"../chunks/BPDiEZo0.js";import{p as G,s as g,q as H,v as Q,w as U,D as V,b as a,g as s,c as o,x as j,d as c,$ as W,r as n,t as X}from"../chunks/DWmC0QM7.js";import{I as Y,B as Z,b as ee,e as se,P as te,d as ae}from"../chunks/B1bOvemT.js";import{h as re}from"../chunks/2rBV5OkJ.js";import{g as ne}from"../chunks/DOEXXmsh.js";import{E as oe}from"../chunks/DomZZqvG.js";var ie=f('<p class="muted svelte-1ggfn1w">Loading…</p>'),le=f('<a class="ss-card svelte-1ggfn1w"><div class="ss-card-head svelte-1ggfn1w"><span class="ss-label svelte-1ggfn1w"> </span> <!></div> <div class="ss-meta svelte-1ggfn1w"><span> </span> <span> </span></div></a>'),ce=f('<div class="ss-grid svelte-1ggfn1w"></div>'),ve=f('<main class="main sos-list svelte-1ggfn1w"><div class="page-head svelte-1ggfn1w"><div><h1 class="svelte-1ggfn1w">Session Over Sessions</h1> <p class="subtitle svelte-1ggfn1w">Coordinate multiple running agents as one super-session.</p></div></div> <div class="create-row svelte-1ggfn1w"><!> <!></div> <!> <!></main>');function he(I,P){G(P,!0);let m=g(H([])),h=g(!0),i=g(""),v=g(""),d=g(!1);function x(){try{const e=localStorage.getItem("shooter_config");return e?JSON.parse(e):null}catch{return null}}async function T(){const e=x();if(!e){a(i,"No configuration found. Open Settings first."),a(h,!1);return}try{const t=await fetch("/api/sos",{headers:{Authorization:`Bearer ${e.apiKey}`}});if(!t.ok){a(i,`Failed to load (${t.status})`);return}const r=await t.json();a(m,r.superSessions??[],!0)}catch{a(i,"Network error — is the server running?")}finally{a(h,!1)}}async function z(){const e=x();if(!(!e||!s(v).trim())){a(d,!0);try{const t=await fetch("/api/sos",{body:JSON.stringify({label:s(v).trim()}),headers:{Authorization:`Bearer ${e.apiKey}`,"Content-Type":"application/json"},method:"POST"});if(t.ok){const r=await t.json();ne(`/sos/${r.id}`)}else{const r=await t.json().catch(()=>({}));a(i,r.error??`Failed to create (${t.status})`,!0)}}catch{a(i,"Network error — could not create super-session")}finally{a(d,!1)}}}Q(()=>{T()});var w=ve();re("1ggfn1w",e=>{V(()=>{W.title="Session Over Sessions - Shooter"})});var _=c(o(w),2),k=o(_);Y(k,{dataType:"text",placeholder:"New super-session label…",classes:"sos-create-input",get value(){return s(v)},set value(e){a(v,e,!0)}});var A=c(k,2);{let e=j(()=>s(d)?"Creating…":"Create"),t=j(()=>s(d)||!s(v).trim());Z(A,{get text(){return s(e)},get disabled(){return s(t)},onclick:z,classes:"btn-create"})}n(_);var N=c(_,2);{var E=e=>{ee(e,{get text(){return s(i)},classes:"banner-error"})};B(N,e=>{s(i)&&e(E)})}var F=c(N,2);{var J=e=>{var t=ie();p(e,t)},K=e=>{oe(e,{title:"No super-sessions yet",description:"Create one above, then add running agent sessions as members."})},L=e=>{var t=ce();se(t,21,()=>s(m),r=>r.id,(r,l)=>{var u=le(),b=o(u),y=o(b),R=o(y,!0);n(y);var q=c(y,2);te(q,{get text(){return s(l).status},classes:"pill-status-unknown"}),n(b);var C=c(b,2),S=o(C),D=o(S);n(S);var O=c(S,2),M=o(O);n(O),n(C),n(u),X(()=>{ae(u,"href",`/sos/${s(l).id}`),$(R,s(l).label),$(D,`${s(l).members.length??""} member${s(l).members.length===1?"":"s"}`),$(M,`${s(l).routingRules.length??""} rule${s(l).routingRules.length===1?"":"s"}`)}),p(r,u)}),n(t),p(e,t)};B(F,e=>{s(h)?e(J):s(m).length===0?e(K,1):e(L,-1)})}n(w),p(I,w),U()}export{he as component};
1
+ import{i as B,a as p,f,s as $}from"../chunks/BPDiEZo0.js";import{p as G,s as g,q as H,v as Q,w as U,D as V,b as a,g as s,c as o,x as j,d as c,$ as W,r as n,t as X}from"../chunks/DWmC0QM7.js";import{I as Y,B as Z,b as ee,e as se,P as te,d as ae}from"../chunks/B1bOvemT.js";import{h as re}from"../chunks/2rBV5OkJ.js";import{g as ne}from"../chunks/BfbPKMXz.js";import{E as oe}from"../chunks/DomZZqvG.js";var ie=f('<p class="muted svelte-1ggfn1w">Loading…</p>'),le=f('<a class="ss-card svelte-1ggfn1w"><div class="ss-card-head svelte-1ggfn1w"><span class="ss-label svelte-1ggfn1w"> </span> <!></div> <div class="ss-meta svelte-1ggfn1w"><span> </span> <span> </span></div></a>'),ce=f('<div class="ss-grid svelte-1ggfn1w"></div>'),ve=f('<main class="main sos-list svelte-1ggfn1w"><div class="page-head svelte-1ggfn1w"><div><h1 class="svelte-1ggfn1w">Session Over Sessions</h1> <p class="subtitle svelte-1ggfn1w">Coordinate multiple running agents as one super-session.</p></div></div> <div class="create-row svelte-1ggfn1w"><!> <!></div> <!> <!></main>');function he(I,P){G(P,!0);let m=g(H([])),h=g(!0),i=g(""),v=g(""),d=g(!1);function x(){try{const e=localStorage.getItem("shooter_config");return e?JSON.parse(e):null}catch{return null}}async function T(){const e=x();if(!e){a(i,"No configuration found. Open Settings first."),a(h,!1);return}try{const t=await fetch("/api/sos",{headers:{Authorization:`Bearer ${e.apiKey}`}});if(!t.ok){a(i,`Failed to load (${t.status})`);return}const r=await t.json();a(m,r.superSessions??[],!0)}catch{a(i,"Network error — is the server running?")}finally{a(h,!1)}}async function z(){const e=x();if(!(!e||!s(v).trim())){a(d,!0);try{const t=await fetch("/api/sos",{body:JSON.stringify({label:s(v).trim()}),headers:{Authorization:`Bearer ${e.apiKey}`,"Content-Type":"application/json"},method:"POST"});if(t.ok){const r=await t.json();ne(`/sos/${r.id}`)}else{const r=await t.json().catch(()=>({}));a(i,r.error??`Failed to create (${t.status})`,!0)}}catch{a(i,"Network error — could not create super-session")}finally{a(d,!1)}}}Q(()=>{T()});var w=ve();re("1ggfn1w",e=>{V(()=>{W.title="Session Over Sessions - Shooter"})});var _=c(o(w),2),k=o(_);Y(k,{dataType:"text",placeholder:"New super-session label…",classes:"sos-create-input",get value(){return s(v)},set value(e){a(v,e,!0)}});var A=c(k,2);{let e=j(()=>s(d)?"Creating…":"Create"),t=j(()=>s(d)||!s(v).trim());Z(A,{get text(){return s(e)},get disabled(){return s(t)},onclick:z,classes:"btn-create"})}n(_);var N=c(_,2);{var E=e=>{ee(e,{get text(){return s(i)},classes:"banner-error"})};B(N,e=>{s(i)&&e(E)})}var F=c(N,2);{var J=e=>{var t=ie();p(e,t)},K=e=>{oe(e,{title:"No super-sessions yet",description:"Create one above, then add running agent sessions as members."})},L=e=>{var t=ce();se(t,21,()=>s(m),r=>r.id,(r,l)=>{var u=le(),b=o(u),y=o(b),R=o(y,!0);n(y);var q=c(y,2);te(q,{get text(){return s(l).status},classes:"pill-status-unknown"}),n(b);var C=c(b,2),S=o(C),D=o(S);n(S);var O=c(S,2),M=o(O);n(O),n(C),n(u),X(()=>{ae(u,"href",`/sos/${s(l).id}`),$(R,s(l).label),$(D,`${s(l).members.length??""} member${s(l).members.length===1?"":"s"}`),$(M,`${s(l).routingRules.length??""} rule${s(l).routingRules.length===1?"":"s"}`)}),p(r,u)}),n(t),p(e,t)};B(F,e=>{s(h)?e(J):s(m).length===0?e(K,1):e(L,-1)})}n(w),p(I,w),U()}export{he as component};
@@ -1,2 +1,2 @@
1
- import{i as Y,a as I,c as tt,e as rt,f as S,s as _,g as st}from"../chunks/BPDiEZo0.js";import{p as at,s as m,q as Te,E as ot,g as e,v as nt,y as lt,w as it,z as ct,$ as dt,d as l,c as i,r as c,b as s,x as v,A as ut,t as q}from"../chunks/DWmC0QM7.js";import{b as vt,P as ie,e as Z,B as F,s as pt,S as D,I as ee,d as mt}from"../chunks/B1bOvemT.js";import{h as gt}from"../chunks/2rBV5OkJ.js";import{p as ft}from"../chunks/BmfLecb1.js";var ht=S('<div class="pending svelte-4802gc"><span class="pending-text svelte-4802gc"> <em> </em></span> <div class="pending-actions svelte-4802gc"><!> <!></div></div>'),bt=S('<p class="muted svelte-4802gc">No messages yet. Add members below.</p>'),yt=S('<span class="relay-badge svelte-4802gc">relayed</span>'),_t=S('<div><div class="entry-tag svelte-4802gc"><!> <span class="member-id svelte-4802gc"> </span> <!></div> <pre class="entry-body svelte-4802gc"> </pre></div>'),wt=S('<div class="member-row svelte-4802gc"><!> <span class="member-key svelte-4802gc"> </span> <span class="member-flag svelte-4802gc"> </span> <!></div>'),$t=S('<div class="rule-row svelte-4802gc"><span> </span> <span class="rule-action svelte-4802gc"> </span> <span class="rule-pattern svelte-4802gc"> </span> <!></div>'),kt=S('<div class="head svelte-4802gc"><h1 class="svelte-4802gc"> </h1> <!></div> <!> <section class="panel svelte-4802gc"><h2 class="svelte-4802gc">Merged transcript</h2> <div class="transcript svelte-4802gc"><!> <!></div></section> <section class="panel svelte-4802gc"><h2 class="svelte-4802gc">Forward to a member</h2> <div class="row svelte-4802gc"><!> <!> <!></div></section> <section class="panel svelte-4802gc"><h2 class="svelte-4802gc">Members</h2> <!> <div class="row add-row svelte-4802gc"><!> <!> <!> <!></div></section> <section class="panel svelte-4802gc"><h2 class="svelte-4802gc">Routing rules</h2> <!> <div class="row add-row svelte-4802gc"><!> <!> <!> <!> <!></div></section>',1),xt=S('<main class="main sos-view svelte-4802gc"><a class="back svelte-4802gc" href="/sos">← All super-sessions</a> <!> <!></main>');function At(Ne,Ae){at(Ae,!0);const je=()=>tt(ft,"$page",Oe),[Oe,Pe]=rt(),Re=["claude-code","codex","opencode","gemini","qwen","cursor","copilot","amp"],M=je().params.id??"";let d=m(null),T=m(Te([])),W=m(Te([])),p=m(""),N=null,z=!1,w=m(""),C=m(""),E=m(""),te=m("claude-code"),U=m(""),J=m(""),K=m(""),re=m("relay"),G=m("");const $=v(()=>e(d)?.members??[]),Q=v(()=>e(d)?.routingRules??[]);let B=m(void 0);ot(()=>{e(B)&&e(T).length>0&&(e(B).scrollTop=e(B).scrollHeight)});function Fe(){try{const t=localStorage.getItem("shooter_config");return t?JSON.parse(t):null}catch{return null}}function Ce(){return Fe()?.apiKey??""}function A(t=!1){const o={Authorization:`Bearer ${Ce()}`};return t&&(o["Content-Type"]="application/json"),o}function j(t){const o=e($).find(u=>u.id===t);return o?`${V(o.provider)} · ${o.id.slice(0,6)}`:t.slice(0,6)}function V(t){return t==="claude-code"?"Claude":t.charAt(0).toUpperCase()+t.slice(1)}function Ee(t){return t.message.parts.map(o=>o.type==="text"||o.type==="thinking"?o.content:o.type==="tool_use"?`🔧 ${o.toolName}`:`↳ ${o.output.slice(0,200)}`).join(`
1
+ import{i as Y,a as I,c as tt,e as rt,f as S,s as _,g as st}from"../chunks/BPDiEZo0.js";import{p as at,s as m,q as Te,E as ot,g as e,v as nt,y as lt,w as it,z as ct,$ as dt,d as l,c as i,r as c,b as s,x as v,A as ut,t as q}from"../chunks/DWmC0QM7.js";import{b as vt,P as ie,e as Z,B as F,s as pt,S as D,I as ee,d as mt}from"../chunks/B1bOvemT.js";import{h as gt}from"../chunks/2rBV5OkJ.js";import{p as ft}from"../chunks/CZg4kn4E.js";var ht=S('<div class="pending svelte-4802gc"><span class="pending-text svelte-4802gc"> <em> </em></span> <div class="pending-actions svelte-4802gc"><!> <!></div></div>'),bt=S('<p class="muted svelte-4802gc">No messages yet. Add members below.</p>'),yt=S('<span class="relay-badge svelte-4802gc">relayed</span>'),_t=S('<div><div class="entry-tag svelte-4802gc"><!> <span class="member-id svelte-4802gc"> </span> <!></div> <pre class="entry-body svelte-4802gc"> </pre></div>'),wt=S('<div class="member-row svelte-4802gc"><!> <span class="member-key svelte-4802gc"> </span> <span class="member-flag svelte-4802gc"> </span> <!></div>'),$t=S('<div class="rule-row svelte-4802gc"><span> </span> <span class="rule-action svelte-4802gc"> </span> <span class="rule-pattern svelte-4802gc"> </span> <!></div>'),kt=S('<div class="head svelte-4802gc"><h1 class="svelte-4802gc"> </h1> <!></div> <!> <section class="panel svelte-4802gc"><h2 class="svelte-4802gc">Merged transcript</h2> <div class="transcript svelte-4802gc"><!> <!></div></section> <section class="panel svelte-4802gc"><h2 class="svelte-4802gc">Forward to a member</h2> <div class="row svelte-4802gc"><!> <!> <!></div></section> <section class="panel svelte-4802gc"><h2 class="svelte-4802gc">Members</h2> <!> <div class="row add-row svelte-4802gc"><!> <!> <!> <!></div></section> <section class="panel svelte-4802gc"><h2 class="svelte-4802gc">Routing rules</h2> <!> <div class="row add-row svelte-4802gc"><!> <!> <!> <!> <!></div></section>',1),xt=S('<main class="main sos-view svelte-4802gc"><a class="back svelte-4802gc" href="/sos">← All super-sessions</a> <!> <!></main>');function At(Ne,Ae){at(Ae,!0);const je=()=>tt(ft,"$page",Oe),[Oe,Pe]=rt(),Re=["claude-code","codex","opencode","gemini","qwen","cursor","copilot","amp"],M=je().params.id??"";let d=m(null),T=m(Te([])),W=m(Te([])),p=m(""),N=null,z=!1,w=m(""),C=m(""),E=m(""),te=m("claude-code"),U=m(""),J=m(""),K=m(""),re=m("relay"),G=m("");const $=v(()=>e(d)?.members??[]),Q=v(()=>e(d)?.routingRules??[]);let B=m(void 0);ot(()=>{e(B)&&e(T).length>0&&(e(B).scrollTop=e(B).scrollHeight)});function Fe(){try{const t=localStorage.getItem("shooter_config");return t?JSON.parse(t):null}catch{return null}}function Ce(){return Fe()?.apiKey??""}function A(t=!1){const o={Authorization:`Bearer ${Ce()}`};return t&&(o["Content-Type"]="application/json"),o}function j(t){const o=e($).find(u=>u.id===t);return o?`${V(o.provider)} · ${o.id.slice(0,6)}`:t.slice(0,6)}function V(t){return t==="claude-code"?"Claude":t.charAt(0).toUpperCase()+t.slice(1)}function Ee(t){return t.message.parts.map(o=>o.type==="text"||o.type==="thinking"?o.content:o.type==="tool_use"?`🔧 ${o.toolName}`:`↳ ${o.output.slice(0,200)}`).join(`
2
2
  `).trim()}async function Je(){try{const t=await fetch(`/api/sos/${M}`,{headers:A()});return t.ok?(s(d,await t.json(),!0),s(T,e(d).transcript??[],!0),!e(w)&&e($)[0]&&s(w,e($)[0].id,!0),!0):(s(p,t.status===404?"Super-session not found":`Failed to load (${t.status})`,!0),!1)}catch{return s(p,"Network error"),!1}}async function Ke(){try{const t=await fetch("/api/ws-ticket",{headers:A(),method:"POST"});if(!t.ok){s(p,"Failed to open the live connection (ticket request failed)");return}const{ticket:o}=await t.json();if(z)return;const u=window.location.protocol==="https:"?"wss:":"ws:";N=new WebSocket(`${u}//${window.location.host}/ws/super-session/${M}?ticket=${o}`),N.onmessage=O=>{let X;try{X=JSON.parse(O.data)}catch{return}We(X)},N.onerror=()=>{s(p,"Live connection error")}}catch{s(p,"Failed to open the live connection (network error)")}}function We(t){switch(t.type){case"sos-error":s(p,t.message,!0);break;case"sos-history":s(T,t.entries,!0);break;case"sos-member-added":e(d)&&s(d,{...e(d),members:[...e(d).members,t.member]},!0);break;case"sos-member-removed":e(d)&&s(d,{...e(d),members:e(d).members.filter(o=>o.id!==t.memberId)},!0);break;case"sos-message":s(T,[...e(T),t.entry],!0);break;case"sos-relay-pending":s(W,[...e(W),{expiresAt:t.expiresAt,fromMemberId:t.fromMemberId,preview:t.preview,relayId:t.relayId,toMemberId:t.toMemberId}],!0);break;case"sos-relay-resolved":s(W,e(W).filter(o=>o.relayId!==t.relayId),!0);break}}function ce(t){N?.readyState===WebSocket.OPEN&&N.send(JSON.stringify(t))}async function Be(){if(!(!e(w)||!e(C).trim()))try{const t=await fetch(`/api/sos/${M}/inject`,{body:JSON.stringify({text:e(C),toMemberId:e(w)}),headers:A(!0),method:"POST"});if(!t.ok){const o=await t.json().catch(()=>({}));s(p,o.error??"Failed to forward message",!0);return}s(C,"")}catch{s(p,"Network error — could not forward message")}}async function He(){if(e(E).trim())try{const t=await fetch(`/api/sos/${M}/members`,{body:JSON.stringify({provider:e(te),sessionKey:e(E).trim(),terminalId:e(U).trim()||void 0}),headers:A(!0),method:"POST"});if(t.ok)s(E,""),s(U,"");else{const o=await t.json().catch(()=>({}));s(p,o.error??"Failed to add member",!0)}}catch{s(p,"Network error — could not add member")}}async function Le(t){try{const o=await fetch(`/api/sos/${M}/members/${t}`,{headers:A(),method:"DELETE"});if(!o.ok){const u=await o.json().catch(()=>({}));s(p,u.error??"Failed to remove member",!0)}}catch{s(p,"Network error — could not remove member")}}async function qe(){if(!e(J)||!e(K))return;const t=[...e(Q),{action:e(re),fromMemberId:e(J),id:"",matchPattern:e(G),priority:e(Q).length+1,toMemberId:e(K)}];try{const o=await fetch(`/api/sos/${M}/rules`,{body:JSON.stringify({routingRules:t}),headers:A(!0),method:"PATCH"});if(o.ok&&e(d)){const u=await o.json();s(d,{...e(d),routingRules:u.routingRules},!0),s(G,"")}else{const u=await o.json().catch(()=>({}));s(p,u.error??"Failed to add rule",!0)}}catch{s(p,"Network error — could not add rule")}}async function De(t){const o=e(Q).filter(u=>u.id!==t);try{const u=await fetch(`/api/sos/${M}/rules`,{body:JSON.stringify({routingRules:o}),headers:A(!0),method:"PATCH"});if(u.ok&&e(d))s(d,{...e(d),routingRules:o},!0);else if(!u.ok){const O=await u.json().catch(()=>({}));s(p,O.error??"Failed to delete rule",!0)}}catch{s(p,"Network error — could not delete rule")}}nt(()=>(Je().then(t=>{t&&!z&&Ke()}),()=>{z=!0,N?.close()})),lt(()=>{z=!0,N?.close()});var se=xt();gt("4802gc",t=>{ct(()=>{dt.title=`${e(d)?.label??"Super-session"??""} - Shooter`})});var de=l(i(se),2);{var ze=t=>{vt(t,{get text(){return e(p)},classes:"banner-error"})};Y(de,t=>{e(p)&&t(ze)})}var Ue=l(de,2);{var Ge=t=>{var o=kt(),u=ut(o),O=i(u),X=i(O,!0);c(O);var Qe=l(O,2);{let r=v(()=>`${e($).length} members`);ie(Qe,{get text(){return e(r)},classes:"pill-status-unknown"})}c(u);var ue=l(u,2);Z(ue,17,()=>e(W),r=>r.relayId,(r,a)=>{var n=ht(),g=i(n),f=i(g),h=l(f),b=i(h,!0);c(h),c(g);var y=l(g,2),k=i(y);F(k,{text:"Approve",classes:"btn-approve",onclick:()=>{ce({relayId:e(a).relayId,type:"relay-approve"})}});var P=l(k,2);F(P,{text:"Deny",classes:"btn-deny",onclick:()=>{ce({relayId:e(a).relayId,type:"relay-deny"})}}),c(y),c(n),q((x,H)=>{_(f,`Relay ${x??""} → ${H??""}: `),_(b,e(a).preview)},[()=>j(e(a).fromMemberId),()=>j(e(a).toMemberId)]),I(r,n)});var ae=l(ue,2),oe=l(i(ae),2),ve=i(oe);{var Ve=r=>{var a=bt();I(r,a)};Y(ve,r=>{e(T).length===0&&r(Ve)})}var Xe=l(ve,2);Z(Xe,19,()=>e(T),(r,a)=>`${r.message.id}-${a}`,(r,a)=>{var n=_t();let g;var f=i(n),h=i(f);{let R=v(()=>V(e(a).provider)),L=v(()=>`pill-source-${e(a).provider}`);ie(h,{get text(){return e(R)},get classes(){return e(L)}})}var b=l(h,2),y=i(b,!0);c(b);var k=l(b,2);{var P=R=>{var L=yt();I(R,L)};Y(k,R=>{e(a).relayed&&R(P)})}c(f);var x=l(f,2),H=i(x,!0);c(x),c(n),q((R,L)=>{g=pt(n,1,"entry svelte-4802gc",null,g,{relayed:e(a).relayed}),_(y,R),_(H,L)},[()=>e(a).memberId.slice(0,6),()=>Ee(e(a))]),I(r,n)}),c(oe),st(oe,r=>s(B,r),()=>e(B)),c(ae);var ne=l(ae,2),pe=l(i(ne),2),me=i(pe);{let r=v(()=>e($).map(n=>({id:n.id,label:j(n.id)}))),a=v(()=>e(w)?[e(w)]:[]);D(me,{get items(){return e(r)},get value(){return e(a)},placeholder:"Member",onchange:n=>{s(w,n[0]??"",!0)},classes:"sos-select"})}var ge=l(me,2);ee(ge,{dataType:"text",placeholder:"Message to inject…",classes:"sos-input",get value(){return e(C)},set value(r){s(C,r,!0)}});var Ye=l(ge,2);{let r=v(()=>!e(w)||!e(C).trim());F(Ye,{text:"Send",get disabled(){return e(r)},onclick:Be,classes:"btn-send"})}c(pe),c(ne);var le=l(ne,2),fe=l(i(le),2);Z(fe,17,()=>e($),r=>r.id,(r,a)=>{var n=wt(),g=i(n);{let P=v(()=>V(e(a).provider)),x=v(()=>`pill-source-${e(a).provider}`);ie(g,{get text(){return e(P)},get classes(){return e(x)}})}var f=l(g,2),h=i(f,!0);c(f);var b=l(f,2),y=i(b,!0);c(b);var k=l(b,2);F(k,{text:"Remove",classes:"btn-remove",onclick:()=>{Le(e(a).id)}}),c(n),q(()=>{mt(f,"title",e(a).sessionKey),_(h,e(a).sessionKey),_(y,e(a).terminalId?"⌁ terminal":"observed")}),I(r,n)});var he=l(fe,2),be=i(he);ee(be,{dataType:"text",placeholder:"sessionKey (file path or session id)",classes:"sos-input",get value(){return e(E)},set value(r){s(E,r,!0)}});var ye=l(be,2);{let r=v(()=>Re.map(n=>({id:n,label:V(n)}))),a=v(()=>[e(te)]);D(ye,{get items(){return e(r)},get value(){return e(a)},onchange:n=>{s(te,n[0]??"claude-code",!0)},classes:"sos-select"})}var _e=l(ye,2);ee(_e,{dataType:"text",placeholder:"terminalId (optional)",classes:"sos-input",get value(){return e(U)},set value(r){s(U,r,!0)}});var Ze=l(_e,2);{let r=v(()=>!e(E).trim());F(Ze,{text:"Add",get disabled(){return e(r)},onclick:He,classes:"btn-send"})}c(he),c(le);var we=l(le,2),$e=l(i(we),2);Z($e,17,()=>e(Q),r=>r.id,(r,a)=>{var n=$t(),g=i(n),f=i(g);c(g);var h=l(g,2),b=i(h,!0);c(h);var y=l(h,2),k=i(y,!0);c(y);var P=l(y,2);F(P,{text:"✕",classes:"btn-remove",onclick:()=>{De(e(a).id)}}),c(n),q((x,H)=>{_(f,`${x??""} → ${H??""}`),_(b,e(a).action),_(k,e(a).matchPattern||"(any)")},[()=>j(e(a).fromMemberId),()=>j(e(a).toMemberId)]),I(r,n)});var ke=l($e,2),xe=i(ke);{let r=v(()=>e($).map(n=>({id:n.id,label:j(n.id)}))),a=v(()=>e(J)?[e(J)]:[]);D(xe,{get items(){return e(r)},get value(){return e(a)},placeholder:"From",onchange:n=>{s(J,n[0]??"",!0)},classes:"sos-select"})}var Ie=l(xe,2);{let r=v(()=>e($).map(n=>({id:n.id,label:j(n.id)}))),a=v(()=>e(K)?[e(K)]:[]);D(Ie,{get items(){return e(r)},get value(){return e(a)},placeholder:"To",onchange:n=>{s(K,n[0]??"",!0)},classes:"sos-select"})}var Se=l(Ie,2);{let r=v(()=>[e(re)]);D(Se,{items:[{id:"relay",label:"relay"},{id:"block",label:"block"},{id:"escalate",label:"escalate"}],get value(){return e(r)},onchange:a=>{s(re,a[0]??"relay",!0)},classes:"sos-select"})}var Me=l(Se,2);ee(Me,{dataType:"text",placeholder:"match (substring, empty=any)",classes:"sos-input",get value(){return e(G)},set value(r){s(G,r,!0)}});var et=l(Me,2);{let r=v(()=>!e(J)||!e(K));F(et,{text:"Add rule",get disabled(){return e(r)},onclick:qe,classes:"btn-send"})}c(ke),c(we),q(()=>_(X,e(d).label)),I(t,o)};Y(Ue,t=>{e(d)&&t(Ge)})}c(se),I(Ne,se),it(),Pe()}export{At as component};
@@ -1 +1 @@
1
- {"version":"1781366107899"}
1
+ {"version":"1781369023861"}
Binary file
Binary file
@@ -114,6 +114,12 @@ try {
114
114
  /* best effort */
115
115
  }
116
116
  ptyEnv.SHOOTER_CLIPBOARD_DIR = clipboardDir;
117
+ // Tag this PTY with its Shooter terminal id so in-agent lifecycle hooks
118
+ // (notifier.cjs) can attribute their events to THIS managed terminal. The
119
+ // autopilot engine + phone driver key on terminalId; a plain shell that a
120
+ // user starts outside Shooter never sees this var, so its behaviour is
121
+ // unchanged.
122
+ ptyEnv.SHOOTER_TERMINAL_ID = id;
117
123
 
118
124
  // Prepend clipboard shim scripts to PATH so tools find our xclip/wl-paste
119
125
  const shimsDir = path.resolve(__dirname, '..', 'scripts', 'clipboard-shims');
@@ -17,9 +17,9 @@ const index = 0;
17
17
  let component_cache;
18
18
  const component = async () => component_cache ??= (await import('./_layout.svelte-DfgNGGiM.js')).default;
19
19
  const server_id = "src/routes/+layout.server.ts";
20
- const imports = ["_app/immutable/nodes/0.oaPwxh1O.js","_app/immutable/chunks/BPDiEZo0.js","_app/immutable/chunks/DWmC0QM7.js","_app/immutable/chunks/B1bOvemT.js","_app/immutable/chunks/DOEXXmsh.js","_app/immutable/chunks/BmfLecb1.js","_app/immutable/chunks/Bn-6X1BO.js","_app/immutable/chunks/CG453M9q.js","_app/immutable/chunks/CSjf4fBs.js"];
20
+ const imports = ["_app/immutable/nodes/0.Qn7Ktiht.js","_app/immutable/chunks/BPDiEZo0.js","_app/immutable/chunks/DWmC0QM7.js","_app/immutable/chunks/B1bOvemT.js","_app/immutable/chunks/BfbPKMXz.js","_app/immutable/chunks/CZg4kn4E.js","_app/immutable/chunks/Bn-6X1BO.js","_app/immutable/chunks/CG453M9q.js","_app/immutable/chunks/CSjf4fBs.js"];
21
21
  const stylesheets = ["_app/immutable/assets/ColorPicker.CV4IKef4.css","_app/immutable/assets/0.BwNtE8TX.css"];
22
22
  const fonts = [];
23
23
 
24
24
  export { component, fonts, imports, index, _layout_server_ts as server, server_id, stylesheets };
25
- //# sourceMappingURL=0-vrTNAfZB.js.map
25
+ //# sourceMappingURL=0-CVGsyVKN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"0-vrTNAfZB.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/_layout.server.ts.js","../../../.svelte-kit/adapter-node/nodes/0.js"],"sourcesContent":["import { b as private_env } from \"../../chunks/shared-server.js\";\nimport { g as getProviderAvailability } from \"../../chunks/providers.js\";\nconst load = () => ({\n aiProviders: getProviderAvailability(private_env),\n litellmBaseUrl: private_env.LITELLM_BASE_URL ?? \"\",\n litellmModel: private_env.LITELLM_MODEL ?? \"open-large\",\n neurolinkProvider: private_env.NEUROLINK_PROVIDER ?? \"\"\n});\nexport {\n load\n};\n","import * as server from '../entries/pages/_layout.server.ts.js';\n\nexport const index = 0;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/_layout.svelte.js')).default;\nexport { server };\nexport const server_id = \"src/routes/+layout.server.ts\";\nexport const imports = [\"_app/immutable/nodes/0.oaPwxh1O.js\",\"_app/immutable/chunks/BPDiEZo0.js\",\"_app/immutable/chunks/DWmC0QM7.js\",\"_app/immutable/chunks/B1bOvemT.js\",\"_app/immutable/chunks/DOEXXmsh.js\",\"_app/immutable/chunks/BmfLecb1.js\",\"_app/immutable/chunks/Bn-6X1BO.js\",\"_app/immutable/chunks/CG453M9q.js\",\"_app/immutable/chunks/CSjf4fBs.js\"];\nexport const stylesheets = [\"_app/immutable/assets/ColorPicker.CV4IKef4.css\",\"_app/immutable/assets/0.BwNtE8TX.css\"];\nexport const fonts = [];\n"],"names":[],"mappings":";;;AAEA,MAAM,IAAI,GAAG,OAAO;AACpB,EAAE,WAAW,EAAE,uBAAuB,CAAC,WAAW,CAAC;AACnD,EAAE,cAAc,EAAE,WAAW,CAAC,gBAAgB,IAAI,EAAE;AACpD,EAAE,YAAY,EAAE,WAAW,CAAC,aAAa,IAAI,YAAY;AACzD,EAAE,iBAAiB,EAAE,WAAW,CAAC,kBAAkB,IAAI;AACvD,CAAC,CAAC;;;;;;;ACLU,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,8BAAoC,CAAC,EAAE;AAElG,MAAC,SAAS,GAAG;AACb,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AAChV,MAAC,WAAW,GAAG,CAAC,gDAAgD,CAAC,sCAAsC;AACvG,MAAC,KAAK,GAAG;;;;"}
1
+ {"version":3,"file":"0-CVGsyVKN.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/_layout.server.ts.js","../../../.svelte-kit/adapter-node/nodes/0.js"],"sourcesContent":["import { b as private_env } from \"../../chunks/shared-server.js\";\nimport { g as getProviderAvailability } from \"../../chunks/providers.js\";\nconst load = () => ({\n aiProviders: getProviderAvailability(private_env),\n litellmBaseUrl: private_env.LITELLM_BASE_URL ?? \"\",\n litellmModel: private_env.LITELLM_MODEL ?? \"open-large\",\n neurolinkProvider: private_env.NEUROLINK_PROVIDER ?? \"\"\n});\nexport {\n load\n};\n","import * as server from '../entries/pages/_layout.server.ts.js';\n\nexport const index = 0;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/_layout.svelte.js')).default;\nexport { server };\nexport const server_id = \"src/routes/+layout.server.ts\";\nexport const imports = [\"_app/immutable/nodes/0.Qn7Ktiht.js\",\"_app/immutable/chunks/BPDiEZo0.js\",\"_app/immutable/chunks/DWmC0QM7.js\",\"_app/immutable/chunks/B1bOvemT.js\",\"_app/immutable/chunks/BfbPKMXz.js\",\"_app/immutable/chunks/CZg4kn4E.js\",\"_app/immutable/chunks/Bn-6X1BO.js\",\"_app/immutable/chunks/CG453M9q.js\",\"_app/immutable/chunks/CSjf4fBs.js\"];\nexport const stylesheets = [\"_app/immutable/assets/ColorPicker.CV4IKef4.css\",\"_app/immutable/assets/0.BwNtE8TX.css\"];\nexport const fonts = [];\n"],"names":[],"mappings":";;;AAEA,MAAM,IAAI,GAAG,OAAO;AACpB,EAAE,WAAW,EAAE,uBAAuB,CAAC,WAAW,CAAC;AACnD,EAAE,cAAc,EAAE,WAAW,CAAC,gBAAgB,IAAI,EAAE;AACpD,EAAE,YAAY,EAAE,WAAW,CAAC,aAAa,IAAI,YAAY;AACzD,EAAE,iBAAiB,EAAE,WAAW,CAAC,kBAAkB,IAAI;AACvD,CAAC,CAAC;;;;;;;ACLU,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,8BAAoC,CAAC,EAAE;AAElG,MAAC,SAAS,GAAG;AACb,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AAChV,MAAC,WAAW,GAAG,CAAC,gDAAgD,CAAC,sCAAsC;AACvG,MAAC,KAAK,GAAG;;;;"}
@@ -1,9 +1,9 @@
1
1
  const index = 1;
2
2
  let component_cache;
3
3
  const component = async () => component_cache ??= (await import('./_error.svelte-CZnkxeLr.js')).default;
4
- const imports = ["_app/immutable/nodes/1.DMPyoM-M.js","_app/immutable/chunks/BPDiEZo0.js","_app/immutable/chunks/DWmC0QM7.js","_app/immutable/chunks/2rBV5OkJ.js","_app/immutable/chunks/DOEXXmsh.js","_app/immutable/chunks/BmfLecb1.js","_app/immutable/chunks/B1bOvemT.js"];
4
+ const imports = ["_app/immutable/nodes/1.BxWOfNlo.js","_app/immutable/chunks/BPDiEZo0.js","_app/immutable/chunks/DWmC0QM7.js","_app/immutable/chunks/2rBV5OkJ.js","_app/immutable/chunks/BfbPKMXz.js","_app/immutable/chunks/CZg4kn4E.js","_app/immutable/chunks/B1bOvemT.js"];
5
5
  const stylesheets = ["_app/immutable/assets/ColorPicker.CV4IKef4.css","_app/immutable/assets/1.B_AnTlN1.css"];
6
6
  const fonts = [];
7
7
 
8
8
  export { component, fonts, imports, index, stylesheets };
9
- //# sourceMappingURL=1-nbr-bOoF.js.map
9
+ //# sourceMappingURL=1-BAlAsKdp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"1-nbr-bOoF.js","sources":["../../../.svelte-kit/adapter-node/nodes/1.js"],"sourcesContent":["\n\nexport const index = 1;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/_error.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/1.DMPyoM-M.js\",\"_app/immutable/chunks/BPDiEZo0.js\",\"_app/immutable/chunks/DWmC0QM7.js\",\"_app/immutable/chunks/2rBV5OkJ.js\",\"_app/immutable/chunks/DOEXXmsh.js\",\"_app/immutable/chunks/BmfLecb1.js\",\"_app/immutable/chunks/B1bOvemT.js\"];\nexport const stylesheets = [\"_app/immutable/assets/ColorPicker.CV4IKef4.css\",\"_app/immutable/assets/1.B_AnTlN1.css\"];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,6BAAmC,CAAC,EAAE;AACjG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AACxQ,MAAC,WAAW,GAAG,CAAC,gDAAgD,CAAC,sCAAsC;AACvG,MAAC,KAAK,GAAG;;;;"}
1
+ {"version":3,"file":"1-BAlAsKdp.js","sources":["../../../.svelte-kit/adapter-node/nodes/1.js"],"sourcesContent":["\n\nexport const index = 1;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/_error.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/1.BxWOfNlo.js\",\"_app/immutable/chunks/BPDiEZo0.js\",\"_app/immutable/chunks/DWmC0QM7.js\",\"_app/immutable/chunks/2rBV5OkJ.js\",\"_app/immutable/chunks/BfbPKMXz.js\",\"_app/immutable/chunks/CZg4kn4E.js\",\"_app/immutable/chunks/B1bOvemT.js\"];\nexport const stylesheets = [\"_app/immutable/assets/ColorPicker.CV4IKef4.css\",\"_app/immutable/assets/1.B_AnTlN1.css\"];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,6BAAmC,CAAC,EAAE;AACjG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AACxQ,MAAC,WAAW,GAAG,CAAC,gDAAgD,CAAC,sCAAsC;AACvG,MAAC,KAAK,GAAG;;;;"}