claude-mux 0.26.2 → 0.26.3

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 (134) hide show
  1. package/dist/server/ws-handlers.d.ts.map +1 -1
  2. package/dist/server/ws-handlers.js +7 -4
  3. package/dist/server/ws-handlers.js.map +1 -1
  4. package/dist/tmux/pane.d.ts +7 -3
  5. package/dist/tmux/pane.d.ts.map +1 -1
  6. package/dist/tmux/pane.js +35 -13
  7. package/dist/tmux/pane.js.map +1 -1
  8. package/dist/utils/version.d.ts +1 -1
  9. package/dist/utils/version.js +1 -1
  10. package/dist/web/client/_app/immutable/assets/0.CiLJk_Xe.css +1 -0
  11. package/dist/web/client/_app/immutable/chunks/{DmEI2TOa.js → BPG41LQc.js} +13 -13
  12. package/dist/web/client/_app/immutable/chunks/BxK27rIF.js +1 -0
  13. package/dist/web/client/_app/immutable/chunks/DvtCSRbx.js +1 -0
  14. package/dist/web/client/_app/immutable/chunks/Iym5fv6V.js +2 -0
  15. package/{web/.svelte-kit/output/client/_app/immutable/chunks/Cotx9uI_.js → dist/web/client/_app/immutable/chunks/ZzVAGtsj.js} +1 -1
  16. package/dist/web/client/_app/immutable/entry/{app.DXHW0aPL.js → app.BrdmX1nT.js} +2 -2
  17. package/dist/web/client/_app/immutable/entry/start.z3GFCeFl.js +1 -0
  18. package/dist/web/client/_app/immutable/nodes/{0.DAnv2asW.js → 0.DX7LpCH-.js} +1 -1
  19. package/dist/web/client/_app/immutable/nodes/{1.CU8f4oNB.js → 1.LA4NLAbZ.js} +1 -1
  20. package/dist/web/client/_app/immutable/nodes/{2.BYpvCgtu.js → 2.CC3GVyR0.js} +1 -1
  21. package/dist/web/client/_app/immutable/nodes/{3.DuMzeRg3.js → 3.s97PqS3X.js} +1 -1
  22. package/dist/web/client/_app/version.json +1 -1
  23. package/dist/web/server/chunks/{0-C-AAPmon.js → 0-D-tZOQ7R.js} +9 -9
  24. package/dist/web/server/chunks/{0-C-AAPmon.js.map → 0-D-tZOQ7R.js.map} +1 -1
  25. package/dist/web/server/chunks/{1-T_dogl8W.js → 1-CG5NsrbP.js} +3 -3
  26. package/dist/web/server/chunks/{1-T_dogl8W.js.map → 1-CG5NsrbP.js.map} +1 -1
  27. package/dist/web/server/chunks/{2-FlchE_4u.js → 2-yV51EcS-.js} +7 -7
  28. package/dist/web/server/chunks/{2-FlchE_4u.js.map → 2-yV51EcS-.js.map} +1 -1
  29. package/dist/web/server/chunks/{3-U2bTntXU.js → 3-D75yomeT.js} +6 -6
  30. package/dist/web/server/chunks/{3-U2bTntXU.js.map → 3-D75yomeT.js.map} +1 -1
  31. package/dist/web/server/chunks/{_layout.svelte-Ddn9Wu-V.js → _layout.svelte-B22DMQF4.js} +4 -4
  32. package/dist/web/server/chunks/{_layout.svelte-Ddn9Wu-V.js.map → _layout.svelte-B22DMQF4.js.map} +1 -1
  33. package/dist/web/server/chunks/{_page.svelte-_F3qltju.js → _page.svelte-DkZsH6VV.js} +2 -2
  34. package/dist/web/server/chunks/{_page.svelte-_F3qltju.js.map → _page.svelte-DkZsH6VV.js.map} +1 -1
  35. package/dist/web/server/chunks/{_server.ts-C6MJsvPN.js → _server.ts-BLpwF6cO.js} +3 -3
  36. package/dist/web/server/chunks/{_server.ts-C6MJsvPN.js.map → _server.ts-BLpwF6cO.js.map} +1 -1
  37. package/dist/web/server/chunks/{_server.ts-fnuGtMqr.js → _server.ts-BceRCUNN.js} +3 -3
  38. package/dist/web/server/chunks/{_server.ts-fnuGtMqr.js.map → _server.ts-BceRCUNN.js.map} +1 -1
  39. package/dist/web/server/chunks/{_server.ts-Df32fD_Q.js → _server.ts-DLwZHSdd.js} +2 -2
  40. package/dist/web/server/chunks/{_server.ts-Df32fD_Q.js.map → _server.ts-DLwZHSdd.js.map} +1 -1
  41. package/dist/web/server/chunks/{_server.ts-CNU4yPZZ.js → _server.ts-IZp35sUH.js} +4 -2
  42. package/dist/web/server/chunks/_server.ts-IZp35sUH.js.map +1 -0
  43. package/dist/web/server/chunks/{_server.ts-CtsPyICr.js → _server.ts-ilTVJ4A9.js} +2 -2
  44. package/dist/web/server/chunks/{_server.ts-CtsPyICr.js.map → _server.ts-ilTVJ4A9.js.map} +1 -1
  45. package/dist/web/server/chunks/{_server.ts-C00ejke7.js → _server.ts-pihD3w10.js} +2 -2
  46. package/dist/web/server/chunks/{_server.ts-C00ejke7.js.map → _server.ts-pihD3w10.js.map} +1 -1
  47. package/dist/web/server/chunks/{_server.ts-BBrtrcEt.js → _server.ts-xXEIfBqh.js} +2 -2
  48. package/dist/web/server/chunks/{_server.ts-BBrtrcEt.js.map → _server.ts-xXEIfBqh.js.map} +1 -1
  49. package/dist/web/server/chunks/{button-C1GVS_oY.js → button-svhFQKMs.js} +21 -3
  50. package/dist/web/server/chunks/{button-C1GVS_oY.js.map → button-svhFQKMs.js.map} +1 -1
  51. package/dist/web/server/chunks/{hooks.server-DG_lyHkY.js → hooks.server-BschOmH0.js} +3 -3
  52. package/dist/web/server/chunks/{hooks.server-DG_lyHkY.js.map → hooks.server-BschOmH0.js.map} +1 -1
  53. package/dist/web/server/chunks/{ws-handlers-BQ2RtlNl.js → ws-handlers-DmdbIqkc.js} +61 -16
  54. package/dist/web/server/chunks/ws-handlers-DmdbIqkc.js.map +1 -0
  55. package/dist/web/server/chunks/{ws-managers-DLQiiQnX.js → ws-managers-Cw_QNOpo.js} +2 -2
  56. package/dist/web/server/chunks/{ws-managers-DLQiiQnX.js.map → ws-managers-Cw_QNOpo.js.map} +1 -1
  57. package/dist/web/server/index.js +2 -2
  58. package/dist/web/server/index.js.map +1 -1
  59. package/dist/web/server/manifest.js +17 -17
  60. package/dist/web/server/manifest.js.map +1 -1
  61. package/package.json +1 -1
  62. package/src/server/ws-handlers.ts +6 -4
  63. package/src/tmux/pane.ts +35 -11
  64. package/src/utils/version.ts +1 -1
  65. package/tests/tmux/activity-line.test.ts +47 -0
  66. package/web/.svelte-kit/adapter-bun/.vite/manifest.json +3 -7
  67. package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_layout.6tlxP3iE.css +1 -0
  68. package/web/.svelte-kit/adapter-bun/chunks/button.js +21 -0
  69. package/web/.svelte-kit/adapter-bun/chunks/internal2.js +1 -1
  70. package/web/.svelte-kit/adapter-bun/chunks/ws-handlers.js +45 -15
  71. package/web/.svelte-kit/adapter-bun/chunks/ws-managers.js +1 -1
  72. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/projects/new-session/_server.ts.js +3 -1
  73. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_server.ts.js +1 -1
  74. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/settings/_server.ts.js +1 -1
  75. package/web/.svelte-kit/adapter-bun/entries/pages/_layout.svelte.js +2 -2
  76. package/web/.svelte-kit/adapter-bun/manifest-full.js +1 -1
  77. package/web/.svelte-kit/adapter-bun/manifest.js +1 -1
  78. package/web/.svelte-kit/adapter-bun/nodes/0.js +2 -2
  79. package/web/.svelte-kit/adapter-bun/nodes/1.js +1 -1
  80. package/web/.svelte-kit/adapter-bun/nodes/2.js +1 -1
  81. package/web/.svelte-kit/adapter-bun/nodes/3.js +1 -1
  82. package/web/.svelte-kit/generated/server/internal.js +1 -1
  83. package/web/.svelte-kit/output/client/.vite/manifest.json +60 -60
  84. package/web/.svelte-kit/output/client/_app/immutable/assets/0.CiLJk_Xe.css +1 -0
  85. package/web/.svelte-kit/output/client/_app/immutable/chunks/{DmEI2TOa.js → BPG41LQc.js} +13 -13
  86. package/web/.svelte-kit/output/client/_app/immutable/chunks/BxK27rIF.js +1 -0
  87. package/web/.svelte-kit/output/client/_app/immutable/chunks/DvtCSRbx.js +1 -0
  88. package/web/.svelte-kit/output/client/_app/immutable/chunks/Iym5fv6V.js +2 -0
  89. package/{dist/web/client/_app/immutable/chunks/Cotx9uI_.js → web/.svelte-kit/output/client/_app/immutable/chunks/ZzVAGtsj.js} +1 -1
  90. package/web/.svelte-kit/output/client/_app/immutable/entry/{app.DXHW0aPL.js → app.BrdmX1nT.js} +2 -2
  91. package/web/.svelte-kit/output/client/_app/immutable/entry/start.z3GFCeFl.js +1 -0
  92. package/web/.svelte-kit/output/client/_app/immutable/nodes/{0.DAnv2asW.js → 0.DX7LpCH-.js} +1 -1
  93. package/web/.svelte-kit/output/client/_app/immutable/nodes/{1.CU8f4oNB.js → 1.LA4NLAbZ.js} +1 -1
  94. package/web/.svelte-kit/output/client/_app/immutable/nodes/{2.BYpvCgtu.js → 2.CC3GVyR0.js} +1 -1
  95. package/web/.svelte-kit/output/client/_app/immutable/nodes/{3.DuMzeRg3.js → 3.s97PqS3X.js} +1 -1
  96. package/web/.svelte-kit/output/client/_app/version.json +1 -1
  97. package/web/.svelte-kit/output/server/.vite/manifest.json +3 -7
  98. package/web/.svelte-kit/output/server/_app/immutable/assets/_layout.6tlxP3iE.css +1 -0
  99. package/web/.svelte-kit/output/server/chunks/button.js +21 -0
  100. package/web/.svelte-kit/output/server/chunks/internal2.js +1 -1
  101. package/web/.svelte-kit/output/server/chunks/ws-handlers.js +45 -15
  102. package/web/.svelte-kit/output/server/chunks/ws-managers.js +1 -1
  103. package/web/.svelte-kit/output/server/entries/endpoints/api/projects/new-session/_server.ts.js +3 -1
  104. package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_server.ts.js +1 -1
  105. package/web/.svelte-kit/output/server/entries/endpoints/api/settings/_server.ts.js +1 -1
  106. package/web/.svelte-kit/output/server/entries/pages/_layout.svelte.js +2 -2
  107. package/web/.svelte-kit/output/server/manifest-full.js +1 -1
  108. package/web/.svelte-kit/output/server/manifest.js +1 -1
  109. package/web/.svelte-kit/output/server/nodes/0.js +2 -2
  110. package/web/.svelte-kit/output/server/nodes/1.js +1 -1
  111. package/web/.svelte-kit/output/server/nodes/2.js +1 -1
  112. package/web/.svelte-kit/output/server/nodes/3.js +1 -1
  113. package/web/src/lib/actions/longPress.ts +52 -6
  114. package/web/src/lib/components/AllSessionsPanel.svelte +12 -3
  115. package/web/src/lib/stores/websocket-base.svelte.ts +24 -1
  116. package/web/src/routes/api/projects/new-session/+server.ts +3 -0
  117. package/dist/web/client/_app/immutable/assets/0.DwaaTdPO.css +0 -1
  118. package/dist/web/client/_app/immutable/chunks/1pIWnoD_.js +0 -1
  119. package/dist/web/client/_app/immutable/chunks/DfoR1zCV.js +0 -1
  120. package/dist/web/client/_app/immutable/chunks/DtVU-s3j.js +0 -2
  121. package/dist/web/client/_app/immutable/entry/start.CchjowOg.js +0 -1
  122. package/dist/web/server/chunks/_server.ts-CNU4yPZZ.js.map +0 -1
  123. package/dist/web/server/chunks/geometry-CUMMOI9q.js +0 -46
  124. package/dist/web/server/chunks/geometry-CUMMOI9q.js.map +0 -1
  125. package/dist/web/server/chunks/ws-handlers-BQ2RtlNl.js.map +0 -1
  126. package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_layout.Bpy37C6o.css +0 -1
  127. package/web/.svelte-kit/adapter-bun/chunks/geometry.js +0 -32
  128. package/web/.svelte-kit/output/client/_app/immutable/assets/0.DwaaTdPO.css +0 -1
  129. package/web/.svelte-kit/output/client/_app/immutable/chunks/1pIWnoD_.js +0 -1
  130. package/web/.svelte-kit/output/client/_app/immutable/chunks/DfoR1zCV.js +0 -1
  131. package/web/.svelte-kit/output/client/_app/immutable/chunks/DtVU-s3j.js +0 -2
  132. package/web/.svelte-kit/output/client/_app/immutable/entry/start.CchjowOg.js +0 -1
  133. package/web/.svelte-kit/output/server/_app/immutable/assets/_layout.Bpy37C6o.css +0 -1
  134. package/web/.svelte-kit/output/server/chunks/geometry.js +0 -32
