@av-pi-studio/web-client 0.0.70 → 0.0.71
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.
- package/dist/web/assets/{BinaryFallbackViewer-C7bkubDd.js → BinaryFallbackViewer-BWzvrIhq.js} +2 -2
- package/dist/web/assets/{BinaryFallbackViewer-C7bkubDd.js.map → BinaryFallbackViewer-BWzvrIhq.js.map} +1 -1
- package/dist/web/assets/{ChatPanel-B25eQsNb.js → ChatPanel-CEH_GK7N.js} +2 -2
- package/dist/web/assets/{ChatPanel-B25eQsNb.js.map → ChatPanel-CEH_GK7N.js.map} +1 -1
- package/dist/web/assets/{CodeView-B2eeZM2v.js → CodeView-vzOAirYe.js} +2 -2
- package/dist/web/assets/{CodeView-B2eeZM2v.js.map → CodeView-vzOAirYe.js.map} +1 -1
- package/dist/web/assets/{FilePanel-DRuJsAWY.js → FilePanel-WQVK2120.js} +2 -2
- package/dist/web/assets/{FilePanel-DRuJsAWY.js.map → FilePanel-WQVK2120.js.map} +1 -1
- package/dist/web/assets/{ImageViewer-1z3YGCmo.js → ImageViewer-Bc0i-JGb.js} +2 -2
- package/dist/web/assets/{ImageViewer-1z3YGCmo.js.map → ImageViewer-Bc0i-JGb.js.map} +1 -1
- package/dist/web/assets/{MarkdownFileViewer-9isSXHBa.js → MarkdownFileViewer-I0b0agu_.js} +2 -2
- package/dist/web/assets/{MarkdownFileViewer-9isSXHBa.js.map → MarkdownFileViewer-I0b0agu_.js.map} +1 -1
- package/dist/web/assets/{MoleculeViewerPanel-DjqSc6I8.js → MoleculeViewerPanel-DYKfUyuF.js} +2 -2
- package/dist/web/assets/{MoleculeViewerPanel-DjqSc6I8.js.map → MoleculeViewerPanel-DYKfUyuF.js.map} +1 -1
- package/dist/web/assets/{TerminalPanel-DZ68ikRv.js → TerminalPanel-Do6WsYb9.js} +2 -2
- package/dist/web/assets/{TerminalPanel-DZ68ikRv.js.map → TerminalPanel-Do6WsYb9.js.map} +1 -1
- package/dist/web/assets/{TextViewer-BX12dzDA.js → TextViewer-C7U5fAYp.js} +2 -2
- package/dist/web/assets/{TextViewer-BX12dzDA.js.map → TextViewer-C7U5fAYp.js.map} +1 -1
- package/dist/web/assets/{VideoViewer-I1FxdZq1.js → VideoViewer-DeIrV1Ql.js} +2 -2
- package/dist/web/assets/{VideoViewer-I1FxdZq1.js.map → VideoViewer-DeIrV1Ql.js.map} +1 -1
- package/dist/web/assets/{index-C7fzFj6R.js → index-DonKPQN3.js} +3 -3
- package/dist/web/assets/{index-C7fzFj6R.js.map → index-DonKPQN3.js.map} +1 -1
- package/dist/web/assets/{markdown-BkmQhx2q.js → markdown-DRKdD_IM.js} +2 -2
- package/dist/web/assets/{markdown-BkmQhx2q.js.map → markdown-DRKdD_IM.js.map} +1 -1
- package/dist/web/assets/{use-file-download-DZsKc-9t.js → use-file-download-C2Lrmbfe.js} +2 -2
- package/dist/web/assets/{use-file-download-DZsKc-9t.js.map → use-file-download-C2Lrmbfe.js.map} +1 -1
- package/dist/web/assets/{use-file-watch-D38_XnyT.js → use-file-watch-skGpUUS7.js} +2 -2
- package/dist/web/assets/{use-file-watch-D38_XnyT.js.map → use-file-watch-skGpUUS7.js.map} +1 -1
- package/dist/web/index.html +1 -1
- package/package.json +3 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ChatPanel-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ChatPanel-CEH_GK7N.js","assets/vendor-react-CWo7Do4s.js","assets/vendor-query-BGIh-vlp.js","assets/vendor-icons-CJ_dOXcR.js","assets/markdown-DRKdD_IM.js","assets/vendor-highlight-Efc6A-g6.js","assets/vendor-markdown-YvkQLm_s.js","assets/vendor-04vXFIXe.js","assets/markdown-zMTuCbxl.css","assets/StatusBadge-DFSeaZ3p.js","assets/StatusBadge-DmrnYEhp.css","assets/DiffView-CrQA2QN6.js","assets/DiffView-CUctPSBA.css","assets/vendor-overlays-BnmaUbKw.js","assets/vendor-dnd-Bj2_GhfD.js","assets/ChatPanel-qE6vr3IJ.css","assets/FilePanel-WQVK2120.js","assets/use-file-watch-skGpUUS7.js","assets/FilePanel-bWuYWz8t.css","assets/TerminalPanel-Do6WsYb9.js","assets/vendor-terminal-BhzX2_ts.js","assets/vendor-terminal-DYP7pi_n.css","assets/TerminalPanel-DoDBqfAg.css","assets/MoleculeViewerPanel-DYKfUyuF.js","assets/vendor-molviewer-DE5Dt5UM.js","assets/vendor-molviewer-Bychyqid.css","assets/use-file-download-C2Lrmbfe.js","assets/MoleculeViewerPanel-CHZ8q0jD.css","assets/TextViewer-C7U5fAYp.js","assets/CodeView-vzOAirYe.js","assets/CodeView-Bbd7h9aM.css","assets/TextViewer-C7Vnqw_v.css","assets/MarkdownFileViewer-I0b0agu_.js","assets/MarkdownFileViewer-BOOIyc8-.css","assets/ImageViewer-Bc0i-JGb.js","assets/ImageViewer-Bh1rkSDM.css","assets/VideoViewer-DeIrV1Ql.js","assets/VideoViewer-CCmuaDLl.css","assets/BinaryFallbackViewer-BWzvrIhq.js","assets/BinaryFallbackViewer-ClYyn4IS.css"])))=>i.map(i=>d[i]);
|
|
2
2
|
var jr=Object.defineProperty;var Tr=(e,t,n)=>t in e?jr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var $=(e,t,n)=>Tr(e,typeof t!="symbol"?t+"":t,n);import{r as v,j as i,c as Cr}from"./vendor-react-CWo7Do4s.js";import{Q as Er,a as Rr,u as os,b as Mr,c as Le,d as Nr}from"./vendor-query-BGIh-vlp.js";import{A as d,B as b,C as W,D as as,E as F,F as Ne,G as we,H as O,I as x,J as X,K as te,L as jt,M as Fe,N as Ie}from"./vendor-04vXFIXe.js";import{L as Dr,P as Pr,a as Ar,b as qr,c as $r,E as Zt,d as is,S as Br,A as zr,T as en,C as tn,e as cs,F as Or,f as ls,g as ds,h as nn,i as us,G as fs,j as ps,M as hs,X as Ot,k as Fr,R as Wr,l as De,m as sn,n as Ft,o as vt,p as ft,q as Lr,D as Hr,U as Ur,r as Kr,s as ms,t as Vr,u as Gr,v as Yr,w as Xr,x as Jr,y as Qr}from"./vendor-icons-CJ_dOXcR.js";import{P as Zr,C as eo,I as gs,S as to,R as ot,T as at,D as no,a as so,b as ro,c as oo,d as vn,e as Wt}from"./vendor-overlays-BnmaUbKw.js";import{u as ao,a as io,p as co,P as lo,b as _s,S as uo,h as fo,c as po,C as ho,D as mo,d as go}from"./vendor-dnd-Bj2_GhfD.js";import{_ as ve}from"./vendor-highlight-Efc6A-g6.js";import"./vendor-markdown-YvkQLm_s.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&s(a)}).observe(document,{childList:!0,subtree:!0});function n(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(r){if(r.ep)return;r.ep=!0;const o=n(r);fetch(r.href,o)}})();const _o=new Er;function ys(e){const t=e.trim().replace(/^#/,""),n=t.length===3?t.split("").map(s=>s+s).join(""):t;if(n.length!==6||/[^0-9a-fA-F]/.test(n))throw new Error(`Invalid hex color: ${e}`);return{r:parseInt(n.slice(0,2),16),g:parseInt(n.slice(2,4),16),b:parseInt(n.slice(4,6),16)}}function yo(e){return Math.max(0,Math.min(255,Math.round(e)))}function wo({r:e,g:t,b:n}){const s=r=>yo(r).toString(16).padStart(2,"0");return`#${s(e)}${s(t)}${s(n)}`}function bo(e){const{r:t,g:n,b:s}=ys(e),r=o=>{const a=o/255;return a<=.03928?a/12.92:((a+.055)/1.055)**2.4};return .2126*r(t)+.7152*r(n)+.0722*r(s)}function rn(e,t="#18181b",n="#ffffff"){return bo(e)>.45?t:n}function vo(e,t){const{r:n,g:s,b:r}=ys(e),o=Math.max(0,Math.min(1,t));return wo({r:n+(255-n)*o,g:s+(255-s)*o,b:r+(255-r)*o})}function pt(e){const t=e.trim().replace(/^#/,"");return(t.length===3||t.length===6)&&!/[^0-9a-fA-F]/.test(t)}const fe=(e,t,n,s,r,o,a,c,l,u,f)=>({50:e,100:t,200:n,300:s,400:r,500:o,600:a,700:c,800:l,900:u,950:f}),k={zinc:fe("#fafafa","#f4f4f5","#e4e4e7","#d4d4d8","#a1a1aa","#71717a","#52525b","#3f3f46","#27272a","#18181b","#09090b"),gray:fe("#f9fafb","#f3f4f6","#e5e7eb","#d1d5db","#9ca3af","#6b7280","#4b5563","#374151","#1f2937","#111827","#030712"),slate:fe("#f8fafc","#f1f5f9","#e2e8f0","#cbd5e1","#94a3b8","#64748b","#475569","#334155","#1e293b","#0f172a","#020617"),blue:fe("#eff6ff","#dbeafe","#bfdbfe","#93c5fd","#60a5fa","#3b82f6","#2563eb","#1d4ed8","#1e40af","#1e3a8a","#172554"),green:fe("#f0fdf4","#dcfce7","#bbf7d0","#86efac","#4ade80","#22c55e","#16a34a","#15803d","#166534","#14532d","#052e16"),red:fe("#fef2f2","#fee2e2","#fecaca","#fca5a5","#f87171","#ef4444","#dc2626","#b91c1c","#991b1b","#7f1d1d","#450a0a"),teal:fe("#f0fdfa","#ccfbf1","#99f6e4","#5eead4","#2dd4bf","#14b8a6","#0d9488","#0f766e","#115e59","#134e4a","#042f2e"),amber:fe("#fffbeb","#fef3c7","#fde68a","#fcd34d","#fbbf24","#f59e0b","#d97706","#b45309","#92400e","#78350f","#451a03"),yellow:fe("#fefce8","#fef9c3","#fef08a","#fde047","#facc15","#eab308","#ca8a04","#a16207","#854d0e","#713f12","#422006"),purple:fe("#faf5ff","#f3e8ff","#e9d5ff","#d8b4fe","#c084fc","#a855f7","#9333ea","#7e22ce","#6b21a8","#581c87","#3b0764"),orange:fe("#fff7ed","#ffedd5","#fed7aa","#fdba74","#fb923c","#f97316","#ea580c","#c2410c","#9a3412","#7c2d12","#431407"),white:"#ffffff",black:"#000000"},xo={statusSuccess:"#16a34a",statusDanger:"#dc2626",statusWarning:"#f59e0b",statusMerged:"#9333ea"},So={statusSuccess:"#15803d",statusDanger:"#b91c1c",statusWarning:"#d97706",statusMerged:"#7c3aed"};function ko(){return{keyword:k.purple[300],string:k.green[300],number:k.orange[300],boolean:k.orange[300],comment:k.zinc[500],function:k.blue[300],variable:k.zinc[200],type:k.teal[300],class:k.amber[300],constant:k.orange[300],operator:k.zinc[400],punctuation:k.zinc[400],tag:k.red[300],attribute:k.amber[300],property:k.blue[200],regexp:k.teal[300],escape:k.orange[200],heading:k.blue[300],link:k.blue[400],deleted:k.red[400],inserted:k.green[400]}}function Io(){return{keyword:k.purple[700],string:k.green[700],number:k.orange[700],boolean:k.orange[700],comment:k.zinc[500],function:k.blue[700],variable:k.zinc[800],type:k.teal[700],class:k.amber[700],constant:k.orange[700],operator:k.zinc[600],punctuation:k.zinc[600],tag:k.red[700],attribute:k.amber[700],property:k.blue[700],regexp:k.teal[700],escape:k.orange[700],heading:k.blue[700],link:k.blue[600],deleted:k.red[700],inserted:k.green[700]}}function ws(e,t,n){return{background:e,foreground:t,cursor:n,cursorAccent:e,selectionBackground:"rgba(255,255,255,0.18)",black:k.zinc[900],red:k.red[500],green:k.green[500],yellow:k.amber[500],blue:k.blue[500],magenta:k.purple[500],cyan:k.teal[500],white:k.zinc[300],brightBlack:k.zinc[600],brightRed:k.red[400],brightGreen:k.green[400],brightYellow:k.amber[400],brightBlue:k.blue[400],brightMagenta:k.purple[400],brightCyan:k.teal[400],brightWhite:k.zinc[50]}}function He(e){const t=k.zinc[50],n=rn(e.accent);return{surface0:e.surface0,surface1:e.surface1,surface2:e.surface2,surface3:e.surface3,surface4:e.surface4,surfaceDiffEmpty:e.surfaceDiffEmpty,surfaceSidebar:e.surfaceSidebar,surfaceSidebarHover:e.surfaceSidebarHover,surfaceWorkspace:e.surface1,foreground:t,foregroundMuted:e.mutedForeground,accent:e.accent,accentBright:e.accentBright,accentForeground:n,destructive:e.destructive,destructiveForeground:k.white,success:e.accent,successForeground:k.white,border:e.border,borderAccent:e.borderAccent,...xo,diffAddition:k.green[400],diffDeletion:k.red[500],scrollbarHandle:e.scrollbarHandle,background:e.surface0,popover:e.surface2,popoverForeground:t,primary:e.accent,secondary:e.surface2,muted:e.surface2,mutedForeground:e.mutedForeground,input:e.surface2,ring:e.accent,palette:k,syntax:ko(),terminal:ws(e.surface0,t,e.accent)}}function jo(){const e="#1a1a1e",t="#253e6f";return{surface0:"#ffffff",surface1:"#fafafa",surface2:"#f4f4f5",surface3:"#e4e4e7",surface4:"#d4d4d8",surfaceDiffEmpty:"#f6f6f6",surfaceSidebar:"#f4f4f5",surfaceSidebarHover:"#e9e9ec",surfaceWorkspace:"#ffffff",foreground:e,foregroundMuted:"#71717a",accent:t,accentBright:"#2f4f8e",accentForeground:rn(t),destructive:"#b04138",destructiveForeground:"#ffffff",success:t,successForeground:"#ffffff",border:"#e4e4e7",borderAccent:"#ececf1",...So,diffAddition:"#15803d",diffDeletion:"#b91c1c",scrollbarHandle:"#3f3f46",background:"#ffffff",popover:"#ffffff",popoverForeground:e,primary:t,secondary:"#f4f4f5",muted:"#f4f4f5",mutedForeground:"#71717a",input:"#f4f4f5",ring:t,palette:k,syntax:Io(),terminal:{...ws("#ffffff",e,t),selectionBackground:"rgba(0,0,0,0.15)",white:"#ffffff",brightWhite:"#fafafa"}}}const To={light:"#ffffff",dark:"#3b62b0",zinc:"#808080",midnight:"#4A6BA8",claude:"#D97757",ghostty:"#8caaee"},bs=["light","dark","zinc","midnight","claude","ghostty"];function Co(e){if(e==="light")return jo();switch(e){case"dark":return He({surface0:"#181B1A",surface1:"#1E2120",surface2:"#272A29",surface3:"#434645",surface4:"#595B5B",surfaceDiffEmpty:"#252827",surfaceSidebar:"#141716",surfaceSidebarHover:"#1c1f1e",mutedForeground:"#A1A5A4",scrollbarHandle:"#717574",border:"#252B2A",borderAccent:"#2f3135",accent:"#2e5cb8",accentBright:"#a2b4d7",destructive:"#c64f43"});case"zinc":return He({surface0:"#18181b",surface1:"#1f1f22",surface2:"#27272a",surface3:"#3f3f46",surface4:"#52525b",surfaceDiffEmpty:"#242427",surfaceSidebar:"#131316",surfaceSidebarHover:"#1b1b1e",mutedForeground:"#a1a1aa",scrollbarHandle:"#71717a",border:"#27272a",borderAccent:"#303036",accent:"#e4e4e7",accentBright:"#fafafa",destructive:"#c44a4a"});case"midnight":return He({surface0:"#161820",surface1:"#1c1e27",surface2:"#252731",surface3:"#3c3e4c",surface4:"#535564",surfaceDiffEmpty:"#222430",surfaceSidebar:"#121420",surfaceSidebarHover:"#1a1c28",mutedForeground:"#9a9db0",scrollbarHandle:"#6b6e82",border:"#242636",borderAccent:"#2e3040",accent:"#3b6fcf",accentBright:"#7eaaeb",destructive:"#c44a52"});case"claude":return He({surface0:"#1f1f1e",surface1:"#262523",surface2:"#2f2d2b",surface3:"#4a4745",surface4:"#605d5b",surfaceDiffEmpty:"#2a2826",surfaceSidebar:"#1a1918",surfaceSidebarHover:"#222120",mutedForeground:"#ada9a5",scrollbarHandle:"#78746f",border:"#2c2a27",borderAccent:"#36332f",accent:"#d97757",accentBright:"#e89a7f",destructive:"#cf513e"});case"ghostty":return He({surface0:"#282c34",surface1:"#2f333d",surface2:"#383c48",surface3:"#4a4f5e",surface4:"#5b6175",surfaceDiffEmpty:"#323643",surfaceSidebar:"#21252d",surfaceSidebarHover:"#292d36",mutedForeground:"#c8ccd8",scrollbarHandle:"#a0a4b2",border:"#353a47",borderAccent:"#3f4454",accent:"#89b4fa",accentBright:"#b4d0fc",destructive:"#c44a55"})}}const vs={};for(const e of bs){const t=e==="light"?"light":"dark";vs[e]={name:e,colorScheme:t,colors:Co(e),swatch:To[e]}}const Eo=vs,Ro={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,10:10,12:12,14:14,16:16,20:20,24:24,30:30,32:32,48:48,64:64,80:80,96:96,128:128},xt={"4xs":10,"3xs":11,"2xs":12,xs:13,code:13,sm:14,md:15,base:17,lg:19,xl:21,"2xl":23,"3xl":28,"4xl":36},Mo={normal:"400",medium:"500",semibold:"600",bold:"700"},No={none:0,sm:2,base:4,md:6,lg:8,xl:12,"2xl":16,full:9999},Do={0:0,1:1,2:2},Po={0:0,50:.5,100:1},Ao={xs:12,sm:14,md:16,lg:20},qo={diff:22},xs='system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',Ss='ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace';function $o(e){const t=e==="dark"?"rgba(0,0,0,0.55)":"rgba(24,24,27,0.12)";return{sm:{color:t,offsetX:0,offsetY:1,radius:2,elevation:1},md:{color:t,offsetX:0,offsetY:3,radius:8,elevation:4},lg:{color:t,offsetX:0,offsetY:10,radius:24,elevation:12}}}function ks(e){const t=Eo[e];return{name:e,colorScheme:t.colorScheme,colors:t.colors,spacing:Ro,fontSize:{...xt},fontFamily:{ui:xs,mono:Ss},lineHeight:{...qo},iconSize:Ao,fontWeight:Mo,borderRadius:No,borderWidth:Do,opacity:Po,shadow:$o(t.colorScheme),swatch:t.swatch}}const Bo=xt.base,zo=10,Oo=24;function Fo(e,t){const n=t.themeName??e.name,s=ks(n),r=t.uiFont&&t.uiFont.trim()!==""?t.uiFont:xs,o=t.monoFont&&t.monoFont.trim()!==""?t.monoFont:Ss,a={...s.fontSize};if(t.fontSize!=null){const l=Math.max(zo,Math.min(Oo,t.fontSize))/Bo;for(const u of Object.keys(xt))a[u]=Math.round(xt[u]*l)}return{...s,fontSize:a,fontFamily:{ui:r,mono:o}}}function Wo(e){return ks(e)}const Lo="dark",Ho=16;function Uo(e){const t=e/Ho;return`${Number(t.toFixed(4))}rem`}function Ko(e){const t={};Vo(e.colors,t);for(const[n,s]of Object.entries(e.spacing))t[`--pi-spacing-${n}`]=`${s}px`;for(const[n,s]of Object.entries(e.fontSize))t[`--pi-font-size-${n}`]=Uo(s);t["--pi-font-ui"]=e.fontFamily.ui,t["--pi-font-mono"]=e.fontFamily.mono,t["--pi-line-height-diff"]=`${e.lineHeight.diff}px`;for(const[n,s]of Object.entries(e.iconSize))t[`--pi-icon-size-${n}`]=`${s}px`;for(const[n,s]of Object.entries(e.fontWeight))t[`--pi-font-weight-${n}`]=String(s);for(const[n,s]of Object.entries(e.borderRadius))t[`--pi-radius-${n}`]=s===9999?"9999px":`${s}px`;for(const[n,s]of Object.entries(e.borderWidth))t[`--pi-border-width-${n}`]=`${s}px`;for(const[n,s]of Object.entries(e.opacity))t[`--pi-opacity-${n}`]=String(s);for(const[n,s]of Object.entries(e.shadow))if(typeof s=="string")t[`--pi-shadow-${n}`]=s;else if(s&&typeof s=="object"){const r=s;t[`--pi-shadow-${n}`]=`${r.offsetX}px ${r.offsetY}px ${r.radius}px ${r.color}`}return t["--pi-color-scheme"]=e.colorScheme,t}function Vo(e,t){const{palette:n,syntax:s,terminal:r,...o}=e;for(const[a,c]of Object.entries(o))typeof c=="string"&&(t[`--pi-color-${a}`]=c);s&&Go(s,t),r&&(t["--pi-terminal-bg"]=r.background,t["--pi-terminal-fg"]=r.foreground)}function Go(e,t){for(const[n,s]of Object.entries(e))typeof s=="string"&&(t[`--syntax-${Yo(n)}`]=s)}function Yo(e){return e.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function Xo(e){if(typeof document>"u")return;const t=document.documentElement.style;for(const[s,r]of Object.entries(e))t.setProperty(s,r);const n=e["--pi-color-scheme"];n&&document.documentElement.style.setProperty("color-scheme",n)}function Jo(e){const t=Ko(e);Xo(t)}const Ue=d().min(1,"Asset path must not be empty"),Qo=b({accent:d().refine(pt,{message:"accent must be a valid #rrggbb hex color"}),accentBright:d().refine(pt,{message:"accentBright must be a valid #rrggbb hex color"}).optional(),accentForeground:d().refine(pt,{message:"accentForeground must be a valid #rrggbb hex color"}).optional(),swatch:d().refine(pt,{message:"swatch must be a valid #rrggbb hex color"}).optional()}),Zo=b({logoLight:Ue,logoDark:Ue,logoMark:Ue.optional(),icon:Ue,splash:Ue.optional()}),ea=b({docs:d().url().optional(),support:d().url().optional(),issues:d().url().optional(),website:d().url().optional()}).optional(),ta=b({copyright:d().optional(),companyName:d().optional()}).optional();b({productName:d().min(1,"productName is required"),shortName:d().optional(),tagline:d().optional(),colors:Qo,assets:Zo,links:ea,legal:ta});function na(e){const t=e.accent,n=e.accentBright??vo(t,.35),s=e.accentForeground??rn(t),r=e.swatch??t;return{accent:t,accentBright:n,accentForeground:s,swatch:r}}function sa(e,t){return{...e,colors:{...e.colors,accent:t.accent,accentBright:t.accentBright,accentForeground:t.accentForeground,primary:t.accent,ring:t.accent},swatch:t.swatch}}const xn="pi-studio-appearance";function ra(e,t){let n=c(e),s=null;function r(f){return f==="system"?typeof window<"u"&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":f}function o(f,g){const h=r(f),m=Wo(h);let w=Fo(m,{...g,themeName:h});if(t!=null&&t.colors){const _=na(t.colors);w=sa(w,_)}return w}function a(){const f=JSON.stringify({mode:n.mode,settings:n.settings});e.set(xn,f)}function c(f){const g=f.get(xn);let h=Lo,m={};if(g)try{const _=JSON.parse(g);_.mode&&(bs.includes(_.mode)||_.mode==="system")&&(h=_.mode),_.settings&&typeof _.settings=="object"&&(m=_.settings)}catch{}const w=o(h,m);return{mode:h,settings:m,resolvedTheme:w}}function l(){n={...n,resolvedTheme:o(n.mode,n.settings)},a()}const u={getState(){return n},setMode(f){n={...n,mode:f},l(),u.apply()},updateSettings(f){n={...n,settings:{...n.settings,...f}},l(),u.apply()},apply(){Jo(n.resolvedTheme)},listen(){if(typeof window>"u")return()=>{};const f=window.matchMedia("(prefers-color-scheme: dark)"),g=()=>{n.mode==="system"&&(l(),u.apply())};return f.addEventListener("change",g),s=()=>f.removeEventListener("change",g),s}};return u}function oa({store:e,brandConfig:t,children:n}){const s=v.useRef(null);return s.current||(s.current=ra(e,t),s.current.apply()),v.useEffect(()=>s.current.listen(),[]),i.jsx(i.Fragment,{children:n})}const on={get(e){var t;try{return((t=globalThis.localStorage)==null?void 0:t.getItem(e))??null}catch{return null}},set(e,t){var n;try{(n=globalThis.localStorage)==null||n.setItem(e,t)}catch{}}};function aa({children:e}){return i.jsx(oa,{store:on,children:i.jsx(Rr,{client:_o,children:e})})}const ia="_btn_1oc6k_4",ca="_secondary_1oc6k_47",la="_outline_1oc6k_56",da="_ghost_1oc6k_65",ua="_destructive_1oc6k_75",fa="_iconOnly_1oc6k_85",pa="_loadingSpinner_1oc6k_92",ha="_piSpin_1oc6k_1",ht={btn:ia,default:"_default_1oc6k_38",secondary:ca,outline:la,ghost:da,destructive:ua,iconOnly:fa,loadingSpinner:pa,piSpin:ha},Sn={xs:28,sm:32,md:36,lg:40},ma={xs:12,sm:14,md:16,lg:20},kn={xs:8,sm:10,md:12,lg:16},ga={xs:"var(--pi-font-size-xs)",sm:"var(--pi-font-size-sm)",md:"var(--pi-font-size-md)",lg:"var(--pi-font-size-base)"};function _a(e){const{disabled:t,loading:n}=e;return t||n?{opacity:.5,isGhostHover:!1}:{opacity:1,isGhostHover:!1}}function ne({variant:e="default",size:t="md",loading:n=!1,disabled:s=!1,leftIcon:r,trailing:o,iconOnly:a=!1,children:c,style:l,className:u,...f}){const{opacity:g}=_a({disabled:s??!1,loading:n}),h=s||n,m=ma[t];return i.jsxs("button",{className:W(ht.btn,ht[e],a&&ht.iconOnly,u),disabled:h,"aria-busy":n||void 0,style:{minHeight:Sn[t],paddingLeft:a?void 0:kn[t],paddingRight:a?void 0:kn[t],fontSize:ga[t],opacity:g,...a?{width:Sn[t]}:{},...l},...f,children:[n?i.jsx(Dr,{className:ht.loadingSpinner,size:m,"aria-hidden":!0}):r?i.jsx("span",{"aria-hidden":!0,style:{display:"flex",alignItems:"center",flexShrink:0},children:r}):null,c,o&&!n&&i.jsx("span",{"aria-hidden":!0,style:{display:"flex",alignItems:"center",flexShrink:0},children:o})]})}const ya="_input_756jo_3",wa="_textarea_756jo_32",Lt={input:ya,textarea:wa},St=v.forwardRef(function({className:t,...n},s){return i.jsx("input",{ref:s,className:W(Lt.input,t),...n})}),Qh=v.forwardRef(function({className:t,...n},s){return i.jsx("textarea",{ref:s,className:W(Lt.input,Lt.textarea,t),...n})}),Is=d().datetime({offset:!0});d().uuid();d().regex(/^[A-Za-z0-9_-]+$/,"expected base64url");const tt=as([F(),Is]),ba=Ne(["mobile","browser","cli","mcp"]),va=b({type:x("hello"),clientId:d(),clientType:ba,protocolVersion:F(),appVersion:d().optional(),capabilities:we(d(),O()).optional()}),xa=b({status:x("server_info"),serverId:d(),hostname:d().optional(),version:d().optional(),capabilities:we(d(),X()),features:we(d(),X())}),Sa=b({type:x("status"),payload:xa}),ka=b({type:x("ping"),requestId:d(),clientSentAt:tt.optional()}),Ia=b({type:x("pong"),requestId:d(),clientSentAt:tt.optional(),serverReceivedAt:tt,serverSentAt:tt}),js=Ne(["initializing","idle","running","error","closed"]),Tt=b({mimeType:d().optional(),data:d().optional()}).passthrough(),ja=b({prs:te(X()).optional(),issues:te(X()).optional()}).passthrough(),Ta=b({provider:d(),cwd:d(),modeId:d().optional(),model:d().optional(),modelProvider:d().optional(),thinkingOptionId:d().optional(),featureValues:we(d(),X()).optional(),title:d().nullable().optional(),approvalPolicy:d().optional(),sandboxMode:d().optional(),networkAccess:O().optional(),webSearch:O().optional(),extra:b({pi:X().optional()}).passthrough().optional(),systemPrompt:d().optional(),mcpServers:we(d(),X()).optional()}),Ca=b({type:x("create_agent_request"),requestId:d(),config:Ta,env:we(d(),d()).optional(),workspaceId:d().optional(),worktreeName:d().optional(),initialPrompt:d().optional(),clientMessageId:d().optional(),outputSchema:we(d(),X()).optional(),images:te(Tt).optional(),attachments:ja.optional(),git:X().optional(),worktree:X().optional(),autoArchive:O().optional(),labels:we(d(),d()).default({})}),Ea=b({type:x("create_agent_response"),requestId:d(),payload:b({agentId:d()}).passthrough()}),Ra=b({type:x("agent_update"),agentId:d(),status:js.optional(),title:d().nullable().optional(),labels:we(d(),d()).optional()}),Ma=b({type:x("agent_status"),agentId:d(),status:js}),Na=b({type:x("agent_list"),agents:te(b({id:d()}).passthrough())}),Da=b({type:x("agent_deleted"),agentId:d()}),Pa=b({type:x("agent_archived"),agentId:d(),archivedAt:Is.optional()}),Ts=jt("kind",[b({kind:x("shell"),command:d().optional(),output:d().optional()}),b({kind:x("read"),path:d().optional(),output:d().optional()}),b({kind:x("edit"),path:d().optional(),diff:d().optional(),output:d().optional()}),b({kind:x("write"),path:d().optional(),output:d().optional()}),b({kind:x("search"),query:d().optional(),output:d().optional()}),b({kind:x("fetch"),url:d().optional(),output:d().optional()}),b({kind:x("task"),description:d().optional(),output:d().optional()})]),Aa=jt("kind",[b({kind:x("user_message"),messageId:d().optional(),text:d().optional(),images:te(Tt).optional()}),b({kind:x("assistant_message"),messageId:d().optional(),text:d().optional(),final:O().optional()}),b({kind:x("reasoning"),text:d().optional(),final:O().optional()}),b({kind:x("tool_call"),callId:d().optional(),tool:Ts,status:d().optional()}),b({kind:x("turn_started"),turnId:d().optional()}),b({kind:x("turn_completed"),turnId:d().optional()}),b({kind:x("turn_failed"),turnId:d().optional(),error:d().optional()}),b({kind:x("turn_canceled"),turnId:d().optional()}),b({kind:x("error"),message:d().optional()}),b({kind:x("queue_update"),steering:te(d()).optional(),followUp:te(d()).optional()})]),qa=b({type:x("agent_stream"),agentId:d(),seq:F().optional(),timestamp:tt.optional(),event:Aa}),$a=Ne(["before","after"]),Ba=b({start:F(),end:F()}),za=b({type:x("fetch_agent_timeline_request"),requestId:d(),agentId:d(),cursor:d().nullable().optional(),direction:$a,limit:F().optional()}),Oa=b({type:x("fetch_agent_timeline_response"),requestId:d(),agentId:d().optional(),items:te(X()),seqStart:F(),seqEnd:F(),sourceSeqRanges:te(Ba),collapsed:O(),hasNewer:O(),startCursor:d().nullable().optional(),endCursor:d().nullable().optional()}),Fa=b({type:x("agent_permission_request"),requestId:d(),agentId:d(),toolName:d().optional(),tool:Ts.optional(),action:X().optional(),responses:te(d()).optional()}),Wa=b({type:x("agent_permission_resolved"),requestId:d(),agentId:d(),decision:d().optional()}),La=b({type:x("agent.permission.respond.request"),requestId:d(),permissionRequestId:d(),response:X()}),Ha=b({type:x("agent.permission.respond.response"),requestId:d(),payload:b({resolved:O()}).passthrough()}),Ua=b({type:x("respond_to_permission"),requestId:d(),permissionRequestId:d(),response:X()}),Cs=Ne(["conversation","files","both"]),Ka=b({type:x("agent.rewind.request"),requestId:d(),agentId:d(),messageId:d(),mode:Cs}).passthrough(),Va=b({type:x("agent.rewind.response"),requestId:d(),payload:b({agentId:d(),messageId:d(),mode:Cs,truncatedAt:d().optional()}).passthrough()}).passthrough(),Ga=b({input:F().optional(),output:F().optional(),cacheRead:F().optional(),cacheWrite:F().optional(),total:F().optional()}).passthrough(),Ya=b({tokens:F().nullable().optional(),contextWindow:F().optional(),percent:F().nullable().optional()}).passthrough(),Xa=b({type:x("agent_session_stats_request"),requestId:d(),agentId:d()}).passthrough(),Ja=b({type:x("agent_session_stats_response"),requestId:d(),payload:b({sessionId:d().optional(),sessionFile:d().optional(),userMessages:F().optional(),assistantMessages:F().optional(),toolCalls:F().optional(),toolResults:F().optional(),totalMessages:F().optional(),tokens:Ga.optional(),cost:F().optional(),contextUsage:Ya.optional(),model:d().optional()}).passthrough()}).passthrough(),Qa=b({type:x("agent_compact_request"),requestId:d(),agentId:d(),customInstructions:d().optional()}).passthrough(),Za=b({type:x("agent_compact_response"),requestId:d(),payload:b({summary:d().optional(),firstKeptEntryId:d().optional(),tokensBefore:F().optional(),details:X().optional()}).passthrough()}).passthrough(),ei=b({type:x("agent_new_session_request"),requestId:d(),agentId:d()}).passthrough(),ti=b({type:x("agent_new_session_response"),requestId:d(),payload:b({cancelled:O()}).passthrough()}).passthrough(),ni=b({type:x("agent_switch_session_request"),requestId:d(),agentId:d(),sessionPath:d()}).passthrough(),si=b({type:x("agent_switch_session_response"),requestId:d(),payload:b({cancelled:O()}).passthrough()}).passthrough(),ri=b({type:x("agent_fork_request"),requestId:d(),agentId:d(),entryId:d()}).passthrough(),oi=b({type:x("agent_fork_response"),requestId:d(),payload:b({text:d(),cancelled:O()}).passthrough()}).passthrough(),ai=b({type:x("agent_fork_messages_request"),requestId:d(),agentId:d()}).passthrough(),ii=b({type:x("agent_fork_messages_response"),requestId:d(),payload:b({messages:te(b({entryId:d(),text:d()}).passthrough())}).passthrough()}).passthrough(),ci=b({type:x("agent_clone_request"),requestId:d(),agentId:d()}).passthrough(),li=b({type:x("agent_clone_response"),requestId:d(),payload:b({cancelled:O()}).passthrough()}).passthrough(),di=b({type:x("agent_set_session_name_request"),requestId:d(),agentId:d(),name:d()}).passthrough(),ui=b({type:x("agent_set_session_name_response"),requestId:d(),payload:b({}).passthrough().optional()}).passthrough(),fi=b({type:x("agent_export_html_request"),requestId:d(),agentId:d(),outputPath:d().optional()}).passthrough(),pi=b({type:x("agent_export_html_response"),requestId:d(),payload:b({path:d()}).passthrough()}).passthrough(),hi=b({type:x("agent_set_model_request"),requestId:d(),agentId:d(),provider:d(),modelId:d()}).passthrough(),mi=b({type:x("agent_set_model_response"),requestId:d(),payload:b({}).passthrough()}).passthrough(),gi=b({type:x("agent_cycle_model_request"),requestId:d(),agentId:d()}).passthrough(),_i=b({type:x("agent_cycle_model_response"),requestId:d(),payload:b({model:X().nullable().optional(),thinkingLevel:d().optional(),isScoped:O().optional()}).passthrough()}).passthrough(),yi=b({type:x("agent_last_assistant_text_request"),requestId:d(),agentId:d()}).passthrough(),wi=b({type:x("agent_last_assistant_text_response"),requestId:d(),payload:b({text:d().nullable()}).passthrough()}).passthrough(),bi=b({type:x("steer_agent_request"),requestId:d(),agentId:d(),message:d(),images:te(Tt).optional(),clientMessageId:d().optional()}).passthrough(),vi=b({type:x("steer_agent_response"),requestId:d(),agentId:d(),ok:O()}).passthrough(),xi=b({type:x("follow_up_agent_request"),requestId:d(),agentId:d(),message:d(),images:te(Tt).optional(),clientMessageId:d().optional()}).passthrough(),Si=b({type:x("follow_up_agent_response"),requestId:d(),agentId:d(),ok:O()}).passthrough(),ki=b({name:d(),id:d().optional(),description:d().optional(),source:Ne(["extension","prompt","skill"]).optional(),scope:Ne(["user","project","temporary"]).optional(),path:d().optional()}).passthrough(),Ii=b({type:x("agent_list_commands_request"),requestId:d(),agentId:d()}).passthrough(),ji=b({type:x("agent_list_commands_response"),requestId:d(),payload:b({commands:te(ki)}).passthrough()}).passthrough(),Ti=b({type:x("rpc_error"),requestId:d(),code:d().optional(),message:d().optional(),error:d().optional()}),Ci=jt("type",[Ca,Ea,Ra,Ma,Na,Da,Pa,qa,za,Oa,Fa,Wa,La,Ha,Ua,Ka,Va,Xa,Ja,Qa,Za,ei,ti,ni,si,ri,oi,ai,ii,ci,li,di,ui,fi,pi,hi,mi,gi,_i,yi,wi,bi,vi,xi,Si,Ii,ji,Ti]),Ei=b({type:d()}).passthrough(),Ri=b({type:x("session"),message:as([Ci,Ei])});jt("type",[va,Sa,ka,Ia,Ri]);const In={inline_image_markdown:"inline_image_markdown",file_link_markdown:"file_link_markdown"},$e={Output:1,Input:2,Resize:3,Snapshot:4,Restore:5},Mi=Object.fromEntries(Object.entries($e).map(([e,t])=>[t,e])),Es=b({rows:F().int().nonnegative(),cols:F().int().nonnegative()});class Xe extends Error{constructor(t){super(t),this.name="TerminalFrameError"}}const Ni=new TextEncoder,Di=new TextDecoder;function Pi(e){if(!Number.isInteger(e)||e<0||e>255)throw new Xe(`slot must be an integer 0–255, got ${e}`)}function Ke(e,t,n){const s=new Uint8Array(2+n.length);return s[0]=e,s[1]=t,s.set(n,2),s}function Zh(e){switch(Pi(e.slot),e.opcode){case"Output":return Ke($e.Output,e.slot,e.data);case"Input":return Ke($e.Input,e.slot,e.data);case"Snapshot":return Ke($e.Snapshot,e.slot,e.data);case"Restore":return Ke($e.Restore,e.slot,e.data);case"Resize":{const t=JSON.stringify(Es.parse({rows:e.rows,cols:e.cols}));return Ke($e.Resize,e.slot,Ni.encode(t))}}}function Ai(e){if(e.length<2)throw new Xe(`frame too short: ${e.length} bytes (need ≥ 2)`);const t=e[0],n=e[1],s=Mi[t];if(!s)throw new Xe(`unknown terminal opcode 0x${t.toString(16)}`);const r=e.subarray(2);if(s==="Resize"){let o;try{o=JSON.parse(Di.decode(r))}catch{throw new Xe("resize payload is not valid JSON")}const a=Es.safeParse(o);if(!a.success)throw new Xe("resize payload is not { rows, cols }");return{opcode:"Resize",slot:n,rows:a.data.rows,cols:a.data.cols}}return{opcode:s,slot:n,data:r.slice()}}const Oe={Begin:16,Chunk:17,End:18,Error:19},qi=Object.fromEntries(Object.entries(Oe).map(([e,t])=>[t,e])),Rs=b({transferId:d(),fileName:d().optional(),mimeType:d().optional(),totalBytes:F().int().nonnegative().optional()});class Je extends Error{constructor(t){super(t),this.name="FileTransferFrameError"}}const jn=new TextEncoder,Tn=new TextDecoder;function $i(e){if(!Number.isInteger(e)||e<0||e>255)throw new Je(`stream must be an integer 0–255, got ${e}`)}function mt(e,t,n){const s=new Uint8Array(2+n.length);return s[0]=e,s[1]=t,s.set(n,2),s}function Nt(e){switch($i(e.stream),e.opcode){case"Begin":return mt(Oe.Begin,e.stream,jn.encode(JSON.stringify(Rs.parse(e.meta))));case"Chunk":return mt(Oe.Chunk,e.stream,e.data);case"End":return mt(Oe.End,e.stream,new Uint8Array([e.ok?1:0]));case"Error":return mt(Oe.Error,e.stream,jn.encode(e.message))}}function Bi(e){if(e.length<2)throw new Je(`frame too short: ${e.length} bytes (need ≥ 2)`);const t=e[0],n=e[1],s=qi[t];if(!s)throw new Je(`unknown file-transfer opcode 0x${t.toString(16)}`);const r=e.subarray(2);switch(s){case"Begin":{let o;try{o=JSON.parse(Tn.decode(r))}catch{throw new Je("begin payload is not valid JSON")}const a=Rs.safeParse(o);if(!a.success)throw new Je("begin payload is not a valid transfer header");return{opcode:"Begin",stream:n,meta:a.data}}case"Chunk":return{opcode:"Chunk",stream:n,data:r.slice()};case"End":return{opcode:"End",stream:n,ok:(r[0]??1)!==0};case"Error":return{opcode:"Error",stream:n,message:Tn.decode(r)}}}function zi(e){try{return Bi(e)}catch{return null}}const Be=256;function Oi(e,t=0){const n=(t%Be+Be)%Be;for(let s=0;s<Be;s++){const r=(n+s)%Be;if(!e.has(r))return r}return null}const Fi=d().regex(/^[a-z][a-z0-9-]*$/,"invalid provider id"),Wi=Ne(["safe","moderate","dangerous","planning"]),Li=b({supportsStreaming:O(),supportsSessionPersistence:O(),supportsDynamicModes:O(),supportsMcpServers:O(),supportsReasoningStream:O(),supportsToolInvocations:O(),supportsRewindConversation:O().optional(),supportsRewindFiles:O().optional(),supportsRewindBoth:O().optional(),supportsSteering:O().optional()}).passthrough(),Hi=b({id:d(),label:d().optional(),description:d().optional(),icon:d().optional(),colorTier:Wi});b({id:Fi,label:d(),description:d().optional(),extends:d().optional(),modes:te(Hi),capabilities:Li});function Ht(e){return typeof e=="string"?e:e instanceof Uint8Array||Buffer.isBuffer(e)?e.toString("utf8"):String(e??"")}function Ms(e){let t=null;const n={onMessage:null,onClose:null,onError:null,get isOpen(){return t!==null&&t.readyState===1},connect(s){return new Promise((r,o)=>{const a=e??(()=>new WebSocket(s));try{t=e?a(s):new WebSocket(s),t.binaryType="arraybuffer"}catch(c){o(c);return}t.onopen=()=>r(),t.onerror=c=>{var l;(t==null?void 0:t.readyState)!==1&&o(c),(l=n.onError)==null||l.call(n,c)},t.onclose=c=>{var l;(l=n.onClose)==null||l.call(n,c.code,Ht(c.reason))},t.onmessage=c=>{var u,f,g,h;const{data:l}=c;l instanceof ArrayBuffer||l instanceof Uint8Array?(u=n.onMessage)==null||u.call(n,l):typeof l=="string"?(f=n.onMessage)==null||f.call(n,l):typeof Blob<"u"&&l instanceof Blob?(g=n.onMessage)==null||g.call(n,l):Buffer.isBuffer(l)&&((h=n.onMessage)==null||h.call(n,l.buffer.slice(l.byteOffset,l.byteOffset+l.byteLength)))}})},sendText(s){t==null||t.send(s)},sendBinary(s){t==null||t.send(s)},close(s=1e3,r=""){t==null||t.close(s,r),t=null}};return n}const Qe="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function Ns(e){let t="";for(let n=0;n<e.length;n+=3){const s=e[n],r=n+1<e.length,o=n+2<e.length,a=r?e[n+1]:0,c=o?e[n+2]:0;t+=Qe[s>>2],t+=Qe[(s&3)<<4|a>>4],t+=r?Qe[(a&15)<<2|c>>6]:"=",t+=o?Qe[c&63]:"="}return t}function Ds(e){const t=e.replace(/=+$/,""),n=[];let s=0,r=0;for(const o of t){const a=Qe.indexOf(o);if(a===-1)throw new Error(`invalid base64 character: ${JSON.stringify(o)}`);s=s<<6|a,r+=6,r>=8&&(r-=8,n.push(s>>r&255))}return new Uint8Array(n)}function Ui(e){try{const t=JSON.parse(e);return!t||typeof t.type!="string"?null:t}catch{return null}}const wt=24;function Ps(e,t){const n=Fe.randomBytes(wt),s=Fe.box.after(e,n,t),r=new Uint8Array(n.length+s.length);return r.set(n,0),r.set(s,n.length),Ns(r)}function As(e,t){let n;try{n=Ds(e)}catch{return null}if(n.length<wt)return null;const s=n.slice(0,wt),r=n.slice(wt);return Fe.box.open.after(r,s,t)}function Ki(e,t){return Ps(new TextEncoder().encode(e),t)}function Vi(e,t){const n=As(e,t);return n?new TextDecoder().decode(n):null}function Gi(e,t,n,s,r,o){let a=!1;return n.onClose(c=>{var l;a=!0,(l=s.onClose)==null||l.call(s,c)}),{handleAppFrame(c){var f,g;if(a)return;const l=r();if(!o()||!l)return;const u=Vi(c.frame,l);if(u===null){(f=s.onAuthError)==null||f.call(s,new Error(`relay ${e} channel: message failed authentication`));return}(g=s.onMessage)==null||g.call(s,u)},handleBinaryFrame(c){var f,g;if(a)return;const l=r();if(!o()||!l)return;const u=As(c.frame,l);if(u===null){(f=s.onAuthError)==null||f.call(s,new Error(`relay ${e} channel: binary message failed authentication`));return}(g=s.onBinaryMessage)==null||g.call(s,u)},send(c){if(a)throw new Error(`relay ${e} channel: cannot send after close()`);const l=r();if(!o()||!l)throw new Error(`relay ${e} channel: cannot send before the E2EE handshake completes`);n.send(JSON.stringify({type:"e2ee_app",frame:Ki(c,l)}))},sendBinary(c){if(a)throw new Error(`relay ${e} channel: cannot send after close()`);const l=r();if(!o()||!l)throw new Error(`relay ${e} channel: cannot send before the E2EE handshake completes`);n.send(JSON.stringify({type:"e2ee_bin",frame:Ps(c,l)}))},close(){a||(a=!0,n.close())}}}function Yi(e){const{transport:t,attachment:n,daemonPublicKey:s}=e,r=e.events??{},o=Fe.box.keyPair(),a=Fe.box.before(s,o.secretKey);let c=!1;const l=Gi("client",n,t,r,()=>a,()=>c);return t.onMessage(u=>{var g;const f=Ui(u);if(f){if(f.type==="e2ee_ready"){if(c)return;c=!0,(g=r.onReady)==null||g.call(r);return}if(f.type==="e2ee_app"){l.handleAppFrame(f);return}f.type==="e2ee_bin"&&l.handleBinaryFrame(f)}}),t.send(JSON.stringify({type:"e2ee_hello",ephemeralPublicKey:Ns(o.publicKey)})),{role:"client",attachment:n,get ready(){return c},send:l.send,sendBinary:l.sendBinary,close:l.close}}const Xi=16;function Ji(e){const t=Fe.hash(e);let n="";for(let s=0;s<Xi;s++)n+=t[s].toString(16).padStart(2,"0");return n}function Qi(e){const t=e.useTls?"wss":"ws",n=e.endpoint.replace(/^(?:https?|wss?):\/\//,"").replace(/\/+$/,"");return`${t}://${n}`}function Zi(e){let t=null,n=null;const s=e.sessionId??Ji(e.daemonPublicKey),r={onMessage:null,onClose:null,onError:null,get isOpen(){return t!==null&&t.readyState===1&&n!==null&&n.ready},connect(o){return new Promise((a,c)=>{const l=e.factory??(()=>new WebSocket(o));try{t=e.factory?l(o):new WebSocket(o)}catch(h){c(h);return}const u=t,f=[],g=[];u.onopen=()=>{u.send(JSON.stringify({type:"relay_register",sessionId:s})),n=Yi({transport:{send:h=>u.send(h),onMessage:h=>f.push(h),onClose:h=>g.push(h),close:()=>u.close()},attachment:{sessionId:s},daemonPublicKey:e.daemonPublicKey,events:{onReady:()=>a(),onMessage:h=>{var m;return(m=r.onMessage)==null?void 0:m.call(r,h)},onBinaryMessage:h=>{var m;return(m=r.onMessage)==null?void 0:m.call(r,h.slice().buffer)},onAuthError:h=>{var m;return(m=r.onError)==null?void 0:m.call(r,h)}}})},u.onerror=h=>{var m;u.readyState!==1&&c(h),(m=r.onError)==null||m.call(r,h)},u.onclose=h=>{var m;for(const w of g)w(Ht(h.reason));(m=r.onClose)==null||m.call(r,h.code,Ht(h.reason))},u.onmessage=h=>{const{data:m}=h;if(typeof m=="string")for(const w of f)w(m)}})},sendText(o){if(!n||!n.ready)throw new Error("relay transport: cannot send before the E2EE handshake completes");n.send(o)},sendBinary(o){if(!n||!n.ready)throw new Error("relay transport: cannot send before the E2EE handshake completes");n.sendBinary(o)},close(o=1e3,a=""){n==null||n.close(),n=null,t==null||t.close(o,a),t=null}};return r}function ec(e){const t=e.indexOf("#"),n=t===-1?e:e.slice(t+1),s=new URLSearchParams(n),r=s.get("offer");if(!r)return null;let o;try{o=Ds(r)}catch{return null}const a=s.get("relay");if(a){const l={endpoint:a,useTls:s.get("relayTls")==="1"};return{publicKeyB64:r,publicKey:o,relay:l}}const c=s.get("host")??void 0;return{publicKeyB64:r,publicKey:o,...c?{host:c}:{}}}const tc=1;function Ut(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`id-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}class nc extends Error{constructor(t,n,s){super(t),this.requestId=n,this.code=s,this.name="RpcError"}}class Cn extends Error{constructor(t){super(`RPC ${t} timed out`),this.requestId=t,this.name="RpcTimeoutError"}}class sc{constructor(t){$(this,"transport");$(this,"rpcTimeoutMs");$(this,"now");$(this,"_state","idle");$(this,"_serverId",null);$(this,"_features",{});$(this,"_serverCapabilities",{});$(this,"pending",new Map);$(this,"sessionHandlers",new Set);$(this,"terminalHandlers",new Set);$(this,"fileTransferHandlers",new Set);$(this,"stateHandlers",new Set);$(this,"helloResolve",null);$(this,"helloReject",null);this.options=t,this.transport=t.transport??Ms(),this.rpcTimeoutMs=t.rpcTimeoutMs??3e4,this.now=t.now??(()=>Date.now()),this.transport.onMessage=n=>this.handleIncoming(n),this.transport.onClose=(n,s)=>this.handleClose(n,s),this.transport.onError=()=>{}}get state(){return this._state}get serverId(){return this._serverId}get features(){return this._features}get serverCapabilities(){return this._serverCapabilities}hasFeature(t){return!!this._features[t]}async connect(){this.setState("connecting"),await this.transport.connect(this.options.url);const t=new Promise((s,r)=>{this.helloResolve=s,this.helloReject=r});this.transport.sendText(JSON.stringify({type:"hello",clientId:this.options.clientId,clientType:this.options.clientType,protocolVersion:this.options.protocolVersion??tc,appVersion:this.options.appVersion,capabilities:this.options.capabilities}));const n=await t;return this._serverId=n.serverId,this._features=n.features,this._serverCapabilities=n.capabilities,this.setState("open"),n}close(t=1e3,n=""){this.setState("closing"),this.transport.close(t,n)}request(t,n={},s){const r=n.requestId??Ut();return new Promise((o,a)=>{const c=s??this.rpcTimeoutMs,l=c>0?setTimeout(()=>{this.pending.delete(r),a(new Cn(r))},c):null;this.pending.set(r,{resolve:u=>o(u),reject:a,timer:l}),this.sendSession({type:t,...n,requestId:r})})}sendSession(t){this.transport.sendText(JSON.stringify({type:"session",message:t}))}sendBinary(t){this.transport.sendBinary(t)}ping(t=1e4){const n=Ut();return new Promise((s,r)=>{const o=t>0?setTimeout(()=>{this.pending.delete(n),r(new Cn(n))},t):null;this.pending.set(n,{resolve:()=>s(),reject:r,timer:o}),this.transport.sendText(JSON.stringify({type:"ping",requestId:n,clientSentAt:this.now()}))})}onSessionMessage(t){return this.sessionHandlers.add(t),()=>this.sessionHandlers.delete(t)}onTerminalFrame(t){return this.terminalHandlers.add(t),()=>this.terminalHandlers.delete(t)}onFileTransferFrame(t){return this.fileTransferHandlers.add(t),()=>this.fileTransferHandlers.delete(t)}onStateChange(t){return this.stateHandlers.add(t),()=>this.stateHandlers.delete(t)}setState(t){if(this._state!==t){this._state=t;for(const n of this.stateHandlers)n(t)}}handleClose(t,n){this.helloReject&&(this.helloReject(new Error(`socket closed during handshake: ${n}`)),this.helloResolve=null,this.helloReject=null);for(const[,s]of this.pending)s.timer&&clearTimeout(s.timer),s.reject(new Error(`socket closed: ${n}`));this.pending.clear(),this.setState("closed")}handleIncoming(t){if(typeof t=="string"){this.handleTextFrame(t);return}if(t instanceof ArrayBuffer){this.handleBinaryFrame(new Uint8Array(t));return}typeof t.arrayBuffer=="function"&&t.arrayBuffer().then(n=>this.handleBinaryFrame(new Uint8Array(n)))}handleBinaryFrame(t){const n=t[0];if(n!==void 0&&Object.values(Oe).includes(n)){const o=zi(t);if(!o)return;for(const a of this.fileTransferHandlers)a(o);return}const r=Ai(t);for(const o of this.terminalHandlers)o(r)}handleTextFrame(t){let n;try{n=JSON.parse(t)}catch{return}const s=n;switch(s.type){case"status":this.handleStatus(s);return;case"pong":this.resolvePending(s.requestId,void 0);return;case"ping":this.transport.sendText(JSON.stringify({type:"pong",requestId:s.requestId,serverReceivedAt:this.now(),serverSentAt:this.now()}));return;case"session":this.handleSession(s.message);return;default:return}}handleStatus(t){const n=t.payload;(n==null?void 0:n.status)==="server_info"&&this.helloResolve&&(this.helloResolve(n),this.helloResolve=null,this.helloReject=null)}handleSession(t){if(!t||typeof t!="object")return;const n=t;if(n.type==="rpc_error"&&typeof n.requestId=="string"){const s=this.pending.get(n.requestId);s&&(s.timer&&clearTimeout(s.timer),this.pending.delete(n.requestId),s.reject(new nc(n.message??n.error??"RPC failed",n.requestId,n.code)));return}if(typeof n.requestId=="string"&&this.pending.has(n.requestId)){const s="payload"in n?n.payload:n;this.resolvePending(n.requestId,s)}for(const s of this.sessionHandlers)s(t)}resolvePending(t,n){const s=this.pending.get(t);s&&(s.timer&&clearTimeout(s.timer),this.pending.delete(t),s.resolve(n))}}class rc{constructor(t){this.daemon=t}get connection(){return this.daemon}async createAgent(t){return await this.daemon.request("create_agent_request",{...t})}agent(t){return new ac(this.daemon,t)}workspace(t){return new ic(this.daemon,t)}get providers(){return new cc(this.daemon)}onAgentUpdate(t){return this.daemon.onSessionMessage(n=>{n.type==="agent_update"&&t(n)})}onWorkspaceUpdate(t){return this.daemon.onSessionMessage(n=>{n.type==="workspace_update"&&t(n)})}}class oc{constructor(t,n){this.daemon=t,this.agentId=n}fetch(t={}){return this.daemon.request("fetch_agent_timeline_request",{agentId:this.agentId,cursor:t.cursor,direction:t.direction,limit:t.limit})}subscribe(t){return this.daemon.onSessionMessage(n=>{const s=n;s.type==="agent_stream"&&s.agentId===this.agentId&&s.event&&t(s.event)})}}class ac{constructor(t,n){$(this,"timeline");this.daemon=t,this.agentId=n,this.timeline=new oc(t,n)}send(t,n={}){return this.daemon.request("send_agent_prompt",{agentId:this.agentId,prompt:t,clientMessageId:n.clientMessageId,images:n.images})}run(t,n){return this.send(t,n)}interrupt(){return this.daemon.request("interrupt_agent",{agentId:this.agentId})}steer(t,n={}){return this.daemon.request("steer_agent_request",{agentId:this.agentId,message:t,clientMessageId:n.clientMessageId,images:n.images})}followUp(t,n={}){return this.daemon.request("follow_up_agent_request",{agentId:this.agentId,message:t,clientMessageId:n.clientMessageId,images:n.images})}update(t){return this.daemon.request("update_agent",{agentId:this.agentId,...t})}resume(){return this.daemon.request("resume_agent",{agentId:this.agentId})}archive(){return this.daemon.request("archive_agent",{agentId:this.agentId})}delete(){return this.daemon.request("delete_agent",{agentId:this.agentId})}onUpdate(t){return this.daemon.onSessionMessage(n=>{const s=n;s.type==="agent_update"&&s.agentId===this.agentId&&t(s)})}sessionStats(){return this.daemon.request("agent_session_stats_request",{agentId:this.agentId})}compact(t){return this.daemon.request("agent_compact_request",{agentId:this.agentId,customInstructions:t})}newSession(){return this.daemon.request("agent_new_session_request",{agentId:this.agentId})}switchSession(t){return this.daemon.request("agent_switch_session_request",{agentId:this.agentId,sessionPath:t})}fork(t){return this.daemon.request("agent_fork_request",{agentId:this.agentId,entryId:t})}forkMessages(){return this.daemon.request("agent_fork_messages_request",{agentId:this.agentId})}clone(){return this.daemon.request("agent_clone_request",{agentId:this.agentId})}setSessionName(t){return this.daemon.request("agent_set_session_name_request",{agentId:this.agentId,name:t})}exportHtml(t){return this.daemon.request("agent_export_html_request",{agentId:this.agentId,outputPath:t})}setModel(t,n){return this.daemon.request("agent_set_model_request",{agentId:this.agentId,provider:t,modelId:n})}cycleModel(){return this.daemon.request("agent_cycle_model_request",{agentId:this.agentId})}lastAssistantText(){return this.daemon.request("agent_last_assistant_text_request",{agentId:this.agentId})}listCommands(){return this.daemon.request("agent_list_commands_request",{agentId:this.agentId})}}class ic{constructor(t,n){this.daemon=t,this.workspaceId=n}onUpdate(t){return this.daemon.onSessionMessage(n=>{const s=n;s.type==="workspace_update"&&s.workspaceId===this.workspaceId&&t(s)})}}class cc{constructor(t){this.daemon=t}listProviders(){return this.daemon.request("list_providers",{})}listModels(t){return this.daemon.request("list_provider_models",{provider:t})}listModes(t){return this.daemon.request("list_provider_modes",{provider:t})}resolveDefaultModel(t,n){return this.daemon.request("resolve_default_model",{provider:t,...n?{cwd:n}:{}})}refreshSnapshot(){return this.daemon.request("providers.snapshot.refresh.request",{})}}const En=32*1024,lc="invalid_or_expired_token";function dc(e){const t=e.reduce((r,o)=>r+o.length,0),n=new Uint8Array(t);let s=0;for(const r of e)n.set(r,s),s+=r.length;return n}class uc{constructor(t){$(this,"pending",new Map);$(this,"streamCursor",1);$(this,"detach",null);this.daemon=t}start(){this.detach||(this.detach=this.daemon.onFileTransferFrame(t=>this.dispatch(t)))}stop(){var t;(t=this.detach)==null||t.call(this),this.detach=null;for(const[n,s]of this.pending)s.reject(new Error("file transfer router stopped")),this.pending.delete(n)}async download(t){try{return await this.attemptDownload(t)}catch(n){if(!(n instanceof Error)||n.message!==lc)throw n;return await this.attemptDownload(t)}}async attemptDownload(t){const n=await this.daemon.request("file_download_token_request",{path:t});if(!n.ok||!n.token)throw new Error(n.error??"failed to issue download token");const s=Oi(this.pending,this.streamCursor);if(s===null)throw new Error("no free download stream");this.streamCursor=(s+1)%Be;const r=new Promise((a,c)=>{this.pending.set(s,{chunks:[],meta:{},resolve:a,reject:c})});let o;try{o=await this.daemon.request("file_download_request",{token:n.token,stream:s})}catch(a){throw this.pending.delete(s),a}if(!o.ok)throw this.pending.delete(s),new Error(o.error??"download request failed");return r}async upload(t,n){const s=Ut(),r=await this.daemon.request("file_upload_request",{path:t,transferId:s});if(!r.ok||r.stream===void 0)throw new Error(r.error??"upload request failed");const o=r.stream;this.daemon.sendBinary(Nt({opcode:"Begin",stream:o,meta:{transferId:s}}));for(let a=0;a<n.length;a+=En){const c=n.subarray(a,a+En);this.daemon.sendBinary(Nt({opcode:"Chunk",stream:o,data:c}))}this.daemon.sendBinary(Nt({opcode:"End",stream:o,ok:!0}))}dispatch(t){const n=this.pending.get(t.stream);if(n)switch(t.opcode){case"Begin":n.meta.fileName=t.meta.fileName,n.meta.mimeType=t.meta.mimeType;return;case"Chunk":n.chunks.push(t.data);return;case"End":this.pending.delete(t.stream),t.ok?n.resolve({bytes:dc(n.chunks),...n.meta}):n.reject(new Error("download failed"));return;case"Error":this.pending.delete(t.stream),n.reject(new Error(t.message));return}}}class fc{constructor(t,n={}){$(this,"initialDelayMs");$(this,"maxDelayMs");$(this,"factor");$(this,"jitter");$(this,"maxAttempts");$(this,"setTimer");$(this,"clearTimer");$(this,"random");$(this,"attempt",0);$(this,"timer",null);$(this,"active",!1);$(this,"reconnecting",!1);$(this,"detachState",null);$(this,"reconnectedHandlers",new Set);$(this,"failedHandlers",new Set);this.daemon=t,this.initialDelayMs=n.initialDelayMs??500,this.maxDelayMs=n.maxDelayMs??3e4,this.factor=n.factor??2,this.jitter=n.jitter??.2,this.maxAttempts=n.maxAttempts??Number.POSITIVE_INFINITY,this.setTimer=n.setTimer??((s,r)=>setTimeout(s,r)),this.clearTimer=n.clearTimer??(s=>clearTimeout(s)),this.random=n.random??Math.random}delayForAttempt(t){const n=Math.min(this.maxDelayMs,this.initialDelayMs*this.factor**(t-1)),s=n*this.jitter*(this.random()*2-1);return Math.max(0,Math.round(n+s))}onReconnected(t){return this.reconnectedHandlers.add(t),()=>this.reconnectedHandlers.delete(t)}onReconnectFailed(t){return this.failedHandlers.add(t),()=>this.failedHandlers.delete(t)}start(){this.active||(this.active=!0,this.detachState=this.daemon.onStateChange(t=>{t==="closed"&&this.active&&this.scheduleReconnect(),t==="open"&&(this.attempt=0)}))}stop(){var t;this.active=!1,this.timer&&this.clearTimer(this.timer),this.timer=null,(t=this.detachState)==null||t.call(this),this.detachState=null}reconnectNow(){this.active&&(this.reconnecting||this.daemon.state==="closed"&&(this.timer&&(this.clearTimer(this.timer),this.timer=null),this.attempt=0,this.tryReconnect()))}get attemptCount(){return this.attempt}scheduleReconnect(){if(!this.active||this.timer||this.attempt>=this.maxAttempts)return;this.attempt+=1;const t=this.delayForAttempt(this.attempt);this.timer=this.setTimer(()=>{this.timer=null,!this.reconnecting&&this.tryReconnect()},t)}async tryReconnect(){if(!this.active||this.reconnecting)return;this.reconnecting=!0;const t=this.attempt;try{await this.daemon.connect();for(const n of this.reconnectedHandlers)n({attempt:t,serverId:this.daemon.serverId})}catch(n){for(const s of this.failedHandlers)s(n,t);this.scheduleReconnect()}finally{this.reconnecting=!1}}}function Rn(e){const t=e.trim();if(t==="")return t;const n=t.match(/^([a-z][a-z0-9+.-]*):\/\//i);if(!n)return`ws://${t.replace(/\/+$/,"")}`;const s=n[1].toLowerCase(),r=t.slice(n[0].length).replace(/\/+$/,"");switch(s){case"http":return`ws://${r}`;case"https":return`wss://${r}`;case"ws":case"wss":return`${s}://${r}`;default:return t}}function pc(e){const t=ec(e);return t!=null&&t.relay?{mode:"relay",url:Qi(t.relay),daemonPublicKey:t.publicKey}:t!=null&&t.host?{mode:"direct",url:Rn(t.host)}:{mode:"direct",url:Rn(e)}}const hc=`
|
|
3
3
|
const pending = new Set();
|
|
4
4
|
self.onmessage = (e) => {
|
|
@@ -14,5 +14,5 @@ var jr=Object.defineProperty;var Tr=(e,t,n)=>t in e?jr(e,t,{enumerable:!0,config
|
|
|
14
14
|
self.postMessage({ id: msg.id });
|
|
15
15
|
}, msg.ms);
|
|
16
16
|
};
|
|
17
|
-
`;function mc(){return{setTimer:(e,t)=>setTimeout(e,t),clearTimer:e=>clearTimeout(e)}}function gc(){const e=new Blob([hc],{type:"application/javascript"}),t=URL.createObjectURL(e),n=new Worker(t);URL.revokeObjectURL(t);const s=new Map;let r=1;return n.addEventListener("message",o=>{const a=s.get(o.data.id);s.delete(o.data.id),a==null||a()}),{setTimer:(o,a)=>{const c=r++;return s.set(c,o),n.postMessage({id:c,ms:a}),c},clearTimer:o=>{const a=o;s.delete(a)&&n.postMessage({id:a,cancel:!0})}}}let Ve=null;function Mn(){if(Ve)return Ve;try{Ve=gc()}catch{Ve=mc()}return Ve}function _c(){return{setTimer:(e,t)=>Mn().setTimer(e,t),clearTimer:e=>Mn().clearTimer(e)}}const yc=32,oe=new Map;function wc(){for(;oe.size>yc;){let e=null;for(const[t,n]of oe)if(n.refs===0&&n.entry){URL.revokeObjectURL(n.entry.objectUrl),e=t;break}if(e===null)return;oe.delete(e)}}function em(e,t){const n=oe.get(e);if(n)return n.refs+=1,oe.delete(e),oe.set(e,n),n.entry?Promise.resolve(n.entry):n.pending;const s={refs:1,entry:null,pending:null};return oe.set(e,s),wc(),s.pending=t(e).then(r=>{const o=new Blob([Uint8Array.from(r.bytes)],{type:r.mimeType||"application/octet-stream"}),a={objectUrl:URL.createObjectURL(o),mimeType:r.mimeType};return oe.get(e)===s?(s.entry=a,s.pending=null):URL.revokeObjectURL(a.objectUrl),a}).catch(r=>{throw oe.get(e)===s&&oe.delete(e),r}),s.pending}function tm(e){const t=oe.get(e);t&&(t.refs=Math.max(0,t.refs-1))}function bc(){for(const e of oe.values())e.entry&&URL.revokeObjectURL(e.entry.objectUrl);oe.clear()}function vc(){return"web-"+Math.random().toString(36).slice(2,10)}const A=Ie()((e,t)=>({status:"idle",serverInfo:null,error:null,daemon:null,client:null,reconnection:null,async connect(n){t().disconnect();const s=pc(n.url);let r;s.mode==="relay"?r=Zi({daemonPublicKey:s.daemonPublicKey}):n.password&&(r=Ms(f=>new WebSocket(f,[`pi-studio.bearer.${n.password}`])));const o=new sc({url:s.url,clientId:n.clientId??vc(),clientType:"browser",capabilities:{[In.inline_image_markdown]:!0,[In.file_link_markdown]:!0},transport:r,rpcTimeoutMs:1800*1e3}),a=new rc(o),{setTimer:c,clearTimer:l}=_c(),u=new fc(o,{setTimer:c,clearTimer:l});o.onStateChange(f=>e({status:f})),u.onReconnected(()=>e({error:null})),u.onReconnectFailed(f=>{e({error:f instanceof Error?f.message:String(f)})}),e({daemon:o,client:a,reconnection:u,error:null,status:"connecting"});try{const f=await o.connect();e({serverInfo:f}),u.start()}catch(f){throw e({error:f instanceof Error?f.message:String(f)}),f}},disconnect(){const{daemon:n,reconnection:s}=t();s==null||s.stop(),n==null||n.close(),bc(),e({status:"idle",serverInfo:null,daemon:null,client:null,reconnection:null})}})),xc=100,Sc=480,kc=220,Ic=280;function gt(e){return Math.min(Sc,Math.max(xc,e))}const M=Ie()(e=>({host:"ws://127.0.0.1:6767",password:"",cwd:"~",cwdPickerOpen:!1,sessionMenu:null,workspaceMenu:null,fileMenu:null,rightSidebarTab:"files",collapsedWorkspaces:new Set,leftSidebarCollapsed:!1,rightSidebarCollapsed:!1,leftSidebarWidth:kc,rightSidebarWidth:Ic,setHost:t=>e({host:t}),setPassword:t=>e({password:t}),setCwd:t=>e({cwd:t}),openCwdPicker:()=>e({cwdPickerOpen:!0}),closeCwdPicker:()=>e({cwdPickerOpen:!1}),openSessionMenu:(t,n,s)=>e({sessionMenu:{sessionId:t,x:n,y:s}}),closeSessionMenu:()=>e({sessionMenu:null}),openWorkspaceMenu:(t,n,s)=>e({workspaceMenu:{cwd:t,x:n,y:s}}),closeWorkspaceMenu:()=>e({workspaceMenu:null}),openFileMenu:(t,n,s,r,o)=>e({fileMenu:{path:t,isDirectory:n,x:s,y:r,background:o}}),closeFileMenu:()=>e({fileMenu:null}),setRightSidebarTab:t=>e({rightSidebarTab:t}),toggleWorkspaceCollapsed:t=>e(n=>{const s=new Set(n.collapsedWorkspaces);return s.has(t)?s.delete(t):s.add(t),{collapsedWorkspaces:s}}),setCollapsedWorkspaces:t=>e({collapsedWorkspaces:t}),toggleLeftSidebar:()=>e(t=>({leftSidebarCollapsed:!t.leftSidebarCollapsed})),toggleRightSidebar:()=>e(t=>({rightSidebarCollapsed:!t.rightSidebarCollapsed})),setLeftSidebarWidth:t=>e({leftSidebarWidth:gt(t)}),setRightSidebarWidth:t=>e({rightSidebarWidth:gt(t)}),resizeLeftSidebar:t=>e(n=>({leftSidebarWidth:gt(n.leftSidebarWidth+t)})),resizeRightSidebar:t=>e(n=>({rightSidebarWidth:gt(n.rightSidebarWidth+t)}))})),jc="_wrap_aquqo_1",Tc="_dot_aquqo_8",Cc="_open_aquqo_15",Ec="_connecting_aquqo_18",Rc="_closed_aquqo_21",Mc="_idle_aquqo_22",Nc="_closing_aquqo_23",Dt={wrap:jc,dot:Tc,open:Cc,connecting:Ec,closed:Rc,idle:Mc,closing:Nc},Dc={idle:"disconnected",connecting:"connecting…",open:"connected",closing:"disconnecting…",closed:"disconnected"};function Pc(){const e=A(n=>n.status),t=A(n=>n.error);return i.jsxs("span",{className:Dt.wrap,title:t??void 0,children:[i.jsx("span",{className:W(Dt.dot,Dt[e])}),Dc[e]??e]})}const Ac="_toolbar_1lcb1_1",qc="_brand_1lcb1_10",$c="_version_1lcb1_16",Bc="_sep_1lcb1_22",zc="_host_1lcb1_28",Oc="_password_1lcb1_31",Fc="_sidebarToggles_1lcb1_34",Te={toolbar:Ac,brand:qc,version:$c,sep:Bc,host:zc,password:Oc,sidebarToggles:Fc};function Wc(){const e=A(h=>h.status),t=A(h=>h.connect),n=A(h=>h.disconnect),s=M(h=>h.host),r=M(h=>h.setHost),o=M(h=>h.password),a=M(h=>h.setPassword),c=M(h=>h.leftSidebarCollapsed),l=M(h=>h.toggleLeftSidebar),u=M(h=>h.rightSidebarCollapsed),f=M(h=>h.toggleRightSidebar),g=e==="open"||e==="connecting";return i.jsxs("div",{className:Te.toolbar,children:[i.jsx("span",{className:Te.brand,children:"Pi-Studio"}),i.jsxs("span",{className:Te.version,children:["v","0.0.70"]}),i.jsx(Pc,{}),i.jsx("div",{className:Te.sep}),i.jsx(St,{className:Te.host,value:s,onChange:h=>r(h.target.value),placeholder:"host:port, ws://…/http://…, or a pasted pairing link",disabled:g}),i.jsx(St,{className:Te.password,type:"password",value:o,onChange:h=>a(h.target.value),placeholder:"password",disabled:g}),e==="open"||e==="connecting"||e==="closing"?i.jsx(ne,{size:"sm",onClick:()=>n(),children:"Disconnect"}):i.jsx(ne,{size:"sm",variant:"default",onClick:()=>void t({url:s,password:o||void 0}),children:"Connect"}),i.jsxs("div",{className:Te.sidebarToggles,children:[i.jsx(ne,{size:"sm",variant:"ghost",iconOnly:!0,title:c?"Show sessions sidebar":"Hide sessions sidebar",onClick:()=>l(),children:c?i.jsx(Pr,{size:16}):i.jsx(Ar,{size:16})}),i.jsx(ne,{size:"sm",variant:"ghost",iconOnly:!0,title:u?"Show files/changes sidebar":"Hide files/changes sidebar",onClick:()=>f(),children:u?i.jsx(qr,{size:16}):i.jsx($r,{size:16})})]})]})}const Kt={rows:[],streamingAssistantIndex:null,streamingReasoningIndex:null,toolIndexByCallId:{}};let Nn=0;function je(){return Nn+=1,`row-${Nn}`}function Lc(e){switch(e.kind){case"shell":return e.command??"";case"read":case"write":return e.path??"";case"edit":return e.path??"";case"search":return e.query??"";case"fetch":return e.url??"";case"task":return e.description??"";default:return""}}function Hc(e,t){return e??`${t.kind}:${Lc(t)}`}function We(e,t){if(t===null)return;const n=e[t];n&&(n.kind!=="assistant"&&n.kind!=="reasoning"||n.streaming&&(e[t]={...n,streaming:!1}))}function qs(e){if(e.streamingAssistantIndex===null&&e.streamingReasoningIndex===null)return e;const t=e.rows.slice();return We(t,e.streamingAssistantIndex),We(t,e.streamingReasoningIndex),{...e,rows:t,streamingAssistantIndex:null,streamingReasoningIndex:null}}function Uc(e){return qs(e)}function Kc(e,t,n){var a;const s=e.rows.slice();We(s,e.streamingReasoningIndex);let r=e.streamingAssistantIndex;if(r===null||((a=s[r])==null?void 0:a.kind)!=="assistant"){if(!t)return{...e,rows:s,streamingAssistantIndex:null,streamingReasoningIndex:null};const c={kind:"assistant",id:je(),text:"",streaming:!0};s.push(c),r=s.length-1}const o=s[r];return!o||o.kind!=="assistant"?e:(s[r]={...o,text:o.text+t,streaming:!n},{...e,rows:s,streamingAssistantIndex:n?null:r,streamingReasoningIndex:null})}function Vc(e,t,n){var a;const s=e.rows.slice();We(s,e.streamingAssistantIndex);let r=e.streamingReasoningIndex;if(r===null||((a=s[r])==null?void 0:a.kind)!=="reasoning"){if(!t)return{...e,rows:s,streamingAssistantIndex:null,streamingReasoningIndex:null};const c={kind:"reasoning",id:je(),text:"",streaming:!0};s.push(c),r=s.length-1}const o=s[r];return!o||o.kind!=="reasoning"?e:(s[r]={...o,text:o.text+t,streaming:!n},{...e,rows:s,streamingReasoningIndex:n?null:r,streamingAssistantIndex:null})}function Gc(e,t){if(e.kind!==t.kind)return t;const n={...e};for(const[s,r]of Object.entries(t))r!==void 0&&r!==""&&(n[s]=r);return n}function Yc(e,t){var c;const n=Hc(t.callId,t.tool),s=t.status==="completed"||t.status==="error"?t.status:"running",r=e.toolIndexByCallId[n],o=e.rows.slice();if(We(o,e.streamingAssistantIndex),We(o,e.streamingReasoningIndex),r!==void 0&&((c=o[r])==null?void 0:c.kind)==="tool"){const l=o[r];return l.kind!=="tool"?e:(o[r]={...l,tool:Gc(l.tool,t.tool),status:s},{...e,rows:o,streamingAssistantIndex:null,streamingReasoningIndex:null})}const a={kind:"tool",id:je(),callId:n,tool:t.tool,status:s};return o.push(a),{...e,rows:o,toolIndexByCallId:{...e.toolIndexByCallId,[n]:o.length-1},streamingAssistantIndex:null,streamingReasoningIndex:null}}function an(e){return qs(e)}function Xc(e,t){const n=an(e),s={kind:"error",id:je(),text:t||"turn failed"};return{...n,rows:[...n.rows,s]}}function Jc(e){const t=an(e),n={kind:"system",id:je(),text:"(canceled)"};return{...t,rows:[...t.rows,n]}}function Qc(e,t){const n={kind:"error",id:je(),text:t||"error"};return{...e,rows:[...e.rows,n]}}function Zc(e,t,n,s){if(s!==void 0){const o=e.rows.findIndex(a=>a.kind==="user"&&a.pending&&a.clientMessageId===s);if(o!==-1){const a=e.rows.slice(),c=a[o];if((c==null?void 0:c.kind)==="user")return a[o]={...c,text:t,images:n,pending:!1},{...e,rows:a}}}const r={kind:"user",id:je(),text:t,images:n,clientMessageId:s};return{...e,rows:[...e.rows,r]}}function el(e,t){let n=!1;const s=e.rows.map(r=>r.kind!=="user"||!r.queued||t.includes(r.text)?r:(n=!0,{...r,queued:!1}));return n?{...e,rows:s}:e}function $s(e,t){switch(t.kind){case"turn_started":return Uc(e);case"user_message":return Zc(e,t.text??"",t.images,t.messageId);case"assistant_message":return Kc(e,t.text??"",t.final??!1);case"reasoning":return Vc(e,t.text??"",t.final??!1);case"tool_call":return Yc(e,t);case"turn_completed":return an(e);case"turn_failed":return Xc(e,t.error);case"turn_canceled":return Jc(e);case"error":return Qc(e,t.message);case"queue_update":return el(e,t.steering??[]);default:return e}}function tl(e,t,n,s,r){const o={kind:"user",id:je(),text:n,images:s,clientMessageId:t,pending:!0,queued:r};return{...e,rows:[...e.rows,o]}}function nl(e,t){const n=e.rows.findIndex(o=>o.kind==="user"&&o.pending&&o.clientMessageId===t);if(n===-1)return e;const s=e.rows.slice(),r=s[n];return(r==null?void 0:r.kind)!=="user"?e:(s[n]={...r,pending:!1,failed:!0},{...e,rows:s})}let Dn=0;function sl(){return Dn+=1,`s-${Date.now().toString(36)}-${Dn}`}const N=Ie()((e,t)=>({sessions:{},order:[],activeSessionId:null,createSession(n){const s=sl(),r={id:s,agentId:null,title:"New chat",status:"idle",cwd:n,timeline:Kt,userMessageCount:0};return e(o=>({sessions:{...o.sessions,[s]:r},order:[s,...o.order],activeSessionId:s})),s},hydrate(n){e(s=>s.sessions[n.id]?s:{sessions:{...s.sessions,[n.id]:n},order:[...s.order,n.id]})},bindAgent(n,s){e(r=>{const o=r.sessions[n];return o?{sessions:{...r.sessions,[n]:{...o,agentId:s}}}:r})},setStatus(n,s){e(r=>{const o=r.sessions[n];return o?{sessions:{...r.sessions,[n]:{...o,status:s}}}:r})},setStatusByAgentId(n,s){const r=t().findByAgentId(n);r&&t().setStatus(r.id,s)},setModel(n,s,r){e(o=>{const a=o.sessions[n];return a?{sessions:{...o.sessions,[n]:{...a,model:s,modelProvider:r}}}:o})},setModelByAgentId(n,s,r){const o=t().findByAgentId(n);o&&t().setModel(o.id,s,r)},setTitle(n,s){e(r=>{const o=r.sessions[n];return o?{sessions:{...r.sessions,[n]:{...o,title:s}}}:r})},setCwd(n,s){e(r=>{const o=r.sessions[n];return o?{sessions:{...r.sessions,[n]:{...o,cwd:s}}}:r})},applyStreamEvent(n,s){e(r=>{const o=r.sessions[n];if(!o)return r;const a=$s(o.timeline,s);let c=o.title;if(s.kind==="turn_completed"&&c==="New chat"){const l=a.rows.slice().reverse().find(u=>u.kind==="assistant");l&&l.kind==="assistant"&&l.text&&(c=l.text.slice(0,40)+(l.text.length>40?"…":""))}return{sessions:{...r.sessions,[n]:{...o,timeline:a,title:c}}}})},addOptimisticUserMessage(n,s,r,o,a){e(c=>{const l=c.sessions[n];if(!l)return c;const u=tl(l.timeline,s,r,o,a);return{sessions:{...c.sessions,[n]:{...l,timeline:u,userMessageCount:l.userMessageCount+1}}}})},markUserMessageFailed(n,s){e(r=>{const o=r.sessions[n];if(!o)return r;const a=nl(o.timeline,s);return{sessions:{...r.sessions,[n]:{...o,timeline:a}}}})},activate(n){e({activeSessionId:n})},remove(n){e(s=>{const{[n]:r,...o}=s.sessions,a=s.order.filter(l=>l!==n),c=s.activeSessionId===n?a[0]??null:s.activeSessionId;return{sessions:o,order:a,activeSessionId:c}})},findByAgentId(n){return Object.values(t().sessions).find(s=>s.agentId===n)}})),Pn=new WeakMap;function rl(e,t="pi"){const n=Pn.get(e);if(n)return n;const s=e.providers.resolveDefaultModel(t).then(r=>({model:r.model,modelProvider:r.modelProvider})).catch(()=>({}));return Pn.set(e,s),s}const bt=new Map;function Bs(e,t){const n=N.getState().sessions[t];if(!n)return Promise.reject(new Error(`unknown session: ${t}`));if(n.agentId)return Promise.resolve(n.agentId);const s=bt.get(t);if(s)return s;const r=(async()=>{if(!n.model){const l=await rl(e),u=N.getState().sessions[t];l.model&&u&&!u.model&&N.getState().setModel(t,l.model,l.modelProvider)}const o=N.getState().sessions[t];if(!o)throw new Error(`unknown session: ${t}`);const a={provider:"pi",cwd:o.cwd||"~"};o.model&&(a.model=o.model),o.modelProvider&&(a.modelProvider=o.modelProvider);const c=await e.createAgent({config:a,labels:{}});return N.getState().bindAgent(t,c.agentId),c.agentId})();return bt.set(t,r),r.finally(()=>bt.delete(t)),r}async function ol(e,t){var r;const n=N.getState().sessions[t];if(!n||n.userMessageCount>0||n.timeline.rows.length>0)return!1;await((r=bt.get(t))==null?void 0:r.catch(()=>{}));const s=N.getState().sessions[t];return s?(s.agentId&&e&&await e.agent(s.agentId).delete().catch(()=>{}),N.getState().remove(t),!0):!1}const al=4;function zs(e){return e==="left"||e==="right"?"row":"column"}function ae(e){return e.kind==="leaf"?[e.id]:e.children.flatMap(ae)}function cn(e,t){return e.kind==="leaf"?e.id===t:e.children.some(n=>cn(n,t))}function Os(e,t,n=1){if(e.kind==="leaf")return e.id===t?n:null;for(const s of e.children){const r=Os(s,t,n+1);if(r!==null)return r}return null}function Fs(e,t){if(e.kind==="leaf")return null;if(ln(e,t)!==-1)return e;for(const n of e.children){const s=Fs(n,t);if(s)return s}return null}function ln(e,t){return e.children.findIndex(n=>n.kind==="leaf"&&n.id===t)}function nt(e,t,n){const s=Os(e,t);if(s===null)return!1;const r=Fs(e,t);return r&&r.direction===zs(n)?!0:s+1<=al}function An(e,t,n,s){if(!nt(e,t,n)||cn(e,s))return e;const r=zs(n),o=n==="left"||n==="top",a={kind:"leaf",id:s},c=u=>({kind:"split",direction:r,children:o?[a,u]:[u,a],sizes:[.5,.5]}),l=u=>{if(u.kind==="leaf")return u.id===t?c(u):u;const f=ln(u,t);if(f!==-1&&u.direction===r){const g=u.sizes[f]/2,h=o?f:f+1,m=u.children.slice(),w=u.sizes.slice();return w[f]=g,m.splice(h,0,a),w.splice(h,0,g),{kind:"split",direction:u.direction,children:m,sizes:w}}return{kind:"split",direction:u.direction,children:u.children.map(l),sizes:u.sizes.slice()}};return l(e)}function Ws(e,t){if(!cn(e,t)||e.kind==="leaf")return e;const n=s=>{if(s.kind==="leaf")return s;const r=ln(s,t);if(r===-1)return{kind:"split",direction:s.direction,children:s.children.map(n),sizes:s.sizes.slice()};const o=s.sizes.filter((l,u)=>u!==r),a=o.reduce((l,u)=>l+u,0),c=a+s.sizes[r];return{kind:"split",direction:s.direction,children:s.children.filter((l,u)=>u!==r),sizes:o.map(l=>l/a*c)}};return Ls(n(e))}function Ls(e){if(e.kind==="leaf")return e;const t=e.children.map(Ls);if(t.length===1)return t[0];const n=[],s=[];return t.forEach((r,o)=>{const a=e.sizes[o];r.kind==="split"&&r.direction===e.direction?r.children.forEach((c,l)=>{n.push(c),s.push(a*r.sizes[l])}):(n.push(r),s.push(a))}),n.length===1?n[0]:{kind:"split",direction:e.direction,children:n,sizes:s}}const qn=.1;function il(e){const t=new Map,n=(s,r)=>{if(s.kind==="leaf"){t.set(s.id,r);return}Hs(s,r).forEach((o,a)=>n(s.children[a],o))};return n(e,{x:0,y:0,width:1,height:1}),t}function Hs(e,t){const n=[];let s=0;for(const r of e.sizes)n.push(e.direction==="row"?{x:t.x+s*t.width,y:t.y,width:r*t.width,height:t.height}:{x:t.x,y:t.y+s*t.height,width:t.width,height:r*t.height}),s+=r;return n}function cl(e){const t=[],n=(s,r,o)=>{if(s.kind==="leaf")return;const a=Hs(s,r);for(let c=0;c<s.children.length-1;c+=1){const l=a[c];t.push({splitPath:o.slice(),boundaryIndex:c,direction:s.direction,rect:s.direction==="row"?{x:l.x+l.width,y:r.y,width:0,height:r.height}:{x:r.x,y:l.y+l.height,width:r.width,height:0},splitRect:r})}a.forEach((c,l)=>n(s.children[l],c,[...o,l]))};return n(e,{x:0,y:0,width:1,height:1},[]),t}function ll(e,t){let n=e;for(const s of t){if(!n||n.kind!=="split")return null;n=n.children[s]}return n??null}function dl(e,t,n,s){const r=ll(e,t);if(!r||r.kind!=="split"||n<0||n>r.children.length-2||!Number.isFinite(s)||s===0)return e;const o=r.sizes[n],a=r.sizes[n+1],c=a-Math.min(a,qn),l=o-Math.min(o,qn),u=Math.max(-l,Math.min(c,s));if(u===0)return e;const f=h=>{const m=h.sizes.slice();return m[n]=o+u,m[n+1]=a-u,{kind:"split",direction:h.direction,children:h.children,sizes:m}},g=(h,m)=>{if(h.kind!=="split")return h;if(m===t.length)return f(h);const w=t[m],_=h.children.slice();return _[w]=g(h.children[w],m+1),{kind:"split",direction:h.direction,children:_,sizes:h.sizes.slice()}};return g(e,0)}function Us(e,t){const n=ae(e).filter(s=>!t.has(s));return n.length===0?e:n.reduce((s,r)=>Ws(s,r),e)}const Ks=1;function ul(e){return Vs(e,new Set)}function Vs(e,t){if(typeof e!="object"||e===null)return null;const n=e;if(n.kind==="leaf"){const{id:o}=n;return typeof o!="string"||o.trim()===""||t.has(o)?null:(t.add(o),{kind:"leaf",id:o})}if(n.kind!=="split"||n.direction!=="row"&&n.direction!=="column"||!Array.isArray(n.children)||!Array.isArray(n.sizes)||n.children.length<2||n.sizes.length!==n.children.length)return null;let s=0;for(const o of n.sizes){if(typeof o!="number"||!Number.isFinite(o)||o<=0)return null;s+=o}const r=[];for(const o of n.children){const a=Vs(o,t);if(!a)return null;r.push(a)}return{kind:"split",direction:n.direction,children:r,sizes:n.sizes.map(o=>o/s)}}const fl=["sessions","terminals"];function Vt(){return`pane-${crypto.randomUUID()}`}function $n(){const e=Vt();return{tree:{kind:"leaf",id:e},placement:{},activeByPane:{},focusedPaneId:e,pendingPlacement:{},pendingActive:{},userActedPanes:new Set}}function Gs(e,t,n){return(n??Object.keys(e.placement)).filter(r=>e.placement[r]===t)}function Ys(e,t,n,s){const r=Gs(e,t,s),o=r.indexOf(n),a=r.filter(c=>c!==n);if(a.length!==0)return a[Math.min(Math.max(o,0),a.length-1)]}function pl(e,t){return e.pendingActive[t]!==void 0?!0:Object.values(e.pendingPlacement).includes(t)}function dn(e,t){if(pl(e,t))return e;const n=Ws(e.tree,t);if(n===e.tree)return e;const s={...e.activeByPane};delete s[t];const r=ae(n);return{...e,tree:n,activeByPane:s,focusedPaneId:r.includes(e.focusedPaneId)?e.focusedPaneId:r[0]}}function _t(e,t,n,s){const r=e.placement[t],o={...e.placement,[t]:n},a={...e.activeByPane};if(s.activate&&(a[n]=t),r!==void 0&&r!==n&&a[r]===t){const u=Ys(e,r,t,s.order);u===void 0?delete a[r]:a[r]=u}const c={...e,placement:o,activeByPane:a,focusedPaneId:s.focus?n:e.focusedPaneId};return r!==void 0&&r!==n&&!Object.values(o).includes(r)?dn(c,r):c}function Ae(e,t){return e.userActedPanes.has(t)?e:{...e,userActedPanes:new Set(e.userActedPanes).add(t)}}function hl(e){let t={...e,pendingPlacement:{},pendingActive:{}};const n=new Set(Object.values(t.placement));for(const o of ae(t.tree))n.has(o)||(t=dn(t,o));const s={...t.activeByPane};let r=!1;for(const o of ae(t.tree)){if(s[o]!==void 0)continue;const a=Object.keys(t.placement).find(c=>t.placement[c]===o);a!==void 0&&(s[o]=a,r=!0)}return r?{...t,activeByPane:s}:t}function ml(e,t){if(e===void 0)return!1;const n=e.placement[t];return n!==void 0&&e.activeByPane[n]===t}const P=Ie()((e,t)=>{const n=(s,r)=>{e(o=>{const a=o.layouts[s]??$n(),c=r(a)??a;return c===o.layouts[s]?o:{layouts:{...o.layouts,[s]:c}}})};return{layouts:{},hydrationSources:{sessions:!1,terminals:!1},restoring:!1,pendingActiveWorkspace:null,ensureWorkspace(s){e(r=>r.layouts[s]?r:{layouts:{...r.layouts,[s]:$n()}})},assignTab(s,r,o,a,c){n(s,l=>{const u=ae(l.tree),f=o!==void 0&&u.includes(o)?o:u.includes(l.focusedPaneId)?l.focusedPaneId:u[0],g=a!==!0,h=_t(l,r,f,{activate:g,focus:g,order:c});return g?Ae(h,f):h})},moveTab(s,r,o,a){n(s,c=>{if(c.placement[r]===void 0||c.placement[r]===o||!ae(c.tree).includes(o))return null;const l=_t(c,r,o,{activate:!0,focus:!0,order:a});return Ae(l,o)})},splitWithTab(s,r,o,a,c){n(s,l=>{if(!ae(l.tree).includes(o)||!nt(l.tree,o,a))return null;const u=Gs(l,o,c);if(u.length===1&&u[0]===r)return null;const f=Vt(),g=An(l.tree,o,a,f);if(g===l.tree)return null;const h=_t({...l,tree:g},r,f,{activate:!0,focus:!0,order:c});return Ae(h,f)})},splitEmpty(s,r,o){let a=null;return n(s,c=>{if(!ae(c.tree).includes(r)||!nt(c.tree,r,o))return null;const l=Vt(),u=An(c.tree,r,o,l);return u===c.tree?null:(a=l,{...c,tree:u,focusedPaneId:l})}),a},removeTab(s,r,o){n(s,a=>{const c=a.placement[r];if(c===void 0)return null;const l={...a.placement};delete l[r];const u={...a.activeByPane};if(u[c]===r){const g=Ys(a,c,r,o);g===void 0?delete u[c]:u[c]=g}const f={...a,placement:l,activeByPane:u};return Object.values(l).includes(c)?f:dn(f,c)})},setActiveTab(s,r,o){n(s,a=>a.placement[o]!==r?null:a.activeByPane[r]===o?Ae(a,r):Ae({...a,activeByPane:{...a.activeByPane,[r]:o}},r))},focusPane(s,r){n(s,o=>o.focusedPaneId===r||!ae(o.tree).includes(r)?null:{...o,focusedPaneId:r})},resizeDivider(s,r,o,a){n(s,c=>{const l=dl(c.tree,r,o,a);return l===c.tree?null:{...c,tree:l}})},installPersistedLayouts(s,r=null){e(o=>{const a={...o.layouts};for(const[c,l]of s){const u=ae(l.tree);a[c]={tree:l.tree,placement:{},activeByPane:{},focusedPaneId:l.activePaneId!==null&&u.includes(l.activePaneId)?l.activePaneId:u[0],pendingPlacement:{...l.placement},pendingActive:{...l.activeByPane},userActedPanes:new Set}}return{layouts:a,hydrationSources:{sessions:!1,terminals:!1},restoring:!0,pendingActiveWorkspace:r!==null&&a[r]!==void 0?r:null}})},claimPaneFor(s,r,o,a){n(s,c=>{const l=ae(c.tree);let u,f=!1;if(a!==void 0&&l.includes(a))u=a;else if(o!==null){const w=c.pendingPlacement[o];w!==void 0&&l.includes(w)&&(u=w,f=!0)}u??(u=l.includes(c.focusedPaneId)?c.focusedPaneId:l[0]);let g=c;if(f&&o!==null){const w={...c.pendingPlacement};delete w[o],g={...c,pendingPlacement:w}}let h=!0;if(f){const w=g.pendingActive[u];g.userActedPanes.has(u)?h=!1:w!==void 0&&w!==o&&(h=g.activeByPane[u]===void 0)}else t().restoring&&(h=g.activeByPane[u]===void 0);const m=_t(g,r,u,{activate:h,focus:!f&&h});return f?m:Ae(m,u)})},markHydrationSource(s){e(r=>{if(r.hydrationSources[s])return r;const o={...r.hydrationSources,[s]:!0};if(!fl.every(c=>o[c]))return{hydrationSources:o};const a={};for(const[c,l]of Object.entries(r.layouts))a[c]=hl(l);return{hydrationSources:o,layouts:a,restoring:!1,pendingActiveWorkspace:null}})},paneOfTab(s,r){var o;return((o=t().layouts[s])==null?void 0:o.placement[r])??null},activeTabOf(s){const r=t().layouts[s];return r?r.activeByPane[r.focusedPaneId]??null:null}}});function gl(e,t){return e.filter(n=>n.workspaceCwd===t)}function _l(e,t){return gl(e,t).map(n=>n.id)}function Ze(e){const t=e===null?null:P.getState().activeTabOf(e);if(T.setState({activeTabId:t,activeWorkspaceCwd:e}),t!==null)return T.getState().tabs.find(n=>n.id===t)}function et(e){(e==null?void 0:e.kind)==="chat"&&N.getState().activate(e.data.sessionId)}const T=Ie()((e,t)=>({tabs:[],activeTabId:null,activeWorkspaceCwd:null,open(n,s){const r=t().tabs.find(a=>a.id===n.id);if(r){t().activate(r.id);return}e(a=>({tabs:[...a.tabs,n]}));const o=P.getState();o.ensureWorkspace(n.workspaceCwd),o.claimPaneFor(n.workspaceCwd,n.id,kt(n),s),et(Ze(n.workspaceCwd))},close(n){const s=t().tabs.find(c=>c.id===n);if(!s)return;const r=_l(t().tabs,s.workspaceCwd),o=t().activeTabId;e(c=>({tabs:c.tabs.filter(l=>l.id!==n)})),P.getState().removeTab(s.workspaceCwd,n,r);const a=Ze(t().activeWorkspaceCwd);t().activeTabId!==o&&et(a)},activate(n){const s=t().tabs.find(a=>a.id===n);if(!s)return;const r=P.getState();r.ensureWorkspace(s.workspaceCwd);const o=r.paneOfTab(s.workspaceCwd,n);o===null?r.claimPaneFor(s.workspaceCwd,n,kt(s)):(r.focusPane(s.workspaceCwd,o),r.setActiveTab(s.workspaceCwd,o,n)),et(Ze(s.workspaceCwd))},switchWorkspace(n){P.getState().ensureWorkspace(n),et(Ze(n))},reorder(n,s){e(r=>{const o=r.tabs.findIndex(u=>u.id===n),a=r.tabs.findIndex(u=>u.id===s);if(o===-1||a===-1||o===a)return r;const c=r.tabs.slice(),[l]=c.splice(o,1);return l?(c.splice(a,0,l),{tabs:c}):r})},updateLabel(n,s){e(r=>({tabs:r.tabs.map(o=>o.id===n?{...o,label:s}:o)}))},updateData(n,s){e(r=>({tabs:r.tabs.map(o=>o.id===n?{...o,data:{...o.data,...s}}:o)}))},closeByPathPrefix(n){const s=t().tabs.filter(r=>{if(r.kind!=="file"&&r.kind!=="diff"&&r.kind!=="molecule")return!1;const o=r.data.path;return o===n||((o==null?void 0:o.startsWith(`${n}/`))??!1)});for(const r of s)t().close(r.id)}}));function kt(e){var t;switch(e.kind){case"chat":{const{sessionId:n}=e.data,s=(t=N.getState().sessions[n])==null?void 0:t.agentId;return s?`agent:${s}`:null}case"file":return`file:${e.data.path}`;case"diff":{const{path:n,staged:s}=e.data;return`diff:${s?"staged":"worktree"}:${n}`}case"terminal":{const{slot:n}=e.data;return n===null?null:`terminal:${n}`}case"molecule":{const{path:n}=e.data;return n===null?null:`molecule:${n}`}}}function nm(e){const t=T(n=>{var s;return((s=n.tabs.find(r=>r.id===e))==null?void 0:s.workspaceCwd)===n.activeWorkspaceCwd?n.activeWorkspaceCwd:null});return P(n=>t===null?!1:ml(n.layouts[t],e))}const V={chat:e=>`chat-${e}`,file:e=>`file-${e}`,diff:(e,t)=>`diff-${e}${t?"-staged":""}`,terminal:e=>`term-${e}`,molecule:e=>`mol-${e}`};let Pt=0;function Xs(e,t){Pt+=1,T.getState().open({id:V.terminal(`new-${Pt}`),kind:"terminal",label:`Terminal ${Pt}`,closable:!0,data:{slot:null,cwd:e},workspaceCwd:e},t)}let At=0;function yl(e,t){At+=1,T.getState().open({id:V.molecule(`new-${At}`),kind:"molecule",label:`Molecule ${At}`,closable:!0,data:{path:null},workspaceCwd:e},t)}function Ct(e,t){const n=N.getState().createSession(e);T.getState().open({id:V.chat(n),kind:"chat",label:"New chat",closable:!0,data:{sessionId:n},workspaceCwd:e},t);const s=A.getState().client;s&&Bs(s,n).catch(()=>{})}function Gt(e){const t=T.getState().tabs.find(s=>s.id===e);if(T.getState().close(e),(t==null?void 0:t.kind)!=="chat")return;const{sessionId:n}=t.data;ol(A.getState().client,n)}P.subscribe(()=>{const{activeWorkspaceCwd:e,activeTabId:t}=T.getState();e!==null&&P.getState().activeTabOf(e)!==t&&et(Ze(e))});const wl="_panel_1de7t_3",bl={panel:wl};function Js({className:e,...t}){return i.jsx("div",{className:W(bl.panel,e),...t})}const vl="_emptyState_kp50e_3",xl={emptyState:vl};function Me({className:e,...t}){return i.jsx("div",{className:W(xl.emptyState,e),...t})}const Z=Ie()(e=>({rootPath:"",expanded:new Set,expandedByRoot:new Map,draft:null,renaming:null,selected:null,setRoot:t=>e(n=>{const s=new Map(n.expandedByRoot);n.rootPath&&s.set(n.rootPath,n.expanded);const r=s.get(t),o=new Set(r);return o.add(t),{rootPath:t,expanded:o,expandedByRoot:s,draft:null,selected:null,renaming:null}}),toggle:t=>e(n=>{if(t===n.rootPath)return n;const s=new Set(n.expanded);s.has(t)?s.delete(t):s.add(t);const r=new Map(n.expandedByRoot);return r.set(n.rootPath,s),{expanded:s,expandedByRoot:r}}),startDraft:(t,n)=>e(s=>{const r=new Set(s.expanded);r.add(t);const o=new Map(s.expandedByRoot);return s.rootPath&&o.set(s.rootPath,r),{draft:{parentPath:t,kind:n},expanded:r,expandedByRoot:o,renaming:null}}),cancelDraft:()=>e({draft:null}),startRename:t=>e({renaming:t,draft:null}),cancelRename:()=>e({renaming:null}),setSelected:t=>e({selected:t}),repathAfterMove:(t,n,s)=>e(r=>{const o=u=>u===t?n:u.startsWith(`${t}/`)?n+u.slice(t.length):u,a=new Set([...r.expanded].map(o));a.add(s);const c=new Map(r.expandedByRoot);r.rootPath&&c.set(r.rootPath,a);const l=r.selected?{path:o(r.selected.path),isDirectory:r.selected.isDirectory}:null;return{expanded:a,expandedByRoot:c,selected:l,renaming:null}})}));let ze=null;const Yt=new Set;function Sl(e){return Yt.add(e),()=>Yt.delete(e)}async function Et(e){var t;if(ze)return ze;try{const n=await e.connection.request("file_explorer_request",{path:"/home"}),r=(((t=n.result)==null?void 0:t.entries)??n.entries??[]).find(o=>o.kind==="directory"||o.type==="directory");ze="/home/"+((r==null?void 0:r.name)||"user")}catch{return"/tmp"}for(const n of Yt)n(ze);return ze}function kl(){return ze}async function Il(e,t){return t==="~"||t.startsWith("~/")?await Et(e)+t.slice(1):t}function it(){const e=A(r=>r.client),t=A(r=>r.status),[n,s]=v.useState(kl());return v.useEffect(()=>Sl(s),[]),v.useEffect(()=>{!e||t!=="open"||n||Et(e)},[e,t,n]),n}const jl="_iconBtn_1unr3_3",Tl="_xs_1unr3_32",Cl="_sm_1unr3_36",Bn={iconBtn:jl,xs:Tl,sm:Cl};function be({size:e="xs",hoverBase:t,className:n,style:s,type:r="button",...o}){return i.jsx("button",{type:r,className:W(Bn.iconBtn,Bn[e],n),style:t?{"--icon-btn-hover-base":t,...s}:s,...o})}const El="_dot_1mn1j_3",Rl="_spinner_1mn1j_16",zn={dot:El,spinner:Rl};function Ml(e){const{status:t,requiresAttention:n,attentionReason:s,showInactive:r}=e;if(!t)return null;if(n)switch(s){case"permission":return"statusWarning";case"error":return"statusDanger";case"finished":default:return"statusSuccess"}switch(t){case"running":case"queued":return"accent";case"waiting":return"statusWarning";case"finished":return"statusSuccess";case"error":return"statusDanger";case"idle":case"archived":return r?"foregroundMuted":null}}const On=8,Nl={accent:"var(--pi-color-accent)",statusSuccess:"var(--pi-color-statusSuccess)",statusDanger:"var(--pi-color-statusDanger)",statusWarning:"var(--pi-color-statusWarning)",foregroundMuted:"var(--pi-color-foregroundMuted)"};function Dl({className:e,...t}){const n=Ml(t);if(!n)return null;const s=t.status==="running"&&!t.requiresAttention,r=s?"var(--pi-color-accentBright, #a2b4d7)":Nl[n]??"currentColor";return i.jsx("span",{className:`${s?zn.spinner:zn.dot}${e?` ${e}`:""}`,style:s?{borderTopColor:r,borderRightColor:r}:{width:On,height:On,backgroundColor:r},role:"presentation"})}const Pl={initializing:"queued",idle:"idle",running:"running",error:"error",closed:"finished"};function Al(e){return Pl[e]??"idle"}const ql="_header_z4gra_1",$l="_openBtn_z4gra_9",Bl="_list_z4gra_21",zl="_item_z4gra_26",Ol="_active_z4gra_39",Fl="_title_z4gra_43",Wl="_meta_z4gra_52",Ll="_menuBtn_z4gra_60",Hl="_workspaceGroup_z4gra_69",Ul="_workspaceHeader_z4gra_72",Kl="_workspaceChevron_z4gra_97",Vl="_workspaceIcon_z4gra_105",Gl="_workspaceLabel_z4gra_109",Yl="_workspaceCount_z4gra_115",Xl="_workspaceMenuBtn_z4gra_120",Jl="_workspaceSessions_z4gra_127",Y={header:ql,openBtn:$l,list:Bl,item:zl,active:Ol,title:Fl,meta:Wl,menuBtn:Ll,workspaceGroup:Hl,workspaceHeader:Ul,workspaceChevron:Kl,workspaceIcon:Vl,workspaceLabel:Gl,workspaceCount:Yl,workspaceMenuBtn:Xl,workspaceSessions:Jl};function Ql({session:e,active:t,draggable:n,onSelect:s,onOpenMenu:r,onDragStartRow:o}){return i.jsxs("div",{className:W(Y.item,t&&Y.active),draggable:n,onDragStart:o,onClick:s,onContextMenu:a=>{a.preventDefault(),r(a.clientX,a.clientY)},children:[i.jsxs("div",{className:Y.title,children:[i.jsx(Dl,{status:Al(e.status),showInactive:!0}),i.jsx("span",{children:e.title})]}),i.jsxs("div",{className:Y.meta,children:[e.cwd||"~"," · ",e.agentId?e.agentId.slice(0,8):"new"," ·"," ",e.userMessageCount," msgs"]}),i.jsx(be,{className:Y.menuBtn,hoverBase:"var(--pi-color-surfaceSidebar)",title:"Actions",onClick:a=>{a.stopPropagation();const c=a.currentTarget.getBoundingClientRect();r(c.left,c.bottom)},children:i.jsx(Zt,{size:14})})]})}const Zl="_trigger_cd29a_3",ed="_content_cd29a_15",td="_item_cd29a_25",nd="_danger_cd29a_44",sd="_sep_cd29a_48",st={trigger:Zl,content:ed,item:td,danger:nd,sep:sd},un=v.forwardRef(function({x:t,y:n},s){return i.jsx("button",{ref:s,type:"button",className:st.trigger,style:{left:t,top:n},"aria-hidden":!0,tabIndex:-1})});function ct({className:e,minWidth:t,style:n,sideOffset:s=2,...r}){const o=t===void 0?n:{minWidth:t,...n};return i.jsx(Zr,{children:i.jsx(eo,{className:W(st.content,e),align:"start",sideOffset:s,style:o,...r})})}function L({className:e,danger:t,...n}){return i.jsx(gs,{className:W(st.item,t&&st.danger,e),...n})}function Re(e){return i.jsx(to,{className:st.sep,...e})}function rd(){const e=M(w=>w.sessionMenu),t=M(w=>w.closeSessionMenu),n=A(w=>w.client),s=v.useRef(null),[r,o]=v.useState(!1);v.useEffect(()=>{o(e!==null)},[e]);const a=N(w=>e?w.sessions[e.sessionId]:void 0);if(!e)return null;const c=!!(a!=null&&a.agentId)&&(a==null?void 0:a.status)==="running";function l(w){o(w),w||t()}function u(){if(!a)return;const w=window.prompt("Rename:",a.title);if(w!=null&&w.trim()){const _=w.trim();N.getState().setTitle(a.id,_),T.getState().updateLabel(V.chat(a.id),_),a.agentId&&(n==null||n.agent(a.agentId).update({title:_}).catch(()=>{}))}t()}function f(){a!=null&&a.agentId&&(n==null||n.agent(a.agentId).interrupt().catch(()=>{})),t()}function g(w){N.getState().remove(w),T.getState().close(V.chat(w))}async function h(){if(a){if(!window.confirm("Archive this agent? It can be resumed later."))return t();if(t(),!a.agentId){g(a.id);return}if(!n){window.alert("Not connected — cannot archive remotely.");return}try{await n.agent(a.agentId).archive(),g(a.id)}catch(w){window.alert(`Failed to archive: ${w instanceof Error?w.message:String(w)}`)}}}async function m(){if(a){if(!window.confirm("Permanently delete this agent? This cannot be undone."))return t();if(t(),!a.agentId){g(a.id);return}if(!n){window.alert("Not connected — cannot delete remotely.");return}try{await n.agent(a.agentId).delete(),g(a.id)}catch(w){window.alert(`Failed to delete: ${w instanceof Error?w.message:String(w)}`)}}}return i.jsxs(ot,{open:r,onOpenChange:l,modal:!1,children:[i.jsx(at,{asChild:!0,children:i.jsx(un,{ref:s,x:e.x,y:e.y})}),i.jsxs(ct,{minWidth:160,children:[i.jsxs(L,{onSelect:u,children:[i.jsx(is,{size:13}),"Rename"]}),i.jsxs(L,{disabled:!c,onSelect:f,children:[i.jsx(Br,{size:13}),"Stop agent"]}),i.jsx(Re,{}),i.jsxs(L,{danger:!0,onSelect:h,children:[i.jsx(zr,{size:13}),"Archive"]}),i.jsxs(L,{danger:!0,onSelect:m,children:[i.jsx(en,{size:13}),"Delete permanently"]})]})]})}function od({label:e,cwd:t,sessionCount:n,collapsed:s,onToggleCollapsed:r,onOpenMenu:o}){return i.jsxs("div",{className:Y.workspaceHeader,onClick:r,title:t,children:[i.jsx(be,{className:Y.workspaceChevron,"aria-label":s?"Expand workspace":"Collapse workspace",onClick:a=>{a.stopPropagation(),r()},children:s?i.jsx(tn,{size:13}):i.jsx(cs,{size:13})}),i.jsx(Or,{size:13,className:W(Y.workspaceIcon)}),i.jsx("span",{className:Y.workspaceLabel,children:e}),i.jsx("span",{className:Y.workspaceCount,children:n}),i.jsx(be,{className:Y.workspaceMenuBtn,hoverBase:"var(--pi-color-surfaceSidebar)",title:"Workspace actions",onClick:a=>{a.stopPropagation();const c=a.currentTarget.getBoundingClientRect();o(c.left,c.bottom)},children:i.jsx(Zt,{size:13})})]})}function Pe(e,t){return t&&(e==="~"||e.startsWith("~/"))?t+e.slice(1):e}function fn(e,t,n){const s=new Map;for(const r of e){const o=t[r];if(!o)continue;const a=Pe(o.cwd||"~",n),c=s.get(a);c?c.push(o):s.set(a,[o])}return Array.from(s,([r,o])=>({cwd:r,sessions:o}))}function Qs(e){return!e||e==="~"?"~":e.split("/").filter(Boolean).pop()||e}function ad(e,t){return new Set(e.filter(n=>n.cwd!==t).map(n=>n.cwd))}function id(){const e=M(m=>m.workspaceMenu),t=M(m=>m.closeWorkspaceMenu),n=A(m=>m.client),s=N(m=>m.order),r=N(m=>m.sessions),o=it(),a=v.useRef(null),[c,l]=v.useState(!1);if(v.useEffect(()=>{l(e!==null)},[e]),!e)return null;const u=s.map(m=>r[m]).filter(m=>!!m).filter(m=>Pe(m.cwd||"~",o)===e.cwd);function f(m){l(m),m||t()}function g(){e&&(t(),Ct(e.cwd))}async function h(){if(!e)return;const m=u.length;if(!window.confirm(`Delete all ${m} conversation${m===1?"":"s"} in "${Qs(e.cwd)}"? This deletes the conversations only — files on disk are untouched. This cannot be undone.`))return t();t();for(const _ of u){if(_.agentId&&n)try{await n.agent(_.agentId).delete()}catch(p){window.alert(`Failed to delete "${_.title}": ${p instanceof Error?p.message:String(p)}`);continue}N.getState().remove(_.id),T.getState().close(V.chat(_.id))}}return i.jsxs(ot,{open:c,onOpenChange:f,modal:!1,children:[i.jsx(at,{asChild:!0,children:i.jsx(un,{ref:a,x:e.x,y:e.y})}),i.jsxs(ct,{minWidth:160,children:[i.jsxs(L,{onSelect:g,children:[i.jsx(ls,{size:13}),"New conversation"]}),i.jsx(Re,{}),i.jsxs(L,{danger:!0,onSelect:h,children:[i.jsx(en,{size:13}),"Delete workspace (all conversations)"]})]})]})}function It(e,t,n){T.getState().open({id:V.chat(e.id),kind:"chat",label:e.title||"Chat",closable:!0,data:{sessionId:e.id},workspaceCwd:Pe(e.cwd||"~",t)},n)}const cd=.25;function Zs(e,t){if(t.width<=0||t.height<=0)return"center";const n=(e.x-(t.left+t.width/2))/t.width,s=(e.y-(t.top+t.height/2))/t.height;return Math.max(Math.abs(n),Math.abs(s))<cd?"center":Math.abs(n)>=Math.abs(s)?n<0?"left":"right":s<0?"top":"bottom"}function ld(e,t){return t.x>=e.left&&t.x<=e.left+e.width&&t.y>=e.top&&t.y<=e.top+e.height}function er(e,t,n){return n==="center"?"center":nt(e,t,n)?n:"center"}function Xt(e,t,n,s){return s[n]!==t?!1:e==="center"?!0:Object.keys(s).every(o=>o===n||s[o]!==t)}const lt={chat:"application/x-pi-studio-open-chat",path:"application/x-pi-studio-open-path"},dd=["chat","path"];function tr(e){for(const t of dd)if(e.includes(lt[t]))return t;return null}function sm(e){return t=>{t.dataTransfer.setData(lt.path,e),t.dataTransfer.effectAllowed="copyMove"}}function ud(e,t){const n=tr(e);if(n===null)return null;const s=t(lt[n]).trim();return s===""?null:{kind:n,value:s}}function fd(e,t,n,s){return er(e,t,Zs(n,s))}function pd(){const e=N(p=>p.order),t=N(p=>p.sessions),n=N(p=>p.activeSessionId),s=N(p=>p.activate),r=T(p=>p.activeWorkspaceCwd),o=A(p=>p.status),a=M(p=>p.openSessionMenu),c=M(p=>p.openWorkspaceMenu),l=M(p=>p.setCwd),u=M(p=>p.openCwdPicker),f=M(p=>p.collapsedWorkspaces),g=M(p=>p.toggleWorkspaceCollapsed),h=it();function m(p){s(p);const S=t[p];S!=null&&S.cwd&&l(S.cwd),S&&It(S,h)}function w(p,S,R){S===r&&(R.dataTransfer.setData(lt.chat,p),R.dataTransfer.effectAllowed="copy")}const _=fn(e,t,h);return i.jsxs(Js,{children:[i.jsxs("div",{className:Y.header,children:[i.jsx("h3",{children:"Workspaces"}),i.jsx(ne,{size:"xs",variant:"ghost",iconOnly:!0,className:Y.openBtn,title:o!=="open"?"Connect to open a workspace":"Open a workspace folder",disabled:o!=="open",onClick:()=>u(),children:i.jsx(ds,{size:13})})]}),i.jsxs("div",{className:Y.list,children:[_.length===0&&i.jsx(Me,{style:{padding:"var(--pi-spacing-12) var(--pi-spacing-10)"},children:o!=="open"?"Not connected":"No workspaces — open a folder to start"}),_.map(p=>{const S=f.has(p.cwd);return i.jsxs("div",{className:Y.workspaceGroup,children:[i.jsx(od,{label:Qs(p.cwd),cwd:p.cwd,sessionCount:p.sessions.length,collapsed:S,onToggleCollapsed:()=>g(p.cwd),onOpenMenu:(R,j)=>c(p.cwd,R,j)}),!S&&i.jsx("div",{className:Y.workspaceSessions,children:p.sessions.map(R=>i.jsx(Ql,{session:R,active:R.id===n,draggable:p.cwd===r,onSelect:()=>m(R.id),onOpenMenu:(j,z)=>a(R.id,j,z),onDragStartRow:j=>w(R.id,p.cwd,j)},R.id))})]},p.cwd)})]}),i.jsx(rd,{}),i.jsx(id,{})]})}const hd="_spinner_ohxfo_3",md={spinner:hd},gd={xs:12,sm:16,md:20,lg:24},_d={xs:1,sm:2,md:2,lg:3};function nr({size:e="md",color:t="currentColor",className:n,"aria-label":s="Loading"}){const r=typeof e=="number"?e:gd[e],o=typeof e=="number"?2:_d[e];return i.jsx("span",{className:`${md.spinner}${n?` ${n}`:""}`,role:"status","aria-label":s,style:{width:r,height:r,borderWidth:o,color:t}})}const Fn={tab:0,strip:1,pane:2};function qt(e){if(e===null||typeof e!="object"||!("type"in e))return null;const{type:t}=e;if(t!=="tab"&&t!=="strip"&&t!=="pane")return null;const n="paneId"in e&&typeof e.paneId=="string"?e.paneId:null;return{kind:t,paneId:n}}function yd(e){const t=e.activatorEvent;return t instanceof MouseEvent?{x:t.clientX+e.delta.x,y:t.clientY+e.delta.y}:null}function wd(e,t,n){return e.kind==="tab"?n.placement[t]??null:e.paneId}function bd(e){const[t,n]=v.useState(null),[s,r]=v.useState(null),o=T(m=>m.tabs.find(w=>w.id===t)??null),a=ao(io(lo,{activationConstraint:{distance:4}})),c=v.useMemo(()=>m=>{const w=co(m).map(_=>{var p;return{hit:_,target:qt((p=m.droppableContainers.find(S=>S.id===_.id))==null?void 0:p.data.current)}}).filter(_=>_.target!==null).toSorted((_,p)=>Fn[_.target.kind]-Fn[p.target.kind]);return w.length===0?[]:[w[0].hit]},[]),l=v.useCallback(m=>{const{over:w,active:_}=m,p=qt(w==null?void 0:w.data.current);if(!w||p===null||e===null)return null;const S=P.getState().layouts[e];if(S===void 0)return null;const R=String(_.id),j=String(w.id);if(p.kind!=="pane"){const G=wd(p,j,S);return G===null||p.kind==="tab"&&j===R?null:p.kind==="tab"&&S.placement[R]===G?{paneId:G,region:"center"}:Xt("center",G,R,S.placement)?null:{paneId:G,region:"center"}}const z=yd(m);if(p.paneId===null||z===null)return null;const J=er(S.tree,p.paneId,Zs(z,w.rect));return Xt(J,p.paneId,R,S.placement)?null:{paneId:p.paneId,region:J}},[e]),u=v.useCallback(m=>{n(String(m.active.id))},[]),f=v.useCallback(m=>{const w=l(m);r(_=>(_==null?void 0:_.paneId)===(w==null?void 0:w.paneId)&&(_==null?void 0:_.region)===(w==null?void 0:w.region)?_:w)},[l]),g=v.useCallback(()=>{n(null),r(null)},[]),h=v.useCallback(m=>{var re;n(null),r(null);const{active:w,over:_}=m,p=qt(_==null?void 0:_.data.current);if(!_||p===null||e===null)return;const S=String(w.id),R=P.getState().layouts[e];if(R===void 0)return;const j=T.getState(),z=j.tabs.filter(Q=>Q.workspaceCwd===e).map(Q=>Q.id),{moveTab:J,splitWithTab:G}=P.getState();if(p.kind==="tab"){const Q=String(_.id);if(Q===S)return;const ue=R.placement[Q];ue!==void 0&&ue!==R.placement[S]&&J(e,S,ue,z),j.reorder(S,Q);return}const D=l(m);if(D===null)return;if(D.region!=="center"){G(e,S,D.paneId,D.region,z);return}J(e,S,D.paneId,z);const K=((re=P.getState().layouts[e])==null?void 0:re.placement)??{},se=z.filter(Q=>Q!==S&&K[Q]===D.paneId).at(-1);se!==void 0&&z.indexOf(S)<z.indexOf(se)&&j.reorder(S,se)},[e,l]);return{sensors:a,collisionDetection:c,onDragStart:u,onDragMove:f,onDragEnd:h,onDragCancel:g,draggedTab:o,preview:s}}const vd=v.lazy(()=>ve(()=>import("./ChatPanel-B25eQsNb.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])).then(e=>({default:e.ChatPanel}))),Wn=v.lazy(()=>ve(()=>import("./FilePanel-DRuJsAWY.js"),__vite__mapDeps([16,1,7,6,5,2,17,11,12,3,13,14,18])).then(e=>({default:e.FilePanel}))),xd=v.lazy(()=>ve(()=>import("./TerminalPanel-DZ68ikRv.js"),__vite__mapDeps([19,1,20,21,7,6,5,2,3,13,14,22])).then(e=>({default:e.TerminalPanel}))),Sd=v.lazy(()=>ve(()=>import("./MoleculeViewerPanel-DjqSc6I8.js"),__vite__mapDeps([23,1,24,25,9,10,26,2,17,7,6,5,3,13,14,27])).then(e=>({default:e.MoleculeViewerPanel}))),kd={chat:vd,file:Wn,diff:Wn,terminal:xd,molecule:Sd},rt="var(--pane-strip-height)";function pn(e){return e===void 0?new Map:il(Us(e.tree,new Set(Object.values(e.placement))))}function U(e){const t=(e*100).toFixed(4);return`${t.includes(".")?t.replace(/\.?0+$/,""):t}%`}function sr(e){if(e!==void 0)return{left:U(e.x),top:`calc(${U(e.y)} + ${rt})`,width:U(e.width),height:`calc(${U(e.height)} - ${rt})`}}function Id(e,t){const n=`${U(e.y)} + ${rt}`,s=`${U(e.height)} - ${rt}`,r=`calc((${s}) / 2)`;switch(t){case"left":return{left:U(e.x),top:`calc(${n})`,width:U(e.width/2),height:`calc(${s})`};case"right":return{left:U(e.x+e.width/2),top:`calc(${n})`,width:U(e.width/2),height:`calc(${s})`};case"top":return{left:U(e.x),top:`calc(${n})`,width:U(e.width),height:r};case"bottom":return{left:U(e.x),top:`calc(${n} + (${s}) / 2)`,width:U(e.width),height:r};case"center":return{left:U(e.x),top:`calc(${n})`,width:U(e.width),height:`calc(${s})`}}}function jd(e){const t=pn(e);return[...t].map(([n,s])=>({paneId:n,stripStyle:{left:U(s.x),top:U(s.y),width:U(s.width),height:rt},focused:t.size>1&&(e==null?void 0:e.focusedPaneId)===n}))}function Td(e){if(e===void 0)return[];const t=Us(e.tree,new Set(Object.values(e.placement)));return t!==e.tree?[]:cl(t)}function Cd(e,t){return(t==null?void 0:t.placement[e])??null}function Ed(e,t,n){const s=pn(n);return e.map(r=>{const o=r.workspaceCwd===t?n==null?void 0:n.placement[r.id]:void 0;return{tabId:r.id,style:sr(o===void 0?void 0:s.get(o)),visible:o!==void 0&&(n==null?void 0:n.activeByPane[o])===r.id}})}const Rd="_divider_4eg4l_9",Md="_vertical_4eg4l_26",Nd="_horizontal_4eg4l_41",$t={divider:Rd,vertical:Md,horizontal:Nd};function Dd({cwd:e,dividers:t,hostRef:n}){const s=P(a=>a.resizeDivider),r=v.useRef(0);function o(a,c){var m;const l=(m=n.current)==null?void 0:m.getBoundingClientRect();if(!l)return;a.preventDefault(),a.stopPropagation();const u=c.direction==="row",f=u?c.splitRect.width*l.width:c.splitRect.height*l.height;if(f<=0)return;r.current=u?a.clientX:a.clientY,document.body.style.cursor=u?"col-resize":"row-resize",document.body.style.userSelect="none";const g=w=>{const _=u?w.clientX:w.clientY,p=_-r.current;r.current=_,s(e,c.splitPath,c.boundaryIndex,p/f)},h=()=>{window.removeEventListener("pointermove",g),window.removeEventListener("pointerup",h),document.body.style.cursor="",document.body.style.userSelect=""};window.addEventListener("pointermove",g),window.addEventListener("pointerup",h)}return t.map(a=>{const c=a.direction==="row";return i.jsx("div",{className:W($t.divider,c?$t.vertical:$t.horizontal),style:c?{left:`${a.rect.x*100}%`,top:`${a.rect.y*100}%`,height:`${a.rect.height*100}%`}:{left:`${a.rect.x*100}%`,top:`${a.rect.y*100}%`,width:`${a.rect.width*100}%`},role:"separator","aria-orientation":c?"vertical":"horizontal",onPointerDown:l=>o(l,a)},`${a.splitPath.join(".")}:${a.boundaryIndex}`)})}const Pd=v.lazy(()=>ve(()=>import("./TextViewer-BX12dzDA.js"),__vite__mapDeps([28,1,29,2,7,6,5,30,26,3,13,14,31])).then(e=>({default:e.TextViewer}))),Ad=v.lazy(()=>ve(()=>import("./MarkdownFileViewer-9isSXHBa.js"),__vite__mapDeps([32,1,29,2,7,6,5,30,4,8,3,13,14,33])).then(e=>({default:e.MarkdownFileViewer}))),qd=v.lazy(()=>ve(()=>import("./ImageViewer-1z3YGCmo.js"),__vite__mapDeps([34,1,26,2,7,6,5,3,13,14,35])).then(e=>({default:e.ImageViewer}))),$d=v.lazy(()=>ve(()=>import("./VideoViewer-I1FxdZq1.js"),__vite__mapDeps([36,1,26,2,7,6,5,3,13,14,37])).then(e=>({default:e.VideoViewer}))),Bd=v.lazy(()=>ve(()=>import("./BinaryFallbackViewer-C7bkubDd.js"),__vite__mapDeps([38,1,26,2,3,7,6,5,13,14,39])).then(e=>({default:e.BinaryFallbackViewer}))),rm={text:Pd,markdown:Ad,image:qd,video:$d,binary:Bd},zd={md:"markdown",markdown:"markdown",mdx:"markdown",png:"image",jpg:"image",jpeg:"image",gif:"image",webp:"image",svg:"image",bmp:"image",ico:"image",avif:"image",mp4:"video",webm:"video",mov:"video",m4v:"video",ogv:"video",pdf:"binary",zip:"binary",gz:"binary",tar:"binary",exe:"binary",wasm:"binary",woff:"binary",woff2:"binary",ttf:"binary",otf:"binary"},Od=[["image/","image"],["video/","video"]];function rr(e){const t=e.split("/").pop()??e,n=t.lastIndexOf(".");return n>0?t.slice(n+1).toLowerCase():""}const Fd={pdb:!0,cif:!0,mmcif:!0,mol:!0,mol2:!0,xyz:!0,extxyz:!0,gro:!0,lammpstrj:!0,xsf:!0},Wd={poscar:!0,contcar:!0};function or(e){if(Fd[rr(e)])return!0;const t=e.split("/").pop()??e;return!!Wd[t.toLowerCase()]}function om(e,t={}){const n=zd[rr(e)];if(n)return n;const s=t.mimeHint??"";for(const[r,o]of Od)if(s.startsWith(r))return o;return t.isBinary?"binary":"text"}function hn(e,t,n){or(e)?ir(e,t,n):ar(e,t,n)}function ar(e,t,n){const s=e.split("/").pop()||e;T.getState().open({id:V.file(e),kind:"file",label:s,closable:!0,data:{path:e},workspaceCwd:t},n)}function ir(e,t,n){const s=e.split("/").pop()||e;T.getState().open({id:V.molecule(e),kind:"molecule",label:s,closable:!0,data:{path:e},workspaceCwd:t},n)}const Jt="data-pane-drop";function Ld(e){return{[Jt]:e}}function Hd(e,t){if(e===null)return null;for(const n of e.querySelectorAll(`[${Jt}]`)){const s=n.getBoundingClientRect(),r={left:s.left,top:s.top,width:s.width,height:s.height},o=n.getAttribute(Jt);if(o!==null&&o!==""&&ld(r,t))return{paneId:o,bounds:r}}return null}function Ud(e){const{tabs:t}=T.getState(),n=s=>t.some(r=>r.id===s)?s:null;return e.kind==="chat"?n(V.chat(e.value)):n(V.file(e.value))??n(V.molecule(e.value))}function Kd(e,t,n,s,r){const o=P.getState().layouts[t];if(o===void 0)return;const a=T.getState().tabs.filter(f=>f.workspaceCwd===t).map(f=>f.id),c=Ud(e);if(c!==null){if(Xt(s,n,c,o.placement))return;const{moveTab:f,splitWithTab:g}=P.getState();s==="center"?f(t,c,n,a):g(t,c,n,s,a);return}let l=n;if(s!=="center"&&(l=P.getState().splitEmpty(t,n,s)),l===null)return;if(e.kind==="path"){hn(e.value,t,l);return}const u=N.getState().sessions[e.value];u!==void 0&&It(u,r,l)}function Vd(e,t){const[n,s]=v.useState(null),r=it(),o=v.useCallback(u=>{if(e===null)return null;const f=P.getState().layouts[e];if(f===void 0)return null;const g={x:u.clientX,y:u.clientY},h=Hd(t.current,g);return h===null?null:{paneId:h.paneId,region:fd(f.tree,h.paneId,g,h.bounds)}},[e,t]),a=v.useCallback(u=>{if(tr(u.dataTransfer.types)===null)return;u.preventDefault(),u.dataTransfer.dropEffect="copy";const f=o(u);s(g=>(g==null?void 0:g.paneId)===(f==null?void 0:f.paneId)&&(g==null?void 0:g.region)===(f==null?void 0:f.region)?g:f)},[o]),c=v.useCallback(u=>{u.currentTarget.contains(u.relatedTarget)||s(null)},[]),l=v.useCallback(u=>{const f=ud(u.dataTransfer.types,h=>u.dataTransfer.getData(h));if(f===null)return;u.preventDefault(),s(null);const g=o(u);g===null||e===null||Kd(f,e,g.paneId,g.region,r)},[e,r,o]);return{preview:n,onDragOver:a,onDragLeave:c,onDrop:l}}const Gd="_strip_1xy58_1",Yd="_tabs_1xy58_13",Xd="_paneStrip_1xy58_23",Jd="_focused_1xy58_28",Qd="_tab_1xy58_13",Zd="_active_1xy58_47",eu="_icon_1xy58_51",tu="_label_1xy58_56",nu="_close_1xy58_61",su="_newTab_1xy58_71",ru="_splitAction_1xy58_77",ou="_itemIcon_1xy58_81",ee={strip:Gd,tabs:Yd,paneStrip:Xd,focused:Jd,tab:Qd,active:Zd,icon:eu,label:tu,close:nu,newTab:su,splitAction:ru,itemIcon:ou},cr={chat:hs,file:ps,diff:fs,terminal:us,molecule:nn};function au({tab:e,active:t}){const n=T(f=>f.activate),s=cr[e.kind],{attributes:r,listeners:o,setNodeRef:a,transform:c,transition:l,isDragging:u}=po({id:e.id,data:{type:"tab"}});return i.jsxs("div",{ref:a,className:W(ee.tab,t&&ee.active),style:{transform:ho.Transform.toString(c),transition:l,opacity:u?.5:1},onClick:()=>n(e.id),onAuxClick:f=>{f.button===1&&e.closable&&Gt(e.id)},title:e.label,...r,...o,children:[i.jsx("span",{className:ee.icon,children:i.jsx(s,{size:13})}),i.jsx("span",{className:ee.label,children:e.label}),e.closable&&i.jsx("span",{className:ee.close,onClick:f=>{f.stopPropagation(),Gt(e.id)},children:i.jsx(Ot,{size:12})})]})}function iu({workspaceCwd:e,paneId:t}){const n=s=>()=>{e!==null&&s(e,t??void 0)};return i.jsxs(ot,{children:[i.jsx(at,{asChild:!0,children:i.jsx(be,{className:ee.newTab,hoverBase:"var(--pi-color-background)",style:{borderRadius:"var(--pi-radius-sm)"},title:"New tab",disabled:!e,children:i.jsx(ls,{size:14})})}),i.jsxs(ct,{minWidth:160,sideOffset:4,children:[i.jsxs(L,{onSelect:n(Ct),children:[i.jsx(hs,{size:13,className:ee.itemIcon}),"New chat"]}),i.jsxs(L,{onSelect:n(Xs),children:[i.jsx(us,{size:13,className:ee.itemIcon}),"New terminal"]}),i.jsxs(L,{onSelect:n(yl),children:[i.jsx(nn,{size:13,className:ee.itemIcon}),"New molecule view"]})]})]})}function cu({cwd:e,paneId:t}){const n=P(c=>{var l;return e===null||(l=c.layouts[e])==null?void 0:l.tree}),s=c=>()=>{if(e===null||t===null)return;const l=P.getState().splitEmpty(e,t,c);l!==null&&Ct(e,l)},r=c=>n===void 0||t===null?"Open a workspace to split":nt(n,t,c)?null:"Maximum split depth reached",o=r("right"),a=r("bottom");return i.jsxs(i.Fragment,{children:[i.jsx(be,{className:ee.splitAction,hoverBase:"var(--pi-color-background)",style:{borderRadius:"var(--pi-radius-sm)"},title:o??"Split right",disabled:o!==null,onClick:s("right"),children:i.jsx(Fr,{size:14})}),i.jsx(be,{className:ee.splitAction,hoverBase:"var(--pi-color-background)",style:{borderRadius:"var(--pi-radius-sm)"},title:a??"Split down",disabled:a!==null,onClick:s("bottom"),children:i.jsx(Wr,{size:14})})]})}function Ln({cwd:e,paneId:t,style:n,focused:s=!1}){const r=T(f=>f.tabs),o=P(f=>f.focusPane),a=P(f=>{var g;return e===null||(g=f.layouts[e])==null?void 0:g.placement}),c=P(f=>{var g;return e===null||t===null||(g=f.layouts[e])==null?void 0:g.activeByPane[t]}),l=t===null?[]:r.filter(f=>(a==null?void 0:a[f.id])===t),{setNodeRef:u}=_s({id:`strip:${t??"none"}`,disabled:t===null,data:{type:"strip",paneId:t}});return i.jsxs("div",{ref:u,className:W(ee.strip,ee.paneStrip,s&&ee.focused),style:n,onPointerDown:()=>{e!==null&&t!==null&&o(e,t)},children:[i.jsx("div",{className:ee.tabs,children:i.jsx(uo,{items:l.map(f=>f.id),strategy:fo,children:l.map(f=>i.jsx(au,{tab:f,active:f.id===c},f.id))})}),i.jsx(iu,{workspaceCwd:e,paneId:t}),i.jsx(cu,{cwd:e,paneId:t})]})}const lu="_preview_1txmv_1",du="_chip_1txmv_9",uu="_chipLabel_1txmv_23",Qt={preview:lu,chip:du,chipLabel:uu};function fu({rect:e,region:t}){return i.jsx("div",{className:Qt.preview,style:Id(e,t)})}function pu({tab:e}){const t=cr[e.kind];return i.jsxs("div",{className:Qt.chip,children:[i.jsx(t,{size:13}),i.jsx("span",{className:Qt.chipLabel,children:e.label})]})}const hu="_area_1kpjf_1",mu="_panel_1kpjf_10",gu="_dropZone_1kpjf_26",_u="_active_1kpjf_30",yu="_empty_1kpjf_34",wu="_emptyStack_1kpjf_46",bu="_emptyTitle_1kpjf_60",vu="_emptyHint_1kpjf_64",Se={area:hu,panel:mu,dropZone:gu,active:_u,empty:yu,emptyStack:wu,emptyTitle:bu,emptyHint:vu};function xu({paneId:e,style:t}){const{setNodeRef:n}=_s({id:`pane:${e}`,data:{type:"pane",paneId:e}});return i.jsx("div",{ref:n,className:Se.dropZone,style:t,...Ld(e)})}function Su(){const e=T(_=>_.tabs),t=T(_=>_.activeWorkspaceCwd),n=P(_=>t===null?void 0:_.layouts[t]),s=A(_=>_.status),r=M(_=>_.openCwdPicker),o=P(_=>_.focusPane),a=e.some(_=>_.workspaceCwd===t),c=v.useRef(null),l=v.useMemo(()=>Ed(e,t,n),[e,t,n]),u=v.useMemo(()=>jd(n),[n]),f=v.useMemo(()=>Td(n),[n]),g=v.useMemo(()=>pn(n),[n]),h=bd(t),m=Vd(t,c),w=h.preview??m.preview;return i.jsxs(mo,{sensors:h.sensors,collisionDetection:h.collisionDetection,onDragStart:h.onDragStart,onDragMove:h.onDragMove,onDragEnd:h.onDragEnd,onDragCancel:h.onDragCancel,children:[i.jsxs("div",{className:Se.area,ref:c,onDragOver:m.onDragOver,onDragLeave:m.onDragLeave,onDrop:m.onDrop,children:[u.length===0?i.jsx(Ln,{cwd:t,paneId:null}):u.map(_=>i.jsx(Ln,{cwd:t,paneId:_.paneId,style:_.stripStyle,focused:_.focused},_.paneId)),t!==null&&f.length>0&&i.jsx(Dd,{cwd:t,dividers:f,hostRef:c}),u.map(_=>i.jsx(xu,{paneId:_.paneId,style:sr(g.get(_.paneId))},`drop-${_.paneId}`)),w!==null&&g.has(w.paneId)&&i.jsx(fu,{rect:g.get(w.paneId),region:w.region}),t===null&&i.jsxs("div",{className:Se.emptyStack,children:[i.jsx("div",{className:Se.emptyTitle,children:"No workspace open"}),i.jsx("div",{className:Se.emptyHint,children:"Open a project folder to start a chat."}),i.jsx(ne,{size:"sm",variant:"secondary",leftIcon:i.jsx(ds,{size:14}),disabled:s!=="open",title:s!=="open"?"Connect to open a workspace":"Open a workspace folder",onClick:()=>r(),children:"Open Workspace"})]}),t!==null&&!a&&i.jsx("div",{className:Se.empty,children:"No open tabs in this workspace"}),e.map((_,p)=>{const S=kd[_.kind],R=l[p],j=n==null?void 0:n.placement[_.id];return i.jsx("div",{className:W(Se.panel,R.visible&&Se.active),style:R.style,onPointerDown:()=>{t!==null&&j!==void 0&&o(t,j)},children:i.jsx(v.Suspense,{fallback:i.jsx(nr,{size:"md"}),children:i.jsx(S,{tab:_,owningPaneId:Cd(_.id,n)})})},_.id)})]}),i.jsx(go,{dropAnimation:null,children:h.draggedTab&&i.jsx(pu,{tab:h.draggedTab})})]})}const ke={fileRead:e=>["file","read",e],fileDownload:e=>["file","download",e],fileText:(e,t)=>["file","text",e,t],fileDiff:(e,t,n)=>["file","diff",e,t,n],fileDiffByPath:e=>["file","diff",e],explorer:e=>["explorer",e],agentList:()=>["agents","list"],providerModels:e=>["providers","models",e],agentTimeline:e=>["agents","timeline",e],agentCommands:e=>["agents","commands",e]};function ku(e){const t=e.kind==="directory"||e.type==="directory"?"directory":"file";return{name:e.name??"",kind:t,size:e.size,mtimeMs:e.mtimeMs}}function Iu(e){return e.slice().sort((t,n)=>t.kind!==n.kind?t.kind==="directory"?-1:1:t.name.localeCompare(n.name))}async function lr(e,t){const s=(await e.connection.request("file_explorer_request",{path:t})).result;if(!s||s.ok===!1)throw new Error(s&&"error"in s?s.error:"explorer request failed");const r="entries"in s?s.entries??[]:[];return{path:s.resolvedPath??t,entries:Iu(r.map(ku))}}function ju(e,t=!0){const n=A(s=>s.client);return os({queryKey:ke.explorer(e),queryFn:()=>{if(!n)throw new Error("not connected");return lr(n,e)},enabled:!!n&&!!e&&t})}function Tu(e){const t=A(r=>r.client),n=v.useMemo(()=>Array.from(e),[e]),s=Mr({queries:n.map(r=>({queryKey:ke.explorer(r),queryFn:()=>{if(!t)throw new Error("not connected");return lr(t,r)},enabled:!!t&&!!r}))});return v.useMemo(()=>{const r=new Map;return n.forEach((o,a)=>{const c=s[a];r.set(o,{listing:c==null?void 0:c.data,isLoading:!!(c!=null&&c.isLoading),isError:!!(c!=null&&c.isError),error:c==null?void 0:c.error})}),r},[n,s])}function Cu(e){return typeof e=="object"&&e!==null&&"type"in e&&e.type==="file_changed"&&"path"in e&&typeof e.path=="string"}function Eu(e,t){const n=new Set,s=e.connection.onSessionMessage(r=>{const o=r;Cu(o)&&n.has(o.path)&&t(o.path)});return{sync(r){for(const o of n)r.has(o)||(n.delete(o),e.connection.request("file_watch_unsubscribe",{path:o}).catch(()=>{}));for(const o of r)n.has(o)||(n.add(o),e.connection.request("file_watch_subscribe",{path:o}).then(a=>{const c=a;(c==null?void 0:c.ok)===!1&&console.warn(`useExplorerWatch: ${c.error??"subscribe failed"} for "${o}"`)}).catch(()=>{}))},dispose(){s();for(const r of n)e.connection.request("file_watch_unsubscribe",{path:r}).catch(()=>{});n.clear()}}}function Ru(e){const t=A(a=>a.client),n=Le(),s=v.useRef(null),r=v.useRef(null),o=Array.from(e).toSorted().join("\0");v.useEffect(()=>{var a,c;t&&(r.current!==t&&((a=s.current)==null||a.dispose(),s.current=Eu(t,l=>{n.invalidateQueries({queryKey:ke.explorer(l)})}),r.current=t),(c=s.current)==null||c.sync(new Set(o?o.split("\0"):[])))},[t,o,n]),v.useEffect(()=>()=>{var a;(a=s.current)==null||a.dispose(),s.current=null,r.current=null},[])}const Hn=new WeakMap;function Un(e){let t=Hn.get(e);return t||(t=new uc(e),t.start(),Hn.set(e,t)),t}function Mu(e,t,n){const s=new Blob([Uint8Array.from(e)],{type:n||"application/octet-stream"}),r=URL.createObjectURL(s),o=document.createElement("a");o.href=r,o.download=t,o.rel="noopener",document.body.appendChild(o),o.click(),o.remove(),setTimeout(()=>URL.revokeObjectURL(r),0)}function dr(){const e=A(r=>r.daemon),t=Le(),n=v.useCallback(async(r,o)=>{if(!e)throw new Error("not connected");const a=r?`${r}/${o.name}`:o.name,c=new Uint8Array(await o.arrayBuffer());await Un(e).upload(a,c),await t.invalidateQueries({queryKey:["explorer"]})},[e,t]),s=v.useCallback(async r=>{if(!e)throw new Error("not connected");const o=await Un(e).download(r);Mu(o.bytes,o.fileName||r.split("/").pop()||"download",o.mimeType)},[e]);return{upload:n,saveToDisk:s}}const Kn={available:!1,branch:null,upstream:null,ahead:0,behind:0,detached:!1,conflictCount:0},de=Ie()(e=>({subscribedCwd:null,changes:[],ignored:[],...Kn,setSubscribedCwd:t=>e({subscribedCwd:t}),applyProjection:t=>{if(!t||!t.available){e({changes:[],ignored:[],...Kn});return}const n=[];for(const s of t.staged)n.push({path:s.path,status:s.indexStatus==="A"?"added":s.indexStatus==="D"?"deleted":"modified",staged:!0});for(const s of t.unstaged)n.push({path:s.path,status:s.worktreeStatus==="D"?"deleted":"modified",staged:!1});for(const s of t.untracked)n.push({path:s,status:"added",staged:!1});e({changes:n,ignored:t.ignored??[],available:!0,branch:t.branch,upstream:t.upstream,ahead:t.ahead,behind:t.behind,detached:t.detached,conflictCount:t.conflicted.length})}}));function am(e,t){return e?e.startsWith("/")||e.startsWith("~")?e:t?`${t.replace(/\/+$/,"")}/${e}`:null:null}function me(e){const t=e.lastIndexOf("/");return t>0?e.slice(0,t):"/"}function Nu(e,t){return!t||!e.startsWith(t)?e:e.slice(t.length).replace(/^\/+/,"")}function im(e){if(!e.startsWith("/"))return e;const t=e.split("/"),n=[];for(const s of t)s===""||s==="."||(s===".."?n.length>0&&n.pop():n.push(s));return"/"+n.join("/")}function Vn(e,t,n){if(t.kind!=="file"&&t.kind!=="directory")return null;const s=t.kind==="directory"?t.path:me(t.path);if(s===me(e)||s===e||s.startsWith(`${e}/`)||s!==n&&!s.startsWith(`${n}/`))return null;const r=e.split("/").pop();return{destinationDir:s,destination:`${s}/${r}`}}function Gn(e,t){if(e.kind!=="file"&&e.kind!=="directory")return null;const n=e.kind==="directory"?e.path:me(e.path);return n!==t&&!n.startsWith(`${t}/`)?null:n}const Du={empty_path:"Nothing to move.",invalid_name:"Invalid name for the destination.",exists:"An item with that name already exists in the destination folder.",not_found:"That item or destination folder no longer exists.",not_a_directory:"The destination is not a folder.",same_path:"That item is already in this folder.",into_descendant:"A folder cannot be moved into itself.",cross_device:"Cannot move across filesystems."};async function Pu(e,t,n){const s=await e.connection.request("file_move_request",{path:t,destination:n});if(!s.ok){const r=s.error??"";throw new Error(Du[r]??r??"Failed to move")}return s.destination??n}function Yn(e,t){return t===0?e:`${e} — closed ${t} ${t===1?"diff tab":"diff tabs"}`}function ur(e,t){return e.endsWith("/")?`${e}${t}`:`${e}/${t}`}function fr(e,t,n,s,r,o,a){var l;(o==null?void 0:o.parentPath)===t&&e.push({kind:"draft",path:`${t}::draft`,depth:n,draftKind:o.kind,parentPath:t});const c=r.get(t);if(!c||c.isLoading){e.push({kind:"loading",path:t,depth:n});return}if(c.isError){const u=c.error instanceof Error?c.error.message:"failed to load";e.push({kind:"error",path:t,depth:n,message:u});return}for(const u of((l=c.listing)==null?void 0:l.entries)??[])Au(e,t,u,n,s,r,o,a)}function Au(e,t,n,s,r,o,a,c){const l=ur(t,n.name),u=n.kind==="directory",f=u&&r.has(l);l===c?e.push({kind:"rename",path:l,depth:s,name:n.name,isDirectory:u}):u?e.push({kind:"directory",path:l,name:n.name,depth:s,expanded:f}):e.push({kind:"file",path:l,name:n.name,depth:s}),f&&fr(e,l,s+1,r,o,a,c)}function qu(e,t,n,s,r){if(!e)return[];const o=[];return fr(o,e,0,t,n,s,r),o}const $u=()=>{};function Bu(e,t){return e===void 0?t:e==="deleted"||t==="deleted"?"deleted":e==="added"||t==="added"?"added":"modified"}function zu(e){return e==="added"?"added":"modified"}function Ou(e,t){if(!e||t.length===0)return $u;const n=e.replace(/\/+$/,""),s=new Map,r=new Map,o=[];for(const a of t){const c=a.path.endsWith("/"),l=c?a.path.slice(0,-1):a.path;if(!l)continue;const u=`${n}/${l}`;s.set(u,Bu(s.get(u),a.status)),c&&o.push(u);const f=zu(a.status);let g=me(u);for(;g.length>n.length&&g.startsWith(n);){const h=r.get(g);r.set(g,h===void 0||h===f?f:"modified");const m=me(g);if(m===g)break;g=m}}return a=>{const c=s.get(a)??r.get(a);if(c!==void 0)return c;for(const l of o)if(a.startsWith(`${l}/`))return"added"}}const Fu=()=>!1;function Wu(e,t){if(!e||t.length===0)return Fu;const n=e.replace(/\/+$/,""),s=new Set,r=[];for(const o of t){const a=o.endsWith("/"),c=a?o.slice(0,-1):o;if(!c)continue;const l=`${n}/${c}`;s.add(l),a&&r.push(`${l}/`)}return o=>{if(s.has(o))return!0;for(const a of r)if(o.startsWith(a))return!0;return!1}}const Lu="_container_1mqaz_1",Hu="_header_1mqaz_7",Uu="_uploadButton_1mqaz_14",Ku="_hiddenInput_1mqaz_33",Vu="_status_1mqaz_36",Gu="_statusError_1mqaz_37",Yu="_rowAction_1mqaz_50",Xu="_item_1mqaz_53",Ju="_list_1mqaz_60",Qu="_active_1mqaz_83",Zu="_selected_1mqaz_88",ef="_dropTarget_1mqaz_92",tf="_chevronSlot_1mqaz_97",nf="_chevron_1mqaz_97",sf="_chevronOpen_1mqaz_108",rf="_icon_1mqaz_111",of="_name_1mqaz_118",af="_dirName_1mqaz_123",cf="_gitAdded_1mqaz_133",lf="_gitModified_1mqaz_138",df="_gitDeleted_1mqaz_143",uf="_hiddenEntry_1mqaz_155",ff="_statusRow_1mqaz_164",pf="_statusRowError_1mqaz_175",hf="_draftInput_1mqaz_178",q={container:Lu,header:Hu,uploadButton:Uu,hiddenInput:Ku,status:Vu,statusError:Gu,rowAction:Yu,item:Xu,list:Ju,active:Qu,selected:Zu,dropTarget:ef,chevronSlot:tf,chevron:nf,chevronOpen:sf,icon:rf,name:of,dirName:af,gitAdded:cf,gitModified:lf,gitDeleted:df,hiddenEntry:uf,statusRow:ff,statusRowError:pf,draftInput:hf};function mf({draftKind:e,indentStyle:t,onSubmit:n,onCancel:s}){const[r,o]=v.useState("");return i.jsxs("div",{className:q.item,style:t,onClick:a=>a.stopPropagation(),children:[i.jsx("span",{className:q.chevronSlot}),i.jsx("span",{className:q.icon,children:e==="directory"?i.jsx(De,{size:16}):i.jsx(sn,{size:16})}),i.jsx("input",{className:q.draftInput,autoFocus:!0,spellCheck:!1,placeholder:e==="directory"?"New folder":"New file",value:r,onChange:a=>o(a.target.value),onKeyDown:a=>{if(a.key==="Enter"){a.preventDefault();const c=r.trim();c?n(c):s()}else a.key==="Escape"&&(a.preventDefault(),s())},onBlur:s})]})}function gf({name:e,isDirectory:t,indentStyle:n,onSubmit:s,onCancel:r}){const[o,a]=v.useState(e),c=v.useRef(null);return v.useEffect(()=>{const l=c.current;if(!l)return;l.focus();const u=e.lastIndexOf("."),f=t||u<=0?e.length:u;l.setSelectionRange(0,f)},[e,t]),i.jsxs("div",{className:q.item,style:n,onClick:l=>l.stopPropagation(),children:[i.jsx("span",{className:q.chevronSlot}),i.jsx("span",{className:q.icon,children:t?i.jsx(De,{size:16}):i.jsx(sn,{size:16})}),i.jsx("input",{ref:c,className:q.draftInput,spellCheck:!1,value:o,onChange:l=>a(l.target.value),onKeyDown:l=>{if(l.key==="Enter"){l.preventDefault();const u=o.trim();!u||u===e?r():s(u)}else l.key==="Escape"&&(l.preventDefault(),r())},onBlur:r})]})}const _f=14,yf={added:q.gitAdded,modified:q.gitModified,deleted:q.gitDeleted};function wf({row:e,active:t,selected:n,dropTarget:s,gitStatus:r,hidden:o,onToggle:a,onOpenFile:c,onContextMenu:l,onSubmitDraft:u,onCancelDraft:f,onSubmitRename:g,onCancelRename:h,onDragStartRow:m,onDragEndRow:w}){const _={paddingLeft:8+e.depth*_f};if(e.kind==="loading")return i.jsx("div",{className:q.statusRow,style:_,children:"Loading…"});if(e.kind==="error")return i.jsx("div",{className:W(q.statusRow,q.statusRowError),style:_,children:e.message??"failed to load"});if(e.kind==="draft")return i.jsx(mf,{draftKind:e.draftKind,indentStyle:_,onSubmit:S=>u(e.parentPath,S),onCancel:f});if(e.kind==="rename")return i.jsx(gf,{name:e.name,isDirectory:e.isDirectory,indentStyle:_,onSubmit:S=>g(e.path,S),onCancel:h});const p=e.kind==="directory";return i.jsxs("div",{className:W(q.item,t&&q.active,n&&q.selected,s&&q.dropTarget,r&&yf[r],o&&q.hiddenEntry),style:_,title:e.path,draggable:!0,onDragStart:S=>m(e.path,p,S),onDragEnd:w,onClick:()=>p?a(e.path):c(e.path),onContextMenu:S=>{S.preventDefault(),S.stopPropagation(),l(e.path,p,S.clientX,S.clientY)},children:[i.jsx("span",{className:q.chevronSlot,children:p&&i.jsx(tn,{size:14,className:W(q.chevron,e.expanded&&q.chevronOpen)})}),i.jsx("span",{className:q.icon,children:p?i.jsx(De,{size:16}):i.jsx(sn,{size:16})}),i.jsx("span",{className:p?q.dirName:q.name,children:e.name}),i.jsx(be,{className:q.rowAction,title:"Actions",onClick:S=>{S.stopPropagation();const R=S.currentTarget.getBoundingClientRect();l(e.path,p,R.left,R.bottom)},children:i.jsx(Zt,{size:14})})]})}async function Xn(e){var n;if((n=navigator.clipboard)!=null&&n.writeText)try{await navigator.clipboard.writeText(e);return}catch{}const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.focus(),t.select();try{if(!document.execCommand("copy"))throw new Error('execCommand("copy") failed')}finally{t.remove()}}function bf(){const e=M(D=>D.fileMenu),t=M(D=>D.closeFileMenu),n=A(D=>D.client),s=Z(D=>D.startDraft),r=Z(D=>D.startRename),o=Z(D=>D.rootPath),a=T(D=>D.activeWorkspaceCwd),{saveToDisk:c}=dr(),l=Le(),u=v.useRef(null),[f,g]=v.useState(!1);if(v.useEffect(()=>{g(e!==null)},[e]),!e)return null;const h=e.path.split("/").pop()||e.path;function m(D){g(D),D||t()}function w(){e&&(t(),hn(e.path,a||"~"))}function _(){e&&(t(),ir(e.path,a||"~"))}function p(){e&&(t(),ar(e.path,a||"~"))}async function S(){if(e){t();try{await Xn(e.path)}catch{window.alert("Failed to copy to clipboard.")}}}async function R(){if(e){t();try{await Xn(Nu(e.path,o)||"/")}catch{window.alert("Failed to copy to clipboard.")}}}async function j(){if(e){t();try{await c(e.path)}catch(D){window.alert(`Failed to download: ${D instanceof Error?D.message:String(D)}`)}}}async function z(){if(!e)return;const D=e.isDirectory?"folder (and everything inside it)":"file";if(!window.confirm(`Permanently delete this ${D}? "${h}" — this cannot be undone.`))return t();if(t(),!n){window.alert("Not connected — cannot delete remotely.");return}try{const K=await n.connection.request("file_delete_request",{path:e.path});if(!K.ok)throw new Error(K.error??"delete failed");await l.invalidateQueries({queryKey:["explorer"]}),T.getState().closeByPathPrefix(e.path)}catch(K){window.alert(`Failed to delete: ${K instanceof Error?K.message:String(K)}`)}}function J(D){if(!e)return;const K=e.isDirectory?e.path:me(e.path);t(),s(K,D)}function G(){e&&(t(),r(e.path))}return i.jsxs(ot,{open:f,onOpenChange:m,modal:!1,children:[i.jsx(at,{asChild:!0,children:i.jsx(un,{ref:u,x:e.x,y:e.y})}),i.jsx(ct,{minWidth:140,children:e.background?i.jsxs(i.Fragment,{children:[i.jsxs(L,{onSelect:()=>J("file"),children:[i.jsx(Ft,{size:13}),"New File"]}),i.jsxs(L,{onSelect:()=>J("directory"),children:[i.jsx(vt,{size:13}),"New Folder"]}),i.jsx(Re,{}),i.jsxs(L,{onSelect:S,children:[i.jsx(ft,{size:13}),"Copy Current Directory Path"]}),i.jsxs(L,{onSelect:R,children:[i.jsx(ft,{size:13}),"Copy Current Directory Relative Path"]})]}):i.jsxs(i.Fragment,{children:[!e.isDirectory&&i.jsxs(i.Fragment,{children:[i.jsxs(L,{onSelect:w,children:[i.jsx(Lr,{size:13}),"Open"]}),i.jsxs(L,{onSelect:_,children:[i.jsx(nn,{size:13}),"Open in MolViewer"]}),or(e.path)&&i.jsxs(L,{onSelect:p,children:[i.jsx(ps,{size:13}),"Open as Text"]}),i.jsx(Re,{})]}),e.isDirectory&&i.jsxs(i.Fragment,{children:[i.jsxs(L,{onSelect:()=>J("file"),children:[i.jsx(Ft,{size:13}),"New File"]}),i.jsxs(L,{onSelect:()=>J("directory"),children:[i.jsx(vt,{size:13}),"New Folder"]}),i.jsx(Re,{})]}),i.jsxs(L,{onSelect:S,children:[i.jsx(ft,{size:13}),"Copy Absolute Path"]}),i.jsxs(L,{onSelect:R,children:[i.jsx(ft,{size:13}),"Copy Relative Path"]}),i.jsx(Re,{}),!e.isDirectory&&i.jsxs(i.Fragment,{children:[i.jsxs(L,{onSelect:j,children:[i.jsx(Hr,{size:13}),"Download"]}),i.jsx(Re,{})]}),i.jsxs(L,{onSelect:G,children:[i.jsx(is,{size:13}),"Rename"]}),i.jsxs(L,{danger:!0,onSelect:z,children:[i.jsx(en,{size:13}),"Delete"]})]})})]})}const vf={empty_path:"Choose a folder first.",invalid_name:'Invalid name — cannot be empty or contain "/".',exists:"An item with that name already exists here.",not_found:"That folder no longer exists.",not_a_directory:"That path is not a folder.",unreadable:"That folder is not readable."};async function pr(e,t,n,s){const r=await e.connection.request("file_create_request",{path:t,name:n,kind:s});if(!r.ok){const o=r.error??"";throw new Error(vf[o]??o??"Failed to create")}return r.path??(t.endsWith("/")?`${t}${n}`:`${t}/${n}`)}const xf=28,Ge="application/x-pi-studio-path",Bt="Files";function Sf(){const e=A(y=>y.client),t=Z(y=>y.rootPath),n=Z(y=>y.expanded),s=Z(y=>y.setRoot),r=Z(y=>y.toggle),o=Z(y=>y.draft),a=Z(y=>y.startDraft),c=Z(y=>y.cancelDraft),l=Z(y=>y.renaming),u=Z(y=>y.cancelRename),f=Z(y=>y.selected),g=Z(y=>y.setSelected),h=T(y=>y.activeWorkspaceCwd),m=T(y=>y.tabs.find(I=>I.id===y.activeTabId)),w=de(y=>y.changes),_=de(y=>y.ignored),{upload:p}=dr(),S=M(y=>y.openFileMenu),R=Le(),[j,z]=v.useState(null),[J,G]=v.useState(null),D=v.useRef(null),K=v.useRef(null),se=v.useRef(null),re=v.useRef(null),Q=(m==null?void 0:m.kind)==="file"||(m==null?void 0:m.kind)==="molecule"?m.data.path:null,ue=f?f.isDirectory?f.path:me(f.path):t,dt=v.useRef(null);v.useEffect(()=>{if(!e)return;const y=h||"~";dt.current!==y&&(dt.current=y,Il(e,y).then(I=>s(I)))},[e,h,s]);const C=Tu(n);Ru(n);const ie=v.useMemo(()=>qu(t,n,C,o,l),[t,n,C,o,l]),yr=v.useMemo(()=>Ou(t,w),[t,w]),wr=v.useMemo(()=>Wu(t,_),[t,_]),gn=Nr({count:ie.length,getScrollElement:()=>K.current,estimateSize:()=>xf,overscan:12,getItemKey:y=>{var I;return((I=ie[y])==null?void 0:I.path)??y}});function Rt(y){hn(y,h||"~")}function br(y,I,E){E.dataTransfer.setData(Ge,y),I||E.dataTransfer.setData(lt.path,y),E.dataTransfer.effectAllowed=I?"move":"copyMove",se.current=y}function vr(){se.current=null}function Mt(){G(null),re.current&&(clearTimeout(re.current.timer),re.current=null)}function _n(y){var E;if(((E=re.current)==null?void 0:E.path)===y.path||(re.current&&clearTimeout(re.current.timer),re.current=null,y.kind!=="directory"||y.expanded))return;const I=window.setTimeout(()=>r(y.path),700);re.current={path:y.path,timer:I}}async function yn(y,I){if(!e)throw new Error("Not connected.");const E=await Pu(e,y,I),B=me(E);await R.invalidateQueries({queryKey:ke.explorer(me(y))}),await R.invalidateQueries({queryKey:ke.explorer(B)}),Z.getState().repathAfterMove(y,E,B);const H=T.getState().tabs.filter(le=>{if(le.kind!=="file"&&le.kind!=="diff"&&le.kind!=="molecule")return!1;const ut=le.data.path;return ut===y||((ut==null?void 0:ut.startsWith(`${y}/`))??!1)}),ge=H.some(le=>(le.kind==="file"||le.kind==="molecule")&&le.data.path===y),ce=H.filter(le=>le.kind==="diff").length;return T.getState().closeByPathPrefix(y),ge&&Rt(E),{destination:E,closedDiffs:ce}}async function xr(y,I){const E=Vn(y,I,t);if(!E||!e)return;const B=y.split("/").pop()??y;z({text:`Moving ${B}…`,error:!1});try{const{destination:H,closedDiffs:ge}=await yn(y,E.destination);z({text:Yn(`Moved to ${me(H).split("/").pop()||"/"}`,ge),error:!1})}catch(H){z({text:H instanceof Error?H.message:"Failed to move",error:!0})}}async function Sr(y,I){const E=(o==null?void 0:o.kind)??"file";if(c(),!!e)try{const B=await pr(e,y,I,E);await R.invalidateQueries({queryKey:ke.explorer(y)}),z({text:`Created ${B}`,error:!1}),E==="file"&&Rt(B)}catch(B){z({text:B instanceof Error?B.message:"Failed to create",error:!0})}}async function kr(y,I){if(u(),!e)return;const E=ur(me(y),I);z({text:`Renaming ${y.split("/").pop()}…`,error:!1});try{const{destination:B,closedDiffs:H}=await yn(y,E);z({text:Yn(`Renamed to ${B.split("/").pop()}`,H),error:!1})}catch(B){z({text:B instanceof Error?B.message:"Failed to rename",error:!0})}}async function wn(y,I){var ge;if(!I.length||!y)return;const E=(ge=C.get(y))==null?void 0:ge.listing,B=new Set((E==null?void 0:E.entries.map(ce=>ce.name))??[]),H=I.filter(ce=>B.has(ce.name));if(H.length>0){const ce=H.map(le=>le.name).join(", ");if(!window.confirm(`Overwrite ${H.length>1?"these files":"this file"}? ${ce}`))return}z({text:`Uploading ${I.length} file${I.length>1?"s":""}…`,error:!1});try{for(const ce of I)await p(y,ce);z({text:`Uploaded ${I.length} file${I.length>1?"s":""}`,error:!1})}catch(ce){z({text:`Upload failed: ${ce instanceof Error?ce.message:"unknown"}`,error:!0})}}function bn(y,I){if(y.preventDefault(),y.dataTransfer.types.includes(Ge)){const H=y.dataTransfer.getData(Ge)||se.current;Mt(),H&&xr(H,I??{kind:"directory",path:t});return}if(Mt(),!y.dataTransfer.types.includes(Bt))return;const E=I?Gn(I,t):t;if(!E)return;const B=Array.from(y.dataTransfer.files);B.length&&wn(E,B)}function Ir(y){const I=y.dataTransfer.types.includes(Ge);!I&&!y.dataTransfer.types.includes(Bt)||(y.preventDefault(),y.dataTransfer.dropEffect=I?"move":"copy")}return e?i.jsxs("div",{className:q.container,onDragOver:Ir,onDragLeave:y=>{y.currentTarget.contains(y.relatedTarget)||Mt()},onDrop:y=>bn(y),children:[i.jsxs("div",{className:q.header,children:[i.jsx("button",{type:"button",className:q.uploadButton,onClick:()=>a(ue,"file"),disabled:!t,title:f?`New file in ${ue.split("/").pop()||"/"}`:"New file in workspace root",children:i.jsx(Ft,{size:14})}),i.jsx("button",{type:"button",className:q.uploadButton,onClick:()=>a(ue,"directory"),disabled:!t,title:f?`New folder in ${ue.split("/").pop()||"/"}`:"New folder in workspace root",children:i.jsx(vt,{size:14})}),i.jsxs("button",{type:"button",className:q.uploadButton,onClick:()=>{var y;return(y=D.current)==null?void 0:y.click()},disabled:!t,title:"Upload files to the workspace root",children:[i.jsx(Ur,{size:14}),i.jsx("span",{children:"Upload"})]}),i.jsx("input",{ref:D,type:"file",multiple:!0,className:q.hiddenInput,onChange:y=>{wn(t,Array.from(y.target.files??[])),y.target.value=""}})]}),j&&i.jsx("div",{className:j.error?q.statusError:q.status,children:j.text}),i.jsxs("div",{className:q.list,ref:K,onContextMenu:y=>{y.preventDefault(),S(t,!0,y.clientX,y.clientY,!0)},children:[ie.length===0&&i.jsx(Me,{children:"No files loaded"}),i.jsx("div",{style:{position:"relative",height:gn.getTotalSize()},children:gn.getVirtualItems().map(y=>{const I=ie[y.index];return I?i.jsx("div",{"data-index":y.index,style:{position:"absolute",top:0,left:0,width:"100%",height:y.size,transform:`translateY(${y.start}px)`},onDragEnter:E=>{if(E.dataTransfer.types.includes(Ge)){const H=se.current;if(!H)return;const ge=Vn(H,I,t);G(ge?I.path:null),_n(I);return}if(!E.dataTransfer.types.includes(Bt))return;const B=Gn(I,t);G(B?I.path:null),_n(I)},onDrop:E=>{E.stopPropagation(),bn(E,I)},children:i.jsx(wf,{row:I,active:(I.kind==="file"||I.kind==="directory")&&I.path===Q,selected:(I.kind==="file"||I.kind==="directory")&&I.path===(f==null?void 0:f.path),gitStatus:I.kind==="file"||I.kind==="directory"?yr(I.path):void 0,hidden:(I.kind==="file"||I.kind==="directory")&&(I.name.startsWith(".")||wr(I.path)),onToggle:E=>{g({path:E,isDirectory:!0}),r(E)},onOpenFile:E=>{g({path:E,isDirectory:!1}),Rt(E)},onContextMenu:(E,B,H,ge)=>S(E,B,H,ge),onSubmitDraft:(E,B)=>void Sr(E,B),onCancelDraft:c,onSubmitRename:(E,B)=>void kr(E,B),onCancelRename:u,onDragStartRow:br,onDragEndRow:vr,dropTarget:(I.kind==="file"||I.kind==="directory")&&I.path===J})},y.key):null})})]}),i.jsx(bf,{})]}):i.jsx(Me,{children:"Connect to browse files"})}const kf="_list_1n3q6_1",If="_summary_1n3q6_4",jf="_item_1n3q6_11",Tf="_badge_1n3q6_23",Cf="_added_1n3q6_30",Ef="_modified_1n3q6_34",Rf="_deleted_1n3q6_38",Mf="_name_1n3q6_42",qe={list:kf,summary:If,item:jf,badge:Tf,added:Cf,modified:Ef,deleted:Rf,name:Mf},Nf={added:"A",modified:"M",deleted:"D"};function Df(){const t=T(o=>o.activeWorkspaceCwd)||"~",n=de(o=>o.changes),s=T(o=>o.open);function r(o,a){s({id:V.diff(o,a),kind:"diff",label:o.split("/").pop()||o,closable:!0,data:{path:o,staged:a},workspaceCwd:t})}return n.length===0?i.jsx(Me,{children:"No changes detected"}):i.jsxs("div",{className:qe.list,children:[i.jsxs("div",{className:qe.summary,children:[n.length," changed file",n.length===1?"":"s"]}),n.map((o,a)=>i.jsxs("div",{className:qe.item,onClick:()=>r(o.path,o.staged),children:[i.jsx("span",{className:W(qe.badge,qe[o.status]),children:Nf[o.status]}),i.jsx("span",{className:qe.name,children:o.path})]},`${o.path}-${o.staged}-${a}`))]})}const Pf="_tabBar_1tvri_1",Af="_tabBtn_1tvri_7",qf="_active_1tvri_23",$f="_refreshBtn_1tvri_27",Bf="_content_1tvri_31",Ce={tabBar:Pf,tabBtn:Af,active:qf,refreshBtn:$f,content:Bf};function zf(){const e=M(c=>c.rightSidebarTab),t=M(c=>c.setRightSidebarTab),s=T(c=>c.activeWorkspaceCwd)||"~",r=A(c=>c.client),o=Le();function a(){o.invalidateQueries({queryKey:["explorer"]}),r&&s&&r.connection.request("checkout_refresh_request",{cwd:s}).catch(()=>{})}return i.jsxs(Js,{children:[i.jsxs("div",{className:Ce.tabBar,children:[i.jsxs("button",{type:"button",className:W(Ce.tabBtn,e==="files"&&Ce.active),onClick:()=>t("files"),children:[i.jsx(De,{size:13}),"Files"]}),i.jsxs("button",{type:"button",className:W(Ce.tabBtn,e==="changes"&&Ce.active),onClick:()=>t("changes"),children:[i.jsx(fs,{size:13}),"Changes"]}),i.jsx(ne,{size:"xs",variant:"ghost",iconOnly:!0,title:"Refresh",className:Ce.refreshBtn,onClick:a,children:i.jsx(Kr,{size:13})})]}),i.jsx("div",{className:Ce.content,children:e==="files"?i.jsx(Sf,{}):i.jsx(Df,{})})]})}const hr=Ie()(e=>({bySession:{},setStats(t,n){e(s=>({bySession:{...s.bySession,[t]:{...s.bySession[t],...n}}}))},clear(t){e(n=>{const{[t]:s,...r}=n.bySession;return{bySession:r}})}})),Of=12e3;function Ff(e,t){return e==="running"&&t!=="running"}function Jn(e,t){var s,r,o,a,c,l;const n={};((s=t.contextUsage)==null?void 0:s.tokens)!=null&&(n.contextTokens=t.contextUsage.tokens),((r=t.contextUsage)==null?void 0:r.contextWindow)!==void 0&&(n.contextWindow=t.contextUsage.contextWindow),((o=t.contextUsage)==null?void 0:o.percent)!=null&&(n.contextPercent=t.contextUsage.percent),((a=t.tokens)==null?void 0:a.total)!==void 0&&(n.totalTokens=t.tokens.total),((c=t.tokens)==null?void 0:c.input)!==void 0&&(n.inputTokens=t.tokens.input),((l=t.tokens)==null?void 0:l.output)!==void 0&&(n.outputTokens=t.tokens.output),t.cost!==void 0&&(n.cost=t.cost),t.model!==void 0&&(n.model=t.model,N.getState().setModel(e,t.model)),hr.getState().setStats(e,n)}function Wf(e){const t=A(c=>c.client),n=A(c=>c.status),s=N(c=>{var l;return e?((l=c.sessions[e])==null?void 0:l.agentId)??null:null}),r=N(c=>{var l;return e?(l=c.sessions[e])==null?void 0:l.status:void 0}),o=v.useRef(!1),a=v.useRef(void 0);v.useEffect(()=>{if(n!=="open"||!t||!e||!s)return;let c=!1;const l=async()=>{if(!o.current){o.current=!0;try{const f=await t.agent(s).sessionStats();c||Jn(e,f)}catch{}finally{o.current=!1}}};l();const u=setInterval(()=>void l(),Of);return()=>{c=!0,clearInterval(u)}},[n,t,e,s]),v.useEffect(()=>{const c=a.current;a.current=r,Ff(c,r)&&(n!=="open"||!t||!e||!s||(o.current=!1,t.agent(s).sessionStats().then(l=>Jn(e,l)).catch(()=>{})))},[r,n,t,e,s])}function Lf(e){return typeof e=="object"&&e!==null&&"type"in e&&e.type==="checkout_status_update"&&"cwd"in e&&typeof e.cwd=="string"&&"projection"in e&&typeof e.projection=="object"&&e.projection!==null}function Hf(e){const t=A(o=>o.client),n=de(o=>o.applyProjection),s=de(o=>o.setSubscribedCwd),r=v.useRef(t);return r.current=t,v.useEffect(()=>{if(!t||!e)return;let o=!1;t.connection.request("checkout_status_subscribe",{cwd:e}).catch(()=>{}),s(e);const a=t.connection.onSessionMessage(c=>{if(o)return;const l=c;Lf(l)&&l.cwd===e&&n(l.projection)});return t.connection.request("checkout_refresh_request",{cwd:e}).catch(()=>{}),()=>{o=!0,a(),t.connection.request("checkout_status_unsubscribe",{cwd:e}).catch(()=>{}),s(null)}},[t,e,n,s]),{refresh(){const o=r.current;!o||!e||o.connection.request("checkout_refresh_request",{cwd:e}).catch(()=>{})}}}const mn="--";function Ye(e){return e===void 0?mn:e<1e3?String(e):e<1e6?`${(e/1e3).toFixed(1)}k`:`${(e/1e6).toFixed(1)}M`}function Uf(e){if(e==null)return mn;const t=e<=1?e*100:e;return`${Math.round(t)}%`}function Kf(e){if(e===void 0)return mn;const t=e<1?4:2;return`$${e.toFixed(t)}`}function Vf(e,t){return t?e===t?"~":e.startsWith(`${t}/`)?`~${e.slice(t.length)}`:e:e}function Gf(e,t){const n=[];return e>0&&n.push(`↑${e}`),t>0&&n.push(`↓${t}`),n.join(" ")}function Yf(e,t=!0){const n=A(s=>s.client);return os({queryKey:ke.providerModels(e),queryFn:async()=>{if(!n)throw new Error("not connected");return(await n.providers.listModels(e)).models},enabled:!!n&&!!e&&t})}function Xf(e,t){if(t.trim()==="")return e;const n=t.toLowerCase();return e.filter(s=>s.label.toLowerCase().includes(n)||s.description!==void 0&&s.description.toLowerCase().includes(n))}function Jf(e,t){if(!t)return e;const n=e.find(s=>s.id===t);return n?[n,...e.filter(s=>s.id!==t)]:e}function Qf(e){const t=new Set;return e.filter(n=>t.has(n.id)?!1:(t.add(n.id),!0))}const Zf="_picker_1jy8c_4",ep="_search_1jy8c_10",tp="_list_1jy8c_28",np="_item_1jy8c_33",sp="_itemActive_1jy8c_47",rp="_checkSlot_1jy8c_51",op="_label_1jy8c_60",ap="_modelId_1jy8c_66",ip="_state_1jy8c_73",cp="_stateError_1jy8c_82",lp="_commandContent_1jy8c_92",dp="_commandList_1jy8c_95",up="_commandItem_1jy8c_100",fp="_commandItemHeader_1jy8c_132",pp="_commandKindBadge_1jy8c_146",hp="_commandKindExtension_1jy8c_165",mp="_commandKindPrompt_1jy8c_170",gp="_commandKindSkill_1jy8c_175",_p="_commandDescription_1jy8c_180",_e={picker:Zf,search:ep,list:tp,item:np,itemActive:sp,checkSlot:rp,label:op,modelId:ap,state:ip,stateError:cp,commandContent:lp,commandList:dp,commandItem:up,commandItemHeader:fp,commandKindBadge:pp,commandKindExtension:hp,commandKindPrompt:mp,commandKindSkill:gp,commandDescription:_p};function yp({currentModel:e,provider:t,onSelect:n,renderTrigger:s}){const[r,o]=v.useState(!1),[a,c]=v.useState(""),l=v.useRef(null),{data:u=[],isLoading:f,isError:g,error:h}=Yf(t,r),m=Qf(Jf(u,e));v.useEffect(()=>{var j;r&&(c(""),(j=l.current)==null||j.focus())},[r]);const w=new Map(m.map(j=>[j.id,j.provider])),_=m.map(j=>({value:j.id,label:j.label??j.id,description:j.id})),p=Xf(_,a),S=h instanceof Error?h.message:"Failed to load models";function R(j){j.stopPropagation(),j.key==="Escape"&&o(!1)}return i.jsxs(ot,{open:r,onOpenChange:o,modal:!1,children:[i.jsx(at,{asChild:!0,children:s(e)}),i.jsxs(ct,{minWidth:240,sideOffset:4,className:_e.picker,children:[i.jsx("input",{ref:l,className:_e.search,placeholder:"Search models…",value:a,onChange:j=>c(j.target.value),onKeyDown:R}),f&&i.jsx("div",{className:_e.state,children:i.jsx(nr,{size:"sm"})}),!f&&g&&i.jsx("div",{className:_e.stateError,children:S}),!f&&!g&&p.length===0&&i.jsx("div",{className:_e.state,children:"No models found"}),!f&&!g&&p.length>0&&i.jsx("div",{className:_e.list,children:p.map(j=>i.jsxs(gs,{className:_e.item,onSelect:()=>n(j.value,w.get(j.value)),children:[i.jsx("span",{className:_e.checkSlot,"aria-hidden":!0,children:j.value===e&&i.jsx(ms,{size:14})}),i.jsx("span",{className:_e.label,children:j.label}),i.jsxs("span",{className:_e.modelId,children:["(",j.value,")"]})]},j.value))})]})]})}const wp="_statusBar_1r17k_1",bp="_segmentGroup_1r17k_16",vp="_chevron_1r17k_20",xp="_segment_1r17k_16",Sp="_icon_1r17k_33",kp="_modelSegment_1r17k_39",Ip="_modelChevron_1r17k_63",jp="_text_1r17k_74",pe={statusBar:wp,segmentGroup:bp,chevron:vp,segment:xp,icon:Sp,modelSegment:kp,modelChevron:Ip,text:jp};function Tp(){const e=N(p=>p.activeSessionId),t=N(p=>e?p.sessions[e]:void 0),n=A(p=>p.client),s=N(p=>p.setModel),r=it(),o=T(p=>p.activeWorkspaceCwd);Hf(o||"");const a=de(p=>p.available),c=de(p=>p.branch),l=de(p=>p.ahead),u=de(p=>p.behind),f=de(p=>p.detached),g=de(p=>p.conflictCount),h=de(p=>p.changes.length),m=hr(p=>e?p.bySession[e]:void 0);Wf(e);const w=[];if(t){const p=Vf(t.cwd,r);w.push({key:"cwd",icon:i.jsx(De,{size:13}),text:p,title:t.cwd})}if(a){const p=Gf(l,u),S=[f?"(detached)":c??"?"];p&&S.push(p),h>0&&S.push(`●${h}`),g>0&&S.push(`⚠${g}`),w.push({key:"branch",icon:i.jsx(Vr,{size:13}),text:S.join(" ")})}if(t){const p=`${Uf(m==null?void 0:m.contextPercent)} (${Ye(m==null?void 0:m.contextTokens)}/${Ye(m==null?void 0:m.contextWindow)})`;w.push({key:"context",icon:i.jsx(Gr,{size:13}),text:p}),w.push({key:"tokens",icon:i.jsx(Yr,{size:13}),text:Ye(m==null?void 0:m.totalTokens),title:`in ${Ye(m==null?void 0:m.inputTokens)} / out ${Ye(m==null?void 0:m.outputTokens)}`}),w.push({key:"cost",icon:i.jsx(Xr,{size:13}),text:Kf(m==null?void 0:m.cost)})}function _(p,S){e&&(s(e,p,S),!(!n||!S)&&(async()=>{const R=await Bs(n,e);await n.agent(R).setModel(S,p)})().catch(()=>{}))}return i.jsxs("div",{className:pe.statusBar,children:[t&&i.jsx("span",{className:pe.segmentGroup,children:i.jsx(yp,{currentModel:t.model,provider:"pi",onSelect:_,renderTrigger:p=>i.jsxs("button",{type:"button",className:pe.modelSegment,disabled:!n,title:p?`Model: ${p}`:"Select model",children:[i.jsx("span",{className:pe.icon,children:i.jsx(Jr,{size:13})}),i.jsx("span",{className:pe.text,children:p??"Model"}),i.jsx(cs,{size:12,className:pe.modelChevron,"aria-hidden":"true"})]})})}),w.map((p,S)=>i.jsxs("span",{className:pe.segmentGroup,children:[(!!t||S>0)&&i.jsx(tn,{size:12,className:pe.chevron,"aria-hidden":"true"}),i.jsxs("span",{className:pe.segment,title:p.title,children:[i.jsx("span",{className:pe.icon,children:p.icon}),i.jsx("span",{className:pe.text,children:p.text})]})]},p.key))]})}const Cp="_wrapper_14joh_3",Ep="_box_14joh_18",Rp="_checkmark_14joh_38",Mp="_nativeInput_14joh_43",yt={wrapper:Cp,box:Ep,checkmark:Rp,nativeInput:Mp};v.forwardRef(function({label:t,checked:n=!1,disabled:s,className:r,onChange:o,...a},c){return i.jsxs("label",{className:yt.wrapper,"data-disabled":s||void 0,children:[i.jsx("input",{ref:c,type:"checkbox",className:yt.nativeInput,checked:n,disabled:s,onChange:o,...a}),i.jsx("span",{className:yt.box,"data-checked":n,"aria-hidden":!0,children:n&&i.jsx(ms,{size:12,className:yt.checkmark})}),t&&i.jsx("span",{children:t})]})});const Np="_select_dl3mw_3",Dp={select:Np};v.forwardRef(function({options:t,placeholder:n,className:s,...r},o){return i.jsxs("select",{ref:o,className:W(Dp.select,s),...r,children:[n&&i.jsx("option",{value:"",disabled:!0,children:n}),t.map(a=>i.jsx("option",{value:a.value,children:a.label},a.value))]})});const Pp="_overlay_1k4ng_1",Ap="_contentWrapper_1k4ng_7",qp="_dialog_1k4ng_16",$p="_header_1k4ng_28",Bp="_title_1k4ng_36",zp="_body_1k4ng_43",Op="_footer_1k4ng_49",Fp="_bare_1k4ng_58",Wp="_bareBody_1k4ng_64",Lp="_bareCloseBtn_1k4ng_68",Hp="_visuallyHidden_1k4ng_73",he={overlay:Pp,contentWrapper:Ap,dialog:qp,header:$p,title:Bp,body:zp,footer:Op,bare:Fp,bareBody:Wp,bareCloseBtn:Lp,visuallyHidden:Hp},Up=Wt;function Kp({open:e,onOpenChange:t,title:n,children:s,footer:r,width:o,className:a,bare:c=!1}){return i.jsx(no,{open:e,onOpenChange:t,children:i.jsxs(so,{children:[i.jsx(ro,{className:he.overlay}),i.jsx("div",{className:he.contentWrapper,children:i.jsxs(oo,{className:W(he.dialog,c&&he.bare,a),style:o!==void 0?{width:o}:void 0,children:[c?i.jsx(vn,{className:he.visuallyHidden,children:n}):i.jsxs("div",{className:he.header,children:[i.jsx(vn,{className:he.title,children:n}),i.jsx(Wt,{asChild:!0,children:i.jsx(be,{size:"sm","aria-label":"Close",children:i.jsx(Ot,{size:16})})})]}),i.jsx("div",{className:W(he.body,c&&he.bareBody),children:s}),c&&i.jsx(Wt,{asChild:!0,children:i.jsx(be,{size:"sm","aria-label":"Close",className:he.bareCloseBtn,style:{background:"var(--pi-color-surface1)",border:"1px solid var(--pi-color-border)",borderRadius:"50%"},children:i.jsx(Ot,{size:16})})}),r&&i.jsx("div",{className:he.footer,children:r})]})})]})})}const Vp="_handle_1j18v_1",Gp={handle:Vp};function Qn({side:e,onResize:t,className:n}){const s=v.useRef(0),r=v.useCallback(c=>{const l=c.clientX-s.current;s.current=c.clientX,t(e==="left"?l:-l)},[t,e]),o=v.useCallback(c=>{var l,u;window.removeEventListener("pointermove",r),window.removeEventListener("pointerup",o),document.body.style.cursor="",document.body.style.userSelect="",(u=(l=c.target)==null?void 0:l.releasePointerCapture)==null||u.call(l,c.pointerId)},[r]);function a(c){c.preventDefault(),s.current=c.clientX,document.body.style.cursor="col-resize",document.body.style.userSelect="none",window.addEventListener("pointermove",r),window.addEventListener("pointerup",o)}return i.jsx("div",{className:W(Gp.handle,n),onPointerDown:a,role:"separator","aria-orientation":"vertical"})}function Yp(e,t){const{order:n,sessions:s}=N.getState(),o=fn(n,s,t).find(a=>a.cwd===e);if(o!=null&&o.sessions[0]){const a=o.sessions[0].id;N.getState().activate(a);const c=N.getState().sessions[a];T.getState().open({id:V.chat(a),kind:"chat",label:(c==null?void 0:c.title)??"New chat",closable:!0,data:{sessionId:a},workspaceCwd:e})}else Ct(e);M.getState().setCwd(e)}const Xp="_pathRow_1mu84_1",Jp="_pathInput_1mu84_9",Qp="_createRow_1mu84_13",Zp="_createInput_1mu84_21",eh="_createError_1mu84_25",th="_list_1mu84_30",nh="_item_1mu84_37",sh="_name_1mu84_49",xe={pathRow:Xp,pathInput:Jp,createRow:Qp,createInput:Zp,createError:eh,list:th,item:nh,name:sh};function rh(){const e=M(C=>C.cwdPickerOpen),t=M(C=>C.closeCwdPicker),n=T(C=>C.activeWorkspaceCwd),s=M(C=>C.cwd),r=A(C=>C.client),o=it(),[a,c]=v.useState("/"),[l,u]=v.useState("/"),[f,g]=v.useState(!1),[h,m]=v.useState(""),[w,_]=v.useState(null),[p,S]=v.useState(!1),R=Le();v.useEffect(()=>{if(!e)return;const C=Pe(n||s||"~",o);c(C),u(C),K()},[e,r,n,s]);const{data:j,isLoading:z,isError:J,error:G}=ju(a,e&&!!r),D=((j==null?void 0:j.entries)??[]).filter(C=>C.kind==="directory");function K(){g(!1),m(""),_(null)}function se(C){const ie=C.length>1?C.replace(/\/+$/,"")||"/":C;c(ie),u(ie),K()}function re(){se(a.split("/").slice(0,-1).join("/")||"/")}function Q(){se(l.trim())}async function ue(){const C=h.trim();if(!(!C||!r||p)){S(!0),_(null);try{const ie=await pr(r,a,C,"directory");await R.invalidateQueries({queryKey:ke.explorer(a)}),se(ie)}catch(ie){_(ie instanceof Error?ie.message:"Failed to create folder")}finally{S(!1)}}}function dt(){Yp(a,o),t()}return i.jsxs(Kp,{open:e,onOpenChange:C=>!C&&t(),title:"Open Workspace",footer:i.jsxs(i.Fragment,{children:[i.jsx(Up,{asChild:!0,children:i.jsx(ne,{size:"sm",variant:"secondary",children:"Cancel"})}),i.jsx(ne,{size:"sm",onClick:dt,children:"Open this folder"})]}),children:[i.jsxs("div",{className:xe.pathRow,children:[i.jsx(ne,{size:"xs",variant:"ghost",iconOnly:!0,title:"Up",onClick:re,children:i.jsx(Qr,{size:13})}),i.jsx(St,{className:xe.pathInput,value:l,onChange:C=>u(C.target.value),onKeyDown:C=>{C.key==="Enter"&&(C.preventDefault(),Q())}}),i.jsx(ne,{size:"xs",onClick:Q,children:"Go"}),i.jsx(ne,{size:"xs",variant:"ghost",iconOnly:!0,title:"New folder",disabled:!r||J||f,onClick:()=>{g(!0),m(""),_(null)},children:i.jsx(vt,{size:13})})]}),f&&i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:xe.createRow,children:[i.jsx(De,{size:14}),i.jsx(St,{className:xe.createInput,autoFocus:!0,placeholder:"New folder name",value:h,onChange:C=>m(C.target.value),onKeyDown:C=>{C.key==="Enter"?(C.preventDefault(),ue()):C.key==="Escape"&&(C.preventDefault(),C.stopPropagation(),K())}}),i.jsx(ne,{size:"xs",loading:p,disabled:!h.trim()||p,onClick:()=>void ue(),children:"Create"}),i.jsx(ne,{size:"xs",variant:"secondary",onClick:K,children:"Cancel"})]}),w&&i.jsx("div",{className:xe.createError,children:w})]}),i.jsx("div",{className:xe.list,children:z?i.jsx(Me,{children:"Loading..."}):J?i.jsxs(Me,{children:["Error: ",G instanceof Error?G.message:"unknown error"]}):D.length===0?i.jsx(Me,{children:"No subdirectories"}):D.map(C=>i.jsxs("div",{className:xe.item,onClick:()=>se(a==="/"?`/${C.name}`:`${a}/${C.name}`),children:[i.jsx(De,{size:14}),i.jsx("span",{className:xe.name,children:C.name})]},C.name))})]})}const oh="_shell_570m8_1",ah="_main_570m8_7",ih="_sidebarLeft_570m8_13",ch="_leftHandle_570m8_25",lh="_center_570m8_28",dh="_sidebarRight_570m8_35",uh="_rightHandle_570m8_43",Ee={shell:oh,main:ah,sidebarLeft:ih,leftHandle:ch,center:lh,sidebarRight:dh,rightHandle:uh};function fh(){const e=M(a=>a.leftSidebarCollapsed),t=M(a=>a.rightSidebarCollapsed),n=M(a=>a.leftSidebarWidth),s=M(a=>a.rightSidebarWidth),r=M(a=>a.resizeLeftSidebar),o=M(a=>a.resizeRightSidebar);return i.jsxs("div",{className:Ee.shell,children:[i.jsx(Wc,{}),i.jsxs("div",{className:Ee.main,children:[!e&&i.jsxs("aside",{className:Ee.sidebarLeft,style:{width:n},children:[i.jsx(pd,{}),i.jsx(Qn,{side:"left",className:Ee.leftHandle,onResize:r})]}),i.jsx("div",{className:Ee.center,children:i.jsx(Su,{})}),!t&&i.jsxs("aside",{className:Ee.sidebarRight,style:{width:s},children:[i.jsx(Qn,{side:"right",className:Ee.rightHandle,onResize:o}),i.jsx(zf,{})]})]}),i.jsx(Tp,{}),i.jsx(rh,{})]})}function ph(){const e=v.useRef(!1);v.useEffect(()=>{if(e.current)return;if(e.current=!0,window.location.hash.includes("offer=")){const l=window.location.href;M.getState().setHost(l),A.getState().connect({url:l});return}const t=new URLSearchParams(window.location.search),n=t.get("host"),s=t.get("pair"),r=t.get("password"),o=t.get("cwd"),a=t.get("connect")==="1",c=M.getState();if(s?c.setHost(s):n&&c.setHost(n),r&&c.setPassword(r),o&&c.setCwd(o),s)A.getState().connect({url:s});else if(a){const{host:l,password:u}=M.getState();A.getState().connect({url:l,password:u||void 0})}},[])}const mr="pi-studio-pane-layout",hh=250;function mh(){const e=new Map,t={workspaces:e,activeWorkspaceCwd:null},n=on.get(mr);if(!n)return t;let s;try{s=JSON.parse(n)}catch{return t}if(typeof s!="object"||s===null)return t;const r=s;if(r.version!==Ks||typeof r.workspaces!="object"||r.workspaces===null)return t;for(const[a,c]of Object.entries(r.workspaces)){const l=gh(c);l&&e.set(a,l)}const o=r.activeWorkspaceCwd;return{workspaces:e,activeWorkspaceCwd:typeof o=="string"&&e.has(o)?o:null}}function gh(e){if(typeof e!="object"||e===null)return null;const t=e,n=ul(t.tree);if(!n)return null;const s=new Set(ae(n)),r={};for(const[c,l]of Zn(t.placement))s.has(l)&&(r[c]=l);const o={};for(const[c,l]of Zn(t.activeByPane))s.has(c)&&(o[c]=l);const a=t.activePaneId;return{tree:n,placement:r,activeByPane:o,activePaneId:typeof a=="string"&&s.has(a)?a:null}}function Zn(e){return typeof e!="object"||e===null?[]:Object.entries(e).filter(t=>typeof t[1]=="string")}let ye=null;function es(){ye==null||ye();const e=setTimeout(()=>{ye=null,gr()},hh);ye=()=>clearTimeout(e)}function _h(){ye==null||ye(),ye=null,gr()}function gr(){const e=new Map;for(const s of T.getState().tabs){const r=kt(s);r!==null&&e.set(s.id,r)}const t={};for(const[s,r]of Object.entries(P.getState().layouts)){const o={...r.pendingPlacement};for(const[c,l]of Object.entries(r.placement)){const u=e.get(c);u!==void 0&&(o[u]=l)}const a={...r.pendingActive};for(const[c,l]of Object.entries(r.activeByPane)){const u=e.get(l);u!==void 0&&(a[c]=u)}t[s]={tree:r.tree,placement:o,activeByPane:a,activePaneId:r.focusedPaneId}}const n={version:Ks,workspaces:t,activeWorkspaceCwd:T.getState().activeWorkspaceCwd??void 0};on.set(mr,JSON.stringify(n))}function yh(){let e=ts(T.getState().tabs);const t=()=>{const o=ts(T.getState().tabs);o!==e&&(e=o,es())},n=P.subscribe(es),s=T.subscribe(t),r=N.subscribe(t);return()=>{n(),s(),r()}}function ts(e){return e.map(t=>`${t.id}\0${kt(t)??""}`).join("")}const wh=/^diff:(staged|worktree):(.+)$/;function bh(e){for(const[t,n]of e)for(const s of Object.keys(n.placement)){const r=vh(s,t);r!==null&&T.getState().open(r)}}function vh(e,t){const n=ns(e,"file:");if(n!==null)return{id:V.file(n),kind:"file",...zt(n),workspaceCwd:t,data:{path:n}};const s=ns(e,"molecule:");if(s!==null)return{id:V.molecule(s),kind:"molecule",...zt(s),workspaceCwd:t,data:{path:s}};const r=wh.exec(e);if(r!==null){const o=r[2],a=r[1]==="staged";return{id:V.diff(o,a),kind:"diff",...zt(o),workspaceCwd:t,data:{path:o,staged:a}}}return null}function ns(e,t){if(!e.startsWith(t))return null;const n=e.slice(t.length);return n===""?null:n}function zt(e){return{label:e.split("/").pop()||e,closable:!0}}function xh(e){if(e===null)return()=>{};if(rs())return ss(e),()=>{};const t=P.subscribe(()=>{rs()&&(t(),ss(e))});return t}function ss(e){if(P.getState().layouts[e]===void 0||!T.getState().tabs.some(n=>n.workspaceCwd===e))return!1;const t=T.getState().activeWorkspaceCwd!==e;return t&&T.getState().switchWorkspace(e),Sh(e),t}function Sh(e){const t=T.getState().tabs.filter(s=>s.workspaceCwd===e&&s.kind==="chat");if(t.length===0)return;const n=N.getState().activeSessionId;t.some(s=>s.data.sessionId===n)||N.getState().activate(t[0].data.sessionId)}function rs(){const{sessions:e,terminals:t}=P.getState().hydrationSources;return e&&t}const kh={workspaces:new Map,activeWorkspaceCwd:null};function Ih(){const e=A(s=>s.status),t=v.useRef(kh),n=v.useRef(!1);v.useEffect(()=>{const s=mh();t.current=s,P.getState().installPersistedLayouts(s.workspaces,s.activeWorkspaceCwd);const r=yh(),o=()=>_h();return window.addEventListener("pagehide",o),()=>{window.removeEventListener("pagehide",o),r()}},[]),v.useEffect(()=>{if(e!=="open"||n.current)return;n.current=!0;const s=t.current;bh(s.workspaces),xh(s.activeWorkspaceCwd)},[e])}function jh(e){return typeof e=="object"&&e!==null&&"kind"in e}function Th(e){const t=[];for(const n of e)if(jh(n))if(n.kind==="other")n.event&&t.push(n.event);else for(const s of n.events??[])t.push(s);return t}async function Ch(e){const t=[];let n=null;for(;;){const s=await e(n);if(s.items.length===0||(t.push(...Th(s.items)),!s.hasNewer))return t;const r=s.endCursor;if(typeof r!="string"||r===n)return t;n=r}}function Eh(e){return typeof e.model=="string"}function Rh(){const e=A(s=>s.client),t=A(s=>s.status),n=v.useRef(!1);v.useEffect(()=>{t!=="open"||!e||n.current||(n.current=!0,Mh(e))},[t,e]),v.useEffect(()=>{if(!(t!=="open"||!e))return e.onAgentUpdate(s=>{if(Eh(s)){const r=typeof s.modelProvider=="string"?s.modelProvider:void 0;N.getState().setModelByAgentId(s.agentId,s.model,r)}})},[t,e])}async function Mh(e){try{await Nh(e)}finally{P.getState().markHydrationSource("sessions")}}async function Nh(e){var w;let t=[];try{t=(await e.connection.request("list_agents_request",{all:!1})).agents??[]}catch{t=[]}t.sort((_,p)=>(p.lastActivity??0)-(_.lastActivity??0));const n=N.getState();for(const _ of t){if(n.findByAgentId(_.agentId))continue;let p=Kt;try{p=(await Ch(j=>e.agent(_.agentId).timeline.fetch({direction:"after",cursor:j??void 0,limit:200}))).reduce($s,Kt)}catch{}const S=p.rows.length===0;n.hydrate({id:`s-${_.agentId.slice(0,12)}`,agentId:_.agentId,title:_.title||(S?"New chat":(w=_.cwd)==null?void 0:w.split("/").pop())||"Restored",status:_.status??"idle",cwd:_.cwd||"~",timeline:p,userMessageCount:p.rows.filter(R=>R.kind==="user").length,model:_.model,modelProvider:_.modelProvider})}const{order:s,sessions:r}=N.getState(),o=s.length>0?r[s[0]??""]:void 0;if(!o)return;const a=await Et(e).catch(()=>null),c=Pe(o.cwd||"~",a),l=P.getState().pendingActiveWorkspace??c,u=fn(s,r,a);M.getState().setCollapsedWorkspaces(ad(u,l));const f=s.find(_=>{var p;return Pe(((p=r[_])==null?void 0:p.cwd)||"~",a)===l});N.getState().activate(f??o.id),M.getState().setCwd(l);const g=Dh(),h=new Set;for(const _ of s){const p=r[_];!(p!=null&&p.agentId)||!g.has(`agent:${p.agentId}`)||(It(p,a),h.add(_))}const m=P.getState().layouts[c]!==void 0;!h.has(o.id)&&!m&&It(o,a)}function Dh(){const e=new Set;for(const t of Object.values(P.getState().layouts))for(const n of Object.keys(t.pendingPlacement))n.startsWith("agent:")&&e.add(n);return e}async function Ph(e){try{let t=[];try{t=(await e.connection.request("list_terminals_request",{})).terminals??[]}catch{t=[]}if(t.length===0)return;const n=P.getState().layouts,s=Ah(),r=await Et(e).catch(()=>null),o=T.getState().open;for(const a of t){if(a.closed)continue;const c=Pe(a.cwd||"~",r);n[c]!==void 0&&!s.has(`terminal:${a.slot}`)||o({id:V.terminal(a.slot),kind:"terminal",label:a.name,closable:!0,data:{slot:a.slot,cwd:c},workspaceCwd:c})}}finally{P.getState().markHydrationSource("terminals")}}function Ah(){const e=new Set;for(const t of Object.values(P.getState().layouts))for(const n of Object.keys(t.pendingPlacement))n.startsWith("terminal:")&&e.add(n);return e}function qh(){const e=A(s=>s.client),t=A(s=>s.status),n=v.useRef(!1);v.useEffect(()=>{t!=="open"||!e||n.current||(n.current=!0,Ph(e))},[t,e])}function $h(){v.useEffect(()=>{function e(t){const n=M.getState();if(t.key==="Escape"){n.closeCwdPicker(),n.closeSessionMenu();return}const s=t.ctrlKey||t.metaKey;if(s&&t.key.toLowerCase()==="t"){t.preventDefault(),Xs(T.getState().activeWorkspaceCwd||"~");return}if(s&&t.key.toLowerCase()==="w"){const{activeTabId:r,tabs:o}=T.getState();if(!r)return;const a=o.find(c=>c.id===r);(a==null?void 0:a.closable)!==!1&&(t.preventDefault(),Gt(r))}}return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[])}function Bh(){return ph(),Ih(),Rh(),qh(),$h(),null}function zh(){return i.jsxs(aa,{children:[i.jsx(Bh,{}),i.jsx(fh,{})]})}function Oh(e){return e.managerActive?e.status==="closed"?"reconnect-now":e.status==="open"?e.probeInFlight?"none":"probe":"none":"none"}const Fh=5e3;function Wh(){let e=!1;function t(){const{status:s,reconnection:r,daemon:o}=A.getState(),a=Oh({status:s,managerActive:r!==null,probeInFlight:e});if(a==="reconnect-now"){r==null||r.reconnectNow();return}if(a==="probe"){if(!o)return;e=!0,o.ping(Fh).catch(()=>{A.getState().daemon===o&&o.close(4e3,"stale-connection-probe")}).finally(()=>{e=!1})}}function n(){document.visibilityState==="visible"&&t()}return document.addEventListener("visibilitychange",n),window.addEventListener("online",t),()=>{document.removeEventListener("visibilitychange",n),window.removeEventListener("online",t)}}const _r=document.getElementById("root");if(!_r)throw new Error("Missing #root element");Cr.createRoot(_r).render(i.jsx(v.StrictMode,{children:i.jsx(zh,{})}));Wh();export{ne as B,Kp as D,Me as E,ct as M,Js as P,nr as S,Qh as T,rm as V,A as a,it as b,am as c,om as d,Bs as e,Xf as f,Zh as g,nm as h,xt as i,T as j,ml as k,P as l,im as m,Pe as n,em as o,tm as p,Un as q,ke as r,_e as s,Lc as t,N as u,sm as v,hn as w};
|
|
18
|
-
//# sourceMappingURL=index-
|
|
17
|
+
`;function mc(){return{setTimer:(e,t)=>setTimeout(e,t),clearTimer:e=>clearTimeout(e)}}function gc(){const e=new Blob([hc],{type:"application/javascript"}),t=URL.createObjectURL(e),n=new Worker(t);URL.revokeObjectURL(t);const s=new Map;let r=1;return n.addEventListener("message",o=>{const a=s.get(o.data.id);s.delete(o.data.id),a==null||a()}),{setTimer:(o,a)=>{const c=r++;return s.set(c,o),n.postMessage({id:c,ms:a}),c},clearTimer:o=>{const a=o;s.delete(a)&&n.postMessage({id:a,cancel:!0})}}}let Ve=null;function Mn(){if(Ve)return Ve;try{Ve=gc()}catch{Ve=mc()}return Ve}function _c(){return{setTimer:(e,t)=>Mn().setTimer(e,t),clearTimer:e=>Mn().clearTimer(e)}}const yc=32,oe=new Map;function wc(){for(;oe.size>yc;){let e=null;for(const[t,n]of oe)if(n.refs===0&&n.entry){URL.revokeObjectURL(n.entry.objectUrl),e=t;break}if(e===null)return;oe.delete(e)}}function em(e,t){const n=oe.get(e);if(n)return n.refs+=1,oe.delete(e),oe.set(e,n),n.entry?Promise.resolve(n.entry):n.pending;const s={refs:1,entry:null,pending:null};return oe.set(e,s),wc(),s.pending=t(e).then(r=>{const o=new Blob([Uint8Array.from(r.bytes)],{type:r.mimeType||"application/octet-stream"}),a={objectUrl:URL.createObjectURL(o),mimeType:r.mimeType};return oe.get(e)===s?(s.entry=a,s.pending=null):URL.revokeObjectURL(a.objectUrl),a}).catch(r=>{throw oe.get(e)===s&&oe.delete(e),r}),s.pending}function tm(e){const t=oe.get(e);t&&(t.refs=Math.max(0,t.refs-1))}function bc(){for(const e of oe.values())e.entry&&URL.revokeObjectURL(e.entry.objectUrl);oe.clear()}function vc(){return"web-"+Math.random().toString(36).slice(2,10)}const A=Ie()((e,t)=>({status:"idle",serverInfo:null,error:null,daemon:null,client:null,reconnection:null,async connect(n){t().disconnect();const s=pc(n.url);let r;s.mode==="relay"?r=Zi({daemonPublicKey:s.daemonPublicKey}):n.password&&(r=Ms(f=>new WebSocket(f,[`pi-studio.bearer.${n.password}`])));const o=new sc({url:s.url,clientId:n.clientId??vc(),clientType:"browser",capabilities:{[In.inline_image_markdown]:!0,[In.file_link_markdown]:!0},transport:r,rpcTimeoutMs:1800*1e3}),a=new rc(o),{setTimer:c,clearTimer:l}=_c(),u=new fc(o,{setTimer:c,clearTimer:l});o.onStateChange(f=>e({status:f})),u.onReconnected(()=>e({error:null})),u.onReconnectFailed(f=>{e({error:f instanceof Error?f.message:String(f)})}),e({daemon:o,client:a,reconnection:u,error:null,status:"connecting"});try{const f=await o.connect();e({serverInfo:f}),u.start()}catch(f){throw e({error:f instanceof Error?f.message:String(f)}),f}},disconnect(){const{daemon:n,reconnection:s}=t();s==null||s.stop(),n==null||n.close(),bc(),e({status:"idle",serverInfo:null,daemon:null,client:null,reconnection:null})}})),xc=100,Sc=480,kc=220,Ic=280;function gt(e){return Math.min(Sc,Math.max(xc,e))}const M=Ie()(e=>({host:"ws://127.0.0.1:6767",password:"",cwd:"~",cwdPickerOpen:!1,sessionMenu:null,workspaceMenu:null,fileMenu:null,rightSidebarTab:"files",collapsedWorkspaces:new Set,leftSidebarCollapsed:!1,rightSidebarCollapsed:!1,leftSidebarWidth:kc,rightSidebarWidth:Ic,setHost:t=>e({host:t}),setPassword:t=>e({password:t}),setCwd:t=>e({cwd:t}),openCwdPicker:()=>e({cwdPickerOpen:!0}),closeCwdPicker:()=>e({cwdPickerOpen:!1}),openSessionMenu:(t,n,s)=>e({sessionMenu:{sessionId:t,x:n,y:s}}),closeSessionMenu:()=>e({sessionMenu:null}),openWorkspaceMenu:(t,n,s)=>e({workspaceMenu:{cwd:t,x:n,y:s}}),closeWorkspaceMenu:()=>e({workspaceMenu:null}),openFileMenu:(t,n,s,r,o)=>e({fileMenu:{path:t,isDirectory:n,x:s,y:r,background:o}}),closeFileMenu:()=>e({fileMenu:null}),setRightSidebarTab:t=>e({rightSidebarTab:t}),toggleWorkspaceCollapsed:t=>e(n=>{const s=new Set(n.collapsedWorkspaces);return s.has(t)?s.delete(t):s.add(t),{collapsedWorkspaces:s}}),setCollapsedWorkspaces:t=>e({collapsedWorkspaces:t}),toggleLeftSidebar:()=>e(t=>({leftSidebarCollapsed:!t.leftSidebarCollapsed})),toggleRightSidebar:()=>e(t=>({rightSidebarCollapsed:!t.rightSidebarCollapsed})),setLeftSidebarWidth:t=>e({leftSidebarWidth:gt(t)}),setRightSidebarWidth:t=>e({rightSidebarWidth:gt(t)}),resizeLeftSidebar:t=>e(n=>({leftSidebarWidth:gt(n.leftSidebarWidth+t)})),resizeRightSidebar:t=>e(n=>({rightSidebarWidth:gt(n.rightSidebarWidth+t)}))})),jc="_wrap_aquqo_1",Tc="_dot_aquqo_8",Cc="_open_aquqo_15",Ec="_connecting_aquqo_18",Rc="_closed_aquqo_21",Mc="_idle_aquqo_22",Nc="_closing_aquqo_23",Dt={wrap:jc,dot:Tc,open:Cc,connecting:Ec,closed:Rc,idle:Mc,closing:Nc},Dc={idle:"disconnected",connecting:"connecting…",open:"connected",closing:"disconnecting…",closed:"disconnected"};function Pc(){const e=A(n=>n.status),t=A(n=>n.error);return i.jsxs("span",{className:Dt.wrap,title:t??void 0,children:[i.jsx("span",{className:W(Dt.dot,Dt[e])}),Dc[e]??e]})}const Ac="_toolbar_1lcb1_1",qc="_brand_1lcb1_10",$c="_version_1lcb1_16",Bc="_sep_1lcb1_22",zc="_host_1lcb1_28",Oc="_password_1lcb1_31",Fc="_sidebarToggles_1lcb1_34",Te={toolbar:Ac,brand:qc,version:$c,sep:Bc,host:zc,password:Oc,sidebarToggles:Fc};function Wc(){const e=A(h=>h.status),t=A(h=>h.connect),n=A(h=>h.disconnect),s=M(h=>h.host),r=M(h=>h.setHost),o=M(h=>h.password),a=M(h=>h.setPassword),c=M(h=>h.leftSidebarCollapsed),l=M(h=>h.toggleLeftSidebar),u=M(h=>h.rightSidebarCollapsed),f=M(h=>h.toggleRightSidebar),g=e==="open"||e==="connecting";return i.jsxs("div",{className:Te.toolbar,children:[i.jsx("span",{className:Te.brand,children:"Pi-Studio"}),i.jsxs("span",{className:Te.version,children:["v","0.0.71"]}),i.jsx(Pc,{}),i.jsx("div",{className:Te.sep}),i.jsx(St,{className:Te.host,value:s,onChange:h=>r(h.target.value),placeholder:"host:port, ws://…/http://…, or a pasted pairing link",disabled:g}),i.jsx(St,{className:Te.password,type:"password",value:o,onChange:h=>a(h.target.value),placeholder:"password",disabled:g}),e==="open"||e==="connecting"||e==="closing"?i.jsx(ne,{size:"sm",onClick:()=>n(),children:"Disconnect"}):i.jsx(ne,{size:"sm",variant:"default",onClick:()=>void t({url:s,password:o||void 0}),children:"Connect"}),i.jsxs("div",{className:Te.sidebarToggles,children:[i.jsx(ne,{size:"sm",variant:"ghost",iconOnly:!0,title:c?"Show sessions sidebar":"Hide sessions sidebar",onClick:()=>l(),children:c?i.jsx(Pr,{size:16}):i.jsx(Ar,{size:16})}),i.jsx(ne,{size:"sm",variant:"ghost",iconOnly:!0,title:u?"Show files/changes sidebar":"Hide files/changes sidebar",onClick:()=>f(),children:u?i.jsx(qr,{size:16}):i.jsx($r,{size:16})})]})]})}const Kt={rows:[],streamingAssistantIndex:null,streamingReasoningIndex:null,toolIndexByCallId:{}};let Nn=0;function je(){return Nn+=1,`row-${Nn}`}function Lc(e){switch(e.kind){case"shell":return e.command??"";case"read":case"write":return e.path??"";case"edit":return e.path??"";case"search":return e.query??"";case"fetch":return e.url??"";case"task":return e.description??"";default:return""}}function Hc(e,t){return e??`${t.kind}:${Lc(t)}`}function We(e,t){if(t===null)return;const n=e[t];n&&(n.kind!=="assistant"&&n.kind!=="reasoning"||n.streaming&&(e[t]={...n,streaming:!1}))}function qs(e){if(e.streamingAssistantIndex===null&&e.streamingReasoningIndex===null)return e;const t=e.rows.slice();return We(t,e.streamingAssistantIndex),We(t,e.streamingReasoningIndex),{...e,rows:t,streamingAssistantIndex:null,streamingReasoningIndex:null}}function Uc(e){return qs(e)}function Kc(e,t,n){var a;const s=e.rows.slice();We(s,e.streamingReasoningIndex);let r=e.streamingAssistantIndex;if(r===null||((a=s[r])==null?void 0:a.kind)!=="assistant"){if(!t)return{...e,rows:s,streamingAssistantIndex:null,streamingReasoningIndex:null};const c={kind:"assistant",id:je(),text:"",streaming:!0};s.push(c),r=s.length-1}const o=s[r];return!o||o.kind!=="assistant"?e:(s[r]={...o,text:o.text+t,streaming:!n},{...e,rows:s,streamingAssistantIndex:n?null:r,streamingReasoningIndex:null})}function Vc(e,t,n){var a;const s=e.rows.slice();We(s,e.streamingAssistantIndex);let r=e.streamingReasoningIndex;if(r===null||((a=s[r])==null?void 0:a.kind)!=="reasoning"){if(!t)return{...e,rows:s,streamingAssistantIndex:null,streamingReasoningIndex:null};const c={kind:"reasoning",id:je(),text:"",streaming:!0};s.push(c),r=s.length-1}const o=s[r];return!o||o.kind!=="reasoning"?e:(s[r]={...o,text:o.text+t,streaming:!n},{...e,rows:s,streamingReasoningIndex:n?null:r,streamingAssistantIndex:null})}function Gc(e,t){if(e.kind!==t.kind)return t;const n={...e};for(const[s,r]of Object.entries(t))r!==void 0&&r!==""&&(n[s]=r);return n}function Yc(e,t){var c;const n=Hc(t.callId,t.tool),s=t.status==="completed"||t.status==="error"?t.status:"running",r=e.toolIndexByCallId[n],o=e.rows.slice();if(We(o,e.streamingAssistantIndex),We(o,e.streamingReasoningIndex),r!==void 0&&((c=o[r])==null?void 0:c.kind)==="tool"){const l=o[r];return l.kind!=="tool"?e:(o[r]={...l,tool:Gc(l.tool,t.tool),status:s},{...e,rows:o,streamingAssistantIndex:null,streamingReasoningIndex:null})}const a={kind:"tool",id:je(),callId:n,tool:t.tool,status:s};return o.push(a),{...e,rows:o,toolIndexByCallId:{...e.toolIndexByCallId,[n]:o.length-1},streamingAssistantIndex:null,streamingReasoningIndex:null}}function an(e){return qs(e)}function Xc(e,t){const n=an(e),s={kind:"error",id:je(),text:t||"turn failed"};return{...n,rows:[...n.rows,s]}}function Jc(e){const t=an(e),n={kind:"system",id:je(),text:"(canceled)"};return{...t,rows:[...t.rows,n]}}function Qc(e,t){const n={kind:"error",id:je(),text:t||"error"};return{...e,rows:[...e.rows,n]}}function Zc(e,t,n,s){if(s!==void 0){const o=e.rows.findIndex(a=>a.kind==="user"&&a.pending&&a.clientMessageId===s);if(o!==-1){const a=e.rows.slice(),c=a[o];if((c==null?void 0:c.kind)==="user")return a[o]={...c,text:t,images:n,pending:!1},{...e,rows:a}}}const r={kind:"user",id:je(),text:t,images:n,clientMessageId:s};return{...e,rows:[...e.rows,r]}}function el(e,t){let n=!1;const s=e.rows.map(r=>r.kind!=="user"||!r.queued||t.includes(r.text)?r:(n=!0,{...r,queued:!1}));return n?{...e,rows:s}:e}function $s(e,t){switch(t.kind){case"turn_started":return Uc(e);case"user_message":return Zc(e,t.text??"",t.images,t.messageId);case"assistant_message":return Kc(e,t.text??"",t.final??!1);case"reasoning":return Vc(e,t.text??"",t.final??!1);case"tool_call":return Yc(e,t);case"turn_completed":return an(e);case"turn_failed":return Xc(e,t.error);case"turn_canceled":return Jc(e);case"error":return Qc(e,t.message);case"queue_update":return el(e,t.steering??[]);default:return e}}function tl(e,t,n,s,r){const o={kind:"user",id:je(),text:n,images:s,clientMessageId:t,pending:!0,queued:r};return{...e,rows:[...e.rows,o]}}function nl(e,t){const n=e.rows.findIndex(o=>o.kind==="user"&&o.pending&&o.clientMessageId===t);if(n===-1)return e;const s=e.rows.slice(),r=s[n];return(r==null?void 0:r.kind)!=="user"?e:(s[n]={...r,pending:!1,failed:!0},{...e,rows:s})}let Dn=0;function sl(){return Dn+=1,`s-${Date.now().toString(36)}-${Dn}`}const N=Ie()((e,t)=>({sessions:{},order:[],activeSessionId:null,createSession(n){const s=sl(),r={id:s,agentId:null,title:"New chat",status:"idle",cwd:n,timeline:Kt,userMessageCount:0};return e(o=>({sessions:{...o.sessions,[s]:r},order:[s,...o.order],activeSessionId:s})),s},hydrate(n){e(s=>s.sessions[n.id]?s:{sessions:{...s.sessions,[n.id]:n},order:[...s.order,n.id]})},bindAgent(n,s){e(r=>{const o=r.sessions[n];return o?{sessions:{...r.sessions,[n]:{...o,agentId:s}}}:r})},setStatus(n,s){e(r=>{const o=r.sessions[n];return o?{sessions:{...r.sessions,[n]:{...o,status:s}}}:r})},setStatusByAgentId(n,s){const r=t().findByAgentId(n);r&&t().setStatus(r.id,s)},setModel(n,s,r){e(o=>{const a=o.sessions[n];return a?{sessions:{...o.sessions,[n]:{...a,model:s,modelProvider:r}}}:o})},setModelByAgentId(n,s,r){const o=t().findByAgentId(n);o&&t().setModel(o.id,s,r)},setTitle(n,s){e(r=>{const o=r.sessions[n];return o?{sessions:{...r.sessions,[n]:{...o,title:s}}}:r})},setCwd(n,s){e(r=>{const o=r.sessions[n];return o?{sessions:{...r.sessions,[n]:{...o,cwd:s}}}:r})},applyStreamEvent(n,s){e(r=>{const o=r.sessions[n];if(!o)return r;const a=$s(o.timeline,s);let c=o.title;if(s.kind==="turn_completed"&&c==="New chat"){const l=a.rows.slice().reverse().find(u=>u.kind==="assistant");l&&l.kind==="assistant"&&l.text&&(c=l.text.slice(0,40)+(l.text.length>40?"…":""))}return{sessions:{...r.sessions,[n]:{...o,timeline:a,title:c}}}})},addOptimisticUserMessage(n,s,r,o,a){e(c=>{const l=c.sessions[n];if(!l)return c;const u=tl(l.timeline,s,r,o,a);return{sessions:{...c.sessions,[n]:{...l,timeline:u,userMessageCount:l.userMessageCount+1}}}})},markUserMessageFailed(n,s){e(r=>{const o=r.sessions[n];if(!o)return r;const a=nl(o.timeline,s);return{sessions:{...r.sessions,[n]:{...o,timeline:a}}}})},activate(n){e({activeSessionId:n})},remove(n){e(s=>{const{[n]:r,...o}=s.sessions,a=s.order.filter(l=>l!==n),c=s.activeSessionId===n?a[0]??null:s.activeSessionId;return{sessions:o,order:a,activeSessionId:c}})},findByAgentId(n){return Object.values(t().sessions).find(s=>s.agentId===n)}})),Pn=new WeakMap;function rl(e,t="pi"){const n=Pn.get(e);if(n)return n;const s=e.providers.resolveDefaultModel(t).then(r=>({model:r.model,modelProvider:r.modelProvider})).catch(()=>({}));return Pn.set(e,s),s}const bt=new Map;function Bs(e,t){const n=N.getState().sessions[t];if(!n)return Promise.reject(new Error(`unknown session: ${t}`));if(n.agentId)return Promise.resolve(n.agentId);const s=bt.get(t);if(s)return s;const r=(async()=>{if(!n.model){const l=await rl(e),u=N.getState().sessions[t];l.model&&u&&!u.model&&N.getState().setModel(t,l.model,l.modelProvider)}const o=N.getState().sessions[t];if(!o)throw new Error(`unknown session: ${t}`);const a={provider:"pi",cwd:o.cwd||"~"};o.model&&(a.model=o.model),o.modelProvider&&(a.modelProvider=o.modelProvider);const c=await e.createAgent({config:a,labels:{}});return N.getState().bindAgent(t,c.agentId),c.agentId})();return bt.set(t,r),r.finally(()=>bt.delete(t)),r}async function ol(e,t){var r;const n=N.getState().sessions[t];if(!n||n.userMessageCount>0||n.timeline.rows.length>0)return!1;await((r=bt.get(t))==null?void 0:r.catch(()=>{}));const s=N.getState().sessions[t];return s?(s.agentId&&e&&await e.agent(s.agentId).delete().catch(()=>{}),N.getState().remove(t),!0):!1}const al=4;function zs(e){return e==="left"||e==="right"?"row":"column"}function ae(e){return e.kind==="leaf"?[e.id]:e.children.flatMap(ae)}function cn(e,t){return e.kind==="leaf"?e.id===t:e.children.some(n=>cn(n,t))}function Os(e,t,n=1){if(e.kind==="leaf")return e.id===t?n:null;for(const s of e.children){const r=Os(s,t,n+1);if(r!==null)return r}return null}function Fs(e,t){if(e.kind==="leaf")return null;if(ln(e,t)!==-1)return e;for(const n of e.children){const s=Fs(n,t);if(s)return s}return null}function ln(e,t){return e.children.findIndex(n=>n.kind==="leaf"&&n.id===t)}function nt(e,t,n){const s=Os(e,t);if(s===null)return!1;const r=Fs(e,t);return r&&r.direction===zs(n)?!0:s+1<=al}function An(e,t,n,s){if(!nt(e,t,n)||cn(e,s))return e;const r=zs(n),o=n==="left"||n==="top",a={kind:"leaf",id:s},c=u=>({kind:"split",direction:r,children:o?[a,u]:[u,a],sizes:[.5,.5]}),l=u=>{if(u.kind==="leaf")return u.id===t?c(u):u;const f=ln(u,t);if(f!==-1&&u.direction===r){const g=u.sizes[f]/2,h=o?f:f+1,m=u.children.slice(),w=u.sizes.slice();return w[f]=g,m.splice(h,0,a),w.splice(h,0,g),{kind:"split",direction:u.direction,children:m,sizes:w}}return{kind:"split",direction:u.direction,children:u.children.map(l),sizes:u.sizes.slice()}};return l(e)}function Ws(e,t){if(!cn(e,t)||e.kind==="leaf")return e;const n=s=>{if(s.kind==="leaf")return s;const r=ln(s,t);if(r===-1)return{kind:"split",direction:s.direction,children:s.children.map(n),sizes:s.sizes.slice()};const o=s.sizes.filter((l,u)=>u!==r),a=o.reduce((l,u)=>l+u,0),c=a+s.sizes[r];return{kind:"split",direction:s.direction,children:s.children.filter((l,u)=>u!==r),sizes:o.map(l=>l/a*c)}};return Ls(n(e))}function Ls(e){if(e.kind==="leaf")return e;const t=e.children.map(Ls);if(t.length===1)return t[0];const n=[],s=[];return t.forEach((r,o)=>{const a=e.sizes[o];r.kind==="split"&&r.direction===e.direction?r.children.forEach((c,l)=>{n.push(c),s.push(a*r.sizes[l])}):(n.push(r),s.push(a))}),n.length===1?n[0]:{kind:"split",direction:e.direction,children:n,sizes:s}}const qn=.1;function il(e){const t=new Map,n=(s,r)=>{if(s.kind==="leaf"){t.set(s.id,r);return}Hs(s,r).forEach((o,a)=>n(s.children[a],o))};return n(e,{x:0,y:0,width:1,height:1}),t}function Hs(e,t){const n=[];let s=0;for(const r of e.sizes)n.push(e.direction==="row"?{x:t.x+s*t.width,y:t.y,width:r*t.width,height:t.height}:{x:t.x,y:t.y+s*t.height,width:t.width,height:r*t.height}),s+=r;return n}function cl(e){const t=[],n=(s,r,o)=>{if(s.kind==="leaf")return;const a=Hs(s,r);for(let c=0;c<s.children.length-1;c+=1){const l=a[c];t.push({splitPath:o.slice(),boundaryIndex:c,direction:s.direction,rect:s.direction==="row"?{x:l.x+l.width,y:r.y,width:0,height:r.height}:{x:r.x,y:l.y+l.height,width:r.width,height:0},splitRect:r})}a.forEach((c,l)=>n(s.children[l],c,[...o,l]))};return n(e,{x:0,y:0,width:1,height:1},[]),t}function ll(e,t){let n=e;for(const s of t){if(!n||n.kind!=="split")return null;n=n.children[s]}return n??null}function dl(e,t,n,s){const r=ll(e,t);if(!r||r.kind!=="split"||n<0||n>r.children.length-2||!Number.isFinite(s)||s===0)return e;const o=r.sizes[n],a=r.sizes[n+1],c=a-Math.min(a,qn),l=o-Math.min(o,qn),u=Math.max(-l,Math.min(c,s));if(u===0)return e;const f=h=>{const m=h.sizes.slice();return m[n]=o+u,m[n+1]=a-u,{kind:"split",direction:h.direction,children:h.children,sizes:m}},g=(h,m)=>{if(h.kind!=="split")return h;if(m===t.length)return f(h);const w=t[m],_=h.children.slice();return _[w]=g(h.children[w],m+1),{kind:"split",direction:h.direction,children:_,sizes:h.sizes.slice()}};return g(e,0)}function Us(e,t){const n=ae(e).filter(s=>!t.has(s));return n.length===0?e:n.reduce((s,r)=>Ws(s,r),e)}const Ks=1;function ul(e){return Vs(e,new Set)}function Vs(e,t){if(typeof e!="object"||e===null)return null;const n=e;if(n.kind==="leaf"){const{id:o}=n;return typeof o!="string"||o.trim()===""||t.has(o)?null:(t.add(o),{kind:"leaf",id:o})}if(n.kind!=="split"||n.direction!=="row"&&n.direction!=="column"||!Array.isArray(n.children)||!Array.isArray(n.sizes)||n.children.length<2||n.sizes.length!==n.children.length)return null;let s=0;for(const o of n.sizes){if(typeof o!="number"||!Number.isFinite(o)||o<=0)return null;s+=o}const r=[];for(const o of n.children){const a=Vs(o,t);if(!a)return null;r.push(a)}return{kind:"split",direction:n.direction,children:r,sizes:n.sizes.map(o=>o/s)}}const fl=["sessions","terminals"];function Vt(){return`pane-${crypto.randomUUID()}`}function $n(){const e=Vt();return{tree:{kind:"leaf",id:e},placement:{},activeByPane:{},focusedPaneId:e,pendingPlacement:{},pendingActive:{},userActedPanes:new Set}}function Gs(e,t,n){return(n??Object.keys(e.placement)).filter(r=>e.placement[r]===t)}function Ys(e,t,n,s){const r=Gs(e,t,s),o=r.indexOf(n),a=r.filter(c=>c!==n);if(a.length!==0)return a[Math.min(Math.max(o,0),a.length-1)]}function pl(e,t){return e.pendingActive[t]!==void 0?!0:Object.values(e.pendingPlacement).includes(t)}function dn(e,t){if(pl(e,t))return e;const n=Ws(e.tree,t);if(n===e.tree)return e;const s={...e.activeByPane};delete s[t];const r=ae(n);return{...e,tree:n,activeByPane:s,focusedPaneId:r.includes(e.focusedPaneId)?e.focusedPaneId:r[0]}}function _t(e,t,n,s){const r=e.placement[t],o={...e.placement,[t]:n},a={...e.activeByPane};if(s.activate&&(a[n]=t),r!==void 0&&r!==n&&a[r]===t){const u=Ys(e,r,t,s.order);u===void 0?delete a[r]:a[r]=u}const c={...e,placement:o,activeByPane:a,focusedPaneId:s.focus?n:e.focusedPaneId};return r!==void 0&&r!==n&&!Object.values(o).includes(r)?dn(c,r):c}function Ae(e,t){return e.userActedPanes.has(t)?e:{...e,userActedPanes:new Set(e.userActedPanes).add(t)}}function hl(e){let t={...e,pendingPlacement:{},pendingActive:{}};const n=new Set(Object.values(t.placement));for(const o of ae(t.tree))n.has(o)||(t=dn(t,o));const s={...t.activeByPane};let r=!1;for(const o of ae(t.tree)){if(s[o]!==void 0)continue;const a=Object.keys(t.placement).find(c=>t.placement[c]===o);a!==void 0&&(s[o]=a,r=!0)}return r?{...t,activeByPane:s}:t}function ml(e,t){if(e===void 0)return!1;const n=e.placement[t];return n!==void 0&&e.activeByPane[n]===t}const P=Ie()((e,t)=>{const n=(s,r)=>{e(o=>{const a=o.layouts[s]??$n(),c=r(a)??a;return c===o.layouts[s]?o:{layouts:{...o.layouts,[s]:c}}})};return{layouts:{},hydrationSources:{sessions:!1,terminals:!1},restoring:!1,pendingActiveWorkspace:null,ensureWorkspace(s){e(r=>r.layouts[s]?r:{layouts:{...r.layouts,[s]:$n()}})},assignTab(s,r,o,a,c){n(s,l=>{const u=ae(l.tree),f=o!==void 0&&u.includes(o)?o:u.includes(l.focusedPaneId)?l.focusedPaneId:u[0],g=a!==!0,h=_t(l,r,f,{activate:g,focus:g,order:c});return g?Ae(h,f):h})},moveTab(s,r,o,a){n(s,c=>{if(c.placement[r]===void 0||c.placement[r]===o||!ae(c.tree).includes(o))return null;const l=_t(c,r,o,{activate:!0,focus:!0,order:a});return Ae(l,o)})},splitWithTab(s,r,o,a,c){n(s,l=>{if(!ae(l.tree).includes(o)||!nt(l.tree,o,a))return null;const u=Gs(l,o,c);if(u.length===1&&u[0]===r)return null;const f=Vt(),g=An(l.tree,o,a,f);if(g===l.tree)return null;const h=_t({...l,tree:g},r,f,{activate:!0,focus:!0,order:c});return Ae(h,f)})},splitEmpty(s,r,o){let a=null;return n(s,c=>{if(!ae(c.tree).includes(r)||!nt(c.tree,r,o))return null;const l=Vt(),u=An(c.tree,r,o,l);return u===c.tree?null:(a=l,{...c,tree:u,focusedPaneId:l})}),a},removeTab(s,r,o){n(s,a=>{const c=a.placement[r];if(c===void 0)return null;const l={...a.placement};delete l[r];const u={...a.activeByPane};if(u[c]===r){const g=Ys(a,c,r,o);g===void 0?delete u[c]:u[c]=g}const f={...a,placement:l,activeByPane:u};return Object.values(l).includes(c)?f:dn(f,c)})},setActiveTab(s,r,o){n(s,a=>a.placement[o]!==r?null:a.activeByPane[r]===o?Ae(a,r):Ae({...a,activeByPane:{...a.activeByPane,[r]:o}},r))},focusPane(s,r){n(s,o=>o.focusedPaneId===r||!ae(o.tree).includes(r)?null:{...o,focusedPaneId:r})},resizeDivider(s,r,o,a){n(s,c=>{const l=dl(c.tree,r,o,a);return l===c.tree?null:{...c,tree:l}})},installPersistedLayouts(s,r=null){e(o=>{const a={...o.layouts};for(const[c,l]of s){const u=ae(l.tree);a[c]={tree:l.tree,placement:{},activeByPane:{},focusedPaneId:l.activePaneId!==null&&u.includes(l.activePaneId)?l.activePaneId:u[0],pendingPlacement:{...l.placement},pendingActive:{...l.activeByPane},userActedPanes:new Set}}return{layouts:a,hydrationSources:{sessions:!1,terminals:!1},restoring:!0,pendingActiveWorkspace:r!==null&&a[r]!==void 0?r:null}})},claimPaneFor(s,r,o,a){n(s,c=>{const l=ae(c.tree);let u,f=!1;if(a!==void 0&&l.includes(a))u=a;else if(o!==null){const w=c.pendingPlacement[o];w!==void 0&&l.includes(w)&&(u=w,f=!0)}u??(u=l.includes(c.focusedPaneId)?c.focusedPaneId:l[0]);let g=c;if(f&&o!==null){const w={...c.pendingPlacement};delete w[o],g={...c,pendingPlacement:w}}let h=!0;if(f){const w=g.pendingActive[u];g.userActedPanes.has(u)?h=!1:w!==void 0&&w!==o&&(h=g.activeByPane[u]===void 0)}else t().restoring&&(h=g.activeByPane[u]===void 0);const m=_t(g,r,u,{activate:h,focus:!f&&h});return f?m:Ae(m,u)})},markHydrationSource(s){e(r=>{if(r.hydrationSources[s])return r;const o={...r.hydrationSources,[s]:!0};if(!fl.every(c=>o[c]))return{hydrationSources:o};const a={};for(const[c,l]of Object.entries(r.layouts))a[c]=hl(l);return{hydrationSources:o,layouts:a,restoring:!1,pendingActiveWorkspace:null}})},paneOfTab(s,r){var o;return((o=t().layouts[s])==null?void 0:o.placement[r])??null},activeTabOf(s){const r=t().layouts[s];return r?r.activeByPane[r.focusedPaneId]??null:null}}});function gl(e,t){return e.filter(n=>n.workspaceCwd===t)}function _l(e,t){return gl(e,t).map(n=>n.id)}function Ze(e){const t=e===null?null:P.getState().activeTabOf(e);if(T.setState({activeTabId:t,activeWorkspaceCwd:e}),t!==null)return T.getState().tabs.find(n=>n.id===t)}function et(e){(e==null?void 0:e.kind)==="chat"&&N.getState().activate(e.data.sessionId)}const T=Ie()((e,t)=>({tabs:[],activeTabId:null,activeWorkspaceCwd:null,open(n,s){const r=t().tabs.find(a=>a.id===n.id);if(r){t().activate(r.id);return}e(a=>({tabs:[...a.tabs,n]}));const o=P.getState();o.ensureWorkspace(n.workspaceCwd),o.claimPaneFor(n.workspaceCwd,n.id,kt(n),s),et(Ze(n.workspaceCwd))},close(n){const s=t().tabs.find(c=>c.id===n);if(!s)return;const r=_l(t().tabs,s.workspaceCwd),o=t().activeTabId;e(c=>({tabs:c.tabs.filter(l=>l.id!==n)})),P.getState().removeTab(s.workspaceCwd,n,r);const a=Ze(t().activeWorkspaceCwd);t().activeTabId!==o&&et(a)},activate(n){const s=t().tabs.find(a=>a.id===n);if(!s)return;const r=P.getState();r.ensureWorkspace(s.workspaceCwd);const o=r.paneOfTab(s.workspaceCwd,n);o===null?r.claimPaneFor(s.workspaceCwd,n,kt(s)):(r.focusPane(s.workspaceCwd,o),r.setActiveTab(s.workspaceCwd,o,n)),et(Ze(s.workspaceCwd))},switchWorkspace(n){P.getState().ensureWorkspace(n),et(Ze(n))},reorder(n,s){e(r=>{const o=r.tabs.findIndex(u=>u.id===n),a=r.tabs.findIndex(u=>u.id===s);if(o===-1||a===-1||o===a)return r;const c=r.tabs.slice(),[l]=c.splice(o,1);return l?(c.splice(a,0,l),{tabs:c}):r})},updateLabel(n,s){e(r=>({tabs:r.tabs.map(o=>o.id===n?{...o,label:s}:o)}))},updateData(n,s){e(r=>({tabs:r.tabs.map(o=>o.id===n?{...o,data:{...o.data,...s}}:o)}))},closeByPathPrefix(n){const s=t().tabs.filter(r=>{if(r.kind!=="file"&&r.kind!=="diff"&&r.kind!=="molecule")return!1;const o=r.data.path;return o===n||((o==null?void 0:o.startsWith(`${n}/`))??!1)});for(const r of s)t().close(r.id)}}));function kt(e){var t;switch(e.kind){case"chat":{const{sessionId:n}=e.data,s=(t=N.getState().sessions[n])==null?void 0:t.agentId;return s?`agent:${s}`:null}case"file":return`file:${e.data.path}`;case"diff":{const{path:n,staged:s}=e.data;return`diff:${s?"staged":"worktree"}:${n}`}case"terminal":{const{slot:n}=e.data;return n===null?null:`terminal:${n}`}case"molecule":{const{path:n}=e.data;return n===null?null:`molecule:${n}`}}}function nm(e){const t=T(n=>{var s;return((s=n.tabs.find(r=>r.id===e))==null?void 0:s.workspaceCwd)===n.activeWorkspaceCwd?n.activeWorkspaceCwd:null});return P(n=>t===null?!1:ml(n.layouts[t],e))}const V={chat:e=>`chat-${e}`,file:e=>`file-${e}`,diff:(e,t)=>`diff-${e}${t?"-staged":""}`,terminal:e=>`term-${e}`,molecule:e=>`mol-${e}`};let Pt=0;function Xs(e,t){Pt+=1,T.getState().open({id:V.terminal(`new-${Pt}`),kind:"terminal",label:`Terminal ${Pt}`,closable:!0,data:{slot:null,cwd:e},workspaceCwd:e},t)}let At=0;function yl(e,t){At+=1,T.getState().open({id:V.molecule(`new-${At}`),kind:"molecule",label:`Molecule ${At}`,closable:!0,data:{path:null},workspaceCwd:e},t)}function Ct(e,t){const n=N.getState().createSession(e);T.getState().open({id:V.chat(n),kind:"chat",label:"New chat",closable:!0,data:{sessionId:n},workspaceCwd:e},t);const s=A.getState().client;s&&Bs(s,n).catch(()=>{})}function Gt(e){const t=T.getState().tabs.find(s=>s.id===e);if(T.getState().close(e),(t==null?void 0:t.kind)!=="chat")return;const{sessionId:n}=t.data;ol(A.getState().client,n)}P.subscribe(()=>{const{activeWorkspaceCwd:e,activeTabId:t}=T.getState();e!==null&&P.getState().activeTabOf(e)!==t&&et(Ze(e))});const wl="_panel_1de7t_3",bl={panel:wl};function Js({className:e,...t}){return i.jsx("div",{className:W(bl.panel,e),...t})}const vl="_emptyState_kp50e_3",xl={emptyState:vl};function Me({className:e,...t}){return i.jsx("div",{className:W(xl.emptyState,e),...t})}const Z=Ie()(e=>({rootPath:"",expanded:new Set,expandedByRoot:new Map,draft:null,renaming:null,selected:null,setRoot:t=>e(n=>{const s=new Map(n.expandedByRoot);n.rootPath&&s.set(n.rootPath,n.expanded);const r=s.get(t),o=new Set(r);return o.add(t),{rootPath:t,expanded:o,expandedByRoot:s,draft:null,selected:null,renaming:null}}),toggle:t=>e(n=>{if(t===n.rootPath)return n;const s=new Set(n.expanded);s.has(t)?s.delete(t):s.add(t);const r=new Map(n.expandedByRoot);return r.set(n.rootPath,s),{expanded:s,expandedByRoot:r}}),startDraft:(t,n)=>e(s=>{const r=new Set(s.expanded);r.add(t);const o=new Map(s.expandedByRoot);return s.rootPath&&o.set(s.rootPath,r),{draft:{parentPath:t,kind:n},expanded:r,expandedByRoot:o,renaming:null}}),cancelDraft:()=>e({draft:null}),startRename:t=>e({renaming:t,draft:null}),cancelRename:()=>e({renaming:null}),setSelected:t=>e({selected:t}),repathAfterMove:(t,n,s)=>e(r=>{const o=u=>u===t?n:u.startsWith(`${t}/`)?n+u.slice(t.length):u,a=new Set([...r.expanded].map(o));a.add(s);const c=new Map(r.expandedByRoot);r.rootPath&&c.set(r.rootPath,a);const l=r.selected?{path:o(r.selected.path),isDirectory:r.selected.isDirectory}:null;return{expanded:a,expandedByRoot:c,selected:l,renaming:null}})}));let ze=null;const Yt=new Set;function Sl(e){return Yt.add(e),()=>Yt.delete(e)}async function Et(e){var t;if(ze)return ze;try{const n=await e.connection.request("file_explorer_request",{path:"/home"}),r=(((t=n.result)==null?void 0:t.entries)??n.entries??[]).find(o=>o.kind==="directory"||o.type==="directory");ze="/home/"+((r==null?void 0:r.name)||"user")}catch{return"/tmp"}for(const n of Yt)n(ze);return ze}function kl(){return ze}async function Il(e,t){return t==="~"||t.startsWith("~/")?await Et(e)+t.slice(1):t}function it(){const e=A(r=>r.client),t=A(r=>r.status),[n,s]=v.useState(kl());return v.useEffect(()=>Sl(s),[]),v.useEffect(()=>{!e||t!=="open"||n||Et(e)},[e,t,n]),n}const jl="_iconBtn_1unr3_3",Tl="_xs_1unr3_32",Cl="_sm_1unr3_36",Bn={iconBtn:jl,xs:Tl,sm:Cl};function be({size:e="xs",hoverBase:t,className:n,style:s,type:r="button",...o}){return i.jsx("button",{type:r,className:W(Bn.iconBtn,Bn[e],n),style:t?{"--icon-btn-hover-base":t,...s}:s,...o})}const El="_dot_1mn1j_3",Rl="_spinner_1mn1j_16",zn={dot:El,spinner:Rl};function Ml(e){const{status:t,requiresAttention:n,attentionReason:s,showInactive:r}=e;if(!t)return null;if(n)switch(s){case"permission":return"statusWarning";case"error":return"statusDanger";case"finished":default:return"statusSuccess"}switch(t){case"running":case"queued":return"accent";case"waiting":return"statusWarning";case"finished":return"statusSuccess";case"error":return"statusDanger";case"idle":case"archived":return r?"foregroundMuted":null}}const On=8,Nl={accent:"var(--pi-color-accent)",statusSuccess:"var(--pi-color-statusSuccess)",statusDanger:"var(--pi-color-statusDanger)",statusWarning:"var(--pi-color-statusWarning)",foregroundMuted:"var(--pi-color-foregroundMuted)"};function Dl({className:e,...t}){const n=Ml(t);if(!n)return null;const s=t.status==="running"&&!t.requiresAttention,r=s?"var(--pi-color-accentBright, #a2b4d7)":Nl[n]??"currentColor";return i.jsx("span",{className:`${s?zn.spinner:zn.dot}${e?` ${e}`:""}`,style:s?{borderTopColor:r,borderRightColor:r}:{width:On,height:On,backgroundColor:r},role:"presentation"})}const Pl={initializing:"queued",idle:"idle",running:"running",error:"error",closed:"finished"};function Al(e){return Pl[e]??"idle"}const ql="_header_z4gra_1",$l="_openBtn_z4gra_9",Bl="_list_z4gra_21",zl="_item_z4gra_26",Ol="_active_z4gra_39",Fl="_title_z4gra_43",Wl="_meta_z4gra_52",Ll="_menuBtn_z4gra_60",Hl="_workspaceGroup_z4gra_69",Ul="_workspaceHeader_z4gra_72",Kl="_workspaceChevron_z4gra_97",Vl="_workspaceIcon_z4gra_105",Gl="_workspaceLabel_z4gra_109",Yl="_workspaceCount_z4gra_115",Xl="_workspaceMenuBtn_z4gra_120",Jl="_workspaceSessions_z4gra_127",Y={header:ql,openBtn:$l,list:Bl,item:zl,active:Ol,title:Fl,meta:Wl,menuBtn:Ll,workspaceGroup:Hl,workspaceHeader:Ul,workspaceChevron:Kl,workspaceIcon:Vl,workspaceLabel:Gl,workspaceCount:Yl,workspaceMenuBtn:Xl,workspaceSessions:Jl};function Ql({session:e,active:t,draggable:n,onSelect:s,onOpenMenu:r,onDragStartRow:o}){return i.jsxs("div",{className:W(Y.item,t&&Y.active),draggable:n,onDragStart:o,onClick:s,onContextMenu:a=>{a.preventDefault(),r(a.clientX,a.clientY)},children:[i.jsxs("div",{className:Y.title,children:[i.jsx(Dl,{status:Al(e.status),showInactive:!0}),i.jsx("span",{children:e.title})]}),i.jsxs("div",{className:Y.meta,children:[e.cwd||"~"," · ",e.agentId?e.agentId.slice(0,8):"new"," ·"," ",e.userMessageCount," msgs"]}),i.jsx(be,{className:Y.menuBtn,hoverBase:"var(--pi-color-surfaceSidebar)",title:"Actions",onClick:a=>{a.stopPropagation();const c=a.currentTarget.getBoundingClientRect();r(c.left,c.bottom)},children:i.jsx(Zt,{size:14})})]})}const Zl="_trigger_cd29a_3",ed="_content_cd29a_15",td="_item_cd29a_25",nd="_danger_cd29a_44",sd="_sep_cd29a_48",st={trigger:Zl,content:ed,item:td,danger:nd,sep:sd},un=v.forwardRef(function({x:t,y:n},s){return i.jsx("button",{ref:s,type:"button",className:st.trigger,style:{left:t,top:n},"aria-hidden":!0,tabIndex:-1})});function ct({className:e,minWidth:t,style:n,sideOffset:s=2,...r}){const o=t===void 0?n:{minWidth:t,...n};return i.jsx(Zr,{children:i.jsx(eo,{className:W(st.content,e),align:"start",sideOffset:s,style:o,...r})})}function L({className:e,danger:t,...n}){return i.jsx(gs,{className:W(st.item,t&&st.danger,e),...n})}function Re(e){return i.jsx(to,{className:st.sep,...e})}function rd(){const e=M(w=>w.sessionMenu),t=M(w=>w.closeSessionMenu),n=A(w=>w.client),s=v.useRef(null),[r,o]=v.useState(!1);v.useEffect(()=>{o(e!==null)},[e]);const a=N(w=>e?w.sessions[e.sessionId]:void 0);if(!e)return null;const c=!!(a!=null&&a.agentId)&&(a==null?void 0:a.status)==="running";function l(w){o(w),w||t()}function u(){if(!a)return;const w=window.prompt("Rename:",a.title);if(w!=null&&w.trim()){const _=w.trim();N.getState().setTitle(a.id,_),T.getState().updateLabel(V.chat(a.id),_),a.agentId&&(n==null||n.agent(a.agentId).update({title:_}).catch(()=>{}))}t()}function f(){a!=null&&a.agentId&&(n==null||n.agent(a.agentId).interrupt().catch(()=>{})),t()}function g(w){N.getState().remove(w),T.getState().close(V.chat(w))}async function h(){if(a){if(!window.confirm("Archive this agent? It can be resumed later."))return t();if(t(),!a.agentId){g(a.id);return}if(!n){window.alert("Not connected — cannot archive remotely.");return}try{await n.agent(a.agentId).archive(),g(a.id)}catch(w){window.alert(`Failed to archive: ${w instanceof Error?w.message:String(w)}`)}}}async function m(){if(a){if(!window.confirm("Permanently delete this agent? This cannot be undone."))return t();if(t(),!a.agentId){g(a.id);return}if(!n){window.alert("Not connected — cannot delete remotely.");return}try{await n.agent(a.agentId).delete(),g(a.id)}catch(w){window.alert(`Failed to delete: ${w instanceof Error?w.message:String(w)}`)}}}return i.jsxs(ot,{open:r,onOpenChange:l,modal:!1,children:[i.jsx(at,{asChild:!0,children:i.jsx(un,{ref:s,x:e.x,y:e.y})}),i.jsxs(ct,{minWidth:160,children:[i.jsxs(L,{onSelect:u,children:[i.jsx(is,{size:13}),"Rename"]}),i.jsxs(L,{disabled:!c,onSelect:f,children:[i.jsx(Br,{size:13}),"Stop agent"]}),i.jsx(Re,{}),i.jsxs(L,{danger:!0,onSelect:h,children:[i.jsx(zr,{size:13}),"Archive"]}),i.jsxs(L,{danger:!0,onSelect:m,children:[i.jsx(en,{size:13}),"Delete permanently"]})]})]})}function od({label:e,cwd:t,sessionCount:n,collapsed:s,onToggleCollapsed:r,onOpenMenu:o}){return i.jsxs("div",{className:Y.workspaceHeader,onClick:r,title:t,children:[i.jsx(be,{className:Y.workspaceChevron,"aria-label":s?"Expand workspace":"Collapse workspace",onClick:a=>{a.stopPropagation(),r()},children:s?i.jsx(tn,{size:13}):i.jsx(cs,{size:13})}),i.jsx(Or,{size:13,className:W(Y.workspaceIcon)}),i.jsx("span",{className:Y.workspaceLabel,children:e}),i.jsx("span",{className:Y.workspaceCount,children:n}),i.jsx(be,{className:Y.workspaceMenuBtn,hoverBase:"var(--pi-color-surfaceSidebar)",title:"Workspace actions",onClick:a=>{a.stopPropagation();const c=a.currentTarget.getBoundingClientRect();o(c.left,c.bottom)},children:i.jsx(Zt,{size:13})})]})}function Pe(e,t){return t&&(e==="~"||e.startsWith("~/"))?t+e.slice(1):e}function fn(e,t,n){const s=new Map;for(const r of e){const o=t[r];if(!o)continue;const a=Pe(o.cwd||"~",n),c=s.get(a);c?c.push(o):s.set(a,[o])}return Array.from(s,([r,o])=>({cwd:r,sessions:o}))}function Qs(e){return!e||e==="~"?"~":e.split("/").filter(Boolean).pop()||e}function ad(e,t){return new Set(e.filter(n=>n.cwd!==t).map(n=>n.cwd))}function id(){const e=M(m=>m.workspaceMenu),t=M(m=>m.closeWorkspaceMenu),n=A(m=>m.client),s=N(m=>m.order),r=N(m=>m.sessions),o=it(),a=v.useRef(null),[c,l]=v.useState(!1);if(v.useEffect(()=>{l(e!==null)},[e]),!e)return null;const u=s.map(m=>r[m]).filter(m=>!!m).filter(m=>Pe(m.cwd||"~",o)===e.cwd);function f(m){l(m),m||t()}function g(){e&&(t(),Ct(e.cwd))}async function h(){if(!e)return;const m=u.length;if(!window.confirm(`Delete all ${m} conversation${m===1?"":"s"} in "${Qs(e.cwd)}"? This deletes the conversations only — files on disk are untouched. This cannot be undone.`))return t();t();for(const _ of u){if(_.agentId&&n)try{await n.agent(_.agentId).delete()}catch(p){window.alert(`Failed to delete "${_.title}": ${p instanceof Error?p.message:String(p)}`);continue}N.getState().remove(_.id),T.getState().close(V.chat(_.id))}}return i.jsxs(ot,{open:c,onOpenChange:f,modal:!1,children:[i.jsx(at,{asChild:!0,children:i.jsx(un,{ref:a,x:e.x,y:e.y})}),i.jsxs(ct,{minWidth:160,children:[i.jsxs(L,{onSelect:g,children:[i.jsx(ls,{size:13}),"New conversation"]}),i.jsx(Re,{}),i.jsxs(L,{danger:!0,onSelect:h,children:[i.jsx(en,{size:13}),"Delete workspace (all conversations)"]})]})]})}function It(e,t,n){T.getState().open({id:V.chat(e.id),kind:"chat",label:e.title||"Chat",closable:!0,data:{sessionId:e.id},workspaceCwd:Pe(e.cwd||"~",t)},n)}const cd=.25;function Zs(e,t){if(t.width<=0||t.height<=0)return"center";const n=(e.x-(t.left+t.width/2))/t.width,s=(e.y-(t.top+t.height/2))/t.height;return Math.max(Math.abs(n),Math.abs(s))<cd?"center":Math.abs(n)>=Math.abs(s)?n<0?"left":"right":s<0?"top":"bottom"}function ld(e,t){return t.x>=e.left&&t.x<=e.left+e.width&&t.y>=e.top&&t.y<=e.top+e.height}function er(e,t,n){return n==="center"?"center":nt(e,t,n)?n:"center"}function Xt(e,t,n,s){return s[n]!==t?!1:e==="center"?!0:Object.keys(s).every(o=>o===n||s[o]!==t)}const lt={chat:"application/x-pi-studio-open-chat",path:"application/x-pi-studio-open-path"},dd=["chat","path"];function tr(e){for(const t of dd)if(e.includes(lt[t]))return t;return null}function sm(e){return t=>{t.dataTransfer.setData(lt.path,e),t.dataTransfer.effectAllowed="copyMove"}}function ud(e,t){const n=tr(e);if(n===null)return null;const s=t(lt[n]).trim();return s===""?null:{kind:n,value:s}}function fd(e,t,n,s){return er(e,t,Zs(n,s))}function pd(){const e=N(p=>p.order),t=N(p=>p.sessions),n=N(p=>p.activeSessionId),s=N(p=>p.activate),r=T(p=>p.activeWorkspaceCwd),o=A(p=>p.status),a=M(p=>p.openSessionMenu),c=M(p=>p.openWorkspaceMenu),l=M(p=>p.setCwd),u=M(p=>p.openCwdPicker),f=M(p=>p.collapsedWorkspaces),g=M(p=>p.toggleWorkspaceCollapsed),h=it();function m(p){s(p);const S=t[p];S!=null&&S.cwd&&l(S.cwd),S&&It(S,h)}function w(p,S,R){S===r&&(R.dataTransfer.setData(lt.chat,p),R.dataTransfer.effectAllowed="copy")}const _=fn(e,t,h);return i.jsxs(Js,{children:[i.jsxs("div",{className:Y.header,children:[i.jsx("h3",{children:"Workspaces"}),i.jsx(ne,{size:"xs",variant:"ghost",iconOnly:!0,className:Y.openBtn,title:o!=="open"?"Connect to open a workspace":"Open a workspace folder",disabled:o!=="open",onClick:()=>u(),children:i.jsx(ds,{size:13})})]}),i.jsxs("div",{className:Y.list,children:[_.length===0&&i.jsx(Me,{style:{padding:"var(--pi-spacing-12) var(--pi-spacing-10)"},children:o!=="open"?"Not connected":"No workspaces — open a folder to start"}),_.map(p=>{const S=f.has(p.cwd);return i.jsxs("div",{className:Y.workspaceGroup,children:[i.jsx(od,{label:Qs(p.cwd),cwd:p.cwd,sessionCount:p.sessions.length,collapsed:S,onToggleCollapsed:()=>g(p.cwd),onOpenMenu:(R,j)=>c(p.cwd,R,j)}),!S&&i.jsx("div",{className:Y.workspaceSessions,children:p.sessions.map(R=>i.jsx(Ql,{session:R,active:R.id===n,draggable:p.cwd===r,onSelect:()=>m(R.id),onOpenMenu:(j,z)=>a(R.id,j,z),onDragStartRow:j=>w(R.id,p.cwd,j)},R.id))})]},p.cwd)})]}),i.jsx(rd,{}),i.jsx(id,{})]})}const hd="_spinner_ohxfo_3",md={spinner:hd},gd={xs:12,sm:16,md:20,lg:24},_d={xs:1,sm:2,md:2,lg:3};function nr({size:e="md",color:t="currentColor",className:n,"aria-label":s="Loading"}){const r=typeof e=="number"?e:gd[e],o=typeof e=="number"?2:_d[e];return i.jsx("span",{className:`${md.spinner}${n?` ${n}`:""}`,role:"status","aria-label":s,style:{width:r,height:r,borderWidth:o,color:t}})}const Fn={tab:0,strip:1,pane:2};function qt(e){if(e===null||typeof e!="object"||!("type"in e))return null;const{type:t}=e;if(t!=="tab"&&t!=="strip"&&t!=="pane")return null;const n="paneId"in e&&typeof e.paneId=="string"?e.paneId:null;return{kind:t,paneId:n}}function yd(e){const t=e.activatorEvent;return t instanceof MouseEvent?{x:t.clientX+e.delta.x,y:t.clientY+e.delta.y}:null}function wd(e,t,n){return e.kind==="tab"?n.placement[t]??null:e.paneId}function bd(e){const[t,n]=v.useState(null),[s,r]=v.useState(null),o=T(m=>m.tabs.find(w=>w.id===t)??null),a=ao(io(lo,{activationConstraint:{distance:4}})),c=v.useMemo(()=>m=>{const w=co(m).map(_=>{var p;return{hit:_,target:qt((p=m.droppableContainers.find(S=>S.id===_.id))==null?void 0:p.data.current)}}).filter(_=>_.target!==null).toSorted((_,p)=>Fn[_.target.kind]-Fn[p.target.kind]);return w.length===0?[]:[w[0].hit]},[]),l=v.useCallback(m=>{const{over:w,active:_}=m,p=qt(w==null?void 0:w.data.current);if(!w||p===null||e===null)return null;const S=P.getState().layouts[e];if(S===void 0)return null;const R=String(_.id),j=String(w.id);if(p.kind!=="pane"){const G=wd(p,j,S);return G===null||p.kind==="tab"&&j===R?null:p.kind==="tab"&&S.placement[R]===G?{paneId:G,region:"center"}:Xt("center",G,R,S.placement)?null:{paneId:G,region:"center"}}const z=yd(m);if(p.paneId===null||z===null)return null;const J=er(S.tree,p.paneId,Zs(z,w.rect));return Xt(J,p.paneId,R,S.placement)?null:{paneId:p.paneId,region:J}},[e]),u=v.useCallback(m=>{n(String(m.active.id))},[]),f=v.useCallback(m=>{const w=l(m);r(_=>(_==null?void 0:_.paneId)===(w==null?void 0:w.paneId)&&(_==null?void 0:_.region)===(w==null?void 0:w.region)?_:w)},[l]),g=v.useCallback(()=>{n(null),r(null)},[]),h=v.useCallback(m=>{var re;n(null),r(null);const{active:w,over:_}=m,p=qt(_==null?void 0:_.data.current);if(!_||p===null||e===null)return;const S=String(w.id),R=P.getState().layouts[e];if(R===void 0)return;const j=T.getState(),z=j.tabs.filter(Q=>Q.workspaceCwd===e).map(Q=>Q.id),{moveTab:J,splitWithTab:G}=P.getState();if(p.kind==="tab"){const Q=String(_.id);if(Q===S)return;const ue=R.placement[Q];ue!==void 0&&ue!==R.placement[S]&&J(e,S,ue,z),j.reorder(S,Q);return}const D=l(m);if(D===null)return;if(D.region!=="center"){G(e,S,D.paneId,D.region,z);return}J(e,S,D.paneId,z);const K=((re=P.getState().layouts[e])==null?void 0:re.placement)??{},se=z.filter(Q=>Q!==S&&K[Q]===D.paneId).at(-1);se!==void 0&&z.indexOf(S)<z.indexOf(se)&&j.reorder(S,se)},[e,l]);return{sensors:a,collisionDetection:c,onDragStart:u,onDragMove:f,onDragEnd:h,onDragCancel:g,draggedTab:o,preview:s}}const vd=v.lazy(()=>ve(()=>import("./ChatPanel-CEH_GK7N.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])).then(e=>({default:e.ChatPanel}))),Wn=v.lazy(()=>ve(()=>import("./FilePanel-WQVK2120.js"),__vite__mapDeps([16,1,7,6,5,2,17,11,12,3,13,14,18])).then(e=>({default:e.FilePanel}))),xd=v.lazy(()=>ve(()=>import("./TerminalPanel-Do6WsYb9.js"),__vite__mapDeps([19,1,20,21,7,6,5,2,3,13,14,22])).then(e=>({default:e.TerminalPanel}))),Sd=v.lazy(()=>ve(()=>import("./MoleculeViewerPanel-DYKfUyuF.js"),__vite__mapDeps([23,1,24,25,9,10,26,2,17,7,6,5,3,13,14,27])).then(e=>({default:e.MoleculeViewerPanel}))),kd={chat:vd,file:Wn,diff:Wn,terminal:xd,molecule:Sd},rt="var(--pane-strip-height)";function pn(e){return e===void 0?new Map:il(Us(e.tree,new Set(Object.values(e.placement))))}function U(e){const t=(e*100).toFixed(4);return`${t.includes(".")?t.replace(/\.?0+$/,""):t}%`}function sr(e){if(e!==void 0)return{left:U(e.x),top:`calc(${U(e.y)} + ${rt})`,width:U(e.width),height:`calc(${U(e.height)} - ${rt})`}}function Id(e,t){const n=`${U(e.y)} + ${rt}`,s=`${U(e.height)} - ${rt}`,r=`calc((${s}) / 2)`;switch(t){case"left":return{left:U(e.x),top:`calc(${n})`,width:U(e.width/2),height:`calc(${s})`};case"right":return{left:U(e.x+e.width/2),top:`calc(${n})`,width:U(e.width/2),height:`calc(${s})`};case"top":return{left:U(e.x),top:`calc(${n})`,width:U(e.width),height:r};case"bottom":return{left:U(e.x),top:`calc(${n} + (${s}) / 2)`,width:U(e.width),height:r};case"center":return{left:U(e.x),top:`calc(${n})`,width:U(e.width),height:`calc(${s})`}}}function jd(e){const t=pn(e);return[...t].map(([n,s])=>({paneId:n,stripStyle:{left:U(s.x),top:U(s.y),width:U(s.width),height:rt},focused:t.size>1&&(e==null?void 0:e.focusedPaneId)===n}))}function Td(e){if(e===void 0)return[];const t=Us(e.tree,new Set(Object.values(e.placement)));return t!==e.tree?[]:cl(t)}function Cd(e,t){return(t==null?void 0:t.placement[e])??null}function Ed(e,t,n){const s=pn(n);return e.map(r=>{const o=r.workspaceCwd===t?n==null?void 0:n.placement[r.id]:void 0;return{tabId:r.id,style:sr(o===void 0?void 0:s.get(o)),visible:o!==void 0&&(n==null?void 0:n.activeByPane[o])===r.id}})}const Rd="_divider_4eg4l_9",Md="_vertical_4eg4l_26",Nd="_horizontal_4eg4l_41",$t={divider:Rd,vertical:Md,horizontal:Nd};function Dd({cwd:e,dividers:t,hostRef:n}){const s=P(a=>a.resizeDivider),r=v.useRef(0);function o(a,c){var m;const l=(m=n.current)==null?void 0:m.getBoundingClientRect();if(!l)return;a.preventDefault(),a.stopPropagation();const u=c.direction==="row",f=u?c.splitRect.width*l.width:c.splitRect.height*l.height;if(f<=0)return;r.current=u?a.clientX:a.clientY,document.body.style.cursor=u?"col-resize":"row-resize",document.body.style.userSelect="none";const g=w=>{const _=u?w.clientX:w.clientY,p=_-r.current;r.current=_,s(e,c.splitPath,c.boundaryIndex,p/f)},h=()=>{window.removeEventListener("pointermove",g),window.removeEventListener("pointerup",h),document.body.style.cursor="",document.body.style.userSelect=""};window.addEventListener("pointermove",g),window.addEventListener("pointerup",h)}return t.map(a=>{const c=a.direction==="row";return i.jsx("div",{className:W($t.divider,c?$t.vertical:$t.horizontal),style:c?{left:`${a.rect.x*100}%`,top:`${a.rect.y*100}%`,height:`${a.rect.height*100}%`}:{left:`${a.rect.x*100}%`,top:`${a.rect.y*100}%`,width:`${a.rect.width*100}%`},role:"separator","aria-orientation":c?"vertical":"horizontal",onPointerDown:l=>o(l,a)},`${a.splitPath.join(".")}:${a.boundaryIndex}`)})}const Pd=v.lazy(()=>ve(()=>import("./TextViewer-C7U5fAYp.js"),__vite__mapDeps([28,1,29,2,7,6,5,30,26,3,13,14,31])).then(e=>({default:e.TextViewer}))),Ad=v.lazy(()=>ve(()=>import("./MarkdownFileViewer-I0b0agu_.js"),__vite__mapDeps([32,1,29,2,7,6,5,30,4,8,3,13,14,33])).then(e=>({default:e.MarkdownFileViewer}))),qd=v.lazy(()=>ve(()=>import("./ImageViewer-Bc0i-JGb.js"),__vite__mapDeps([34,1,26,2,7,6,5,3,13,14,35])).then(e=>({default:e.ImageViewer}))),$d=v.lazy(()=>ve(()=>import("./VideoViewer-DeIrV1Ql.js"),__vite__mapDeps([36,1,26,2,7,6,5,3,13,14,37])).then(e=>({default:e.VideoViewer}))),Bd=v.lazy(()=>ve(()=>import("./BinaryFallbackViewer-BWzvrIhq.js"),__vite__mapDeps([38,1,26,2,3,7,6,5,13,14,39])).then(e=>({default:e.BinaryFallbackViewer}))),rm={text:Pd,markdown:Ad,image:qd,video:$d,binary:Bd},zd={md:"markdown",markdown:"markdown",mdx:"markdown",png:"image",jpg:"image",jpeg:"image",gif:"image",webp:"image",svg:"image",bmp:"image",ico:"image",avif:"image",mp4:"video",webm:"video",mov:"video",m4v:"video",ogv:"video",pdf:"binary",zip:"binary",gz:"binary",tar:"binary",exe:"binary",wasm:"binary",woff:"binary",woff2:"binary",ttf:"binary",otf:"binary"},Od=[["image/","image"],["video/","video"]];function rr(e){const t=e.split("/").pop()??e,n=t.lastIndexOf(".");return n>0?t.slice(n+1).toLowerCase():""}const Fd={pdb:!0,cif:!0,mmcif:!0,mol:!0,mol2:!0,xyz:!0,extxyz:!0,gro:!0,lammpstrj:!0,xsf:!0},Wd={poscar:!0,contcar:!0};function or(e){if(Fd[rr(e)])return!0;const t=e.split("/").pop()??e;return!!Wd[t.toLowerCase()]}function om(e,t={}){const n=zd[rr(e)];if(n)return n;const s=t.mimeHint??"";for(const[r,o]of Od)if(s.startsWith(r))return o;return t.isBinary?"binary":"text"}function hn(e,t,n){or(e)?ir(e,t,n):ar(e,t,n)}function ar(e,t,n){const s=e.split("/").pop()||e;T.getState().open({id:V.file(e),kind:"file",label:s,closable:!0,data:{path:e},workspaceCwd:t},n)}function ir(e,t,n){const s=e.split("/").pop()||e;T.getState().open({id:V.molecule(e),kind:"molecule",label:s,closable:!0,data:{path:e},workspaceCwd:t},n)}const Jt="data-pane-drop";function Ld(e){return{[Jt]:e}}function Hd(e,t){if(e===null)return null;for(const n of e.querySelectorAll(`[${Jt}]`)){const s=n.getBoundingClientRect(),r={left:s.left,top:s.top,width:s.width,height:s.height},o=n.getAttribute(Jt);if(o!==null&&o!==""&&ld(r,t))return{paneId:o,bounds:r}}return null}function Ud(e){const{tabs:t}=T.getState(),n=s=>t.some(r=>r.id===s)?s:null;return e.kind==="chat"?n(V.chat(e.value)):n(V.file(e.value))??n(V.molecule(e.value))}function Kd(e,t,n,s,r){const o=P.getState().layouts[t];if(o===void 0)return;const a=T.getState().tabs.filter(f=>f.workspaceCwd===t).map(f=>f.id),c=Ud(e);if(c!==null){if(Xt(s,n,c,o.placement))return;const{moveTab:f,splitWithTab:g}=P.getState();s==="center"?f(t,c,n,a):g(t,c,n,s,a);return}let l=n;if(s!=="center"&&(l=P.getState().splitEmpty(t,n,s)),l===null)return;if(e.kind==="path"){hn(e.value,t,l);return}const u=N.getState().sessions[e.value];u!==void 0&&It(u,r,l)}function Vd(e,t){const[n,s]=v.useState(null),r=it(),o=v.useCallback(u=>{if(e===null)return null;const f=P.getState().layouts[e];if(f===void 0)return null;const g={x:u.clientX,y:u.clientY},h=Hd(t.current,g);return h===null?null:{paneId:h.paneId,region:fd(f.tree,h.paneId,g,h.bounds)}},[e,t]),a=v.useCallback(u=>{if(tr(u.dataTransfer.types)===null)return;u.preventDefault(),u.dataTransfer.dropEffect="copy";const f=o(u);s(g=>(g==null?void 0:g.paneId)===(f==null?void 0:f.paneId)&&(g==null?void 0:g.region)===(f==null?void 0:f.region)?g:f)},[o]),c=v.useCallback(u=>{u.currentTarget.contains(u.relatedTarget)||s(null)},[]),l=v.useCallback(u=>{const f=ud(u.dataTransfer.types,h=>u.dataTransfer.getData(h));if(f===null)return;u.preventDefault(),s(null);const g=o(u);g===null||e===null||Kd(f,e,g.paneId,g.region,r)},[e,r,o]);return{preview:n,onDragOver:a,onDragLeave:c,onDrop:l}}const Gd="_strip_1xy58_1",Yd="_tabs_1xy58_13",Xd="_paneStrip_1xy58_23",Jd="_focused_1xy58_28",Qd="_tab_1xy58_13",Zd="_active_1xy58_47",eu="_icon_1xy58_51",tu="_label_1xy58_56",nu="_close_1xy58_61",su="_newTab_1xy58_71",ru="_splitAction_1xy58_77",ou="_itemIcon_1xy58_81",ee={strip:Gd,tabs:Yd,paneStrip:Xd,focused:Jd,tab:Qd,active:Zd,icon:eu,label:tu,close:nu,newTab:su,splitAction:ru,itemIcon:ou},cr={chat:hs,file:ps,diff:fs,terminal:us,molecule:nn};function au({tab:e,active:t}){const n=T(f=>f.activate),s=cr[e.kind],{attributes:r,listeners:o,setNodeRef:a,transform:c,transition:l,isDragging:u}=po({id:e.id,data:{type:"tab"}});return i.jsxs("div",{ref:a,className:W(ee.tab,t&&ee.active),style:{transform:ho.Transform.toString(c),transition:l,opacity:u?.5:1},onClick:()=>n(e.id),onAuxClick:f=>{f.button===1&&e.closable&&Gt(e.id)},title:e.label,...r,...o,children:[i.jsx("span",{className:ee.icon,children:i.jsx(s,{size:13})}),i.jsx("span",{className:ee.label,children:e.label}),e.closable&&i.jsx("span",{className:ee.close,onClick:f=>{f.stopPropagation(),Gt(e.id)},children:i.jsx(Ot,{size:12})})]})}function iu({workspaceCwd:e,paneId:t}){const n=s=>()=>{e!==null&&s(e,t??void 0)};return i.jsxs(ot,{children:[i.jsx(at,{asChild:!0,children:i.jsx(be,{className:ee.newTab,hoverBase:"var(--pi-color-background)",style:{borderRadius:"var(--pi-radius-sm)"},title:"New tab",disabled:!e,children:i.jsx(ls,{size:14})})}),i.jsxs(ct,{minWidth:160,sideOffset:4,children:[i.jsxs(L,{onSelect:n(Ct),children:[i.jsx(hs,{size:13,className:ee.itemIcon}),"New chat"]}),i.jsxs(L,{onSelect:n(Xs),children:[i.jsx(us,{size:13,className:ee.itemIcon}),"New terminal"]}),i.jsxs(L,{onSelect:n(yl),children:[i.jsx(nn,{size:13,className:ee.itemIcon}),"New molecule view"]})]})]})}function cu({cwd:e,paneId:t}){const n=P(c=>{var l;return e===null||(l=c.layouts[e])==null?void 0:l.tree}),s=c=>()=>{if(e===null||t===null)return;const l=P.getState().splitEmpty(e,t,c);l!==null&&Ct(e,l)},r=c=>n===void 0||t===null?"Open a workspace to split":nt(n,t,c)?null:"Maximum split depth reached",o=r("right"),a=r("bottom");return i.jsxs(i.Fragment,{children:[i.jsx(be,{className:ee.splitAction,hoverBase:"var(--pi-color-background)",style:{borderRadius:"var(--pi-radius-sm)"},title:o??"Split right",disabled:o!==null,onClick:s("right"),children:i.jsx(Fr,{size:14})}),i.jsx(be,{className:ee.splitAction,hoverBase:"var(--pi-color-background)",style:{borderRadius:"var(--pi-radius-sm)"},title:a??"Split down",disabled:a!==null,onClick:s("bottom"),children:i.jsx(Wr,{size:14})})]})}function Ln({cwd:e,paneId:t,style:n,focused:s=!1}){const r=T(f=>f.tabs),o=P(f=>f.focusPane),a=P(f=>{var g;return e===null||(g=f.layouts[e])==null?void 0:g.placement}),c=P(f=>{var g;return e===null||t===null||(g=f.layouts[e])==null?void 0:g.activeByPane[t]}),l=t===null?[]:r.filter(f=>(a==null?void 0:a[f.id])===t),{setNodeRef:u}=_s({id:`strip:${t??"none"}`,disabled:t===null,data:{type:"strip",paneId:t}});return i.jsxs("div",{ref:u,className:W(ee.strip,ee.paneStrip,s&&ee.focused),style:n,onPointerDown:()=>{e!==null&&t!==null&&o(e,t)},children:[i.jsx("div",{className:ee.tabs,children:i.jsx(uo,{items:l.map(f=>f.id),strategy:fo,children:l.map(f=>i.jsx(au,{tab:f,active:f.id===c},f.id))})}),i.jsx(iu,{workspaceCwd:e,paneId:t}),i.jsx(cu,{cwd:e,paneId:t})]})}const lu="_preview_1txmv_1",du="_chip_1txmv_9",uu="_chipLabel_1txmv_23",Qt={preview:lu,chip:du,chipLabel:uu};function fu({rect:e,region:t}){return i.jsx("div",{className:Qt.preview,style:Id(e,t)})}function pu({tab:e}){const t=cr[e.kind];return i.jsxs("div",{className:Qt.chip,children:[i.jsx(t,{size:13}),i.jsx("span",{className:Qt.chipLabel,children:e.label})]})}const hu="_area_1kpjf_1",mu="_panel_1kpjf_10",gu="_dropZone_1kpjf_26",_u="_active_1kpjf_30",yu="_empty_1kpjf_34",wu="_emptyStack_1kpjf_46",bu="_emptyTitle_1kpjf_60",vu="_emptyHint_1kpjf_64",Se={area:hu,panel:mu,dropZone:gu,active:_u,empty:yu,emptyStack:wu,emptyTitle:bu,emptyHint:vu};function xu({paneId:e,style:t}){const{setNodeRef:n}=_s({id:`pane:${e}`,data:{type:"pane",paneId:e}});return i.jsx("div",{ref:n,className:Se.dropZone,style:t,...Ld(e)})}function Su(){const e=T(_=>_.tabs),t=T(_=>_.activeWorkspaceCwd),n=P(_=>t===null?void 0:_.layouts[t]),s=A(_=>_.status),r=M(_=>_.openCwdPicker),o=P(_=>_.focusPane),a=e.some(_=>_.workspaceCwd===t),c=v.useRef(null),l=v.useMemo(()=>Ed(e,t,n),[e,t,n]),u=v.useMemo(()=>jd(n),[n]),f=v.useMemo(()=>Td(n),[n]),g=v.useMemo(()=>pn(n),[n]),h=bd(t),m=Vd(t,c),w=h.preview??m.preview;return i.jsxs(mo,{sensors:h.sensors,collisionDetection:h.collisionDetection,onDragStart:h.onDragStart,onDragMove:h.onDragMove,onDragEnd:h.onDragEnd,onDragCancel:h.onDragCancel,children:[i.jsxs("div",{className:Se.area,ref:c,onDragOver:m.onDragOver,onDragLeave:m.onDragLeave,onDrop:m.onDrop,children:[u.length===0?i.jsx(Ln,{cwd:t,paneId:null}):u.map(_=>i.jsx(Ln,{cwd:t,paneId:_.paneId,style:_.stripStyle,focused:_.focused},_.paneId)),t!==null&&f.length>0&&i.jsx(Dd,{cwd:t,dividers:f,hostRef:c}),u.map(_=>i.jsx(xu,{paneId:_.paneId,style:sr(g.get(_.paneId))},`drop-${_.paneId}`)),w!==null&&g.has(w.paneId)&&i.jsx(fu,{rect:g.get(w.paneId),region:w.region}),t===null&&i.jsxs("div",{className:Se.emptyStack,children:[i.jsx("div",{className:Se.emptyTitle,children:"No workspace open"}),i.jsx("div",{className:Se.emptyHint,children:"Open a project folder to start a chat."}),i.jsx(ne,{size:"sm",variant:"secondary",leftIcon:i.jsx(ds,{size:14}),disabled:s!=="open",title:s!=="open"?"Connect to open a workspace":"Open a workspace folder",onClick:()=>r(),children:"Open Workspace"})]}),t!==null&&!a&&i.jsx("div",{className:Se.empty,children:"No open tabs in this workspace"}),e.map((_,p)=>{const S=kd[_.kind],R=l[p],j=n==null?void 0:n.placement[_.id];return i.jsx("div",{className:W(Se.panel,R.visible&&Se.active),style:R.style,onPointerDown:()=>{t!==null&&j!==void 0&&o(t,j)},children:i.jsx(v.Suspense,{fallback:i.jsx(nr,{size:"md"}),children:i.jsx(S,{tab:_,owningPaneId:Cd(_.id,n)})})},_.id)})]}),i.jsx(go,{dropAnimation:null,children:h.draggedTab&&i.jsx(pu,{tab:h.draggedTab})})]})}const ke={fileRead:e=>["file","read",e],fileDownload:e=>["file","download",e],fileText:(e,t)=>["file","text",e,t],fileDiff:(e,t,n)=>["file","diff",e,t,n],fileDiffByPath:e=>["file","diff",e],explorer:e=>["explorer",e],agentList:()=>["agents","list"],providerModels:e=>["providers","models",e],agentTimeline:e=>["agents","timeline",e],agentCommands:e=>["agents","commands",e]};function ku(e){const t=e.kind==="directory"||e.type==="directory"?"directory":"file";return{name:e.name??"",kind:t,size:e.size,mtimeMs:e.mtimeMs}}function Iu(e){return e.slice().sort((t,n)=>t.kind!==n.kind?t.kind==="directory"?-1:1:t.name.localeCompare(n.name))}async function lr(e,t){const s=(await e.connection.request("file_explorer_request",{path:t})).result;if(!s||s.ok===!1)throw new Error(s&&"error"in s?s.error:"explorer request failed");const r="entries"in s?s.entries??[]:[];return{path:s.resolvedPath??t,entries:Iu(r.map(ku))}}function ju(e,t=!0){const n=A(s=>s.client);return os({queryKey:ke.explorer(e),queryFn:()=>{if(!n)throw new Error("not connected");return lr(n,e)},enabled:!!n&&!!e&&t})}function Tu(e){const t=A(r=>r.client),n=v.useMemo(()=>Array.from(e),[e]),s=Mr({queries:n.map(r=>({queryKey:ke.explorer(r),queryFn:()=>{if(!t)throw new Error("not connected");return lr(t,r)},enabled:!!t&&!!r}))});return v.useMemo(()=>{const r=new Map;return n.forEach((o,a)=>{const c=s[a];r.set(o,{listing:c==null?void 0:c.data,isLoading:!!(c!=null&&c.isLoading),isError:!!(c!=null&&c.isError),error:c==null?void 0:c.error})}),r},[n,s])}function Cu(e){return typeof e=="object"&&e!==null&&"type"in e&&e.type==="file_changed"&&"path"in e&&typeof e.path=="string"}function Eu(e,t){const n=new Set,s=e.connection.onSessionMessage(r=>{const o=r;Cu(o)&&n.has(o.path)&&t(o.path)});return{sync(r){for(const o of n)r.has(o)||(n.delete(o),e.connection.request("file_watch_unsubscribe",{path:o}).catch(()=>{}));for(const o of r)n.has(o)||(n.add(o),e.connection.request("file_watch_subscribe",{path:o}).then(a=>{const c=a;(c==null?void 0:c.ok)===!1&&console.warn(`useExplorerWatch: ${c.error??"subscribe failed"} for "${o}"`)}).catch(()=>{}))},dispose(){s();for(const r of n)e.connection.request("file_watch_unsubscribe",{path:r}).catch(()=>{});n.clear()}}}function Ru(e){const t=A(a=>a.client),n=Le(),s=v.useRef(null),r=v.useRef(null),o=Array.from(e).toSorted().join("\0");v.useEffect(()=>{var a,c;t&&(r.current!==t&&((a=s.current)==null||a.dispose(),s.current=Eu(t,l=>{n.invalidateQueries({queryKey:ke.explorer(l)})}),r.current=t),(c=s.current)==null||c.sync(new Set(o?o.split("\0"):[])))},[t,o,n]),v.useEffect(()=>()=>{var a;(a=s.current)==null||a.dispose(),s.current=null,r.current=null},[])}const Hn=new WeakMap;function Un(e){let t=Hn.get(e);return t||(t=new uc(e),t.start(),Hn.set(e,t)),t}function Mu(e,t,n){const s=new Blob([Uint8Array.from(e)],{type:n||"application/octet-stream"}),r=URL.createObjectURL(s),o=document.createElement("a");o.href=r,o.download=t,o.rel="noopener",document.body.appendChild(o),o.click(),o.remove(),setTimeout(()=>URL.revokeObjectURL(r),0)}function dr(){const e=A(r=>r.daemon),t=Le(),n=v.useCallback(async(r,o)=>{if(!e)throw new Error("not connected");const a=r?`${r}/${o.name}`:o.name,c=new Uint8Array(await o.arrayBuffer());await Un(e).upload(a,c),await t.invalidateQueries({queryKey:["explorer"]})},[e,t]),s=v.useCallback(async r=>{if(!e)throw new Error("not connected");const o=await Un(e).download(r);Mu(o.bytes,o.fileName||r.split("/").pop()||"download",o.mimeType)},[e]);return{upload:n,saveToDisk:s}}const Kn={available:!1,branch:null,upstream:null,ahead:0,behind:0,detached:!1,conflictCount:0},de=Ie()(e=>({subscribedCwd:null,changes:[],ignored:[],...Kn,setSubscribedCwd:t=>e({subscribedCwd:t}),applyProjection:t=>{if(!t||!t.available){e({changes:[],ignored:[],...Kn});return}const n=[];for(const s of t.staged)n.push({path:s.path,status:s.indexStatus==="A"?"added":s.indexStatus==="D"?"deleted":"modified",staged:!0});for(const s of t.unstaged)n.push({path:s.path,status:s.worktreeStatus==="D"?"deleted":"modified",staged:!1});for(const s of t.untracked)n.push({path:s,status:"added",staged:!1});e({changes:n,ignored:t.ignored??[],available:!0,branch:t.branch,upstream:t.upstream,ahead:t.ahead,behind:t.behind,detached:t.detached,conflictCount:t.conflicted.length})}}));function am(e,t){return e?e.startsWith("/")||e.startsWith("~")?e:t?`${t.replace(/\/+$/,"")}/${e}`:null:null}function me(e){const t=e.lastIndexOf("/");return t>0?e.slice(0,t):"/"}function Nu(e,t){return!t||!e.startsWith(t)?e:e.slice(t.length).replace(/^\/+/,"")}function im(e){if(!e.startsWith("/"))return e;const t=e.split("/"),n=[];for(const s of t)s===""||s==="."||(s===".."?n.length>0&&n.pop():n.push(s));return"/"+n.join("/")}function Vn(e,t,n){if(t.kind!=="file"&&t.kind!=="directory")return null;const s=t.kind==="directory"?t.path:me(t.path);if(s===me(e)||s===e||s.startsWith(`${e}/`)||s!==n&&!s.startsWith(`${n}/`))return null;const r=e.split("/").pop();return{destinationDir:s,destination:`${s}/${r}`}}function Gn(e,t){if(e.kind!=="file"&&e.kind!=="directory")return null;const n=e.kind==="directory"?e.path:me(e.path);return n!==t&&!n.startsWith(`${t}/`)?null:n}const Du={empty_path:"Nothing to move.",invalid_name:"Invalid name for the destination.",exists:"An item with that name already exists in the destination folder.",not_found:"That item or destination folder no longer exists.",not_a_directory:"The destination is not a folder.",same_path:"That item is already in this folder.",into_descendant:"A folder cannot be moved into itself.",cross_device:"Cannot move across filesystems."};async function Pu(e,t,n){const s=await e.connection.request("file_move_request",{path:t,destination:n});if(!s.ok){const r=s.error??"";throw new Error(Du[r]??r??"Failed to move")}return s.destination??n}function Yn(e,t){return t===0?e:`${e} — closed ${t} ${t===1?"diff tab":"diff tabs"}`}function ur(e,t){return e.endsWith("/")?`${e}${t}`:`${e}/${t}`}function fr(e,t,n,s,r,o,a){var l;(o==null?void 0:o.parentPath)===t&&e.push({kind:"draft",path:`${t}::draft`,depth:n,draftKind:o.kind,parentPath:t});const c=r.get(t);if(!c||c.isLoading){e.push({kind:"loading",path:t,depth:n});return}if(c.isError){const u=c.error instanceof Error?c.error.message:"failed to load";e.push({kind:"error",path:t,depth:n,message:u});return}for(const u of((l=c.listing)==null?void 0:l.entries)??[])Au(e,t,u,n,s,r,o,a)}function Au(e,t,n,s,r,o,a,c){const l=ur(t,n.name),u=n.kind==="directory",f=u&&r.has(l);l===c?e.push({kind:"rename",path:l,depth:s,name:n.name,isDirectory:u}):u?e.push({kind:"directory",path:l,name:n.name,depth:s,expanded:f}):e.push({kind:"file",path:l,name:n.name,depth:s}),f&&fr(e,l,s+1,r,o,a,c)}function qu(e,t,n,s,r){if(!e)return[];const o=[];return fr(o,e,0,t,n,s,r),o}const $u=()=>{};function Bu(e,t){return e===void 0?t:e==="deleted"||t==="deleted"?"deleted":e==="added"||t==="added"?"added":"modified"}function zu(e){return e==="added"?"added":"modified"}function Ou(e,t){if(!e||t.length===0)return $u;const n=e.replace(/\/+$/,""),s=new Map,r=new Map,o=[];for(const a of t){const c=a.path.endsWith("/"),l=c?a.path.slice(0,-1):a.path;if(!l)continue;const u=`${n}/${l}`;s.set(u,Bu(s.get(u),a.status)),c&&o.push(u);const f=zu(a.status);let g=me(u);for(;g.length>n.length&&g.startsWith(n);){const h=r.get(g);r.set(g,h===void 0||h===f?f:"modified");const m=me(g);if(m===g)break;g=m}}return a=>{const c=s.get(a)??r.get(a);if(c!==void 0)return c;for(const l of o)if(a.startsWith(`${l}/`))return"added"}}const Fu=()=>!1;function Wu(e,t){if(!e||t.length===0)return Fu;const n=e.replace(/\/+$/,""),s=new Set,r=[];for(const o of t){const a=o.endsWith("/"),c=a?o.slice(0,-1):o;if(!c)continue;const l=`${n}/${c}`;s.add(l),a&&r.push(`${l}/`)}return o=>{if(s.has(o))return!0;for(const a of r)if(o.startsWith(a))return!0;return!1}}const Lu="_container_1mqaz_1",Hu="_header_1mqaz_7",Uu="_uploadButton_1mqaz_14",Ku="_hiddenInput_1mqaz_33",Vu="_status_1mqaz_36",Gu="_statusError_1mqaz_37",Yu="_rowAction_1mqaz_50",Xu="_item_1mqaz_53",Ju="_list_1mqaz_60",Qu="_active_1mqaz_83",Zu="_selected_1mqaz_88",ef="_dropTarget_1mqaz_92",tf="_chevronSlot_1mqaz_97",nf="_chevron_1mqaz_97",sf="_chevronOpen_1mqaz_108",rf="_icon_1mqaz_111",of="_name_1mqaz_118",af="_dirName_1mqaz_123",cf="_gitAdded_1mqaz_133",lf="_gitModified_1mqaz_138",df="_gitDeleted_1mqaz_143",uf="_hiddenEntry_1mqaz_155",ff="_statusRow_1mqaz_164",pf="_statusRowError_1mqaz_175",hf="_draftInput_1mqaz_178",q={container:Lu,header:Hu,uploadButton:Uu,hiddenInput:Ku,status:Vu,statusError:Gu,rowAction:Yu,item:Xu,list:Ju,active:Qu,selected:Zu,dropTarget:ef,chevronSlot:tf,chevron:nf,chevronOpen:sf,icon:rf,name:of,dirName:af,gitAdded:cf,gitModified:lf,gitDeleted:df,hiddenEntry:uf,statusRow:ff,statusRowError:pf,draftInput:hf};function mf({draftKind:e,indentStyle:t,onSubmit:n,onCancel:s}){const[r,o]=v.useState("");return i.jsxs("div",{className:q.item,style:t,onClick:a=>a.stopPropagation(),children:[i.jsx("span",{className:q.chevronSlot}),i.jsx("span",{className:q.icon,children:e==="directory"?i.jsx(De,{size:16}):i.jsx(sn,{size:16})}),i.jsx("input",{className:q.draftInput,autoFocus:!0,spellCheck:!1,placeholder:e==="directory"?"New folder":"New file",value:r,onChange:a=>o(a.target.value),onKeyDown:a=>{if(a.key==="Enter"){a.preventDefault();const c=r.trim();c?n(c):s()}else a.key==="Escape"&&(a.preventDefault(),s())},onBlur:s})]})}function gf({name:e,isDirectory:t,indentStyle:n,onSubmit:s,onCancel:r}){const[o,a]=v.useState(e),c=v.useRef(null);return v.useEffect(()=>{const l=c.current;if(!l)return;l.focus();const u=e.lastIndexOf("."),f=t||u<=0?e.length:u;l.setSelectionRange(0,f)},[e,t]),i.jsxs("div",{className:q.item,style:n,onClick:l=>l.stopPropagation(),children:[i.jsx("span",{className:q.chevronSlot}),i.jsx("span",{className:q.icon,children:t?i.jsx(De,{size:16}):i.jsx(sn,{size:16})}),i.jsx("input",{ref:c,className:q.draftInput,spellCheck:!1,value:o,onChange:l=>a(l.target.value),onKeyDown:l=>{if(l.key==="Enter"){l.preventDefault();const u=o.trim();!u||u===e?r():s(u)}else l.key==="Escape"&&(l.preventDefault(),r())},onBlur:r})]})}const _f=14,yf={added:q.gitAdded,modified:q.gitModified,deleted:q.gitDeleted};function wf({row:e,active:t,selected:n,dropTarget:s,gitStatus:r,hidden:o,onToggle:a,onOpenFile:c,onContextMenu:l,onSubmitDraft:u,onCancelDraft:f,onSubmitRename:g,onCancelRename:h,onDragStartRow:m,onDragEndRow:w}){const _={paddingLeft:8+e.depth*_f};if(e.kind==="loading")return i.jsx("div",{className:q.statusRow,style:_,children:"Loading…"});if(e.kind==="error")return i.jsx("div",{className:W(q.statusRow,q.statusRowError),style:_,children:e.message??"failed to load"});if(e.kind==="draft")return i.jsx(mf,{draftKind:e.draftKind,indentStyle:_,onSubmit:S=>u(e.parentPath,S),onCancel:f});if(e.kind==="rename")return i.jsx(gf,{name:e.name,isDirectory:e.isDirectory,indentStyle:_,onSubmit:S=>g(e.path,S),onCancel:h});const p=e.kind==="directory";return i.jsxs("div",{className:W(q.item,t&&q.active,n&&q.selected,s&&q.dropTarget,r&&yf[r],o&&q.hiddenEntry),style:_,title:e.path,draggable:!0,onDragStart:S=>m(e.path,p,S),onDragEnd:w,onClick:()=>p?a(e.path):c(e.path),onContextMenu:S=>{S.preventDefault(),S.stopPropagation(),l(e.path,p,S.clientX,S.clientY)},children:[i.jsx("span",{className:q.chevronSlot,children:p&&i.jsx(tn,{size:14,className:W(q.chevron,e.expanded&&q.chevronOpen)})}),i.jsx("span",{className:q.icon,children:p?i.jsx(De,{size:16}):i.jsx(sn,{size:16})}),i.jsx("span",{className:p?q.dirName:q.name,children:e.name}),i.jsx(be,{className:q.rowAction,title:"Actions",onClick:S=>{S.stopPropagation();const R=S.currentTarget.getBoundingClientRect();l(e.path,p,R.left,R.bottom)},children:i.jsx(Zt,{size:14})})]})}async function Xn(e){var n;if((n=navigator.clipboard)!=null&&n.writeText)try{await navigator.clipboard.writeText(e);return}catch{}const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.focus(),t.select();try{if(!document.execCommand("copy"))throw new Error('execCommand("copy") failed')}finally{t.remove()}}function bf(){const e=M(D=>D.fileMenu),t=M(D=>D.closeFileMenu),n=A(D=>D.client),s=Z(D=>D.startDraft),r=Z(D=>D.startRename),o=Z(D=>D.rootPath),a=T(D=>D.activeWorkspaceCwd),{saveToDisk:c}=dr(),l=Le(),u=v.useRef(null),[f,g]=v.useState(!1);if(v.useEffect(()=>{g(e!==null)},[e]),!e)return null;const h=e.path.split("/").pop()||e.path;function m(D){g(D),D||t()}function w(){e&&(t(),hn(e.path,a||"~"))}function _(){e&&(t(),ir(e.path,a||"~"))}function p(){e&&(t(),ar(e.path,a||"~"))}async function S(){if(e){t();try{await Xn(e.path)}catch{window.alert("Failed to copy to clipboard.")}}}async function R(){if(e){t();try{await Xn(Nu(e.path,o)||"/")}catch{window.alert("Failed to copy to clipboard.")}}}async function j(){if(e){t();try{await c(e.path)}catch(D){window.alert(`Failed to download: ${D instanceof Error?D.message:String(D)}`)}}}async function z(){if(!e)return;const D=e.isDirectory?"folder (and everything inside it)":"file";if(!window.confirm(`Permanently delete this ${D}? "${h}" — this cannot be undone.`))return t();if(t(),!n){window.alert("Not connected — cannot delete remotely.");return}try{const K=await n.connection.request("file_delete_request",{path:e.path});if(!K.ok)throw new Error(K.error??"delete failed");await l.invalidateQueries({queryKey:["explorer"]}),T.getState().closeByPathPrefix(e.path)}catch(K){window.alert(`Failed to delete: ${K instanceof Error?K.message:String(K)}`)}}function J(D){if(!e)return;const K=e.isDirectory?e.path:me(e.path);t(),s(K,D)}function G(){e&&(t(),r(e.path))}return i.jsxs(ot,{open:f,onOpenChange:m,modal:!1,children:[i.jsx(at,{asChild:!0,children:i.jsx(un,{ref:u,x:e.x,y:e.y})}),i.jsx(ct,{minWidth:140,children:e.background?i.jsxs(i.Fragment,{children:[i.jsxs(L,{onSelect:()=>J("file"),children:[i.jsx(Ft,{size:13}),"New File"]}),i.jsxs(L,{onSelect:()=>J("directory"),children:[i.jsx(vt,{size:13}),"New Folder"]}),i.jsx(Re,{}),i.jsxs(L,{onSelect:S,children:[i.jsx(ft,{size:13}),"Copy Current Directory Path"]}),i.jsxs(L,{onSelect:R,children:[i.jsx(ft,{size:13}),"Copy Current Directory Relative Path"]})]}):i.jsxs(i.Fragment,{children:[!e.isDirectory&&i.jsxs(i.Fragment,{children:[i.jsxs(L,{onSelect:w,children:[i.jsx(Lr,{size:13}),"Open"]}),i.jsxs(L,{onSelect:_,children:[i.jsx(nn,{size:13}),"Open in MolViewer"]}),or(e.path)&&i.jsxs(L,{onSelect:p,children:[i.jsx(ps,{size:13}),"Open as Text"]}),i.jsx(Re,{})]}),e.isDirectory&&i.jsxs(i.Fragment,{children:[i.jsxs(L,{onSelect:()=>J("file"),children:[i.jsx(Ft,{size:13}),"New File"]}),i.jsxs(L,{onSelect:()=>J("directory"),children:[i.jsx(vt,{size:13}),"New Folder"]}),i.jsx(Re,{})]}),i.jsxs(L,{onSelect:S,children:[i.jsx(ft,{size:13}),"Copy Absolute Path"]}),i.jsxs(L,{onSelect:R,children:[i.jsx(ft,{size:13}),"Copy Relative Path"]}),i.jsx(Re,{}),!e.isDirectory&&i.jsxs(i.Fragment,{children:[i.jsxs(L,{onSelect:j,children:[i.jsx(Hr,{size:13}),"Download"]}),i.jsx(Re,{})]}),i.jsxs(L,{onSelect:G,children:[i.jsx(is,{size:13}),"Rename"]}),i.jsxs(L,{danger:!0,onSelect:z,children:[i.jsx(en,{size:13}),"Delete"]})]})})]})}const vf={empty_path:"Choose a folder first.",invalid_name:'Invalid name — cannot be empty or contain "/".',exists:"An item with that name already exists here.",not_found:"That folder no longer exists.",not_a_directory:"That path is not a folder.",unreadable:"That folder is not readable."};async function pr(e,t,n,s){const r=await e.connection.request("file_create_request",{path:t,name:n,kind:s});if(!r.ok){const o=r.error??"";throw new Error(vf[o]??o??"Failed to create")}return r.path??(t.endsWith("/")?`${t}${n}`:`${t}/${n}`)}const xf=28,Ge="application/x-pi-studio-path",Bt="Files";function Sf(){const e=A(y=>y.client),t=Z(y=>y.rootPath),n=Z(y=>y.expanded),s=Z(y=>y.setRoot),r=Z(y=>y.toggle),o=Z(y=>y.draft),a=Z(y=>y.startDraft),c=Z(y=>y.cancelDraft),l=Z(y=>y.renaming),u=Z(y=>y.cancelRename),f=Z(y=>y.selected),g=Z(y=>y.setSelected),h=T(y=>y.activeWorkspaceCwd),m=T(y=>y.tabs.find(I=>I.id===y.activeTabId)),w=de(y=>y.changes),_=de(y=>y.ignored),{upload:p}=dr(),S=M(y=>y.openFileMenu),R=Le(),[j,z]=v.useState(null),[J,G]=v.useState(null),D=v.useRef(null),K=v.useRef(null),se=v.useRef(null),re=v.useRef(null),Q=(m==null?void 0:m.kind)==="file"||(m==null?void 0:m.kind)==="molecule"?m.data.path:null,ue=f?f.isDirectory?f.path:me(f.path):t,dt=v.useRef(null);v.useEffect(()=>{if(!e)return;const y=h||"~";dt.current!==y&&(dt.current=y,Il(e,y).then(I=>s(I)))},[e,h,s]);const C=Tu(n);Ru(n);const ie=v.useMemo(()=>qu(t,n,C,o,l),[t,n,C,o,l]),yr=v.useMemo(()=>Ou(t,w),[t,w]),wr=v.useMemo(()=>Wu(t,_),[t,_]),gn=Nr({count:ie.length,getScrollElement:()=>K.current,estimateSize:()=>xf,overscan:12,getItemKey:y=>{var I;return((I=ie[y])==null?void 0:I.path)??y}});function Rt(y){hn(y,h||"~")}function br(y,I,E){E.dataTransfer.setData(Ge,y),I||E.dataTransfer.setData(lt.path,y),E.dataTransfer.effectAllowed=I?"move":"copyMove",se.current=y}function vr(){se.current=null}function Mt(){G(null),re.current&&(clearTimeout(re.current.timer),re.current=null)}function _n(y){var E;if(((E=re.current)==null?void 0:E.path)===y.path||(re.current&&clearTimeout(re.current.timer),re.current=null,y.kind!=="directory"||y.expanded))return;const I=window.setTimeout(()=>r(y.path),700);re.current={path:y.path,timer:I}}async function yn(y,I){if(!e)throw new Error("Not connected.");const E=await Pu(e,y,I),B=me(E);await R.invalidateQueries({queryKey:ke.explorer(me(y))}),await R.invalidateQueries({queryKey:ke.explorer(B)}),Z.getState().repathAfterMove(y,E,B);const H=T.getState().tabs.filter(le=>{if(le.kind!=="file"&&le.kind!=="diff"&&le.kind!=="molecule")return!1;const ut=le.data.path;return ut===y||((ut==null?void 0:ut.startsWith(`${y}/`))??!1)}),ge=H.some(le=>(le.kind==="file"||le.kind==="molecule")&&le.data.path===y),ce=H.filter(le=>le.kind==="diff").length;return T.getState().closeByPathPrefix(y),ge&&Rt(E),{destination:E,closedDiffs:ce}}async function xr(y,I){const E=Vn(y,I,t);if(!E||!e)return;const B=y.split("/").pop()??y;z({text:`Moving ${B}…`,error:!1});try{const{destination:H,closedDiffs:ge}=await yn(y,E.destination);z({text:Yn(`Moved to ${me(H).split("/").pop()||"/"}`,ge),error:!1})}catch(H){z({text:H instanceof Error?H.message:"Failed to move",error:!0})}}async function Sr(y,I){const E=(o==null?void 0:o.kind)??"file";if(c(),!!e)try{const B=await pr(e,y,I,E);await R.invalidateQueries({queryKey:ke.explorer(y)}),z({text:`Created ${B}`,error:!1}),E==="file"&&Rt(B)}catch(B){z({text:B instanceof Error?B.message:"Failed to create",error:!0})}}async function kr(y,I){if(u(),!e)return;const E=ur(me(y),I);z({text:`Renaming ${y.split("/").pop()}…`,error:!1});try{const{destination:B,closedDiffs:H}=await yn(y,E);z({text:Yn(`Renamed to ${B.split("/").pop()}`,H),error:!1})}catch(B){z({text:B instanceof Error?B.message:"Failed to rename",error:!0})}}async function wn(y,I){var ge;if(!I.length||!y)return;const E=(ge=C.get(y))==null?void 0:ge.listing,B=new Set((E==null?void 0:E.entries.map(ce=>ce.name))??[]),H=I.filter(ce=>B.has(ce.name));if(H.length>0){const ce=H.map(le=>le.name).join(", ");if(!window.confirm(`Overwrite ${H.length>1?"these files":"this file"}? ${ce}`))return}z({text:`Uploading ${I.length} file${I.length>1?"s":""}…`,error:!1});try{for(const ce of I)await p(y,ce);z({text:`Uploaded ${I.length} file${I.length>1?"s":""}`,error:!1})}catch(ce){z({text:`Upload failed: ${ce instanceof Error?ce.message:"unknown"}`,error:!0})}}function bn(y,I){if(y.preventDefault(),y.dataTransfer.types.includes(Ge)){const H=y.dataTransfer.getData(Ge)||se.current;Mt(),H&&xr(H,I??{kind:"directory",path:t});return}if(Mt(),!y.dataTransfer.types.includes(Bt))return;const E=I?Gn(I,t):t;if(!E)return;const B=Array.from(y.dataTransfer.files);B.length&&wn(E,B)}function Ir(y){const I=y.dataTransfer.types.includes(Ge);!I&&!y.dataTransfer.types.includes(Bt)||(y.preventDefault(),y.dataTransfer.dropEffect=I?"move":"copy")}return e?i.jsxs("div",{className:q.container,onDragOver:Ir,onDragLeave:y=>{y.currentTarget.contains(y.relatedTarget)||Mt()},onDrop:y=>bn(y),children:[i.jsxs("div",{className:q.header,children:[i.jsx("button",{type:"button",className:q.uploadButton,onClick:()=>a(ue,"file"),disabled:!t,title:f?`New file in ${ue.split("/").pop()||"/"}`:"New file in workspace root",children:i.jsx(Ft,{size:14})}),i.jsx("button",{type:"button",className:q.uploadButton,onClick:()=>a(ue,"directory"),disabled:!t,title:f?`New folder in ${ue.split("/").pop()||"/"}`:"New folder in workspace root",children:i.jsx(vt,{size:14})}),i.jsxs("button",{type:"button",className:q.uploadButton,onClick:()=>{var y;return(y=D.current)==null?void 0:y.click()},disabled:!t,title:"Upload files to the workspace root",children:[i.jsx(Ur,{size:14}),i.jsx("span",{children:"Upload"})]}),i.jsx("input",{ref:D,type:"file",multiple:!0,className:q.hiddenInput,onChange:y=>{wn(t,Array.from(y.target.files??[])),y.target.value=""}})]}),j&&i.jsx("div",{className:j.error?q.statusError:q.status,children:j.text}),i.jsxs("div",{className:q.list,ref:K,onContextMenu:y=>{y.preventDefault(),S(t,!0,y.clientX,y.clientY,!0)},children:[ie.length===0&&i.jsx(Me,{children:"No files loaded"}),i.jsx("div",{style:{position:"relative",height:gn.getTotalSize()},children:gn.getVirtualItems().map(y=>{const I=ie[y.index];return I?i.jsx("div",{"data-index":y.index,style:{position:"absolute",top:0,left:0,width:"100%",height:y.size,transform:`translateY(${y.start}px)`},onDragEnter:E=>{if(E.dataTransfer.types.includes(Ge)){const H=se.current;if(!H)return;const ge=Vn(H,I,t);G(ge?I.path:null),_n(I);return}if(!E.dataTransfer.types.includes(Bt))return;const B=Gn(I,t);G(B?I.path:null),_n(I)},onDrop:E=>{E.stopPropagation(),bn(E,I)},children:i.jsx(wf,{row:I,active:(I.kind==="file"||I.kind==="directory")&&I.path===Q,selected:(I.kind==="file"||I.kind==="directory")&&I.path===(f==null?void 0:f.path),gitStatus:I.kind==="file"||I.kind==="directory"?yr(I.path):void 0,hidden:(I.kind==="file"||I.kind==="directory")&&(I.name.startsWith(".")||wr(I.path)),onToggle:E=>{g({path:E,isDirectory:!0}),r(E)},onOpenFile:E=>{g({path:E,isDirectory:!1}),Rt(E)},onContextMenu:(E,B,H,ge)=>S(E,B,H,ge),onSubmitDraft:(E,B)=>void Sr(E,B),onCancelDraft:c,onSubmitRename:(E,B)=>void kr(E,B),onCancelRename:u,onDragStartRow:br,onDragEndRow:vr,dropTarget:(I.kind==="file"||I.kind==="directory")&&I.path===J})},y.key):null})})]}),i.jsx(bf,{})]}):i.jsx(Me,{children:"Connect to browse files"})}const kf="_list_1n3q6_1",If="_summary_1n3q6_4",jf="_item_1n3q6_11",Tf="_badge_1n3q6_23",Cf="_added_1n3q6_30",Ef="_modified_1n3q6_34",Rf="_deleted_1n3q6_38",Mf="_name_1n3q6_42",qe={list:kf,summary:If,item:jf,badge:Tf,added:Cf,modified:Ef,deleted:Rf,name:Mf},Nf={added:"A",modified:"M",deleted:"D"};function Df(){const t=T(o=>o.activeWorkspaceCwd)||"~",n=de(o=>o.changes),s=T(o=>o.open);function r(o,a){s({id:V.diff(o,a),kind:"diff",label:o.split("/").pop()||o,closable:!0,data:{path:o,staged:a},workspaceCwd:t})}return n.length===0?i.jsx(Me,{children:"No changes detected"}):i.jsxs("div",{className:qe.list,children:[i.jsxs("div",{className:qe.summary,children:[n.length," changed file",n.length===1?"":"s"]}),n.map((o,a)=>i.jsxs("div",{className:qe.item,onClick:()=>r(o.path,o.staged),children:[i.jsx("span",{className:W(qe.badge,qe[o.status]),children:Nf[o.status]}),i.jsx("span",{className:qe.name,children:o.path})]},`${o.path}-${o.staged}-${a}`))]})}const Pf="_tabBar_1tvri_1",Af="_tabBtn_1tvri_7",qf="_active_1tvri_23",$f="_refreshBtn_1tvri_27",Bf="_content_1tvri_31",Ce={tabBar:Pf,tabBtn:Af,active:qf,refreshBtn:$f,content:Bf};function zf(){const e=M(c=>c.rightSidebarTab),t=M(c=>c.setRightSidebarTab),s=T(c=>c.activeWorkspaceCwd)||"~",r=A(c=>c.client),o=Le();function a(){o.invalidateQueries({queryKey:["explorer"]}),r&&s&&r.connection.request("checkout_refresh_request",{cwd:s}).catch(()=>{})}return i.jsxs(Js,{children:[i.jsxs("div",{className:Ce.tabBar,children:[i.jsxs("button",{type:"button",className:W(Ce.tabBtn,e==="files"&&Ce.active),onClick:()=>t("files"),children:[i.jsx(De,{size:13}),"Files"]}),i.jsxs("button",{type:"button",className:W(Ce.tabBtn,e==="changes"&&Ce.active),onClick:()=>t("changes"),children:[i.jsx(fs,{size:13}),"Changes"]}),i.jsx(ne,{size:"xs",variant:"ghost",iconOnly:!0,title:"Refresh",className:Ce.refreshBtn,onClick:a,children:i.jsx(Kr,{size:13})})]}),i.jsx("div",{className:Ce.content,children:e==="files"?i.jsx(Sf,{}):i.jsx(Df,{})})]})}const hr=Ie()(e=>({bySession:{},setStats(t,n){e(s=>({bySession:{...s.bySession,[t]:{...s.bySession[t],...n}}}))},clear(t){e(n=>{const{[t]:s,...r}=n.bySession;return{bySession:r}})}})),Of=12e3;function Ff(e,t){return e==="running"&&t!=="running"}function Jn(e,t){var s,r,o,a,c,l;const n={};((s=t.contextUsage)==null?void 0:s.tokens)!=null&&(n.contextTokens=t.contextUsage.tokens),((r=t.contextUsage)==null?void 0:r.contextWindow)!==void 0&&(n.contextWindow=t.contextUsage.contextWindow),((o=t.contextUsage)==null?void 0:o.percent)!=null&&(n.contextPercent=t.contextUsage.percent),((a=t.tokens)==null?void 0:a.total)!==void 0&&(n.totalTokens=t.tokens.total),((c=t.tokens)==null?void 0:c.input)!==void 0&&(n.inputTokens=t.tokens.input),((l=t.tokens)==null?void 0:l.output)!==void 0&&(n.outputTokens=t.tokens.output),t.cost!==void 0&&(n.cost=t.cost),t.model!==void 0&&(n.model=t.model,N.getState().setModel(e,t.model)),hr.getState().setStats(e,n)}function Wf(e){const t=A(c=>c.client),n=A(c=>c.status),s=N(c=>{var l;return e?((l=c.sessions[e])==null?void 0:l.agentId)??null:null}),r=N(c=>{var l;return e?(l=c.sessions[e])==null?void 0:l.status:void 0}),o=v.useRef(!1),a=v.useRef(void 0);v.useEffect(()=>{if(n!=="open"||!t||!e||!s)return;let c=!1;const l=async()=>{if(!o.current){o.current=!0;try{const f=await t.agent(s).sessionStats();c||Jn(e,f)}catch{}finally{o.current=!1}}};l();const u=setInterval(()=>void l(),Of);return()=>{c=!0,clearInterval(u)}},[n,t,e,s]),v.useEffect(()=>{const c=a.current;a.current=r,Ff(c,r)&&(n!=="open"||!t||!e||!s||(o.current=!1,t.agent(s).sessionStats().then(l=>Jn(e,l)).catch(()=>{})))},[r,n,t,e,s])}function Lf(e){return typeof e=="object"&&e!==null&&"type"in e&&e.type==="checkout_status_update"&&"cwd"in e&&typeof e.cwd=="string"&&"projection"in e&&typeof e.projection=="object"&&e.projection!==null}function Hf(e){const t=A(o=>o.client),n=de(o=>o.applyProjection),s=de(o=>o.setSubscribedCwd),r=v.useRef(t);return r.current=t,v.useEffect(()=>{if(!t||!e)return;let o=!1;t.connection.request("checkout_status_subscribe",{cwd:e}).catch(()=>{}),s(e);const a=t.connection.onSessionMessage(c=>{if(o)return;const l=c;Lf(l)&&l.cwd===e&&n(l.projection)});return t.connection.request("checkout_refresh_request",{cwd:e}).catch(()=>{}),()=>{o=!0,a(),t.connection.request("checkout_status_unsubscribe",{cwd:e}).catch(()=>{}),s(null)}},[t,e,n,s]),{refresh(){const o=r.current;!o||!e||o.connection.request("checkout_refresh_request",{cwd:e}).catch(()=>{})}}}const mn="--";function Ye(e){return e===void 0?mn:e<1e3?String(e):e<1e6?`${(e/1e3).toFixed(1)}k`:`${(e/1e6).toFixed(1)}M`}function Uf(e){if(e==null)return mn;const t=e<=1?e*100:e;return`${Math.round(t)}%`}function Kf(e){if(e===void 0)return mn;const t=e<1?4:2;return`$${e.toFixed(t)}`}function Vf(e,t){return t?e===t?"~":e.startsWith(`${t}/`)?`~${e.slice(t.length)}`:e:e}function Gf(e,t){const n=[];return e>0&&n.push(`↑${e}`),t>0&&n.push(`↓${t}`),n.join(" ")}function Yf(e,t=!0){const n=A(s=>s.client);return os({queryKey:ke.providerModels(e),queryFn:async()=>{if(!n)throw new Error("not connected");return(await n.providers.listModels(e)).models},enabled:!!n&&!!e&&t})}function Xf(e,t){if(t.trim()==="")return e;const n=t.toLowerCase();return e.filter(s=>s.label.toLowerCase().includes(n)||s.description!==void 0&&s.description.toLowerCase().includes(n))}function Jf(e,t){if(!t)return e;const n=e.find(s=>s.id===t);return n?[n,...e.filter(s=>s.id!==t)]:e}function Qf(e){const t=new Set;return e.filter(n=>t.has(n.id)?!1:(t.add(n.id),!0))}const Zf="_picker_1jy8c_4",ep="_search_1jy8c_10",tp="_list_1jy8c_28",np="_item_1jy8c_33",sp="_itemActive_1jy8c_47",rp="_checkSlot_1jy8c_51",op="_label_1jy8c_60",ap="_modelId_1jy8c_66",ip="_state_1jy8c_73",cp="_stateError_1jy8c_82",lp="_commandContent_1jy8c_92",dp="_commandList_1jy8c_95",up="_commandItem_1jy8c_100",fp="_commandItemHeader_1jy8c_132",pp="_commandKindBadge_1jy8c_146",hp="_commandKindExtension_1jy8c_165",mp="_commandKindPrompt_1jy8c_170",gp="_commandKindSkill_1jy8c_175",_p="_commandDescription_1jy8c_180",_e={picker:Zf,search:ep,list:tp,item:np,itemActive:sp,checkSlot:rp,label:op,modelId:ap,state:ip,stateError:cp,commandContent:lp,commandList:dp,commandItem:up,commandItemHeader:fp,commandKindBadge:pp,commandKindExtension:hp,commandKindPrompt:mp,commandKindSkill:gp,commandDescription:_p};function yp({currentModel:e,provider:t,onSelect:n,renderTrigger:s}){const[r,o]=v.useState(!1),[a,c]=v.useState(""),l=v.useRef(null),{data:u=[],isLoading:f,isError:g,error:h}=Yf(t,r),m=Qf(Jf(u,e));v.useEffect(()=>{var j;r&&(c(""),(j=l.current)==null||j.focus())},[r]);const w=new Map(m.map(j=>[j.id,j.provider])),_=m.map(j=>({value:j.id,label:j.label??j.id,description:j.id})),p=Xf(_,a),S=h instanceof Error?h.message:"Failed to load models";function R(j){j.stopPropagation(),j.key==="Escape"&&o(!1)}return i.jsxs(ot,{open:r,onOpenChange:o,modal:!1,children:[i.jsx(at,{asChild:!0,children:s(e)}),i.jsxs(ct,{minWidth:240,sideOffset:4,className:_e.picker,children:[i.jsx("input",{ref:l,className:_e.search,placeholder:"Search models…",value:a,onChange:j=>c(j.target.value),onKeyDown:R}),f&&i.jsx("div",{className:_e.state,children:i.jsx(nr,{size:"sm"})}),!f&&g&&i.jsx("div",{className:_e.stateError,children:S}),!f&&!g&&p.length===0&&i.jsx("div",{className:_e.state,children:"No models found"}),!f&&!g&&p.length>0&&i.jsx("div",{className:_e.list,children:p.map(j=>i.jsxs(gs,{className:_e.item,onSelect:()=>n(j.value,w.get(j.value)),children:[i.jsx("span",{className:_e.checkSlot,"aria-hidden":!0,children:j.value===e&&i.jsx(ms,{size:14})}),i.jsx("span",{className:_e.label,children:j.label}),i.jsxs("span",{className:_e.modelId,children:["(",j.value,")"]})]},j.value))})]})]})}const wp="_statusBar_1r17k_1",bp="_segmentGroup_1r17k_16",vp="_chevron_1r17k_20",xp="_segment_1r17k_16",Sp="_icon_1r17k_33",kp="_modelSegment_1r17k_39",Ip="_modelChevron_1r17k_63",jp="_text_1r17k_74",pe={statusBar:wp,segmentGroup:bp,chevron:vp,segment:xp,icon:Sp,modelSegment:kp,modelChevron:Ip,text:jp};function Tp(){const e=N(p=>p.activeSessionId),t=N(p=>e?p.sessions[e]:void 0),n=A(p=>p.client),s=N(p=>p.setModel),r=it(),o=T(p=>p.activeWorkspaceCwd);Hf(o||"");const a=de(p=>p.available),c=de(p=>p.branch),l=de(p=>p.ahead),u=de(p=>p.behind),f=de(p=>p.detached),g=de(p=>p.conflictCount),h=de(p=>p.changes.length),m=hr(p=>e?p.bySession[e]:void 0);Wf(e);const w=[];if(t){const p=Vf(t.cwd,r);w.push({key:"cwd",icon:i.jsx(De,{size:13}),text:p,title:t.cwd})}if(a){const p=Gf(l,u),S=[f?"(detached)":c??"?"];p&&S.push(p),h>0&&S.push(`●${h}`),g>0&&S.push(`⚠${g}`),w.push({key:"branch",icon:i.jsx(Vr,{size:13}),text:S.join(" ")})}if(t){const p=`${Uf(m==null?void 0:m.contextPercent)} (${Ye(m==null?void 0:m.contextTokens)}/${Ye(m==null?void 0:m.contextWindow)})`;w.push({key:"context",icon:i.jsx(Gr,{size:13}),text:p}),w.push({key:"tokens",icon:i.jsx(Yr,{size:13}),text:Ye(m==null?void 0:m.totalTokens),title:`in ${Ye(m==null?void 0:m.inputTokens)} / out ${Ye(m==null?void 0:m.outputTokens)}`}),w.push({key:"cost",icon:i.jsx(Xr,{size:13}),text:Kf(m==null?void 0:m.cost)})}function _(p,S){e&&(s(e,p,S),!(!n||!S)&&(async()=>{const R=await Bs(n,e);await n.agent(R).setModel(S,p)})().catch(()=>{}))}return i.jsxs("div",{className:pe.statusBar,children:[t&&i.jsx("span",{className:pe.segmentGroup,children:i.jsx(yp,{currentModel:t.model,provider:"pi",onSelect:_,renderTrigger:p=>i.jsxs("button",{type:"button",className:pe.modelSegment,disabled:!n,title:p?`Model: ${p}`:"Select model",children:[i.jsx("span",{className:pe.icon,children:i.jsx(Jr,{size:13})}),i.jsx("span",{className:pe.text,children:p??"Model"}),i.jsx(cs,{size:12,className:pe.modelChevron,"aria-hidden":"true"})]})})}),w.map((p,S)=>i.jsxs("span",{className:pe.segmentGroup,children:[(!!t||S>0)&&i.jsx(tn,{size:12,className:pe.chevron,"aria-hidden":"true"}),i.jsxs("span",{className:pe.segment,title:p.title,children:[i.jsx("span",{className:pe.icon,children:p.icon}),i.jsx("span",{className:pe.text,children:p.text})]})]},p.key))]})}const Cp="_wrapper_14joh_3",Ep="_box_14joh_18",Rp="_checkmark_14joh_38",Mp="_nativeInput_14joh_43",yt={wrapper:Cp,box:Ep,checkmark:Rp,nativeInput:Mp};v.forwardRef(function({label:t,checked:n=!1,disabled:s,className:r,onChange:o,...a},c){return i.jsxs("label",{className:yt.wrapper,"data-disabled":s||void 0,children:[i.jsx("input",{ref:c,type:"checkbox",className:yt.nativeInput,checked:n,disabled:s,onChange:o,...a}),i.jsx("span",{className:yt.box,"data-checked":n,"aria-hidden":!0,children:n&&i.jsx(ms,{size:12,className:yt.checkmark})}),t&&i.jsx("span",{children:t})]})});const Np="_select_dl3mw_3",Dp={select:Np};v.forwardRef(function({options:t,placeholder:n,className:s,...r},o){return i.jsxs("select",{ref:o,className:W(Dp.select,s),...r,children:[n&&i.jsx("option",{value:"",disabled:!0,children:n}),t.map(a=>i.jsx("option",{value:a.value,children:a.label},a.value))]})});const Pp="_overlay_1k4ng_1",Ap="_contentWrapper_1k4ng_7",qp="_dialog_1k4ng_16",$p="_header_1k4ng_28",Bp="_title_1k4ng_36",zp="_body_1k4ng_43",Op="_footer_1k4ng_49",Fp="_bare_1k4ng_58",Wp="_bareBody_1k4ng_64",Lp="_bareCloseBtn_1k4ng_68",Hp="_visuallyHidden_1k4ng_73",he={overlay:Pp,contentWrapper:Ap,dialog:qp,header:$p,title:Bp,body:zp,footer:Op,bare:Fp,bareBody:Wp,bareCloseBtn:Lp,visuallyHidden:Hp},Up=Wt;function Kp({open:e,onOpenChange:t,title:n,children:s,footer:r,width:o,className:a,bare:c=!1}){return i.jsx(no,{open:e,onOpenChange:t,children:i.jsxs(so,{children:[i.jsx(ro,{className:he.overlay}),i.jsx("div",{className:he.contentWrapper,children:i.jsxs(oo,{className:W(he.dialog,c&&he.bare,a),style:o!==void 0?{width:o}:void 0,children:[c?i.jsx(vn,{className:he.visuallyHidden,children:n}):i.jsxs("div",{className:he.header,children:[i.jsx(vn,{className:he.title,children:n}),i.jsx(Wt,{asChild:!0,children:i.jsx(be,{size:"sm","aria-label":"Close",children:i.jsx(Ot,{size:16})})})]}),i.jsx("div",{className:W(he.body,c&&he.bareBody),children:s}),c&&i.jsx(Wt,{asChild:!0,children:i.jsx(be,{size:"sm","aria-label":"Close",className:he.bareCloseBtn,style:{background:"var(--pi-color-surface1)",border:"1px solid var(--pi-color-border)",borderRadius:"50%"},children:i.jsx(Ot,{size:16})})}),r&&i.jsx("div",{className:he.footer,children:r})]})})]})})}const Vp="_handle_1j18v_1",Gp={handle:Vp};function Qn({side:e,onResize:t,className:n}){const s=v.useRef(0),r=v.useCallback(c=>{const l=c.clientX-s.current;s.current=c.clientX,t(e==="left"?l:-l)},[t,e]),o=v.useCallback(c=>{var l,u;window.removeEventListener("pointermove",r),window.removeEventListener("pointerup",o),document.body.style.cursor="",document.body.style.userSelect="",(u=(l=c.target)==null?void 0:l.releasePointerCapture)==null||u.call(l,c.pointerId)},[r]);function a(c){c.preventDefault(),s.current=c.clientX,document.body.style.cursor="col-resize",document.body.style.userSelect="none",window.addEventListener("pointermove",r),window.addEventListener("pointerup",o)}return i.jsx("div",{className:W(Gp.handle,n),onPointerDown:a,role:"separator","aria-orientation":"vertical"})}function Yp(e,t){const{order:n,sessions:s}=N.getState(),o=fn(n,s,t).find(a=>a.cwd===e);if(o!=null&&o.sessions[0]){const a=o.sessions[0].id;N.getState().activate(a);const c=N.getState().sessions[a];T.getState().open({id:V.chat(a),kind:"chat",label:(c==null?void 0:c.title)??"New chat",closable:!0,data:{sessionId:a},workspaceCwd:e})}else Ct(e);M.getState().setCwd(e)}const Xp="_pathRow_1mu84_1",Jp="_pathInput_1mu84_9",Qp="_createRow_1mu84_13",Zp="_createInput_1mu84_21",eh="_createError_1mu84_25",th="_list_1mu84_30",nh="_item_1mu84_37",sh="_name_1mu84_49",xe={pathRow:Xp,pathInput:Jp,createRow:Qp,createInput:Zp,createError:eh,list:th,item:nh,name:sh};function rh(){const e=M(C=>C.cwdPickerOpen),t=M(C=>C.closeCwdPicker),n=T(C=>C.activeWorkspaceCwd),s=M(C=>C.cwd),r=A(C=>C.client),o=it(),[a,c]=v.useState("/"),[l,u]=v.useState("/"),[f,g]=v.useState(!1),[h,m]=v.useState(""),[w,_]=v.useState(null),[p,S]=v.useState(!1),R=Le();v.useEffect(()=>{if(!e)return;const C=Pe(n||s||"~",o);c(C),u(C),K()},[e,r,n,s]);const{data:j,isLoading:z,isError:J,error:G}=ju(a,e&&!!r),D=((j==null?void 0:j.entries)??[]).filter(C=>C.kind==="directory");function K(){g(!1),m(""),_(null)}function se(C){const ie=C.length>1?C.replace(/\/+$/,"")||"/":C;c(ie),u(ie),K()}function re(){se(a.split("/").slice(0,-1).join("/")||"/")}function Q(){se(l.trim())}async function ue(){const C=h.trim();if(!(!C||!r||p)){S(!0),_(null);try{const ie=await pr(r,a,C,"directory");await R.invalidateQueries({queryKey:ke.explorer(a)}),se(ie)}catch(ie){_(ie instanceof Error?ie.message:"Failed to create folder")}finally{S(!1)}}}function dt(){Yp(a,o),t()}return i.jsxs(Kp,{open:e,onOpenChange:C=>!C&&t(),title:"Open Workspace",footer:i.jsxs(i.Fragment,{children:[i.jsx(Up,{asChild:!0,children:i.jsx(ne,{size:"sm",variant:"secondary",children:"Cancel"})}),i.jsx(ne,{size:"sm",onClick:dt,children:"Open this folder"})]}),children:[i.jsxs("div",{className:xe.pathRow,children:[i.jsx(ne,{size:"xs",variant:"ghost",iconOnly:!0,title:"Up",onClick:re,children:i.jsx(Qr,{size:13})}),i.jsx(St,{className:xe.pathInput,value:l,onChange:C=>u(C.target.value),onKeyDown:C=>{C.key==="Enter"&&(C.preventDefault(),Q())}}),i.jsx(ne,{size:"xs",onClick:Q,children:"Go"}),i.jsx(ne,{size:"xs",variant:"ghost",iconOnly:!0,title:"New folder",disabled:!r||J||f,onClick:()=>{g(!0),m(""),_(null)},children:i.jsx(vt,{size:13})})]}),f&&i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:xe.createRow,children:[i.jsx(De,{size:14}),i.jsx(St,{className:xe.createInput,autoFocus:!0,placeholder:"New folder name",value:h,onChange:C=>m(C.target.value),onKeyDown:C=>{C.key==="Enter"?(C.preventDefault(),ue()):C.key==="Escape"&&(C.preventDefault(),C.stopPropagation(),K())}}),i.jsx(ne,{size:"xs",loading:p,disabled:!h.trim()||p,onClick:()=>void ue(),children:"Create"}),i.jsx(ne,{size:"xs",variant:"secondary",onClick:K,children:"Cancel"})]}),w&&i.jsx("div",{className:xe.createError,children:w})]}),i.jsx("div",{className:xe.list,children:z?i.jsx(Me,{children:"Loading..."}):J?i.jsxs(Me,{children:["Error: ",G instanceof Error?G.message:"unknown error"]}):D.length===0?i.jsx(Me,{children:"No subdirectories"}):D.map(C=>i.jsxs("div",{className:xe.item,onClick:()=>se(a==="/"?`/${C.name}`:`${a}/${C.name}`),children:[i.jsx(De,{size:14}),i.jsx("span",{className:xe.name,children:C.name})]},C.name))})]})}const oh="_shell_570m8_1",ah="_main_570m8_7",ih="_sidebarLeft_570m8_13",ch="_leftHandle_570m8_25",lh="_center_570m8_28",dh="_sidebarRight_570m8_35",uh="_rightHandle_570m8_43",Ee={shell:oh,main:ah,sidebarLeft:ih,leftHandle:ch,center:lh,sidebarRight:dh,rightHandle:uh};function fh(){const e=M(a=>a.leftSidebarCollapsed),t=M(a=>a.rightSidebarCollapsed),n=M(a=>a.leftSidebarWidth),s=M(a=>a.rightSidebarWidth),r=M(a=>a.resizeLeftSidebar),o=M(a=>a.resizeRightSidebar);return i.jsxs("div",{className:Ee.shell,children:[i.jsx(Wc,{}),i.jsxs("div",{className:Ee.main,children:[!e&&i.jsxs("aside",{className:Ee.sidebarLeft,style:{width:n},children:[i.jsx(pd,{}),i.jsx(Qn,{side:"left",className:Ee.leftHandle,onResize:r})]}),i.jsx("div",{className:Ee.center,children:i.jsx(Su,{})}),!t&&i.jsxs("aside",{className:Ee.sidebarRight,style:{width:s},children:[i.jsx(Qn,{side:"right",className:Ee.rightHandle,onResize:o}),i.jsx(zf,{})]})]}),i.jsx(Tp,{}),i.jsx(rh,{})]})}function ph(){const e=v.useRef(!1);v.useEffect(()=>{if(e.current)return;if(e.current=!0,window.location.hash.includes("offer=")){const l=window.location.href;M.getState().setHost(l),A.getState().connect({url:l});return}const t=new URLSearchParams(window.location.search),n=t.get("host"),s=t.get("pair"),r=t.get("password"),o=t.get("cwd"),a=t.get("connect")==="1",c=M.getState();if(s?c.setHost(s):n&&c.setHost(n),r&&c.setPassword(r),o&&c.setCwd(o),s)A.getState().connect({url:s});else if(a){const{host:l,password:u}=M.getState();A.getState().connect({url:l,password:u||void 0})}},[])}const mr="pi-studio-pane-layout",hh=250;function mh(){const e=new Map,t={workspaces:e,activeWorkspaceCwd:null},n=on.get(mr);if(!n)return t;let s;try{s=JSON.parse(n)}catch{return t}if(typeof s!="object"||s===null)return t;const r=s;if(r.version!==Ks||typeof r.workspaces!="object"||r.workspaces===null)return t;for(const[a,c]of Object.entries(r.workspaces)){const l=gh(c);l&&e.set(a,l)}const o=r.activeWorkspaceCwd;return{workspaces:e,activeWorkspaceCwd:typeof o=="string"&&e.has(o)?o:null}}function gh(e){if(typeof e!="object"||e===null)return null;const t=e,n=ul(t.tree);if(!n)return null;const s=new Set(ae(n)),r={};for(const[c,l]of Zn(t.placement))s.has(l)&&(r[c]=l);const o={};for(const[c,l]of Zn(t.activeByPane))s.has(c)&&(o[c]=l);const a=t.activePaneId;return{tree:n,placement:r,activeByPane:o,activePaneId:typeof a=="string"&&s.has(a)?a:null}}function Zn(e){return typeof e!="object"||e===null?[]:Object.entries(e).filter(t=>typeof t[1]=="string")}let ye=null;function es(){ye==null||ye();const e=setTimeout(()=>{ye=null,gr()},hh);ye=()=>clearTimeout(e)}function _h(){ye==null||ye(),ye=null,gr()}function gr(){const e=new Map;for(const s of T.getState().tabs){const r=kt(s);r!==null&&e.set(s.id,r)}const t={};for(const[s,r]of Object.entries(P.getState().layouts)){const o={...r.pendingPlacement};for(const[c,l]of Object.entries(r.placement)){const u=e.get(c);u!==void 0&&(o[u]=l)}const a={...r.pendingActive};for(const[c,l]of Object.entries(r.activeByPane)){const u=e.get(l);u!==void 0&&(a[c]=u)}t[s]={tree:r.tree,placement:o,activeByPane:a,activePaneId:r.focusedPaneId}}const n={version:Ks,workspaces:t,activeWorkspaceCwd:T.getState().activeWorkspaceCwd??void 0};on.set(mr,JSON.stringify(n))}function yh(){let e=ts(T.getState().tabs);const t=()=>{const o=ts(T.getState().tabs);o!==e&&(e=o,es())},n=P.subscribe(es),s=T.subscribe(t),r=N.subscribe(t);return()=>{n(),s(),r()}}function ts(e){return e.map(t=>`${t.id}\0${kt(t)??""}`).join("")}const wh=/^diff:(staged|worktree):(.+)$/;function bh(e){for(const[t,n]of e)for(const s of Object.keys(n.placement)){const r=vh(s,t);r!==null&&T.getState().open(r)}}function vh(e,t){const n=ns(e,"file:");if(n!==null)return{id:V.file(n),kind:"file",...zt(n),workspaceCwd:t,data:{path:n}};const s=ns(e,"molecule:");if(s!==null)return{id:V.molecule(s),kind:"molecule",...zt(s),workspaceCwd:t,data:{path:s}};const r=wh.exec(e);if(r!==null){const o=r[2],a=r[1]==="staged";return{id:V.diff(o,a),kind:"diff",...zt(o),workspaceCwd:t,data:{path:o,staged:a}}}return null}function ns(e,t){if(!e.startsWith(t))return null;const n=e.slice(t.length);return n===""?null:n}function zt(e){return{label:e.split("/").pop()||e,closable:!0}}function xh(e){if(e===null)return()=>{};if(rs())return ss(e),()=>{};const t=P.subscribe(()=>{rs()&&(t(),ss(e))});return t}function ss(e){if(P.getState().layouts[e]===void 0||!T.getState().tabs.some(n=>n.workspaceCwd===e))return!1;const t=T.getState().activeWorkspaceCwd!==e;return t&&T.getState().switchWorkspace(e),Sh(e),t}function Sh(e){const t=T.getState().tabs.filter(s=>s.workspaceCwd===e&&s.kind==="chat");if(t.length===0)return;const n=N.getState().activeSessionId;t.some(s=>s.data.sessionId===n)||N.getState().activate(t[0].data.sessionId)}function rs(){const{sessions:e,terminals:t}=P.getState().hydrationSources;return e&&t}const kh={workspaces:new Map,activeWorkspaceCwd:null};function Ih(){const e=A(s=>s.status),t=v.useRef(kh),n=v.useRef(!1);v.useEffect(()=>{const s=mh();t.current=s,P.getState().installPersistedLayouts(s.workspaces,s.activeWorkspaceCwd);const r=yh(),o=()=>_h();return window.addEventListener("pagehide",o),()=>{window.removeEventListener("pagehide",o),r()}},[]),v.useEffect(()=>{if(e!=="open"||n.current)return;n.current=!0;const s=t.current;bh(s.workspaces),xh(s.activeWorkspaceCwd)},[e])}function jh(e){return typeof e=="object"&&e!==null&&"kind"in e}function Th(e){const t=[];for(const n of e)if(jh(n))if(n.kind==="other")n.event&&t.push(n.event);else for(const s of n.events??[])t.push(s);return t}async function Ch(e){const t=[];let n=null;for(;;){const s=await e(n);if(s.items.length===0||(t.push(...Th(s.items)),!s.hasNewer))return t;const r=s.endCursor;if(typeof r!="string"||r===n)return t;n=r}}function Eh(e){return typeof e.model=="string"}function Rh(){const e=A(s=>s.client),t=A(s=>s.status),n=v.useRef(!1);v.useEffect(()=>{t!=="open"||!e||n.current||(n.current=!0,Mh(e))},[t,e]),v.useEffect(()=>{if(!(t!=="open"||!e))return e.onAgentUpdate(s=>{if(Eh(s)){const r=typeof s.modelProvider=="string"?s.modelProvider:void 0;N.getState().setModelByAgentId(s.agentId,s.model,r)}})},[t,e])}async function Mh(e){try{await Nh(e)}finally{P.getState().markHydrationSource("sessions")}}async function Nh(e){var w;let t=[];try{t=(await e.connection.request("list_agents_request",{all:!1})).agents??[]}catch{t=[]}t.sort((_,p)=>(p.lastActivity??0)-(_.lastActivity??0));const n=N.getState();for(const _ of t){if(n.findByAgentId(_.agentId))continue;let p=Kt;try{p=(await Ch(j=>e.agent(_.agentId).timeline.fetch({direction:"after",cursor:j??void 0,limit:200}))).reduce($s,Kt)}catch{}const S=p.rows.length===0;n.hydrate({id:`s-${_.agentId.slice(0,12)}`,agentId:_.agentId,title:_.title||(S?"New chat":(w=_.cwd)==null?void 0:w.split("/").pop())||"Restored",status:_.status??"idle",cwd:_.cwd||"~",timeline:p,userMessageCount:p.rows.filter(R=>R.kind==="user").length,model:_.model,modelProvider:_.modelProvider})}const{order:s,sessions:r}=N.getState(),o=s.length>0?r[s[0]??""]:void 0;if(!o)return;const a=await Et(e).catch(()=>null),c=Pe(o.cwd||"~",a),l=P.getState().pendingActiveWorkspace??c,u=fn(s,r,a);M.getState().setCollapsedWorkspaces(ad(u,l));const f=s.find(_=>{var p;return Pe(((p=r[_])==null?void 0:p.cwd)||"~",a)===l});N.getState().activate(f??o.id),M.getState().setCwd(l);const g=Dh(),h=new Set;for(const _ of s){const p=r[_];!(p!=null&&p.agentId)||!g.has(`agent:${p.agentId}`)||(It(p,a),h.add(_))}const m=P.getState().layouts[c]!==void 0;!h.has(o.id)&&!m&&It(o,a)}function Dh(){const e=new Set;for(const t of Object.values(P.getState().layouts))for(const n of Object.keys(t.pendingPlacement))n.startsWith("agent:")&&e.add(n);return e}async function Ph(e){try{let t=[];try{t=(await e.connection.request("list_terminals_request",{})).terminals??[]}catch{t=[]}if(t.length===0)return;const n=P.getState().layouts,s=Ah(),r=await Et(e).catch(()=>null),o=T.getState().open;for(const a of t){if(a.closed)continue;const c=Pe(a.cwd||"~",r);n[c]!==void 0&&!s.has(`terminal:${a.slot}`)||o({id:V.terminal(a.slot),kind:"terminal",label:a.name,closable:!0,data:{slot:a.slot,cwd:c},workspaceCwd:c})}}finally{P.getState().markHydrationSource("terminals")}}function Ah(){const e=new Set;for(const t of Object.values(P.getState().layouts))for(const n of Object.keys(t.pendingPlacement))n.startsWith("terminal:")&&e.add(n);return e}function qh(){const e=A(s=>s.client),t=A(s=>s.status),n=v.useRef(!1);v.useEffect(()=>{t!=="open"||!e||n.current||(n.current=!0,Ph(e))},[t,e])}function $h(){v.useEffect(()=>{function e(t){const n=M.getState();if(t.key==="Escape"){n.closeCwdPicker(),n.closeSessionMenu();return}const s=t.ctrlKey||t.metaKey;if(s&&t.key.toLowerCase()==="t"){t.preventDefault(),Xs(T.getState().activeWorkspaceCwd||"~");return}if(s&&t.key.toLowerCase()==="w"){const{activeTabId:r,tabs:o}=T.getState();if(!r)return;const a=o.find(c=>c.id===r);(a==null?void 0:a.closable)!==!1&&(t.preventDefault(),Gt(r))}}return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[])}function Bh(){return ph(),Ih(),Rh(),qh(),$h(),null}function zh(){return i.jsxs(aa,{children:[i.jsx(Bh,{}),i.jsx(fh,{})]})}function Oh(e){return e.managerActive?e.status==="closed"?"reconnect-now":e.status==="open"?e.probeInFlight?"none":"probe":"none":"none"}const Fh=5e3;function Wh(){let e=!1;function t(){const{status:s,reconnection:r,daemon:o}=A.getState(),a=Oh({status:s,managerActive:r!==null,probeInFlight:e});if(a==="reconnect-now"){r==null||r.reconnectNow();return}if(a==="probe"){if(!o)return;e=!0,o.ping(Fh).catch(()=>{A.getState().daemon===o&&o.close(4e3,"stale-connection-probe")}).finally(()=>{e=!1})}}function n(){document.visibilityState==="visible"&&t()}return document.addEventListener("visibilitychange",n),window.addEventListener("online",t),()=>{document.removeEventListener("visibilitychange",n),window.removeEventListener("online",t)}}const _r=document.getElementById("root");if(!_r)throw new Error("Missing #root element");Cr.createRoot(_r).render(i.jsx(v.StrictMode,{children:i.jsx(zh,{})}));Wh();export{ne as B,Kp as D,Me as E,ct as M,Js as P,nr as S,Qh as T,rm as V,A as a,it as b,am as c,om as d,Bs as e,Xf as f,Zh as g,nm as h,xt as i,T as j,ml as k,P as l,im as m,Pe as n,em as o,tm as p,Un as q,ke as r,_e as s,Lc as t,N as u,sm as v,hn as w};
|
|
18
|
+
//# sourceMappingURL=index-DonKPQN3.js.map
|