@juspay/shooter 1.22.0 → 1.23.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 (136) hide show
  1. package/build/client/_app/immutable/chunks/Bj5wFimK.js +3 -0
  2. package/build/client/_app/immutable/chunks/Bj5wFimK.js.br +0 -0
  3. package/build/client/_app/immutable/chunks/Bj5wFimK.js.gz +0 -0
  4. package/build/client/_app/immutable/chunks/{DhK7PwI_.js → BjYr_-Ss.js} +1 -1
  5. package/build/client/_app/immutable/chunks/BjYr_-Ss.js.br +0 -0
  6. package/build/client/_app/immutable/chunks/{DhK7PwI_.js.gz → BjYr_-Ss.js.gz} +0 -0
  7. package/build/client/_app/immutable/chunks/DULfdsh6.js +6 -0
  8. package/build/client/_app/immutable/chunks/DULfdsh6.js.br +0 -0
  9. package/build/client/_app/immutable/chunks/DULfdsh6.js.gz +0 -0
  10. package/build/client/_app/immutable/chunks/{CZg4kn4E.js → fcNfTA-E.js} +1 -1
  11. package/build/client/_app/immutable/chunks/fcNfTA-E.js.br +0 -0
  12. package/build/client/_app/immutable/chunks/fcNfTA-E.js.gz +0 -0
  13. package/build/client/_app/immutable/entry/{app.CTqz33nP.js → app.Bvoqymnp.js} +2 -2
  14. package/build/client/_app/immutable/entry/app.Bvoqymnp.js.br +0 -0
  15. package/build/client/_app/immutable/entry/app.Bvoqymnp.js.gz +0 -0
  16. package/build/client/_app/immutable/entry/start.BqXCPPZJ.js +1 -0
  17. package/build/client/_app/immutable/entry/start.BqXCPPZJ.js.br +2 -0
  18. package/build/client/_app/immutable/entry/start.BqXCPPZJ.js.gz +0 -0
  19. package/build/client/_app/immutable/nodes/{0.Qn7Ktiht.js → 0.Bv_TwEnq.js} +1 -1
  20. package/build/client/_app/immutable/nodes/0.Bv_TwEnq.js.br +0 -0
  21. package/build/client/_app/immutable/nodes/0.Bv_TwEnq.js.gz +0 -0
  22. package/build/client/_app/immutable/nodes/{1.BxWOfNlo.js → 1.7lffTIeb.js} +1 -1
  23. package/build/client/_app/immutable/nodes/1.7lffTIeb.js.br +0 -0
  24. package/build/client/_app/immutable/nodes/1.7lffTIeb.js.gz +0 -0
  25. package/build/client/_app/immutable/nodes/{10.BGPYD1s1.js → 10.ChiIrIDl.js} +1 -1
  26. package/build/client/_app/immutable/nodes/10.ChiIrIDl.js.br +0 -0
  27. package/build/client/_app/immutable/nodes/10.ChiIrIDl.js.gz +0 -0
  28. package/build/client/_app/immutable/nodes/{11.BxY1PUjC.js → 11.DO3vyXEv.js} +2 -2
  29. package/build/client/_app/immutable/nodes/11.DO3vyXEv.js.br +0 -0
  30. package/build/client/_app/immutable/nodes/{11.BxY1PUjC.js.gz → 11.DO3vyXEv.js.gz} +0 -0
  31. package/build/client/_app/immutable/nodes/{2.Bc2qALkX.js → 2.iMIqsE7n.js} +1 -1
  32. package/build/client/_app/immutable/nodes/2.iMIqsE7n.js.br +0 -0
  33. package/build/client/_app/immutable/nodes/2.iMIqsE7n.js.gz +0 -0
  34. package/build/client/_app/immutable/nodes/{3.N2-A8noI.js → 3.CArnSHOO.js} +1 -1
  35. package/build/client/_app/immutable/nodes/3.CArnSHOO.js.br +0 -0
  36. package/build/client/_app/immutable/nodes/3.CArnSHOO.js.gz +0 -0
  37. package/build/client/_app/immutable/nodes/{6.BWF9Qx6F.js → 6.B8l1RwkB.js} +1 -1
  38. package/build/client/_app/immutable/nodes/6.B8l1RwkB.js.br +0 -0
  39. package/build/client/_app/immutable/nodes/6.B8l1RwkB.js.gz +0 -0
  40. package/build/client/_app/immutable/nodes/{7.DHuDIdpz.js → 7.BPyfhDis.js} +1 -1
  41. package/build/client/_app/immutable/nodes/7.BPyfhDis.js.br +0 -0
  42. package/build/client/_app/immutable/nodes/7.BPyfhDis.js.gz +0 -0
  43. package/build/client/_app/immutable/nodes/{8.D0Ijt9Vv.js → 8.D_vszZ9E.js} +1 -1
  44. package/build/client/_app/immutable/nodes/8.D_vszZ9E.js.br +0 -0
  45. package/build/client/_app/immutable/nodes/8.D_vszZ9E.js.gz +0 -0
  46. package/build/client/_app/immutable/nodes/{9.2Piwo35J.js → 9.Drah-do-.js} +1 -1
  47. package/build/client/_app/immutable/nodes/9.Drah-do-.js.br +0 -0
  48. package/build/client/_app/immutable/nodes/9.Drah-do-.js.gz +0 -0
  49. package/build/client/_app/version.json +1 -1
  50. package/build/client/_app/version.json.br +0 -0
  51. package/build/client/_app/version.json.gz +0 -0
  52. package/build/server/chunks/{0-CVGsyVKN.js → 0-DAB_6Vm1.js} +2 -2
  53. package/build/server/chunks/{0-CVGsyVKN.js.map → 0-DAB_6Vm1.js.map} +1 -1
  54. package/build/server/chunks/{1-BAlAsKdp.js → 1-D-qMYaCx.js} +2 -2
  55. package/build/server/chunks/{1-BAlAsKdp.js.map → 1-D-qMYaCx.js.map} +1 -1
  56. package/build/server/chunks/{10-BUCX7Aqz.js → 10-CeFFGo-X.js} +2 -2
  57. package/build/server/chunks/{10-BUCX7Aqz.js.map → 10-CeFFGo-X.js.map} +1 -1
  58. package/build/server/chunks/{11-DHPvc2yA.js → 11-DRMu_ATU.js} +2 -2
  59. package/build/server/chunks/{11-DHPvc2yA.js.map → 11-DRMu_ATU.js.map} +1 -1
  60. package/build/server/chunks/{2-DLOMdCHW.js → 2-B7OLBMNH.js} +2 -2
  61. package/build/server/chunks/{2-DLOMdCHW.js.map → 2-B7OLBMNH.js.map} +1 -1
  62. package/build/server/chunks/{3-DCf69LYo.js → 3-B38ZarLw.js} +2 -2
  63. package/build/server/chunks/{3-DCf69LYo.js.map → 3-B38ZarLw.js.map} +1 -1
  64. package/build/server/chunks/{6-DUrC2Naz.js → 6-DP46cUej.js} +2 -2
  65. package/build/server/chunks/{6-DUrC2Naz.js.map → 6-DP46cUej.js.map} +1 -1
  66. package/build/server/chunks/{7-TXwjMHt2.js → 7-B29_3ar6.js} +2 -2
  67. package/build/server/chunks/{7-TXwjMHt2.js.map → 7-B29_3ar6.js.map} +1 -1
  68. package/build/server/chunks/{8-D2X_jBsT.js → 8-DCnSDVrX.js} +2 -2
  69. package/build/server/chunks/{8-D2X_jBsT.js.map → 8-DCnSDVrX.js.map} +1 -1
  70. package/build/server/chunks/{9-DK0hH5Xa.js → 9-BwqDc8wC.js} +2 -2
  71. package/build/server/chunks/{9-DK0hH5Xa.js.map → 9-BwqDc8wC.js.map} +1 -1
  72. package/build/server/chunks/{_server.ts-B54Pvhgc.js → _server.ts-Blx6TuRU.js} +3 -2
  73. package/build/server/chunks/_server.ts-Blx6TuRU.js.map +1 -0
  74. package/build/server/chunks/{_server.ts-C0PO_cAu.js → _server.ts-CYWXjihn.js} +3 -2
  75. package/build/server/chunks/{_server.ts-C0PO_cAu.js.map → _server.ts-CYWXjihn.js.map} +1 -1
  76. package/build/server/chunks/{_server.ts-DiBMY7Ho.js → _server.ts-D0___krA.js} +3 -2
  77. package/build/server/chunks/_server.ts-D0___krA.js.map +1 -0
  78. package/build/server/chunks/{_server.ts-CZb-BI5H.js → _server.ts-Da1kSClZ.js} +3 -2
  79. package/build/server/chunks/_server.ts-Da1kSClZ.js.map +1 -0
  80. package/build/server/chunks/{_server.ts-Bol54_Qo.js → _server.ts-l3cd4Cto.js} +3 -2
  81. package/build/server/chunks/_server.ts-l3cd4Cto.js.map +1 -0
  82. package/build/server/chunks/{pty-manager-CoWVT56F.js → pty-manager-DDjG7DlH.js} +272 -27
  83. package/build/server/chunks/pty-manager-DDjG7DlH.js.map +1 -0
  84. package/build/server/index.js +1 -1
  85. package/build/server/index.js.map +1 -1
  86. package/build/server/manifest.js +16 -16
  87. package/build/server/manifest.js.map +1 -1
  88. package/package.json +4 -2
  89. package/server.ts +2 -2
  90. package/src/lib/modules/client/terminal/xterm-wrapper.ts +52 -12
  91. package/src/lib/modules/server/terminal/pty-manager.ts +279 -35
  92. package/src/lib/modules/server/terminal/terminal-emulator.ts +102 -0
  93. package/src/lib/modules/server/ws/server.ts +18 -2
  94. package/src/lib/modules/server/ws/terminal-handler.ts +11 -6
  95. package/src/lib/types/generated/WsProtocol.ts +10 -1
  96. package/src/lib/types/server.ts +27 -1
  97. package/src/lib/types/terminal-client.ts +3 -0
  98. package/src/lib/types/ws.ts +3 -2
  99. package/build/client/_app/immutable/chunks/BfbPKMXz.js +0 -3
  100. package/build/client/_app/immutable/chunks/BfbPKMXz.js.br +0 -0
  101. package/build/client/_app/immutable/chunks/BfbPKMXz.js.gz +0 -0
  102. package/build/client/_app/immutable/chunks/CZg4kn4E.js.br +0 -0
  103. package/build/client/_app/immutable/chunks/CZg4kn4E.js.gz +0 -0
  104. package/build/client/_app/immutable/chunks/DhK7PwI_.js.br +0 -0
  105. package/build/client/_app/immutable/chunks/J5-Cr5oR.js +0 -6
  106. package/build/client/_app/immutable/chunks/J5-Cr5oR.js.br +0 -0
  107. package/build/client/_app/immutable/chunks/J5-Cr5oR.js.gz +0 -0
  108. package/build/client/_app/immutable/entry/app.CTqz33nP.js.br +0 -0
  109. package/build/client/_app/immutable/entry/app.CTqz33nP.js.gz +0 -0
  110. package/build/client/_app/immutable/entry/start.Dj-Kvgwo.js +0 -1
  111. package/build/client/_app/immutable/entry/start.Dj-Kvgwo.js.br +0 -2
  112. package/build/client/_app/immutable/entry/start.Dj-Kvgwo.js.gz +0 -0
  113. package/build/client/_app/immutable/nodes/0.Qn7Ktiht.js.br +0 -0
  114. package/build/client/_app/immutable/nodes/0.Qn7Ktiht.js.gz +0 -0
  115. package/build/client/_app/immutable/nodes/1.BxWOfNlo.js.br +0 -0
  116. package/build/client/_app/immutable/nodes/1.BxWOfNlo.js.gz +0 -0
  117. package/build/client/_app/immutable/nodes/10.BGPYD1s1.js.br +0 -0
  118. package/build/client/_app/immutable/nodes/10.BGPYD1s1.js.gz +0 -0
  119. package/build/client/_app/immutable/nodes/11.BxY1PUjC.js.br +0 -0
  120. package/build/client/_app/immutable/nodes/2.Bc2qALkX.js.br +0 -0
  121. package/build/client/_app/immutable/nodes/2.Bc2qALkX.js.gz +0 -0
  122. package/build/client/_app/immutable/nodes/3.N2-A8noI.js.br +0 -0
  123. package/build/client/_app/immutable/nodes/3.N2-A8noI.js.gz +0 -0
  124. package/build/client/_app/immutable/nodes/6.BWF9Qx6F.js.br +0 -0
  125. package/build/client/_app/immutable/nodes/6.BWF9Qx6F.js.gz +0 -0
  126. package/build/client/_app/immutable/nodes/7.DHuDIdpz.js.br +0 -0
  127. package/build/client/_app/immutable/nodes/7.DHuDIdpz.js.gz +0 -0
  128. package/build/client/_app/immutable/nodes/8.D0Ijt9Vv.js.br +0 -0
  129. package/build/client/_app/immutable/nodes/8.D0Ijt9Vv.js.gz +0 -0
  130. package/build/client/_app/immutable/nodes/9.2Piwo35J.js.br +0 -0
  131. package/build/client/_app/immutable/nodes/9.2Piwo35J.js.gz +0 -0
  132. package/build/server/chunks/_server.ts-B54Pvhgc.js.map +0 -1
  133. package/build/server/chunks/_server.ts-Bol54_Qo.js.map +0 -1
  134. package/build/server/chunks/_server.ts-CZb-BI5H.js.map +0 -1
  135. package/build/server/chunks/_server.ts-DiBMY7Ho.js.map +0 -1
  136. package/build/server/chunks/pty-manager-CoWVT56F.js.map +0 -1
