@av-pi-studio/web-client 0.0.21 → 0.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/web/assets/{BinaryFallbackViewer-BhFy0LGl.js → BinaryFallbackViewer-Ddt9biC-.js} +2 -2
  2. package/dist/web/assets/{BinaryFallbackViewer-BhFy0LGl.js.map → BinaryFallbackViewer-Ddt9biC-.js.map} +1 -1
  3. package/dist/web/assets/{ChatPanel-DZ7FTqNn.js → ChatPanel-DJCKiv6d.js} +2 -2
  4. package/dist/web/assets/{ChatPanel-DZ7FTqNn.js.map → ChatPanel-DJCKiv6d.js.map} +1 -1
  5. package/dist/web/assets/{CodeView-ozTMONne.js → CodeView-B8Po2Xbb.js} +2 -2
  6. package/dist/web/assets/{CodeView-ozTMONne.js.map → CodeView-B8Po2Xbb.js.map} +1 -1
  7. package/dist/web/assets/{FilePanel-DGpt9v6o.js → FilePanel-DjHwGoKj.js} +3 -3
  8. package/dist/web/assets/{FilePanel-DGpt9v6o.js.map → FilePanel-DjHwGoKj.js.map} +1 -1
  9. package/dist/web/assets/{ImageViewer-DHb5bAK_.js → ImageViewer-CEB-ofg3.js} +2 -2
  10. package/dist/web/assets/{ImageViewer-DHb5bAK_.js.map → ImageViewer-CEB-ofg3.js.map} +1 -1
  11. package/dist/web/assets/{MarkdownFileViewer-NgB_lfjf.js → MarkdownFileViewer-yHN9h8TF.js} +2 -2
  12. package/dist/web/assets/{MarkdownFileViewer-NgB_lfjf.js.map → MarkdownFileViewer-yHN9h8TF.js.map} +1 -1
  13. package/dist/web/assets/{TerminalPanel-Z2unQlh4.js → TerminalPanel-DWAfTzgv.js} +2 -2
  14. package/dist/web/assets/{TerminalPanel-Z2unQlh4.js.map → TerminalPanel-DWAfTzgv.js.map} +1 -1
  15. package/dist/web/assets/{TextViewer-D3AXEjY4.js → TextViewer-CfgaV03T.js} +2 -2
  16. package/dist/web/assets/{TextViewer-D3AXEjY4.js.map → TextViewer-CfgaV03T.js.map} +1 -1
  17. package/dist/web/assets/{VideoViewer-iipRPOwD.js → VideoViewer-oRVXsADe.js} +2 -2
  18. package/dist/web/assets/{VideoViewer-iipRPOwD.js.map → VideoViewer-oRVXsADe.js.map} +1 -1
  19. package/dist/web/assets/index-BOGL8JmE.js +3 -0
  20. package/dist/web/assets/index-BOGL8JmE.js.map +1 -0
  21. package/dist/web/assets/{use-file-download-DbXY9KUV.js → use-file-download-DGbISIMJ.js} +2 -2
  22. package/dist/web/assets/{use-file-download-DbXY9KUV.js.map → use-file-download-DGbISIMJ.js.map} +1 -1
  23. package/dist/web/index.html +1 -1
  24. package/package.json +3 -3
  25. package/dist/web/assets/index-hArhMYDk.js +0 -3
  26. package/dist/web/assets/index-hArhMYDk.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{r as a}from"./vendor-react-BoIQBqDW.js";import{u as f}from"./vendor-query-D5H9KBcL.js";import{a as s,c as m,r as y}from"./index-hArhMYDk.js";function p(o,u=!0){var i;const l=s(e=>e.client),n=s(e=>e.daemon),c=f({queryKey:y.fileDownload(o),queryFn:async()=>{if(!l||!n)throw new Error("not connected");const e=await m(n).download(o),t=new Blob([Uint8Array.from(e.bytes)],{type:e.mimeType||"application/octet-stream"});return{objectUrl:URL.createObjectURL(t),mimeType:e.mimeType,fileName:e.fileName}},enabled:!!l&&!!n&&!!o&&u,staleTime:1/0,gcTime:0}),r=a.useRef(null);return a.useEffect(()=>{var t;const e=((t=c.data)==null?void 0:t.objectUrl)??null;e&&r.current&&r.current!==e&&URL.revokeObjectURL(r.current),r.current=e},[(i=c.data)==null?void 0:i.objectUrl]),a.useEffect(()=>()=>{r.current&&URL.revokeObjectURL(r.current)},[]),c}export{p as u};
2
- //# sourceMappingURL=use-file-download-DbXY9KUV.js.map
1
+ import{r as a}from"./vendor-react-BoIQBqDW.js";import{u as f}from"./vendor-query-D5H9KBcL.js";import{a as s,c as m,r as y}from"./index-BOGL8JmE.js";function p(o,u=!0){var i;const l=s(e=>e.client),n=s(e=>e.daemon),c=f({queryKey:y.fileDownload(o),queryFn:async()=>{if(!l||!n)throw new Error("not connected");const e=await m(n).download(o),t=new Blob([Uint8Array.from(e.bytes)],{type:e.mimeType||"application/octet-stream"});return{objectUrl:URL.createObjectURL(t),mimeType:e.mimeType,fileName:e.fileName}},enabled:!!l&&!!n&&!!o&&u,staleTime:1/0,gcTime:0}),r=a.useRef(null);return a.useEffect(()=>{var t;const e=((t=c.data)==null?void 0:t.objectUrl)??null;e&&r.current&&r.current!==e&&URL.revokeObjectURL(r.current),r.current=e},[(i=c.data)==null?void 0:i.objectUrl]),a.useEffect(()=>()=>{r.current&&URL.revokeObjectURL(r.current)},[]),c}export{p as u};
2
+ //# sourceMappingURL=use-file-download-DGbISIMJ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-file-download-DbXY9KUV.js","sources":["../../../src/hooks/use-file-download.ts"],"sourcesContent":["/**\n * `use-file-download` — TanStack Query wrapper over the binary file-transfer download path\n * (`file_download_token_request` → `file_download_request` → chunked `Begin`/`Chunk`/`End`\n * binary frames), for viewers that need raw bytes rather than the UTF-8 preview\n * `file_read_request` returns (images, video — POC_TO_APP_PLAN_UI.md §4.5 follow-up: modular\n * file preview). Resolves to an object URL, revoked once superseded by a new one or once this\n * consumer unmounts.\n */\n\nimport { useEffect, useRef } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useConnectionStore } from \"@pi-studio-ui/lib/connection/connection-store.js\";\nimport { rpcKeys } from \"@pi-studio-ui/lib/connection/rpc-keys.js\";\nimport { transferFor } from \"./file-transfer-instance.js\";\n\nexport interface FileDownload {\n objectUrl: string;\n mimeType?: string;\n fileName?: string;\n}\n\nexport function useFileDownload(path: string, enabled = true) {\n const client = useConnectionStore((s) => s.client);\n const daemon = useConnectionStore((s) => s.daemon);\n\n const query = useQuery({\n queryKey: rpcKeys.fileDownload(path),\n queryFn: async (): Promise<FileDownload> => {\n if (!client || !daemon) throw new Error(\"not connected\");\n const file = await transferFor(daemon).download(path);\n // `Blob`'s DOM typings require an `ArrayBuffer`-backed view; the assembled `Uint8Array`'s\n // `ArrayBufferLike` backing (a decode-time implementation detail) doesn't satisfy that on\n // its own, so copy into a plain `ArrayBuffer`-backed `Uint8Array` first.\n const blob = new Blob([Uint8Array.from(file.bytes)], {\n type: file.mimeType || \"application/octet-stream\",\n });\n return { objectUrl: URL.createObjectURL(blob), mimeType: file.mimeType, fileName: file.fileName };\n },\n enabled: Boolean(client) && Boolean(daemon) && Boolean(path) && enabled,\n // Object URLs are process-local, non-serializable browser resources — never persist them or\n // silently refetch behind this hook's back (that would leak the previous blob's URL).\n staleTime: Infinity,\n gcTime: 0,\n });\n\n // Revoke the previous object URL once a new one supersedes it, and the current one on unmount\n // — TanStack Query's cache has no notion that this value owns a browser resource to release.\n const urlRef = useRef<string | null>(null);\n useEffect(() => {\n const nextUrl = query.data?.objectUrl ?? null;\n if (nextUrl && urlRef.current && urlRef.current !== nextUrl) {\n URL.revokeObjectURL(urlRef.current);\n }\n urlRef.current = nextUrl;\n }, [query.data?.objectUrl]);\n\n useEffect(() => {\n return () => {\n if (urlRef.current) URL.revokeObjectURL(urlRef.current);\n };\n }, []);\n\n return query;\n}\n"],"names":["useFileDownload","path","enabled","client","useConnectionStore","s","daemon","query","useQuery","rpcKeys","file","transferFor","blob","urlRef","useRef","useEffect","nextUrl","_a"],"mappings":"oJAqBO,SAASA,EAAgBC,EAAcC,EAAU,GAAM,OAC5D,MAAMC,EAASC,EAAoBC,GAAMA,EAAE,MAAM,EAC3CC,EAASF,EAAoBC,GAAMA,EAAE,MAAM,EAE3CE,EAAQC,EAAS,CACrB,SAAUC,EAAQ,aAAaR,CAAI,EACnC,QAAS,SAAmC,CAC1C,GAAI,CAACE,GAAU,CAACG,EAAQ,MAAM,IAAI,MAAM,eAAe,EACvD,MAAMI,EAAO,MAAMC,EAAYL,CAAM,EAAE,SAASL,CAAI,EAI9CW,EAAO,IAAI,KAAK,CAAC,WAAW,KAAKF,EAAK,KAAK,CAAC,EAAG,CACnD,KAAMA,EAAK,UAAY,0BAAA,CACxB,EACD,MAAO,CAAE,UAAW,IAAI,gBAAgBE,CAAI,EAAG,SAAUF,EAAK,SAAU,SAAUA,EAAK,QAAA,CACzF,EACA,QAAS,EAAQP,GAAW,EAAQG,GAAW,EAAQL,GAASC,EAGhE,UAAW,IACX,OAAQ,CAAA,CACT,EAIKW,EAASC,EAAAA,OAAsB,IAAI,EACzCC,OAAAA,EAAAA,UAAU,IAAM,OACd,MAAMC,IAAUC,EAAAV,EAAM,OAAN,YAAAU,EAAY,YAAa,KACrCD,GAAWH,EAAO,SAAWA,EAAO,UAAYG,GAClD,IAAI,gBAAgBH,EAAO,OAAO,EAEpCA,EAAO,QAAUG,CACnB,EAAG,EAACC,EAAAV,EAAM,OAAN,YAAAU,EAAY,SAAS,CAAC,EAE1BF,EAAAA,UAAU,IACD,IAAM,CACPF,EAAO,SAAS,IAAI,gBAAgBA,EAAO,OAAO,CACxD,EACC,CAAA,CAAE,EAEEN,CACT"}
1
+ {"version":3,"file":"use-file-download-DGbISIMJ.js","sources":["../../../src/hooks/use-file-download.ts"],"sourcesContent":["/**\n * `use-file-download` — TanStack Query wrapper over the binary file-transfer download path\n * (`file_download_token_request` → `file_download_request` → chunked `Begin`/`Chunk`/`End`\n * binary frames), for viewers that need raw bytes rather than the UTF-8 preview\n * `file_read_request` returns (images, video — POC_TO_APP_PLAN_UI.md §4.5 follow-up: modular\n * file preview). Resolves to an object URL, revoked once superseded by a new one or once this\n * consumer unmounts.\n */\n\nimport { useEffect, useRef } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useConnectionStore } from \"@pi-studio-ui/lib/connection/connection-store.js\";\nimport { rpcKeys } from \"@pi-studio-ui/lib/connection/rpc-keys.js\";\nimport { transferFor } from \"./file-transfer-instance.js\";\n\nexport interface FileDownload {\n objectUrl: string;\n mimeType?: string;\n fileName?: string;\n}\n\nexport function useFileDownload(path: string, enabled = true) {\n const client = useConnectionStore((s) => s.client);\n const daemon = useConnectionStore((s) => s.daemon);\n\n const query = useQuery({\n queryKey: rpcKeys.fileDownload(path),\n queryFn: async (): Promise<FileDownload> => {\n if (!client || !daemon) throw new Error(\"not connected\");\n const file = await transferFor(daemon).download(path);\n // `Blob`'s DOM typings require an `ArrayBuffer`-backed view; the assembled `Uint8Array`'s\n // `ArrayBufferLike` backing (a decode-time implementation detail) doesn't satisfy that on\n // its own, so copy into a plain `ArrayBuffer`-backed `Uint8Array` first.\n const blob = new Blob([Uint8Array.from(file.bytes)], {\n type: file.mimeType || \"application/octet-stream\",\n });\n return { objectUrl: URL.createObjectURL(blob), mimeType: file.mimeType, fileName: file.fileName };\n },\n enabled: Boolean(client) && Boolean(daemon) && Boolean(path) && enabled,\n // Object URLs are process-local, non-serializable browser resources — never persist them or\n // silently refetch behind this hook's back (that would leak the previous blob's URL).\n staleTime: Infinity,\n gcTime: 0,\n });\n\n // Revoke the previous object URL once a new one supersedes it, and the current one on unmount\n // — TanStack Query's cache has no notion that this value owns a browser resource to release.\n const urlRef = useRef<string | null>(null);\n useEffect(() => {\n const nextUrl = query.data?.objectUrl ?? null;\n if (nextUrl && urlRef.current && urlRef.current !== nextUrl) {\n URL.revokeObjectURL(urlRef.current);\n }\n urlRef.current = nextUrl;\n }, [query.data?.objectUrl]);\n\n useEffect(() => {\n return () => {\n if (urlRef.current) URL.revokeObjectURL(urlRef.current);\n };\n }, []);\n\n return query;\n}\n"],"names":["useFileDownload","path","enabled","client","useConnectionStore","s","daemon","query","useQuery","rpcKeys","file","transferFor","blob","urlRef","useRef","useEffect","nextUrl","_a"],"mappings":"oJAqBO,SAASA,EAAgBC,EAAcC,EAAU,GAAM,OAC5D,MAAMC,EAASC,EAAoBC,GAAMA,EAAE,MAAM,EAC3CC,EAASF,EAAoBC,GAAMA,EAAE,MAAM,EAE3CE,EAAQC,EAAS,CACrB,SAAUC,EAAQ,aAAaR,CAAI,EACnC,QAAS,SAAmC,CAC1C,GAAI,CAACE,GAAU,CAACG,EAAQ,MAAM,IAAI,MAAM,eAAe,EACvD,MAAMI,EAAO,MAAMC,EAAYL,CAAM,EAAE,SAASL,CAAI,EAI9CW,EAAO,IAAI,KAAK,CAAC,WAAW,KAAKF,EAAK,KAAK,CAAC,EAAG,CACnD,KAAMA,EAAK,UAAY,0BAAA,CACxB,EACD,MAAO,CAAE,UAAW,IAAI,gBAAgBE,CAAI,EAAG,SAAUF,EAAK,SAAU,SAAUA,EAAK,QAAA,CACzF,EACA,QAAS,EAAQP,GAAW,EAAQG,GAAW,EAAQL,GAASC,EAGhE,UAAW,IACX,OAAQ,CAAA,CACT,EAIKW,EAASC,EAAAA,OAAsB,IAAI,EACzCC,OAAAA,EAAAA,UAAU,IAAM,OACd,MAAMC,IAAUC,EAAAV,EAAM,OAAN,YAAAU,EAAY,YAAa,KACrCD,GAAWH,EAAO,SAAWA,EAAO,UAAYG,GAClD,IAAI,gBAAgBH,EAAO,OAAO,EAEpCA,EAAO,QAAUG,CACnB,EAAG,EAACC,EAAAV,EAAM,OAAN,YAAAU,EAAY,SAAS,CAAC,EAE1BF,EAAAA,UAAU,IACD,IAAM,CACPF,EAAO,SAAS,IAAI,gBAAgBA,EAAO,OAAO,CACxD,EACC,CAAA,CAAE,EAEEN,CACT"}
@@ -4,7 +4,7 @@
4
4
  <meta charset="utf-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1" />
