@av-pi-studio/web-client 0.0.119 → 0.0.121

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-DZ6fyGsu.js → BinaryFallbackViewer-B_1MojiI.js} +1 -1
  2. package/dist/web/assets/{ChatPanel-yRv-CSyg.js → ChatPanel-DtsVDzUk.js} +1 -1
  3. package/dist/web/assets/{CodeView-HA63pf1I.js → CodeView-Bha4_sLY.js} +1 -1
  4. package/dist/web/assets/{FilePanel-KbN8R1q4.js → FilePanel-D2g7tFLr.js} +1 -1
  5. package/dist/web/assets/{HtmlViewer-BlBKng1E.js → HtmlViewer-1xFkmfi1.js} +1 -1
  6. package/dist/web/assets/{ImageViewer-CSOSyfvS.js → ImageViewer-C0VAAGgg.js} +1 -1
  7. package/dist/web/assets/{MarkdownFileViewer-lxpM7SOl.js → MarkdownFileViewer-BkoYiczB.js} +1 -1
  8. package/dist/web/assets/{ModelProvidersPanel-CB3LnoWb.js → ModelProvidersPanel-Vc4a7tTI.js} +1 -1
  9. package/dist/web/assets/{MoleculeViewerPanel-B2E7mzSf.js → MoleculeViewerPanel-DZ2LcAAy.js} +1 -1
  10. package/dist/web/assets/{PdfViewer-DhWWrlIg.js → PdfViewer-B8uL0huT.js} +1 -1
  11. package/dist/web/assets/{SaveFileButton-B7-DaZRk.js → SaveFileButton-CVTFdcrG.js} +1 -1
  12. package/dist/web/assets/{SettingsDialog-PvCzy46o.js → SettingsDialog-DPQ9A2Xj.js} +1 -1
  13. package/dist/web/assets/{SkillsPanel-BAOCx8Mk.js → SkillsPanel-CXgC8Gzo.js} +1 -1
  14. package/dist/web/assets/{TerminalPanel-D7OImgct.js → TerminalPanel-Bcxo35FX.js} +1 -1
  15. package/dist/web/assets/{TextViewer-BYKfoK_A.js → TextViewer-CgQS2S84.js} +1 -1
  16. package/dist/web/assets/{VideoViewer-D5zXCCTy.js → VideoViewer-BLCw1c2P.js} +1 -1
  17. package/dist/web/assets/{ViewersPanel-CcXyTny7.js → ViewersPanel-DGo1jOxa.js} +1 -1
  18. package/dist/web/assets/{href-resolution-73JOZBv8.js → href-resolution-8lUkTbBH.js} +1 -1
  19. package/dist/web/assets/index-CsTVo4lj.js +19 -0
  20. package/dist/web/assets/{markdown-CIs21q13.js → markdown-C-Mz0si5.js} +1 -1
  21. package/dist/web/assets/{use-file-download-DXQ8x6cp.js → use-file-download-BrNKwHB1.js} +1 -1
  22. package/dist/web/assets/{use-file-watch-Bi_rtv7D.js → use-file-watch-C9248wL1.js} +1 -1
  23. package/dist/web/assets/{use-provider-auth-list-Bxn9HTsw.js → use-provider-auth-list-Bkd5UWYd.js} +1 -1
  24. package/dist/web/index.html +1 -1
  25. package/package.json +3 -3
  26. package/dist/web/assets/index-DFue5iwi.js +0 -19