@@ -0,0 +1,3 @@
1
+ import{bv as Te,v as qe,s as P,g as j,b as N,P as oe,bw as At}from"./DWmC0QM7.js";class pe{constructor(t,n){this.status=t,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${t}`}}toString(){return JSON.stringify(this.body)}}class Le{constructor(t,n){this.status=t,this.location=n}}class Pe extends Error{constructor(t,n,r){super(r),this.status=t,this.text=n}}new URL("sveltekit-internal://");function Et(e,t){return e==="/"||t==="ignore"?e:t==="never"?e.endsWith("/")?e.slice(0,-1):e:t==="always"&&!e.endsWith("/")?e+"/":e}function kt(e){return e.split("%25").map(decodeURI).join("%25")}function Rt(e){for(const t in e)e[t]=decodeURIComponent(e[t]);return e}function ye({href:e}){return e.split("#")[0]}function St(...e){let t=5381;for(const n of e)if(typeof n=="string"){let r=n.length;for(;r;)t=t*33^n.charCodeAt(--r)}else if(ArrayBuffer.isView(n)){const r=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let a=r.length;for(;a;)t=t*33^r[--a]}else throw new TypeError("value must be a string or TypedArray");return(t>>>0).toString(36)}new TextEncoder;const It=new TextDecoder;function Ut(e){const t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return n}const Tt=window.fetch;window.fetch=(e,t)=>((e instanceof Request?e.method:t?.method||"GET")!=="GET"&&z.delete(je(e)),Tt(e,t));const z=new Map;function Lt(e,t){const n=je(e,t),r=document.querySelector(n);if(r?.textContent){r.remove();let{body:a,...s}=JSON.parse(r.textContent);const o=r.getAttribute("data-ttl");return o&&z.set(n,{body:a,init:s,ttl:1e3*Number(o)}),r.getAttribute("data-b64")!==null&&(a=Ut(a)),Promise.resolve(new Response(a,s))}return window.fetch(e,t)}function Pt(e,t,n){if(z.size>0){const r=je(e,n),a=z.get(r);if(a){if(performance.now()<a.ttl&&["default","force-cache","only-if-cached",void 0].includes(n?.cache))return new Response(a.body,a.init);z.delete(r)}}return window.fetch(t,n)}function je(e,t){let r=`script[data-sveltekit-fetched][data-url=${JSON.stringify(e instanceof Request?e.url:e)}]`;if(t?.headers||t?.body){const a=[];t.headers&&a.push([...new Headers(t.headers)].join(",")),t.body&&(typeof t.body=="string"||ArrayBuffer.isView(t.body))&&a.push(t.body),r+=`[data-hash="${St(...a)}"]`}return r}const jt=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function Nt(e){const t=[];return{pattern:e==="/"?/^\/$/:new RegExp(`^${xt(e).map(r=>{const a=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(r);if(a)return t.push({name:a[1],matcher:a[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const s=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(r);if(s)return t.push({name:s[1],matcher:s[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!r)return;const o=r.split(/\[(.+?)\](?!\])/);return"/"+o.map((i,l)=>{if(l%2){if(i.startsWith("x+"))return ve(String.fromCharCode(parseInt(i.slice(2),16)));if(i.startsWith("u+"))return ve(String.fromCharCode(...i.slice(2).split("-").map(g=>parseInt(g,16))));const u=jt.exec(i),[,d,p,h,f]=u;return t.push({name:h,matcher:f,optional:!!d,rest:!!p,chained:p?l===1&&o[0]==="":!1}),p?"([^]*?)":d?"([^/]*)?":"([^/]+?)"}return ve(i)}).join("")}).join("")}/?$`),params:t}}function Ot(e){return e!==""&&!/^\([^)]+\)$/.test(e)}function xt(e){return e.slice(1).split("/").filter(Ot)}function Ct(e,t,n){const r={},a=e.slice(1),s=a.filter(c=>c!==void 0);let o=0;for(let c=0;c<t.length;c+=1){const i=t[c];let l=a[c-o];if(i.chained&&i.rest&&o&&(l=a.slice(c-o,c+1).filter(u=>u).join("/"),o=0),l===void 0)if(i.rest)l="";else continue;if(!i.matcher||n[i.matcher](l)){r[i.name]=l;const u=t[c+1],d=a[c+1];u&&!u.rest&&u.optional&&d&&i.chained&&(o=0),!u&&!d&&Object.keys(r).length===s.length&&(o=0);continue}if(i.optional&&i.chained){o++;continue}return}if(!o)return r}function ve(e){return e.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function Dt({nodes:e,server_loads:t,dictionary:n,matchers:r}){const a=new Set(t);return Object.entries(n).map(([c,[i,l,u]])=>{const{pattern:d,params:p}=Nt(c),h={id:c,exec:f=>{const g=d.exec(f);if(g)return Ct(g,p,r)},errors:[1,...u||[]].map(f=>e[f]),layouts:[0,...l||[]].map(o),leaf:s(i)};return h.errors.length=h.layouts.length=Math.max(h.errors.length,h.layouts.length),h});function s(c){const i=c<0;return i&&(c=~c),[i,e[c]]}function o(c){return c===void 0?c:[a.has(c),e[c]]}}function Qe(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function Ve(e,t,n=JSON.stringify){const r=n(t);try{sessionStorage[e]=r}catch{}}const U=globalThis.__sveltekit_amyq54?.base??"",$t=globalThis.__sveltekit_amyq54?.assets??U??"",Bt="1781944309625",et="sveltekit:snapshot",tt="sveltekit:scroll",nt="sveltekit:states",Ft="sveltekit:pageurl",V="sveltekit:history",Q="sveltekit:navigation",B={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},re=location.origin;function Ne(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){const n=document.getElementsByTagName("base");t=n.length?n[0].href:document.URL}return new URL(e,t)}function M(){return{x:pageXOffset,y:pageYOffset}}function q(e,t){return e.getAttribute(`data-sveltekit-${t}`)}const Ye={...B,"":B.hover};function rt(e){let t=e.assignedSlot??e.parentNode;return t?.nodeType===11&&(t=t.host),t}function at(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=rt(e)}}function Ee(e,t,n){let r;try{if(r=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&r.hash.match(/^#[^/]/)){const c=location.hash.split("#")[1]||"/";r.hash=`#${c}${r.hash}`}}catch{}const a=e instanceof SVGAElement?e.target.baseVal:e.target,s=!r||!!a||_e(r,t,n)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),o=r?.origin===re&&e.hasAttribute("download");return{url:r,external:s,target:a,download:o}}function se(e){let t=null,n=null,r=null,a=null,s=null,o=null,c=e;for(;c&&c!==document.documentElement;)r===null&&(r=q(c,"preload-code")),a===null&&(a=q(c,"preload-data")),t===null&&(t=q(c,"keepfocus")),n===null&&(n=q(c,"noscroll")),s===null&&(s=q(c,"reload")),o===null&&(o=q(c,"replacestate")),c=rt(c);function i(l){switch(l){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:Ye[r??"off"],preload_data:Ye[a??"off"],keepfocus:i(t),noscroll:i(n),reload:i(s),replace_state:i(o)}}function Ge(e){const t=Te(e);let n=!0;function r(){n=!0,t.update(o=>o)}function a(o){n=!1,t.set(o)}function s(o){let c;return t.subscribe(i=>{(c===void 0||n&&i!==c)&&o(c=i)})}return{notify:r,set:a,subscribe:s}}const ot={v:()=>{}};function Mt(){const{set:e,subscribe:t}=Te(!1);let n;async function r(){clearTimeout(n);try{const a=await fetch(`${$t}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!a.ok)return!1;const o=(await a.json()).version!==Bt;return o&&(e(!0),ot.v(),clearTimeout(n)),o}catch{return!1}}return{subscribe:t,check:r}}function _e(e,t,n){return e.origin!==re||!e.pathname.startsWith(t)?!0:n?e.pathname!==location.pathname:!1}function jn(e){}const qt=-1,Vt=-2,Yt=-3,Gt=-4,Kt=-5,Wt=-6,Ht=-7,st=2**32-1,ke=st-1;function Xt(e){return!(!Number.isInteger(e)||e<0||e>ke)}function zt(e){return!(!Number.isInteger(e)||e<0||e>st)}function Jt(e){return Uint8Array.fromBase64(e).buffer}function Zt(e){return Uint8Array.from(Buffer.from(e,"base64")).buffer}function Qt(e){const t=atob(e),n=t.length,r=new Uint8Array(n);for(let a=0;a<n;a++)r[a]=t.charCodeAt(a);return r.buffer}const en=typeof Uint8Array.fromBase64=="function",tn=typeof process=="object"&&process.versions?.node!==void 0,nn=en?Jt:tn?Zt:Qt;function rn(e,t){if(typeof e=="number")return s(e,!0);if(!Array.isArray(e)||e.length===0)throw new Error("Invalid input");const n=e,r=Array(n.length);let a=null;function s(o,c=!1){if(o===qt)return;if(o===Yt)return NaN;if(o===Gt)return 1/0;if(o===Kt)return-1/0;if(o===Wt)return-0;if(c||typeof o!="number")throw new Error("Invalid input");if(o in r)return r[o];const i=n[o];if(!i||typeof i!="object")r[o]=i;else if(Array.isArray(i))if(typeof i[0]=="string"){const l=i[0],u=t&&Object.hasOwn(t,l)?t[l]:void 0;if(u){let d=i[1];if(typeof d!="number"&&(d=n.push(i[1])-1),a??=new Set,a.has(d))throw new Error("Invalid circular reference");return a.add(d),r[o]=u(s(d)),a.delete(d),r[o]}switch(l){case"Date":r[o]=new Date(i[1]);break;case"Set":const d=new Set;r[o]=d;for(let f=1;f<i.length;f+=1)d.add(s(i[f]));break;case"Map":const p=new Map;r[o]=p;for(let f=1;f<i.length;f+=2)p.set(s(i[f]),s(i[f+1]));break;case"RegExp":r[o]=new RegExp(i[1],i[2]);break;case"Object":{const f=i[1];if(typeof n[f]=="object"&&n[f][0]!=="BigInt")throw new Error("Invalid input");r[o]=Object(s(f));break}case"BigInt":r[o]=BigInt(i[1]);break;case"null":const h=Object.create(null);r[o]=h;for(let f=1;f<i.length;f+=2){if(i[f]==="__proto__")throw new Error("Cannot parse an object with a `__proto__` property");h[i[f]]=s(i[f+1])}break;case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Float16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"BigInt64Array":case"BigUint64Array":case"DataView":{if(n[i[1]][0]!=="ArrayBuffer")throw new Error("Invalid data");const f=globalThis[l],g=s(i[1]);r[o]=i[2]!==void 0?new f(g,i[2],i[3]):new f(g);break}case"ArrayBuffer":{const f=i[1];if(typeof f!="string")throw new Error("Invalid ArrayBuffer encoding");const g=nn(f);r[o]=g;break}case"Temporal.Duration":case"Temporal.Instant":case"Temporal.PlainDate":case"Temporal.PlainTime":case"Temporal.PlainDateTime":case"Temporal.PlainMonthDay":case"Temporal.PlainYearMonth":case"Temporal.ZonedDateTime":{const f=l.slice(9);r[o]=Temporal[f].from(i[1]);break}case"URL":{const f=new URL(i[1]);r[o]=f;break}case"URLSearchParams":{const f=new URLSearchParams(i[1]);r[o]=f;break}default:throw new Error(`Unknown type ${l}`)}}else if(i[0]===Ht){const l=i[1];if(!zt(l))throw new Error("Invalid input");const u=[];r[o]=u,u[ke]=void 0,delete u[ke];for(let d=2;d<i.length;d+=2){const p=i[d];if(!Xt(p)||p>=l)throw new Error("Invalid input");u[p]=s(i[d+1])}u.length=l}else{const l=new Array(i.length);r[o]=l;for(let u=0;u<i.length;u+=1){const d=i[u];d!==Vt&&(l[u]=s(d))}}else{const l={};r[o]=l;for(const u of Object.keys(i)){if(u==="__proto__")throw new Error("Cannot parse an object with a `__proto__` property");const d=i[u];l[u]=s(d)}}return r[o]}return s(0)}const it=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...it];const an=new Set([...it]);[...an];function on(e){return e.filter(t=>t!=null)}const sn="x-sveltekit-invalidated",cn="x-sveltekit-trailing-slash";function ie(e){return e instanceof pe||e instanceof Pe?e.status:500}function ln(e){return e instanceof Pe?e.text:"Internal Error"}let S,ee,be;const fn=qe.toString().includes("$$")||/function \w+\(\) \{\}/.test(qe.toString()),Ke="a:";fn?(S={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL(Ke)},ee={current:null},be={current:!1}):(S=new class{#e=P({});get data(){return j(this.#e)}set data(t){N(this.#e,t)}#t=P(null);get form(){return j(this.#t)}set form(t){N(this.#t,t)}#n=P(null);get error(){return j(this.#n)}set error(t){N(this.#n,t)}#r=P({});get params(){return j(this.#r)}set params(t){N(this.#r,t)}#a=P({id:null});get route(){return j(this.#a)}set route(t){N(this.#a,t)}#o=P({});get state(){return j(this.#o)}set state(t){N(this.#o,t)}#s=P(-1);get status(){return j(this.#s)}set status(t){N(this.#s,t)}#i=P(new URL(Ke));get url(){return j(this.#i)}set url(t){N(this.#i,t)}},ee=new class{#e=P(null);get current(){return j(this.#e)}set current(t){N(this.#e,t)}},be=new class{#e=P(!1);get current(){return j(this.#e)}set current(t){N(this.#e,t)}},ot.v=()=>be.current=!0);function un(e){Object.assign(S,e)}const dn="/__data.json",hn=".html__data.json";function pn(e){return e.endsWith(".html")?e.replace(/\.html$/,hn):e.replace(/\/$/,"")+dn}const _n=new Set(["icon","shortcut icon","apple-touch-icon"]);let H=null;const D=Qe(tt)??{},te=Qe(et)??{},C={url:Ge({}),page:Ge({}),navigating:Te(null),updated:Mt()};function Oe(e){D[e]=M()}function gn(e,t){let n=e+1;for(;D[n];)delete D[n],n+=1;for(n=t+1;te[n];)delete te[n],n+=1}function K(e,t=!1){return t?location.replace(e.href):location.href=e.href,new Promise(()=>{})}async function ct(){if("serviceWorker"in navigator){const e=await navigator.serviceWorker.getRegistration(U||"/");e&&await e.update()}}function We(){}let xe,Re,ce,x,Se,A;const le=[],fe=[];let L=null;function Ie(){L?.fork?.then(e=>e?.discard()),L=null}const ae=new Map,lt=new Set,mn=new Set,J=new Set;let w={branch:[],error:null,url:null},Ce=!1,ue=!1,He=!0,ne=!1,X=!1,ft=!1,De=!1,ut,R,I,F;const Z=new Set,Xe=new Map;async function Cn(e,t,n){globalThis.__sveltekit_amyq54?.data&&globalThis.__sveltekit_amyq54.data,document.URL!==location.href&&(location.href=location.href),A=e,await e.hooks.init?.(),xe=Dt(e),x=document.documentElement,Se=t,Re=e.nodes[0],ce=e.nodes[1],Re(),ce(),R=history.state?.[V],I=history.state?.[Q],R||(R=I=Date.now(),history.replaceState({...history.state,[V]:R,[Q]:I},""));const r=D[R];function a(){r&&(history.scrollRestoration="manual",scrollTo(r.x,r.y))}n?(a(),await Un(Se,n)):(await Y({type:"enter",url:Ne(A.hash?Ln(new URL(location.href)):location.href),replace_state:!0}),a()),In()}function wn(){le.length=0,De=!1}function dt(e){fe.some(t=>t?.snapshot)&&(te[e]=fe.map(t=>t?.snapshot?.capture()))}function ht(e){te[e]?.forEach((t,n)=>{fe[n]?.snapshot?.restore(t)})}function ze(){Oe(R),Ve(tt,D),dt(I),Ve(et,te)}async function pt(e,t,n,r){let a;t.invalidateAll&&Ie(),await Y({type:"goto",url:Ne(e),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,state:t.state,redirect_count:n,nav_token:r,accept:()=>{t.invalidateAll&&(De=!0,a=[...Xe.keys()]),t.invalidate&&t.invalidate.forEach(Sn)}}),t.invalidateAll&&oe().then(oe).then(()=>{Xe.forEach(({resource:s},o)=>{a?.includes(o)&&s.refresh?.()})})}async function yn(e){if(e.id!==L?.id){Ie();const t={};Z.add(t),L={id:e.id,token:t,promise:gt({...e,preload:t}).then(n=>(Z.delete(t),n.type==="loaded"&&n.state.error&&Ie(),n)),fork:null}}return L.promise}async function Ae(e){const t=(await me(e,!1))?.route;t&&await Promise.all([...t.layouts,t.leaf].filter(Boolean).map(n=>n[1]()))}async function _t(e,t,n){const r={params:w.params,route:{id:w.route?.id??null},url:new URL(location.href)};w={...e.state,nav:r};const a=document.querySelector("style[data-sveltekit]");if(a&&a.remove(),Object.assign(S,e.props.page),ut=new A.root({target:t,props:{...e.props,stores:C,components:fe},hydrate:n,sync:!1,transformError:void 0}),await Promise.resolve(),ht(I),n){const s={from:null,to:{...r,scroll:D[R]??M()},willUnload:!1,type:"enter",complete:Promise.resolve()};J.forEach(o=>o(s))}ue=!0}async function de({url:e,params:t,branch:n,errors:r,status:a,error:s,route:o,form:c}){let i="never";if(U&&(e.pathname===U||e.pathname===U+"/"))i="always";else for(const f of n)f?.slash!==void 0&&(i=f.slash);e.pathname=Et(e.pathname,i),e.search=e.search;const l={type:"loaded",state:{url:e,params:t,branch:n,error:s,route:o},props:{constructors:on(n).map(f=>f.node.component),page:Me(S)}};c!==void 0&&(l.props.form=c);let u={},d=!S,p=0;for(let f=0;f<Math.max(n.length,w.branch.length);f+=1){const g=n[f],b=w.branch[f];g?.data!==b?.data&&(d=!0),g&&(u={...u,...g.data},d&&(l.props[`data_${p}`]=u),p+=1)}return(!w.url||e.href!==w.url.href||w.error!==s||c!==void 0&&c!==S.form||d)&&(l.props.page={error:s,params:t,route:{id:o?.id??null},state:{},status:a,url:new URL(e),form:c??null,data:d?u:S.data}),l}async function $e({loader:e,parent:t,url:n,params:r,route:a,server_data_node:s}){let o=null;const c={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},i=await e();return{node:i,loader:e,server:s,universal:i.universal?.load?{type:"data",data:o,uses:c}:null,data:o??s?.data??null,slash:i.universal?.trailingSlash??s?.slash}}function vn(e,t,n){let r=e instanceof Request?e.url:e;const a=new URL(r,n);a.origin===n.origin&&(r=a.href.slice(n.origin.length));const s=ue?Pt(r,a.href,t):Lt(r,t);return{resolved:a,promise:s}}function Je(e,t,n,r,a,s){if(De)return!0;if(!a)return!1;if(a.parent&&e||a.route&&t||a.url&&n)return!0;for(const o of a.search_params)if(r.has(o))return!0;for(const o of a.params)if(s[o]!==w.params[o])return!0;for(const o of a.dependencies)if(le.some(c=>c(new URL(o))))return!0;return!1}function Be(e,t){return e?.type==="data"?e:e?.type==="skip"?t??null:null}function bn(e,t){if(!e)return new Set(t.searchParams.keys());const n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(const r of n){const a=e.searchParams.getAll(r),s=t.searchParams.getAll(r);a.every(o=>s.includes(o))&&s.every(o=>a.includes(o))&&n.delete(r)}return n}function Ze({error:e,url:t,route:n,params:r}){return{type:"loaded",state:{error:e,url:t,route:n,params:r,branch:[]},props:{page:Me(S),constructors:[]}}}async function gt({id:e,invalidating:t,url:n,params:r,route:a,preload:s}){if(L?.id===e)return Z.delete(L.token),L.promise;const{errors:o,layouts:c,leaf:i}=a,l=[...c,i];o.forEach(m=>m?.().catch(()=>{})),l.forEach(m=>m?.[1]().catch(()=>{}));let u=null;const d=w.url?e!==he(w.url):!1,p=w.route?a.id!==w.route.id:!1,h=bn(w.url,n);let f=!1;{const m=l.map((y,E)=>{const k=w.branch[E],v=!!y?.[0]&&(k?.loader!==y[1]||Je(f,p,d,h,k.server?.uses,r));return v&&(f=!0),v});if(m.some(Boolean)){try{u=await yt(n,m)}catch(y){const E=await G(y,{url:n,params:r,route:{id:e}});return Z.has(s)?Ze({error:E,url:n,params:r,route:a}):ge({status:ie(y),error:E,url:n,route:a})}if(u.type==="redirect")return u}}const g=u?.nodes;let b=!1;const _=l.map(async(m,y)=>{if(!m)return;const E=w.branch[y],k=g?.[y];if((!k||k.type==="skip")&&m[1]===E?.loader&&!Je(b,p,d,h,E.universal?.uses,r))return E;if(b=!0,k?.type==="error")throw k;return $e({loader:m[1],url:n,params:r,route:a,parent:async()=>{const O={};for(let $=0;$<y;$+=1)Object.assign(O,(await _[$])?.data);return O},server_data_node:Be(k===void 0&&m[0]?{type:"skip"}:k??null,m[0]?E?.server:void 0)})});for(const m of _)m.catch(()=>{});const T=[];for(let m=0;m<l.length;m+=1)if(l[m])try{T.push(await _[m])}catch(y){if(y instanceof Le)return{type:"redirect",location:y.location};if(Z.has(s))return Ze({error:await G(y,{params:r,url:n,route:{id:a.id}}),url:n,params:r,route:a});let E=ie(y),k;if(g?.includes(y))E=y.status??E,k=y.error;else if(y instanceof pe)k=y.body;else{if(await C.updated.check())return await ct(),await K(n);k=await G(y,{params:r,url:n,route:{id:a.id}})}const v=await An(m,T,o);return v?de({url:n,params:r,branch:T.slice(0,v.idx).concat(v.node),errors:o,status:E,error:k,route:a}):await wt(n,{id:a.id},k,E)}else T.push(void 0);return de({url:n,params:r,branch:T,errors:o,status:200,error:null,route:a,form:t?void 0:null})}async function An(e,t,n){for(;e--;)if(n[e]){let r=e;for(;!t[r];)r-=1;try{return{idx:r+1,node:{node:await n[e](),loader:n[e],data:{},server:null,universal:null}}}catch{continue}}}async function ge({status:e,error:t,url:n,route:r}){const a={};let s=null;if(A.server_loads[0]===0)try{const c=await yt(n,[!0]);if(c.type!=="data"||c.nodes[0]&&c.nodes[0].type!=="data")throw 0;s=c.nodes[0]??null}catch{(n.origin!==re||n.pathname!==location.pathname||Ce)&&await K(n)}try{const o=await $e({loader:Re,url:n,params:a,route:r,parent:()=>Promise.resolve({}),server_data_node:Be(s)}),c={node:await ce(),loader:ce,universal:null,server:null,data:null};return de({url:n,params:a,branch:[o,c],status:e,error:t,errors:[],route:null})}catch(o){if(o instanceof Le)return pt(new URL(o.location,location.href),{},0);throw o}}async function En(e){const t=e.href;if(ae.has(t))return ae.get(t);let n;try{const r=(async()=>{let a=await A.hooks.reroute({url:new URL(e),fetch:async(s,o)=>vn(s,o,e).promise})??e;if(typeof a=="string"){const s=new URL(e);A.hash?s.hash=a:s.pathname=a,a=s}return a})();ae.set(t,r),n=await r}catch{ae.delete(t);return}return n}async function me(e,t){if(e&&!_e(e,U,A.hash)){const n=await En(e);if(!n)return;const r=kn(n);for(const a of xe){const s=a.exec(r);if(s)return{id:he(e),invalidating:t,route:a,params:Rt(s),url:e}}}}function kn(e){return kt(A.hash?e.hash.replace(/^#/,"").replace(/[?#].+/,""):e.pathname.slice(U.length))||"/"}function he(e){return(A.hash?e.hash.replace(/^#/,""):e.pathname)+e.search}function mt({url:e,type:t,intent:n,delta:r,event:a,scroll:s}){let o=!1;const c=Fe(w,n,e,t,s??null);r!==void 0&&(c.navigation.delta=r),a!==void 0&&(c.navigation.event=a);const i={...c.navigation,cancel:()=>{o=!0,c.reject(new Error("navigation cancelled"))}};return ne||lt.forEach(l=>l(i)),o?null:c}async function Y({type:e,url:t,popped:n,keepfocus:r,noscroll:a,replace_state:s,state:o={},redirect_count:c=0,nav_token:i={},accept:l=We,block:u=We,event:d}){const p=F;F=i;const h=await me(t,!1),f=e==="enter"?Fe(w,h,t,e):mt({url:t,type:e,delta:n?.delta,intent:h,scroll:n?.scroll,event:d});if(!f){u(),F===i&&(F=p);return}const g=R,b=I;l(),ne=!0,ue&&f.navigation.type!=="enter"&&C.navigating.set(ee.current=f.navigation);let _=h&&await gt(h);if(!_){if(_e(t,U,A.hash))return await K(t,s);_=await wt(t,{id:null},await G(new Pe(404,"Not Found",`Not found: ${t.pathname}`),{url:t,params:{},route:{id:null}}),404,s)}if(t=h?.url||t,F!==i)return f.reject(new Error("navigation aborted")),!1;if(_.type==="redirect"){if(c<20){await Y({type:e,url:new URL(_.location,t),popped:n,keepfocus:r,noscroll:a,replace_state:s,state:o,redirect_count:c+1,nav_token:i}),f.fulfil(void 0);return}_=await ge({status:500,error:await G(new Error("Redirect loop"),{url:t,params:{},route:{id:null}}),url:t,route:{id:null}})}else _.props.page.status>=400&&await C.updated.check()&&(await ct(),await K(t,s));if(wn(),Oe(g),dt(b),_.props.page.url.pathname!==t.pathname&&(t.pathname=_.props.page.url.pathname),o=n?n.state:o,!n){const v=s?0:1,O={[V]:R+=v,[Q]:I+=v,[nt]:o};(s?history.replaceState:history.pushState).call(history,O,"",t),s||gn(R,I)}const T=h&&L?.id===h.id?L.fork:null;L=null,_.props.page.state=o;let m;if(ue){const v=(await Promise.all(Array.from(mn,W=>W(f.navigation)))).filter(W=>typeof W=="function");if(v.length>0){let W=function(){v.forEach(we=>{J.delete(we)})};v.push(W),v.forEach(we=>{J.add(we)})}const O=f.navigation.to;w={..._.state,nav:{params:O.params,route:O.route,url:O.url}},_.props.page&&(_.props.page.url=t);const $=T&&await T;$?m=$.commit():(H=null,ut.$set(_.props),H&&Object.assign(_.props.page,H),un(_.props.page),m=At?.()),ft=!0}else await _t(_,Se,!1);const{activeElement:y}=document;await m,await oe(),await oe();let E=null;if(He){const v=n?n.scroll:a?M():null;v?scrollTo(v.x,v.y):(E=t.hash&&document.getElementById(bt(t)))?E.scrollIntoView():scrollTo(0,0)}const k=document.activeElement!==y&&document.activeElement!==document.body;!r&&!k&&Tn(t,!E),He=!0,_.props.page&&(H&&Object.assign(_.props.page,H),Object.assign(S,_.props.page)),ne=!1,e==="popstate"&&ht(I),f.fulfil(void 0),f.navigation.to&&(f.navigation.to.scroll=M()),J.forEach(v=>v(f.navigation)),C.navigating.set(ee.current=null)}async function wt(e,t,n,r,a){return e.origin===re&&e.pathname===location.pathname&&!Ce?await ge({status:r,error:n,url:e,route:t}):await K(e,a)}function Rn(){let e,t={element:void 0,href:void 0},n;x.addEventListener("mousemove",c=>{const i=c.target;clearTimeout(e),e=setTimeout(()=>{s(i,B.hover)},20)});function r(c){c.defaultPrevented||s(c.composedPath()[0],B.tap)}x.addEventListener("mousedown",r),x.addEventListener("touchstart",r,{passive:!0});const a=new IntersectionObserver(c=>{for(const i of c)i.isIntersecting&&(Ae(new URL(i.target.href)),a.unobserve(i.target))},{threshold:0});async function s(c,i){const l=at(c,x),u=l===t.element&&l?.href===t.href&&i>=n;if(!l||u)return;const{url:d,external:p,download:h}=Ee(l,U,A.hash);if(p||h)return;const f=se(l),g=d&&he(w.url)===he(d);if(!(f.reload||g))if(i<=f.preload_data){t={element:l,href:l.href},n=B.tap;const b=await me(d,!1);if(!b)return;yn(b)}else i<=f.preload_code&&(t={element:l,href:l.href},n=i,Ae(d))}function o(){a.disconnect();for(const c of x.querySelectorAll("a")){const{url:i,external:l,download:u}=Ee(c,U,A.hash);if(l||u)continue;const d=se(c);d.reload||(d.preload_code===B.viewport&&a.observe(c),d.preload_code===B.eager&&Ae(i))}}J.add(o),o()}function G(e,t){if(e instanceof pe)return e.body;const n=ie(e),r=ln(e);return A.hooks.handleError({error:e,event:t,status:n,message:r})??{message:r}}function Dn(e,t={}){return e=new URL(Ne(e)),e.origin!==re?Promise.reject(new Error("goto: invalid URL")):pt(e,t,0)}function Sn(e){if(typeof e=="function")le.push(e);else{const{href:t}=new URL(e,location.href);le.push(n=>n.href===t)}}function In(){history.scrollRestoration="manual",addEventListener("beforeunload",t=>{let n=!1;if(ze(),!ne){const r=Fe(w,void 0,null,"leave"),a={...r.navigation,cancel:()=>{n=!0,r.reject(new Error("navigation cancelled"))}};lt.forEach(s=>s(a))}n?(t.preventDefault(),t.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&ze()}),navigator.connection?.saveData||Rn(),x.addEventListener("click",async t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;const n=at(t.composedPath()[0],x);if(!n)return;const{url:r,external:a,target:s,download:o}=Ee(n,U,A.hash);if(!r)return;if(s==="_parent"||s==="_top"){if(window.parent!==window)return}else if(s&&s!=="_self")return;const c=se(n);if(!(n instanceof SVGAElement)&&r.protocol!==location.protocol&&!(r.protocol==="https:"||r.protocol==="http:")||o)return;const[l,u]=(A.hash?r.hash.replace(/^#/,""):r.href).split("#"),d=l===ye(location);if(a||c.reload&&(!d||!u)){mt({url:r,type:"link",event:t})?ne=!0:t.preventDefault();return}if(u!==void 0&&d){const[,p]=w.url.href.split("#");if(p===u){if(t.preventDefault(),u===""||u==="top"&&n.ownerDocument.getElementById("top")===null)scrollTo({top:0});else{const h=n.ownerDocument.getElementById(decodeURIComponent(u));h&&(h.scrollIntoView(),h.focus())}return}if(X=!0,Oe(R),e(r),!c.replace_state)return;X=!1}t.preventDefault(),await new Promise(p=>{requestAnimationFrame(()=>{setTimeout(p,0)}),setTimeout(p,100)}),await Y({type:"link",url:r,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??r.href===location.href,event:t})}),x.addEventListener("submit",t=>{if(t.defaultPrevented)return;const n=HTMLFormElement.prototype.cloneNode.call(t.target),r=t.submitter;if((r?.formTarget||n.target)==="_blank"||(r?.formMethod||n.method)!=="get")return;const o=new URL(r?.hasAttribute("formaction")&&r?.formAction||n.action);if(_e(o,U,!1))return;const c=t.target,i=se(c);if(i.reload)return;t.preventDefault(),t.stopPropagation();const l=new FormData(c,r);o.search=new URLSearchParams(l).toString(),Y({type:"form",url:o,keepfocus:i.keepfocus,noscroll:i.noscroll,replace_state:i.replace_state??o.href===location.href,event:t})}),addEventListener("popstate",async t=>{if(!Ue){if(t.state?.[V]){const n=t.state[V];if(F={},n===R)return;const r=D[n],a=t.state[nt]??{},s=new URL(t.state[Ft]??location.href),o=t.state[Q],c=w.url?ye(location)===ye(w.url):!1;if(o===I&&(ft||c)){a!==S.state&&(S.state=a),e(s),D[R]=M(),r&&scrollTo(r.x,r.y),R=n;return}const l=n-R;await Y({type:"popstate",url:s,popped:{state:a,scroll:r,delta:l},accept:()=>{R=n,I=o},block:()=>{history.go(-l)},nav_token:F,event:t})}else if(!X){const n=new URL(location.href);e(n),A.hash&&location.reload()}}}),addEventListener("hashchange",()=>{X&&(X=!1,history.replaceState({...history.state,[V]:++R,[Q]:I},"",location.href))});for(const t of document.querySelectorAll("link"))_n.has(t.rel)&&(t.href=t.href);addEventListener("pageshow",t=>{t.persisted&&C.navigating.set(ee.current=null)});function e(t){w.url=S.url=t,C.page.set(Me(S)),C.page.notify()}}async function Un(e,{status:t=200,error:n,node_ids:r,params:a,route:s,server_route:o,data:c,form:i}){Ce=!0;const l=new URL(location.href);let u;({params:a={},route:s={id:null}}=await me(l,!1)||{}),u=xe.find(({id:h})=>h===s.id);let d,p=!0;try{const h=r.map(async(g,b)=>{const _=c[b];return _?.uses&&(_.uses=vt(_.uses)),$e({loader:A.nodes[g],url:l,params:a,route:s,parent:async()=>{const T={};for(let m=0;m<b;m+=1)Object.assign(T,(await h[m]).data);return T},server_data_node:Be(_)})}),f=await Promise.all(h);if(u){const g=u.layouts;for(let b=0;b<g.length;b++)g[b]||f.splice(b,0,void 0)}d=await de({url:l,params:a,branch:f,status:t,error:n,errors:u?.errors,form:i,route:u??null})}catch(h){if(h instanceof Le){await K(new URL(h.location,location.href));return}d=await ge({status:ie(h),error:await G(h,{url:l,params:a,route:s}),url:l,route:s}),e.textContent="",p=!1}d.props.page&&(d.props.page.state={}),await _t(d,e,p)}async function yt(e,t){const n=new URL(e);n.pathname=pn(e.pathname),e.pathname.endsWith("/")&&n.searchParams.append(cn,"1"),n.searchParams.append(sn,t.map(s=>s?"1":"0").join(""));const r=window.fetch,a=await r(n.href,{});if(!a.ok){let s;throw a.headers.get("content-type")?.includes("application/json")?s=await a.json():a.status===404?s="Not Found":a.status===500&&(s="Internal Error"),new pe(a.status,s)}return new Promise(async s=>{const o=new Map,c=a.body.getReader();function i(u){return rn(u,{...A.decoders,Promise:d=>new Promise((p,h)=>{o.set(d,{fulfil:p,reject:h})})})}let l="";for(;;){const{done:u,value:d}=await c.read();if(u&&!l)break;for(l+=!d&&l?`
2
+ `:It.decode(d,{stream:!0});;){const p=l.indexOf(`
3
+ `);if(p===-1)break;const h=JSON.parse(l.slice(0,p));if(l=l.slice(p+1),h.type==="redirect")return s(h);if(h.type==="data")h.nodes?.forEach(f=>{f?.type==="data"&&(f.uses=vt(f.uses),f.data=i(f.data))}),s(h);else if(h.type==="chunk"){const{id:f,data:g,error:b}=h,_=o.get(f);o.delete(f),b?_.reject(i(b)):_.fulfil(i(g))}}}})}function vt(e){return{dependencies:new Set(e?.dependencies??[]),params:new Set(e?.params??[]),parent:!!e?.parent,route:!!e?.route,url:!!e?.url,search_params:new Set(e?.search_params??[])}}let Ue=!1;function Tn(e,t=!0){const n=document.querySelector("[autofocus]");if(n)n.focus();else{const r=bt(e);if(r&&document.getElementById(r)){const{x:s,y:o}=M();setTimeout(()=>{const c=history.state;Ue=!0,location.replace(new URL(`#${r}`,location.href)),history.replaceState(c,"",e),t&&scrollTo(s,o),Ue=!1})}else{const s=document.body,o=s.getAttribute("tabindex");s.tabIndex=-1,s.focus({preventScroll:!0,focusVisible:!1}),o!==null?s.setAttribute("tabindex",o):s.removeAttribute("tabindex")}const a=getSelection();if(a&&a.type!=="None"){const s=[];for(let o=0;o<a.rangeCount;o+=1)s.push(a.getRangeAt(o));setTimeout(()=>{if(a.rangeCount===s.length){for(let o=0;o<a.rangeCount;o+=1){const c=s[o],i=a.getRangeAt(o);if(c.commonAncestorContainer!==i.commonAncestorContainer||c.startContainer!==i.startContainer||c.endContainer!==i.endContainer||c.startOffset!==i.startOffset||c.endOffset!==i.endOffset)return}a.removeAllRanges()}})}}}function Fe(e,t,n,r,a=null){let s,o;const c=new Promise((l,u)=>{s=l,o=u});return c.catch(()=>{}),{navigation:{from:{params:e.params,route:{id:e.route?.id??null},url:e.url,scroll:M()},to:n&&{params:t?.params??null,route:{id:t?.route?.id??null},url:n,scroll:a},willUnload:!t,type:r,complete:c},fulfil:s,reject:o}}function Me(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function Ln(e){const t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function bt(e){let t;if(A.hash){const[,,n]=e.hash.split("#",3);t=n??""}else t=e.hash.slice(1);return decodeURIComponent(t)}export{Cn as a,Dn as g,jn as l,S as p,C as s};
@@ -1 +1 @@
1
- import{s as r,p as e}from"./BfbPKMXz.js";const a={get params(){return e.params},get url(){return e.url}};r.updated.check;const s=a;export{s as p};
1
+ import{s as r,p as e}from"./Bj5wFimK.js";const a={get params(){return e.params},get url(){return e.url}};r.updated.check;const s=a;export{s as p};
@@ -0,0 +1,6 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../assets/xterm.DFuMZ0ql.css"])))=>i.map(i=>d[i]);
2
+ import{_ as b}from"./PPVm8Dsz.js";async function N(e){const{Terminal:w}=await b(async()=>{const{Terminal:r}=await import("./BTGVxaYV.js").then(i=>i.x);return{Terminal:r}},[],import.meta.url),{FitAddon:_}=await b(async()=>{const{FitAddon:r}=await import("./BlxrFPDK.js").then(i=>i.a);return{FitAddon:r}},[],import.meta.url),{WebLinksAddon:k}=await b(async()=>{const{WebLinksAddon:r}=await import("./DLu6yJIZ.js").then(i=>i.a);return{WebLinksAddon:r}},[],import.meta.url);await b(()=>Promise.resolve({}),__vite__mapDeps([0]),import.meta.url);const d=new _,n=new w({allowTransparency:!0,cursorBlink:!0,cursorStyle:"block",fontFamily:"'SF Mono', 'Fira Code', 'Cascadia Code', 'Menlo', monospace",fontSize:e.fontSize||14,theme:{background:"#0a0a0f",black:"#0a0a0f",blue:"#3b82f6",brightBlack:"#64748b",brightBlue:"#60a5fa",brightCyan:"#67e8f9",brightGreen:"#4ade80",brightMagenta:"#c4b5fd",brightRed:"#f87171",brightWhite:"#f8fafc",brightYellow:"#fbbf24",cursor:"#e2e8f0",cursorAccent:"#0a0a0f",cyan:"#38bdf8",foreground:"#e2e8f0",green:"#22c55e",magenta:"#a78bfa",red:"#ef4444",selectionBackground:"rgba(99, 102, 241, 0.3)",white:"#e2e8f0",yellow:"#f59e0b"}});n.loadAddon(d),n.loadAddon(new k),n.open(e.container),e.readOnly&&e.initialCols&&e.initialRows?n.resize(e.initialCols,e.initialRows):d.fit();const v=new Set(["f","g","h","j","n","o","p","q","s","t","u","w"]);n.attachCustomKeyEventHandler(r=>{const i=r.key.toLowerCase();return r.metaKey?i==="c"||i==="v"?!0:!v.has(i):!0});let u=null;if(e.terminalId&&e.apiKey&&!e.readOnly){const r=e.terminalId,i=e.apiKey;u=l=>{(async()=>{try{if(!l.clipboardData)return;const y=Array.from(l.clipboardData.items).find(g=>g.type.startsWith("image/"));if(!y)return;const O=y.getAsFile();if(!O)return;l.preventDefault();const m=new FileReader,T=await new Promise((g,P)=>{m.onload=()=>{g(m.result)},m.onerror=P,m.readAsDataURL(O)});(await fetch(`/api/terminals/${r}/paste-image`,{body:JSON.stringify({image:T}),headers:{Authorization:`Bearer ${i}`,"Content-Type":"application/json"},method:"POST"})).ok&&a?.readyState===WebSocket.OPEN&&a.send(JSON.stringify({data:"",type:"input"}))}catch{}})()},e.container.addEventListener("paste",u)}let a=null,s=null,f=1e3,o=!1,c=0;function p(){if(o)return;s&&clearTimeout(s);const r=Math.random()*f*.5;s=setTimeout(()=>{f=Math.min(f*2,3e4),h()},f+r)}async function h(){if(o)return;let r;try{r=await e.getTicket()}catch{o||(e.onDisconnect?.(),p());return}if(o)return;const i=c>0?`&lastSeq=${String(c)}`:"";a=new WebSocket(`${e.wsUrl}?ticket=${r}&caps=snapshot${i}`),a.onopen=()=>{f=1e3,e.onReconnect?.()},a.onmessage=l=>{const t=JSON.parse(l.data);if(t.type==="output"){if(typeof t.seq=="number"){if(t.seq<=c)return;c=t.seq}n.write(t.data??"")}else if(t.type==="snapshot")n.reset(),typeof t.seq=="number"&&(c=t.seq),n.write(t.data??"");else if(t.type==="scrollback")n.write(t.data??"");else if(t.type==="exit")n.write(`\r
3
+ \x1B[90m[Process exited with code ${String(t.code)}]\x1B[0m\r
4
+ `),o=!0,s&&clearTimeout(s),e.onExit?.(t.code??0);else if(t.type==="output-dropped"){const y=typeof t.bytes=="number"&&t.bytes>0?`[${String(t.bytes)} bytes dropped — resyncing…]`:"[resyncing…]";n.write(`\r
5
+ \x1B[33m${y}\x1B[0m\r
6
+ `)}else t.type==="activity"?e.onActivity?.(t.active??!1):t.type==="cwd"?e.onCwd?.(t.path??""):t.type==="resize"&&e.readOnly&&t.cols&&t.rows&&n.resize(t.cols,t.rows)},a.onclose=()=>{o||(e.onDisconnect?.(),p())}}h(),n.onData(r=>{e.readOnly||a?.readyState===WebSocket.OPEN&&a.send(JSON.stringify({data:r,type:"input"}))});const S=new ResizeObserver(()=>{e.readOnly||!e.container.offsetWidth||!e.container.offsetHeight||(d.fit(),a?.readyState===WebSocket.OPEN&&a.send(JSON.stringify({cols:n.cols,rows:n.rows,type:"resize"})))});S.observe(e.container);function A(){o=!0,s&&clearTimeout(s),u&&e.container.removeEventListener("paste",u),S.disconnect(),a?.close(),n.dispose()}function E(r){a?.readyState===WebSocket.OPEN&&a.send(JSON.stringify({data:r,type:"input"}))}return{dispose:A,fitAddon:d,getLastSeq:()=>c,sendInput:E,term:n}}function R(e,w){e.readyState===WebSocket.OPEN&&e.send(JSON.stringify({signal:w,type:"signal"}))}export{N as createTerminal,R as sendSignal};
@@ -1 +1 @@
1
- import{s as e}from"./BfbPKMXz.js";const r=()=>{const s=e;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},b={subscribe(s){return r().page.subscribe(s)}};export{b as p};
1
+ import{s as e}from"./Bj5wFimK.js";const r=()=>{const s=e;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},b={subscribe(s){return r().page.subscribe(s)}};export{b as p};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.Qn7Ktiht.js","../chunks/BPDiEZo0.js","../chunks/DWmC0QM7.js","../chunks/B1bOvemT.js","../assets/ColorPicker.CV4IKef4.css","../chunks/BfbPKMXz.js","../chunks/CZg4kn4E.js","../chunks/Bn-6X1BO.js","../chunks/CG453M9q.js","../chunks/CSjf4fBs.js","../assets/0.BwNtE8TX.css","../nodes/1.BxWOfNlo.js","../chunks/2rBV5OkJ.js","../assets/1.B_AnTlN1.css","../nodes/2.Bc2qALkX.js","../chunks/CJulw9ux.js","../chunks/xs1Xl3_e.js","../chunks/gQJcRhou.js","../chunks/BDcFu3l7.js","../chunks/BLszSzTT.js","../chunks/BcpydfqI.js","../chunks/C4Hns_Wl.js","../chunks/C87ZRWX0.js","../chunks/DomZZqvG.js","../assets/2.JWRrnR-w.css","../nodes/3.N2-A8noI.js","../assets/3.DHxQoulp.css","../nodes/4.BFYS2g9C.js","../chunks/DzuS5Nbr.js","../assets/4.D4EDSN4H.css","../nodes/5.DziEu9rx.js","../assets/5.C5qz-NeI.css","../nodes/6.BWF9Qx6F.js","../chunks/DhK7PwI_.js","../chunks/BdtLzPpO.js","../assets/6.DzV0p3l-.css","../nodes/7.DHuDIdpz.js","../chunks/i5iZvmIH.js","../assets/ChatView.Bnlg-oAF.css","../assets/7.CEbRAOOf.css","../nodes/8.D0Ijt9Vv.js","../assets/8.BYgAX7hR.css","../nodes/9.2Piwo35J.js","../assets/9.DV6pZunn.css","../nodes/10.BGPYD1s1.js","../assets/10.BhoBXADL.css","../nodes/11.BxY1PUjC.js","../chunks/PPVm8Dsz.js","../assets/11.F10lvwyh.css"])))=>i.map(i=>d[i]);
2
- import{_}from"../chunks/PPVm8Dsz.js";import{j as x,Q as H,f as Q,R as U,S as W,T as X,m as q,l as j,U as z,n as J,b as P,V as K,g as u,W as Z,X as $,Y as tt,p as et,G as rt,E as at,v as st,P as ot,A as R,d as nt,w as it,s as b,c as _t,r as ct,t as ut,x as O}from"../chunks/DWmC0QM7.js";import{B as mt,k as dt,m as lt,u as ft,p as T,i as A,a as v,j as D,f as k,g as I,t as ht,s as vt}from"../chunks/BPDiEZo0.js";function L(s,t,a){var n;x&&(n=J,H());var o=new mt(s);Q(()=>{var e=t()??null;if(x){var r=W(n),c=r===z,p=e!==null;if(c!==p){var g=X();q(g),o.anchor=g,j(!1),o.ensure(e,e&&(f=>a(f,e))),j(!0);return}}o.ensure(e,e&&(f=>a(f,e)))},U)}function gt(s){return class extends Et{constructor(t){super({component:s,...t})}}}class Et{#e;#t;constructor(t){var a=new Map,n=(e,r)=>{var c=tt(r,!1,!1);return a.set(e,c),c};const o=new Proxy({...t.props||{},$$events:{}},{get(e,r){return u(a.get(r)??n(r,Reflect.get(e,r)))},has(e,r){return r===K?!0:(u(a.get(r)??n(r,Reflect.get(e,r))),Reflect.has(e,r))},set(e,r,c){return P(a.get(r)??n(r,c),c),Reflect.set(e,r,c)}});this.#t=(t.hydrate?dt:lt)(t.component,{target:t.target,anchor:t.anchor,props:o,context:t.context,intro:t.intro??!1,recover:t.recover,transformError:t.transformError}),(!t?.props?.$$host||t.sync===!1)&&Z(),this.#e=o.$$events;for(const e of Object.keys(this.#t))e==="$set"||e==="$destroy"||e==="$on"||$(this,e,{get(){return this.#t[e]},set(r){this.#t[e]=r},enumerable:!0});this.#t.$set=e=>{Object.assign(o,e)},this.#t.$destroy=()=>{ft(this.#t)}}$set(t){this.#t.$set(t)}$on(t,a){this.#e[t]=this.#e[t]||[];const n=(...o)=>a.call(this,...o);return this.#e[t].push(n),()=>{this.#e[t]=this.#e[t].filter(o=>o!==n)}}$destroy(){this.#t.$destroy()}}const Dt={};var yt=k('<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px"><!></div>'),Rt=k("<!> <!>",1);function Pt(s,t){et(t,!0);let a=T(t,"components",23,()=>[]),n=T(t,"data_0",3,null),o=T(t,"data_1",3,null);rt(()=>t.stores.page.set(t.page)),at(()=>{t.stores,t.page,t.constructors,a(),t.form,n(),o(),t.stores.page.notify()});let e=b(!1),r=b(!1),c=b(null);st(()=>{const i=t.stores.page.subscribe(()=>{u(e)&&(P(r,!0),ot().then(()=>{P(c,document.title||"untitled page",!0)}))});return P(e,!0),i});const p=O(()=>t.constructors[1]);var g=Rt(),f=R(g);{var S=i=>{const m=O(()=>t.constructors[0]);var d=D(),E=R(d);L(E,()=>u(m),(l,h)=>{I(h(l,{get data(){return n()},get form(){return t.form},get params(){return t.page.params},children:(y,bt)=>{var V=D(),Y=R(V);L(Y,()=>u(p),(B,F)=>{I(F(B,{get data(){return o()},get form(){return t.form},get params(){return t.page.params}}),G=>a()[1]=G,()=>a()?.[1])}),v(y,V)},$$slots:{default:!0}}),y=>a()[0]=y,()=>a()?.[0])}),v(i,d)},C=i=>{const m=O(()=>t.constructors[0]);var d=D(),E=R(d);L(E,()=>u(m),(l,h)=>{I(h(l,{get data(){return n()},get form(){return t.form},get params(){return t.page.params}}),y=>a()[0]=y,()=>a()?.[0])}),v(i,d)};A(f,i=>{t.constructors[1]?i(S):i(C,-1)})}var M=nt(f,2);{var N=i=>{var m=yt(),d=_t(m);{var E=l=>{var h=ht();ut(()=>vt(h,u(c))),v(l,h)};A(d,l=>{u(r)&&l(E)})}ct(m),v(i,m)};A(M,i=>{u(e)&&i(N)})}v(s,g),it()}const It=gt(Pt),Lt=[()=>_(()=>import("../nodes/0.Qn7Ktiht.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10]),import.meta.url),()=>_(()=>import("../nodes/1.BxWOfNlo.js"),__vite__mapDeps([11,1,2,12,5,6,3,4,13]),import.meta.url),()=>_(()=>import("../nodes/2.Bc2qALkX.js"),__vite__mapDeps([14,1,2,3,4,12,5,7,15,8,16,17,18,19,20,21,22,23,24]),import.meta.url),()=>_(()=>import("../nodes/3.N2-A8noI.js"),__vite__mapDeps([25,1,2,12,5,3,4,17,18,19,20,21,22,26]),import.meta.url),()=>_(()=>import("../nodes/4.BFYS2g9C.js"),__vite__mapDeps([27,1,2,3,4,12,28,17,18,22,29]),import.meta.url),()=>_(()=>import("../nodes/5.DziEu9rx.js"),__vite__mapDeps([30,1,2,3,4,21,17,18,22,31]),import.meta.url),()=>_(()=>import("../nodes/6.BWF9Qx6F.js"),__vite__mapDeps([32,1,2,3,4,12,5,33,28,7,15,16,17,18,34,19,23,35]),import.meta.url),()=>_(()=>import("../nodes/7.DHuDIdpz.js"),__vite__mapDeps([36,1,2,12,3,4,33,5,16,18,34,37,20,38,39]),import.meta.url),()=>_(()=>import("../nodes/8.D0Ijt9Vv.js"),__vite__mapDeps([40,1,2,3,4,12,5,23,41]),import.meta.url),()=>_(()=>import("../nodes/9.2Piwo35J.js"),__vite__mapDeps([42,1,2,3,4,12,6,5,43]),import.meta.url),()=>_(()=>import("../nodes/10.BGPYD1s1.js"),__vite__mapDeps([44,1,2,3,4,12,5,15,8,9,16,17,18,34,23,45]),import.meta.url),()=>_(()=>import("../nodes/11.BxY1PUjC.js"),__vite__mapDeps([46,47,1,2,12,3,4,5,6,28,18,34,37,20,38,17,23,48]),import.meta.url)],Vt=[0],xt={"/":[-3],"/activity":[-4],"/config":[-5],"/neurolink":[-6],"/project":[6],"/session/[id]":[7],"/sos":[8],"/sos/[id]":[9],"/terminals":[10],"/terminals/[id]":[11]},w={handleError:(({error:s})=>{console.error(s)}),reroute:(()=>{}),transport:{}},pt=Object.fromEntries(Object.entries(w.transport).map(([s,t])=>[s,t.decode])),jt=Object.fromEntries(Object.entries(w.transport).map(([s,t])=>[s,t.encode])),kt=!1,wt=(s,t)=>pt[s](t);export{wt as decode,pt as decoders,xt as dictionary,jt as encoders,kt as hash,w as hooks,Dt as matchers,Lt as nodes,It as root,Vt as server_loads};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.Bv_TwEnq.js","../chunks/BPDiEZo0.js","../chunks/DWmC0QM7.js","../chunks/B1bOvemT.js","../assets/ColorPicker.CV4IKef4.css","../chunks/Bj5wFimK.js","../chunks/fcNfTA-E.js","../chunks/Bn-6X1BO.js","../chunks/CG453M9q.js","../chunks/CSjf4fBs.js","../assets/0.BwNtE8TX.css","../nodes/1.7lffTIeb.js","../chunks/2rBV5OkJ.js","../assets/1.B_AnTlN1.css","../nodes/2.iMIqsE7n.js","../chunks/CJulw9ux.js","../chunks/xs1Xl3_e.js","../chunks/gQJcRhou.js","../chunks/BDcFu3l7.js","../chunks/BLszSzTT.js","../chunks/BcpydfqI.js","../chunks/C4Hns_Wl.js","../chunks/C87ZRWX0.js","../chunks/DomZZqvG.js","../assets/2.JWRrnR-w.css","../nodes/3.CArnSHOO.js","../assets/3.DHxQoulp.css","../nodes/4.BFYS2g9C.js","../chunks/DzuS5Nbr.js","../assets/4.D4EDSN4H.css","../nodes/5.DziEu9rx.js","../assets/5.C5qz-NeI.css","../nodes/6.B8l1RwkB.js","../chunks/BjYr_-Ss.js","../chunks/BdtLzPpO.js","../assets/6.DzV0p3l-.css","../nodes/7.BPyfhDis.js","../chunks/i5iZvmIH.js","../assets/ChatView.Bnlg-oAF.css","../assets/7.CEbRAOOf.css","../nodes/8.D_vszZ9E.js","../assets/8.BYgAX7hR.css","../nodes/9.Drah-do-.js","../assets/9.DV6pZunn.css","../nodes/10.ChiIrIDl.js","../assets/10.BhoBXADL.css","../nodes/11.DO3vyXEv.js","../chunks/PPVm8Dsz.js","../assets/11.F10lvwyh.css"])))=>i.map(i=>d[i]);
2
+ import{_}from"../chunks/PPVm8Dsz.js";import{j as x,Q as H,f as Q,R as U,S as W,T as X,m as q,l as j,U as z,n as J,b as P,V as K,g as u,W as Z,X as $,Y as tt,p as et,G as rt,E as at,v as st,P as ot,A as R,d as nt,w as it,s as b,c as _t,r as ct,t as ut,x as O}from"../chunks/DWmC0QM7.js";import{B as mt,k as dt,m as lt,u as ft,p as T,i as A,a as v,j as D,f as k,g as I,t as ht,s as vt}from"../chunks/BPDiEZo0.js";function L(s,t,a){var n;x&&(n=J,H());var o=new mt(s);Q(()=>{var e=t()??null;if(x){var r=W(n),c=r===z,p=e!==null;if(c!==p){var g=X();q(g),o.anchor=g,j(!1),o.ensure(e,e&&(f=>a(f,e))),j(!0);return}}o.ensure(e,e&&(f=>a(f,e)))},U)}function gt(s){return class extends Et{constructor(t){super({component:s,...t})}}}class Et{#e;#t;constructor(t){var a=new Map,n=(e,r)=>{var c=tt(r,!1,!1);return a.set(e,c),c};const o=new Proxy({...t.props||{},$$events:{}},{get(e,r){return u(a.get(r)??n(r,Reflect.get(e,r)))},has(e,r){return r===K?!0:(u(a.get(r)??n(r,Reflect.get(e,r))),Reflect.has(e,r))},set(e,r,c){return P(a.get(r)??n(r,c),c),Reflect.set(e,r,c)}});this.#t=(t.hydrate?dt:lt)(t.component,{target:t.target,anchor:t.anchor,props:o,context:t.context,intro:t.intro??!1,recover:t.recover,transformError:t.transformError}),(!t?.props?.$$host||t.sync===!1)&&Z(),this.#e=o.$$events;for(const e of Object.keys(this.#t))e==="$set"||e==="$destroy"||e==="$on"||$(this,e,{get(){return this.#t[e]},set(r){this.#t[e]=r},enumerable:!0});this.#t.$set=e=>{Object.assign(o,e)},this.#t.$destroy=()=>{ft(this.#t)}}$set(t){this.#t.$set(t)}$on(t,a){this.#e[t]=this.#e[t]||[];const n=(...o)=>a.call(this,...o);return this.#e[t].push(n),()=>{this.#e[t]=this.#e[t].filter(o=>o!==n)}}$destroy(){this.#t.$destroy()}}const Dt={};var yt=k('<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px"><!></div>'),Rt=k("<!> <!>",1);function Pt(s,t){et(t,!0);let a=T(t,"components",23,()=>[]),n=T(t,"data_0",3,null),o=T(t,"data_1",3,null);rt(()=>t.stores.page.set(t.page)),at(()=>{t.stores,t.page,t.constructors,a(),t.form,n(),o(),t.stores.page.notify()});let e=b(!1),r=b(!1),c=b(null);st(()=>{const i=t.stores.page.subscribe(()=>{u(e)&&(P(r,!0),ot().then(()=>{P(c,document.title||"untitled page",!0)}))});return P(e,!0),i});const p=O(()=>t.constructors[1]);var g=Rt(),f=R(g);{var S=i=>{const m=O(()=>t.constructors[0]);var d=D(),E=R(d);L(E,()=>u(m),(l,h)=>{I(h(l,{get data(){return n()},get form(){return t.form},get params(){return t.page.params},children:(y,bt)=>{var V=D(),Y=R(V);L(Y,()=>u(p),(B,F)=>{I(F(B,{get data(){return o()},get form(){return t.form},get params(){return t.page.params}}),G=>a()[1]=G,()=>a()?.[1])}),v(y,V)},$$slots:{default:!0}}),y=>a()[0]=y,()=>a()?.[0])}),v(i,d)},C=i=>{const m=O(()=>t.constructors[0]);var d=D(),E=R(d);L(E,()=>u(m),(l,h)=>{I(h(l,{get data(){return n()},get form(){return t.form},get params(){return t.page.params}}),y=>a()[0]=y,()=>a()?.[0])}),v(i,d)};A(f,i=>{t.constructors[1]?i(S):i(C,-1)})}var M=nt(f,2);{var N=i=>{var m=yt(),d=_t(m);{var E=l=>{var h=ht();ut(()=>vt(h,u(c))),v(l,h)};A(d,l=>{u(r)&&l(E)})}ct(m),v(i,m)};A(M,i=>{u(e)&&i(N)})}v(s,g),it()}const It=gt(Pt),Lt=[()=>_(()=>import("../nodes/0.Bv_TwEnq.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10]),import.meta.url),()=>_(()=>import("../nodes/1.7lffTIeb.js"),__vite__mapDeps([11,1,2,12,5,6,3,4,13]),import.meta.url),()=>_(()=>import("../nodes/2.iMIqsE7n.js"),__vite__mapDeps([14,1,2,3,4,12,5,7,15,8,16,17,18,19,20,21,22,23,24]),import.meta.url),()=>_(()=>import("../nodes/3.CArnSHOO.js"),__vite__mapDeps([25,1,2,12,5,3,4,17,18,19,20,21,22,26]),import.meta.url),()=>_(()=>import("../nodes/4.BFYS2g9C.js"),__vite__mapDeps([27,1,2,3,4,12,28,17,18,22,29]),import.meta.url),()=>_(()=>import("../nodes/5.DziEu9rx.js"),__vite__mapDeps([30,1,2,3,4,21,17,18,22,31]),import.meta.url),()=>_(()=>import("../nodes/6.B8l1RwkB.js"),__vite__mapDeps([32,1,2,3,4,12,5,33,28,7,15,16,17,18,34,19,23,35]),import.meta.url),()=>_(()=>import("../nodes/7.BPyfhDis.js"),__vite__mapDeps([36,1,2,12,3,4,33,5,16,18,34,37,20,38,39]),import.meta.url),()=>_(()=>import("../nodes/8.D_vszZ9E.js"),__vite__mapDeps([40,1,2,3,4,12,5,23,41]),import.meta.url),()=>_(()=>import("../nodes/9.Drah-do-.js"),__vite__mapDeps([42,1,2,3,4,12,6,5,43]),import.meta.url),()=>_(()=>import("../nodes/10.ChiIrIDl.js"),__vite__mapDeps([44,1,2,3,4,12,5,15,8,9,16,17,18,34,23,45]),import.meta.url),()=>_(()=>import("../nodes/11.DO3vyXEv.js"),__vite__mapDeps([46,47,1,2,12,3,4,5,6,28,18,34,37,20,38,17,23,48]),import.meta.url)],Vt=[0],xt={"/":[-3],"/activity":[-4],"/config":[-5],"/neurolink":[-6],"/project":[6],"/session/[id]":[7],"/sos":[8],"/sos/[id]":[9],"/terminals":[10],"/terminals/[id]":[11]},w={handleError:(({error:s})=>{console.error(s)}),reroute:(()=>{}),transport:{}},pt=Object.fromEntries(Object.entries(w.transport).map(([s,t])=>[s,t.decode])),jt=Object.fromEntries(Object.entries(w.transport).map(([s,t])=>[s,t.encode])),kt=!1,wt=(s,t)=>pt[s](t);export{wt as decode,pt as decoders,xt as dictionary,jt as encoders,kt as hash,w as hooks,Dt as matchers,Lt as nodes,It as root,Vt as server_loads};
@@ -0,0 +1 @@
1
+ import{l as o,a as r}from"../chunks/Bj5wFimK.js";export{o as load_css,r as start};
@@ -0,0 +1,2 @@
1
+ )�import{l as o,a as r}from"../chunks/Bj5wFimK.js";export{o as load_css,r as start};
2
+ 
@@ -1,4 +1,4 @@
1
- import{a as V,e as F,f as G,c as H}from"../chunks/BPDiEZo0.js";import{p as J,E as Q,v as X,t as Y,w as Z,b as y,c as a,d as i,g as c,r as s,B as g,s as $,x as k}from"../chunks/DWmC0QM7.js";import{P as tt,B as et,a as at,c as v,s as p}from"../chunks/B1bOvemT.js";import{g as st}from"../chunks/BfbPKMXz.js";import{p as nt}from"../chunks/CZg4kn4E.js";import{B as rt}from"../chunks/Bn-6X1BO.js";import{S as ot}from"../chunks/CG453M9q.js";import{T as it}from"../chunks/CSjf4fBs.js";const lt=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
1
+ import{a as V,e as F,f as G,c as H}from"../chunks/BPDiEZo0.js";import{p as J,E as Q,v as X,t as Y,w as Z,b as y,c as a,d as i,g as c,r as s,B as g,s as $,x as k}from"../chunks/DWmC0QM7.js";import{P as tt,B as et,a as at,c as v,s as p}from"../chunks/B1bOvemT.js";import{g as st}from"../chunks/Bj5wFimK.js";import{p as nt}from"../chunks/fcNfTA-E.js";import{B as rt}from"../chunks/Bn-6X1BO.js";import{S as ot}from"../chunks/CG453M9q.js";import{T as it}from"../chunks/CSjf4fBs.js";const lt=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
2
2
  <rect x="3" y="3" width="7" height="7"/>
3
3
  <rect x="14" y="3" width="7" height="7"/>
4
4
  <rect x="3" y="14" width="7" height="7"/>
@@ -1 +1 @@
1
- import{i as b,a as c,e as J,f as K,s as k,c as L,t as d}from"../chunks/BPDiEZo0.js";import{F as M,G as N,E as w,I as P,J as y,K as q,g as G,L as z,M as C,N as O,p as Q,t as j,w as R,c as f,d as g,D as U,$ as V,r as v}from"../chunks/DWmC0QM7.js";import{h as W}from"../chunks/2rBV5OkJ.js";import{g as X}from"../chunks/BfbPKMXz.js";import{p as Y}from"../chunks/CZg4kn4E.js";import{B as $}from"../chunks/B1bOvemT.js";function Z(n=!1){const r=M,s=r.l.u;if(!s)return;let p=()=>z(r.s);if(n){let i=0,a={};const _=C(()=>{let l=!1;const m=r.s;for(const o in m)m[o]!==a[o]&&(a[o]=m[o],l=!0);return l&&i++,i});p=()=>G(_)}s.b.length&&N(()=>{B(r,p),y(s.b)}),w(()=>{const i=P(()=>s.m.map(q));return()=>{for(const a of i)typeof a=="function"&&a()}}),s.a.length&&w(()=>{B(r,p),y(s.a)})}function B(n,r){if(n.l.s)for(const s of n.l.s)G(s);r()}O();var ee=K('<main class="error-page svelte-1j96wlh"><div class="error-content svelte-1j96wlh"><div class="error-code svelte-1j96wlh"> </div> <h1 class="error-title svelte-1j96wlh"><!></h1> <p class="error-message svelte-1j96wlh"><!></p> <div class="error-actions svelte-1j96wlh"><!> <!></div></div></main>');function ie(n,r){Q(r,!1);const s=()=>L(Y,"$page",p),[p,i]=J();Z();var a=ee();W("1j96wlh",e=>{U(()=>{V.title="Error - Shooter"})});var _=f(a),l=f(_),m=f(l,!0);v(l);var o=g(l,2),E=f(o);{var S=e=>{var t=d("Page not found");c(e,t)},T=e=>{var t=d("Something went wrong");c(e,t)};b(E,e=>{s().status===404?e(S):e(T,-1)})}v(o);var u=g(o,2),A=f(u);{var D=e=>{var t=d();j(()=>k(t,s().error.message)),c(e,t)},F=e=>{var t=d("The page you're looking for doesn't exist or has been moved.");c(e,t)},H=e=>{var t=d("An unexpected error occurred. Try refreshing or going back.");c(e,t)};b(A,e=>{s().error?.message?e(D):s().status===404?e(F,1):e(H,-1)})}v(u);var h=g(u,2),x=f(h);$(x,{text:"Go Home",classes:"btn-primary",onclick:()=>{X("/")}});var I=g(x,2);$(I,{text:"Go Back",classes:"btn-secondary",onclick:()=>{history.back()}}),v(h),v(_),v(a),j(()=>k(m,s().status)),c(n,a),R(),i()}export{ie as component};
1
+ import{i as b,a as c,e as J,f as K,s as k,c as L,t as d}from"../chunks/BPDiEZo0.js";import{F as M,G as N,E as w,I as P,J as y,K as q,g as G,L as z,M as C,N as O,p as Q,t as j,w as R,c as f,d as g,D as U,$ as V,r as v}from"../chunks/DWmC0QM7.js";import{h as W}from"../chunks/2rBV5OkJ.js";import{g as X}from"../chunks/Bj5wFimK.js";import{p as Y}from"../chunks/fcNfTA-E.js";import{B as $}from"../chunks/B1bOvemT.js";function Z(n=!1){const r=M,s=r.l.u;if(!s)return;let p=()=>z(r.s);if(n){let i=0,a={};const _=C(()=>{let l=!1;const m=r.s;for(const o in m)m[o]!==a[o]&&(a[o]=m[o],l=!0);return l&&i++,i});p=()=>G(_)}s.b.length&&N(()=>{B(r,p),y(s.b)}),w(()=>{const i=P(()=>s.m.map(q));return()=>{for(const a of i)typeof a=="function"&&a()}}),s.a.length&&w(()=>{B(r,p),y(s.a)})}function B(n,r){if(n.l.s)for(const s of n.l.s)G(s);r()}O();var ee=K('<main class="error-page svelte-1j96wlh"><div class="error-content svelte-1j96wlh"><div class="error-code svelte-1j96wlh"> </div> <h1 class="error-title svelte-1j96wlh"><!></h1> <p class="error-message svelte-1j96wlh"><!></p> <div class="error-actions svelte-1j96wlh"><!> <!></div></div></main>');function ie(n,r){Q(r,!1);const s=()=>L(Y,"$page",p),[p,i]=J();Z();var a=ee();W("1j96wlh",e=>{U(()=>{V.title="Error - Shooter"})});var _=f(a),l=f(_),m=f(l,!0);v(l);var o=g(l,2),E=f(o);{var S=e=>{var t=d("Page not found");c(e,t)},T=e=>{var t=d("Something went wrong");c(e,t)};b(E,e=>{s().status===404?e(S):e(T,-1)})}v(o);var u=g(o,2),A=f(u);{var D=e=>{var t=d();j(()=>k(t,s().error.message)),c(e,t)},F=e=>{var t=d("The page you're looking for doesn't exist or has been moved.");c(e,t)},H=e=>{var t=d("An unexpected error occurred. Try refreshing or going back.");c(e,t)};b(A,e=>{s().error?.message?e(D):s().status===404?e(F,1):e(H,-1)})}v(u);var h=g(u,2),x=f(h);$(x,{text:"Go Home",classes:"btn-primary",onclick:()=>{X("/")}});var I=g(x,2);$(I,{text:"Go Back",classes:"btn-secondary",onclick:()=>{history.back()}}),v(h),v(_),v(a),j(()=>k(m,s().status)),c(n,a),R(),i()}export{ie as component};
@@ -1,2 +1,2 @@
1
- import{p as fe,j as Ve,i as H,a as _,s as D,f as b,t as We}from"../chunks/BPDiEZo0.js";import{p as ke,v as $e,A as _e,w as De,b as i,c as n,r as s,t as K,g as e,s as P,x as C,q as Ke,d as c,B as he,y as Ye,D as Ue,$ as Xe}from"../chunks/DWmC0QM7.js";import{T as Pe,s as Le,d as le,f as et,e as ge,C as tt,S as at,I as st,B as ne,b as Be,c as Ae,i as rt,P as Ie,g as nt}from"../chunks/B1bOvemT.js";import{h as lt}from"../chunks/2rBV5OkJ.js";import{g as Oe}from"../chunks/BfbPKMXz.js";import{R as it,S as ot}from"../chunks/CJulw9ux.js";import{S as ct}from"../chunks/CG453M9q.js";import{T as dt}from"../chunks/CSjf4fBs.js";import{c as ut,s as Ee,g as vt}from"../chunks/xs1Xl3_e.js";import{i as mt}from"../chunks/gQJcRhou.js";import"../chunks/BDcFu3l7.js";import{A as pt}from"../chunks/BdtLzPpO.js";import{E as Ne}from"../chunks/DomZZqvG.js";var ft=b("<time> </time>"),ht=b("<time> </time>");function je(ie,d){ke(d,!0);let U=fe(d,"format",3,"long"),L=fe(d,"updateInterval",3,6e4),B=fe(d,"tooltip",3,!1),v=C(()=>d.date instanceof Date?d.date:new Date(d.date)),w=C(()=>e(v).toISOString()),M=C(()=>e(v).toLocaleString(d.locale,{dateStyle:"full",timeStyle:"short"})),x=P("");function h(){const S=Date.now(),f=e(v).getTime()-S,u=Math.abs(f),g=Math.round(u/1e3),J=Math.round(u/6e4),R=Math.round(u/36e5),z=Math.round(u/864e5),F=Math.round(u/6048e5),ee=Math.round(u/2592e6),Q=Math.round(u/31536e6),te=new Intl.RelativeTimeFormat(d.locale,{style:U()});let A,o;g<60?(A="second",o=g):J<60?(A="minute",o=J):R<24?(A="hour",o=R):z<7?(A="day",o=z):F<4?(A="week",o=F):ee<12?(A="month",o=ee):(A="year",o=Q);const E=f<0?-1:1;return te.format(E*o,A)}function O(){i(x,h(),!0)}$e(()=>{if(O(),L()>0){const S=setInterval(O,L());return()=>clearInterval(S)}});var X=Ve(),oe=_e(X);{var ce=S=>{Pe(S,{get text(){return e(M)},children:(m,f)=>{var u=ft(),g=n(u,!0);s(u),K(()=>{Le(u,1,`relative-time ${d.classes??""??""}`,"svelte-o98vko"),le(u,"datetime",e(w)),le(u,"data-pw",typeof d.testId=="string"?d.testId:null),D(g,e(x))}),_(m,u)},$$slots:{default:!0}})},q=S=>{var m=ht(),f=n(m,!0);s(m),K(()=>{Le(m,1,`relative-time ${d.classes??""??""}`,"svelte-o98vko"),le(m,"datetime",e(w)),le(m,"data-pw",typeof d.testId=="string"?d.testId:null),D(f,e(x))}),_(S,m)};H(oe,S=>{B()?S(ce):S(q,-1)})}_(ie,X),De()}var gt=b('<div class="section svelte-plslui"><span class="section-label svelte-plslui">Quick Launch</span> <div class="preset-grid svelte-plslui"></div></div> <div class="section svelte-plslui"><span class="section-label svelte-plslui">Working Directory</span> <!> <div class="custom-cwd-group svelte-plslui"><!></div></div> <!> <!>',1);function _t(ie,d){ke(d,!0);let U=fe(d,"open",15,!1);const L=[{args:[],command:"claude",label:"Claude Code"},{args:[],command:"codex",label:"Codex"},{args:[],command:"gemini",label:"Gemini"},{args:[],command:"qwen",label:"Qwen"},{args:[],command:"cursor-agent",label:"Cursor"},{args:[],command:"copilot",label:"Copilot"},{args:[],command:"amp",label:"Amp"},{args:[],command:"opencode",label:"OpenCode"},{args:[],command:"zsh",label:"Shell / zsh"},{args:[],command:"bash",label:"Bash"}];let B=P(0),v=P(Ke([])),w=P(""),M=P(""),x=P(!1),h=P("");$e(()=>{O()});async function O(){try{const m=await fetch("/api/sessions?limit=50&offset=0",{headers:{Authorization:`Bearer ${d.apiKey}`}});if(!m.ok)return;const u=(await m.json()).projects.map(g=>g.fullPath).filter(g=>typeof g=="string"&&g.length>0);i(v,[...new Set(u)],!0),e(v).length>0&&!e(w)&&i(w,e(v)[0],!0)}catch{}}function X(m){i(B,m,!0)}function oe(){return L[e(B)].command}function ce(){return L[e(B)].args}function q(){const m=e(M).trim();return m||(e(w)?e(w):"/tmp")}async function S(){const m=oe();if(m){i(x,!0),i(h,"");try{const f=await fetch("/api/terminals",{body:JSON.stringify({args:ce(),command:m,cwd:q()||void 0}),headers:{Authorization:`Bearer ${d.apiKey}`,"Content-Type":"application/json"},method:"POST"});if(!f.ok){const g=await f.json().catch(()=>({}));i(h,(typeof g.error=="string"?g.error:"")||`Failed to launch (${f.status})`,!0);return}const u=await f.json();d.onLaunch(u)}catch{i(h,"Network error — is the server running?")}finally{i(x,!1)}}}et(ie,{side:"bottom",title:"New Terminal",get onclose(){return d.onClose},classes:"launch-sheet",get open(){return U()},set open(f){U(f)},content:f=>{var u=gt(),g=_e(u),J=c(n(g),2);ge(J,23,()=>L,o=>o.label,(o,E,k)=>{{let de=C(()=>e(B)===e(k));tt(o,{mode:"radio",get selected(){return e(de)},onclick:()=>{X(e(k))},classes:"preset-choice",children:(ue,we)=>{he();var ve=We();K(()=>D(ve,e(E).label)),_(ue,ve)},$$slots:{default:!0}})}}),s(J),s(g);var R=c(g,2),z=c(n(R),2);{let o=C(()=>e(v).length>0?e(v).map(k=>({id:k,label:k})):[{id:"",label:"No recent projects"}]),E=C(()=>e(w)?[e(w)]:e(v).length>0?[e(v)[0]]:[""]);at(z,{get items(){return e(o)},get value(){return e(E)},placeholder:"Select a project",onchange:k=>{i(w,k[0]||"",!0)},classes:"launch-select"})}var F=c(z,2),ee=n(F);st(ee,{label:"Or enter a custom path",dataType:"text",placeholder:"/path/to/project",classes:"input-mono launch-input",get value(){return e(M)},set value(o){i(M,o,!0)}}),s(F),s(R);var Q=c(R,2);{let o=C(()=>e(x)?"Launching...":"Launch Terminal");ne(Q,{classes:"btn-launch",get disabled(){return e(x)},onclick:S,get showLoader(){return e(x)},get text(){return e(o)}})}var te=c(Q,2);{var A=o=>{Be(o,{get text(){return e(h)},classes:"banner-error launch-error-banner"})};H(te,o=>{e(h)&&o(A)})}_(f,u)},$$slots:{content:!0}}),De()}var wt=b('<meta name="description" content="Active terminal sessions on this machine"/>'),bt=b("<!> Refresh",1),xt=b('<span class="plus-icon svelte-1ewpmn2">+</span> New Terminal',1),yt=b('<div class="loading-container"></div>'),St=b('<span class="plus-icon svelte-1ewpmn2">+</span> New Terminal',1),Ct=b('<span class="terminal-cwd svelte-1ewpmn2"> </span>'),Tt=b('<div class="terminal-preview svelte-1ewpmn2"><span class="terminal-preview-text svelte-1ewpmn2"> </span></div>'),At=b('<a class="terminal-card svelte-1ewpmn2"><div class="terminal-card-header svelte-1ewpmn2"><div class="terminal-card-left svelte-1ewpmn2"><span class="status-indicator status-running svelte-1ewpmn2"><span></span></span> <span class="terminal-command svelte-1ewpmn2"> </span> <!></div> <!></div> <div class="terminal-card-meta svelte-1ewpmn2"><!> <span class="terminal-pid svelte-1ewpmn2"> </span></div> <!></a>'),It=b('<span class="terminal-cwd svelte-1ewpmn2"> </span>'),Pt=b('<div class="terminal-preview svelte-1ewpmn2"><span class="terminal-preview-text svelte-1ewpmn2"> </span></div>'),Lt=b('<a class="terminal-card terminal-card-exited svelte-1ewpmn2"><div class="terminal-card-header svelte-1ewpmn2"><div class="terminal-card-left svelte-1ewpmn2"><span class="status-indicator status-exited svelte-1ewpmn2"><span class="status-dot-static"></span></span> <span class="terminal-command svelte-1ewpmn2"> </span> <!> <!></div> <div class="terminal-card-right svelte-1ewpmn2"><!> <!></div></div> <div class="terminal-card-meta svelte-1ewpmn2"><!></div> <!></a>'),kt=b('<div class="terminals-container svelte-1ewpmn2"><!> <!></div>'),$t=b('<main class="main"><div class="page-header"><div class="page-header-content"><div><h1 class="page-title">Terminals</h1> <p class="page-description">Active terminal sessions on this machine</p></div> <div class="page-actions"><!> <!></div></div></div> <!> <!></main> <!>',1);function Jt(ie,d){ke(d,!0);const U=1e4,L="shooter_terminals",B=["zsh","bash","sh","fish"];let v=P(Ke([])),w=P(!1),M=!1,x=P(null),h=P(null),O=null;const X=C(()=>e(v).filter(t=>t.status==="running")),oe=C(()=>e(v).filter(t=>t.status==="exited"));$e(()=>{ce();const t=vt(L,1e4);t&&(i(v,t,!0),i(w,!1)),q(),O=setInterval(()=>{e(h)?.apiKey&&q()},U)}),Ye(()=>{O&&(clearInterval(O),O=null)});function ce(){try{const t=localStorage.getItem("shooter_config");if(t){const a=JSON.parse(t);mt(a)?i(h,a,!0):(localStorage.removeItem("shooter_config"),i(h,null))}}catch{}}async function q(){if(!(!e(h)?.apiKey||M)){M=!0,e(v).length===0&&i(w,!0);try{const a=await fetch("/api/terminals",{headers:{Authorization:`Bearer ${e(h).apiKey}`}});if(!a.ok){i(x,`Failed to load terminals (HTTP ${a.status})`);return}i(x,null);const r=await a.json();i(v,r.terminals.map(y=>({...y,lastOutput:y.lastOutput??null})),!0),Ee(L,e(v))}catch(t){i(x,"Failed to load terminals"),console.error("Failed to fetch terminals:",t)}finally{i(w,!1),M=!1}}}async function S(){i(w,!0),ut(L),await q()}function m(){Oe("/config")}let f=P(!1);function u(){i(f,!0)}function g(){i(f,!1)}function J(t){i(f,!1),Oe(`/terminals/${t.id}`)}function R(t){const a=t.split("/").pop()||t;return pt.includes(a)?"ai":(B.includes(a),"shell")}function z(t){return t.status==="exited"?{class:"pill-badge-ended",label:"ENDED"}:R(t.command)==="ai"?{class:"pill-badge-ai",label:"AI"}:{class:"pill-badge-shell",label:"SHELL"}}function F(t,a=40){if(t.length<=a)return t;const r=t.split("/");return r.length<=3?t:`${r[0]}/.../${r.slice(-2).join("/")}`}function ee(t){return t.replace(/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\x1b\[[\?]?[0-9;]*[a-zA-Z]|\x1b/g,"").replace(/[\x00-\x1f]/g,"").trim()}function Q(t,a=80){if(!t)return"";const r=t.split(`
1
+ import{p as fe,j as Ve,i as H,a as _,s as D,f as b,t as We}from"../chunks/BPDiEZo0.js";import{p as ke,v as $e,A as _e,w as De,b as i,c as n,r as s,t as K,g as e,s as P,x as C,q as Ke,d as c,B as he,y as Ye,D as Ue,$ as Xe}from"../chunks/DWmC0QM7.js";import{T as Pe,s as Le,d as le,f as et,e as ge,C as tt,S as at,I as st,B as ne,b as Be,c as Ae,i as rt,P as Ie,g as nt}from"../chunks/B1bOvemT.js";import{h as lt}from"../chunks/2rBV5OkJ.js";import{g as Oe}from"../chunks/Bj5wFimK.js";import{R as it,S as ot}from"../chunks/CJulw9ux.js";import{S as ct}from"../chunks/CG453M9q.js";import{T as dt}from"../chunks/CSjf4fBs.js";import{c as ut,s as Ee,g as vt}from"../chunks/xs1Xl3_e.js";import{i as mt}from"../chunks/gQJcRhou.js";import"../chunks/BDcFu3l7.js";import{A as pt}from"../chunks/BdtLzPpO.js";import{E as Ne}from"../chunks/DomZZqvG.js";var ft=b("<time> </time>"),ht=b("<time> </time>");function je(ie,d){ke(d,!0);let U=fe(d,"format",3,"long"),L=fe(d,"updateInterval",3,6e4),B=fe(d,"tooltip",3,!1),v=C(()=>d.date instanceof Date?d.date:new Date(d.date)),w=C(()=>e(v).toISOString()),M=C(()=>e(v).toLocaleString(d.locale,{dateStyle:"full",timeStyle:"short"})),x=P("");function h(){const S=Date.now(),f=e(v).getTime()-S,u=Math.abs(f),g=Math.round(u/1e3),J=Math.round(u/6e4),R=Math.round(u/36e5),z=Math.round(u/864e5),F=Math.round(u/6048e5),ee=Math.round(u/2592e6),Q=Math.round(u/31536e6),te=new Intl.RelativeTimeFormat(d.locale,{style:U()});let A,o;g<60?(A="second",o=g):J<60?(A="minute",o=J):R<24?(A="hour",o=R):z<7?(A="day",o=z):F<4?(A="week",o=F):ee<12?(A="month",o=ee):(A="year",o=Q);const E=f<0?-1:1;return te.format(E*o,A)}function O(){i(x,h(),!0)}$e(()=>{if(O(),L()>0){const S=setInterval(O,L());return()=>clearInterval(S)}});var X=Ve(),oe=_e(X);{var ce=S=>{Pe(S,{get text(){return e(M)},children:(m,f)=>{var u=ft(),g=n(u,!0);s(u),K(()=>{Le(u,1,`relative-time ${d.classes??""??""}`,"svelte-o98vko"),le(u,"datetime",e(w)),le(u,"data-pw",typeof d.testId=="string"?d.testId:null),D(g,e(x))}),_(m,u)},$$slots:{default:!0}})},q=S=>{var m=ht(),f=n(m,!0);s(m),K(()=>{Le(m,1,`relative-time ${d.classes??""??""}`,"svelte-o98vko"),le(m,"datetime",e(w)),le(m,"data-pw",typeof d.testId=="string"?d.testId:null),D(f,e(x))}),_(S,m)};H(oe,S=>{B()?S(ce):S(q,-1)})}_(ie,X),De()}var gt=b('<div class="section svelte-plslui"><span class="section-label svelte-plslui">Quick Launch</span> <div class="preset-grid svelte-plslui"></div></div> <div class="section svelte-plslui"><span class="section-label svelte-plslui">Working Directory</span> <!> <div class="custom-cwd-group svelte-plslui"><!></div></div> <!> <!>',1);function _t(ie,d){ke(d,!0);let U=fe(d,"open",15,!1);const L=[{args:[],command:"claude",label:"Claude Code"},{args:[],command:"codex",label:"Codex"},{args:[],command:"gemini",label:"Gemini"},{args:[],command:"qwen",label:"Qwen"},{args:[],command:"cursor-agent",label:"Cursor"},{args:[],command:"copilot",label:"Copilot"},{args:[],command:"amp",label:"Amp"},{args:[],command:"opencode",label:"OpenCode"},{args:[],command:"zsh",label:"Shell / zsh"},{args:[],command:"bash",label:"Bash"}];let B=P(0),v=P(Ke([])),w=P(""),M=P(""),x=P(!1),h=P("");$e(()=>{O()});async function O(){try{const m=await fetch("/api/sessions?limit=50&offset=0",{headers:{Authorization:`Bearer ${d.apiKey}`}});if(!m.ok)return;const u=(await m.json()).projects.map(g=>g.fullPath).filter(g=>typeof g=="string"&&g.length>0);i(v,[...new Set(u)],!0),e(v).length>0&&!e(w)&&i(w,e(v)[0],!0)}catch{}}function X(m){i(B,m,!0)}function oe(){return L[e(B)].command}function ce(){return L[e(B)].args}function q(){const m=e(M).trim();return m||(e(w)?e(w):"/tmp")}async function S(){const m=oe();if(m){i(x,!0),i(h,"");try{const f=await fetch("/api/terminals",{body:JSON.stringify({args:ce(),command:m,cwd:q()||void 0}),headers:{Authorization:`Bearer ${d.apiKey}`,"Content-Type":"application/json"},method:"POST"});if(!f.ok){const g=await f.json().catch(()=>({}));i(h,(typeof g.error=="string"?g.error:"")||`Failed to launch (${f.status})`,!0);return}const u=await f.json();d.onLaunch(u)}catch{i(h,"Network error — is the server running?")}finally{i(x,!1)}}}et(ie,{side:"bottom",title:"New Terminal",get onclose(){return d.onClose},classes:"launch-sheet",get open(){return U()},set open(f){U(f)},content:f=>{var u=gt(),g=_e(u),J=c(n(g),2);ge(J,23,()=>L,o=>o.label,(o,E,k)=>{{let de=C(()=>e(B)===e(k));tt(o,{mode:"radio",get selected(){return e(de)},onclick:()=>{X(e(k))},classes:"preset-choice",children:(ue,we)=>{he();var ve=We();K(()=>D(ve,e(E).label)),_(ue,ve)},$$slots:{default:!0}})}}),s(J),s(g);var R=c(g,2),z=c(n(R),2);{let o=C(()=>e(v).length>0?e(v).map(k=>({id:k,label:k})):[{id:"",label:"No recent projects"}]),E=C(()=>e(w)?[e(w)]:e(v).length>0?[e(v)[0]]:[""]);at(z,{get items(){return e(o)},get value(){return e(E)},placeholder:"Select a project",onchange:k=>{i(w,k[0]||"",!0)},classes:"launch-select"})}var F=c(z,2),ee=n(F);st(ee,{label:"Or enter a custom path",dataType:"text",placeholder:"/path/to/project",classes:"input-mono launch-input",get value(){return e(M)},set value(o){i(M,o,!0)}}),s(F),s(R);var Q=c(R,2);{let o=C(()=>e(x)?"Launching...":"Launch Terminal");ne(Q,{classes:"btn-launch",get disabled(){return e(x)},onclick:S,get showLoader(){return e(x)},get text(){return e(o)}})}var te=c(Q,2);{var A=o=>{Be(o,{get text(){return e(h)},classes:"banner-error launch-error-banner"})};H(te,o=>{e(h)&&o(A)})}_(f,u)},$$slots:{content:!0}}),De()}var wt=b('<meta name="description" content="Active terminal sessions on this machine"/>'),bt=b("<!> Refresh",1),xt=b('<span class="plus-icon svelte-1ewpmn2">+</span> New Terminal',1),yt=b('<div class="loading-container"></div>'),St=b('<span class="plus-icon svelte-1ewpmn2">+</span> New Terminal',1),Ct=b('<span class="terminal-cwd svelte-1ewpmn2"> </span>'),Tt=b('<div class="terminal-preview svelte-1ewpmn2"><span class="terminal-preview-text svelte-1ewpmn2"> </span></div>'),At=b('<a class="terminal-card svelte-1ewpmn2"><div class="terminal-card-header svelte-1ewpmn2"><div class="terminal-card-left svelte-1ewpmn2"><span class="status-indicator status-running svelte-1ewpmn2"><span></span></span> <span class="terminal-command svelte-1ewpmn2"> </span> <!></div> <!></div> <div class="terminal-card-meta svelte-1ewpmn2"><!> <span class="terminal-pid svelte-1ewpmn2"> </span></div> <!></a>'),It=b('<span class="terminal-cwd svelte-1ewpmn2"> </span>'),Pt=b('<div class="terminal-preview svelte-1ewpmn2"><span class="terminal-preview-text svelte-1ewpmn2"> </span></div>'),Lt=b('<a class="terminal-card terminal-card-exited svelte-1ewpmn2"><div class="terminal-card-header svelte-1ewpmn2"><div class="terminal-card-left svelte-1ewpmn2"><span class="status-indicator status-exited svelte-1ewpmn2"><span class="status-dot-static"></span></span> <span class="terminal-command svelte-1ewpmn2"> </span> <!> <!></div> <div class="terminal-card-right svelte-1ewpmn2"><!> <!></div></div> <div class="terminal-card-meta svelte-1ewpmn2"><!></div> <!></a>'),kt=b('<div class="terminals-container svelte-1ewpmn2"><!> <!></div>'),$t=b('<main class="main"><div class="page-header"><div class="page-header-content"><div><h1 class="page-title">Terminals</h1> <p class="page-description">Active terminal sessions on this machine</p></div> <div class="page-actions"><!> <!></div></div></div> <!> <!></main> <!>',1);function Jt(ie,d){ke(d,!0);const U=1e4,L="shooter_terminals",B=["zsh","bash","sh","fish"];let v=P(Ke([])),w=P(!1),M=!1,x=P(null),h=P(null),O=null;const X=C(()=>e(v).filter(t=>t.status==="running")),oe=C(()=>e(v).filter(t=>t.status==="exited"));$e(()=>{ce();const t=vt(L,1e4);t&&(i(v,t,!0),i(w,!1)),q(),O=setInterval(()=>{e(h)?.apiKey&&q()},U)}),Ye(()=>{O&&(clearInterval(O),O=null)});function ce(){try{const t=localStorage.getItem("shooter_config");if(t){const a=JSON.parse(t);mt(a)?i(h,a,!0):(localStorage.removeItem("shooter_config"),i(h,null))}}catch{}}async function q(){if(!(!e(h)?.apiKey||M)){M=!0,e(v).length===0&&i(w,!0);try{const a=await fetch("/api/terminals",{headers:{Authorization:`Bearer ${e(h).apiKey}`}});if(!a.ok){i(x,`Failed to load terminals (HTTP ${a.status})`);return}i(x,null);const r=await a.json();i(v,r.terminals.map(y=>({...y,lastOutput:y.lastOutput??null})),!0),Ee(L,e(v))}catch(t){i(x,"Failed to load terminals"),console.error("Failed to fetch terminals:",t)}finally{i(w,!1),M=!1}}}async function S(){i(w,!0),ut(L),await q()}function m(){Oe("/config")}let f=P(!1);function u(){i(f,!0)}function g(){i(f,!1)}function J(t){i(f,!1),Oe(`/terminals/${t.id}`)}function R(t){const a=t.split("/").pop()||t;return pt.includes(a)?"ai":(B.includes(a),"shell")}function z(t){return t.status==="exited"?{class:"pill-badge-ended",label:"ENDED"}:R(t.command)==="ai"?{class:"pill-badge-ai",label:"AI"}:{class:"pill-badge-shell",label:"SHELL"}}function F(t,a=40){if(t.length<=a)return t;const r=t.split("/");return r.length<=3?t:`${r[0]}/.../${r.slice(-2).join("/")}`}function ee(t){return t.replace(/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\x1b\[[\?]?[0-9;]*[a-zA-Z]|\x1b/g,"").replace(/[\x00-\x1f]/g,"").trim()}function Q(t,a=80){if(!t)return"";const r=t.split(`
2
2
  `).map(T=>ee(T)).filter(T=>T.trim()),y=r[r.length-1]||"";return y.length<=a?y:`${y.slice(0,a)}...`}function te(t){return t.split("/").pop()||t}async function A(t,a){if(t.preventDefault(),t.stopPropagation(),!!e(h)?.apiKey)try{(await fetch(`/api/terminals/${a}`,{headers:{Authorization:`Bearer ${e(h).apiKey}`},method:"DELETE"})).ok&&(i(v,e(v).filter(y=>y.id!==a),!0),Ee(L,e(v)))}catch(r){console.error("Failed to remove terminal:",r)}}var o=$t();lt("1ewpmn2",t=>{var a=wt();Ue(()=>{Xe.title="Terminals - Shooter"}),_(t,a)});var E=_e(o),k=n(E),de=n(k),ue=c(n(de),2),we=n(ue);ne(we,{classes:"btn-secondary",onclick:S,get disabled(){return e(w)},children:(t,a)=>{var r=bt(),y=_e(r);Ae(y,{get svg(){return it},classes:"icon-14"}),he(),_(t,r)},$$slots:{default:!0}});var ve=c(we,2);ne(ve,{classes:"btn-primary",onclick:u,children:(t,a)=>{var r=xt();he(),_(t,r)},$$slots:{default:!0}}),s(ue),s(de),s(k);var Me=c(k,2);{var Re=t=>{Be(t,{get text(){return e(x)},classes:"banner-error"})};H(Me,t=>{e(x)&&t(Re)})}var ze=c(Me,2);{var Fe=t=>{var a=yt();ge(a,20,()=>Array(4),rt,(r,y)=>{ot(r,{classes:"shimmer-card"})}),s(a),_(t,a)},He=t=>{Ne(t,{title:"Configuration Required",description:"Set up your API credentials to view terminal sessions",icon:r=>{Ae(r,{get svg(){return ct},classes:"icon-24"})},children:(r,y)=>{ne(r,{classes:"btn-primary",onclick:m,text:"Configure Settings"})}})},qe=t=>{Ne(t,{title:"No terminals",description:"Launch a new terminal session to get started. Terminal sessions will appear here once created.",icon:r=>{Ae(r,{get svg(){return dt},classes:"icon-24"})},children:(r,y)=>{ne(r,{classes:"btn-primary",onclick:u,children:(T,l)=>{var Z=St();he(),_(T,Z)},$$slots:{default:!0}})}})},Je=t=>{var a=kt(),r=n(a);ge(r,17,()=>e(X),T=>T.id,(T,l)=>{const Z=C(()=>z(e(l)));var N=At(),G=n(N),V=n(G),W=n(V),be=n(W);s(W);var ae=c(W,2),xe=n(ae,!0);s(ae);var ye=c(ae,2);Ie(ye,{get text(){return e(Z).label},get classes(){return e(Z).class}}),s(V);var me=c(V,2);je(me,{get date(){return e(l).createdAt},format:"narrow",classes:"terminal-time"}),s(G);var se=c(G,2),pe=n(se);{let p=C(()=>e(l).currentCwd||e(l).cwd);Pe(pe,{get text(){return e(p)},position:"bottom",children:(I,$)=>{var j=Ct(),Y=n(j,!0);s(j),K(Ge=>D(Y,Ge),[()=>F(e(l).currentCwd||e(l).cwd)]),_(I,j)},$$slots:{default:!0}})}var re=c(pe,2),Se=n(re);s(re),s(se);var Ce=c(se,2);{var Te=p=>{var I=Tt(),$=n(I),j=n($,!0);s($),s(I),K(Y=>D(j,Y),[()=>Q(e(l).lastOutput)]),_(p,I)};H(Ce,p=>{e(l).lastOutput&&p(Te)})}s(N),K(p=>{le(N,"href",`/terminals/${e(l).id??""}`),Le(be,1,nt(e(l).isActive?"status-dot-active":"status-dot-idle")),D(xe,p),D(Se,`PID ${e(l).pid??""}`)},[()=>te(e(l).command)]),_(T,N)});var y=c(r,2);ge(y,17,()=>e(oe),T=>T.id,(T,l)=>{const Z=C(()=>z(e(l)));var N=Lt(),G=n(N),V=n(G),W=c(n(V),2),be=n(W,!0);s(W);var ae=c(W,2);Ie(ae,{get text(){return e(Z).label},get classes(){return e(Z).class}});var xe=c(ae,2);{var ye=p=>{{let I=C(()=>e(l).exitCode!==0?"pill-exit-error":"pill-exit-ok");Ie(p,{get text(){return`exit ${e(l).exitCode??""}`},get classes(){return e(I)}})}};H(xe,p=>{e(l).exitCode!==null&&p(ye)})}s(V);var me=c(V,2),se=n(me);{let p=C(()=>e(l).exitedAt||e(l).createdAt);je(se,{get date(){return e(p)},format:"narrow",classes:"terminal-time"})}var pe=c(se,2);ne(pe,{classes:"btn-ghost btn-sm btn-remove",onclick:p=>{A(p,e(l).id)},text:"×"}),s(me),s(G);var re=c(G,2),Se=n(re);Pe(Se,{get text(){return e(l).cwd},position:"bottom",children:(p,I)=>{var $=It(),j=n($,!0);s($),K(Y=>D(j,Y),[()=>F(e(l).cwd)]),_(p,$)},$$slots:{default:!0}}),s(re);var Ce=c(re,2);{var Te=p=>{var I=Pt(),$=n(I),j=n($,!0);s($),s(I),K(Y=>D(j,Y),[()=>Q(e(l).lastOutput)]),_(p,I)};H(Ce,p=>{e(l).lastOutput&&p(Te)})}s(N),K(p=>{le(N,"href",`/terminals/${e(l).id??""}`),D(be,p)},[()=>te(e(l).command)]),_(T,N)}),s(a),_(t,a)};H(ze,t=>{e(w)&&e(v).length===0?t(Fe):e(h)?.apiKey?e(v).length===0?t(qe,2):t(Je,-1):t(He,1)})}s(E);var Qe=c(E,2);{var Ze=t=>{_t(t,{get apiKey(){return e(h).apiKey},onClose:g,onLaunch:J,get open(){return e(f)},set open(a){i(f,a,!0)}})};H(Qe,t=>{e(h)?.apiKey&&t(Ze)})}_(ie,o),De()}export{Jt as component};
@@ -1,2 +1,2 @@
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/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};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../chunks/DULfdsh6.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/Bj5wFimK.js";import{p as ra}from"../chunks/fcNfTA-E.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/DULfdsh6.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};
@@ -1,4 +1,4 @@
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:
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/Bj5wFimK.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
2
  ${e.recentOutput.slice(-2e3)}
3
3
 
4
4
  Suggested next step: ${e.step.text}
@@ -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/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.
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/Bj5wFimK.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{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
+ 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/Bj5wFimK.js";import{p as ct}from"../chunks/BjYr_-Ss.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};