6
6
  <title>Pi-Studio</title>
7
- <script type="module" crossorigin src="/assets/index-hArhMYDk.js"></script>
7
+ <script type="module" crossorigin src="/assets/index-BOGL8JmE.js"></script>
8
8
  <link rel="modulepreload" crossorigin href="/assets/vendor-react-BoIQBqDW.js">
9
9
  <link rel="modulepreload" crossorigin href="/assets/vendor-query-D5H9KBcL.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/vendor-markdown-B8HSIhaA.js">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@av-pi-studio/web-client",
3
- "version": "0.0.21",
3
+ "version": "0.0.23",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
@@ -14,8 +14,8 @@
14
14
  "clean": "rm -rf dist *.tsbuildinfo"
15
15
  },
16
16
  "dependencies": {
17
- "@av-pi-studio/client": "^0.0.21",
18
- "@av-pi-studio/protocol": "^0.0.21",
17
+ "@av-pi-studio/client": "^0.0.23",
18
+ "@av-pi-studio/protocol": "^0.0.23",
19
19
  "@codemirror/language": "^6.12.4",
20
20
  "@codemirror/language-data": "^6.5.2",
21
21
  "@codemirror/state": "^6.7.1",
@@ -1,3 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ChatPanel-DZ7FTqNn.js","assets/vendor-react-BoIQBqDW.js","assets/vendor-query-D5H9KBcL.js","assets/vendor-icons-DwowToH7.js","assets/markdown-D9FuaV1m.js","assets/vendor-highlight-DCzuSv8g.js","assets/vendor-markdown-B8HSIhaA.js","assets/vendor--os7hw7d.js","assets/markdown-BQwXm0MF.css","assets/DiffView-DlVCPvLc.js","assets/DiffView-CRbeRztO.css","assets/vendor-overlays-UwLNGk04.js","assets/vendor-dnd-D9kA7FgH.js","assets/ChatPanel-Cz7YoXXW.css","assets/FilePanel-DGpt9v6o.js","assets/FilePanel-DIInFr3h.css","assets/TerminalPanel-Z2unQlh4.js","assets/vendor-terminal-BhzX2_ts.js","assets/vendor-terminal-DYP7pi_n.css","assets/TerminalPanel-BQj62G6N.css"])))=>i.map(i=>d[i]);
2
- var nn=Object.defineProperty;var sn=(e,t,n)=>t in e?nn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var I=(e,t,n)=>sn(e,typeof t!="symbol"?t+"":t,n);import{r as _,j as i,d as rn}from"./vendor-react-BoIQBqDW.js";import{Q as on,a as an,u as cn,b as ln,c as Le,d as dn}from"./vendor-query-D5H9KBcL.js";import{A as d,B as g,C as B,D as ft,E as H,F as _e,G as K,H as A,I as v,J as D,K as V,L as Ne,M as ce,N as ee}from"./vendor--os7hw7d.js";import{L as un,P as fn,a as pn,b as hn,c as mn,E as pt,C as ht,d as gn,F as yn,e as mt,f as bn,S as _n,G as wn,g as xn,M as Sn,X as Ee,h as gt,i as vn,U as kn,T as In,R as Cn,j as Tn,A as jn}from"./vendor-icons-DwowToH7.js";import{R as yt,T as bt,P as _t,C as wt,I as ae,S as xt,D as En,a as Nn,b as Rn,c as Bn,d as Xe,e as De}from"./vendor-overlays-UwLNGk04.js";import{u as An,a as $n,D as Mn,c as Dn,S as On,h as qn,P as Fn,b as Pn,C as Hn}from"./vendor-dnd-D9kA7FgH.js";import{_ as Ue}from"./vendor-highlight-DCzuSv8g.js";import"./vendor-markdown-B8HSIhaA.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 zn=new on;function St(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 Wn(e){return Math.max(0,Math.min(255,Math.round(e)))}function Ln({r:e,g:t,b:n}){const s=r=>Wn(r).toString(16).padStart(2,"0");return`#${s(e)}${s(t)}${s(n)}`}function Un(e){const{r:t,g:n,b:s}=St(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 Ke(e,t="#18181b",n="#ffffff"){return Un(e)>.45?t:n}function Kn(e,t){const{r:n,g:s,b:r}=St(e),o=Math.max(0,Math.min(1,t));return Ln({r:n+(255-n)*o,g:s+(255-s)*o,b:r+(255-r)*o})}function Se(e){const t=e.trim().replace(/^#/,"");return(t.length===3||t.length===6)&&!/[^0-9a-fA-F]/.test(t)}const P=(e,t,n,s,r,o,a,c,l,u,h)=>({50:e,100:t,200:n,300:s,400:r,500:o,600:a,700:c,800:l,900:u,950:h}),m={zinc:P("#fafafa","#f4f4f5","#e4e4e7","#d4d4d8","#a1a1aa","#71717a","#52525b","#3f3f46","#27272a","#18181b","#09090b"),gray:P("#f9fafb","#f3f4f6","#e5e7eb","#d1d5db","#9ca3af","#6b7280","#4b5563","#374151","#1f2937","#111827","#030712"),slate:P("#f8fafc","#f1f5f9","#e2e8f0","#cbd5e1","#94a3b8","#64748b","#475569","#334155","#1e293b","#0f172a","#020617"),blue:P("#eff6ff","#dbeafe","#bfdbfe","#93c5fd","#60a5fa","#3b82f6","#2563eb","#1d4ed8","#1e40af","#1e3a8a","#172554"),green:P("#f0fdf4","#dcfce7","#bbf7d0","#86efac","#4ade80","#22c55e","#16a34a","#15803d","#166534","#14532d","#052e16"),red:P("#fef2f2","#fee2e2","#fecaca","#fca5a5","#f87171","#ef4444","#dc2626","#b91c1c","#991b1b","#7f1d1d","#450a0a"),teal:P("#f0fdfa","#ccfbf1","#99f6e4","#5eead4","#2dd4bf","#14b8a6","#0d9488","#0f766e","#115e59","#134e4a","#042f2e"),amber:P("#fffbeb","#fef3c7","#fde68a","#fcd34d","#fbbf24","#f59e0b","#d97706","#b45309","#92400e","#78350f","#451a03"),yellow:P("#fefce8","#fef9c3","#fef08a","#fde047","#facc15","#eab308","#ca8a04","#a16207","#854d0e","#713f12","#422006"),purple:P("#faf5ff","#f3e8ff","#e9d5ff","#d8b4fe","#c084fc","#a855f7","#9333ea","#7e22ce","#6b21a8","#581c87","#3b0764"),orange:P("#fff7ed","#ffedd5","#fed7aa","#fdba74","#fb923c","#f97316","#ea580c","#c2410c","#9a3412","#7c2d12","#431407"),white:"#ffffff",black:"#000000"},Vn={statusSuccess:"#16a34a",statusDanger:"#dc2626",statusWarning:"#f59e0b",statusMerged:"#9333ea"},Gn={statusSuccess:"#15803d",statusDanger:"#b91c1c",statusWarning:"#d97706",statusMerged:"#7c3aed"};function Jn(){return{keyword:m.purple[300],string:m.green[300],number:m.orange[300],boolean:m.orange[300],comment:m.zinc[500],function:m.blue[300],variable:m.zinc[200],type:m.teal[300],class:m.amber[300],constant:m.orange[300],operator:m.zinc[400],punctuation:m.zinc[400],tag:m.red[300],attribute:m.amber[300],property:m.blue[200],regexp:m.teal[300],escape:m.orange[200],heading:m.blue[300],link:m.blue[400],deleted:m.red[400],inserted:m.green[400]}}function Xn(){return{keyword:m.purple[700],string:m.green[700],number:m.orange[700],boolean:m.orange[700],comment:m.zinc[500],function:m.blue[700],variable:m.zinc[800],type:m.teal[700],class:m.amber[700],constant:m.orange[700],operator:m.zinc[600],punctuation:m.zinc[600],tag:m.red[700],attribute:m.amber[700],property:m.blue[700],regexp:m.teal[700],escape:m.orange[700],heading:m.blue[700],link:m.blue[600],deleted:m.red[700],inserted:m.green[700]}}function vt(e,t,n){return{background:e,foreground:t,cursor:n,cursorAccent:e,selectionBackground:"rgba(255,255,255,0.18)",black:m.zinc[900],red:m.red[500],green:m.green[500],yellow:m.amber[500],blue:m.blue[500],magenta:m.purple[500],cyan:m.teal[500],white:m.zinc[300],brightBlack:m.zinc[600],brightRed:m.red[400],brightGreen:m.green[400],brightYellow:m.amber[400],brightBlue:m.blue[400],brightMagenta:m.purple[400],brightCyan:m.teal[400],brightWhite:m.zinc[50]}}function ue(e){const t=m.zinc[50],n=Ke(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:m.white,success:e.accent,successForeground:m.white,border:e.border,borderAccent:e.borderAccent,...Vn,diffAddition:m.green[400],diffDeletion:m.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:m,syntax:Jn(),terminal:vt(e.surface0,t,e.accent)}}function Yn(){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:Ke(t),destructive:"#b04138",destructiveForeground:"#ffffff",success:t,successForeground:"#ffffff",border:"#e4e4e7",borderAccent:"#ececf1",...Gn,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:m,syntax:Xn(),terminal:{...vt("#ffffff",e,t),selectionBackground:"rgba(0,0,0,0.15)",white:"#ffffff",brightWhite:"#fafafa"}}}const Qn={light:"#ffffff",dark:"#3b62b0",zinc:"#808080",midnight:"#4A6BA8",claude:"#D97757",ghostty:"#8caaee"},kt=["light","dark","zinc","midnight","claude","ghostty"];function Zn(e){if(e==="light")return Yn();switch(e){case"dark":return ue({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 ue({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 ue({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 ue({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 ue({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 It={};for(const e of kt){const t=e==="light"?"light":"dark";It[e]={name:e,colorScheme:t,colors:Zn(e),swatch:Qn[e]}}const es=It,ts={0:0,1:4,"1.5":6,2:8,3:12,4:16,6:24,8:32,12:48,16:64,20:80,24:96,32:128},Ct={xs:12,code:12,sm:14,base:16,lg:18,xl:20,"2xl":22,"3xl":26,"4xl":34},ns={normal:"400",medium:"500",semibold:"600",bold:"700"},ss={none:0,sm:2,base:4,md:6,lg:8,xl:12,"2xl":16,full:9999},rs={0:0,1:1,2:2},os={0:0,50:.5,100:1},as={xs:12,sm:14,md:16,lg:20},is={diff:22},Tt='system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',jt='ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace';function cs(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 Et(e){const t=es[e];return{name:e,colorScheme:t.colorScheme,colors:t.colors,spacing:ts,fontSize:{...Ct},fontFamily:{ui:Tt,mono:jt},lineHeight:{...is},iconSize:as,fontWeight:ns,borderRadius:ss,borderWidth:rs,opacity:os,shadow:cs(t.colorScheme),swatch:t.swatch}}const ls=16,ds=10,us=24;function fs(e,t){const n=t.themeName??e.name,s=Et(n),r=t.uiFont&&t.uiFont.trim()!==""?t.uiFont:Tt,o=t.monoFont&&t.monoFont.trim()!==""?t.monoFont:jt;let a={...s.fontSize};if(t.fontSize!=null){const l=Math.max(ds,Math.min(us,t.fontSize))/ls,u=["xs","code","sm","base","lg","xl","2xl","3xl","4xl"];for(const h of u){const p=Ct[h];a[h]=Math.round(p*l)}}return{...s,fontSize:a,fontFamily:{ui:r,mono:o}}}function ps(e){return Et(e)}const hs="dark";function ms(e){const t={};gs(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}`]=`${s}px`;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 gs(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&&ys(s,t),r&&(t["--pi-terminal-bg"]=r.background,t["--pi-terminal-fg"]=r.foreground)}function ys(e,t){for(const[n,s]of Object.entries(e))typeof s=="string"&&(t[`--syntax-${bs(n)}`]=s)}function bs(e){return e.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function _s(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 ws(e){const t=ms(e);_s(t)}const fe=d().min(1,"Asset path must not be empty"),xs=g({accent:d().refine(Se,{message:"accent must be a valid #rrggbb hex color"}),accentBright:d().refine(Se,{message:"accentBright must be a valid #rrggbb hex color"}).optional(),accentForeground:d().refine(Se,{message:"accentForeground must be a valid #rrggbb hex color"}).optional(),swatch:d().refine(Se,{message:"swatch must be a valid #rrggbb hex color"}).optional()}),Ss=g({logoLight:fe,logoDark:fe,logoMark:fe.optional(),icon:fe,splash:fe.optional()}),vs=g({docs:d().url().optional(),support:d().url().optional(),issues:d().url().optional(),website:d().url().optional()}).optional(),ks=g({copyright:d().optional(),companyName:d().optional()}).optional();g({productName:d().min(1,"productName is required"),shortName:d().optional(),tagline:d().optional(),colors:xs,assets:Ss,links:vs,legal:ks});function Is(e){const t=e.accent,n=e.accentBright??Kn(t,.35),s=e.accentForeground??Ke(t),r=e.swatch??t;return{accent:t,accentBright:n,accentForeground:s,swatch:r}}function Cs(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 Ye="pi-studio-appearance";function Ts(e,t){let n=c(e),s=null;function r(h){return h==="system"?typeof window<"u"&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":h}function o(h,p){const f=r(h),x=ps(f);let b=fs(x,{...p,themeName:f});if(t!=null&&t.colors){const j=Is(t.colors);b=Cs(b,j)}return b}function a(){const h=JSON.stringify({mode:n.mode,settings:n.settings});e.set(Ye,h)}function c(h){const p=h.get(Ye);let f=hs,x={};if(p)try{const j=JSON.parse(p);j.mode&&(kt.includes(j.mode)||j.mode==="system")&&(f=j.mode),j.settings&&typeof j.settings=="object"&&(x=j.settings)}catch{}const b=o(f,x);return{mode:f,settings:x,resolvedTheme:b}}function l(){n={...n,resolvedTheme:o(n.mode,n.settings)},a()}const u={getState(){return n},setMode(h){n={...n,mode:h},l(),u.apply()},updateSettings(h){n={...n,settings:{...n.settings,...h}},l(),u.apply()},apply(){ws(n.resolvedTheme)},listen(){if(typeof window>"u")return()=>{};const h=window.matchMedia("(prefers-color-scheme: dark)"),p=()=>{n.mode==="system"&&(l(),u.apply())};return h.addEventListener("change",p),s=()=>h.removeEventListener("change",p),s}};return u}function js({store:e,brandConfig:t,children:n}){const s=_.useRef(null);return s.current||(s.current=Ts(e,t),s.current.apply()),_.useEffect(()=>s.current.listen(),[]),i.jsx(i.Fragment,{children:n})}const Es={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 Ns({children:e}){return i.jsx(js,{store:Es,children:i.jsx(an,{client:zn,children:e})})}const Rs="_btn_1chbg_4",Bs="_secondary_1chbg_44",As="_outline_1chbg_53",$s="_ghost_1chbg_62",Ms="_destructive_1chbg_72",Ds="_iconOnly_1chbg_82",Os="_loadingSpinner_1chbg_89",qs="_piSpin_1chbg_1",ve={btn:Rs,default:"_default_1chbg_35",secondary:Bs,outline:As,ghost:$s,destructive:Ms,iconOnly:Ds,loadingSpinner:Os,piSpin:qs},Qe={xs:28,sm:32,md:36,lg:40},Fs={xs:12,sm:14,md:16,lg:20},Ze={xs:8,sm:10,md:12,lg:16},Ps={xs:12,sm:13,md:14,lg:15};function Hs(e){const{disabled:t,loading:n}=e;return t||n?{opacity:.5,isGhostHover:!1}:{opacity:1,isGhostHover:!1}}function F({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,...h}){const{opacity:p}=Hs({disabled:s??!1,loading:n}),f=s||n,x=Fs[t];return i.jsxs("button",{className:B(ve.btn,ve[e],a&&ve.iconOnly,u),disabled:f,"aria-busy":n||void 0,style:{minHeight:Qe[t],paddingLeft:a?void 0:Ze[t],paddingRight:a?void 0:Ze[t],fontSize:Ps[t],opacity:p,...a?{width:Qe[t]}:{},...l},...h,children:[n?i.jsx(un,{className:ve.loadingSpinner,size:x,"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 zs="_input_a7qyq_3",Ws="_textarea_a7qyq_32",Oe={input:zs,textarea:Ws},qe=_.forwardRef(function({className:t,...n},s){return i.jsx("input",{ref:s,className:B(Oe.input,t),...n})}),il=_.forwardRef(function({className:t,...n},s){return i.jsx("textarea",{ref:s,className:B(Oe.input,Oe.textarea,t),...n})}),Nt=d().datetime({offset:!0});d().uuid();d().regex(/^[A-Za-z0-9_-]+$/,"expected base64url");const be=ft([H(),Nt]),Ls=_e(["mobile","browser","cli","mcp"]),Us=g({type:v("hello"),clientId:d(),clientType:Ls,protocolVersion:H(),appVersion:d().optional(),capabilities:K(d(),A()).optional()}),Ks=g({status:v("server_info"),serverId:d(),hostname:d().optional(),version:d().optional(),capabilities:K(d(),D()),features:K(d(),D())}),Vs=g({type:v("status"),payload:Ks}),Gs=g({type:v("ping"),requestId:d(),clientSentAt:be.optional()}),Js=g({type:v("pong"),requestId:d(),clientSentAt:be.optional(),serverReceivedAt:be,serverSentAt:be}),Rt=_e(["initializing","idle","running","error","closed"]),Bt=g({mimeType:d().optional(),data:d().optional()}).passthrough(),Xs=g({prs:V(D()).optional(),issues:V(D()).optional()}).passthrough(),Ys=g({provider:d(),cwd:d(),modeId:d().optional(),model:d().optional(),thinkingOptionId:d().optional(),featureValues:K(d(),D()).optional(),title:d().nullable().optional(),approvalPolicy:d().optional(),sandboxMode:d().optional(),networkAccess:A().optional(),webSearch:A().optional(),extra:g({pi:D().optional()}).passthrough().optional(),systemPrompt:d().optional(),mcpServers:K(d(),D()).optional()}),Qs=g({type:v("create_agent_request"),requestId:d(),config:Ys,env:K(d(),d()).optional(),workspaceId:d().optional(),worktreeName:d().optional(),initialPrompt:d().optional(),clientMessageId:d().optional(),outputSchema:K(d(),D()).optional(),images:V(Bt).optional(),attachments:Xs.optional(),git:D().optional(),worktree:D().optional(),autoArchive:A().optional(),labels:K(d(),d()).default({})}),Zs=g({type:v("create_agent_response"),requestId:d(),payload:g({agentId:d()}).passthrough()}),er=g({type:v("agent_update"),agentId:d(),status:Rt.optional(),title:d().nullable().optional(),labels:K(d(),d()).optional()}),tr=g({type:v("agent_status"),agentId:d(),status:Rt}),nr=g({type:v("agent_list"),agents:V(g({id:d()}).passthrough())}),sr=g({type:v("agent_deleted"),agentId:d()}),rr=g({type:v("agent_archived"),agentId:d(),archivedAt:Nt.optional()}),At=Ne("kind",[g({kind:v("shell"),command:d().optional(),output:d().optional()}),g({kind:v("read"),path:d().optional(),output:d().optional()}),g({kind:v("edit"),path:d().optional(),diff:d().optional(),output:d().optional()}),g({kind:v("write"),path:d().optional(),output:d().optional()}),g({kind:v("search"),query:d().optional(),output:d().optional()}),g({kind:v("fetch"),url:d().optional(),output:d().optional()}),g({kind:v("task"),description:d().optional(),output:d().optional()})]),or=Ne("kind",[g({kind:v("user_message"),messageId:d().optional(),text:d().optional(),images:V(Bt).optional()}),g({kind:v("assistant_message"),messageId:d().optional(),text:d().optional()}),g({kind:v("reasoning"),text:d().optional()}),g({kind:v("tool_call"),callId:d().optional(),tool:At,status:d().optional()}),g({kind:v("turn_started"),turnId:d().optional()}),g({kind:v("turn_completed"),turnId:d().optional()}),g({kind:v("turn_failed"),turnId:d().optional(),error:d().optional()}),g({kind:v("turn_canceled"),turnId:d().optional()}),g({kind:v("error"),message:d().optional()})]),ar=g({type:v("agent_stream"),agentId:d(),seq:H().optional(),timestamp:be.optional(),event:or}),ir=_e(["before","after"]),cr=g({start:H(),end:H()}),lr=g({type:v("fetch_agent_timeline_request"),requestId:d(),agentId:d(),cursor:d().nullable().optional(),direction:ir,limit:H().optional()}),dr=g({type:v("fetch_agent_timeline_response"),requestId:d(),agentId:d().optional(),items:V(D()),seqStart:H(),seqEnd:H(),sourceSeqRanges:V(cr),collapsed:A(),hasNewer:A(),startCursor:d().nullable().optional(),endCursor:d().nullable().optional()}),ur=g({type:v("agent_permission_request"),requestId:d(),agentId:d(),toolName:d().optional(),tool:At.optional(),action:D().optional(),responses:V(d()).optional()}),fr=g({type:v("agent_permission_resolved"),requestId:d(),agentId:d(),decision:d().optional()}),pr=g({type:v("agent.permission.respond.request"),requestId:d(),permissionRequestId:d(),response:D()}),hr=g({type:v("agent.permission.respond.response"),requestId:d(),payload:g({resolved:A()}).passthrough()}),mr=g({type:v("respond_to_permission"),requestId:d(),permissionRequestId:d(),response:D()}),$t=_e(["conversation","files","both"]),gr=g({type:v("agent.rewind.request"),requestId:d(),agentId:d(),messageId:d(),mode:$t}).passthrough(),yr=g({type:v("agent.rewind.response"),requestId:d(),payload:g({agentId:d(),messageId:d(),mode:$t,truncatedAt:d().optional()}).passthrough()}).passthrough(),br=g({type:v("rpc_error"),requestId:d(),code:d().optional(),message:d().optional(),error:d().optional()}),_r=Ne("type",[Qs,Zs,er,tr,nr,sr,rr,ar,lr,dr,ur,fr,pr,hr,mr,gr,yr,br]),wr=g({type:d()}).passthrough(),xr=g({type:v("session"),message:ft([_r,wr])});Ne("type",[Us,Vs,Gs,Js,xr]);const se={Output:1,Input:2,Resize:3,Snapshot:4,Restore:5},Sr=Object.fromEntries(Object.entries(se).map(([e,t])=>[t,e])),Mt=g({rows:H().int().nonnegative(),cols:H().int().nonnegative()});class me extends Error{constructor(t){super(t),this.name="TerminalFrameError"}}const vr=new TextEncoder,kr=new TextDecoder;function Ir(e){if(!Number.isInteger(e)||e<0||e>255)throw new me(`slot must be an integer 0–255, got ${e}`)}function pe(e,t,n){const s=new Uint8Array(2+n.length);return s[0]=e,s[1]=t,s.set(n,2),s}function cl(e){switch(Ir(e.slot),e.opcode){case"Output":return pe(se.Output,e.slot,e.data);case"Input":return pe(se.Input,e.slot,e.data);case"Snapshot":return pe(se.Snapshot,e.slot,e.data);case"Restore":return pe(se.Restore,e.slot,e.data);case"Resize":{const t=JSON.stringify(Mt.parse({rows:e.rows,cols:e.cols}));return pe(se.Resize,e.slot,vr.encode(t))}}}function Cr(e){if(e.length<2)throw new me(`frame too short: ${e.length} bytes (need ≥ 2)`);const t=e[0],n=e[1],s=Sr[t];if(!s)throw new me(`unknown terminal opcode 0x${t.toString(16)}`);const r=e.subarray(2);if(s==="Resize"){let o;try{o=JSON.parse(kr.decode(r))}catch{throw new me("resize payload is not valid JSON")}const a=Mt.safeParse(o);if(!a.success)throw new me("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 ie={Begin:16,Chunk:17,End:18,Error:19},Tr=Object.fromEntries(Object.entries(ie).map(([e,t])=>[t,e])),Dt=g({transferId:d(),fileName:d().optional(),mimeType:d().optional(),totalBytes:H().int().nonnegative().optional()});class ge extends Error{constructor(t){super(t),this.name="FileTransferFrameError"}}const et=new TextEncoder,tt=new TextDecoder;function jr(e){if(!Number.isInteger(e)||e<0||e>255)throw new ge(`stream 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 Be(e){switch(jr(e.stream),e.opcode){case"Begin":return ke(ie.Begin,e.stream,et.encode(JSON.stringify(Dt.parse(e.meta))));case"Chunk":return ke(ie.Chunk,e.stream,e.data);case"End":return ke(ie.End,e.stream,new Uint8Array([e.ok?1:0]));case"Error":return ke(ie.Error,e.stream,et.encode(e.message))}}function Er(e){if(e.length<2)throw new ge(`frame too short: ${e.length} bytes (need ≥ 2)`);const t=e[0],n=e[1],s=Tr[t];if(!s)throw new ge(`unknown file-transfer opcode 0x${t.toString(16)}`);const r=e.subarray(2);switch(s){case"Begin":{let o;try{o=JSON.parse(tt.decode(r))}catch{throw new ge("begin payload is not valid JSON")}const a=Dt.safeParse(o);if(!a.success)throw new ge("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:tt.decode(r)}}}function Nr(e){try{return Er(e)}catch{return null}}const Rr=d().regex(/^[a-z][a-z0-9-]*$/,"invalid provider id"),Br=_e(["safe","moderate","dangerous","planning"]),Ar=g({supportsStreaming:A(),supportsSessionPersistence:A(),supportsDynamicModes:A(),supportsMcpServers:A(),supportsReasoningStream:A(),supportsToolInvocations:A(),supportsRewindConversation:A().optional(),supportsRewindFiles:A().optional(),supportsRewindBoth:A().optional()}).passthrough(),$r=g({id:d(),label:d().optional(),description:d().optional(),icon:d().optional(),colorTier:Br});g({id:Rr,label:d(),description:d().optional(),extends:d().optional(),modes:V($r),capabilities:Ar});function Fe(e){return typeof e=="string"?e:e instanceof Uint8Array||Buffer.isBuffer(e)?e.toString("utf8"):String(e??"")}function Ot(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)}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,Fe(c.reason))},t.onmessage=c=>{var u,h,p,f;const{data:l}=c;l instanceof ArrayBuffer||l instanceof Uint8Array?(u=n.onMessage)==null||u.call(n,l):typeof l=="string"?(h=n.onMessage)==null||h.call(n,l):typeof Blob<"u"&&l instanceof Blob?(p=n.onMessage)==null||p.call(n,l):Buffer.isBuffer(l)&&((f=n.onMessage)==null||f.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 ye="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function qt(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+=ye[s>>2],t+=ye[(s&3)<<4|a>>4],t+=r?ye[(a&15)<<2|c>>6]:"=",t+=o?ye[c&63]:"="}return t}function Ft(e){const t=e.replace(/=+$/,""),n=[];let s=0,r=0;for(const o of t){const a=ye.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 Mr(e){try{const t=JSON.parse(e);return!t||typeof t.type!="string"?null:t}catch{return null}}const je=24;function Pt(e,t){const n=ce.randomBytes(je),s=ce.box.after(e,n,t),r=new Uint8Array(n.length+s.length);return r.set(n,0),r.set(s,n.length),qt(r)}function Ht(e,t){let n;try{n=Ft(e)}catch{return null}if(n.length<je)return null;const s=n.slice(0,je),r=n.slice(je);return ce.box.open.after(r,s,t)}function Dr(e,t){return Pt(new TextEncoder().encode(e),t)}function Or(e,t){const n=Ht(e,t);return n?new TextDecoder().decode(n):null}function qr(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 h,p;if(a)return;const l=r();if(!o()||!l)return;const u=Or(c.frame,l);if(u===null){(h=s.onAuthError)==null||h.call(s,new Error(`relay ${e} channel: message failed authentication`));return}(p=s.onMessage)==null||p.call(s,u)},handleBinaryFrame(c){var h,p;if(a)return;const l=r();if(!o()||!l)return;const u=Ht(c.frame,l);if(u===null){(h=s.onAuthError)==null||h.call(s,new Error(`relay ${e} channel: binary message failed authentication`));return}(p=s.onBinaryMessage)==null||p.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:Dr(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:Pt(c,l)}))},close(){a||(a=!0,n.close())}}}function Fr(e){const{transport:t,attachment:n,daemonPublicKey:s}=e,r=e.events??{},o=ce.box.keyPair(),a=ce.box.before(s,o.secretKey);let c=!1;const l=qr("client",n,t,r,()=>a,()=>c);return t.onMessage(u=>{var p;const h=Mr(u);if(h){if(h.type==="e2ee_ready"){if(c)return;c=!0,(p=r.onReady)==null||p.call(r);return}if(h.type==="e2ee_app"){l.handleAppFrame(h);return}h.type==="e2ee_bin"&&l.handleBinaryFrame(h)}}),t.send(JSON.stringify({type:"e2ee_hello",ephemeralPublicKey:qt(o.publicKey)})),{role:"client",attachment:n,get ready(){return c},send:l.send,sendBinary:l.sendBinary,close:l.close}}const Pr=16;function Hr(e){const t=ce.hash(e);let n="";for(let s=0;s<Pr;s++)n+=t[s].toString(16).padStart(2,"0");return n}function zr(e){const t=e.useTls?"wss":"ws",n=e.endpoint.replace(/^(?:https?|wss?):\/\//,"").replace(/\/+$/,"");return`${t}://${n}`}function Wr(e){let t=null,n=null;const s=e.sessionId??Hr(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(f){c(f);return}const u=t,h=[],p=[];u.onopen=()=>{u.send(JSON.stringify({type:"relay_register",sessionId:s})),n=Fr({transport:{send:f=>u.send(f),onMessage:f=>h.push(f),onClose:f=>p.push(f),close:()=>u.close()},attachment:{sessionId:s},daemonPublicKey:e.daemonPublicKey,events:{onReady:()=>a(),onMessage:f=>{var x;return(x=r.onMessage)==null?void 0:x.call(r,f)},onBinaryMessage:f=>{var x;return(x=r.onMessage)==null?void 0:x.call(r,f.slice().buffer)},onAuthError:f=>{var x;return(x=r.onError)==null?void 0:x.call(r,f)}}})},u.onerror=f=>{var x;u.readyState!==1&&c(f),(x=r.onError)==null||x.call(r,f)},u.onclose=f=>{var x;for(const b of p)b(Fe(f.reason));(x=r.onClose)==null||x.call(r,f.code,Fe(f.reason))},u.onmessage=f=>{const{data:x}=f;if(typeof x=="string")for(const b of h)b(x)}})},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 Lr(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=Ft(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 Ur=1;function Pe(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`id-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}class Kr extends Error{constructor(t,n,s){super(t),this.requestId=n,this.code=s,this.name="RpcError"}}class nt extends Error{constructor(t){super(`RPC ${t} timed out`),this.requestId=t,this.name="RpcTimeoutError"}}class Vr{constructor(t){I(this,"transport");I(this,"rpcTimeoutMs");I(this,"now");I(this,"_state","idle");I(this,"_serverId",null);I(this,"_features",{});I(this,"_serverCapabilities",{});I(this,"pending",new Map);I(this,"sessionHandlers",new Set);I(this,"terminalHandlers",new Set);I(this,"fileTransferHandlers",new Set);I(this,"stateHandlers",new Set);I(this,"helloResolve",null);I(this,"helloReject",null);this.options=t,this.transport=t.transport??Ot(),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??Ur,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??Pe();return new Promise((o,a)=>{const c=s??this.rpcTimeoutMs,l=c>0?setTimeout(()=>{this.pending.delete(r),a(new nt(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=Pe();return new Promise((s,r)=>{const o=t>0?setTimeout(()=>{this.pending.delete(n),r(new nt(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(ie).includes(n)){const o=Nr(t);if(!o)return;for(const a of this.fileTransferHandlers)a(o);return}const r=Cr(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 Kr(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 Gr{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 Xr(this.daemon,t)}workspace(t){return new Yr(this.daemon,t)}get providers(){return new Qr(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 Jr{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 Xr{constructor(t,n){I(this,"timeline");this.daemon=t,this.agentId=n,this.timeline=new Jr(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})}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)})}}class Yr{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 Qr{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})}refreshSnapshot(){return this.daemon.request("providers.snapshot.refresh.request",{})}}const st=32*1024;function Zr(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 eo{constructor(t){I(this,"pending",new Map);I(this,"nextStream",1);I(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){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=this.nextStream++,r=new Promise((a,c)=>{this.pending.set(s,{chunks:[],meta:{},resolve:a,reject:c})}),o=await this.daemon.request("file_download_request",{token:n.token,stream:s});if(!o.ok)throw this.pending.delete(s),new Error(o.error??"download request failed");return r}async upload(t,n){const s=Pe(),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(Be({opcode:"Begin",stream:o,meta:{transferId:s}}));for(let a=0;a<n.length;a+=st){const c=n.subarray(a,a+st);this.daemon.sendBinary(Be({opcode:"Chunk",stream:o,data:c}))}this.daemon.sendBinary(Be({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:Zr(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 to{constructor(t,n={}){I(this,"initialDelayMs");I(this,"maxDelayMs");I(this,"factor");I(this,"jitter");I(this,"maxAttempts");I(this,"setTimer");I(this,"clearTimer");I(this,"random");I(this,"attempt",0);I(this,"timer",null);I(this,"active",!1);I(this,"detachState",null);I(this,"reconnectedHandlers",new Set);I(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}get attemptCount(){return this.attempt}scheduleReconnect(){if(!this.active||this.attempt>=this.maxAttempts)return;this.attempt+=1;const t=this.delayForAttempt(this.attempt);this.timer=this.setTimer(()=>{this.timer=null,this.tryReconnect()},t)}async tryReconnect(){if(!this.active)return;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()}}}function rt(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 no(e){const t=Lr(e);return t!=null&&t.relay?{mode:"relay",url:zr(t.relay),daemonPublicKey:t.publicKey}:t!=null&&t.host?{mode:"direct",url:rt(t.host)}:{mode:"direct",url:rt(e)}}function so(){return"web-"+Math.random().toString(36).slice(2,10)}const T=ee()((e,t)=>({status:"idle",serverInfo:null,error:null,daemon:null,client:null,reconnection:null,async connect(n){t().disconnect();const s=no(n.url);let r;s.mode==="relay"?r=Wr({daemonPublicKey:s.daemonPublicKey}):n.password&&(r=Ot(l=>new WebSocket(l,[`pi-studio.bearer.${n.password}`])));const o=new Vr({url:s.url,clientId:n.clientId??so(),clientType:"browser",capabilities:{},transport:r,rpcTimeoutMs:1800*1e3}),a=new Gr(o),c=new to(o);o.onStateChange(l=>e({status:l})),c.onReconnected(()=>e({error:null})),c.onReconnectFailed(l=>{e({error:l instanceof Error?l.message:String(l)})}),e({daemon:o,client:a,reconnection:c,error:null,status:"connecting"});try{const l=await o.connect();e({serverInfo:l}),c.start()}catch(l){throw e({error:l instanceof Error?l.message:String(l)}),l}},disconnect(){const{daemon:n,reconnection:s}=t();s==null||s.stop(),n==null||n.close(),e({status:"idle",serverInfo:null,daemon:null,client:null,reconnection:null})}})),ro=100,oo=480,ao=220,io=280;function Ie(e){return Math.min(oo,Math.max(ro,e))}const k=ee()(e=>({host:"ws://127.0.0.1:6767",password:"",cwd:"~",cwdPickerOpen:!1,sessionMenu:null,fileMenu:null,rightSidebarTab:"files",collapsedWorkspaces:new Set,leftSidebarCollapsed:!1,rightSidebarCollapsed:!1,leftSidebarWidth:ao,rightSidebarWidth:io,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}),openFileMenu:(t,n,s,r)=>e({fileMenu:{path:t,isDirectory:n,x:s,y:r}}),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}}),toggleLeftSidebar:()=>e(t=>({leftSidebarCollapsed:!t.leftSidebarCollapsed})),toggleRightSidebar:()=>e(t=>({rightSidebarCollapsed:!t.rightSidebarCollapsed})),setLeftSidebarWidth:t=>e({leftSidebarWidth:Ie(t)}),setRightSidebarWidth:t=>e({rightSidebarWidth:Ie(t)}),resizeLeftSidebar:t=>e(n=>({leftSidebarWidth:Ie(n.leftSidebarWidth+t)})),resizeRightSidebar:t=>e(n=>({rightSidebarWidth:Ie(n.rightSidebarWidth+t)}))})),co="_wrap_emmus_1",lo="_dot_emmus_8",uo="_open_emmus_15",fo="_connecting_emmus_18",po="_closed_emmus_21",ho="_idle_emmus_22",mo="_closing_emmus_23",Ae={wrap:co,dot:lo,open:uo,connecting:fo,closed:po,idle:ho,closing:mo},go={idle:"disconnected",connecting:"connecting…",open:"connected",closing:"disconnecting…",closed:"disconnected"};function yo(){const e=T(n=>n.status),t=T(n=>n.error);return i.jsxs("span",{className:Ae.wrap,title:t??void 0,children:[i.jsx("span",{className:B(Ae.dot,Ae[e])}),go[e]??e]})}const bo="_toolbar_i9hmh_1",_o="_brand_i9hmh_10",wo="_version_i9hmh_16",xo="_sep_i9hmh_22",So="_host_i9hmh_28",vo="_password_i9hmh_31",ko="_sidebarToggles_i9hmh_34",Y={toolbar:bo,brand:_o,version:wo,sep:xo,host:So,password:vo,sidebarToggles:ko};function Io(){const e=T(f=>f.status),t=T(f=>f.connect),n=T(f=>f.disconnect),s=k(f=>f.host),r=k(f=>f.setHost),o=k(f=>f.password),a=k(f=>f.setPassword),c=k(f=>f.leftSidebarCollapsed),l=k(f=>f.toggleLeftSidebar),u=k(f=>f.rightSidebarCollapsed),h=k(f=>f.toggleRightSidebar),p=e==="open"||e==="connecting";return i.jsxs("div",{className:Y.toolbar,children:[i.jsx("span",{className:Y.brand,children:"Pi-Studio"}),i.jsxs("span",{className:Y.version,children:["v","0.0.21"]}),i.jsx(yo,{}),i.jsx("div",{className:Y.sep}),i.jsx(qe,{className:Y.host,value:s,onChange:f=>r(f.target.value),placeholder:"host:port, ws://…/http://…, or a pasted pairing link",disabled:p}),i.jsx(qe,{className:Y.password,type:"password",value:o,onChange:f=>a(f.target.value),placeholder:"password",disabled:p}),e==="open"||e==="connecting"||e==="closing"?i.jsx(F,{size:"sm",onClick:()=>n(),children:"Disconnect"}):i.jsx(F,{size:"sm",variant:"default",onClick:()=>void t({url:s,password:o||void 0}),children:"Connect"}),i.jsxs("div",{className:Y.sidebarToggles,children:[i.jsx(F,{size:"sm",variant:"ghost",iconOnly:!0,title:c?"Show sessions sidebar":"Hide sessions sidebar",onClick:()=>l(),children:c?i.jsx(fn,{size:16}):i.jsx(pn,{size:16})}),i.jsx(F,{size:"sm",variant:"ghost",iconOnly:!0,title:u?"Show files/changes sidebar":"Hide files/changes sidebar",onClick:()=>h(),children:u?i.jsx(hn,{size:16}):i.jsx(mn,{size:16})})]})]})}const He={rows:[],streamingAssistantIndex:null,streamingReasoningIndex:null,toolIndexByCallId:{}};let ot=0;function J(){return ot+=1,`row-${ot}`}function Co(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 To(e,t){return e??`${t.kind}:${Co(t)}`}function jo(e){return{...e,streamingAssistantIndex:null,streamingReasoningIndex:null}}function Eo(e,t){var o;const n=e.rows.slice();let s=e.streamingAssistantIndex;if(s===null||((o=n[s])==null?void 0:o.kind)!=="assistant"){const a={kind:"assistant",id:J(),text:"",streaming:!0};n.push(a),s=n.length-1}const r=n[s];return!r||r.kind!=="assistant"?e:(n[s]={...r,text:r.text+t},{...e,rows:n,streamingAssistantIndex:s,streamingReasoningIndex:null})}function No(e,t){var o;const n=e.rows.slice();let s=e.streamingReasoningIndex;if(s===null||((o=n[s])==null?void 0:o.kind)!=="reasoning"){const a={kind:"reasoning",id:J(),text:"",streaming:!0};n.push(a),s=n.length-1}const r=n[s];return!r||r.kind!=="reasoning"?e:(n[s]={...r,text:r.text+t},{...e,rows:n,streamingReasoningIndex:s,streamingAssistantIndex:null})}function Ro(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 Bo(e,t){var c;const n=To(t.callId,t.tool),s=t.status==="completed"||t.status==="error"?t.status:"running",r=e.toolIndexByCallId[n],o=e.rows.slice();if(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:Ro(l.tool,t.tool),status:s},{...e,rows:o,streamingAssistantIndex:null,streamingReasoningIndex:null})}const a={kind:"tool",id:J(),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 Ve(e){const t=e.rows.slice();if(e.streamingAssistantIndex!==null){const n=t[e.streamingAssistantIndex];(n==null?void 0:n.kind)==="assistant"&&(t[e.streamingAssistantIndex]={...n,streaming:!1})}if(e.streamingReasoningIndex!==null){const n=t[e.streamingReasoningIndex];(n==null?void 0:n.kind)==="reasoning"&&(t[e.streamingReasoningIndex]={...n,streaming:!1})}return{...e,rows:t,streamingAssistantIndex:null,streamingReasoningIndex:null}}function Ao(e,t){const n=Ve(e),s={kind:"error",id:J(),text:t||"turn failed"};return{...n,rows:[...n.rows,s]}}function $o(e){const t=Ve(e),n={kind:"system",id:J(),text:"(canceled)"};return{...t,rows:[...t.rows,n]}}function Mo(e,t){const n={kind:"error",id:J(),text:t||"error"};return{...e,rows:[...e.rows,n]}}function Do(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:J(),text:t,images:n,clientMessageId:s};return{...e,rows:[...e.rows,r]}}function zt(e,t){switch(t.kind){case"turn_started":return jo(e);case"user_message":return Do(e,t.text??"",t.images,t.messageId);case"assistant_message":return Eo(e,t.text??"");case"reasoning":return No(e,t.text??"");case"tool_call":return Bo(e,t);case"turn_completed":return Ve(e);case"turn_failed":return Ao(e,t.error);case"turn_canceled":return $o(e);case"error":return Mo(e,t.message);default:return e}}function Oo(e,t,n,s){const r={kind:"user",id:J(),text:n,images:s,clientMessageId:t,pending:!0};return{...e,rows:[...e.rows,r]}}function qo(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 at=0;function Fo(){return at+=1,`s-${Date.now().toString(36)}-${at}`}const M=ee()((e,t)=>({sessions:{},order:[],activeSessionId:null,createSession(n){const s=Fo(),r={id:s,agentId:null,title:"New chat",status:"idle",cwd:n,timeline:He,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)},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=zt(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){e(a=>{const c=a.sessions[n];if(!c)return a;const l=Oo(c.timeline,s,r,o);return{sessions:{...a.sessions,[n]:{...c,timeline:l,userMessageCount:c.userMessageCount+1}}}})},markUserMessageFailed(n,s){e(r=>{const o=r.sessions[n];if(!o)return r;const a=qo(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)}}));function $e(e,t){return e.filter(n=>n.workspaceCwd===t)}const C=ee()((e,t)=>({tabs:[],activeTabId:null,activeWorkspaceCwd:null,lastActiveTabByWorkspace:{},open(n){const s=t().tabs.find(r=>r.id===n.id);if(s){t().activate(s.id);return}e(r=>({tabs:[...r.tabs,n],activeTabId:n.id,activeWorkspaceCwd:n.workspaceCwd,lastActiveTabByWorkspace:{...r.lastActiveTabByWorkspace,[n.workspaceCwd]:n.id}}))},close(n){e(s=>{const r=s.tabs.find(u=>u.id===n);if(!r)return s;const o=s.tabs.findIndex(u=>u.id===n),a=s.tabs.filter(u=>u.id!==n);let c=s.activeTabId;const l={...s.lastActiveTabByWorkspace};if(c===n){const u=$e(a,r.workspaceCwd),h=Math.min(o,u.length-1),p=u[h];c=(p==null?void 0:p.id)??null}if(l[r.workspaceCwd]===n){const u=$e(a,r.workspaceCwd)[0];u?l[r.workspaceCwd]=u.id:delete l[r.workspaceCwd]}return{tabs:a,activeTabId:c,lastActiveTabByWorkspace:l}})},activate(n){e(s=>{const r=s.tabs.find(o=>o.id===n);return r?{activeTabId:n,activeWorkspaceCwd:r.workspaceCwd,lastActiveTabByWorkspace:{...s.lastActiveTabByWorkspace,[r.workspaceCwd]:n}}:s})},switchWorkspace(n){e(s=>{var l;const r=$e(s.tabs,n),o=s.lastActiveTabByWorkspace[n],c=o&&r.some(u=>u.id===o)?o:((l=r[0])==null?void 0:l.id)??null;return{activeWorkspaceCwd:n,activeTabId:c,lastActiveTabByWorkspace:c?{...s.lastActiveTabByWorkspace,[n]:c}:s.lastActiveTabByWorkspace}})},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)}))}})),z={chat:e=>`chat-${e}`,file:e=>`file-${e}`,diff:(e,t)=>`diff-${e}${t?"-staged":""}`,terminal:e=>`term-${e}`};let Me=0;function Wt(e){Me+=1,C.getState().open({id:z.terminal(`new-${Me}`),kind:"terminal",label:`Terminal ${Me}`,closable:!0,data:{slot:null,cwd:e},workspaceCwd:e})}const Ce=ee()(e=>({rootPath:"",expanded:new Set,expandedByRoot:new Map,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}}),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}})}));let re=null;const ze=new Set;function Po(e){return ze.add(e),()=>ze.delete(e)}async function Ge(e){var t;if(re)return re;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");re="/home/"+((r==null?void 0:r.name)||"user")}catch{return"/tmp"}for(const n of ze)n(re);return re}function Ho(){return re}async function zo(e,t){return t==="~"||t.startsWith("~/")?await Ge(e)+t.slice(1):t}function Lt(){const e=T(r=>r.client),t=T(r=>r.status),[n,s]=_.useState(Ho());return _.useEffect(()=>Po(s),[]),_.useEffect(()=>{!e||t!=="open"||n||Ge(e)},[e,t,n]),n}const Wo="_dot_202py_3",Lo={dot:Wo};function Uo(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 it=8,Ko={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 Vo({className:e,...t}){const n=Uo(t);return n?i.jsx("span",{className:`${Lo.dot}${e?` ${e}`:""}`,style:{width:it,height:it,backgroundColor:Ko[n]??"currentColor"},role:"presentation"}):null}const Go={initializing:"queued",idle:"idle",running:"running",error:"error",closed:"finished"};function Jo(e){return Go[e]??"idle"}const Xo="_wrap_sqws5_1",Yo="_header_sqws5_7",Qo="_list_sqws5_23",Zo="_item_sqws5_28",ea="_active_sqws5_37",ta="_title_sqws5_40",na="_meta_sqws5_49",sa="_menuBtn_sqws5_57",ra="_workspaceGroup_sqws5_75",oa="_workspaceHeader_sqws5_78",aa="_workspaceChevron_sqws5_91",ia="_workspaceIcon_sqws5_102",ca="_workspaceLabel_sqws5_106",la="_workspaceCount_sqws5_112",da="_newSessionBtn_sqws5_117",ua="_workspaceSessions_sqws5_129",$={wrap:Xo,header:Yo,list:Qo,item:Zo,active:ea,title:ta,meta:na,menuBtn:sa,workspaceGroup:ra,workspaceHeader:oa,workspaceChevron:aa,workspaceIcon:ia,workspaceLabel:ca,workspaceCount:la,newSessionBtn:da,workspaceSessions:ua};function fa({session:e,active:t,onSelect:n,onOpenMenu:s}){return i.jsxs("div",{className:B($.item,t&&$.active),onClick:n,onContextMenu:r=>{r.preventDefault(),s(r.clientX,r.clientY)},children:[i.jsxs("div",{className:$.title,children:[i.jsx(Vo,{status:Jo(e.status),showInactive:!0}),i.jsx("span",{children:e.title})]}),i.jsxs("div",{className:$.meta,children:[e.cwd||"~"," · ",e.agentId?e.agentId.slice(0,8):"new"," ·"," ",e.userMessageCount," msgs"]}),i.jsx("button",{type:"button",className:$.menuBtn,title:"Actions",onClick:r=>{r.stopPropagation();const o=r.currentTarget.getBoundingClientRect();s(o.left,o.bottom)},children:i.jsx(pt,{size:14})})]})}const pa="_trigger_16o4s_1",ha="_content_16o4s_7",ma="_item_16o4s_16",ga="_danger_16o4s_33",ya="_sep_16o4s_36",U={trigger:pa,content:ha,item:ma,danger:ga,sep:ya};function ba(){const e=k(b=>b.sessionMenu),t=k(b=>b.closeSessionMenu),n=T(b=>b.client),s=_.useRef(null),[r,o]=_.useState(!1);_.useEffect(()=>{o(e!==null)},[e]);const a=M(b=>e?b.sessions[e.sessionId]:void 0);if(!e)return null;const c=!!(a!=null&&a.agentId)&&(a==null?void 0:a.status)==="running";function l(b){o(b),b||t()}function u(){if(!a)return;const b=window.prompt("Rename:",a.title);if(b!=null&&b.trim()){const j=b.trim();M.getState().setTitle(a.id,j),C.getState().updateLabel(z.chat(a.id),j),a.agentId&&(n==null||n.agent(a.agentId).update({title:j}).catch(()=>{}))}t()}function h(){a!=null&&a.agentId&&(n==null||n.agent(a.agentId).interrupt().catch(()=>{})),t()}function p(b){M.getState().remove(b),C.getState().close(z.chat(b))}async function f(){if(a){if(!window.confirm("Archive this agent? It can be resumed later."))return t();if(t(),!a.agentId){p(a.id);return}if(!n){window.alert("Not connected — cannot archive remotely.");return}try{await n.agent(a.agentId).archive(),p(a.id)}catch(b){window.alert(`Failed to archive: ${b instanceof Error?b.message:String(b)}`)}}}async function x(){if(a){if(!window.confirm("Permanently delete this agent? This cannot be undone."))return t();if(t(),!a.agentId){p(a.id);return}if(!n){window.alert("Not connected — cannot delete remotely.");return}try{await n.agent(a.agentId).delete(),p(a.id)}catch(b){window.alert(`Failed to delete: ${b instanceof Error?b.message:String(b)}`)}}}return i.jsxs(yt,{open:r,onOpenChange:l,modal:!1,children:[i.jsx(bt,{asChild:!0,children:i.jsx("button",{ref:s,type:"button",className:U.trigger,style:{left:e.x,top:e.y},"aria-hidden":!0,tabIndex:-1})}),i.jsx(_t,{children:i.jsxs(wt,{className:U.content,align:"start",sideOffset:2,children:[i.jsx(ae,{className:U.item,onSelect:u,children:"Rename"}),i.jsx(ae,{className:U.item,disabled:!c,onSelect:h,children:"Stop agent"}),i.jsx(xt,{className:U.sep}),i.jsx(ae,{className:`${U.item} ${U.danger}`,onSelect:f,children:"Archive"}),i.jsx(ae,{className:`${U.item} ${U.danger}`,onSelect:x,children:"Delete permanently"})]})})]})}function _a({label:e,cwd:t,sessionCount:n,collapsed:s,onToggleCollapsed:r,onNewSession:o}){return i.jsxs("div",{className:$.workspaceHeader,onClick:r,title:t,children:[i.jsx("button",{type:"button",className:$.workspaceChevron,"aria-label":s?"Expand workspace":"Collapse workspace",onClick:a=>{a.stopPropagation(),r()},children:s?i.jsx(ht,{size:13}):i.jsx(gn,{size:13})}),i.jsx(yn,{size:13,className:B($.workspaceIcon)}),i.jsx("span",{className:$.workspaceLabel,children:e}),i.jsx("span",{className:$.workspaceCount,children:n}),i.jsx(F,{size:"xs",variant:"ghost",iconOnly:!0,title:"New conversation",className:$.newSessionBtn,onClick:a=>{a.stopPropagation(),o()},children:i.jsx(mt,{size:13})})]})}function le(e,t){return t&&(e==="~"||e.startsWith("~/"))?t+e.slice(1):e}function Ut(e,t,n){const s=new Map;for(const r of e){const o=t[r];if(!o)continue;const a=le(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 wa(e){return!e||e==="~"?"~":e.split("/").filter(Boolean).pop()||e}function xa(){const e=M(w=>w.order),t=M(w=>w.sessions),n=M(w=>w.activeSessionId),s=M(w=>w.activate),r=M(w=>w.createSession),o=C(w=>w.open),a=T(w=>w.status),c=k(w=>w.openSessionMenu),l=k(w=>w.setCwd),u=k(w=>w.openCwdPicker),h=k(w=>w.collapsedWorkspaces),p=k(w=>w.toggleWorkspaceCollapsed),f=Lt();function x(w){const E=le(w||"~",f),S=r(E);o({id:z.chat(S),kind:"chat",label:"New chat",closable:!0,data:{sessionId:S},workspaceCwd:E})}function b(w){s(w);const E=t[w],S=le((E==null?void 0:E.cwd)||"~",f);E!=null&&E.cwd&&l(E.cwd),o({id:z.chat(w),kind:"chat",label:(E==null?void 0:E.title)??"Chat",closable:!0,data:{sessionId:w},workspaceCwd:S})}const j=Ut(e,t,f);return i.jsxs("div",{className:$.wrap,children:[i.jsxs("div",{className:$.header,children:[i.jsx("h3",{children:"Workspaces"}),i.jsx(F,{size:"xs",variant:"ghost",iconOnly:!0,title:a!=="open"?"Connect to open a workspace":"Open a workspace folder",disabled:a!=="open",onClick:()=>u(),children:i.jsx(bn,{size:14})})]}),i.jsx("div",{className:$.list,children:j.map(w=>{const E=h.has(w.cwd);return i.jsxs("div",{className:$.workspaceGroup,children:[i.jsx(_a,{label:wa(w.cwd),cwd:w.cwd,sessionCount:w.sessions.length,collapsed:E,onToggleCollapsed:()=>p(w.cwd),onNewSession:()=>x(w.cwd)}),!E&&i.jsx("div",{className:$.workspaceSessions,children:w.sessions.map(S=>i.jsx(fa,{session:S,active:S.id===n,onSelect:()=>b(S.id),onOpenMenu:(te,we)=>c(S.id,te,we)},S.id))})]},w.cwd)})}),i.jsx(ba,{})]})}const Sa="_strip_cnwks_1",va="_tab_cnwks_10",ka="_active_cnwks_26",Ia="_icon_cnwks_30",Ca="_label_cnwks_35",Ta="_close_cnwks_40",oe={strip:Sa,tab:va,active:ka,icon:Ia,label:Ca,close:Ta},ja={chat:Sn,file:xn,diff:wn,terminal:_n};function Ea({tab:e}){const t=C(p=>p.activeTabId),n=C(p=>p.activate),s=C(p=>p.close),r=ja[e.kind],{attributes:o,listeners:a,setNodeRef:c,transform:l,transition:u,isDragging:h}=Pn({id:e.id});return i.jsxs("div",{ref:c,className:B(oe.tab,e.id===t&&oe.active),style:{transform:Hn.Transform.toString(l),transition:u,opacity:h?.5:1},onClick:()=>n(e.id),onAuxClick:p=>{p.button===1&&e.closable&&s(e.id)},title:e.label,...o,...a,children:[i.jsx("span",{className:oe.icon,children:i.jsx(r,{size:13})}),i.jsx("span",{className:oe.label,children:e.label}),e.closable&&i.jsx("span",{className:oe.close,onClick:p=>{p.stopPropagation(),s(e.id)},children:i.jsx(Ee,{size:12})})]})}function Na(){const e=C(a=>a.tabs),t=C(a=>a.activeWorkspaceCwd),n=C(a=>a.reorder),s=e.filter(a=>a.workspaceCwd===t),r=An($n(Fn,{activationConstraint:{distance:4}}));function o(a){const{active:c,over:l}=a;!l||c.id===l.id||n(String(c.id),String(l.id))}return i.jsx(Mn,{sensors:r,collisionDetection:Dn,onDragEnd:o,children:i.jsx(On,{items:s.map(a=>a.id),strategy:qn,children:i.jsx("div",{className:oe.strip,children:s.map(a=>i.jsx(Ea,{tab:a},a.id))})})})}const Ra="_spinner_1tgzp_3",Ba={spinner:Ra},Aa={xs:12,sm:16,md:20,lg:24},$a={xs:1,sm:2,md:2,lg:3};function Ma({size:e="md",color:t="currentColor",className:n,"aria-label":s="Loading"}){const r=typeof e=="number"?e:Aa[e],o=typeof e=="number"?2:$a[e];return i.jsx("span",{className:`${Ba.spinner}${n?` ${n}`:""}`,role:"status","aria-label":s,style:{width:r,height:r,borderWidth:o,color:t}})}const Da=_.lazy(()=>Ue(()=>import("./ChatPanel-DZ7FTqNn.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13])).then(e=>({default:e.ChatPanel}))),ct=_.lazy(()=>Ue(()=>import("./FilePanel-DGpt9v6o.js").then(e=>e.F),__vite__mapDeps([14,1,7,6,5,2,9,10,15])).then(e=>({default:e.FilePanel}))),Oa=_.lazy(()=>Ue(()=>import("./TerminalPanel-Z2unQlh4.js"),__vite__mapDeps([16,1,17,18,7,6,5,2,3,11,12,19])).then(e=>({default:e.TerminalPanel}))),qa={chat:Da,file:ct,diff:ct,terminal:Oa},Fa="_area_1vzxd_1",Pa="_panel_1vzxd_7",Ha="_active_1vzxd_14",za="_empty_1vzxd_17",he={area:Fa,panel:Pa,active:Ha,empty:za};function Wa(){const e=C(r=>r.tabs),t=C(r=>r.activeTabId),n=C(r=>r.activeWorkspaceCwd);return e.some(r=>r.workspaceCwd===n)?i.jsx("div",{className:he.area,children:e.map(r=>{const o=qa[r.kind];return i.jsx("div",{className:B(he.panel,r.id===t&&he.active),children:i.jsx(_.Suspense,{fallback:i.jsx(Ma,{size:"md"}),children:i.jsx(o,{tab:r})})},r.id)})}):i.jsx("div",{className:he.area,children:i.jsx("div",{className:he.empty,children:"No open tabs in this workspace"})})}const Kt={fileRead:e=>["file","read",e],fileDownload:e=>["file","download",e],fileDiff:(e,t,n)=>["file","diff",e,t,n],explorer:e=>["explorer",e],agentList:()=>["agents","list"],agentTimeline:e=>["agents","timeline",e]};function La(e){const t=e.kind==="directory"||e.type==="directory"?"directory":"file";return{name:e.name??"",kind:t,size:e.size,mtimeMs:e.mtimeMs}}function Ua(e){return e.slice().sort((t,n)=>t.kind!==n.kind?t.kind==="directory"?-1:1:t.name.localeCompare(n.name))}async function Vt(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:Ua(r.map(La))}}function Ka(e,t=!0){const n=T(s=>s.client);return cn({queryKey:Kt.explorer(e),queryFn:()=>{if(!n)throw new Error("not connected");return Vt(n,e)},enabled:!!n&&!!e&&t})}function Va(e){const t=T(r=>r.client),n=_.useMemo(()=>Array.from(e),[e]),s=ln({queries:n.map(r=>({queryKey:Kt.explorer(r),queryFn:()=>{if(!t)throw new Error("not connected");return Vt(t,r)},enabled:!!t&&!!r}))});return _.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])}const lt=new WeakMap;function dt(e){let t=lt.get(e);return t||(t=new eo(e),t.start(),lt.set(e,t)),t}function Ga(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 Gt(){const e=T(r=>r.daemon),t=Le(),n=_.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 dt(e).upload(a,c),await t.invalidateQueries({queryKey:["explorer"]})},[e,t]),s=_.useCallback(async r=>{if(!e)throw new Error("not connected");const o=await dt(e).download(r);Ga(o.bytes,o.fileName||r.split("/").pop()||"download",o.mimeType)},[e]);return{upload:n,saveToDisk:s}}function Ja(e,t){return e.endsWith("/")?`${e}${t}`:`${e}/${t}`}function Jt(e,t,n,s,r){var a;const o=r.get(t);if(!o||o.isLoading){e.push({kind:"loading",path:t,depth:n});return}if(o.isError){const c=o.error instanceof Error?o.error.message:"failed to load";e.push({kind:"error",path:t,depth:n,message:c});return}for(const c of((a=o.listing)==null?void 0:a.entries)??[])Xa(e,t,c,n,s,r)}function Xa(e,t,n,s,r,o){const a=Ja(t,n.name);if(n.kind!=="directory"){e.push({kind:"file",path:a,name:n.name,depth:s});return}const c=r.has(a);e.push({kind:"directory",path:a,name:n.name,depth:s,expanded:c}),c&&Jt(e,a,s+1,r,o)}function Ya(e,t,n){if(!e)return[];const s=[];return Jt(s,e,0,t,n),s}const Qa="_container_yg965_1",Za="_header_yg965_7",ei="_uploadButton_yg965_13",ti="_hiddenInput_yg965_32",ni="_status_yg965_35",si="_statusError_yg965_36",ri="_rowAction_yg965_49",oi="_item_yg965_64",ai="_dropOverlay_yg965_67",ii="_list_yg965_82",ci="_chevronSlot_yg965_101",li="_chevron_yg965_101",di="_chevronOpen_yg965_112",ui="_icon_yg965_115",fi="_name_yg965_122",pi="_dirName_yg965_127",hi="_statusRow_yg965_133",mi="_statusRowError_yg965_144",gi="_emptyState_yg965_147",N={container:Qa,header:Za,uploadButton:ei,hiddenInput:ti,status:ni,statusError:si,rowAction:ri,item:oi,dropOverlay:ai,list:ii,chevronSlot:ci,chevron:li,chevronOpen:di,icon:ui,name:fi,dirName:pi,statusRow:hi,statusRowError:mi,emptyState:gi},yi=14;function bi({row:e,onToggle:t,onOpenFile:n,onContextMenu:s}){const r={paddingLeft:8+e.depth*yi};if(e.kind==="loading")return i.jsx("div",{className:N.statusRow,style:r,children:"Loading…"});if(e.kind==="error")return i.jsx("div",{className:B(N.statusRow,N.statusRowError),style:r,children:e.message??"failed to load"});const o=e.kind==="directory";return i.jsxs("div",{className:N.item,style:r,onClick:()=>o?t(e.path):n(e.path),onContextMenu:a=>{a.preventDefault(),s(e.path,o,a.clientX,a.clientY)},children:[i.jsx("span",{className:N.chevronSlot,children:o&&i.jsx(ht,{size:12,className:B(N.chevron,e.expanded&&N.chevronOpen)})}),i.jsx("span",{className:N.icon,children:o?i.jsx(gt,{size:14}):i.jsx(vn,{size:14})}),i.jsx("span",{className:o?N.dirName:N.name,children:e.name}),i.jsx("button",{type:"button",className:N.rowAction,title:"Actions",onClick:a=>{a.stopPropagation();const c=a.currentTarget.getBoundingClientRect();s(e.path,o,c.left,c.bottom)},children:i.jsx(pt,{size:12})})]})}const _i="_trigger_g81d7_1",wi="_content_g81d7_7",xi="_item_g81d7_16",Si="_danger_g81d7_29",vi="_sep_g81d7_32",ne={trigger:_i,content:wi,item:xi,danger:Si,sep:vi};function ki(){const e=k(f=>f.fileMenu),t=k(f=>f.closeFileMenu),n=T(f=>f.client),{saveToDisk:s}=Gt(),r=Le(),o=_.useRef(null),[a,c]=_.useState(!1);if(_.useEffect(()=>{c(e!==null)},[e]),!e)return null;const l=e.path.split("/").pop()||e.path;function u(f){c(f),f||t()}async function h(){if(e){t();try{await s(e.path)}catch(f){window.alert(`Failed to download: ${f instanceof Error?f.message:String(f)}`)}}}async function p(){if(!e)return;const f=e.isDirectory?"folder (and everything inside it)":"file";if(!window.confirm(`Permanently delete this ${f}? "${l}" — this cannot be undone.`))return t();if(t(),!n){window.alert("Not connected — cannot delete remotely.");return}try{const x=await n.connection.request("file_delete_request",{path:e.path});if(!x.ok)throw new Error(x.error??"delete failed");await r.invalidateQueries({queryKey:["explorer"]})}catch(x){window.alert(`Failed to delete: ${x instanceof Error?x.message:String(x)}`)}}return i.jsxs(yt,{open:a,onOpenChange:u,modal:!1,children:[i.jsx(bt,{asChild:!0,children:i.jsx("button",{ref:o,type:"button",className:ne.trigger,style:{left:e.x,top:e.y},"aria-hidden":!0,tabIndex:-1})}),i.jsx(_t,{children:i.jsxs(wt,{className:ne.content,align:"start",sideOffset:2,children:[!e.isDirectory&&i.jsx(ae,{className:ne.item,onSelect:h,children:"Download"}),i.jsx(xt,{className:ne.sep}),i.jsx(ae,{className:`${ne.item} ${ne.danger}`,onSelect:p,children:"Delete"})]})})]})}const Ii=24;function Ci(){const e=T(y=>y.client),t=Ce(y=>y.rootPath),n=Ce(y=>y.expanded),s=Ce(y=>y.setRoot),r=Ce(y=>y.toggle),o=C(y=>y.activeWorkspaceCwd),a=C(y=>y.open),{upload:c}=Gt(),l=k(y=>y.openFileMenu),[u,h]=_.useState(null),[p,f]=_.useState(!1),[x,b]=_.useState(null),j=_.useRef(null),w=_.useRef(null),E=_.useRef(null);_.useEffect(()=>{if(!e)return;const y=o||"~";E.current!==y&&(E.current=y,zo(e,y).then(R=>s(R)))},[e,o,s]);const S=Va(n),te=_.useMemo(()=>Ya(t,n,S),[t,n,S]),we=dn({count:te.length,getScrollElement:()=>w.current,estimateSize:()=>Ii,overscan:12,getItemKey:y=>{var R;return((R=te[y])==null?void 0:R.path)??y}});function Qt(y){a({id:z.file(y),kind:"file",label:y.split("/").pop()||y,closable:!0,data:{path:y},workspaceCwd:o||"~"})}async function Je(y,R){var xe;if(!R.length||!y)return;const X=(xe=S.get(y))==null?void 0:xe.listing,Re=new Set((X==null?void 0:X.entries.map(W=>W.name))??[]),de=R.filter(W=>Re.has(W.name));if(de.length>0){const W=de.map(tn=>tn.name).join(", ");if(!window.confirm(`Overwrite ${de.length>1?"these files":"this file"}? ${W}`))return}h({text:`Uploading ${R.length} file${R.length>1?"s":""}…`,error:!1});try{for(const W of R)await c(y,W);h({text:`Uploaded ${R.length} file${R.length>1?"s":""}`,error:!1})}catch(W){h({text:`Upload failed: ${W instanceof Error?W.message:"unknown"}`,error:!0})}}function Zt(y){y.preventDefault(),f(!1);const R=x??t;b(null);const X=Array.from(y.dataTransfer.files);Je(R,X)}function en(y){y.dataTransfer.types.includes("Files")&&(y.preventDefault(),f(!0))}return e?i.jsxs("div",{className:N.container,onDragOver:en,onDragLeave:()=>f(!1),onDrop:Zt,children:[i.jsxs("div",{className:N.header,children:[i.jsxs("button",{type:"button",className:N.uploadButton,onClick:()=>{var y;return(y=j.current)==null?void 0:y.click()},disabled:!t,title:"Upload files to the workspace root",children:[i.jsx(kn,{size:12}),i.jsx("span",{children:"Upload"})]}),i.jsx("input",{ref:j,type:"file",multiple:!0,className:N.hiddenInput,onChange:y=>{Je(t,Array.from(y.target.files??[])),y.target.value=""}})]}),u&&i.jsx("div",{className:u.error?N.statusError:N.status,children:u.text}),i.jsxs("div",{className:N.list,ref:w,children:[te.length===0&&i.jsx("div",{className:N.emptyState,children:"No files loaded"}),i.jsx("div",{style:{position:"relative",height:we.getTotalSize()},children:we.getVirtualItems().map(y=>{const R=te[y.index];return R?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:()=>{R.kind==="directory"&&b(R.path)},children:i.jsx(bi,{row:R,onToggle:r,onOpenFile:Qt,onContextMenu:(X,Re,de,xe)=>l(X,Re,de,xe)})},y.key):null})})]}),p&&i.jsx("div",{className:N.dropOverlay,children:"Drop to upload"}),i.jsx(ki,{})]}):i.jsx("div",{className:N.emptyState,children:"Connect to browse files"})}const We=ee()(e=>({subscribedCwd:null,changes:[],setSubscribedCwd:t=>e({subscribedCwd:t}),applyProjection:t=>{if(!t||!t.available){e({changes:[]});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})}}));function Ti(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 ji(e){const t=T(o=>o.client),n=We(o=>o.applyProjection),s=We(o=>o.setSubscribedCwd),r=_.useRef(t);return r.current=t,_.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;Ti(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 Ei="_list_1pgby_1",Ni="_summary_1pgby_4",Ri="_item_1pgby_11",Bi="_badge_1pgby_23",Ai="_added_1pgby_30",$i="_modified_1pgby_34",Mi="_deleted_1pgby_38",Di="_name_1pgby_42",Oi="_emptyState_1pgby_47",Q={list:Ei,summary:Ni,item:Ri,badge:Bi,added:Ai,modified:$i,deleted:Mi,name:Di,emptyState:Oi},qi={added:"A",modified:"M",deleted:"D"};function Fi(){const t=C(o=>o.activeWorkspaceCwd)||"~";ji(t);const n=We(o=>o.changes),s=C(o=>o.open);function r(o,a){s({id:z.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("div",{className:Q.emptyState,children:"No changes detected"}):i.jsxs("div",{className:Q.list,children:[i.jsxs("div",{className:Q.summary,children:[n.length," changed file",n.length===1?"":"s"]}),n.map((o,a)=>i.jsxs("div",{className:Q.item,onClick:()=>r(o.path,o.staged),children:[i.jsx("span",{className:B(Q.badge,Q[o.status]),children:qi[o.status]}),i.jsx("span",{className:Q.name,children:o.path})]},`${o.path}-${o.staged}-${a}`))]})}const Xt=ee()(e=>({terminals:[],setTerminals:t=>e({terminals:t})}));function Pi(e){return typeof e=="object"&&e!==null&&"type"in e&&e.type==="terminals_update"&&"terminals"in e&&Array.isArray(e.terminals)}function Hi(){const e=T(n=>n.client),t=Xt(n=>n.setTerminals);_.useEffect(()=>{if(!e){t([]);return}let n=!1;e.connection.request("subscribe_terminals_request",{}).then(r=>{n||t(r.terminals??[])}).catch(()=>{});const s=e.connection.onSessionMessage(r=>{if(n)return;const o=r;Pi(o)&&t(o.terminals)});return()=>{n=!0,s(),e.connection.request("unsubscribe_terminals_request",{}).catch(()=>{})}},[e,t])}const zi="_wrap_sx7p7_1",Wi="_newTerminal_sx7p7_5",Li="_list_sx7p7_10",Ui="_summary_sx7p7_13",Ki="_item_sx7p7_20",Vi="_reattach_sx7p7_30",Gi="_icon_sx7p7_45",Ji="_name_sx7p7_49",Xi="_openBadge_sx7p7_54",Yi="_kill_sx7p7_62",Qi="_emptyState_sx7p7_80",O={wrap:zi,newTerminal:Wi,list:Li,summary:Ui,item:Ki,reattach:Vi,icon:Gi,name:Ji,openBadge:Xi,kill:Yi,emptyState:Qi};function Zi(){Hi();const e=T(p=>p.client),t=Xt(p=>p.terminals),n=C(p=>p.tabs),s=C(p=>p.activeWorkspaceCwd),r=C(p=>p.open),o=C(p=>p.activate),a=C(p=>p.close);function c(p){return n.find(f=>f.kind==="terminal"&&f.data.slot===p)}function l(p,f,x){const b=c(p);if(b){o(b.id);return}const j=x||"~";r({id:z.terminal(p),kind:"terminal",label:f,closable:!0,data:{slot:p,cwd:j},workspaceCwd:j})}function u(p){const f=c(p);if(f){a(f.id);return}e&&e.connection.request("kill_terminal_request",{slot:p}).catch(()=>{})}const h=i.jsx(F,{variant:"secondary",size:"sm",leftIcon:i.jsx(mt,{size:14}),className:O.newTerminal,onClick:()=>Wt(s||"~"),children:"New terminal"});return t.length===0?i.jsxs("div",{className:O.wrap,children:[h,i.jsx("div",{className:O.emptyState,children:"No terminals running"})]}):i.jsxs("div",{className:O.wrap,children:[h,i.jsxs("div",{className:O.list,children:[i.jsxs("div",{className:O.summary,children:[t.length," terminal",t.length===1?"":"s"," running"]}),t.map(p=>{const f=c(p.slot)!==void 0;return i.jsxs("div",{className:O.item,children:[i.jsxs("button",{type:"button",className:O.reattach,onClick:()=>l(p.slot,p.name,p.cwd),title:p.cwd,children:[i.jsx(In,{size:13,className:O.icon}),i.jsx("span",{className:O.name,children:p.name}),f&&i.jsx("span",{className:O.openBadge,children:"open"})]}),i.jsx("button",{type:"button",className:O.kill,onClick:()=>u(p.slot),title:"Kill terminal",children:i.jsx(Ee,{size:13})})]},p.slot)})]})]})}const ec="_wrap_r37ok_1",tc="_tabBar_r37ok_7",nc="_tabBtn_r37ok_13",sc="_active_r37ok_26",rc="_refreshBtn_r37ok_30",oc="_content_r37ok_34",L={wrap:ec,tabBar:tc,tabBtn:nc,active:sc,refreshBtn:rc,content:oc};function ac(){const e=k(c=>c.rightSidebarTab),t=k(c=>c.setRightSidebarTab),s=C(c=>c.activeWorkspaceCwd)||"~",r=T(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("div",{className:L.wrap,children:[i.jsxs("div",{className:L.tabBar,children:[i.jsx("button",{type:"button",className:B(L.tabBtn,e==="files"&&L.active),onClick:()=>t("files"),children:"Files"}),i.jsx("button",{type:"button",className:B(L.tabBtn,e==="changes"&&L.active),onClick:()=>t("changes"),children:"Changes"}),i.jsx("button",{type:"button",className:B(L.tabBtn,e==="terminals"&&L.active),onClick:()=>t("terminals"),children:"Terminals"}),e!=="terminals"&&i.jsx(F,{size:"xs",variant:"ghost",iconOnly:!0,title:"Refresh",className:L.refreshBtn,onClick:a,children:i.jsx(Cn,{size:13})})]}),i.jsx("div",{className:L.content,children:e==="files"?i.jsx(Ci,{}):e==="changes"?i.jsx(Fi,{}):i.jsx(Zi,{})})]})}const ic="_wrapper_131x2_3",cc="_box_131x2_18",lc="_checkmark_131x2_36",dc="_nativeInput_131x2_41",Te={wrapper:ic,box:cc,checkmark:lc,nativeInput:dc};_.forwardRef(function({label:t,checked:n=!1,disabled:s,className:r,onChange:o,...a},c){return i.jsxs("label",{className:Te.wrapper,"data-disabled":s||void 0,children:[i.jsx("input",{ref:c,type:"checkbox",className:Te.nativeInput,checked:n,disabled:s,onChange:o,...a}),i.jsx("span",{className:Te.box,"data-checked":n,"aria-hidden":!0,children:n&&i.jsx(Tn,{size:12,className:Te.checkmark})}),t&&i.jsx("span",{children:t})]})});const uc="_select_vj45v_3",fc={select:uc};_.forwardRef(function({options:t,placeholder:n,className:s,...r},o){return i.jsxs("select",{ref:o,className:B(fc.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 pc="_overlay_1yaef_1",hc="_contentWrapper_1yaef_7",mc="_dialog_1yaef_16",gc="_header_1yaef_28",yc="_title_1yaef_36",bc="_closeBtn_1yaef_43",_c="_body_1yaef_57",wc="_footer_1yaef_63",xc="_bare_1yaef_72",Sc="_bareBody_1yaef_78",vc="_bareCloseBtn_1yaef_82",kc="_visuallyHidden_1yaef_101",q={overlay:pc,contentWrapper:hc,dialog:mc,header:gc,title:yc,closeBtn:bc,body:_c,footer:wc,bare:xc,bareBody:Sc,bareCloseBtn:vc,visuallyHidden:kc},Ic=De;function Cc({open:e,onOpenChange:t,title:n,children:s,footer:r,width:o,className:a,bare:c=!1}){return i.jsx(En,{open:e,onOpenChange:t,children:i.jsxs(Nn,{children:[i.jsx(Rn,{className:q.overlay}),i.jsx("div",{className:q.contentWrapper,children:i.jsxs(Bn,{className:B(q.dialog,c&&q.bare,a),style:o!==void 0?{width:o}:void 0,children:[c?i.jsx(Xe,{className:q.visuallyHidden,children:n}):i.jsxs("div",{className:q.header,children:[i.jsx(Xe,{className:q.title,children:n}),i.jsx(De,{asChild:!0,children:i.jsx("button",{type:"button",className:q.closeBtn,"aria-label":"Close",children:i.jsx(Ee,{size:16})})})]}),i.jsx("div",{className:B(q.body,c&&q.bareBody),children:s}),c&&i.jsx(De,{asChild:!0,children:i.jsx("button",{type:"button",className:q.bareCloseBtn,"aria-label":"Close",children:i.jsx(Ee,{size:16})})}),r&&i.jsx("div",{className:q.footer,children:r})]})})]})})}const Tc="_handle_1ocv1_1",jc={handle:Tc};function ut({side:e,onResize:t,className:n}){const s=_.useRef(0),r=_.useCallback(c=>{const l=c.clientX-s.current;s.current=c.clientX,t(e==="left"?l:-l)},[t,e]),o=_.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:B(jc.handle,n),onPointerDown:a,role:"separator","aria-orientation":"vertical"})}function Ec(e,t){var h;const{order:n,sessions:s,createSession:r,activate:o}=M.getState(),c=Ut(n,s,t).find(p=>p.cwd===e),l=((h=c==null?void 0:c.sessions[0])==null?void 0:h.id)??r(e);o(l);const u=M.getState().sessions[l];C.getState().open({id:z.chat(l),kind:"chat",label:(u==null?void 0:u.title)??"New chat",closable:!0,data:{sessionId:l},workspaceCwd:e}),k.getState().setCwd(e)}const Nc="_pathRow_9xphl_1",Rc="_pathInput_9xphl_9",Bc="_list_9xphl_13",Ac="_item_9xphl_20",$c="_name_9xphl_32",Mc="_emptyState_9xphl_37",G={pathRow:Nc,pathInput:Rc,list:Bc,item:Ac,name:$c,emptyState:Mc};function Dc(){const e=k(S=>S.cwdPickerOpen),t=k(S=>S.closeCwdPicker),n=C(S=>S.activeWorkspaceCwd),s=T(S=>S.client),r=Lt(),[o,a]=_.useState("/"),[c,l]=_.useState("/");_.useEffect(()=>{if(!e)return;const S=le(n||"~",r);a(S),l(S)},[e,s,n]);const{data:u,isLoading:h,isError:p,error:f}=Ka(o,e&&!!s),x=((u==null?void 0:u.entries)??[]).filter(S=>S.kind==="directory");function b(S){a(S),l(S)}function j(){b(o.split("/").slice(0,-1).join("/")||"/")}function w(){b(c.trim())}function E(){Ec(o,r),t()}return i.jsxs(Cc,{open:e,onOpenChange:S=>!S&&t(),title:"Open Workspace",footer:i.jsxs(i.Fragment,{children:[i.jsx(Ic,{asChild:!0,children:i.jsx(F,{size:"sm",variant:"secondary",children:"Cancel"})}),i.jsx(F,{size:"sm",onClick:E,children:"Open this folder"})]}),children:[i.jsxs("div",{className:G.pathRow,children:[i.jsx(F,{size:"xs",variant:"ghost",iconOnly:!0,title:"Up",onClick:j,children:i.jsx(jn,{size:13})}),i.jsx(qe,{className:G.pathInput,value:c,onChange:S=>l(S.target.value),onKeyDown:S=>{S.key==="Enter"&&(S.preventDefault(),w())}}),i.jsx(F,{size:"xs",onClick:w,children:"Go"})]}),i.jsx("div",{className:G.list,children:h?i.jsx("div",{className:G.emptyState,children:"Loading..."}):p?i.jsxs("div",{className:G.emptyState,children:["Error: ",f instanceof Error?f.message:"unknown error"]}):x.length===0?i.jsx("div",{className:G.emptyState,children:"No subdirectories"}):x.map(S=>i.jsxs("div",{className:G.item,onClick:()=>b(o==="/"?`/${S.name}`:`${o}/${S.name}`),children:[i.jsx(gt,{size:14}),i.jsx("span",{className:G.name,children:S.name})]},S.name))})]})}const Oc="_shell_1m1nv_1",qc="_main_1m1nv_7",Fc="_sidebarLeft_1m1nv_13",Pc="_leftHandle_1m1nv_21",Hc="_center_1m1nv_24",zc="_sidebarRight_1m1nv_31",Wc="_rightHandle_1m1nv_39",Z={shell:Oc,main:qc,sidebarLeft:Fc,leftHandle:Pc,center:Hc,sidebarRight:zc,rightHandle:Wc};function Lc(){const e=k(a=>a.leftSidebarCollapsed),t=k(a=>a.rightSidebarCollapsed),n=k(a=>a.leftSidebarWidth),s=k(a=>a.rightSidebarWidth),r=k(a=>a.resizeLeftSidebar),o=k(a=>a.resizeRightSidebar);return i.jsxs("div",{className:Z.shell,children:[i.jsx(Io,{}),i.jsxs("div",{className:Z.main,children:[!e&&i.jsxs("aside",{className:Z.sidebarLeft,style:{width:n},children:[i.jsx(xa,{}),i.jsx(ut,{side:"left",className:Z.leftHandle,onResize:r})]}),i.jsxs("div",{className:Z.center,children:[i.jsx(Na,{}),i.jsx(Wa,{})]}),!t&&i.jsxs("aside",{className:Z.sidebarRight,style:{width:s},children:[i.jsx(ut,{side:"right",className:Z.rightHandle,onResize:o}),i.jsx(ac,{})]})]}),i.jsx(Dc,{})]})}function Uc(){const e=_.useRef(!1);_.useEffect(()=>{if(e.current)return;if(e.current=!0,window.location.hash.includes("offer=")){const l=window.location.href;k.getState().setHost(l),T.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=k.getState();if(s?c.setHost(s):n&&c.setHost(n),r&&c.setPassword(r),o&&c.setCwd(o),s)T.getState().connect({url:s});else if(a){const{host:l,password:u}=k.getState();T.getState().connect({url:l,password:u||void 0})}},[])}function Kc(e){return typeof e=="object"&&e!==null&&"kind"in e}function Vc(e){const t=[];for(const n of e)if(Kc(n))if(n.kind==="other")n.event&&t.push(n.event);else for(const s of n.events??[])t.push(s);return t}function Gc(){const e=T(s=>s.client),t=T(s=>s.status),n=_.useRef(!1);_.useEffect(()=>{t!=="open"||!e||n.current||(n.current=!0,(async()=>{var l;let s=[];try{s=(await e.connection.request("list_agents_request",{all:!1})).agents??[]}catch{s=[]}s.sort((u,h)=>(h.lastActivity??0)-(u.lastActivity??0));const r=M.getState();for(const u of s){if(r.findByAgentId(u.agentId))continue;let h=He;try{const p=await e.agent(u.agentId).timeline.fetch({direction:"after",limit:200});h=Vc(p.items).reduce(zt,He)}catch{}r.hydrate({id:`s-${u.agentId.slice(0,12)}`,agentId:u.agentId,title:u.title||((l=u.cwd)==null?void 0:l.split("/").pop())||"Restored",status:u.status??"idle",cwd:u.cwd||"~",timeline:h,userMessageCount:h.rows.filter(p=>p.kind==="user").length})}const o=await Ge(e).catch(()=>null),{order:a,sessions:c}=M.getState();if(a.length>0){const u=c[a[0]??""];if(u){const h=le(u.cwd||"~",o);M.getState().activate(u.id),k.getState().setCwd(u.cwd),C.getState().open({id:z.chat(u.id),kind:"chat",label:u.title,closable:!0,data:{sessionId:u.id},workspaceCwd:h})}}else{const u=k.getState().cwd||"~",h=le(u,o),p=M.getState().createSession(u);C.getState().open({id:z.chat(p),kind:"chat",label:"New chat",closable:!0,data:{sessionId:p},workspaceCwd:h})}})())},[t,e])}function Jc(){_.useEffect(()=>{function e(t){const n=k.getState();if(t.key==="Escape"){n.closeCwdPicker(),n.closeSessionMenu();return}const s=t.ctrlKey||t.metaKey;if(s&&t.key.toLowerCase()==="t"){t.preventDefault(),Wt(C.getState().activeWorkspaceCwd||"~");return}if(s&&t.key.toLowerCase()==="w"){const{activeTabId:r,tabs:o,close:a}=C.getState();if(!r)return;const c=o.find(l=>l.id===r);(c==null?void 0:c.closable)!==!1&&(t.preventDefault(),a(r))}}return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[])}function Xc(){return Uc(),Gc(),Jc(),null}function Yc(){return i.jsxs(Ns,{children:[i.jsx(Xc,{}),i.jsx(Lc,{})]})}const Yt=document.getElementById("root");if(!Yt)throw new Error("Missing #root element");rn.createRoot(Yt).render(i.jsx(_.StrictMode,{children:i.jsx(Yc,{})}));export{F as B,Cc as D,Ma as S,il as T,T as a,C as b,dt as c,cl as e,Kt as r,Co as t,M as u};
3
- //# sourceMappingURL=index-hArhMYDk.js.map