@@ -0,0 +1,19 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ModelProvidersPanel-Vc4a7tTI.js","assets/vendor-react-Dka9ZH0B.js","assets/vendor-query-CDNPrdQ8.js","assets/use-provider-auth-list-Bkd5UWYd.js","assets/provider-auth-store-CpmUGwuu.js","assets/vendor-z183l2lP.js","assets/vendor-CEK31ho9.css","assets/StatusBadge-eoBBn7zF.js","assets/StatusBadge-DmrnYEhp.css","assets/vendor-icons-CSCeICuX.js","assets/vendor-overlays-DjMT65Ip.js","assets/vendor-dnd-vJGfGIIi.js","assets/vendor-pdfjs-BSchhGel.js","assets/ModelProvidersPanel-BP1zIT6I.css","assets/SkillsPanel-CXgC8Gzo.js","assets/Switch-DvBJf8Rd.js","assets/Switch-Dz-IIw4-.css","assets/SkillsPanel-Cs4iUzys.css","assets/ViewersPanel-DGo1jOxa.js","assets/ViewersPanel-BvWpXbxZ.css","assets/SettingsDialog-DPQ9A2Xj.js","assets/SettingsDialog-Bc09UjU4.css","assets/ChatPanel-DtsVDzUk.js","assets/markdown-C-Mz0si5.js","assets/vendor-highlight-DaCUEPaW.js","assets/vendor-markdown-Bo-Xpsuy.js","assets/href-resolution-8lUkTbBH.js","assets/markdown-C15eCO0s.css","assets/DiffView-Bp1YwIcs.js","assets/DiffView-CUctPSBA.css","assets/ChatPanel-eXvPOkx2.css","assets/FilePanel-D2g7tFLr.js","assets/use-file-watch-C9248wL1.js","assets/FilePanel-bWuYWz8t.css","assets/TerminalPanel-Bcxo35FX.js","assets/vendor-terminal-BhzX2_ts.js","assets/vendor-terminal-DYP7pi_n.css","assets/TerminalPanel-DpxpMm0w.css","assets/MoleculeViewerPanel-DZ2LcAAy.js","assets/vendor-molviewer-7FbONJs2.js","assets/vendor-molviewer-Bychyqid.css","assets/use-file-download-BrNKwHB1.js","assets/MoleculeViewerPanel-CHZ8q0jD.css","assets/TextViewer-CgQS2S84.js","assets/CodeView-Bha4_sLY.js","assets/CodeView-Bbd7h9aM.css","assets/SaveFileButton-CVTFdcrG.js","assets/TextViewer-C7Vnqw_v.css","assets/MarkdownFileViewer-BkoYiczB.js","assets/MarkdownFileViewer-Cnl1kopk.css","assets/ImageViewer-C0VAAGgg.js","assets/ImageViewer-Bh1rkSDM.css","assets/VideoViewer-BLCw1c2P.js","assets/VideoViewer-CCmuaDLl.css","assets/BinaryFallbackViewer-B_1MojiI.js","assets/BinaryFallbackViewer-ClYyn4IS.css","assets/HtmlViewer-1xFkmfi1.js","assets/HtmlViewer-C9NJC5qE.css","assets/PdfViewer-B8uL0huT.js","assets/PdfViewer-DoOGVn5M.css"])))=>i.map(i=>d[i]);
2
+ var qi=Object.defineProperty;var Di=(e,t,n)=>t in e?qi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var N=(e,t,n)=>Di(e,typeof t!="symbol"?t+"":t,n);import{r as w,j as c,b as Oi,c as Li}from"./vendor-react-Dka9ZH0B.js";import{aj as l,ak as Rt,al as M,am as de,an as f,ao as re,ap as A,aq as v,ar as Z,as as O,at as fn,au as st,N as H,y as ae,_ as ue}from"./vendor-z183l2lP.js";import{Q as $i,c as Bi,u as Fi,d as zi,a as it,b as Ui}from"./vendor-query-CDNPrdQ8.js";import{u as Wi,X as It,K as Hi,v as Vi,w as pn,x as Ki,y as Gi,z as Yi,H as Xi,I as Ji,J as Xn,P as Lo,r as Zi,k as $o,O as Qi,c as Jn,b as Zn,n as en,Q as Bo,R as Fo,V as hn,W as zo,Y as ea,_ as ta,$ as na,a0 as Ge,e as qn,a1 as tn,d as Ft,E as sa,a2 as oa,D as ra,a3 as ia,a4 as aa,a5 as ca,a6 as la,a7 as ua,a8 as da,s as fa}from"./vendor-icons-CSCeICuX.js";import{D as Dn,a as pa,b as ha,c as ga,d as ma,e as ks,P as _a,C as ya,I as wa,S as va,G as ba,L as Sa,f as ka,g as xa,h as Ia,i as Ea,R as jt,T as Pt}from"./vendor-overlays-DjMT65Ip.js";import{u as Ta,a as Ca,p as Aa,P as Ra,b as Uo,S as ja,h as Pa,c as Ma,C as Na,D as qa,d as Da}from"./vendor-dnd-vJGfGIIi.js";import{W as Oa}from"./vendor-pdfjs-BSchhGel.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))s(o);new MutationObserver(o=>{for(const r of o)if(r.type==="childList")for(const i of r.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function n(o){const r={};return o.integrity&&(r.integrity=o.integrity),o.referrerPolicy&&(r.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?r.credentials="include":o.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function s(o){if(o.ep)return;o.ep=!0;const r=n(o);fetch(o.href,r)}})();const Wo=l().datetime({offset:!0});l().uuid();l().regex(/^[A-Za-z0-9_-]+$/,"expected base64url");const Oe=Rt([M(),Wo]),La=de(["mobile","browser","cli","mcp"]),$a=32,Ba=f({type:v("hello"),clientId:l(),clientType:La,protocolVersion:M(),platform:l().max($a).optional().catch(void 0),agentStreams:de(["all","none"]).optional().catch(void 0),appVersion:l().optional(),capabilities:re(l(),A()).optional()}),Fa=f({status:v("server_info"),serverId:l(),hostname:l().optional(),version:l().optional(),homeDir:l().optional(),capabilities:re(l(),Z()),features:re(l(),Z())}),za=f({type:v("status"),payload:Fa}),Ua=f({type:v("ping"),requestId:l(),clientSentAt:Oe.optional()}),Wa=f({type:v("pong"),requestId:l(),clientSentAt:Oe.optional(),serverReceivedAt:Oe,serverSentAt:Oe}),Ho=de(["initializing","idle","running","error","closed"]),gn=f({mimeType:l().optional(),data:l().optional()}).passthrough(),Ha=f({prs:O(Z()).optional(),issues:O(Z()).optional()}).passthrough(),Va=f({provider:l(),cwd:l(),modeId:l().optional(),model:l().optional(),modelProvider:l().optional(),thinkingOptionId:l().optional(),featureValues:re(l(),Z()).optional(),title:l().nullable().optional(),approvalPolicy:l().optional(),sandboxMode:l().optional(),networkAccess:A().optional(),webSearch:A().optional(),extra:f({pi:Z().optional()}).passthrough().optional(),systemPrompt:l().optional(),mcpServers:re(l(),Z()).optional()}),Ka=f({type:v("create_agent_request"),requestId:l(),config:Va,env:re(l(),l()).optional(),workspaceId:l().optional(),worktreeName:l().optional(),initialPrompt:l().optional(),clientMessageId:l().optional(),outputSchema:re(l(),Z()).optional(),images:O(gn).optional(),attachments:Ha.optional(),git:Z().optional(),worktree:Z().optional(),autoArchive:A().optional(),labels:re(l(),l()).default({})}),Ga=f({type:v("create_agent_response"),requestId:l(),payload:f({agentId:l()}).passthrough()}),Ya=f({type:v("agent_update"),agentId:l(),status:Ho.optional(),title:l().nullable().optional(),labels:re(l(),l()).optional()}),Xa=f({type:v("agent_status"),agentId:l(),status:Ho}),Ja=f({type:v("agent_list"),agents:O(f({id:l()}).passthrough())}),Za=f({type:v("agent_deleted"),agentId:l()}),Qa=f({type:v("agent_archived"),agentId:l(),archivedAt:Wo.optional()}),Vo=fn("kind",[f({kind:v("shell"),command:l().optional(),output:l().optional()}),f({kind:v("read"),path:l().optional(),output:l().optional()}),f({kind:v("edit"),path:l().optional(),diff:l().optional(),output:l().optional()}),f({kind:v("write"),path:l().optional(),output:l().optional()}),f({kind:v("search"),query:l().optional(),output:l().optional()}),f({kind:v("fetch"),url:l().optional(),output:l().optional()}),f({kind:v("task"),description:l().optional(),output:l().optional()})]),ec=fn("kind",[f({kind:v("user_message"),messageId:l().optional(),text:l().optional(),images:O(gn).optional()}),f({kind:v("assistant_message"),messageId:l().optional(),text:l().optional(),final:A().optional()}),f({kind:v("reasoning"),text:l().optional(),final:A().optional()}),f({kind:v("tool_call"),callId:l().optional(),tool:Vo,status:l().optional(),partial:A().optional()}),f({kind:v("turn_started"),turnId:l().optional()}),f({kind:v("turn_completed"),turnId:l().optional()}),f({kind:v("turn_failed"),turnId:l().optional(),error:l().optional()}),f({kind:v("turn_canceled"),turnId:l().optional()}),f({kind:v("error"),message:l().optional()}),f({kind:v("queue_update"),steering:O(l()).optional(),followUp:O(l()).optional()}),f({kind:v("compaction"),compactionId:l(),phase:de(["started","completed","failed","canceled"]),reason:de(["manual","threshold","overflow"]).optional(),tokensBefore:M().optional(),estimatedTokensAfter:M().optional(),summary:l().optional(),error:l().optional(),willRetry:A().optional()})]),tc=f({type:v("agent_stream"),agentId:l(),seq:M().optional(),timestamp:Oe.optional(),event:ec}),nc=de(["before","after"]),sc=f({start:M(),end:M()}),oc=f({type:v("fetch_agent_timeline_request"),requestId:l(),agentId:l(),cursor:l().nullable().optional(),direction:nc,limit:M().optional()}),rc=f({type:v("fetch_agent_timeline_response"),requestId:l(),agentId:l().optional(),items:O(Z()),seqStart:M(),seqEnd:M(),sourceSeqRanges:O(sc),collapsed:A(),hasNewer:A(),startCursor:l().nullable().optional(),endCursor:l().nullable().optional()}),ic=f({type:v("agent_permission_request"),requestId:l(),agentId:l(),toolName:l().optional(),tool:Vo.optional(),action:Z().optional(),responses:O(l()).optional()}),ac=f({type:v("agent_permission_resolved"),requestId:l(),agentId:l(),decision:l().optional()}),cc=f({type:v("agent.permission.respond.request"),requestId:l(),permissionRequestId:l(),response:Z()}),lc=f({type:v("agent.permission.respond.response"),requestId:l(),payload:f({resolved:A()}).passthrough()}),uc=f({type:v("respond_to_permission"),requestId:l(),permissionRequestId:l(),response:Z()}),Ko=de(["conversation","files","both"]),dc=f({type:v("agent.rewind.request"),requestId:l(),agentId:l(),messageId:l(),mode:Ko}).passthrough(),fc=f({type:v("agent.rewind.response"),requestId:l(),payload:f({agentId:l(),messageId:l(),mode:Ko,truncatedAt:l().optional()}).passthrough()}).passthrough(),pc=f({input:M().optional(),output:M().optional(),cacheRead:M().optional(),cacheWrite:M().optional(),total:M().optional()}).passthrough(),hc=f({tokens:M().nullable().optional(),contextWindow:M().optional(),percent:M().nullable().optional()}).passthrough(),gc=f({type:v("agent_session_stats_request"),requestId:l(),agentId:l()}).passthrough(),mc=f({type:v("agent_session_stats_response"),requestId:l(),payload:f({sessionId:l().optional(),sessionFile:l().optional(),userMessages:M().optional(),assistantMessages:M().optional(),toolCalls:M().optional(),toolResults:M().optional(),totalMessages:M().optional(),tokens:pc.optional(),cost:M().optional(),contextUsage:hc.optional(),model:l().optional()}).passthrough()}).passthrough(),_c=f({type:v("agent_compact_request"),requestId:l(),agentId:l(),customInstructions:l().optional()}).passthrough(),yc=f({type:v("agent_compact_response"),requestId:l(),payload:f({summary:l().optional(),firstKeptEntryId:l().optional(),tokensBefore:M().optional(),estimatedTokensAfter:M().optional(),details:Z().optional()}).passthrough()}).passthrough(),wc=f({type:v("agent_new_session_request"),requestId:l(),agentId:l()}).passthrough(),vc=f({type:v("agent_new_session_response"),requestId:l(),payload:f({cancelled:A()}).passthrough()}).passthrough(),bc=f({type:v("agent_switch_session_request"),requestId:l(),agentId:l(),sessionPath:l()}).passthrough(),Sc=f({type:v("agent_switch_session_response"),requestId:l(),payload:f({cancelled:A()}).passthrough()}).passthrough(),kc=f({type:v("agent_fork_request"),requestId:l(),agentId:l(),entryId:l()}).passthrough(),xc=f({type:v("agent_fork_response"),requestId:l(),payload:f({text:l(),cancelled:A()}).passthrough()}).passthrough(),Ic=f({type:v("agent_fork_messages_request"),requestId:l(),agentId:l()}).passthrough(),Ec=f({type:v("agent_fork_messages_response"),requestId:l(),payload:f({messages:O(f({entryId:l(),text:l()}).passthrough())}).passthrough()}).passthrough(),Tc=f({type:v("agent_clone_request"),requestId:l(),agentId:l()}).passthrough(),Cc=f({type:v("agent_clone_response"),requestId:l(),payload:f({cancelled:A()}).passthrough()}).passthrough(),Ac=f({type:v("agent_set_session_name_request"),requestId:l(),agentId:l(),name:l()}).passthrough(),Rc=f({type:v("agent_set_session_name_response"),requestId:l(),payload:f({}).passthrough().optional()}).passthrough(),jc=f({type:v("agent_export_html_request"),requestId:l(),agentId:l(),outputPath:l().optional()}).passthrough(),Pc=f({type:v("agent_export_html_response"),requestId:l(),payload:f({path:l()}).passthrough()}).passthrough(),Mc=f({type:v("agent_set_model_request"),requestId:l(),agentId:l(),provider:l(),modelId:l()}).passthrough(),Nc=f({type:v("agent_set_model_response"),requestId:l(),payload:f({}).passthrough()}).passthrough(),qc=f({type:v("agent_cycle_model_request"),requestId:l(),agentId:l()}).passthrough(),Dc=f({type:v("agent_cycle_model_response"),requestId:l(),payload:f({model:Z().nullable().optional(),thinkingLevel:l().optional(),isScoped:A().optional()}).passthrough()}).passthrough(),Oc=f({type:v("agent_set_thinking_request"),requestId:l(),agentId:l(),level:l()}).passthrough(),Lc=f({type:v("agent_set_thinking_response"),requestId:l(),payload:f({agentId:l(),level:l()}).passthrough()}).passthrough(),$c=f({type:v("agent_thinking_levels_request"),requestId:l(),agentId:l()}).passthrough(),Bc=f({type:v("agent_thinking_levels_response"),requestId:l(),payload:f({agentId:l(),levels:O(l())}).passthrough()}).passthrough(),Fc=f({type:v("agent_last_assistant_text_request"),requestId:l(),agentId:l()}).passthrough(),zc=f({type:v("agent_last_assistant_text_response"),requestId:l(),payload:f({text:l().nullable()}).passthrough()}).passthrough(),Uc=f({type:v("steer_agent_request"),requestId:l(),agentId:l(),message:l(),images:O(gn).optional(),clientMessageId:l().optional()}).passthrough(),Wc=f({type:v("steer_agent_response"),requestId:l(),agentId:l(),ok:A()}).passthrough(),Hc=f({type:v("follow_up_agent_request"),requestId:l(),agentId:l(),message:l(),images:O(gn).optional(),clientMessageId:l().optional()}).passthrough(),Vc=f({type:v("follow_up_agent_response"),requestId:l(),agentId:l(),ok:A()}).passthrough(),Kc=f({name:l(),id:l().optional(),description:l().optional(),source:de(["extension","prompt","skill"]).optional(),scope:de(["user","project","temporary"]).optional(),path:l().optional()}).passthrough(),Gc=f({type:v("agent_list_commands_request"),requestId:l(),agentId:l()}).passthrough(),Yc=f({type:v("agent_list_commands_response"),requestId:l(),payload:f({commands:O(Kc)}).passthrough()}).passthrough(),Xc=f({source:l(),identity:l(),addedIn:l(),deprecated:A().optional(),status:l(),lastError:f({at:l(),attempts:M(),reason:l(),message:l()}).passthrough().optional()}).passthrough(),Go=f({id:l(),title:l(),description:l(),packages:O(Xc)}).passthrough(),Jc=f({identity:l(),source:l(),pack:l(),reason:l(),message:l()}).passthrough(),Zc=f({at:l(),outcome:l(),installed:O(l()),failures:O(Jc)}).passthrough(),Yo=f({at:l(),outcome:l()}).passthrough(),Qc=f({type:v("extension_packs_list_request"),requestId:l()}).passthrough(),el=f({type:v("extension_packs_list_response"),requestId:l(),autoSync:A(),selected:O(l()),packs:O(Go),lastSync:Yo.optional()}).passthrough(),tl=f({type:v("extension_packs_set_request"),requestId:l(),packs:O(l()).optional()}).passthrough(),nl=f({type:v("extension_packs_set_response"),requestId:l(),autoSync:A(),selected:O(l()),packs:O(Go),lastSync:Yo.optional(),ok:A(),error:l().optional(),report:Zc.optional()}).passthrough(),On=de(["api_key","oauth"]),sl=f({id:l(),name:l(),authTypes:O(On),oauthLoginLabel:l().optional(),oauthIsSubscription:A().optional(),configured:Rt([A(),v("unknown")]),configuredType:On.optional(),configuredSource:l().optional()}).passthrough(),ol=f({type:v("provider_auth_list_request"),requestId:l()}).passthrough(),rl=f({type:v("provider_auth_list_response"),requestId:l(),payload:f({ok:A(),providers:O(sl).default([]),error:l().optional()}).passthrough()}).passthrough(),il=f({type:v("provider_auth_login_request"),requestId:l(),provider:l(),authType:On}).passthrough(),al=f({type:v("provider_auth_login_response"),requestId:l(),payload:f({ok:A(),flowId:l().optional(),error:l().optional()}).passthrough()}).passthrough(),cl=f({type:v("provider_auth_respond_request"),requestId:l(),flowId:l(),promptId:l(),value:l()}).passthrough(),ll=f({type:v("provider_auth_respond_response"),requestId:l(),payload:f({ok:A(),error:l().optional()}).passthrough()}).passthrough(),ul=f({type:v("provider_auth_cancel_request"),requestId:l(),flowId:l()}).passthrough(),dl=f({type:v("provider_auth_cancel_response"),requestId:l(),payload:f({ok:A()}).passthrough()}).passthrough(),fl=f({type:v("provider_auth_logout_request"),requestId:l(),provider:l()}).passthrough(),pl=f({type:v("provider_auth_logout_response"),requestId:l(),payload:f({ok:A(),stillConfigured:A().optional(),error:l().optional()}).passthrough()}).passthrough(),hl=f({enabled:A(),config:re(l(),Z()).optional()}).passthrough(),Qn=f({version:v(1).default(1),viewers:re(l(),hl).default({})}).passthrough(),gl=f({type:v("viewer_settings_get_request"),requestId:l()}).passthrough(),ml=f({type:v("viewer_settings_get_response"),requestId:l(),payload:f({settings:Qn}).passthrough()}).passthrough(),_l=f({enabled:A().optional(),config:re(l(),Z()).optional()}).passthrough(),yl=f({type:v("viewer_settings_set_request"),requestId:l(),patch:re(l(),_l)}).passthrough(),wl=f({type:v("viewer_settings_set_response"),requestId:l(),payload:f({settings:Qn}).passthrough()}).passthrough(),vl=f({type:v("viewer_settings_update"),settings:Qn}).passthrough(),bl=f({clientId:l(),clientType:l(),appVersion:l().optional(),platform:l().optional(),agentStreams:l().optional(),connectedAt:M(),remoteAddress:l().optional(),transport:de(["direct","relay"])}).passthrough(),es=f({version:l(),startedAt:M(),uptimeMs:M(),pid:M(),nodeVersion:l(),memory:f({rss:M(),heapUsed:M(),heapTotal:M()}).passthrough(),cpuPercent:M(),eventLoopLagMs:M(),agentsByStatus:re(l(),M()),clients:O(bl)}).passthrough(),Sl=f({type:v("daemon_status_request"),requestId:l()}).passthrough(),kl=f({type:v("daemon_status_response"),requestId:l(),payload:es}).passthrough(),xl=f({type:v("daemon_status_subscribe_request"),requestId:l()}).passthrough(),Il=f({type:v("daemon_status_subscribe_response"),requestId:l(),payload:Rt([f({ok:v(!0),intervalMs:M(),status:es}).passthrough(),f({ok:v(!1),error:l()}).passthrough()])}).passthrough(),El=f({type:v("daemon_status_unsubscribe_request"),requestId:l()}).passthrough(),Tl=f({type:v("daemon_status_unsubscribe_response"),requestId:l(),payload:f({ok:A()}).passthrough()}).passthrough(),Cl=f({type:v("daemon_status_update"),payload:es}).passthrough(),Xo=f({time:M(),level:l(),msg:l(),fields:re(l(),Z()).optional()}).passthrough(),Al=f({type:v("daemon_logs_subscribe_request"),requestId:l(),minLevel:l(),tail:M().optional()}).passthrough(),Rl=f({type:v("daemon_logs_subscribe_response"),requestId:l(),payload:Rt([f({ok:v(!0),minLevel:l(),effectiveLevel:l(),lines:O(Xo),dropped:M()}).passthrough(),f({ok:v(!1),error:l()}).passthrough()])}).passthrough(),jl=f({type:v("daemon_logs_unsubscribe_request"),requestId:l()}).passthrough(),Pl=f({type:v("daemon_logs_unsubscribe_response"),requestId:l(),payload:f({ok:A()}).passthrough()}).passthrough(),Ml=f({type:v("daemon_log_lines"),lines:O(Xo),dropped:M()}).passthrough(),Mt=f({name:l(),description:l().optional(),path:l(),enabled:A(),origin:l(),originLabel:l(),packageSource:l().optional(),shadowedBy:l().optional(),symlinkTarget:l().optional(),provenance:f({source:l(),sourceUrl:l().optional(),installedAt:l().optional()}).passthrough().optional(),disableModelInvocation:A().optional(),warnings:O(l()).optional(),removable:A()}).passthrough(),Nt=f({source:l(),kind:de(["npm","git","local"]),identity:l(),pinned:A(),curated:A(),filtered:A(),skillCount:M()}).passthrough(),Nl=f({type:v("skills_list_request"),requestId:l()}).passthrough(),ql=f({type:v("skills_list_response"),requestId:l(),ok:A(),error:l().optional(),message:l().optional(),skills:O(Mt),packages:O(Nt)}).passthrough(),Dl=f({type:v("skills_set_enabled_request"),requestId:l(),path:l(),enabled:A()}).passthrough(),Ol=f({type:v("skills_set_enabled_response"),requestId:l(),ok:A(),error:l().optional(),message:l().optional(),skills:O(Mt),packages:O(Nt)}).passthrough(),Ll=f({type:v("skills_changed"),reason:l()}).passthrough(),Jo=f({type:v("skills_remove_request"),requestId:l(),path:l().optional(),packageSource:l().optional()}).passthrough();Jo.refine(e=>e.path!==void 0!=(e.packageSource!==void 0),{message:"exactly one of path or packageSource is required"});const $l=f({type:v("skills_remove_response"),requestId:l(),ok:A(),error:l().optional(),message:l().optional(),stderr:l().optional(),skills:O(Mt),packages:O(Nt)}).passthrough(),Zo=f({target:l(),ok:A(),error:l().optional(),stderr:l().optional()}).passthrough(),Bl=f({type:v("skills_update_all_request"),requestId:l()}).passthrough(),Fl=f({type:v("skills_update_all_response"),requestId:l(),ok:A(),error:l().optional(),message:l().optional(),results:O(Zo),skills:O(Mt),packages:O(Nt)}).passthrough(),zl=f({name:l(),description:l().optional(),relPath:l(),warnings:O(l()).optional(),valid:A(),exists:A()}).passthrough(),Ul=f({type:v("skills_preview_request"),requestId:l(),source:l()}).passthrough(),Wl=f({type:v("skills_preview_response"),requestId:l(),ok:A(),error:l().optional(),message:l().optional(),kind:l(),source:l(),skills:O(zl)}).passthrough(),Hl=f({type:v("skills_install_request"),requestId:l(),source:l(),skills:O(l()).optional(),replace:A().optional()}).passthrough(),Vl=f({type:v("skills_install_response"),requestId:l(),ok:A(),error:l().optional(),message:l().optional(),results:O(Zo),skills:O(Mt),packages:O(Nt)}).passthrough(),Kl=f({requestId:l(),agentId:l(),method:l(),expectsResponse:A(),payload:re(Z()),surfaceKey:l().optional(),timeoutMs:M().optional(),createdAt:Oe}).passthrough(),Gl=f({agentId:l(),method:l(),surfaceKey:l(),payload:re(Z()),updatedAt:Oe}).passthrough(),Yl=f({type:v("agent_ui_request"),requestId:l(),agentId:l(),method:l(),expectsResponse:A(),payload:re(Z()),surfaceKey:l().optional(),removed:A().optional(),timeoutMs:M().optional(),createdAt:Oe}).passthrough(),Xl=f({type:v("agent_ui_resolved"),requestId:l(),agentId:l(),reason:l()}).passthrough(),Jl=f({value:l().optional(),confirmed:A().optional(),cancelled:A().optional()}).passthrough(),Zl=f({type:v("agent_ui_respond_request"),requestId:l(),uiRequestId:l(),response:Jl}).passthrough(),Ql=f({type:v("agent_ui_respond_response"),requestId:l(),payload:f({ok:A(),error:l().optional()}).passthrough()}).passthrough(),eu=f({type:v("agent_ui_list_request"),requestId:l(),agentId:l().optional()}).passthrough(),tu=f({type:v("agent_ui_list_response"),requestId:l(),payload:f({ok:A(),pending:O(Kl),surfaces:O(Gl),error:l().optional()}).passthrough()}).passthrough(),nu=de(["pending","in_progress","completed"]),PS=200,su=f({id:M().int(),subject:l(),status:nu,activeForm:l().optional(),description:l().optional(),owner:l().optional(),blockedBy:O(M().int()).optional()}).passthrough(),Qo=f({agentId:l(),seq:M(),tasks:O(su),truncated:A().optional()}).passthrough(),ou=f({type:v("agent_todos_list_request"),requestId:l(),agentId:l()}).passthrough(),ru=f({type:v("agent_todos_list_response"),requestId:l(),snapshot:Qo.optional(),ok:A().optional(),error:l().optional()}).passthrough(),iu=f({type:v("agent_todos_update"),snapshot:Qo}).passthrough(),au=f({type:v("file_upload_complete"),transferId:l(),stream:M().int().nonnegative(),ok:A(),bytesWritten:M().int().nonnegative(),error:l().optional()}).passthrough(),cu=f({type:v("rpc_error"),requestId:l(),code:l().optional(),message:l().optional(),error:l().optional()}),lu=fn("type",[Ka,Ga,Ya,Xa,Ja,Za,Qa,tc,oc,rc,ic,ac,cc,lc,uc,dc,fc,gc,mc,_c,yc,wc,vc,bc,Sc,kc,xc,Ic,Ec,Tc,Cc,Ac,Rc,jc,Pc,Mc,Nc,qc,Dc,Oc,Lc,$c,Bc,Fc,zc,Uc,Wc,Hc,Vc,Gc,Yc,Qc,el,tl,nl,ol,rl,il,al,cl,ll,ul,dl,fl,pl,gl,ml,yl,wl,vl,Sl,kl,xl,Il,El,Tl,Cl,Al,Rl,jl,Pl,Ml,Nl,ql,Dl,Ol,Ll,Jo,$l,Bl,Fl,Ul,Wl,Hl,Vl,Yl,Xl,Zl,Ql,eu,tu,ou,ru,iu,au,cu]),uu=f({type:l()}).passthrough(),du=f({type:v("session"),message:Rt([lu,uu])});fn("type",[Ba,za,Ua,Wa,du]);const zt={terminal_reflowable_snapshot:"terminal_reflowable_snapshot",inline_image_markdown:"inline_image_markdown",file_link_markdown:"file_link_markdown",mermaid_diagram_markdown:"mermaid_diagram_markdown"},Qe={Output:1,Input:2,Resize:3,Snapshot:4,Restore:5},fu=Object.fromEntries(Object.entries(Qe).map(([e,t])=>[t,e])),er=f({rows:M().int().nonnegative(),cols:M().int().nonnegative()});class ht extends Error{constructor(t){super(t),this.name="TerminalFrameError"}}const pu=new TextEncoder,hu=new TextDecoder;function gu(e){if(!Number.isInteger(e)||e<0||e>255)throw new ht(`slot must be an integer 0–255, got ${e}`)}function lt(e,t,n){const s=new Uint8Array(2+n.length);return s[0]=e,s[1]=t,s.set(n,2),s}function MS(e){switch(gu(e.slot),e.opcode){case"Output":return lt(Qe.Output,e.slot,e.data);case"Input":return lt(Qe.Input,e.slot,e.data);case"Snapshot":return lt(Qe.Snapshot,e.slot,e.data);case"Restore":return lt(Qe.Restore,e.slot,e.data);case"Resize":{const t=JSON.stringify(er.parse({rows:e.rows,cols:e.cols}));return lt(Qe.Resize,e.slot,pu.encode(t))}}}function mu(e){if(e.length<2)throw new ht(`frame too short: ${e.length} bytes (need ≥ 2)`);const t=e[0],n=e[1],s=fu[t];if(!s)throw new ht(`unknown terminal opcode 0x${t.toString(16)}`);const o=e.subarray(2);if(s==="Resize"){let r;try{r=JSON.parse(hu.decode(o))}catch{throw new ht("resize payload is not valid JSON")}const i=er.safeParse(r);if(!i.success)throw new ht("resize payload is not { rows, cols }");return{opcode:"Resize",slot:n,rows:i.data.rows,cols:i.data.cols}}return{opcode:s,slot:n,data:o.slice()}}const nt={Begin:16,Chunk:17,End:18,Error:19},_u=Object.fromEntries(Object.entries(nt).map(([e,t])=>[t,e])),tr=f({transferId:l(),fileName:l().optional(),mimeType:l().optional(),totalBytes:M().int().nonnegative().optional(),mtimeMs:M().int().nonnegative().optional(),offset:M().int().nonnegative().optional(),length:M().int().nonnegative().optional()});class gt extends Error{constructor(t){super(t),this.name="FileTransferFrameError"}}const xs=new TextEncoder,Is=new TextDecoder;function yu(e){if(!Number.isInteger(e)||e<0||e>255)throw new gt(`stream must be an integer 0–255, got ${e}`)}function Ut(e,t,n){const s=new Uint8Array(2+n.length);return s[0]=e,s[1]=t,s.set(n,2),s}function Wt(e){switch(yu(e.stream),e.opcode){case"Begin":return Ut(nt.Begin,e.stream,xs.encode(JSON.stringify(tr.parse(e.meta))));case"Chunk":return Ut(nt.Chunk,e.stream,e.data);case"End":return Ut(nt.End,e.stream,new Uint8Array([e.ok?1:0]));case"Error":return Ut(nt.Error,e.stream,xs.encode(e.message))}}function wu(e){if(e.length<2)throw new gt(`frame too short: ${e.length} bytes (need ≥ 2)`);const t=e[0],n=e[1],s=_u[t];if(!s)throw new gt(`unknown file-transfer opcode 0x${t.toString(16)}`);const o=e.subarray(2);switch(s){case"Begin":{let r;try{r=JSON.parse(Is.decode(o))}catch{throw new gt("begin payload is not valid JSON")}const i=tr.safeParse(r);if(!i.success)throw new gt("begin payload is not a valid transfer header");return{opcode:"Begin",stream:n,meta:i.data}}case"Chunk":return{opcode:"Chunk",stream:n,data:o.slice()};case"End":return{opcode:"End",stream:n,ok:(o[0]??1)!==0};case"Error":return{opcode:"Error",stream:n,message:Is.decode(o)}}}function vu(e){try{return wu(e)}catch{return null}}const et=256;function bu(e,t=0){const n=(t%et+et)%et;for(let s=0;s<et;s++){const o=(n+s)%et;if(!e.has(o))return o}return null}const Su=l().regex(/^[a-z][a-z0-9-]*$/,"invalid provider id"),ku=de(["safe","moderate","dangerous","planning"]),xu=f({supportsStreaming:A(),supportsSessionPersistence:A(),supportsDynamicModes:A(),supportsMcpServers:A(),supportsReasoningStream:A(),supportsToolInvocations:A(),supportsRewindConversation:A().optional(),supportsRewindFiles:A().optional(),supportsRewindBoth:A().optional(),supportsSteering:A().optional(),supportsExtensionUi:A().optional(),supportsTodos:A().optional()}).passthrough(),Iu=f({id:l(),label:l().optional(),description:l().optional(),icon:l().optional(),colorTier:ku});f({id:Su,label:l(),description:l().optional(),extends:l().optional(),modes:O(Iu),capabilities:xu});function nr(e){return typeof e=="string"?e:e instanceof Uint8Array||Buffer.isBuffer(e)?e.toString("utf8"):String(e??"")}function sr(e){let t=null;const n={onMessage:null,onClose:null,onError:null,get isOpen(){return t!==null&&t.readyState===1},get bufferedAmount(){return t==null?void 0:t.bufferedAmount},connect(s){return new Promise((o,r)=>{const i=e??(()=>new WebSocket(s));try{t=e?i(s):new WebSocket(s),t.binaryType="arraybuffer"}catch(a){r(a);return}t.onopen=()=>o(),t.onerror=a=>{var u;(t==null?void 0:t.readyState)!==1&&r(a),(u=n.onError)==null||u.call(n,a)},t.onclose=a=>{var u;(u=n.onClose)==null||u.call(n,a.code,nr(a.reason))},t.onmessage=a=>{var d,h,p,_;const{data:u}=a;u instanceof ArrayBuffer||u instanceof Uint8Array?(d=n.onMessage)==null||d.call(n,u):typeof u=="string"?(h=n.onMessage)==null||h.call(n,u):typeof Blob<"u"&&u instanceof Blob?(p=n.onMessage)==null||p.call(n,u):Buffer.isBuffer(u)&&((_=n.onMessage)==null||_.call(n,u.buffer.slice(u.byteOffset,u.byteOffset+u.byteLength)))}})},sendText(s){t==null||t.send(s)},sendBinary(s){t==null||t.send(s)},close(s=1e3,o=""){t==null||t.close(s,o),t=null}};return n}const Eu=/^[0-9a-f]{32}$/;function Es(e){return typeof e=="string"&&Eu.test(e)}function Tu(e){if(typeof e!="string")return null;let t;try{t=JSON.parse(e)}catch{return null}return typeof t!="object"||t===null||Array.isArray(t)?null:t}function Cu(e){const t=Tu(e);if(!t)return null;switch(t.type){case"relay_registered":return{type:"relay_registered"};case"relay_dial":return Es(t.connectionId)?{type:"relay_dial",connectionId:t.connectionId}:null;case"relay_paired":return Es(t.connectionId)?{type:"relay_paired",connectionId:t.connectionId}:null;default:return null}}const je={DAEMON_OFFLINE:{code:4102},DAEMON_UNRESPONSIVE:{code:4103},TOO_MANY_CLIENTS:{code:4104},DAEMON_OUTDATED:{code:4105},CHANNEL_ERROR:{code:4200,reason:"channel_error"}},Au={connectTimeoutMs:15e3},Ts=1,wt=15,tt={READY:0,TEXT:1,BINARY:2},Cs={CLIENT_TO_DAEMON:1,DAEMON_TO_CLIENT:2},Ru=32,ju=24,or=1+st.box.overheadLength,Pu=1n<<64n,Mu=new TextEncoder,Nu=new TextDecoder("utf-8",{fatal:!0});function As(e,t,n){const s=new Uint8Array(ju);return s.set(e,0),s[wt]=t,new DataView(s.buffer).setBigUint64(wt+1,n,!1),s}function qu(e,t){const n=new Uint8Array(1+t.length);return n[0]=e,n.set(t,1),n}class Du{constructor(t,n,s,o,r){N(this,"transport");N(this,"events");N(this,"sendDirection");N(this,"receiveDirection");N(this,"key",null);N(this,"salt",null);N(this,"open",!1);N(this,"closed",!1);N(this,"sent");N(this,"received");N(this,"limit");this.transport=t,this.events=n,this.sendDirection=s,this.receiveDirection=o,this.sent=r.counterStart??0n,this.received=r.counterStart??0n,this.limit=r.counterLimit??Pu,t.onClose((i,a)=>this.handleTransportClose(i,a)),t.onFrame(i=>this.handleFrame(i))}send(t){this.sealAndSend(tt.TEXT,Mu.encode(t))}sendBinary(t){this.sealAndSend(tt.BINARY,t)}close(t=1e3,n=""){var s,o;this.closed||(this.closed=!0,this.transport.close(t,n),(o=(s=this.events).onClose)==null||o.call(s,t,n))}handleFrame(t){}fail(t){var n,s,o,r;this.closed||(this.closed=!0,(s=(n=this.events).onError)==null||s.call(n,new Error(t)),this.transport.close(je.CHANNEL_ERROR.code,je.CHANNEL_ERROR.reason),(r=(o=this.events).onClose)==null||r.call(o,je.CHANNEL_ERROR.code,je.CHANNEL_ERROR.reason))}seal(t){if(!this.key||!this.salt)throw new Error("channel not open");if(this.sent>=this.limit)throw this.fail("counter limit reached"),new Error("channel counter limit reached");const n=As(this.salt,this.sendDirection,this.sent),s=st.box.after(t,n,this.key);return this.sent+=1n,s}unseal(t){if(!this.key||!this.salt)return null;if(this.received>=this.limit)return this.fail("counter limit reached"),null;if(t.length<or)return this.fail("box too short"),null;const n=As(this.salt,this.receiveDirection,this.received),s=st.box.open.after(t,n,this.key);return!s||s.length<1?(this.fail("box did not open"),null):(this.received+=1n,s)}deliver(t){const n=t[0],s=t.subarray(1);if(n===tt.TEXT){let o;try{o=Nu.decode(s)}catch{return this.fail("text record is not UTF-8"),!1}return this.events.onText(o),!0}return n===tt.BINARY?(this.events.onBinary(s.slice()),!0):(this.fail(n===tt.READY?"unexpected ready record":"unknown record kind"),!1)}sealAndSend(t,n){if(this.closed)throw new Error("channel closed");if(!this.open)throw new Error("channel not open");this.transport.send(this.seal(qu(t,n)))}handleTransportClose(t,n){var s,o;this.closed||(this.closed=!0,(o=(s=this.events).onClose)==null||o.call(s,t,n))}}class Ou extends Du{constructor(n){super(n.transport,n.events,Cs.CLIENT_TO_DAEMON,Cs.DAEMON_TO_CLIENT,n);N(this,"readyOpened",!1);N(this,"secretKey");const s=n.keyPair??st.box.keyPair();this.secretKey=s.secretKey,this.key=st.box.before(n.daemonPublicKey,this.secretKey);const o=new Uint8Array(1+Ru);o[0]=Ts,o.set(s.publicKey,1),n.transport.send(o)}handleFrame(n){if(this.closed)return;if(typeof n=="string")return this.fail("text frame on channel");if(!this.readyOpened)return this.handleReady(n);const s=this.unseal(n);s&&this.deliver(s)}handleReady(n){var o,r;if(n.length<1+wt+or||n[0]!==Ts)return this.fail("malformed ready");this.salt=n.slice(1,1+wt);const s=this.unseal(n.subarray(1+wt));if(s){if(s.length!==1||s[0]!==tt.READY)return this.fail("first box is not a ready record");this.readyOpened=!0,this.open=!0,(r=(o=this.events).onReady)==null||r.call(o)}}}function Lu(e){return new Ou(e)}const $u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function Bu(e){const t=e.replace(/=+$/,""),n=[];let s=0,o=0;for(const r of t){const i=$u.indexOf(r);if(i===-1)throw new Error(`invalid base64 character: ${JSON.stringify(r)}`);s=s<<6|i,o+=6,o>=8&&(o-=8,n.push(s>>o&255))}return new Uint8Array(n)}const Fu=16;function zu(e){const t=st.hash(e);let n="";for(let s=0;s<Fu;s++)n+=t[s].toString(16).padStart(2,"0");return n}const Rs={daemon_offline:"The daemon is not connected to the relay: it may be offline, or its key replaced, so this pairing link is no longer valid.",daemon_unresponsive:"The daemon did not answer through the relay.",too_many_clients:"The daemon already has the maximum number of relay connections.",daemon_outdated:"The daemon speaks an older relay protocol and must be updated.",timeout:"The relay did not answer in time; a self-hosted relay may need updating.",wrong_key:"The pairing link does not match this daemon.",relay_unreachable:"The relay could not be reached.",protocol_error:"The relay connection failed with a protocol error."};class Be extends Error{constructor(n,s){super(s?`${Rs[n]} (${s})`:Rs[n]);N(this,"reason");this.name="RelayConnectError",this.reason=n}}function Uu(e){const t=e.useTls?"wss":"ws",n=e.endpoint.replace(/^(?:https?|wss?):\/\//,"").replace(/\/+$/,"");return`${t}://${n}`}const Wu=new Set([1005,1006,1015]),Hu=new Map([[je.DAEMON_OFFLINE.code,"daemon_offline"],[je.DAEMON_UNRESPONSIVE.code,"daemon_unresponsive"],[je.TOO_MANY_CLIENTS.code,"too_many_clients"],[je.DAEMON_OUTDATED.code,"daemon_outdated"]]);function js(e,t){const n=Hu.get(e);return n||(t&&e===je.CHANNEL_ERROR.code?"wrong_key":!t&&Wu.has(e)?"relay_unreachable":"protocol_error")}function Vu(e){return e instanceof ArrayBuffer?new Uint8Array(e):ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):null}function Ku(e){let t=null,n=null,s="idle",o=0,r=null;const i=e.sessionId??zu(e.daemonPublicKey),a=e.connectTimeoutMs??Au.connectTimeoutMs,u={onMessage:null,onClose:null,onError:null,get isOpen(){return s==="open"&&t!==null&&t.readyState===1},get bufferedAmount(){return t==null?void 0:t.bufferedAmount},connect(d){if(s==="connecting"||s==="open")return Promise.reject(new Error("relay transport: already connecting or open"));s="connecting";const h=++o;return new Promise((p,_)=>{let g;try{g=e.factory?e.factory(d):new WebSocket(d)}catch(E){s="done",_(new Be("relay_unreachable",Ps(E)));return}t=g,g.binaryType="arraybuffer";let b=!1,y=null,x=null;const m=setTimeout(()=>S(new Be("timeout")),a),S=E=>{var T;if(!(h!==o||s!=="connecting")){s="done",r=null,clearTimeout(m);try{g.close(1e3,"")}catch{}t=null,_(E),(T=u.onClose)==null||T.call(u,1006,E.message)}};r=S;const C=()=>{n=Lu({transport:{send:E=>g.send(E),onFrame:E=>{y=E},onClose:E=>{x=E},close:(E,T)=>g.close(E,T)},daemonPublicKey:e.daemonPublicKey,events:{onReady:()=>{h!==o||s!=="connecting"||(s="open",r=null,clearTimeout(m),p())},onText:E=>{var T;h===o&&s==="open"&&((T=u.onMessage)==null||T.call(u,E))},onBinary:E=>{var T;h===o&&s==="open"&&((T=u.onMessage)==null||T.call(u,E.buffer))},onError:E=>{var T;h===o&&s==="open"&&((T=u.onError)==null||T.call(u,E))},onClose:(E,T)=>{var $;h===o&&(s==="connecting"?S(new Be(js(E??1006,!0),T)):s==="open"&&(s="done",($=u.onClose)==null||$.call(u,E??1006,T??"")))}}})};g.onopen=()=>{h!==o||s!=="connecting"||g.send(JSON.stringify({type:"relay_client_connect",v:2,sessionId:i}))},g.onmessage=E=>{if(h!==o)return;if(s==="connecting"&&!b){const $=typeof E.data=="string"?Cu(E.data):null;($==null?void 0:$.type)==="relay_paired"?(b=!0,C()):($===null||$.type!=="relay_registered")&&S(new Be("protocol_error","unexpected frame before relay_paired"));return}if(s==="done")return;const T=typeof E.data=="string"?E.data:Vu(E.data);T!==null&&(y==null||y(T))},g.onerror=E=>{h===o&&s==="connecting"&&!b&&S(new Be("relay_unreachable",Ps(E)))},g.onclose=E=>{var $;if(h!==o)return;const T=nr(E.reason);s==="connecting"&&!b?S(new Be(js(E.code,!1),T)):x?x(E.code,T):s==="open"&&(s="done",($=u.onClose)==null||$.call(u,E.code,T))}})},sendText(d){if(s!=="open"||!n)throw new Error("relay transport: cannot send before the E2EE handshake completes");n.send(d)},sendBinary(d){if(s!=="open"||!n)throw new Error("relay transport: cannot send before the E2EE handshake completes");n.sendBinary(d)},close(d=1e3,h=""){var _;if(s==="connecting"){r==null||r(new Be("protocol_error","closed before the connection opened"));return}if(s!=="open")return;s="done";const p=n;n=null,p==null||p.close(d,h),t=null,(_=u.onClose)==null||_.call(u,d,h)}};return u}function Ps(e){if(e instanceof Error)return e.message;const t=e==null?void 0:e.message;return typeof t=="string"&&t!==""?t:void 0}function rr(e){const t=e.indexOf("#"),n=t===-1?e:e.slice(t+1),s=new URLSearchParams(n),o=s.get("offer");if(!o)return null;let r;try{r=Bu(o)}catch{return null}const i=s.get("relay");if(i){const u={endpoint:i,useTls:s.get("relayTls")==="1"};return{publicKeyB64:o,publicKey:r,relay:u}}const a=s.get("host")??void 0;return{publicKeyB64:o,publicKey:r,...a?{host:a}:{}}}const Gu=1;function nn(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`id-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}class Yu extends Error{constructor(t,n,s){super(t),this.requestId=n,this.code=s,this.name="RpcError"}}class Ln extends Error{constructor(t){super(`RPC ${t} timed out`),this.requestId=t,this.name="RpcTimeoutError"}}class Xu{constructor(t){N(this,"transport");N(this,"rpcTimeoutMs");N(this,"now");N(this,"_state","idle");N(this,"_serverId",null);N(this,"_features",{});N(this,"_serverCapabilities",{});N(this,"pending",new Map);N(this,"sessionHandlers",new Set);N(this,"terminalHandlers",new Set);N(this,"fileTransferHandlers",new Set);N(this,"stateHandlers",new Set);N(this,"helloResolve",null);N(this,"helloReject",null);this.options=t,this.transport=t.transport??sr(),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}get bufferedAmount(){return this.transport.bufferedAmount}hasFeature(t){return!!this._features[t]}async connect(){this.setState("connecting"),await this.transport.connect(this.options.url);const t=new Promise((s,o)=>{this.helloResolve=s,this.helloReject=o});this.transport.sendText(JSON.stringify({type:"hello",clientId:this.options.clientId,clientType:this.options.clientType,platform:this.options.platform,agentStreams:this.options.agentStreams,protocolVersion:this.options.protocolVersion??Gu,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 o=n.requestId??nn();return new Promise((r,i)=>{const a=s??this.rpcTimeoutMs,u=a>0?setTimeout(()=>{this.pending.delete(o),i(new Ln(o))},a):null;this.pending.set(o,{resolve:d=>r(d),reject:i,timer:u}),this.sendSession({type:t,...n,requestId:o})})}sendSession(t){this.transport.sendText(JSON.stringify({type:"session",message:t}))}sendBinary(t){this.transport.sendBinary(t)}ping(t=1e4){const n=nn();return new Promise((s,o)=>{const r=t>0?setTimeout(()=>{this.pending.delete(n),o(new Ln(n))},t):null;this.pending.set(n,{resolve:()=>s(),reject:o,timer:r}),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(nt).includes(n)){const r=vu(t);if(!r)return;for(const i of this.fileTransferHandlers)i(r);return}const o=mu(t);for(const r of this.terminalHandlers)r(o)}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 Yu(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))}}const Ju=10*6e4,Zu=660*1e3,Qu=1300*1e3,ed=150*1e3,td=660*1e3;function nd(e){const t=e;if(!t||t.type!=="provider_auth_flow_event"||typeof t.flowId!="string")return!1;const n=t.event;return typeof n=="object"&&n!==null&&typeof n.kind=="string"}class Ms extends Error{constructor(t,n){super(t),this.operation=n,this.name="ProviderAuthError"}}class Ns extends Error{constructor(t){super("prompt_cancelled"),this.promptId=t,this.name="PromptCancelledError"}}class sd extends Error{constructor(t,n){super(t),this.operation=n,this.name="AgentUiError"}}function od(e){const t=e;return!!t&&t.type==="agent_ui_request"&&typeof t.requestId=="string"&&typeof t.agentId=="string"}function rd(e){const t=e;return!!t&&t.type==="agent_ui_resolved"&&typeof t.requestId=="string"&&typeof t.agentId=="string"}class qs extends Error{constructor(t,n){super(t),this.code=n,this.name="AgentTodosError"}}function id(e){const t=e;return!!t&&t.type==="agent_todos_update"&&typeof t.snapshot=="object"&&t.snapshot!==null}function ad(e){const t=e;return!!t&&t.type==="agent_archived"&&typeof t.agentId=="string"}function cd(e){const t=e;return!!t&&t.type==="agent_deleted"&&typeof t.agentId=="string"}class ld{constructor(t){N(this,"activeProviderAuthFlow",null);this.daemon=t}get connection(){return this.daemon}async createAgent(t){return await this.daemon.request("create_agent_request",{...t})}agent(t){return new dd(this.daemon,t)}workspace(t){return new fd(this.daemon,t)}get providers(){return new pd(this.daemon)}listExtensionPacks(){return this.daemon.request("extension_packs_list_request",{})}setExtensionPacks(t,n){return this.daemon.request("extension_packs_set_request",{packs:t},n==null?void 0:n.timeoutMs)}syncExtensionPacks(t){return this.daemon.request("extension_packs_set_request",{},t==null?void 0:t.timeoutMs)}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)})}hasProviderAuthCapability(){return this.daemon.hasFeature("providerAuth")}async listProviderAuth(){const t=await this.daemon.request("provider_auth_list_request",{});if(!t.ok)throw new Ms(t.error??"failed to list provider auth state","list");return t.providers}async logoutProvider(t){const n=await this.daemon.request("provider_auth_logout_request",{provider:t});if(!n.ok)throw new Ms(n.error??"failed to log out","logout");return{stillConfigured:n.stillConfigured}}async loginProvider(t,n,s,o){var p;if(this.activeProviderAuthFlow)throw new Error("a provider-auth login is already in progress for this client");let r;const i=new Promise(_=>{r=_}),a={flowId:null,buffered:[],pendingPrompt:null,cancelRequested:((p=o==null?void 0:o.signal)==null?void 0:p.aborted)??!1,terminal:!1,settle:r,unsubscribe:null};this.activeProviderAuthFlow=a;const u=this.daemon.onSessionMessage(_=>{nd(_)&&this.routeProviderAuthEvent(a,_,s)}),d=this.daemon.onStateChange(_=>{_==="closed"&&this.settleProviderAuthFlow(a,{ok:!1,error:"connection_lost"})});let h=null;if(o!=null&&o.signal){const _=o.signal;h=()=>{a.cancelRequested=!0,a.flowId&&!a.terminal&&this.daemon.request("provider_auth_cancel_request",{flowId:a.flowId}).catch(()=>{})},_.addEventListener("abort",h,{once:!0}),a.unsubscribe=()=>{u(),d(),_.removeEventListener("abort",h)}}else a.unsubscribe=()=>{u(),d()};try{const _=await this.daemon.request("provider_auth_login_request",{provider:t,authType:n});if(a.terminal)return i;if(!_.ok||!_.flowId)return this.settleProviderAuthFlow(a,{ok:!1,error:_.error}),i;a.flowId=_.flowId;const g=a.buffered;a.buffered=[];for(const b of g)b.flowId===a.flowId&&this.dispatchProviderAuthEvent(a,b.event,s);a.cancelRequested&&!a.terminal&&this.daemon.request("provider_auth_cancel_request",{flowId:a.flowId}).catch(()=>{})}catch{a.terminal||this.settleProviderAuthFlow(a,{ok:!1,error:"connection_lost"})}return i}routeProviderAuthEvent(t,n,s){if(!t.terminal){if(t.flowId===null){t.buffered.push(n);return}n.flowId===t.flowId&&this.dispatchProviderAuthEvent(t,n.event,s)}}dispatchProviderAuthEvent(t,n,s){var o;switch(n.kind){case"done":this.settleProviderAuthFlow(t,{ok:!!n.ok,error:typeof n.error=="string"?n.error:void 0});return;case"prompt_cancelled":{const r=n.promptId;t.pendingPrompt&&t.pendingPrompt.promptId===r&&(t.pendingPrompt.reject(new Ns(r)),t.pendingPrompt=null);return}case"prompt":this.handleProviderAuthPrompt(t,n,s);return;default:(o=s.onEvent)==null||o.call(s,n);return}}async handleProviderAuthPrompt(t,n,s){const o=new AbortController,r={promptId:n.promptId,promptKind:n.promptKind,message:n.message,placeholder:n.placeholder,options:n.options,signal:o.signal};let i;const a=new Promise((d,h)=>{i=h});a.catch(()=>{}),t.pendingPrompt={promptId:r.promptId,reject:d=>{o.abort(),i(d)}};const u=s.prompt(r);u.catch(()=>{});try{const d=await Promise.race([u,a]);if(t.terminal)return;t.pendingPrompt=null,await this.daemon.request("provider_auth_respond_request",{flowId:t.flowId,promptId:r.promptId,value:d})}catch(d){if(t.pendingPrompt=null,t.terminal||d instanceof Ns)return;t.flowId&&this.daemon.request("provider_auth_cancel_request",{flowId:t.flowId}).catch(()=>{}),this.settleProviderAuthFlow(t,{ok:!1,error:"connection_lost"})}}settleProviderAuthFlow(t,n){var s;t.terminal||(t.terminal=!0,t.pendingPrompt&&(t.pendingPrompt.reject(new Error("provider-auth: flow ended")),t.pendingPrompt=null),(s=t.unsubscribe)==null||s.call(t),this.activeProviderAuthFlow===t&&(this.activeProviderAuthFlow=null),t.settle(n))}hasViewerSettingsCapability(){return this.daemon.hasFeature("viewerSettings")}async getViewerSettings(){return(await this.daemon.request("viewer_settings_get_request",{})).settings}async setViewerSettings(t){return(await this.daemon.request("viewer_settings_set_request",{patch:t})).settings}onViewerSettingsUpdate(t){return this.daemon.onSessionMessage(n=>{n.type==="viewer_settings_update"&&t(n.settings)})}onAgentUiRequest(t){return this.daemon.onSessionMessage(n=>{od(n)&&t(n,{receivedAt:Date.now()})})}onAgentUiResolved(t){return this.daemon.onSessionMessage(n=>{rd(n)&&t(n)})}async respondToUi(t,n){const s=await this.daemon.request("agent_ui_respond_request",{uiRequestId:t,response:n});return s.ok?{ok:!0}:{ok:!1,reason:s.error??"unknown"}}async listAgentUi(t){const n=await this.daemon.request("agent_ui_list_request",t?{agentId:t}:{});if(!n.ok)throw new sd(n.error??"failed to list extension UI state","list");return{pending:n.pending??[],surfaces:n.surfaces??[]}}extensionUiAvailable(){return this.daemon.hasFeature("extensionUi")}hasAgentTodosCapability(){return this.daemon.hasFeature("agentTodos")}async listAgentTodos(t){const n=await this.daemon.request("agent_todos_list_request",{agentId:t});if(n.ok===!1)throw new qs(n.error??"failed to list agent todos",n.error??"unknown");if(!n.snapshot)throw new qs("malformed agent_todos_list_response: missing snapshot","malformed_response");return n.snapshot}onAgentTodosUpdate(t){return this.daemon.onSessionMessage(n=>{id(n)&&t(n.snapshot)})}hasSkillsCapability(){return this.daemon.hasFeature("skills")}async listSkills(){return this.daemon.request("skills_list_request",{})}async setSkillEnabled(t,n){return this.daemon.request("skills_set_enabled_request",{path:t,enabled:n})}async removeSkill(t){return this.daemon.request("skills_remove_request",t,Zu)}async updateAllSkills(){return this.daemon.request("skills_update_all_request",{},Qu)}async previewSkillSource(t){return this.daemon.request("skills_preview_request",{source:t},ed)}async installSkills(t){return this.daemon.request("skills_install_request",t,td)}onSkillsChanged(t){return this.daemon.onSessionMessage(n=>{n.type==="skills_changed"&&t(n.reason)})}}class ud{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,{timestamp:s.timestamp,seq:s.seq})})}}class dd{constructor(t,n){N(this,"timeline");this.daemon=t,this.agentId=n,this.timeline=new ud(t,n)}send(t,n={}){return this.daemon.request("send_agent_prompt",{agentId:this.agentId,prompt:t,clientMessageId:n.clientMessageId,images:n.images})}run(t,n){return this.send(t,n)}interrupt(){return this.daemon.request("interrupt_agent",{agentId:this.agentId})}steer(t,n={}){return this.daemon.request("steer_agent_request",{agentId:this.agentId,message:t,clientMessageId:n.clientMessageId,images:n.images})}followUp(t,n={}){return this.daemon.request("follow_up_agent_request",{agentId:this.agentId,message:t,clientMessageId:n.clientMessageId,images:n.images})}update(t){return this.daemon.request("update_agent",{agentId:this.agentId,...t})}resume(){return this.daemon.request("resume_agent",{agentId:this.agentId})}archive(){return this.daemon.request("archive_agent",{agentId:this.agentId})}delete(){return this.daemon.request("delete_agent",{agentId:this.agentId})}onUpdate(t){return this.daemon.onSessionMessage(n=>{const s=n;s.type==="agent_update"&&s.agentId===this.agentId&&t(s)})}sessionStats(){return this.daemon.request("agent_session_stats_request",{agentId:this.agentId})}compact(t){return this.daemon.request("agent_compact_request",{agentId:this.agentId,customInstructions:t},Ju)}newSession(){return this.daemon.request("agent_new_session_request",{agentId:this.agentId})}switchSession(t){return this.daemon.request("agent_switch_session_request",{agentId:this.agentId,sessionPath:t})}fork(t){return this.daemon.request("agent_fork_request",{agentId:this.agentId,entryId:t})}forkMessages(){return this.daemon.request("agent_fork_messages_request",{agentId:this.agentId})}clone(){return this.daemon.request("agent_clone_request",{agentId:this.agentId})}setSessionName(t){return this.daemon.request("agent_set_session_name_request",{agentId:this.agentId,name:t})}exportHtml(t){return this.daemon.request("agent_export_html_request",{agentId:this.agentId,outputPath:t})}setModel(t,n){return this.daemon.request("agent_set_model_request",{agentId:this.agentId,provider:t,modelId:n})}cycleModel(){return this.daemon.request("agent_cycle_model_request",{agentId:this.agentId})}lastAssistantText(){return this.daemon.request("agent_last_assistant_text_request",{agentId:this.agentId})}listCommands(){return this.daemon.request("agent_list_commands_request",{agentId:this.agentId})}setThinking(t){return this.daemon.request("agent_set_thinking_request",{agentId:this.agentId,level:t})}listThinkingLevels(){return this.daemon.request("agent_thinking_levels_request",{agentId:this.agentId})}}class fd{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 pd{constructor(t){this.daemon=t}listProviders(){return this.daemon.request("list_providers",{})}listModels(t,n){return this.daemon.request("list_provider_models",{provider:t,...n!=null&&n.agentId?{agentId:n.agentId}:{}})}listModes(t){return this.daemon.request("list_provider_modes",{provider:t})}resolveDefaultModel(t,n){return this.daemon.request("resolve_default_model",{provider:t,...n?{cwd:n}:{}})}refreshSnapshot(){return this.daemon.request("providers.snapshot.refresh.request",{})}}const ts={pending:{},surfaces:{},resolved:{}},hd=50;function ir(e,t){return`${e}\0${t}`}function $n(e){return typeof e=="number"?e:Date.parse(e)}function gd(e,t){switch(t.type){case"ui_request":return md(e,t.event,t.meta);case"ui_resolved":return{state:wd(e,t.event),effects:[]};case"snapshot":return{state:bd(t.pending,t.surfaces,e.resolved),effects:[]};case"disconnected":return{state:Sd(e),effects:[]};case"agent_removed":return{state:kd(e,t.agentId),effects:[]};case"respond_sent":return{state:xd(e,t.requestId,t.response),effects:[]};case"respond_failed":return{state:Id(e,t.requestId),effects:[]}}}function md(e,t,n){if(t.expectsResponse){const s={requestId:t.requestId,agentId:t.agentId,method:t.method,payload:t.payload,timeoutMs:t.timeoutMs,createdAt:t.createdAt,receivedAt:n.receivedAt,answerable:!0};return{state:{...e,pending:{...e.pending,[t.requestId]:s}},effects:[]}}if(t.surfaceKey!==void 0){const s=ir(t.agentId,t.surfaceKey);if(t.removed){if(!(s in e.surfaces))return{state:e,effects:[]};const r={...e.surfaces};return delete r[s],{state:{...e,surfaces:r},effects:[]}}const o={agentId:t.agentId,surfaceKey:t.surfaceKey,method:t.method,payload:t.payload,updatedAt:t.createdAt};return{state:{...e,surfaces:{...e.surfaces,[s]:o}},effects:[]}}return{state:e,effects:_d(t)}}function _d(e){switch(e.method){case"set_editor_text":{const t=typeof e.payload.text=="string"?e.payload.text:"";return[{type:"replace_composer_text",agentId:e.agentId,text:t}]}case"notify":{const t=typeof e.payload.message=="string"?e.payload.message:"",n=typeof e.payload.level=="string"?e.payload.level:"info";return[{type:"notify",agentId:e.agentId,message:t,level:n}]}default:return[]}}function yd(e,t){if(!(e!=="select"&&e!=="confirm"))return{value:t.value,confirmed:t.confirmed}}function wd(e,t){const n=e.pending[t.requestId];if(!n)return e;const s={...e.pending};delete s[t.requestId];const o={requestId:n.requestId,agentId:n.agentId,method:n.method,payload:n.payload,createdAt:n.createdAt,reason:t.reason};return n.submittedAnswer!==void 0&&(o.answer=n.submittedAnswer),{...e,pending:s,resolved:vd(e.resolved,o)}}function vd(e,t){const n={...e,[t.requestId]:t},s=Object.values(n).filter(r=>r.agentId===t.agentId).toSorted((r,i)=>ns(r.createdAt,r.requestId,i.createdAt,i.requestId)),o=s.length-hd;if(o<=0)return n;for(const r of s.slice(0,o))delete n[r.requestId];return n}function bd(e,t,n){const s={};for(const r of e)s[r.requestId]={requestId:r.requestId,agentId:r.agentId,method:r.method,payload:r.payload,timeoutMs:r.timeoutMs,createdAt:r.createdAt,answerable:!0};const o={};for(const r of t)o[ir(r.agentId,r.surfaceKey)]={agentId:r.agentId,surfaceKey:r.surfaceKey,method:r.method,payload:r.payload,updatedAt:r.updatedAt};return{pending:s,surfaces:o,resolved:n}}function Sd(e){const t={};for(const[n,s]of Object.entries(e.pending))t[n]={...s,answerable:!1};return{...e,pending:t}}function kd(e,t){const n={};for(const[r,i]of Object.entries(e.pending))i.agentId!==t&&(n[r]=i);const s={};for(const[r,i]of Object.entries(e.surfaces))i.agentId!==t&&(s[r]=i);const o={};for(const[r,i]of Object.entries(e.resolved))i.agentId!==t&&(o[r]=i);return{pending:n,surfaces:s,resolved:o}}function xd(e,t,n){const s=e.pending[t];if(!s)return e;const o=yd(s.method,n),r={...s,submitting:!0};return o!==void 0&&(r.submittedAnswer=o),{...e,pending:{...e.pending,[t]:r}}}function Id(e,t){const n=e.pending[t];if(!n)return e;const s={requestId:n.requestId,agentId:n.agentId,method:n.method,payload:n.payload,timeoutMs:n.timeoutMs,createdAt:n.createdAt,receivedAt:n.receivedAt,answerable:n.answerable};return{...e,pending:{...e.pending,[t]:s}}}function ns(e,t,n,s){const o=$n(e)-$n(n);return o!==0?o:t.localeCompare(s)}function Ed(e,t){return Object.values(e.pending).filter(n=>n.agentId===t).toSorted((n,s)=>ns(n.createdAt,n.requestId,s.createdAt,s.requestId))}function Td(e){const t={};for(const n of Object.values(e.pending))t[n.agentId]=(t[n.agentId]??0)+1;return t}function Cd(e,t){return Object.values(e.resolved).filter(n=>n.agentId===t).toSorted((n,s)=>ns(n.createdAt,n.requestId,s.createdAt,s.requestId))}function NS(e,t){if(e.timeoutMs===void 0)return null;const n=e.receivedAt??$n(e.createdAt);return Math.max(0,e.timeoutMs-(t-n))}const Ds={byAgent:{}};function Ad(e,t){const n=e.byAgent[t.agentId];return n&&t.seq<=n.seq?e:{byAgent:{...e.byAgent,[t.agentId]:t}}}function Rd(e){const t={};for(const[n,s]of Object.entries(e.byAgent))t[n]={...s,seq:Number.NEGATIVE_INFINITY};return{byAgent:t}}function jd(e,t){return e.byAgent[t]}function Os(e){return e.expectsResponse?"dialog":e.surfaceKey!==void 0?"surface":"transient"}function Pd(e,t={}){let n=ts;const s=new Set,o=new Set;let r=!1,i=!1,a=[],u=0;function d(m){if(r)return;const S=gd(n,m);n=S.state,m.type==="ui_request"&&Os(m.event)==="transient"&&S.effects.length===0&&h(m.event.method);for(const C of s)C(n,S.effects)}function h(m){o.has(m)||(o.add(m),t.onUnknownMethod?t.onUnknownMethod(m):console.warn(`agent-ui-controller: unknown extension-UI method "${m}"`))}async function p(){if(r||!e.extensionUiAvailable())return;const m=++u;i||(i=!0,a=[]);let S;try{S=await e.listAgentUi()}catch(E){if(r||m!==u)return;i=!1,a=[];const T=E instanceof Error?E.message:String(E);console.error(`agent-ui-controller: failed to sync extension UI state: ${T}`);return}if(r||m!==u)return;i=!1;const C=a;a=[],d({type:"snapshot",pending:S.pending,surfaces:S.surfaces});for(const E of C)E.type==="ui_request"&&Os(E.event)==="transient"&&d(E)}const _=e.onAgentUiRequest((m,S)=>{const C={type:"ui_request",event:m,meta:S};i?a.push(C):d(C)}),g=e.onAgentUiResolved(m=>{const S={type:"ui_resolved",event:m};i?a.push(S):d(S)}),b=e.connection.onSessionMessage(m=>{(ad(m)||cd(m))&&d({type:"agent_removed",agentId:m.agentId})}),y=e.connection.onStateChange(m=>{m==="closed"||m==="closing"?d({type:"disconnected"}):m==="open"&&p()});p();async function x(m,S){d({type:"respond_sent",requestId:m,response:S});const C=await e.respondToUi(m,S);return C.ok||d({type:"respond_failed",requestId:m}),C}return{getState:()=>n,subscribe(m){return s.add(m),()=>s.delete(m)},respond:x,resync:p,dispose(){r||(r=!0,_(),g(),b(),y(),s.clear(),a=[])}}}const sn=32*1024,Md=1024*1024,Nd=10,qd="This daemon does not support file downloads by path and range (feature fileDownloadRanges): update the daemon.";function Dd(){let e;const t=new Promise((s,o)=>{e=o});t.catch(()=>{});let n;return{failure:t,fail(s){n||(n=s,e(s))},check(){if(n)throw n}}}function Ht(e){return new DOMException(`The ${e} was aborted`,"AbortError")}function kn(e){return e instanceof Error?e:new Error(String(e))}function Od(e){const{fileName:t,mimeType:n,totalBytes:s,mtimeMs:o,offset:r,length:i}=e;return s===void 0||o===void 0||r===void 0||i===void 0?null:{...t===void 0?{}:{fileName:t},...n===void 0?{}:{mimeType:n},totalBytes:s,mtimeMs:o,offset:r,length:i}}function Ld(e){return e instanceof Error&&e.name==="AbortError"}function $d(e){return new Promise(t=>setTimeout(t,e))}async function*ar(e){for(let t=0;t<e.length;t+=sn)yield e.subarray(t,t+sn)}async function*Bd(e){for(let t=0;t<e.size;t+=sn)yield new Uint8Array(await e.slice(t,t+sn).arrayBuffer())}async function*Fd(e){for await(const t of e)yield*ar(t)}function zd(e){return e instanceof Uint8Array?{total:e.length,chunks:ar(e)}:typeof Blob<"u"&&e instanceof Blob?{total:e.size,chunks:Bd(e)}:{total:void 0,chunks:Fd(e)}}function Ud(e){const t=e.reduce((o,r)=>o+r.length,0),n=new Uint8Array(t);let s=0;for(const o of e)n.set(o,s),s+=o.length;return n}class Wd{constructor(t,n={}){N(this,"pending",new Map);N(this,"streamCursor",1);N(this,"detach",null);N(this,"detachState",null);N(this,"uploads",new Set);N(this,"highWaterBytes");N(this,"sleep");this.daemon=t,this.highWaterBytes=n.highWaterBytes??Md,this.sleep=n.sleep??$d}get pendingUploads(){return this.uploads.size}get pendingDownloads(){return this.pending.size}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,this.failDownloads(new Error("file transfer router stopped"));for(const n of this.uploads)n.fail(new Error("file transfer router stopped"))}async downloadTo(t,n,s={}){const{offset:o,length:r,ifUnchanged:i,signal:a,onProgress:u}=s;if(!this.daemon.hasFeature("fileDownloadRanges"))throw new Error(qd);if(a!=null&&a.aborted)throw Ht("download");if(this.daemon.state!=="open")throw new Error("connection is not open");const d=bu(this.pending,this.streamCursor);if(d===null)throw new Error("no free download stream");return this.streamCursor=(d+1)%et,await new Promise((h,p)=>{const _={sink:n,onProgress:u,info:void 0,received:0,progressed:!1,settled:!1,detachAbort:null,detachLate:null,resolve:h,reject:p};if(this.pending.set(d,_),this.watchConnection(),a){const b=()=>this.abortDownload(d,_,Ht("download"));a.addEventListener("abort",b,{once:!0}),_.detachAbort=()=>a.removeEventListener("abort",b)}const g=nn();this.daemon.request("file_download_request",{requestId:g,path:t,stream:d,offset:o,length:r,ifUnchanged:i}).then(b=>{b.ok||(this.finish(_,{error:new Error(b.error??"download request failed")}),this.release(d,_))},b=>{if(b instanceof Ln){this.abortDownload(d,_,b),this.watchLateRefusal(d,_,g);return}this.finish(_,{error:kn(b)}),this.release(d,_)})})}async download(t,n={}){const s=[];return{...await this.downloadTo(t,r=>{s.push(r)},n),bytes:Ud(s)}}finish(t,n){var s;t.settled||(t.settled=!0,(s=t.detachAbort)==null||s.call(t),t.detachAbort=null,"error"in n?t.reject(n.error):t.resolve(n.result))}release(t,n){var s;this.pending.get(t)===n&&(this.pending.delete(t),(s=n.detachLate)==null||s.call(n),n.detachLate=null,this.pending.size===0&&this.unwatchConnection())}watchLateRefusal(t,n,s){this.pending.get(t)===n&&(n.detachLate=this.daemon.onSessionMessage(o=>{const r=o;r.type!=="file_download_response"||r.requestId!==s||r.ok===!1&&this.release(t,n)}))}abortDownload(t,n,s){if(!n.settled){if(this.finish(n,{error:s}),this.daemon.state!=="open"){this.release(t,n);return}this.daemon.request("file_download_cancel_request",{stream:t}).then(o=>{o.ok||this.release(t,n)},()=>this.release(t,n))}}failDownloads(t){var s;const n=[...this.pending.values()];this.pending.clear(),this.unwatchConnection();for(const o of n)(s=o.detachLate)==null||s.call(o),o.detachLate=null,this.finish(o,{error:t})}watchConnection(){this.detachState||(this.detachState=this.daemon.onStateChange(t=>{t!=="open"&&this.failDownloads(new Error(`connection ${t} during download`))}))}unwatchConnection(){var t;(t=this.detachState)==null||t.call(this),this.detachState=null}async upload(t,n,s={}){const{onProgress:o,signal:r}=s;if(r!=null&&r.aborted)throw Ht("upload");const i=Dd();this.uploads.add(i);const a=[];let u,d=!1,h=!1;try{if(r){const T=()=>i.fail(Ht("upload"));r.addEventListener("abort",T,{once:!0}),a.push(()=>r.removeEventListener("abort",T))}if(a.push(this.daemon.onStateChange(T=>{T!=="open"&&i.fail(new Error(`connection ${T} during upload`))})),this.daemon.state!=="open")throw new Error("connection is not open");const p=nn(),_=this.daemon.hasFeature("fileTransferAck"),g=this.daemon.request("file_upload_request",{path:t,transferId:p,..._?{ack:!0}:{}});let b;try{b=await Promise.race([g,i.failure])}catch(T){throw g.then($=>{$.ok&&$.stream!==void 0&&this.sendUploadError($.stream,"client_error")},()=>{}),T}if(!b.ok||b.stream===void 0)throw new Error(b.error??"upload request failed");u=b.stream;let y;const x=new Promise(T=>{y=T});_&&a.push(this.daemon.onSessionMessage(T=>{T.type!=="file_upload_complete"||T.transferId!==p||(h=!0,T.ok?y():i.fail(new Error(T.error??"upload failed")))})),this.daemon.sendBinary(Wt({opcode:"Begin",stream:u,meta:{transferId:p}}));const{total:m,chunks:S}=zd(n),C=S[Symbol.asyncIterator]();a.push(()=>{var T;Promise.resolve((T=C.return)==null?void 0:T.call(C)).catch(()=>{})});let E=0;for(;;){await this.waitWhile(()=>(this.daemon.bufferedAmount??0)>this.highWaterBytes,i);const T=C.next();T.catch(()=>{});const $=await Promise.race([T,i.failure]);if($.done)break;i.check(),this.daemon.sendBinary(Wt({opcode:"Chunk",stream:u,data:$.value})),E+=$.value.length,o==null||o(E,m)}E===0&&(o==null||o(0,m)),i.check(),this.daemon.sendBinary(Wt({opcode:"End",stream:u,ok:!0})),d=!0,_?await Promise.race([x,i.failure]):await this.waitWhile(()=>(this.daemon.bufferedAmount??0)>0,i)}catch(p){throw u!==void 0&&!d&&!h&&this.sendUploadError(u,Ld(p)?"client_aborted":"client_error"),p}finally{for(const p of a)p();this.uploads.delete(i)}}async waitWhile(t,n){for(;t();)n.check(),await Promise.race([this.sleep(Nd),n.failure])}sendUploadError(t,n){if(this.daemon.state==="open")try{this.daemon.sendBinary(Wt({opcode:"Error",stream:t,message:n}))}catch{}}dispatch(t){var s,o;const n=this.pending.get(t.stream);if(n)switch(t.opcode){case"Begin":{if(n.settled)return;const r=Od(t.meta);if(!r){this.abortDownload(t.stream,n,new Error("daemon sent a Begin frame without the range"));return}n.info=r;return}case"Chunk":{if(n.settled)return;const{info:r}=n;if(!r){this.abortDownload(t.stream,n,new Error("daemon sent a Chunk before Begin"));return}try{n.sink(t.data),n.received+=t.data.length,n.progressed=!0,(s=n.onProgress)==null||s.call(n,n.received,r.length)}catch(i){this.abortDownload(t.stream,n,kn(i))}return}case"End":{if(this.release(t.stream,n),n.settled)return;const{info:r}=n;if(!t.ok)this.finish(n,{error:new Error("download failed")});else if(!r)this.finish(n,{error:new Error("download ended before Begin")});else if(n.received!==r.length)this.finish(n,{error:new Error(`download ended after ${n.received} of ${r.length} bytes`)});else{try{n.progressed||(o=n.onProgress)==null||o.call(n,0,r.length)}catch(i){this.finish(n,{error:kn(i)});return}this.finish(n,{result:r})}return}case"Error":this.release(t.stream,n),this.finish(n,{error:new Error(t.message)});return}}}class Hd{constructor(t,n={}){N(this,"initialDelayMs");N(this,"maxDelayMs");N(this,"factor");N(this,"jitter");N(this,"maxAttempts");N(this,"setTimer");N(this,"clearTimer");N(this,"random");N(this,"attempt",0);N(this,"timer",null);N(this,"active",!1);N(this,"reconnecting",!1);N(this,"detachState",null);N(this,"reconnectedHandlers",new Set);N(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,o)=>setTimeout(s,o)),this.clearTimer=n.clearTimer??(s=>clearTimeout(s)),this.random=n.random??Math.random}delayForAttempt(t){const n=Math.min(this.maxDelayMs,this.initialDelayMs*this.factor**(t-1)),s=n*this.jitter*(this.random()*2-1);return Math.max(0,Math.round(n+s))}onReconnected(t){return this.reconnectedHandlers.add(t),()=>this.reconnectedHandlers.delete(t)}onReconnectFailed(t){return this.failedHandlers.add(t),()=>this.failedHandlers.delete(t)}start(){this.active||(this.active=!0,this.detachState=this.daemon.onStateChange(t=>{t==="closed"&&this.active&&this.scheduleReconnect(),t==="open"&&(this.attempt=0)}))}stop(){var t;this.active=!1,this.timer&&this.clearTimer(this.timer),this.timer=null,(t=this.detachState)==null||t.call(this),this.detachState=null}reconnectNow(){this.active&&(this.reconnecting||this.daemon.state==="closed"&&(this.timer&&(this.clearTimer(this.timer),this.timer=null),this.attempt=0,this.tryReconnect()))}get attemptCount(){return this.attempt}scheduleReconnect(){if(!this.active||this.timer||this.attempt>=this.maxAttempts)return;this.attempt+=1;const t=this.delayForAttempt(this.attempt);this.timer=this.setTimer(()=>{this.timer=null,!this.reconnecting&&this.tryReconnect()},t)}async tryReconnect(){if(!this.active||this.reconnecting)return;this.reconnecting=!0;const t=this.attempt;try{await this.daemon.connect();for(const n of this.reconnectedHandlers)n({attempt:t,serverId:this.daemon.serverId})}catch(n){for(const s of this.failedHandlers)s(n,t);this.scheduleReconnect()}finally{this.reconnecting=!1}}}const we=(e,t,n,s,o,r,i,a,u,d,h)=>({50:e,100:t,200:n,300:s,400:o,500:r,600:i,700:a,800:u,900:d,950:h}),R={zinc:we("#fafafa","#f4f4f5","#e4e4e7","#d4d4d8","#a1a1aa","#71717a","#52525b","#3f3f46","#27272a","#18181b","#09090b"),gray:we("#f9fafb","#f3f4f6","#e5e7eb","#d1d5db","#9ca3af","#6b7280","#4b5563","#374151","#1f2937","#111827","#030712"),slate:we("#f8fafc","#f1f5f9","#e2e8f0","#cbd5e1","#94a3b8","#64748b","#475569","#334155","#1e293b","#0f172a","#020617"),blue:we("#eff6ff","#dbeafe","#bfdbfe","#93c5fd","#60a5fa","#3b82f6","#2563eb","#1d4ed8","#1e40af","#1e3a8a","#172554"),green:we("#f0fdf4","#dcfce7","#bbf7d0","#86efac","#4ade80","#22c55e","#16a34a","#15803d","#166534","#14532d","#052e16"),red:we("#fef2f2","#fee2e2","#fecaca","#fca5a5","#f87171","#ef4444","#dc2626","#b91c1c","#991b1b","#7f1d1d","#450a0a"),teal:we("#f0fdfa","#ccfbf1","#99f6e4","#5eead4","#2dd4bf","#14b8a6","#0d9488","#0f766e","#115e59","#134e4a","#042f2e"),amber:we("#fffbeb","#fef3c7","#fde68a","#fcd34d","#fbbf24","#f59e0b","#d97706","#b45309","#92400e","#78350f","#451a03"),yellow:we("#fefce8","#fef9c3","#fef08a","#fde047","#facc15","#eab308","#ca8a04","#a16207","#854d0e","#713f12","#422006"),purple:we("#faf5ff","#f3e8ff","#e9d5ff","#d8b4fe","#c084fc","#a855f7","#9333ea","#7e22ce","#6b21a8","#581c87","#3b0764"),orange:we("#fff7ed","#ffedd5","#fed7aa","#fdba74","#fb923c","#f97316","#ea580c","#c2410c","#9a3412","#7c2d12","#431407"),white:"#ffffff",black:"#000000"};function cr(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 Vd(e){return Math.max(0,Math.min(255,Math.round(e)))}function Kd({r:e,g:t,b:n}){const s=o=>Vd(o).toString(16).padStart(2,"0");return`#${s(e)}${s(t)}${s(n)}`}function Gd(e){const{r:t,g:n,b:s}=cr(e),o=r=>{const i=r/255;return i<=.03928?i/12.92:((i+.055)/1.055)**2.4};return .2126*o(t)+.7152*o(n)+.0722*o(s)}function ss(e,t="#18181b",n="#ffffff"){return Gd(e)>.45?t:n}function Yd(e,t){const{r:n,g:s,b:o}=cr(e),r=Math.max(0,Math.min(1,t));return Kd({r:n+(255-n)*r,g:s+(255-s)*r,b:o+(255-o)*r})}function Vt(e){const t=e.trim().replace(/^#/,"");return(t.length===3||t.length===6)&&!/[^0-9a-fA-F]/.test(t)}const Xd={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,10:10,11:11,12:12,14:14,16:16,20:20,24:24,26:26,30:30,32:32,48:48,64:64,80:80,96:96,128:128},on={"4xs":10,"3xs":11,"2xs":12,xs:13,code:13,sm:14,md:15,base:17,lg:19,xl:21,"2xl":23,"3xl":28,"4xl":36},Jd={normal:"400",medium:"500",semibold:"600",bold:"700"},Zd={none:0,sm:2,base:4,md:6,lg:8,xl:12,"2xl":16,full:9999},Qd={0:0,1:1,2:2},ef={0:0,50:.5,100:1},tf={xs:12,sm:14,md:16,lg:20},nf={diff:22},lr='system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',ur='ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace',qS='"MesloLGS NF", "MesloLGS Nerd Font Mono", "Cascadia Mono NF", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace';function sf(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}}}const of={statusSuccess:"#16a34a",statusDanger:"#dc2626",statusWarning:"#f59e0b",statusMerged:"#9333ea",statusInfo:"#3b82f6"},rf={statusSuccess:"#15803d",statusDanger:"#b91c1c",statusWarning:"#d97706",statusMerged:"#7c3aed",statusInfo:"#2563eb"};function af(){return{keyword:R.purple[300],string:R.green[300],number:R.orange[300],boolean:R.orange[300],comment:R.zinc[500],function:R.blue[300],variable:R.zinc[200],type:R.teal[300],class:R.amber[300],constant:R.orange[300],operator:R.zinc[400],punctuation:R.zinc[400],tag:R.red[300],attribute:R.amber[300],property:R.blue[200],regexp:R.teal[300],escape:R.orange[200],heading:R.blue[300],link:R.blue[400],deleted:R.red[400],inserted:R.green[400]}}function cf(){return{keyword:R.purple[700],string:R.green[700],number:R.orange[700],boolean:R.orange[700],comment:R.zinc[500],function:R.blue[700],variable:R.zinc[800],type:R.teal[700],class:R.amber[700],constant:R.orange[700],operator:R.zinc[600],punctuation:R.zinc[600],tag:R.red[700],attribute:R.amber[700],property:R.blue[700],regexp:R.teal[700],escape:R.orange[700],heading:R.blue[700],link:R.blue[600],deleted:R.red[700],inserted:R.green[700]}}function dr(e,t,n){return{background:e,foreground:t,cursor:n,cursorAccent:e,selectionBackground:"rgba(255,255,255,0.18)",black:R.zinc[900],red:R.red[500],green:R.green[500],yellow:R.amber[500],blue:R.blue[500],magenta:R.purple[500],cyan:R.teal[500],white:R.zinc[300],brightBlack:R.zinc[600],brightRed:R.red[400],brightGreen:R.green[400],brightYellow:R.amber[400],brightBlue:R.blue[400],brightMagenta:R.purple[400],brightCyan:R.teal[400],brightWhite:R.zinc[50]}}function ut(e){const t=R.zinc[50],n=ss(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:R.white,success:e.accent,successForeground:R.white,border:e.border,borderAccent:e.borderAccent,...of,diffAddition:R.green[400],diffDeletion:R.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:R,syntax:af(),terminal:dr(e.surface0,t,e.accent)}}function lf(){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:ss(t),destructive:"#b04138",destructiveForeground:"#ffffff",success:t,successForeground:"#ffffff",border:"#e4e4e7",borderAccent:"#ececf1",...rf,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:R,syntax:cf(),terminal:{...dr("#ffffff",e,t),selectionBackground:"rgba(0,0,0,0.15)",white:"#ffffff",brightWhite:"#fafafa"}}}const uf={light:"#ffffff",dark:"#3b62b0",zinc:"#808080",midnight:"#4A6BA8",claude:"#D97757",ghostty:"#8caaee"},fr=["light","dark","zinc","midnight","claude","ghostty"];function df(e){if(e==="light")return lf();switch(e){case"dark":return ut({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 ut({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 ut({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 ut({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 ut({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 pr={};for(const e of fr){const t=e==="light"?"light":"dark";pr[e]={name:e,colorScheme:t,colors:df(e),swatch:uf[e]}}const ff=pr;function hr(e){const t=ff[e];return{name:e,colorScheme:t.colorScheme,colors:t.colors,spacing:Xd,fontSize:{...on},fontFamily:{ui:lr,mono:ur},lineHeight:{...nf},iconSize:tf,fontWeight:Jd,borderRadius:Zd,borderWidth:Qd,opacity:ef,shadow:sf(t.colorScheme),swatch:t.swatch}}const pf=on.base,hf=10,gf=24;function mf(e,t){const n=t.themeName??e.name,s=hr(n),o=t.uiFont&&t.uiFont.trim()!==""?t.uiFont:lr,r=t.monoFont&&t.monoFont.trim()!==""?t.monoFont:ur,i={...s.fontSize};if(t.fontSize!=null){const u=Math.max(hf,Math.min(gf,t.fontSize))/pf;for(const d of Object.keys(on))i[d]=Math.round(on[d]*u)}return{...s,fontSize:i,fontFamily:{ui:o,mono:r}}}function _f(e){return hr(e)}const yf="dark",wf=16;function vf(e){const t=e/wf;return`${Number(t.toFixed(4))}rem`}function bf(e){const t={};Sf(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}`]=vf(s);t["--pi-font-ui"]=e.fontFamily.ui,t["--pi-font-mono"]=e.fontFamily.mono,t["--pi-line-height-diff"]=`${e.lineHeight.diff}px`;for(const[n,s]of Object.entries(e.iconSize))t[`--pi-icon-size-${n}`]=`${s}px`;for(const[n,s]of Object.entries(e.fontWeight))t[`--pi-font-weight-${n}`]=String(s);for(const[n,s]of Object.entries(e.borderRadius))t[`--pi-radius-${n}`]=s===9999?"9999px":`${s}px`;for(const[n,s]of Object.entries(e.borderWidth))t[`--pi-border-width-${n}`]=`${s}px`;for(const[n,s]of Object.entries(e.opacity))t[`--pi-opacity-${n}`]=String(s);for(const[n,s]of Object.entries(e.shadow))if(typeof s=="string")t[`--pi-shadow-${n}`]=s;else if(s&&typeof s=="object"){const o=s;t[`--pi-shadow-${n}`]=`${o.offsetX}px ${o.offsetY}px ${o.radius}px ${o.color}`}return t["--pi-color-scheme"]=e.colorScheme,t}function Sf(e,t){const{palette:n,syntax:s,terminal:o,...r}=e;for(const[i,a]of Object.entries(r))typeof a=="string"&&(t[`--pi-color-${i}`]=a);s&&kf(s,t),o&&(t["--pi-terminal-bg"]=o.background,t["--pi-terminal-fg"]=o.foreground)}function kf(e,t){for(const[n,s]of Object.entries(e))typeof s=="string"&&(t[`--syntax-${xf(n)}`]=s)}function xf(e){return e.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function If(e){if(typeof document>"u")return;const t=document.documentElement.style;for(const[s,o]of Object.entries(e))t.setProperty(s,o);const n=e["--pi-color-scheme"];n&&document.documentElement.style.setProperty("color-scheme",n)}function Ef(e){const t=bf(e);If(t)}const dt=l().min(1,"Asset path must not be empty"),Tf=f({accent:l().refine(Vt,{message:"accent must be a valid #rrggbb hex color"}),accentBright:l().refine(Vt,{message:"accentBright must be a valid #rrggbb hex color"}).optional(),accentForeground:l().refine(Vt,{message:"accentForeground must be a valid #rrggbb hex color"}).optional(),swatch:l().refine(Vt,{message:"swatch must be a valid #rrggbb hex color"}).optional()}),Cf=f({logoLight:dt,logoDark:dt,logoMark:dt.optional(),icon:dt,splash:dt.optional()}),Af=f({docs:l().url().optional(),support:l().url().optional(),issues:l().url().optional(),website:l().url().optional()}).optional(),Rf=f({copyright:l().optional(),companyName:l().optional()}).optional(),jf=f({productName:l().min(1,"productName must not be empty").optional(),shortName:l().optional(),tagline:l().optional(),colors:Tf,assets:Cf.optional(),links:Af,legal:Rf});function Pf(e){const t=e.accent,n=e.accentBright??Yd(t,.35),s=e.accentForeground??ss(t),o=e.swatch??t;return{accent:t,accentBright:n,accentForeground:s,swatch:o}}function Mf(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 Nf="pi-studio-appearance";function qf(e){if(e===void 0)return;const t=jf.safeParse(e);if(t.success)return t.data;const n=t.error.issues.map(s=>`${s.path.join(".")||"(root)"}: ${s.message}`);console.warn(`[ui-library] Ignoring invalid brandConfig, using the unbranded theme. ${n.join("; ")}`)}function Df(e){return e==="system"?typeof window<"u"&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":e}function Of(e,t,n={}){const s=n.storageKey??Nf,o=qf(t);let r=h(),i=null;const a=new Set;function u(g,b){const y=Df(g),x=_f(y);let m=mf(x,{...b,themeName:y});if(o!=null&&o.colors){const S=Pf(o.colors);m=Mf(m,S)}return m}function d(){const g=JSON.stringify({mode:r.mode,settings:r.settings});e.set(s,g)}function h(){const g=e.get(s);let b=yf,y={};if(g)try{const m=JSON.parse(g);m.mode&&(fr.includes(m.mode)||m.mode==="system")&&(b=m.mode),m.settings&&typeof m.settings=="object"&&(y=m.settings)}catch{}const x=u(b,y);return{mode:b,settings:y,resolvedTheme:x}}function p(){r={...r,resolvedTheme:u(r.mode,r.settings)},d();for(const g of a)g()}const _={getState(){return r},setMode(g){r={...r,mode:g},p(),_.apply()},updateSettings(g){r={...r,settings:{...r.settings,...g}},p(),_.apply()},apply(){Ef(r.resolvedTheme)},listen(){if(typeof window>"u")return()=>{};const g=window.matchMedia("(prefers-color-scheme: dark)"),b=()=>{r.mode==="system"&&(p(),_.apply())};return g.addEventListener("change",b),i=()=>g.removeEventListener("change",b),i},subscribe(g){return a.add(g),()=>a.delete(g)}};return _}const gr={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{}}},mr=w.createContext(null),Lf=w.createContext(null);function $f({store:e=gr,storageKey:t,brandConfig:n,children:s}){const o=w.useRef(null);o.current||(o.current=Of(e,n,{storageKey:t}),o.current.apply());const r=o.current,i=w.useSyncExternalStore(r.subscribe,r.getState);return w.useEffect(()=>r.listen(),[r]),w.useEffect(()=>{},[]),c.jsx(Lf.Provider,{value:r,children:c.jsx(mr.Provider,{value:i,children:s})})}function DS(){const e=w.useContext(mr);if(!e)throw new Error("useAppearance must be used within a ThemeBoundary");return e}const Ls={xs:28,sm:32,md:36,lg:40},Bf={xs:12,sm:14,md:16,lg:20},$s={xs:8,sm:10,md:12,lg:16},Ff={xs:"var(--pi-font-size-xs)",sm:"var(--pi-font-size-sm)",md:"var(--pi-font-size-md)",lg:"var(--pi-font-size-base)"};function zf(e){const{disabled:t,loading:n}=e;return t||n?{opacity:.5,isGhostHover:!1}:{opacity:1,isGhostHover:!1}}const xn=["#2563eb","#16a34a","#9333ea","#dc2626","#0d9488","#d97706","#db2777","#0891b2","#ea580c","#4f46e5","#059669","#7c3aed"];function Uf(e){let t=0;for(let s=0;s<e.length;s++){const o=e.charCodeAt(s);t=t*31+o>>>0}return xn[t%xn.length]??xn[0]}function Wf(e){const t=e.match(/[a-zA-Z0-9]/);return t?t[0].toUpperCase():"?"}function Hf(e){switch(e){case"default":return{};case"success":return{token:"statusSuccess"};case"error":return{token:"statusDanger"};case"warning":return{token:"statusWarning"}}}const os=2200;function Vf(e,t,n,s=Date.now()){return{id:e,content:t,variant:n.variant??"default",durationMs:n.durationMs!==void 0?n.durationMs:os,icon:n.icon,paused:!1,shownAt:s}}function Kf(e="Copied"){return{content:e,opts:{variant:"success",durationMs:os}}}function Gf(e){return{content:e,opts:{variant:"error",durationMs:os}}}function Yf(e,t,n=Date.now()){if(e.durationMs===null)return null;e.paused;const s=n-e.shownAt;return Math.max(0,e.durationMs-s)}function Xf(e){const{status:t,requiresAttention:n,attentionReason:s,showInactive:o}=e;if(!t)return null;if(n)switch(s){case"permission":case"question":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 o?"foregroundMuted":null}}const Bs=8,Jf=36,Zf="_btn_dkqaa_4",Qf="_secondary_dkqaa_47",ep="_outline_dkqaa_56",tp="_ghost_dkqaa_65",np="_destructive_dkqaa_75",sp="_iconOnly_dkqaa_85",op="_loadingSpinner_dkqaa_92",rp="_piSpin_dkqaa_1",Kt={btn:Zf,default:"_default_dkqaa_38",secondary:Qf,outline:ep,ghost:tp,destructive:np,iconOnly:sp,loadingSpinner:op,piSpin:rp};function se({variant:e="default",size:t="md",loading:n=!1,disabled:s=!1,leftIcon:o,trailing:r,iconOnly:i=!1,children:a,style:u,className:d,ref:h,...p}){const{opacity:_}=zf({disabled:s??!1,loading:n}),g=s||n,b=Bf[t];return c.jsxs("button",{ref:h,className:H(Kt.btn,Kt[e],i&&Kt.iconOnly,d),disabled:g,"aria-busy":n||void 0,style:{minHeight:Ls[t],paddingLeft:i?void 0:$s[t],paddingRight:i?void 0:$s[t],fontSize:Ff[t],opacity:_,...i?{width:Ls[t]}:{},...u},...p,children:[n?c.jsx(Wi,{className:Kt.loadingSpinner,size:b,"aria-hidden":!0}):o?c.jsx("span",{"aria-hidden":!0,style:{display:"flex",alignItems:"center",flexShrink:0},children:o}):null,a,r&&!n&&c.jsx("span",{"aria-hidden":!0,style:{display:"flex",alignItems:"center",flexShrink:0},children:r})]})}const ip="_iconBtn_1unr3_3",ap="_xs_1unr3_32",cp="_sm_1unr3_36",Fs={iconBtn:ip,xs:ap,sm:cp};function Pe({size:e="xs",hoverBase:t,className:n,style:s,type:o="button",...r}){return c.jsx("button",{type:o,className:H(Fs.iconBtn,Fs[e],n),style:t?{"--icon-btn-hover-base":t,...s}:s,...r})}const lp={xs:12,sm:14,md:16,lg:20};function oe({icon:e,size:t="md",color:n="currentColor",className:s,...o}){const r=typeof t=="number"?t:lp[t];return c.jsx(e,{size:r,color:n,className:s,"aria-hidden":o["aria-hidden"],"aria-label":o["aria-label"]})}const up="_dot_ve4v6_3",dp="_spinner_ve4v6_16",fp="_pulse_ve4v6_35",In={dot:up,spinner:dp,pulse:fp},pp={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 mn({className:e,pulse:t,"aria-label":n,...s}){const o=Xf(s);if(!o)return null;const r=s.status==="running"&&!s.requiresAttention,i=r?"var(--pi-color-accentBright, #a2b4d7)":pp[o]??"currentColor";return c.jsx("span",{className:`${r?In.spinner:In.dot}${t&&!r?` ${In.pulse}`:""}${e?` ${e}`:""}`,style:r?{borderTopColor:i,borderRightColor:i}:{width:`var(--status-dot-size, ${Bs}px)`,height:`var(--status-dot-size, ${Bs}px)`,backgroundColor:i},role:n?"img":"presentation","aria-label":n})}const hp="_avatar_1m9k9_4",gp="_avatarImg_1m9k9_14",mp="_avatarFallback_1m9k9_20",En={avatar:hp,avatarImg:gp,avatarFallback:mp};function _p({projectKey:e,src:t,size:n=32,className:s}){const o=Wf(e),r=Uf(e),i=Math.round(n*.4);return c.jsx("span",{className:`${En.avatar}${s?` ${s}`:""}`,style:{width:n,height:n,backgroundColor:t?void 0:r},"aria-label":e,role:"img",children:t?c.jsx("img",{src:t,alt:e,className:En.avatarImg}):c.jsx("span",{className:En.avatarFallback,style:{fontSize:i},"aria-hidden":!0,children:o})})}const yp="_spinner_1ibj3_3",wp={spinner:yp},vp={xs:12,sm:16,md:20,lg:24},bp={xs:1,sm:2,md:2,lg:3};function _r({size:e="md",color:t="currentColor",className:n,"aria-label":s="Loading"}){const o=typeof e=="number"?e:vp[e],r=typeof e=="number"?2:bp[e];return c.jsx("span",{className:`${wp.spinner}${n?` ${n}`:""}`,role:"status","aria-label":s,style:{width:o,height:o,borderWidth:r,color:t}})}const Sp="_panel_1de7t_3",kp={panel:Sp};function yr({className:e,...t}){return c.jsx("div",{className:H(kp.panel,e),...t})}const xp="_emptyState_kp50e_3",Ip={emptyState:xp};function Le({className:e,...t}){return c.jsx("div",{className:H(Ip.emptyState,e),...t})}const Ep="_input_756jo_3",Tp="_textarea_756jo_32",Bn={input:Ep,textarea:Tp},rn=w.forwardRef(function({className:t,...n},s){return c.jsx("input",{ref:s,className:H(Bn.input,t),...n})}),Cp=w.forwardRef(function({className:t,...n},s){return c.jsx("textarea",{ref:s,className:H(Bn.input,Bn.textarea,t),...n})}),Ap="_overlay_1k4ng_1",Rp="_contentWrapper_1k4ng_7",jp="_dialog_1k4ng_16",Pp="_header_1k4ng_28",Mp="_title_1k4ng_36",Np="_body_1k4ng_43",qp="_footer_1k4ng_49",Dp="_bare_1k4ng_58",Op="_bareBody_1k4ng_64",Lp="_bareCloseBtn_1k4ng_68",$p="_visuallyHidden_1k4ng_73",ve={overlay:Ap,contentWrapper:Rp,dialog:jp,header:Pp,title:Mp,body:Np,footer:qp,bare:Dp,bareBody:Op,bareCloseBtn:Lp,visuallyHidden:$p},wr=Dn;function Fn({open:e,onOpenChange:t,title:n,children:s,footer:o,width:r,className:i,bare:a=!1,onInteractOutside:u,onEscapeKeyDown:d,onCloseAutoFocus:h,onOpenAutoFocus:p}){return c.jsx(pa,{open:e,onOpenChange:t,children:c.jsxs(ha,{children:[c.jsx(ga,{className:ve.overlay}),c.jsx("div",{className:ve.contentWrapper,children:c.jsxs(ma,{className:H(ve.dialog,a&&ve.bare,i),style:r!==void 0?{width:r}:void 0,onInteractOutside:u,onEscapeKeyDown:d,onCloseAutoFocus:h,onOpenAutoFocus:p,children:[a?c.jsx(ks,{className:ve.visuallyHidden,children:n}):c.jsxs("div",{className:ve.header,children:[c.jsx(ks,{className:ve.title,children:n}),c.jsx(Dn,{asChild:!0,children:c.jsx(Pe,{size:"sm","aria-label":"Close",children:c.jsx(It,{size:16})})})]}),c.jsx("div",{className:H(ve.body,a&&ve.bareBody),children:s}),a&&c.jsx(Dn,{asChild:!0,children:c.jsx(Pe,{size:"sm","aria-label":"Close",className:ve.bareCloseBtn,style:{background:"var(--pi-color-surface1)",border:"1px solid var(--pi-color-border)",borderRadius:"50%"},children:c.jsx(It,{size:16})})}),o&&c.jsx("div",{className:ve.footer,children:o})]})})]})})}const Bp="_handle_1j18v_1",Fp={handle:Bp};function zs({side:e,onResize:t,className:n}){const s=w.useRef(0),o=w.useRef(null),r=w.useCallback(u=>{const d=u.clientX-s.current;s.current=u.clientX,t(e==="left"?d:-d)},[t,e]),i=w.useCallback(u=>{window.removeEventListener("pointermove",r),window.removeEventListener("pointerup",i),window.removeEventListener("pointercancel",i),document.body.style.cursor="",document.body.style.userSelect="";const d=o.current;d!=null&&d.hasPointerCapture(u.pointerId)&&d.releasePointerCapture(u.pointerId)},[r]);function a(u){u.preventDefault(),s.current=u.clientX,u.currentTarget.setPointerCapture(u.pointerId),document.body.style.cursor="col-resize",document.body.style.userSelect="none",window.addEventListener("pointermove",r),window.addEventListener("pointerup",i),window.addEventListener("pointercancel",i)}return c.jsx("div",{ref:o,className:H(Fp.handle,n),onPointerDown:a,role:"separator","aria-orientation":"vertical"})}const zp="_trigger_u4hed_3",Up="_content_u4hed_15",Wp="_item_u4hed_25",Hp="_danger_u4hed_44",Vp="_groupLabel_u4hed_53",Kp="_sep_u4hed_66",ot={trigger:zp,content:Up,item:Wp,danger:Hp,groupLabel:Vp,sep:Kp},_n=w.forwardRef(function({x:t,y:n},s){return c.jsx("button",{ref:s,type:"button",className:ot.trigger,style:{left:t,top:n},"aria-hidden":!0,tabIndex:-1})});function qt({className:e,minWidth:t,style:n,sideOffset:s=2,...o}){const r=t===void 0?n:{minWidth:t,...n};return c.jsx(_a,{children:c.jsx(ya,{className:H(ot.content,e),align:"start",sideOffset:s,style:r,...o})})}function OS({label:e,className:t,children:n,...s}){const o=w.useId();return c.jsxs(ba,{className:t,"aria-labelledby":e===void 0?void 0:o,...s,children:[e!==void 0&&c.jsx(Sa,{id:o,className:ot.groupLabel,children:e}),n]})}function G({className:e,danger:t,...n}){return c.jsx(wa,{className:H(ot.item,t&&ot.danger,e),...n})}function We(e){return c.jsx(va,{className:ot.sep,...e})}const Gp="_content_1u220_3",Yp={content:Gp},Us={Root:ka,Trigger:xa};function Xp({className:e,width:t,style:n,side:s="top",align:o="start",sideOffset:r=6,collisionPadding:i=8,...a}){return c.jsx(Ia,{children:c.jsx(Ea,{className:H(Yp.content,e),side:s,align:o,sideOffset:r,collisionPadding:i,style:t===void 0?n:{width:t,...n},...a})})}const an=ae()(()=>({message:"",politeness:"polite"})),Jp=4e3;let vt=null;function vr(){vt!==null&&(clearTimeout(vt),vt=null)}function yn(e,t="polite"){vr(),an.setState({message:e,politeness:t})}function rs(){vr(),vt=setTimeout(()=>{vt=null,an.setState({message:""})},Jp)}const Zp="_visuallyHidden_rig62_2",Ws={visuallyHidden:Zp};function Qp(){const e=an(n=>n.message),t=an(n=>n.politeness);return c.jsxs(c.Fragment,{children:[c.jsx("span",{className:Ws.visuallyHidden,role:"status","aria-live":"polite",children:t==="polite"?e:""}),c.jsx("span",{className:Ws.visuallyHidden,role:"alert",children:t==="assertive"?e:""})]})}const cn=3;let eh=0;const bt=new Map;function Hs(e){const t=bt.get(e);t!==void 0&&(clearTimeout(t),bt.delete(e))}const Te=ae((e,t)=>{function n(s){const o=t().toasts.findIndex(a=>a.id===s);if(o===-1||o>=cn||bt.has(s))return;const r=t().toasts[o];if(r.durationMs===null||r.paused)return;const i={...r,shownAt:Date.now()};e(a=>({toasts:a.toasts.map(u=>u.id===s?i:u)})),bt.set(s,setTimeout(()=>t().dismiss(s),i.durationMs))}return{toasts:[],show(s,o={}){const r=`toast-${++eh}`;return e(i=>({toasts:[...i.toasts,Vf(r,s,o)]})),n(r),r},copied(s){const{content:o,opts:r}=Kf(s);return t().show(o,r)},error(s){const{content:o,opts:r}=Gf(s);return t().show(o,r)},dismiss(s){Hs(s),e(o=>({toasts:o.toasts.filter(r=>r.id!==s)}));for(const o of t().toasts.slice(0,cn))n(o.id)},dismissTop(){const s=t().toasts[0];s&&t().dismiss(s.id)},pause(s){const o=t().toasts.find(i=>i.id===s);if(!o||o.durationMs===null||o.paused)return;const r=Yf(o,null,Date.now())??o.durationMs;Hs(s),e(i=>({toasts:i.toasts.map(a=>a.id===s?{...a,paused:!0,pausedRemaining:r}:a)}))},resume(s){const o=t().toasts.find(u=>u.id===s);if(!o||!o.paused)return;const r=o.pausedRemaining??o.durationMs??0,i=Date.now()-((o.durationMs??0)-r),a={...o,paused:!1,pausedRemaining:void 0,shownAt:i};e(u=>({toasts:u.toasts.map(d=>d.id===s?a:d)})),bt.set(s,setTimeout(()=>t().dismiss(s),r))}}}),th="_viewport_rssrd_1",nh="_toast_rssrd_13",sh="_exiting_rssrd_43",oh="_content_rssrd_48",rh="_close_rssrd_53",Ye={viewport:th,toast:nh,exiting:sh,content:oh,close:rh},ih=180;function ah(){return typeof window<"u"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}function ch(){const e=Te(p=>p.toasts),t=e.slice(0,cn),n=Te(p=>p.dismiss),s=Te(p=>p.pause),o=Te(p=>p.resume),r=w.useRef(new Map);for(const p of t)r.current.set(p.id,p);const i=w.useRef([]),[a,u]=w.useState([]),d=w.useRef(new Set);w.useEffect(()=>{const p=d.current;return()=>{for(const _ of p)window.clearTimeout(_)}},[]),w.useEffect(()=>{const p=e.slice(0,cn).map(y=>y.id),_=new Set(p),g=i.current.filter(y=>!_.has(y));if(i.current=p,g.length===0)return;if(ah()){for(const y of g)r.current.delete(y);return}u(y=>[...y,...g]);const b=window.setTimeout(()=>{d.current.delete(b),u(y=>y.filter(x=>!g.includes(x)));for(const y of g)r.current.delete(y)},ih);d.current.add(b)},[e]);const h=[...t,...a.filter(p=>!t.some(_=>_.id===p)).map(p=>r.current.get(p)).filter(p=>p!==void 0)];return h.length===0?null:Oi.createPortal(c.jsx("div",{className:Ye.viewport,role:"status","aria-live":"polite",children:h.map(p=>{const{token:_}=Hf(p.variant),g=a.includes(p.id)&&!t.some(b=>b.id===p.id);return c.jsxs("div",{className:g?`${Ye.toast} ${Ye.exiting}`:Ye.toast,style:_?{"--toast-rail":`var(--pi-color-${_})`}:void 0,onMouseEnter:()=>s(p.id),onMouseLeave:()=>o(p.id),children:[c.jsx("span",{className:Ye.content,children:p.content}),c.jsx("button",{type:"button",className:Ye.close,"aria-label":"Dismiss",onClick:()=>n(p.id),children:c.jsx(oe,{icon:It,size:"xs","aria-hidden":!0})})]},p.id)})}),document.body)}const br=w.createContext(null);function lh(e){const t=w.useContext(br);if(!t)throw new Error(`${e} must be rendered inside <WorkbenchProvider> (or <Workbench>, which includes it).`);return t}async function uh(e){var o;if((o=navigator.clipboard)!=null&&o.writeText)try{await navigator.clipboard.writeText(e);return}catch{}const t=document.activeElement,n=(t instanceof HTMLElement?t.closest('[role="dialog"], [role="menu"]'):null)??document.body,s=document.createElement("textarea");s.value=e,s.setAttribute("aria-hidden","true"),s.style.position="fixed",s.style.opacity="0",n.appendChild(s),s.focus(),s.select();try{const r=document.activeElement===s&&s.selectionStart===0&&s.selectionEnd===s.value.length;if(!document.execCommand("copy")||!r)throw new Error('execCommand("copy") did not copy the requested text')}finally{s.remove(),t instanceof HTMLElement&&t.focus()}}const dh=`
3
+ const pending = new Set();
4
+ self.onmessage = (e) => {
5
+ const msg = e.data;
6
+ if (msg.cancel) {
7
+ pending.delete(msg.id);
8
+ return;
9
+ }
10
+ pending.add(msg.id);
11
+ setTimeout(() => {
12
+ if (!pending.has(msg.id)) return; // cancelled before it fired
13
+ pending.delete(msg.id);
14
+ self.postMessage({ id: msg.id });
15
+ }, msg.ms);
16
+ };
17
+ `;function fh(){return{setTimer:(e,t)=>setTimeout(e,t),clearTimer:e=>clearTimeout(e)}}function ph(){const e=new Blob([dh],{type:"application/javascript"}),t=URL.createObjectURL(e),n=new Worker(t);URL.revokeObjectURL(t);const s=new Map;let o=1;return n.addEventListener("message",r=>{const i=s.get(r.data.id);s.delete(r.data.id),i==null||i()}),{setTimer:(r,i)=>{const a=o++;return s.set(a,r),n.postMessage({id:a,ms:i}),a},clearTimer:r=>{const i=r;s.delete(i)&&n.postMessage({id:i,cancel:!0})}}}let ft=null;function Vs(){if(ft)return ft;try{ft=ph()}catch{ft=fh()}return ft}function hh(){return{setTimer:(e,t)=>Vs().setTimer(e,t),clearTimer:e=>Vs().clearTimer(e)}}function gh(e,t){if(e.mode==="relay")return Ku({daemonPublicKey:e.daemonPublicKey});if(t.password){const n=`pi-studio.bearer.${t.password}`;return sr(s=>new WebSocket(s,[n]))}}function mh(e){const t=()=>{document.visibilityState==="visible"&&e()};return document.addEventListener("visibilitychange",t),window.addEventListener("online",e),()=>{document.removeEventListener("visibilitychange",t),window.removeEventListener("online",e)}}function _h(){return{createTransport:gh,timers:hh(),onResume:mh}}async function Ks(e,t){const n=[],s=await e.downloadTo(t,r=>void n.push(r));return{blob:new Blob(n,{type:s.mimeType||"application/octet-stream"}),fileName:s.fileName,mimeType:s.mimeType}}function yh(e){return{async upload(t,n,s){if(!(n instanceof Blob))throw new Error("the browser host can only upload File/Blob sources");const o=t?`${t}/${n.name}`:n.name;await e().upload(o,n,{onProgress:s==null?void 0:s.onProgress})},async saveToDisk(t){const n=await Ks(e(),t),s=URL.createObjectURL(n.blob),o=document.createElement("a");o.href=s,o.download=n.fileName||t.split("/").pop()||"download",o.rel="noopener",document.body.appendChild(o),o.click(),o.remove(),setTimeout(()=>URL.revokeObjectURL(s),0)},async openForView(t){const n=await Ks(e(),t),s=URL.createObjectURL(n.blob);let o=!1;return{url:s,...n.mimeType?{mimeType:n.mimeType}:{},...n.fileName?{fileName:n.fileName}:{},release(){o||(o=!0,URL.revokeObjectURL(s))}}}}}const wh=256;function Gs(e){const t=e.startsWith("#")?e.slice(1):e,n=new URLSearchParams(t).get("agent");if(!(!n||n.length>wh))return n}function vh(e){const t=e.indexOf("#");if(t===-1)return e;const n=e.slice(0,t),s=e.slice(t+1).split("&").filter(o=>o!==""&&new URLSearchParams(o).keys().next().value!=="agent");return s.length===0?n:`${n}#${s.join("&")}`}function bh(e){const t=e.consume();if(!t)return;const n=e.findByAgentId(t);n?e.select(n):e.notifyNotFound(t),e.consumeSource()}function Sh(e){if(e.hash.includes("offer="))return{url:e.href,connect:!0};const t=new URLSearchParams(e.search),n=t.get("pair"),s=t.get("host"),o=t.get("password"),r=t.get("cwd"),i=n??s,a=n!==null||t.get("connect")==="1";return!i&&!o&&!r&&!a?null:{...i?{url:i}:{},...o?{password:o}:{},...r?{cwd:r}:{},connect:a}}function kh(){return{initialConnect:()=>Sh(window.location),agentDeepLink:{current:()=>Gs(window.location.hash)??null,subscribe(e){const t=()=>{const n=Gs(window.location.hash);n&&e(n)};return window.addEventListener("hashchange",t),()=>window.removeEventListener("hashchange",t)},consume(){window.history.replaceState(null,"",vh(window.location.href))}}}}const Ys=new WeakMap;function xh(e){let t=Ys.get(e);return t||(t=new Wd(e),t.start(),Ys.set(e,t)),t}function Xs(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(),o=t.slice(n[0].length).replace(/\/+$/,"");switch(s){case"http":return`ws://${o}`;case"https":return`wss://${o}`;case"ws":case"wss":return`${s}://${o}`;default:return t}}function is(e){const t=rr(e);return t!=null&&t.relay?{mode:"relay",url:Uu(t.relay),daemonPublicKey:t.publicKey}:t!=null&&t.host?{mode:"direct",url:Xs(t.host)}:{mode:"direct",url:Xs(e)}}const Ih=32,pe=new Map;function Eh(){var e;for(;pe.size>Ih;){let t=null;for(const[n,s]of pe)if(s.refs===0&&s.entry){(e=s.release)==null||e.call(s),t=n;break}if(t===null)return;pe.delete(t)}}function LS(e,t){const n=pe.get(e);if(n)return n.refs+=1,pe.delete(e),pe.set(e,n),n.entry?Promise.resolve(n.entry):n.pending;const s={refs:1,entry:null,release:null,pending:null};return pe.set(e,s),Eh(),s.pending=t(e).then(o=>{const r={objectUrl:o.url,mimeType:o.mimeType};return pe.get(e)===s?(s.entry=r,s.release=()=>o.release(),s.pending=null):o.release(),r}).catch(o=>{throw pe.get(e)===s&&pe.delete(e),o}),s.pending}function $S(e){const t=pe.get(e);t&&(t.refs=Math.max(0,t.refs-1))}function Th(){var e;for(const t of pe.values())(e=t.release)==null||e.call(t);pe.clear()}function Ch(){return"web-"+Math.random().toString(36).slice(2,10)}const D=ae()((e,t)=>({status:"idle",serverInfo:null,error:null,daemon:null,client:null,reconnection:null,async connect(n){t().disconnect();const s=is(n.url),{app:o,connection:r}=V();let i;try{i=r.createTransport(s,{password:n.password})}catch(p){throw e({error:p instanceof Error?p.message:String(p)}),p}const a=new Xu({url:s.url,clientId:n.clientId??Ch(),clientType:"browser",platform:o.platform,capabilities:{[zt.inline_image_markdown]:!0,[zt.file_link_markdown]:!0,[zt.mermaid_diagram_markdown]:!0,[zt.terminal_reflowable_snapshot]:!0},transport:i,rpcTimeoutMs:1800*1e3}),u=new ld(a),{timers:d}=r,h=new Hd(a,{setTimer:(p,_)=>d.setTimer(p,_),clearTimer:p=>d.clearTimer(p)});a.onStateChange(p=>e({status:p})),h.onReconnected(()=>e({error:null})),h.onReconnectFailed(p=>{e({error:p instanceof Error?p.message:String(p)})}),e({daemon:a,client:u,reconnection:h,error:null,status:"connecting"});try{const p=await a.connect();e({serverInfo:p}),h.start()}catch(p){throw e({error:p instanceof Error?p.message:String(p)}),p}},disconnect(){const{daemon:n,reconnection:s}=t();s==null||s.stop(),n==null||n.close(),Th(),e({status:"idle",serverInfo:null,daemon:null,client:null,reconnection:null})}}));function as(){return D(e=>e.client)}function Sr(){var e;return((e=D.getState().serverInfo)==null?void 0:e.homeDir)??null}function Ah(){const{daemon:e}=D.getState();if(!e)throw new Error("not connected");return xh(e)}const Rh={title:"Pi-Studio",version:""},jh={confirm:async e=>window.confirm(e),alert:async e=>window.alert(e),prompt:async(e,t)=>window.prompt(e,t)};function kr(e={}){return{app:e.app??Rh,storage:gr,clipboard:{writeText:uh},dialogs:jh,links:{},launch:kh(),connection:_h(),files:yh(Ah),...e.pdf?{pdf:e.pdf}:{}}}let St=null,Js=null;const zn=new Set;function Zs(e){if(St)return St;St=e;for(const t of zn)t(e);return e}function V(){return St||(Js??(Js=kr()),Js)}function Ph(e){return zn.add(e),()=>zn.delete(e)}const kt=ae((e,t)=>({pendingAgentId:void 0,restored:!1,set(n){e({pendingAgentId:n})},consume(){const n=t().pendingAgentId;return e({pendingAgentId:void 0}),n},markRestored(){e({restored:!0})}})),wn={rows:[],streamingAssistantIndex:null,streamingReasoningIndex:null,toolIndexByCallId:{}};let Qs=0;function Me(){return Qs+=1,`row-${Qs}`}function Mh(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 Nh(e,t){return e??`${t.kind}:${Mh(t)}`}function rt(e,t){if(t===null)return;const n=e[t];n&&(n.kind!=="assistant"&&n.kind!=="reasoning"||n.streaming&&(e[t]={...n,streaming:!1}))}function xr(e){if(e.streamingAssistantIndex===null&&e.streamingReasoningIndex===null)return e;const t=e.rows.slice();return rt(t,e.streamingAssistantIndex),rt(t,e.streamingReasoningIndex),{...e,rows:t,streamingAssistantIndex:null,streamingReasoningIndex:null}}function qh(e){return xr(e)}function Dh(e,t,n,s){var a;const o=e.rows.slice();rt(o,e.streamingReasoningIndex);let r=e.streamingAssistantIndex;if(r===null||((a=o[r])==null?void 0:a.kind)!=="assistant"){if(!t)return{...e,rows:o,streamingAssistantIndex:null,streamingReasoningIndex:null};const u={kind:"assistant",id:Me(),text:"",streaming:!0,timestamp:s};o.push(u),r=o.length-1}const i=o[r];return!i||i.kind!=="assistant"?e:(o[r]={...i,text:i.text+t,streaming:!n},{...e,rows:o,streamingAssistantIndex:n?null:r,streamingReasoningIndex:null})}function Oh(e,t,n,s){var a;const o=e.rows.slice();rt(o,e.streamingAssistantIndex);let r=e.streamingReasoningIndex;if(r===null||((a=o[r])==null?void 0:a.kind)!=="reasoning"){if(!t)return{...e,rows:o,streamingAssistantIndex:null,streamingReasoningIndex:null};const u={kind:"reasoning",id:Me(),text:"",streaming:!0,timestamp:s};o.push(u),r=o.length-1}const i=o[r];return!i||i.kind!=="reasoning"?e:(o[r]={...i,text:i.text+t,streaming:!n},{...e,rows:o,streamingReasoningIndex:n?null:r,streamingAssistantIndex:null})}function Lh(e,t){if(e.kind!==t.kind)return t;const n={...e};for(const[s,o]of Object.entries(t))o!==void 0&&o!==""&&(n[s]=o);return n}function $h(e,t,n){const s=Lh(e,t);if(n==="running")return s;const{output:o,...r}=s;return t.output?{...r,output:t.output}:r}function Bh(e,t,n){var u;const s=Nh(t.callId,t.tool),o=t.status==="completed"||t.status==="error"?t.status:"running",r=e.toolIndexByCallId[s],i=e.rows.slice();if(rt(i,e.streamingAssistantIndex),rt(i,e.streamingReasoningIndex),r!==void 0&&((u=i[r])==null?void 0:u.kind)==="tool"){const d=i[r];if(d.kind!=="tool")return e;const h=t.status??d.statusText;return i[r]={...d,tool:$h(d.tool,t.tool,o),status:o,...h!==void 0?{statusText:h}:{}},{...e,rows:i,streamingAssistantIndex:null,streamingReasoningIndex:null}}const a={kind:"tool",id:Me(),callId:s,tool:t.tool,status:o,...t.status!==void 0?{statusText:t.status}:{},timestamp:n};return i.push(a),{...e,rows:i,toolIndexByCallId:{...e.toolIndexByCallId,[s]:i.length-1},streamingAssistantIndex:null,streamingReasoningIndex:null}}function Fh(e){if(!e.rows.some(n=>n.kind==="compaction"&&n.phase==="started"))return e;const t=e.rows.map(n=>n.kind==="compaction"&&n.phase==="started"?{...n,phase:"canceled"}:n);return{...e,rows:t}}function Ir(e,t){if(!e.rows.some(s=>s.kind==="tool"&&s.status==="running"))return e;const n=e.rows.map(s=>s.kind==="tool"&&s.status==="running"?{...s,status:t,statusText:t}:s);return{...e,rows:n}}function cs(e){return Fh(xr(e))}function zh(e,t,n){const{kind:s,...o}=t,r=Object.fromEntries(Object.entries(o).filter(([,u])=>u!==void 0)),i=e.rows.findIndex(u=>u.kind==="compaction"&&u.compactionId===t.compactionId);if(i===-1){const u={...r,kind:"compaction",id:Me(),timestamp:n};return{...e,rows:[...e.rows,u]}}const a=e.rows.slice();return a[i]={...a[i],...r},{...e,rows:a}}function Uh(e,t,n){const s=Ir(cs(e),"error"),o={kind:"error",id:Me(),text:t||"turn failed",timestamp:n};return{...s,rows:[...s.rows,o]}}function Wh(e,t){const n=Ir(cs(e),"canceled"),s={kind:"system",id:Me(),text:"(canceled)",timestamp:t};return{...n,rows:[...n.rows,s]}}function Hh(e,t,n){const s={kind:"error",id:Me(),text:t||"error",timestamp:n};return{...e,rows:[...e.rows,s]}}function Vh(e,t,n,s,o){if(s!==void 0){const i=e.rows.findIndex(a=>a.kind==="user"&&a.pending&&a.clientMessageId===s);if(i!==-1){const a=e.rows.slice(),u=a[i];if((u==null?void 0:u.kind)==="user")return a[i]={...u,text:t,images:n,pending:!1,...o!==void 0?{timestamp:o}:{}},{...e,rows:a}}}const r={kind:"user",id:Me(),text:t,images:n,clientMessageId:s,timestamp:o};return{...e,rows:[...e.rows,r]}}function Kh(e,t){let n=!1;const s=e.rows.map(o=>o.kind!=="user"||!o.queued||t.includes(o.text)?o:(n=!0,{...o,queued:!1}));return n?{...e,rows:s}:e}function Er(e,t,n){switch(t.kind){case"turn_started":return qh(e);case"user_message":return Vh(e,t.text??"",t.images,t.messageId,n);case"assistant_message":return Dh(e,t.text??"",t.final??!1,n);case"reasoning":return Oh(e,t.text??"",t.final??!1,n);case"tool_call":return Bh(e,t,n);case"turn_completed":return cs(e);case"turn_failed":return Uh(e,t.error,n);case"turn_canceled":return Wh(e,n);case"error":return Hh(e,t.message,n);case"queue_update":return Kh(e,t.steering??[]);case"compaction":return zh(e,t,n);default:return e}}function Tr(e){return e.reduce((t,{event:n,timestamp:s})=>Er(t,n,s),wn)}function Gh(e,t,n,s,o,r){const i={kind:"user",id:Me(),text:n,images:s,clientMessageId:t,pending:!0,queued:o,timestamp:r};return{...e,rows:[...e.rows,i]}}function Yh(e,t){const n=e.rows.findIndex(r=>r.kind==="user"&&r.pending&&r.clientMessageId===t);if(n===-1)return e;const s=e.rows.slice(),o=s[n];return(o==null?void 0:o.kind)!=="user"?e:(s[n]={...o,pending:!1,failed:!0},{...e,rows:s})}let eo=0;function Xh(){return eo+=1,`s-${Date.now().toString(36)}-${eo}`}const j=ae()((e,t)=>({sessions:{},order:[],activeSessionId:null,createSession(n){const s=Xh(),o={id:s,agentId:null,title:"New chat",status:"idle",cwd:n,timeline:wn,userMessageCount:0};return e(r=>({sessions:{...r.sessions,[s]:o},order:[s,...r.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(o=>{const r=o.sessions[n];return r?{sessions:{...o.sessions,[n]:{...r,agentId:s}}}:o})},setStatus(n,s){e(o=>{const r=o.sessions[n];return r?{sessions:{...o.sessions,[n]:{...r,status:s}}}:o})},setStatusByAgentId(n,s){const o=t().findByAgentId(n);o&&t().setStatus(o.id,s)},setModel(n,s,o){e(r=>{const i=r.sessions[n];return i?{sessions:{...r.sessions,[n]:{...i,model:s,modelProvider:o}}}:r})},setModelByAgentId(n,s,o){const r=t().findByAgentId(n);r&&t().setModel(r.id,s,o)},setThinkingLevel(n,s){e(o=>{const r=o.sessions[n];return r?{sessions:{...o.sessions,[n]:{...r,thinkingLevel:s}}}:o})},setThinkingLevelByAgentId(n,s){const o=t().findByAgentId(n);o&&t().setThinkingLevel(o.id,s)},setTitle(n,s){e(o=>{const r=o.sessions[n];return r?{sessions:{...o.sessions,[n]:{...r,title:s}}}:o})},setCwd(n,s){e(o=>{const r=o.sessions[n];return r?{sessions:{...o.sessions,[n]:{...r,cwd:s}}}:o})},applyStreamEvent(n,s,o){e(r=>{const i=r.sessions[n];if(!i)return r;const a=Er(i.timeline,s,o);return{sessions:{...r.sessions,[n]:{...i,timeline:a}}}})},setTitleByAgentId(n,s){const o=t().findByAgentId(n);o&&t().setTitle(o.id,s)},addOptimisticUserMessage(n,s,o,r,i){e(a=>{const u=a.sessions[n];if(!u)return a;const d=Gh(u.timeline,s,o,r,i,new Date().toISOString());return{sessions:{...a.sessions,[n]:{...u,timeline:d,userMessageCount:u.userMessageCount+1}}}})},markUserMessageFailed(n,s){e(o=>{const r=o.sessions[n];if(!r)return o;const i=Yh(r.timeline,s);return{sessions:{...o.sessions,[n]:{...r,timeline:i}}}})},setTimeline(n,s){e(o=>{const r=o.sessions[n];if(!r)return o;const i=s.rows.filter(a=>a.kind==="user").length;return{sessions:{...o.sessions,[n]:{...r,timeline:s,userMessageCount:i}}}})},setTimelineByAgentId(n,s){const o=t().findByAgentId(n);o&&t().setTimeline(o.id,s)},activate(n){e({activeSessionId:n})},remove(n){e(s=>{const{[n]:o,...r}=s.sessions,i=s.order.filter(u=>u!==n),a=s.activeSessionId===n?i[0]??null:s.activeSessionId;return{sessions:r,order:i,activeSessionId:a}})},findByAgentId(n){return Object.values(t().sessions).find(s=>s.agentId===n)}})),Jh=100,Zh=480,Qh=220,eg=280;function Gt(e){return Math.min(Zh,Math.max(Jh,e))}const L=ae()(e=>({host:"ws://127.0.0.1:6767",password:"",cwd:"~",cwdPickerOpen:!1,settingsOpen:!1,sessionMenu:null,workspaceMenu:null,tabMenu:null,fileMenu:null,rightSidebarTab:"files",collapsedWorkspaces:new Set,leftSidebarCollapsed:!1,rightSidebarCollapsed:!1,leftSidebarWidth:Qh,rightSidebarWidth:eg,setHost:t=>e({host:t}),setPassword:t=>e({password:t}),setCwd:t=>e({cwd:t}),openCwdPicker:()=>e({cwdPickerOpen:!0}),closeCwdPicker:()=>e({cwdPickerOpen:!1}),openSettings:()=>e({settingsOpen:!0}),closeSettings:()=>e({settingsOpen:!1}),openSessionMenu:(t,n,s)=>e({sessionMenu:{sessionId:t,x:n,y:s}}),closeSessionMenu:()=>e({sessionMenu:null}),openWorkspaceMenu:(t,n,s)=>e({workspaceMenu:{cwd:t,x:n,y:s}}),closeWorkspaceMenu:()=>e({workspaceMenu:null}),openTabMenu:(t,n,s)=>e({tabMenu:{tabId:t,x:n,y:s}}),closeTabMenu:()=>e({tabMenu:null}),openFileMenu:(t,n,s,o,r)=>e({fileMenu:{path:t,isDirectory:n,x:s,y:o,background: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}}),setCollapsedWorkspaces:t=>e({collapsedWorkspaces:t}),toggleLeftSidebar:()=>e(t=>({leftSidebarCollapsed:!t.leftSidebarCollapsed})),toggleRightSidebar:()=>e(t=>({rightSidebarCollapsed:!t.rightSidebarCollapsed})),setLeftSidebarWidth:t=>e({leftSidebarWidth:Gt(t)}),setRightSidebarWidth:t=>e({rightSidebarWidth:Gt(t)}),resizeLeftSidebar:t=>e(n=>({leftSidebarWidth:Gt(n.leftSidebarWidth+t)})),resizeRightSidebar:t=>e(n=>({rightSidebarWidth:Gt(n.rightSidebarWidth+t)}))})),to=new WeakMap;function tg(e,t="pi"){const n=to.get(e);if(n)return n;const s=e.providers.resolveDefaultModel(t).then(o=>({model:o.model,modelProvider:o.modelProvider,thinkingLevel:o.thinkingLevel})).catch(()=>({}));return to.set(e,s),s}const Zt=new Map;function ng(e,t){const n=j.getState().sessions[t];if(!n)return Promise.reject(new Error(`unknown session: ${t}`));if(n.agentId)return Promise.resolve(n.agentId);const s=Zt.get(t);if(s)return s;const o=(async()=>{if(!n.model){const u=await tg(e),d=j.getState().sessions[t];u.model&&d&&!d.model&&j.getState().setModel(t,u.model,u.modelProvider);const h=j.getState().sessions[t];u.thinkingLevel&&h&&h.thinkingLevel===void 0&&j.getState().setThinkingLevel(t,u.thinkingLevel)}const r=j.getState().sessions[t];if(!r)throw new Error(`unknown session: ${t}`);const i={provider:"pi",cwd:r.cwd||"~"};r.model&&(i.model=r.model),r.modelProvider&&(i.modelProvider=r.modelProvider);const a=await e.createAgent({config:i,labels:{}});return j.getState().bindAgent(t,a.agentId),a.agentId})();return Zt.set(t,o),o.finally(()=>Zt.delete(t)),o}async function sg(e,t){var o;const n=j.getState().sessions[t];if(!n||n.userMessageCount>0||n.timeline.rows.length>0)return!1;await((o=Zt.get(t))==null?void 0:o.catch(()=>{}));const s=j.getState().sessions[t];return s?(s.agentId&&e&&await e.agent(s.agentId).delete().catch(()=>{}),j.getState().remove(t),!0):!1}const og=4;function Cr(e){return e==="left"||e==="right"?"row":"column"}function he(e){return e.kind==="leaf"?[e.id]:e.children.flatMap(he)}function ls(e,t){return e.kind==="leaf"?e.id===t:e.children.some(n=>ls(n,t))}function Ar(e,t,n=1){if(e.kind==="leaf")return e.id===t?n:null;for(const s of e.children){const o=Ar(s,t,n+1);if(o!==null)return o}return null}function Rr(e,t){if(e.kind==="leaf")return null;if(us(e,t)!==-1)return e;for(const n of e.children){const s=Rr(n,t);if(s)return s}return null}function us(e,t){return e.children.findIndex(n=>n.kind==="leaf"&&n.id===t)}function Et(e,t,n){const s=Ar(e,t);if(s===null)return!1;const o=Rr(e,t);return o&&o.direction===Cr(n)?!0:s+1<=og}function no(e,t,n,s){if(!Et(e,t,n)||ls(e,s))return e;const o=Cr(n),r=n==="left"||n==="top",i={kind:"leaf",id:s},a=d=>({kind:"split",direction:o,children:r?[i,d]:[d,i],sizes:[.5,.5]}),u=d=>{if(d.kind==="leaf")return d.id===t?a(d):d;const h=us(d,t);if(h!==-1&&d.direction===o){const p=d.sizes[h]/2,_=r?h:h+1,g=d.children.slice(),b=d.sizes.slice();return b[h]=p,g.splice(_,0,i),b.splice(_,0,p),{kind:"split",direction:d.direction,children:g,sizes:b}}return{kind:"split",direction:d.direction,children:d.children.map(u),sizes:d.sizes.slice()}};return u(e)}function jr(e,t){if(!ls(e,t)||e.kind==="leaf")return e;const n=s=>{if(s.kind==="leaf")return s;const o=us(s,t);if(o===-1)return{kind:"split",direction:s.direction,children:s.children.map(n),sizes:s.sizes.slice()};const r=s.sizes.filter((u,d)=>d!==o),i=r.reduce((u,d)=>u+d,0),a=i+s.sizes[o];return{kind:"split",direction:s.direction,children:s.children.filter((u,d)=>d!==o),sizes:r.map(u=>u/i*a)}};return Pr(n(e))}function Pr(e){if(e.kind==="leaf")return e;const t=e.children.map(Pr);if(t.length===1)return t[0];const n=[],s=[];return t.forEach((o,r)=>{const i=e.sizes[r];o.kind==="split"&&o.direction===e.direction?o.children.forEach((a,u)=>{n.push(a),s.push(i*o.sizes[u])}):(n.push(o),s.push(i))}),n.length===1?n[0]:{kind:"split",direction:e.direction,children:n,sizes:s}}const so=.1;function rg(e){const t=new Map,n=(s,o)=>{if(s.kind==="leaf"){t.set(s.id,o);return}Mr(s,o).forEach((r,i)=>n(s.children[i],r))};return n(e,{x:0,y:0,width:1,height:1}),t}function Mr(e,t){const n=[];let s=0;for(const o of e.sizes)n.push(e.direction==="row"?{x:t.x+s*t.width,y:t.y,width:o*t.width,height:t.height}:{x:t.x,y:t.y+s*t.height,width:t.width,height:o*t.height}),s+=o;return n}function ig(e){const t=[],n=(s,o,r)=>{if(s.kind==="leaf")return;const i=Mr(s,o);for(let a=0;a<s.children.length-1;a+=1){const u=i[a];t.push({splitPath:r.slice(),boundaryIndex:a,direction:s.direction,rect:s.direction==="row"?{x:u.x+u.width,y:o.y,width:0,height:o.height}:{x:o.x,y:u.y+u.height,width:o.width,height:0},splitRect:o})}i.forEach((a,u)=>n(s.children[u],a,[...r,u]))};return n(e,{x:0,y:0,width:1,height:1},[]),t}function ag(e,t){let n=e;for(const s of t){if(!n||n.kind!=="split")return null;n=n.children[s]}return n??null}function cg(e,t,n,s){const o=ag(e,t);if(!o||o.kind!=="split"||n<0||n>o.children.length-2||!Number.isFinite(s)||s===0)return e;const r=o.sizes[n],i=o.sizes[n+1],a=i-Math.min(i,so),u=r-Math.min(r,so),d=Math.max(-u,Math.min(a,s));if(d===0)return e;const h=_=>{const g=_.sizes.slice();return g[n]=r+d,g[n+1]=i-d,{kind:"split",direction:_.direction,children:_.children,sizes:g}},p=(_,g)=>{if(_.kind!=="split")return _;if(g===t.length)return h(_);const b=t[g],y=_.children.slice();return y[b]=p(_.children[b],g+1),{kind:"split",direction:_.direction,children:y,sizes:_.sizes.slice()}};return p(e,0)}function Nr(e,t){const n=he(e).filter(s=>!t.has(s));return n.length===0?e:n.reduce((s,o)=>jr(s,o),e)}const qr=1;function lg(e){return Dr(e,new Set)}function Dr(e,t){if(typeof e!="object"||e===null)return null;const n=e;if(n.kind==="leaf"){const{id:r}=n;return typeof r!="string"||r.trim()===""||t.has(r)?null:(t.add(r),{kind:"leaf",id:r})}if(n.kind!=="split"||n.direction!=="row"&&n.direction!=="column"||!Array.isArray(n.children)||!Array.isArray(n.sizes)||n.children.length<2||n.sizes.length!==n.children.length)return null;let s=0;for(const r of n.sizes){if(typeof r!="number"||!Number.isFinite(r)||r<=0)return null;s+=r}const o=[];for(const r of n.children){const i=Dr(r,t);if(!i)return null;o.push(i)}return{kind:"split",direction:n.direction,children:o,sizes:n.sizes.map(r=>r/s)}}function ug(){if(typeof crypto<"u"&&typeof crypto.getRandomValues=="function"){const e=crypto.getRandomValues(new Uint8Array(16));e[6]=e[6]&15|64,e[8]=e[8]&63|128;const t=Array.from(e,n=>n.toString(16).padStart(2,"0")).join("");return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}return`id-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}const dg=["sessions","terminals"];function Un(){return`pane-${ug()}`}function oo(){const e=Un();return{tree:{kind:"leaf",id:e},placement:{},activeByPane:{},focusedPaneId:e,pendingPlacement:{},pendingActive:{},userActedPanes:new Set}}function Or(e,t,n){return(n??Object.keys(e.placement)).filter(o=>e.placement[o]===t)}function Lr(e,t,n,s){const o=Or(e,t,s),r=o.indexOf(n),i=o.filter(a=>a!==n);if(i.length!==0)return i[Math.min(Math.max(r,0),i.length-1)]}function fg(e,t){return e.pendingActive[t]!==void 0?!0:Object.values(e.pendingPlacement).includes(t)}function ds(e,t){if(fg(e,t))return e;const n=jr(e.tree,t);if(n===e.tree)return e;const s={...e.activeByPane};delete s[t];const o=he(n);return{...e,tree:n,activeByPane:s,focusedPaneId:o.includes(e.focusedPaneId)?e.focusedPaneId:o[0]}}function Yt(e,t,n,s){const o=e.placement[t],r={...e.placement,[t]:n},i={...e.activeByPane};if(s.activate&&(i[n]=t),o!==void 0&&o!==n&&i[o]===t){const d=Lr(e,o,t,s.order);d===void 0?delete i[o]:i[o]=d}const a={...e,placement:r,activeByPane:i,focusedPaneId:s.focus?n:e.focusedPaneId};return o!==void 0&&o!==n&&!Object.values(r).includes(o)?ds(a,o):a}function Xe(e,t){return e.userActedPanes.has(t)?e:{...e,userActedPanes:new Set(e.userActedPanes).add(t)}}function pg(e){let t={...e,pendingPlacement:{},pendingActive:{}};const n=new Set(Object.values(t.placement));for(const r of he(t.tree))n.has(r)||(t=ds(t,r));const s={...t.activeByPane};let o=!1;for(const r of he(t.tree)){if(s[r]!==void 0)continue;const i=Object.keys(t.placement).find(a=>t.placement[a]===r);i!==void 0&&(s[r]=i,o=!0)}return o?{...t,activeByPane:s}:t}function $r(e,t){if(e===void 0)return!1;const n=e.placement[t];return n!==void 0&&e.activeByPane[n]===t}const z=ae()((e,t)=>{const n=(s,o)=>{e(r=>{const i=r.layouts[s]??oo(),a=o(i)??i;return a===r.layouts[s]?r:{layouts:{...r.layouts,[s]:a}}})};return{layouts:{},hydrationSources:{sessions:!1,terminals:!1},restoring:!1,pendingActiveWorkspace:null,ensureWorkspace(s){e(o=>o.layouts[s]?o:{layouts:{...o.layouts,[s]:oo()}})},assignTab(s,o,r,i,a){n(s,u=>{const d=he(u.tree),h=r!==void 0&&d.includes(r)?r:d.includes(u.focusedPaneId)?u.focusedPaneId:d[0],p=i!==!0,_=Yt(u,o,h,{activate:p,focus:p,order:a});return p?Xe(_,h):_})},moveTab(s,o,r,i){n(s,a=>{if(a.placement[o]===void 0||a.placement[o]===r||!he(a.tree).includes(r))return null;const u=Yt(a,o,r,{activate:!0,focus:!0,order:i});return Xe(u,r)})},splitWithTab(s,o,r,i,a){n(s,u=>{if(!he(u.tree).includes(r)||!Et(u.tree,r,i))return null;const d=Or(u,r,a);if(d.length===1&&d[0]===o)return null;const h=Un(),p=no(u.tree,r,i,h);if(p===u.tree)return null;const _=Yt({...u,tree:p},o,h,{activate:!0,focus:!0,order:a});return Xe(_,h)})},splitEmpty(s,o,r){let i=null;return n(s,a=>{if(!he(a.tree).includes(o)||!Et(a.tree,o,r))return null;const u=Un(),d=no(a.tree,o,r,u);return d===a.tree?null:(i=u,{...a,tree:d,focusedPaneId:u})}),i},removeTab(s,o,r){n(s,i=>{const a=i.placement[o];if(a===void 0)return null;const u={...i.placement};delete u[o];const d={...i.activeByPane};if(d[a]===o){const p=Lr(i,a,o,r);p===void 0?delete d[a]:d[a]=p}const h={...i,placement:u,activeByPane:d};return Object.values(u).includes(a)?h:ds(h,a)})},setActiveTab(s,o,r){n(s,i=>i.placement[r]!==o?null:i.activeByPane[o]===r?Xe(i,o):Xe({...i,activeByPane:{...i.activeByPane,[o]:r}},o))},focusPane(s,o){n(s,r=>r.focusedPaneId===o||!he(r.tree).includes(o)?null:{...r,focusedPaneId:o})},resizeDivider(s,o,r,i){n(s,a=>{const u=cg(a.tree,o,r,i);return u===a.tree?null:{...a,tree:u}})},installPersistedLayouts(s,o=null){e(r=>{const i={...r.layouts};for(const[a,u]of s){const d=he(u.tree);i[a]={tree:u.tree,placement:{},activeByPane:{},focusedPaneId:u.activePaneId!==null&&d.includes(u.activePaneId)?u.activePaneId:d[0],pendingPlacement:{...u.placement},pendingActive:{...u.activeByPane},userActedPanes:new Set}}return{layouts:i,hydrationSources:{sessions:!1,terminals:!1},restoring:!0,pendingActiveWorkspace:o!==null&&i[o]!==void 0?o:null}})},claimPaneFor(s,o,r,i){n(s,a=>{const u=he(a.tree);let d,h=!1;if(i!==void 0&&u.includes(i))d=i;else if(r!==null){const b=a.pendingPlacement[r];b!==void 0&&u.includes(b)&&(d=b,h=!0)}d??(d=u.includes(a.focusedPaneId)?a.focusedPaneId:u[0]);let p=a;if(h&&r!==null){const b={...a.pendingPlacement};delete b[r],p={...a,pendingPlacement:b}}let _=!0;if(h){const b=p.pendingActive[d];p.userActedPanes.has(d)?_=!1:b!==void 0&&b!==r&&(_=p.activeByPane[d]===void 0)}else t().restoring&&(_=p.activeByPane[d]===void 0);const g=Yt(p,o,d,{activate:_,focus:!h&&_});return h?g:Xe(g,d)})},markHydrationSource(s){e(o=>{if(o.hydrationSources[s])return o;const r={...o.hydrationSources,[s]:!0};if(!dg.every(a=>r[a]))return{hydrationSources:r};const i={};for(const[a,u]of Object.entries(o.layouts))i[a]=pg(u);return{hydrationSources:r,layouts:i,restoring:!1,pendingActiveWorkspace:null}})},paneOfTab(s,o){var r;return((r=t().layouts[s])==null?void 0:r.placement[o])??null},activeTabOf(s){const o=t().layouts[s];return o?o.activeByPane[o.focusedPaneId]??null:null}}});function hg(e,t){return e.filter(n=>n.workspaceCwd===t)}function gg(e,t){return hg(e,t).map(n=>n.id)}function mt(e){const t=e===null?null:z.getState().activeTabOf(e);if(q.setState({activeTabId:t,activeWorkspaceCwd:e}),t!==null)return q.getState().tabs.find(n=>n.id===t)}function _t(e){(e==null?void 0:e.kind)==="chat"&&j.getState().activate(e.data.sessionId)}const q=ae()((e,t)=>({tabs:[],activeTabId:null,activeWorkspaceCwd:null,open(n,s){const o=t().tabs.find(i=>i.id===n.id);if(o){t().activate(o.id);return}e(i=>({tabs:[...i.tabs,n]}));const r=z.getState();r.ensureWorkspace(n.workspaceCwd),r.claimPaneFor(n.workspaceCwd,n.id,ln(n),s),_t(mt(n.workspaceCwd))},close(n){const s=t().tabs.find(a=>a.id===n);if(!s)return;const o=gg(t().tabs,s.workspaceCwd),r=t().activeTabId;e(a=>({tabs:a.tabs.filter(u=>u.id!==n)})),z.getState().removeTab(s.workspaceCwd,n,o);const i=mt(t().activeWorkspaceCwd);t().activeTabId!==r&&_t(i)},activate(n){const s=t().tabs.find(i=>i.id===n);if(!s)return;const o=z.getState();o.ensureWorkspace(s.workspaceCwd);const r=o.paneOfTab(s.workspaceCwd,n);r===null?o.claimPaneFor(s.workspaceCwd,n,ln(s)):(o.focusPane(s.workspaceCwd,r),o.setActiveTab(s.workspaceCwd,r,n)),_t(mt(s.workspaceCwd))},switchWorkspace(n){z.getState().ensureWorkspace(n),_t(mt(n))},reorder(n,s){e(o=>{const r=o.tabs.findIndex(d=>d.id===n),i=o.tabs.findIndex(d=>d.id===s);if(r===-1||i===-1||r===i)return o;const a=o.tabs.slice(),[u]=a.splice(r,1);return u?(a.splice(i,0,u),{tabs:a}):o})},updateLabel(n,s){e(o=>({tabs:o.tabs.map(r=>r.id===n?{...r,label:s}:r)}))},updateData(n,s){e(o=>({tabs:o.tabs.map(r=>r.id===n?{...r,data:{...r.data,...s}}:r)}))},closeByPathPrefix(n){const s=t().tabs.filter(o=>{if(o.kind!=="file"&&o.kind!=="diff"&&o.kind!=="molecule")return!1;const r=o.data.path;return r===n||((r==null?void 0:r.startsWith(`${n}/`))??!1)});for(const o of s)t().close(o.id)}}));function ln(e){var t;switch(e.kind){case"chat":{const{sessionId:n}=e.data,s=(t=j.getState().sessions[n])==null?void 0:t.agentId;return s?`agent:${s}`:null}case"file":return`file:${e.data.path}`;case"diff":{const{path:n,staged:s}=e.data;return`diff:${s?"staged":"worktree"}:${n}`}case"terminal":{const{slot:n}=e.data;return n===null?null:`terminal:${n}`}case"molecule":{const{path:n}=e.data;return n===null?null:`molecule:${n}`}}}function Br(e,t,n){var s;return((s=e.find(o=>o.id===n))==null?void 0:s.workspaceCwd)===t?t:null}function BS(e){const t=q(n=>Br(n.tabs,n.activeWorkspaceCwd,e));return z(n=>t===null?!1:$r(n.layouts[t],e))}function mg(e){const{tabs:t,activeWorkspaceCwd:n}=q.getState(),s=Br(t,n,e);return s===null?!1:$r(z.getState().layouts[s],e)}const Q={chat:e=>`chat-${e}`,file:e=>`file-${e}`,diff:(e,t)=>`diff-${e}${t?"-staged":""}`,terminal:e=>`term-${e}`,molecule:e=>`mol-${e}`};let Tn=0;function Fr(e,t){Tn+=1,q.getState().open({id:Q.terminal(`new-${Tn}`),kind:"terminal",label:`Terminal ${Tn}`,closable:!0,data:{slot:null,cwd:e},workspaceCwd:e},t)}let Cn=0;function _g(e,t){Cn+=1,q.getState().open({id:Q.molecule(`new-${Cn}`),kind:"molecule",label:`Molecule ${Cn}`,closable:!0,data:{path:null},workspaceCwd:e},t)}function Dt(e,t){const n=j.getState().createSession(e);q.getState().open({id:Q.chat(n),kind:"chat",label:"New chat",closable:!0,data:{sessionId:n},workspaceCwd:e},t);const s=D.getState().client;s&&ng(s,n).catch(()=>{})}function un(e){const t=q.getState().tabs.find(s=>s.id===e);if(q.getState().close(e),(t==null?void 0:t.kind)!=="chat")return;const{sessionId:n}=t.data;sg(D.getState().client,n)}z.subscribe(()=>{const{activeWorkspaceCwd:e,activeTabId:t}=q.getState();e!==null&&z.getState().activeTabOf(e)!==t&&_t(mt(e))});function $e(e,t){return t&&(e==="~"||e.startsWith("~/"))?t+e.slice(1):e}function fs(e,t,n){const s=new Map;for(const o of e){const r=t[o];if(!r)continue;const i=$e(r.cwd||"~",n),a=s.get(i);a?a.push(r):s.set(i,[r])}return Array.from(s,([o,r])=>({cwd:o,sessions:r}))}function zr(e){return!e||e==="~"?"~":e.split("/").filter(Boolean).pop()||e}function yg(e,t){return new Set(e.filter(n=>n.cwd!==t).map(n=>n.cwd))}function Tt(e,t,n){q.getState().open({id:Q.chat(e.id),kind:"chat",label:e.title||"Chat",closable:!0,data:{sessionId:e.id},workspaceCwd:$e(e.cwd||"~",t)},n)}function Ur(){bh({consume:()=>kt.getState().consume(),findByAgentId:e=>j.getState().findByAgentId(e),select(e){var t;j.getState().activate(e.id),e.cwd&&L.getState().setCwd(e.cwd),Tt(e,((t=D.getState().serverInfo)==null?void 0:t.homeDir)??null)},notifyNotFound(e){Te.getState().show(`Agent not found: ${e}`,{variant:"warning"})},consumeSource(){V().launch.agentDeepLink.consume()}})}function wg(e,t=Ur){const n=e.current();return n&&kt.getState().set(n),e.subscribe(s=>{kt.getState().set(s),D.getState().status==="open"&&kt.getState().restored&&t()})}function vg(){w.useEffect(()=>wg(V().launch.agentDeepLink),[])}const Wn="pi-studio-agent-todos-ui";function Wr(e){if(!e)return new Set;try{const t=JSON.parse(e);if(!t||typeof t!="object")return new Set;const{version:n,collapsed:s}=t;return n!==1||!Array.isArray(s)?new Set:s.every(o=>typeof o=="string")?new Set(s):new Set}catch{return new Set}}function bg(e){const t=[...e];return JSON.stringify({version:1,collapsed:t.slice(-500)})}const Sg=250;function kg(e){let t;const n=async o=>{const r=e.getClient();if(r!=null&&r.hasAgentTodosCapability())try{const i=await r.listAgentTodos(o);s.getState().applyUpdate(i)}catch{}},s=ae()((o,r)=>({todos:Ds,tracked:{},collapsed:Wr(e.kv.get(Wn)),track(i){const a=(r().tracked[i]??0)===0;o(d=>({tracked:{...d.tracked,[i]:(d.tracked[i]??0)+1}})),a&&n(i);let u=!1;return()=>{u||(u=!0,o(d=>{const{[i]:h=0,...p}=d.tracked;return{tracked:h>1?{...p,[i]:h-1}:p}}))}},async refetchTracked(){o(i=>({todos:Rd(i.todos)})),await Promise.all(Object.keys(r().tracked).map(n))},applyUpdate(i){o(a=>{const u=Ad(a.todos,i);return u===a.todos?a:{todos:u}})},clear(){o({todos:Ds})},setCollapsed(i,a){const u=new Set(r().collapsed);u.delete(i),a&&u.add(i),o({collapsed:u}),clearTimeout(t),t=setTimeout(()=>{e.kv.set(Wn,bg(r().collapsed))},Sg)}}));return s}const xg={get:e=>V().storage.get(e),set:(e,t)=>V().storage.set(e,t)},Ct=kg({getClient:()=>D.getState().client,kv:xg});Ph(e=>{Ct.setState({collapsed:Wr(e.storage.get(Wn))})});function FS(e){return Ct(t=>e?jd(t.todos,e):void 0)}function zS(e){return Ct(t=>e?t.collapsed.has(e):!1)}function Ig(){const e=D(n=>n.status),t=D(n=>n.client);w.useEffect(()=>{if(e!=="open"||!t)return;const n=Ct.getState();if(!t.hasAgentTodosCapability()){n.clear();return}const s=t.onAgentTodosUpdate(o=>{Ct.getState().applyUpdate(o)});return n.refetchTracked(),s},[e,t])}function Eg(e,t){if(!e||(e.url&&t.setHost(e.url),e.password&&t.setPassword(e.password),e.cwd&&t.setCwd(e.cwd),!e.connect))return;const{host:n,password:s}=t.fields(),o=rr(n)!==null;t.connect({url:n,password:o?void 0:s||void 0})}function Tg(){const e=w.useRef(!1);w.useEffect(()=>{if(e.current)return;e.current=!0;const t=L.getState();Eg(V().launch.initialConnect(),{setHost:t.setHost,setPassword:t.setPassword,setCwd:t.setCwd,fields:()=>L.getState(),connect:n=>void D.getState().connect(n)})},[])}const Hr="pi-studio-pane-layout",Cg=250;function Ag(){const e=new Map,t={workspaces:e,activeWorkspaceCwd:null},n=V().storage.get(Hr);if(!n)return t;let s;try{s=JSON.parse(n)}catch{return t}if(typeof s!="object"||s===null)return t;const o=s;if(o.version!==qr||typeof o.workspaces!="object"||o.workspaces===null)return t;for(const[i,a]of Object.entries(o.workspaces)){const u=Rg(a);u&&e.set(i,u)}const r=o.activeWorkspaceCwd;return{workspaces:e,activeWorkspaceCwd:typeof r=="string"&&e.has(r)?r:null}}function Rg(e){if(typeof e!="object"||e===null)return null;const t=e,n=lg(t.tree);if(!n)return null;const s=new Set(he(n)),o={};for(const[a,u]of ro(t.placement))s.has(u)&&(o[a]=u);const r={};for(const[a,u]of ro(t.activeByPane))s.has(a)&&(r[a]=u);const i=t.activePaneId;return{tree:n,placement:o,activeByPane:r,activePaneId:typeof i=="string"&&s.has(i)?i:null}}function ro(e){return typeof e!="object"||e===null?[]:Object.entries(e).filter(t=>typeof t[1]=="string")}let Re=null;function io(){Re==null||Re();const e=setTimeout(()=>{Re=null,Vr()},Cg);Re=()=>clearTimeout(e)}function jg(){Re==null||Re(),Re=null,Vr()}function Vr(){const e=new Map;for(const s of q.getState().tabs){const o=ln(s);o!==null&&e.set(s.id,o)}const t={};for(const[s,o]of Object.entries(z.getState().layouts)){const r={...o.pendingPlacement};for(const[a,u]of Object.entries(o.placement)){const d=e.get(a);d!==void 0&&(r[d]=u)}const i={...o.pendingActive};for(const[a,u]of Object.entries(o.activeByPane)){const d=e.get(u);d!==void 0&&(i[a]=d)}t[s]={tree:o.tree,placement:r,activeByPane:i,activePaneId:o.focusedPaneId}}const n={version:qr,workspaces:t,activeWorkspaceCwd:q.getState().activeWorkspaceCwd??void 0};V().storage.set(Hr,JSON.stringify(n))}function Pg(){let e=ao(q.getState().tabs);const t=()=>{const r=ao(q.getState().tabs);r!==e&&(e=r,io())},n=z.subscribe(io),s=q.subscribe(t),o=j.subscribe(t);return()=>{n(),s(),o()}}function ao(e){return e.map(t=>`${t.id}\0${ln(t)??""}`).join("")}const co={loaded:!1,capable:!1,viewers:{}},Ve=ae()((e,t)=>({...co,isViewerEnabled(n){var s;return((s=t().viewers[n])==null?void 0:s.enabled)??!0},async hydrate(){const n=D.getState().client,s=(n==null?void 0:n.hasViewerSettingsCapability())??!1;if(!n||!s){e({loaded:!0,capable:!1,viewers:{}});return}try{const o=await n.getViewerSettings();e({loaded:!0,capable:!0,viewers:o.viewers})}catch{e({loaded:!0,capable:!0,viewers:{}})}},applyUpdate(n){e({viewers:n.viewers})},async setEnabled(n,s){const o=D.getState().client,r=t().viewers[n];if(e(i=>({viewers:{...i.viewers,[n]:{...r,enabled:s}}})),!!o)try{const i=await o.setViewerSettings({[n]:{enabled:s}});e({viewers:i.viewers})}catch{lo(e,n,r),uo()}},async setConfig(n,s){const o=D.getState().client,r=t().viewers[n];if(e(i=>({viewers:{...i.viewers,[n]:{enabled:(r==null?void 0:r.enabled)??!0,config:s}}})),!!o)try{const i=await o.setViewerSettings({[n]:{config:s}});e({viewers:i.viewers})}catch{lo(e,n,r),uo()}},reset(){e(co)}}));function lo(e,t,n){e(s=>{const o={...s.viewers};return n===void 0?delete o[t]:o[t]=n,{viewers:o}})}function uo(){Te.getState().error("Could not save the viewer setting. Reverted.")}function Kr(e){return Ve.getState().isViewerEnabled(e)}const Mg=/^diff:(staged|worktree):(.+)$/;function Ng(e){for(const[t,n]of e)for(const s of Object.keys(n.placement)){const o=qg(s,t,Kr);o!==null&&q.getState().open(o)}}function qg(e,t,n){const s=fo(e,"file:");if(s!==null)return{id:Q.file(s),kind:"file",...Xt(s),workspaceCwd:t,data:{path:s}};const o=fo(e,"molecule:");if(o!==null)return n("molviewer")?{id:Q.molecule(o),kind:"molecule",...Xt(o),workspaceCwd:t,data:{path:o}}:{id:Q.file(o),kind:"file",...Xt(o),workspaceCwd:t,data:{path:o}};const r=Mg.exec(e);if(r!==null){const i=r[2],a=r[1]==="staged";return{id:Q.diff(i,a),kind:"diff",...Xt(i),workspaceCwd:t,data:{path:i,staged:a}}}return null}function fo(e,t){if(!e.startsWith(t))return null;const n=e.slice(t.length);return n===""?null:n}function Xt(e){return{label:e.split("/").pop()||e,closable:!0}}function Dg(e){if(e===null)return()=>{};if(ho())return po(e),()=>{};const t=z.subscribe(()=>{ho()&&(t(),po(e))});return t}function po(e){if(z.getState().layouts[e]===void 0||!q.getState().tabs.some(n=>n.workspaceCwd===e))return!1;const t=q.getState().activeWorkspaceCwd!==e;return t&&q.getState().switchWorkspace(e),Og(e),t}function Og(e){const t=q.getState().tabs.filter(s=>s.workspaceCwd===e&&s.kind==="chat");if(t.length===0)return;const n=j.getState().activeSessionId;t.some(s=>s.data.sessionId===n)||j.getState().activate(t[0].data.sessionId)}function ho(){const{sessions:e,terminals:t}=z.getState().hydrationSources;return e&&t}const Lg={workspaces:new Map,activeWorkspaceCwd:null};function $g(e,t,n){return e==="open"&&t&&!n}function Bg(){const e=D(o=>o.status),t=Ve(o=>o.loaded),n=w.useRef(Lg),s=w.useRef(!1);w.useEffect(()=>{const o=Ag();n.current=o,z.getState().installPersistedLayouts(o.workspaces,o.activeWorkspaceCwd);const r=Pg(),i=()=>jg();return window.addEventListener("pagehide",i),()=>{window.removeEventListener("pagehide",i),r()}},[]),w.useEffect(()=>{if(!$g(e,t,s.current))return;s.current=!0;const o=n.current;Ng(o.workspaces),Dg(o.activeWorkspaceCwd)},[e,t])}function Fg(e){return typeof e=="object"&&e!==null&&"kind"in e}function zg(e){const t=[];for(const n of e)Fg(n)&&(n.kind==="other"?n.event&&t.push({event:n.event,timestamp:n.timestamp}):(n.events??[]).forEach((s,o)=>{t.push({event:s,timestamp:o===0?n.timestamp:void 0})}));return t}async function Gr(e){const t=[];let n=null;for(;;){const s=await e(n);if(s.items.length===0||(t.push(...zg(s.items)),!s.hasNewer))return t;const o=s.endCursor;if(typeof o!="string"||o===n)return t;n=o}}function Ug(e){return typeof e.model=="string"}function Wg(e){return typeof e.thinkingLevel=="string"}function Hg(e){return typeof e.title=="string"}function Vg(){const e=D(s=>s.client),t=D(s=>s.status),n=w.useRef(!1);w.useEffect(()=>{t!=="open"||!e||n.current||(n.current=!0,Kg(e).then(()=>{kt.getState().markRestored(),Ur()}))},[t,e]),w.useEffect(()=>{if(!(t!=="open"||!e))return e.onAgentUpdate(s=>{if(Ug(s)){const o=typeof s.modelProvider=="string"?s.modelProvider:void 0;j.getState().setModelByAgentId(s.agentId,s.model,o)}if(Wg(s)&&j.getState().setThinkingLevelByAgentId(s.agentId,s.thinkingLevel),Hg(s)){j.getState().setTitleByAgentId(s.agentId,s.title);const o=j.getState().findByAgentId(s.agentId);o&&q.getState().updateLabel(Q.chat(o.id),s.title)}})},[t,e])}async function Kg(e){try{await Gg(e)}finally{z.getState().markHydrationSource("sessions")}}async function Gg(e){var b;let t=[];try{t=(await e.connection.request("list_agents_request",{all:!1})).agents??[]}catch{t=[]}t.sort((y,x)=>(x.lastActivity??0)-(y.lastActivity??0));const n=j.getState();for(const y of t){if(n.findByAgentId(y.agentId))continue;let x=wn;try{const S=await Gr(C=>e.agent(y.agentId).timeline.fetch({direction:"after",cursor:C??void 0,limit:200}));x=Tr(S)}catch{}const m=x.rows.length===0;n.hydrate({id:`s-${y.agentId.slice(0,12)}`,agentId:y.agentId,title:y.title||(m?"New chat":(b=y.cwd)==null?void 0:b.split("/").pop())||"Restored",status:y.status??"idle",cwd:y.cwd||"~",timeline:x,userMessageCount:x.rows.filter(S=>S.kind==="user").length,model:y.model,modelProvider:y.modelProvider,thinkingLevel:y.thinkingLevel})}const{order:s,sessions:o}=j.getState(),r=s.length>0?o[s[0]??""]:void 0;if(!r)return;const i=Sr(),a=$e(r.cwd||"~",i),u=z.getState().pendingActiveWorkspace??a,d=fs(s,o,i);L.getState().setCollapsedWorkspaces(yg(d,u));const h=s.find(y=>{var x;return $e(((x=o[y])==null?void 0:x.cwd)||"~",i)===u});j.getState().activate(h??r.id),L.getState().setCwd(u);const p=Yg(),_=new Set;for(const y of s){const x=o[y];!(x!=null&&x.agentId)||!p.has(`agent:${x.agentId}`)||(Tt(x,i),_.add(y))}const g=z.getState().layouts[a]!==void 0;!_.has(r.id)&&!g&&Tt(r,i)}function Yg(){const e=new Set;for(const t of Object.values(z.getState().layouts))for(const n of Object.keys(t.pendingPlacement))n.startsWith("agent:")&&e.add(n);return e}function Xg(){w.useEffect(()=>{function e(t){const n=L.getState();if(t.key==="Escape"){n.closeCwdPicker(),n.closeSessionMenu(),document.querySelector('[role="dialog"], [role="alertdialog"]')||Te.getState().dismissTop();return}const s=t.ctrlKey||t.metaKey;if(s&&t.key.toLowerCase()==="t"){t.preventDefault(),Fr(q.getState().activeWorkspaceCwd||"~");return}if(s&&t.key.toLowerCase()==="w"){const{activeTabId:o,tabs:r}=q.getState();if(!o)return;const i=r.find(a=>a.id===o);(i==null?void 0:i.closable)!==!1&&(t.preventDefault(),un(o))}}return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[])}function Jg(e){return typeof e=="object"&&e!==null&&e.type==="terminals_update"&&Array.isArray(e.terminals)}function Zg(e){const{tabs:t,updateData:n}=q.getState();for(const s of t){if(s.kind!=="terminal")continue;const o=s.data;o.slot===null||o.exited||e.has(o.slot)||n(s.id,{exited:!0})}}function Qg(){const e=D(t=>t.client);w.useEffect(()=>{if(e)return e.connection.onSessionMessage(t=>{const n=t;Jg(n)&&Zg(new Set(n.terminals.map(s=>s.slot)))})},[e])}async function em(e){try{let t=[];try{t=(await e.connection.request("list_terminals_request",{})).terminals??[]}catch{t=[]}if(t.length===0)return;const n=z.getState().layouts,s=tm(),o=Sr(),r=q.getState().open;for(const i of t){if(i.closed)continue;const a=$e(i.cwd||"~",o);n[a]!==void 0&&!s.has(`terminal:${i.slot}`)||r({id:Q.terminal(i.slot),kind:"terminal",label:i.name,closable:!0,data:{slot:i.slot,cwd:a},workspaceCwd:a})}}finally{z.getState().markHydrationSource("terminals")}}function tm(){const e=new Set;for(const t of Object.values(z.getState().layouts))for(const n of Object.keys(t.pendingPlacement))n.startsWith("terminal:")&&e.add(n);return e}function nm(){const e=D(s=>s.client),t=D(s=>s.status),n=w.useRef(!1);w.useEffect(()=>{t!=="open"||!e||n.current||(n.current=!0,em(e))},[t,e])}function sm(e){return typeof e=="object"&&e!==null&&e.type==="agent_timeline_reset"&&typeof e.agentId=="string"}async function om(e,t){if(!j.getState().findByAgentId(t))return;let s=wn;try{const o=await Gr(r=>e.agent(t).timeline.fetch({direction:"after",cursor:r??void 0,limit:200}));s=Tr(o)}catch{}j.getState().setTimelineByAgentId(t,s)}function rm(){const e=D(t=>t.client);w.useEffect(()=>{if(e)return e.connection.onSessionMessage(t=>{const n=t;sm(n)&&om(e,n.agentId)})},[e])}function im(){const e=D(n=>n.status),t=D(n=>n.client);w.useEffect(()=>{if(e!=="open"||!t){Ve.getState().reset();return}return Ve.getState().hydrate(),t.onViewerSettingsUpdate(n=>{Ve.getState().applyUpdate(n)})},[e,t])}function am(e){return e.managerActive?e.status==="closed"?"reconnect-now":e.status==="open"?e.probeInFlight?"none":"probe":"none":"none"}const cm=5e3;function lm(){let e=!1;return function(){const{status:n,reconnection:s,daemon:o}=D.getState(),r=am({status:n,managerActive:s!==null,probeInFlight:e});if(r==="reconnect-now"){s==null||s.reconnectNow();return}if(r==="probe"){if(!o)return;e=!0,o.ping(cm).catch(()=>{D.getState().daemon===o&&o.close(4e3,"stale-connection-probe")}).finally(()=>{e=!1})}}}function um(){w.useEffect(()=>V().connection.onResume(lm()),[])}function dm(){return Tg(),vg(),im(),Ig(),Bg(),Vg(),nm(),Qg(),rm(),Xg(),um(),null}let Jt=null;function fm(){lh("WorkbenchBoot");const[e,t]=w.useState(!1);return w.useEffect(()=>{const n=Symbol("WorkbenchBoot");if(Jt===null)return Jt=n,t(!0),()=>{Jt===n&&(Jt=null),t(!1)}},[]),e?c.jsx(dm,{}):null}const pm=new $i;function hm({host:e,children:t}){const[n]=w.useState(()=>Zs(e??V()));return e&&e!==n&&Zs(e),c.jsx(br.Provider,{value:n,children:c.jsx($f,{store:n.storage,children:c.jsx(Bi,{client:pm,children:t})})})}const gm=w.lazy(()=>ue(()=>import("./ModelProvidersPanel-Vc4a7tTI.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13])).then(e=>({default:e.ModelProvidersPanel}))),mm=w.lazy(()=>ue(()=>import("./SkillsPanel-CXgC8Gzo.js"),__vite__mapDeps([14,1,5,6,2,9,7,8,15,16,10,11,12,17])).then(e=>({default:e.SkillsPanel}))),_m=w.lazy(()=>ue(()=>import("./ViewersPanel-DGo1jOxa.js"),__vite__mapDeps([18,1,15,5,6,16,2,9,10,11,12,19])).then(e=>({default:e.ViewersPanel}))),ym=[{id:"providers",label:"Model Providers",icon:Hi,component:gm,available:e=>e.providerAuth},{id:"skills",label:"Skills",icon:Vi,component:mm,available:e=>e.skills},{id:"viewers",label:"Viewers",icon:pn,component:_m,available:()=>!0}];function wm(e){return{providerAuth:!!(e!=null&&e.providerAuth),skills:!!(e!=null&&e.skills)}}function vm(e){switch(e){case"connected":return{status:"finished"};case"error":return{status:"error"};case"disconnected":case"closing":return{status:"idle",showInactive:!0};case"connecting":return null}}const go=40;function Yr(e){return/^\[object [A-Za-z]+\]$/.test(e)}function bm(e){const t=(e.split(`
18
+ `)[0]??"").trim();return t===""||Yr(t)?"connection failed":/refus/i.test(t)?"connection refused":/time(?:d)?[\s-]*out|timeout/i.test(t)?"timed out":/\b401\b|\b403\b|unauthor|forbidden|auth/i.test(t)?"auth failed":t.length>go?`${t.slice(0,go-1)}…`:t}function Xr(e){if(e.trim()==="")return!1;try{const t=is(e);return/^wss?:\/\//i.test(t.url)?new URL(t.url).hostname!=="":!1}catch{return!1}}function mo(e){try{const{url:t}=is(e);return t===""?null:t}catch{return null}}function Sm(e){const{status:t,error:n,url:s}=e;if(t==="open"){const r=mo(s);return{kind:"connected",statusLabel:"connected",hostLabel:r,showFields:!1,fieldsFrozen:!1,action:{label:"Disconnect",variant:"outline",disabled:!1},title:r?`${r} · connected`:"connected"}}if(t==="closing"){const r=mo(s);return{kind:"closing",statusLabel:"disconnecting…",hostLabel:r,showFields:!1,fieldsFrozen:!1,action:{label:"Disconnect",variant:"outline",disabled:!0},title:r?`${r} · disconnecting…`:"disconnecting…"}}if(t==="connecting")return{kind:"connecting",statusLabel:"connecting…",hostLabel:null,showFields:!0,fieldsFrozen:!0,action:{label:"Connecting…",variant:"default",disabled:!0},title:"connecting…"};const o=Xr(s);if(n!==null&&n!==""){const r=bm(n);return{kind:"error",statusLabel:r,hostLabel:null,showFields:!0,fieldsFrozen:!1,action:{label:"Retry",variant:"default",disabled:!o},title:Yr(n.trim())?r:n}}return{kind:"disconnected",statusLabel:"disconnected",hostLabel:null,showFields:!0,fieldsFrozen:!1,action:{label:"Connect",variant:"default",disabled:!o},title:"disconnected"}}const km="_bar_1o0iw_9",xm="_title_1o0iw_21",Im="_brand_1o0iw_27",Em="_version_1o0iw_33",Tm="_statusPill_1o0iw_41",Cm="_statusText_1o0iw_60",Am="_statusHost_1o0iw_68",Rm="_statusSep_1o0iw_76",jm="_statusLabel_1o0iw_79",Pm="_statusDot_1o0iw_82",Mm="_statusSpinner_1o0iw_83",Nm="_statusPillError_1o0iw_87",qm="_field_1o0iw_4",Dm="_fieldUrl_1o0iw_111",Om="_fieldPassword_1o0iw_115",Lm="_fieldInvalid_1o0iw_122",$m="_action_1o0iw_139",Bm="_panelToggles_1o0iw_147",Fm="_panelToggle_1o0iw_147",J={bar:km,title:xm,brand:Im,version:Em,statusPill:Tm,statusText:Cm,statusHost:Am,statusSep:Rm,statusLabel:jm,statusDot:Pm,statusSpinner:Mm,statusPillError:Nm,field:qm,fieldUrl:Dm,fieldPassword:Om,fieldInvalid:Lm,action:$m,panelToggles:Bm,panelToggle:Fm},zm=w.lazy(()=>ue(()=>import("./SettingsDialog-DPQ9A2Xj.js"),__vite__mapDeps([20,1,5,6,2,4,9,10,11,12,21])).then(e=>({default:e.SettingsDialog}))),Fe=26,Um="var(--pi-font-size-2xs)",Wm=9,_o="host:port, ws://…/http://…, or a pasted pairing link";function Hm(){const e=D(I=>I.status),t=D(I=>I.error),n=D(I=>I.connect),s=D(I=>I.disconnect),o=D(I=>I.serverInfo),r=L(I=>I.host),i=L(I=>I.setHost),a=L(I=>I.password),u=L(I=>I.setPassword),d=L(I=>I.leftSidebarCollapsed),h=L(I=>I.toggleLeftSidebar),p=L(I=>I.rightSidebarCollapsed),_=L(I=>I.toggleRightSidebar),g=L(I=>I.settingsOpen),b=L(I=>I.openSettings),y=L(I=>I.closeSettings),x=wm(o==null?void 0:o.features),m=ym.some(I=>I.available(x)),[S,C]=w.useState(g);w.useEffect(()=>{g&&C(!0)},[g]);const E=Sm({status:e,error:t,url:r}),T=vm(E.kind),$=w.useRef({host:r,password:a}),[ie,B]=w.useState(!1),ne=ie&&r.trim()!==""&&!Xr(r);function ce(){E.action.disabled||($.current={host:r,password:a},n({url:r,password:a||void 0}))}function Y(){if(E.kind==="connected"||E.kind==="closing"){s();return}ce()}function ye(I,fe){if(I.key==="Enter"){I.preventDefault(),ce();return}I.key==="Escape"&&(I.preventDefault(),fe==="url"?(i($.current.host),B(!1)):u($.current.password),I.currentTarget.blur())}const ke=V().app;return c.jsxs("div",{className:J.bar,children:[c.jsxs("span",{className:J.title,children:[c.jsx("span",{className:J.brand,children:ke.title}),ke.version&&c.jsxs("span",{className:J.version,children:["v",ke.version]})]}),c.jsxs("span",{className:H(J.statusPill,E.kind==="error"&&J.statusPillError),title:E.title,children:[T?c.jsx(mn,{...T,className:J.statusDot}):c.jsx(_r,{size:Wm,color:"var(--pi-color-statusWarning)",className:J.statusSpinner,"aria-label":"Connecting"}),c.jsxs("span",{className:J.statusText,children:[E.hostLabel&&c.jsx("span",{className:J.statusHost,children:E.hostLabel}),E.hostLabel&&c.jsx("span",{className:J.statusSep,"aria-hidden":!0,children:"·"}),c.jsx("span",{className:J.statusLabel,"aria-live":"polite",children:E.statusLabel})]})]}),E.showFields&&c.jsxs(c.Fragment,{children:[c.jsx(rn,{className:H(J.field,J.fieldUrl,ne&&J.fieldInvalid),value:r,onChange:I=>i(I.target.value),onFocus:()=>B(!1),onBlur:()=>B(!0),onKeyDown:I=>ye(I,"url"),readOnly:E.fieldsFrozen,placeholder:"ws://127.0.0.1:6767",title:ne?`Not a dialable daemon address — ${_o}`:_o,"aria-label":"Daemon address","aria-invalid":ne||void 0,spellCheck:!1,autoComplete:"off"}),c.jsx(rn,{className:H(J.field,J.fieldPassword),type:"password",value:a,onChange:I=>u(I.target.value),onKeyDown:I=>ye(I,"password"),readOnly:E.fieldsFrozen,placeholder:"password",title:"Daemon password — ignored when the address is a pairing link","aria-label":"Daemon password",autoComplete:"off"})]}),c.jsx(se,{className:J.action,size:"xs",variant:E.action.variant,disabled:E.action.disabled,style:{minHeight:Fe,fontSize:Um},onClick:Y,children:E.action.label}),c.jsxs("div",{className:J.panelToggles,children:[c.jsx(se,{className:J.panelToggle,size:"xs",variant:"ghost",iconOnly:!0,style:{minHeight:Fe,width:Fe},"aria-label":"Toggle left panel",title:d?"Show sessions sidebar":"Hide sessions sidebar",onClick:()=>h(),children:c.jsx(oe,{icon:d?Ki:Gi,size:"sm"})}),c.jsx(se,{className:J.panelToggle,size:"xs",variant:"ghost",iconOnly:!0,style:{minHeight:Fe,width:Fe},"aria-label":"Toggle right panel",title:p?"Show files/changes sidebar":"Hide files/changes sidebar",onClick:()=>_(),children:c.jsx(oe,{icon:p?Yi:Xi,size:"sm"})}),m&&c.jsx(se,{className:J.panelToggle,size:"xs",variant:"ghost",iconOnly:!0,style:{minHeight:Fe,width:Fe},"aria-label":"Settings",title:"Settings",onClick:()=>b(),children:c.jsx(oe,{icon:Ji,size:"sm"})})]}),S&&c.jsx(w.Suspense,{fallback:null,children:c.jsx(zm,{open:g,onOpenChange:I=>I?b():y()})})]})}function at(){return D(e=>{var t;return((t=e.serverInfo)==null?void 0:t.homeDir)??null})}const Hn=ae()((e,t)=>({drafts:{},pendingFeedback:{},setDraft(n,s){e(o=>({drafts:{...o.drafts,[n]:s}}))},replaceDraft(n,s,o){const i={copy:(t().drafts[n]??"")===""?"filled":"replaced",flash:o};e(a=>({drafts:{...a.drafts,[n]:s},pendingFeedback:{...a.pendingFeedback,[n]:i}}))},consumeFeedback(n){const s=t().pendingFeedback[n];if(s!==void 0)return e(o=>{const r={...o.pendingFeedback};return delete r[n],{pendingFeedback:r}}),s}}));function be(e,t,n,s=!1){return{tone:e,glyph:t,text:n,truncate:s}}function Vm(e){var t,n;return e.reason==="answered"?e.method==="input"?be("success","check","answered"):e.method==="editor"?be("success","check","submitted"):e.method==="select"?((t=e.answer)==null?void 0:t.value)===void 0?be("muted",null,"no longer pending"):be("success","check",e.answer.value,!0):e.method==="confirm"?((n=e.answer)==null?void 0:n.confirmed)===void 0?be("muted",null,"no longer pending"):e.answer.confirmed?be("success","check","Yes"):be("muted",null,"declined"):be("success","check","answered"):e.reason==="cancelled"?be("muted",null,"declined"):e.reason==="timeout"?be("muted",null,"expired"):be("muted",null,e.reason)}function An(e){return e||"Chat"}function Km(e,t){let n=0;for(const s of Object.values(e))s.agentId===t&&n++;return n}function Gm(e){const t=e.title;return typeof t=="string"&&t.length>0?t:void 0}function Ym(e){const t=Vm(e);return t.tone==="success"?"Answered":t.text==="declined"?"Dismissed":t.text==="expired"?"Expired":"No longer pending"}function Xm(e,t,n){const s=[];for(const o of Object.values(t.pending)){if(o.receivedAt===void 0||e.pending[o.requestId]!==void 0)continue;const r=Km(e.pending,o.agentId);if(r===0)if(o.agentId===n.activeAgentId){const i=Gm(o.payload);s.push({text:i?`A question needs input: ${i}`:"A question needs input",politeness:"polite"})}else s.push({text:`A question needs input in ${An(n.sessionTitle(o.agentId))}`,politeness:"polite"});else s.push({text:`${r+1} questions need input in ${An(n.sessionTitle(o.agentId))}`,politeness:"polite"})}for(const o of Object.values(t.resolved))e.resolved[o.requestId]===void 0&&s.push({text:`${Ym(o)} in ${An(n.sessionTitle(o.agentId))}`,politeness:"polite"});return s}function Jm(e){switch(e){case"warning":return"warning";case"error":return"error";default:return"default"}}function Zm(e){switch(e){case"warning":return 6e3;case"error":return null;default:return 4e3}}function Qm(e,t,n,s){return t===n?e:`${s||"Chat"} — ${e}`}function e_(e,t,n,s,o){return{text:n===s?e:`${o||"Chat"}: ${e}`,politeness:t==="error"?"assertive":"polite"}}const Ce=ae()(()=>({controller:null,uiState:ts}));let yo=null,Ee=null,Jr=new Map,Zr=new Map,yt=new Set;function Qr(){Jr=new Map,Zr=new Map,yt=new Set}function t_(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function ei(e,t,n){const s=n(),o=e.get(t);return o&&t_(o,s)?o:(e.set(t,s),s)}function n_(e){for(const t of e)switch(t.type){case"notify":s_(t);break;case"replace_composer_text":o_(t);break}}function s_(e){const t=j.getState(),n=t.activeSessionId?t.sessions[t.activeSessionId]:void 0,s=Object.values(t.sessions).find(a=>a.agentId===e.agentId),o=(n==null?void 0:n.agentId)??null,r=(s==null?void 0:s.title)??null;Te.getState().show(Qm(e.message,e.agentId,o,r),{variant:Jm(e.level),durationMs:Zm(e.level)});const i=e_(e.message,e.level,e.agentId,o,r);yn(i.text,i.politeness)}function o_(e){const t=Object.values(j.getState().sessions).find(s=>s.agentId===e.agentId);if(t===void 0)return;const n=mg(Q.chat(t.id));Hn.getState().replaceDraft(t.id,e.text,n),n||yn(`Draft replaced in ${t.title||"Chat"}`,"polite")}function r_(e,t){const n=j.getState(),s=n.activeSessionId?n.sessions[n.activeSessionId]:void 0,o=Xm(e,t,{activeAgentId:(s==null?void 0:s.agentId)??null,sessionTitle:r=>{var i;return((i=Object.values(n.sessions).find(a=>a.agentId===r))==null?void 0:i.title)??null}});for(const r of o)yn(r.text,r.politeness);Object.keys(e.pending).length>0&&Object.keys(t.pending).length===0&&rs()}const wo=new Set;function i_(e){Qr();const t=Pd(e,{onUnknownMethod(s){wo.has(s)||(wo.add(s),console.warn(`agent-ui: unrecognised extension-UI method "${s}"`))}}),n=t.subscribe((s,o)=>{const r=Ce.getState().uiState;Ce.setState({uiState:s}),n_(o),r_(r,s)});Ce.setState({controller:t,uiState:t.getState()}),Ee=()=>{n(),t.dispose()}}function a_(){Ee==null||Ee(),Ee=null,Qr(),Ce.setState({controller:null,uiState:ts})}function ti(e){if(e===yo||(a_(),yo=e,!e))return;const t=()=>{Ce.getState().controller||e.connection.state==="open"&&e.extensionUiAvailable()&&(Ee==null||Ee(),Ee=null,i_(e))};t(),Ce.getState().controller||(Ee=e.connection.onStateChange(n=>{n==="open"&&queueMicrotask(t)}))}D.subscribe(e=>ti(e.client));ti(D.getState().client);const vo=[],bo=[];function c_(e,t){if(!e.controller)return vo;const n=ei(Jr,t,()=>Ed(e.uiState,t));return n.length===0?vo:n}function l_(e,t){if(!e.controller)return bo;const n=ei(Zr,t,()=>Cd(e.uiState,t));return n.length===0?bo:n}const So=new Set;function u_(e){if(!e.controller)return So;const t=new Set(Object.keys(Td(e.uiState)));return t.size===yt.size&&[...t].every(n=>yt.has(n))?yt:(yt=t,t.size===0?So:t)}function d_(){return Ce(u_)}function ni(e){return Ce(t=>c_(t,e))}function US(e){return Ce(t=>l_(t,e))}function WS(e,t){const n=Ce.getState().controller;return n?n.respond(e,t):Promise.resolve({ok:!1,reason:"unsupported"})}const f_={initializing:"queued",idle:"idle",running:"running",error:"error",closed:"finished"};function He(e){return f_[e]??"idle"}const ko=120;function p_(e,t){return e.status==="error"?"failed":t?"needsInput":e.status==="running"?"running":e.userMessageCount===0&&e.timeline.rows.length===0?"empty":"idle"}function h_(e){const{rows:t}=e.timeline;for(let n=t.length-1;n>=0;n--){const s=t[n];if(s&&s.kind==="error"){const o=(s.text.split(`
19
+ `,1)[0]??"").trim();return o.length>ko?o.slice(0,ko):o}}return null}function g_(e,t){const n=p_(e,t);switch(n){case"failed":return{state:n,meta:"turn failed",reason:h_(e),dot:{status:He("error")},titleItalic:!1};case"needsInput":return{state:n,meta:"needs input",reason:null,dot:{status:He(e.status),requiresAttention:!0,attentionReason:"question"},titleItalic:!1};case"running":return{state:n,meta:"running",reason:null,dot:{status:He("running")},titleItalic:!1};case"empty":return{state:n,meta:"no messages",reason:null,dot:{status:He("idle"),showInactive:!0},titleItalic:!0};case"idle":return{state:n,meta:"idle",reason:null,dot:{status:He("idle"),showInactive:!0},titleItalic:!1}}}function m_(e,t){const n=e.filter(o=>o.agentId!==null&&t.has(o.agentId)).length;return n>0?{dot:{status:"waiting",requiresAttention:!0,attentionReason:"question"},reason:"question",pendingSessionCount:n}:e.some(o=>o.status==="error")?{dot:{status:He("error")},reason:"failed",pendingSessionCount:0}:null}const __="_header_4rtcu_1",y_="_list_4rtcu_15",w_="_newSessionRow_4rtcu_20",v_="_footer_4rtcu_45",b_="_item_4rtcu_70",S_="_itemFailed_4rtcu_85",k_="_active_4rtcu_83",x_="_activeBar_4rtcu_88",I_="_activeBarNeedsInput_4rtcu_107",E_="_title_4rtcu_89",T_="_titleLabel_4rtcu_89",C_="_titleItalic_4rtcu_127",A_="_meta_4rtcu_130",R_="_metaDot_4rtcu_138",j_="_metaLabel_4rtcu_143",P_="_metaFailed_4rtcu_148",M_="_metaNeedsInput_4rtcu_151",N_="_metaEmpty_4rtcu_154",q_="_menuBtn_4rtcu_159",D_="_workspaceHeader_4rtcu_172",O_="_workspaceChevron_4rtcu_194",L_="_chevronGlyphExpanded_4rtcu_205",$_="_workspaceLabel_4rtcu_211",B_="_workspaceCount_4rtcu_217",F_="_workspaceMenuBtn_4rtcu_225",z_="_workspaceSessions_4rtcu_237",K={header:__,list:y_,newSessionRow:w_,footer:v_,item:b_,itemFailed:S_,active:k_,activeBar:x_,activeBarNeedsInput:I_,title:E_,titleLabel:T_,titleItalic:C_,meta:A_,metaDot:R_,metaLabel:j_,metaFailed:P_,metaNeedsInput:M_,metaEmpty:N_,menuBtn:q_,workspaceHeader:D_,workspaceChevron:O_,chevronGlyphExpanded:L_,workspaceLabel:$_,workspaceCount:B_,workspaceMenuBtn:F_,workspaceSessions:z_};function U_({session:e,active:t,draggable:n,onSelect:s,onOpenMenu:o,onDragStartRow:r}){const i=ni(e.agentId??""),a=g_(e,i.length>0);return c.jsxs("div",{className:H(K.item,t&&K.active,!t&&a.state==="failed"&&K.itemFailed),draggable:n,onDragStart:r,onClick:s,onContextMenu:u=>{u.preventDefault(),o(u.clientX,u.clientY)},children:[(t||a.state==="needsInput")&&c.jsx("span",{className:H(K.activeBar,a.state==="needsInput"&&K.activeBarNeedsInput),"aria-hidden":!0}),c.jsxs("div",{className:K.title,children:[c.jsx("span",{className:H(K.titleLabel,a.titleItalic&&K.titleItalic),children:e.title}),c.jsx(Pe,{className:K.menuBtn,hoverBase:"var(--pi-color-surfaceSidebar)",title:"Actions",onClick:u=>{u.stopPropagation();const d=u.currentTarget.getBoundingClientRect();o(d.left,d.bottom)},children:c.jsx(oe,{icon:Xn,size:"sm"})})]}),c.jsxs("div",{className:H(K.meta,a.state==="empty"&&K.metaEmpty),children:[a.dot&&c.jsx(mn,{...a.dot,className:K.metaDot,pulse:a.state==="needsInput"}),c.jsxs("span",{className:K.metaLabel,children:[c.jsx("span",{className:a.state==="failed"?K.metaFailed:a.state==="needsInput"?K.metaNeedsInput:void 0,children:a.meta}),a.reason&&c.jsxs(c.Fragment,{children:[" · ",a.reason]})]})]})]})}const _e=ae()(e=>({dialog:{status:"closed"},openConfirm:(t,n,s)=>e({dialog:{status:"confirm",agentId:t,target:n,pending:!1,backTo:null,triggerElement:s}}),openPicker:(t,n,s)=>e({dialog:{status:"picker",agentId:t,messages:n,triggerElement:s}}),selectFromPicker:t=>e(n=>n.dialog.status!=="picker"?n:{dialog:{status:"confirm",agentId:n.dialog.agentId,target:t,pending:!1,backTo:n.dialog.messages,triggerElement:n.dialog.triggerElement}}),backToPicker:()=>e(t=>t.dialog.status!=="confirm"||t.dialog.backTo===null?t:{dialog:{status:"picker",agentId:t.dialog.agentId,messages:t.dialog.backTo,triggerElement:t.dialog.triggerElement}}),setPending:t=>e(n=>n.dialog.status==="confirm"?{dialog:{...n.dialog,pending:t}}:n),close:()=>e({dialog:{status:"closed"}})}));function si(e){return e.kind==="user"&&!e.pending&&!e.failed}function W_(e){return e.filter(si).map(t=>t.text)}function H_(e){const t=new Map;let n=0;for(const s of e)si(s)&&(t.set(s.id,n),n+=1);return t}function xo(e){return e.trim().replace(/\s+/g," ")}function V_(e,t,n){const s=e[t],o=n[t];return s===void 0||o===void 0?{outcome:"fallback-to-picker"}:xo(s)!==xo(o.text)?{outcome:"fallback-to-picker"}:{outcome:"matched",target:o}}function K_(e){return e.forkTimelineSync&&!e.running&&e.agentId!==null}const G_=new Map;function oi(e){var s;const t=D(o=>o.serverInfo),n=!!((s=t==null?void 0:t.features)!=null&&s.forkTimelineSync);return K_({forkTimelineSync:n,running:(e==null?void 0:e.status)==="running",agentId:(e==null?void 0:e.agentId)??null})}function HS(e){const t=as(),n=_e(d=>d.openConfirm),s=_e(d=>d.openPicker),o=oi(e),r=e.timeline.rows,i=w.useMemo(()=>o?H_(r):G_,[o,r]),a=e.agentId,u=w.useCallback(d=>{if(!t||!a)return;const h=document.activeElement instanceof HTMLElement?document.activeElement:null;t.agent(a).forkMessages().then(({messages:p})=>{const _=W_(e.timeline.rows),g=V_(_,d,p);g.outcome==="matched"?n(a,g.target,h):s(a,p,h)}).catch(p=>{console.error("[fork] forkMessages() failed",p)})},[t,a,e,n,s]);return{canFork:o,ordinalByRowId:i,onForkFromRow:u}}function Y_(e){const t=as(),n=_e(i=>i.openPicker),s=oi(e),o=e==null?void 0:e.agentId,r=w.useCallback(()=>{if(!t||!o)return;const i=document.activeElement instanceof HTMLElement?document.activeElement:null;t.agent(o).forkMessages().then(({messages:a})=>n(o,a,i)).catch(a=>{console.error("[fork] forkMessages() failed",a)})},[t,o,n]);return{canFork:s,openForkPicker:r}}async function X_(e,t){const n=await V().dialogs.prompt("Rename:",e.title);if(!(n!=null&&n.trim()))return;const s=n.trim();j.getState().setTitle(e.id,s),q.getState().updateLabel(Q.chat(e.id),s),e.agentId&&(t==null||t.agent(e.agentId).update({title:s}).catch(()=>{}))}async function J_(e,t,n,s){const o=t.length;if(!await V().dialogs.confirm(`Delete all ${o} conversation${o===1?"":"s"} in "${zr(e)}"? This deletes the conversations only — files on disk are untouched. This cannot be undone.`))return!1;s();for(const i of t){if(i.agentId&&n)try{await n.agent(i.agentId).delete()}catch(a){await V().dialogs.alert(`Failed to delete "${i.title}": ${a instanceof Error?a.message:String(a)}`);continue}j.getState().remove(i.id),q.getState().close(Q.chat(i.id))}return!0}function Z_(){const e=L(y=>y.sessionMenu),t=L(y=>y.closeSessionMenu),n=D(y=>y.client),s=w.useRef(null),[o,r]=w.useState(!1);w.useEffect(()=>{r(e!==null)},[e]);const i=j(y=>e?y.sessions[e.sessionId]:void 0),a=Y_(i);if(!e)return null;const u=!!(i!=null&&i.agentId)&&(i==null?void 0:i.status)==="running";function d(y){r(y),y||t()}async function h(){i&&(await X_(i,n),t())}function p(){i!=null&&i.agentId&&(n==null||n.agent(i.agentId).interrupt().catch(()=>{})),t()}function _(y){j.getState().remove(y),q.getState().close(Q.chat(y))}async function g(){if(i){if(!await V().dialogs.confirm("Archive this agent? It can be resumed later."))return t();if(t(),!i.agentId){_(i.id);return}if(!n){await V().dialogs.alert("Not connected — cannot archive remotely.");return}try{await n.agent(i.agentId).archive(),_(i.id)}catch(y){await V().dialogs.alert(`Failed to archive: ${y instanceof Error?y.message:String(y)}`)}}}async function b(){if(i){if(!await V().dialogs.confirm("Permanently delete this agent? This cannot be undone."))return t();if(t(),!i.agentId){_(i.id);return}if(!n){await V().dialogs.alert("Not connected — cannot delete remotely.");return}try{await n.agent(i.agentId).delete(),_(i.id)}catch(y){await V().dialogs.alert(`Failed to delete: ${y instanceof Error?y.message:String(y)}`)}}}return c.jsxs(jt,{open:o,onOpenChange:d,modal:!1,children:[c.jsx(Pt,{asChild:!0,children:c.jsx(_n,{ref:s,x:e.x,y:e.y})}),c.jsxs(qt,{minWidth:160,children:[c.jsxs(G,{onSelect:h,children:[c.jsx(Lo,{size:13}),"Rename"]}),c.jsxs(G,{disabled:!u,onSelect:p,children:[c.jsx(Zi,{size:13}),"Stop agent"]}),a.canFork&&c.jsxs(G,{onSelect:a.openForkPicker,children:[c.jsx($o,{size:13}),"Fork from…"]}),c.jsx(We,{}),c.jsxs(G,{danger:!0,onSelect:g,children:[c.jsx(Qi,{size:13}),"Archive"]}),c.jsxs(G,{danger:!0,onSelect:b,children:[c.jsx(Jn,{size:13}),"Delete permanently"]})]})]})}function Q_({label:e,cwd:t,sessionCount:n,collapsed:s,attentionDot:o,onToggleCollapsed:r,onOpenMenu:i}){return c.jsxs("div",{className:K.workspaceHeader,onClick:r,title:t,children:[c.jsx(Pe,{className:K.workspaceChevron,"aria-label":s?"Expand workspace":"Collapse workspace",onClick:a=>{a.stopPropagation(),r()},children:c.jsx(oe,{icon:Zn,size:"xs",className:s?void 0:K.chevronGlyphExpanded})}),c.jsx(_p,{projectKey:e,size:20}),c.jsx("span",{className:K.workspaceLabel,children:e}),o&&c.jsx(mn,{...o.dot,pulse:o.reason==="question","aria-label":o.reason==="question"?`${e} — ${o.pendingSessionCount} session${o.pendingSessionCount===1?"":"s"} needs input`:`${e} — turn failed`}),c.jsx("span",{className:K.workspaceCount,children:n}),c.jsx(Pe,{className:K.workspaceMenuBtn,hoverBase:"var(--pi-color-surface2)",title:"Workspace actions",onClick:a=>{a.stopPropagation();const u=a.currentTarget.getBoundingClientRect();i(u.left,u.bottom)},children:c.jsx(oe,{icon:Xn,size:"sm"})})]})}function ey(){const e=L(g=>g.workspaceMenu),t=L(g=>g.closeWorkspaceMenu),n=D(g=>g.client),s=j(g=>g.order),o=j(g=>g.sessions),r=at(),i=w.useRef(null),[a,u]=w.useState(!1);if(w.useEffect(()=>{u(e!==null)},[e]),!e)return null;const d=s.map(g=>o[g]).filter(g=>!!g).filter(g=>$e(g.cwd||"~",r)===e.cwd);function h(g){u(g),g||t()}function p(){e&&(t(),Dt(e.cwd))}async function _(){if(!e)return;await J_(e.cwd,d,n,t)||t()}return c.jsxs(jt,{open:a,onOpenChange:h,modal:!1,children:[c.jsx(Pt,{asChild:!0,children:c.jsx(_n,{ref:i,x:e.x,y:e.y})}),c.jsxs(qt,{minWidth:160,children:[c.jsxs(G,{onSelect:p,children:[c.jsx(en,{size:13}),"New session"]}),c.jsx(We,{}),c.jsxs(G,{danger:!0,onSelect:_,children:[c.jsx(Jn,{size:13}),"Delete workspace (all conversations)"]})]})]})}const ty=.25;function ri(e,t){if(t.width<=0||t.height<=0)return"center";const n=(e.x-(t.left+t.width/2))/t.width,s=(e.y-(t.top+t.height/2))/t.height;return Math.max(Math.abs(n),Math.abs(s))<ty?"center":Math.abs(n)>=Math.abs(s)?n<0?"left":"right":s<0?"top":"bottom"}function ny(e,t){return t.x>=e.left&&t.x<=e.left+e.width&&t.y>=e.top&&t.y<=e.top+e.height}function ii(e,t,n){return n==="center"?"center":Et(e,t,n)?n:"center"}function Vn(e,t,n,s){return s[n]!==t?!1:e==="center"?!0:Object.keys(s).every(r=>r===n||s[r]!==t)}const Ot={chat:"application/x-pi-studio-open-chat",path:"application/x-pi-studio-open-path"},sy=["chat","path"];function ai(e){for(const t of sy)if(e.includes(Ot[t]))return t;return null}function VS(e){return t=>{t.dataTransfer.setData(Ot.path,e),t.dataTransfer.effectAllowed="copyMove"}}function oy(e,t){const n=ai(e);if(n===null)return null;const s=t(Ot[n]).trim();return s===""?null:{kind:n,value:s}}const ps="application/x-pi-studio-path-ref";function ci(e){return e.includes(ps)}function ry(e,t){const n=e.replace(/\/+$/,"");return t?`${n}/`:e}function KS(e,t){if(!ci(e))return null;const n=t(ps).trim();return n===""?null:n}const li="data-composer-drop";function GS(){return{[li]:""}}function Io(e){var t;return((t=e==null?void 0:e.closest)==null?void 0:t.call(e,`[${li}]`))!=null}function Eo(e,t){return t&&ci(e)}function iy(e,t,n,s){return ii(e,t,ri(n,s))}function ay(){const e=j(m=>m.order),t=j(m=>m.sessions),n=j(m=>m.activeSessionId),s=j(m=>m.activate),o=q(m=>m.activeWorkspaceCwd),r=D(m=>m.status),i=L(m=>m.openSessionMenu),a=L(m=>m.openWorkspaceMenu),u=L(m=>m.setCwd),d=L(m=>m.openCwdPicker),h=L(m=>m.collapsedWorkspaces),p=L(m=>m.toggleWorkspaceCollapsed),_=at(),g=d_();function b(m){s(m);const S=t[m];S!=null&&S.cwd&&u(S.cwd),S&&Tt(S,_)}function y(m,S,C){S===o&&(C.dataTransfer.setData(Ot.chat,m),C.dataTransfer.effectAllowed="copy")}const x=fs(e,t,_);return c.jsxs(yr,{children:[c.jsx("div",{className:K.header,style:{minHeight:Jf},children:c.jsxs("h3",{children:["Workspaces · ",x.length]})}),c.jsxs("div",{className:K.list,children:[x.length===0&&c.jsx(Le,{style:{padding:"var(--pi-spacing-12) var(--pi-spacing-10)"},children:r!=="open"?"Not connected":"No workspaces — open a folder to start"}),x.map(m=>{const S=h.has(m.cwd);return c.jsxs("div",{children:[c.jsx(Q_,{label:zr(m.cwd),cwd:m.cwd,sessionCount:m.sessions.length,collapsed:S,attentionDot:S?m_(m.sessions,g):null,onToggleCollapsed:()=>p(m.cwd),onOpenMenu:(C,E)=>a(m.cwd,C,E)}),!S&&c.jsxs("div",{className:K.workspaceSessions,children:[m.sessions.map(C=>c.jsx(U_,{session:C,active:C.id===n,draggable:m.cwd===o,onSelect:()=>b(C.id),onOpenMenu:(E,T)=>i(C.id,E,T),onDragStartRow:E=>y(C.id,m.cwd,E)},C.id)),c.jsxs("button",{type:"button",className:K.newSessionRow,disabled:r!=="open",title:r!=="open"?"Connect to start a new session":void 0,onClick:()=>Dt(m.cwd),children:[c.jsx(oe,{icon:en,size:"xs"}),"New session"]})]})]},m.cwd)})]}),c.jsxs("button",{type:"button",className:K.footer,disabled:r!=="open",title:r!=="open"?"Connect to open a workspace":"Open a workspace folder",onClick:()=>d(),children:[c.jsx(oe,{icon:en,size:"xs"}),"Add workspace"]}),c.jsx(Z_,{}),c.jsx(ey,{})]})}const ui="data-pi-dragging";function di(e=document.body){e.setAttribute(ui,"")}function dn(e=document.body){e.removeAttribute(ui)}const To={tab:0,strip:1,pane:2};function Rn(e){if(e===null||typeof e!="object"||!("type"in e))return null;const{type:t}=e;if(t!=="tab"&&t!=="strip"&&t!=="pane")return null;const n="paneId"in e&&typeof e.paneId=="string"?e.paneId:null;return{kind:t,paneId:n}}function cy(e){const t=e.activatorEvent;return t instanceof MouseEvent?{x:t.clientX+e.delta.x,y:t.clientY+e.delta.y}:null}function ly(e,t,n){return e.kind==="tab"?n.placement[t]??null:e.paneId}function uy(e){const[t,n]=w.useState(null),[s,o]=w.useState(null),r=q(g=>g.tabs.find(b=>b.id===t)??null),i=Ta(Ca(Ra,{activationConstraint:{distance:4}})),a=w.useMemo(()=>g=>{const b=Aa(g).map(y=>{var x;return{hit:y,target:Rn((x=g.droppableContainers.find(m=>m.id===y.id))==null?void 0:x.data.current)}}).filter(y=>y.target!==null).toSorted((y,x)=>To[y.target.kind]-To[x.target.kind]);return b.length===0?[]:[b[0].hit]},[]),u=w.useCallback(g=>{const{over:b,active:y}=g,x=Rn(b==null?void 0:b.data.current);if(!b||x===null||e===null)return null;const m=z.getState().layouts[e];if(m===void 0)return null;const S=String(y.id),C=String(b.id);if(x.kind!=="pane"){const $=ly(x,C,m);return $===null||x.kind==="tab"&&C===S?null:x.kind==="tab"&&m.placement[S]===$?{paneId:$,region:"center"}:Vn("center",$,S,m.placement)?null:{paneId:$,region:"center"}}const E=cy(g);if(x.paneId===null||E===null)return null;const T=ii(m.tree,x.paneId,ri(E,b.rect));return Vn(T,x.paneId,S,m.placement)?null:{paneId:x.paneId,region:T}},[e]),d=w.useCallback(g=>{di(),n(String(g.active.id))},[]),h=w.useCallback(g=>{const b=u(g);o(y=>(y==null?void 0:y.paneId)===(b==null?void 0:b.paneId)&&(y==null?void 0:y.region)===(b==null?void 0:b.region)?y:b)},[u]),p=w.useCallback(()=>{dn(),n(null),o(null)},[]),_=w.useCallback(g=>{var ce;dn(),n(null),o(null);const{active:b,over:y}=g,x=Rn(y==null?void 0:y.data.current);if(!y||x===null||e===null)return;const m=String(b.id),S=z.getState().layouts[e];if(S===void 0)return;const C=q.getState(),E=C.tabs.filter(Y=>Y.workspaceCwd===e).map(Y=>Y.id),{moveTab:T,splitWithTab:$}=z.getState();if(x.kind==="tab"){const Y=String(y.id);if(Y===m)return;const ye=S.placement[Y];ye!==void 0&&ye!==S.placement[m]&&T(e,m,ye,E),C.reorder(m,Y);return}const ie=u(g);if(ie===null)return;if(ie.region!=="center"){$(e,m,ie.paneId,ie.region,E);return}T(e,m,ie.paneId,E);const B=((ce=z.getState().layouts[e])==null?void 0:ce.placement)??{},ne=E.filter(Y=>Y!==m&&B[Y]===ie.paneId).at(-1);ne!==void 0&&E.indexOf(m)<E.indexOf(ne)&&C.reorder(m,ne)},[e,u]);return{sensors:i,collisionDetection:a,onDragStart:d,onDragMove:h,onDragEnd:_,onDragCancel:p,draggedTab:r,preview:s}}const dy=w.lazy(()=>ue(()=>import("./ChatPanel-DtsVDzUk.js"),__vite__mapDeps([22,1,2,9,3,5,6,23,24,25,26,27,28,29,10,11,12,30])).then(e=>({default:e.ChatPanel}))),Co=w.lazy(()=>ue(()=>import("./FilePanel-D2g7tFLr.js"),__vite__mapDeps([31,1,5,6,2,32,28,29,9,10,11,12,33])).then(e=>({default:e.FilePanel}))),fy=w.lazy(()=>ue(()=>import("./TerminalPanel-Bcxo35FX.js"),__vite__mapDeps([34,1,35,36,5,6,2,9,10,11,12,37])).then(e=>({default:e.TerminalPanel}))),py=w.lazy(()=>ue(()=>import("./MoleculeViewerPanel-DZ2LcAAy.js"),__vite__mapDeps([38,1,39,40,41,2,32,7,8,5,6,9,10,11,12,42])).then(e=>({default:e.MoleculeViewerPanel}))),hy={chat:dy,file:Co,diff:Co,terminal:fy,molecule:py},At="var(--pane-strip-height)";function hs(e){return e===void 0?new Map:rg(Nr(e.tree,new Set(Object.values(e.placement))))}function ee(e){const t=(e*100).toFixed(4);return`${t.includes(".")?t.replace(/\.?0+$/,""):t}%`}function fi(e){if(e!==void 0)return{left:ee(e.x),top:`calc(${ee(e.y)} + ${At})`,width:ee(e.width),height:`calc(${ee(e.height)} - ${At})`}}function gy(e,t){const n=`${ee(e.y)} + ${At}`,s=`${ee(e.height)} - ${At}`,o=`calc((${s}) / 2)`;switch(t){case"left":return{left:ee(e.x),top:`calc(${n})`,width:ee(e.width/2),height:`calc(${s})`};case"right":return{left:ee(e.x+e.width/2),top:`calc(${n})`,width:ee(e.width/2),height:`calc(${s})`};case"top":return{left:ee(e.x),top:`calc(${n})`,width:ee(e.width),height:o};case"bottom":return{left:ee(e.x),top:`calc(${n} + (${s}) / 2)`,width:ee(e.width),height:o};case"center":return{left:ee(e.x),top:`calc(${n})`,width:ee(e.width),height:`calc(${s})`}}}function my(e){const t=hs(e);return[...t].map(([n,s])=>({paneId:n,stripStyle:{left:ee(s.x),top:ee(s.y),width:ee(s.width),height:At},focused:t.size>1&&(e==null?void 0:e.focusedPaneId)===n}))}function _y(e){if(e===void 0)return[];const t=Nr(e.tree,new Set(Object.values(e.placement)));return t!==e.tree?[]:ig(t)}function yy(e,t){return(t==null?void 0:t.placement[e])??null}function wy(e,t,n){const s=hs(n);return e.map(o=>{const r=o.workspaceCwd===t?n==null?void 0:n.placement[o.id]:void 0;return{tabId:o.id,style:fi(r===void 0?void 0:s.get(r)),visible:r!==void 0&&(n==null?void 0:n.activeByPane[r])===o.id}})}const vy="_divider_4eg4l_9",by="_vertical_4eg4l_26",Sy="_horizontal_4eg4l_41",jn={divider:vy,vertical:by,horizontal:Sy};function ky({cwd:e,dividers:t,hostRef:n}){const s=z(i=>i.resizeDivider),o=w.useRef(0);function r(i,a){var b;const u=(b=n.current)==null?void 0:b.getBoundingClientRect();if(!u)return;i.preventDefault(),i.stopPropagation();const d=a.direction==="row",h=d?a.splitRect.width*u.width:a.splitRect.height*u.height;if(h<=0)return;const p=i.currentTarget;p.setPointerCapture(i.pointerId),o.current=d?i.clientX:i.clientY,document.body.style.cursor=d?"col-resize":"row-resize",document.body.style.userSelect="none";const _=y=>{const x=d?y.clientX:y.clientY,m=x-o.current;o.current=x,s(e,a.splitPath,a.boundaryIndex,m/h)},g=y=>{window.removeEventListener("pointermove",_),window.removeEventListener("pointerup",g),window.removeEventListener("pointercancel",g),document.body.style.cursor="",document.body.style.userSelect="",p.hasPointerCapture(y.pointerId)&&p.releasePointerCapture(y.pointerId)};window.addEventListener("pointermove",_),window.addEventListener("pointerup",g),window.addEventListener("pointercancel",g)}return t.map(i=>{const a=i.direction==="row";return c.jsx("div",{className:H(jn.divider,a?jn.vertical:jn.horizontal),style:a?{left:`${i.rect.x*100}%`,top:`${i.rect.y*100}%`,height:`${i.rect.height*100}%`}:{left:`${i.rect.x*100}%`,top:`${i.rect.y*100}%`,width:`${i.rect.width*100}%`},role:"separator","aria-orientation":a?"vertical":"horizontal",onPointerDown:u=>r(u,i)},`${i.splitPath.join(".")}:${i.boundaryIndex}`)})}const xy=w.lazy(()=>ue(()=>import("./TextViewer-CgQS2S84.js"),__vite__mapDeps([43,1,44,2,41,5,6,45,46,9,10,11,12,47])).then(e=>({default:e.TextViewer}))),Iy=w.lazy(()=>ue(()=>import("./MarkdownFileViewer-BkoYiczB.js"),__vite__mapDeps([48,1,44,2,41,5,6,45,23,24,25,26,27,46,9,10,11,12,49])).then(e=>({default:e.MarkdownFileViewer}))),Ey=w.lazy(()=>ue(()=>import("./ImageViewer-C0VAAGgg.js"),__vite__mapDeps([50,1,41,2,5,6,9,10,11,12,51])).then(e=>({default:e.ImageViewer}))),Ty=w.lazy(()=>ue(()=>import("./VideoViewer-BLCw1c2P.js"),__vite__mapDeps([52,1,41,2,5,6,9,10,11,12,53])).then(e=>({default:e.VideoViewer}))),Cy=w.lazy(()=>ue(()=>import("./BinaryFallbackViewer-B_1MojiI.js"),__vite__mapDeps([54,1,46,9,5,6,2,10,11,12,55])).then(e=>({default:e.BinaryFallbackViewer}))),Ay=w.lazy(()=>ue(()=>import("./HtmlViewer-1xFkmfi1.js"),__vite__mapDeps([56,1,2,44,41,5,6,45,26,46,15,16,9,10,11,12,57])).then(e=>({default:e.HtmlViewer}))),Ry=w.lazy(()=>ue(()=>import("./PdfViewer-B8uL0huT.js"),__vite__mapDeps([58,1,41,2,12,9,5,6,10,11,59])).then(e=>({default:e.PdfViewer}))),Lt=[{kind:"text",component:xy,extensions:[],liveRefresh:!0},{kind:"markdown",component:Iy,extensions:["md","markdown","mdx"],liveRefresh:!0},{kind:"html",component:Ay,extensions:["html","htm","xhtml"],liveRefresh:!0},{kind:"image",component:Ey,extensions:["png","jpg","jpeg","gif","webp","svg","bmp","ico","avif"],mimePrefixes:["image/"],liveRefresh:!0},{kind:"video",component:Ty,extensions:["mp4","webm","mov","m4v","ogv"],mimePrefixes:["video/"],liveRefresh:!1},{kind:"pdf",component:Ry,extensions:["pdf"],mimePrefixes:["application/pdf"],liveRefresh:!0,toggle:{id:"pdfviewer",fallback:"binary"}},{kind:"binary",component:Cy,extensions:["zip","gz","tar","exe","wasm","woff","woff2","ttf","otf"],liveRefresh:!1}],YS=Object.freeze(Object.fromEntries(Lt.map(e=>[e.kind,e.component]))),jy=Object.freeze(Object.fromEntries(Lt.flatMap(e=>e.extensions.map(t=>[t,e.kind])))),Py=Object.freeze(Lt.flatMap(e=>(e.mimePrefixes??[]).map(t=>[t,e.kind]))),XS=Object.freeze(new Set(Lt.filter(e=>e.liveRefresh).map(e=>e.kind)));function pi(e){const t=e.split("/").pop()??e,n=t.lastIndexOf(".");return n>0?t.slice(n+1).toLowerCase():""}const My={pdb:!0,cif:!0,mmcif:!0,mol:!0,mol2:!0,xyz:!0,extxyz:!0,gro:!0,lammpstrj:!0,xsf:!0},Ny={poscar:!0,contcar:!0};function hi(e){if(My[pi(e)])return!0;const t=e.split("/").pop()??e;return!!Ny[t.toLowerCase()]}function qy(e,t={}){const n=jy[pi(e)];if(n)return n;const s=t.mimeHint??"";for(const[o,r]of Py)if(s.startsWith(o))return r;return t.isBinary?"binary":"text"}const Dy=new Map(Lt.flatMap(e=>e.toggle?[[e.kind,e.toggle]]:[]));function JS(e,t,n={}){const s=qy(e,n),o=Dy.get(s);return o&&!t(o.id)?o.fallback:s}function gs(e,t,n){hi(e)&&Kr("molviewer")?mi(e,t,n):gi(e,t,n)}function gi(e,t,n){const s=e.split("/").pop()||e;q.getState().open({id:Q.file(e),kind:"file",label:s,closable:!0,data:{path:e},workspaceCwd:t},n)}function mi(e,t,n){const s=e.split("/").pop()||e;q.getState().open({id:Q.molecule(e),kind:"molecule",label:s,closable:!0,data:{path:e},workspaceCwd:t},n)}const Kn="data-pane-drop";function Oy(e){return{[Kn]:e}}function Ly(e,t){if(e===null)return null;for(const n of e.querySelectorAll(`[${Kn}]`)){const s=n.getBoundingClientRect(),o={left:s.left,top:s.top,width:s.width,height:s.height},r=n.getAttribute(Kn);if(r!==null&&r!==""&&ny(o,t))return{paneId:r,bounds:o}}return null}function $y(e){const{tabs:t}=q.getState(),n=s=>t.some(o=>o.id===s)?s:null;return e.kind==="chat"?n(Q.chat(e.value)):n(Q.file(e.value))??n(Q.molecule(e.value))}function By(e,t,n,s,o){const r=z.getState().layouts[t];if(r===void 0)return;const i=q.getState().tabs.filter(h=>h.workspaceCwd===t).map(h=>h.id),a=$y(e);if(a!==null){if(Vn(s,n,a,r.placement))return;const{moveTab:h,splitWithTab:p}=z.getState();s==="center"?h(t,a,n,i):p(t,a,n,s,i);return}let u=n;if(s!=="center"&&(u=z.getState().splitEmpty(t,n,s)),u===null)return;if(e.kind==="path"){gs(e.value,t,u);return}const d=j.getState().sessions[e.value];d!==void 0&&Tt(d,o,u)}function Fy(e,t){const[n,s]=w.useState(null),o=at();w.useEffect(()=>{const d=()=>di(),h=()=>dn();return document.addEventListener("dragstart",d),document.addEventListener("dragend",h),document.addEventListener("drop",h),()=>{document.removeEventListener("dragstart",d),document.removeEventListener("dragend",h),document.removeEventListener("drop",h),dn()}},[]);const r=w.useCallback(d=>{if(e===null)return null;const h=z.getState().layouts[e];if(h===void 0)return null;const p={x:d.clientX,y:d.clientY},_=Ly(t.current,p);return _===null?null:{paneId:_.paneId,region:iy(h.tree,_.paneId,p,_.bounds)}},[e,t]),i=w.useCallback(d=>{if(Eo(d.dataTransfer.types,Io(d.target))){s(null);return}if(ai(d.dataTransfer.types)===null)return;d.preventDefault(),d.dataTransfer.dropEffect="copy";const h=r(d);s(p=>(p==null?void 0:p.paneId)===(h==null?void 0:h.paneId)&&(p==null?void 0:p.region)===(h==null?void 0:h.region)?p:h)},[r]),a=w.useCallback(d=>{d.currentTarget.contains(d.relatedTarget)||s(null)},[]),u=w.useCallback(d=>{if(Eo(d.dataTransfer.types,Io(d.target))){s(null);return}const h=oy(d.dataTransfer.types,_=>d.dataTransfer.getData(_));if(h===null)return;d.preventDefault(),s(null);const p=r(d);p===null||e===null||By(h,e,p.paneId,p.region,o)},[e,o,r]);return{preview:n,onDragOver:i,onDragLeave:a,onDrop:u}}function zy(e,t,n,s){if(e.kind!=="chat"||n)return null;if(s)return{status:"waiting",requiresAttention:!0,attentionReason:"question"};if(t===void 0)return null;const o=He(t);return o==="running"||o==="error"?{status:o}:null}const Uy="_strip_1jel9_1",Wy="_tabs_1jel9_13",Hy="_paneStrip_1jel9_28",Vy="_focused_1jel9_36",Ky="_tab_1jel9_13",Gy="_tabActive_1jel9_61",Yy="_tabIcon_1jel9_65",Xy="_tabLabel_1jel9_70",Jy="_tabLabelMono_1jel9_76",Zy="_tabDot_1jel9_81",Qy="_tabClose_1jel9_88",ew="_tabNeedsInput_1jel9_114",tw="_newTab_1jel9_122",nw="_stripActions_1jel9_130",sw="_splitAction_1jel9_137",ow="_itemIcon_1jel9_142",te={strip:Uy,tabs:Wy,paneStrip:Hy,focused:Vy,tab:Ky,tabActive:Gy,tabIcon:Yy,tabLabel:Xy,tabLabelMono:Jy,tabDot:Zy,tabClose:Qy,tabNeedsInput:ew,newTab:tw,stripActions:nw,splitAction:sw,itemIcon:ow},_i={chat:zo,file:hn,diff:Fo,terminal:Bo,molecule:pn},rw={file:!0,diff:!0};function iw({tab:e,active:t}){const n=q(m=>m.activate),s=L(m=>m.openTabMenu),o=_i[e.kind],r=j(m=>{var S;return e.kind==="chat"?(S=m.sessions[e.data.sessionId])==null?void 0:S.status:void 0}),i=j(m=>{var S;return e.kind==="chat"?(S=m.sessions[e.data.sessionId])==null?void 0:S.agentId:void 0}),a=ni(i??""),u=zy(e,r,t,a.length>0),d=(u==null?void 0:u.attentionReason)==="question",h=e.kind==="terminal"&&e.data.exited===!0,{attributes:p,listeners:_,setNodeRef:g,transform:b,transition:y,isDragging:x}=Ma({id:e.id,data:{type:"tab"}});return c.jsxs("div",{ref:g,className:H(te.tab,t&&te.tabActive,d&&te.tabNeedsInput),style:{transform:Na.Transform.toString(b),transition:y,opacity:x?.5:h?.6:1},onClick:()=>n(e.id),onAuxClick:m=>{m.button===1&&e.closable&&un(e.id)},onContextMenu:m=>{e.closable&&(m.preventDefault(),s(e.id,m.clientX,m.clientY))},title:h?`${e.label} (exited)`:e.label,...p,..._,children:[c.jsx("span",{className:te.tabIcon,children:c.jsx(oe,{icon:o,size:"xs",color:t&&e.kind==="chat"?"var(--pi-color-accentBright)":"currentColor","aria-hidden":!0})}),c.jsx("span",{className:H(te.tabLabel,rw[e.kind]&&te.tabLabelMono),children:e.label}),u&&c.jsx(mn,{...u,className:te.tabDot,pulse:d,"aria-label":d?"Needs input":void 0}),e.closable&&c.jsx("span",{className:te.tabClose,onClick:m=>{m.stopPropagation(),un(e.id)},children:c.jsx(oe,{icon:It,size:"xs","aria-hidden":!0})})]})}function aw({workspaceCwd:e,paneId:t}){const n=Ve(o=>o.isViewerEnabled("molviewer")),s=o=>()=>{e!==null&&o(e,t??void 0)};return c.jsxs(jt,{children:[c.jsx(Pt,{asChild:!0,children:c.jsx(Pe,{className:te.newTab,size:"xs",hoverBase:"var(--pi-color-background)",title:"New tab",disabled:!e,children:c.jsx(oe,{icon:en,size:"sm","aria-hidden":!0})})}),c.jsxs(qt,{minWidth:160,sideOffset:4,children:[c.jsxs(G,{onSelect:s(Dt),children:[c.jsx(oe,{icon:zo,size:"xs",className:te.itemIcon,"aria-hidden":!0}),"New chat"]}),c.jsxs(G,{onSelect:s(Fr),children:[c.jsx(oe,{icon:Bo,size:"xs",className:te.itemIcon,"aria-hidden":!0}),"New terminal"]}),n&&c.jsxs(G,{onSelect:s(_g),children:[c.jsx(oe,{icon:pn,size:"xs",className:te.itemIcon,"aria-hidden":!0}),"New molecule view"]})]})]})}function cw({cwd:e,paneId:t}){const n=z(a=>{var u;return e===null||(u=a.layouts[e])==null?void 0:u.tree}),s=a=>()=>{if(e===null||t===null)return;const u=z.getState().splitEmpty(e,t,a);u!==null&&Dt(e,u)},o=a=>n===void 0||t===null?"Open a workspace to split":Et(n,t,a)?null:"Maximum split depth reached",r=o("right"),i=o("bottom");return c.jsxs("div",{className:te.stripActions,children:[c.jsx(Pe,{className:te.splitAction,size:"xs",hoverBase:"var(--pi-color-background)",title:r??"Split right",disabled:r!==null,onClick:s("right"),children:c.jsx(oe,{icon:ea,size:"sm","aria-hidden":!0})}),c.jsx(Pe,{className:te.splitAction,size:"xs",hoverBase:"var(--pi-color-background)",title:i??"Split down",disabled:i!==null,onClick:s("bottom"),children:c.jsx(oe,{icon:ta,size:"sm","aria-hidden":!0})})]})}function Ao({cwd:e,paneId:t,style:n,focused:s=!1}){const o=q(h=>h.tabs),r=z(h=>h.focusPane),i=z(h=>{var p;return e===null||(p=h.layouts[e])==null?void 0:p.placement}),a=z(h=>{var p;return e===null||t===null||(p=h.layouts[e])==null?void 0:p.activeByPane[t]}),u=t===null?[]:o.filter(h=>(i==null?void 0:i[h.id])===t),{setNodeRef:d}=Uo({id:`strip:${t??"none"}`,disabled:t===null,data:{type:"strip",paneId:t}});return c.jsxs("div",{ref:d,className:H(te.strip,te.paneStrip,s&&te.focused),style:n,onPointerDown:()=>{e!==null&&t!==null&&r(e,t)},children:[c.jsx("div",{className:te.tabs,children:c.jsx(ja,{items:u.map(h=>h.id),strategy:Pa,children:u.map(h=>c.jsx(iw,{tab:h,active:h.id===a},h.id))})}),c.jsx(aw,{workspaceCwd:e,paneId:t}),c.jsx(cw,{cwd:e,paneId:t})]})}const lw="_preview_1txmv_1",uw="_chip_1txmv_9",dw="_chipLabel_1txmv_23",Gn={preview:lw,chip:uw,chipLabel:dw};function fw({rect:e,region:t}){return c.jsx("div",{className:Gn.preview,style:gy(e,t)})}function pw({tab:e}){const t=_i[e.kind];return c.jsxs("div",{className:Gn.chip,children:[c.jsx(t,{size:13}),c.jsx("span",{className:Gn.chipLabel,children:e.label})]})}function hw(){const e=L(a=>a.tabMenu),t=L(a=>a.closeTabMenu),n=w.useRef(null),[s,o]=w.useState(!1);if(w.useEffect(()=>{o(e!==null)},[e]),!e)return null;function r(a){o(a),a||t()}function i(){e&&un(e.tabId),t()}return c.jsxs(jt,{open:s,onOpenChange:r,modal:!1,children:[c.jsx(Pt,{asChild:!0,children:c.jsx(_n,{ref:n,x:e.x,y:e.y})}),c.jsx(qt,{minWidth:120,children:c.jsxs(G,{onSelect:i,children:[c.jsx(It,{size:13}),"Close"]})})]})}function gw(e,t,n){return n===0?-1:Math.min(Math.max(e+(t==="ArrowDown"?1:-1),0),n-1)}const mw="An extension declined the fork.",_w="Couldn't fork. Try again.";function yw(e,t){if(rs(),t.cancelled){Te.getState().error(mw),_e.getState().close();return}_e.getState().close();const n=j.getState().findByAgentId(e);if(!n)return;(Hn.getState().drafts[n.id]??"")===""&&Hn.getState().setDraft(n.id,t.text)}function ww(e){rs();const t=e instanceof Error&&e.message?e.message:_w;Te.getState().error(t),_e.getState().setPending(!1)}const vw="_confirmContent_10pv6_9",bw="_preview_10pv6_13",Sw="_previewPending_10pv6_28",kw="_copy_10pv6_32",xw="_backButton_10pv6_39",Iw="_pickerList_10pv6_45",Ew="_pickerRow_10pv6_54",Tw="_pickerOrdinal_10pv6_73",Cw="_pickerText_10pv6_80",Aw="_pickerEmpty_10pv6_88",Ie={confirmContent:vw,preview:bw,previewPending:Sw,copy:kw,backButton:xw,pickerList:Iw,pickerRow:Ew,pickerOrdinal:Tw,pickerText:Cw,pickerEmpty:Aw},Rw="Later messages leave the agent's context. The original prompt is placed in the composer for editing.";function jw(e){var o;if(e.key!=="ArrowDown"&&e.key!=="ArrowUp")return;e.preventDefault();const t=Array.from(e.currentTarget.querySelectorAll("button")),n=t.indexOf(document.activeElement),s=gw(n,e.key,t.length);s>=0&&((o=t[s])==null||o.focus())}function Pw(){const e=_e(S=>S.dialog),t=_e(S=>S.selectFromPicker),n=_e(S=>S.backToPicker),s=_e(S=>S.setPending),o=_e(S=>S.close),r=as(),i=w.useRef(null),a=w.useRef(null),u=e.status!=="closed",d=e.status==="confirm"&&e.pending,h=w.useRef(null),p=w.useRef(null);e.status!=="closed"&&(h.current=e.triggerElement,p.current=e.agentId),w.useEffect(()=>{e.status==="picker"&&i.current&&(i.current.scrollTop=i.current.scrollHeight)},[e]);function _(S){var C,E;S.preventDefault(),(E=(C=i.current)==null?void 0:C.querySelector("button"))==null||E.focus()}function g(S){var C;S.preventDefault(),(C=a.current)==null||C.focus()}function b(S){const C=h.current;if(C!=null&&C.isConnected){S.preventDefault(),C.focus();return}const E=p.current,T=E?j.getState().findByAgentId(E):void 0,$=T?document.querySelector(`[data-session-id="${T.id}"]`):null;$&&(S.preventDefault(),$.focus())}async function y(){const S=_e.getState().dialog;if(!(S.status!=="confirm"||S.pending||!r)){s(!0),yn("Forking…");try{const C=await r.agent(S.agentId).fork(S.target.entryId);yw(S.agentId,C)}catch(C){ww(C)}}}if(!u)return null;if(e.status==="picker")return c.jsx(Fn,{open:!0,onOpenChange:S=>!S&&o(),title:"Fork from…",width:460,onCloseAutoFocus:b,onOpenAutoFocus:_,children:e.messages.length===0?c.jsxs(Le,{className:Ie.pickerEmpty,children:[c.jsx(oe,{icon:$o,size:"lg"}),c.jsx("div",{children:"Nothing to fork yet"})]}):c.jsx("div",{className:Ie.pickerList,ref:i,onKeyDown:jw,children:e.messages.map((S,C)=>c.jsxs("button",{type:"button",className:Ie.pickerRow,onClick:()=>t(S),children:[c.jsxs("span",{className:Ie.pickerOrdinal,children:["#",C+1]}),c.jsx("span",{className:Ie.pickerText,children:S.text})]},S.entryId))})});const{target:x,backTo:m}=e;return c.jsx(Fn,{open:!0,onOpenChange:S=>!S&&!d&&o(),title:"Fork conversation",width:440,onInteractOutside:S=>{d&&S.preventDefault()},onEscapeKeyDown:S=>{d&&S.preventDefault()},onCloseAutoFocus:b,onOpenAutoFocus:g,footer:c.jsxs(c.Fragment,{children:[m!==null&&c.jsx(se,{className:Ie.backButton,size:"sm",variant:"ghost",disabled:d,onClick:()=>n(),children:"‹ Back"}),c.jsx(wr,{asChild:!0,children:c.jsx(se,{ref:a,size:"sm",variant:"secondary",disabled:d,children:"Cancel"})}),c.jsx(se,{size:"sm",loading:d,onClick:()=>void y(),children:d?"Forking…":"Fork from here"})]}),children:c.jsxs("div",{className:Ie.confirmContent,children:[c.jsx("div",{className:H(Ie.preview,d&&Ie.previewPending),children:x.text}),c.jsx("div",{className:Ie.copy,children:Rw})]})})}const Mw="_area_9sawz_1",Nw="_panel_9sawz_11",qw="_dropZone_9sawz_27",Dw="_active_9sawz_31",Ow="_empty_9sawz_35",Lw="_emptyStack_9sawz_47",$w="_emptyTitle_9sawz_61",Bw="_emptyHint_9sawz_65",De={area:Mw,panel:Nw,dropZone:qw,active:Dw,empty:Ow,emptyStack:Lw,emptyTitle:$w,emptyHint:Bw};function Fw({paneId:e,style:t}){const{setNodeRef:n}=Uo({id:`pane:${e}`,data:{type:"pane",paneId:e}});return c.jsx("div",{ref:n,className:De.dropZone,style:t,...Oy(e)})}function zw(){const e=q(y=>y.tabs),t=q(y=>y.activeWorkspaceCwd),n=z(y=>t===null?void 0:y.layouts[t]),s=D(y=>y.status),o=L(y=>y.openCwdPicker),r=z(y=>y.focusPane),i=e.some(y=>y.workspaceCwd===t),a=w.useRef(null),u=w.useMemo(()=>wy(e,t,n),[e,t,n]),d=w.useMemo(()=>my(n),[n]),h=w.useMemo(()=>_y(n),[n]),p=w.useMemo(()=>hs(n),[n]),_=uy(t),g=Fy(t,a),b=_.preview??g.preview;return c.jsxs(qa,{sensors:_.sensors,collisionDetection:_.collisionDetection,onDragStart:_.onDragStart,onDragMove:_.onDragMove,onDragEnd:_.onDragEnd,onDragCancel:_.onDragCancel,children:[c.jsxs("div",{className:De.area,ref:a,onDragOver:g.onDragOver,onDragLeave:g.onDragLeave,onDrop:g.onDrop,children:[d.length===0?c.jsx(Ao,{cwd:t,paneId:null}):d.map(y=>c.jsx(Ao,{cwd:t,paneId:y.paneId,style:y.stripStyle,focused:y.focused},y.paneId)),c.jsx(hw,{}),c.jsx(Pw,{}),t!==null&&h.length>0&&c.jsx(ky,{cwd:t,dividers:h,hostRef:a}),d.map(y=>c.jsx(Fw,{paneId:y.paneId,style:fi(p.get(y.paneId))},`drop-${y.paneId}`)),b!==null&&p.has(b.paneId)&&c.jsx(fw,{rect:p.get(b.paneId),region:b.region}),t===null&&c.jsxs("div",{className:De.emptyStack,children:[c.jsx("div",{className:De.emptyTitle,children:"No workspace open"}),c.jsx("div",{className:De.emptyHint,children:"Open a project folder to start a chat."}),c.jsx(se,{size:"sm",variant:"secondary",leftIcon:c.jsx(na,{size:14}),disabled:s!=="open",title:s!=="open"?"Connect to open a workspace":"Open a workspace folder",onClick:()=>o(),children:"Open Workspace"})]}),t!==null&&!i&&c.jsx("div",{className:De.empty,children:"No open tabs in this workspace"}),e.map((y,x)=>{const m=hy[y.kind],S=u[x],C=n==null?void 0:n.placement[y.id];return c.jsx("div",{className:H(De.panel,S.visible&&De.active),style:S.style,onPointerDown:()=>{t!==null&&C!==void 0&&r(t,C)},children:c.jsx(w.Suspense,{fallback:c.jsx(_r,{size:"md"}),children:c.jsx(m,{tab:y,owningPaneId:yy(y.id,n)})})},y.id)})]}),c.jsx(Da,{dropAnimation:null,children:_.draggedTab&&c.jsx(pw,{tab:_.draggedTab})})]})}const Ro=e=>`${e} file${e>1?"s":""}`;function Uw(e,t,n){let s=0,o=0;for(const[r,i]of e.entries()){if(i.size===void 0)return null;s+=i.size,r<t&&(o+=i.size)}return s<=0?null:Math.min(100,Math.floor((o+n)/s*100))}async function Ww(e,t,n){if(!t.length||!e)return;const s=t.filter(i=>n.existing.has(i.name));if(s.length>0){const i=s.map(u=>u.name).join(", ");if(!await n.confirm(`Overwrite ${s.length>1?"these files":"this file"}? ${i}`))return}const o=`Uploading ${Ro(t.length)}…`;n.setStatus({text:o,error:!1});let r=-1;try{for(const[i,a]of t.entries())await n.upload(e,a,{onProgress:u=>{const d=Uw(t,i,u);d===null||d===r||(r=d,n.setStatus({text:`${o} ${d}%`,error:!1}))}});n.setStatus({text:`Uploaded ${Ro(t.length)}`,error:!1})}catch(i){n.setStatus({text:`Upload failed: ${i instanceof Error?i.message:"unknown"}`,error:!0})}}const le=ae()(e=>({rootPath:"",expanded:new Set,expandedByRoot:new Map,draft:null,renaming:null,selected:null,setRoot:t=>e(n=>{const s=new Map(n.expandedByRoot);n.rootPath&&s.set(n.rootPath,n.expanded);const o=s.get(t);return{rootPath:t,expanded:o?new Set(o):new Set([t]),expandedByRoot:s,draft:null,selected:null,renaming:null}}),toggle:t=>e(n=>{const s=new Set(n.expanded);s.has(t)?s.delete(t):s.add(t);const o=new Map(n.expandedByRoot);return o.set(n.rootPath,s),{expanded:s,expandedByRoot:o}}),startDraft:(t,n)=>e(s=>{const o=new Set(s.expanded);o.add(t);const r=new Map(s.expandedByRoot);return s.rootPath&&r.set(s.rootPath,o),{draft:{parentPath:t,kind:n},expanded:o,expandedByRoot:r,renaming:null}}),cancelDraft:()=>e({draft:null}),startRename:t=>e({renaming:t,draft:null}),cancelRename:()=>e({renaming:null}),setSelected:t=>e({selected:t}),repathAfterMove:(t,n,s)=>e(o=>{const r=d=>d===t?n:d.startsWith(`${t}/`)?n+d.slice(t.length):d,i=new Set([...o.expanded].map(r));i.add(s);const a=new Map(o.expandedByRoot);o.rootPath&&a.set(o.rootPath,i);const u=o.selected?{path:r(o.selected.path),isDirectory:o.selected.isDirectory}:null;return{expanded:i,expandedByRoot:a,selected:u,renaming:null}})})),Ke={fileRead:e=>["file","read",e],fileDownload:e=>["file","download",e],fileText:(e,t)=>["file","text",e,t],fileDiff:(e,t,n)=>["file","diff",e,t,n],fileDiffByPath:e=>["file","diff",e],htmlAssetBundle:(e,t)=>["file","htmlAssets",e,t],htmlAssetBundleByPath:e=>["file","htmlAssets",e],explorer:e=>["explorer",e],agentList:()=>["agents","list"],providerModels:(e,t)=>["providers","models",e,t??null],providerModelsAll:()=>["providers","models"],agentTimeline:e=>["agents","timeline",e],thinkingLevels:(e,t)=>["agents","thinkingLevels",e,t??""],agentCommands:e=>["agents","commands",e],providerAuthList:()=>["providers","auth","list"],skillsList:()=>["skills","list"]};function Hw(e){const t=e.kind==="directory"||e.type==="directory"?"directory":"file";return{name:e.name??"",kind:t,size:e.size,mtimeMs:e.mtimeMs}}function Vw(e){return e.slice().sort((t,n)=>t.kind!==n.kind?t.kind==="directory"?-1:1:t.name.localeCompare(n.name))}async function yi(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 o="entries"in s?s.entries??[]:[];return{path:s.resolvedPath??t,entries:Vw(o.map(Hw))}}function Kw(e,t=!0){const n=D(s=>s.client);return Fi({queryKey:Ke.explorer(e),queryFn:()=>{if(!n)throw new Error("not connected");return yi(n,e)},enabled:!!n&&!!e&&t})}function Gw(e){const t=D(o=>o.client),n=w.useMemo(()=>Array.from(e),[e]),s=zi({queries:n.map(o=>({queryKey:Ke.explorer(o),queryFn:()=>{if(!t)throw new Error("not connected");return yi(t,o)},enabled:!!t&&!!o}))});return w.useMemo(()=>{const o=new Map;return n.forEach((r,i)=>{const a=s[i];o.set(r,{listing:a==null?void 0:a.data,isLoading:!!(a!=null&&a.isLoading),isError:!!(a!=null&&a.isError),error:a==null?void 0:a.error})}),o},[n,s])}function Yw(e){return typeof e=="object"&&e!==null&&"type"in e&&e.type==="file_changed"&&"path"in e&&typeof e.path=="string"}function Xw(e,t){const n=new Set,s=e.connection.onSessionMessage(o=>{const r=o;Yw(r)&&n.has(r.path)&&t(r.path)});return{sync(o){for(const r of n)o.has(r)||(n.delete(r),e.connection.request("file_watch_unsubscribe",{path:r}).catch(()=>{}));for(const r of o)n.has(r)||(n.add(r),e.connection.request("file_watch_subscribe",{path:r}).then(i=>{const a=i;(a==null?void 0:a.ok)===!1&&console.warn(`useExplorerWatch: ${a.error??"subscribe failed"} for "${r}"`)}).catch(()=>{}))},dispose(){s();for(const o of n)e.connection.request("file_watch_unsubscribe",{path:o}).catch(()=>{});n.clear()}}}function Jw(e){const t=D(i=>i.client),n=it(),s=w.useRef(null),o=w.useRef(null),r=Array.from(e).toSorted().join("\0");w.useEffect(()=>{var i,a;t&&(o.current!==t&&((i=s.current)==null||i.dispose(),s.current=Xw(t,u=>{n.invalidateQueries({queryKey:Ke.explorer(u)})}),o.current=t),(a=s.current)==null||a.sync(new Set(r?r.split("\0"):[])))},[t,r,n]),w.useEffect(()=>()=>{var i;(i=s.current)==null||i.dispose(),s.current=null,o.current=null},[])}async function Zw(e,t,n,s){await V().files.upload(t,n,s),await e.invalidateQueries({queryKey:["explorer"]})}function wi(){const e=it(),t=w.useCallback((s,o,r)=>Zw(e,s,o,r),[e]),n=w.useCallback(s=>V().files.saveToDisk(s),[]);return{upload:t,saveToDisk:n}}const jo={available:!1,branch:null,upstream:null,ahead:0,behind:0,detached:!1,conflictCount:0},me=ae()(e=>({subscribedCwd:null,changes:[],ignored:[],...jo,setSubscribedCwd:t=>e({subscribedCwd:t}),applyProjection:t=>{if(!t||!t.available){e({changes:[],ignored:[],...jo});return}const n=[];for(const s of t.staged)n.push({path:s.path,status:s.indexStatus==="A"?"added":s.indexStatus==="D"?"deleted":"modified",staged:!0});for(const s of t.unstaged)n.push({path:s.path,status:s.worktreeStatus==="D"?"deleted":"modified",staged:!1});for(const s of t.untracked)n.push({path:s,status:"added",staged:!1});e({changes:n,ignored:t.ignored??[],available:!0,branch:t.branch,upstream:t.upstream,ahead:t.ahead,behind:t.behind,detached:t.detached,conflictCount:t.conflicted.length})}}));function ZS(e,t){return e?e.startsWith("/")||e.startsWith("~")?e:t?`${t.replace(/\/+$/,"")}/${e}`:null:null}function Se(e){const t=e.lastIndexOf("/");return t>0?e.slice(0,t):"/"}function Qw(e,t){return!t||!e.startsWith(t)?e:e.slice(t.length).replace(/^\/+/,"")}function QS(e){if(!e.startsWith("/"))return e;const t=e.split("/"),n=[];for(const s of t)s===""||s==="."||(s===".."?n.length>0&&n.pop():n.push(s));return"/"+n.join("/")}function Po(e,t,n){if(t.kind!=="file"&&t.kind!=="directory")return null;const s=t.kind==="directory"?t.path:Se(t.path);if(s===Se(e)||s===e||s.startsWith(`${e}/`)||s!==n&&!s.startsWith(`${n}/`))return null;const o=e.split("/").pop();return{destinationDir:s,destination:`${s}/${o}`}}function Mo(e,t){if(e.kind!=="file"&&e.kind!=="directory")return null;const n=e.kind==="directory"?e.path:Se(e.path);return n!==t&&!n.startsWith(`${t}/`)?null:n}const ev={empty_path:"Nothing to move.",invalid_name:"Invalid name for the destination.",exists:"An item with that name already exists in the destination folder.",not_found:"That item or destination folder no longer exists.",not_a_directory:"The destination is not a folder.",same_path:"That item is already in this folder.",into_descendant:"A folder cannot be moved into itself.",cross_device:"Cannot move across filesystems."};async function tv(e,t,n){const s=await e.connection.request("file_move_request",{path:t,destination:n});if(!s.ok){const o=s.error??"";throw new Error(ev[o]??o??"Failed to move")}return s.destination??n}function No(e,t){return t===0?e:`${e} — closed ${t} ${t===1?"diff tab":"diff tabs"}`}function nv(e){return`${e.kind}:${e.path}`}function vi(e,t){return e.endsWith("/")?`${e}${t}`:`${e}/${t}`}function bi(e,t,n,s,o,r,i){var u;(r==null?void 0:r.parentPath)===t&&e.push({kind:"draft",path:`${t}::draft`,depth:n,draftKind:r.kind,parentPath:t});const a=o.get(t);if(!a||a.isLoading){e.push({kind:"loading",path:t,depth:n});return}if(a.isError){const d=a.error instanceof Error?a.error.message:"failed to load";e.push({kind:"error",path:t,depth:n,message:d});return}for(const d of((u=a.listing)==null?void 0:u.entries)??[])sv(e,t,d,n,s,o,r,i)}function sv(e,t,n,s,o,r,i,a){const u=vi(t,n.name),d=n.kind==="directory",h=d&&o.has(u);u===a?e.push({kind:"rename",path:u,depth:s,name:n.name,isDirectory:d}):d?e.push({kind:"directory",path:u,name:n.name,depth:s,expanded:h}):e.push({kind:"file",path:u,name:n.name,depth:s}),h&&bi(e,u,s+1,o,r,i,a)}function ov(e,t,n,s,o){if(!e)return[];const r=t.has(e),i=[{kind:"directory",path:e,name:e.split("/").pop()||e,depth:0,expanded:r}];return r&&bi(i,e,1,t,n,s,o),i}const rv=()=>{};function iv(e,t){return e===void 0?t:e==="deleted"||t==="deleted"?"deleted":e==="added"||t==="added"?"added":"modified"}function av(e){return e==="added"?"added":"modified"}function cv(e,t){if(!e||t.length===0)return rv;const n=e.replace(/\/+$/,""),s=new Map,o=new Map,r=[];for(const i of t){const a=i.path.endsWith("/"),u=a?i.path.slice(0,-1):i.path;if(!u)continue;const d=`${n}/${u}`;s.set(d,iv(s.get(d),i.status)),a&&r.push(d);const h=av(i.status);let p=Se(d);for(;p.length>n.length&&p.startsWith(n);){const _=o.get(p);o.set(p,_===void 0||_===h?h:"modified");const g=Se(p);if(g===p)break;p=g}}return i=>{const a=s.get(i)??o.get(i);if(a!==void 0)return a;for(const u of r)if(i.startsWith(`${u}/`))return"added"}}const lv=()=>!1;function uv(e,t){if(!e||t.length===0)return lv;const n=e.replace(/\/+$/,""),s=new Set,o=[];for(const r of t){const i=r.endsWith("/"),a=i?r.slice(0,-1):r;if(!a)continue;const u=`${n}/${a}`;s.add(u),i&&o.push(`${u}/`)}return r=>{if(s.has(r))return!0;for(const i of o)if(r.startsWith(i))return!0;return!1}}const dv="_container_1wywk_1",fv="_header_1wywk_7",pv="_uploadButton_1wywk_14",hv="_hiddenInput_1wywk_33",gv="_status_1wywk_36",mv="_statusError_1wywk_37",_v="_rowAction_1wywk_50",yv="_item_1wywk_53",wv="_list_1wywk_60",vv="_active_1wywk_83",bv="_selected_1wywk_88",Sv="_dropTarget_1wywk_92",kv="_rootItem_1wywk_99",xv="_dirName_1wywk_98",Iv="_chevronSlot_1wywk_104",Ev="_chevron_1wywk_104",Tv="_chevronOpen_1wywk_115",Cv="_icon_1wywk_118",Av="_name_1wywk_125",Rv="_gitAdded_1wywk_140",jv="_gitModified_1wywk_145",Pv="_gitDeleted_1wywk_150",Mv="_hiddenEntry_1wywk_162",Nv="_statusRow_1wywk_171",qv="_statusRowError_1wywk_182",Dv="_draftInput_1wywk_185",W={container:dv,header:fv,uploadButton:pv,hiddenInput:hv,status:gv,statusError:mv,rowAction:_v,item:yv,list:wv,active:vv,selected:bv,dropTarget:Sv,rootItem:kv,dirName:xv,chevronSlot:Iv,chevron:Ev,chevronOpen:Tv,icon:Cv,name:Av,gitAdded:Rv,gitModified:jv,gitDeleted:Pv,hiddenEntry:Mv,statusRow:Nv,statusRowError:qv,draftInput:Dv};function Ov({draftKind:e,indentStyle:t,onSubmit:n,onCancel:s}){const[o,r]=w.useState("");return c.jsxs("div",{className:W.item,style:t,onClick:i=>i.stopPropagation(),children:[c.jsx("span",{className:W.chevronSlot}),c.jsx("span",{className:W.icon,children:e==="directory"?c.jsx(Ge,{size:16}):c.jsx(hn,{size:16})}),c.jsx("input",{className:W.draftInput,autoFocus:!0,spellCheck:!1,placeholder:e==="directory"?"New folder":"New file",value:o,onChange:i=>r(i.target.value),onKeyDown:i=>{if(i.key==="Enter"){i.preventDefault();const a=o.trim();a?n(a):s()}else i.key==="Escape"&&(i.preventDefault(),s())},onBlur:s})]})}function Lv({name:e,isDirectory:t,indentStyle:n,onSubmit:s,onCancel:o}){const[r,i]=w.useState(e),a=w.useRef(null);return w.useEffect(()=>{const u=a.current;if(!u)return;u.focus();const d=e.lastIndexOf("."),h=t||d<=0?e.length:d;u.setSelectionRange(0,h)},[e,t]),c.jsxs("div",{className:W.item,style:n,onClick:u=>u.stopPropagation(),children:[c.jsx("span",{className:W.chevronSlot}),c.jsx("span",{className:W.icon,children:t?c.jsx(Ge,{size:16}):c.jsx(hn,{size:16})}),c.jsx("input",{ref:a,className:W.draftInput,spellCheck:!1,value:r,onChange:u=>i(u.target.value),onKeyDown:u=>{if(u.key==="Enter"){u.preventDefault();const d=r.trim();!d||d===e?o():s(d)}else u.key==="Escape"&&(u.preventDefault(),o())},onBlur:o})]})}const $v=14,Bv={added:W.gitAdded,modified:W.gitModified,deleted:W.gitDeleted};function Fv({row:e,active:t,selected:n,dropTarget:s,gitStatus:o,hidden:r,isRoot:i,onToggle:a,onOpenFile:u,onContextMenu:d,onSubmitDraft:h,onCancelDraft:p,onSubmitRename:_,onCancelRename:g,onDragStartRow:b,onDragEndRow:y}){const x={paddingLeft:8+e.depth*$v};if(e.kind==="loading")return c.jsx("div",{className:W.statusRow,style:x,children:"Loading…"});if(e.kind==="error")return c.jsx("div",{className:H(W.statusRow,W.statusRowError),style:x,children:e.message??"failed to load"});if(e.kind==="draft")return c.jsx(Ov,{draftKind:e.draftKind,indentStyle:x,onSubmit:S=>h(e.parentPath,S),onCancel:p});if(e.kind==="rename")return c.jsx(Lv,{name:e.name,isDirectory:e.isDirectory,indentStyle:x,onSubmit:S=>_(e.path,S),onCancel:g});const m=e.kind==="directory";return c.jsxs("div",{className:H(W.item,i&&W.rootItem,t&&W.active,n&&W.selected,s&&W.dropTarget,o&&Bv[o],r&&W.hiddenEntry),style:x,title:e.path,draggable:!i,onDragStart:S=>b(e.path,m,S),onDragEnd:y,onClick:()=>m?a(e.path):u(e.path),onContextMenu:S=>{S.preventDefault(),S.stopPropagation(),d(e.path,m,S.clientX,S.clientY)},children:[c.jsx("span",{className:W.chevronSlot,children:m&&c.jsx(Zn,{size:14,className:H(W.chevron,e.expanded&&W.chevronOpen)})}),c.jsx("span",{className:W.icon,children:m?c.jsx(Ge,{size:16}):c.jsx(hn,{size:16})}),c.jsx("span",{className:m?W.dirName:W.name,children:e.name}),c.jsx(Pe,{className:W.rowAction,title:"Actions",onClick:S=>{S.stopPropagation();const C=S.currentTarget.getBoundingClientRect();d(e.path,m,C.left,C.bottom)},children:c.jsx(Xn,{size:14})})]})}const zv={empty_path:"Nothing to delete.",not_found:"That item no longer exists."};async function Uv(e,t){const n=await e.connection.request("file_delete_request",{path:t});if(!n.ok){const s=n.error??"";throw new Error(zv[s]??s??"Failed to delete")}}function Wv(){const e=L(B=>B.fileMenu),t=L(B=>B.closeFileMenu),n=D(B=>B.client),s=le(B=>B.startDraft),o=le(B=>B.startRename),r=le(B=>B.rootPath),i=q(B=>B.activeWorkspaceCwd),a=Ve(B=>B.isViewerEnabled("molviewer")),{saveToDisk:u}=wi(),d=it(),h=w.useRef(null),[p,_]=w.useState(!1);if(w.useEffect(()=>{_(e!==null)},[e]),!e)return null;const g=e.path.split("/").pop()||e.path;function b(B){_(B),B||t()}function y(){e&&(t(),gs(e.path,i||"~"))}function x(){e&&(t(),mi(e.path,i||"~"))}function m(){e&&(t(),gi(e.path,i||"~"))}async function S(){if(e){t();try{await V().clipboard.writeText(e.path)}catch{await V().dialogs.alert("Failed to copy to clipboard.")}}}async function C(){if(e){t();try{await V().clipboard.writeText(Qw(e.path,r)||"/")}catch{await V().dialogs.alert("Failed to copy to clipboard.")}}}async function E(){if(e){t();try{await u(e.path)}catch(B){await V().dialogs.alert(`Failed to download: ${B instanceof Error?B.message:String(B)}`)}}}async function T(){if(!e)return;const B=e.isDirectory?"folder (and everything inside it)":"file";if(!await V().dialogs.confirm(`Permanently delete this ${B}? "${g}" — this cannot be undone.`))return t();if(t(),!n){await V().dialogs.alert("Not connected — cannot delete remotely.");return}try{await Uv(n,e.path),await d.invalidateQueries({queryKey:["explorer"]}),q.getState().closeByPathPrefix(e.path)}catch(ce){await V().dialogs.alert(`Failed to delete: ${ce instanceof Error?ce.message:String(ce)}`)}}function $(B){if(!e)return;const ne=e.isDirectory?e.path:Se(e.path);t(),s(ne,B)}function ie(){e&&(t(),o(e.path))}return c.jsxs(jt,{open:p,onOpenChange:b,modal:!1,children:[c.jsx(Pt,{asChild:!0,children:c.jsx(_n,{ref:h,x:e.x,y:e.y})}),c.jsx(qt,{minWidth:140,children:e.background?c.jsxs(c.Fragment,{children:[c.jsxs(G,{onSelect:()=>$("file"),children:[c.jsx(qn,{size:13}),"New File"]}),c.jsxs(G,{onSelect:()=>$("directory"),children:[c.jsx(tn,{size:13}),"New Folder"]}),c.jsx(We,{}),c.jsxs(G,{onSelect:S,children:[c.jsx(Ft,{size:13}),"Copy Current Directory Path"]}),c.jsxs(G,{onSelect:C,children:[c.jsx(Ft,{size:13}),"Copy Current Directory Relative Path"]})]}):c.jsxs(c.Fragment,{children:[!e.isDirectory&&c.jsxs(c.Fragment,{children:[c.jsxs(G,{onSelect:y,children:[c.jsx(sa,{size:13}),"Open"]}),a&&c.jsxs(G,{onSelect:x,children:[c.jsx(pn,{size:13}),"Open in MolViewer"]}),a&&hi(e.path)&&c.jsxs(G,{onSelect:m,children:[c.jsx(oa,{size:13}),"Open as Text"]}),c.jsx(We,{})]}),e.isDirectory&&c.jsxs(c.Fragment,{children:[c.jsxs(G,{onSelect:()=>$("file"),children:[c.jsx(qn,{size:13}),"New File"]}),c.jsxs(G,{onSelect:()=>$("directory"),children:[c.jsx(tn,{size:13}),"New Folder"]}),c.jsx(We,{})]}),c.jsxs(G,{onSelect:S,children:[c.jsx(Ft,{size:13}),"Copy Absolute Path"]}),c.jsxs(G,{onSelect:C,children:[c.jsx(Ft,{size:13}),"Copy Relative Path"]}),c.jsx(We,{}),!e.isDirectory&&c.jsxs(c.Fragment,{children:[c.jsxs(G,{onSelect:E,children:[c.jsx(ra,{size:13}),"Download"]}),c.jsx(We,{})]}),c.jsxs(G,{onSelect:ie,children:[c.jsx(Lo,{size:13}),"Rename"]}),c.jsxs(G,{danger:!0,onSelect:T,children:[c.jsx(Jn,{size:13}),"Delete"]})]})})]})}const Hv={empty_path:"Choose a folder first.",invalid_name:'Invalid name — cannot be empty or contain "/".',exists:"An item with that name already exists here.",not_found:"That folder no longer exists.",not_a_directory:"That path is not a folder.",unreadable:"That folder is not readable."};class Vv extends Error{constructor(t,n){super(n),this.code=t,this.name="CreateEntryError"}}async function Si(e,t,n,s){const o=await e.connection.request("file_create_request",{path:t,name:n,kind:s});if(!o.ok){const r=o.error??"";throw new Vv(r,Hv[r]??r??"Failed to create")}return o.path??(t.endsWith("/")?`${t}${n}`:`${t}/${n}`)}const Kv=28,pt="application/x-pi-studio-path",Pn="Files";function Gv(){const e=D(k=>k.client),t=le(k=>k.rootPath),n=le(k=>k.expanded),s=le(k=>k.setRoot),o=le(k=>k.toggle),r=le(k=>k.draft),i=le(k=>k.startDraft),a=le(k=>k.cancelDraft),u=le(k=>k.renaming),d=le(k=>k.cancelRename),h=le(k=>k.selected),p=le(k=>k.setSelected),_=q(k=>k.activeWorkspaceCwd),g=at(),b=q(k=>k.tabs.find(P=>P.id===k.activeTabId)),y=me(k=>k.changes),x=me(k=>k.ignored),{upload:m}=wi(),S=L(k=>k.openFileMenu),C=it(),[E,T]=w.useState(null),[$,ie]=w.useState(null),B=w.useRef(null),ne=w.useRef(null),ce=w.useRef(null),Y=w.useRef(null),ye=(b==null?void 0:b.kind)==="file"||(b==null?void 0:b.kind)==="molecule"?b.data.path:null,ke=h?h.isDirectory?h.path:Se(h.path):t,I=w.useRef(null);w.useEffect(()=>{if(!e)return;const k=$e(_||"~",g);k.startsWith("~")||I.current!==k&&(I.current=k,s(k))},[e,_,g,s]);const fe=Gw(n);Jw(n);const $t=w.useMemo(()=>ov(t,n,fe,r,u),[t,n,fe,r,u]),Ti=w.useMemo(()=>cv(t,y),[t,y]),Ci=w.useMemo(()=>uv(t,x),[t,x]),ws=Ui({count:$t.length,getScrollElement:()=>ne.current,estimateSize:()=>Kv,overscan:12,getItemKey:k=>{const P=$t[k];return P?nv(P):k}});function vn(k){gs(k,_||"~")}function Ai(k,P,U){U.dataTransfer.setData(pt,k),P||U.dataTransfer.setData(Ot.path,k),U.dataTransfer.setData(ps,ry(k,P)),U.dataTransfer.effectAllowed="copyMove",ce.current=k}function Ri(){ce.current=null}function bn(){ie(null),Y.current&&(clearTimeout(Y.current.timer),Y.current=null)}function vs(k){var U;if(((U=Y.current)==null?void 0:U.path)===k.path||(Y.current&&clearTimeout(Y.current.timer),Y.current=null,k.kind!=="directory"||k.expanded))return;const P=window.setTimeout(()=>o(k.path),700);Y.current={path:k.path,timer:P}}async function bs(k,P){if(!e)throw new Error("Not connected.");const U=await tv(e,k,P),F=Se(U);await C.invalidateQueries({queryKey:Ke.explorer(Se(k))}),await C.invalidateQueries({queryKey:Ke.explorer(F)}),le.getState().repathAfterMove(k,U,F);const X=q.getState().tabs.filter(xe=>{if(xe.kind!=="file"&&xe.kind!=="diff"&&xe.kind!=="molecule")return!1;const Bt=xe.data.path;return Bt===k||((Bt==null?void 0:Bt.startsWith(`${k}/`))??!1)}),Ne=X.some(xe=>(xe.kind==="file"||xe.kind==="molecule")&&xe.data.path===k),ct=X.filter(xe=>xe.kind==="diff").length;return q.getState().closeByPathPrefix(k),Ne&&vn(U),{destination:U,closedDiffs:ct}}async function ji(k,P){const U=Po(k,P,t);if(!U||!e)return;const F=k.split("/").pop()??k;T({text:`Moving ${F}…`,error:!1});try{const{destination:X,closedDiffs:Ne}=await bs(k,U.destination);T({text:No(`Moved to ${Se(X).split("/").pop()||"/"}`,Ne),error:!1})}catch(X){T({text:X instanceof Error?X.message:"Failed to move",error:!0})}}async function Pi(k,P){const U=(r==null?void 0:r.kind)??"file";if(a(),!!e)try{const F=await Si(e,k,P,U);await C.invalidateQueries({queryKey:Ke.explorer(k)}),T({text:`Created ${F}`,error:!1}),U==="file"&&vn(F)}catch(F){T({text:F instanceof Error?F.message:"Failed to create",error:!0})}}async function Mi(k,P){if(d(),!e)return;const U=vi(Se(k),P);T({text:`Renaming ${k.split("/").pop()}…`,error:!1});try{const{destination:F,closedDiffs:X}=await bs(k,U);T({text:No(`Renamed to ${F.split("/").pop()}`,X),error:!1})}catch(F){T({text:F instanceof Error?F.message:"Failed to rename",error:!0})}}function Sn(k,P){var F;const U=(F=fe.get(k))==null?void 0:F.listing;return Ww(k,P,{existing:new Set((U==null?void 0:U.entries.map(X=>X.name))??[]),confirm:X=>V().dialogs.confirm(X),upload:m,setStatus:T})}function Ss(k,P){if(k.preventDefault(),k.dataTransfer.types.includes(pt)){const X=k.dataTransfer.getData(pt)||ce.current;bn(),X&&ji(X,P??{kind:"directory",path:t});return}if(bn(),!k.dataTransfer.types.includes(Pn))return;const U=P?Mo(P,t):t;if(!U)return;const F=Array.from(k.dataTransfer.files);F.length&&Sn(U,F)}function Ni(k){const P=k.dataTransfer.types.includes(pt);!P&&!k.dataTransfer.types.includes(Pn)||(k.preventDefault(),k.dataTransfer.dropEffect=P?"move":"copy")}return e?c.jsxs("div",{className:W.container,onDragOver:Ni,onDragLeave:k=>{k.currentTarget.contains(k.relatedTarget)||bn()},onDrop:k=>Ss(k),children:[c.jsxs("div",{className:W.header,children:[c.jsx("button",{type:"button",className:W.uploadButton,onClick:()=>i(ke,"file"),disabled:!t,title:h?`New file in ${ke.split("/").pop()||"/"}`:"New file in workspace root",children:c.jsx(qn,{size:14})}),c.jsx("button",{type:"button",className:W.uploadButton,onClick:()=>i(ke,"directory"),disabled:!t,title:h?`New folder in ${ke.split("/").pop()||"/"}`:"New folder in workspace root",children:c.jsx(tn,{size:14})}),c.jsxs("button",{type:"button",className:W.uploadButton,onClick:()=>{var P;const k=V().files;if(!k.pickUploads)return(P=B.current)==null?void 0:P.click();k.pickUploads().then(U=>Sn(t,U),U=>T({text:`Upload failed: ${U instanceof Error?U.message:"unknown"}`,error:!0}))},disabled:!t,title:"Upload files to the workspace root",children:[c.jsx(ia,{size:14}),c.jsx("span",{children:"Upload"})]}),c.jsx("input",{ref:B,type:"file",multiple:!0,className:W.hiddenInput,onChange:k=>{Sn(t,Array.from(k.target.files??[])),k.target.value=""}})]}),E&&c.jsx("div",{className:E.error?W.statusError:W.status,children:E.text}),c.jsxs("div",{className:W.list,ref:ne,onContextMenu:k=>{k.preventDefault(),S(t,!0,k.clientX,k.clientY,!0)},children:[$t.length===0&&c.jsx(Le,{children:"No files loaded"}),c.jsx("div",{style:{position:"relative",height:ws.getTotalSize()},children:ws.getVirtualItems().map(k=>{const P=$t[k.index];if(!P)return null;const U=P.path===t&&P.kind==="directory";return c.jsx("div",{"data-index":k.index,style:{position:"absolute",top:0,left:0,width:"100%",height:k.size,transform:`translateY(${k.start}px)`},onDragEnter:F=>{if(F.dataTransfer.types.includes(pt)){const Ne=ce.current;if(!Ne)return;const ct=Po(Ne,P,t);ie(ct?P.path:null),vs(P);return}if(!F.dataTransfer.types.includes(Pn))return;const X=Mo(P,t);ie(X?P.path:null),vs(P)},onDrop:F=>{F.stopPropagation(),Ss(F,P)},children:c.jsx(Fv,{row:P,active:(P.kind==="file"||P.kind==="directory")&&P.path===ye,selected:(P.kind==="file"||P.kind==="directory")&&P.path===(h==null?void 0:h.path),gitStatus:!U&&(P.kind==="file"||P.kind==="directory")?Ti(P.path):void 0,hidden:!U&&(P.kind==="file"||P.kind==="directory")&&(P.name.startsWith(".")||Ci(P.path)),isRoot:U,onToggle:F=>{p({path:F,isDirectory:!0}),o(F)},onOpenFile:F=>{p({path:F,isDirectory:!1}),vn(F)},onContextMenu:(F,X,Ne,ct)=>S(F,X,Ne,ct,U),onSubmitDraft:(F,X)=>void Pi(F,X),onCancelDraft:a,onSubmitRename:(F,X)=>void Mi(F,X),onCancelRename:d,onDragStartRow:Ai,onDragEndRow:Ri,dropTarget:(P.kind==="file"||P.kind==="directory")&&P.path===$})},k.key)})})]}),c.jsx(Wv,{})]}):c.jsx(Le,{children:"Connect to browse files"})}const Yv="_list_1n3q6_1",Xv="_summary_1n3q6_4",Jv="_item_1n3q6_11",Zv="_badge_1n3q6_23",Qv="_added_1n3q6_30",eb="_modified_1n3q6_34",tb="_deleted_1n3q6_38",nb="_name_1n3q6_42",Je={list:Yv,summary:Xv,item:Jv,badge:Zv,added:Qv,modified:eb,deleted:tb,name:nb},sb={added:"A",modified:"M",deleted:"D"};function ob(){const t=q(r=>r.activeWorkspaceCwd)||"~",n=me(r=>r.changes),s=q(r=>r.open);function o(r,i){s({id:Q.diff(r,i),kind:"diff",label:r.split("/").pop()||r,closable:!0,data:{path:r,staged:i},workspaceCwd:t})}return n.length===0?c.jsx(Le,{children:"No changes detected"}):c.jsxs("div",{className:Je.list,children:[c.jsxs("div",{className:Je.summary,children:[n.length," changed file",n.length===1?"":"s"]}),n.map((r,i)=>c.jsxs("div",{className:Je.item,onClick:()=>o(r.path,r.staged),children:[c.jsx("span",{className:H(Je.badge,Je[r.status]),children:sb[r.status]}),c.jsx("span",{className:Je.name,children:r.path})]},`${r.path}-${r.staged}-${i}`))]})}const rb="_tabBar_1tvri_1",ib="_tabBtn_1tvri_7",ab="_active_1tvri_23",cb="_refreshBtn_1tvri_27",lb="_content_1tvri_31",ze={tabBar:rb,tabBtn:ib,active:ab,refreshBtn:cb,content:lb};function ub(){const e=L(a=>a.rightSidebarTab),t=L(a=>a.setRightSidebarTab),s=q(a=>a.activeWorkspaceCwd)||"~",o=D(a=>a.client),r=it();function i(){r.invalidateQueries({queryKey:["explorer"]}),o&&s&&o.connection.request("checkout_refresh_request",{cwd:s}).catch(()=>{})}return c.jsxs(yr,{children:[c.jsxs("div",{className:ze.tabBar,children:[c.jsxs("button",{type:"button",className:H(ze.tabBtn,e==="files"&&ze.active),onClick:()=>t("files"),children:[c.jsx(Ge,{size:13}),"Files"]}),c.jsxs("button",{type:"button",className:H(ze.tabBtn,e==="changes"&&ze.active),onClick:()=>t("changes"),children:[c.jsx(Fo,{size:13}),"Changes"]}),c.jsx(se,{size:"xs",variant:"ghost",iconOnly:!0,title:"Refresh",className:ze.refreshBtn,onClick:i,children:c.jsx(aa,{size:13})})]}),c.jsx("div",{className:ze.content,children:e==="files"?c.jsx(Gv,{}):c.jsx(ob,{})})]})}function db(e,t){var r;const{bySession:n,setStats:s}=ms.getState(),o=(r=n[e])==null?void 0:r.contextWindow;s(e,{contextTokens:t,contextPercent:o?t*100/o:void 0,contextEstimated:!0})}const ms=ae()(e=>({bySession:{},setStats(t,n){e(s=>({bySession:{...s.bySession,[t]:{...s.bySession[t],...n}}}))},clear(t){e(n=>{const{[t]:s,...o}=n.bySession;return{bySession:o}})}})),fb=12e3;function pb(e,t){return e==="running"&&t!=="running"}function qo(e,t){var s,o,r,i,a,u;const n={};((s=t.contextUsage)==null?void 0:s.tokens)!=null&&(n.contextTokens=t.contextUsage.tokens,n.contextEstimated=!1),((o=t.contextUsage)==null?void 0:o.contextWindow)!==void 0&&(n.contextWindow=t.contextUsage.contextWindow),((r=t.contextUsage)==null?void 0:r.percent)!=null&&(n.contextPercent=t.contextUsage.percent),((i=t.tokens)==null?void 0:i.total)!==void 0&&(n.totalTokens=t.tokens.total),((a=t.tokens)==null?void 0:a.input)!==void 0&&(n.inputTokens=t.tokens.input),((u=t.tokens)==null?void 0:u.output)!==void 0&&(n.outputTokens=t.tokens.output),t.cost!==void 0&&(n.cost=t.cost),t.model!==void 0&&(n.model=t.model,j.getState().setModel(e,t.model)),ms.getState().setStats(e,n)}function hb(e){const t=D(a=>a.client),n=D(a=>a.status),s=j(a=>{var u;return e?((u=a.sessions[e])==null?void 0:u.agentId)??null:null}),o=j(a=>{var u;return e?(u=a.sessions[e])==null?void 0:u.status:void 0}),r=w.useRef(!1),i=w.useRef(void 0);w.useEffect(()=>{if(n!=="open"||!t||!e||!s)return;let a=!1;const u=async()=>{if(!r.current){r.current=!0;try{const h=await t.agent(s).sessionStats();a||qo(e,h)}catch{}finally{r.current=!1}}};u();const d=setInterval(()=>void u(),fb);return()=>{a=!0,clearInterval(d)}},[n,t,e,s]),w.useEffect(()=>{const a=i.current;i.current=o,pb(a,o)&&(n!=="open"||!t||!e||!s||(r.current=!1,t.agent(s).sessionStats().then(u=>qo(e,u)).catch(()=>{})))},[o,n,t,e,s])}function gb(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 mb(e){const t=D(r=>r.client),n=me(r=>r.applyProjection),s=me(r=>r.setSubscribedCwd),o=w.useRef(t);return o.current=t,w.useEffect(()=>{if(!t||!e)return;let r=!1;t.connection.request("checkout_status_subscribe",{cwd:e}).catch(()=>{}),s(e);const i=t.connection.onSessionMessage(a=>{if(r)return;const u=a;gb(u)&&u.cwd===e&&n(u.projection)});return t.connection.request("checkout_refresh_request",{cwd:e}).catch(()=>{}),()=>{r=!0,i(),t.connection.request("checkout_status_unsubscribe",{cwd:e}).catch(()=>{}),s(null)}},[t,e,n,s]),{refresh(){const r=o.current;!r||!e||r.connection.request("checkout_refresh_request",{cwd:e}).catch(()=>{})}}}const _s="--";function xt(e){return e===void 0?_s:e<1e3?String(e):e<1e6?`${(e/1e3).toFixed(1)}k`:`${(e/1e6).toFixed(1)}M`}function _b(e){return e==null?_s:e>0&&e<1?"<1%":`${Math.round(e)}%`}function yb(e){if(e===void 0)return _s;const t=e<1?4:2;return`$${e.toFixed(t)}`}function wb(e,t){return t?e===t?"~":e.startsWith(`${t}/`)?`~${e.slice(t.length)}`:e:e}function vb(e,t){const n=[];return e>0&&n.push(`↑${e}`),t>0&&n.push(`↓${t}`),n.join(" ")}function ki(e){return e.some(t=>t.kind==="compaction"&&t.phase==="started")}function bb(e){return e.find(t=>t.kind==="compaction"&&t.phase==="started")}function Do(e){return e<1e3?String(e):e<1e6?`${+(e/1e3).toFixed(1)}k`:`${+(e/1e6).toFixed(1)}M`}function Sb(e){let t;if(e.reason==="manual"?t="manual":e.reason==="threshold"?t="auto · threshold":e.reason==="overflow"&&(t="auto · overflow"),!!t)return e.willRetry?`${t} · retrying turn`:t}function kb(e){const t=Sb(e),n=t?` (${t})`:"";switch(e.phase){case"started":return`Compacting context…${n}`;case"completed":{if(e.tokensBefore===void 0)return`Context compacted${n}`;const s=Do(e.tokensBefore);return`Context compacted · ${e.estimatedTokensAfter===void 0?`${s} before`:`${s} → ~${Do(e.estimatedTokensAfter)}`}${n}`}case"failed":return`Compaction failed${e.error?`: ${e.error}`:""}${n}`;case"canceled":return`Compaction canceled${n}`}}const Mn=new Set;function Nn(e,t){const{[t]:n,...s}=e;return s}const Qt=ae()((e,t)=>({pendingBySession:{},lastErrorBySession:{},async compactSession(n,s){var u;const{client:o,status:r,serverInfo:i}=D.getState();if(!o||r!=="open")return{ok:!1,reason:"disconnected"};const a=j.getState().sessions[n];if(!(a!=null&&a.agentId))return{ok:!1,reason:"no-agent"};if(a.status==="running")return{ok:!1,reason:"running"};if(t().pendingBySession[n]||ki(a.timeline.rows))return{ok:!1,reason:"compacting"};e(d=>({pendingBySession:{...d.pendingBySession,[n]:!0},lastErrorBySession:Nn(d.lastErrorBySession,n)}));try{const d=await o.agent(a.agentId).compact(s);return!((u=i==null?void 0:i.features)!=null&&u.compactionEvents)&&d.estimatedTokensAfter!=null&&db(n,d.estimatedTokensAfter),{ok:!0}}catch(d){if(Mn.has(n))return{ok:!1,reason:"canceled"};const h=d instanceof Error?d.message:String(d);return e(p=>({lastErrorBySession:{...p.lastErrorBySession,[n]:h}})),{ok:!1,reason:"failed",message:h}}finally{Mn.delete(n),e(d=>({pendingBySession:Nn(d.pendingBySession,n)}))}},async cancelCompaction(n){var r;const s=D.getState().client,o=(r=j.getState().sessions[n])==null?void 0:r.agentId;!s||!o||(t().pendingBySession[n]&&Mn.add(n),await s.agent(o).interrupt())},clearError(n){e(s=>({lastErrorBySession:Nn(s.lastErrorBySession,n)}))}}));function xb(e){const t=j(s=>{var o;return e?ki(((o=s.sessions[e])==null?void 0:o.timeline.rows)??[]):!1}),n=Qt(s=>e?s.pendingBySession[e]===!0:!1);return t||n}const Ib=.7,Eb=.9;function xi(e,t){if(t)return{kind:"compacting"};const n=(e==null?void 0:e.contextEstimated)===!0;return(e==null?void 0:e.contextTokens)!==void 0&&e.contextWindow?{kind:"value",fraction:e.contextTokens/e.contextWindow,estimated:n}:(e==null?void 0:e.contextPercent)!==void 0?{kind:"value",fraction:e.contextPercent/100,estimated:n}:{kind:"unknown"}}function Tb(e){return e>=Eb?"danger":e>=Ib?"warning":"normal"}function Ii(e){return e.kind==="value"?Math.min(Math.max(e.fraction,0),1):0}function ys(e){switch(e.kind){case"compacting":return"Compacting…";case"unknown":return"—";case"value":return`${e.estimated?"~":""}${_b(e.fraction*100)}`}}function Yn(e,t){if(t.kind==="compacting")return"Compacting context…";if(t.kind==="unknown")return"Context usage unknown";const n=xt(e==null?void 0:e.contextWindow),s=(e==null?void 0:e.contextTokens)!==void 0&&e.contextWindow?xt(e.contextTokens):void 0;return s===void 0?`${ys(t)} of ${n} tokens`:t.estimated?`≈ ${s} / ${n} tokens (estimate)`:`${s} / ${n} tokens`}function Cb(e){return e.kind==="value"?Math.round(Ii(e)*100):void 0}const Ab="_meter_mqbjo_1",Rb="_meterWide_mqbjo_7",jb="_trackWide_mqbjo_12",Pb="_track_mqbjo_12",Mb="_trackUnknown_mqbjo_27",Nb="_fill_mqbjo_32",qb="_fillWarning_mqbjo_39",Db="_fillDanger_mqbjo_43",Ob="_fillEstimated_mqbjo_48",Lb="_sweep_mqbjo_58",$b="_label_mqbjo_90",ge={meter:Ab,meterWide:Rb,trackWide:jb,track:Pb,trackUnknown:Mb,fill:Nb,fillWarning:qb,fillDanger:Db,fillEstimated:Ob,sweep:Lb,label:$b};function Oo({stats:e,compacting:t,wide:n=!1}){const s=xi(e,t),o=ys(s),r=Cb(s),i=s.kind==="value"&&s.estimated,a=s.kind==="value"?Tb(s.fraction):"normal";return c.jsxs("span",{className:H(ge.meter,n&&ge.meterWide),title:Yn(e,s),children:[c.jsxs("span",{role:"meter","aria-label":"Context usage","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":r,"aria-valuetext":s.kind==="value"&&!i?void 0:o,className:H(ge.track,n&&ge.trackWide,s.kind==="unknown"&&ge.trackUnknown,s.kind==="compacting"&&ge.trackCompacting),children:[s.kind==="value"&&c.jsx("span",{className:H(ge.fill,a==="warning"&&ge.fillWarning,a==="danger"&&ge.fillDanger,i&&ge.fillEstimated),style:{width:`${Ii(s)*100}%`}}),s.kind==="compacting"&&c.jsx("span",{className:ge.sweep})]}),c.jsx("span",{className:ge.label,children:o})]})}function Bb(e){return e.compacting?{kind:"cancel"}:e.connected?e.hasAgent?e.running?{kind:"disabled",note:"Wait for the agent to finish"}:{kind:"compact"}:{kind:"disabled",note:"Nothing to compact yet"}:{kind:"disabled",note:"Not connected"}}const Fb="_trigger_fxl9k_2",zb="_body_fxl9k_19",Ub="_heading_fxl9k_25",Wb="_detail_fxl9k_29",Hb="_note_fxl9k_30",Vb="_field_fxl9k_35",Kb="_fieldLabel_fxl9k_41",Gb="_error_fxl9k_46",Yb="_actions_fxl9k_51",Ae={trigger:Fb,body:zb,heading:Ub,detail:Wb,note:Hb,field:Vb,fieldLabel:Kb,error:Gb,actions:Yb};function Xb({sessionId:e,stats:t}){const[n,s]=w.useState(""),o=xb(e),r=D(x=>x.status==="open"),i=j(x=>{var m;return((m=x.sessions[e])==null?void 0:m.agentId)??null}),a=j(x=>{var m;return((m=x.sessions[e])==null?void 0:m.status)==="running"}),u=j(x=>{var m;return bb(((m=x.sessions[e])==null?void 0:m.timeline.rows)??[])}),d=Qt(x=>x.lastErrorBySession[e]),h=Qt(x=>x.compactSession),p=Qt(x=>x.cancelCompaction),_=xi(t,o),g=Bb({compacting:o,running:a,hasAgent:i!==null,connected:r}),b=g.kind==="cancel"?u?kb(u):"Compacting…":g.note;async function y(){(await h(e,n.trim()||void 0)).ok&&s("")}return c.jsxs(Us.Root,{children:[c.jsx(Us.Trigger,{asChild:!0,children:c.jsx("button",{type:"button",className:Ae.trigger,"aria-label":"Context usage — open compaction options",children:c.jsx(Oo,{stats:t,compacting:o})})}),c.jsx(Xp,{width:320,"aria-label":"Compact context",children:c.jsxs("div",{className:Ae.body,children:[c.jsx("div",{className:Ae.heading,children:"Context"}),c.jsx(Oo,{stats:t,compacting:o,wide:!0}),c.jsx("div",{className:Ae.detail,children:_.kind==="value"?`${Yn(t,_)} (${ys(_)})`:Yn(t,_)}),c.jsxs("label",{className:Ae.field,children:[c.jsx("span",{className:Ae.fieldLabel,children:"Instructions (optional)"}),c.jsx(Cp,{value:n,rows:3,placeholder:"e.g. focus on the auth refactor",disabled:o,onChange:x=>s(x.target.value)})]}),d&&!o&&c.jsx("div",{role:"alert",className:Ae.error,children:d}),b&&c.jsx("div",{className:Ae.note,children:b}),c.jsx("div",{className:Ae.actions,children:g.kind==="cancel"?c.jsx(se,{variant:"outline",size:"sm",onClick:()=>void p(e),children:"Cancel"}):c.jsx(se,{variant:"default",size:"sm",disabled:g.kind==="disabled",onClick:()=>void y(),children:"Compact now"})})]})})]})}const Jb="_statusBar_t655h_1",Zb="_segmentGroup_t655h_16",Qb="_chevron_t655h_20",eS="_segment_t655h_16",tS="_icon_t655h_33",nS="_text_t655h_39",Ze={statusBar:Jb,segmentGroup:Zb,chevron:Qb,segment:eS,icon:tS,text:nS};function sS(){const e=j(g=>g.activeSessionId),t=j(g=>e?g.sessions[e]:void 0),n=at(),s=q(g=>g.activeWorkspaceCwd);mb(s||"");const o=me(g=>g.available),r=me(g=>g.branch),i=me(g=>g.ahead),a=me(g=>g.behind),u=me(g=>g.detached),d=me(g=>g.conflictCount),h=me(g=>g.changes.length),p=ms(g=>e?g.bySession[e]:void 0);hb(e);const _=[];if(t){const g=wb(t.cwd,n);_.push({key:"cwd",icon:c.jsx(Ge,{size:13}),text:g,title:t.cwd})}if(o){const g=vb(i,a),b=[u?"(detached)":r??"?"];g&&b.push(g),h>0&&b.push(`●${h}`),d>0&&b.push(`⚠${d}`),_.push({key:"branch",icon:c.jsx(ca,{size:13}),text:b.join(" ")})}return t&&(_.push({key:"context",icon:c.jsx(la,{size:13}),content:e?c.jsx(Xb,{sessionId:e,stats:p}):null}),_.push({key:"tokens",icon:c.jsx(ua,{size:13}),text:xt(p==null?void 0:p.totalTokens),title:`in ${xt(p==null?void 0:p.inputTokens)} / out ${xt(p==null?void 0:p.outputTokens)}`}),_.push({key:"cost",icon:c.jsx(da,{size:13}),text:yb(p==null?void 0:p.cost)})),c.jsx("div",{className:Ze.statusBar,children:_.map((g,b)=>c.jsxs("span",{className:Ze.segmentGroup,children:[b>0&&c.jsx(Zn,{size:12,className:Ze.chevron,"aria-hidden":"true"}),c.jsxs("span",{className:Ze.segment,title:g.title,children:[c.jsx("span",{className:Ze.icon,children:g.icon}),g.content??c.jsx("span",{className:Ze.text,children:g.text})]})]},g.key))})}function oS(e,t){const{order:n,sessions:s}=j.getState(),r=fs(n,s,t).find(i=>i.cwd===e);if(r!=null&&r.sessions[0]){const i=r.sessions[0].id;j.getState().activate(i);const a=j.getState().sessions[i];q.getState().open({id:Q.chat(i),kind:"chat",label:(a==null?void 0:a.title)??"New chat",closable:!0,data:{sessionId:i},workspaceCwd:e})}else Dt(e);L.getState().setCwd(e)}const rS="_pathRow_1mu84_1",iS="_pathInput_1mu84_9",aS="_createRow_1mu84_13",cS="_createInput_1mu84_21",lS="_createError_1mu84_25",uS="_list_1mu84_30",dS="_item_1mu84_37",fS="_name_1mu84_49",qe={pathRow:rS,pathInput:iS,createRow:aS,createInput:cS,createError:lS,list:uS,item:dS,name:fS};function pS(){const e=L(I=>I.cwdPickerOpen),t=L(I=>I.closeCwdPicker),n=q(I=>I.activeWorkspaceCwd),s=L(I=>I.cwd),o=D(I=>I.client),r=at(),[i,a]=w.useState("/"),[u,d]=w.useState("/"),[h,p]=w.useState(!1),[_,g]=w.useState(""),[b,y]=w.useState(null),[x,m]=w.useState(!1),S=it();w.useEffect(()=>{if(!e)return;const I=$e(n||s||"~",r);a(I),d(I),B()},[e,o,n,s,r]);const{data:C,isLoading:E,isError:T,error:$}=Kw(i,e&&!!o),ie=((C==null?void 0:C.entries)??[]).filter(I=>I.kind==="directory");function B(){p(!1),g(""),y(null)}function ne(I){const fe=I.length>1?I.replace(/\/+$/,"")||"/":I;a(fe),d(fe),B()}function ce(){ne(i.split("/").slice(0,-1).join("/")||"/")}function Y(){ne(u.trim())}async function ye(){const I=_.trim();if(!(!I||!o||x)){m(!0),y(null);try{const fe=await Si(o,i,I,"directory");await S.invalidateQueries({queryKey:Ke.explorer(i)}),ne(fe)}catch(fe){y(fe instanceof Error?fe.message:"Failed to create folder")}finally{m(!1)}}}function ke(){oS(i,r),t()}return c.jsxs(Fn,{open:e,onOpenChange:I=>!I&&t(),title:"Open Workspace",footer:c.jsxs(c.Fragment,{children:[c.jsx(wr,{asChild:!0,children:c.jsx(se,{size:"sm",variant:"secondary",children:"Cancel"})}),c.jsx(se,{size:"sm",onClick:ke,children:"Open this folder"})]}),children:[c.jsxs("div",{className:qe.pathRow,children:[c.jsx(se,{size:"xs",variant:"ghost",iconOnly:!0,title:"Up",onClick:ce,children:c.jsx(fa,{size:13})}),c.jsx(rn,{className:qe.pathInput,value:u,onChange:I=>d(I.target.value),onKeyDown:I=>{I.key==="Enter"&&(I.preventDefault(),Y())}}),c.jsx(se,{size:"xs",onClick:Y,children:"Go"}),c.jsx(se,{size:"xs",variant:"ghost",iconOnly:!0,title:"New folder",disabled:!o||T||h,onClick:()=>{p(!0),g(""),y(null)},children:c.jsx(tn,{size:13})})]}),h&&c.jsxs(c.Fragment,{children:[c.jsxs("div",{className:qe.createRow,children:[c.jsx(Ge,{size:14}),c.jsx(rn,{className:qe.createInput,autoFocus:!0,placeholder:"New folder name",value:_,onChange:I=>g(I.target.value),onKeyDown:I=>{I.key==="Enter"?(I.preventDefault(),ye()):I.key==="Escape"&&(I.preventDefault(),I.stopPropagation(),B())}}),c.jsx(se,{size:"xs",loading:x,disabled:!_.trim()||x,onClick:()=>void ye(),children:"Create"}),c.jsx(se,{size:"xs",variant:"secondary",onClick:B,children:"Cancel"})]}),b&&c.jsx("div",{className:qe.createError,children:b})]}),c.jsx("div",{className:qe.list,children:E?c.jsx(Le,{children:"Loading..."}):T?c.jsxs(Le,{children:["Error: ",$ instanceof Error?$.message:"unknown error"]}):ie.length===0?c.jsx(Le,{children:"No subdirectories"}):ie.map(I=>c.jsxs("div",{className:qe.item,onClick:()=>ne(i==="/"?`/${I.name}`:`${i}/${I.name}`),children:[c.jsx(Ge,{size:14}),c.jsx("span",{className:qe.name,children:I.name})]},I.name))})]})}const hS="_shell_570m8_1",gS="_main_570m8_7",mS="_sidebarLeft_570m8_13",_S="_leftHandle_570m8_25",yS="_center_570m8_28",wS="_sidebarRight_570m8_35",vS="_rightHandle_570m8_43",Ue={shell:hS,main:gS,sidebarLeft:mS,leftHandle:_S,center:yS,sidebarRight:wS,rightHandle:vS};function bS(){const e=L(i=>i.leftSidebarCollapsed),t=L(i=>i.rightSidebarCollapsed),n=L(i=>i.leftSidebarWidth),s=L(i=>i.rightSidebarWidth),o=L(i=>i.resizeLeftSidebar),r=L(i=>i.resizeRightSidebar);return c.jsxs("div",{className:Ue.shell,children:[c.jsx(Hm,{}),c.jsxs("div",{className:Ue.main,children:[!e&&c.jsxs("aside",{className:Ue.sidebarLeft,style:{width:n},children:[c.jsx(ay,{}),c.jsx(zs,{side:"left",className:Ue.leftHandle,onResize:o})]}),c.jsx("div",{className:Ue.center,children:c.jsx(zw,{})}),!t&&c.jsxs("aside",{className:Ue.sidebarRight,style:{width:s},children:[c.jsx(zs,{side:"right",className:Ue.rightHandle,onResize:r}),c.jsx(ub,{})]})]}),c.jsx(sS,{}),c.jsx(pS,{}),c.jsx(ch,{}),c.jsx(Qp,{})]})}function SS({host:e}){return w.useEffect(()=>()=>{},[]),c.jsxs(hm,{host:e,children:[c.jsx(fm,{}),c.jsx(bS,{})]})}const Ei=document.getElementById("root");if(!Ei)throw new Error("Missing #root element");const kS=kr({app:{title:"Pi-Studio",version:"0.0.121"},pdf:{createWorker:()=>new Oa({name:"pdfjs"}),assetBaseUrl:"/pdfjs/"}});Li.createRoot(Ei).render(c.jsx(w.StrictMode,{children:c.jsx(SS,{host:kS})}));export{ni as $,qy as A,se as B,Vv as C,Fn as D,Le as E,LS as F,$S as G,VS as H,oe as I,gs as J,ug as K,XS as L,wm as M,ym as N,Mh as O,yr as P,j as Q,db as R,_r as S,qS as T,NS as U,YS as V,Vm as W,WS as X,Cp as Y,kb as Z,HS as _,ZS as a,US as a0,L as a1,ng as a2,qt as a3,OS as a4,Hn as a5,xb as a6,Qt as a7,bb as a8,GS as a9,Q as aa,ci as ab,KS as ac,FS as ad,zS as ae,Ct as af,PS as ag,wi as b,QS as c,Ve as d,Se as e,JS as f,V as g,MS as h,Kr as i,on as j,BS as k,DS as l,Jg as m,$e as n,q as o,$r as p,z as q,Ke as r,at as s,xh as t,D as u,mi as v,Si as w,Uv as x,rn as y,Pe as z};