@@ -1,2 +0,0 @@
1
- import{a9 as re,bg as pt,bD as mt}from"./RhyL4cOo.js";import{r as ke,o as Se,n as N,i as Ie,b as L,s as B,a as ye,d as _t,c as gt,S as Ke,N as W,H as $,u as Ge,e as yt,m as wt,f as vt,p as j,g as bt,h as Et,j as Xe,k as we,l as ae,q as me,P as At,t as Y,v as ze,w as We,x as Ce}from"./DfoR1zCV.js";class Q{constructor(t,r){this.status=t,typeof r=="string"?this.body={message:r}:r?this.body=r:this.body={message:`Error: ${t}`}}toString(){return JSON.stringify(this.body)}}class Re{constructor(t,r){try{new Headers({location:r})}catch{throw new Error(`Invalid redirect location ${JSON.stringify(r)}: this string contains characters that cannot be used in HTTP headers`)}this.status=t,this.location=r}}class Pe extends Error{constructor(t,r,a){super(a),this.status=t,this.text=r}}const kt=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/,St=/^\/\((?:[^)]+)\)$/;function It(e){const t=[];return{pattern:e==="/"||St.test(e)?/^\/$/:new RegExp(`^${Pt(e).map(a=>{const o=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(a);if(o)return t.push({name:o[1],matcher:o[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const n=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(a);if(n)return t.push({name:n[1],matcher:n[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!a)return;const s=a.split(/\[(.+?)\](?!\])/);return"/"+s.map((c,f)=>{if(f%2){if(c.startsWith("x+"))return _e(String.fromCharCode(parseInt(c.slice(2),16)));if(c.startsWith("u+"))return _e(String.fromCharCode(...c.slice(2).split("-").map(y=>parseInt(y,16))));const l=kt.exec(c),[,h,d,u,p]=l;return t.push({name:u,matcher:p,optional:!!h,rest:!!d,chained:d?f===1&&s[0]==="":!1}),d?"([^]*?)":h?"([^/]*)?":"([^/]+?)"}return _e(c)}).join("")}).join("")}/?$`),params:t}}function Rt(e){return e!==""&&!/^\([^)]+\)$/.test(e)}function Pt(e){return e.slice(1).split("/").filter(Rt)}function Lt(e,t,r){const a={},o=e.slice(1),n=o.filter(i=>i!==void 0);let s=0;for(let i=0;i<t.length;i+=1){const c=t[i];let f=o[i-s];if(c.chained&&c.rest&&s&&(f=o.slice(i-s,i+1).filter(l=>l).join("/"),s=0),f===void 0)if(c.rest)f="";else continue;if(!c.matcher||r[c.matcher](f)){a[c.name]=f;const l=t[i+1],h=o[i+1];l&&!l.rest&&l.optional&&h&&c.chained&&(s=0),!l&&!h&&Object.keys(a).length===n.length&&(s=0);continue}if(c.optional&&c.chained){s++;continue}return}if(!s)return a}function _e(e){return e.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function Tt({nodes:e,server_loads:t,dictionary:r,matchers:a}){const o=new Set(t);return Object.entries(r).map(([i,[c,f,l]])=>{const{pattern:h,params:d}=It(i),u={id:i,exec:p=>{const y=h.exec(p);if(y)return Lt(y,d,a)},errors:[1,...l||[]].map(p=>e[p]),layouts:[0,...f||[]].map(s),leaf:n(c)};return u.errors.length=u.layouts.length=Math.max(u.errors.length,u.layouts.length),u});function n(i){const c=i<0;return c&&(i=~i),[c,e[i]]}function s(i){return i===void 0?i:[o.has(i),e[i]]}}function Je(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function Me(e,t,r=JSON.stringify){const a=r(t);try{sessionStorage[e]=a}catch{}}const Ut=-1,jt=-2,Ot=-3,Nt=-4,xt=-5,Dt=-6,Ct=-7,Ze=2**32-1,ve=Ze-1;function Mt(e){return!(!Number.isInteger(e)||e<0||e>ve)}function Bt(e){return!(!Number.isInteger(e)||e<0||e>Ze)}function Ft(e){return Uint8Array.fromBase64(e).buffer}function $t(e){return Uint8Array.from(Buffer.from(e,"base64")).buffer}function Vt(e){const t=atob(e),r=t.length,a=new Uint8Array(r);for(let o=0;o<r;o++)a[o]=t.charCodeAt(o);return a.buffer}const qt=typeof Uint8Array.fromBase64=="function",Ht=typeof process=="object"&&process.versions?.node!==void 0,Yt=qt?Ft:Ht?$t:Vt;function Kt(e,t){return e}const Gt={fromPrimitive:e=>e,fromISOString:e=>new Date(e),fromStringValue:(e,t)=>e==="URL"?new URL(t):e==="URLSearchParams"?new URLSearchParams(t):Temporal[e.slice(9)].from(t),fromArrayBuffer:e=>e,fromRegExpInfo:(e,t)=>new RegExp(e,t),fromViewInfo:(e,t,r,a)=>{const o=globalThis[e];return r!==void 0?new o(t,r,a):new o(t)},box:e=>Object(e),createArray:e=>new Array(e),createSparseArray:e=>{const t=[];return t[ve]=void 0,delete t[ve],t.length=e,t},createObject:()=>({}),createNullPrototypeObject:()=>Object.create(null),createSet:()=>new Set,createMap:()=>new Map,set:(e,t,r)=>{e[t]=r},addValue:(e,t)=>{e.add(t)},addEntry:(e,t,r)=>{e.set(t,r)}},Xt=Object.freeze(Gt);function zt(e,t,r){const a=Kt(Xt);if(typeof e=="number")return i(e,!0);if(!Array.isArray(e)||e.length===0)throw new Error("Invalid input");const o=e,n=Array(o.length);let s=null;function i(c,f=!1){if(c===Ut)return a.fromPrimitive(void 0);if(c===Ot)return a.fromPrimitive(NaN);if(c===Nt)return a.fromPrimitive(1/0);if(c===xt)return a.fromPrimitive(-1/0);if(c===Dt)return a.fromPrimitive(-0);if(f||typeof c!="number")throw new Error("Invalid input");if(c in n)return n[c];if(c>=o.length)throw new Error("Invalid input");const l=o[c];if(!l||typeof l!="object")n[c]=a.fromPrimitive(l);else if(Array.isArray(l))if(typeof l[0]=="string"){const h=l[0],d=t&&Object.hasOwn(t,h)?t[h]:void 0;if(d){let u=l[1];if(typeof u!="number"&&(u=o.push(l[1])-1),Object.hasOwn(n,u))return n[c]=d(n[u]);if(s??=new Set,s.has(u))throw new Error("Invalid circular reference");return s.add(u),n[c]=d(i(u)),s.delete(u),n[c]}switch(h){case"Date":n[c]=a.fromISOString(l[1]);break;case"Set":const u=a.createSet();n[c]=u;for(let m=1;m<l.length;m+=1)a.addValue(u,i(l[m]));break;case"Map":const p=a.createMap();n[c]=p;for(let m=1;m<l.length;m+=2)a.addEntry(p,i(l[m]),i(l[m+1]));break;case"RegExp":n[c]=a.fromRegExpInfo(l[1],l[2]);break;case"Object":{const m=l[1];if(typeof o[m]=="object"&&o[m][0]!=="BigInt")throw new Error("Invalid input");n[c]=a.box(i(m));break}case"BigInt":n[c]=a.fromPrimitive(BigInt(l[1]));break;case"null":const y=a.createNullPrototypeObject();n[c]=y;for(let m=1;m<l.length;m+=2){if(l[m]==="__proto__")throw new Error("Cannot parse an object with a `__proto__` property");a.set(y,l[m],i(l[m+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(o[l[1]][0]!=="ArrayBuffer")throw new Error("Invalid data");const m=i(l[1]);n[c]=a.fromViewInfo(h,m,l[2],l[3]);break}case"ArrayBuffer":{const m=l[1];if(typeof m!="string")throw new Error("Invalid ArrayBuffer encoding");n[c]=a.fromArrayBuffer(Yt(m));break}case"URL":case"URLSearchParams":case"Temporal.Duration":case"Temporal.Instant":case"Temporal.PlainDate":case"Temporal.PlainTime":case"Temporal.PlainDateTime":case"Temporal.PlainMonthDay":case"Temporal.PlainYearMonth":case"Temporal.ZonedDateTime":{n[c]=a.fromStringValue(h,l[1]);break}default:throw new Error(`Unknown type ${h}`)}}else if(l[0]===Ct){const h=l[1];if(!Bt(h))throw new Error("Invalid input");const d=a.createSparseArray(h);n[c]=d;for(let u=2;u<l.length;u+=2){const p=l[u];if(!Mt(p)||p>=h)throw new Error("Invalid input");a.set(d,p,i(l[u+1]))}}else{const h=a.createArray(l.length);n[c]=h;for(let d=0;d<l.length;d+=1){const u=l[d];u!==jt&&a.set(h,d,i(u))}}else{const h=a.createObject();n[c]=h;for(const d of Object.keys(l)){if(d==="__proto__")throw new Error("Cannot parse an object with a `__proto__` property");a.set(h,d,i(l[d]))}}return n[c]}return i(0)}function Wt(e){return e.filter(t=>t!=null)}const Jt="x-sveltekit-invalidated",Zt="x-sveltekit-trailing-slash";function ee(e,t){return e+"/"+t}function ne(e){return e instanceof Q||e instanceof Pe?e.status:500}function Qt(e){return e instanceof Pe?e.text:"Internal Error"}const er="/__data.json",tr=".html__data.json";function rr(e){return e.endsWith(".html")?e.replace(/\.html$/,tr):e.replace(/\/$/,"")+er}const Be={spanContext(){return ar},setAttribute(){return this},setAttributes(){return this},addEvent(){return this},setStatus(){return this},updateName(){return this},end(){return this},isRecording(){return!1},recordException(){return this},addLink(){return this},addLinks(){return this}},ar={traceId:"",spanId:"",traceFlags:0};async function*nr(e,t){let r=!1,a="";const o=new TextDecoder;for(;;){let n=a.indexOf(t);for(;n!==-1;)yield a.slice(0,n),a=a.slice(n+t.length),n=a.indexOf(t);if(r){a&&(yield a);return}const s=await e.read();r=s.done,s.value&&(a+=o.decode(s.value,{stream:!0})),r&&(a+=o.decode())}}async function*or(e){for await(const t of nr(e,`
2
- `)){const r=t.trim();r&&(yield JSON.parse(r))}}const sr=new Set(["icon","shortcut icon","apple-touch-icon"]);let K=null;const D=Je(ze)??{},J=Je(We)??{},x={url:Ce({}),page:Ce({}),navigating:pt(null),updated:gt()};function Le(e){D[e]=B()}function ir(e,t){let r=e+1;for(;D[r];)delete D[r],r+=1;for(r=t+1;J[r];)delete J[r],r+=1}function q(e,t=!1){return t?location.replace(e.href):location.href=e.href,new Promise(N)}async function Qe(){if("serviceWorker"in navigator){const e=await navigator.serviceWorker.getRegistration(L||"/");e&&await e.update()}}let Te,be,oe,U,Ee,E;const se=[],ie=[];let R=null;function ce(){R?.fork?.then(e=>e?.discard()),R=null,F={element:void 0,href:void 0}}const te=new Map,et=new Set,cr=new Set,X=new Set;let w={branch:[],error:null,url:null},Ue=!1,le=!1,Fe=!0,Z=!1,G=!1,tt=!1,je=!1,rt,S,P,O;const z=new Set,$e=new Map,Ve=new Map;async function kr(e,t,r){if(globalThis.__sveltekit_7677w9.data){const{q:n={},p:s={},l:i={},f:c={}}=globalThis.__sveltekit_7677w9.data;for(const f in n)n[f];for(const f in i)i[f];for(const f in c)c[f];for(const f in s)s[f]}document.URL!==location.href&&(location.href=location.href),E=e,await e.hooks.init?.(),Te=Tt(e),U=document.documentElement,Ee=t,be=e.nodes[0],oe=e.nodes[1],be(),oe(),S=history.state?.[$],P=history.state?.[W],S||(S=P=Date.now(),history.replaceState({...history.state,[$]:S,[W]:P},""));const a=D[S];function o(){a&&(history.scrollRestoration="manual",scrollTo(a.x,a.y))}r?(o(),await yr(Ee,r)):(await V({type:"enter",url:ke(E.hash?br(new URL(location.href)):location.href),replace_state:!0}),o()),gr()}function lr(){se.length=0,je=!1}function at(e){ie.some(t=>t?.snapshot)&&(J[e]=ie.map(t=>t?.snapshot?.capture()))}function nt(e){J[e]?.forEach((t,r)=>{ie[r]?.snapshot?.restore(t)})}function qe(){Le(S),Me(ze,D),at(P),Me(We,J)}async function ot(e,t,r,a){let o,n;t.invalidateAll&&ce(),await V({type:"goto",url:ke(e),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,state:t.state,redirect_count:r,nav_token:a,accept:()=>{if(t.invalidateAll){je=!0,o=new Set;for(const[s,i]of $e)for(const[c,f]of i)f.resource?.reset(),o.add(ee(s,c));n=new Set;for(const[s,i]of Ve)for(const c of i.keys())n.add(ee(s,c))}t.invalidate&&t.invalidate.forEach(_r)}}),t.invalidateAll&&re().then(re).then(()=>{for(const[s,i]of $e)for(const[c,{resource:f}]of i)o?.has(ee(s,c))&&f.start();for(const[s,i]of Ve)for(const[c,{resource:f}]of i)n?.has(ee(s,c))&&f.reconnect()})}async function fr(e){if(e.id!==R?.id){ce();const t={};z.add(t),R={id:e.id,token:t,promise:ct({...e,preload:t}).then(r=>(z.delete(t),r.type==="loaded"&&r.state.error&&ce(),r)),fork:null}}return R.promise}async function ge(e){const t=(await he(e,!1))?.route;t&&await Promise.all([...t.layouts,t.leaf].filter(Boolean).map(r=>r[1]()))}async function st(e,t,r){const a={params:w.params,route:{id:w.route?.id??null},url:new URL(location.href)};if(w={...e.state,nav:a},Ge(e.props.page),rt=new E.root({target:t,props:{...e.props,stores:x,components:ie},hydrate:r,sync:!1,transformError:void 0}),await Promise.resolve(),r){const o={from:null,to:{...a,scroll:D[S]??B()},willUnload:!1,type:"enter",complete:Promise.resolve()};X.forEach(n=>n(o))}nt(P),le=!0}async function fe({url:e,params:t,branch:r,errors:a,status:o,error:n,route:s,form:i}){let c="never";if(L&&(e.pathname===L||e.pathname===L+"/"))c="always";else for(const p of r)p?.slash!==void 0&&(c=p.slash);e.pathname=vt(e.pathname,c),e.search=e.search;const f={type:"loaded",state:{url:e,params:t,branch:r,error:n,route:s},props:{constructors:Wt(r).map(p=>p.node.component),page:De(j)}};i!==void 0&&(f.props.form=i);let l={},h=!j,d=0;for(let p=0;p<Math.max(r.length,w.branch.length);p+=1){const y=r[p],m=w.branch[p];y?.data!==m?.data&&(h=!0),y&&(l={...l,...y.data},h&&(f.props[`data_${d}`]=l),d+=1)}return(!w.url||e.href!==w.url.href||w.error!==n||i!==void 0&&i!==j.form||h)&&(f.props.page={error:n,params:t,route:{id:s?.id??null},state:{},status:o,url:new URL(e),form:i??null,data:h?l:j.data}),f}async function Oe({loader:e,parent:t,url:r,params:a,route:o,server_data_node:n}){let s=null,i=!0;const c={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},f=await e();if(f.universal?.load){let l=function(...d){for(const u of d){const{href:p}=new URL(u,r);c.dependencies.add(p)}};const h={tracing:{enabled:!1,root:Be,current:Be},route:new Proxy(o,{get:(d,u)=>(i&&(c.route=!0),d[u])}),params:new Proxy(a,{get:(d,u)=>(i&&c.params.add(u),d[u])}),data:n?.data??null,url:wt(r,()=>{i&&(c.url=!0)},d=>{i&&c.search_params.add(d)},E.hash),async fetch(d,u){d instanceof Request&&(u={body:d.method==="GET"||d.method==="HEAD"?void 0:await d.blob(),cache:d.cache,credentials:d.credentials,headers:[...d.headers].length>0?d?.headers:void 0,integrity:d.integrity,keepalive:d.keepalive,method:d.method,mode:d.mode,redirect:d.redirect,referrer:d.referrer,referrerPolicy:d.referrerPolicy,signal:d.signal,...u});const{resolved:p,promise:y}=it(d,u,r);return i&&l(p.href),y},setHeaders:N,depends:l,parent(){return i&&(c.parent=!0),t()},untrack(d){i=!1;try{return d()}finally{i=!0}}};s=await f.universal.load.call(null,h)??null}return{node:f,loader:e,server:n,universal:f.universal?.load?{type:"data",data:s,uses:c}:null,data:s??n?.data??null,slash:f.universal?.trailingSlash??n?.slash}}function it(e,t,r){let a=e instanceof Request?e.url:e;const o=new URL(a,r);o.origin===r.origin&&(a=o.href.slice(r.origin.length));const n=le?bt(a,o.href,t):Et(a,t);return{resolved:o,promise:n}}function He(e,t,r,a,o,n){if(je)return!0;if(!o)return!1;if(o.parent&&e||o.route&&t||o.url&&r)return!0;for(const s of o.search_params)if(a.has(s))return!0;for(const s of o.params)if(n[s]!==w.params[s])return!0;for(const s of o.dependencies)if(se.some(i=>i(new URL(s))))return!0;return!1}function Ne(e,t){return e?.type==="data"?e:e?.type==="skip"?t??null:null}function ur(e,t){if(!e)return new Set(t.searchParams.keys());const r=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(const a of r){const o=e.searchParams.getAll(a),n=t.searchParams.getAll(a);o.every(s=>n.includes(s))&&n.every(s=>o.includes(s))&&r.delete(a)}return r}function Ye({error:e,url:t,route:r,params:a}){return{type:"loaded",state:{error:e,url:t,route:r,params:a,branch:[]},props:{page:De(j),constructors:[]}}}async function ct({id:e,invalidating:t,url:r,params:a,route:o,preload:n}){if(R?.id===e)return z.delete(R.token),R.promise;const{errors:s,layouts:i,leaf:c}=o,f=[...i,c];s.forEach(g=>g?.().catch(N)),f.forEach(g=>g?.[1]().catch(N));let l=null;const h=w.url?e!==ue(w.url):!1,d=w.route?o.id!==w.route.id:!1,u=ur(w.url,r);let p=!1;{const g=f.map((v,A)=>{const k=w.branch[A],b=!!v?.[0]&&(k?.loader!==v[1]||He(p,d,h,u,k.server?.uses,a));return b&&(p=!0),b});if(g.some(Boolean)){try{l=await ut(r,g)}catch(v){const A=await M(v,{url:r,params:a,route:{id:e}});return n&&z.has(n)?Ye({error:A,url:r,params:a,route:o}):de({status:ne(v),error:A,url:r,route:o})}if(l.type==="redirect")return l}}const y=l?.nodes;let m=!1;const _=f.map(async(g,v)=>{if(!g)return;const A=w.branch[v],k=y?.[v];if((!k||k.type==="skip")&&g[1]===A?.loader&&!He(m,d,h,u,A.universal?.uses,a))return A;if(m=!0,k?.type==="error")throw k;return Oe({loader:g[1],url:r,params:a,route:o,parent:async()=>{const T={};for(let C=0;C<v;C+=1)Object.assign(T,(await _[C])?.data);return T},server_data_node:Ne(k===void 0&&g[0]?{type:"skip"}:k??null,g[0]?A?.server:void 0)})});for(const g of _)g.catch(N);const I=[];for(let g=0;g<f.length;g+=1)if(f[g])try{I.push(await _[g])}catch(v){if(v instanceof Re)return{type:"redirect",location:v.location};if(n&&z.has(n))return Ye({error:await M(v,{params:a,url:r,route:{id:o.id}}),url:r,params:a,route:o});let A=ne(v),k;if(y?.includes(v))A=v.status??A,k=v.error;else if(v instanceof Q)k=v.body;else{if(await x.updated.check())return await Qe(),await q(r);k=await M(v,{params:a,url:r,route:{id:o.id}})}const b=await dr(g,I,s);return b?fe({url:r,params:a,branch:I.slice(0,b.idx).concat(b.node),errors:s,status:A,error:k,route:o}):await ft(r,{id:o.id},k,A)}else I.push(void 0);return fe({url:r,params:a,branch:I,errors:s,status:200,error:null,route:o,form:t?void 0:null})}async function dr(e,t,r){for(;e--;)if(r[e]){let a=e;for(;!t[a];)a-=1;try{return{idx:a+1,node:{node:await r[e](),loader:r[e],data:{},server:null,universal:null}}}catch{continue}}}async function de({status:e,error:t,url:r,route:a}){const o={};let n=null;if(E.server_loads[0]===0)try{const i=await ut(r,[!0]);if(i.type!=="data"||i.nodes[0]&&i.nodes[0].type!=="data")throw 0;n=i.nodes[0]??null}catch(i){if(!(i instanceof Q&&i.status===404)&&(r.origin!==Se||r.pathname!==location.pathname||Ue))return await q(r)}try{const s=await Oe({loader:be,url:r,params:o,route:a,parent:()=>Promise.resolve({}),server_data_node:Ne(n)}),i={node:await oe(),loader:oe,universal:null,server:null,data:null};return fe({url:r,params:o,branch:[s,i],status:e,error:t,errors:[],route:null})}catch(s){if(s instanceof Re){await ot(new URL(s.location,location.href),{},0);return}const i=await E.get_error_template(),c=await M(s,{url:r,params:o,route:a}),f=String(c?.message??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),l=i({status:e,message:f}),h=new DOMParser().parseFromString(l,"text/html");throw document.documentElement.replaceChild(document.adoptNode(h.head),document.head),document.documentElement.replaceChild(document.adoptNode(h.body),document.body),s}}async function hr(e){const t=e.href;if(te.has(t))return te.get(t);let r;try{const a=(async()=>{let o=await E.hooks.reroute({url:new URL(e),fetch:async(n,s)=>it(n,s,e).promise})??e;if(typeof o=="string"){const n=new URL(e);E.hash?n.hash=o:n.pathname=o,o=n}return o})();te.set(t,a),r=await a}catch{te.delete(t);return}return r}async function he(e,t){if(e&&!Ie(e,L,E.hash)){const r=await hr(e);if(!r)return;const a=pr(r);for(const o of Te){const n=o.exec(a);if(n)return{id:ue(e),invalidating:t,route:o,params:_t(n),url:e}}}}function pr(e){return yt(E.hash?e.hash.replace(/^#/,"").replace(/[?#].+/,""):e.pathname.slice(L.length))||"/"}function ue(e){return(E.hash?e.hash.replace(/^#/,""):e.pathname)+e.search}function lt({url:e,type:t,intent:r,delta:a,event:o,scroll:n}){let s=!1;const i=xe(w,r,e,t,n??null);a!==void 0&&(i.navigation.delta=a),o!==void 0&&(i.navigation.event=o);const c={...i.navigation,cancel:()=>{s=!0,i.reject(new Error("navigation cancelled"))}};return Z||et.forEach(f=>f(c)),s?null:i}async function V({type:e,url:t,popped:r,keepfocus:a,noscroll:o,replace_state:n,state:s={},redirect_count:i=0,nav_token:c={},accept:f=N,block:l=N,event:h}){const d=O;O=c;const u=await he(t,!1),p=e==="enter"?xe(w,u,t,e):lt({url:t,type:e,delta:r?.delta,intent:u,scroll:r?.scroll,event:h});if(!p){l(),O===c&&(O=d);return}const y=S,m=P;f(),Z=!0,le&&p.navigation.type!=="enter"&&x.navigating.set(ye.current=p.navigation);let _=u&&await ct(u);if(!_){if(Ie(t,L,E.hash))return await q(t,n);_=await ft(t,{id:null},await M(new Pe(404,"Not Found",`Not found: ${t.pathname}`),{url:t,params:{},route:{id:null}}),404,n)}if(t=u?.url||t,O!==c){p.reject(new Error("navigation aborted"));return}if(!_)return;if(_.type==="redirect"){if(i<20){await V({type:e,url:new URL(_.location,t),popped:r,keepfocus:a,noscroll:o,replace_state:n,state:s,redirect_count:i+1,nav_token:c}),p.fulfil(void 0);return}if(_=await de({status:500,error:await M(new Error("Redirect loop"),{url:t,params:{},route:{id:null}}),url:t,route:{id:null}}),!_)return}else if(_.props.page.status>=400&&await x.updated.check())return await Qe(),await q(t,n);if(lr(),Le(y),at(m),_.props.page.url.pathname!==t.pathname&&(t.pathname=_.props.page.url.pathname),s=r?r.state:s,!r){const b=n?0:1,T={[$]:S+=b,[W]:P+=b,[Ke]:s};(n?history.replaceState:history.pushState).call(history,T,"",t),n||ir(S,P)}const I=u&&R?.id===u.id?R.fork:null;R?.fork&&!I?ce():(R=null,F={element:void 0,href:void 0}),_.props.page.state=s;let g;if(le){const b=(await Promise.all(Array.from(cr,H=>H(p.navigation)))).filter(H=>typeof H=="function");if(b.length>0){let H=function(){b.forEach(pe=>{X.delete(pe)})};b.push(H),b.forEach(pe=>{X.add(pe)})}const T=p.navigation.to;w={..._.state,nav:{params:T.params,route:T.route,url:T.url}},_.props.page&&(_.props.page.url=t),!a&&document.activeElement instanceof HTMLElement&&document.activeElement!==document.body&&document.activeElement.blur();const C=I&&await I;C?g=C.commit():(K=null,rt.$set(_.props),K&&Object.assign(_.props.page,K),Ge(_.props.page),g=mt?.()),tt=!0}else await st(_,Ee,!1);const{activeElement:v}=document;if(await g,await re(),await re(),O!==c){p.reject(new Error("navigation aborted"));return}_.props.page&&K&&Object.assign(_.props.page,K);let A=null;if(Fe){const b=r?r.scroll:o?B():null;b?scrollTo(b.x,b.y):(A=t.hash&&document.getElementById(ht(t)))?A.scrollIntoView():scrollTo(0,0)}const k=document.activeElement!==v&&document.activeElement!==document.body;!a&&!k&&vr(t,!A),Fe=!0,Z=!1,p.fulfil(void 0),p.navigation.to&&(p.navigation.to.scroll=B()),X.forEach(b=>b(p.navigation)),e==="popstate"&&nt(P),x.navigating.set(ye.current=null)}async function ft(e,t,r,a,o){return e.origin===Se&&e.pathname===location.pathname&&!Ue?await de({status:a,error:r,url:e,route:t}):await q(e,o)}let F={element:void 0,href:void 0};function mr(){let e,t;U.addEventListener("mousemove",s=>{const i=s.target;clearTimeout(e),e=setTimeout(()=>{o(i,Y.hover)},20)});function r(s){s.defaultPrevented||o(s.composedPath()[0],Y.tap)}U.addEventListener("mousedown",r),U.addEventListener("touchstart",r,{passive:!0});const a=new IntersectionObserver(s=>{for(const i of s)i.isIntersecting&&(ge(new URL(i.target.href)),a.unobserve(i.target))},{threshold:0});async function o(s,i){const c=Xe(s,U),f=c===F.element&&c?.href===F.href&&i>=t;if(!c||f)return;const{url:l,external:h,download:d}=we(c,L,E.hash);if(h||d)return;const u=ae(c),p=l&&ue(w.url)===ue(l);if(!(u.reload||p))if(i<=u.preload_data){F={element:c,href:c.href},t=Y.tap;const y=await he(l,!1);if(!y)return;fr(y)}else i<=u.preload_code&&(F={element:c,href:c.href},t=i,ge(l))}function n(){a.disconnect();for(const s of U.querySelectorAll("a")){const{url:i,external:c,download:f}=we(s,L,E.hash);if(c||f)continue;const l=ae(s);l.reload||(l.preload_code===Y.viewport&&a.observe(s),l.preload_code===Y.eager&&ge(i))}}X.add(n),n()}function M(e,t){if(e instanceof Q)return e.body;const r=ne(e),a=Qt(e);return E.hooks.handleError({error:e,event:t,status:r,message:a})??{message:a}}function Sr(e,t={}){return e=new URL(ke(e)),e.origin!==Se?Promise.reject(new Error("goto: invalid URL")):ot(e,t,0)}function _r(e){if(typeof e=="function")se.push(e);else{const{href:t}=new URL(e,location.href);se.push(r=>r.href===t)}}function gr(){history.scrollRestoration="manual",addEventListener("beforeunload",t=>{let r=!1;if(qe(),!Z){const a=xe(w,void 0,null,"leave"),o={...a.navigation,cancel:()=>{r=!0,a.reject(new Error("navigation cancelled"))}};et.forEach(n=>n(o))}r?(t.preventDefault(),t.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&qe()}),navigator.connection?.saveData||mr(),U.addEventListener("click",async t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;const r=Xe(t.composedPath()[0],U);if(!r)return;const{url:a,external:o,target:n,download:s}=we(r,L,E.hash);if(!a)return;if(n==="_parent"||n==="_top"){if(window.parent!==window)return}else if(n&&n!=="_self")return;const i=ae(r);if(!(r instanceof SVGAElement)&&a.protocol!==location.protocol&&!(a.protocol==="https:"||a.protocol==="http:")||s)return;const[f,l]=(E.hash?a.hash.replace(/^#/,""):a.href).split("#"),h=f===me(location);if(o||i.reload&&(!h||!l)){lt({url:a,type:"link",event:t})?Z=!0:t.preventDefault();return}if(l!==void 0&&h){const[,d]=w.url.href.split("#");if(d===l){if(t.preventDefault(),l===""||l==="top"&&r.ownerDocument.getElementById("top")===null)scrollTo({top:0});else{const u=r.ownerDocument.getElementById(decodeURIComponent(l));u&&(u.scrollIntoView(),u.focus())}return}if(G=!0,Le(S),e(a),!i.replace_state)return;G=!1}t.preventDefault(),await new Promise(d=>{requestAnimationFrame(()=>{setTimeout(d,0)}),setTimeout(d,100)}),await V({type:"link",url:a,keepfocus:i.keepfocus,noscroll:i.noscroll,replace_state:i.replace_state??a.href===location.href,event:t})}),U.addEventListener("submit",t=>{if(t.defaultPrevented)return;const r=HTMLFormElement.prototype.cloneNode.call(t.target),a=t.submitter;if((a?.formTarget||r.target)==="_blank"||(a?.formMethod||r.method)!=="get")return;const s=new URL(a?.hasAttribute("formaction")&&a?.formAction||r.action);if(Ie(s,L,!1))return;const i=t.target,c=ae(i);if(c.reload)return;t.preventDefault(),t.stopPropagation();const f=new FormData(i,a);s.search=new URLSearchParams(f).toString(),V({type:"form",url:s,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??s.href===location.href,event:t})}),addEventListener("popstate",async t=>{if(!Ae){if(t.state?.[$]){const r=t.state[$];if(O={},r===S)return;const a=D[r],o=t.state[Ke]??{},n=new URL(t.state[At]??location.href),s=t.state[W],i=w.url?me(location)===me(w.url):!1;if(s===P&&(tt||i)){o!==j.state&&(j.state=o),e(n),D[S]=B(),a&&scrollTo(a.x,a.y),S=r;return}const f=r-S;await V({type:"popstate",url:n,popped:{state:o,scroll:a,delta:f},accept:()=>{S=r,P=s},block:()=>{history.go(-f)},nav_token:O,event:t})}else if(!G){const r=new URL(location.href);e(r),E.hash&&location.reload()}}}),addEventListener("hashchange",()=>{G&&(G=!1,history.replaceState({...history.state,[$]:++S,[W]:P},"",location.href))});for(const t of document.querySelectorAll("link"))sr.has(t.rel)&&(t.href=t.href);addEventListener("pageshow",t=>{t.persisted&&x.navigating.set(ye.current=null)});function e(t){w.url=j.url=t,x.page.set(De(j)),x.page.notify()}}async function yr(e,{status:t=200,error:r,node_ids:a,params:o,route:n,server_route:s,data:i,form:c}){Ue=!0;const f=new URL(location.href);let l;({params:o={},route:n={id:null}}=await he(f,!1)||{}),l=Te.find(({id:u})=>u===n.id);let h,d=!0;try{const u=a.map(async(y,m)=>{const _=i[m];return _?.uses&&(_.uses=dt(_.uses)),Oe({loader:E.nodes[y],url:f,params:o,route:n,parent:async()=>{const I={};for(let g=0;g<m;g+=1)Object.assign(I,(await u[g]).data);return I},server_data_node:Ne(_)})}),p=await Promise.all(u);if(l){const y=l.layouts;for(let m=0;m<y.length;m++)y[m]||p.splice(m,0,void 0)}h=await fe({url:f,params:o,branch:p,status:t,error:r,errors:l?.errors,form:c,route:l??null})}catch(u){if(u instanceof Re)return await q(new URL(u.location,location.href));h=await de({status:ne(u),error:await M(u,{url:f,params:o,route:n}),url:f,route:n}),e.textContent="",d=!1}h&&(h.props.page&&(h.props.page.state={}),await st(h,e,d))}async function ut(e,t){const r=new URL(e);r.pathname=rr(e.pathname),e.pathname.endsWith("/")&&r.searchParams.append(Zt,"1"),r.searchParams.append(Jt,t.map(n=>n?"1":"0").join(""));const a=window.fetch,o=await a(r.href,{});if(!o.ok){let n;throw o.headers.get("content-type")?.includes("application/json")?n=await o.json():o.status===404?n="Not Found":o.status===500&&(n="Internal Error"),new Q(o.status,n)}return new Promise((n,s)=>{wr(n,o).catch(s)})}async function wr(e,t){const r=t.body.getReader(),a=new Map;function o(n){return zt(n,{...E.decoders,Promise:s=>new Promise((i,c)=>{a.set(s,{fulfil:i,reject:c})})})}for await(const n of or(r)){if(n.type==="redirect")return e(n);if(n.type==="data")n.nodes?.forEach(s=>{s?.type==="data"&&(s.uses=dt(s.uses),s.data=o(s.data))}),e(n);else if(n.type==="chunk"){const{id:s,data:i,error:c}=n,f=a.get(s);a.delete(s),c?f.reject(o(c)):f.fulfil(o(i))}}}function dt(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 Ae=!1;function vr(e,t=!0){const r=document.querySelector("[autofocus]");if(r)r.focus();else{const a=ht(e);if(a&&document.getElementById(a)){const{x:n,y:s}=B();setTimeout(()=>{const i=history.state;Ae=!0,location.replace(new URL(`#${a}`,location.href)),history.replaceState(i,"",e),t&&scrollTo(n,s),Ae=!1})}else{const n=document.body,s=n.getAttribute("tabindex");n.tabIndex=-1,n.focus({preventScroll:!0,focusVisible:!1}),s!==null?n.setAttribute("tabindex",s):n.removeAttribute("tabindex")}const o=getSelection();if(o&&o.type!=="None"){const n=[];for(let s=0;s<o.rangeCount;s+=1)n.push(o.getRangeAt(s));setTimeout(()=>{if(o.rangeCount===n.length){for(let s=0;s<o.rangeCount;s+=1){const i=n[s],c=o.getRangeAt(s);if(i.commonAncestorContainer!==c.commonAncestorContainer||i.startContainer!==c.startContainer||i.endContainer!==c.endContainer||i.startOffset!==c.startOffset||i.endOffset!==c.endOffset)return}o.removeAllRanges()}})}}}function xe(e,t,r,a,o=null){let n,s;const i=new Promise((f,l)=>{n=f,s=l});return i.catch(N),{navigation:{from:{params:e.params,route:{id:e.route?.id??null},url:e.url,scroll:B()},to:r&&{params:t?.params??null,route:{id:t?.route?.id??null},url:r,scroll:o},willUnload:!t,type:a,complete:i},fulfil:n,reject:s}}function De(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 br(e){const t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function ht(e){let t;if(E.hash){const[,,r]=e.hash.split("#",3);t=r??""}else t=e.hash.slice(1);return decodeURIComponent(t)}export{kr as a,Sr as g,x as s};
@@ -1 +0,0 @@
1
- import{a as r}from"../chunks/DtVU-s3j.js";import{y as t}from"../chunks/DfoR1zCV.js";export{t as load_css,r as start};
@@ -1 +0,0 @@
1
- {"version":3,"file":"_server.ts-CNU4yPZZ.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/entries/endpoints/api/projects/new-session/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { existsSync, statSync, readFileSync, writeFileSync } from \"fs\";\nimport { execFileSync } from \"child_process\";\nimport { u as upsertSession } from \"../../../../../chunks/sessions-json.js\";\nimport { basename, join } from \"path\";\nimport { homedir } from \"os\";\nimport { p as parseAgent, A as AGENTS } from \"../../../../../chunks/agents.js\";\nimport { s as sizeArgsForNewSession } from \"../../../../../chunks/geometry.js\";\nfunction projectSlug(cwd, fallback) {\n return basename(cwd).replace(/[^A-Za-z0-9_-]/g, \"_\") || fallback;\n}\nfunction ensureWorkspaceTrusted(cwd) {\n const claudeJsonPath = join(homedir(), \".claude.json\");\n try {\n const data = existsSync(claudeJsonPath) ? JSON.parse(readFileSync(claudeJsonPath, \"utf-8\")) : {};\n if (!data.projects) data.projects = {};\n if (!data.projects[cwd]) data.projects[cwd] = {};\n if (!data.projects[cwd].hasTrustDialogAccepted) {\n data.projects[cwd].hasTrustDialogAccepted = true;\n writeFileSync(claudeJsonPath, JSON.stringify(data, null, 2));\n }\n } catch (err) {\n console.error(\"[new-session] Failed to pre-trust workspace:\", err);\n }\n}\nconst POST = async ({ request }) => {\n const { cwd, agent } = await request.json();\n if (!cwd) {\n return json({ error: \"cwd required\" }, { status: 400 });\n }\n const selectedAgent = parseAgent(agent);\n if (!existsSync(cwd)) {\n return json({ error: \"Folder does not exist\" }, { status: 400 });\n }\n const stat = statSync(cwd);\n if (!stat.isDirectory()) {\n return json({ error: \"Path is not a directory\" }, { status: 400 });\n }\n try {\n ensureWorkspaceTrusted(cwd);\n const sessionName = `${projectSlug(cwd, selectedAgent)}-${selectedAgent}-${Date.now()}`;\n const { TMUX: _tmux, TMUX_PANE: _pane, ...tmuxEnv } = process.env;\n execFileSync(\"tmux\", [\n \"new-session\",\n \"-d\",\n \"-s\",\n sessionName,\n \"-c\",\n cwd,\n // Detached, the window would be 80x24; the dashboard reads dialogs\n // off the screen and wants them unwrapped (see tmux/geometry).\n ...sizeArgsForNewSession(),\n \"--\",\n \"env\",\n \"-u\",\n \"CLAUDECODE\",\n ...AGENTS[selectedAgent].argv\n ], {\n stdio: \"ignore\",\n env: tmuxEnv\n });\n const baseIndex = execFileSync(\"tmux\", [\"show-option\", \"-gv\", \"base-index\"], {\n encoding: \"utf-8\",\n env: tmuxEnv\n }).trim() || \"0\";\n const paneBaseIndex = execFileSync(\"tmux\", [\"show-option\", \"-gv\", \"pane-base-index\"], {\n encoding: \"utf-8\",\n env: tmuxEnv\n }).trim() || \"0\";\n const tmuxTarget = `${sessionName}:${baseIndex}.${paneBaseIndex}`;\n const record = upsertSession({\n id: crypto.randomUUID(),\n pid: 0,\n cwd,\n tmux_target: tmuxTarget,\n state: \"idle\",\n agent: selectedAgent\n });\n return json({ ok: true, session: sessionName, tmuxTarget, agent: selectedAgent, record });\n } catch (err) {\n const detail = err instanceof Error ? err.message : String(err);\n console.error(\"[new-session] Failed to create session:\", detail);\n return json({ error: \"Failed to create session\", detail }, { status: 500 });\n }\n};\nexport {\n POST\n};\n"],"mappings":";;;;;;;;;AAQA,SAAS,YAAY,KAAK,UAAU;CAClC,OAAO,SAAS,GAAG,CAAC,CAAC,QAAQ,mBAAmB,GAAG,KAAK;AAC1D;AACA,SAAS,uBAAuB,KAAK;CACnC,MAAM,iBAAiB,KAAK,QAAQ,GAAG,cAAc;CACrD,IAAI;EACF,MAAM,OAAO,WAAW,cAAc,IAAI,KAAK,MAAM,aAAa,gBAAgB,OAAO,CAAC,IAAI,CAAC;EAC/F,IAAI,CAAC,KAAK,UAAU,KAAK,WAAW,CAAC;EACrC,IAAI,CAAC,KAAK,SAAS,MAAM,KAAK,SAAS,OAAO,CAAC;EAC/C,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,wBAAwB;GAC9C,KAAK,SAAS,IAAI,CAAC,yBAAyB;GAC5C,cAAc,gBAAgB,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;EAC7D;CACF,SAAS,KAAK;EACZ,QAAQ,MAAM,gDAAgD,GAAG;CACnE;AACF;AACA,MAAM,OAAO,OAAO,EAAE,cAAc;CAClC,MAAM,EAAE,KAAK,UAAU,MAAM,QAAQ,KAAK;CAC1C,IAAI,CAAC,KACH,OAAO,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;CAExD,MAAM,gBAAgB,WAAW,KAAK;CACtC,IAAI,CAAC,WAAW,GAAG,GACjB,OAAO,KAAK,EAAE,OAAO,wBAAwB,GAAG,EAAE,QAAQ,IAAI,CAAC;CAGjE,IAAI,CADS,SAAS,GACd,CAAC,CAAC,YAAY,GACpB,OAAO,KAAK,EAAE,OAAO,0BAA0B,GAAG,EAAE,QAAQ,IAAI,CAAC;CAEnE,IAAI;EACF,uBAAuB,GAAG;EAC1B,MAAM,cAAc,GAAG,YAAY,KAAK,aAAa,EAAE,GAAG,cAAc,GAAG,KAAK,IAAI;EACpF,MAAM,EAAE,MAAM,OAAO,WAAW,OAAO,GAAG,YAAY,QAAQ;EAC9D,aAAa,QAAQ;GACnB;GACA;GACA;GACA;GACA;GACA;GAGA,GAAG,sBAAsB;GACzB;GACA;GACA;GACA;GACA,GAAG,OAAO,cAAc,CAAC;EAC3B,GAAG;GACD,OAAO;GACP,KAAK;EACP,CAAC;EASD,MAAM,aAAa,GAAG,YAAY,GARhB,aAAa,QAAQ;GAAC;GAAe;GAAO;EAAY,GAAG;GAC3E,UAAU;GACV,KAAK;EACP,CAAC,CAAC,CAAC,KAAK,KAAK,IAKkC,GAJzB,aAAa,QAAQ;GAAC;GAAe;GAAO;EAAiB,GAAG;GACpF,UAAU;GACV,KAAK;EACP,CAAC,CAAC,CAAC,KAAK,KAAK;EAEb,MAAM,SAAS,cAAc;GAC3B,IAAI,OAAO,WAAW;GACtB,KAAK;GACL;GACA,aAAa;GACb,OAAO;GACP,OAAO;EACT,CAAC;EACD,OAAO,KAAK;GAAE,IAAI;GAAM,SAAS;GAAa;GAAY,OAAO;GAAe;EAAO,CAAC;CAC1F,SAAS,KAAK;EACZ,MAAM,SAAS,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;EAC9D,QAAQ,MAAM,2CAA2C,MAAM;EAC/D,OAAO,KAAK;GAAE,OAAO;GAA4B;EAAO,GAAG,EAAE,QAAQ,IAAI,CAAC;CAC5E;AACF"}
@@ -1,46 +0,0 @@
1
- import { execFile } from "child_process";
2
- import { promisify } from "util";
3
- //#region .svelte-kit/adapter-bun/chunks/geometry.js
4
- const execFileAsync = promisify(execFile);
5
- const STANDARD_PANE_WIDTH = 200;
6
- const STANDARD_PANE_HEIGHT = 50;
7
- const MIN_USEFUL_PANE_WIDTH = 160;
8
- function sizeArgsForNewSession() {
9
- return [
10
- "-x",
11
- String(STANDARD_PANE_WIDTH),
12
- "-y",
13
- String(STANDARD_PANE_HEIGHT)
14
- ];
15
- }
16
- function wantsWidening(pane) {
17
- return pane.attached === 0 && pane.width < MIN_USEFUL_PANE_WIDTH;
18
- }
19
- async function widenDetachedWindow(target) {
20
- try {
21
- await execFileAsync("tmux", [
22
- "resize-window",
23
- "-t",
24
- target,
25
- "-x",
26
- String(STANDARD_PANE_WIDTH),
27
- "-y",
28
- String(STANDARD_PANE_HEIGHT)
29
- ], { timeout: 1e3 });
30
- await execFileAsync("tmux", [
31
- "set-option",
32
- "-w",
33
- "-t",
34
- target,
35
- "window-size",
36
- "latest"
37
- ], { timeout: 1e3 });
38
- return true;
39
- } catch {
40
- return false;
41
- }
42
- }
43
- //#endregion
44
- export { wantsWidening as n, widenDetachedWindow as r, sizeArgsForNewSession as t };
45
-
46
- //# sourceMappingURL=geometry-CUMMOI9q.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"geometry-CUMMOI9q.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/chunks/geometry.js"],"sourcesContent":["import { execFile } from \"child_process\";\nimport { promisify } from \"util\";\nconst execFileAsync = promisify(execFile);\nconst STANDARD_PANE_WIDTH = 200;\nconst STANDARD_PANE_HEIGHT = 50;\nconst MIN_USEFUL_PANE_WIDTH = 160;\nfunction sizeArgsForNewSession() {\n return [\"-x\", String(STANDARD_PANE_WIDTH), \"-y\", String(STANDARD_PANE_HEIGHT)];\n}\nfunction wantsWidening(pane) {\n return pane.attached === 0 && pane.width < MIN_USEFUL_PANE_WIDTH;\n}\nasync function widenDetachedWindow(target) {\n try {\n await execFileAsync(\n \"tmux\",\n [\"resize-window\", \"-t\", target, \"-x\", String(STANDARD_PANE_WIDTH), \"-y\", String(STANDARD_PANE_HEIGHT)],\n { timeout: 1e3 }\n );\n await execFileAsync(\"tmux\", [\"set-option\", \"-w\", \"-t\", target, \"window-size\", \"latest\"], {\n timeout: 1e3\n });\n return true;\n } catch {\n return false;\n }\n}\nexport {\n widenDetachedWindow as a,\n sizeArgsForNewSession as s,\n wantsWidening as w\n};\n"],"mappings":";;;AAEA,MAAM,gBAAgB,UAAU,QAAQ;AACxC,MAAM,sBAAsB;AAC5B,MAAM,uBAAuB;AAC7B,MAAM,wBAAwB;AAC9B,SAAS,wBAAwB;CAC/B,OAAO;EAAC;EAAM,OAAO,mBAAmB;EAAG;EAAM,OAAO,oBAAoB;CAAC;AAC/E;AACA,SAAS,cAAc,MAAM;CAC3B,OAAO,KAAK,aAAa,KAAK,KAAK,QAAQ;AAC7C;AACA,eAAe,oBAAoB,QAAQ;CACzC,IAAI;EACF,MAAM,cACJ,QACA;GAAC;GAAiB;GAAM;GAAQ;GAAM,OAAO,mBAAmB;GAAG;GAAM,OAAO,oBAAoB;EAAC,GACrG,EAAE,SAAS,IAAI,CACjB;EACA,MAAM,cAAc,QAAQ;GAAC;GAAc;GAAM;GAAM;GAAQ;GAAe;EAAQ,GAAG,EACvF,SAAS,IACX,CAAC;EACD,OAAO;CACT,QAAQ;EACN,OAAO;CACT;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ws-handlers-BQ2RtlNl.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/chunks/context.js","../../../../web/.svelte-kit/adapter-bun/chunks/ws-handlers.js"],"sourcesContent":["import { a as asRecord, b as readNumber, r as readString } from \"./json.js\";\nconst WINDOW_200K = 2e5;\nconst WINDOW_1M = 1e6;\nconst WINDOWS = [\n {\n window: WINDOW_1M,\n models: [\n \"claude-sonnet-5\",\n \"claude-opus-4-7\",\n \"claude-opus-4-8\",\n \"claude-opus-5\",\n \"claude-fable-5\",\n \"claude-mythos-5\"\n ]\n },\n {\n window: WINDOW_200K,\n models: [\n \"claude-3-\",\n \"claude-haiku-4-5\",\n \"claude-sonnet-4-0\",\n \"claude-sonnet-4-5\",\n \"claude-sonnet-4-6\",\n \"claude-opus-4-0\",\n \"claude-opus-4-1\",\n \"claude-opus-4-5\",\n \"claude-opus-4-6\"\n ]\n }\n];\nfunction contextWindowFor(model) {\n const id = model.toLowerCase();\n if (id.includes(\"[1m]\")) return WINDOW_1M;\n for (const entry of WINDOWS) {\n if (entry.models.some((known) => id.includes(known))) return entry.window;\n }\n return null;\n}\nfunction contextPercent(usage) {\n return usage.window === null ? null : Math.round(usage.tokens / usage.window * 100);\n}\nfunction readContextUsage(message) {\n const usage = asRecord(message.usage);\n if (!usage) return null;\n const tokens = readNumber(usage, \"input_tokens\") + readNumber(usage, \"cache_creation_input_tokens\") + readNumber(usage, \"cache_read_input_tokens\");\n if (tokens === 0) return null;\n const model = readString(message.model) ?? \"\";\n return { model, tokens, window: contextWindowFor(model) };\n}\nexport {\n contextPercent as c,\n readContextUsage as r\n};\n","import { existsSync, readFileSync, mkdirSync, writeFileSync, renameSync, openSync, fstatSync, readSync, closeSync, readdirSync, statSync } from \"fs\";\nimport { e as getSessionsDir, f as cleanupStaleSessions, g as getSession, h as readLinks, c as updateSession, b as getAllSessions } from \"./sessions-json.js\";\nimport { dirname, join, basename } from \"path\";\nimport { homedir } from \"os\";\nimport { r as readContextUsage, c as contextPercent } from \"./context.js\";\nimport { a as asRecord, r as readString } from \"./json.js\";\nimport { i as isDictated } from \"./dictation-marks.js\";\nimport { execFile, execFileSync } from \"child_process\";\nimport { promisify } from \"util\";\nimport { w as wantsWidening, a as widenDetachedWindow } from \"./geometry.js\";\nimport { S as SESSIONS_DIR } from \"./paths.js\";\nimport { b as getQueueSummary, e as enqueue } from \"./message-queue.js\";\nfunction resolveProjectsPath() {\n return join(dirname(getSessionsDir()), \"projects.json\");\n}\nfunction readFile() {\n const path = resolveProjectsPath();\n if (!existsSync(path)) return { v: 1, projects: [] };\n try {\n const parsed = JSON.parse(readFileSync(path, \"utf-8\"));\n const projects = Array.isArray(parsed.projects) ? parsed.projects.filter((p) => typeof p === \"string\" && p.length > 0) : [];\n return { v: 1, projects: [...new Set(projects)] };\n } catch {\n return { v: 1, projects: [] };\n }\n}\nfunction writeFile(file) {\n const path = resolveProjectsPath();\n mkdirSync(dirname(path), { recursive: true });\n const tmp = `${path}.${process.pid}.tmp`;\n writeFileSync(tmp, JSON.stringify(file, null, 2));\n renameSync(tmp, path);\n}\nfunction getSavedProjects() {\n return readFile().projects;\n}\nfunction isForbiddenRoot(cwd, home = homedir()) {\n const path = cwd.replace(/\\/+$/, \"\") || \"/\";\n if (path === \"/\" || path === home) return true;\n if ([\"/tmp\", \"/home\", \"/Users\", \"/root\", \"/mnt\", \"/media\", \"/opt\", \"/var\", \"/srv\"].includes(path)) return true;\n if (/^\\/(?:mnt|media|Volumes)\\/[^/]+$/.test(path)) return true;\n return false;\n}\nfunction isUnder(child, parent) {\n return child.startsWith(parent.endsWith(\"/\") ? parent : `${parent}/`);\n}\nfunction saveProjects(cwds) {\n const file = readFile();\n let changed = false;\n for (const raw of cwds) {\n const cwd = raw?.replace(/\\/+$/, \"\");\n if (!cwd || isForbiddenRoot(cwd)) continue;\n if (file.projects.some((p) => p === cwd || isUnder(cwd, p))) continue;\n const kept = file.projects.filter((p) => !isUnder(p, cwd));\n if (kept.length !== file.projects.length) changed = true;\n file.projects = [...kept, cwd];\n changed = true;\n }\n if (changed) writeFile(file);\n return changed;\n}\nfunction saveProject(cwd) {\n return saveProjects([cwd]);\n}\nfunction removeProject(cwd) {\n const file = readFile();\n const next = file.projects.filter((p) => p !== cwd);\n if (next.length === file.projects.length) return false;\n writeFile({ ...file, projects: next });\n return true;\n}\nconst DEFAULT_SETTINGS = {\n autoRemoteControl: false\n};\nfunction resolveSettingsPath() {\n return join(dirname(getSessionsDir()), \"settings.json\");\n}\nfunction getSettings() {\n const path = resolveSettingsPath();\n if (!existsSync(path)) return { ...DEFAULT_SETTINGS };\n try {\n const parsed = JSON.parse(readFileSync(path, \"utf-8\"));\n return {\n autoRemoteControl: typeof parsed.autoRemoteControl === \"boolean\" ? parsed.autoRemoteControl : DEFAULT_SETTINGS.autoRemoteControl\n };\n } catch {\n return { ...DEFAULT_SETTINGS };\n }\n}\nfunction updateSettings(patch) {\n const next = { ...getSettings() };\n if (typeof patch.autoRemoteControl === \"boolean\") next.autoRemoteControl = patch.autoRemoteControl;\n const path = resolveSettingsPath();\n mkdirSync(dirname(path), { recursive: true });\n const tmp = `${path}.${process.pid}.tmp`;\n writeFileSync(tmp, JSON.stringify(next, null, 2));\n renameSync(tmp, path);\n return next;\n}\nfunction isClaudeMuxSessionName(name) {\n return /-(?:claude|gemini|copilot)-\\d{10,}$/.test(name);\n}\nconst COMMAND_TAG = /<command-(name|message|args)>([\\s\\S]*?)<\\/command-\\1>/g;\nfunction parseSlashCommand(content) {\n const trimmed = content.trim();\n if (!trimmed.startsWith(\"<command-\")) return null;\n const tags = {};\n for (const match of trimmed.matchAll(COMMAND_TAG)) tags[match[1]] = match[2].trim();\n const name = tags.name;\n if (!name) return null;\n return { name, ...tags.args ? { args: tags.args } : {} };\n}\nconst LOCAL_OUTPUT_TAG = /^<local-command-(stdout|stderr)>([\\s\\S]*?)<\\/local-command-\\1>/;\nconst ANSI_SGR = /\\x1b\\[[0-9;]*m/g;\nconst LOCAL_CAVEAT = /^<local-command-caveat>/;\nfunction parseLocalOutput(content) {\n const trimmed = content.trim();\n if (!trimmed.startsWith(\"<local-command-\")) return null;\n const chunks = [];\n let rest = trimmed;\n for (let m = rest.match(LOCAL_OUTPUT_TAG); m; m = rest.match(LOCAL_OUTPUT_TAG)) {\n const text = m[2].replace(ANSI_SGR, \"\").trim();\n if (text) chunks.push(m[1] === \"stderr\" ? `[stderr]\n${text}` : text);\n rest = rest.slice(m[0].length).trimStart();\n }\n if (chunks.length === 0 && !LOCAL_OUTPUT_TAG.test(trimmed)) return null;\n return chunks.join(\"\\n\");\n}\nfunction parseAskQuestions(input) {\n const raw = input.questions;\n if (!Array.isArray(raw)) return [];\n const questions = [];\n for (const entry of raw) {\n const q = asRecord(entry);\n if (!q) continue;\n const options = Array.isArray(q.options) ? q.options.map((o) => asRecord(o)).filter((o) => o !== null).map((o) => ({\n label: readString(o.label) ?? \"\",\n ...readString(o.description) ? { description: readString(o.description) } : {}\n })).filter((o) => o.label.length > 0) : [];\n questions.push({\n header: readString(q.header) ?? \"\",\n question: readString(q.question) ?? \"\",\n multiSelect: q.multiSelect === true,\n options\n });\n }\n return questions;\n}\nconst PATCH_LINE_LIMIT = 400;\nfunction extractPatch(sidecar) {\n const sc = asRecord(sidecar);\n const raw = sc?.structuredPatch;\n if (!Array.isArray(raw) || raw.length === 0) return void 0;\n const hunks = [];\n let total = 0;\n for (const entry of raw) {\n const hunk = asRecord(entry);\n if (!hunk || !Array.isArray(hunk.lines)) continue;\n const lines = hunk.lines.filter((line) => typeof line === \"string\");\n if (lines.length === 0) continue;\n const kept = lines.slice(0, Math.max(0, PATCH_LINE_LIMIT - total));\n if (kept.length < lines.length) kept.push(`… ${lines.length - kept.length} more lines`);\n total += kept.length;\n hunks.push({\n header: `@@ -${hunk.oldStart ?? \"?\"},${hunk.oldLines ?? \"?\"} +${hunk.newStart ?? \"?\"},${hunk.newLines ?? \"?\"} @@`,\n lines: kept\n });\n if (total >= PATCH_LINE_LIMIT) break;\n }\n if (hunks.length === 0) return void 0;\n return { file: readString(sc?.filePath) ?? \"\", hunks };\n}\nconst INPUT_CHAR_LIMIT = 4e3;\nconst RESULT_CHAR_LIMIT = 8e3;\nconst TEXT_CHAR_LIMIT = 64e3;\nfunction truncate$1(text, limit) {\n if (text.length <= limit) return text;\n return `${text.slice(0, limit)}\n… [truncated, ${text.length - limit} more chars]`;\n}\nfunction parseTimestamp(value) {\n const ts = typeof value === \"string\" ? Date.parse(value) : NaN;\n return Number.isFinite(ts) ? ts : Date.now();\n}\nfunction summarizeToolUse(rawName, input) {\n const name = rawName.replace(/^mcp__[^_]+__/, \"\");\n const key = readString(input.command) ?? readString(input.file_path) ?? readString(input.pattern) ?? readString(input.url) ?? readString(input.query) ?? readString(input.description) ?? readString(input.prompt) ?? readString(input.skill);\n if (!key) return name;\n const flat = key.replace(/\\s+/g, \" \").trim();\n return `${name}: ${flat.length > 120 ? `${flat.slice(0, 117)}...` : flat}`;\n}\nfunction toolResultText(sidecar, blockContent) {\n const sc = asRecord(sidecar);\n if (sc) {\n const stdout = readString(sc.stdout);\n const stderr = readString(sc.stderr);\n if (stdout !== null || stderr !== null) {\n return [stdout, stderr && stderr.length > 0 ? `[stderr]\n${stderr}` : null].filter((part) => part !== null && part.length > 0).join(\"\\n\");\n }\n }\n if (typeof blockContent === \"string\") return blockContent;\n if (Array.isArray(blockContent)) {\n const parts = blockContent.map((part) => {\n const rec = asRecord(part);\n if (rec?.type === \"image\") return readString(sc?.file) ?? \"[image]\";\n return readString(rec?.text) ?? \"\";\n }).filter((text) => text.length > 0);\n if (parts.length > 0) return parts.join(\"\\n\");\n }\n if (sc) {\n try {\n return JSON.stringify(sc, null, 2);\n } catch {\n return \"\";\n }\n }\n return \"\";\n}\nclass TranscriptBuilder {\n /**\n * @param sidechain true when reading a subagent's own file, where every line\n * is marked `isSidechain` — the main transcript skips those, since subagent\n * work lives in its own file.\n * @param isDictated tells a prompt injected by voice from a typed one. The\n * JSONL carries no origin for this, so the caller re-derives it (by text and\n * time, see dictation-marks) and the builder stamps `dictated` at parse\n * time, where the flag survives re-upserts of the same entry.\n */\n constructor(sidechain = false, isDictated2) {\n this.sidechain = sidechain;\n this.isDictated = isDictated2;\n }\n sidechain;\n isDictated;\n entries = [];\n /**\n * Subagents the harness has reported as finished. Background agents give no\n * other completion signal — their launching tool call returns immediately —\n * so this notification is the authoritative end, keyed by agent id.\n */\n finishedAgents = /* @__PURE__ */ new Set();\n /**\n * Context-window usage of the most recent API response, or null before the\n * first one. Compaction needs no special handling: the response that\n * follows it reports the smaller context on its own.\n */\n context = null;\n /** The model that wrote the latest assistant line, as the API names it. */\n model = null;\n /** The compaction logged last, whose summary is the next user line. */\n lastCompactId = null;\n indexById = /* @__PURE__ */ new Map();\n /** The slash command logged last, which a local command's output belongs to. */\n lastCommandId = null;\n /** Queued prompts awaiting a possible re-delivery as a real user line. */\n pendingQueued = [];\n dictatedFlag(text, ts) {\n return this.isDictated?.(text, ts) ? { dictated: true } : void 0;\n }\n /** Position of an entry in `entries`, or undefined if it is not one. */\n indexOf(id) {\n return this.indexById.get(id);\n }\n feed(line) {\n const trimmed = line.trim();\n if (trimmed.length === 0) return [];\n let record;\n try {\n record = asRecord(JSON.parse(trimmed));\n } catch {\n return [];\n }\n if (!record) return [];\n if (record.isSidechain === true !== this.sidechain) return [];\n switch (record.type) {\n case \"user\":\n return this.feedUser(record);\n case \"assistant\":\n return this.feedAssistant(record);\n case \"attachment\":\n return this.feedAttachment(record);\n case \"system\":\n return this.feedSystem(record);\n default:\n return [];\n }\n }\n /**\n * The most recent user turn, when it is plain text reading exactly `text`\n * and nothing has been said since but the harness's own bookkeeping — the\n * compaction a `/compact` triggers, for one.\n */\n recentPlainUserLine(text) {\n for (let i = this.entries.length - 1, seen = 0; i >= 0 && seen < 4; i--, seen++) {\n const entry = this.entries[i];\n if (entry.kind === \"compact\") continue;\n if (entry.kind !== \"user\") return null;\n return !entry.command && entry.text === text ? entry : null;\n }\n return null;\n }\n /**\n * A system line. The only one with a place in the transcript is the\n * compaction boundary: the reader needs to know where the conversation was\n * folded, or the summary that follows reads as a prompt they never typed.\n */\n feedSystem(record) {\n if (record.subtype !== \"compact_boundary\") return [];\n const uuid = readString(record.uuid) ?? `compact-${this.entries.length}`;\n const meta = asRecord(record.compactMetadata);\n const pre = typeof meta?.preTokens === \"number\" ? meta.preTokens : void 0;\n const post = typeof meta?.postTokens === \"number\" ? meta.postTokens : void 0;\n this.lastCompactId = uuid;\n return [\n this.upsert({\n kind: \"compact\",\n id: uuid,\n ts: parseTimestamp(record.timestamp),\n trigger: readString(meta?.trigger) ?? \"auto\",\n ...pre !== void 0 ? { preTokens: pre } : {},\n ...post !== void 0 ? { postTokens: post } : {}\n })\n ];\n }\n feedAttachment(record) {\n const attachment = asRecord(record.attachment);\n if (!attachment || attachment.type !== \"queued_command\") return [];\n if (asRecord(attachment.origin)?.kind !== \"human\") return [];\n const prompt = readString(attachment.prompt);\n if (!prompt || prompt.trim().length === 0) return [];\n const uuid = readString(record.uuid) ?? `queued-${this.entries.length}`;\n const ts = parseTimestamp(record.timestamp ?? attachment.timestamp);\n this.pendingQueued.push({ text: prompt.trim(), id: uuid });\n return [\n this.upsert({\n kind: \"queued\",\n id: uuid,\n ts,\n text: truncate$1(prompt, TEXT_CHAR_LIMIT),\n ...this.dictatedFlag(prompt, ts)\n })\n ];\n }\n /** Record a finished subagent from a harness task-notification. */\n noteAgentFinished(text) {\n const agentId = text.match(/<task-id>([^<]+)<\\/task-id>/)?.[1];\n const status = text.match(/<status>([^<]+)<\\/status>/)?.[1];\n if (agentId && status && status !== \"running\") this.finishedAgents.add(agentId);\n }\n /** Hide queued entries that a real user line re-delivers. The delivered\n * text may embed the queued prompt (harness wrapping), so match on exact\n * equality or prefix, not just identity. */\n deliverQueued(text) {\n const delivered = text.trim();\n const changed = [];\n this.pendingQueued = this.pendingQueued.filter((pending) => {\n if (delivered !== pending.text && !delivered.startsWith(pending.text)) return true;\n const entry = this.getEntry(pending.id);\n if (entry && entry.kind === \"queued\") {\n changed.push(this.upsert({ ...entry, delivered: true }));\n }\n return false;\n });\n return changed;\n }\n upsert(entry) {\n const existing = this.indexById.get(entry.id);\n if (existing !== void 0) {\n this.entries[existing] = entry;\n } else {\n this.indexById.set(entry.id, this.entries.length);\n this.entries.push(entry);\n }\n return entry.id;\n }\n getEntry(id) {\n const index = this.indexById.get(id);\n return index === void 0 ? void 0 : this.entries[index];\n }\n feedUser(record) {\n const message = asRecord(record.message);\n if (!message) return [];\n const uuid = readString(record.uuid) ?? `user-${this.entries.length}`;\n const ts = parseTimestamp(record.timestamp);\n const content = message.content;\n const origin = asRecord(record.origin);\n if (origin?.kind === \"peer\") {\n const body = readString(origin.body) ?? (typeof content === \"string\" ? content : null);\n if (!body || body.trim().length === 0) return [];\n const from = readString(origin.name) ?? void 0;\n return [\n this.upsert({\n kind: \"peer\",\n id: uuid,\n ts,\n text: truncate$1(body, TEXT_CHAR_LIMIT),\n ...from ? { from } : {}\n })\n ];\n }\n if (record.isCompactSummary === true && typeof content === \"string\") {\n const owner = this.lastCompactId ? this.getEntry(this.lastCompactId) : void 0;\n if (owner?.kind === \"compact\") {\n return [this.upsert({ ...owner, summary: truncate$1(content, TEXT_CHAR_LIMIT) })];\n }\n return [];\n }\n if (record.isMeta === true) return [];\n if (typeof content === \"string\") {\n if (content.trim().length === 0) return [];\n const originKind = asRecord(record.origin)?.kind;\n if (originKind === \"task-notification\") {\n this.noteAgentFinished(content);\n return [];\n }\n if (originKind !== void 0 && originKind !== \"human\") return [];\n if (originKind === void 0 && /^<(task-notification|system-reminder)/.test(content.trim()))\n return [];\n if (LOCAL_CAVEAT.test(content.trimStart())) return [];\n const output = parseLocalOutput(content);\n if (output !== null) {\n if (output.length === 0) return [];\n const owner = this.lastCommandId ? this.getEntry(this.lastCommandId) : void 0;\n if (owner?.kind === \"user\" && owner.command) {\n return [\n this.upsert({\n ...owner,\n command: { ...owner.command, output: truncate$1(output, TEXT_CHAR_LIMIT) }\n })\n ];\n }\n return [this.upsert({ kind: \"user\", id: uuid, ts, text: truncate$1(output, TEXT_CHAR_LIMIT) })];\n }\n const command = parseSlashCommand(content);\n if (command) {\n const spelled = `${command.name}${command.args ? ` ${command.args}` : \"\"}`;\n const typed = this.recentPlainUserLine(spelled);\n if (typed) {\n this.lastCommandId = typed.id;\n return [this.upsert({ ...typed, command })];\n }\n }\n this.lastCommandId = command ? uuid : null;\n const text = command ? `${command.name}${command.args ? ` ${command.args}` : \"\"}` : content;\n return [\n ...this.deliverQueued(content),\n this.upsert({\n kind: \"user\",\n id: uuid,\n ts,\n text: truncate$1(text, TEXT_CHAR_LIMIT),\n ...command ? { command } : {},\n ...this.dictatedFlag(text, ts)\n })\n ];\n }\n if (!Array.isArray(content)) return [];\n const changed = [];\n const promptTexts = [];\n for (const block of content) {\n const rec = asRecord(block);\n if (!rec) continue;\n if (rec.type === \"tool_result\") {\n const toolUseId = readString(rec.tool_use_id);\n const entry = toolUseId ? this.getEntry(toolUseId) : void 0;\n if (!entry) continue;\n if (entry.kind === \"ask\") {\n const sidecar = asRecord(record.toolUseResult);\n const answersRaw = asRecord(sidecar?.answers);\n if (answersRaw) {\n const answers = {};\n for (const [q, a] of Object.entries(answersRaw)) {\n if (typeof a === \"string\") answers[q] = a;\n }\n changed.push(this.upsert({ ...entry, answers }));\n } else {\n changed.push(this.upsert({ ...entry, rejected: true }));\n }\n continue;\n }\n if (entry.kind !== \"tool\") continue;\n const patch = extractPatch(record.toolUseResult);\n const output = patch && rec.is_error !== true ? \"\" : toolResultText(record.toolUseResult, rec.content);\n changed.push(\n this.upsert({\n ...entry,\n result: { ok: rec.is_error !== true, output: truncate$1(output, RESULT_CHAR_LIMIT) },\n ...patch ? { patch } : {}\n })\n );\n } else if (rec.type === \"text\") {\n const text = readString(rec.text);\n if (text && text.trim().length > 0) promptTexts.push(text);\n }\n }\n if (promptTexts.length > 0) {\n changed.push(\n this.upsert({\n kind: \"user\",\n id: uuid,\n ts,\n text: truncate$1(promptTexts.join(\"\\n\\n\"), TEXT_CHAR_LIMIT),\n ...this.dictatedFlag(promptTexts.join(\"\\n\\n\"), ts)\n })\n );\n }\n return changed;\n }\n feedAssistant(record) {\n const message = asRecord(record.message);\n if (message) this.context = readContextUsage(message) ?? this.context;\n if (message) this.model = readString(message.model) ?? this.model;\n const content = message?.content;\n if (!Array.isArray(content)) return [];\n const uuid = readString(record.uuid) ?? `assistant-${this.entries.length}`;\n const ts = parseTimestamp(record.timestamp);\n const changed = [];\n for (let i = 0; i < content.length; i++) {\n const block = asRecord(content[i]);\n if (!block) continue;\n const blockId = `${uuid}:${i}`;\n switch (block.type) {\n case \"text\": {\n const text = readString(block.text);\n if (text && text.trim().length > 0) {\n changed.push(\n this.upsert({ kind: \"text\", id: blockId, ts, text: truncate$1(text, TEXT_CHAR_LIMIT) })\n );\n }\n break;\n }\n case \"thinking\": {\n const text = readString(block.thinking);\n if (text && text.trim().length > 0) {\n changed.push(\n this.upsert({\n kind: \"thinking\",\n id: blockId,\n ts,\n text: truncate$1(text, TEXT_CHAR_LIMIT)\n })\n );\n }\n break;\n }\n case \"tool_use\": {\n const toolUseId = readString(block.id) ?? blockId;\n const name = readString(block.name) ?? \"tool\";\n const input = asRecord(block.input) ?? {};\n if (name === \"AskUserQuestion\") {\n const questions = parseAskQuestions(input);\n if (questions.length > 0) {\n changed.push(this.upsert({ kind: \"ask\", id: toolUseId, ts, questions }));\n break;\n }\n }\n let inputText;\n try {\n inputText = JSON.stringify(input, null, 2);\n } catch {\n inputText = \"{}\";\n }\n changed.push(\n this.upsert({\n kind: \"tool\",\n id: toolUseId,\n ts,\n name,\n summary: summarizeToolUse(name, input),\n input: truncate$1(inputText, INPUT_CHAR_LIMIT)\n })\n );\n break;\n }\n }\n }\n return changed;\n }\n}\nconst SUBAGENT_ACTIVITY_LIMIT = 120;\nconst SUBAGENT_LIVE_WINDOW_MS = 45e3;\nfunction subagentPayload(agentId, state, finished) {\n const activity = [];\n let report = null;\n for (const entry of state.builder.entries) {\n if (entry.kind === \"tool\") {\n activity.push({\n id: entry.id,\n name: entry.name,\n summary: entry.summary,\n ok: entry.result ? entry.result.ok : null\n });\n } else if (entry.kind === \"text\") {\n report = entry.text;\n }\n }\n const mtime = state.tailer.mtimeMs();\n const running = !finished && mtime !== null && Date.now() - mtime < SUBAGENT_LIVE_WINDOW_MS;\n const trimmed = Math.max(0, activity.length - SUBAGENT_ACTIVITY_LIMIT);\n return {\n agentId,\n toolUseId: state.meta.toolUseId ?? null,\n agentType: state.meta.agentType ?? null,\n description: state.meta.description ?? null,\n model: state.meta.model ?? null,\n // Keep the newest calls — the tail is what \"what is it doing\" needs.\n activity: activity.slice(-SUBAGENT_ACTIVITY_LIMIT),\n trimmed,\n report,\n running\n };\n}\nfunction transcriptPathFor$1(cwd, sessionId) {\n return join(projectDirFor(cwd), `${sessionId}.jsonl`);\n}\nfunction projectsRoot() {\n return join(homedir(), \".claude\", \"projects\");\n}\nfunction projectDirFor(cwd) {\n return join(projectsRoot(), cwd.replace(/\\//g, \"-\"));\n}\nfunction resolveTranscriptPath(session, sessionId) {\n const recorded = session.transcript_path;\n if (recorded && existsSync(recorded)) return recorded;\n const derived = transcriptPathFor$1(session.cwd, sessionId);\n if (existsSync(derived)) return derived;\n return findTranscriptById(sessionId);\n}\nfunction findTranscriptById(sessionId) {\n const root = projectsRoot();\n let dirs;\n try {\n dirs = readdirSync(root);\n } catch {\n return null;\n }\n for (const dir of dirs) {\n const candidate = join(root, dir, `${sessionId}.jsonl`);\n if (existsSync(candidate)) return candidate;\n }\n return null;\n}\nfunction listSubagents(transcriptPath, known) {\n const dir = join(dirname(transcriptPath), basename(transcriptPath, \".jsonl\"), \"subagents\");\n let names;\n try {\n names = readdirSync(dir);\n } catch {\n return [];\n }\n const files2 = [];\n for (const name of names) {\n const agentId = name.match(/^agent-(.+)\\.jsonl$/)?.[1];\n if (!agentId) continue;\n if (known?.has(agentId)) continue;\n let meta = {};\n try {\n const parsed = JSON.parse(\n readFileSync(join(dir, `agent-${agentId}.meta.json`), \"utf8\")\n );\n if (parsed && typeof parsed === \"object\") meta = parsed;\n } catch {\n }\n files2.push({ agentId, path: join(dir, name), meta });\n }\n return files2;\n}\nclass JsonlTailer {\n constructor(path) {\n this.path = path;\n }\n path;\n offset = 0;\n partial = Buffer.alloc(0);\n lastMtimeMs = null;\n /** Last write seen by the most recent read(), or null before the first one. */\n mtimeMs() {\n return this.lastMtimeMs;\n }\n read() {\n let fd;\n try {\n fd = openSync(this.path, \"r\");\n } catch {\n return { status: \"missing\" };\n }\n try {\n const stat = fstatSync(fd);\n this.lastMtimeMs = stat.mtimeMs;\n const size = stat.size;\n if (size < this.offset) {\n this.offset = 0;\n this.partial = Buffer.alloc(0);\n return { status: \"reset\" };\n }\n if (size === this.offset) return { status: \"unchanged\" };\n const chunk = Buffer.alloc(size - this.offset);\n let read = 0;\n while (read < chunk.length) {\n const n = readSync(fd, chunk, read, chunk.length - read, this.offset + read);\n if (n <= 0) break;\n read += n;\n }\n this.offset += read;\n const buffer = Buffer.concat([this.partial, chunk.subarray(0, read)]);\n const lines = [];\n let start = 0;\n for (let i = 0; i < buffer.length; i++) {\n if (buffer[i] === 10) {\n lines.push(buffer.subarray(start, i).toString(\"utf8\"));\n start = i + 1;\n }\n }\n this.partial = buffer.subarray(start);\n return lines.length > 0 ? { status: \"lines\", lines } : { status: \"unchanged\" };\n } catch {\n return { status: \"missing\" };\n } finally {\n closeSync(fd);\n }\n }\n}\nconst execFileAsync = promisify(execFile);\nfunction hardTimeout(p, ms, fallback) {\n return new Promise((resolve) => {\n const timer = setTimeout(() => resolve(fallback), ms);\n p.then(\n (v) => {\n clearTimeout(timer);\n resolve(v);\n },\n () => {\n clearTimeout(timer);\n resolve(fallback);\n }\n );\n });\n}\nasync function getAllPaneTitles() {\n const result = /* @__PURE__ */ new Map();\n const stdout = await hardTimeout(\n execFileAsync(\"tmux\", [\n \"list-panes\",\n \"-a\",\n \"-F\",\n \"#{session_name}:#{window_index}.#{pane_index}\t#{session_attached}\t#{pane_width}\t#{pane_title}\"\n ], { encoding: \"utf-8\", timeout: 2e3 }).then((r) => r.stdout),\n 2500,\n \"\"\n );\n for (const line of stdout.trim().split(\"\\n\")) {\n if (!line) continue;\n const [target, attached, width, ...rest] = line.split(\"\t\");\n if (!target || rest.length === 0) continue;\n const title = rest.join(\"\t\").trim();\n result.set(target, {\n title: title || null,\n attached: Number(attached) || 0,\n width: Number(width) || 0\n });\n }\n return result;\n}\nasync function sendKeyAsync(target, key) {\n try {\n await execFileAsync(\"tmux\", [\"send-keys\", \"-t\", target, key], { timeout: 1e3 });\n return true;\n } catch {\n return false;\n }\n}\nasync function capturePaneContentAsync(target, withColor = false) {\n const args = withColor ? [\"capture-pane\", \"-p\", \"-e\", \"-t\", target] : [\"capture-pane\", \"-p\", \"-t\", target];\n return hardTimeout(\n execFileAsync(\"tmux\", args, {\n encoding: \"utf-8\",\n timeout: 1e3\n }).then((r) => r.stdout),\n 1500,\n null\n );\n}\nfunction isPaneShowingSpinner(content) {\n if (!content) return false;\n const bottomLines = content.split(\"\\n\").slice(-5).join(\"\");\n return /[\\u2800-\\u28FF]/.test(bottomLines);\n}\nfunction isPaneShowingIdlePrompt(content) {\n if (!content) return false;\n const bottom = content.split(\"\\n\").slice(-12);\n const joined = bottom.join(\"\\n\");\n if (/[⠀-⣿]/.test(joined)) return false;\n if (/esc to interrupt|esc to cancel|ctrl\\+c to interrupt/i.test(joined)) return false;\n if (bottom.some((line) => /^\\s*[^\\w\\s❯│>]\\s+\\S+…/.test(line))) return false;\n if (/Do you want|❯\\s+\\d+\\./.test(joined)) return false;\n return bottom.some((line) => /^❯/.test(line.trim()));\n}\nconst MAX_PROMPT_INPUT_CHARS = 2e3;\nconst PROMPT_HINTS = [/^Press \\w+ to /i, /^Try \"/i, /^\\?\\s/];\nfunction stripAnsi(text) {\n return text.replace(/\\x1b\\][^\\x07\\x1b]*(?:\\x07|\\x1b\\\\)/g, \"\").replace(/\\x1b\\[[0-9;]*[a-zA-Z]/g, \"\");\n}\nfunction scanCells(line) {\n const cells = [];\n let faint = false;\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if (ch === \"\\x1B\" && line[i + 1] === \"]\") {\n const bel = line.indexOf(\"\\x07\", i);\n const st = line.indexOf(\"\\x1B\\\\\", i + 2);\n const end = bel === -1 ? st : st === -1 ? bel : Math.min(bel, st);\n if (end === -1) break;\n i = end + (end === st ? 1 : 0);\n continue;\n }\n if (ch === \"\\x1B\" && line[i + 1] === \"[\") {\n const end = line.indexOf(\"m\", i);\n if (end === -1) break;\n for (const param of line.slice(i + 2, end).split(\";\")) {\n const code = Number(param || \"0\");\n if (code === 2) faint = true;\n else if (code === 0 || code === 22) faint = false;\n }\n i = end;\n continue;\n }\n cells.push({ ch, faint });\n }\n return cells;\n}\nfunction findPromptBox(lines) {\n let bottomSepIdx = -1;\n for (let i = lines.length - 1; i >= 0; i--) {\n if (lines[i].startsWith(\"─────\")) {\n bottomSepIdx = i;\n break;\n }\n }\n if (bottomSepIdx === -1) return null;\n let topSepIdx = -1;\n for (let i = bottomSepIdx - 1; i >= 0; i--) {\n if (lines[i].startsWith(\"─────\")) {\n topSepIdx = i;\n break;\n }\n }\n if (topSepIdx === -1) return null;\n return { topSepIdx, bottomSepIdx };\n}\nfunction readPromptBox(content) {\n if (!content) return null;\n const lines = content.split(\"\\n\");\n const clean = lines.map(stripAnsi);\n const box = findPromptBox(clean);\n if (!box) return null;\n const region = lines.slice(box.topSepIdx + 1, box.bottomSepIdx);\n const cleanRegion = clean.slice(box.topSepIdx + 1, box.bottomSepIdx);\n if (region.length === 0) return null;\n if (cleanRegion.some((line) => /^\\s*❯?\\s*\\d+\\.\\s/.test(line))) return null;\n if (!/^\\s*[❯>]/.test(cleanRegion[0])) return null;\n const cells = [];\n region.forEach((line, i) => {\n const lineCells = scanCells(line);\n if (i === 0) {\n let start = 0;\n while (start < lineCells.length && /\\s/.test(lineCells[start].ch)) start++;\n if (start < lineCells.length && /[❯>]/.test(lineCells[start].ch)) start++;\n if (start < lineCells.length && /[ \\u00a0]/.test(lineCells[start].ch)) start++;\n cells.push(...lineCells.slice(start));\n } else {\n cells.push({ ch: \"\\n\", faint: false });\n cells.push(...lineCells.slice(lineCells.length >= 2 ? 2 : 0));\n }\n });\n const render = (kept) => kept.map((c) => c.ch === \" \" ? \" \" : c.ch).join(\"\").split(\"\\n\").map((line) => line.trimEnd()).join(\"\\n\").trim();\n const typed = render(cells.filter((c) => !c.faint));\n if (typed) return { kind: \"typed\", text: truncate(typed) };\n const ghost = render(cells);\n if (!ghost) return null;\n if (PROMPT_HINTS.some((hint) => hint.test(ghost))) return null;\n return { kind: \"suggestion\", text: truncate(ghost) };\n}\nfunction truncate(text) {\n return text.length > MAX_PROMPT_INPUT_CHARS ? text.slice(0, MAX_PROMPT_INPUT_CHARS) + \"…\" : text;\n}\nconst MAX_QUEUED_CHARS = 300;\nconst MAX_QUEUED_MESSAGES = 10;\nconst QUEUED_ROW_BG = \"48;5;237\";\nfunction readQueuedMessages(content) {\n if (!content) return [];\n const lines = content.split(\"\\n\");\n const clean = lines.map(stripAnsi);\n const box = findPromptBox(clean);\n if (!box) return [];\n const rows = [];\n for (let i = box.topSepIdx - 1; i >= 0; i--) {\n if (!lines[i].includes(QUEUED_ROW_BG)) break;\n const starts = /^ {2}[❯>] /.test(clean[i]);\n if (!starts && !/^ {2,}\\S/.test(clean[i])) break;\n rows.push({ text: clean[i].replace(/^ {2}[❯>] /, \"\").replace(/^ +/, \"\").trimEnd(), starts });\n if (rows.length > MAX_QUEUED_MESSAGES * 4) break;\n }\n rows.reverse();\n const messages = [];\n for (const row of rows) {\n if (row.starts || messages.length === 0) messages.push(row.text);\n else messages[messages.length - 1] += \" \" + row.text;\n }\n return messages.map((m) => m.trim()).filter(Boolean).slice(0, MAX_QUEUED_MESSAGES).map((m) => m.length > MAX_QUEUED_CHARS ? m.slice(0, MAX_QUEUED_CHARS) + \"…\" : m);\n}\nfunction detectRecentInterruption(content) {\n if (!content) return null;\n const lines = content.split(\"\\n\");\n const bottomLines = lines.slice(-5).join(\"\\n\");\n if (bottomLines.includes(\"Esc to cancel\") || bottomLines.includes(\"Esc to interrupt\") || bottomLines.includes(\"ctrl+c to interrupt\")) {\n return null;\n }\n const box = findPromptBox(lines);\n if (!box) return null;\n const { topSepIdx } = box;\n let interactionStartIdx = -1;\n const maxScan = Math.max(0, topSepIdx - 15);\n for (let i = topSepIdx - 1; i >= maxScan; i--) {\n const line = lines[i];\n if (line.startsWith(\"●\") || line.startsWith(\"❯\")) {\n interactionStartIdx = i;\n break;\n }\n }\n if (interactionStartIdx === -1) return null;\n const slice = lines.slice(interactionStartIdx, topSepIdx).join(\"\\n\");\n if (slice.includes(\"Interrupted\")) return \"interrupted\";\n if (slice.includes(\"User declined to answer\")) return \"declined\";\n return null;\n}\nfunction detectRemoteControlUrl(content) {\n if (!content) return null;\n const clean = stripAnsi(content);\n const match = clean.match(/https:\\/\\/claude\\.ai\\/code[^\\s)\\]>]*/);\n return match ? match[0].replace(/[.,;:]+$/, \"\") : null;\n}\nconst MAX_PROMPT_OPTIONS = 10;\nconst MAX_OPTION_CHARS = 120;\nconst OPTION_RUN_WINDOW = 24;\nconst OPTION_RUN_TAIL = 3;\nconst OPTION_ROW = /^(❯|>)?\\s*(\\d+)[.)]\\s+(\\S.*)$/;\nconst OPTION_RULE = /^[─━╌┄┈—–-]+$/;\nconst DIALOG_HINT = /↑\\/↓|Enter to (?:select|confirm)|Esc to cancel/;\nconst TYPING_HINT = /ctrl\\+g to edit/i;\nconst NOTES_LINE = /^Notes:/;\nconst NOTES_CLOSED = /press n to add notes/i;\nconst TAB_STRIP = /^(?:←\\s+)?[☐☒☑✔✓]\\s/;\nconst INLINE_HINT = /^(.*?\\S)\\s{2,}(\\S.*)$/;\nconst PREVIEW_COLUMN = /\\s{2,}[┌┐└┘├┤─━│╭╮╰╯].*$/;\nconst BOX_ROW = /^[┌┐└┘├┤─━│╭╮╰╯]/;\nconst CHECKBOX = /^\\[([ xX✔✓])\\]\\s*/;\nconst HINT_INDENT_SPAN = 8;\nfunction bodyOf(line) {\n const body = (line ?? \"\").replace(/[\\s│┃|╎┆┊]+$/, \"\").replace(/^\\s*[│┃|╎┆┊]+/, \"\");\n const text = body.trimStart();\n return { indent: body.length - text.length, text };\n}\nfunction clampOption(text) {\n return text.length > MAX_OPTION_CHARS ? text.slice(0, MAX_OPTION_CHARS) + \"…\" : text;\n}\nfunction readPromptOptions(content, mode = {}) {\n if (!content) return null;\n const raw = content.split(\"\\n\");\n const seen = /* @__PURE__ */ new Map();\n const at = (i) => {\n let line = seen.get(i);\n if (line === void 0) {\n line = bodyOf(raw[i]);\n seen.set(i, line);\n }\n return line;\n };\n let lastContent = -1;\n for (let i = raw.length - 1; i >= 0; i--) {\n if (at(i).text.length > 0) {\n lastContent = i;\n break;\n }\n }\n if (lastContent === -1) return null;\n const hintLine = at(lastContent).text;\n const declared = DIALOG_HINT.test(hintLine);\n if (mode.declaredOnly && !declared) return null;\n const reach = declared ? OPTION_RUN_WINDOW : OPTION_RUN_TAIL;\n let end = -1;\n for (let i = lastContent; i >= Math.max(0, lastContent - reach); i--) {\n if (OPTION_ROW.test(at(i).text)) {\n end = i;\n break;\n }\n }\n if (end === -1) return null;\n const floor = Math.max(0, lastContent - OPTION_RUN_WINDOW);\n const rows = [];\n let expected = -1;\n for (let i = end; i >= floor; i--) {\n const { indent, text } = at(i);\n const m = text.match(OPTION_ROW);\n if (m) {\n const n = Number(m[2]);\n if (expected !== -1 && n !== expected) break;\n rows.push({ i, n, label: m[3], selected: m[1] === \"❯\", indent: m[1] ? indent + 2 : indent });\n expected = n - 1;\n if (n === 1) break;\n continue;\n }\n if (declared) continue;\n if (text.length === 0 || OPTION_RULE.test(text)) continue;\n const below = rows[rows.length - 1];\n if (below && indent > below.indent) continue;\n break;\n }\n rows.reverse();\n if (rows.length < 2 || rows.length > MAX_PROMPT_OPTIONS) return null;\n if (rows[0].n !== 1) return null;\n let multi = false;\n const notes = [];\n const options = rows.map((row, k) => {\n const preview = PREVIEW_COLUMN.test(row.label);\n let label = row.label.replace(PREVIEW_COLUMN, \"\").trimEnd();\n const box = label.match(CHECKBOX);\n if (box) {\n multi = true;\n label = label.slice(box[0].length);\n }\n const last = k + 1 === rows.length;\n const stop = last ? declared ? lastContent : lastContent + 1 : rows[k + 1].i;\n const noting = last && declared;\n let hint;\n let ruled = false;\n for (let i = row.i + 1; i < stop; i++) {\n const { indent, text } = at(i);\n if (OPTION_RULE.test(text)) {\n if (!noting) break;\n ruled = true;\n continue;\n }\n if (!text || BOX_ROW.test(text)) continue;\n const bare = text.replace(PREVIEW_COLUMN, \"\").trimEnd();\n if (!bare) continue;\n const under = !ruled && indent >= row.indent && indent <= row.indent + HINT_INDENT_SPAN;\n if (!under || hint !== void 0) {\n if (noting && !ruled) notes.push(clampOption(bare));\n continue;\n }\n if (preview) {\n label = `${label} ${bare}`;\n continue;\n }\n hint = clampOption(bare);\n }\n if (hint === void 0 && !preview) {\n const inline = label.match(INLINE_HINT);\n if (inline) {\n label = inline[1];\n hint = clampOption(inline[2]);\n }\n }\n return {\n n: row.n,\n label: clampOption(label),\n hint,\n checked: box ? box[1] !== \" \" : void 0,\n selected: row.selected\n };\n });\n let question = null;\n let top = null;\n for (let i = rows[0].i - 1; i >= 0 && i >= rows[0].i - 4; i--) {\n const { text } = at(i);\n if (/^[─━╌┄┈╭╮╰╯]+$/.test(text) || TAB_STRIP.test(text)) break;\n if (!text) {\n if (top !== null) break;\n continue;\n }\n top = text;\n if (text.endsWith(\"?\")) {\n question = clampOption(text);\n break;\n }\n }\n if (question === null && top !== null) question = clampOption(top);\n const choice = { question, options };\n if (multi) choice.multi = true;\n if (declared) {\n choice.keys = clampOption(hintLine);\n if (TYPING_HINT.test(hintLine)) {\n choice.typing = true;\n if (notes.some((note) => NOTES_LINE.test(note) && !NOTES_CLOSED.test(note))) {\n choice.noting = true;\n }\n }\n if (notes.length > 0) choice.notes = notes;\n }\n return choice;\n}\nconst TAIL_BYTES = 64 * 1024;\nconst RESOLVE_RETRY_POLLS = 20;\nconst paths = /* @__PURE__ */ new Map();\nconst files = /* @__PURE__ */ new Map();\nfunction transcriptPathFor(session) {\n const memo = paths.get(session.id);\n if (memo && (memo.path !== null || memo.age < RESOLVE_RETRY_POLLS)) {\n if (memo.path === null) memo.age++;\n return memo.path;\n }\n const path = resolveTranscriptPath(session, session.id);\n paths.set(session.id, { path, age: 0 });\n return path;\n}\nfunction readLastUsage(path, size) {\n const length = Math.min(size, TAIL_BYTES);\n if (length === 0) return null;\n const buffer = Buffer.alloc(length);\n const fd = openSync(path, \"r\");\n try {\n readSync(fd, buffer, 0, length, size - length);\n } finally {\n closeSync(fd);\n }\n const lines = buffer.toString(\"utf-8\").split(\"\\n\");\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i];\n if (!line.includes('\"assistant\"')) continue;\n try {\n const record = asRecord(JSON.parse(line));\n if (record?.type !== \"assistant\") continue;\n const message = asRecord(record.message);\n const usage = message ? readContextUsage(message) : null;\n if (usage) return usage;\n } catch {\n }\n }\n return null;\n}\nfunction peekContextUsage(session) {\n const path = transcriptPathFor(session);\n if (!path) return null;\n let stat;\n try {\n stat = statSync(path);\n } catch {\n files.delete(path);\n paths.delete(session.id);\n return null;\n }\n const memo = files.get(path);\n if (memo && memo.mtimeMs === stat.mtimeMs && memo.size === stat.size) return memo.usage;\n const usage = readLastUsage(path, stat.size) ?? memo?.usage ?? null;\n files.set(path, { mtimeMs: stat.mtimeMs, size: stat.size, usage });\n return usage;\n}\nfunction peekContextPercent(session) {\n const usage = peekContextUsage(session);\n return usage ? contextPercent(usage) : null;\n}\nfunction resizeTmuxWindow(target, cols, rows) {\n try {\n const safeCols = Math.max(20, Math.min(500, Math.floor(cols)));\n const safeRows = Math.max(5, Math.min(200, Math.floor(rows)));\n const windowTarget = target.replace(/\\.\\d+$/, \"\");\n execFileSync(\n \"tmux\",\n [\"resize-window\", \"-t\", windowTarget, \"-x\", String(safeCols), \"-y\", String(safeRows)],\n {\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n timeout: 2e3\n }\n );\n } catch {\n }\n}\nconst HISTORY_TAIL = 64;\nconst SEP = \"@@CLAUDE_MUX_SEP@@\";\nfunction run(args) {\n return execFileSync(\"tmux\", args, {\n encoding: \"utf-8\",\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n timeout: 2e3,\n maxBuffer: 16 * 1024 * 1024\n });\n}\nfunction splitLines(s) {\n if (s === \"\") return [];\n const lines = s.split(\"\\n\");\n if (lines[lines.length - 1] === \"\") lines.pop();\n return lines;\n}\nfunction snapshotPane(target) {\n let out;\n try {\n out = run([\n \"display-message\",\n \"-p\",\n \"-t\",\n target,\n \"#{history_size} #{alternate_on} #{pane_width} #{pane_height}\",\n \";\",\n \"capture-pane\",\n \"-p\",\n \"-e\",\n \"-t\",\n target,\n \"-S\",\n `-${HISTORY_TAIL}`,\n \"-E\",\n \"-1\",\n \";\",\n \"display-message\",\n \"-p\",\n SEP,\n \";\",\n \"capture-pane\",\n \"-p\",\n \"-e\",\n \"-t\",\n target\n ]);\n } catch {\n return null;\n }\n const nl = out.indexOf(\"\\n\");\n if (nl === -1) return null;\n const header = out.slice(0, nl).trim().split(/\\s+/);\n if (header.length < 4) return null;\n const historySize = Number(header[0]) || 0;\n const alt = header[1] === \"1\";\n const cols = Number(header[2]) || 0;\n const rows = Number(header[3]) || 0;\n const body = out.slice(nl + 1);\n const sepIdx = body.indexOf(SEP + \"\\n\");\n if (sepIdx === -1) return null;\n const tailRaw = body.slice(0, sepIdx);\n const screenRaw = body.slice(sepIdx + SEP.length + 1);\n let tail = splitLines(tailRaw);\n if (historySize === 0) tail = [];\n else if (tail.length > historySize) tail = tail.slice(tail.length - historySize);\n return { historySize, alt, cols, rows, tail, screen: splitLines(screenRaw) };\n}\nfunction fetchHistoryRange(target, start, end, knownHistorySize) {\n if (end <= start) return { start, lines: [], historySize: knownHistorySize };\n let known = knownHistorySize;\n let last = null;\n for (let attempt = 0; attempt < 4; attempt++) {\n const relStart = start - known;\n const relEnd = end - 1 - known;\n if (relEnd >= 0) {\n return { start, lines: [], historySize: known };\n }\n let out;\n try {\n out = run([\n \"display-message\",\n \"-p\",\n \"-t\",\n target,\n \"#{history_size}\",\n \";\",\n \"capture-pane\",\n \"-p\",\n \"-e\",\n \"-t\",\n target,\n \"-S\",\n String(relStart),\n \"-E\",\n String(relEnd)\n ]);\n } catch {\n return null;\n }\n const nl = out.indexOf(\"\\n\");\n if (nl === -1) return null;\n const historySize = Number(out.slice(0, nl).trim()) || 0;\n const lines = splitLines(out.slice(nl + 1));\n const drift = historySize - known;\n if (drift === 0) return { start, lines, historySize };\n last = { start: Math.max(0, start + drift), lines, historySize };\n known = historySize;\n }\n return last;\n}\nclass SessionWatcher {\n subscribers = /* @__PURE__ */ new Set();\n pollTimer = null;\n lastState = /* @__PURE__ */ new Map();\n // filename -> mtime\n pollInterval = 500;\n start() {\n if (this.pollTimer) return;\n console.log(\"[watcher] Started polling\", SESSIONS_DIR, `(${this.pollInterval}ms)`);\n this.updateState();\n this.pollTimer = setInterval(() => {\n if (this.checkForChanges()) {\n this.notifySubscribers();\n }\n }, this.pollInterval);\n }\n updateState() {\n this.lastState.clear();\n try {\n const files2 = readdirSync(SESSIONS_DIR);\n for (const file of files2) {\n if (!file.endsWith(\".json\")) continue;\n try {\n const stat = statSync(join(SESSIONS_DIR, file));\n this.lastState.set(file, stat.mtimeMs);\n } catch {\n }\n }\n } catch {\n }\n }\n checkForChanges() {\n const newState = /* @__PURE__ */ new Map();\n let changed = false;\n try {\n const files2 = readdirSync(SESSIONS_DIR);\n for (const file of files2) {\n if (!file.endsWith(\".json\")) continue;\n try {\n const stat = statSync(join(SESSIONS_DIR, file));\n newState.set(file, stat.mtimeMs);\n const oldMtime = this.lastState.get(file);\n if (oldMtime === void 0) {\n console.log(\"[watcher] File added:\", file);\n changed = true;\n } else if (oldMtime !== stat.mtimeMs) {\n console.log(\"[watcher] File changed:\", file);\n changed = true;\n }\n } catch {\n }\n }\n for (const file of this.lastState.keys()) {\n if (!newState.has(file)) {\n console.log(\"[watcher] File removed:\", file);\n changed = true;\n }\n }\n } catch {\n }\n this.lastState = newState;\n return changed;\n }\n notifySubscribers() {\n console.log(\"[watcher] Notifying\", this.subscribers.size, \"subscribers\");\n for (const callback of this.subscribers) {\n try {\n callback();\n } catch (error) {\n console.error(\"[watcher] Subscriber error:\", error);\n }\n }\n }\n subscribe(callback) {\n this.subscribers.add(callback);\n if (this.subscribers.size === 1) {\n this.start();\n }\n return () => {\n this.subscribers.delete(callback);\n if (this.subscribers.size === 0) {\n this.stop();\n }\n };\n }\n stop() {\n if (this.pollTimer) {\n clearInterval(this.pollTimer);\n this.pollTimer = null;\n }\n this.lastState.clear();\n console.log(\"[watcher] Stopped\");\n }\n}\nconst sessionWatcher = new SessionWatcher();\nconst DEFAULT_CONFIG = {\n maxSessionsClients: 50,\n maxTerminalClientsPerTarget: 10,\n maxTerminalClientsTotal: 100,\n maxQueuedMessages: 100,\n debug: false\n};\nfunction log(entry, config) {\n if (entry.level === \"debug\" && !config.debug) return;\n const prefix = `[ws:${entry.component}]`;\n const msg = entry.data ? `${prefix} ${entry.message} ${JSON.stringify(entry.data)}` : `${prefix} ${entry.message}`;\n switch (entry.level) {\n case \"debug\":\n console.debug(msg);\n break;\n case \"info\":\n console.info(msg);\n break;\n case \"warn\":\n console.warn(msg);\n break;\n case \"error\":\n console.error(msg);\n break;\n }\n}\nconst DEFAULT_HISTORY_DEPTH = 200;\nconst MAX_HISTORY_REQUEST = 1e3;\nfunction deduplicateByTmuxTarget(sessions) {\n const byTarget = /* @__PURE__ */ new Map();\n const noTarget = [];\n for (const session of sessions) {\n if (!session.tmux_target) {\n noTarget.push(session);\n continue;\n }\n const existing = byTarget.get(session.tmux_target);\n if (!existing || session.last_update > existing.last_update) {\n byTarget.set(session.tmux_target, session);\n }\n }\n return [...byTarget.values(), ...noTarget];\n}\nconst idleLookTicks = /* @__PURE__ */ new Map();\nasync function captureAndSyncSessions() {\n const sessions = getAllSessions();\n const captures = /* @__PURE__ */ new Map();\n const rawCaptures = /* @__PURE__ */ new Map();\n const apply = (session, patch) => {\n updateSession(session.id, patch);\n Object.assign(session, patch);\n };\n await Promise.all(\n sessions.map(async (session) => {\n if (!session.tmux_target) return;\n const raw = await capturePaneContentAsync(session.tmux_target, true);\n if (!raw) return;\n const content = stripAnsi(raw);\n captures.set(session.tmux_target, content);\n rawCaptures.set(session.tmux_target, raw);\n if (session.state !== \"idle\" && detectRecentInterruption(content)) {\n apply(session, { state: \"idle\", current_action: null, prompt_text: null });\n } else if (session.state === \"busy\" && isPaneShowingIdlePrompt(content)) {\n const ticks = (idleLookTicks.get(session.id) ?? 0) + 1;\n if (ticks >= 2) {\n idleLookTicks.delete(session.id);\n apply(session, { state: \"idle\", current_action: null, prompt_text: null });\n } else {\n idleLookTicks.set(session.id, ticks);\n }\n } else {\n idleLookTicks.delete(session.id);\n }\n if (session.state === \"idle\" && isPaneShowingSpinner(content)) {\n apply(session, { state: \"busy\", current_action: \"Compacting...\" });\n }\n })\n );\n if (idleLookTicks.size > 0) {\n const live = new Set(sessions.map((s) => s.id));\n for (const id of idleLookTicks.keys()) {\n if (!live.has(id)) idleLookTicks.delete(id);\n }\n }\n return { captures, rawCaptures, sessions };\n}\nconst wideningNow = /* @__PURE__ */ new Set();\nconst rcSeen = /* @__PURE__ */ new Set();\nlet rcPrimed = false;\nasync function getEnrichedSessionsAsync() {\n const [{ captures, rawCaptures, sessions }, paneTitles] = await Promise.all([\n captureAndSyncSessions(),\n getAllPaneTitles()\n ]);\n const links = readLinks();\n for (const s of sessions) {\n const pane = s.tmux_target ? paneTitles.get(s.tmux_target) : void 0;\n if (pane && wantsWidening(pane) && !wideningNow.has(s.tmux_target)) {\n const target = s.tmux_target;\n wideningNow.add(target);\n void widenDetachedWindow(target).finally(() => wideningNow.delete(target));\n }\n }\n const auto = getSettings().autoRemoteControl;\n for (const s of sessions) {\n if (rcSeen.has(s.id)) continue;\n rcSeen.add(s.id);\n if (!rcPrimed || !auto) continue;\n if (s.rc_url || !s.tmux_target || (s.agent ?? \"claude\") !== \"claude\") continue;\n if (!isClaudeMuxSessionName(s.tmux_target.split(\":\")[0])) continue;\n enqueue(s.tmux_target, \"/rc\", \"control\");\n }\n rcPrimed = true;\n for (const s of sessions) {\n if (!s.tmux_target) continue;\n const content = captures.get(s.tmux_target);\n if (!content) continue;\n const rcUrl = detectRemoteControlUrl(content);\n if (rcUrl && rcUrl !== s.rc_url) {\n updateSession(s.id, { rc_url: rcUrl });\n s.rc_url = rcUrl;\n if (/Disconnect this session[\\s\\S]*❯\\s*Continue/.test(content)) {\n void sendKeyAsync(s.tmux_target, \"Enter\");\n }\n } else if (!rcUrl && s.rc_url) {\n updateSession(s.id, { rc_url: null });\n s.rc_url = null;\n }\n }\n const enrichedSessions = sessions.map((s) => {\n const paneTitle = s.tmux_target ? paneTitles.get(s.tmux_target)?.title ?? null : null;\n const raw = s.tmux_target ? rawCaptures.get(s.tmux_target) : void 0;\n const stripped = s.tmux_target ? captures.get(s.tmux_target) : void 0;\n const box = raw ? readPromptBox(raw) : null;\n const enriched = {\n ...s,\n pane_title: paneTitle,\n pane_alive: s.tmux_target ? paneTitles.has(s.tmux_target) : true,\n draft_input: box?.text ?? null,\n draft_kind: box?.kind ?? null,\n // Messages the user typed into the pane while it was busy, waiting\n // their turn in Claude Code's own queue.\n pane_queue: raw ? readQueuedMessages(raw) : [],\n // The dialog's own numbered rows, so the composer can offer them as\n // answers instead of making you drive arrows at a screen you can't see.\n // When the hooks report a dialog, any run at the foot is one. When\n // they don't — a local command's dialog such as `/model` leaves the\n // session idle, and the permission notification can trail the dialog\n // by a tick — only a dialog that names its own keys is believed.\n pane_choice: stripped ? readPromptOptions(stripped, {\n declaredOnly: s.state !== \"waiting\" && s.state !== \"permission\"\n }) : null,\n // One stat per session per tick; the file is only read when it grew.\n context_pct: peekContextPercent(s)\n };\n if (s.tmux_target && links[s.tmux_target]) {\n const mainTarget = links[s.tmux_target];\n const mainSession = sessions.find((m) => m.tmux_target === mainTarget);\n if (mainSession) {\n enriched.linked_to = mainSession.id;\n }\n }\n return enriched;\n });\n return deduplicateByTmuxTarget(enrichedSessions);\n}\nfunction resizePane(target, cols, rows) {\n resizeTmuxWindow(target, cols, rows);\n}\nlet cachedSystemStats = { cpu: 0, ram: 0, swap: 0, ramTotal: 0, swapTotal: 0 };\nlet prevCpuIdle = 0;\nlet prevCpuTotal = 0;\nlet systemStatsTimer = null;\nlet systemStatsRefCount = 0;\nfunction refreshSystemStats() {\n try {\n const stat = readFileSync(\"/proc/stat\", \"utf-8\");\n const meminfo = readFileSync(\"/proc/meminfo\", \"utf-8\");\n const cpuLine = stat.split(\"\\n\")[0];\n const cpuParts = cpuLine.split(/\\s+/).slice(1).map(Number);\n const idle = cpuParts[3] + (cpuParts[4] || 0);\n const total = cpuParts.reduce((a, b) => a + b, 0);\n const diffIdle = idle - prevCpuIdle;\n const diffTotal = total - prevCpuTotal;\n const cpuPercent = diffTotal > 0 ? Math.round((1 - diffIdle / diffTotal) * 100) : 0;\n prevCpuIdle = idle;\n prevCpuTotal = total;\n const mem = {};\n for (const line of meminfo.split(\"\\n\")) {\n const match = line.match(/^(\\w+):\\s+(\\d+)/);\n if (match) mem[match[1]] = parseInt(match[2], 10);\n }\n const memTotal = mem[\"MemTotal\"] || 1;\n const memAvailable = mem[\"MemAvailable\"] || 0;\n const swapTotal = mem[\"SwapTotal\"] || 0;\n const swapFree = mem[\"SwapFree\"] || 0;\n cachedSystemStats = {\n cpu: cpuPercent,\n ram: Math.round((memTotal - memAvailable) / memTotal * 100),\n swap: swapTotal > 0 ? Math.round((swapTotal - swapFree) / swapTotal * 100) : 0,\n ramTotal: Math.round(memTotal / 1024),\n swapTotal: Math.round(swapTotal / 1024)\n };\n } catch {\n }\n}\nfunction startSystemStats() {\n systemStatsRefCount++;\n if (systemStatsRefCount === 1) {\n refreshSystemStats();\n systemStatsTimer = setInterval(refreshSystemStats, 1e4);\n }\n}\nfunction stopSystemStats() {\n systemStatsRefCount--;\n if (systemStatsRefCount <= 0) {\n systemStatsRefCount = 0;\n if (systemStatsTimer) {\n clearInterval(systemStatsTimer);\n systemStatsTimer = null;\n }\n }\n}\nclass SessionsWsManager {\n clients = /* @__PURE__ */ new Set();\n unsubscribe = null;\n interruptCheckTimer = null;\n cleanupTimer = null;\n systemStatsTimer = null;\n lastHash = \"\";\n lastStatsHash = \"\";\n config;\n droppedClients = 0;\n refreshing = false;\n refreshQueued = false;\n constructor(config) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n }\n /** Get current stats */\n getStats() {\n return {\n clients: this.clients.size,\n droppedClients: this.droppedClients\n };\n }\n /**\n * Add a client. Returns false if max clients reached.\n */\n addClient(client) {\n if (this.clients.size >= this.config.maxSessionsClients) {\n log(\n {\n level: \"warn\",\n component: \"sessions\",\n message: \"Max clients reached, rejecting connection\",\n data: { current: this.clients.size, max: this.config.maxSessionsClients }\n },\n this.config\n );\n return false;\n }\n this.clients.add(client);\n log(\n {\n level: \"debug\",\n component: \"sessions\",\n message: \"Client connected\",\n data: { total: this.clients.size }\n },\n this.config\n );\n if (this.clients.size === 1 && !this.unsubscribe) {\n console.log(\"[ws:sessions] First client, subscribing to watcher\");\n this.unsubscribe = sessionWatcher.subscribe(() => this.refreshAndBroadcast());\n this.interruptCheckTimer = setInterval(() => {\n this.refreshAndBroadcast();\n }, 500);\n try {\n cleanupStaleSessions();\n } catch {\n }\n this.cleanupTimer = setInterval(() => {\n try {\n cleanupStaleSessions();\n } catch {\n }\n }, 1e4);\n startSystemStats();\n this.systemStatsTimer = setInterval(() => {\n this.broadcastSystemStats();\n }, 1e4);\n } else {\n console.log(\"[ws:sessions] addClient: clients=\", this.clients.size, \"hasUnsubscribe=\", !!this.unsubscribe);\n }\n this.createSessionsMessageAsync(\"connected\").then((msg) => {\n if (client.isOpen()) {\n this.sendToClient(client, msg);\n this.sendToClient(client, this.createSystemStatsMessage());\n }\n });\n return true;\n }\n removeClient(client) {\n const had = this.clients.delete(client);\n if (had) {\n log(\n {\n level: \"debug\",\n component: \"sessions\",\n message: \"Client disconnected\",\n data: { total: this.clients.size }\n },\n this.config\n );\n }\n if (this.clients.size === 0 && this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n this.lastHash = \"\";\n if (this.interruptCheckTimer) {\n clearInterval(this.interruptCheckTimer);\n this.interruptCheckTimer = null;\n }\n if (this.cleanupTimer) {\n clearInterval(this.cleanupTimer);\n this.cleanupTimer = null;\n }\n if (this.systemStatsTimer) {\n clearInterval(this.systemStatsTimer);\n this.systemStatsTimer = null;\n }\n stopSystemStats();\n }\n }\n /**\n * Merge the send queue into each session object: how many messages wait, and\n * what the next one is, so the UI can name it instead of showing a number.\n */\n mergeQueueCounts(sessions) {\n for (const session of sessions) {\n const summary = session.tmux_target ? getQueueSummary(session.tmux_target) : null;\n session.queue_count = summary?.count ?? 0;\n session.queue_head_text = summary?.head.text ?? null;\n session.queue_head_kind = summary?.head.kind ?? null;\n }\n }\n async createSessionsMessageAsync(type) {\n const sessions = await getEnrichedSessionsAsync();\n saveProjects(sessions.map((s) => s.cwd).filter((cwd) => !!cwd));\n return {\n type,\n sessions,\n count: sessions.length,\n projects: getSavedProjects(),\n settings: getSettings(),\n timestamp: Date.now()\n };\n }\n createSystemStatsMessage() {\n return { type: \"systemStats\", ...cachedSystemStats, timestamp: Date.now() };\n }\n /**\n * Public trigger for an immediate fresh broadcast. Used by API mutation\n * endpoints (rename/kill/restart) so the UI updates instantly instead of\n * waiting up to 500ms for the file watcher poll to detect mtime change.\n */\n broadcastNow() {\n this.refreshAndBroadcast();\n }\n refreshAndBroadcast() {\n if (this.refreshing) {\n this.refreshQueued = true;\n return;\n }\n this.refreshing = true;\n this.createSessionsMessageAsync(\"sessions\").then((message) => {\n this.mergeQueueCounts(message.sessions);\n const hash = JSON.stringify(message.sessions);\n if (hash === this.lastHash) {\n return;\n }\n this.lastHash = hash;\n const data = JSON.stringify(message);\n const drops = [];\n for (const client of [...this.clients]) {\n if (!this.sendToClient(client, message, data)) drops.push(client);\n }\n for (const client of drops) {\n this.clients.delete(client);\n this.droppedClients++;\n log(\n {\n level: \"warn\",\n component: \"sessions\",\n message: \"Dropped slow client\",\n data: { total: this.clients.size }\n },\n this.config\n );\n }\n }).catch((err) => {\n log(\n {\n level: \"error\",\n component: \"sessions\",\n message: \"Refresh failed\",\n data: { error: String(err) }\n },\n this.config\n );\n }).finally(() => {\n this.refreshing = false;\n if (this.refreshQueued) {\n this.refreshQueued = false;\n this.refreshAndBroadcast();\n }\n });\n }\n broadcastSystemStats() {\n const message = this.createSystemStatsMessage();\n const hash = JSON.stringify(message);\n if (hash === this.lastStatsHash) return;\n this.lastStatsHash = hash;\n const data = JSON.stringify(message);\n const drops = [];\n for (const client of [...this.clients]) {\n if (!this.sendToClient(client, message, data)) drops.push(client);\n }\n for (const client of drops) {\n this.clients.delete(client);\n this.droppedClients++;\n }\n }\n sendToClient(client, message, data) {\n return sendJson(client, message, this.config, {\n component: \"sessions\",\n maxBuffered: 64 * 1024,\n data\n }) === \"sent\";\n }\n}\nfunction sendJson(client, message, config, opts) {\n try {\n if (!client.isOpen()) return \"closed\";\n if (client.getBufferedAmount) {\n const buffered = client.getBufferedAmount();\n if (buffered > opts.maxBuffered) {\n log(\n {\n level: \"warn\",\n component: opts.component,\n message: \"Client backpressure detected\",\n data: { buffered }\n },\n config\n );\n return \"backpressure\";\n }\n }\n client.send(opts.data ?? JSON.stringify(message));\n return \"sent\";\n } catch (err) {\n log(\n {\n level: \"error\",\n component: opts.component,\n message: \"Failed to send to client\",\n data: { error: String(err) }\n },\n config\n );\n return \"closed\";\n }\n}\nclass TerminalWsManager {\n clients = /* @__PURE__ */ new Map();\n pollTimers = /* @__PURE__ */ new Map();\n states = /* @__PURE__ */ new Map();\n config;\n totalClients = 0;\n droppedClients = 0;\n constructor(config) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n }\n /** Get current stats */\n getStats() {\n return {\n totalClients: this.totalClients,\n targets: this.clients.size,\n droppedClients: this.droppedClients\n };\n }\n /**\n * Add a client for a target. Returns false if max clients reached.\n */\n addClient(client, target) {\n if (this.totalClients >= this.config.maxTerminalClientsTotal) {\n log(\n {\n level: \"warn\",\n component: \"terminal\",\n message: \"Max total clients reached\",\n data: { current: this.totalClients, max: this.config.maxTerminalClientsTotal }\n },\n this.config\n );\n return false;\n }\n const targetClients = this.clients.get(target);\n if (targetClients && targetClients.size >= this.config.maxTerminalClientsPerTarget) {\n log(\n {\n level: \"warn\",\n component: \"terminal\",\n message: \"Max clients per target reached\",\n data: { target, current: targetClients.size, max: this.config.maxTerminalClientsPerTarget }\n },\n this.config\n );\n return false;\n }\n if (!this.clients.has(target)) {\n this.clients.set(target, /* @__PURE__ */ new Set());\n }\n this.clients.get(target).add(client);\n this.totalClients++;\n log(\n {\n level: \"debug\",\n component: \"terminal\",\n message: \"Client connected\",\n data: { target, targetClients: this.clients.get(target).size, total: this.totalClients }\n },\n this.config\n );\n if (this.clients.get(target).size === 1) {\n this.startPolling(target);\n }\n const snap = snapshotPane(target);\n const now = Date.now();\n if (snap) {\n this.states.set(target, {\n historySize: snap.historySize,\n alt: snap.alt,\n cols: snap.cols,\n rows: snap.rows,\n screenKey: snap.screen.join(\"\\n\")\n });\n this.sendToClient(client, {\n type: \"screen\",\n lines: snap.screen,\n historySize: snap.historySize,\n alt: snap.alt,\n cols: snap.cols,\n rows: snap.rows,\n timestamp: now\n });\n if (!snap.alt && snap.historySize > 0) {\n this.sendHistoryTail(client, target, snap.historySize, DEFAULT_HISTORY_DEPTH);\n }\n } else {\n this.sendToClient(client, {\n type: \"screen\",\n lines: [],\n historySize: 0,\n alt: false,\n cols: 0,\n rows: 0,\n timestamp: now\n });\n }\n return true;\n }\n /**\n * Serve a client's request for `count` history lines before absolute index `before`.\n * Replies only to the requesting client (each viewer scrolls independently).\n */\n requestHistory(client, target, before, count) {\n const state = this.states.get(target);\n if (!state || state.alt) return;\n const n = Math.max(1, Math.min(MAX_HISTORY_REQUEST, Math.floor(count)));\n const end = Math.max(0, Math.min(Math.floor(before), state.historySize));\n if (end === 0) return;\n this.sendHistoryTail(client, target, end, n);\n }\n sendHistoryTail(client, target, end, count) {\n const state = this.states.get(target);\n const known = state?.historySize ?? end;\n const start = Math.max(0, end - count);\n const res = fetchHistoryRange(target, start, end, known);\n if (!res) return;\n this.sendToClient(client, {\n type: \"history\",\n start: res.start,\n lines: res.lines,\n historySize: res.historySize,\n timestamp: Date.now()\n });\n }\n removeClient(client, target) {\n if (target) {\n const targetClients = this.clients.get(target);\n if (targetClients && targetClients.delete(client)) {\n this.totalClients--;\n log(\n {\n level: \"debug\",\n component: \"terminal\",\n message: \"Client disconnected\",\n data: { target, targetClients: targetClients.size, total: this.totalClients }\n },\n this.config\n );\n if (targetClients.size === 0) {\n this.stopPolling(target);\n this.clients.delete(target);\n this.states.delete(target);\n }\n }\n return;\n }\n for (const [t, clients] of this.clients) {\n if (clients.delete(client)) {\n this.totalClients--;\n if (clients.size === 0) {\n this.stopPolling(t);\n this.clients.delete(t);\n this.states.delete(t);\n }\n break;\n }\n }\n }\n startPolling(target) {\n if (this.pollTimers.has(target)) return;\n const timer = setInterval(() => this.pollAndBroadcast(target), 200);\n this.pollTimers.set(target, timer);\n }\n stopPolling(target) {\n const timer = this.pollTimers.get(target);\n if (timer) {\n clearInterval(timer);\n this.pollTimers.delete(target);\n }\n }\n pollAndBroadcast(target) {\n const snap = snapshotPane(target);\n if (!snap) return;\n const prev = this.states.get(target);\n const now = Date.now();\n const messages = [];\n const screenKey = snap.screen.join(\"\\n\");\n if (!prev) {\n this.states.set(target, { historySize: snap.historySize, alt: snap.alt, cols: snap.cols, rows: snap.rows, screenKey });\n messages.push({ type: \"reset\", historySize: snap.historySize, alt: snap.alt, cols: snap.cols, rows: snap.rows, timestamp: now });\n messages.push({ type: \"screen\", lines: snap.screen, historySize: snap.historySize, alt: snap.alt, cols: snap.cols, rows: snap.rows, timestamp: now });\n } else {\n const reflowed = snap.alt !== prev.alt || snap.cols !== prev.cols || snap.rows !== prev.rows || snap.historySize < prev.historySize;\n if (reflowed) {\n messages.push({ type: \"reset\", historySize: snap.historySize, alt: snap.alt, cols: snap.cols, rows: snap.rows, timestamp: now });\n } else if (!snap.alt && snap.historySize > prev.historySize) {\n const n = snap.historySize - prev.historySize;\n let lines = null;\n let start = prev.historySize;\n if (n <= snap.tail.length) {\n lines = snap.tail.slice(snap.tail.length - n);\n } else {\n const res = fetchHistoryRange(target, prev.historySize, snap.historySize, snap.historySize);\n if (res) {\n lines = res.lines;\n start = res.start;\n }\n }\n if (lines) {\n messages.push({ type: \"history\", start, lines, historySize: snap.historySize, timestamp: now });\n } else {\n messages.push({ type: \"reset\", historySize: snap.historySize, alt: snap.alt, cols: snap.cols, rows: snap.rows, timestamp: now });\n }\n }\n if (screenKey !== prev.screenKey || reflowed) {\n messages.push({ type: \"screen\", lines: snap.screen, historySize: snap.historySize, alt: snap.alt, cols: snap.cols, rows: snap.rows, timestamp: now });\n }\n this.states.set(target, { historySize: snap.historySize, alt: snap.alt, cols: snap.cols, rows: snap.rows, screenKey });\n }\n if (messages.length === 0) return;\n const clients = this.clients.get(target);\n if (!clients) return;\n for (const message of messages) {\n const data = JSON.stringify(message);\n const drops = [];\n for (const client of [...clients]) {\n if (!this.sendToClient(client, message, data)) drops.push(client);\n }\n for (const client of drops) {\n clients.delete(client);\n this.totalClients--;\n this.droppedClients++;\n log(\n {\n level: \"warn\",\n component: \"terminal\",\n message: \"Dropped slow client\",\n data: { target, total: this.totalClients }\n },\n this.config\n );\n }\n if (clients.size === 0) {\n this.stopPolling(target);\n this.clients.delete(target);\n this.states.delete(target);\n return;\n }\n }\n }\n sendToClient(client, message, data) {\n return sendJson(client, message, this.config, {\n component: \"terminal\",\n maxBuffered: 64 * 1024,\n data\n }) === \"sent\";\n }\n}\nconst TRANSCRIPT_POLL_MS = 500;\nconst SUBAGENT_DISCOVER_TICKS = 4;\nconst RESOLVE_TICKS = 4;\nconst RESOLVE_TICKS_MAX = 60;\nconst SNAPSHOT_ENTRIES = 300;\nconst MAX_HISTORY_ENTRIES = 500;\nclass TranscriptWsManager {\n clients = /* @__PURE__ */ new Map();\n sessions = /* @__PURE__ */ new Map();\n config;\n constructor(config) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n }\n addClient(client, sessionId) {\n const existing = this.clients.get(sessionId);\n if (existing && existing.size >= this.config.maxTerminalClientsPerTarget) {\n log(\n {\n level: \"warn\",\n component: \"transcript\",\n message: \"Max clients per session reached\",\n data: { sessionId, current: existing.size }\n },\n this.config\n );\n return false;\n }\n if (!this.clients.has(sessionId)) this.clients.set(sessionId, /* @__PURE__ */ new Set());\n this.clients.get(sessionId).add(client);\n let state = this.sessions.get(sessionId);\n if (!state) {\n state = this.startSession(sessionId);\n this.sessions.set(sessionId, state);\n }\n state.sentContext = JSON.stringify(state.builder.context);\n this.sendToClient(client, this.snapshot(state));\n return true;\n }\n removeClient(client, sessionId) {\n const drop = (id, clients) => {\n if (!clients.delete(client)) return false;\n if (clients.size === 0) this.stopSession(id);\n return true;\n };\n if (sessionId) {\n const clients = this.clients.get(sessionId);\n if (clients) drop(sessionId, clients);\n return;\n }\n for (const [id, clients] of this.clients) {\n if (drop(id, clients)) break;\n }\n }\n /** A main-transcript builder that stamps voice-injected prompts (see dictation-marks). */\n mainBuilder(sessionId) {\n return new TranscriptBuilder(false, (text, ts) => isDictated(sessionId, text, ts));\n }\n startSession(sessionId) {\n const state = {\n sessionId,\n tailer: null,\n builder: this.mainBuilder(sessionId),\n available: false,\n resolveIn: RESOLVE_TICKS,\n resolveBackoff: RESOLVE_TICKS,\n subagents: /* @__PURE__ */ new Map(),\n discoverIn: 0,\n sentContext: \"\",\n sentModel: null,\n stale: /* @__PURE__ */ new Set(),\n timer: setInterval(() => this.poll(sessionId), TRANSCRIPT_POLL_MS)\n };\n const path = this.locate(sessionId);\n if (path) this.attach(state, path);\n return state;\n }\n /**\n * Point the state at a transcript file and read what is already in it, so\n * the next snapshot carries history rather than starting from empty.\n */\n attach(state, path) {\n state.tailer = new JsonlTailer(path);\n this.consume(state, state.tailer.read());\n this.syncSubagents(state);\n }\n /** Where this session's JSONL lives, or null if it is not on disk yet. */\n locate(sessionId) {\n const session = getSession(sessionId);\n return session ? resolveTranscriptPath(session, sessionId) : null;\n }\n /**\n * Pick up newly spawned subagents and tail the known ones. Returns the\n * payloads that changed since the last call.\n */\n syncSubagents(state) {\n if (!state.tailer) return [];\n if (state.discoverIn <= 0) {\n state.discoverIn = SUBAGENT_DISCOVER_TICKS;\n for (const file of listSubagents(state.tailer.path, new Set(state.subagents.keys()))) {\n state.subagents.set(file.agentId, {\n tailer: new JsonlTailer(file.path),\n builder: new TranscriptBuilder(true),\n meta: file.meta,\n payload: null,\n lastSent: \"\"\n });\n }\n } else {\n state.discoverIn--;\n }\n const changed = [];\n for (const [agentId, sub] of state.subagents) {\n const result = sub.tailer.read();\n if (result.status === \"reset\") {\n sub.builder = new TranscriptBuilder(true);\n } else if (result.status === \"lines\") {\n for (const line of result.lines) sub.builder.feed(line);\n }\n const payload = subagentPayload(agentId, sub, state.builder.finishedAgents.has(agentId));\n sub.payload = payload;\n const encoded = JSON.stringify(payload);\n if (encoded === sub.lastSent) continue;\n sub.lastSent = encoded;\n changed.push(payload);\n }\n return changed;\n }\n /**\n * Send one client the slice of `count` entries that ends just before\n * `before` — the index of the oldest entry it already holds.\n */\n requestHistory(client, sessionId, before, count) {\n const state = this.sessions.get(sessionId);\n if (!state) return;\n const end = Math.max(0, Math.min(Math.floor(before), state.builder.entries.length));\n if (end === 0) return;\n const n = Math.max(1, Math.min(MAX_HISTORY_ENTRIES, Math.floor(count)));\n const start = Math.max(0, end - n);\n this.sendToClient(client, {\n type: \"history\",\n entries: state.builder.entries.slice(start, end),\n firstIndex: start,\n timestamp: Date.now()\n });\n }\n stopSession(sessionId) {\n const state = this.sessions.get(sessionId);\n if (state) clearInterval(state.timer);\n this.sessions.delete(sessionId);\n this.clients.delete(sessionId);\n }\n /** Apply a tail result to the builder; returns changed entry ids. */\n consume(state, result) {\n switch (result.status) {\n case \"lines\": {\n state.available = true;\n const changed = [];\n for (const line of result.lines) changed.push(...state.builder.feed(line));\n return changed;\n }\n case \"reset\":\n state.builder = this.mainBuilder(state.sessionId);\n return [];\n default:\n return [];\n }\n }\n poll(sessionId) {\n const state = this.sessions.get(sessionId);\n const clients = this.clients.get(sessionId);\n if (!state || !clients || clients.size === 0) return;\n if (!state.tailer) {\n if (--state.resolveIn > 0) return;\n const path = this.locate(sessionId);\n if (!path) {\n state.resolveBackoff = Math.min(state.resolveBackoff * 2, RESOLVE_TICKS_MAX);\n state.resolveIn = state.resolveBackoff;\n return;\n }\n this.attach(state, path);\n this.resend(sessionId, state);\n return;\n }\n this.recoverStale(sessionId, state);\n const result = state.tailer.read();\n if (result.status === \"reset\") {\n this.consume(state, result);\n this.consume(state, state.tailer.read());\n this.resend(sessionId, state);\n return;\n }\n const changedIds = this.consume(state, result);\n if (changedIds.length > 0) {\n const seen = /* @__PURE__ */ new Set();\n const entries = [];\n const indices = [];\n for (const id of changedIds) {\n if (seen.has(id)) continue;\n seen.add(id);\n const index = state.builder.indexOf(id);\n if (index !== void 0) {\n entries.push(state.builder.entries[index]);\n indices.push(index);\n }\n }\n this.broadcast(sessionId, { type: \"entries\", entries, indices, timestamp: Date.now() });\n }\n const subagents = this.syncSubagents(state);\n if (subagents.length > 0) {\n this.broadcast(sessionId, { type: \"subagents\", subagents, timestamp: Date.now() });\n }\n const context = state.builder.context;\n const encoded = JSON.stringify(context);\n if (context && encoded !== state.sentContext) {\n state.sentContext = encoded;\n this.broadcast(sessionId, { type: \"context\", context, timestamp: Date.now() });\n }\n const model = state.builder.model;\n if (model && model !== state.sentModel) {\n state.sentModel = model;\n this.broadcast(sessionId, { type: \"model\", model, timestamp: Date.now() });\n }\n }\n /** Re-broadcast the whole transcript, e.g. after a file reset or a re-attach. */\n resend(sessionId, state) {\n state.sentContext = JSON.stringify(state.builder.context);\n this.broadcast(sessionId, this.snapshot(state));\n }\n /**\n * Catch up the clients that missed a delta while their socket was backed\n * up. A snapshot costs the whole transcript tail, so it goes only to the\n * client that missed something, and only once its buffer has drained.\n */\n recoverStale(sessionId, state) {\n if (state.stale.size === 0) return;\n const clients = this.clients.get(sessionId);\n const message = this.snapshot(state);\n const data = JSON.stringify(message);\n for (const client of [...state.stale]) {\n if (!clients?.has(client)) {\n state.stale.delete(client);\n continue;\n }\n const result = this.sendToClient(client, message, data);\n if (result === \"backpressure\") continue;\n state.stale.delete(client);\n if (result === \"closed\") clients.delete(client);\n }\n }\n /**\n * Everything a freshly attached client needs. Context rides along here so\n * the client starts with a gauge instead of waiting for the next response;\n * callers mark it sent with `sentContext`.\n */\n snapshot(state) {\n const all = state.builder.entries;\n const firstIndex = Math.max(0, all.length - SNAPSHOT_ENTRIES);\n return {\n type: \"snapshot\",\n entries: firstIndex > 0 ? all.slice(firstIndex) : all,\n firstIndex,\n subagents: [...state.subagents].map(\n ([id, sub]) => sub.payload ?? subagentPayload(id, sub, state.builder.finishedAgents.has(id))\n ),\n context: state.builder.context,\n model: state.builder.model,\n available: state.available,\n timestamp: Date.now()\n };\n }\n broadcast(sessionId, message) {\n const clients = this.clients.get(sessionId);\n if (!clients) return;\n const state = this.sessions.get(sessionId);\n const data = JSON.stringify(message);\n for (const client of [...clients]) {\n const result = this.sendToClient(client, message, data);\n if (result === \"backpressure\") state?.stale.add(client);\n else if (result === \"closed\") clients.delete(client);\n }\n if (clients.size === 0) this.stopSession(sessionId);\n }\n sendToClient(client, message, data) {\n return sendJson(client, message, this.config, {\n component: \"transcript\",\n // A snapshot of a long session is megabytes; the ceiling is here to\n // catch a socket that has stopped draining, not to size a message.\n maxBuffered: 8 * 1024 * 1024,\n data\n });\n }\n}\nfunction handleWsMessage(msgStr, handlers) {\n if (msgStr === \"ping\") return \"pong\";\n if (!handlers) return null;\n try {\n const msg = JSON.parse(msgStr);\n switch (msg.type) {\n case \"resize\":\n if (handlers.resize && typeof msg.cols === \"number\" && typeof msg.rows === \"number\") {\n handlers.resize(msg.cols, msg.rows);\n }\n break;\n case \"history_request\":\n if (handlers.historyRequest && typeof msg.before === \"number\" && typeof msg.count === \"number\") {\n handlers.historyRequest(msg.before, msg.count);\n }\n break;\n }\n } catch {\n }\n return null;\n}\nfunction parseWsPath(pathname) {\n if (pathname === \"/api/sessions/stream\") {\n return { type: \"sessions\" };\n }\n const transcriptMatch = pathname.match(/^\\/api\\/sessions\\/([^/]+)\\/transcript\\/stream$/);\n if (transcriptMatch) {\n return { type: \"transcript\", target: decodeURIComponent(transcriptMatch[1]) };\n }\n const termMatch = pathname.match(/^\\/api\\/sessions\\/([^/]+)\\/stream$/);\n if (termMatch) {\n return { type: \"terminal\", target: decodeURIComponent(termMatch[1]) };\n }\n return null;\n}\nexport {\n SessionsWsManager as S,\n TerminalWsManager as T,\n removeProject as a,\n getEnrichedSessionsAsync as b,\n getSettings as c,\n TranscriptWsManager as d,\n getSavedProjects as g,\n handleWsMessage as h,\n parseWsPath as p,\n resizePane as r,\n saveProject as s,\n updateSettings as u\n};\n"],"mappings":"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"}