pisper 0.6.21 → 0.6.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -6
- package/web/.vite/manifest.json +575 -583
- package/web/assets/{AppDialog-CyOinq_c.js → AppDialog-BluIYP8v.js} +1 -1
- package/web/assets/{AppOverlays-tniCecGA.js → AppOverlays-vn_Ter3M.js} +1 -1
- package/web/assets/{AssetsPage-DYFCPNhU.js → AssetsPage-CLlSYXp8.js} +1 -1
- package/web/assets/{BoardPage-Dp-FZv-N.js → BoardPage-nSsZudtr.js} +3 -3
- package/web/assets/{ChannelsPage-vBRUJEhU.js → ChannelsPage-DqnfAoWC.js} +1 -1
- package/web/assets/{ChatAppearancePage-DH4LSb0w.js → ChatAppearancePage-2itvW4ex.js} +1 -1
- package/web/assets/{ChatHistoryPage-ChspTm6r.js → ChatHistoryPage-OPTj6spQ.js} +1 -1
- package/web/assets/{ChatPage-DvU-p808.js → ChatPage-C_3_rpJn.js} +5 -5
- package/web/assets/{ConfigPage-CFFaLkKD.js → ConfigPage-DnPb_QrV.js} +2 -2
- package/web/assets/{DesktopWindowControls-Cz0mpg2c.js → DesktopWindowControls-DQf3N-Pq.js} +1 -1
- package/web/assets/{FeaturePage-DT_WfUIg.js → FeaturePage-B8dFhtLs.js} +1 -1
- package/web/assets/{FileAttachmentPreview-yuCLHoKm.js → FileAttachmentPreview-CeQTyfpt.js} +1 -1
- package/web/assets/{FloatingWidgets-D-48zs1T.js → FloatingWidgets-CWpMJq1K.js} +1 -1
- package/web/assets/{FocusRuntimeControls-D61-BVTV.js → FocusRuntimeControls-J_hbXz7v.js} +1 -1
- package/web/assets/{GitDiffViewer-DWHHRnjQ.js → GitDiffViewer-DZm3DoP7.js} +1 -1
- package/web/assets/{ManageProjectsDialog-B_0l-_Th.js → ManageProjectsDialog-VaG1Uu6p.js} +1 -1
- package/web/assets/{MarkdownMessage-zaqhqJ44.js → MarkdownMessage-Dbypp4RC.js} +1 -1
- package/web/assets/{McpPage-CuOr94Lo.js → McpPage-D8NZyKoO.js} +1 -1
- package/web/assets/{MemoryPage-CI_OOJh3.js → MemoryPage-DZsAXror.js} +1 -1
- package/web/assets/{MobileNavigation-CpOrDVyY.js → MobileNavigation-DHWkx5h0.js} +1 -1
- package/web/assets/{MorePage-CP0ptgQR.js → MorePage-PK0vEEda.js} +1 -1
- package/web/assets/{NewFolderDialog-wwAp2HUt.js → NewFolderDialog-DjC2xSrj.js} +1 -1
- package/web/assets/{PageHeader-CbiN6zVm.js → PageHeader-CcgJJB4K.js} +1 -1
- package/web/assets/{PhoneDrawer-DN3UBXYe.js → PhoneDrawer-DMIlKCRW.js} +1 -1
- package/web/assets/{PhoneMenuButton-BMgvbvez.js → PhoneMenuButton-dzvj0NS0.js} +1 -1
- package/web/assets/{PhoneTopBar-DFtEfuO6.js → PhoneTopBar-UqSQG8KO.js} +1 -1
- package/web/assets/{PluginsPage-CPkH6yN9.js → PluginsPage-D_7E0Mcm.js} +1 -1
- package/web/assets/{SafeModePrompt-vZ-kg03s.js → SafeModePrompt-CYubRBr0.js} +1 -1
- package/web/assets/{SchedulesPage-BQBk-HJm.js → SchedulesPage-BsX821QZ.js} +1 -1
- package/web/assets/{SessionBrowserPane-CC0qsCP9.js → SessionBrowserPane-ZvjA5vop.js} +2 -2
- package/web/assets/{SessionContextPanel-CyPu1SIQ.js → SessionContextPanel-39eXpERL.js} +2 -2
- package/web/assets/{SessionHome-C2xp5_yM.js → SessionHome-Cm131bvz.js} +1 -1
- package/web/assets/{SessionInspector-D362Va6Y.js → SessionInspector-DiSWVd6R.js} +1 -1
- package/web/assets/{SessionShell-BmsJM64n.js → SessionShell-DiWPHdio.js} +1 -1
- package/web/assets/{SettingsSidebar-B7qnN1dq.js → SettingsSidebar-Br83KuNT.js} +1 -1
- package/web/assets/{ShortcutHelpDialog-BzWvhRT2.js → ShortcutHelpDialog-rmlTJwrg.js} +1 -1
- package/web/assets/{ShortcutKeys-Cg-wl3yb.js → ShortcutKeys-CE7wsdx4.js} +1 -1
- package/web/assets/{SidebarUpdateStatus-B-MIuH8f.js → SidebarUpdateStatus-BSxoGQFm.js} +1 -1
- package/web/assets/{SkillsPage-BowfELnZ.js → SkillsPage-zrZCbP5L.js} +1 -1
- package/web/assets/{TaskProcessesPane-DGikk1nH.js → TaskProcessesPane-B9a-bK8Q.js} +1 -1
- package/web/assets/{TaskTerminalView-BjR4vuZI.js → TaskTerminalView-Dnl9t0Yq.js} +1 -1
- package/web/assets/{TerminalPanel-ZXcyyLBu.js → TerminalPanel-EbsJNe9L.js} +1 -1
- package/web/assets/{WebDesktopPet-CrUcp9Ym.js → WebDesktopPet-CqR3puOx.js} +1 -1
- package/web/assets/{WorkflowsPage-CTKpPFrC.js → WorkflowsPage-ChXjB-wW.js} +1 -1
- package/web/assets/{WorkspacePicker-CROSQVzJ.js → WorkspacePicker-CojYPYIa.js} +1 -1
- package/web/assets/{api-CIB7ZPX3.js → api-3pnTJcsp.js} +1 -1
- package/web/assets/{app-update-B6njQMB7.js → app-update-C6PjqV-N.js} +1 -1
- package/web/assets/{approval-confirm-D2B0tMFE.js → approval-confirm-Ng3lhZR9.js} +1 -1
- package/web/assets/board-messages-DRw0EP3S.js +1 -0
- package/web/assets/{board-projects-Ca61ZKPH.js → board-projects-Cn83x27D.js} +1 -1
- package/web/assets/{bots-store-BG81qEJz.js → bots-store-B0uE78FQ.js} +1 -1
- package/web/assets/{chat-api-aEirz9it.js → chat-api-DE-00AQt.js} +1 -1
- package/web/assets/{client-store-BSqTT-c2.js → client-store-B0G8KCEA.js} +1 -1
- package/web/assets/{config-search-DdXAm7PX.js → config-search-Cnob89Wh.js} +1 -1
- package/web/assets/{dialog-D1TVm0d6.js → dialog-sq6TFrs2.js} +1 -1
- package/web/assets/{dropdown-menu-CFIFNaKO.js → dropdown-menu-Ds0gD8S8.js} +1 -1
- package/web/assets/{events-CrT7ie40.js → events-BYm_7rfH.js} +1 -1
- package/web/assets/{folder-paths-BuiyvlAk.js → folder-paths-BeZN9wq7.js} +1 -1
- package/web/assets/{hosts-CpFGDuNR.js → hosts-BWu_xvML.js} +1 -1
- package/web/assets/i18n-Cewq43aI.js +1 -0
- package/web/assets/{index-DcTDwezs.js → index-DT21IKeB.js} +2 -2
- package/web/assets/index-dYNkGdsI.css +2 -0
- package/web/assets/{mount-app-DhHe93-u.js → mount-app-YAzhl88_.js} +3 -3
- package/web/assets/{permission-rules-api-Ch3fRXTD.js → permission-rules-api-DdYftUQE.js} +1 -1
- package/web/assets/{pick-system-directory-B8aZR2BS.js → pick-system-directory-LOpQirAM.js} +1 -1
- package/web/assets/{placements-5hgUqGzE.js → placements-BzbpQDQ7.js} +2 -2
- package/web/assets/{popover-BMTgTASl.js → popover-CEwCyvso.js} +1 -1
- package/web/assets/{public-DTq_JyXj.js → public-CgfPT7gK.js} +2 -2
- package/web/assets/public-Ck1i4t8o.js +1 -0
- package/web/assets/{public-BTvrDX6E.js → public-CoivUKr6.js} +1 -1
- package/web/assets/{public-components-DUa3En6P.js → public-components-CQf0np0Z.js} +1 -1
- package/web/assets/public-diff-wY-tpFFs.js +1 -0
- package/web/assets/public-events-B-fuAF9_.js +1 -0
- package/web/assets/{public-flags-DEs9Uj_y.js → public-flags-DZvYvsWH.js} +1 -1
- package/web/assets/{public-session-CXzhUUNr.js → public-session-Bx2TqcKh.js} +1 -1
- package/web/assets/{public-sidebar-CJVnP7HU.js → public-sidebar-3z7xPwe3.js} +1 -1
- package/web/assets/{runtime-capabilities-store-DpEKnn1b.js → runtime-capabilities-store-CDhzPVU-.js} +1 -1
- package/web/assets/{safe-mode-instance-CVh0Lclx.js → safe-mode-instance-D_H4Z8Xv.js} +1 -1
- package/web/assets/safe-mode-sentinel-BG7I9wh1.js +1 -0
- package/web/assets/segmented-control-xkrEOP_d.js +1 -0
- package/web/assets/{session-change-summary-api-sn-ejt4H.js → session-change-summary-api-CxOV5OrA.js} +1 -1
- package/web/assets/{session-home-DBefA-JE.js → session-home-chPk0XEV.js} +1 -1
- package/web/assets/{session-organization-api-BFW_7Myv.js → session-organization-api-A3EudhgK.js} +1 -1
- package/web/assets/{session-scope-P-D-Ssd4.js → session-scope-CF4OLtKw.js} +1 -1
- package/web/assets/{session-tree-actions-DZ5-Z8_F.js → session-tree-actions-DNefaiZO.js} +1 -1
- package/web/assets/{session-tree-summary-Dljblf8P.js → session-tree-summary-DPqtCWEP.js} +1 -1
- package/web/assets/{shortcuts-DXHroTTi.js → shortcuts-zcQP1D4E.js} +1 -1
- package/web/assets/{side-chat-context-6tf1Gx5C.js → side-chat-context-BpjCorLu.js} +4 -4
- package/web/assets/{sidebar-PuiNlAmD.js → sidebar-Bb6NlEeR.js} +1 -1
- package/web/assets/{sidebar-store-CbyxBthc.js → sidebar-store-CQWNlMxT.js} +1 -1
- package/web/assets/{speech-session-B3-i8f64.js → speech-session-2WJk-z3P.js} +1 -1
- package/web/assets/{startup-queries-CceboYee.js → startup-queries-C9AHlyOp.js} +1 -1
- package/web/assets/{use-i18n-B2p84ZNR.js → use-i18n-BPJI6-Ue.js} +1 -1
- package/web/assets/{use-open-bot-CgFlDm0x.js → use-open-bot-5wf_No4c.js} +1 -1
- package/web/assets/{use-studio-actions-DM2CAaXR.js → use-studio-actions-C5heO0nL.js} +3 -3
- package/web/assets/{useCatalogProjects-laY-U3Br.js → useCatalogProjects-BWKT2GrE.js} +1 -1
- package/web/assets/{useNewProjectPicker-rhLvXi27.js → useNewProjectPicker-BCkEpwht.js} +2 -2
- package/web/assets/{useNow-DYvbFah-.js → useNow-e0HHzVad.js} +1 -1
- package/web/assets/{usePhoneShell-BSkh5GND.js → usePhoneShell-C90daPSI.js} +1 -1
- package/web/assets/{useSessionListQuery-CHbg2lM2.js → useSessionListQuery-Ezaq4rI5.js} +1 -1
- package/web/assets/{useSessionRowActions-CO4u1xCd.js → useSessionRowActions-BIJ-eKcN.js} +1 -1
- package/web/assets/{useSidebarModel-V_SZjKZH.js → useSidebarModel-DDqX8onb.js} +1 -1
- package/web/assets/{web-preview-CR8GMArR.js → web-preview-C5NXKRu-.js} +1 -1
- package/web/assets/{web-preview-events-DUqovP-L.js → web-preview-events-CIJw4Wx-.js} +1 -1
- package/web/assets/{workspace-order-store-CK1RETHt.js → workspace-order-store-0jm2oVHS.js} +1 -1
- package/web/index.html +2 -2
- package/web/assets/board-messages-DVz8SE1C.js +0 -1
- package/web/assets/i18n-CXRjs9ow.js +0 -1
- package/web/assets/index-BY7X-ZtU.css +0 -2
- package/web/assets/public-BZlIDP6h.js +0 -1
- package/web/assets/public-diff-DEL93aov.js +0 -1
- package/web/assets/public-events-BiaqrDkZ.js +0 -1
- package/web/assets/safe-mode-sentinel-Bm4e075H.js +0 -1
- package/web/assets/segmented-control-BlM_GKV6.js +0 -1
- package/web/assets/touch-target-BsyCgjR5.js +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/SessionContextPanel-
|
|
2
|
-
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{h as t}from"./vendor-router-CSN_DGvx.js";import{t as n}from"./index-DcTDwezs.js";import{i as r,n as i,r as a}from"./vendor-react-DwNgTV1j.js";import{t as o}from"./use-i18n-B2p84ZNR.js";import{a as s,i as c,o as l}from"./vendor-state-GkUciC5H.js";import{t as u}from"./storage-8QW6lXuT.js";import{u as d}from"./query-Bj-DUNYq.js";import{r as f,t as p}from"./useQuery-DdcpUQhO.js";import{t as m}from"./startup-queries-CceboYee.js";import{n as h,r as g,t as _}from"./abort-signal-f4JsiYKX.js";import{a as v,l as y,n as b,s as x,t as S,u as C}from"./api-CIB7ZPX3.js";import{i as w}from"./runtime-capabilities-CHYOF_hE.js";import{t as T}from"./runtime-capabilities-store-DpEKnn1b.js";import{n as E}from"./use-mobile-C2tPBAza.js";import{n as D,t as O}from"./client-store-BSqTT-c2.js";import{t as k}from"./createLucideIcon-Cd-3GVxJ.js";import{a as A,i as j,r as M}from"./permission-rules-api-Ch3fRXTD.js";import{c as N,i as P,n as F,o as I,r as L,s as R,t as z}from"./session-list-BeyOEzyU.js";import{t as B}from"./bot-B3TaBp_T.js";import{t as V}from"./braces-DQcXLGFF.js";import{t as H}from"./check-2vYc6QaP.js";import{t as U}from"./chevron-down-CxtxIjiP.js";import{t as ee}from"./chevron-left-BAtyp3_6.js";import{t as te}from"./chevron-right-C3t2Rckj.js";import{t as ne}from"./circle-check-iEdCm3Pw.js";import{n as re,t as ie}from"./image-plus-D7bzZog0.js";import{C as ae,S as oe,_ as W,a as se,b as ce,c as G,d as le,f as K,g as ue,h as de,i as fe,l as pe,m as me,n as he,o as q,p as ge,r as _e,s as ve,t as ye,u as be,v as xe,x as Se,y as Ce}from"./FocusRuntimeControls-D61-BVTV.js";import{t as we}from"./corner-down-right--hxi-Ihy.js";import{t as Te}from"./download-BCfIiuaL.js";import{o as Ee}from"./GitDiffViewer-DWHHRnjQ.js";import{t as De}from"./file-Bllajneu.js";import{A as Oe,B as ke,C as Ae,D as je,E as Me,F as Ne,L as Pe,M as Fe,N as Ie,O as Le,P as Re,R as ze,S as Be,T as Ve,_ as He,a as Ue,d as We,f as Ge,g as Ke,h as qe,i as Je,j as Ye,k as Xe,l as Ze,m as Qe,n as $e,o as et,p as tt,t as nt,u as rt,v as it,w as at,x as ot,y as st,z as ct}from"./side-chat-context-6tf1Gx5C.js";import{t as lt}from"./WorkspacePicker-CROSQVzJ.js";import{t as J}from"./folder-open-FIShC5Qk.js";import{t as ut}from"./git-branch-N7LGjtzt.js";import{t as dt}from"./link-2-mgasYn21.js";import{t as ft}from"./loader-circle-BOwQzHB-.js";import{t as pt}from"./message-square-SKjZyY3v.js";import{t as mt}from"./panel-right-BSUtqUd8.js";import{t as ht}from"./paperclip-BCXrwYpb.js";import{t as gt}from"./pencil-U08v_vV9.js";import{t as _t}from"./play-DNDjDNGn.js";import{t as vt}from"./plus-fQbSqB1n.js";import{t as yt}from"./refresh-cw-TbWxTY4K.js";import{t as bt}from"./search-D0mqDaf_.js";import{t as xt}from"./settings-QX0oWnVK.js";import{t as St}from"./shield-alert-oZqX6MNu.js";import{t as Ct}from"./square-pen-hYbjKh6A.js";import{t as wt}from"./square-bHHVTT3G.js";import{t as Tt}from"./tag-CqkeJlBf.js";import{t as Et}from"./trash-2-CNrPOoPR.js";import{t as Dt}from"./triangle-alert-CE1q54ci.js";import{t as Ot}from"./workflow-Bg94dy8I.js";import{t as kt}from"./wrench-6pg6_bqI.js";import{t as At}from"./x-07u4-129.js";import{t as jt}from"./brand-DIEc3fK8.js";import{t as Mt}from"./checkbox-BrEHgFV0.js";import{c as Nt,i as Pt,l as Ft,n as It,p as Lt,r as Rt,t as zt}from"./dropdown-menu-CFIFNaKO.js";import{t as Bt}from"./progress-5odAz3B9.js";import{t as Vt}from"./switch-D_G8wFhs.js";import{i as Ht,r as Ut,t as Wt}from"./tabs-DsgBuvJv.js";import{i as Gt,n as Kt,t as qt}from"./tooltip-D4MFbqcG.js";import{t as Jt}from"./utils-C8uzG5AZ.js";import{n as Yt,t as Y}from"./button-CCcCN8tE.js";import{n as Xt,t as Zt}from"./kbd-CAufZTkl.js";import{C as Qt,S as $t,b as en,c as tn,f as nn,i as rn,o as an,p as on,r as sn,s as cn,u as ln,x as un,y as dn}from"./events-CrT7ie40.js";import{a as fn,c as pn,i as mn,n as hn,r as gn,s as _n,t as vn}from"./shortcuts-DXHroTTi.js";import{n as yn,o as bn,r as xn,t as Sn}from"./sheet-BTaIEX4w.js";import{t as X}from"./chat-api-aEirz9it.js";import{n as Cn}from"./session-organization-api-BFW_7Myv.js";import{a as wn,n as Tn,t as En}from"./session-questions-Cf-1g85h.js";import{n as Dn,o as On,r as kn,t as An}from"./format-DMJQzoZ7.js";import{t as jn}from"./StatusGlyph-1KgitlUg.js";import{a as Mn,c as Nn,d as Pn,m as Fn,o as In,p as Ln,u as Rn}from"./run-activity-CwfO0cui.js";import{a as zn,i as Bn,l as Vn,s as Hn,t as Un}from"./dialog-D1TVm0d6.js";import{t as Wn}from"./input-CPw-zkYh.js";import{i as Gn,n as Kn,t as qn}from"./input-group-h8z63MzW.js";import{t as Jn}from"./model-display-kDwvtxrW.js";import{t as Yn}from"./session-change-summary-api-sn-ejt4H.js";import{t as Xn}from"./pick-system-directory-B8aZR2BS.js";import{n as Zn,r as Qn,t as $n}from"./PageState-Cz6vFMXv.js";import{t as er}from"./back-navigation-CK7X_5Bc.js";import{t as tr}from"./MarkdownMessage-zaqhqJ44.js";import{t as nr}from"./esm-DCV8yILT.js";import{t as rr}from"./touch-target-BsyCgjR5.js";import{t as ir}from"./motion-DTR4ZVle.js";import{t as ar}from"./shortcut-aria-jHRmld9z.js";import{t as or}from"./app-primitives-Drz_SjnR.js";import"./web-preview-CR8GMArR.js";import{n as sr,r as cr}from"./terminal-context-aIsIJPn8.js";import{a as lr,i as ur}from"./tool-labels-ghvpPFmc.js";import{t as dr}from"./BrandLogo-k3CvJjd4.js";import{i as fr,n as pr,o as Z,s as mr,t as hr}from"./session-tree-summary-Dljblf8P.js";import{fileRewindConfirmOptions as gr,fileRewindNotice as _r,notifyTreeNavigation as vr}from"./session-tree-actions-DZ5-Z8_F.js";import{a as yr,c as br,i as xr,l as Sr,n as Cr,o as wr,s as Tr,t as Er,u as Dr}from"./speech-session-B3-i8f64.js";import{n as Or,t as kr}from"./web-preview-events-DUqovP-L.js";var Ar=k(`audio-lines`,[[`path`,{d:`M2 10v3`,key:`1fnikh`}],[`path`,{d:`M6 6v11`,key:`11sgs0`}],[`path`,{d:`M10 3v18`,key:`yhl04a`}],[`path`,{d:`M14 8v7`,key:`3a1oy3`}],[`path`,{d:`M18 5v13`,key:`123xd1`}],[`path`,{d:`M22 10v3`,key:`154ddg`}]]),jr=k(`badge-check`,[[`path`,{d:`M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z`,key:`3c2336`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),Mr=k(`book-open`,[[`path`,{d:`M12 5v16`,key:`1f6ucr`}],[`path`,{d:`M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z`,key:`1fyvmf`}]]),Nr=k(`bookmark`,[[`path`,{d:`M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z`,key:`oz39mx`}]]),Pr=k(`file-check-corner`,[[`path`,{d:`M10.5 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v6`,key:`g5mvt7`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m14 20 2 2 4-4`,key:`15kota`}]]),Fr=k(`file-down`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M12 18v-6`,key:`17g6i2`}],[`path`,{d:`m9 15 3 3 3-3`,key:`1npd3o`}]]),Ir=k(`message-circle-question-mark`,[[`path`,{d:`M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719`,key:`1sd12s`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Lr=k(`mic-off`,[[`path`,{d:`M12 19v3`,key:`npa21l`}],[`path`,{d:`M15 9.34V5a3 3 0 0 0-5.68-1.33`,key:`1gzdoj`}],[`path`,{d:`M16.95 16.95A7 7 0 0 1 5 12v-2`,key:`cqa7eg`}],[`path`,{d:`M18.89 13.23A7 7 0 0 0 19 12v-2`,key:`16hl24`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M9 9v3a3 3 0 0 0 5.12 2.12`,key:`r2i35w`}]]),Rr=k(`mic`,[[`path`,{d:`M12 19v3`,key:`npa21l`}],[`path`,{d:`M19 10v2a7 7 0 0 1-14 0v-2`,key:`1vc78b`}],[`rect`,{x:`9`,y:`2`,width:`6`,height:`13`,rx:`3`,key:`s6n7sd`}]]),zr=k(`shield`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}]]),Br=k(`shrink`,[[`path`,{d:`m15 15 6 6m-6-6v4.8m0-4.8h4.8`,key:`17vawe`}],[`path`,{d:`M9 19.8V15m0 0H4.2M9 15l-6 6`,key:`chjx8e`}],[`path`,{d:`M15 4.2V9m0 0h4.8M15 9l6-6`,key:`lav6yq`}],[`path`,{d:`M9 4.2V9m0 0H4.2M9 9 3 3`,key:`1pxi2q`}]]),Vr=k(`target`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`circle`,{cx:`12`,cy:`12`,r:`6`,key:`1vlfrh`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]),Hr=k(`users`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]),Q=e(r(),1),Ur=c(()=>({getItem:e=>{try{return n.getItem(e)}catch{return null}},setItem:(e,t)=>{try{n.setItem(e,t)}catch{}},removeItem:e=>{try{n.removeItem(e)}catch{}}})),Wr=l()(s((e,t)=>({width:360,open:!1,setWidth:n=>{let r=Be(n);t().width!==r&&e({width:r})},setOpen:n=>{t().open!==n&&e({open:n})}}),{name:`pisper-session-context-layout`,version:2,storage:Ur,migrate:e=>{let t=e&&typeof e==`object`&&!Array.isArray(e)?e:{};return{width:Be(`width`in t?t.width:void 0),open:`open`in t&&t.open===!0}},partialize:({width:e,open:t})=>({width:e,open:t}),merge:(e,t)=>({...t,width:Be(e&&typeof e==`object`&&!Array.isArray(e)&&`width`in e?e.width:void 0),open:!!(e&&typeof e==`object`&&!Array.isArray(e)&&`open`in e&&e.open===!0)})}));function Gr(e,t,n){let r=(0,Q.useRef)(n);r.current=n,(0,Q.useLayoutEffect)(()=>e?er.register(t,()=>r.current()):void 0,[e,t])}var $=a();function Kr({preferredWidth:e,onWidthChange:t,availableWidth:n,presentation:r,children:i,context:a,side:s=`right`,layoutId:c=`chat`,conversationHeaderInset:l=0}){let{t:u}=o(),d=(0,Q.useRef)(()=>{});(0,Q.useEffect)(()=>()=>d.current(),[]);let f=r===`aside`,p=r===`content`,m=Ae(e,n),h=Ae(720,n),g=e=>t(Math.max(280,Math.min(h,e))),_=n=>{if(n.button!==0)return;d.current(),n.preventDefault(),n.currentTarget.focus(),n.currentTarget.setPointerCapture(n.pointerId);let r=n.clientX,i=e=>g(m+(e.clientX-r)*(s===`left`?1:-1)),a=()=>{window.removeEventListener(`pointermove`,i),window.removeEventListener(`pointerup`,a),window.removeEventListener(`pointercancel`,o),window.removeEventListener(`keydown`,c)},o=()=>{t(e),a()},c=e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),o())};d.current=a,window.addEventListener(`pointermove`,i),window.addEventListener(`pointerup`,a,{once:!0}),window.addEventListener(`pointercancel`,o,{once:!0}),window.addEventListener(`keydown`,c)},v=(0,$.jsx)(`div`,{id:`${c}-conversation`,"data-workspace-conversation":!0,inert:p,className:p?`hidden`:`min-h-0 min-w-0 flex-1 overflow-hidden`,style:f&&l?{paddingTop:l}:void 0,children:i},`conversation`),y=f?(0,$.jsx)(`div`,{role:`separator`,tabIndex:0,"aria-orientation":`vertical`,"aria-label":u(`chat:sessionContext.resize`),title:u(`chat:sessionContext.resizeHint`),"aria-controls":`${c}-conversation ${c}-content`,"aria-valuemin":280,"aria-valuemax":h,"aria-valuenow":m,onPointerDown:_,onDoubleClick:()=>t(360),onKeyDown:e=>{if(![`ArrowLeft`,`ArrowRight`,`Home`,`End`,`Enter`].includes(e.key))return;if(e.preventDefault(),e.key===`Enter`){t(360);return}let n=e.shiftKey?64:16;g(e.key===`Home`?280:e.key===`End`?h:m+(e.key===`ArrowRight`?n:-n)*(s===`left`?1:-1))},className:`relative w-2 shrink-0 cursor-col-resize touch-none select-none outline-none after:absolute after:top-1/2 after:left-1/2 after:h-9 after:w-[3px] after:-translate-1/2 after:rounded-full after:bg-stroke-strong after:transition-colors after:duration-[var(--d-fast)] hover:after:bg-focus active:after:bg-focus focus-visible:after:bg-focus focus-visible:after:ring-3 focus-visible:after:ring-focus-ring`},`separator`):null,b=(0,$.jsx)(`div`,{id:`${c}-content`,className:f?`h-full min-h-0 shrink-0 overflow-hidden`:p?`h-full min-h-0 min-w-0 flex-1 overflow-hidden`:`hidden`,style:f?{width:m}:void 0,children:(f||p)&&a},`resource`);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{id:`${c}-context-layout`,"data-workspace-layout":!0,className:`flex h-full min-h-0 min-w-0 flex-1 overflow-hidden`,children:s===`left`?[b,y,v]:[v,y,b]}),r===`sheet`&&a]})}function qr({sessionId:e,streaming:t,completed:n,runStartedAt:r,enabled:i,open:a,onReveal:o}){let s=(0,Q.useRef)(null),c=(0,Q.useRef)(o);(0,Q.useLayoutEffect)(()=>{c.current=o},[o]),(0,Q.useEffect)(()=>{let o=s.current,l={sessionId:e,streaming:t,completed:n,runStartedAt:r};if(s.current=l,!i||a||!ot(o,l))return;let u=new AbortController,d=!0;return X.getSessionFileChanges(e,{signal:u.signal}).then(({files:e})=>{d&&at(o,l,e)&&c.current()}).catch(()=>{}),()=>{d=!1,u.abort()}},[n,i,a,r,e,t])}var Jr=`pisper:task-content-requested`,Yr=[`changes`,`terminal`,`processes`,`sources`,`browser`];function Xr(e){return!e||typeof e!=`object`||!(`kind`in e)?null:Yr.find(t=>t===e.kind)||null}function Zr({sessionId:e,cwd:t,taskName:n,sources:r,mobile:i,streaming:a}){let{t:s}=o(),c=cr(e),l=sr(),[u,d]=(0,Q.useState)(!1),f=(0,Q.useRef)(null),m=(0,Q.useRef)(!1),h=T(e=>e.capabilities),g=w(h,`vcs`),_=p({enabled:g,queryKey:[`task-project-changes`,e,t,a],queryFn:({signal:t})=>X.getVcsChanges(e,{signal:t})}),v=(0,Q.useMemo)(()=>Ke(_.data?.diff||``,_.data?.files.map(e=>e.path)||[],_.data?.diffTruncated),[_.data]),y=()=>it.getState().update(e,`new`,{type:`workspace`,summaryOpen:!1}),b=()=>document.getElementById(`task-${e}-summary-toggle`)?.focus();(0,Q.useEffect)(()=>{i||f.current?.focus()},[i]);let x=(t,n=``)=>{let r=it.getState();if(r.update(e,t,{type:`open`,kind:t})===`limit`){d(!0);return}m.current=!0;let i=it.getState().sessions[e]?.activeId;n&&i&&r.update(e,t,{type:`view`,id:i,patch:t===`sources`?{selectedSourceId:n,query:``,filter:``}:{expandedProcesses:[n],filter:``}})};Gr(!i,300,()=>{y(),b()});let S=`w-full justify-start gap-2 px-2 font-normal text-content`,C=`ml-auto shrink-0 text-xs text-content-muted tabular-nums`,E=(0,$.jsxs)($.Fragment,{children:[u&&(0,$.jsx)(`p`,{role:`alert`,className:`px-2 pb-1 text-xs text-danger`,children:s(`chat:sessionContext.pageLimit`)}),(0,$.jsxs)(`div`,{className:`flex min-w-0 items-start gap-2 border-b border-stroke-soft px-2 pt-1 pb-2`,children:[(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsx)(`p`,{className:`truncate font-mono text-xs text-content-muted`,title:t,children:t.split(/[\\/]/).filter(Boolean).at(-1)||t}),(0,$.jsx)(`p`,{className:`mt-0.5 truncate text-sm font-medium text-content`,children:n})]}),(0,$.jsx)(Y,{variant:`ghost`,size:`icon`,className:`max-[650px]:size-11`,"aria-label":s(`chat:workbench.closeSummary`),onClick:()=>{y(),b()},children:(0,$.jsx)(At,{size:16})})]}),(0,$.jsxs)(`section`,{className:`border-b border-stroke-soft py-1`,children:[(0,$.jsxs)(Y,{variant:`ghost`,className:`${S} h-auto min-h-8 whitespace-normal text-left`,disabled:!g,onClick:()=>x(`changes`),children:[(0,$.jsx)(Ee,{size:16,className:`text-content-muted`}),(0,$.jsx)(`span`,{className:`min-w-0 flex-1`,children:s(`chat:workbench.projectChanges`)}),(0,$.jsx)(`span`,{className:C,children:g?_.isPending?`…`:_.isError||_.data?.error?s(`chat:workbench.unavailable`):_.data?.isRepo?_.data.files.length:`—`:s(`chat:workbench.unavailable`)})]}),(_.isError||_.data?.error)&&(0,$.jsx)(`p`,{role:`alert`,className:`px-2 py-1 text-xs text-danger`,children:s(`chat:workbench.changesFailed`)}),_.data?.isRepo&&!_.isError&&!_.data.error&&(0,$.jsxs)(`p`,{className:`px-2 pb-1 pl-8 font-mono text-xs tabular-nums text-content-muted`,children:[v.partial?`${s(`chat:workbench.partialCounts`)} `:``,(0,$.jsxs)(`span`,{className:`text-success`,children:[`+`,v.added]}),` `,(0,$.jsxs)(`span`,{className:`text-danger`,children:[`−`,v.removed]})]}),(0,$.jsxs)(Y,{variant:`ghost`,className:S,onClick:()=>x(`files`),children:[(0,$.jsx)(ke,{size:16,className:`text-content-muted`}),s(`chat:workbench.taskSnapshots`)]})]}),(0,$.jsxs)(`section`,{className:`border-b border-stroke-soft py-1`,children:[(0,$.jsxs)(Y,{variant:`ghost`,className:S,onClick:()=>x(`processes`),children:[(0,$.jsx)(`span`,{children:s(`terminal:workspace.processes`)}),(0,$.jsx)(`span`,{className:C,children:c.length})]}),!l&&(0,$.jsx)(`p`,{className:`px-2 pb-1 text-xs text-content-muted`,children:s(`terminal:workspace.nativeOnly`)}),c.slice(0,3).map(e=>(0,$.jsxs)(Y,{variant:`ghost`,className:`${S} min-w-0`,onClick:()=>x(`processes`,e.id),children:[e.status===`running`?(0,$.jsx)(Yt,{className:`size-3.5`}):(0,$.jsx)(A,{size:15,className:`text-content-muted`}),(0,$.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-left font-mono text-xs`,children:e.profileId}),(0,$.jsx)(`span`,{className:C,children:e.status===`running`?s(`terminal:workspace.running`):e.status===`exited`?s(`terminal:workspace.exited`):s(`chat:workbench.otherState`)})]},e.id))]}),(0,$.jsxs)(`section`,{className:`pt-1`,children:[(0,$.jsxs)(Y,{variant:`ghost`,className:S,onClick:()=>x(`sources`),children:[(0,$.jsx)(`span`,{children:s(`chat:workbench.sources`)}),(0,$.jsx)(`span`,{className:C,children:r.length})]}),r.slice(0,3).map(e=>(0,$.jsxs)(Y,{variant:`ghost`,className:`${S} min-w-0`,onClick:()=>x(`sources`,e.id),children:[(0,$.jsx)(dt,{size:15,className:`text-content-muted`}),(0,$.jsx)(`span`,{className:`truncate font-mono text-xs`,children:e.name||s(`chat:chatMessage.fileAttachment`)})]},e.id)),(0,$.jsx)(Y,{variant:`ghost`,className:`${S} text-content-muted`,onClick:()=>x(`sources`),children:s(`chat:workbench.viewAll`)})]})]});return i?(0,$.jsx)(Sn,{open:!0,onOpenChange:e=>{e||y()},children:(0,$.jsxs)(yn,{side:`bottom`,showCloseButton:!1,"aria-describedby":void 0,className:`max-h-[80dvh] overflow-y-auto rounded-t-2xl p-3 pb-[max(16px,var(--pisper-safe-area-bottom))] [&_button]:min-h-11`,style:{left:`calc(44px + var(--pisper-safe-area-left, 0px))`,right:`var(--pisper-safe-area-right, 0px)`},onCloseAutoFocus:e=>{e.preventDefault(),m.current||b()},children:[(0,$.jsx)(bn,{className:`sr-only`,children:s(`chat:workbench.summary`)}),E]})}):(0,$.jsx)(`div`,{ref:f,tabIndex:-1,id:`task-${e}-summary`,role:`region`,"aria-label":s(`chat:workbench.summary`),onKeyDown:e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),y(),b())},className:`absolute top-[52px] right-2 z-20 max-h-[calc(100%-64px)] w-80 max-w-[calc(100%-16px)] overflow-y-auto rounded-md bg-popover p-1 text-sm text-popover-foreground shadow-float`,children:E})}function Qr(e){if(typeof e!=`string`||Array.from(e).some(e=>e.charCodeAt(0)<32))return``;let t=e.replace(/\\/g,`/`);return!t.startsWith(`/`)&&!/^[a-z]:\//i.test(t)?``:t.replace(/\/\.\//g,`/`).replace(/\/$/,``)||`/`}function $r(e){let t=[],n=new Set;for(let r of e)if(Array.isArray(r.attachments))for(let[e,i]of r.attachments.entries()){if(!i||typeof i!=`object`||Array.isArray(i))continue;let a=typeof i.id==`string`&&!i.id.startsWith(`path:`)&&i.id.length<=512&&!Array.from(i.id).some(e=>e.charCodeAt(0)<32)?i.id:``,o=Qr(i.path),s=a?`asset`:o?`path`:`unresolved`,c=a?`asset:${a}`:o?`path:${o}`:`unresolved:${r.id}:${e}`;if(n.has(c))continue;n.add(c);let l=typeof i.name==`string`?i.name:o.split(`/`).pop()||a,u=typeof i.mimeType==`string`?i.mimeType:``,d={...a?{id:a,downloadUrl:`/api/assets/${encodeURIComponent(a)}/download`}:{},...o?{id:a||`path:${o}`,path:o}:{},name:l,mimeType:u,...typeof i.size==`number`&&Number.isFinite(i.size)&&i.size>=0?{size:i.size}:{},...typeof i.text==`string`?{text:i.text.slice(0,4e5)}:{}};t.push({id:c,name:l,method:s,messageId:r.id,attachment:d,available:s!==`unresolved`||typeof i.text==`string`,kind:u.startsWith(`image/`)?`image`:u.startsWith(`text/`)?`text`:`file`})}return t}function ei({width:e,mobile:t,contentOpen:n}){return n?t||e<660?`content`:`split`:`conversation`}var ti=(0,Q.lazy)(()=>t(()=>import(`./SessionContextPanel-CyPu1SIQ.js`).then(e=>({default:e.SessionContextPanel})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111])));function ni({sessionId:e,messages:t,taskName:n,cwd:r,panelId:i,active:a,mobile:s,plan:c,streaming:l,completed:u,runStartedAt:d,plansAvailable:f,requestConfirm:p,children:m}){let{t:h}=o(),[g,_]=(0,Q.useState)(null),[v,y]=(0,Q.useState)(null),b=(0,Q.useMemo)(()=>({headerHost:g,sourceActionHost:v,setSourceActionHost:y}),[g,v]),x=(0,Q.useMemo)(()=>$r(t),[t]),S=(0,Q.useRef)(Wr.getState().width).current,C=(0,Q.useRef)(null),[w,T]=(0,Q.useState)(0),E=(0,Q.useMemo)(()=>st(),[]),D=it(t=>t.sessions[e])||E,O=it(e=>e.update);(0,Q.useLayoutEffect)(()=>{D.contentWidth??O(e,`new`,{type:`workspace`,contentWidth:S})},[D.contentWidth,e,S,O]),(0,Q.useLayoutEffect)(()=>{let e=C.current;if(!e)return;let t=()=>T(e.clientWidth);t();let n=null,r=new ResizeObserver(()=>{n!==null&&cancelAnimationFrame(n),n=requestAnimationFrame(()=>{n=null,t()})});return r.observe(e),()=>{r.disconnect(),n!==null&&cancelAnimationFrame(n)}},[]);let k=ei({width:w,mobile:s,contentOpen:D.contentOpen&&D.pages.length>0});qr({sessionId:e,streaming:l,completed:u,runStartedAt:d,enabled:!0,open:D.contentOpen,onReveal:()=>O(e,`files`,{type:`open`,kind:`files`})}),(0,Q.useEffect)(()=>{if(!a)return;let t=t=>{let n=Xr(t.detail);n&&O(e,n,{type:`open`,kind:n})};return window.addEventListener(Jr,t),()=>window.removeEventListener(Jr,t)},[a,e,O]);let A=()=>{window.dispatchEvent(new Event(cn)),O(e,`files`,{type:`workspace`,contentOpen:!1}),requestAnimationFrame(()=>(document.getElementById(`task-${e}-new-content-tab`)||document.getElementById(`task-${e}-more`))?.focus())};Gr(a&&k===`content`,100,A);let j=D.contentOpen&&D.pages.length>0&&(0,$.jsx)(Q.Suspense,{fallback:(0,$.jsx)(`div`,{role:`status`,className:`p-4 text-sm text-content-muted`,children:h(`chat:focusSession.gitLoading`)}),children:(0,$.jsx)(ti,{panelId:`${i}-context`,compact:!1,embedded:!0,active:a,sessionId:e,cwd:r,sources:x,tab:D.pages.find(e=>e.id===D.activeId)?.kind||`files`,plan:c,streaming:l,plansAvailable:f,requestConfirm:p,onTabChange:()=>{},onClose:A,onBack:A})});return(0,$.jsx)(He.Provider,{value:b,children:(0,$.jsxs)(`div`,{ref:C,id:`task-${e}-workspace`,tabIndex:-1,"data-task-workspace":e,"data-active":a,className:`relative flex h-full min-h-0 min-w-0 flex-col overflow-hidden bg-panel`,children:[(0,$.jsx)(`div`,{ref:_,className:k===`split`?`@container absolute left-0 top-0 z-10`:`@container shrink-0`,style:k===`split`?{width:`calc(100% - ${Ae(D.contentWidth??S,w)+8}px)`}:void 0,"data-task-header":!0}),(0,$.jsx)(Kr,{preferredWidth:D.contentWidth??S,onWidthChange:t=>{O(e,`new`,{type:`workspace`,contentWidth:t}),Wr.getState().setWidth(t)},layoutId:i,availableWidth:w,conversationHeaderInset:48,presentation:k===`split`?`aside`:k===`content`?`content`:`closed`,context:j,children:m}),a&&D.summaryOpen&&(0,$.jsx)(Zr,{sessionId:e,cwd:r,taskName:n,sources:x,mobile:s,streaming:l})]})})}function ri(e,t){return e.open===t?e:{open:t,leaving:!t}}function ii(e){return e.leaving?{open:e.open,leaving:!1}:e}function ai(e){return e.open||e.leaving}function oi(e,t=400){let[n,r]=(0,Q.useState)(()=>({open:e,leaving:!1})),i=n;n.open!==e&&(i=ri(n,e),r(i));let a=i.leaving,o=(0,Q.useCallback)(()=>r(ii),[]);return(0,Q.useLayoutEffect)(()=>{if(!a)return;if(ir()){o();return}let e=window.setTimeout(o,t);return()=>window.clearTimeout(e)},[t,o,a]),{mounted:ai(i),leaving:a,finish:o}}function si(e){return[`running`,`waiting_approval`].includes(String(e.status||``))}function ci(e,t){return t(e===`running`?`chat:workflowRun.running`:e===`waiting_approval`?`chat:workflowRun.waitingApproval`:e===`completed`?`chat:workflowRun.completed`:e===`failed`?`chat:workflowRun.failed`:e===`cancelled`?`chat:workflowRun.stopped`:`chat:workflowRun.interrupted`)}function li({sessionId:e,empty:t=null}){let{t:n}=o(),[r,i]=(0,Q.useState)([]),[a,s]=(0,Q.useState)(``),c=(0,Q.useCallback)(async()=>{try{let t=await X.getSessionWorkflowRuns(e);i(t.runs||[])}catch{}},[e]);if((0,Q.useEffect)(()=>{c();let e=window.setInterval(c,1500);return()=>window.clearInterval(e)},[c]),!r.length)return t;let l=`session-workflow-context grid min-w-0 gap-1 border-b border-stroke-soft pb-1.5 [&_strong]:text-xs [&_strong]:font-medium [&_strong]:text-content-muted [&_p]:max-h-[84px] [&_p]:overflow-auto [&_p]:text-xs [&_p]:leading-relaxed [&_p]:whitespace-pre-wrap [&_p]:text-content-secondary [&_p]:[overflow-wrap:anywhere] [&_pre]:max-h-[84px] [&_pre]:overflow-auto [&_pre]:rounded-xs [&_pre]:bg-code [&_pre]:px-1.5 [&_pre]:py-1 [&_pre]:font-mono [&_pre]:text-xs [&_pre]:leading-relaxed [&_pre]:whitespace-pre-wrap [&_pre]:text-content-secondary [&_pre]:[overflow-wrap:anywhere]`;return(0,$.jsx)(`div`,{className:`flex max-h-[210px] flex-col overflow-auto rounded-md border border-stroke bg-panel`,children:[...r].sort((e,t)=>Date.parse(t.startedAt)-Date.parse(e.startedAt)).slice(0,5).map(e=>{let t=a===e.id,r=Math.round((Number(e.completedNodes)||0)/Math.max(1,Number(e.totalNodes)||1)*100);return(0,$.jsxs)(`div`,{className:`session-workflow-run border-b border-stroke-soft last:border-b-0 ${e.status}`,children:[(0,$.jsxs)(`button`,{className:`session-workflow-summary grid w-full cursor-pointer grid-cols-[20px_minmax(120px,1fr)_minmax(80px,160px)_14px] items-center gap-2.5 border-0 px-3 py-2 text-left text-content transition-colors duration-(--d-fast) hover:bg-surface-subtle focus-visible:-outline-offset-2 max-[650px]:min-h-11 max-[650px]:grid-cols-[20px_minmax(0,1fr)_14px] max-[650px]:[&_[data-slot='progress']]:col-[2/4] [&_[data-slot='progress']]:h-1 [&_>_span:nth-child(2)]:flex [&_>_span:nth-child(2)]:min-w-0 [&_>_span:nth-child(2)]:flex-col [&_small]:truncate [&_small]:text-xs [&_small]:text-content-muted [&_small]:tabular-nums [&_strong]:truncate [&_strong]:text-sm [&_strong]:font-medium ${t?`bg-surface-subtle`:`bg-transparent`}`,"aria-expanded":t,onClick:()=>s(t?``:e.id),children:[(0,$.jsx)(`span`,{className:`grid size-5 place-items-center rounded-xs ${e.status===`completed`?`bg-success-soft text-success`:e.status===`failed`?`bg-danger-soft text-danger`:e.status===`waiting_approval`?`bg-warning-soft text-warning-strong`:`bg-surface-muted text-content-muted`}`,children:e.status===`running`?(0,$.jsx)(Yt,{className:`size-3.5`}):e.status===`completed`?(0,$.jsx)(H,{size:12}):e.status===`failed`?(0,$.jsx)(At,{size:12}):(0,$.jsx)(Ot,{size:12})}),(0,$.jsxs)(`span`,{children:[(0,$.jsx)(`strong`,{children:e.workflowName}),(0,$.jsxs)(`small`,{children:[ci(e.status,n),` · v`,e.workflowRevision||1]})]}),(0,$.jsx)(Bt,{value:e.status===`completed`?100:r}),(0,$.jsx)(te,{size:14,className:`text-content-muted transition-transform duration-(--d-fast) ${t?`rotate-90`:``}`})]}),t&&(0,$.jsxs)(`div`,{className:`session-workflow-detail flex flex-col gap-1.5 border-t border-stroke-soft bg-surface-subtle py-2 pr-3 pl-[42px] max-[650px]:pl-3 [&_>_p]:text-xs [&_>_p]:text-content-muted`,children:[e.sourceMessage&&(0,$.jsxs)(`div`,{className:l,children:[(0,$.jsx)(`strong`,{children:n(`chat:workflowRun.request`)}),(0,$.jsx)(`p`,{children:e.sourceMessage})]}),e.inputs&&Object.keys(e.inputs).length>0&&(0,$.jsxs)(`div`,{className:l,children:[(0,$.jsx)(`strong`,{children:n(`chat:workflowRun.inputs`)}),(0,$.jsx)(`pre`,{children:JSON.stringify(e.inputs,null,2)})]}),(e.nodes||[]).map(t=>(0,$.jsxs)(`div`,{className:`session-workflow-node grid min-h-6 grid-cols-[15px_minmax(0,1fr)_auto] items-center gap-1.5 text-content-muted [&.completed]:text-success [&.failed]:text-danger [&_>_div]:flex [&_>_div]:gap-1 [&_>_span]:flex [&_>_span]:min-w-0 [&_>_span]:flex-col [&_small]:truncate [&_small]:text-xs [&_small]:text-content-muted [&_strong]:text-xs [&_strong]:font-medium [&_strong]:text-content ${t.status}`,children:[t.status===`completed`?(0,$.jsx)(H,{size:13}):t.status===`failed`?(0,$.jsx)(re,{size:13}):t.status===`running`?(0,$.jsx)(Yt,{className:`size-3.5`}):(0,$.jsx)(wt,{size:11}),(0,$.jsxs)(`span`,{children:[(0,$.jsx)(`strong`,{children:t.label}),(t.error||t.summary)&&(0,$.jsx)(`small`,{children:t.error||t.summary})]}),t.status===`waiting_approval`&&(0,$.jsxs)(`div`,{children:[(0,$.jsx)(Y,{size:`xs`,onClick:async()=>{await X.resolveWorkflowApproval(e.id,t.id,!0),await c()},children:n(`chat:workflowRun.approve`)}),(0,$.jsx)(Y,{size:`xs`,variant:`destructive`,onClick:async()=>{await X.resolveWorkflowApproval(e.id,t.id,!1),await c()},children:n(`chat:workflowRun.reject`)})]})]},t.id)),(e.error||e.summary)&&(0,$.jsx)(`p`,{children:e.error||e.summary}),si(e)&&(0,$.jsxs)(Y,{size:`xs`,variant:`destructive`,className:`self-start`,onClick:async()=>{await X.stopWorkflowRun(e.id),await c()},children:[(0,$.jsx)(wt,{"data-icon":`inline-start`}),n(`chat:workflowRun.stop`)]})]})]},e.id)})})}function ui(e,t){let[n,r]=(0,Q.useState)(()=>Date.now());(0,Q.useEffect)(()=>{if(!t)return;r(Date.now());let e=setInterval(()=>r(Date.now()),1e3);return()=>clearInterval(e)},[t]);let i=e?Date.parse(e):NaN;return t&&Number.isFinite(i)?Math.max(0,n-i):null}function di(e,t){it.getState().update(e,`side-chat`,{type:`open`,kind:`side-chat`}),t?.show(`side-chat`)}function fi(e,t){let{t:n,language:r}=o(),i=(0,Q.useContext)(Qe),[a,s]=(0,Q.useState)(!1),[c,l]=(0,Q.useState)(!1),[u,d]=(0,Q.useState)(!1),f=T(e=>e.capabilities.features.sessionExport===!0),p=e.name||n(`navigation:pageHeader.newChat`),{notify:m}=t,h=async()=>{if(!c){l(!0);try{await Cn(e.id,{archived:!0}),m(n(`board:action.archived`,{title:p})),i?.onArchived?.(e.id)}catch{m(n(`board:action.failed`),`error`)}finally{l(!1)}}},g=async()=>{if(!u){d(!0);try{let t=await X.exportSessionMarkdown(e.id,r),i=URL.createObjectURL(t),a=document.createElement(`a`);a.href=i,a.download=`${p.replace(/[\\/:*?"<>|\p{Cc}]/gu,`-`).slice(0,80)||`session`}.md`,a.click(),window.setTimeout(()=>URL.revokeObjectURL(i),1e3),m(n(`chat:sessionMenu.exported`,{title:p}))}catch{m(n(`chat:sessionMenu.exportFailed`),`error`)}finally{d(!1)}}},_=typeof t.contextPercent==`number`&&Number.isFinite(t.contextPercent)?Math.round(Math.min(100,Math.max(0,t.contextPercent))):null,v=[{key:`rename`,icon:gt,label:n(`chat:focusSession.renameChat`),onSelect:t.onRename},...t.onSideChat?[{key:`side-chat`,icon:pt,label:n(`board:inspector.sideChat`),onSelect:t.onSideChat,marker:`session-side-chat`}]:[],...f?[{key:`export`,icon:Fr,label:n(`chat:sessionMenu.exportMarkdown`),onSelect:()=>void g(),disabled:u,marker:`session-export`}]:[],{key:`archive`,icon:N,label:n(`board:card.archive`),onSelect:()=>void h(),disabled:c},{key:`workspace`,icon:J,label:n(`board:session.moveWorkspace`),onSelect:t.onWorkspace,disabled:t.workspaceDisabled,separator:!0},{key:`compact`,icon:Br,label:n(`chat:focusSession.compactContextNow`),onSelect:()=>t.onCompact?.(),disabled:t.compactDisabled||!t.onCompact,trailing:_===null?void 0:`${_}%`,trailingTitle:_===null?void 0:n(`board:session.contextUsage`,{percent:_})},...t.goalAvailable?[{key:`goal`,icon:Vr,label:n(`board:session.goalMode`),onSelect:t.onToggleGoal,disabled:t.goalDisabled,checked:t.goalEngaged}]:[],...t.workflowsAvailable?[{key:`workflows`,icon:Ot,label:n(`board:session.workflowRuns`),onSelect:()=>s(!0)}]:[],{key:`voice`,icon:Ar,label:n(`chat:voiceMode.open`),onSelect:t.onVoiceMode}];return{entries:v,items:(0,$.jsxs)($.Fragment,{children:[v.map(e=>{let t=e.icon,n=e.marker?{[`data-${e.marker}`]:!0}:{},r=e.checked===void 0?(0,$.jsxs)(Pt,{disabled:e.disabled,onSelect:e.onSelect,...n,children:[(0,$.jsx)(t,{}),e.label,e.trailing&&(0,$.jsx)(Ft,{className:`font-mono tabular-nums`,title:e.trailingTitle,"data-session-context-usage":!0,children:e.trailing})]}):(0,$.jsxs)(It,{checked:e.checked,disabled:e.disabled,onCheckedChange:e.onSelect,...n,children:[(0,$.jsx)(t,{}),e.label]});return(0,$.jsxs)(Q.Fragment,{children:[e.separator&&(0,$.jsx)(Nt,{}),r]},e.key)}),t.extraItems&&(0,$.jsx)(Nt,{}),t.extraItems]}),dialog:(0,$.jsx)(Un,{open:a,onOpenChange:s,children:(0,$.jsxs)(Bn,{className:`max-w-lg`,children:[(0,$.jsxs)(Hn,{children:[(0,$.jsx)(Vn,{children:n(`board:session.workflowRuns`)}),(0,$.jsx)(zn,{children:p})]}),a&&(0,$.jsx)(li,{sessionId:e.id,empty:(0,$.jsx)(`p`,{className:`py-6 text-center text-sm text-content-muted`,children:n(`board:session.workflowRunsEmpty`)})})]})})}}var pi=(0,Q.lazy)(()=>t(()=>import(`./SessionInspector-D362Va6Y.js`).then(e=>({default:e.SessionInspector})),__vite__mapDeps([112,1,3,4,5,2,6,7,8,9,20,21,10,11,12,13,15,14,17,19,22,23,18,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,113,114]))),mi=[];function hi(e){switch(e){case`changes`:return{tab:`changes`,changesView:`workspace`};case`files`:return{tab:`changes`,changesView:`session`};case`terminal`:case`processes`:return{tab:`terminal`,terminalView:e};case`sources`:return{tab:`files`};case`browser`:return{tab:`preview`};case`plan`:return{tab:`plan`};case`side-chat`:return{tab:`side-chat`};default:return null}}function gi(e){if(!(e instanceof HTMLElement)||e===document.body||e.closest(`[data-inspector-sheet]`))return null;let t=e.closest(`[role="menu"]`);if(!t)return e;let n=t.getAttribute(`aria-labelledby`);return n?document.getElementById(n):null}var _i=`a[href], button:not(:disabled), input:not(:disabled), select:not(:disabled), textarea:not(:disabled), iframe, [tabindex]:not([tabindex="-1"])`;function vi(e){if(e.key!==`Tab`||e.altKey||e.ctrlKey||e.metaKey)return;let t=[...e.currentTarget.querySelectorAll(_i)].filter(e=>e.getClientRects().length>0);if(!t.length)return;let n=t[0],r=t[t.length-1],i=document.activeElement;(e.shiftKey?i===n:i===r)&&(e.preventDefault(),(e.shiftKey?r:n).focus())}function yi(e){let t=e?.items??[];return t.length?{done:t.filter(e=>e.status===`completed`).length,total:t.length}:null}function bi({sessionId:e,messages:t,cwd:n,active:r,plan:i,goal:a=null,team:s=null,activity:c=mi,planTab:l,streaming:u,completed:d,runStartedAt:f,requestConfirm:p,children:m}){let{t:h}=o(),g=(0,Q.useContext)(Qe),_=!!(g?.phone??null),v=_||!!(g?.compact||g?.overlayOnly),[y,b]=(0,Q.useState)(null),[x,S]=(0,Q.useState)(null),C=(0,Q.useMemo)(()=>({headerHost:y,sourceActionHost:x,setSourceActionHost:S}),[y,x]),w=(0,Q.useMemo)(()=>$r(t),[t]),T=j(e=>e.open),E=j(e=>e.pinned),D=j(e=>e.setOpen),O=j(e=>e.width),k=j(e=>e.setWidth),[A,N]=(0,Q.useState)(!1);(0,Q.useEffect)(()=>{v||N(!1)},[v]);let P=v?A:T,F=oi(_&&P),I=_&&F.leaving,L=(0,Q.useRef)(null),R=`session-${e}-inspector`,z=(0,Q.useRef)(null),[B,V]=(0,Q.useState)(0);(0,Q.useLayoutEffect)(()=>{let e=z.current;if(!e)return;let t=()=>V(e.clientWidth);t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let H=M(O,B||O+800),[U,ee]=(0,Q.useState)(0);(0,Q.useLayoutEffect)(()=>{if(!y)return;let e=()=>ee(y.offsetHeight);e();let t=new ResizeObserver(e);return t.observe(y),()=>t.disconnect()},[y]);let te=(0,Q.useRef)(null),[ne,re]=(0,Q.useState)(!1),[ie,ae]=(0,Q.useState)(!1),oe=(0,Q.useCallback)((e,t=!1)=>{if(window.dispatchEvent(new Event(cn)),_&&e){let e=gi(document.activeElement);e&&(L.current=e)}re(e),ae(e&&t),v?N(e):D(e)},[v,D,_]),W=(0,Q.useCallback)((e,t)=>{j.getState().setTab(e),oe(!0,t)},[oe]),ce=(0,Q.useCallback)(e=>W(e,!0),[W]),G=(0,Q.useCallback)(()=>{let e=document.activeElement,t=!!(e&&te.current?.contains(e))||v&&!_&&(!e||e===document.body);oe(!1),t&&requestAnimationFrame(()=>document.querySelector(`[aria-controls="${CSS.escape(R)}"][data-inspector-toggle]`)?.focus())},[v,R,oe,_]),le=(0,Q.useCallback)(()=>P?G():oe(!0,!0),[G,P,oe]),K=(0,Q.useCallback)(t=>{t.preventDefault();let n=L.current;L.current=null,((n?.isConnected?n:null)??document.querySelector(`[data-session-changes][aria-controls="${CSS.escape(R)}"]`)??document.getElementById(`task-${e}-more`))?.focus({preventScroll:!0})},[R,e]),ue=_?`sheet`:v?`overlay`:`aside`,de=(0,Q.useMemo)(()=>({open:P,mode:ue,panelId:R,toggle:le,show:ce}),[P,ue,R,ce,le]),fe=(0,Q.useCallback)(e=>{let t=hi(e);if(!t)return;let n=j.getState();t.terminalView&&n.setTerminalView(t.terminalView),t.changesView&&n.setChangesView(t.changesView),W(t.tab,!1)},[W]);(0,Q.useEffect)(()=>it.subscribe((t,n)=>{let r=t.sessions[e],i=n.sessions[e];if(!r||r===i||!r.contentOpen)return;let a=r.pages.find(e=>e.id===r.activeId);if(!a)return;let o=i?.pages.find(e=>e.id===i.activeId);(r.activeId!==i?.activeId||!i?.contentOpen||a.kind===`browser`&&a.url!==o?.url)&&fe(a.kind)}),[fe,e]),(0,Q.useEffect)(()=>{if(!r)return;let t=t=>{let n=Xr(t.detail);n&&it.getState().update(e,n,{type:`open`,kind:n})};return window.addEventListener(Jr,t),()=>window.removeEventListener(Jr,t)},[r,e]),(0,Q.useEffect)(()=>{if(!r)return;let t=t=>{let n=t.detail;n===`side-chat`?di(e,de):n===`tree`&&z.current?.querySelector(`[data-session-branches]`)?.click()};return window.addEventListener(rn,t),()=>window.removeEventListener(rn,t)},[r,de,e]),qr({sessionId:e,streaming:u,completed:d,runStartedAt:f,enabled:!v,open:P,onReveal:()=>fe(`files`)});let pe=pn(e=>e.bindings.toggleInspector);(0,Q.useEffect)(()=>{if(!r)return;let e=e=>{!gn(e,pe)||fn(e)||mn(e)&&e.key.length===1||(e.preventDefault(),le())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,pe,le]),Gr(r&&v&&A,100,G),Gr(r&&!v&&T&&!E,100,G);let me=(0,Q.useRef)(()=>{});(0,Q.useEffect)(()=>()=>me.current(),[]);let he=e=>{if(e.button!==0)return;me.current(),e.preventDefault(),e.currentTarget.focus(),e.currentTarget.setPointerCapture(e.pointerId);let t=e.clientX,n=H,r=e=>k(M(n-(e.clientX-t),B)),i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i),window.removeEventListener(`pointercancel`,i)};me.current=i,window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i,{once:!0}),window.addEventListener(`pointercancel`,i,{once:!0})},q=u?yi(i):null,ge=ne&&P&&!v,_e=v&&!_&&P&&B-420>=480?420:0,ve=(P||I)&&(0,$.jsx)(Q.Suspense,{fallback:(0,$.jsx)(`p`,{role:`status`,className:`p-4 text-sm text-content-muted`,children:h(`chat:focusSession.gitLoading`)}),children:(0,$.jsx)(pi,{panelId:R,sessionId:e,cwd:n,streaming:u,plan:i,goal:a,team:s,activity:c,planTab:l,sources:w,mode:ue,requestConfirm:p,onClose:G,onOpenComponents:g?.onOpenComponents,componentTabs:g?.componentTabs,autoFocus:ue===`overlay`&&ie})});return(0,$.jsx)(He.Provider,{value:C,children:(0,$.jsx)(tt.Provider,{value:de,children:(0,$.jsxs)(`div`,{ref:z,id:`task-${e}-workspace`,tabIndex:-1,"data-task-workspace":e,"data-session-workspace":ue,"data-active":r,className:Jt(`relative flex h-full min-h-0 min-w-0 overflow-hidden bg-panel`,_&&`pb-[var(--pisper-safe-area-bottom)] [[data-mobile-keyboard='open']_&]:pb-0`),children:[(0,$.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,"data-session-conversation":!0,children:[(0,$.jsx)(`div`,{ref:b,className:`@container shrink-0`,"data-task-header":!0}),q&&(0,$.jsxs)(`div`,{className:`relative z-10 h-0.5 shrink-0 bg-surface-muted`,"data-plan-progress":!0,children:[(0,$.jsx)(`span`,{role:`progressbar`,"aria-label":h(`board:session.planLabel`,q),"aria-valuemin":0,"aria-valuemax":q.total,"aria-valuenow":q.done,className:`absolute inset-0 origin-left bg-st-run transition-transform duration-(--d-base)`,style:{transform:`scaleX(${q.done/q.total})`}}),l&&(0,$.jsx)(`button`,{type:`button`,className:`absolute top-1.5 right-3 inline-flex h-6 items-center rounded-sm bg-panel px-2 font-mono text-xs text-content-secondary tabular-nums shadow-edge hover:bg-surface-hover hover:text-content focus-visible:outline-2 focus-visible:outline-focus pointer-coarse:h-11`,"aria-label":h(`board:session.planOpen`,{plan:h(`board:session.plan`,q)}),"aria-controls":R,"data-plan-progress-open":!0,onClick:()=>ce(`plan`),children:h(`board:session.plan`,q)})]}),(0,$.jsx)(`div`,{className:Jt(`min-h-0 min-w-0 flex-1 overflow-hidden`,ge&&`animate-in duration-[220ms] ease-(--ease)`),"data-overlay-inset":_e||void 0,style:_e?{paddingRight:_e}:ge?{"--tw-enter-translate-x":`${H/2}px`}:void 0,children:m})]}),!v&&P&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{role:`separator`,tabIndex:0,"aria-orientation":`vertical`,"aria-label":h(`chat:sessionContext.resize`),title:h(`chat:sessionContext.resizeHint`),"aria-controls":R,"aria-valuemin":360,"aria-valuemax":M(1/0,B),"aria-valuenow":H,onPointerDown:he,onDoubleClick:()=>k(456),onKeyDown:e=>{if(![`ArrowLeft`,`ArrowRight`,`Enter`].includes(e.key))return;if(e.preventDefault(),e.key===`Enter`){k(456);return}let t=e.shiftKey?64:16;k(M(H+(e.key===`ArrowLeft`?t:-t),B))},className:`relative -mr-1 w-2 shrink-0 cursor-col-resize touch-none select-none outline-none after:absolute after:inset-y-0 after:left-1/2 after:w-px after:bg-stroke-soft after:transition-colors after:duration-(--d-fast) hover:after:w-[3px] hover:after:-translate-x-px hover:after:bg-focus focus-visible:after:w-[3px] focus-visible:after:bg-focus`}),(0,$.jsxs)(`aside`,{ref:te,className:Jt(`flex h-full min-h-0 shrink-0 flex-col overflow-hidden border-l border-stroke-soft`,ne&&`animate-in slide-in-from-right duration-[220ms] ease-(--ease)`),style:{width:H},"data-inspector-aside":!0,"data-inspector-pinned":E||void 0,children:[(0,$.jsx)(`div`,{"aria-hidden":`true`,"data-window-drag-region":!0,"data-inspector-titlebar-gap":!0,className:`hidden h-[52px] shrink-0 [[data-custom-titlebar]_&]:block`}),(0,$.jsx)(`div`,{className:`min-h-0 flex-1`,children:ve})]})]}),v&&(P||I)&&(0,$.jsx)($.Fragment,{children:_?(0,$.jsx)(Sn,{open:P,onOpenChange:e=>!e&&G(),children:(0,$.jsxs)(yn,{side:`bottom`,showCloseButton:!1,"data-inspector-sheet":!0,"data-sheet-leaving":I||void 0,onAnimationEnd:e=>{e.target===e.currentTarget&&!P&&F.finish()},onCloseAutoFocus:K,className:`gap-0 data-[side=bottom]:h-[min(86dvh,calc(100dvh-var(--pisper-safe-area-top)-48px))] overflow-hidden rounded-t-(--r-sheet) bg-panel p-0 pb-[var(--pisper-safe-area-bottom)]`,children:[(0,$.jsx)(bn,{className:`sr-only`,children:h(`board:inspector.label`)}),(0,$.jsx)(xn,{className:`sr-only`,children:h(`board:phone.inspectorDescription`)}),(0,$.jsx)(se,{onDismiss:G}),(0,$.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col [&_[data-slot=segmented-control]]:h-11 [&_[data-slot=segmented-control-item]]:h-10 [&_[data-slot=segmented-control-item]]:px-3`,children:ve})]})}):(0,$.jsx)(`aside`,{ref:te,"data-inspector-overlay":!0,onKeyDown:vi,className:Jt(`absolute right-0 bottom-0 z-30 max-w-[calc(100%-24px)] overflow-hidden border-l border-stroke bg-panel shadow-float`,`animate-in slide-in-from-right duration-[220ms] ease-(--ease)`),style:{width:420,top:U},children:ve})})]})})})}var xi=e(i(),1),Si=(0,Q.createContext)(null),Ci=(0,Q.lazy)(()=>t(()=>import(`./public-session-CXzhUUNr.js`),__vite__mapDeps([115,1,2,3,4,5,6,7,8,9,116,15,30,29,31,28,117,89,118,74,21,75,12,13,119,10,11,32,107])));function wi({session:e,cwd:t,streaming:n,treeAvailable:r,branches:i,onOpenTree:a,...s}){let{t:c,language:l}=o(),u=(0,Q.useContext)(tt),d=fi(e,{...s,onSideChat:()=>di(e.id,u)}),f=e.name||c(`navigation:pageHeader.newChat`),m=On(e.projectless?``:t,l),h=p({queryKey:[`session-change-summary`,e.id,n],queryFn:()=>Yn(e.id),staleTime:1e4}),g=h.data?.status===`known`?h.data:null,_=g?.changedFiles??0,v=pn(e=>e.bindings.toggleInspector),y=pn(e=>e.bindings.sessionTree),b=vn(v),x=vn(y),S=_>0?c(`board:session.changes`,{count:_,added:g?.added??0,removed:g?.removed??0}):null,C=S?`${c(`board:inspector.label`)} · ${S}`:c(`board:inspector.label`),w=b?c(`board:session.withShortcut`,{label:C,shortcut:b}):C,T=i>0?c(`board:session.treeBranches`,{count:i}):c(`board:session.tree`),E=x?c(`board:session.withShortcut`,{label:T,shortcut:x}):T;return(0,$.jsxs)(`header`,{"data-session-header":!0,"data-focus-region":`header`,"data-window-drag-region":!0,className:`flex h-[52px] min-w-0 shrink-0 items-center gap-2 pr-3 pl-4 [[data-custom-titlebar]_&]:pr-[144px]`,children:[(0,$.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-1.5`,"data-window-drag-region":!0,children:[e.botId&&(0,$.jsx)(Q.Suspense,{fallback:null,children:(0,$.jsx)(Ci,{botId:e.botId,part:`avatar`})}),(0,$.jsxs)(zt,{children:[(0,$.jsx)(Lt,{asChild:!0,children:(0,$.jsxs)(`button`,{type:`button`,id:`task-${e.id}-more`,"data-session-menu":!0,className:Jt(`group inline-flex h-8 min-w-0 shrink items-center gap-1 rounded-sm px-2 text-[15px] leading-6 font-medium text-content hover:bg-surface-hover focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus data-[state=open]:bg-surface-hover pointer-coarse:h-11`,rr),"aria-label":c(`board:session.titleMenu`,{title:f}),children:[(0,$.jsx)(`span`,{className:`truncate`,"data-session-title":!0,children:f}),(0,$.jsx)(U,{className:`size-3.5 flex-none text-content-muted`,"aria-hidden":`true`})]})}),(0,$.jsx)(Rt,{align:`start`,className:`min-w-60`,children:d.items})]}),(0,$.jsx)(`span`,{className:`min-w-0 max-w-[160px] flex-none truncate font-mono text-xs text-content-muted @max-[560px]:hidden`,title:t,"data-session-project":!0,children:m}),e.botId&&(0,$.jsx)(Q.Suspense,{fallback:null,children:(0,$.jsx)(Ci,{botId:e.botId,part:`settings`})}),r&&(0,$.jsxs)(Y,{type:`button`,variant:`ghost`,className:Jt(`h-7 min-w-7 flex-none gap-1 px-1.5 font-mono text-xs font-normal text-content-muted tabular-nums hover:text-content pointer-coarse:h-11 pointer-coarse:min-w-11`),"aria-haspopup":`dialog`,"aria-label":E,title:E,"aria-keyshortcuts":ar(y),"data-session-branches":i,onClick:e=>a(`branches`,e.currentTarget),children:[(0,$.jsx)(ct,{className:`size-3.5`,"aria-hidden":`true`}),i>0&&(0,$.jsx)(`span`,{"aria-hidden":`true`,children:i})]})]}),u&&(0,$.jsx)(Y,{type:`button`,variant:`ghost`,className:Jt(`h-8 flex-none gap-1.5 px-2 text-[13px] font-normal text-content-secondary hover:text-content pointer-coarse:h-11`,S?``:`w-8 px-0 pointer-coarse:w-11`,u.open&&`bg-surface-hover text-content ring-1 ring-stroke ring-inset`),"data-inspector-toggle":!0,"data-session-changes":_,"aria-controls":u.panelId,"aria-expanded":u.open,"aria-label":w,title:w,"aria-keyshortcuts":ar(v),onClick:u.toggle,children:S&&g?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Ee,{className:`size-3.5`,"aria-hidden":`true`}),(0,$.jsx)(`span`,{"aria-hidden":`true`,children:c(`board:session.changedFiles`,{count:_})}),(0,$.jsxs)(`span`,{className:`font-mono text-xs text-success tabular-nums`,"aria-hidden":`true`,children:[`+`,g.added??0]}),(0,$.jsxs)(`span`,{className:`font-mono text-xs text-danger tabular-nums`,"aria-hidden":`true`,children:[`−`,g.removed??0]})]}):(0,$.jsx)(mt,{"aria-hidden":`true`})}),d.dialog]})}var Ti=`relative grid size-11 flex-none place-items-center rounded-full bg-surface-muted text-content focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus active:bg-surface-hover dark:bg-surface-active`;function Ei({leading:e,session:t,cwd:n,streaming:r,runStartedAt:i,approvals:a,failed:s,stopped:c,treeAvailable:l,branches:u,onOpenTree:d,...f}){let{t:m,language:h}=o(),g=(0,Q.useContext)(tt),_=(0,Q.useContext)(Qe),v=ui(i,r),y=fi(t,f),[b,x]=(0,Q.useState)(!1),S=(0,Q.useId)(),C=t.name||m(`navigation:pageHeader.newChat`),w=On(t.projectless?``:n,h),T=p({queryKey:[`session-change-summary`,t.id,r],queryFn:()=>Yn(t.id),staleTime:1e4}),E=T.data?.status===`known`?T.data.changedFiles??0:0,D=a>0?{kind:`approval`,label:m(`board:status.approval`)}:r?{kind:`running`,label:v===null?m(`board:status.running`):m(`board:phone.running`,{elapsed:An(v)})}:s?{kind:`failed`,label:m(`board:status.failed`)}:c?{kind:`stopped`,label:m(`board:status.stopped`)}:null,O=()=>g?.show(`changes`),k=[...l?[{key:`tree`,icon:ct,label:u>0?m(`board:session.treeBranches`,{count:u}):m(`board:session.tree`),onSelect:()=>d(`branches`),marker:`session-tree`}]:[],{key:`side-chat`,icon:pt,label:m(`board:inspector.sideChat`),onSelect:()=>di(t.id,g),marker:`session-side-chat`},...g?[{key:`inspector`,icon:Ee,label:m(`board:phone.openInspector`),onSelect:O,marker:`inspector-toggle`}]:[],...y.entries.map((e,t)=>t===0?{...e,separator:!0}:e)];return(0,$.jsxs)(`header`,{"data-session-header":`phone`,className:`grid h-14 min-w-0 shrink-0 grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center bg-panel px-3`,children:[(0,$.jsx)(`div`,{className:`flex min-w-0 items-center`,children:e}),(0,$.jsxs)(`button`,{type:`button`,"data-session-menu-trigger":!0,"aria-haspopup":`dialog`,"aria-expanded":b,"aria-controls":b?S:void 0,"aria-label":m(`board:session.titleMenu`,{title:C}),className:`flex h-11 max-w-[min(58vw,260px)] min-w-0 flex-col items-center justify-center rounded-[var(--r-md)] px-2 outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus active:bg-surface-hover`,onClick:()=>x(!0),children:[(0,$.jsxs)(`span`,{className:`flex max-w-full min-w-0 items-center gap-0.5 text-base leading-5 font-semibold text-content`,children:[(0,$.jsx)(`span`,{className:`truncate`,"data-session-title":!0,children:C}),(0,$.jsx)(U,{className:`size-4 flex-none text-content-muted`,"aria-hidden":`true`})]}),(0,$.jsxs)(`span`,{className:`flex max-w-full min-w-0 items-center gap-1 text-xs leading-4 text-content-muted`,children:[(0,$.jsx)(`span`,{className:`min-w-0 truncate font-mono`,title:n,"data-session-project":!0,children:w}),D&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,$.jsxs)(`span`,{className:Jt(`flex flex-none items-center gap-1`,(D.kind===`approval`||D.kind===`failed`)&&`font-medium text-warning-strong`),"data-session-status":D.kind,children:[(0,$.jsx)(jn,{status:D.kind===`running`?`run`:D.kind===`stopped`?`stopped`:`attention`,className:`size-3`}),(0,$.jsx)(`span`,{className:`tabular-nums`,children:D.label})]})]})]})]}),(0,$.jsx)(`div`,{className:`flex min-w-0 items-center justify-end`,children:E>0&&g?(0,$.jsxs)(`button`,{type:`button`,"data-session-changes":E,"aria-haspopup":`dialog`,"aria-controls":g.panelId,"aria-label":m(`board:phone.changesLabel`,{count:E}),className:Ti,onClick:O,children:[(0,$.jsx)(Ee,{className:`size-5`,strokeWidth:1.75,"aria-hidden":`true`}),(0,$.jsx)(`span`,{"aria-hidden":`true`,className:`absolute top-1.5 right-1 grid h-4 min-w-4 place-items-center rounded-full bg-content px-1 text-[10px] leading-none font-semibold text-panel tabular-nums`,children:E>99?`99+`:E})]}):_?.phone?(0,$.jsx)(`button`,{type:`button`,"data-phone-new-task":!0,"aria-label":m(`navigation:shell.newTask`),className:Ti,onClick:_.phone.onNewTask,children:(0,$.jsx)(Ct,{className:`size-5`,strokeWidth:1.75,"aria-hidden":`true`})}):null}),(0,$.jsx)(Sn,{open:b,onOpenChange:x,children:(0,$.jsxs)(yn,{id:S,side:`bottom`,showCloseButton:!1,"data-session-menu-sheet":!0,className:`max-h-[85dvh] gap-0 rounded-t-(--r-sheet) px-2 pt-1 pb-[calc(8px+var(--pisper-safe-area-bottom))]`,children:[(0,$.jsx)(se,{onDismiss:()=>x(!1)}),(0,$.jsx)(bn,{className:`truncate px-3 pt-1 pb-0.5 text-base font-semibold`,children:C}),(0,$.jsx)(xn,{className:`truncate px-3 pb-2 font-mono text-xs text-content-muted`,children:w}),(0,$.jsx)(`div`,{className:`min-h-0 overflow-y-auto`,role:`list`,children:k.map(e=>{let t=e.icon,n=e.marker?{[`data-${e.marker}`]:!0}:{};return(0,$.jsxs)(`div`,{role:`listitem`,children:[e.separator&&(0,$.jsx)(`div`,{"aria-hidden":`true`,className:`mx-3 my-1 h-px bg-stroke-soft`}),(0,$.jsxs)(`button`,{type:`button`,disabled:e.disabled,"aria-pressed":e.checked,className:`flex h-12 w-full min-w-0 items-center gap-3 rounded-[var(--r-md)] px-3 text-left text-base text-content focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus active:bg-surface-hover disabled:text-content-faint`,onClick:()=>{x(!1),e.onSelect()},...n,children:[(0,$.jsx)(t,{className:`size-[18px] flex-none text-content-secondary`,strokeWidth:1.75,"aria-hidden":`true`}),(0,$.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:e.label}),e.trailing&&(0,$.jsx)(`span`,{className:`flex-none font-mono text-sm text-content-muted tabular-nums`,title:e.trailingTitle,"data-session-context-usage":!0,children:e.trailing}),e.checked&&(0,$.jsx)(H,{className:`size-4 flex-none text-content`,"aria-hidden":`true`})]})]},e.key)})})]})}),y.dialog]})}function Di({cwd:e,selection:t}){let{t:n}=o(),r=D(),i=(0,Q.useRef)(null);return{input:(0,$.jsx)(`input`,{ref:i,type:`file`,className:`hidden`,accept:xe,multiple:!0,"aria-label":n(`chat:focusSession.addAttachment`),onChange:e=>{let n=[...e.currentTarget.files||[]];e.currentTarget.value=``,n.length&&t.addFiles(n)}}),choose:async()=>{if(r){i.current?.click();return}if(window.pisperDesktop?.pickFiles){try{let n=await window.pisperDesktop.pickFiles(e);t.addAttachments(ce(n||[]))}catch(e){t.setError(e)}return}i.current?.click()}}}function Oi({cwd:e,selection:t}){let{t:n}=o(),{input:r,choose:i}=Di({cwd:e,selection:t});return(0,$.jsxs)($.Fragment,{children:[r,(0,$.jsxs)(`button`,{type:`button`,className:`relative grid size-[30px] min-w-[30px] flex-none cursor-pointer place-items-center rounded-sm border-0 bg-transparent text-content-muted transition-colors hover:bg-surface-hover hover:text-content disabled:cursor-not-allowed disabled:opacity-50 max-[650px]:size-11 max-[650px]:min-w-11 pointer-coarse:size-11 pointer-coarse:min-w-11`,title:n(`chat:focusSession.addAttachment`),"aria-label":n(`chat:focusSession.addAttachment`),onClick:()=>void i(),children:[(0,$.jsx)(ht,{size:16}),t.attachments.length>0&&(0,$.jsx)(`span`,{className:`absolute -top-1 -right-1 grid h-4 min-w-4 place-items-center rounded-full border-2 border-panel bg-star px-0.5 text-[10px] leading-none font-medium text-on-accent tabular-nums`,children:t.attachments.length})]})]})}function ki({attachments:e,preparing:t=[],onRemove:n,compact:r=!1}){let{t:i}=o();return!e.length&&!t.length?null:(0,$.jsxs)(`div`,{className:`attachment-tray [&.compact]:max-h-[58px] flex max-h-[116px] flex-wrap gap-[6px] overflow-auto ${r?`compact`:``}`,children:[t.map(e=>(0,$.jsxs)(`div`,{className:`flex min-h-[42px] max-w-64 items-center gap-2 rounded-sm border border-stroke bg-surface-subtle pr-1 pl-2.5`,"aria-busy":`true`,children:[(0,$.jsx)(Yt,{className:`size-3.5`}),(0,$.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-mono text-xs text-content`,children:e.name}),(0,$.jsx)(`span`,{className:`sr-only`,children:i(`chat:focusSession.preparingAttachments`)}),(0,$.jsx)(`button`,{type:`button`,className:`grid size-8 shrink-0 cursor-pointer place-items-center rounded-sm text-content-muted hover:bg-danger-soft hover:text-danger max-[650px]:size-11`,"aria-label":i(`chat:focusSession.removeName`,{name:e.name}),onClick:()=>n(e.id),children:(0,$.jsx)(At,{size:14})})]},e.id)),e.map(e=>(0,$.jsxs)(`div`,{className:`attachment-chip grid min-h-[42px] min-w-[150px] max-w-[250px] grid-cols-[30px_minmax(0,1fr)_auto] items-center gap-2 rounded-sm border border-stroke bg-surface-subtle p-1.5 pr-1 [&_>_button]:grid [&_>_button]:size-7 [&_>_button]:cursor-pointer [&_>_button]:place-items-center [&_>_button]:rounded-xs [&_>_button]:text-content-muted [&_>_button:hover]:bg-danger-soft [&_>_button:hover]:text-danger max-[650px]:[&_>_button]:size-11 [&_>_img]:size-[30px] [&_>_img]:rounded-xs [&_>_img]:object-cover [&_>_span:nth-child(2)]:flex [&_>_span:nth-child(2)]:min-w-0 [&_>_span:nth-child(2)]:flex-col [&_small]:text-xs [&_small]:text-content-muted [&_small]:tabular-nums [&_strong]:truncate [&_strong]:font-mono [&_strong]:text-xs [&_strong]:font-medium [&_strong]:text-content`,children:[e.kind===`image`?(0,$.jsx)(`img`,{src:`data:${e.mimeType};base64,${e.data}`,alt:``}):(0,$.jsx)(`span`,{className:`grid size-[30px] place-items-center rounded-xs border border-key-border bg-key text-content-muted`,children:(0,$.jsx)(De,{size:13})}),(0,$.jsxs)(`span`,{children:[(0,$.jsx)(`strong`,{children:e.name}),(0,$.jsxs)(`small`,{children:[e.kind===`path`?i(`chat:focusSession.localPath`):e.kind===`image`?i(`chat:focusSession.image`):e.kind===`document`?i(`chat:focusSession.document`):i(`chat:focusSession.text`),e.kind===`path`?``:` · ${Dn(e.size)}`,e.truncated?` · ${i(`chat:focusSession.truncated`)}`:``]})]}),(0,$.jsx)(`button`,{type:`button`,"aria-label":i(`chat:focusSession.removeName`,{name:e.name}),onClick:()=>n(String(e.id||``)),children:(0,$.jsx)(At,{size:12})})]},e.id))]})}function Ai({open:e,sessionId:t,cwd:n=``,onClose:r,onSelect:i,onCommandSelect:a}){let{t:s}=o(),c=T(e=>e.capabilities),l=w(c,`workflows`),[u,d]=(0,Q.useState)([]),[f,p]=(0,Q.useState)(`all`),[m,h]=(0,Q.useState)(``),[g,_]=(0,Q.useState)(null),[v,y]=(0,Q.useState)({}),[b,x]=(0,Q.useState)(!1),[C,E]=(0,Q.useState)(``);(0,Q.useEffect)(()=>{if(!e)return;let r=!0;return p(`all`),h(``),_(null),y({}),x(!0),E(``),Promise.all([t?X.getSessionCommands(t):X.getWorkspaceCommands(n),l?S(`/api/workflows`):Promise.resolve({workflows:[]}),S(`/api/plugins?sessionId=${encodeURIComponent(t)}`)]).then(([e,t,n])=>{if(!r)return;let i=new Set(n.callableToolNames||[]);d([...(e.commands||[]).map(e=>({kind:e.source,id:e.name,name:e.name,description:e.description||``,inputs:[],argumentHint:e.argumentHint,invocation:e.invocation})),...(t.workflows||[]).filter(e=>e.status===`published`).map(e=>({kind:`workflow`,id:e.id,name:e.name,description:e.description||``,inputs:e.inputs||[]})),...(n.plugins||[]).flatMap(e=>(e.capabilities||[]).filter(e=>i.has(e.name)).map(t=>({kind:`tool`,id:t.name,name:t.id?lr(t,s):String(t.label||t.name),description:t.id?ur(t,s):t.description,inputs:[],sourceName:e.name})))])}).catch(e=>{r&&(d([]),E(e instanceof Error?e.message:String(e)))}).finally(()=>r&&x(!1)),()=>{r=!1}},[n,e,t,s,l]);let D=(0,Q.useMemo)(()=>({all:u.length,prompt:u.filter(e=>e.kind===`prompt`).length,skill:u.filter(e=>e.kind===`skill`).length,tool:u.filter(e=>e.kind===`tool`).length,workflow:u.filter(e=>e.kind===`workflow`).length}),[u]),O=(0,Q.useMemo)(()=>{let e=m.trim().toLowerCase();return u.filter(t=>(f===`all`||t.kind===f)&&(!e||`${t.name} ${t.id} ${t.description} ${t.kind===`tool`?t.sourceName:``}`.toLowerCase().includes(e)))},[f,m,u]),k=e=>{let t=e;p(t),g&&t!==`all`&&g.kind!==t&&_(null)},A=e=>{_(e),y(Object.fromEntries(e.inputs.map(e=>[e.name,e.defaultValue??``])))};return(0,$.jsx)(Un,{open:e,onOpenChange:e=>!e&&r(),children:(0,$.jsxs)(Bn,{className:`chat-resource-dialog w-[min(820px,calc(100vw_-_32px))] h-[min(600px,calc(100dvh_-_32px))] max-w-[820px] sm:max-w-[820px] grid-rows-[auto_minmax(0,1fr)] overflow-hidden max-[650px]:w-[calc(100vw_-_16px)] max-[650px]:h-[calc(100dvh_-_16px)] z-[220] gap-0 p-0 ring-0`,overlayClassName:`z-[220]`,showCloseButton:!1,children:[(0,$.jsxs)(`div`,{className:`chat-resource-head flex items-start justify-between gap-4 border-b border-stroke-soft px-[18px] pt-4 pb-3.5 max-[650px]:p-3.5 [&_[data-slot='dialog-description']]:mt-0.5 [&_[data-slot='dialog-description']]:text-xs [&_[data-slot='dialog-description']]:text-content-muted [&_[data-slot='dialog-title']]:text-base [&_[data-slot='dialog-title']]:font-semibold`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(Vn,{children:s(`chat:resourcePicker.title`)}),(0,$.jsx)(zn,{children:s(`chat:resourcePicker.description`)})]}),(0,$.jsx)(Y,{size:`icon-sm`,variant:`ghost`,"aria-label":s(`chat:resourcePicker.close`),onClick:r,children:(0,$.jsx)(At,{})})]}),(0,$.jsxs)(`div`,{className:`chat-resource-body grid min-h-0 grid-cols-[minmax(0,1.1fr)_minmax(260px,.9fr)] overflow-hidden max-[650px]:grid-cols-[1fr] max-[650px]:grid-rows-[minmax(0,1fr)_minmax(190px,auto)] max-[650px]:overflow-hidden`,children:[(0,$.jsxs)(`div`,{className:`chat-resource-browser flex min-h-0 min-w-0 flex-col border-r border-stroke-soft p-3 max-[650px]:min-h-0 max-[650px]:border-r-0 max-[650px]:border-b`,children:[(0,$.jsx)(Wt,{value:f,onValueChange:k,className:`chat-resource-tabs w-full [&_[data-slot='tabs-list']]:grid [&_[data-slot='tabs-list']]:h-9 [&_[data-slot='tabs-list']]:w-full [&_[data-slot='tabs-list']]:rounded-sm [&_[data-slot='tabs-list']]:border [&_[data-slot='tabs-list']]:border-stroke [&_[data-slot='tabs-list']]:bg-surface-muted [&_[data-slot='tabs-list']]:p-0.5 [&_[data-slot='tabs-trigger']]:min-w-0 [&_[data-slot='tabs-trigger']]:gap-1 [&_[data-slot='tabs-trigger']]:rounded-xs [&_[data-slot='tabs-trigger']]:px-1.5 [&_[data-slot='tabs-trigger']]:text-xs [&_[data-slot='tabs-trigger']]:text-content-secondary [&_[data-slot='tabs-trigger'][data-state='active']]:bg-key [&_[data-slot='tabs-trigger'][data-state='active']]:text-content [&_[data-slot='tabs-trigger'][data-state='active']]:shadow-key [&_[data-slot='tabs-trigger']_small]:text-xs [&_[data-slot='tabs-trigger']_small]:font-normal [&_[data-slot='tabs-trigger']_small]:text-content-muted [&_[data-slot='tabs-trigger']_small]:tabular-nums ${l?`[&_[data-slot='tabs-list']]:grid-cols-[repeat(5,minmax(0,1fr))]`:`[&_[data-slot='tabs-list']]:grid-cols-[repeat(4,minmax(0,1fr))]`}`,children:(0,$.jsxs)(Ut,{"aria-label":s(`chat:resourcePicker.categories`),children:[(0,$.jsxs)(Ht,{value:`all`,children:[s(`chat:resourcePicker.all`),(0,$.jsx)(`small`,{children:D.all})]}),(0,$.jsxs)(Ht,{value:`prompt`,children:[s(`chat:resourcePicker.prompt`),(0,$.jsx)(`small`,{children:D.prompt})]}),(0,$.jsxs)(Ht,{value:`skill`,children:[s(`chat:resourcePicker.skill`),(0,$.jsx)(`small`,{children:D.skill})]}),(0,$.jsxs)(Ht,{value:`tool`,children:[s(`chat:resourcePicker.tool`),(0,$.jsx)(`small`,{children:D.tool})]}),l&&(0,$.jsxs)(Ht,{value:`workflow`,children:[s(`chat:resourcePicker.workflow`),(0,$.jsx)(`small`,{children:D.workflow})]})]})}),(0,$.jsxs)(qn,{className:`chat-resource-search mt-2`,children:[(0,$.jsx)(Kn,{children:(0,$.jsx)(bt,{"aria-hidden":`true`})}),(0,$.jsx)(Gn,{autoFocus:!0,value:m,"aria-label":s(`chat:resourcePicker.search`),onChange:e=>h(e.target.value),placeholder:s(`chat:resourcePicker.search`)})]}),(0,$.jsxs)(`div`,{className:`chat-resource-list mt-2 flex min-h-0 [flex:1_1_0] flex-col gap-px overflow-y-auto [overscroll-behavior:contain] [scrollbar-gutter:stable] [touch-action:pan-y] [&_>_button]:relative [&_>_button]:grid [&_>_button]:w-full [&_>_button]:cursor-pointer [&_>_button]:grid-cols-[28px_minmax(0,1fr)_auto] [&_>_button]:items-center [&_>_button]:gap-2 [&_>_button]:rounded-sm [&_>_button]:px-2 [&_>_button]:py-1.5 [&_>_button]:text-left [&_>_button]:text-content [&_>_button:hover]:bg-surface-hover [&_>_button.active]:bg-surface-hover [&_>_button.active]:before:absolute [&_>_button.active]:before:inset-y-1.5 [&_>_button.active]:before:left-0 [&_>_button.active]:before:w-[3px] [&_>_button.active]:before:rounded-full [&_>_button.active]:before:bg-star max-[650px]:[&_>_button]:min-h-11 [&_button_>_span:nth-child(2)]:flex [&_button_>_span:nth-child(2)]:min-w-0 [&_button_>_span:nth-child(2)]:flex-col [&_strong]:truncate [&_strong]:text-[13px] [&_strong]:font-medium [&_small]:truncate [&_small]:text-xs [&_small]:text-content-muted [&_em]:text-xs [&_em]:whitespace-nowrap [&_em]:text-content-muted [&_em]:not-italic [&_>_p]:m-auto [&_>_p]:text-xs [&_>_p]:text-content-muted`,children:[O.map(e=>{let t=e.kind===`prompt`?ae:e.kind===`skill`?V:e.kind===`tool`?kt:Ot;return(0,$.jsxs)(`button`,{type:`button`,className:g?.kind===e.kind&&g.id===e.id?`active`:``,onClick:()=>A(e),children:[(0,$.jsx)(`span`,{className:`list-icon grid size-7 place-items-center rounded-sm bg-surface-muted text-content-secondary`,children:(0,$.jsx)(t,{size:15})}),(0,$.jsxs)(`span`,{children:[(0,$.jsx)(`strong`,{children:e.name}),(0,$.jsx)(`small`,{children:e.description})]}),(0,$.jsx)(`em`,{children:e.kind===`prompt`?s(`chat:resourcePicker.prompt`):e.kind===`skill`?`Skill`:e.kind===`tool`?s(`chat:resourcePicker.tool`):s(`chat:resourcePicker.workflow`)})]},`${e.kind}:${e.id}`)}),!O.length&&(0,$.jsx)(`p`,{children:b?s(`chat:resourcePicker.loading`):C||s(`chat:resourcePicker.empty`)})]})]}),(0,$.jsx)(`div`,{className:`chat-resource-config flex min-h-0 min-w-0 flex-col gap-4 overflow-y-auto overscroll-contain p-[18px] max-[650px]:max-h-[230px] max-[650px]:min-h-0 [&_>_div:first-child]:flex [&_>_div:first-child]:flex-col [&_>_div:first-child]:gap-1 [&_>_p]:m-auto [&_>_p]:text-xs [&_>_p]:text-content-muted [&_p]:text-xs [&_p]:text-content-muted [&_strong]:text-[15px] [&_strong]:font-medium`,children:g?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`strong`,{children:g.name}),(0,$.jsx)(`p`,{children:g.description||s(`chat:resourcePicker.noDescription`)})]}),g.kind===`workflow`&&g.inputs.length>0&&(0,$.jsx)(`div`,{className:`chat-resource-inputs flex flex-col gap-3 [&_label]:grid [&_label]:gap-1.5 [&_label]:text-xs [&_label]:font-medium [&_label]:text-content-secondary`,children:g.inputs.map(e=>(0,$.jsxs)(`label`,{children:[(0,$.jsxs)(`span`,{children:[e.label,e.required?` *`:``]}),e.type===`boolean`?(0,$.jsx)(Mt,{checked:!!v[e.name],onCheckedChange:t=>y(n=>({...n,[e.name]:t===!0}))}):(0,$.jsx)(Wn,{type:e.type===`number`?`number`:`text`,required:e.required,value:String(v[e.name]??``),onChange:t=>y(n=>({...n,[e.name]:t.target.value}))})]},e.id))}),g.kind===`prompt`&&g.argumentHint&&(0,$.jsx)(`code`,{className:`w-fit max-w-full rounded-xs bg-inline-code px-1.5 py-1 font-mono text-xs [overflow-wrap:anywhere] text-content-secondary`,children:g.argumentHint}),(0,$.jsx)(Y,{className:`chat-resource-confirm min-h-8 min-w-[112px] self-start bg-star text-[var(--on-accent)] hover:bg-star-hover max-[650px]:min-h-11`,onClick:()=>{if(g){if(g.kind===`prompt`){a(g.invocation||`/${g.name}`),r();return}i({kind:g.kind,resourceId:g.id,resourceName:g.name,arguments:g.kind===`workflow`?v:void 0,behavior:g.kind===`workflow`?`background`:`foreground`}),r()}},children:g.kind===`prompt`?s(`chat:resourcePicker.insertPrompt`):s(`chat:resourcePicker.useResource`)})]}):(0,$.jsx)(`p`,{children:s(`chat:resourcePicker.chooseResource`)})})]})]})})}function ji(e){let t=e.getHours();return t>=5&&t<11?`morning`:t>=11&&t<13?`noon`:t>=13&&t<18?`afternoon`:t>=18&&t<23?`evening`:`lateNight`}function Mi(e){let t=new Date(e);return t.setHours(e.getHours()+1,0,0,0),Math.max(1e3,t.getTime()-e.getTime())}function Ni(){let{t:e}=o(),[t,n]=(0,Q.useState)(()=>new Date);(0,Q.useEffect)(()=>{let e=window.setTimeout(()=>n(new Date),Mi(t));return()=>window.clearTimeout(e)},[t]);let r=ji(t),i=e(r===`morning`?`chat:newTask.greetingMorning`:r===`noon`?`chat:newTask.greetingNoon`:r===`afternoon`?`chat:newTask.greetingAfternoon`:r===`evening`?`chat:newTask.greetingEvening`:`chat:newTask.greetingLateNight`);return(0,$.jsxs)(`div`,{className:`grid min-h-full content-center justify-items-center gap-2 text-center max-[650px]:gap-3`,"data-new-task-greeting":!0,children:[(0,$.jsx)(dr,{size:32}),(0,$.jsx)(`h2`,{className:`text-2xl! font-semibold tracking-[-.01em] text-balance text-content max-[650px]:text-xl!`,children:i}),(0,$.jsx)(`p`,{className:`max-w-[46ch] text-sm leading-6 text-content-muted max-[650px]:hidden`,children:e(`board:home.draftHint`)})]})}function Pi({phone:e,leading:t,project:n}){let{t:r}=o();return e?(0,$.jsxs)(`header`,{"data-session-header":`draft`,"data-focus-region":`header`,className:`grid h-14 min-w-0 shrink-0 grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center bg-panel px-3`,children:[(0,$.jsx)(`div`,{className:`flex min-w-0 items-center`,children:t}),(0,$.jsxs)(`div`,{className:`flex max-w-[min(58vw,260px)] min-w-0 flex-col items-center justify-center`,children:[(0,$.jsx)(`h1`,{className:`max-w-full truncate px-1.5 text-base leading-5 font-semibold text-content`,children:r(`board:home.draftTitle`)}),n]}),(0,$.jsx)(`span`,{"aria-hidden":`true`})]}):(0,$.jsxs)(`header`,{"data-session-header":`draft`,"data-focus-region":`header`,"data-window-drag-region":!0,className:`flex h-[52px] min-w-0 shrink-0 items-center gap-2 border-b border-stroke-soft pr-2 pl-4 [[data-custom-titlebar]_&]:pr-[144px]`,children:[t,(0,$.jsx)(`h1`,{className:`flex-none text-[15px] leading-6 font-semibold text-content`,children:r(`board:home.draftTitle`)}),(0,$.jsx)(`span`,{className:`min-w-0 truncate text-xs text-content-muted`,children:r(`board:home.draftSubtitle`)})]})}var Fi=1e3;function Ii({option:e,selected:t,disabled:n,onSelect:r}){let i=e.icon;return(0,$.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":t,disabled:n,className:Jt(`grid min-h-11 w-full cursor-pointer grid-cols-[auto_minmax(0,1fr)_16px] items-center gap-2.5 rounded-sm px-2 py-1.5 text-left text-content hover:bg-surface-hover focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus disabled:cursor-default disabled:opacity-50 disabled:hover:bg-transparent`,t&&`bg-surface-hover`),"data-mode-option":e.value,onClick:()=>r(e.value),children:[(0,$.jsx)(`span`,{className:`grid size-7 place-items-center rounded-sm bg-surface-muted text-content-secondary`,children:(0,$.jsx)(i,{size:14,"aria-hidden":`true`})}),(0,$.jsxs)(`span`,{className:`flex min-w-0 flex-col gap-0.5`,children:[(0,$.jsx)(`strong`,{className:`text-[13px] font-medium`,children:e.label}),(0,$.jsx)(`small`,{className:`text-xs leading-normal text-content-muted`,children:e.description})]}),t?(0,$.jsx)(H,{size:15,strokeWidth:2.25,"aria-hidden":`true`}):(0,$.jsx)(`span`,{})]})}function Li({label:e,hint:t,children:n}){return(0,$.jsxs)(`div`,{role:`radiogroup`,"aria-label":e,className:`flex flex-col gap-0.5`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between px-2 pt-1.5 pb-1 text-xs font-medium text-content-muted`,children:[(0,$.jsx)(`span`,{children:e}),t]}),n]})}function Ri({approvalMode:e,onApprovalModeChange:t,approvalDisabled:n=!1,runMode:r,onRunModeChange:i,runModeDisabled:a=!1,goalsAvailable:s,teamAvailable:c,goal:l,tokenBudget:u,onTokenBudgetChange:d,onSaveTokenBudget:f,sheet:p=!1,collapse:m=!1,open:h,onOpenChange:g}){let{t:_}=o(),[v,y]=(0,Q.useState)(!1),[b,x]=(0,Q.useState)(!1),S=h??b,C=e=>{h===void 0&&x(e),g?.(e)},w=[{value:`approval-required`,label:_(`chat:focusSession.approvalRequired`),description:_(`chat:focusSession.approvalRequiredShowsADiffBeforeWriting`),icon:Pr},{value:`workspace-write`,label:_(`chat:focusSession.workspaceWrite`),description:_(`chat:focusSession.workspaceWriteRunsCommandsWithAutomaticApproval`),icon:jr},{value:`full-access`,label:_(`chat:focusSession.fullAccess`),description:_(`chat:focusSession.fullAccessRunsShellWithoutPerCommandApproval`),icon:St}],T=[{value:`plan`,label:_(`chat:focusSession.planMode`),description:_(`chat:focusSession.planModeDescription`),icon:ze},...s?[{value:`goal`,label:_(`chat:focusSession.goalMode`),description:_(`chat:focusSession.goalModeDescription`),icon:Vr}]:[],...s&&c?[{value:`team`,label:_(`chat:focusSession.teamMode`),description:_(`chat:focusSession.teamModeDescription`),icon:Hr}]:[]],E=w.find(t=>t.value===e)||w[0],D=l?.status===`active`?l?.mode===`team`&&c?`team`:`goal`:r,O=T.find(e=>e.value===D)||T[0],k=O.value!==`plan`,A=E.value===`full-access`?St:zr,j=O.value===`team`?_(`board:composer.teamShort`):O.value===`goal`?_(`board:composer.goalShort`):``,M=j?`${j} · ${E.label}`:E.label,N=O.value===`plan`&&E.value===`approval-required`,P=!!l?.id,F=D===`team`?l?.teamTokenBudget:l?.tokenBudget,I=F==null?null:Number(F)>0?Number(F):null,L=u!==I,R=P?I==null?_(`chat:focusSession.usedUnlimitedGoalTokens`,{used:kn(l?.tokensUsed)}):_(`chat:focusSession.usedBudgetTokensUsed`,{used:l?.tokensUsed||0,budget:I||0}):``,z=`${_(`board:composer.modeChip`)} · ${M}`,B=_(D===`team`?`chat:focusSession.teamTokenBudget`:`chat:focusSession.goalTokenBudget`),V=async()=>{if(!(v||!L||!P||!f)){y(!0);try{await f(u)}finally{y(!1)}}};return(0,$.jsxs)(fe,{sheet:p,title:z,open:S,onOpenChange:C,align:`start`,side:`top`,className:`composer-mode-popover w-[300px] max-w-[calc(100vw_-_24px)] gap-1 p-1`,trigger:(0,$.jsxs)(`button`,{type:`button`,className:Jt(q,`composer-mode-chip max-w-[220px] max-[650px]:min-w-9 max-[650px]:justify-center max-[650px]:gap-1`,k?`max-[650px]:px-2.5`:`max-[650px]:px-0`),"aria-label":z,title:z,hidden:m&&!k&&E.value!==`full-access`,"data-composer-mode":`${O.value}:${E.value}`,children:[k&&(0,$.jsx)(O.icon,{size:16,className:`hidden shrink-0 max-[650px]:block`,"aria-hidden":`true`}),(0,$.jsx)(A,{size:14,className:`shrink-0 max-[650px]:size-4`,"aria-hidden":`true`}),!N&&(0,$.jsx)(`span`,{className:`min-w-0 truncate max-[650px]:hidden`,children:M}),(0,$.jsx)(U,{size:14,className:`shrink-0 opacity-70 max-[650px]:hidden`,"aria-hidden":`true`})]}),children:[(0,$.jsx)(Li,{label:_(`chat:focusSession.approvalMode`),children:w.map(e=>(0,$.jsx)(Ii,{option:e,selected:e.value===E.value,disabled:n,onSelect:e=>{C(!1),t(e)}},e.value))}),T.length>1&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{role:`separator`,className:`mx-1 h-px bg-stroke-soft`}),(0,$.jsx)(Li,{label:_(`chat:focusSession.executionMode`),hint:(0,$.jsxs)(`span`,{className:`flex items-center gap-1 font-normal`,children:[_(`board:composer.cycleRunMode`),(0,$.jsx)(Zt,{children:`⇧Tab`})]}),children:T.map(e=>(0,$.jsx)(Ii,{option:e,selected:e.value===D,disabled:a,onSelect:e=>{e===`plan`&&C(!1),i(e)}},e.value))}),(k||P)&&(0,$.jsxs)(`div`,{className:`grid gap-1 px-2 pt-1 pb-1.5 text-xs`,children:[R&&(0,$.jsx)(`p`,{className:`text-content-muted tabular-nums`,children:R}),(0,$.jsxs)(`div`,{className:`grid grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-1.5`,children:[(0,$.jsx)(`label`,{htmlFor:`goal-token-budget-input`,className:`font-medium text-content-secondary`,children:B}),(0,$.jsx)(Wn,{id:`goal-token-budget-input`,type:`number`,min:Fi,step:1e3,value:u??``,placeholder:_(`chat:focusSession.goalTokenBudgetUnlimited`),"aria-label":B,disabled:v,className:`text-[13px] tabular-nums`,onChange:e=>{let t=e.target.value.trim();if(!t){d(null);return}let n=Number(t);Number.isFinite(n)&&d(Math.max(Fi,Math.round(n)))}}),P&&L?(0,$.jsxs)(Y,{type:`button`,variant:`outline`,size:`sm`,disabled:v,onClick:()=>void V(),children:[v?(0,$.jsx)(yt,{className:`animate-spin`,size:12}):(0,$.jsx)(H,{size:12}),_(`chat:focusSession.goalBudgetSave`)]}):(0,$.jsx)(`span`,{})]}),(0,$.jsx)(`small`,{className:`text-content-muted`,children:_(D===`team`?`chat:focusSession.teamTokenBudgetHint`:P?`chat:focusSession.goalTokenBudgetUpdateHint`:`chat:focusSession.goalTokenBudgetHint`)})]})]})]})}function zi(e,t){let n=[`plan`];return t.goalsAvailable&&n.push(`goal`),t.goalsAvailable&&t.teamAvailable&&n.push(`team`),n.length<2?null:n[(n.indexOf(e)+1)%n.length]??`plan`}function Bi({state:e,cwd:t,onDismiss:n}){let{t:r}=o(),i=e.status===`streaming`;return(0,$.jsxs)(`section`,{"aria-label":r(`chat:sideQuestion.label`),"aria-busy":i,onKeyDown:e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),n())},className:`flex max-h-[min(45vh,420px)] min-w-0 flex-col rounded-lg border border-stroke bg-panel shadow-float`,children:[(0,$.jsxs)(`header`,{className:`flex min-w-0 items-start gap-2 border-b border-stroke-soft px-3 py-2`,children:[(0,$.jsx)(Ir,{size:15,"aria-hidden":`true`,className:`mt-0.5 shrink-0 text-content-muted`}),(0,$.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,$.jsx)(`span`,{className:`text-xs text-content-muted`,children:r(`chat:sideQuestion.label`)}),(0,$.jsx)(`p`,{className:`m-0 line-clamp-2 text-[13px] text-content`,title:e.question,children:e.question})]}),(0,$.jsx)(Y,{variant:`ghost`,size:`icon-xs`,className:`shrink-0 pointer-coarse:size-11`,"aria-label":r(`chat:sideQuestion.close`),title:r(`chat:sideQuestion.close`),onClick:n,children:(0,$.jsx)(At,{})})]}),(0,$.jsxs)(`div`,{className:`min-h-0 overflow-y-auto overscroll-contain px-3 py-2 text-[13px]`,children:[e.answer?(0,$.jsx)(tr,{cwd:t,streaming:i,children:e.answer}):i?(0,$.jsxs)(`p`,{role:`status`,className:`m-0 flex items-center gap-2 text-content-muted`,children:[(0,$.jsx)(Yt,{className:`size-4`}),r(`chat:sideQuestion.answering`)]}):e.status===`done`?(0,$.jsx)(`p`,{className:`m-0 text-content-muted`,children:e.toolCallIgnored?r(`chat:sideQuestion.toolIgnored`):r(`chat:sideQuestion.empty`)}):null,e.status===`error`&&(0,$.jsx)(`p`,{role:`alert`,className:`m-0 mt-1 text-[var(--danger)]`,children:r(`chat:sideQuestion.failed`,{error:e.error})})]}),(0,$.jsx)(`footer`,{className:`border-t border-stroke-soft px-3 py-1.5 text-xs text-content-muted`,children:r(`chat:sideQuestion.note`)})]})}function Vi(e){let[t,n]=(0,Q.useState)(null),r=(0,Q.useRef)(null),i=(0,Q.useCallback)(()=>{r.current?.abort(),r.current=null},[]),a=(0,Q.useCallback)(()=>{i(),n(null)},[i]);return(0,Q.useEffect)(()=>a,[e,a]),{state:t,ask:(0,Q.useCallback)(t=>{i();let a=new AbortController;r.current=a;let o=()=>r.current===a;n({question:t,answer:``,status:`streaming`,error:``,toolCallIgnored:!1}),X.askSideQuestion(e,t,{signal:a.signal,onDelta:e=>{o()&&n(t=>t&&{...t,answer:t.answer+e})}}).then(e=>{o()&&(r.current=null,n(t=>t&&{...t,answer:e.text||t.answer,status:`done`,toolCallIgnored:e.toolCallIgnored}))}).catch(e=>{o()&&(r.current=null,n(t=>t&&{...t,status:`error`,error:e instanceof Error?e.message:String(e)}))})},[i,e]),dismiss:a}}var Hi=new Set([`user`,`assistant`,`summary`,`compaction`,`position`]);function Ui(e,t,n){return t===`labeled`?!!e.label:t===`branches`?n||Hi.has(e.kind):!1}var Wi=new Set([`tool`,`tool-call`]);function Gi(e){let t=[],n=new Map;for(let r of e){let e=r.parentId?n.get(r.parentId):void 0,i={...r,children:[]};n.set(r.id,i),e?e.children.push(i):t.push(i)}return t}function Ki(e){let t=[],n=[...e].reverse();for(;n.length>0;){let e=n.pop();if(e){t.push(e);for(let t=e.children.length-1;t>=0;--t)n.push(e.children[t])}}return t}function qi(e,t){let n=[],r=new Map;for(let i of Ki(e)){let e=i.parentId&&r.get(i.parentId)||null;if(!t(i)){r.set(i.id,e);continue}let a={...i,children:[]};r.set(i.id,a),e?e.children.push(a):n.push(a)}return n}function Ji(e){let t=[e],n=e;for(;n.children.length===1;)n=n.children[0],t.push(n);let r={id:e.id,nodes:t,children:[],active:t.some(e=>e.active)},i=[{segment:r,children:n.children}];for(;i.length>0;){let e=i.pop();if(e)for(let t of e.children){let n=[t],r=t;for(;r.children.length===1;)r=r.children[0],n.push(r);let a={id:t.id,nodes:n,children:[],active:n.some(e=>e.active)};e.segment.children.push(a),i.push({segment:a,children:r.children})}}return r}function Yi(e){return e.kind===`user`?Ne:e.kind===`assistant`?B:e.kind===`tool`||e.kind===`tool-call`?kt:e.kind===`settings`?xt:e.kind===`label`?Tt:e.kind===`summary`||e.kind===`compaction`?ae:e.kind===`position`?ut:e.label?Nr:pt}function Xi({nodes:e,viewportRef:t,selectedId:n,typeLabel:r,stateLabel:i,onSelect:a}){let o=nr({count:e.length,getScrollElement:()=>t.current,estimateSize:()=>64,getItemKey:t=>e[t]?.id??`mobile-tree-node-${t}`,overscan:12,useAnimationFrameWithResizeObserver:!0});return(0,Q.useEffect)(()=>{if(!n)return;let t=e.findIndex(e=>e.id===n);t>=0&&o.scrollToIndex(t,{align:`center`})},[e,n,o]),(0,$.jsx)(`div`,{className:`relative w-full`,style:{height:`${o.getTotalSize()}px`},children:o.getVirtualItems().map(t=>{let o=e[t.index],s=Yi(o);return(0,$.jsx)(`div`,{className:`absolute top-0 left-0 w-full px-3 py-1`,style:{transform:`translateY(${t.start}px)`},children:(0,$.jsxs)(`button`,{type:`button`,className:`session-tree-node relative grid items-center gap-2 rounded-sm border border-stroke bg-panel text-left text-content transition-colors duration-(--d-fast) hover:bg-surface-subtle [&.selected]:border-key-border [&.selected]:bg-key [&.selected]:shadow-key [&.selected]:before:absolute [&.selected]:before:inset-y-2 [&.selected]:before:-left-px [&.selected]:before:w-[3px] [&.selected]:before:rounded-r-[3px] [&.selected]:before:bg-star min-h-14 w-full grid-cols-[34px_minmax(0,1fr)_auto] py-2 pr-2.5 pl-1 ${o.id===n?` selected`:``}${o.active?` active`:``}${o.leaf?` leaf`:``}`,"data-kind":o.kind,"data-pisper-tree-entry":o.id,onClick:()=>a(o.id),children:[(0,$.jsx)(`span`,{className:`session-tree-marker relative z-[2] grid size-6 place-items-center justify-self-center rounded-sm bg-surface-muted text-content-secondary [.session-tree-node[data-kind='tool']_&]:bg-warning-soft [.session-tree-node[data-kind='tool']_&]:text-warning-strong [.session-tree-node.leaf_&]:bg-star [.session-tree-node.leaf_&]:text-on-accent [.session-tree-mark.active_&]:bg-star-soft [.session-tree-mark.active_&]:text-star-strong`,children:(0,$.jsx)(s,{size:14})}),(0,$.jsxs)(`span`,{className:`session-tree-node-copy flex min-w-0 flex-col gap-0.5 [&_small]:truncate [&_small]:text-xs [&_small]:text-content-muted [&_strong]:truncate [&_strong]:text-sm [&_strong]:font-medium`,children:[(0,$.jsx)(`strong`,{children:o.label||o.text||r(o)}),(0,$.jsx)(`small`,{children:o.label&&o.text?o.text:r(o)})]}),(0,$.jsxs)(`span`,{className:`session-tree-node-state inline-flex min-w-0 shrink-0 items-center gap-1 text-xs text-content-muted [.session-tree-node.leaf_&]:text-accent-fg`,children:[o.label&&(0,$.jsx)(Nr,{size:12}),i(o)]})]})},t.key)})})}function Zi({segment:e,viewportRef:t,selectedId:n,typeLabel:r,stateLabel:i,onSelect:a}){let{nodes:o,children:s}=e,c=o.length>120,l=nr({count:o.length,getScrollElement:()=>t.current,estimateSize:()=>56,getItemKey:e=>o[e]?.id??`tree-node-${e}`,overscan:12,scrollMargin:26,enabled:c,useAnimationFrameWithResizeObserver:!0}),u=e=>{let t=Yi(e);return(0,$.jsxs)(`button`,{type:`button`,className:`session-tree-node relative grid items-center gap-2 rounded-sm border border-stroke bg-panel text-left text-content transition-colors duration-(--d-fast) hover:bg-surface-subtle [&.selected]:border-key-border [&.selected]:bg-key [&.selected]:shadow-key [&.selected]:before:absolute [&.selected]:before:inset-y-2 [&.selected]:before:-left-px [&.selected]:before:w-[3px] [&.selected]:before:rounded-r-[3px] [&.selected]:before:bg-star z-[1] min-h-12 w-[220px] cursor-pointer grid-cols-[30px_minmax(0,1fr)_auto] py-1.5 pr-2 pl-0.5 ${e.id===n?` selected`:``}${e.active?` active`:``}${e.leaf?` leaf`:``}`,"data-kind":e.kind,"data-pisper-tree-entry":e.id,onClick:()=>a(e.id),children:[(0,$.jsx)(`span`,{className:`session-tree-marker relative z-[2] grid size-6 place-items-center justify-self-center rounded-sm bg-surface-muted text-content-secondary [.session-tree-node[data-kind='tool']_&]:bg-warning-soft [.session-tree-node[data-kind='tool']_&]:text-warning-strong [.session-tree-node.leaf_&]:bg-star [.session-tree-node.leaf_&]:text-on-accent [.session-tree-mark.active_&]:bg-star-soft [.session-tree-mark.active_&]:text-star-strong`,children:(0,$.jsx)(t,{size:14})}),(0,$.jsxs)(`span`,{className:`session-tree-node-copy flex min-w-0 flex-col gap-0.5 [&_small]:truncate [&_small]:text-xs [&_small]:text-content-muted [&_strong]:truncate [&_strong]:text-sm [&_strong]:font-medium`,children:[(0,$.jsx)(`strong`,{children:e.label||e.text||r(e)}),(0,$.jsx)(`small`,{children:e.label&&e.text?e.text:r(e)})]}),(0,$.jsxs)(`span`,{className:`session-tree-node-state inline-flex min-w-0 shrink-0 items-center gap-1 text-xs text-content-muted [.session-tree-node.leaf_&]:text-accent-fg`,children:[e.label&&(0,$.jsx)(Nr,{size:12}),i(e)]})]},e.id)};return(0,Q.useEffect)(()=>{if(!c||!n)return;let e=o.findIndex(e=>e.id===n);e<0||l.scrollToIndex(e,{align:`center`})},[n,o,c,l]),(0,$.jsxs)(`div`,{className:`session-tree-segment relative flex min-w-[220px] flex-col items-center ${e.active?` active`:``}`,children:[(0,$.jsx)(`div`,{className:`session-tree-track relative z-[1] grid w-[220px] gap-2 before:absolute before:top-[22px] before:bottom-[22px] before:left-1/2 before:z-0 before:w-px before:bg-stroke-strong [.session-tree-segment.active_>_&::before]:bg-control`,children:c?(0,$.jsx)(`div`,{className:`relative w-[220px]`,style:{height:`${l.getTotalSize()}px`},children:l.getVirtualItems().map(e=>(0,$.jsx)(`div`,{className:`absolute top-0 left-0 w-[220px]`,style:{top:`${e.start-26}px`},children:u(o[e.index])},e.key))}):o.map(u)}),s.length>0&&(0,$.jsx)(`div`,{className:`session-tree-children relative flex items-start justify-center pt-7 before:absolute before:top-0 before:left-1/2 before:h-3.5 before:w-px before:bg-stroke-strong [.session-tree-segment.active_>_&::before]:bg-control`,children:s.map(e=>(0,$.jsx)(`div`,{className:`session-tree-child relative flex px-3 pt-3.5 before:absolute before:top-0 before:right-1/2 before:h-3.5 before:w-1/2 before:border-t before:border-stroke-strong after:absolute after:top-0 after:left-1/2 after:h-3.5 after:w-1/2 after:border-t after:border-l after:border-stroke-strong [&:first-child::before]:border-t-transparent [&:last-child::after]:border-t-transparent [&.active]:before:border-control [&.active]:after:border-control [&.active:first-child::before]:border-t-transparent [&.active:last-child::after]:border-t-transparent${e.active?` active`:``}`,children:(0,$.jsx)(Zi,{segment:e,viewportRef:t,selectedId:n,typeLabel:r,stateLabel:i,onSelect:a})},e.id))})]})}function Qi({view:e,onViewChange:t,showAllEntries:n,onShowAllEntriesChange:r,query:i,onQueryChange:a,loading:s,error:c,mobileLayout:l,viewportRef:u,segments:d,visibleNodes:f,selectedId:p,typeLabel:m,stateLabel:h,onSelect:g,visibleMarks:_,marksLoading:v,openingMark:y,onOpenMark:b,confirmingMark:x,onConfirmMark:S,onCancelMark:C}){let{t:w,language:T}=o(),E=(0,Q.useRef)(null);(0,Q.useEffect)(()=>{x&&E.current?.focus()},[x]);let D=e=>{let t=Date.parse(e);return Number.isFinite(t)?new Intl.DateTimeFormat(T,{dateStyle:`medium`,timeStyle:`short`}).format(t):w(`navigation:appOverlays.unknownTime`)};return(0,$.jsxs)(`div`,{className:`chat-resource-browser flex min-h-0 min-w-0 flex-col bg-transparent session-tree-browser`,children:[(0,$.jsx)(Wt,{className:`chat-resource-tabs session-tree-tabs px-3 pt-3`,value:e,onValueChange:e=>t(e),children:(0,$.jsxs)(Ut,{children:[(0,$.jsx)(Ht,{value:`branches`,children:w(`chat:sessionTree.branches`)}),(0,$.jsx)(Ht,{value:`labeled`,children:w(`chat:sessionTree.labeled`)}),(0,$.jsx)(Ht,{value:`marks`,children:w(`chat:sessionTree.allMarks`)})]})}),(0,$.jsxs)(qn,{className:`chat-resource-search mx-3 mt-2 w-auto flex-none`,children:[(0,$.jsx)(Kn,{children:(0,$.jsx)(bt,{"aria-hidden":`true`})}),(0,$.jsx)(Gn,{value:i,disabled:!!y,"aria-label":w(`chat:sessionTree.searchPlaceholder`),onChange:e=>a(e.target.value),placeholder:w(`chat:sessionTree.searchPlaceholder`)})]}),e===`branches`&&(0,$.jsxs)(`label`,{className:`mx-3 mt-2 flex min-h-6 flex-none cursor-pointer items-center gap-2 text-xs text-content-secondary max-[650px]:min-h-11`,children:[(0,$.jsx)(Mt,{checked:n,onCheckedChange:e=>r(e===!0),"data-session-tree-all-entries":!0}),w(`chat:sessionTree.showAllEntries`)]}),e===`marks`?(0,$.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 basis-0 flex-col gap-2 overflow-auto overscroll-contain px-3.5 py-3`,"data-testid":`session-tree-marks-list`,children:[c&&(0,$.jsx)(`p`,{role:`alert`,className:`mx-0.5 text-xs text-danger`,children:c}),v?(0,$.jsx)(`p`,{className:`grid min-h-[180px] place-items-center text-xs text-content-muted`,children:w(`chat:sessionTree.loadingMarks`)}):_.length?_.map(e=>(0,$.jsxs)(Q.Fragment,{children:[(0,$.jsxs)(`button`,{type:`button`,className:`session-tree-mark grid cursor-pointer grid-cols-[30px_minmax(0,1fr)_auto] items-center gap-2 rounded-sm border border-stroke bg-panel py-2 pr-2.5 pl-1 text-left text-content transition-colors duration-(--d-fast) hover:bg-surface-subtle [&.active]:border-star-border [&_>_em]:rounded-xs [&_>_em]:bg-star-soft [&_>_em]:px-1.5 [&_>_em]:py-0.5 [&_>_em]:text-xs [&_>_em]:text-star-strong [&_>_em]:not-italic ${e.active?` active`:``}`,"aria-expanded":e.active?void 0:x===e,"data-session-tree-mark":e.active?`active`:`other-branch`,disabled:!!y,"aria-busy":y===e,onClick:()=>b(e),children:[(0,$.jsx)(`span`,{className:`session-tree-marker relative z-[2] grid size-6 place-items-center justify-self-center rounded-sm bg-surface-muted text-content-secondary [.session-tree-node[data-kind='tool']_&]:bg-warning-soft [.session-tree-node[data-kind='tool']_&]:text-warning-strong [.session-tree-node.leaf_&]:bg-star [.session-tree-node.leaf_&]:text-on-accent [.session-tree-mark.active_&]:bg-star-soft [.session-tree-mark.active_&]:text-star-strong`,children:y===e?(0,$.jsx)(Yt,{className:`size-3.5`}):(0,$.jsx)(Tt,{size:14})}),(0,$.jsxs)(`span`,{className:`session-tree-node-copy flex min-w-0 flex-col gap-0.5 [&_small]:truncate [&_small]:text-xs [&_small]:text-content-muted [&_strong]:truncate [&_strong]:text-sm [&_strong]:font-medium`,children:[(0,$.jsx)(`strong`,{children:e.label}),(0,$.jsx)(`small`,{children:e.sessionName||w(`navigation:appOverlays.untitledChat`)}),(0,$.jsx)(`small`,{children:w(`chat:sessionTree.markTimes`,{sessionTime:D(e.sessionModified),nodeTime:D(e.nodeTimestamp)})})]}),y===e?(0,$.jsx)(`em`,{children:w(`chat:sessionTree.navigating`)}):e.active&&(0,$.jsx)(`em`,{children:w(`chat:sessionTree.markActive`)})]}),x===e&&(0,$.jsxs)(`div`,{role:`group`,"aria-label":w(`chat:sessionTree.otherBranchTitle`),className:`-mt-1 grid gap-2 rounded-sm border border-stroke bg-surface-subtle p-2.5 text-xs text-content-secondary`,"data-session-tree-mark-confirm":!0,children:[(0,$.jsxs)(`p`,{className:`flex items-start gap-1.5 text-content`,children:[(0,$.jsx)(ct,{size:13,className:`mt-0.5 flex-none`,"aria-hidden":`true`}),(0,$.jsxs)(`span`,{children:[(0,$.jsx)(`strong`,{className:`font-medium`,children:w(`chat:sessionTree.otherBranchTitle`)}),(0,$.jsx)(`span`,{className:`block text-content-muted`,children:w(`chat:sessionTree.otherBranchMessage`)})]})]}),(0,$.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,$.jsx)(Y,{type:`button`,size:`sm`,variant:`ghost`,className:`max-[650px]:h-11`,onClick:C,children:w(`common:ui.cancel`)}),(0,$.jsx)(Y,{ref:E,type:`button`,size:`sm`,className:`max-[650px]:h-11`,onClick:()=>S(e),children:w(`chat:sessionTree.switchBranch`)})]})]})]},`${e.sessionId}:${e.entryId}`)):(0,$.jsx)(`p`,{className:`grid min-h-[180px] place-items-center text-xs text-content-muted`,children:w(`chat:sessionTree.noMarksYet`)})]}):(0,$.jsx)(`div`,{className:`min-h-0 min-w-0 flex-1 basis-0 overflow-auto overscroll-contain [scrollbar-gutter:stable]`,"data-testid":`session-tree-list`,ref:u,children:d.length>0?l?(0,$.jsx)(Xi,{nodes:f,viewportRef:u,selectedId:p,typeLabel:m,stateLabel:h,onSelect:g}):(0,$.jsx)(`div`,{className:`session-tree-canvas flex w-max min-w-full items-start justify-center gap-9 px-7 pt-6.5 pb-12`,children:d.map(e=>(0,$.jsx)(Zi,{segment:e,viewportRef:u,selectedId:p,typeLabel:m,stateLabel:h,onSelect:g},e.id))}):(0,$.jsx)(`p`,{className:`grid min-h-[180px] place-items-center text-xs text-content-muted`,children:s?w(`chat:sessionTree.loading`):c||w(`chat:sessionTree.empty`)})})]})}function $i({label:e,onClick:t}){return(0,$.jsxs)(Y,{variant:`secondary`,className:`w-full min-w-0`,title:e,onClick:t,children:[(0,$.jsx)(pt,{size:13}),(0,$.jsx)(`span`,{className:`min-w-0 truncate`,children:e})]})}function ea({mobileLayout:e,selected:t,loading:n,error:r,streaming:i,dataStreaming:a,parentSession:s,parentEntryId:c,childSessions:l,canLabel:u,canDerive:d,label:f,summarize:p,savingLabel:m,creatingChild:h,navigating:g,typeLabel:_,stateLabel:v,onBackToList:y,onLabelChange:b,onSummarizeChange:x,onSaveLabel:S,onRemoveLabel:C,onCreateChild:w,onNavigate:T,onRefresh:E,onOpenRelated:D}){let{t:O,language:k}=o();return(0,$.jsxs)(`div`,{className:`chat-resource-config session-tree-inspector flex min-h-0 min-w-0 flex-col gap-4 overflow-y-auto overscroll-contain bg-panel p-[18px] [&_>_p]:m-auto [&_>_p]:text-xs [&_>_p]:text-content-muted [&_p]:text-xs [&_p]:text-content-muted [&_strong]:text-[15px] [&_strong]:font-medium ${e?``:`border-l border-stroke-soft`}`,children:[e&&(0,$.jsx)(`div`,{className:`sticky top-0 z-[2] -mx-1.5 -mt-2 flex border-b border-stroke-soft bg-panel px-0.5 pb-2`,children:(0,$.jsxs)(Y,{variant:`ghost`,className:`min-h-11 justify-start px-2`,onClick:y,children:[(0,$.jsx)(ee,{size:17}),O(`chat:sessionTree.backToNodes`)]})}),t?(0,$.jsxs)($.Fragment,{children:[(s||l.length>0)&&(0,$.jsxs)(`div`,{className:`session-tree-lineage flex flex-col gap-1.5 border-b border-stroke-soft pb-3 [&_>_strong]:text-xs [&_>_strong]:font-medium [&_>_strong]:text-content-muted [&_button]:justify-start [&_button]:text-left [&_button]:text-xs`,children:[(0,$.jsx)(`strong`,{children:O(`chat:sessionTree.conversationLineage`)}),s&&(0,$.jsx)($i,{label:O(`chat:sessionTree.returnToOriginalChat`,{name:s.name||O(`chat:chatPage.newChat`)}),onClick:()=>D(s,c)}),l.map(e=>(0,$.jsx)($i,{label:O(`chat:sessionTree.openSeparateChat`,{name:e.name||O(`chat:chatPage.newChat`)}),onClick:()=>D(e)},e.id))]}),(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`span`,{className:`session-tree-selection-kind mb-1 flex items-center justify-between gap-2 text-xs text-content-muted [&_em]:rounded-xs [&_em]:border [&_em]:border-star-border [&_em]:bg-star-soft [&_em]:px-1.5 [&_em]:py-0.5 [&_em]:font-medium [&_em]:text-star-strong [&_em]:not-italic`,children:[_(t),v(t)&&(0,$.jsx)(`em`,{children:v(t)})]}),(0,$.jsx)(`strong`,{children:t.label||_(t)}),(0,$.jsx)(`p`,{children:t.text||O(`chat:sessionTree.noPreview`)})]}),(0,$.jsxs)(`div`,{className:`chat-resource-inputs flex flex-col gap-3 [&_label]:grid [&_label]:gap-1.5 [&_label]:text-xs [&_label]:font-medium [&_label]:text-content-secondary`,children:[u&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`label`,{children:[(0,$.jsx)(`span`,{children:O(`chat:sessionTree.nodeLabel`)}),(0,$.jsx)(Wn,{value:f,maxLength:80,placeholder:O(`chat:sessionTree.labelPlaceholder`),onChange:e=>b(e.target.value)})]}),(0,$.jsxs)(Y,{variant:`secondary`,disabled:m||i||a,onClick:S,children:[(0,$.jsx)(Tt,{size:14}),O(m?`chat:sessionTree.savingLabel`:`chat:sessionTree.saveLabel`)]}),!!t.label&&(0,$.jsxs)(Y,{variant:`secondary`,disabled:m||i||a,onClick:C,children:[(0,$.jsx)(Et,{size:14}),O(`chat:sessionTree.removeLabel`)]})]}),u&&(0,$.jsxs)(Y,{variant:`secondary`,disabled:h||i||a,onClick:w,children:[(0,$.jsx)(Pe,{size:14}),O(h?`chat:sessionTree.creatingChildChat`:`chat:sessionTree.createChildChat`)]}),d&&(0,$.jsxs)(`label`,{className:`session-tree-summary-option cursor-pointer grid-cols-[minmax(0,1fr)_auto] items-center [&_small]:col-span-full [&_small]:leading-relaxed [&_small]:font-normal [&_small]:text-content-muted`,children:[(0,$.jsx)(`span`,{children:O(`chat:sessionTree.abandonedBranchSummary`)}),(0,$.jsx)(Vt,{checked:p,disabled:t.leaf||i||a,onCheckedChange:x,"data-session-tree-summary":!0}),(0,$.jsx)(`small`,{children:O(`chat:sessionTree.abandonedBranchSummaryHint`)})]})]}),d&&(0,$.jsx)(`p`,{children:O(`chat:sessionTree.sideEffectsRemain`)}),t.timestamp&&(0,$.jsx)(`p`,{children:new Intl.DateTimeFormat(k,{dateStyle:`medium`,timeStyle:`short`}).format(new Date(t.timestamp))}),r&&(0,$.jsx)(`p`,{role:`alert`,className:`text-danger!`,children:r}),d&&(0,$.jsxs)(Y,{className:`chat-resource-confirm self-start`,disabled:g||t.leaf||i||a,onClick:T,children:[(0,$.jsx)(ut,{size:15}),g?O(`chat:sessionTree.navigating`):t.leaf?O(`chat:sessionTree.currentPosition`):O(`chat:sessionTree.continueFromNode`)]})]}):(0,$.jsx)(`p`,{children:n?O(`chat:sessionTree.loading`):r||O(`chat:sessionTree.chooseNode`)}),r&&!t&&(0,$.jsx)(Y,{variant:`secondary`,onClick:E,children:O(`chat:sessionTree.retry`)})]})}function ta({open:e,sessionId:t,streaming:n,onClose:r,onNavigated:i,onCreateChildSession:a,initialView:s=`branches`,returnFocusRef:c,notify:l}){let{t:u,language:d}=o(),f=D(),p=E(),m=f||p,[h,g]=(0,Q.useState)(null),[_,v]=(0,Q.useState)([]),[y,b]=(0,Q.useState)(`branches`),[x,S]=(0,Q.useState)(!1),[C,w]=(0,Q.useState)(`list`),[T,O]=(0,Q.useState)(``),[k,A]=(0,Q.useState)(``),[j,M]=(0,Q.useState)(``),[N,P]=(0,Q.useState)([]),[F,I]=(0,Q.useState)(!1),[L,R]=(0,Q.useState)(!1),[z,B]=(0,Q.useState)(null),[V,H]=(0,Q.useState)(null),[U,ee]=(0,Q.useState)(!1),[te,ne]=(0,Q.useState)(!1),[re,ie]=(0,Q.useState)(!1),[ae,oe]=(0,Q.useState)(!1),[W,se]=(0,Q.useState)(!1),[ce,G]=(0,Q.useState)(``),le=(0,Q.useRef)(null);(0,Q.useEffect)(()=>{if(!e||!t)return;let n=!1;return b(s),w(`list`),O(``),ne(!0),G(``),Promise.all([X.getSessionTree(t),X.listSessions()]).then(([e,t])=>{n||(g(e),v(t.sessions||[]),A(e.leafId||e.nodes[0]?.id||``))}).catch(e=>{n||G(Z(e))}).finally(()=>{n||ne(!1)}),()=>{n=!0}},[e,t]),(0,Q.useEffect)(()=>{e||(g(null),v([]),A(``),w(`list`),M(``),B(null),H(null),ee(!1),G(``))},[e]),(0,Q.useEffect)(()=>{if(!e||y!==`marks`||F)return;let t=!0;return R(!0),G(``),X.listSessionTreeLabels(500).then(e=>{t&&(P(e.labels||[]),I(!0))}).catch(e=>t&&G(Z(e))).finally(()=>t&&R(!1)),()=>{t=!1}},[e,y,F]);let K=(0,Q.useMemo)(()=>{let e=T.trim().toLocaleLowerCase(d);return e?N.filter(t=>`${t.label} ${t.sessionName}`.toLocaleLowerCase(d).includes(e)):N},[N,d,T]),ue=async(e,t=!1)=>{if(!z){if(!e.active&&!t){H(e);return}H(null),B(e),G(``);try{let t=null;if(!e.active){if(t=await X.navigateSessionTreeTarget(e.sessionId,e.entryId),t.cancelled){B(null);return}pr(e.sessionId)}dn(e.sessionId,`open`,e.entryId),r(),t&&l&&vr(e.sessionId,t,u(`chat:sessionTree.switchedBranch`),{notify:l,t:u})}catch(e){G(Z(e)),B(null)}}},de=(0,Q.useMemo)(()=>Gi(h?.nodes||[]),[h]),fe=(0,Q.useCallback)(e=>({user:u(`chat:sessionTree.userMessage`),assistant:u(`chat:sessionTree.agentMessage`),tool:u(`chat:sessionTree.toolResult`),"tool-call":u(`chat:sessionTree.toolCall`),summary:u(`chat:sessionTree.branchSummary`),compaction:u(`chat:sessionTree.compactionSummary`),settings:u(`chat:sessionTree.settingsChange`),label:u(`chat:sessionTree.labelChange`),position:u(`chat:sessionTree.branchPosition`),extension:u(`chat:sessionTree.extensionEntry`),metadata:u(`chat:sessionTree.metadataEntry`),message:u(`chat:sessionTree.message`)})[e.kind]||e.type,[u]),pe=(0,Q.useMemo)(()=>{let e=T.trim().toLocaleLowerCase(d);return qi(de,t=>Ui(t,y,x)?!e||`${t.label} ${t.text} ${fe(t)}`.toLocaleLowerCase(d).includes(e):!1)},[de,d,T,x,fe,y]),me=(0,Q.useMemo)(()=>pe.map(Ji),[pe]),he=(0,Q.useMemo)(()=>Ki(pe),[pe]),q=(0,Q.useMemo)(()=>Ki(de),[de]).find(e=>e.id===k)||null,ge=h?.lineage?.parentSessionId?_.find(e=>e.id===h.lineage?.parentSessionId):null,_e=(h?.lineage?.childSessionIds||[]).map(e=>_.find(t=>t.id===e)).filter(e=>!!e),ve=q?.kind===`assistant`&&q.status===`completed`,ye=ve,be=q?!Wi.has(q.kind):!1;(0,Q.useEffect)(()=>{M(q?.label||``),ee(!1)},[q?.id,q?.label]),(0,Q.useEffect)(()=>{if(k&&he.some(e=>e.id===k))return;let e=[...he].reverse().find(e=>e.active);A(e?.id||he[0]?.id||``)},[k,he]),(0,Q.useEffect)(()=>{if(!e||!k)return;let t=requestAnimationFrame(()=>{document.querySelector(`[data-testid="session-tree-list"] .session-tree-node.selected`)?.scrollIntoView({block:`center`})});return()=>cancelAnimationFrame(t)},[e,T,k,y,he.length]);let xe=async()=>{ne(!0),G(``);try{let e=await X.getSessionTree(t);g(e),A(e.leafId||e.nodes[0]?.id||``)}catch(e){G(Z(e))}finally{ne(!1)}},Se=async()=>{if(!(!q||re)){ie(!0),G(``);try{let e=await X.setSessionTreeLabel(t,q.id,j);g(e),hr(t,e)}catch(e){G(Z(e))}finally{ie(!1)}}},Ce=async()=>{if(!(!q||re)){ie(!0),G(``);try{let e=await X.setSessionTreeLabel(t,q.id,``);g(e),hr(t,e)}catch(e){G(Z(e))}finally{ie(!1)}}},we=async()=>{if(!(!q||!ye||W)){se(!0),G(``);try{await a(q.id),r()}catch(e){G(Z(e))}finally{se(!1)}}},Te=(e,t=``)=>{e.id&&(dn(e.id,`open`,t),r())},Ee=async()=>{if(!(!q||ae||q.leaf||n||h?.streaming)){oe(!0),G(``);try{let e=await X.navigateSessionTree(t,q.id,U);g(e),e.cancelled||(hr(t,e),await i(e.editorText),r(),l&&vr(t,e,u(`chat:chatPage.branchedFromNode`),{notify:l,t:u}))}catch(e){G(Z(e))}finally{oe(!1)}}},De=e=>e.leaf?u(`chat:sessionTree.current`):e.branchPoint?u(`chat:sessionTree.fork`):e.active?u(`chat:sessionTree.active`):``;return(0,$.jsx)(Un,{open:e,onOpenChange:e=>!e&&r(),children:(0,$.jsxs)(Bn,{onCloseAutoFocus:e=>{let n=c?.current,r=n?.isConnected?n:document.getElementById(`task-${t}-more`);r?.closest(`[data-task-workspace]`)?.getAttribute(`data-active`)===`true`&&(e.preventDefault(),r.focus())},className:`chat-resource-dialog session-tree-dialog grid-rows-[auto_minmax(0,1fr)] gap-0 overflow-hidden border border-stroke bg-solid p-0 ${m?`!h-[calc(100dvh_-_16px)] !w-[calc(100vw_-_16px)] !max-w-none`:`!h-[min(760px,calc(100dvh_-_32px))] !w-[min(1120px,calc(100vw_-_32px))] !max-w-[1120px]`}`,showCloseButton:!1,children:[(0,$.jsxs)(`div`,{className:`chat-resource-head flex items-start justify-between gap-4 border-b border-stroke-soft px-[18px] pt-4 pb-3.5 max-[650px]:p-3.5 [&_[data-slot='dialog-description']]:mt-0.5 [&_[data-slot='dialog-description']]:text-xs [&_[data-slot='dialog-description']]:text-content-muted [&_[data-slot='dialog-title']]:text-base [&_[data-slot='dialog-title']]:font-semibold`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`session-tree-title flex items-center gap-2`,children:[(0,$.jsx)(ct,{className:`size-4 text-content-muted`,strokeWidth:1.75,"aria-hidden":`true`}),(0,$.jsx)(Vn,{children:u(`chat:sessionTree.title`)})]}),(0,$.jsx)(zn,{children:u(`chat:sessionTree.description`,{nodes:h?.nodeCount||0,branches:h?.branchCount||0})})]}),(0,$.jsx)(Y,{type:`button`,variant:`ghost`,size:`icon`,className:`max-[650px]:size-11`,"aria-label":u(`common:ui.closeDialog`),title:u(`common:ui.closeDialog`),onClick:r,children:(0,$.jsx)(At,{size:16})})]}),(0,$.jsxs)(`div`,{className:`chat-resource-body session-tree-layout grid min-h-0 overflow-hidden bg-background ${m?`grid-cols-1 grid-rows-[minmax(0,1fr)]`:`!grid-cols-[minmax(0,1fr)_292px]`}`,children:[(!m||C===`list`)&&(0,$.jsx)(Qi,{view:y,onViewChange:e=>{b(e),H(null),w(`list`)},showAllEntries:x,onShowAllEntriesChange:S,query:T,onQueryChange:O,loading:te,error:ce,mobileLayout:m,viewportRef:le,segments:me,visibleNodes:he,selectedId:k,typeLabel:fe,stateLabel:De,onSelect:e=>{A(e),m&&w(`detail`)},visibleMarks:K,marksLoading:L,openingMark:z,onOpenMark:e=>void ue(e),confirmingMark:V,onConfirmMark:e=>void ue(e,!0),onCancelMark:()=>H(null)}),y!==`marks`&&(!m||C===`detail`)&&(0,$.jsx)(ea,{mobileLayout:m,selected:q,loading:te,error:ce,streaming:n,dataStreaming:!!h?.streaming,parentSession:ge??null,parentEntryId:h?.lineage?.sourceEntryId||``,childSessions:_e,canLabel:ve,canDerive:be,label:j,summarize:U,savingLabel:re,creatingChild:W,navigating:ae,typeLabel:fe,stateLabel:De,onBackToList:()=>w(`list`),onLabelChange:M,onSummarizeChange:ee,onSaveLabel:()=>void Se(),onRemoveLabel:()=>void Ce(),onCreateChild:()=>void we(),onNavigate:()=>void Ee(),onRefresh:()=>void xe(),onOpenRelated:(e,t)=>Te(e,t??``)})]})]})})}function na({visible:e,open:t,sessionId:n,streaming:r,revision:i,pulseToken:a,onOpenChange:s,onNavigated:c,onCreateChildSession:l,notify:u,children:d}){let{t:f}=o(),p=fr(n,{enabled:e,streaming:r,revision:i})?.branchCount??0,[m,h]=(0,Q.useState)(`branches`),[g,_]=(0,Q.useState)(!1),v=(0,Q.useRef)(0),y=(0,Q.useRef)(null);(0,Q.useEffect)(()=>()=>cancelAnimationFrame(v.current),[]),(0,Q.useEffect)(()=>{if(!a)return;_(!0);let e=window.setTimeout(()=>_(!1),1800);return()=>window.clearTimeout(e)},[a]);let b=p>0&&(0,$.jsx)(`i`,{"aria-hidden":`true`,className:`ml-auto size-1.5 rounded-full bg-star`}),x=e?(0,$.jsxs)(Pt,{"aria-label":f(`chat:sessionTree.menu`),"aria-haspopup":`dialog`,"data-pisper-recall-pulse":g||void 0,onSelect:()=>{y.current=null,h(`branches`),cancelAnimationFrame(v.current),v.current=requestAnimationFrame(()=>s(!0))},children:[(0,$.jsx)(ct,{className:g?`motion-reduce:animate-none [animation:session-tree-new-node-pulse_1.8s_var(--ease-out)]`:void 0}),f(`chat:sessionTree.menu`),b]}):null;return(0,$.jsxs)($.Fragment,{children:[d(x,{branches:p,open:(e=`branches`,t=null)=>{y.current=t,h(e),cancelAnimationFrame(v.current),v.current=requestAnimationFrame(()=>s(!0))}}),e&&(0,$.jsx)(ta,{open:t,initialView:m,returnFocusRef:y,sessionId:n,streaming:r,onClose:()=>s(!1),onNavigated:c,onCreateChildSession:l,notify:u})]})}function ra({question:e,more:t,collapsed:n,onAnswer:r}){let{t:i}=o(),[a,s]=(0,Q.useState)(()=>e.questions.map(()=>({selected:[]}))),[c,l]=(0,Q.useState)(()=>e.questions.map(()=>!1)),[u,d]=(0,Q.useState)(!1),[f,p]=(0,Q.useState)(``),m=e.questions.length===1&&!e.questions[0].multiSelect,h=Tn(e,a);if(n)return(0,$.jsxs)(`p`,{"data-question-more":!0,className:`flex min-h-8 min-w-0 items-center gap-2 rounded-(--r-md) border border-st-attn-border px-3 text-xs text-st-attn`,children:[(0,$.jsx)(`span`,{"aria-hidden":`true`,className:`size-2 flex-none rounded-full bg-st-attn-fill`}),i(`board:question.waiting`,{count:t+1})]});let g=async t=>{if(!u){d(!0),p(``);try{await r(e.id,t)}catch{p(i(`board:question.failed`)),d(!1)}}},_=e=>e.map((e,t)=>{let n=c[t]?e.other?.trim():``;return n?{selected:e.selected,other:n}:{selected:e.selected}}),v=(t,n)=>{let r=e.questions[t],i=a.map((e,i)=>{if(i!==t)return e;if(!r.multiSelect)return{...e,selected:[n]};let a=e.selected.includes(n)?e.selected.filter(e=>e!==n):[...e.selected,n];return{...e,selected:a}});s(i),m&&g({answers:_(i)})};return(0,$.jsxs)(`div`,{"data-question-card":e.id,role:`group`,"aria-label":i(`board:question.label`),"aria-busy":u||void 0,onKeyDown:t=>{if(t.altKey||t.metaKey||t.ctrlKey)return;let n=t.target;if(n.closest(`textarea, input`))return;let r=a.findIndex(e=>!e.selected.length&&!e.other?.trim()),i=r<0?e.questions.length-1:r,o=Number(t.key);if(Number.isInteger(o)&&o>=1&&o<=6){let n=e.questions[i]?.options[o-1];if(!n)return;t.preventDefault(),v(i,n.label)}else t.key===`Enter`&&!n.closest(`button`)&&h&&(t.preventDefault(),g({answers:_(a)}))},className:`flex max-h-[min(60vh,560px)] min-w-0 flex-col gap-3 overflow-y-auto rounded-(--r-lg) border border-st-attn-border bg-st-attn-soft px-3.5 py-3 text-foreground`,children:[(0,$.jsxs)(`p`,{className:`flex items-center gap-2 text-xs font-medium text-warning-strong`,children:[(0,$.jsx)(Ir,{className:`size-4 flex-none`,"aria-hidden":`true`}),i(`board:question.title`),t>0&&(0,$.jsx)(`span`,{className:`font-normal text-content-muted`,children:i(`board:question.moreAfter`,{count:t})})]}),e.questions.map((t,n)=>{let r=a[n],o=t.header?`${t.header}:${t.question}`:t.question;return(0,$.jsxs)(`fieldset`,{"data-question-item":n,className:`flex min-w-0 flex-col gap-1.5`,children:[(0,$.jsxs)(`legend`,{className:`mb-1.5 flex min-w-0 flex-col gap-0.5`,children:[t.header&&(0,$.jsx)(`span`,{className:`text-xs font-medium text-content-muted`,children:t.header}),(0,$.jsx)(`span`,{className:`text-sm leading-5 text-content`,children:t.question})]}),(0,$.jsxs)(`div`,{role:t.multiSelect?`group`:`radiogroup`,"aria-label":o,className:`flex flex-wrap gap-1.5`,children:[t.options.map((e,i)=>{let a=r.selected.includes(e.label);return(0,$.jsxs)(`button`,{type:`button`,role:t.multiSelect?`checkbox`:`radio`,"aria-checked":a,disabled:u,"data-question-option":e.label,title:e.description||void 0,className:Jt(`flex min-h-9 max-w-full min-w-0 items-center gap-1.5 rounded-(--r-md) border px-2.5 py-1 text-left text-[13px] transition-colors duration-(--d-fast) focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focus disabled:opacity-60 pointer-coarse:min-h-11`,a?`border-content bg-content text-panel`:`border-stroke-strong bg-panel text-content hover:bg-surface-hover`),onClick:()=>v(n,e.label),children:[(0,$.jsx)(`span`,{"aria-hidden":`true`,className:`font-mono text-[11px] opacity-60 pointer-coarse:hidden`,children:i+1}),(0,$.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[(0,$.jsx)(`span`,{className:`break-words`,children:e.label}),e.description&&(0,$.jsx)(`span`,{className:Jt(`text-xs break-words`,a?`opacity-80`:`text-content-muted`),children:e.description})]}),a&&t.multiSelect&&(0,$.jsx)(H,{className:`size-3.5 flex-none`,"aria-hidden":`true`})]},e.label)}),(0,$.jsx)(`button`,{type:`button`,"aria-expanded":c[n],disabled:u,"data-question-other":n,className:Jt(`flex min-h-9 items-center rounded-(--r-md) border border-dashed border-stroke-strong px-2.5 text-[13px] text-content-secondary hover:bg-surface-hover focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focus pointer-coarse:min-h-11`,c[n]&&`border-solid bg-panel`),onClick:()=>l(e=>e.map((e,t)=>t===n?!e:e)),children:i(`board:question.other`)})]}),c[n]&&(0,$.jsx)(`textarea`,{"aria-label":i(`board:question.otherLabel`,{question:t.question}),maxLength:En.other,rows:2,disabled:u,value:r.other??``,placeholder:i(`board:question.otherPlaceholder`),className:`min-h-16 w-full resize-y rounded-(--r-md) border border-control bg-panel px-2.5 py-1.5 text-sm text-content outline-none focus:border-focus focus:ring-3 focus:ring-focus-ring max-[650px]:text-[16px]`,onChange:e=>{let t=e.target.value;s(e=>e.map((e,r)=>r===n?{...e,other:t}:e))},onKeyDown:e=>{e.key===`Enter`&&(e.metaKey||e.ctrlKey)&&h&&(e.preventDefault(),g({answers:_(a)}))}})]},`${e.id}-${n}`)}),f&&(0,$.jsx)(`p`,{role:`alert`,className:`text-xs text-[var(--danger)]`,children:f}),(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2`,children:[(0,$.jsx)(Y,{type:`button`,variant:`ghost`,size:`sm`,disabled:u,"data-question-skip":!0,className:`pointer-coarse:min-h-11`,onClick:()=>void g({skip:!0}),children:i(`board:question.skip`)}),(!m||c[0])&&(0,$.jsx)(Y,{type:`button`,size:`sm`,disabled:u||!h,loading:u,"data-question-submit":!0,className:`pointer-coarse:min-h-11`,onClick:()=>void g({answers:_(a)}),children:i(`board:question.submit`)})]})]})}async function ia({templatePrompt:e,configureHint:t,notify:n,onOpenModelSettings:r,onInsertPrompt:i}){try{let a=await S(`/api/visual/models`);a.image||a.video?i(e):(n?.(t),r?.())}catch{i(e)}}function aa(e){return(e.target instanceof Element?e.target:null)?.closest(`[data-shortcut-recorder], [role="dialog"], [role="alertdialog"], [role="menu"], [role="listbox"], .xterm, .terminal-xterm, .terminal-panel, [data-terminal]`)?!0:Array.from(document.querySelectorAll(`[role="dialog"], [role="alertdialog"], dialog[open]`)).some(e=>e.getClientRects().length>0)}function oa(e){let t=(0,Q.useRef)(e);t.current=e;let{enabled:n,binding:r}=e;(0,Q.useEffect)(()=>{if(!n||!r)return;let e=null,i=null,a=()=>{e=null,i&&(i=null,t.current.onCancel())},o=n=>{if(i&&n.key===`Escape`&&!n.isComposing){a(),n.preventDefault();return}!t.current.enabled||n.defaultPrevented||n.isComposing||n.keyCode===229||n.repeat||e||document.visibilityState===`hidden`||aa(n)||!gn(n,r)||(e=n.code,t.current.onStart()&&(i={code:n.code,ctrl:n.ctrlKey,meta:n.metaKey,alt:n.altKey,shift:n.shiftKey},n.preventDefault()))},s=n=>{n.code===e&&(e=null),i&&(n.code===i.code||i.ctrl&&(!n.ctrlKey||n.code.startsWith(`Control`))||i.meta&&(!n.metaKey||n.code.startsWith(`Meta`))||i.alt&&(!n.altKey||n.code.startsWith(`Alt`))||i.shift&&(!n.shiftKey||n.code.startsWith(`Shift`)))&&(i=null,t.current.onRelease())},c=()=>{document.visibilityState===`hidden`&&a()};return window.addEventListener(`keydown`,o),window.addEventListener(`keyup`,s,!0),window.addEventListener(`blur`,a),document.addEventListener(`visibilitychange`,c),()=>{window.removeEventListener(`keydown`,o),window.removeEventListener(`keyup`,s,!0),window.removeEventListener(`blur`,a),document.removeEventListener(`visibilitychange`,c),a()}},[n,r])}function sa(e){if(!e.length)return 0;let t=0;for(let n=0;n<e.length;n+=1)t+=e[n]*e[n];let n=Math.sqrt(t/e.length);return n<.0056?0:Math.min(1,Math.sqrt(n)*2.6)}function ca(e=.35){let t=0;return{push(n){return t=t*(1-e)+n*e,t},reset(){t=0}}}function la(e,t=140){let n=e.trim();return n.length>t?`${n.slice(0,t-1)}…`:n}var ua=16e3,da=20,fa=ua*da/1e3;function pa(e,{onsetMs:t=80,minVoicedMs:n=160,silenceMs:r=900}={}){for(let e of[t,n,r])if(!Number.isFinite(e)||e<=0)throw Error(`Invalid VAD endpoint duration`);let i=e(),a=new Int16Array(fa),o=0,s=0,c=0,l=0,u=!1,d=!1,f=!1,p=()=>u&&c*da>=n;return{get hasSpeech(){return p()},acceptPcm(e){if(f||d)return!1;for(let n=0;n<e.length;n+=1){let f=Number.isFinite(e[n])?Math.max(-1,Math.min(1,e[n])):0;if(a[o++]=f*(f<0?32768:32767),o!==fa)continue;o=0;let m=i.processFrame(a);if(m<0)throw Error(`VAD frame processing failed`);if(m===1)s+=1,c+=1,l=0,s*da>=t&&(u=!0);else if(s=0,l+=1,u||(c=0),l*da>=r){if(p())return d=!0,!0;u=!1,c=0}}return!1},reset(){f||(i.destroy(),i=e(),o=s=c=l=0,u=d=!1,a.fill(0))},dispose(){f||(f=!0,o=0,i.destroy())}}}async function ma(e={}){let{default:n,VADMode:r}=await t(async()=>{let{default:e,VADMode:t}=await import(`./embedded-D2rqyswH.js`);return{default:e,VADMode:t}},[]),i=await n();return pa(()=>new i(e.mode??r.AGGRESSIVE,ua),e)}var ha=()=>new DOMException(`Speech setup cancelled.`,`AbortError`);function ga(e){let[t,n]=(0,Q.useState)(null),[r,i]=(0,Q.useState)(!1),[a,o]=(0,Q.useState)(!1),[s,c]=(0,Q.useState)(``),l=(0,Q.useRef)(null),u=(0,Q.useRef)(!1),d=(0,Q.useRef)(0),f=(0,Q.useRef)(0),p=(0,Q.useRef)(0),m=(0,Q.useRef)(e);m.current=e;let h=(0,Q.useCallback)(e=>{d.current++,f.current++;let t=l.current;l.current=null,t&&(t.signal.removeEventListener(`abort`,t.abort),e?t.reject(e):t.resolve()),u.current&&(i(!1),o(!1))},[]),_=(0,Q.useCallback)(e=>{u.current&&(n(e),c(``),l.current&&Dr(e,m.current).every(e=>e.status===`installed`)&&h())},[h]),v=(0,Q.useCallback)(async e=>{let t=d.current,n=++f.current,r=()=>u.current&&t===d.current&&n===f.current&&!e?.aborted;try{let t=await br(e);r()&&_(t)}catch(e){if(r())throw e}},[_]);(0,Q.useEffect)(()=>(u.current=!0,v().catch(()=>{}),()=>{u.current=!1,h(ha())}),[h,v]),(0,Q.useEffect)(()=>{if(!r)return;let e=new AbortController,t,n=async()=>{try{await v(e.signal)}catch(t){e.signal.aborted||c(t instanceof Error?t.message:String(t))}finally{e.signal.aborted||(t=setTimeout(()=>void n(),750))}};return n(),()=>{e.abort(),clearTimeout(t)}},[r,v]);let y=(0,Q.useCallback)(async e=>{if(g(e),!u.current)throw ha();h(ha());let t=++f.current;return new Promise((n,r)=>{let a=()=>{l.current===o&&h(e.reason||ha())},o={signal:e,abort:a,resolve:n,reject:r};if(l.current=o,e.addEventListener(`abort`,a,{once:!0}),e.aborted){a();return}br(e).then(n=>{!u.current||l.current!==o||e.aborted||(t===f.current&&_(n),l.current===o&&i(!0))},e=>{l.current===o&&h(e)})})},[_,h]),b=(0,Q.useCallback)(async e=>{let t=d.current,n=++p.current,r=()=>u.current&&t===d.current&&n===p.current;o(!0),c(``);try{await e(),r()&&await v()}catch(e){r()&&c(e instanceof Error?e.message:String(e))}finally{r()&&o(!1)}},[v]);return{catalog:t,open:r,loading:a,error:s,selectedVoice:t?.defaults.voice||``,ensureReady:y,models:t?Dr(t,e):[],show:()=>{h(ha()),i(!0),c(``)},close:()=>h(ha()),download:e=>b(()=>Tr(e)),cancelDownload:e=>b(()=>wr(e)),downloadAll:()=>b(async()=>{if(t)for(let e of Dr(t,m.current))[`installed`,`downloading`,`verifying`].includes(e.status)||await Tr(e.id)})}}var _a=8388608;function va(e,t){return g(t),new Promise((n,r)=>{let i=()=>r(_(t));t.addEventListener(`abort`,i,{once:!0}),e.then(n,r).finally(()=>t.removeEventListener(`abort`,i))})}var ya=10,ba=500;async function xa(e,t,n,r){for(let i=0;;i+=1){let a=await fetch(`/api/speech/synthesize`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({text:e,voiceId:t,requestId:n}),signal:r});if(a.status!==409||i>=ya)return a;let o=await a.json().catch(()=>({}));if(!o.error||!/busy/i.test(o.error))return a;await va(new Promise(e=>setTimeout(e,ba)),r)}}async function Sa(e){if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error||`Speech synthesis failed (${e.status}).`)}if(!e.headers.get(`content-type`)?.startsWith(`audio/wav`)||!e.body)throw Error(`Invalid speech audio response.`);let t=e.body.getReader(),n=[],r=0;try{for(;;){let{done:e,value:i}=await t.read();if(e)break;if(r+=i.byteLength,r>_a)throw Error(`Speech audio exceeds the supported limit.`);n.push(i)}}finally{await t.cancel().catch(()=>{}),t.releaseLock()}if(r<44)throw Error(`Speech audio is empty.`);let i=new Uint8Array(r),a=0;for(let e of n)i.set(e,a),a+=e.length;return i.buffer}async function Ca(e,t,n,r){g(n);let i=h(n);try{await wa(e,t,i,r)}finally{i.abort(new DOMException(`Speech playback ended.`,`AbortError`)),i.dispose()}}async function wa(e,n,r,i){let{signal:a}=r,{speechSegments:o}=await va(t(()=>import(`./speech-text-BTwYi9Sb.js`),__vite__mapDeps([120,87,1,2,3,84,85,86,29])),a);g(a);let s=(typeof e==`string`?(async function*(){yield*o(e)})():(await va(t(()=>import(`./speech-stream-text-DF6aAUVb.js`),__vite__mapDeps([121,87,1,2,3,84,85,86,29,13,120])),a)).streamingSpeechSegments(e,a))[Symbol.asyncIterator](),c=!!window.__PISPER_MOBILE_APP__,l=new Set,u,d,f,p=e=>{(c?Sr(`mobile_cancel_speech`,{requestId:e}):S(`/api/speech/cancel`,{method:`POST`,body:{requestId:e},timeout:3e3})).catch(()=>{})},m=()=>{for(let e of l)p(e);try{d?.stop()}catch{}f?.(a.reason||new DOMException(`Speech playback cancelled.`,`AbortError`))};a.addEventListener(`abort`,m,{once:!0});let _=e=>{g(a);let t=crypto.randomUUID();l.add(t);let r=(async()=>{if(c){let r=await Sr(`mobile_synthesize_speech`,{text:e,voiceId:n,requestId:t});if(a.aborted&&(p(t),g(a)),!r||typeof r.audioId!=`string`||!r.audioId.trim()||r.audioId.length>128||!Number.isInteger(r.sampleRate)||r.sampleRate<8e3||r.sampleRate>48e3||!Number.isFinite(r.durationMs)||r.durationMs<=0||r.durationMs>45e3)throw Error(`Invalid native speech audio.`);return{requestId:t,native:r}}let r=h(a,6e4);try{let i=await xa(e,n,t,r.signal);return{requestId:t,wav:await Sa(i)}}finally{r.dispose()}})();return r.catch(()=>{}),r};try{if(!c){u=new AudioContext({sampleRate:24e3});let e;try{await va(Promise.race([u.resume(),new Promise((t,n)=>{e=setTimeout(()=>n(Error(`Audio playback is unavailable.`)),5e3)})]),a)}finally{clearTimeout(e)}}let e=async()=>{let e=await va(s.next(),a);return e.done?void 0:_(e.value)},t=e(),n=!1;for(;;){let r=await va(t,a);if(g(a),!r)break;if(t=e(),t.catch(()=>{}),n=!0,i?.(),r.native){if((await va(Sr(`mobile_play_speech`,{audioId:r.native.audioId,requestId:r.requestId}),a))?.completed!==!0)throw Error(`Speech playback was interrupted.`)}else{let e=await va(u.decodeAudioData(r.wav),a);if(g(a),e.numberOfChannels!==1||!Number.isFinite(e.duration)||e.duration<=0||e.duration>45)throw Error(`Invalid speech audio duration.`);let t=u.createBufferSource();d=t,t.buffer=e,t.connect(u.destination);try{await new Promise((e,n)=>{f=n,t.onended=()=>e(),t.start()})}finally{f=void 0,t.onended=null,t.disconnect(),d=void 0}}l.delete(r.requestId),g(a)}if(!n)throw Error(`The reply has no speakable text.`)}finally{a.removeEventListener(`abort`,m),r.abort(new DOMException(`Speech playback ended.`,`AbortError`)),s.return?.(void 0).catch(()=>{});for(let e of l)p(e);try{d?.stop()}catch{}await u?.close().catch(()=>{})}}var Ta={schemaVersion:1,scope:`Offline license texts and provenance notices for the catalogued speech resources and local derivatives. This document is not legal advice, commercial-use clearance, a complete training-data rights audit, or approval for redistribution or formal release. Packaging this small notice file does not package the large models or resolve pending obligations. Native sherpa binaries and their compiled or embedded dependencies require a separate license/linkage and source-delivery audit; switching TTS models does not prove the binaries contain no GPL components or satisfy their obligations.`,licenseIdsMeaning:`References identify retained license documents applicable to the described components or their stated source projects. Multiple references are not alternative dual-license choices and are not a complete SPDX expression. A repository declaration does not relicense unrelated bundled data.`,statusDefinitions:{confirmed:`The specific content or source match described in summary was verified; this is not a whole-chain rights guarantee.`,declared:`An upstream license declaration supports the classification, without a complete reproducible provenance proof.`,pending:`The listed provenance, rights, or distribution obligations remain unresolved even where a license declaration exists.`},pathScopes:{model:`Paths are relative to the original downloaded model root. A terminal /** matches every descendant; all other paths are exact.`,shared:`Paths are relative to the application's shared resource root.`},licenses:[{id:`apache-2.0`,name:`Apache License 2.0 (X-ASR source text)`,text:` Apache License
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/SessionContextPanel-39eXpERL.js","assets/rolldown-runtime-B0Z9INg1.js","assets/vendor-router-CSN_DGvx.js","assets/vendor-react-DwNgTV1j.js","assets/use-i18n-BPJI6-Ue.js","assets/i18n-Cewq43aI.js","assets/index-DT21IKeB.js","assets/index-dYNkGdsI.css","assets/storage-8QW6lXuT.js","assets/vendor-state-GkUciC5H.js","assets/runtime-capabilities-CHYOF_hE.js","assets/runtime-capabilities-store-CDhzPVU-.js","assets/api-3pnTJcsp.js","assets/abort-signal-f4JsiYKX.js","assets/permission-rules-api-DdYftUQE.js","assets/createLucideIcon-Cd-3GVxJ.js","assets/arrow-left-B8oVrQ2S.js","assets/check-2vYc6QaP.js","assets/chevron-right-C3t2Rckj.js","assets/SessionBrowserPane-ZvjA5vop.js","assets/useQuery-DdcpUQhO.js","assets/query-Bj-DUNYq.js","assets/arrow-up-DST6-qVQ.js","assets/chevron-down-CxtxIjiP.js","assets/earth-Ddy13fHh.js","assets/external-link-CEQqPcqc.js","assets/GitDiffViewer-DZm3DoP7.js","assets/x-07u4-129.js","assets/utils-C8uzG5AZ.js","assets/vendor-ui-DvrYggeS.js","assets/button-CCcCN8tE.js","assets/dist-41X0pdUs.js","assets/events-BYm_7rfH.js","assets/esm-DCV8yILT.js","assets/file-Bllajneu.js","assets/side-chat-context-BpjCorLu.js","assets/routes-DIeaqWVc.js","assets/session-board-status-D2lpFPiI.js","assets/usePhoneShell-C90daPSI.js","assets/use-mobile-C2tPBAza.js","assets/client-store-B0G8KCEA.js","assets/arrow-down-CDGua-ue.js","assets/chevron-left-BAtyp3_6.js","assets/chevron-up-D_ZcXjqr.js","assets/copy-DHmIFc52.js","assets/download-BCfIiuaL.js","assets/ellipsis-CfGKfbq6.js","assets/eye-uWAPXNzJ.js","assets/folder-open-FIShC5Qk.js","assets/info-DATxy0fb.js","assets/loader-circle-BOwQzHB-.js","assets/monitor-ORxecA9m.js","assets/refresh-cw-TbWxTY4K.js","assets/rotate-ccw-clock-CO6Bw-sF.js","assets/rotate-ccw-C0v8V77_.js","assets/shield-alert-oZqX6MNu.js","assets/shield-check-Gvek4RJ7.js","assets/square-bHHVTT3G.js","assets/tag-CqkeJlBf.js","assets/trash-2-CNrPOoPR.js","assets/dropdown-menu-Ds0gD8S8.js","assets/dist-BsRXXcSL.js","assets/dist-DzGQ7sLi.js","assets/es2015-DTZdOI9P.js","assets/dist-BRjj4UeB.js","assets/dist-OB2r6Xsr.js","assets/dist-BaBySQmo.js","assets/popover-CEwCyvso.js","assets/dialog-sq6TFrs2.js","assets/dist-BHkR6BLP.js","assets/tooltip-D4MFbqcG.js","assets/dist-BiRPwy4W.js","assets/shortcuts-zcQP1D4E.js","assets/chat-api-DE-00AQt.js","assets/startup-queries-C9AHlyOp.js","assets/mutation-CEbxdVYy.js","assets/format-DMJQzoZ7.js","assets/StatusGlyph-1KgitlUg.js","assets/run-activity-CwfO0cui.js","assets/input-CPw-zkYh.js","assets/PageState-Cz6vFMXv.js","assets/alert-firawb0H.js","assets/vendor-motion-DSW3wzXK.js","assets/MarkdownMessage-Dbypp4RC.js","assets/vendor-markdown-plugins-CT5L3KA9.js","assets/vendor-shiki-runtime-DM7fm4Bl.js","assets/vendor-markdown-plugins-DEcVZfaU.css","assets/vendor-markdown-CT6Z4fh8.js","assets/route-context-DvWDul4T.js","assets/motion-DTR4ZVle.js","assets/HoldToConfirmButton-BxdJ7icc.js","assets/card-C3A0b5KR.js","assets/BrandLogo-k3CvJjd4.js","assets/collapsible-Dcoy-qnz.js","assets/dist-DUSSw9eQ.js","assets/session-tree-summary-DPqtCWEP.js","assets/FileAttachmentPreview-CeQTyfpt.js","assets/tabs-DsgBuvJv.js","assets/git-branch-N7LGjtzt.js","assets/image-BY_c3FYU.js","assets/link-2-mgasYn21.js","assets/message-square-SKjZyY3v.js","assets/session-change-summary-api-CxOV5OrA.js","assets/AppSelect-BD6RAaJ5.js","assets/select-DD_WO-gs.js","assets/dist-V8chnW6-.js","assets/web-preview-C5NXKRu-.js","assets/public-events-B-fuAF9_.js","assets/terminal-context-aIsIJPn8.js","assets/plus-fQbSqB1n.js","assets/square-terminal-BVG6cUT1.js","assets/sheet-BTaIEX4w.js","assets/SessionInspector-DiSWVd6R.js","assets/segmented-control-xkrEOP_d.js","assets/public-session-Bx2TqcKh.js","assets/settings-2-CXJjXJS9.js","assets/BotAvatar-CNL-APwP.js","assets/bots-store-B0uE78FQ.js","assets/public-flags-DZvYvsWH.js","assets/speech-text-BTwYi9Sb.js","assets/speech-stream-text-DF6aAUVb.js","assets/speech-session-2WJk-z3P.js","assets/mobile-remote-fallback-C2Q0wAa6.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{h as t}from"./vendor-router-CSN_DGvx.js";import{t as n}from"./index-DT21IKeB.js";import{i as r,n as i,r as a}from"./vendor-react-DwNgTV1j.js";import{t as o}from"./use-i18n-BPJI6-Ue.js";import{a as s,i as c,o as l}from"./vendor-state-GkUciC5H.js";import{t as u}from"./storage-8QW6lXuT.js";import{u as d}from"./query-Bj-DUNYq.js";import{r as f,t as p}from"./useQuery-DdcpUQhO.js";import{t as m}from"./startup-queries-C9AHlyOp.js";import{n as h,r as g,t as _}from"./abort-signal-f4JsiYKX.js";import{a as v,l as y,n as b,s as x,t as S,u as C}from"./api-3pnTJcsp.js";import{i as w}from"./runtime-capabilities-CHYOF_hE.js";import{t as T}from"./runtime-capabilities-store-CDhzPVU-.js";import{n as E}from"./use-mobile-C2tPBAza.js";import{n as D,t as O}from"./client-store-B0G8KCEA.js";import{t as k}from"./createLucideIcon-Cd-3GVxJ.js";import{a as A,i as j,r as M}from"./permission-rules-api-DdYftUQE.js";import{c as N,i as P,n as F,o as I,r as L,s as R,t as z}from"./session-list-BeyOEzyU.js";import{t as B}from"./bot-B3TaBp_T.js";import{t as V}from"./braces-DQcXLGFF.js";import{t as H}from"./check-2vYc6QaP.js";import{t as U}from"./chevron-down-CxtxIjiP.js";import{t as ee}from"./chevron-left-BAtyp3_6.js";import{t as te}from"./chevron-right-C3t2Rckj.js";import{t as ne}from"./circle-check-iEdCm3Pw.js";import{n as re,t as ie}from"./image-plus-D7bzZog0.js";import{C as ae,S as oe,_ as W,a as se,b as ce,c as G,d as le,f as K,g as ue,h as de,i as fe,l as pe,m as me,n as he,o as q,p as ge,r as _e,s as ve,t as ye,u as be,v as xe,x as Se,y as Ce}from"./FocusRuntimeControls-J_hbXz7v.js";import{t as we}from"./corner-down-right--hxi-Ihy.js";import{t as Te}from"./download-BCfIiuaL.js";import{o as Ee}from"./GitDiffViewer-DZm3DoP7.js";import{t as De}from"./file-Bllajneu.js";import{A as Oe,B as ke,C as Ae,D as je,E as Me,F as Ne,L as Pe,M as Fe,N as Ie,O as Le,P as Re,R as ze,S as Be,T as Ve,_ as He,a as Ue,d as We,f as Ge,g as Ke,h as qe,i as Je,j as Ye,k as Xe,l as Ze,m as Qe,n as $e,o as et,p as tt,t as nt,u as rt,v as it,w as at,x as ot,y as st,z as ct}from"./side-chat-context-BpjCorLu.js";import{t as J}from"./WorkspacePicker-CojYPYIa.js";import{t as lt}from"./folder-open-FIShC5Qk.js";import{t as ut}from"./git-branch-N7LGjtzt.js";import{t as dt}from"./link-2-mgasYn21.js";import{t as ft}from"./loader-circle-BOwQzHB-.js";import{t as pt}from"./message-square-SKjZyY3v.js";import{t as mt}from"./panel-right-BSUtqUd8.js";import{t as ht}from"./paperclip-BCXrwYpb.js";import{t as gt}from"./pencil-U08v_vV9.js";import{t as _t}from"./play-DNDjDNGn.js";import{t as vt}from"./plus-fQbSqB1n.js";import{t as yt}from"./refresh-cw-TbWxTY4K.js";import{t as bt}from"./search-D0mqDaf_.js";import{t as xt}from"./settings-QX0oWnVK.js";import{t as St}from"./shield-alert-oZqX6MNu.js";import{t as Ct}from"./square-pen-hYbjKh6A.js";import{t as wt}from"./square-bHHVTT3G.js";import{t as Tt}from"./tag-CqkeJlBf.js";import{t as Et}from"./trash-2-CNrPOoPR.js";import{t as Dt}from"./triangle-alert-CE1q54ci.js";import{t as Ot}from"./workflow-Bg94dy8I.js";import{t as kt}from"./wrench-6pg6_bqI.js";import{t as At}from"./x-07u4-129.js";import{t as jt}from"./brand-DIEc3fK8.js";import{t as Mt}from"./checkbox-BrEHgFV0.js";import{c as Nt,i as Pt,l as Ft,p as It,r as Lt,t as Rt}from"./dropdown-menu-Ds0gD8S8.js";import{t as zt}from"./progress-5odAz3B9.js";import{t as Bt}from"./switch-D_G8wFhs.js";import{i as Vt,r as Ht,t as Ut}from"./tabs-DsgBuvJv.js";import{n as Wt,t as Gt}from"./segmented-control-xkrEOP_d.js";import{i as Kt,n as qt,t as Jt}from"./tooltip-D4MFbqcG.js";import{t as Yt}from"./utils-C8uzG5AZ.js";import{n as Xt,t as Y}from"./button-CCcCN8tE.js";import{n as Zt,t as Qt}from"./kbd-CAufZTkl.js";import{C as $t,S as en,b as tn,c as nn,f as rn,i as an,o as on,p as sn,r as cn,s as ln,u as un,x as dn,y as fn}from"./events-BYm_7rfH.js";import{a as pn,c as mn,i as hn,n as gn,r as _n,s as vn,t as yn}from"./shortcuts-zcQP1D4E.js";import{n as bn,o as xn,r as Sn,t as Cn}from"./sheet-BTaIEX4w.js";import{t as X}from"./chat-api-DE-00AQt.js";import{n as wn}from"./session-organization-api-A3EudhgK.js";import{a as Tn,n as En,t as Dn}from"./session-questions-Cf-1g85h.js";import{n as On,o as kn,r as An,t as jn}from"./format-DMJQzoZ7.js";import{t as Mn}from"./StatusGlyph-1KgitlUg.js";import{a as Nn,c as Pn,d as Fn,m as In,o as Ln,p as Rn,u as zn}from"./run-activity-CwfO0cui.js";import{a as Bn,i as Vn,l as Hn,s as Un,t as Wn}from"./dialog-sq6TFrs2.js";import{t as Gn}from"./input-CPw-zkYh.js";import{i as Kn,n as qn,t as Jn}from"./input-group-h8z63MzW.js";import{t as Yn}from"./model-display-kDwvtxrW.js";import{t as Xn}from"./session-change-summary-api-CxOV5OrA.js";import{t as Zn}from"./pick-system-directory-LOpQirAM.js";import{n as Qn,r as $n,t as er}from"./PageState-Cz6vFMXv.js";import{t as tr}from"./back-navigation-CK7X_5Bc.js";import{t as nr}from"./MarkdownMessage-Dbypp4RC.js";import{t as rr}from"./esm-DCV8yILT.js";import{t as ir}from"./motion-DTR4ZVle.js";import{t as ar}from"./shortcut-aria-jHRmld9z.js";import{t as or}from"./app-primitives-Drz_SjnR.js";import"./web-preview-C5NXKRu-.js";import{n as sr,r as cr}from"./terminal-context-aIsIJPn8.js";import{a as lr,i as ur}from"./tool-labels-ghvpPFmc.js";import{t as dr}from"./BrandLogo-k3CvJjd4.js";import{i as fr,n as pr,o as Z,s as mr,t as hr}from"./session-tree-summary-DPqtCWEP.js";import{fileRewindConfirmOptions as gr,fileRewindNotice as _r,notifyTreeNavigation as vr}from"./session-tree-actions-DNefaiZO.js";import{a as yr,c as br,i as xr,l as Sr,n as Cr,o as wr,s as Tr,t as Er,u as Dr}from"./speech-session-2WJk-z3P.js";import{n as Or,t as kr}from"./web-preview-events-CIJw4Wx-.js";var Ar=k(`audio-lines`,[[`path`,{d:`M2 10v3`,key:`1fnikh`}],[`path`,{d:`M6 6v11`,key:`11sgs0`}],[`path`,{d:`M10 3v18`,key:`yhl04a`}],[`path`,{d:`M14 8v7`,key:`3a1oy3`}],[`path`,{d:`M18 5v13`,key:`123xd1`}],[`path`,{d:`M22 10v3`,key:`154ddg`}]]),jr=k(`badge-check`,[[`path`,{d:`M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z`,key:`3c2336`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),Mr=k(`book-open`,[[`path`,{d:`M12 5v16`,key:`1f6ucr`}],[`path`,{d:`M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z`,key:`1fyvmf`}]]),Nr=k(`bookmark`,[[`path`,{d:`M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z`,key:`oz39mx`}]]),Pr=k(`file-check-corner`,[[`path`,{d:`M10.5 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v6`,key:`g5mvt7`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m14 20 2 2 4-4`,key:`15kota`}]]),Fr=k(`file-down`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M12 18v-6`,key:`17g6i2`}],[`path`,{d:`m9 15 3 3 3-3`,key:`1npd3o`}]]),Ir=k(`message-circle-question-mark`,[[`path`,{d:`M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719`,key:`1sd12s`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Lr=k(`mic-off`,[[`path`,{d:`M12 19v3`,key:`npa21l`}],[`path`,{d:`M15 9.34V5a3 3 0 0 0-5.68-1.33`,key:`1gzdoj`}],[`path`,{d:`M16.95 16.95A7 7 0 0 1 5 12v-2`,key:`cqa7eg`}],[`path`,{d:`M18.89 13.23A7 7 0 0 0 19 12v-2`,key:`16hl24`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M9 9v3a3 3 0 0 0 5.12 2.12`,key:`r2i35w`}]]),Rr=k(`mic`,[[`path`,{d:`M12 19v3`,key:`npa21l`}],[`path`,{d:`M19 10v2a7 7 0 0 1-14 0v-2`,key:`1vc78b`}],[`rect`,{x:`9`,y:`2`,width:`6`,height:`13`,rx:`3`,key:`s6n7sd`}]]),zr=k(`shield`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}]]),Br=k(`shrink`,[[`path`,{d:`m15 15 6 6m-6-6v4.8m0-4.8h4.8`,key:`17vawe`}],[`path`,{d:`M9 19.8V15m0 0H4.2M9 15l-6 6`,key:`chjx8e`}],[`path`,{d:`M15 4.2V9m0 0h4.8M15 9l6-6`,key:`lav6yq`}],[`path`,{d:`M9 4.2V9m0 0H4.2M9 9 3 3`,key:`1pxi2q`}]]),Vr=k(`target`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`circle`,{cx:`12`,cy:`12`,r:`6`,key:`1vlfrh`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]),Hr=k(`users`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]),Q=e(r(),1),Ur=c(()=>({getItem:e=>{try{return n.getItem(e)}catch{return null}},setItem:(e,t)=>{try{n.setItem(e,t)}catch{}},removeItem:e=>{try{n.removeItem(e)}catch{}}})),Wr=l()(s((e,t)=>({width:360,open:!1,setWidth:n=>{let r=Be(n);t().width!==r&&e({width:r})},setOpen:n=>{t().open!==n&&e({open:n})}}),{name:`pisper-session-context-layout`,version:2,storage:Ur,migrate:e=>{let t=e&&typeof e==`object`&&!Array.isArray(e)?e:{};return{width:Be(`width`in t?t.width:void 0),open:`open`in t&&t.open===!0}},partialize:({width:e,open:t})=>({width:e,open:t}),merge:(e,t)=>({...t,width:Be(e&&typeof e==`object`&&!Array.isArray(e)&&`width`in e?e.width:void 0),open:!!(e&&typeof e==`object`&&!Array.isArray(e)&&`open`in e&&e.open===!0)})}));function Gr(e,t,n){let r=(0,Q.useRef)(n);r.current=n,(0,Q.useLayoutEffect)(()=>e?tr.register(t,()=>r.current()):void 0,[e,t])}var $=a();function Kr({preferredWidth:e,onWidthChange:t,availableWidth:n,presentation:r,children:i,context:a,side:s=`right`,layoutId:c=`chat`,conversationHeaderInset:l=0}){let{t:u}=o(),d=(0,Q.useRef)(()=>{});(0,Q.useEffect)(()=>()=>d.current(),[]);let f=r===`aside`,p=r===`content`,m=Ae(e,n),h=Ae(720,n),g=e=>t(Math.max(280,Math.min(h,e))),_=n=>{if(n.button!==0)return;d.current(),n.preventDefault(),n.currentTarget.focus(),n.currentTarget.setPointerCapture(n.pointerId);let r=n.clientX,i=e=>g(m+(e.clientX-r)*(s===`left`?1:-1)),a=()=>{window.removeEventListener(`pointermove`,i),window.removeEventListener(`pointerup`,a),window.removeEventListener(`pointercancel`,o),window.removeEventListener(`keydown`,c)},o=()=>{t(e),a()},c=e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),o())};d.current=a,window.addEventListener(`pointermove`,i),window.addEventListener(`pointerup`,a,{once:!0}),window.addEventListener(`pointercancel`,o,{once:!0}),window.addEventListener(`keydown`,c)},v=(0,$.jsx)(`div`,{id:`${c}-conversation`,"data-workspace-conversation":!0,inert:p,className:p?`hidden`:`min-h-0 min-w-0 flex-1 overflow-hidden`,style:f&&l?{paddingTop:l}:void 0,children:i},`conversation`),y=f?(0,$.jsx)(`div`,{role:`separator`,tabIndex:0,"aria-orientation":`vertical`,"aria-label":u(`chat:sessionContext.resize`),title:u(`chat:sessionContext.resizeHint`),"aria-controls":`${c}-conversation ${c}-content`,"aria-valuemin":280,"aria-valuemax":h,"aria-valuenow":m,onPointerDown:_,onDoubleClick:()=>t(360),onKeyDown:e=>{if(![`ArrowLeft`,`ArrowRight`,`Home`,`End`,`Enter`].includes(e.key))return;if(e.preventDefault(),e.key===`Enter`){t(360);return}let n=e.shiftKey?64:16;g(e.key===`Home`?280:e.key===`End`?h:m+(e.key===`ArrowRight`?n:-n)*(s===`left`?1:-1))},className:`relative w-2 shrink-0 cursor-col-resize touch-none select-none outline-none after:absolute after:top-1/2 after:left-1/2 after:h-9 after:w-[3px] after:-translate-1/2 after:rounded-full after:bg-stroke-strong after:transition-colors after:duration-[var(--d-fast)] hover:after:bg-focus active:after:bg-focus focus-visible:after:bg-focus focus-visible:after:ring-3 focus-visible:after:ring-focus-ring`},`separator`):null,b=(0,$.jsx)(`div`,{id:`${c}-content`,className:f?`h-full min-h-0 shrink-0 overflow-hidden`:p?`h-full min-h-0 min-w-0 flex-1 overflow-hidden`:`hidden`,style:f?{width:m}:void 0,children:(f||p)&&a},`resource`);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{id:`${c}-context-layout`,"data-workspace-layout":!0,className:`flex h-full min-h-0 min-w-0 flex-1 overflow-hidden`,children:s===`left`?[b,y,v]:[v,y,b]}),r===`sheet`&&a]})}function qr({sessionId:e,streaming:t,completed:n,runStartedAt:r,enabled:i,open:a,onReveal:o}){let s=(0,Q.useRef)(null),c=(0,Q.useRef)(o);(0,Q.useLayoutEffect)(()=>{c.current=o},[o]),(0,Q.useEffect)(()=>{let o=s.current,l={sessionId:e,streaming:t,completed:n,runStartedAt:r};if(s.current=l,!i||a||!ot(o,l))return;let u=new AbortController,d=!0;return X.getSessionFileChanges(e,{signal:u.signal}).then(({files:e})=>{d&&at(o,l,e)&&c.current()}).catch(()=>{}),()=>{d=!1,u.abort()}},[n,i,a,r,e,t])}var Jr=`pisper:task-content-requested`,Yr=[`changes`,`terminal`,`processes`,`sources`,`browser`];function Xr(e){return!e||typeof e!=`object`||!(`kind`in e)?null:Yr.find(t=>t===e.kind)||null}function Zr({sessionId:e,cwd:t,taskName:n,sources:r,mobile:i,streaming:a}){let{t:s}=o(),c=cr(e),l=sr(),[u,d]=(0,Q.useState)(!1),f=(0,Q.useRef)(null),m=(0,Q.useRef)(!1),h=T(e=>e.capabilities),g=w(h,`vcs`),_=p({enabled:g,queryKey:[`task-project-changes`,e,t,a],queryFn:({signal:t})=>X.getVcsChanges(e,{signal:t})}),v=(0,Q.useMemo)(()=>Ke(_.data?.diff||``,_.data?.files.map(e=>e.path)||[],_.data?.diffTruncated),[_.data]),y=()=>it.getState().update(e,`new`,{type:`workspace`,summaryOpen:!1}),b=()=>document.getElementById(`task-${e}-summary-toggle`)?.focus();(0,Q.useEffect)(()=>{i||f.current?.focus()},[i]);let x=(t,n=``)=>{let r=it.getState();if(r.update(e,t,{type:`open`,kind:t})===`limit`){d(!0);return}m.current=!0;let i=it.getState().sessions[e]?.activeId;n&&i&&r.update(e,t,{type:`view`,id:i,patch:t===`sources`?{selectedSourceId:n,query:``,filter:``}:{expandedProcesses:[n],filter:``}})};Gr(!i,300,()=>{y(),b()});let S=`w-full justify-start gap-2 px-2 font-normal text-content`,C=`ml-auto shrink-0 text-xs text-content-muted tabular-nums`,E=(0,$.jsxs)($.Fragment,{children:[u&&(0,$.jsx)(`p`,{role:`alert`,className:`px-2 pb-1 text-xs text-danger`,children:s(`chat:sessionContext.pageLimit`)}),(0,$.jsxs)(`div`,{className:`flex min-w-0 items-start gap-2 border-b border-stroke-soft px-2 pt-1 pb-2`,children:[(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsx)(`p`,{className:`truncate font-mono text-xs text-content-muted`,title:t,children:t.split(/[\\/]/).filter(Boolean).at(-1)||t}),(0,$.jsx)(`p`,{className:`mt-0.5 truncate text-sm font-medium text-content`,children:n})]}),(0,$.jsx)(Y,{variant:`ghost`,size:`icon`,className:`max-[650px]:size-11`,"aria-label":s(`chat:workbench.closeSummary`),onClick:()=>{y(),b()},children:(0,$.jsx)(At,{size:16})})]}),(0,$.jsxs)(`section`,{className:`border-b border-stroke-soft py-1`,children:[(0,$.jsxs)(Y,{variant:`ghost`,className:`${S} h-auto min-h-8 whitespace-normal text-left`,disabled:!g,onClick:()=>x(`changes`),children:[(0,$.jsx)(Ee,{size:16,className:`text-content-muted`}),(0,$.jsx)(`span`,{className:`min-w-0 flex-1`,children:s(`chat:workbench.projectChanges`)}),(0,$.jsx)(`span`,{className:C,children:g?_.isPending?`…`:_.isError||_.data?.error?s(`chat:workbench.unavailable`):_.data?.isRepo?_.data.files.length:`—`:s(`chat:workbench.unavailable`)})]}),(_.isError||_.data?.error)&&(0,$.jsx)(`p`,{role:`alert`,className:`px-2 py-1 text-xs text-danger`,children:s(`chat:workbench.changesFailed`)}),_.data?.isRepo&&!_.isError&&!_.data.error&&(0,$.jsxs)(`p`,{className:`px-2 pb-1 pl-8 font-mono text-xs tabular-nums text-content-muted`,children:[v.partial?`${s(`chat:workbench.partialCounts`)} `:``,(0,$.jsxs)(`span`,{className:`text-success`,children:[`+`,v.added]}),` `,(0,$.jsxs)(`span`,{className:`text-danger`,children:[`−`,v.removed]})]}),(0,$.jsxs)(Y,{variant:`ghost`,className:S,onClick:()=>x(`files`),children:[(0,$.jsx)(ke,{size:16,className:`text-content-muted`}),s(`chat:workbench.taskSnapshots`)]})]}),(0,$.jsxs)(`section`,{className:`border-b border-stroke-soft py-1`,children:[(0,$.jsxs)(Y,{variant:`ghost`,className:S,onClick:()=>x(`processes`),children:[(0,$.jsx)(`span`,{children:s(`terminal:workspace.processes`)}),(0,$.jsx)(`span`,{className:C,children:c.length})]}),!l&&(0,$.jsx)(`p`,{className:`px-2 pb-1 text-xs text-content-muted`,children:s(`terminal:workspace.nativeOnly`)}),c.slice(0,3).map(e=>(0,$.jsxs)(Y,{variant:`ghost`,className:`${S} min-w-0`,onClick:()=>x(`processes`,e.id),children:[e.status===`running`?(0,$.jsx)(Xt,{className:`size-3.5`}):(0,$.jsx)(A,{size:15,className:`text-content-muted`}),(0,$.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-left font-mono text-xs`,children:e.profileId}),(0,$.jsx)(`span`,{className:C,children:e.status===`running`?s(`terminal:workspace.running`):e.status===`exited`?s(`terminal:workspace.exited`):s(`chat:workbench.otherState`)})]},e.id))]}),(0,$.jsxs)(`section`,{className:`pt-1`,children:[(0,$.jsxs)(Y,{variant:`ghost`,className:S,onClick:()=>x(`sources`),children:[(0,$.jsx)(`span`,{children:s(`chat:workbench.sources`)}),(0,$.jsx)(`span`,{className:C,children:r.length})]}),r.slice(0,3).map(e=>(0,$.jsxs)(Y,{variant:`ghost`,className:`${S} min-w-0`,onClick:()=>x(`sources`,e.id),children:[(0,$.jsx)(dt,{size:15,className:`text-content-muted`}),(0,$.jsx)(`span`,{className:`truncate font-mono text-xs`,children:e.name||s(`chat:chatMessage.fileAttachment`)})]},e.id)),(0,$.jsx)(Y,{variant:`ghost`,className:`${S} text-content-muted`,onClick:()=>x(`sources`),children:s(`chat:workbench.viewAll`)})]})]});return i?(0,$.jsx)(Cn,{open:!0,onOpenChange:e=>{e||y()},children:(0,$.jsxs)(bn,{side:`bottom`,showCloseButton:!1,"aria-describedby":void 0,className:`max-h-[80dvh] overflow-y-auto rounded-t-2xl p-3 pb-[max(16px,var(--pisper-safe-area-bottom))] [&_button]:min-h-11`,style:{left:`calc(44px + var(--pisper-safe-area-left, 0px))`,right:`var(--pisper-safe-area-right, 0px)`},onCloseAutoFocus:e=>{e.preventDefault(),m.current||b()},children:[(0,$.jsx)(xn,{className:`sr-only`,children:s(`chat:workbench.summary`)}),E]})}):(0,$.jsx)(`div`,{ref:f,tabIndex:-1,id:`task-${e}-summary`,role:`region`,"aria-label":s(`chat:workbench.summary`),onKeyDown:e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),y(),b())},className:`absolute top-[52px] right-2 z-20 max-h-[calc(100%-64px)] w-80 max-w-[calc(100%-16px)] overflow-y-auto rounded-md bg-popover p-1 text-sm text-popover-foreground shadow-float`,children:E})}function Qr(e){if(typeof e!=`string`||Array.from(e).some(e=>e.charCodeAt(0)<32))return``;let t=e.replace(/\\/g,`/`);return!t.startsWith(`/`)&&!/^[a-z]:\//i.test(t)?``:t.replace(/\/\.\//g,`/`).replace(/\/$/,``)||`/`}function $r(e){let t=[],n=new Set;for(let r of e)if(Array.isArray(r.attachments))for(let[e,i]of r.attachments.entries()){if(!i||typeof i!=`object`||Array.isArray(i))continue;let a=typeof i.id==`string`&&!i.id.startsWith(`path:`)&&i.id.length<=512&&!Array.from(i.id).some(e=>e.charCodeAt(0)<32)?i.id:``,o=Qr(i.path),s=a?`asset`:o?`path`:`unresolved`,c=a?`asset:${a}`:o?`path:${o}`:`unresolved:${r.id}:${e}`;if(n.has(c))continue;n.add(c);let l=typeof i.name==`string`?i.name:o.split(`/`).pop()||a,u=typeof i.mimeType==`string`?i.mimeType:``,d={...a?{id:a,downloadUrl:`/api/assets/${encodeURIComponent(a)}/download`}:{},...o?{id:a||`path:${o}`,path:o}:{},name:l,mimeType:u,...typeof i.size==`number`&&Number.isFinite(i.size)&&i.size>=0?{size:i.size}:{},...typeof i.text==`string`?{text:i.text.slice(0,4e5)}:{}};t.push({id:c,name:l,method:s,messageId:r.id,attachment:d,available:s!==`unresolved`||typeof i.text==`string`,kind:u.startsWith(`image/`)?`image`:u.startsWith(`text/`)?`text`:`file`})}return t}function ei({width:e,mobile:t,contentOpen:n}){return n?t||e<660?`content`:`split`:`conversation`}var ti=(0,Q.lazy)(()=>t(()=>import(`./SessionContextPanel-39eXpERL.js`).then(e=>({default:e.SessionContextPanel})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111])));function ni({sessionId:e,messages:t,taskName:n,cwd:r,panelId:i,active:a,mobile:s,plan:c,streaming:l,completed:u,runStartedAt:d,plansAvailable:f,requestConfirm:p,children:m}){let{t:h}=o(),[g,_]=(0,Q.useState)(null),[v,y]=(0,Q.useState)(null),b=(0,Q.useMemo)(()=>({headerHost:g,sourceActionHost:v,setSourceActionHost:y}),[g,v]),x=(0,Q.useMemo)(()=>$r(t),[t]),S=(0,Q.useRef)(Wr.getState().width).current,C=(0,Q.useRef)(null),[w,T]=(0,Q.useState)(0),E=(0,Q.useMemo)(()=>st(),[]),D=it(t=>t.sessions[e])||E,O=it(e=>e.update);(0,Q.useLayoutEffect)(()=>{D.contentWidth??O(e,`new`,{type:`workspace`,contentWidth:S})},[D.contentWidth,e,S,O]),(0,Q.useLayoutEffect)(()=>{let e=C.current;if(!e)return;let t=()=>T(e.clientWidth);t();let n=null,r=new ResizeObserver(()=>{n!==null&&cancelAnimationFrame(n),n=requestAnimationFrame(()=>{n=null,t()})});return r.observe(e),()=>{r.disconnect(),n!==null&&cancelAnimationFrame(n)}},[]);let k=ei({width:w,mobile:s,contentOpen:D.contentOpen&&D.pages.length>0});qr({sessionId:e,streaming:l,completed:u,runStartedAt:d,enabled:!0,open:D.contentOpen,onReveal:()=>O(e,`files`,{type:`open`,kind:`files`})}),(0,Q.useEffect)(()=>{if(!a)return;let t=t=>{let n=Xr(t.detail);n&&O(e,n,{type:`open`,kind:n})};return window.addEventListener(Jr,t),()=>window.removeEventListener(Jr,t)},[a,e,O]);let A=()=>{window.dispatchEvent(new Event(ln)),O(e,`files`,{type:`workspace`,contentOpen:!1}),requestAnimationFrame(()=>(document.getElementById(`task-${e}-new-content-tab`)||document.getElementById(`task-${e}-more`))?.focus())};Gr(a&&k===`content`,100,A);let j=D.contentOpen&&D.pages.length>0&&(0,$.jsx)(Q.Suspense,{fallback:(0,$.jsx)(`div`,{role:`status`,className:`p-4 text-sm text-content-muted`,children:h(`chat:focusSession.gitLoading`)}),children:(0,$.jsx)(ti,{panelId:`${i}-context`,compact:!1,embedded:!0,active:a,sessionId:e,cwd:r,sources:x,tab:D.pages.find(e=>e.id===D.activeId)?.kind||`files`,plan:c,streaming:l,plansAvailable:f,requestConfirm:p,onTabChange:()=>{},onClose:A,onBack:A})});return(0,$.jsx)(He.Provider,{value:b,children:(0,$.jsxs)(`div`,{ref:C,id:`task-${e}-workspace`,tabIndex:-1,"data-task-workspace":e,"data-active":a,className:`relative flex h-full min-h-0 min-w-0 flex-col overflow-hidden bg-panel`,children:[(0,$.jsx)(`div`,{ref:_,className:k===`split`?`@container absolute left-0 top-0 z-10`:`@container shrink-0`,style:k===`split`?{width:`calc(100% - ${Ae(D.contentWidth??S,w)+8}px)`}:void 0,"data-task-header":!0}),(0,$.jsx)(Kr,{preferredWidth:D.contentWidth??S,onWidthChange:t=>{O(e,`new`,{type:`workspace`,contentWidth:t}),Wr.getState().setWidth(t)},layoutId:i,availableWidth:w,conversationHeaderInset:48,presentation:k===`split`?`aside`:k===`content`?`content`:`closed`,context:j,children:m}),a&&D.summaryOpen&&(0,$.jsx)(Zr,{sessionId:e,cwd:r,taskName:n,sources:x,mobile:s,streaming:l})]})})}function ri(e,t){return e.open===t?e:{open:t,leaving:!t}}function ii(e){return e.leaving?{open:e.open,leaving:!1}:e}function ai(e){return e.open||e.leaving}function oi(e,t=400){let[n,r]=(0,Q.useState)(()=>({open:e,leaving:!1})),i=n;n.open!==e&&(i=ri(n,e),r(i));let a=i.leaving,o=(0,Q.useCallback)(()=>r(ii),[]);return(0,Q.useLayoutEffect)(()=>{if(!a)return;if(ir()){o();return}let e=window.setTimeout(o,t);return()=>window.clearTimeout(e)},[t,o,a]),{mounted:ai(i),leaving:a,finish:o}}function si(e){return[`running`,`waiting_approval`].includes(String(e.status||``))}function ci(e,t){return t(e===`running`?`chat:workflowRun.running`:e===`waiting_approval`?`chat:workflowRun.waitingApproval`:e===`completed`?`chat:workflowRun.completed`:e===`failed`?`chat:workflowRun.failed`:e===`cancelled`?`chat:workflowRun.stopped`:`chat:workflowRun.interrupted`)}function li({sessionId:e,empty:t=null}){let{t:n}=o(),[r,i]=(0,Q.useState)([]),[a,s]=(0,Q.useState)(``),c=(0,Q.useCallback)(async()=>{try{let t=await X.getSessionWorkflowRuns(e);i(t.runs||[])}catch{}},[e]);if((0,Q.useEffect)(()=>{c();let e=window.setInterval(c,1500);return()=>window.clearInterval(e)},[c]),!r.length)return t;let l=`session-workflow-context grid min-w-0 gap-1 border-b border-stroke-soft pb-1.5 [&_strong]:text-xs [&_strong]:font-medium [&_strong]:text-content-muted [&_p]:max-h-[84px] [&_p]:overflow-auto [&_p]:text-xs [&_p]:leading-relaxed [&_p]:whitespace-pre-wrap [&_p]:text-content-secondary [&_p]:[overflow-wrap:anywhere] [&_pre]:max-h-[84px] [&_pre]:overflow-auto [&_pre]:rounded-xs [&_pre]:bg-code [&_pre]:px-1.5 [&_pre]:py-1 [&_pre]:font-mono [&_pre]:text-xs [&_pre]:leading-relaxed [&_pre]:whitespace-pre-wrap [&_pre]:text-content-secondary [&_pre]:[overflow-wrap:anywhere]`;return(0,$.jsx)(`div`,{className:`flex max-h-[210px] flex-col overflow-auto rounded-md border border-stroke bg-panel`,children:[...r].sort((e,t)=>Date.parse(t.startedAt)-Date.parse(e.startedAt)).slice(0,5).map(e=>{let t=a===e.id,r=Math.round((Number(e.completedNodes)||0)/Math.max(1,Number(e.totalNodes)||1)*100);return(0,$.jsxs)(`div`,{className:`session-workflow-run border-b border-stroke-soft last:border-b-0 ${e.status}`,children:[(0,$.jsxs)(`button`,{className:`session-workflow-summary grid w-full cursor-pointer grid-cols-[20px_minmax(120px,1fr)_minmax(80px,160px)_14px] items-center gap-2.5 border-0 px-3 py-2 text-left text-content transition-colors duration-(--d-fast) hover:bg-surface-subtle focus-visible:-outline-offset-2 max-[650px]:min-h-11 max-[650px]:grid-cols-[20px_minmax(0,1fr)_14px] max-[650px]:[&_[data-slot='progress']]:col-[2/4] [&_[data-slot='progress']]:h-1 [&_>_span:nth-child(2)]:flex [&_>_span:nth-child(2)]:min-w-0 [&_>_span:nth-child(2)]:flex-col [&_small]:truncate [&_small]:text-xs [&_small]:text-content-muted [&_small]:tabular-nums [&_strong]:truncate [&_strong]:text-sm [&_strong]:font-medium ${t?`bg-surface-subtle`:`bg-transparent`}`,"aria-expanded":t,onClick:()=>s(t?``:e.id),children:[(0,$.jsx)(`span`,{className:`grid size-5 place-items-center rounded-xs ${e.status===`completed`?`bg-success-soft text-success`:e.status===`failed`?`bg-danger-soft text-danger`:e.status===`waiting_approval`?`bg-warning-soft text-warning-strong`:`bg-surface-muted text-content-muted`}`,children:e.status===`running`?(0,$.jsx)(Xt,{className:`size-3.5`}):e.status===`completed`?(0,$.jsx)(H,{size:12}):e.status===`failed`?(0,$.jsx)(At,{size:12}):(0,$.jsx)(Ot,{size:12})}),(0,$.jsxs)(`span`,{children:[(0,$.jsx)(`strong`,{children:e.workflowName}),(0,$.jsxs)(`small`,{children:[ci(e.status,n),` · v`,e.workflowRevision||1]})]}),(0,$.jsx)(zt,{value:e.status===`completed`?100:r}),(0,$.jsx)(te,{size:14,className:`text-content-muted transition-transform duration-(--d-fast) ${t?`rotate-90`:``}`})]}),t&&(0,$.jsxs)(`div`,{className:`session-workflow-detail flex flex-col gap-1.5 border-t border-stroke-soft bg-surface-subtle py-2 pr-3 pl-[42px] max-[650px]:pl-3 [&_>_p]:text-xs [&_>_p]:text-content-muted`,children:[e.sourceMessage&&(0,$.jsxs)(`div`,{className:l,children:[(0,$.jsx)(`strong`,{children:n(`chat:workflowRun.request`)}),(0,$.jsx)(`p`,{children:e.sourceMessage})]}),e.inputs&&Object.keys(e.inputs).length>0&&(0,$.jsxs)(`div`,{className:l,children:[(0,$.jsx)(`strong`,{children:n(`chat:workflowRun.inputs`)}),(0,$.jsx)(`pre`,{children:JSON.stringify(e.inputs,null,2)})]}),(e.nodes||[]).map(t=>(0,$.jsxs)(`div`,{className:`session-workflow-node grid min-h-6 grid-cols-[15px_minmax(0,1fr)_auto] items-center gap-1.5 text-content-muted [&.completed]:text-success [&.failed]:text-danger [&_>_div]:flex [&_>_div]:gap-1 [&_>_span]:flex [&_>_span]:min-w-0 [&_>_span]:flex-col [&_small]:truncate [&_small]:text-xs [&_small]:text-content-muted [&_strong]:text-xs [&_strong]:font-medium [&_strong]:text-content ${t.status}`,children:[t.status===`completed`?(0,$.jsx)(H,{size:13}):t.status===`failed`?(0,$.jsx)(re,{size:13}):t.status===`running`?(0,$.jsx)(Xt,{className:`size-3.5`}):(0,$.jsx)(wt,{size:11}),(0,$.jsxs)(`span`,{children:[(0,$.jsx)(`strong`,{children:t.label}),(t.error||t.summary)&&(0,$.jsx)(`small`,{children:t.error||t.summary})]}),t.status===`waiting_approval`&&(0,$.jsxs)(`div`,{children:[(0,$.jsx)(Y,{size:`xs`,onClick:async()=>{await X.resolveWorkflowApproval(e.id,t.id,!0),await c()},children:n(`chat:workflowRun.approve`)}),(0,$.jsx)(Y,{size:`xs`,variant:`destructive`,onClick:async()=>{await X.resolveWorkflowApproval(e.id,t.id,!1),await c()},children:n(`chat:workflowRun.reject`)})]})]},t.id)),(e.error||e.summary)&&(0,$.jsx)(`p`,{children:e.error||e.summary}),si(e)&&(0,$.jsxs)(Y,{size:`xs`,variant:`destructive`,className:`self-start`,onClick:async()=>{await X.stopWorkflowRun(e.id),await c()},children:[(0,$.jsx)(wt,{"data-icon":`inline-start`}),n(`chat:workflowRun.stop`)]})]})]},e.id)})})}function ui(e,t){let[n,r]=(0,Q.useState)(()=>Date.now());(0,Q.useEffect)(()=>{if(!t)return;r(Date.now());let e=setInterval(()=>r(Date.now()),1e3);return()=>clearInterval(e)},[t]);let i=e?Date.parse(e):NaN;return t&&Number.isFinite(i)?Math.max(0,n-i):null}function di(e,t){it.getState().update(e,`side-chat`,{type:`open`,kind:`side-chat`}),t?.show(`side-chat`)}function fi(e,t){let{t:n,language:r}=o(),i=(0,Q.useContext)(Qe),[a,s]=(0,Q.useState)(!1),[c,l]=(0,Q.useState)(!1),[u,d]=(0,Q.useState)(!1),f=T(e=>e.capabilities.features.sessionExport===!0),p=e.name||n(`navigation:pageHeader.newChat`),{notify:m}=t,h=async()=>{if(!c){l(!0);try{await wn(e.id,{archived:!0}),m(n(`board:action.archived`,{title:p})),i?.onArchived?.(e.id)}catch{m(n(`board:action.failed`),`error`)}finally{l(!1)}}},g=async()=>{if(!u){d(!0);try{let t=await X.exportSessionMarkdown(e.id,r),i=URL.createObjectURL(t),a=document.createElement(`a`);a.href=i,a.download=`${p.replace(/[\\/:*?"<>|\p{Cc}]/gu,`-`).slice(0,80)||`session`}.md`,a.click(),window.setTimeout(()=>URL.revokeObjectURL(i),1e3),m(n(`chat:sessionMenu.exported`,{title:p}))}catch{m(n(`chat:sessionMenu.exportFailed`),`error`)}finally{d(!1)}}},_=typeof t.contextPercent==`number`&&Number.isFinite(t.contextPercent)?Math.round(Math.min(100,Math.max(0,t.contextPercent))):null,v=[{key:`rename`,icon:gt,label:n(`chat:sessionMenu.rename`),onSelect:t.onRename},...t.onSideChat?[{key:`side-chat`,icon:pt,label:n(`board:inspector.sideChat`),onSelect:t.onSideChat,marker:`session-side-chat`}]:[],...f?[{key:`export`,icon:Fr,label:n(`chat:sessionMenu.exportMarkdown`),onSelect:()=>void g(),disabled:u,marker:`session-export`}]:[],{key:`workspace`,icon:lt,label:n(`board:session.moveWorkspace`),onSelect:t.onWorkspace,disabled:t.workspaceDisabled,separator:!0},{key:`compact`,icon:Br,label:n(`chat:sessionMenu.compactContext`),onSelect:()=>t.onCompact?.(),disabled:t.compactDisabled||!t.onCompact,trailing:_===null?void 0:`${_}%`,trailingTitle:_===null?void 0:n(`board:session.contextUsage`,{percent:_})},...t.workflowsAvailable?[{key:`workflows`,icon:Ot,label:n(`chat:sessionMenu.workflowRuns`),onSelect:()=>s(!0)}]:[],{key:`voice`,icon:Ar,label:n(`chat:sessionMenu.voiceMode`),onSelect:t.onVoiceMode},{key:`archive`,icon:N,label:n(`board:card.archive`),onSelect:()=>void h(),disabled:c,separator:!0}];return{entries:v,items:(0,$.jsxs)($.Fragment,{children:[v.map(e=>{let t=e.icon,n=e.marker?{[`data-${e.marker}`]:!0}:{},r=(0,$.jsxs)(Pt,{disabled:e.disabled,onSelect:e.onSelect,...n,children:[(0,$.jsx)(t,{}),e.label,e.trailing&&(0,$.jsx)(Ft,{className:`font-mono tabular-nums`,title:e.trailingTitle,"data-session-context-usage":!0,children:e.trailing})]});return(0,$.jsxs)(Q.Fragment,{children:[e.separator&&(0,$.jsx)(Nt,{}),r]},e.key)}),t.extraItems&&(0,$.jsx)(Nt,{}),t.extraItems]}),dialog:(0,$.jsx)(Wn,{open:a,onOpenChange:s,children:(0,$.jsxs)(Vn,{className:`max-w-lg`,children:[(0,$.jsxs)(Un,{children:[(0,$.jsx)(Hn,{children:n(`board:session.workflowRuns`)}),(0,$.jsx)(Bn,{children:p})]}),a&&(0,$.jsx)(li,{sessionId:e.id,empty:(0,$.jsx)(`p`,{className:`py-6 text-center text-sm text-content-muted`,children:n(`board:session.workflowRunsEmpty`)})})]})})}}var pi=(0,Q.lazy)(()=>t(()=>import(`./SessionInspector-DiSWVd6R.js`).then(e=>({default:e.SessionInspector})),__vite__mapDeps([112,1,3,4,5,2,6,7,8,9,20,21,10,11,12,13,15,14,17,19,22,23,18,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,113]))),mi=[];function hi(e){switch(e){case`changes`:return{tab:`changes`,changesView:`workspace`};case`files`:return{tab:`changes`,changesView:`session`};case`terminal`:case`processes`:return{tab:`terminal`,terminalView:e};case`sources`:return{tab:`files`};case`browser`:return{tab:`preview`};case`plan`:return{tab:`plan`};case`side-chat`:return{tab:`side-chat`};default:return null}}function gi(e){if(!(e instanceof HTMLElement)||e===document.body||e.closest(`[data-inspector-sheet]`))return null;let t=e.closest(`[role="menu"]`);if(!t)return e;let n=t.getAttribute(`aria-labelledby`);return n?document.getElementById(n):null}var _i=`a[href], button:not(:disabled), input:not(:disabled), select:not(:disabled), textarea:not(:disabled), iframe, [tabindex]:not([tabindex="-1"])`;function vi(e){if(e.key!==`Tab`||e.altKey||e.ctrlKey||e.metaKey)return;let t=[...e.currentTarget.querySelectorAll(_i)].filter(e=>e.getClientRects().length>0);if(!t.length)return;let n=t[0],r=t[t.length-1],i=document.activeElement;(e.shiftKey?i===n:i===r)&&(e.preventDefault(),(e.shiftKey?r:n).focus())}function yi(e){let t=e?.items??[];return t.length?{done:t.filter(e=>e.status===`completed`).length,total:t.length}:null}function bi({sessionId:e,messages:t,cwd:n,active:r,plan:i,goal:a=null,team:s=null,activity:c=mi,planTab:l,streaming:u,completed:d,runStartedAt:f,requestConfirm:p,children:m}){let{t:h}=o(),g=(0,Q.useContext)(Qe),_=!!(g?.phone??null),v=_||!!(g?.compact||g?.overlayOnly),[y,b]=(0,Q.useState)(null),[x,S]=(0,Q.useState)(null),C=(0,Q.useMemo)(()=>({headerHost:y,sourceActionHost:x,setSourceActionHost:S}),[y,x]),w=(0,Q.useMemo)(()=>$r(t),[t]),T=j(e=>e.open),E=j(e=>e.pinned),D=j(e=>e.setOpen),O=j(e=>e.width),k=j(e=>e.setWidth),[A,N]=(0,Q.useState)(!1);(0,Q.useEffect)(()=>{v||N(!1)},[v]);let P=v?A:T,F=oi(_&&P),I=_&&F.leaving,L=(0,Q.useRef)(null),R=`session-${e}-inspector`,z=(0,Q.useRef)(null),[B,V]=(0,Q.useState)(0);(0,Q.useLayoutEffect)(()=>{let e=z.current;if(!e)return;let t=()=>V(e.clientWidth);t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let H=M(O,B||O+800),[U,ee]=(0,Q.useState)(0);(0,Q.useLayoutEffect)(()=>{if(!y)return;let e=()=>ee(y.offsetHeight);e();let t=new ResizeObserver(e);return t.observe(y),()=>t.disconnect()},[y]);let te=(0,Q.useRef)(null),[ne,re]=(0,Q.useState)(!1),[ie,ae]=(0,Q.useState)(!1),oe=(0,Q.useCallback)((e,t=!1)=>{if(window.dispatchEvent(new Event(ln)),_&&e){let e=gi(document.activeElement);e&&(L.current=e)}re(e),ae(e&&t),v?N(e):D(e)},[v,D,_]),W=(0,Q.useCallback)((e,t)=>{j.getState().setTab(e),oe(!0,t)},[oe]),ce=(0,Q.useCallback)(e=>W(e,!0),[W]),G=(0,Q.useCallback)(()=>{let e=document.activeElement,t=!!(e&&te.current?.contains(e))||v&&!_&&(!e||e===document.body);oe(!1),t&&requestAnimationFrame(()=>document.querySelector(`[aria-controls="${CSS.escape(R)}"][data-inspector-toggle]`)?.focus())},[v,R,oe,_]),le=(0,Q.useCallback)(()=>P?G():oe(!0,!0),[G,P,oe]),K=(0,Q.useCallback)(t=>{t.preventDefault();let n=L.current;L.current=null,((n?.isConnected?n:null)??document.querySelector(`[data-session-changes][aria-controls="${CSS.escape(R)}"]`)??document.getElementById(`task-${e}-more`))?.focus({preventScroll:!0})},[R,e]),ue=_?`sheet`:v?`overlay`:`aside`,de=(0,Q.useMemo)(()=>({open:P,mode:ue,panelId:R,toggle:le,show:ce}),[P,ue,R,ce,le]),fe=(0,Q.useCallback)(e=>{let t=hi(e);if(!t)return;let n=j.getState();t.terminalView&&n.setTerminalView(t.terminalView),t.changesView&&n.setChangesView(t.changesView),W(t.tab,!1)},[W]);(0,Q.useEffect)(()=>it.subscribe((t,n)=>{let r=t.sessions[e],i=n.sessions[e];if(!r||r===i||!r.contentOpen)return;let a=r.pages.find(e=>e.id===r.activeId);if(!a)return;let o=i?.pages.find(e=>e.id===i.activeId);(r.activeId!==i?.activeId||!i?.contentOpen||a.kind===`browser`&&a.url!==o?.url)&&fe(a.kind)}),[fe,e]),(0,Q.useEffect)(()=>{if(!r)return;let t=t=>{let n=Xr(t.detail);n&&it.getState().update(e,n,{type:`open`,kind:n})};return window.addEventListener(Jr,t),()=>window.removeEventListener(Jr,t)},[r,e]),(0,Q.useEffect)(()=>{if(!r)return;let t=t=>{let n=t.detail;n===`side-chat`?di(e,de):n===`tree`&&z.current?.querySelector(`[data-session-branches]`)?.click()};return window.addEventListener(an,t),()=>window.removeEventListener(an,t)},[r,de,e]),qr({sessionId:e,streaming:u,completed:d,runStartedAt:f,enabled:!v,open:P,onReveal:()=>fe(`files`)});let pe=mn(e=>e.bindings.toggleInspector);(0,Q.useEffect)(()=>{if(!r)return;let e=e=>{!_n(e,pe)||pn(e)||hn(e)&&e.key.length===1||(e.preventDefault(),le())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,pe,le]),Gr(r&&v&&A,100,G),Gr(r&&!v&&T&&!E,100,G);let me=(0,Q.useRef)(()=>{});(0,Q.useEffect)(()=>()=>me.current(),[]);let he=e=>{if(e.button!==0)return;me.current(),e.preventDefault(),e.currentTarget.focus(),e.currentTarget.setPointerCapture(e.pointerId);let t=e.clientX,n=H,r=e=>k(M(n-(e.clientX-t),B)),i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i),window.removeEventListener(`pointercancel`,i)};me.current=i,window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i,{once:!0}),window.addEventListener(`pointercancel`,i,{once:!0})},q=u?yi(i):null,ge=ne&&P&&!v,_e=v&&!_&&P&&B-420>=480?420:0,ve=(P||I)&&(0,$.jsx)(Q.Suspense,{fallback:(0,$.jsx)(`p`,{role:`status`,className:`p-4 text-sm text-content-muted`,children:h(`chat:focusSession.gitLoading`)}),children:(0,$.jsx)(pi,{panelId:R,sessionId:e,cwd:n,streaming:u,plan:i,goal:a,team:s,activity:c,planTab:l,sources:w,mode:ue,requestConfirm:p,onClose:G,onOpenComponents:g?.onOpenComponents,componentTabs:g?.componentTabs,autoFocus:ue===`overlay`&&ie})});return(0,$.jsx)(He.Provider,{value:C,children:(0,$.jsx)(tt.Provider,{value:de,children:(0,$.jsxs)(`div`,{ref:z,id:`task-${e}-workspace`,tabIndex:-1,"data-task-workspace":e,"data-session-workspace":ue,"data-active":r,className:Yt(`relative flex h-full min-h-0 min-w-0 overflow-hidden bg-panel`,_&&`pb-[var(--pisper-safe-area-bottom)] [[data-mobile-keyboard='open']_&]:pb-0`),children:[(0,$.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,"data-session-conversation":!0,children:[(0,$.jsx)(`div`,{ref:b,className:`@container shrink-0`,"data-task-header":!0}),q&&(0,$.jsxs)(`div`,{className:`relative z-10 h-0.5 shrink-0 bg-surface-muted`,"data-plan-progress":!0,children:[(0,$.jsx)(`span`,{role:`progressbar`,"aria-label":h(`board:session.planLabel`,q),"aria-valuemin":0,"aria-valuemax":q.total,"aria-valuenow":q.done,className:`absolute inset-0 origin-left bg-st-run transition-transform duration-(--d-base)`,style:{transform:`scaleX(${q.done/q.total})`}}),l&&(0,$.jsx)(`button`,{type:`button`,className:`absolute top-1.5 right-3 inline-flex h-6 items-center rounded-sm bg-panel px-2 font-mono text-xs text-content-secondary tabular-nums shadow-edge hover:bg-surface-hover hover:text-content focus-visible:outline-2 focus-visible:outline-focus pointer-coarse:h-11`,"aria-label":h(`board:session.planOpen`,{plan:h(`board:session.plan`,q)}),"aria-controls":R,"data-plan-progress-open":!0,onClick:()=>ce(`plan`),children:h(`board:session.plan`,q)})]}),(0,$.jsx)(`div`,{className:Yt(`min-h-0 min-w-0 flex-1 overflow-hidden`,ge&&`animate-in duration-[220ms] ease-(--ease)`),"data-overlay-inset":_e||void 0,style:_e?{paddingRight:_e}:ge?{"--tw-enter-translate-x":`${H/2}px`}:void 0,children:m})]}),!v&&P&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{role:`separator`,tabIndex:0,"aria-orientation":`vertical`,"aria-label":h(`chat:sessionContext.resize`),title:h(`chat:sessionContext.resizeHint`),"aria-controls":R,"aria-valuemin":360,"aria-valuemax":M(1/0,B),"aria-valuenow":H,onPointerDown:he,onDoubleClick:()=>k(456),onKeyDown:e=>{if(![`ArrowLeft`,`ArrowRight`,`Enter`].includes(e.key))return;if(e.preventDefault(),e.key===`Enter`){k(456);return}let t=e.shiftKey?64:16;k(M(H+(e.key===`ArrowLeft`?t:-t),B))},className:`relative -mr-1 w-2 shrink-0 cursor-col-resize touch-none select-none outline-none after:absolute after:inset-y-0 after:left-1/2 after:w-px after:bg-stroke-soft after:transition-colors after:duration-(--d-fast) hover:after:w-[3px] hover:after:-translate-x-px hover:after:bg-focus focus-visible:after:w-[3px] focus-visible:after:bg-focus`}),(0,$.jsxs)(`aside`,{ref:te,className:Yt(`flex h-full min-h-0 shrink-0 flex-col overflow-hidden border-l border-stroke-soft`,ne&&`animate-in slide-in-from-right duration-[220ms] ease-(--ease)`),style:{width:H},"data-inspector-aside":!0,"data-inspector-pinned":E||void 0,children:[(0,$.jsx)(`div`,{"aria-hidden":`true`,"data-window-drag-region":!0,"data-inspector-titlebar-gap":!0,className:`hidden h-[52px] shrink-0 [[data-custom-titlebar]_&]:block`}),(0,$.jsx)(`div`,{className:`min-h-0 flex-1`,children:ve})]})]}),v&&(P||I)&&(0,$.jsx)($.Fragment,{children:_?(0,$.jsx)(Cn,{open:P,onOpenChange:e=>!e&&G(),children:(0,$.jsxs)(bn,{side:`bottom`,showCloseButton:!1,"data-inspector-sheet":!0,"data-sheet-leaving":I||void 0,onAnimationEnd:e=>{e.target===e.currentTarget&&!P&&F.finish()},onCloseAutoFocus:K,className:`gap-0 data-[side=bottom]:h-[min(86dvh,calc(100dvh-var(--pisper-safe-area-top)-48px))] overflow-hidden rounded-t-(--r-sheet) bg-panel p-0 pb-[var(--pisper-safe-area-bottom)]`,children:[(0,$.jsx)(xn,{className:`sr-only`,children:h(`board:inspector.label`)}),(0,$.jsx)(Sn,{className:`sr-only`,children:h(`board:phone.inspectorDescription`)}),(0,$.jsx)(se,{onDismiss:G}),(0,$.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col [&_[data-slot=segmented-control]]:h-11 [&_[data-slot=segmented-control-item]]:h-10 [&_[data-slot=segmented-control-item]]:px-3`,children:ve})]})}):(0,$.jsx)(`aside`,{ref:te,"data-inspector-overlay":!0,onKeyDown:vi,className:Yt(`absolute right-0 bottom-0 z-30 max-w-[calc(100%-24px)] overflow-hidden border-l border-stroke bg-panel shadow-float`,`animate-in slide-in-from-right duration-[220ms] ease-(--ease)`),style:{width:420,top:U},children:ve})})]})})})}var xi=e(i(),1),Si=(0,Q.createContext)(null),Ci=(0,Q.lazy)(()=>t(()=>import(`./public-session-Bx2TqcKh.js`),__vite__mapDeps([114,1,2,3,4,5,6,7,8,9,115,15,30,29,31,28,116,89,117,74,21,75,12,13,118,10,11,32,107])));function wi({session:e,cwd:t,streaming:n,treeAvailable:r,branches:i,onOpenTree:a,...s}){let{t:c,language:l}=o(),u=(0,Q.useContext)(tt),d=fi(e,{...s,onSideChat:()=>di(e.id,u)}),f=e.name||c(`navigation:pageHeader.newChat`),m=kn(e.projectless?``:t,l),h=p({queryKey:[`session-change-summary`,e.id,n],queryFn:()=>Xn(e.id),staleTime:1e4}),g=h.data?.status===`known`?h.data:null,_=g?.changedFiles??0,v=mn(e=>e.bindings.toggleInspector),y=mn(e=>e.bindings.sessionTree),b=yn(v),x=yn(y),S=_>0?c(`board:session.changes`,{count:_,added:g?.added??0,removed:g?.removed??0}):null,C=S?`${c(`board:inspector.label`)} · ${S}`:c(`board:inspector.label`),w=b?c(`board:session.withShortcut`,{label:C,shortcut:b}):C,T=i>0?c(`board:session.treeBranches`,{count:i}):c(`board:session.tree`),E=x?c(`board:session.withShortcut`,{label:T,shortcut:x}):T;return(0,$.jsxs)(`header`,{"data-session-header":!0,"data-focus-region":`header`,"data-window-drag-region":!0,className:`flex h-[52px] min-w-0 shrink-0 items-center gap-2 pr-3 pl-4 [[data-custom-titlebar]_&]:pr-[144px]`,children:[(0,$.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-1.5`,"data-window-drag-region":!0,children:[e.botId&&(0,$.jsx)(Q.Suspense,{fallback:null,children:(0,$.jsx)(Ci,{botId:e.botId,part:`avatar`})}),(0,$.jsxs)(Rt,{children:[(0,$.jsx)(It,{asChild:!0,children:(0,$.jsxs)(`button`,{type:`button`,id:`task-${e.id}-more`,"data-session-menu":!0,className:Yt(`group inline-flex h-8 min-w-0 shrink items-center gap-1 rounded-sm px-2 text-[15px] leading-6 font-medium text-content hover:bg-surface-hover focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus data-[state=open]:bg-surface-hover pointer-coarse:h-11`,Wt),"aria-label":c(`board:session.titleMenu`,{title:f}),children:[(0,$.jsx)(`span`,{className:`truncate`,"data-session-title":!0,children:f}),(0,$.jsx)(U,{className:`size-3.5 flex-none text-content-muted`,"aria-hidden":`true`})]})}),(0,$.jsx)(Lt,{align:`start`,className:`min-w-60`,children:d.items})]}),(0,$.jsx)(`span`,{className:`min-w-0 max-w-[160px] flex-none truncate font-mono text-xs text-content-muted @max-[560px]:hidden`,title:t,"data-session-project":!0,children:m}),e.botId&&(0,$.jsx)(Q.Suspense,{fallback:null,children:(0,$.jsx)(Ci,{botId:e.botId,part:`settings`})}),r&&(0,$.jsxs)(Y,{type:`button`,variant:`ghost`,className:Yt(`h-7 min-w-7 flex-none gap-1 px-1.5 font-mono text-xs font-normal text-content-muted tabular-nums hover:text-content pointer-coarse:h-11 pointer-coarse:min-w-11`),"aria-haspopup":`dialog`,"aria-label":E,title:E,"aria-keyshortcuts":ar(y),"data-session-branches":i,onClick:e=>a(`branches`,e.currentTarget),children:[(0,$.jsx)(ct,{className:`size-3.5`,"aria-hidden":`true`}),i>0&&(0,$.jsx)(`span`,{"aria-hidden":`true`,children:i})]})]}),u&&(0,$.jsx)(Y,{type:`button`,variant:`ghost`,className:Yt(`h-8 flex-none gap-1.5 px-2 text-[13px] font-normal text-content-secondary hover:text-content pointer-coarse:h-11`,S?``:`w-8 px-0 pointer-coarse:w-11`,u.open&&`bg-surface-hover text-content ring-1 ring-stroke ring-inset`),"data-inspector-toggle":!0,"data-session-changes":_,"aria-controls":u.panelId,"aria-expanded":u.open,"aria-label":w,title:w,"aria-keyshortcuts":ar(v),onClick:u.toggle,children:S&&g?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Ee,{className:`size-3.5`,"aria-hidden":`true`}),(0,$.jsx)(`span`,{"aria-hidden":`true`,children:c(`board:session.changedFiles`,{count:_})}),(0,$.jsxs)(`span`,{className:`font-mono text-xs text-success tabular-nums`,"aria-hidden":`true`,children:[`+`,g.added??0]}),(0,$.jsxs)(`span`,{className:`font-mono text-xs text-danger tabular-nums`,"aria-hidden":`true`,children:[`−`,g.removed??0]})]}):(0,$.jsx)(mt,{"aria-hidden":`true`})}),d.dialog]})}var Ti=`outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus`,Ei={1:`grid-cols-1`,2:`grid-cols-2`,3:`grid-cols-3`};function Di({count:e,children:t}){return(0,$.jsx)(`div`,{className:Yt(`grid gap-2 px-1 pb-2`,Ei[e]??`grid-cols-3`),children:t})}function Oi({icon:e,label:t,className:n,...r}){return(0,$.jsxs)(`button`,{type:`button`,className:Yt(`flex h-[68px] min-w-0 cursor-pointer flex-col items-center justify-center gap-1.5 rounded-[var(--r-md)] bg-surface-muted px-1 text-[13px] text-content active:bg-surface-hover disabled:cursor-default disabled:text-content-faint`,Ti,n),...r,children:[(0,$.jsx)(e,{className:`size-5 text-content-secondary`,strokeWidth:1.75,"aria-hidden":`true`}),(0,$.jsx)(`span`,{className:`max-w-full truncate`,children:t})]})}function ki({icon:e,label:t,hint:n,trailing:r,className:i,...a}){return(0,$.jsxs)(`button`,{type:`button`,className:Yt(`flex min-h-11 w-full min-w-0 cursor-pointer items-center gap-3 rounded-[var(--r-md)] px-3 text-left text-[15px] text-content active:bg-surface-hover disabled:cursor-default disabled:text-content-faint`,Ti,i),...a,children:[(0,$.jsx)(e,{className:`size-[18px] flex-none text-content-secondary`,strokeWidth:1.75,"aria-hidden":`true`}),(0,$.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,$.jsx)(`span`,{className:`truncate`,children:t}),n&&(0,$.jsx)(`span`,{className:`truncate text-xs text-content-muted`,children:n})]}),r]})}var Ai=`relative grid size-11 flex-none place-items-center rounded-full bg-surface-muted text-content focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus active:bg-surface-hover dark:bg-surface-active`;function ji({leading:e,session:t,cwd:n,streaming:r,runStartedAt:i,approvals:a,failed:s,stopped:c,treeAvailable:l,branches:u,onOpenTree:d,...f}){let{t:m,language:h}=o(),g=(0,Q.useContext)(tt),_=(0,Q.useContext)(Qe),v=ui(i,r),y=fi(t,f),[b,x]=(0,Q.useState)(!1),S=(0,Q.useId)(),C=t.name||m(`navigation:pageHeader.newChat`),w=kn(t.projectless?``:n,h),T=p({queryKey:[`session-change-summary`,t.id,r],queryFn:()=>Xn(t.id),staleTime:1e4}),E=T.data?.status===`known`?T.data.changedFiles??0:0,D=a>0?{kind:`approval`,label:m(`board:status.approval`)}:r?{kind:`running`,label:v===null?m(`board:status.running`):m(`board:phone.running`,{elapsed:jn(v)})}:s?{kind:`failed`,label:m(`board:status.failed`)}:c?{kind:`stopped`,label:m(`board:status.stopped`)}:null,O=()=>g?.show(`changes`),k=[...l?[{key:`tree`,icon:ct,label:u>0?m(`board:session.treeBranches`,{count:u}):m(`board:session.tree`),shortLabel:m(`board:session.tree`),onSelect:()=>d(`branches`),marker:`session-tree`}]:[],{key:`side-chat`,icon:pt,label:m(`board:inspector.sideChat`),onSelect:()=>di(t.id,g),marker:`session-side-chat`},...g?[{key:`inspector`,icon:Ee,label:m(`board:phone.openInspector`),shortLabel:m(`board:phone.openInspectorShort`),onSelect:O,marker:`inspector-toggle`}]:[]];return(0,$.jsxs)(`header`,{"data-session-header":`phone`,className:`grid h-14 min-w-0 shrink-0 grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center bg-panel px-3`,children:[(0,$.jsx)(`div`,{className:`flex min-w-0 items-center`,children:e}),(0,$.jsxs)(`button`,{type:`button`,"data-session-menu-trigger":!0,"aria-haspopup":`dialog`,"aria-expanded":b,"aria-controls":b?S:void 0,"aria-label":m(`board:session.titleMenu`,{title:C}),className:`flex h-11 max-w-[min(58vw,260px)] min-w-0 flex-col items-center justify-center rounded-[var(--r-md)] px-2 outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus active:bg-surface-hover`,onClick:()=>x(!0),children:[(0,$.jsxs)(`span`,{className:`flex max-w-full min-w-0 items-center gap-0.5 text-base leading-5 font-semibold text-content`,children:[(0,$.jsx)(`span`,{className:`truncate`,"data-session-title":!0,children:C}),(0,$.jsx)(U,{className:`size-4 flex-none text-content-muted`,"aria-hidden":`true`})]}),(0,$.jsxs)(`span`,{className:`flex max-w-full min-w-0 items-center gap-1 text-xs leading-4 text-content-muted`,children:[(0,$.jsx)(`span`,{className:`min-w-0 truncate font-mono`,title:n,"data-session-project":!0,children:w}),D&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,$.jsxs)(`span`,{className:Yt(`flex flex-none items-center gap-1`,(D.kind===`approval`||D.kind===`failed`)&&`font-medium text-warning-strong`),"data-session-status":D.kind,children:[(0,$.jsx)(Mn,{status:D.kind===`running`?`run`:D.kind===`stopped`?`stopped`:`attention`,className:`size-3`}),(0,$.jsx)(`span`,{className:`tabular-nums`,children:D.label})]})]})]})]}),(0,$.jsx)(`div`,{className:`flex min-w-0 items-center justify-end`,children:E>0&&g?(0,$.jsxs)(`button`,{type:`button`,"data-session-changes":E,"aria-haspopup":`dialog`,"aria-controls":g.panelId,"aria-label":m(`board:phone.changesLabel`,{count:E}),className:Ai,onClick:O,children:[(0,$.jsx)(Ee,{className:`size-5`,strokeWidth:1.75,"aria-hidden":`true`}),(0,$.jsx)(`span`,{"aria-hidden":`true`,className:`absolute top-1.5 right-1 grid h-4 min-w-4 place-items-center rounded-full bg-content px-1 text-[10px] leading-none font-semibold text-panel tabular-nums`,children:E>99?`99+`:E})]}):_?.phone?(0,$.jsx)(`button`,{type:`button`,"data-phone-new-task":!0,"aria-label":m(`navigation:shell.newTask`),className:Ai,onClick:_.phone.onNewTask,children:(0,$.jsx)(Ct,{className:`size-5`,strokeWidth:1.75,"aria-hidden":`true`})}):null}),(0,$.jsx)(Cn,{open:b,onOpenChange:x,children:(0,$.jsxs)(bn,{id:S,side:`bottom`,showCloseButton:!1,"data-session-menu-sheet":!0,className:`max-h-[85dvh] gap-0 rounded-t-(--r-sheet) px-2 pt-1 pb-[calc(8px+var(--pisper-safe-area-bottom))]`,children:[(0,$.jsx)(se,{onDismiss:()=>x(!1)}),(0,$.jsx)(xn,{className:`truncate px-3 pt-1 pb-0.5 text-base font-semibold`,children:C}),(0,$.jsx)(Sn,{className:`truncate px-3 pb-2 font-mono text-xs text-content-muted`,children:w}),(0,$.jsx)(Di,{count:k.length,children:k.map(e=>{let t=e.marker?{[`data-${e.marker}`]:!0}:{};return(0,$.jsx)(Oi,{icon:e.icon,label:e.shortLabel||e.label,"aria-label":e.label,onClick:()=>{x(!1),e.onSelect()},...t},e.key)})}),(0,$.jsx)(`div`,{className:`min-h-0 overflow-y-auto`,role:`list`,children:y.entries.map(e=>{let t=e.marker?{[`data-${e.marker}`]:!0}:{};return(0,$.jsxs)(`div`,{role:`listitem`,children:[e.separator&&(0,$.jsx)(`div`,{"aria-hidden":`true`,className:`mx-3 my-1 h-px bg-stroke-soft`}),(0,$.jsx)(ki,{icon:e.icon,label:e.label,disabled:e.disabled,trailing:e.trailing&&(0,$.jsx)(`span`,{className:`flex-none font-mono text-sm text-content-muted tabular-nums`,title:e.trailingTitle,"data-session-context-usage":!0,children:e.trailing}),onClick:()=>{x(!1),e.onSelect()},...t})]},e.key)})})]})}),y.dialog]})}function Mi({cwd:e,selection:t}){let{t:n}=o(),r=D(),i=(0,Q.useRef)(null);return{input:(0,$.jsx)(`input`,{ref:i,type:`file`,className:`hidden`,accept:xe,multiple:!0,"aria-label":n(`chat:focusSession.addAttachment`),onChange:e=>{let n=[...e.currentTarget.files||[]];e.currentTarget.value=``,n.length&&t.addFiles(n)}}),choose:async()=>{if(r){i.current?.click();return}if(window.pisperDesktop?.pickFiles){try{let n=await window.pisperDesktop.pickFiles(e);t.addAttachments(ce(n||[]))}catch(e){t.setError(e)}return}i.current?.click()}}}function Ni({cwd:e,selection:t}){let{t:n}=o(),{input:r,choose:i}=Mi({cwd:e,selection:t});return(0,$.jsxs)($.Fragment,{children:[r,(0,$.jsxs)(`button`,{type:`button`,className:`relative grid size-[30px] min-w-[30px] flex-none cursor-pointer place-items-center rounded-sm border-0 bg-transparent text-content-muted transition-colors hover:bg-surface-hover hover:text-content disabled:cursor-not-allowed disabled:opacity-50 max-[650px]:size-11 max-[650px]:min-w-11 pointer-coarse:size-11 pointer-coarse:min-w-11`,title:n(`chat:focusSession.addAttachment`),"aria-label":n(`chat:focusSession.addAttachment`),onClick:()=>void i(),children:[(0,$.jsx)(ht,{size:16}),t.attachments.length>0&&(0,$.jsx)(`span`,{className:`absolute -top-1 -right-1 grid h-4 min-w-4 place-items-center rounded-full border-2 border-panel bg-star px-0.5 text-[10px] leading-none font-medium text-on-accent tabular-nums`,children:t.attachments.length})]})]})}function Pi({attachments:e,preparing:t=[],onRemove:n,compact:r=!1}){let{t:i}=o();return!e.length&&!t.length?null:(0,$.jsxs)(`div`,{className:`attachment-tray [&.compact]:max-h-[58px] flex max-h-[116px] flex-wrap gap-[6px] overflow-auto ${r?`compact`:``}`,children:[t.map(e=>(0,$.jsxs)(`div`,{className:`flex min-h-[42px] max-w-64 items-center gap-2 rounded-sm border border-stroke bg-surface-subtle pr-1 pl-2.5`,"aria-busy":`true`,children:[(0,$.jsx)(Xt,{className:`size-3.5`}),(0,$.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-mono text-xs text-content`,children:e.name}),(0,$.jsx)(`span`,{className:`sr-only`,children:i(`chat:focusSession.preparingAttachments`)}),(0,$.jsx)(`button`,{type:`button`,className:`grid size-8 shrink-0 cursor-pointer place-items-center rounded-sm text-content-muted hover:bg-danger-soft hover:text-danger max-[650px]:size-11`,"aria-label":i(`chat:focusSession.removeName`,{name:e.name}),onClick:()=>n(e.id),children:(0,$.jsx)(At,{size:14})})]},e.id)),e.map(e=>(0,$.jsxs)(`div`,{className:`attachment-chip grid min-h-[42px] min-w-[150px] max-w-[250px] grid-cols-[30px_minmax(0,1fr)_auto] items-center gap-2 rounded-sm border border-stroke bg-surface-subtle p-1.5 pr-1 [&_>_button]:grid [&_>_button]:size-7 [&_>_button]:cursor-pointer [&_>_button]:place-items-center [&_>_button]:rounded-xs [&_>_button]:text-content-muted [&_>_button:hover]:bg-danger-soft [&_>_button:hover]:text-danger max-[650px]:[&_>_button]:size-11 [&_>_img]:size-[30px] [&_>_img]:rounded-xs [&_>_img]:object-cover [&_>_span:nth-child(2)]:flex [&_>_span:nth-child(2)]:min-w-0 [&_>_span:nth-child(2)]:flex-col [&_small]:text-xs [&_small]:text-content-muted [&_small]:tabular-nums [&_strong]:truncate [&_strong]:font-mono [&_strong]:text-xs [&_strong]:font-medium [&_strong]:text-content`,children:[e.kind===`image`?(0,$.jsx)(`img`,{src:`data:${e.mimeType};base64,${e.data}`,alt:``}):(0,$.jsx)(`span`,{className:`grid size-[30px] place-items-center rounded-xs border border-key-border bg-key text-content-muted`,children:(0,$.jsx)(De,{size:13})}),(0,$.jsxs)(`span`,{children:[(0,$.jsx)(`strong`,{children:e.name}),(0,$.jsxs)(`small`,{children:[e.kind===`path`?i(`chat:focusSession.localPath`):e.kind===`image`?i(`chat:focusSession.image`):e.kind===`document`?i(`chat:focusSession.document`):i(`chat:focusSession.text`),e.kind===`path`?``:` · ${On(e.size)}`,e.truncated?` · ${i(`chat:focusSession.truncated`)}`:``]})]}),(0,$.jsx)(`button`,{type:`button`,"aria-label":i(`chat:focusSession.removeName`,{name:e.name}),onClick:()=>n(String(e.id||``)),children:(0,$.jsx)(At,{size:12})})]},e.id))]})}function Fi({open:e,sessionId:t,cwd:n=``,onClose:r,onSelect:i,onCommandSelect:a}){let{t:s}=o(),c=T(e=>e.capabilities),l=w(c,`workflows`),[u,d]=(0,Q.useState)([]),[f,p]=(0,Q.useState)(`all`),[m,h]=(0,Q.useState)(``),[g,_]=(0,Q.useState)(null),[v,y]=(0,Q.useState)({}),[b,x]=(0,Q.useState)(!1),[C,E]=(0,Q.useState)(``);(0,Q.useEffect)(()=>{if(!e)return;let r=!0;return p(`all`),h(``),_(null),y({}),x(!0),E(``),Promise.all([t?X.getSessionCommands(t):X.getWorkspaceCommands(n),l?S(`/api/workflows`):Promise.resolve({workflows:[]}),S(`/api/plugins?sessionId=${encodeURIComponent(t)}`)]).then(([e,t,n])=>{if(!r)return;let i=new Set(n.callableToolNames||[]);d([...(e.commands||[]).map(e=>({kind:e.source,id:e.name,name:e.name,description:e.description||``,inputs:[],argumentHint:e.argumentHint,invocation:e.invocation})),...(t.workflows||[]).filter(e=>e.status===`published`).map(e=>({kind:`workflow`,id:e.id,name:e.name,description:e.description||``,inputs:e.inputs||[]})),...(n.plugins||[]).flatMap(e=>(e.capabilities||[]).filter(e=>i.has(e.name)).map(t=>({kind:`tool`,id:t.name,name:t.id?lr(t,s):String(t.label||t.name),description:t.id?ur(t,s):t.description,inputs:[],sourceName:e.name})))])}).catch(e=>{r&&(d([]),E(e instanceof Error?e.message:String(e)))}).finally(()=>r&&x(!1)),()=>{r=!1}},[n,e,t,s,l]);let D=(0,Q.useMemo)(()=>({all:u.length,prompt:u.filter(e=>e.kind===`prompt`).length,skill:u.filter(e=>e.kind===`skill`).length,tool:u.filter(e=>e.kind===`tool`).length,workflow:u.filter(e=>e.kind===`workflow`).length}),[u]),O=(0,Q.useMemo)(()=>{let e=m.trim().toLowerCase();return u.filter(t=>(f===`all`||t.kind===f)&&(!e||`${t.name} ${t.id} ${t.description} ${t.kind===`tool`?t.sourceName:``}`.toLowerCase().includes(e)))},[f,m,u]),k=e=>{let t=e;p(t),g&&t!==`all`&&g.kind!==t&&_(null)},A=e=>{_(e),y(Object.fromEntries(e.inputs.map(e=>[e.name,e.defaultValue??``])))};return(0,$.jsx)(Wn,{open:e,onOpenChange:e=>!e&&r(),children:(0,$.jsxs)(Vn,{className:`chat-resource-dialog w-[min(820px,calc(100vw_-_32px))] h-[min(600px,calc(100dvh_-_32px))] max-w-[820px] sm:max-w-[820px] grid-rows-[auto_minmax(0,1fr)] overflow-hidden max-[650px]:w-[calc(100vw_-_16px)] max-[650px]:h-[calc(100dvh_-_16px)] z-[220] gap-0 p-0 ring-0`,overlayClassName:`z-[220]`,showCloseButton:!1,children:[(0,$.jsxs)(`div`,{className:`chat-resource-head flex items-start justify-between gap-4 border-b border-stroke-soft px-[18px] pt-4 pb-3.5 max-[650px]:p-3.5 [&_[data-slot='dialog-description']]:mt-0.5 [&_[data-slot='dialog-description']]:text-xs [&_[data-slot='dialog-description']]:text-content-muted [&_[data-slot='dialog-title']]:text-base [&_[data-slot='dialog-title']]:font-semibold`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(Hn,{children:s(`chat:resourcePicker.title`)}),(0,$.jsx)(Bn,{children:s(`chat:resourcePicker.description`)})]}),(0,$.jsx)(Y,{size:`icon-sm`,variant:`ghost`,"aria-label":s(`chat:resourcePicker.close`),onClick:r,children:(0,$.jsx)(At,{})})]}),(0,$.jsxs)(`div`,{className:`chat-resource-body grid min-h-0 grid-cols-[minmax(0,1.1fr)_minmax(260px,.9fr)] overflow-hidden max-[650px]:grid-cols-[1fr] max-[650px]:grid-rows-[minmax(0,1fr)_minmax(190px,auto)] max-[650px]:overflow-hidden`,children:[(0,$.jsxs)(`div`,{className:`chat-resource-browser flex min-h-0 min-w-0 flex-col border-r border-stroke-soft p-3 max-[650px]:min-h-0 max-[650px]:border-r-0 max-[650px]:border-b`,children:[(0,$.jsx)(Ut,{value:f,onValueChange:k,className:`chat-resource-tabs w-full [&_[data-slot='tabs-list']]:grid [&_[data-slot='tabs-list']]:h-9 [&_[data-slot='tabs-list']]:w-full [&_[data-slot='tabs-list']]:rounded-sm [&_[data-slot='tabs-list']]:border [&_[data-slot='tabs-list']]:border-stroke [&_[data-slot='tabs-list']]:bg-surface-muted [&_[data-slot='tabs-list']]:p-0.5 [&_[data-slot='tabs-trigger']]:min-w-0 [&_[data-slot='tabs-trigger']]:gap-1 [&_[data-slot='tabs-trigger']]:rounded-xs [&_[data-slot='tabs-trigger']]:px-1.5 [&_[data-slot='tabs-trigger']]:text-xs [&_[data-slot='tabs-trigger']]:text-content-secondary [&_[data-slot='tabs-trigger'][data-state='active']]:bg-key [&_[data-slot='tabs-trigger'][data-state='active']]:text-content [&_[data-slot='tabs-trigger'][data-state='active']]:shadow-key [&_[data-slot='tabs-trigger']_small]:text-xs [&_[data-slot='tabs-trigger']_small]:font-normal [&_[data-slot='tabs-trigger']_small]:text-content-muted [&_[data-slot='tabs-trigger']_small]:tabular-nums ${l?`[&_[data-slot='tabs-list']]:grid-cols-[repeat(5,minmax(0,1fr))]`:`[&_[data-slot='tabs-list']]:grid-cols-[repeat(4,minmax(0,1fr))]`}`,children:(0,$.jsxs)(Ht,{"aria-label":s(`chat:resourcePicker.categories`),children:[(0,$.jsxs)(Vt,{value:`all`,children:[s(`chat:resourcePicker.all`),(0,$.jsx)(`small`,{children:D.all})]}),(0,$.jsxs)(Vt,{value:`prompt`,children:[s(`chat:resourcePicker.prompt`),(0,$.jsx)(`small`,{children:D.prompt})]}),(0,$.jsxs)(Vt,{value:`skill`,children:[s(`chat:resourcePicker.skill`),(0,$.jsx)(`small`,{children:D.skill})]}),(0,$.jsxs)(Vt,{value:`tool`,children:[s(`chat:resourcePicker.tool`),(0,$.jsx)(`small`,{children:D.tool})]}),l&&(0,$.jsxs)(Vt,{value:`workflow`,children:[s(`chat:resourcePicker.workflow`),(0,$.jsx)(`small`,{children:D.workflow})]})]})}),(0,$.jsxs)(Jn,{className:`chat-resource-search mt-2`,children:[(0,$.jsx)(qn,{children:(0,$.jsx)(bt,{"aria-hidden":`true`})}),(0,$.jsx)(Kn,{autoFocus:!0,value:m,"aria-label":s(`chat:resourcePicker.search`),onChange:e=>h(e.target.value),placeholder:s(`chat:resourcePicker.search`)})]}),(0,$.jsxs)(`div`,{className:`chat-resource-list mt-2 flex min-h-0 [flex:1_1_0] flex-col gap-px overflow-y-auto [overscroll-behavior:contain] [scrollbar-gutter:stable] [touch-action:pan-y] [&_>_button]:relative [&_>_button]:grid [&_>_button]:w-full [&_>_button]:cursor-pointer [&_>_button]:grid-cols-[28px_minmax(0,1fr)_auto] [&_>_button]:items-center [&_>_button]:gap-2 [&_>_button]:rounded-sm [&_>_button]:px-2 [&_>_button]:py-1.5 [&_>_button]:text-left [&_>_button]:text-content [&_>_button:hover]:bg-surface-hover [&_>_button.active]:bg-surface-hover [&_>_button.active]:before:absolute [&_>_button.active]:before:inset-y-1.5 [&_>_button.active]:before:left-0 [&_>_button.active]:before:w-[3px] [&_>_button.active]:before:rounded-full [&_>_button.active]:before:bg-star max-[650px]:[&_>_button]:min-h-11 [&_button_>_span:nth-child(2)]:flex [&_button_>_span:nth-child(2)]:min-w-0 [&_button_>_span:nth-child(2)]:flex-col [&_strong]:truncate [&_strong]:text-[13px] [&_strong]:font-medium [&_small]:truncate [&_small]:text-xs [&_small]:text-content-muted [&_em]:text-xs [&_em]:whitespace-nowrap [&_em]:text-content-muted [&_em]:not-italic [&_>_p]:m-auto [&_>_p]:text-xs [&_>_p]:text-content-muted`,children:[O.map(e=>{let t=e.kind===`prompt`?ae:e.kind===`skill`?V:e.kind===`tool`?kt:Ot;return(0,$.jsxs)(`button`,{type:`button`,className:g?.kind===e.kind&&g.id===e.id?`active`:``,onClick:()=>A(e),children:[(0,$.jsx)(`span`,{className:`list-icon grid size-7 place-items-center rounded-sm bg-surface-muted text-content-secondary`,children:(0,$.jsx)(t,{size:15})}),(0,$.jsxs)(`span`,{children:[(0,$.jsx)(`strong`,{children:e.name}),(0,$.jsx)(`small`,{children:e.description})]}),(0,$.jsx)(`em`,{children:e.kind===`prompt`?s(`chat:resourcePicker.prompt`):e.kind===`skill`?`Skill`:e.kind===`tool`?s(`chat:resourcePicker.tool`):s(`chat:resourcePicker.workflow`)})]},`${e.kind}:${e.id}`)}),!O.length&&(0,$.jsx)(`p`,{children:b?s(`chat:resourcePicker.loading`):C||s(`chat:resourcePicker.empty`)})]})]}),(0,$.jsx)(`div`,{className:`chat-resource-config flex min-h-0 min-w-0 flex-col gap-4 overflow-y-auto overscroll-contain p-[18px] max-[650px]:max-h-[230px] max-[650px]:min-h-0 [&_>_div:first-child]:flex [&_>_div:first-child]:flex-col [&_>_div:first-child]:gap-1 [&_>_p]:m-auto [&_>_p]:text-xs [&_>_p]:text-content-muted [&_p]:text-xs [&_p]:text-content-muted [&_strong]:text-[15px] [&_strong]:font-medium`,children:g?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`strong`,{children:g.name}),(0,$.jsx)(`p`,{children:g.description||s(`chat:resourcePicker.noDescription`)})]}),g.kind===`workflow`&&g.inputs.length>0&&(0,$.jsx)(`div`,{className:`chat-resource-inputs flex flex-col gap-3 [&_label]:grid [&_label]:gap-1.5 [&_label]:text-xs [&_label]:font-medium [&_label]:text-content-secondary`,children:g.inputs.map(e=>(0,$.jsxs)(`label`,{children:[(0,$.jsxs)(`span`,{children:[e.label,e.required?` *`:``]}),e.type===`boolean`?(0,$.jsx)(Mt,{checked:!!v[e.name],onCheckedChange:t=>y(n=>({...n,[e.name]:t===!0}))}):(0,$.jsx)(Gn,{type:e.type===`number`?`number`:`text`,required:e.required,value:String(v[e.name]??``),onChange:t=>y(n=>({...n,[e.name]:t.target.value}))})]},e.id))}),g.kind===`prompt`&&g.argumentHint&&(0,$.jsx)(`code`,{className:`w-fit max-w-full rounded-xs bg-inline-code px-1.5 py-1 font-mono text-xs [overflow-wrap:anywhere] text-content-secondary`,children:g.argumentHint}),(0,$.jsx)(Y,{className:`chat-resource-confirm min-h-8 min-w-[112px] self-start bg-star text-[var(--on-accent)] hover:bg-star-hover max-[650px]:min-h-11`,onClick:()=>{if(g){if(g.kind===`prompt`){a(g.invocation||`/${g.name}`),r();return}i({kind:g.kind,resourceId:g.id,resourceName:g.name,arguments:g.kind===`workflow`?v:void 0,behavior:g.kind===`workflow`?`background`:`foreground`}),r()}},children:g.kind===`prompt`?s(`chat:resourcePicker.insertPrompt`):s(`chat:resourcePicker.useResource`)})]}):(0,$.jsx)(`p`,{children:s(`chat:resourcePicker.chooseResource`)})})]})]})})}function Ii(e){let t=e.getHours();return t>=5&&t<11?`morning`:t>=11&&t<13?`noon`:t>=13&&t<18?`afternoon`:t>=18&&t<23?`evening`:`lateNight`}function Li(e){let t=new Date(e);return t.setHours(e.getHours()+1,0,0,0),Math.max(1e3,t.getTime()-e.getTime())}function Ri(){let{t:e}=o(),[t,n]=(0,Q.useState)(()=>new Date);(0,Q.useEffect)(()=>{let e=window.setTimeout(()=>n(new Date),Li(t));return()=>window.clearTimeout(e)},[t]);let r=Ii(t),i=e(r===`morning`?`chat:newTask.greetingMorning`:r===`noon`?`chat:newTask.greetingNoon`:r===`afternoon`?`chat:newTask.greetingAfternoon`:r===`evening`?`chat:newTask.greetingEvening`:`chat:newTask.greetingLateNight`);return(0,$.jsxs)(`div`,{className:`grid min-h-full content-center justify-items-center gap-2 text-center max-[650px]:gap-3`,"data-new-task-greeting":!0,children:[(0,$.jsx)(dr,{size:32}),(0,$.jsx)(`h2`,{className:`text-2xl! font-semibold tracking-[-.01em] text-balance text-content max-[650px]:text-xl!`,children:i}),(0,$.jsx)(`p`,{className:`max-w-[46ch] text-sm leading-6 text-content-muted max-[650px]:hidden`,children:e(`board:home.draftHint`)})]})}function zi({phone:e,leading:t,project:n}){let{t:r}=o();return e?(0,$.jsxs)(`header`,{"data-session-header":`draft`,"data-focus-region":`header`,className:`grid h-14 min-w-0 shrink-0 grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center bg-panel px-3`,children:[(0,$.jsx)(`div`,{className:`flex min-w-0 items-center`,children:t}),(0,$.jsxs)(`div`,{className:`flex max-w-[min(58vw,260px)] min-w-0 flex-col items-center justify-center`,children:[(0,$.jsx)(`h1`,{className:`max-w-full truncate px-1.5 text-base leading-5 font-semibold text-content`,children:r(`board:home.draftTitle`)}),n]}),(0,$.jsx)(`span`,{"aria-hidden":`true`})]}):(0,$.jsxs)(`header`,{"data-session-header":`draft`,"data-focus-region":`header`,"data-window-drag-region":!0,className:`flex h-[52px] min-w-0 shrink-0 items-center gap-2 border-b border-stroke-soft pr-2 pl-4 [[data-custom-titlebar]_&]:pr-[144px]`,children:[t,(0,$.jsx)(`h1`,{className:`flex-none text-[15px] leading-6 font-semibold text-content`,children:r(`board:home.draftTitle`)}),(0,$.jsx)(`span`,{className:`min-w-0 truncate text-xs text-content-muted`,children:r(`board:home.draftSubtitle`)})]})}var Bi=1e3;function Vi({option:e,selected:t,disabled:n,onSelect:r}){let i=e.icon;return(0,$.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":t,disabled:n,className:`grid min-h-12 w-full cursor-pointer grid-cols-[16px_minmax(0,1fr)_16px] items-center gap-2.5 rounded-sm px-2 py-1.5 text-left text-content hover:bg-surface-hover focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus disabled:cursor-default disabled:opacity-50 disabled:hover:bg-transparent max-[650px]:min-h-14`,"data-mode-option":e.value,onClick:()=>r(e.value),children:[(0,$.jsx)(i,{size:16,strokeWidth:1.75,className:`text-content-secondary`,"aria-hidden":`true`}),(0,$.jsxs)(`span`,{className:`flex min-w-0 flex-col gap-px`,children:[(0,$.jsx)(`span`,{className:Yt(`text-[13px] max-[650px]:text-[15px]`,t&&`font-medium`),children:e.label}),(0,$.jsx)(`small`,{className:`text-xs leading-normal text-content-muted max-[650px]:text-[13px]`,children:e.description})]}),t?(0,$.jsx)(H,{size:15,strokeWidth:2.25,"aria-hidden":`true`}):(0,$.jsx)(`span`,{})]})}function Hi({approvalMode:e,onApprovalModeChange:t,approvalDisabled:n=!1,runMode:r,onRunModeChange:i,runModeDisabled:a=!1,goalsAvailable:s,teamAvailable:c,goal:l,tokenBudget:u,onTokenBudgetChange:d,onSaveTokenBudget:f,sheet:p=!1,collapse:m=!1,open:h,onOpenChange:g}){let{t:_}=o(),[v,y]=(0,Q.useState)(!1),[b,x]=(0,Q.useState)(!1),S=h??b,C=e=>{h===void 0&&x(e),g?.(e)},w=[{value:`approval-required`,label:_(`chat:focusSession.approvalRequired`),description:_(`chat:focusSession.approvalRequiredShowsADiffBeforeWriting`),icon:Pr},{value:`workspace-write`,label:_(`chat:focusSession.workspaceWrite`),description:_(`chat:focusSession.workspaceWriteRunsCommandsWithAutomaticApproval`),icon:jr},{value:`full-access`,label:_(`chat:focusSession.fullAccess`),description:_(`chat:focusSession.fullAccessRunsShellWithoutPerCommandApproval`),icon:St}],T=[{value:`plan`,label:_(`board:composer.planShort`),description:_(`chat:focusSession.planModeDescription`),icon:ze},...s?[{value:`goal`,label:_(`board:composer.goalShort`),description:_(`chat:focusSession.goalModeDescription`),icon:Vr}]:[],...s&&c?[{value:`team`,label:_(`board:composer.teamShort`),description:_(`chat:focusSession.teamModeDescription`),icon:Hr}]:[]],E=w.find(t=>t.value===e)||w[0],D=l?.status===`active`?l?.mode===`team`&&c?`team`:`goal`:r,O=T.find(e=>e.value===D)||T[0],k=O.value!==`plan`,A=E.value===`full-access`?St:zr,j=O.value===`team`?_(`board:composer.teamShort`):O.value===`goal`?_(`board:composer.goalShort`):``,M=j?`${j} · ${E.label}`:E.label,N=O.value===`plan`&&E.value===`approval-required`,P=!!l?.id,F=D===`team`?l?.teamTokenBudget:l?.tokenBudget,I=F==null?null:Number(F)>0?Number(F):null,L=u!==I,R=P?I==null?_(`chat:focusSession.usedUnlimitedGoalTokens`,{used:An(l?.tokensUsed)}):_(`chat:focusSession.usedBudgetTokensUsed`,{used:l?.tokensUsed||0,budget:I||0}):``,z=`${_(`board:composer.modeChip`)} · ${M}`,B=_(D===`team`?`chat:focusSession.teamTokenBudget`:`chat:focusSession.goalTokenBudget`),V=async()=>{if(!(v||!L||!P||!f)){y(!0);try{await f(u)}finally{y(!1)}}};return(0,$.jsxs)(fe,{sheet:p,title:_(`board:composer.modeChip`),open:S,onOpenChange:C,align:`start`,side:`top`,className:`composer-mode-popover w-[300px] max-w-[calc(100vw_-_24px)] gap-1 p-1`,trigger:(0,$.jsxs)(`button`,{type:`button`,className:Yt(q,`composer-mode-chip max-w-[220px] max-[650px]:min-w-9 max-[650px]:justify-center max-[650px]:gap-1`,k?`max-[650px]:px-2.5`:`max-[650px]:px-0`),"aria-label":z,title:z,hidden:m&&!k&&E.value!==`full-access`,"data-composer-mode":`${O.value}:${E.value}`,children:[k&&(0,$.jsx)(O.icon,{size:16,className:`hidden shrink-0 max-[650px]:block`,"aria-hidden":`true`}),(0,$.jsx)(A,{size:14,className:`shrink-0 max-[650px]:size-4`,"aria-hidden":`true`}),!N&&(0,$.jsx)(`span`,{className:`min-w-0 truncate max-[650px]:hidden`,children:M}),(0,$.jsx)(U,{size:14,className:`shrink-0 opacity-70 max-[650px]:hidden`,"aria-hidden":`true`})]}),children:[(0,$.jsxs)(`div`,{role:`radiogroup`,"aria-label":_(`chat:focusSession.approvalMode`),className:`flex flex-col gap-0.5`,children:[(0,$.jsx)(`div`,{className:`px-2 pt-1.5 pb-1 text-xs font-medium text-content-muted`,children:_(`chat:focusSession.approvalMode`)}),w.map(e=>(0,$.jsx)(Vi,{option:e,selected:e.value===E.value,disabled:n,onSelect:e=>{C(!1),t(e)}},e.value))]}),T.length>1&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{role:`separator`,className:`mx-1 h-px bg-stroke-soft`}),(0,$.jsxs)(`div`,{className:`grid gap-1.5 px-2 pt-1.5 pb-1.5`,children:[(0,$.jsxs)(`div`,{className:`flex min-h-7 items-center justify-between gap-2`,children:[(0,$.jsxs)(`span`,{className:`flex items-center gap-1.5 text-xs font-medium text-content-muted`,children:[_(`chat:focusSession.executionMode`),(0,$.jsx)(Qt,{className:`font-normal max-[650px]:hidden pointer-coarse:hidden`,children:`⇧Tab`})]}),(0,$.jsx)(Gt,{size:`sm`,"aria-label":_(`chat:focusSession.executionMode`),value:D,disabled:a,options:T.map(({value:e,label:t})=>({value:e,label:t})),onValueChange:i})]}),(0,$.jsx)(`p`,{className:`text-xs leading-normal text-content-muted max-[650px]:text-[13px]`,children:O.description})]}),(k||P)&&(0,$.jsxs)(`div`,{className:`grid gap-1 px-2 pt-1 pb-1.5 text-xs`,children:[R&&(0,$.jsx)(`p`,{className:`text-content-muted tabular-nums`,children:R}),(0,$.jsxs)(`div`,{className:`grid grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-1.5`,children:[(0,$.jsx)(`label`,{htmlFor:`goal-token-budget-input`,className:`font-medium text-content-secondary`,children:B}),(0,$.jsx)(Gn,{id:`goal-token-budget-input`,type:`number`,min:Bi,step:1e3,value:u??``,placeholder:_(`chat:focusSession.goalTokenBudgetUnlimited`),"aria-label":B,disabled:v,className:`text-[13px] tabular-nums`,onChange:e=>{let t=e.target.value.trim();if(!t){d(null);return}let n=Number(t);Number.isFinite(n)&&d(Math.max(Bi,Math.round(n)))}}),P&&L?(0,$.jsxs)(Y,{type:`button`,variant:`outline`,size:`sm`,disabled:v,onClick:()=>void V(),children:[v?(0,$.jsx)(yt,{className:`animate-spin`,size:12}):(0,$.jsx)(H,{size:12}),_(`chat:focusSession.goalBudgetSave`)]}):(0,$.jsx)(`span`,{})]}),(0,$.jsx)(`small`,{className:`text-content-muted`,children:_(D===`team`?`chat:focusSession.teamTokenBudgetHint`:P?`chat:focusSession.goalTokenBudgetUpdateHint`:`chat:focusSession.goalTokenBudgetHint`)})]})]})]})}function Ui({trigger:e,open:t,onOpenChange:n,onAttachment:r,onResource:i,onVisual:a,steer:s,mode:c}){let{t:l}=o(),u=e=>{n(!1),window.setTimeout(e,0)};return(0,$.jsxs)(fe,{sheet:!0,title:l(`board:composer.plusSheetTitle`),open:t,onOpenChange:n,trigger:e,sheetClassName:`px-2`,children:[(0,$.jsxs)(Di,{count:a?3:2,children:[(0,$.jsx)(Oi,{icon:ht,label:l(`board:composer.attachmentShort`),"data-composer-plus-item":`attachment`,onClick:()=>{n(!1),r()}}),(0,$.jsx)(Oi,{icon:V,label:l(`chat:resourcePicker.open`),"data-composer-plus-item":`resource`,onClick:()=>u(i)}),a&&(0,$.jsx)(Oi,{icon:ie,label:l(`chat:focusSession.generateImage`),"data-composer-plus-item":`visual`,onClick:()=>u(a)})]}),s&&(0,$.jsx)(ki,{icon:we,label:l(`board:composer.steerNow`),hint:l(`board:composer.steerHint`),disabled:s.disabled,"data-composer-steer":!0,onClick:()=>u(s.onSelect)}),c&&(0,$.jsx)(ki,{icon:zr,label:l(`board:composer.modeChip`),"data-composer-plus-item":`mode`,trailing:(0,$.jsxs)(`span`,{className:`flex flex-none items-center gap-1 text-sm text-content-muted`,children:[c.valueLabel,(0,$.jsx)(te,{className:`size-4`,"aria-hidden":`true`})]}),onClick:()=>u(c.onOpen)})]})}function Wi(e,t){let n=[`plan`];return t.goalsAvailable&&n.push(`goal`),t.goalsAvailable&&t.teamAvailable&&n.push(`team`),n.length<2?null:n[(n.indexOf(e)+1)%n.length]??`plan`}function Gi({state:e,cwd:t,onDismiss:n}){let{t:r}=o(),i=e.status===`streaming`;return(0,$.jsxs)(`section`,{"aria-label":r(`chat:sideQuestion.label`),"aria-busy":i,onKeyDown:e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),n())},className:`flex max-h-[min(45vh,420px)] min-w-0 flex-col rounded-lg border border-stroke bg-panel shadow-float`,children:[(0,$.jsxs)(`header`,{className:`flex min-w-0 items-start gap-2 border-b border-stroke-soft px-3 py-2`,children:[(0,$.jsx)(Ir,{size:15,"aria-hidden":`true`,className:`mt-0.5 shrink-0 text-content-muted`}),(0,$.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,$.jsx)(`span`,{className:`text-xs text-content-muted`,children:r(`chat:sideQuestion.label`)}),(0,$.jsx)(`p`,{className:`m-0 line-clamp-2 text-[13px] text-content`,title:e.question,children:e.question})]}),(0,$.jsx)(Y,{variant:`ghost`,size:`icon-xs`,className:`shrink-0 pointer-coarse:size-11`,"aria-label":r(`chat:sideQuestion.close`),title:r(`chat:sideQuestion.close`),onClick:n,children:(0,$.jsx)(At,{})})]}),(0,$.jsxs)(`div`,{className:`min-h-0 overflow-y-auto overscroll-contain px-3 py-2 text-[13px]`,children:[e.answer?(0,$.jsx)(nr,{cwd:t,streaming:i,children:e.answer}):i?(0,$.jsxs)(`p`,{role:`status`,className:`m-0 flex items-center gap-2 text-content-muted`,children:[(0,$.jsx)(Xt,{className:`size-4`}),r(`chat:sideQuestion.answering`)]}):e.status===`done`?(0,$.jsx)(`p`,{className:`m-0 text-content-muted`,children:e.toolCallIgnored?r(`chat:sideQuestion.toolIgnored`):r(`chat:sideQuestion.empty`)}):null,e.status===`error`&&(0,$.jsx)(`p`,{role:`alert`,className:`m-0 mt-1 text-[var(--danger)]`,children:r(`chat:sideQuestion.failed`,{error:e.error})})]}),(0,$.jsx)(`footer`,{className:`border-t border-stroke-soft px-3 py-1.5 text-xs text-content-muted`,children:r(`chat:sideQuestion.note`)})]})}function Ki(e){let[t,n]=(0,Q.useState)(null),r=(0,Q.useRef)(null),i=(0,Q.useCallback)(()=>{r.current?.abort(),r.current=null},[]),a=(0,Q.useCallback)(()=>{i(),n(null)},[i]);return(0,Q.useEffect)(()=>a,[e,a]),{state:t,ask:(0,Q.useCallback)(t=>{i();let a=new AbortController;r.current=a;let o=()=>r.current===a;n({question:t,answer:``,status:`streaming`,error:``,toolCallIgnored:!1}),X.askSideQuestion(e,t,{signal:a.signal,onDelta:e=>{o()&&n(t=>t&&{...t,answer:t.answer+e})}}).then(e=>{o()&&(r.current=null,n(t=>t&&{...t,answer:e.text||t.answer,status:`done`,toolCallIgnored:e.toolCallIgnored}))}).catch(e=>{o()&&(r.current=null,n(t=>t&&{...t,status:`error`,error:e instanceof Error?e.message:String(e)}))})},[i,e]),dismiss:a}}var qi=new Set([`user`,`assistant`,`summary`,`compaction`,`position`]);function Ji(e,t,n){return t===`labeled`?!!e.label:t===`branches`?n||qi.has(e.kind):!1}var Yi=new Set([`tool`,`tool-call`]);function Xi(e){let t=[],n=new Map;for(let r of e){let e=r.parentId?n.get(r.parentId):void 0,i={...r,children:[]};n.set(r.id,i),e?e.children.push(i):t.push(i)}return t}function Zi(e){let t=[],n=[...e].reverse();for(;n.length>0;){let e=n.pop();if(e){t.push(e);for(let t=e.children.length-1;t>=0;--t)n.push(e.children[t])}}return t}function Qi(e,t){let n=[],r=new Map;for(let i of Zi(e)){let e=i.parentId&&r.get(i.parentId)||null;if(!t(i)){r.set(i.id,e);continue}let a={...i,children:[]};r.set(i.id,a),e?e.children.push(a):n.push(a)}return n}function $i(e){let t=[e],n=e;for(;n.children.length===1;)n=n.children[0],t.push(n);let r={id:e.id,nodes:t,children:[],active:t.some(e=>e.active)},i=[{segment:r,children:n.children}];for(;i.length>0;){let e=i.pop();if(e)for(let t of e.children){let n=[t],r=t;for(;r.children.length===1;)r=r.children[0],n.push(r);let a={id:t.id,nodes:n,children:[],active:n.some(e=>e.active)};e.segment.children.push(a),i.push({segment:a,children:r.children})}}return r}function ea(e){return e.kind===`user`?Ne:e.kind===`assistant`?B:e.kind===`tool`||e.kind===`tool-call`?kt:e.kind===`settings`?xt:e.kind===`label`?Tt:e.kind===`summary`||e.kind===`compaction`?ae:e.kind===`position`?ut:e.label?Nr:pt}function ta({nodes:e,viewportRef:t,selectedId:n,typeLabel:r,stateLabel:i,onSelect:a}){let o=rr({count:e.length,getScrollElement:()=>t.current,estimateSize:()=>64,getItemKey:t=>e[t]?.id??`mobile-tree-node-${t}`,overscan:12,useAnimationFrameWithResizeObserver:!0});return(0,Q.useEffect)(()=>{if(!n)return;let t=e.findIndex(e=>e.id===n);t>=0&&o.scrollToIndex(t,{align:`center`})},[e,n,o]),(0,$.jsx)(`div`,{className:`relative w-full`,style:{height:`${o.getTotalSize()}px`},children:o.getVirtualItems().map(t=>{let o=e[t.index],s=ea(o);return(0,$.jsx)(`div`,{className:`absolute top-0 left-0 w-full px-3 py-1`,style:{transform:`translateY(${t.start}px)`},children:(0,$.jsxs)(`button`,{type:`button`,className:`session-tree-node relative grid items-center gap-2 rounded-sm border border-stroke bg-panel text-left text-content transition-colors duration-(--d-fast) hover:bg-surface-subtle [&.selected]:border-key-border [&.selected]:bg-key [&.selected]:shadow-key [&.selected]:before:absolute [&.selected]:before:inset-y-2 [&.selected]:before:-left-px [&.selected]:before:w-[3px] [&.selected]:before:rounded-r-[3px] [&.selected]:before:bg-star min-h-14 w-full grid-cols-[34px_minmax(0,1fr)_auto] py-2 pr-2.5 pl-1 ${o.id===n?` selected`:``}${o.active?` active`:``}${o.leaf?` leaf`:``}`,"data-kind":o.kind,"data-pisper-tree-entry":o.id,onClick:()=>a(o.id),children:[(0,$.jsx)(`span`,{className:`session-tree-marker relative z-[2] grid size-6 place-items-center justify-self-center rounded-sm bg-surface-muted text-content-secondary [.session-tree-node[data-kind='tool']_&]:bg-warning-soft [.session-tree-node[data-kind='tool']_&]:text-warning-strong [.session-tree-node.leaf_&]:bg-star [.session-tree-node.leaf_&]:text-on-accent [.session-tree-mark.active_&]:bg-star-soft [.session-tree-mark.active_&]:text-star-strong`,children:(0,$.jsx)(s,{size:14})}),(0,$.jsxs)(`span`,{className:`session-tree-node-copy flex min-w-0 flex-col gap-0.5 [&_small]:truncate [&_small]:text-xs [&_small]:text-content-muted [&_strong]:truncate [&_strong]:text-sm [&_strong]:font-medium`,children:[(0,$.jsx)(`strong`,{children:o.label||o.text||r(o)}),(0,$.jsx)(`small`,{children:o.label&&o.text?o.text:r(o)})]}),(0,$.jsxs)(`span`,{className:`session-tree-node-state inline-flex min-w-0 shrink-0 items-center gap-1 text-xs text-content-muted [.session-tree-node.leaf_&]:text-accent-fg`,children:[o.label&&(0,$.jsx)(Nr,{size:12}),i(o)]})]})},t.key)})})}function na({segment:e,viewportRef:t,selectedId:n,typeLabel:r,stateLabel:i,onSelect:a}){let{nodes:o,children:s}=e,c=o.length>120,l=rr({count:o.length,getScrollElement:()=>t.current,estimateSize:()=>56,getItemKey:e=>o[e]?.id??`tree-node-${e}`,overscan:12,scrollMargin:26,enabled:c,useAnimationFrameWithResizeObserver:!0}),u=e=>{let t=ea(e);return(0,$.jsxs)(`button`,{type:`button`,className:`session-tree-node relative grid items-center gap-2 rounded-sm border border-stroke bg-panel text-left text-content transition-colors duration-(--d-fast) hover:bg-surface-subtle [&.selected]:border-key-border [&.selected]:bg-key [&.selected]:shadow-key [&.selected]:before:absolute [&.selected]:before:inset-y-2 [&.selected]:before:-left-px [&.selected]:before:w-[3px] [&.selected]:before:rounded-r-[3px] [&.selected]:before:bg-star z-[1] min-h-12 w-[220px] cursor-pointer grid-cols-[30px_minmax(0,1fr)_auto] py-1.5 pr-2 pl-0.5 ${e.id===n?` selected`:``}${e.active?` active`:``}${e.leaf?` leaf`:``}`,"data-kind":e.kind,"data-pisper-tree-entry":e.id,onClick:()=>a(e.id),children:[(0,$.jsx)(`span`,{className:`session-tree-marker relative z-[2] grid size-6 place-items-center justify-self-center rounded-sm bg-surface-muted text-content-secondary [.session-tree-node[data-kind='tool']_&]:bg-warning-soft [.session-tree-node[data-kind='tool']_&]:text-warning-strong [.session-tree-node.leaf_&]:bg-star [.session-tree-node.leaf_&]:text-on-accent [.session-tree-mark.active_&]:bg-star-soft [.session-tree-mark.active_&]:text-star-strong`,children:(0,$.jsx)(t,{size:14})}),(0,$.jsxs)(`span`,{className:`session-tree-node-copy flex min-w-0 flex-col gap-0.5 [&_small]:truncate [&_small]:text-xs [&_small]:text-content-muted [&_strong]:truncate [&_strong]:text-sm [&_strong]:font-medium`,children:[(0,$.jsx)(`strong`,{children:e.label||e.text||r(e)}),(0,$.jsx)(`small`,{children:e.label&&e.text?e.text:r(e)})]}),(0,$.jsxs)(`span`,{className:`session-tree-node-state inline-flex min-w-0 shrink-0 items-center gap-1 text-xs text-content-muted [.session-tree-node.leaf_&]:text-accent-fg`,children:[e.label&&(0,$.jsx)(Nr,{size:12}),i(e)]})]},e.id)};return(0,Q.useEffect)(()=>{if(!c||!n)return;let e=o.findIndex(e=>e.id===n);e<0||l.scrollToIndex(e,{align:`center`})},[n,o,c,l]),(0,$.jsxs)(`div`,{className:`session-tree-segment relative flex min-w-[220px] flex-col items-center ${e.active?` active`:``}`,children:[(0,$.jsx)(`div`,{className:`session-tree-track relative z-[1] grid w-[220px] gap-2 before:absolute before:top-[22px] before:bottom-[22px] before:left-1/2 before:z-0 before:w-px before:bg-stroke-strong [.session-tree-segment.active_>_&::before]:bg-control`,children:c?(0,$.jsx)(`div`,{className:`relative w-[220px]`,style:{height:`${l.getTotalSize()}px`},children:l.getVirtualItems().map(e=>(0,$.jsx)(`div`,{className:`absolute top-0 left-0 w-[220px]`,style:{top:`${e.start-26}px`},children:u(o[e.index])},e.key))}):o.map(u)}),s.length>0&&(0,$.jsx)(`div`,{className:`session-tree-children relative flex items-start justify-center pt-7 before:absolute before:top-0 before:left-1/2 before:h-3.5 before:w-px before:bg-stroke-strong [.session-tree-segment.active_>_&::before]:bg-control`,children:s.map(e=>(0,$.jsx)(`div`,{className:`session-tree-child relative flex px-3 pt-3.5 before:absolute before:top-0 before:right-1/2 before:h-3.5 before:w-1/2 before:border-t before:border-stroke-strong after:absolute after:top-0 after:left-1/2 after:h-3.5 after:w-1/2 after:border-t after:border-l after:border-stroke-strong [&:first-child::before]:border-t-transparent [&:last-child::after]:border-t-transparent [&.active]:before:border-control [&.active]:after:border-control [&.active:first-child::before]:border-t-transparent [&.active:last-child::after]:border-t-transparent${e.active?` active`:``}`,children:(0,$.jsx)(na,{segment:e,viewportRef:t,selectedId:n,typeLabel:r,stateLabel:i,onSelect:a})},e.id))})]})}function ra({view:e,onViewChange:t,showAllEntries:n,onShowAllEntriesChange:r,query:i,onQueryChange:a,loading:s,error:c,mobileLayout:l,viewportRef:u,segments:d,visibleNodes:f,selectedId:p,typeLabel:m,stateLabel:h,onSelect:g,visibleMarks:_,marksLoading:v,openingMark:y,onOpenMark:b,confirmingMark:x,onConfirmMark:S,onCancelMark:C}){let{t:w,language:T}=o(),E=(0,Q.useRef)(null);(0,Q.useEffect)(()=>{x&&E.current?.focus()},[x]);let D=e=>{let t=Date.parse(e);return Number.isFinite(t)?new Intl.DateTimeFormat(T,{dateStyle:`medium`,timeStyle:`short`}).format(t):w(`navigation:appOverlays.unknownTime`)};return(0,$.jsxs)(`div`,{className:`chat-resource-browser flex min-h-0 min-w-0 flex-col bg-transparent session-tree-browser`,children:[(0,$.jsx)(Ut,{className:`chat-resource-tabs session-tree-tabs px-3 pt-3`,value:e,onValueChange:e=>t(e),children:(0,$.jsxs)(Ht,{children:[(0,$.jsx)(Vt,{value:`branches`,children:w(`chat:sessionTree.branches`)}),(0,$.jsx)(Vt,{value:`labeled`,children:w(`chat:sessionTree.labeled`)}),(0,$.jsx)(Vt,{value:`marks`,children:w(`chat:sessionTree.allMarks`)})]})}),(0,$.jsxs)(Jn,{className:`chat-resource-search mx-3 mt-2 w-auto flex-none`,children:[(0,$.jsx)(qn,{children:(0,$.jsx)(bt,{"aria-hidden":`true`})}),(0,$.jsx)(Kn,{value:i,disabled:!!y,"aria-label":w(`chat:sessionTree.searchPlaceholder`),onChange:e=>a(e.target.value),placeholder:w(`chat:sessionTree.searchPlaceholder`)})]}),e===`branches`&&(0,$.jsxs)(`label`,{className:`mx-3 mt-2 flex min-h-6 flex-none cursor-pointer items-center gap-2 text-xs text-content-secondary max-[650px]:min-h-11`,children:[(0,$.jsx)(Mt,{checked:n,onCheckedChange:e=>r(e===!0),"data-session-tree-all-entries":!0}),w(`chat:sessionTree.showAllEntries`)]}),e===`marks`?(0,$.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 basis-0 flex-col gap-2 overflow-auto overscroll-contain px-3.5 py-3`,"data-testid":`session-tree-marks-list`,children:[c&&(0,$.jsx)(`p`,{role:`alert`,className:`mx-0.5 text-xs text-danger`,children:c}),v?(0,$.jsx)(`p`,{className:`grid min-h-[180px] place-items-center text-xs text-content-muted`,children:w(`chat:sessionTree.loadingMarks`)}):_.length?_.map(e=>(0,$.jsxs)(Q.Fragment,{children:[(0,$.jsxs)(`button`,{type:`button`,className:`session-tree-mark grid cursor-pointer grid-cols-[30px_minmax(0,1fr)_auto] items-center gap-2 rounded-sm border border-stroke bg-panel py-2 pr-2.5 pl-1 text-left text-content transition-colors duration-(--d-fast) hover:bg-surface-subtle [&.active]:border-star-border [&_>_em]:rounded-xs [&_>_em]:bg-star-soft [&_>_em]:px-1.5 [&_>_em]:py-0.5 [&_>_em]:text-xs [&_>_em]:text-star-strong [&_>_em]:not-italic ${e.active?` active`:``}`,"aria-expanded":e.active?void 0:x===e,"data-session-tree-mark":e.active?`active`:`other-branch`,disabled:!!y,"aria-busy":y===e,onClick:()=>b(e),children:[(0,$.jsx)(`span`,{className:`session-tree-marker relative z-[2] grid size-6 place-items-center justify-self-center rounded-sm bg-surface-muted text-content-secondary [.session-tree-node[data-kind='tool']_&]:bg-warning-soft [.session-tree-node[data-kind='tool']_&]:text-warning-strong [.session-tree-node.leaf_&]:bg-star [.session-tree-node.leaf_&]:text-on-accent [.session-tree-mark.active_&]:bg-star-soft [.session-tree-mark.active_&]:text-star-strong`,children:y===e?(0,$.jsx)(Xt,{className:`size-3.5`}):(0,$.jsx)(Tt,{size:14})}),(0,$.jsxs)(`span`,{className:`session-tree-node-copy flex min-w-0 flex-col gap-0.5 [&_small]:truncate [&_small]:text-xs [&_small]:text-content-muted [&_strong]:truncate [&_strong]:text-sm [&_strong]:font-medium`,children:[(0,$.jsx)(`strong`,{children:e.label}),(0,$.jsx)(`small`,{children:e.sessionName||w(`navigation:appOverlays.untitledChat`)}),(0,$.jsx)(`small`,{children:w(`chat:sessionTree.markTimes`,{sessionTime:D(e.sessionModified),nodeTime:D(e.nodeTimestamp)})})]}),y===e?(0,$.jsx)(`em`,{children:w(`chat:sessionTree.navigating`)}):e.active&&(0,$.jsx)(`em`,{children:w(`chat:sessionTree.markActive`)})]}),x===e&&(0,$.jsxs)(`div`,{role:`group`,"aria-label":w(`chat:sessionTree.otherBranchTitle`),className:`-mt-1 grid gap-2 rounded-sm border border-stroke bg-surface-subtle p-2.5 text-xs text-content-secondary`,"data-session-tree-mark-confirm":!0,children:[(0,$.jsxs)(`p`,{className:`flex items-start gap-1.5 text-content`,children:[(0,$.jsx)(ct,{size:13,className:`mt-0.5 flex-none`,"aria-hidden":`true`}),(0,$.jsxs)(`span`,{children:[(0,$.jsx)(`strong`,{className:`font-medium`,children:w(`chat:sessionTree.otherBranchTitle`)}),(0,$.jsx)(`span`,{className:`block text-content-muted`,children:w(`chat:sessionTree.otherBranchMessage`)})]})]}),(0,$.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,$.jsx)(Y,{type:`button`,size:`sm`,variant:`ghost`,className:`max-[650px]:h-11`,onClick:C,children:w(`common:ui.cancel`)}),(0,$.jsx)(Y,{ref:E,type:`button`,size:`sm`,className:`max-[650px]:h-11`,onClick:()=>S(e),children:w(`chat:sessionTree.switchBranch`)})]})]})]},`${e.sessionId}:${e.entryId}`)):(0,$.jsx)(`p`,{className:`grid min-h-[180px] place-items-center text-xs text-content-muted`,children:w(`chat:sessionTree.noMarksYet`)})]}):(0,$.jsx)(`div`,{className:`min-h-0 min-w-0 flex-1 basis-0 overflow-auto overscroll-contain [scrollbar-gutter:stable]`,"data-testid":`session-tree-list`,ref:u,children:d.length>0?l?(0,$.jsx)(ta,{nodes:f,viewportRef:u,selectedId:p,typeLabel:m,stateLabel:h,onSelect:g}):(0,$.jsx)(`div`,{className:`session-tree-canvas flex w-max min-w-full items-start justify-center gap-9 px-7 pt-6.5 pb-12`,children:d.map(e=>(0,$.jsx)(na,{segment:e,viewportRef:u,selectedId:p,typeLabel:m,stateLabel:h,onSelect:g},e.id))}):(0,$.jsx)(`p`,{className:`grid min-h-[180px] place-items-center text-xs text-content-muted`,children:s?w(`chat:sessionTree.loading`):c||w(`chat:sessionTree.empty`)})})]})}function ia({label:e,onClick:t}){return(0,$.jsxs)(Y,{variant:`secondary`,className:`w-full min-w-0`,title:e,onClick:t,children:[(0,$.jsx)(pt,{size:13}),(0,$.jsx)(`span`,{className:`min-w-0 truncate`,children:e})]})}function aa({mobileLayout:e,selected:t,loading:n,error:r,streaming:i,dataStreaming:a,parentSession:s,parentEntryId:c,childSessions:l,canLabel:u,canDerive:d,label:f,summarize:p,savingLabel:m,creatingChild:h,navigating:g,typeLabel:_,stateLabel:v,onBackToList:y,onLabelChange:b,onSummarizeChange:x,onSaveLabel:S,onRemoveLabel:C,onCreateChild:w,onNavigate:T,onRefresh:E,onOpenRelated:D}){let{t:O,language:k}=o();return(0,$.jsxs)(`div`,{className:`chat-resource-config session-tree-inspector flex min-h-0 min-w-0 flex-col gap-4 overflow-y-auto overscroll-contain bg-panel p-[18px] [&_>_p]:m-auto [&_>_p]:text-xs [&_>_p]:text-content-muted [&_p]:text-xs [&_p]:text-content-muted [&_strong]:text-[15px] [&_strong]:font-medium ${e?``:`border-l border-stroke-soft`}`,children:[e&&(0,$.jsx)(`div`,{className:`sticky top-0 z-[2] -mx-1.5 -mt-2 flex border-b border-stroke-soft bg-panel px-0.5 pb-2`,children:(0,$.jsxs)(Y,{variant:`ghost`,className:`min-h-11 justify-start px-2`,onClick:y,children:[(0,$.jsx)(ee,{size:17}),O(`chat:sessionTree.backToNodes`)]})}),t?(0,$.jsxs)($.Fragment,{children:[(s||l.length>0)&&(0,$.jsxs)(`div`,{className:`session-tree-lineage flex flex-col gap-1.5 border-b border-stroke-soft pb-3 [&_>_strong]:text-xs [&_>_strong]:font-medium [&_>_strong]:text-content-muted [&_button]:justify-start [&_button]:text-left [&_button]:text-xs`,children:[(0,$.jsx)(`strong`,{children:O(`chat:sessionTree.conversationLineage`)}),s&&(0,$.jsx)(ia,{label:O(`chat:sessionTree.returnToOriginalChat`,{name:s.name||O(`chat:chatPage.newChat`)}),onClick:()=>D(s,c)}),l.map(e=>(0,$.jsx)(ia,{label:O(`chat:sessionTree.openSeparateChat`,{name:e.name||O(`chat:chatPage.newChat`)}),onClick:()=>D(e)},e.id))]}),(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`span`,{className:`session-tree-selection-kind mb-1 flex items-center justify-between gap-2 text-xs text-content-muted [&_em]:rounded-xs [&_em]:border [&_em]:border-star-border [&_em]:bg-star-soft [&_em]:px-1.5 [&_em]:py-0.5 [&_em]:font-medium [&_em]:text-star-strong [&_em]:not-italic`,children:[_(t),v(t)&&(0,$.jsx)(`em`,{children:v(t)})]}),(0,$.jsx)(`strong`,{children:t.label||_(t)}),(0,$.jsx)(`p`,{children:t.text||O(`chat:sessionTree.noPreview`)})]}),(0,$.jsxs)(`div`,{className:`chat-resource-inputs flex flex-col gap-3 [&_label]:grid [&_label]:gap-1.5 [&_label]:text-xs [&_label]:font-medium [&_label]:text-content-secondary`,children:[u&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`label`,{children:[(0,$.jsx)(`span`,{children:O(`chat:sessionTree.nodeLabel`)}),(0,$.jsx)(Gn,{value:f,maxLength:80,placeholder:O(`chat:sessionTree.labelPlaceholder`),onChange:e=>b(e.target.value)})]}),(0,$.jsxs)(Y,{variant:`secondary`,disabled:m||i||a,onClick:S,children:[(0,$.jsx)(Tt,{size:14}),O(m?`chat:sessionTree.savingLabel`:`chat:sessionTree.saveLabel`)]}),!!t.label&&(0,$.jsxs)(Y,{variant:`secondary`,disabled:m||i||a,onClick:C,children:[(0,$.jsx)(Et,{size:14}),O(`chat:sessionTree.removeLabel`)]})]}),u&&(0,$.jsxs)(Y,{variant:`secondary`,disabled:h||i||a,onClick:w,children:[(0,$.jsx)(Pe,{size:14}),O(h?`chat:sessionTree.creatingChildChat`:`chat:sessionTree.createChildChat`)]}),d&&(0,$.jsxs)(`label`,{className:`session-tree-summary-option cursor-pointer grid-cols-[minmax(0,1fr)_auto] items-center [&_small]:col-span-full [&_small]:leading-relaxed [&_small]:font-normal [&_small]:text-content-muted`,children:[(0,$.jsx)(`span`,{children:O(`chat:sessionTree.abandonedBranchSummary`)}),(0,$.jsx)(Bt,{checked:p,disabled:t.leaf||i||a,onCheckedChange:x,"data-session-tree-summary":!0}),(0,$.jsx)(`small`,{children:O(`chat:sessionTree.abandonedBranchSummaryHint`)})]})]}),d&&(0,$.jsx)(`p`,{children:O(`chat:sessionTree.sideEffectsRemain`)}),t.timestamp&&(0,$.jsx)(`p`,{children:new Intl.DateTimeFormat(k,{dateStyle:`medium`,timeStyle:`short`}).format(new Date(t.timestamp))}),r&&(0,$.jsx)(`p`,{role:`alert`,className:`text-danger!`,children:r}),d&&(0,$.jsxs)(Y,{className:`chat-resource-confirm self-start`,disabled:g||t.leaf||i||a,onClick:T,children:[(0,$.jsx)(ut,{size:15}),g?O(`chat:sessionTree.navigating`):t.leaf?O(`chat:sessionTree.currentPosition`):O(`chat:sessionTree.continueFromNode`)]})]}):(0,$.jsx)(`p`,{children:n?O(`chat:sessionTree.loading`):r||O(`chat:sessionTree.chooseNode`)}),r&&!t&&(0,$.jsx)(Y,{variant:`secondary`,onClick:E,children:O(`chat:sessionTree.retry`)})]})}function oa({open:e,sessionId:t,streaming:n,onClose:r,onNavigated:i,onCreateChildSession:a,initialView:s=`branches`,returnFocusRef:c,notify:l}){let{t:u,language:d}=o(),f=D(),p=E(),m=f||p,[h,g]=(0,Q.useState)(null),[_,v]=(0,Q.useState)([]),[y,b]=(0,Q.useState)(`branches`),[x,S]=(0,Q.useState)(!1),[C,w]=(0,Q.useState)(`list`),[T,O]=(0,Q.useState)(``),[k,A]=(0,Q.useState)(``),[j,M]=(0,Q.useState)(``),[N,P]=(0,Q.useState)([]),[F,I]=(0,Q.useState)(!1),[L,R]=(0,Q.useState)(!1),[z,B]=(0,Q.useState)(null),[V,H]=(0,Q.useState)(null),[U,ee]=(0,Q.useState)(!1),[te,ne]=(0,Q.useState)(!1),[re,ie]=(0,Q.useState)(!1),[ae,oe]=(0,Q.useState)(!1),[W,se]=(0,Q.useState)(!1),[ce,G]=(0,Q.useState)(``),le=(0,Q.useRef)(null);(0,Q.useEffect)(()=>{if(!e||!t)return;let n=!1;return b(s),w(`list`),O(``),ne(!0),G(``),Promise.all([X.getSessionTree(t),X.listSessions()]).then(([e,t])=>{n||(g(e),v(t.sessions||[]),A(e.leafId||e.nodes[0]?.id||``))}).catch(e=>{n||G(Z(e))}).finally(()=>{n||ne(!1)}),()=>{n=!0}},[e,t]),(0,Q.useEffect)(()=>{e||(g(null),v([]),A(``),w(`list`),M(``),B(null),H(null),ee(!1),G(``))},[e]),(0,Q.useEffect)(()=>{if(!e||y!==`marks`||F)return;let t=!0;return R(!0),G(``),X.listSessionTreeLabels(500).then(e=>{t&&(P(e.labels||[]),I(!0))}).catch(e=>t&&G(Z(e))).finally(()=>t&&R(!1)),()=>{t=!1}},[e,y,F]);let K=(0,Q.useMemo)(()=>{let e=T.trim().toLocaleLowerCase(d);return e?N.filter(t=>`${t.label} ${t.sessionName}`.toLocaleLowerCase(d).includes(e)):N},[N,d,T]),ue=async(e,t=!1)=>{if(!z){if(!e.active&&!t){H(e);return}H(null),B(e),G(``);try{let t=null;if(!e.active){if(t=await X.navigateSessionTreeTarget(e.sessionId,e.entryId),t.cancelled){B(null);return}pr(e.sessionId)}fn(e.sessionId,`open`,e.entryId),r(),t&&l&&vr(e.sessionId,t,u(`chat:sessionTree.switchedBranch`),{notify:l,t:u})}catch(e){G(Z(e)),B(null)}}},de=(0,Q.useMemo)(()=>Xi(h?.nodes||[]),[h]),fe=(0,Q.useCallback)(e=>({user:u(`chat:sessionTree.userMessage`),assistant:u(`chat:sessionTree.agentMessage`),tool:u(`chat:sessionTree.toolResult`),"tool-call":u(`chat:sessionTree.toolCall`),summary:u(`chat:sessionTree.branchSummary`),compaction:u(`chat:sessionTree.compactionSummary`),settings:u(`chat:sessionTree.settingsChange`),label:u(`chat:sessionTree.labelChange`),position:u(`chat:sessionTree.branchPosition`),extension:u(`chat:sessionTree.extensionEntry`),metadata:u(`chat:sessionTree.metadataEntry`),message:u(`chat:sessionTree.message`)})[e.kind]||e.type,[u]),pe=(0,Q.useMemo)(()=>{let e=T.trim().toLocaleLowerCase(d);return Qi(de,t=>Ji(t,y,x)?!e||`${t.label} ${t.text} ${fe(t)}`.toLocaleLowerCase(d).includes(e):!1)},[de,d,T,x,fe,y]),me=(0,Q.useMemo)(()=>pe.map($i),[pe]),he=(0,Q.useMemo)(()=>Zi(pe),[pe]),q=(0,Q.useMemo)(()=>Zi(de),[de]).find(e=>e.id===k)||null,ge=h?.lineage?.parentSessionId?_.find(e=>e.id===h.lineage?.parentSessionId):null,_e=(h?.lineage?.childSessionIds||[]).map(e=>_.find(t=>t.id===e)).filter(e=>!!e),ve=q?.kind===`assistant`&&q.status===`completed`,ye=ve,be=q?!Yi.has(q.kind):!1;(0,Q.useEffect)(()=>{M(q?.label||``),ee(!1)},[q?.id,q?.label]),(0,Q.useEffect)(()=>{if(k&&he.some(e=>e.id===k))return;let e=[...he].reverse().find(e=>e.active);A(e?.id||he[0]?.id||``)},[k,he]),(0,Q.useEffect)(()=>{if(!e||!k)return;let t=requestAnimationFrame(()=>{document.querySelector(`[data-testid="session-tree-list"] .session-tree-node.selected`)?.scrollIntoView({block:`center`})});return()=>cancelAnimationFrame(t)},[e,T,k,y,he.length]);let xe=async()=>{ne(!0),G(``);try{let e=await X.getSessionTree(t);g(e),A(e.leafId||e.nodes[0]?.id||``)}catch(e){G(Z(e))}finally{ne(!1)}},Se=async()=>{if(!(!q||re)){ie(!0),G(``);try{let e=await X.setSessionTreeLabel(t,q.id,j);g(e),hr(t,e)}catch(e){G(Z(e))}finally{ie(!1)}}},Ce=async()=>{if(!(!q||re)){ie(!0),G(``);try{let e=await X.setSessionTreeLabel(t,q.id,``);g(e),hr(t,e)}catch(e){G(Z(e))}finally{ie(!1)}}},we=async()=>{if(!(!q||!ye||W)){se(!0),G(``);try{await a(q.id),r()}catch(e){G(Z(e))}finally{se(!1)}}},Te=(e,t=``)=>{e.id&&(fn(e.id,`open`,t),r())},Ee=async()=>{if(!(!q||ae||q.leaf||n||h?.streaming)){oe(!0),G(``);try{let e=await X.navigateSessionTree(t,q.id,U);g(e),e.cancelled||(hr(t,e),await i(e.editorText),r(),l&&vr(t,e,u(`chat:chatPage.branchedFromNode`),{notify:l,t:u}))}catch(e){G(Z(e))}finally{oe(!1)}}},De=e=>e.leaf?u(`chat:sessionTree.current`):e.branchPoint?u(`chat:sessionTree.fork`):e.active?u(`chat:sessionTree.active`):``;return(0,$.jsx)(Wn,{open:e,onOpenChange:e=>!e&&r(),children:(0,$.jsxs)(Vn,{onCloseAutoFocus:e=>{let n=c?.current,r=n?.isConnected?n:document.getElementById(`task-${t}-more`);r?.closest(`[data-task-workspace]`)?.getAttribute(`data-active`)===`true`&&(e.preventDefault(),r.focus())},className:`chat-resource-dialog session-tree-dialog grid-rows-[auto_minmax(0,1fr)] gap-0 overflow-hidden border border-stroke bg-solid p-0 ${m?`!h-[calc(100dvh_-_16px)] !w-[calc(100vw_-_16px)] !max-w-none`:`!h-[min(760px,calc(100dvh_-_32px))] !w-[min(1120px,calc(100vw_-_32px))] !max-w-[1120px]`}`,showCloseButton:!1,children:[(0,$.jsxs)(`div`,{className:`chat-resource-head flex items-start justify-between gap-4 border-b border-stroke-soft px-[18px] pt-4 pb-3.5 max-[650px]:p-3.5 [&_[data-slot='dialog-description']]:mt-0.5 [&_[data-slot='dialog-description']]:text-xs [&_[data-slot='dialog-description']]:text-content-muted [&_[data-slot='dialog-title']]:text-base [&_[data-slot='dialog-title']]:font-semibold`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`session-tree-title flex items-center gap-2`,children:[(0,$.jsx)(ct,{className:`size-4 text-content-muted`,strokeWidth:1.75,"aria-hidden":`true`}),(0,$.jsx)(Hn,{children:u(`chat:sessionTree.title`)})]}),(0,$.jsx)(Bn,{children:u(`chat:sessionTree.description`,{nodes:h?.nodeCount||0,branches:h?.branchCount||0})})]}),(0,$.jsx)(Y,{type:`button`,variant:`ghost`,size:`icon`,className:`max-[650px]:size-11`,"aria-label":u(`common:ui.closeDialog`),title:u(`common:ui.closeDialog`),onClick:r,children:(0,$.jsx)(At,{size:16})})]}),(0,$.jsxs)(`div`,{className:`chat-resource-body session-tree-layout grid min-h-0 overflow-hidden bg-background ${m?`grid-cols-1 grid-rows-[minmax(0,1fr)]`:`!grid-cols-[minmax(0,1fr)_292px]`}`,children:[(!m||C===`list`)&&(0,$.jsx)(ra,{view:y,onViewChange:e=>{b(e),H(null),w(`list`)},showAllEntries:x,onShowAllEntriesChange:S,query:T,onQueryChange:O,loading:te,error:ce,mobileLayout:m,viewportRef:le,segments:me,visibleNodes:he,selectedId:k,typeLabel:fe,stateLabel:De,onSelect:e=>{A(e),m&&w(`detail`)},visibleMarks:K,marksLoading:L,openingMark:z,onOpenMark:e=>void ue(e),confirmingMark:V,onConfirmMark:e=>void ue(e,!0),onCancelMark:()=>H(null)}),y!==`marks`&&(!m||C===`detail`)&&(0,$.jsx)(aa,{mobileLayout:m,selected:q,loading:te,error:ce,streaming:n,dataStreaming:!!h?.streaming,parentSession:ge??null,parentEntryId:h?.lineage?.sourceEntryId||``,childSessions:_e,canLabel:ve,canDerive:be,label:j,summarize:U,savingLabel:re,creatingChild:W,navigating:ae,typeLabel:fe,stateLabel:De,onBackToList:()=>w(`list`),onLabelChange:M,onSummarizeChange:ee,onSaveLabel:()=>void Se(),onRemoveLabel:()=>void Ce(),onCreateChild:()=>void we(),onNavigate:()=>void Ee(),onRefresh:()=>void xe(),onOpenRelated:(e,t)=>Te(e,t??``)})]})]})})}function sa({visible:e,open:t,sessionId:n,streaming:r,revision:i,pulseToken:a,onOpenChange:s,onNavigated:c,onCreateChildSession:l,notify:u,children:d}){let{t:f}=o(),p=fr(n,{enabled:e,streaming:r,revision:i})?.branchCount??0,[m,h]=(0,Q.useState)(`branches`),[g,_]=(0,Q.useState)(!1),v=(0,Q.useRef)(0),y=(0,Q.useRef)(null);(0,Q.useEffect)(()=>()=>cancelAnimationFrame(v.current),[]),(0,Q.useEffect)(()=>{if(!a)return;_(!0);let e=window.setTimeout(()=>_(!1),1800);return()=>window.clearTimeout(e)},[a]);let b=p>0&&(0,$.jsx)(`i`,{"aria-hidden":`true`,className:`ml-auto size-1.5 rounded-full bg-star`}),x=e?(0,$.jsxs)(Pt,{"aria-label":f(`chat:sessionTree.menu`),"aria-haspopup":`dialog`,"data-pisper-recall-pulse":g||void 0,onSelect:()=>{y.current=null,h(`branches`),cancelAnimationFrame(v.current),v.current=requestAnimationFrame(()=>s(!0))},children:[(0,$.jsx)(ct,{className:g?`motion-reduce:animate-none [animation:session-tree-new-node-pulse_1.8s_var(--ease-out)]`:void 0}),f(`chat:sessionTree.menu`),b]}):null;return(0,$.jsxs)($.Fragment,{children:[d(x,{branches:p,open:(e=`branches`,t=null)=>{y.current=t,h(e),cancelAnimationFrame(v.current),v.current=requestAnimationFrame(()=>s(!0))}}),e&&(0,$.jsx)(oa,{open:t,initialView:m,returnFocusRef:y,sessionId:n,streaming:r,onClose:()=>s(!1),onNavigated:c,onCreateChildSession:l,notify:u})]})}function ca({question:e,more:t,collapsed:n,onAnswer:r}){let{t:i}=o(),[a,s]=(0,Q.useState)(()=>e.questions.map(()=>({selected:[]}))),[c,l]=(0,Q.useState)(()=>e.questions.map(()=>!1)),[u,d]=(0,Q.useState)(!1),[f,p]=(0,Q.useState)(``),m=e.questions.length===1&&!e.questions[0].multiSelect,h=En(e,a);if(n)return(0,$.jsxs)(`p`,{"data-question-more":!0,className:`flex min-h-8 min-w-0 items-center gap-2 rounded-(--r-md) border border-st-attn-border px-3 text-xs text-st-attn`,children:[(0,$.jsx)(`span`,{"aria-hidden":`true`,className:`size-2 flex-none rounded-full bg-st-attn-fill`}),i(`board:question.waiting`,{count:t+1})]});let g=async t=>{if(!u){d(!0),p(``);try{await r(e.id,t)}catch{p(i(`board:question.failed`)),d(!1)}}},_=e=>e.map((e,t)=>{let n=c[t]?e.other?.trim():``;return n?{selected:e.selected,other:n}:{selected:e.selected}}),v=(t,n)=>{let r=e.questions[t],i=a.map((e,i)=>{if(i!==t)return e;if(!r.multiSelect)return{...e,selected:[n]};let a=e.selected.includes(n)?e.selected.filter(e=>e!==n):[...e.selected,n];return{...e,selected:a}});s(i),m&&g({answers:_(i)})};return(0,$.jsxs)(`div`,{"data-question-card":e.id,role:`group`,"aria-label":i(`board:question.label`),"aria-busy":u||void 0,onKeyDown:t=>{if(t.altKey||t.metaKey||t.ctrlKey)return;let n=t.target;if(n.closest(`textarea, input`))return;let r=a.findIndex(e=>!e.selected.length&&!e.other?.trim()),i=r<0?e.questions.length-1:r,o=Number(t.key);if(Number.isInteger(o)&&o>=1&&o<=6){let n=e.questions[i]?.options[o-1];if(!n)return;t.preventDefault(),v(i,n.label)}else t.key===`Enter`&&!n.closest(`button`)&&h&&(t.preventDefault(),g({answers:_(a)}))},className:`flex max-h-[min(60vh,560px)] min-w-0 flex-col gap-3 overflow-y-auto rounded-(--r-lg) border border-st-attn-border bg-st-attn-soft px-3.5 py-3 text-foreground`,children:[(0,$.jsxs)(`p`,{className:`flex items-center gap-2 text-xs font-medium text-warning-strong`,children:[(0,$.jsx)(Ir,{className:`size-4 flex-none`,"aria-hidden":`true`}),i(`board:question.title`),t>0&&(0,$.jsx)(`span`,{className:`font-normal text-content-muted`,children:i(`board:question.moreAfter`,{count:t})})]}),e.questions.map((t,n)=>{let r=a[n],o=t.header?`${t.header}:${t.question}`:t.question;return(0,$.jsxs)(`fieldset`,{"data-question-item":n,className:`flex min-w-0 flex-col gap-1.5`,children:[(0,$.jsxs)(`legend`,{className:`mb-1.5 flex min-w-0 flex-col gap-0.5`,children:[t.header&&(0,$.jsx)(`span`,{className:`text-xs font-medium text-content-muted`,children:t.header}),(0,$.jsx)(`span`,{className:`text-sm leading-5 text-content`,children:t.question})]}),(0,$.jsxs)(`div`,{role:t.multiSelect?`group`:`radiogroup`,"aria-label":o,className:`flex flex-wrap gap-1.5`,children:[t.options.map((e,i)=>{let a=r.selected.includes(e.label);return(0,$.jsxs)(`button`,{type:`button`,role:t.multiSelect?`checkbox`:`radio`,"aria-checked":a,disabled:u,"data-question-option":e.label,title:e.description||void 0,className:Yt(`flex min-h-9 max-w-full min-w-0 items-center gap-1.5 rounded-(--r-md) border px-2.5 py-1 text-left text-[13px] transition-colors duration-(--d-fast) focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focus disabled:opacity-60 pointer-coarse:min-h-11`,a?`border-content bg-content text-panel`:`border-stroke-strong bg-panel text-content hover:bg-surface-hover`),onClick:()=>v(n,e.label),children:[(0,$.jsx)(`span`,{"aria-hidden":`true`,className:`font-mono text-[11px] opacity-60 pointer-coarse:hidden`,children:i+1}),(0,$.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[(0,$.jsx)(`span`,{className:`break-words`,children:e.label}),e.description&&(0,$.jsx)(`span`,{className:Yt(`text-xs break-words`,a?`opacity-80`:`text-content-muted`),children:e.description})]}),a&&t.multiSelect&&(0,$.jsx)(H,{className:`size-3.5 flex-none`,"aria-hidden":`true`})]},e.label)}),(0,$.jsx)(`button`,{type:`button`,"aria-expanded":c[n],disabled:u,"data-question-other":n,className:Yt(`flex min-h-9 items-center rounded-(--r-md) border border-dashed border-stroke-strong px-2.5 text-[13px] text-content-secondary hover:bg-surface-hover focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focus pointer-coarse:min-h-11`,c[n]&&`border-solid bg-panel`),onClick:()=>l(e=>e.map((e,t)=>t===n?!e:e)),children:i(`board:question.other`)})]}),c[n]&&(0,$.jsx)(`textarea`,{"aria-label":i(`board:question.otherLabel`,{question:t.question}),maxLength:Dn.other,rows:2,disabled:u,value:r.other??``,placeholder:i(`board:question.otherPlaceholder`),className:`min-h-16 w-full resize-y rounded-(--r-md) border border-control bg-panel px-2.5 py-1.5 text-sm text-content outline-none focus:border-focus focus:ring-3 focus:ring-focus-ring max-[650px]:text-[16px]`,onChange:e=>{let t=e.target.value;s(e=>e.map((e,r)=>r===n?{...e,other:t}:e))},onKeyDown:e=>{e.key===`Enter`&&(e.metaKey||e.ctrlKey)&&h&&(e.preventDefault(),g({answers:_(a)}))}})]},`${e.id}-${n}`)}),f&&(0,$.jsx)(`p`,{role:`alert`,className:`text-xs text-[var(--danger)]`,children:f}),(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2`,children:[(0,$.jsx)(Y,{type:`button`,variant:`ghost`,size:`sm`,disabled:u,"data-question-skip":!0,className:`pointer-coarse:min-h-11`,onClick:()=>void g({skip:!0}),children:i(`board:question.skip`)}),(!m||c[0])&&(0,$.jsx)(Y,{type:`button`,size:`sm`,disabled:u||!h,loading:u,"data-question-submit":!0,className:`pointer-coarse:min-h-11`,onClick:()=>void g({answers:_(a)}),children:i(`board:question.submit`)})]})]})}async function la({templatePrompt:e,configureHint:t,notify:n,onOpenModelSettings:r,onInsertPrompt:i}){try{let a=await S(`/api/visual/models`);a.image||a.video?i(e):(n?.(t),r?.())}catch{i(e)}}function ua(e){return(e.target instanceof Element?e.target:null)?.closest(`[data-shortcut-recorder], [role="dialog"], [role="alertdialog"], [role="menu"], [role="listbox"], .xterm, .terminal-xterm, .terminal-panel, [data-terminal]`)?!0:Array.from(document.querySelectorAll(`[role="dialog"], [role="alertdialog"], dialog[open]`)).some(e=>e.getClientRects().length>0)}function da(e){let t=(0,Q.useRef)(e);t.current=e;let{enabled:n,binding:r}=e;(0,Q.useEffect)(()=>{if(!n||!r)return;let e=null,i=null,a=()=>{e=null,i&&(i=null,t.current.onCancel())},o=n=>{if(i&&n.key===`Escape`&&!n.isComposing){a(),n.preventDefault();return}!t.current.enabled||n.defaultPrevented||n.isComposing||n.keyCode===229||n.repeat||e||document.visibilityState===`hidden`||ua(n)||!_n(n,r)||(e=n.code,t.current.onStart()&&(i={code:n.code,ctrl:n.ctrlKey,meta:n.metaKey,alt:n.altKey,shift:n.shiftKey},n.preventDefault()))},s=n=>{n.code===e&&(e=null),i&&(n.code===i.code||i.ctrl&&(!n.ctrlKey||n.code.startsWith(`Control`))||i.meta&&(!n.metaKey||n.code.startsWith(`Meta`))||i.alt&&(!n.altKey||n.code.startsWith(`Alt`))||i.shift&&(!n.shiftKey||n.code.startsWith(`Shift`)))&&(i=null,t.current.onRelease())},c=()=>{document.visibilityState===`hidden`&&a()};return window.addEventListener(`keydown`,o),window.addEventListener(`keyup`,s,!0),window.addEventListener(`blur`,a),document.addEventListener(`visibilitychange`,c),()=>{window.removeEventListener(`keydown`,o),window.removeEventListener(`keyup`,s,!0),window.removeEventListener(`blur`,a),document.removeEventListener(`visibilitychange`,c),a()}},[n,r])}function fa(e){if(!e.length)return 0;let t=0;for(let n=0;n<e.length;n+=1)t+=e[n]*e[n];let n=Math.sqrt(t/e.length);return n<.0056?0:Math.min(1,Math.sqrt(n)*2.6)}function pa(e=.35){let t=0;return{push(n){return t=t*(1-e)+n*e,t},reset(){t=0}}}function ma(e,t=140){let n=e.trim();return n.length>t?`${n.slice(0,t-1)}…`:n}var ha=16e3,ga=20,_a=ha*ga/1e3;function va(e,{onsetMs:t=80,minVoicedMs:n=160,silenceMs:r=900}={}){for(let e of[t,n,r])if(!Number.isFinite(e)||e<=0)throw Error(`Invalid VAD endpoint duration`);let i=e(),a=new Int16Array(_a),o=0,s=0,c=0,l=0,u=!1,d=!1,f=!1,p=()=>u&&c*ga>=n;return{get hasSpeech(){return p()},acceptPcm(e){if(f||d)return!1;for(let n=0;n<e.length;n+=1){let f=Number.isFinite(e[n])?Math.max(-1,Math.min(1,e[n])):0;if(a[o++]=f*(f<0?32768:32767),o!==_a)continue;o=0;let m=i.processFrame(a);if(m<0)throw Error(`VAD frame processing failed`);if(m===1)s+=1,c+=1,l=0,s*ga>=t&&(u=!0);else if(s=0,l+=1,u||(c=0),l*ga>=r){if(p())return d=!0,!0;u=!1,c=0}}return!1},reset(){f||(i.destroy(),i=e(),o=s=c=l=0,u=d=!1,a.fill(0))},dispose(){f||(f=!0,o=0,i.destroy())}}}async function ya(e={}){let{default:n,VADMode:r}=await t(async()=>{let{default:e,VADMode:t}=await import(`./embedded-D2rqyswH.js`);return{default:e,VADMode:t}},[]),i=await n();return va(()=>new i(e.mode??r.AGGRESSIVE,ha),e)}var ba=()=>new DOMException(`Speech setup cancelled.`,`AbortError`);function xa(e){let[t,n]=(0,Q.useState)(null),[r,i]=(0,Q.useState)(!1),[a,o]=(0,Q.useState)(!1),[s,c]=(0,Q.useState)(``),l=(0,Q.useRef)(null),u=(0,Q.useRef)(!1),d=(0,Q.useRef)(0),f=(0,Q.useRef)(0),p=(0,Q.useRef)(0),m=(0,Q.useRef)(e);m.current=e;let h=(0,Q.useCallback)(e=>{d.current++,f.current++;let t=l.current;l.current=null,t&&(t.signal.removeEventListener(`abort`,t.abort),e?t.reject(e):t.resolve()),u.current&&(i(!1),o(!1))},[]),_=(0,Q.useCallback)(e=>{u.current&&(n(e),c(``),l.current&&Dr(e,m.current).every(e=>e.status===`installed`)&&h())},[h]),v=(0,Q.useCallback)(async e=>{let t=d.current,n=++f.current,r=()=>u.current&&t===d.current&&n===f.current&&!e?.aborted;try{let t=await br(e);r()&&_(t)}catch(e){if(r())throw e}},[_]);(0,Q.useEffect)(()=>(u.current=!0,v().catch(()=>{}),()=>{u.current=!1,h(ba())}),[h,v]),(0,Q.useEffect)(()=>{if(!r)return;let e=new AbortController,t,n=async()=>{try{await v(e.signal)}catch(t){e.signal.aborted||c(t instanceof Error?t.message:String(t))}finally{e.signal.aborted||(t=setTimeout(()=>void n(),750))}};return n(),()=>{e.abort(),clearTimeout(t)}},[r,v]);let y=(0,Q.useCallback)(async e=>{if(g(e),!u.current)throw ba();h(ba());let t=++f.current;return new Promise((n,r)=>{let a=()=>{l.current===o&&h(e.reason||ba())},o={signal:e,abort:a,resolve:n,reject:r};if(l.current=o,e.addEventListener(`abort`,a,{once:!0}),e.aborted){a();return}br(e).then(n=>{!u.current||l.current!==o||e.aborted||(t===f.current&&_(n),l.current===o&&i(!0))},e=>{l.current===o&&h(e)})})},[_,h]),b=(0,Q.useCallback)(async e=>{let t=d.current,n=++p.current,r=()=>u.current&&t===d.current&&n===p.current;o(!0),c(``);try{await e(),r()&&await v()}catch(e){r()&&c(e instanceof Error?e.message:String(e))}finally{r()&&o(!1)}},[v]);return{catalog:t,open:r,loading:a,error:s,selectedVoice:t?.defaults.voice||``,ensureReady:y,models:t?Dr(t,e):[],show:()=>{h(ba()),i(!0),c(``)},close:()=>h(ba()),download:e=>b(()=>Tr(e)),cancelDownload:e=>b(()=>wr(e)),downloadAll:()=>b(async()=>{if(t)for(let e of Dr(t,m.current))[`installed`,`downloading`,`verifying`].includes(e.status)||await Tr(e.id)})}}var Sa=8388608;function Ca(e,t){return g(t),new Promise((n,r)=>{let i=()=>r(_(t));t.addEventListener(`abort`,i,{once:!0}),e.then(n,r).finally(()=>t.removeEventListener(`abort`,i))})}var wa=10,Ta=500;async function Ea(e,t,n,r){for(let i=0;;i+=1){let a=await fetch(`/api/speech/synthesize`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({text:e,voiceId:t,requestId:n}),signal:r});if(a.status!==409||i>=wa)return a;let o=await a.json().catch(()=>({}));if(!o.error||!/busy/i.test(o.error))return a;await Ca(new Promise(e=>setTimeout(e,Ta)),r)}}async function Da(e){if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error||`Speech synthesis failed (${e.status}).`)}if(!e.headers.get(`content-type`)?.startsWith(`audio/wav`)||!e.body)throw Error(`Invalid speech audio response.`);let t=e.body.getReader(),n=[],r=0;try{for(;;){let{done:e,value:i}=await t.read();if(e)break;if(r+=i.byteLength,r>Sa)throw Error(`Speech audio exceeds the supported limit.`);n.push(i)}}finally{await t.cancel().catch(()=>{}),t.releaseLock()}if(r<44)throw Error(`Speech audio is empty.`);let i=new Uint8Array(r),a=0;for(let e of n)i.set(e,a),a+=e.length;return i.buffer}async function Oa(e,t,n,r){g(n);let i=h(n);try{await ka(e,t,i,r)}finally{i.abort(new DOMException(`Speech playback ended.`,`AbortError`)),i.dispose()}}async function ka(e,n,r,i){let{signal:a}=r,{speechSegments:o}=await Ca(t(()=>import(`./speech-text-BTwYi9Sb.js`),__vite__mapDeps([119,87,1,2,3,84,85,86,29])),a);g(a);let s=(typeof e==`string`?(async function*(){yield*o(e)})():(await Ca(t(()=>import(`./speech-stream-text-DF6aAUVb.js`),__vite__mapDeps([120,87,1,2,3,84,85,86,29,13,119])),a)).streamingSpeechSegments(e,a))[Symbol.asyncIterator](),c=!!window.__PISPER_MOBILE_APP__,l=new Set,u,d,f,p=e=>{(c?Sr(`mobile_cancel_speech`,{requestId:e}):S(`/api/speech/cancel`,{method:`POST`,body:{requestId:e},timeout:3e3})).catch(()=>{})},m=()=>{for(let e of l)p(e);try{d?.stop()}catch{}f?.(a.reason||new DOMException(`Speech playback cancelled.`,`AbortError`))};a.addEventListener(`abort`,m,{once:!0});let _=e=>{g(a);let t=crypto.randomUUID();l.add(t);let r=(async()=>{if(c){let r=await Sr(`mobile_synthesize_speech`,{text:e,voiceId:n,requestId:t});if(a.aborted&&(p(t),g(a)),!r||typeof r.audioId!=`string`||!r.audioId.trim()||r.audioId.length>128||!Number.isInteger(r.sampleRate)||r.sampleRate<8e3||r.sampleRate>48e3||!Number.isFinite(r.durationMs)||r.durationMs<=0||r.durationMs>45e3)throw Error(`Invalid native speech audio.`);return{requestId:t,native:r}}let r=h(a,6e4);try{let i=await Ea(e,n,t,r.signal);return{requestId:t,wav:await Da(i)}}finally{r.dispose()}})();return r.catch(()=>{}),r};try{if(!c){u=new AudioContext({sampleRate:24e3});let e;try{await Ca(Promise.race([u.resume(),new Promise((t,n)=>{e=setTimeout(()=>n(Error(`Audio playback is unavailable.`)),5e3)})]),a)}finally{clearTimeout(e)}}let e=async()=>{let e=await Ca(s.next(),a);return e.done?void 0:_(e.value)},t=e(),n=!1;for(;;){let r=await Ca(t,a);if(g(a),!r)break;if(t=e(),t.catch(()=>{}),n=!0,i?.(),r.native){if((await Ca(Sr(`mobile_play_speech`,{audioId:r.native.audioId,requestId:r.requestId}),a))?.completed!==!0)throw Error(`Speech playback was interrupted.`)}else{let e=await Ca(u.decodeAudioData(r.wav),a);if(g(a),e.numberOfChannels!==1||!Number.isFinite(e.duration)||e.duration<=0||e.duration>45)throw Error(`Invalid speech audio duration.`);let t=u.createBufferSource();d=t,t.buffer=e,t.connect(u.destination);try{await new Promise((e,n)=>{f=n,t.onended=()=>e(),t.start()})}finally{f=void 0,t.onended=null,t.disconnect(),d=void 0}}l.delete(r.requestId),g(a)}if(!n)throw Error(`The reply has no speakable text.`)}finally{a.removeEventListener(`abort`,m),r.abort(new DOMException(`Speech playback ended.`,`AbortError`)),s.return?.(void 0).catch(()=>{});for(let e of l)p(e);try{d?.stop()}catch{}await u?.close().catch(()=>{})}}var Aa={schemaVersion:1,scope:`Offline license texts and provenance notices for the catalogued speech resources and local derivatives. This document is not legal advice, commercial-use clearance, a complete training-data rights audit, or approval for redistribution or formal release. Packaging this small notice file does not package the large models or resolve pending obligations. Native sherpa binaries and their compiled or embedded dependencies require a separate license/linkage and source-delivery audit; switching TTS models does not prove the binaries contain no GPL components or satisfy their obligations.`,licenseIdsMeaning:`References identify retained license documents applicable to the described components or their stated source projects. Multiple references are not alternative dual-license choices and are not a complete SPDX expression. A repository declaration does not relicense unrelated bundled data.`,statusDefinitions:{confirmed:`The specific content or source match described in summary was verified; this is not a whole-chain rights guarantee.`,declared:`An upstream license declaration supports the classification, without a complete reproducible provenance proof.`,pending:`The listed provenance, rights, or distribution obligations remain unresolved even where a license declaration exists.`},pathScopes:{model:`Paths are relative to the original downloaded model root. A terminal /** matches every descendant; all other paths are exact.`,shared:`Paths are relative to the application's shared resource root.`},licenses:[{id:`apache-2.0`,name:`Apache License 2.0 (X-ASR source text)`,text:` Apache License
|
|
3
3
|
Version 2.0, January 2004
|
|
4
4
|
http://www.apache.org/licenses/
|
|
5
5
|
|
|
@@ -508,7 +508,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
508
508
|
## Dictionary. Further addictions and improvements are planned
|
|
509
509
|
## for forthcoming releases.
|
|
510
510
|
##
|
|
511
|
-
`,sourceUrl:`https://raw.githubusercontent.com/myshell-ai/MeloTTS/209145371cff8fc3bd60d7be902ea69cbdb7965a/melo/text/cmudict.rep`,sha256:`08ee91f3c05c55160bdc599247ba53e5de8cc2597766fdb22b54a81cb24dd954`}],models:[{id:`x-asr-480ms-int8`,revision:`2026-06-05`,attribution:`X-ASR by Gilgamesh-J / GilgameshWind; trained using icefall and deployed with sherpa-onnx. The locked HF model card expressly covers model artifacts and declares Apache-2.0. The separately discovered GitHub license commit is not the locked HF revision. No root LICENSE or NOTICE was listed in the inspected HF tree; this is not proof that every historical distribution lacks NOTICE. Retain applicable upstream notices when found.`,archive:{url:`https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-x-asr-480ms-streaming-zipformer-transducer-zh-en-punct-int8-2026-06-05.tar.bz2`,sha256:`fa5f63d618e5a01526e275a358bb7772e403f84808a4769fba52cffd8160bf74`},groups:[{id:`xasr-weights`,pathScope:`model`,paths:[`encoder.int8.onnx`,`decoder.onnx`,`joiner.int8.onnx`],licenseIds:[`apache-2.0`],status:`pending`,summary:`Apache-2.0 is explicitly declared for X-ASR model artifacts. The sherpa export script describes icefall streaming ONNX export and INT8 quantization; installed file hashes match the catalog, but the 2026-06-05 archive-to-checkpoint/build identity is not established.`,pendingReasons:[`Exact checkpoint and source commits used to build the 2026-06-05 INT8 archive remain unverified; the export script downloads moving main URLs. Training-data rights are not fully audited.`],evidence:[{url:`https://hf-mirror.com/GilgameshWind/X-ASR-zh-en/resolve/689ff18c584d29910da37b6fe904db0c1489c9d1/README.md`,sha256:`7acc6f439d3e39e46de4298ccf8a8f6a483fdc5f9f5d08e61422b63760ec37b1`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/v1.13.7/scripts/zipformer-transducer/x-asr/export-streaming.sh`,sha256:`63b018fe72a29e9a41c6d4e358085b5ad1614e021c0d9f3c05a2d11f1dff0d81`}]},{id:`xasr-tokens`,pathScope:`model`,paths:[`tokens.txt`],licenseIds:[`apache-2.0`],status:`pending`,summary:`X-ASR token resource, not the SentencePiece or sherpa software. The punctuation export block downloads X-ASR-zh-en/zipformer/data/lang_5000_with_punctuation/tokens.txt. Catalog content SHA256: b818a60878b9aae978cbb8ad594acbd403d76d1af2e31ef4197c84e2dbdba27c.`,pendingReasons:[`The historical source revision for the token file in the 2026-06-05 archive is not pinned by the export script.`],evidence:[{url:`https://hf-mirror.com/GilgameshWind/X-ASR-zh-en/resolve/689ff18c584d29910da37b6fe904db0c1489c9d1/README.md`,sha256:`7acc6f439d3e39e46de4298ccf8a8f6a483fdc5f9f5d08e61422b63760ec37b1`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/v1.13.7/scripts/zipformer-transducer/x-asr/export-streaming.sh`,sha256:`63b018fe72a29e9a41c6d4e358085b5ad1614e021c0d9f3c05a2d11f1dff0d81`}]},{id:`xasr-bpe`,pathScope:`model`,paths:[`bpe.model`],licenseIds:[`apache-2.0`],status:`pending`,summary:`X-ASR BPE resource. The export script renames X-ASR-zh-en/zipformer/data/lang_5000_with_punctuation/bpe_punc.model to bpe.model. Its license classification comes from X-ASR, not from the software that reads the SentencePiece format.`,pendingReasons:[`The historical BPE source commit and exact archive build provenance remain unverified.`],evidence:[{url:`https://hf-mirror.com/GilgameshWind/X-ASR-zh-en/resolve/689ff18c584d29910da37b6fe904db0c1489c9d1/README.md`,sha256:`7acc6f439d3e39e46de4298ccf8a8f6a483fdc5f9f5d08e61422b63760ec37b1`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/v1.13.7/scripts/zipformer-transducer/x-asr/export-streaming.sh`,sha256:`63b018fe72a29e9a41c6d4e358085b5ad1614e021c0d9f3c05a2d11f1dff0d81`}]},{id:`xasr-bpe-vocab`,pathScope:`shared`,paths:[`speech-resources/xasr-bpe.vocab`],licenseIds:[`apache-2.0`],status:`pending`,summary:`Modified by Pisper: extracted the ordered SentencePiece pieces and scores as UTF-8 piece<TAB>score<LF> lines. This local text derivative retains the source resource license classification; it is not newly licensed as Pisper-owned model data. Original and derived hashes and generator are bound by xasr-bpe-extraction below.`,pendingReasons:[`The source BPE historical provenance remains pending as described in xasr-bpe. A text extraction does not resolve upstream rights.`],evidence:[{url:`https://hf-mirror.com/GilgameshWind/X-ASR-zh-en/resolve/689ff18c584d29910da37b6fe904db0c1489c9d1/README.md`,sha256:`7acc6f439d3e39e46de4298ccf8a8f6a483fdc5f9f5d08e61422b63760ec37b1`}]}],modifications:[{id:`xasr-bpe-extraction`,groupIds:[`xasr-bpe-vocab`],modifiedBy:`Pisper`,summary:`Local BPE text extraction, not retraining. The generator identity records the inspected repository implementation, not a claim about a historical upstream build date.`,source:{path:`bpe.model`,bytes:119265,sha256:`f87a38025a5fdd1e4e9591f6a44bb81295097ce0b80df6f4ab9f44e52c64ca5f`},derived:{path:`speech-resources/xasr-bpe.vocab`,bytes:61562,sha256:`01381aa0c3065832cb8d7462d529e3079a99be56c955ce93b4cb9b78e8aa34e5`},generator:{path:`scripts/speech-bpe.mjs`,sha256:`a1c85731aa3e0be89f04acc79830db784a9d43edb8af9f4fb723bb45bd725786`,method:`sentencePieceModelToVocab decodes ordered protobuf ModelProto.pieces and emits each piece, a tab, its finite score, and a newline without changing the BPE model.`}}]},{id:`vits-melo-tts-zh_en`,revision:`a0d5c6a264c0ef92d70d8661d8cc502d79627cd6`,archive:{url:`https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-melo-tts-zh_en.tar.bz2`,bytes:167006755,sha256:`e58351ed7149f290a54534538badd4077cdbe6fddc964b24d0bee870415d1514`},attribution:`MeloTTS by MyShell.ai; sherpa-onnx ONNX conversion. The retained software license is Copyright (c) 2024 MyShell.ai, MIT. The neural-weight repository separately declares MIT; dictionary and FST resources have separate declarations and pending provenance. Pisper selects the original single female voice via public sid 0 and uses the same original FP32 ONNX, tokens, mixed-language lexicon, dictionary and normalization files on Desktop, Android and iOS. No retraining, quantization, graph/metadata patch or voice-subset derivative is made. The unused new_heteronym.fst and 133-byte model.int8.onnx Git LFS pointer in the transport archive are drained but not installed; retained model files are unchanged. These choices do not imply upstream/speaker endorsement, redistribution approval or completed native-platform acceptance.`,groups:[{id:`melo-weights`,pathScope:`model`,paths:[`model.onnx`],licenseIds:[`mit-melo`],status:`pending`,summary:`The myshell-ai/MeloTTS-Chinese model card at af5d207a364ea4208c6f589c89f57f88414bdd16 declares license: mit for the model repository; this is separate evidence from the MeloTTS software MIT license. The sherpa conversion package carries the exact MyShell.ai MIT text, and original ONNX metadata declares MIT license, melo-vits version 2, Chinese + English, n_speakers=1 and speaker_id=1. The conversion README explicitly describes a single female Chinese+English speaker. sherpa maps public sid 0 to the internal metadata speaker_id; Pisper does not change the graph, metadata or speaker embedding.`,pendingReasons:[`Exact historical checkpoint, training/conversion commits and reproducible archive build identity have not been established; the inspected conversion workflow uses moving upstream references. Training-data permissions, individual speaker consent and applicable personality/publicity rights are not fully audited. The discovered model card revision is evidence of a declaration, not proof of the historical conversion input.`],evidence:[{url:`https://hf-mirror.com/myshell-ai/MeloTTS-Chinese/resolve/af5d207a364ea4208c6f589c89f57f88414bdd16/README.md`,sha256:`40b5b860bacbb3947cbef838719e660d2fe4961eba5b484290b4bedc0253e208`},{url:`https://raw.githubusercontent.com/myshell-ai/MeloTTS/209145371cff8fc3bd60d7be902ea69cbdb7965a/LICENSE`,sha256:`88a50e5a02bbc2a5c2f084dc19da751aa97b1690f5fda76cd8005c8634d1ca70`},{url:`https://hf-mirror.com/csukuangfj/vits-melo-tts-zh_en/resolve/a0d5c6a264c0ef92d70d8661d8cc502d79627cd6/README.md`,sha256:`ae6e44dead53dfdbd5b4a77106226f3118eb910222b46cb5533a3860773fc6c7`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/scripts/melo-tts/export-onnx.py`,sha256:`c0be7727d59ad6ceaf39e909b4560b57e704091c69ac3fab6f2f2abfd931c916`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/scripts/melo-tts/run.sh`,sha256:`e2afb98d9028eded2983f780468337fc019a8306db926f89e3bdeed18af867bb`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/sherpa-onnx/csrc/offline-tts-vits-model.cc`,sha256:`060907349036d63b60d035843defe7078b83c8099e0d4de323446c7db0d653d0`}]},{id:`melo-tokens`,pathScope:`model`,paths:[`tokens.txt`],licenseIds:[`mit-melo`,`apache-2.0-sherpa`],status:`declared`,summary:`The sherpa Melo export writes enumerated model.hps symbols to tokens.txt. The original 655-byte token file is retained unchanged. Melo software is MIT; sherpa conversion code is Apache-2.0. These code declarations do not independently establish all underlying training-data rights.`,pendingReasons:[],evidence:[{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/scripts/melo-tts/export-onnx.py`,sha256:`c0be7727d59ad6ceaf39e909b4560b57e704091c69ac3fab6f2f2abfd931c916`},{url:`https://raw.githubusercontent.com/myshell-ai/MeloTTS/209145371cff8fc3bd60d7be902ea69cbdb7965a/LICENSE`,sha256:`88a50e5a02bbc2a5c2f084dc19da751aa97b1690f5fda76cd8005c8634d1ca70`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/LICENSE`,sha256:`cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30`}]},{id:`melo-cppjieba-dictionary`,pathScope:`model`,paths:[`dict/hmm_model.utf8`,`dict/idf.utf8`,`dict/jieba.dict.utf8`,`dict/pos_dict/char_state_tab.utf8`,`dict/pos_dict/prob_emit.utf8`,`dict/pos_dict/prob_start.utf8`,`dict/pos_dict/prob_trans.utf8`,`dict/README.md`,`dict/stop_words.utf8`],licenseIds:[`mit-cppjieba`],status:`confirmed`,summary:`Nine ordinary dictionary/README files are byte-identical to the separately HTTPS-downloaded CppJieba sherpa-onnx-2024-04-19 dict archive. The exact release source MIT license retains Copyright (c) 2013. This confirms the documented source-content match, not a whole-chain data-rights guarantee. The small Melo user.dict.utf8 is separately classified and is NOT the 829194-byte pypinyin-derived user dictionary from that source archive.`,pendingReasons:[],evidence:[{url:`https://ghfast.top/https://github.com/csukuangfj/cppjieba/releases/download/sherpa-onnx-2024-04-19/dict.tar.bz2`,sha256:`35c3877c9b9221a5b2d69bbf57d5dbf1ccbe5b7684c60eb42f93db6b2d494f26`},{url:`https://raw.githubusercontent.com/csukuangfj/cppjieba/f03dd931a00330c279c8590275850fd1f6749a18/LICENSE`,sha256:`ba898a14f729ba5e9965da34e3eecd5edd3795f2cc5d7c923b815ba79bb851b0`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/.github/workflows/export-melo-tts-to-onnx.yaml`,sha256:`fc90fc412fd6f3c8a7d593743372a077dd63b2c8ce0780ed9c3a7e05cc8b659e`}]},{id:`melo-user-dictionary`,pathScope:`model`,paths:[`dict/user.dict.utf8`],licenseIds:[`mit-cppjieba`,`mit-melo`],status:`pending`,summary:`Melo ships an unchanged 49-byte user dictionary containing four entries. It matches the locked Melo HF file but differs from the separately downloaded CppJieba release user dictionary. The package MIT text and CppJieba project MIT declaration are retained as source declarations, not proof that either automatically licenses every edit. This file is not attributed to the unrelated historical pypinyin-derived dictionary.`,pendingReasons:[`The exact historical source commit, modifier and license coverage for this 49-byte replacement have not been identified. Retain applicable modifier notices when established.`],evidence:[{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/.github/workflows/export-melo-tts-to-onnx.yaml`,sha256:`fc90fc412fd6f3c8a7d593743372a077dd63b2c8ce0780ed9c3a7e05cc8b659e`},{url:`https://raw.githubusercontent.com/csukuangfj/cppjieba/f03dd931a00330c279c8590275850fd1f6749a18/LICENSE`,sha256:`ba898a14f729ba5e9965da34e3eecd5edd3795f2cc5d7c923b815ba79bb851b0`},{url:`https://raw.githubusercontent.com/myshell-ai/MeloTTS/209145371cff8fc3bd60d7be902ea69cbdb7965a/LICENSE`,sha256:`88a50e5a02bbc2a5c2f084dc19da751aa97b1690f5fda76cd8005c8634d1ca70`},{url:`https://huggingface.co/csukuangfj/vits-melo-tts-zh_en/resolve/a0d5c6a264c0ef92d70d8661d8cc502d79627cd6/dict/user.dict.utf8`,sha256:`495bbf49270408a1234690e1e6a97328f30a482a7a72aa769e8a12e8714b0c62`}]},{id:`melo-english-lexicon`,pathScope:`model`,paths:[`lexicon.txt`],licenseIds:[`cmudict-0.6-1998`,`mit-melo`,`apache-2.0-sherpa`],status:`pending`,summary:`The English portion is generated by the sherpa Melo export from melo.text.english.eng_dict and refine_syllables, lowercasing words and adding language tone offsets plus kaldi/SF entries. The inspected Melo source reads cmudict.rep or a cached pickle. cmudict.rep contains its own Copyright 1998 Carnegie Mellon University unrestricted research/commercial permission and attribution notice, retained verbatim in cmudict-0.6-1998. This is NOT a substitution of a modern CMUdict BSD license. The retained notice hash covers the complete original comment header; the evidence hash covers the complete 3969309-byte source file. No package script or pickle was executed.`,pendingReasons:[`The precise historical dictionary/cache inputs and all intervening modifications used for this lexicon have not been pinned or reproduced. Trace cached-data equivalence and retain applicable original and modifier notices.`],evidence:[{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/scripts/melo-tts/export-onnx.py`,sha256:`c0be7727d59ad6ceaf39e909b4560b57e704091c69ac3fab6f2f2abfd931c916`},{url:`https://raw.githubusercontent.com/myshell-ai/MeloTTS/209145371cff8fc3bd60d7be902ea69cbdb7965a/melo/text/english.py`,sha256:`28527f574511bfc13fe1f2f6bbb5bfe4072c06e1c7e9b69598138aef81b9905b`},{url:`https://raw.githubusercontent.com/myshell-ai/MeloTTS/209145371cff8fc3bd60d7be902ea69cbdb7965a/melo/text/cmudict.rep`,sha256:`d127b5ce8b8e695732701e8efde04b9b0fa11991218b1fb9d21bd0c9264636aa`},{url:`https://raw.githubusercontent.com/myshell-ai/MeloTTS/209145371cff8fc3bd60d7be902ea69cbdb7965a/LICENSE`,sha256:`88a50e5a02bbc2a5c2f084dc19da751aa97b1690f5fda76cd8005c8634d1ca70`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/LICENSE`,sha256:`cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30`}]},{id:`melo-chinese-lexicon`,pathScope:`model`,paths:[`lexicon.txt`],licenseIds:[`mit-pypinyin`,`mit-melo`,`apache-2.0-sherpa`],status:`pending`,summary:`The Chinese portion is generated by the sherpa Melo export from pypinyin character/phrase dictionaries, lazy_pinyin and the Melo pinyin-to-symbol map. Melo code is MIT, sherpa conversion code Apache-2.0, and pypinyin declares MIT. Those software declarations do not relicense external dictionary inputs. The same 6837671-byte mixed-language lexicon is used unchanged on every platform.`,pendingReasons:[`Pin historical pypinyin versions, character/phrase JSON data and Melo phoneme mapping, reproduce the output and trace the actual underlying source-data terms. No particular Zdic, CC-CEDICT or Unihan license is asserted without proof of the actual input chain.`],evidence:[{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/scripts/melo-tts/export-onnx.py`,sha256:`c0be7727d59ad6ceaf39e909b4560b57e704091c69ac3fab6f2f2abfd931c916`},{url:`https://raw.githubusercontent.com/mozillazg/python-pinyin/8595294b1a97845e30f11ecfdb3caa4e61ac3988/pypinyin/pinyin_dict.py`,sha256:`245c1f70509432b289cde1f938157cd5ff1372d1d083b577d5fab72b4dfcda08`},{url:`https://raw.githubusercontent.com/mozillazg/python-pinyin/8595294b1a97845e30f11ecfdb3caa4e61ac3988/pypinyin/phrases_dict.py`,sha256:`3f6f39bbca68d8d1676ea463cd4620b934b03160cc5042fb9d9007b8f3a80b9e`},{url:`https://raw.githubusercontent.com/mozillazg/python-pinyin/8595294b1a97845e30f11ecfdb3caa4e61ac3988/LICENSE.txt`,sha256:`1e6c90014b4912815c296ee64bb6f6280af47e6d4c5d80e86232dfc5defe764c`},{url:`https://raw.githubusercontent.com/myshell-ai/MeloTTS/209145371cff8fc3bd60d7be902ea69cbdb7965a/LICENSE`,sha256:`88a50e5a02bbc2a5c2f084dc19da751aa97b1690f5fda76cd8005c8634d1ca70`}]},{id:`melo-normalization-fsts`,pathScope:`model`,paths:[`date.fst`,`number.fst`,`phone.fst`],licenseIds:[`apache-2.0-sherpa`],status:`pending`,summary:`All three FSTs are byte-identical to the separately downloaded data/date.fst, data/number.fst and data/phone.fst at csukuangfj/icefall-tts-aishell3-vits-low-2024-04-06 revision 57345c004e13ed640e408c4c29ab56187b18f065, the source repository named by the Melo packaging workflow. That source model card declares Apache-2.0; the full Apache text is retained from sherpa. Neither the OpenFst software license nor the Melo neural-weight MIT declaration independently grants rights to these FST data.`,pendingReasons:[`Exact editable generation rules, compiler/source revisions, underlying data provenance and applicable author/modifier notices remain unverified. No standalone FST LICENSE/NOTICE or complete reproducible source chain was found in the inspected source tree.`],evidence:[{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/.github/workflows/export-melo-tts-to-onnx.yaml`,sha256:`fc90fc412fd6f3c8a7d593743372a077dd63b2c8ce0780ed9c3a7e05cc8b659e`},{url:`https://hf-mirror.com/csukuangfj/icefall-tts-aishell3-vits-low-2024-04-06/resolve/57345c004e13ed640e408c4c29ab56187b18f065/README.md`,sha256:`98b45ea81164d1e1a1dd82255207053b15cd6c69d922a1c5cf3387ce604d4b74`},{url:`https://hf-mirror.com/csukuangfj/icefall-tts-aishell3-vits-low-2024-04-06/resolve/57345c004e13ed640e408c4c29ab56187b18f065/data/date.fst`,sha256:`eb8aa079ae3cb81d8f4404992f39d61a0cb990947512b5b8d1e54d1f6980e718`},{url:`https://hf-mirror.com/csukuangfj/icefall-tts-aishell3-vits-low-2024-04-06/resolve/57345c004e13ed640e408c4c29ab56187b18f065/data/number.fst`,sha256:`743f402181fcfebf76cc2f0546b71fa26476e626fbe4e460fb7b4c3a7a8bd5bd`},{url:`https://hf-mirror.com/csukuangfj/icefall-tts-aishell3-vits-low-2024-04-06/resolve/57345c004e13ed640e408c4c29ab56187b18f065/data/phone.fst`,sha256:`1ac2b6fa56b1442320c4de7db08353bab8963a2b57f365eebcdd3a2d3562f8d7`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/LICENSE`,sha256:`cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30`}]},{id:`melo-package-notices`,pathScope:`model`,paths:[`LICENSE`,`README.md`],licenseIds:[`mit-melo`],status:`confirmed`,summary:`LICENSE is byte-identical to the original MyShell.ai MIT text (Copyright (c) 2024 MyShell.ai), including its exact final newline behavior. README explicitly identifies the single female Chinese+English speaker. The package-level MIT file is not a blanket grant for every bundled dictionary or FST. No upstream NOTICE was listed in the inspected conversion and weight repository trees; this is not proof that none ever existed.`,pendingReasons:[],evidence:[{url:`https://raw.githubusercontent.com/myshell-ai/MeloTTS/209145371cff8fc3bd60d7be902ea69cbdb7965a/LICENSE`,sha256:`88a50e5a02bbc2a5c2f084dc19da751aa97b1690f5fda76cd8005c8634d1ca70`},{url:`https://hf-mirror.com/csukuangfj/vits-melo-tts-zh_en/resolve/a0d5c6a264c0ef92d70d8661d8cc502d79627cd6/README.md`,sha256:`ae6e44dead53dfdbd5b4a77106226f3118eb910222b46cb5533a3860773fc6c7`}]}],modifications:[]}]},Ea=Ta,Da=e=>Ta.models.some(t=>t.id===e);function Oa({modelId:e,modelName:t,returnFocus:n,onClose:r}){let{t:i}=o(),a=Ea.models.find(t=>t.id===e);if(!a)return null;let s=new Set(a.groups.flatMap(e=>e.licenseIds)),c=Ea.licenses.filter(e=>s.has(e.id));return(0,$.jsx)(Un,{open:!0,onOpenChange:e=>{e||r()},children:(0,$.jsxs)(Bn,{className:`z-[130] max-h-[85dvh] min-w-0 grid-cols-1 overflow-y-auto rounded-lg sm:max-w-2xl`,overlayClassName:`z-[129]`,onEscapeKeyDown:e=>e.stopPropagation(),onCloseAutoFocus:e=>{e.preventDefault(),n.current?.isConnected&&n.current.focus()},children:[(0,$.jsxs)(Hn,{children:[(0,$.jsx)(Vn,{children:i(`chat:speechModels.notices`)}),(0,$.jsxs)(zn,{className:`break-words`,children:[t,` (`,a.revision,`)`]})]}),(0,$.jsx)(`p`,{className:`break-words text-sm text-muted-foreground`,children:Ea.scope}),(0,$.jsx)(`p`,{className:`break-words text-sm text-muted-foreground`,children:Ea.licenseIdsMeaning}),(0,$.jsx)(`div`,{className:`min-w-0 divide-y divide-stroke-soft`,children:a.groups.map(e=>(0,$.jsxs)(`details`,{className:`min-w-0 py-3`,children:[(0,$.jsxs)(`summary`,{className:`cursor-pointer break-words text-sm font-medium`,children:[e.id,e.status===`pending`&&(0,$.jsx)(`span`,{className:`ml-2 text-xs font-normal text-warning-strong`,children:i(`chat:speechModels.provenancePending`)})]}),(0,$.jsxs)(`div`,{className:`mt-3 min-w-0 space-y-3 text-sm`,children:[(0,$.jsx)(`p`,{className:`break-words`,children:e.summary}),e.pendingReasons.map(e=>(0,$.jsx)(`p`,{className:`break-words text-muted-foreground`,children:e},e)),(0,$.jsx)(`pre`,{className:`whitespace-pre-wrap break-all text-xs`,children:JSON.stringify({pathScope:e.pathScope,paths:e.paths,licenseIds:e.licenseIds,evidence:e.evidence},null,2)})]})]},e.id))}),(0,$.jsxs)(`details`,{className:`min-w-0 border-t pt-3`,children:[(0,$.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium`,children:i(`chat:speechModels.modifications`)}),(0,$.jsx)(`pre`,{className:`mt-3 whitespace-pre-wrap break-all text-xs`,children:JSON.stringify(a.modifications,null,2)})]}),c.map(e=>(0,$.jsxs)(`details`,{className:`min-w-0 border-t pt-3`,children:[(0,$.jsxs)(`summary`,{className:`cursor-pointer break-words text-sm font-medium`,children:[e.name,` (`,e.id,`)`]}),(0,$.jsx)(`pre`,{className:`mt-3 whitespace-pre-wrap break-words text-xs`,children:e.text})]},e.id)),(0,$.jsx)(`div`,{className:`flex justify-end border-t pt-3`,children:(0,$.jsxs)(qt,{children:[(0,$.jsx)(Gt,{asChild:!0,children:(0,$.jsx)(Y,{size:`icon-sm`,variant:`outline`,onClick:()=>{let e=new Blob([JSON.stringify({...Ea,models:[a],licenses:c},null,2)],{type:`application/json;charset=utf-8`}),t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=`${a.id}-notices.json`,n.click(),window.setTimeout(()=>URL.revokeObjectURL(t),0)},"aria-label":i(`chat:speechModels.downloadNotices`),children:(0,$.jsx)(Te,{})})}),(0,$.jsx)(Kt,{children:i(`chat:speechModels.downloadNotices`)})]})})]})})}var ka=e=>`${new Intl.NumberFormat(void 0,{maximumFractionDigits:1}).format(e/1048576)} MiB`;function Aa({manager:e,onClose:t}){let{t:n}=o(),[r,i]=(0,Q.useState)(!1),[a,s]=(0,Q.useState)(``),[c,l]=(0,Q.useState)(null),u=(0,Q.useRef)(null),d=(0,Q.useRef)(null),f=()=>{u.current?.abort(),u.current=null,i(!1)};(0,Q.useEffect)(()=>(e.open||(u.current?.abort(),u.current=null,i(!1),l(null)),()=>{u.current?.abort(),u.current=null}),[e.open]);let p={"not-installed":n(`chat:speechModels.notInstalled`),downloading:n(`chat:speechModels.downloading`),verifying:n(`chat:speechModels.verifying`),installed:n(`chat:speechModels.installed`),cancelled:n(`chat:speechModels.cancelled`),error:n(`chat:speechModels.failed`)},m=e.models.flatMap(e=>e.voices||[]),h=m.find(t=>t.id===e.selectedVoice),g=e.models.some(e=>e.kind===`tts`&&e.status===`installed`),_=e.models.filter(e=>e.status!==`installed`),v=_.some(e=>[`downloading`,`verifying`].includes(e.status)),y=()=>{l(null),f(),e.close(),t()},b=async()=>{if(u.current){f();return}if(!h||!g||_.length)return;let e=new AbortController;u.current=e,i(!0),s(``);try{await Ca(h.language===`en`?n(`chat:speechModels.previewEnglish`):n(`chat:speechModels.previewChinese`),h.id,e.signal)}catch(t){e.signal.aborted||s(t instanceof Error?t.message:String(t))}finally{u.current===e&&(u.current=null,i(!1))}};return(0,$.jsxs)(Un,{open:e.open,onOpenChange:e=>{e||y()},children:[(0,$.jsxs)(Bn,{className:`z-[110] max-h-[85dvh] overflow-y-auto sm:max-w-md`,overlayClassName:`z-[109]`,onEscapeKeyDown:e=>e.stopPropagation(),children:[(0,$.jsxs)(Hn,{children:[(0,$.jsx)(Vn,{children:n(`chat:speechModels.title`)}),(0,$.jsx)(zn,{className:`sr-only`,children:n(`chat:speechModels.title`)})]}),!e.catalog&&!e.error&&(0,$.jsx)(ft,{className:`mx-auto my-4 size-5 animate-spin`,"aria-label":n(`chat:speechModels.loading`)}),(0,$.jsx)(`div`,{className:`min-w-0 divide-y divide-stroke-soft`,children:e.models.map(t=>{let r=[`downloading`,`verifying`].includes(t.status),i=t.totalBytes?Math.min(100,Math.floor(t.downloadedBytes/t.totalBytes*100)):0,a=t.license?.url.startsWith(`https://`)?t.license.url:void 0;return(0,$.jsxs)(`section`,{className:`min-w-0 space-y-2 py-3 first:pt-0`,"aria-label":t.name,children:[(0,$.jsxs)(`div`,{className:`flex min-w-0 items-center gap-3`,children:[(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:t.kind===`asr`?n(`chat:speechModels.recognition`):n(`chat:speechModels.synthesis`)}),(0,$.jsx)(`div`,{className:`break-words font-medium`,children:t.name})]}),t.status===`installed`?(0,$.jsx)(ne,{className:`size-5 shrink-0 text-success`,"aria-label":p.installed}):(0,$.jsxs)(qt,{children:[(0,$.jsx)(Gt,{asChild:!0,children:(0,$.jsx)(Y,{size:`icon-sm`,variant:`outline`,disabled:e.loading,onClick:()=>{r?e.cancelDownload(t.id):e.download(t.id)},"aria-label":n(r?`chat:speechModels.cancelDownload`:`chat:speechModels.download`),children:r?(0,$.jsx)(wt,{}):(0,$.jsx)(Te,{})})}),(0,$.jsx)(Kt,{children:n(r?`chat:speechModels.cancelDownload`:`chat:speechModels.download`)})]})]}),(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-x-3 gap-y-1 text-xs text-muted-foreground`,children:[(0,$.jsx)(`span`,{children:p[t.status]}),(0,$.jsx)(`span`,{className:`tabular-nums`,children:r?`${ka(t.downloadedBytes)} / ${ka(t.totalBytes)}`:ka(t.totalBytes)})]}),r&&(0,$.jsx)(Bt,{value:i,"aria-label":t.name,"aria-valuenow":i,"aria-valuemin":0,"aria-valuemax":100}),t.error&&(0,$.jsx)(`p`,{role:`alert`,className:`break-words text-xs text-destructive`,children:t.error}),t.license&&(0,$.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-2`,children:[(0,$.jsx)(`a`,{href:a,target:`_blank`,rel:`noreferrer`,className:`block break-words text-xs text-muted-foreground underline underline-offset-2`,children:t.license.name}),Da(t.id)&&(0,$.jsxs)(qt,{children:[(0,$.jsx)(Gt,{asChild:!0,children:(0,$.jsx)(Y,{size:`icon-sm`,variant:`ghost`,"aria-label":n(`chat:speechModels.notices`),onClick:e=>{d.current=e.currentTarget,f(),l(t)},children:(0,$.jsx)(Mr,{})})}),(0,$.jsx)(Kt,{children:n(`chat:speechModels.notices`)})]})]})]},t.id)})}),m.length>0&&(0,$.jsx)(`div`,{className:`space-y-2 border-t pt-3`,children:(0,$.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`min-w-0 flex-1 text-sm`,children:n(`chat:speechModels.voice`)}),(0,$.jsxs)(qt,{children:[(0,$.jsx)(Gt,{asChild:!0,children:(0,$.jsx)(Y,{size:`icon`,variant:`outline`,disabled:!g||_.length>0,onClick:()=>void b(),"aria-label":n(r?`chat:speechModels.stopPreview`:`chat:speechModels.preview`),children:r?(0,$.jsx)(wt,{}):(0,$.jsx)(_t,{})})}),(0,$.jsx)(Kt,{children:n(r?`chat:speechModels.stopPreview`:`chat:speechModels.preview`)})]})]})}),(e.error||a)&&(0,$.jsx)(`p`,{role:`alert`,className:`break-words text-sm text-destructive`,children:e.error||a}),(0,$.jsx)(`div`,{className:`flex justify-end border-t pt-3`,children:_.length?(0,$.jsxs)(Y,{disabled:e.loading||v,onClick:()=>void e.downloadAll(),children:[(0,$.jsx)(Te,{}),n(`chat:speechModels.downloadAll`)]}):(0,$.jsx)(Y,{disabled:!e.catalog,onClick:y,children:n(`chat:speechModels.done`)})})]}),e.open&&c&&(0,$.jsx)(Oa,{modelId:c.id,modelName:c.name,returnFocus:d,onClose:()=>l(null)})]})}var ja=16e3,Ma=ja*60;function Na(e,t){let n=window.__TAURI__?.core?.invoke??window.__TAURI_INTERNALS__?.invoke;return n?n(e,t):Promise.reject(Error(`移动端原生桥不可用。`))}async function Pa(){if(!(typeof window>`u`||!window.__PISPER_MOBILE_APP__)&&(await Na(`mobile_request_microphone_permission`)).state!==`granted`)throw Error(`microphone_permission_denied`)}async function Fa(e){let t=await e.text().catch(()=>``);try{return JSON.parse(t).error||`语音转写失败 (${e.status})`}catch{return t||`语音转写失败 (${e.status})`}}function Ia(e){let t=e.reduce((e,t)=>e+t.length,0),n=new Float32Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;return n}var La=class{chatSessionId;chunks=[];pending=[];listeners=new Set;controller=null;sessionId=``;nativeRequestId=``;legacy=!1;flushTimer=0;sendChain=Promise.resolve();finished=!1;retainedSamples=0;terms=[];initializing=null;constructor(e=``){this.chatSessionId=e}start(){return this.initializing=this.initialize().catch(async e=>{throw await this.cancel(),e}),this.initializing}async initialize(){this.chunks=[],this.pending=[],this.finished=!1,this.retainedSamples=0;let e=new AbortController;this.controller=e,await x(),g(e.signal);let{loadSpeechHotwords:n,prepareSpeechSession:r}=await t(async()=>{let{loadSpeechHotwords:e,prepareSpeechSession:t}=await import(`./speech-session-B3-i8f64.js`).then(e=>e.r);return{loadSpeechHotwords:e,prepareSpeechSession:t}},__vite__mapDeps([122,1,2,3,13,12,5,6,7,8])),{terms:i,hotwords:a}=await n(this.chatSessionId,e.signal);this.terms=i;let o=await r({kinds:[`asr`],hotwords:a},e.signal);if(g(o.signal),o.signal.addEventListener(`abort`,()=>{this.controller===e&&!e.signal.aborted&&this.cancel()},{once:!0}),window.__PISPER_MOBILE_APP__)return;let s=h(e.signal,3e4);try{let t=await fetch(`/api/speech/stream/start`,{method:`POST`,headers:{"X-Pisper-Chat-Session":this.chatSessionId},signal:s.signal});if(!t.ok){if(t.status===404){this.legacy=!0;return}throw Error(await Fa(t))}let n=await t.json();if(!n.id)throw Error(`语音识别会话创建失败。`);e.signal.aborted&&(await fetch(`/api/speech/stream/cancel`,{method:`POST`,headers:{"X-Pisper-Speech-Session":n.id}}).catch(()=>{}),g(e.signal)),this.sessionId=n.id,this.pending.push(...this.chunks.splice(0)),this.retainedSamples=0,this.flushTimer=window.setInterval(()=>void this.flushPending(),1e3)}finally{s.dispose()}}acceptPcm(e){if(!e.length||this.finished)return!1;if(window.__PISPER_MOBILE_APP__||!this.sessionId){let t=Ma-this.retainedSamples;if(t<=0)return!0;let n=e.slice(0,t);return this.chunks.push(n),this.retainedSamples+=n.length,this.retainedSamples>=Ma}let t=e.slice();return this.sessionId&&!this.legacy?this.pending.push(t):this.chunks.push(t),!1}onPartial(e){return this.listeners.add(e),()=>this.listeners.delete(e)}emitPartial(e){if(e)for(let t of this.listeners)t(e)}flushPending(){return this.sendChain=this.sendChain.then(async()=>{if(!this.sessionId||this.legacy||this.finished||!this.pending.length)return;let e=Ia(this.pending.splice(0));try{let t=await fetch(`/api/speech/stream/chunk`,{method:`POST`,headers:{"Content-Type":`application/octet-stream`,"X-Pisper-Sample-Rate":String(ja),"X-Pisper-Speech-Session":this.sessionId},body:e.buffer,signal:this.controller?.signal});if(!t.ok)return;let n=await t.json();typeof n.text==`string`&&this.emitPartial(n.text.trim())}catch{}}),this.sendChain}async finishStreaming(){window.clearInterval(this.flushTimer),this.flushTimer=0,await this.flushPending(),this.finished=!0;let e=await fetch(`/api/speech/stream/finish`,{method:`POST`,headers:{"X-Pisper-Speech-Session":this.sessionId},signal:this.controller?.signal});if(!e.ok)throw Error(await Fa(e));let t=await e.json(),n=typeof t.text==`string`?t.text.trim():``;if(!n)throw Error(`未识别到语音内容。`);return this.emitPartial(n),n}async finishOneShot(e){if(window.__PISPER_MOBILE_APP__){let t=new Uint8Array(e.buffer),n=``,r=32768;for(let e=0;e<t.length;e+=r)n+=String.fromCharCode(...t.subarray(e,e+r));let i=this.controller;if(!i)throw new DOMException(`Speech recognition cancelled.`,`AbortError`);g(i.signal);let a=crypto.randomUUID();this.nativeRequestId=a;let o=await Na(`mobile_transcribe_pcm`,{pcmBase64:btoa(n),hotwords:yr(this.terms),requestId:a});if(g(i.signal),this.controller!==i)throw new DOMException(`Speech recognition cancelled.`,`AbortError`);let s=xr(typeof o.text==`string`?o.text.trim():``,this.terms);if(!s)throw Error(`未识别到语音内容。`);return this.emitPartial(s),s}let t=await fetch(`/api/speech/transcribe`,{method:`POST`,headers:{"Content-Type":`application/octet-stream`,"X-Pisper-Sample-Rate":String(ja),"X-Pisper-Chat-Session":this.chatSessionId},body:e.buffer,signal:this.controller?.signal});if(!t.ok)throw Error(await Fa(t));let n=await t.json(),r=typeof n.text==`string`?n.text.trim():``;if(!r)throw Error(`未识别到语音内容。`);return this.emitPartial(r),r}async finish(){if(await this.initializing,!this.controller)throw Error(`语音识别尚未启动。`);if(this.sessionId&&!this.legacy)return this.finishStreaming();this.finished=!0;let e=Ia(this.chunks);if(!e.length)throw Error(`没有采集到语音。`);return this.finishOneShot(e)}async cancel(){if(this.finished=!0,window.clearInterval(this.flushTimer),this.flushTimer=0,this.controller?.abort(),this.controller=null,this.chunks=[],this.pending=[],this.retainedSamples=0,this.nativeRequestId){let e=this.nativeRequestId;this.nativeRequestId=``,await Na(`mobile_cancel_speech`,{requestId:e}).catch(()=>{})}if(this.sessionId&&!this.legacy){let e=this.sessionId;this.sessionId=``,await fetch(`/api/speech/stream/cancel`,{method:`POST`,headers:{"X-Pisper-Speech-Session":e}}).catch(()=>{})}}async dispose(){await this.cancel(),this.listeners.clear()}};function Ra({chatSessionId:e=``}={}){return new La(e)}var za=`
|
|
511
|
+
`,sourceUrl:`https://raw.githubusercontent.com/myshell-ai/MeloTTS/209145371cff8fc3bd60d7be902ea69cbdb7965a/melo/text/cmudict.rep`,sha256:`08ee91f3c05c55160bdc599247ba53e5de8cc2597766fdb22b54a81cb24dd954`}],models:[{id:`x-asr-480ms-int8`,revision:`2026-06-05`,attribution:`X-ASR by Gilgamesh-J / GilgameshWind; trained using icefall and deployed with sherpa-onnx. The locked HF model card expressly covers model artifacts and declares Apache-2.0. The separately discovered GitHub license commit is not the locked HF revision. No root LICENSE or NOTICE was listed in the inspected HF tree; this is not proof that every historical distribution lacks NOTICE. Retain applicable upstream notices when found.`,archive:{url:`https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-x-asr-480ms-streaming-zipformer-transducer-zh-en-punct-int8-2026-06-05.tar.bz2`,sha256:`fa5f63d618e5a01526e275a358bb7772e403f84808a4769fba52cffd8160bf74`},groups:[{id:`xasr-weights`,pathScope:`model`,paths:[`encoder.int8.onnx`,`decoder.onnx`,`joiner.int8.onnx`],licenseIds:[`apache-2.0`],status:`pending`,summary:`Apache-2.0 is explicitly declared for X-ASR model artifacts. The sherpa export script describes icefall streaming ONNX export and INT8 quantization; installed file hashes match the catalog, but the 2026-06-05 archive-to-checkpoint/build identity is not established.`,pendingReasons:[`Exact checkpoint and source commits used to build the 2026-06-05 INT8 archive remain unverified; the export script downloads moving main URLs. Training-data rights are not fully audited.`],evidence:[{url:`https://hf-mirror.com/GilgameshWind/X-ASR-zh-en/resolve/689ff18c584d29910da37b6fe904db0c1489c9d1/README.md`,sha256:`7acc6f439d3e39e46de4298ccf8a8f6a483fdc5f9f5d08e61422b63760ec37b1`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/v1.13.7/scripts/zipformer-transducer/x-asr/export-streaming.sh`,sha256:`63b018fe72a29e9a41c6d4e358085b5ad1614e021c0d9f3c05a2d11f1dff0d81`}]},{id:`xasr-tokens`,pathScope:`model`,paths:[`tokens.txt`],licenseIds:[`apache-2.0`],status:`pending`,summary:`X-ASR token resource, not the SentencePiece or sherpa software. The punctuation export block downloads X-ASR-zh-en/zipformer/data/lang_5000_with_punctuation/tokens.txt. Catalog content SHA256: b818a60878b9aae978cbb8ad594acbd403d76d1af2e31ef4197c84e2dbdba27c.`,pendingReasons:[`The historical source revision for the token file in the 2026-06-05 archive is not pinned by the export script.`],evidence:[{url:`https://hf-mirror.com/GilgameshWind/X-ASR-zh-en/resolve/689ff18c584d29910da37b6fe904db0c1489c9d1/README.md`,sha256:`7acc6f439d3e39e46de4298ccf8a8f6a483fdc5f9f5d08e61422b63760ec37b1`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/v1.13.7/scripts/zipformer-transducer/x-asr/export-streaming.sh`,sha256:`63b018fe72a29e9a41c6d4e358085b5ad1614e021c0d9f3c05a2d11f1dff0d81`}]},{id:`xasr-bpe`,pathScope:`model`,paths:[`bpe.model`],licenseIds:[`apache-2.0`],status:`pending`,summary:`X-ASR BPE resource. The export script renames X-ASR-zh-en/zipformer/data/lang_5000_with_punctuation/bpe_punc.model to bpe.model. Its license classification comes from X-ASR, not from the software that reads the SentencePiece format.`,pendingReasons:[`The historical BPE source commit and exact archive build provenance remain unverified.`],evidence:[{url:`https://hf-mirror.com/GilgameshWind/X-ASR-zh-en/resolve/689ff18c584d29910da37b6fe904db0c1489c9d1/README.md`,sha256:`7acc6f439d3e39e46de4298ccf8a8f6a483fdc5f9f5d08e61422b63760ec37b1`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/v1.13.7/scripts/zipformer-transducer/x-asr/export-streaming.sh`,sha256:`63b018fe72a29e9a41c6d4e358085b5ad1614e021c0d9f3c05a2d11f1dff0d81`}]},{id:`xasr-bpe-vocab`,pathScope:`shared`,paths:[`speech-resources/xasr-bpe.vocab`],licenseIds:[`apache-2.0`],status:`pending`,summary:`Modified by Pisper: extracted the ordered SentencePiece pieces and scores as UTF-8 piece<TAB>score<LF> lines. This local text derivative retains the source resource license classification; it is not newly licensed as Pisper-owned model data. Original and derived hashes and generator are bound by xasr-bpe-extraction below.`,pendingReasons:[`The source BPE historical provenance remains pending as described in xasr-bpe. A text extraction does not resolve upstream rights.`],evidence:[{url:`https://hf-mirror.com/GilgameshWind/X-ASR-zh-en/resolve/689ff18c584d29910da37b6fe904db0c1489c9d1/README.md`,sha256:`7acc6f439d3e39e46de4298ccf8a8f6a483fdc5f9f5d08e61422b63760ec37b1`}]}],modifications:[{id:`xasr-bpe-extraction`,groupIds:[`xasr-bpe-vocab`],modifiedBy:`Pisper`,summary:`Local BPE text extraction, not retraining. The generator identity records the inspected repository implementation, not a claim about a historical upstream build date.`,source:{path:`bpe.model`,bytes:119265,sha256:`f87a38025a5fdd1e4e9591f6a44bb81295097ce0b80df6f4ab9f44e52c64ca5f`},derived:{path:`speech-resources/xasr-bpe.vocab`,bytes:61562,sha256:`01381aa0c3065832cb8d7462d529e3079a99be56c955ce93b4cb9b78e8aa34e5`},generator:{path:`scripts/speech-bpe.mjs`,sha256:`a1c85731aa3e0be89f04acc79830db784a9d43edb8af9f4fb723bb45bd725786`,method:`sentencePieceModelToVocab decodes ordered protobuf ModelProto.pieces and emits each piece, a tab, its finite score, and a newline without changing the BPE model.`}}]},{id:`vits-melo-tts-zh_en`,revision:`a0d5c6a264c0ef92d70d8661d8cc502d79627cd6`,archive:{url:`https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-melo-tts-zh_en.tar.bz2`,bytes:167006755,sha256:`e58351ed7149f290a54534538badd4077cdbe6fddc964b24d0bee870415d1514`},attribution:`MeloTTS by MyShell.ai; sherpa-onnx ONNX conversion. The retained software license is Copyright (c) 2024 MyShell.ai, MIT. The neural-weight repository separately declares MIT; dictionary and FST resources have separate declarations and pending provenance. Pisper selects the original single female voice via public sid 0 and uses the same original FP32 ONNX, tokens, mixed-language lexicon, dictionary and normalization files on Desktop, Android and iOS. No retraining, quantization, graph/metadata patch or voice-subset derivative is made. The unused new_heteronym.fst and 133-byte model.int8.onnx Git LFS pointer in the transport archive are drained but not installed; retained model files are unchanged. These choices do not imply upstream/speaker endorsement, redistribution approval or completed native-platform acceptance.`,groups:[{id:`melo-weights`,pathScope:`model`,paths:[`model.onnx`],licenseIds:[`mit-melo`],status:`pending`,summary:`The myshell-ai/MeloTTS-Chinese model card at af5d207a364ea4208c6f589c89f57f88414bdd16 declares license: mit for the model repository; this is separate evidence from the MeloTTS software MIT license. The sherpa conversion package carries the exact MyShell.ai MIT text, and original ONNX metadata declares MIT license, melo-vits version 2, Chinese + English, n_speakers=1 and speaker_id=1. The conversion README explicitly describes a single female Chinese+English speaker. sherpa maps public sid 0 to the internal metadata speaker_id; Pisper does not change the graph, metadata or speaker embedding.`,pendingReasons:[`Exact historical checkpoint, training/conversion commits and reproducible archive build identity have not been established; the inspected conversion workflow uses moving upstream references. Training-data permissions, individual speaker consent and applicable personality/publicity rights are not fully audited. The discovered model card revision is evidence of a declaration, not proof of the historical conversion input.`],evidence:[{url:`https://hf-mirror.com/myshell-ai/MeloTTS-Chinese/resolve/af5d207a364ea4208c6f589c89f57f88414bdd16/README.md`,sha256:`40b5b860bacbb3947cbef838719e660d2fe4961eba5b484290b4bedc0253e208`},{url:`https://raw.githubusercontent.com/myshell-ai/MeloTTS/209145371cff8fc3bd60d7be902ea69cbdb7965a/LICENSE`,sha256:`88a50e5a02bbc2a5c2f084dc19da751aa97b1690f5fda76cd8005c8634d1ca70`},{url:`https://hf-mirror.com/csukuangfj/vits-melo-tts-zh_en/resolve/a0d5c6a264c0ef92d70d8661d8cc502d79627cd6/README.md`,sha256:`ae6e44dead53dfdbd5b4a77106226f3118eb910222b46cb5533a3860773fc6c7`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/scripts/melo-tts/export-onnx.py`,sha256:`c0be7727d59ad6ceaf39e909b4560b57e704091c69ac3fab6f2f2abfd931c916`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/scripts/melo-tts/run.sh`,sha256:`e2afb98d9028eded2983f780468337fc019a8306db926f89e3bdeed18af867bb`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/sherpa-onnx/csrc/offline-tts-vits-model.cc`,sha256:`060907349036d63b60d035843defe7078b83c8099e0d4de323446c7db0d653d0`}]},{id:`melo-tokens`,pathScope:`model`,paths:[`tokens.txt`],licenseIds:[`mit-melo`,`apache-2.0-sherpa`],status:`declared`,summary:`The sherpa Melo export writes enumerated model.hps symbols to tokens.txt. The original 655-byte token file is retained unchanged. Melo software is MIT; sherpa conversion code is Apache-2.0. These code declarations do not independently establish all underlying training-data rights.`,pendingReasons:[],evidence:[{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/scripts/melo-tts/export-onnx.py`,sha256:`c0be7727d59ad6ceaf39e909b4560b57e704091c69ac3fab6f2f2abfd931c916`},{url:`https://raw.githubusercontent.com/myshell-ai/MeloTTS/209145371cff8fc3bd60d7be902ea69cbdb7965a/LICENSE`,sha256:`88a50e5a02bbc2a5c2f084dc19da751aa97b1690f5fda76cd8005c8634d1ca70`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/LICENSE`,sha256:`cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30`}]},{id:`melo-cppjieba-dictionary`,pathScope:`model`,paths:[`dict/hmm_model.utf8`,`dict/idf.utf8`,`dict/jieba.dict.utf8`,`dict/pos_dict/char_state_tab.utf8`,`dict/pos_dict/prob_emit.utf8`,`dict/pos_dict/prob_start.utf8`,`dict/pos_dict/prob_trans.utf8`,`dict/README.md`,`dict/stop_words.utf8`],licenseIds:[`mit-cppjieba`],status:`confirmed`,summary:`Nine ordinary dictionary/README files are byte-identical to the separately HTTPS-downloaded CppJieba sherpa-onnx-2024-04-19 dict archive. The exact release source MIT license retains Copyright (c) 2013. This confirms the documented source-content match, not a whole-chain data-rights guarantee. The small Melo user.dict.utf8 is separately classified and is NOT the 829194-byte pypinyin-derived user dictionary from that source archive.`,pendingReasons:[],evidence:[{url:`https://ghfast.top/https://github.com/csukuangfj/cppjieba/releases/download/sherpa-onnx-2024-04-19/dict.tar.bz2`,sha256:`35c3877c9b9221a5b2d69bbf57d5dbf1ccbe5b7684c60eb42f93db6b2d494f26`},{url:`https://raw.githubusercontent.com/csukuangfj/cppjieba/f03dd931a00330c279c8590275850fd1f6749a18/LICENSE`,sha256:`ba898a14f729ba5e9965da34e3eecd5edd3795f2cc5d7c923b815ba79bb851b0`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/.github/workflows/export-melo-tts-to-onnx.yaml`,sha256:`fc90fc412fd6f3c8a7d593743372a077dd63b2c8ce0780ed9c3a7e05cc8b659e`}]},{id:`melo-user-dictionary`,pathScope:`model`,paths:[`dict/user.dict.utf8`],licenseIds:[`mit-cppjieba`,`mit-melo`],status:`pending`,summary:`Melo ships an unchanged 49-byte user dictionary containing four entries. It matches the locked Melo HF file but differs from the separately downloaded CppJieba release user dictionary. The package MIT text and CppJieba project MIT declaration are retained as source declarations, not proof that either automatically licenses every edit. This file is not attributed to the unrelated historical pypinyin-derived dictionary.`,pendingReasons:[`The exact historical source commit, modifier and license coverage for this 49-byte replacement have not been identified. Retain applicable modifier notices when established.`],evidence:[{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/.github/workflows/export-melo-tts-to-onnx.yaml`,sha256:`fc90fc412fd6f3c8a7d593743372a077dd63b2c8ce0780ed9c3a7e05cc8b659e`},{url:`https://raw.githubusercontent.com/csukuangfj/cppjieba/f03dd931a00330c279c8590275850fd1f6749a18/LICENSE`,sha256:`ba898a14f729ba5e9965da34e3eecd5edd3795f2cc5d7c923b815ba79bb851b0`},{url:`https://raw.githubusercontent.com/myshell-ai/MeloTTS/209145371cff8fc3bd60d7be902ea69cbdb7965a/LICENSE`,sha256:`88a50e5a02bbc2a5c2f084dc19da751aa97b1690f5fda76cd8005c8634d1ca70`},{url:`https://huggingface.co/csukuangfj/vits-melo-tts-zh_en/resolve/a0d5c6a264c0ef92d70d8661d8cc502d79627cd6/dict/user.dict.utf8`,sha256:`495bbf49270408a1234690e1e6a97328f30a482a7a72aa769e8a12e8714b0c62`}]},{id:`melo-english-lexicon`,pathScope:`model`,paths:[`lexicon.txt`],licenseIds:[`cmudict-0.6-1998`,`mit-melo`,`apache-2.0-sherpa`],status:`pending`,summary:`The English portion is generated by the sherpa Melo export from melo.text.english.eng_dict and refine_syllables, lowercasing words and adding language tone offsets plus kaldi/SF entries. The inspected Melo source reads cmudict.rep or a cached pickle. cmudict.rep contains its own Copyright 1998 Carnegie Mellon University unrestricted research/commercial permission and attribution notice, retained verbatim in cmudict-0.6-1998. This is NOT a substitution of a modern CMUdict BSD license. The retained notice hash covers the complete original comment header; the evidence hash covers the complete 3969309-byte source file. No package script or pickle was executed.`,pendingReasons:[`The precise historical dictionary/cache inputs and all intervening modifications used for this lexicon have not been pinned or reproduced. Trace cached-data equivalence and retain applicable original and modifier notices.`],evidence:[{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/scripts/melo-tts/export-onnx.py`,sha256:`c0be7727d59ad6ceaf39e909b4560b57e704091c69ac3fab6f2f2abfd931c916`},{url:`https://raw.githubusercontent.com/myshell-ai/MeloTTS/209145371cff8fc3bd60d7be902ea69cbdb7965a/melo/text/english.py`,sha256:`28527f574511bfc13fe1f2f6bbb5bfe4072c06e1c7e9b69598138aef81b9905b`},{url:`https://raw.githubusercontent.com/myshell-ai/MeloTTS/209145371cff8fc3bd60d7be902ea69cbdb7965a/melo/text/cmudict.rep`,sha256:`d127b5ce8b8e695732701e8efde04b9b0fa11991218b1fb9d21bd0c9264636aa`},{url:`https://raw.githubusercontent.com/myshell-ai/MeloTTS/209145371cff8fc3bd60d7be902ea69cbdb7965a/LICENSE`,sha256:`88a50e5a02bbc2a5c2f084dc19da751aa97b1690f5fda76cd8005c8634d1ca70`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/LICENSE`,sha256:`cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30`}]},{id:`melo-chinese-lexicon`,pathScope:`model`,paths:[`lexicon.txt`],licenseIds:[`mit-pypinyin`,`mit-melo`,`apache-2.0-sherpa`],status:`pending`,summary:`The Chinese portion is generated by the sherpa Melo export from pypinyin character/phrase dictionaries, lazy_pinyin and the Melo pinyin-to-symbol map. Melo code is MIT, sherpa conversion code Apache-2.0, and pypinyin declares MIT. Those software declarations do not relicense external dictionary inputs. The same 6837671-byte mixed-language lexicon is used unchanged on every platform.`,pendingReasons:[`Pin historical pypinyin versions, character/phrase JSON data and Melo phoneme mapping, reproduce the output and trace the actual underlying source-data terms. No particular Zdic, CC-CEDICT or Unihan license is asserted without proof of the actual input chain.`],evidence:[{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/scripts/melo-tts/export-onnx.py`,sha256:`c0be7727d59ad6ceaf39e909b4560b57e704091c69ac3fab6f2f2abfd931c916`},{url:`https://raw.githubusercontent.com/mozillazg/python-pinyin/8595294b1a97845e30f11ecfdb3caa4e61ac3988/pypinyin/pinyin_dict.py`,sha256:`245c1f70509432b289cde1f938157cd5ff1372d1d083b577d5fab72b4dfcda08`},{url:`https://raw.githubusercontent.com/mozillazg/python-pinyin/8595294b1a97845e30f11ecfdb3caa4e61ac3988/pypinyin/phrases_dict.py`,sha256:`3f6f39bbca68d8d1676ea463cd4620b934b03160cc5042fb9d9007b8f3a80b9e`},{url:`https://raw.githubusercontent.com/mozillazg/python-pinyin/8595294b1a97845e30f11ecfdb3caa4e61ac3988/LICENSE.txt`,sha256:`1e6c90014b4912815c296ee64bb6f6280af47e6d4c5d80e86232dfc5defe764c`},{url:`https://raw.githubusercontent.com/myshell-ai/MeloTTS/209145371cff8fc3bd60d7be902ea69cbdb7965a/LICENSE`,sha256:`88a50e5a02bbc2a5c2f084dc19da751aa97b1690f5fda76cd8005c8634d1ca70`}]},{id:`melo-normalization-fsts`,pathScope:`model`,paths:[`date.fst`,`number.fst`,`phone.fst`],licenseIds:[`apache-2.0-sherpa`],status:`pending`,summary:`All three FSTs are byte-identical to the separately downloaded data/date.fst, data/number.fst and data/phone.fst at csukuangfj/icefall-tts-aishell3-vits-low-2024-04-06 revision 57345c004e13ed640e408c4c29ab56187b18f065, the source repository named by the Melo packaging workflow. That source model card declares Apache-2.0; the full Apache text is retained from sherpa. Neither the OpenFst software license nor the Melo neural-weight MIT declaration independently grants rights to these FST data.`,pendingReasons:[`Exact editable generation rules, compiler/source revisions, underlying data provenance and applicable author/modifier notices remain unverified. No standalone FST LICENSE/NOTICE or complete reproducible source chain was found in the inspected source tree.`],evidence:[{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/.github/workflows/export-melo-tts-to-onnx.yaml`,sha256:`fc90fc412fd6f3c8a7d593743372a077dd63b2c8ce0780ed9c3a7e05cc8b659e`},{url:`https://hf-mirror.com/csukuangfj/icefall-tts-aishell3-vits-low-2024-04-06/resolve/57345c004e13ed640e408c4c29ab56187b18f065/README.md`,sha256:`98b45ea81164d1e1a1dd82255207053b15cd6c69d922a1c5cf3387ce604d4b74`},{url:`https://hf-mirror.com/csukuangfj/icefall-tts-aishell3-vits-low-2024-04-06/resolve/57345c004e13ed640e408c4c29ab56187b18f065/data/date.fst`,sha256:`eb8aa079ae3cb81d8f4404992f39d61a0cb990947512b5b8d1e54d1f6980e718`},{url:`https://hf-mirror.com/csukuangfj/icefall-tts-aishell3-vits-low-2024-04-06/resolve/57345c004e13ed640e408c4c29ab56187b18f065/data/number.fst`,sha256:`743f402181fcfebf76cc2f0546b71fa26476e626fbe4e460fb7b4c3a7a8bd5bd`},{url:`https://hf-mirror.com/csukuangfj/icefall-tts-aishell3-vits-low-2024-04-06/resolve/57345c004e13ed640e408c4c29ab56187b18f065/data/phone.fst`,sha256:`1ac2b6fa56b1442320c4de7db08353bab8963a2b57f365eebcdd3a2d3562f8d7`},{url:`https://raw.githubusercontent.com/k2-fsa/sherpa-onnx/917bed95c8e5c7c18aa4d69fea42e9ef8ef0a60e/LICENSE`,sha256:`cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30`}]},{id:`melo-package-notices`,pathScope:`model`,paths:[`LICENSE`,`README.md`],licenseIds:[`mit-melo`],status:`confirmed`,summary:`LICENSE is byte-identical to the original MyShell.ai MIT text (Copyright (c) 2024 MyShell.ai), including its exact final newline behavior. README explicitly identifies the single female Chinese+English speaker. The package-level MIT file is not a blanket grant for every bundled dictionary or FST. No upstream NOTICE was listed in the inspected conversion and weight repository trees; this is not proof that none ever existed.`,pendingReasons:[],evidence:[{url:`https://raw.githubusercontent.com/myshell-ai/MeloTTS/209145371cff8fc3bd60d7be902ea69cbdb7965a/LICENSE`,sha256:`88a50e5a02bbc2a5c2f084dc19da751aa97b1690f5fda76cd8005c8634d1ca70`},{url:`https://hf-mirror.com/csukuangfj/vits-melo-tts-zh_en/resolve/a0d5c6a264c0ef92d70d8661d8cc502d79627cd6/README.md`,sha256:`ae6e44dead53dfdbd5b4a77106226f3118eb910222b46cb5533a3860773fc6c7`}]}],modifications:[]}]},ja=Aa,Ma=e=>Aa.models.some(t=>t.id===e);function Na({modelId:e,modelName:t,returnFocus:n,onClose:r}){let{t:i}=o(),a=ja.models.find(t=>t.id===e);if(!a)return null;let s=new Set(a.groups.flatMap(e=>e.licenseIds)),c=ja.licenses.filter(e=>s.has(e.id));return(0,$.jsx)(Wn,{open:!0,onOpenChange:e=>{e||r()},children:(0,$.jsxs)(Vn,{className:`z-[130] max-h-[85dvh] min-w-0 grid-cols-1 overflow-y-auto rounded-lg sm:max-w-2xl`,overlayClassName:`z-[129]`,onEscapeKeyDown:e=>e.stopPropagation(),onCloseAutoFocus:e=>{e.preventDefault(),n.current?.isConnected&&n.current.focus()},children:[(0,$.jsxs)(Un,{children:[(0,$.jsx)(Hn,{children:i(`chat:speechModels.notices`)}),(0,$.jsxs)(Bn,{className:`break-words`,children:[t,` (`,a.revision,`)`]})]}),(0,$.jsx)(`p`,{className:`break-words text-sm text-muted-foreground`,children:ja.scope}),(0,$.jsx)(`p`,{className:`break-words text-sm text-muted-foreground`,children:ja.licenseIdsMeaning}),(0,$.jsx)(`div`,{className:`min-w-0 divide-y divide-stroke-soft`,children:a.groups.map(e=>(0,$.jsxs)(`details`,{className:`min-w-0 py-3`,children:[(0,$.jsxs)(`summary`,{className:`cursor-pointer break-words text-sm font-medium`,children:[e.id,e.status===`pending`&&(0,$.jsx)(`span`,{className:`ml-2 text-xs font-normal text-warning-strong`,children:i(`chat:speechModels.provenancePending`)})]}),(0,$.jsxs)(`div`,{className:`mt-3 min-w-0 space-y-3 text-sm`,children:[(0,$.jsx)(`p`,{className:`break-words`,children:e.summary}),e.pendingReasons.map(e=>(0,$.jsx)(`p`,{className:`break-words text-muted-foreground`,children:e},e)),(0,$.jsx)(`pre`,{className:`whitespace-pre-wrap break-all text-xs`,children:JSON.stringify({pathScope:e.pathScope,paths:e.paths,licenseIds:e.licenseIds,evidence:e.evidence},null,2)})]})]},e.id))}),(0,$.jsxs)(`details`,{className:`min-w-0 border-t pt-3`,children:[(0,$.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium`,children:i(`chat:speechModels.modifications`)}),(0,$.jsx)(`pre`,{className:`mt-3 whitespace-pre-wrap break-all text-xs`,children:JSON.stringify(a.modifications,null,2)})]}),c.map(e=>(0,$.jsxs)(`details`,{className:`min-w-0 border-t pt-3`,children:[(0,$.jsxs)(`summary`,{className:`cursor-pointer break-words text-sm font-medium`,children:[e.name,` (`,e.id,`)`]}),(0,$.jsx)(`pre`,{className:`mt-3 whitespace-pre-wrap break-words text-xs`,children:e.text})]},e.id)),(0,$.jsx)(`div`,{className:`flex justify-end border-t pt-3`,children:(0,$.jsxs)(Jt,{children:[(0,$.jsx)(Kt,{asChild:!0,children:(0,$.jsx)(Y,{size:`icon-sm`,variant:`outline`,onClick:()=>{let e=new Blob([JSON.stringify({...ja,models:[a],licenses:c},null,2)],{type:`application/json;charset=utf-8`}),t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=`${a.id}-notices.json`,n.click(),window.setTimeout(()=>URL.revokeObjectURL(t),0)},"aria-label":i(`chat:speechModels.downloadNotices`),children:(0,$.jsx)(Te,{})})}),(0,$.jsx)(qt,{children:i(`chat:speechModels.downloadNotices`)})]})})]})})}var Pa=e=>`${new Intl.NumberFormat(void 0,{maximumFractionDigits:1}).format(e/1048576)} MiB`;function Fa({manager:e,onClose:t}){let{t:n}=o(),[r,i]=(0,Q.useState)(!1),[a,s]=(0,Q.useState)(``),[c,l]=(0,Q.useState)(null),u=(0,Q.useRef)(null),d=(0,Q.useRef)(null),f=()=>{u.current?.abort(),u.current=null,i(!1)};(0,Q.useEffect)(()=>(e.open||(u.current?.abort(),u.current=null,i(!1),l(null)),()=>{u.current?.abort(),u.current=null}),[e.open]);let p={"not-installed":n(`chat:speechModels.notInstalled`),downloading:n(`chat:speechModels.downloading`),verifying:n(`chat:speechModels.verifying`),installed:n(`chat:speechModels.installed`),cancelled:n(`chat:speechModels.cancelled`),error:n(`chat:speechModels.failed`)},m=e.models.flatMap(e=>e.voices||[]),h=m.find(t=>t.id===e.selectedVoice),g=e.models.some(e=>e.kind===`tts`&&e.status===`installed`),_=e.models.filter(e=>e.status!==`installed`),v=_.some(e=>[`downloading`,`verifying`].includes(e.status)),y=()=>{l(null),f(),e.close(),t()},b=async()=>{if(u.current){f();return}if(!h||!g||_.length)return;let e=new AbortController;u.current=e,i(!0),s(``);try{await Oa(h.language===`en`?n(`chat:speechModels.previewEnglish`):n(`chat:speechModels.previewChinese`),h.id,e.signal)}catch(t){e.signal.aborted||s(t instanceof Error?t.message:String(t))}finally{u.current===e&&(u.current=null,i(!1))}};return(0,$.jsxs)(Wn,{open:e.open,onOpenChange:e=>{e||y()},children:[(0,$.jsxs)(Vn,{className:`z-[110] max-h-[85dvh] overflow-y-auto sm:max-w-md`,overlayClassName:`z-[109]`,onEscapeKeyDown:e=>e.stopPropagation(),children:[(0,$.jsxs)(Un,{children:[(0,$.jsx)(Hn,{children:n(`chat:speechModels.title`)}),(0,$.jsx)(Bn,{className:`sr-only`,children:n(`chat:speechModels.title`)})]}),!e.catalog&&!e.error&&(0,$.jsx)(ft,{className:`mx-auto my-4 size-5 animate-spin`,"aria-label":n(`chat:speechModels.loading`)}),(0,$.jsx)(`div`,{className:`min-w-0 divide-y divide-stroke-soft`,children:e.models.map(t=>{let r=[`downloading`,`verifying`].includes(t.status),i=t.totalBytes?Math.min(100,Math.floor(t.downloadedBytes/t.totalBytes*100)):0,a=t.license?.url.startsWith(`https://`)?t.license.url:void 0;return(0,$.jsxs)(`section`,{className:`min-w-0 space-y-2 py-3 first:pt-0`,"aria-label":t.name,children:[(0,$.jsxs)(`div`,{className:`flex min-w-0 items-center gap-3`,children:[(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:t.kind===`asr`?n(`chat:speechModels.recognition`):n(`chat:speechModels.synthesis`)}),(0,$.jsx)(`div`,{className:`break-words font-medium`,children:t.name})]}),t.status===`installed`?(0,$.jsx)(ne,{className:`size-5 shrink-0 text-success`,"aria-label":p.installed}):(0,$.jsxs)(Jt,{children:[(0,$.jsx)(Kt,{asChild:!0,children:(0,$.jsx)(Y,{size:`icon-sm`,variant:`outline`,disabled:e.loading,onClick:()=>{r?e.cancelDownload(t.id):e.download(t.id)},"aria-label":n(r?`chat:speechModels.cancelDownload`:`chat:speechModels.download`),children:r?(0,$.jsx)(wt,{}):(0,$.jsx)(Te,{})})}),(0,$.jsx)(qt,{children:n(r?`chat:speechModels.cancelDownload`:`chat:speechModels.download`)})]})]}),(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-x-3 gap-y-1 text-xs text-muted-foreground`,children:[(0,$.jsx)(`span`,{children:p[t.status]}),(0,$.jsx)(`span`,{className:`tabular-nums`,children:r?`${Pa(t.downloadedBytes)} / ${Pa(t.totalBytes)}`:Pa(t.totalBytes)})]}),r&&(0,$.jsx)(zt,{value:i,"aria-label":t.name,"aria-valuenow":i,"aria-valuemin":0,"aria-valuemax":100}),t.error&&(0,$.jsx)(`p`,{role:`alert`,className:`break-words text-xs text-destructive`,children:t.error}),t.license&&(0,$.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-2`,children:[(0,$.jsx)(`a`,{href:a,target:`_blank`,rel:`noreferrer`,className:`block break-words text-xs text-muted-foreground underline underline-offset-2`,children:t.license.name}),Ma(t.id)&&(0,$.jsxs)(Jt,{children:[(0,$.jsx)(Kt,{asChild:!0,children:(0,$.jsx)(Y,{size:`icon-sm`,variant:`ghost`,"aria-label":n(`chat:speechModels.notices`),onClick:e=>{d.current=e.currentTarget,f(),l(t)},children:(0,$.jsx)(Mr,{})})}),(0,$.jsx)(qt,{children:n(`chat:speechModels.notices`)})]})]})]},t.id)})}),m.length>0&&(0,$.jsx)(`div`,{className:`space-y-2 border-t pt-3`,children:(0,$.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`min-w-0 flex-1 text-sm`,children:n(`chat:speechModels.voice`)}),(0,$.jsxs)(Jt,{children:[(0,$.jsx)(Kt,{asChild:!0,children:(0,$.jsx)(Y,{size:`icon`,variant:`outline`,disabled:!g||_.length>0,onClick:()=>void b(),"aria-label":n(r?`chat:speechModels.stopPreview`:`chat:speechModels.preview`),children:r?(0,$.jsx)(wt,{}):(0,$.jsx)(_t,{})})}),(0,$.jsx)(qt,{children:n(r?`chat:speechModels.stopPreview`:`chat:speechModels.preview`)})]})]})}),(e.error||a)&&(0,$.jsx)(`p`,{role:`alert`,className:`break-words text-sm text-destructive`,children:e.error||a}),(0,$.jsx)(`div`,{className:`flex justify-end border-t pt-3`,children:_.length?(0,$.jsxs)(Y,{disabled:e.loading||v,onClick:()=>void e.downloadAll(),children:[(0,$.jsx)(Te,{}),n(`chat:speechModels.downloadAll`)]}):(0,$.jsx)(Y,{disabled:!e.catalog,onClick:y,children:n(`chat:speechModels.done`)})})]}),e.open&&c&&(0,$.jsx)(Na,{modelId:c.id,modelName:c.name,returnFocus:d,onClose:()=>l(null)})]})}var Ia=16e3,La=Ia*60;function Ra(e,t){let n=window.__TAURI__?.core?.invoke??window.__TAURI_INTERNALS__?.invoke;return n?n(e,t):Promise.reject(Error(`移动端原生桥不可用。`))}async function za(){if(!(typeof window>`u`||!window.__PISPER_MOBILE_APP__)&&(await Ra(`mobile_request_microphone_permission`)).state!==`granted`)throw Error(`microphone_permission_denied`)}async function Ba(e){let t=await e.text().catch(()=>``);try{return JSON.parse(t).error||`语音转写失败 (${e.status})`}catch{return t||`语音转写失败 (${e.status})`}}function Va(e){let t=e.reduce((e,t)=>e+t.length,0),n=new Float32Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;return n}var Ha=class{chatSessionId;chunks=[];pending=[];listeners=new Set;controller=null;sessionId=``;nativeRequestId=``;legacy=!1;flushTimer=0;sendChain=Promise.resolve();finished=!1;retainedSamples=0;terms=[];initializing=null;constructor(e=``){this.chatSessionId=e}start(){return this.initializing=this.initialize().catch(async e=>{throw await this.cancel(),e}),this.initializing}async initialize(){this.chunks=[],this.pending=[],this.finished=!1,this.retainedSamples=0;let e=new AbortController;this.controller=e,await x(),g(e.signal);let{loadSpeechHotwords:n,prepareSpeechSession:r}=await t(async()=>{let{loadSpeechHotwords:e,prepareSpeechSession:t}=await import(`./speech-session-2WJk-z3P.js`).then(e=>e.r);return{loadSpeechHotwords:e,prepareSpeechSession:t}},__vite__mapDeps([121,1,2,3,13,12,5,6,7,8])),{terms:i,hotwords:a}=await n(this.chatSessionId,e.signal);this.terms=i;let o=await r({kinds:[`asr`],hotwords:a},e.signal);if(g(o.signal),o.signal.addEventListener(`abort`,()=>{this.controller===e&&!e.signal.aborted&&this.cancel()},{once:!0}),window.__PISPER_MOBILE_APP__)return;let s=h(e.signal,3e4);try{let t=await fetch(`/api/speech/stream/start`,{method:`POST`,headers:{"X-Pisper-Chat-Session":this.chatSessionId},signal:s.signal});if(!t.ok){if(t.status===404){this.legacy=!0;return}throw Error(await Ba(t))}let n=await t.json();if(!n.id)throw Error(`语音识别会话创建失败。`);e.signal.aborted&&(await fetch(`/api/speech/stream/cancel`,{method:`POST`,headers:{"X-Pisper-Speech-Session":n.id}}).catch(()=>{}),g(e.signal)),this.sessionId=n.id,this.pending.push(...this.chunks.splice(0)),this.retainedSamples=0,this.flushTimer=window.setInterval(()=>void this.flushPending(),1e3)}finally{s.dispose()}}acceptPcm(e){if(!e.length||this.finished)return!1;if(window.__PISPER_MOBILE_APP__||!this.sessionId){let t=La-this.retainedSamples;if(t<=0)return!0;let n=e.slice(0,t);return this.chunks.push(n),this.retainedSamples+=n.length,this.retainedSamples>=La}let t=e.slice();return this.sessionId&&!this.legacy?this.pending.push(t):this.chunks.push(t),!1}onPartial(e){return this.listeners.add(e),()=>this.listeners.delete(e)}emitPartial(e){if(e)for(let t of this.listeners)t(e)}flushPending(){return this.sendChain=this.sendChain.then(async()=>{if(!this.sessionId||this.legacy||this.finished||!this.pending.length)return;let e=Va(this.pending.splice(0));try{let t=await fetch(`/api/speech/stream/chunk`,{method:`POST`,headers:{"Content-Type":`application/octet-stream`,"X-Pisper-Sample-Rate":String(Ia),"X-Pisper-Speech-Session":this.sessionId},body:e.buffer,signal:this.controller?.signal});if(!t.ok)return;let n=await t.json();typeof n.text==`string`&&this.emitPartial(n.text.trim())}catch{}}),this.sendChain}async finishStreaming(){window.clearInterval(this.flushTimer),this.flushTimer=0,await this.flushPending(),this.finished=!0;let e=await fetch(`/api/speech/stream/finish`,{method:`POST`,headers:{"X-Pisper-Speech-Session":this.sessionId},signal:this.controller?.signal});if(!e.ok)throw Error(await Ba(e));let t=await e.json(),n=typeof t.text==`string`?t.text.trim():``;if(!n)throw Error(`未识别到语音内容。`);return this.emitPartial(n),n}async finishOneShot(e){if(window.__PISPER_MOBILE_APP__){let t=new Uint8Array(e.buffer),n=``,r=32768;for(let e=0;e<t.length;e+=r)n+=String.fromCharCode(...t.subarray(e,e+r));let i=this.controller;if(!i)throw new DOMException(`Speech recognition cancelled.`,`AbortError`);g(i.signal);let a=crypto.randomUUID();this.nativeRequestId=a;let o=await Ra(`mobile_transcribe_pcm`,{pcmBase64:btoa(n),hotwords:yr(this.terms),requestId:a});if(g(i.signal),this.controller!==i)throw new DOMException(`Speech recognition cancelled.`,`AbortError`);let s=xr(typeof o.text==`string`?o.text.trim():``,this.terms);if(!s)throw Error(`未识别到语音内容。`);return this.emitPartial(s),s}let t=await fetch(`/api/speech/transcribe`,{method:`POST`,headers:{"Content-Type":`application/octet-stream`,"X-Pisper-Sample-Rate":String(Ia),"X-Pisper-Chat-Session":this.chatSessionId},body:e.buffer,signal:this.controller?.signal});if(!t.ok)throw Error(await Ba(t));let n=await t.json(),r=typeof n.text==`string`?n.text.trim():``;if(!r)throw Error(`未识别到语音内容。`);return this.emitPartial(r),r}async finish(){if(await this.initializing,!this.controller)throw Error(`语音识别尚未启动。`);if(this.sessionId&&!this.legacy)return this.finishStreaming();this.finished=!0;let e=Va(this.chunks);if(!e.length)throw Error(`没有采集到语音。`);return this.finishOneShot(e)}async cancel(){if(this.finished=!0,window.clearInterval(this.flushTimer),this.flushTimer=0,this.controller?.abort(),this.controller=null,this.chunks=[],this.pending=[],this.retainedSamples=0,this.nativeRequestId){let e=this.nativeRequestId;this.nativeRequestId=``,await Ra(`mobile_cancel_speech`,{requestId:e}).catch(()=>{})}if(this.sessionId&&!this.legacy){let e=this.sessionId;this.sessionId=``,await fetch(`/api/speech/stream/cancel`,{method:`POST`,headers:{"X-Pisper-Speech-Session":e}}).catch(()=>{})}}async dispose(){await this.cancel(),this.listeners.clear()}};function Ua({chatSessionId:e=``}={}){return new Ha(e)}var Wa=`
|
|
512
512
|
class PisperVoiceInputProcessor extends AudioWorkletProcessor {
|
|
513
513
|
constructor(options) {
|
|
514
514
|
super()
|
|
@@ -548,6 +548,6 @@ class PisperVoiceInputProcessor extends AudioWorkletProcessor {
|
|
|
548
548
|
}
|
|
549
549
|
}
|
|
550
550
|
registerProcessor('pisper-voice-input', PisperVoiceInputProcessor)
|
|
551
|
-
`;async function Ba(e){let t=new Blob([za],{type:`application/javascript`}),n=URL.createObjectURL(t);try{await e.audioWorklet.addModule(n)}finally{URL.revokeObjectURL(n)}}async function Va(e,t){if(g(t),!navigator.mediaDevices?.getUserMedia)throw Error(`当前环境不支持麦克风采集。`);if(!window.AudioContext&&!window.webkitAudioContext)throw Error(`当前环境不支持音频处理。`);let n=await navigator.mediaDevices.getUserMedia({audio:{channelCount:1,echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},video:!1}),r=null,i=null,a=null,o=null,s=!1,c=null,l=()=>{if(s)return c??Promise.resolve();s=!0,t?.removeEventListener(`abort`,u);for(let e of n.getTracks())e.removeEventListener?.(`ended`,d),e.removeEventListener?.(`mute`,d),e.stop();return c=r?.close().catch(()=>{})??Promise.resolve(),i&&(i.port.onmessage=null,i.port.close()),a?.disconnect(),i?.disconnect(),o?.disconnect(),c},u=()=>{l()},d=()=>{s||(l(),window.dispatchEvent(new Event(`pisper:speech-interrupted`)))},f=()=>{if(g(t),s)throw new DOMException(`Microphone capture was interrupted.`,`AbortError`)};t?.addEventListener(`abort`,u,{once:!0});for(let e of n.getTracks()){if(s)break;e.addEventListener?.(`ended`,d),e.addEventListener?.(`mute`,d),e.readyState===`ended`&&d()}try{f(),r=new(window.AudioContext||window.webkitAudioContext)({latencyHint:`interactive`}),await Ba(r),f(),a=r.createMediaStreamSource(n),i=new AudioWorkletNode(r,`pisper-voice-input`,{numberOfInputs:1,numberOfOutputs:1,outputChannelCount:[1],processorOptions:{targetSampleRate:ja}}),o=r.createGain(),o.gain.value=0,i.port.onmessage=n=>{!s&&!t?.aborted&&e(new Float32Array(n.data))},a.connect(i),i.connect(o),o.connect(r.destination),await r.resume(),f()}catch(e){throw await l(),e}return{stop:l}}var Ha=32,Ua=50;function Wa(e,t){if(e instanceof DOMException&&e.name===`NotAllowedError`)return`permission`;let n=typeof e==`string`?e:e instanceof Error?e.message:typeof e==`object`&&e&&`message`in e?String(e.message):``;return n.includes(`microphone_permission_denied`)?`permission`:n||t}function Ga({onInsert:e,onLiveText:t,sessionId:n,disabled:r=!1,shortcutEnabled:i=!1,variant:a=`button`,controlRef:s}){let{t:c}=o(),l=ga([`asr`]),u=pn(e=>e.bindings.voiceInput),[d,f]=(0,Q.useState)(`idle`),[p,m]=(0,Q.useState)(``),h=(0,Q.useRef)(`idle`),g=e=>{h.current=e,f(e)},_=(0,Q.useRef)(null),v=(0,Q.useRef)(null),y=(0,Q.useRef)(null),b=(0,Q.useRef)(null),x=(0,Q.useRef)(0),S=(0,Q.useRef)(0),C=(0,Q.useRef)(()=>{}),w=(0,Q.useRef)(!1),T=(0,Q.useRef)(null),E=(0,Q.useRef)(null),D=(0,Q.useRef)(()=>{}),O=(0,Q.useRef)(0),k=(0,Q.useRef)(ca()),A=(0,Q.useRef)(0),[j,M]=(0,Q.useState)([]),N=(0,Q.useRef)([]),P=(0,Q.useRef)(null),F=(0,Q.useRef)(e),I=(0,Q.useRef)(t);F.current=e,I.current=t;let L=()=>{window.clearTimeout(S.current),S.current=0},R=async()=>{L();let e=y.current;y.current=null,e?.abort(),b.current?.(),b.current=null,P.current?.dispose(),P.current=null;let t=v.current;v.current=null;let n=_.current;_.current=null,await Promise.allSettled([t?.stop(),n?.dispose()])},z=e=>{console.warn(`[voice-input]`,e),m(e),g(`error`),window.clearTimeout(O.current),O.current=window.setTimeout(()=>{h.current===`error`&&(m(``),g(`idle`))},4e3)},B=()=>{L(),w.current=!1,g(`idle`),m(``)},V=()=>{T.current=null,E.current=null,x.current+=1,R(),I.current?.(null),B()};D.current=V,(0,Q.useEffect)(()=>{let e=()=>{(E.current!==x.current||T.current===x.current)&&D.current()},t=()=>{document.visibilityState===`hidden`&&e()},n=()=>D.current();return window.addEventListener(`blur`,e),window.addEventListener(`pisper:speech-interrupted`,n),document.addEventListener(`visibilitychange`,t),()=>{window.removeEventListener(`blur`,e),window.removeEventListener(`pisper:speech-interrupted`,n),document.removeEventListener(`visibilitychange`,t),window.clearTimeout(O.current),e()}},[n,i,r]),(0,Q.useEffect)(()=>{if(d!==`recording`){M([]),N.current=[];return}let e=()=>{let e=performance.now()/1e3,t=A.current,n=N.current,r=[];for(let i=0;i<Ha;i+=1){let a=i/31*2-1,o=Math.cos(a*Math.PI/2)**1.3,s=.1+.06*Math.sin(e*2.2+i*.55)+.04*Math.sin(e*3.7+i*.21),c=.75+.5*Math.abs(Math.sin(e*9+i*1.7)),l=Math.min(1,Math.max(.05,s+t*o*c*1.15)),u=n[i]??l,d=l>u?.55:.28;r.push(u+(l-u)*d)}N.current=r,M(r)};e();let t=window.setInterval(e,Ua);return()=>window.clearInterval(t)},[d]);let H=()=>!r&&(h.current===`idle`||h.current===`error`),U=async()=>{if(!H())return;let e=++x.current,t=new AbortController;y.current=t,w.current=!1,g(`requesting`),m(``),k.current.reset();let r=Ra({chatSessionId:n});_.current=r,b.current=r.onPartial(e=>{_.current===r&&I.current?.(e)});let i=null,a=async t=>{if(i?.dispose(),i=null,e!==x.current)return;if(t instanceof DOMException&&t.name===`AbortError`){let e=++x.current;if(await R(),e!==x.current)return;B();return}let n=++x.current;if(await R(),n!==x.current)return;let r=Wa(t,c(`chat:voiceInput.failed`));z(r===`permission`?c(`chat:voiceInput.permissionDenied`):r)};try{window.__PISPER_MOBILE_APP__&&(E.current=e);try{await Pa()}finally{E.current===e&&(E.current=null)}if(e!==x.current)return;if(window.__PISPER_MOBILE_APP__&&document.visibilityState===`hidden`){V();return}if(await l.ensureReady(t.signal),e!==x.current)return;if(r.start().then(()=>{},()=>a(Error(c(`chat:voiceInput.failed`)))),i=await ma(),e!==x.current){i.dispose();return}P.current=i;let n=i,o=await Va(t=>{if(e!==x.current)return;A.current=k.current.push(sa(t));let i=n.acceptPcm(t);(r.acceptPcm(t)||i)&&C.current()},t.signal);if(e!==x.current){await o.stop();return}v.current=o,g(`recording`),window.__PISPER_MOBILE_APP__&&(S.current=window.setTimeout(()=>C.current(),6e4))}catch(e){await a(e)}},ee=async()=>{if(h.current!==`recording`||w.current)return;T.current=null,w.current=!0,L();let e=++x.current;g(`transcribing`);let t=y.current;y.current=null,t?.abort();let n=v.current;v.current=null;let r=P.current;P.current=null;let i=_.current;try{if(await n?.stop(),e!==x.current)return;if(r&&!r.hasSpeech){if(r.dispose(),I.current?.(null),await R(),e!==x.current)return;B();return}r?.dispose();let t=await i?.finish();if(e!==x.current)return;if(!t)throw Error(c(`chat:voiceInput.empty`));if(F.current(t),await R(),e!==x.current)return;B()}catch(t){if(e!==x.current||(await R(),e!==x.current))return;I.current?.(null);let n=Wa(t,c(`chat:voiceInput.failed`));z(n===`permission`?c(`chat:voiceInput.permissionDenied`):n),w.current=!1}};C.current=()=>void ee(),oa({enabled:i&&!r,binding:u,onStart:()=>H()?(U(),T.current=x.current,!0):!1,onRelease:()=>{T.current===x.current&&(v.current?ee():V())},onCancel:()=>{T.current===x.current&&V()}});let te=d===`recording`?c(`chat:voiceInput.stop`):d===`requesting`?c(`chat:voiceInput.close`):d===`error`?p:c(`chat:voiceInput.open`),ne=u&&d!==`error`?`${te} (${vn(u)})`:te,re=d===`recording`?()=>void ee():d===`requesting`?()=>V():()=>void U(),ie=(0,Q.useRef)(re);ie.current=re;let ae=!r&&d!==`transcribing`;(0,Q.useEffect)(()=>{if(s)return s.current=ae?()=>ie.current():null,()=>{s.current=null}},[s,ae]);let oe=a===`menu`&&d===`idle`;return(0,$.jsxs)(`div`,{className:`relative flex flex-none items-center`,"data-voice-input":d,children:[d===`recording`&&(0,xi.createPortal)((0,$.jsx)(`div`,{"aria-hidden":`true`,className:`voice-capsule-pop pointer-events-none fixed bottom-4 left-1/2 z-[80] flex h-10 -translate-x-1/2 items-center gap-[3px] rounded-full bg-ink px-4 shadow-float`,children:j.map((e,t)=>(0,$.jsx)(`span`,{className:`w-[3px] rounded-full bg-on-ink`,style:{height:`${(3+e*19).toFixed(1)}px`,opacity:.55+e*.45,transition:`height 70ms linear`}},t))}),document.body),d===`error`&&(0,xi.createPortal)((0,$.jsxs)(`button`,{type:`button`,className:`voice-capsule-pop fixed bottom-4 left-1/2 z-[80] flex h-9 max-w-[min(480px,calc(100vw-32px))] -translate-x-1/2 cursor-pointer items-center gap-2 rounded-full border border-danger-border bg-solid px-4 text-xs text-danger shadow-float max-[650px]:h-11`,onClick:()=>{window.clearTimeout(O.current),m(``),g(`idle`)},children:[(0,$.jsx)(Lr,{size:13,className:`flex-none`}),(0,$.jsx)(`span`,{className:`truncate`,children:p})]}),document.body),(0,$.jsxs)(`button`,{type:`button`,hidden:oe,className:`relative grid size-8 min-w-8 cursor-pointer place-items-center rounded-sm border transition-colors disabled:cursor-not-allowed disabled:opacity-45 max-[650px]:size-9 max-[650px]:min-w-9 min-[651px]:pointer-coarse:size-11 min-[651px]:pointer-coarse:min-w-11 ${pe} ${d===`recording`?`border-danger bg-danger-soft text-danger`:d===`transcribing`||d===`requesting`?`border-transparent bg-star-soft text-accent-fg`:d===`error`?`border-transparent bg-danger-soft text-danger`:`border-transparent text-content-muted hover:bg-surface-hover hover:text-content`}`,title:ne,"aria-label":c(d===`recording`?`chat:voiceInput.stop`:`chat:voiceInput.open`),"aria-pressed":d===`recording`,disabled:r||d===`transcribing`,onClick:re,children:[d===`recording`&&(0,$.jsx)(`span`,{"aria-hidden":`true`,className:`absolute inset-0 animate-ping rounded-sm bg-danger opacity-25`}),d===`recording`?(0,$.jsx)(Lr,{size:17,className:G}):d===`transcribing`||d===`requesting`?(0,$.jsx)(ft,{className:`animate-spin ${G}`,size:16}):d===`error`?(0,$.jsx)(Lr,{size:17,className:G}):(0,$.jsx)(Rr,{size:17,className:G})]}),(0,$.jsx)(Aa,{manager:l,onClose:()=>{}})]})}var Ka={idle:{amp:.14,freq:1.7,speed:.22,spike:0,rot:.22,dim:.8,behavior:`calm`},requesting:{amp:.08,freq:1.6,speed:.3,spike:0,rot:.4,dim:.5,behavior:`calm`},listening:{amp:.15,freq:2,speed:.55,spike:.55,rot:.4,dim:1,behavior:`reactive`},transcribing:{amp:.08,freq:1.8,speed:1,spike:0,rot:1.5,dim:.95,behavior:`converge`},thinking:{amp:.2,freq:2.3,speed:.8,spike:0,rot:.85,dim:1,behavior:`swirl`},speaking:{amp:.13,freq:1.9,speed:.5,spike:.1,rot:.35,dim:1,behavior:`beat`},error:{amp:.12,freq:2.2,speed:1.2,spike:0,rot:.1,dim:.9,behavior:`jitter`}},qa=64,Ja=96,Ya=2.6,Xa=Math.PI*2,Za={dark:{base:[223,233,255],cyan:[89,230,255],magenta:[255,95,210],haloInner:[70,110,170],haloMid:[50,80,140],haloAlpha:.1,composite:`lighter`,alphaBase:.1,alphaFront:.68},light:{base:[34,44,76],cyan:[6,132,180],magenta:[176,48,150],haloInner:[110,140,210],haloMid:[130,160,220],haloAlpha:.16,composite:`source-over`,alphaBase:.18,alphaFront:.85}};function Qa(e,t,n){let r=Math.sin(e*127.1+t*311.7+n*74.7)*43758.5453123;return r-Math.floor(r)}function $a(e){return e*e*(3-2*e)}function eo(e,t,n){let r=Math.floor(e),i=Math.floor(t),a=Math.floor(n),o=$a(e-r),s=$a(t-i),c=$a(n-a),l=0;for(let e=0;e<=1;e+=1)for(let t=0;t<=1;t+=1)for(let n=0;n<=1;n+=1)l+=(e?o:1-o)*(t?s:1-s)*(n?c:1-c)*Qa(r+e,i+t,a+n);return l}function to(e){return 1+2.70158*(e-1)**3+1.70158*(e-1)**2}function no(e){let t=e*.9%1;return Math.exp(-(((t-.12)*9)**2))+.45*Math.exp(-(((t-.34)*9)**2))}function ro({stage:e,level:t,size:n=380,dark:r=!0}){let i=(0,Q.useRef)(null),a=(0,Q.useRef)(e),o=(0,Q.useRef)(t),s=(0,Q.useRef)(r);return a.current=e,o.current=t,s.current=r,(0,Q.useEffect)(()=>{let e=i.current;if(!e)return;let t=e.getContext(`2d`);if(!t)return;let r=Math.min(window.devicePixelRatio||1,2);e.width=n*r,e.height=n*r,t.scale(r,r);let c=new Float32Array(qa),l=new Float32Array(qa);for(let e=0;e<qa;e+=1){let t=-Math.PI/2+(e+.5)/qa*Math.PI;c[e]=Math.sin(t),l[e]=Math.cos(t)}let u=new Float32Array(Ja),d=new Float32Array(Ja);for(let e=0;e<Ja;e+=1){let t=e/Ja*Xa;u[e]=Math.cos(t),d[e]=Math.sin(t)}let f=n/2,p=n*.31,m=window.matchMedia(`(prefers-reduced-motion: reduce)`).matches,h=0,g=performance.now(),_=g,v=0,y=0,b={...Ka[a.current]},x=0,S=0,C=0,w=e=>{let r=Math.min((e-g)/1e3,.05);g=e;let i=Ka[a.current],T=Math.min(1,r*5);b={...i,amp:b.amp+(i.amp-b.amp)*T,freq:b.freq+(i.freq-b.freq)*T,speed:b.speed+(i.speed-b.speed)*T,spike:b.spike+(i.spike-b.spike)*T,rot:b.rot+(i.rot-b.rot)*T,dim:b.dim+(i.dim-b.dim)*T};let E=m?.35:1;v+=r*E,y+=b.rot*r*E,x+=(o.current-x)*Math.min(1,r*14);let D=Math.max(0,x-S-.02);S=x,C=Math.min(.6,C*.02**r+D*2.4);let O=x;b.behavior===`beat`?O=Math.max(.08,.4+.28*Math.abs(Math.sin(v*5.2))*Math.sin(v*1.6)+.12*Math.sin(v*9.1)):b.behavior===`converge`?O=.18:b.behavior===`jitter`?O=.3+.2*Math.sin(v*17):b.behavior!==`reactive`&&(O=.1+.05*Math.sin(v*1.3));let k=to(Math.min(1,Math.max(0,(e-_)/900))),A=b.behavior===`beat`?O:no(v)*.5+O*.5,j=k*(1+A*.04+C*.1);b.behavior===`converge`&&(j*=.9+.1*Math.sin(v*4.2)),t.clearRect(0,0,n,n);let M=Za[s.current?`dark`:`light`],N=t.createRadialGradient(f,f,0,f,f,p*1.7);N.addColorStop(0,`rgba(${M.haloInner[0]},${M.haloInner[1]},${M.haloInner[2]},${(M.haloAlpha*b.dim).toFixed(3)})`),N.addColorStop(.6,`rgba(${M.haloMid[0]},${M.haloMid[1]},${M.haloMid[2]},${(M.haloAlpha*.5*b.dim).toFixed(3)})`),N.addColorStop(1,`rgba(0,0,0,0)`),t.fillStyle=N,t.fillRect(0,0,n,n);let P=Math.sin(y),F=Math.cos(y),I=.38,L=Math.sin(I),R=Math.cos(I),z=v*b.speed,B=b.freq,V=b.amp*j,H=b.spike*(O+C),U=p*j,ee=Math.floor(v*15),te=b.dim*(.72+.5*A)+C*.3;t.globalCompositeOperation=M.composite;for(let e=0;e<qa;e+=1){let n=c[e],r=l[e];for(let i=0;i<Ja;i+=1){let a=r*u[i],o=n,s=r*d[i],c=eo(a*B+z,o*B+z*.7,s*B)-.5,l=1+c*2*V;b.behavior===`reactive`?l+=Math.max(c,0)**2*1.7*H:b.behavior===`swirl`?l+=.03*Math.sin(9*a+v*4.6):b.behavior===`jitter`&&(l+=.02*(Qa(e*Ja+i,ee,3)-.5));let p=a*l,m=o*l,h=s*l,g=p*F-h*P,_=p*P+h*F,y=m*R-_*L,x=m*L+_*R,S=Ya/(Ya-x),C=f+g*S*U,w=f+y*S*U,T=(x+1)/2,E=eo(a*1.25+31,o*1.25+z*.12,s*1.25-17),D=M.base;E>.62?D=M.magenta:E<.38&&(D=M.cyan);let O=(M.alphaBase+M.alphaFront*T*T)*te;if(O<.015)continue;let k=(1+1.4*T+H*.4)*(.55+.45*S);t.fillStyle=`rgba(${D[0]},${D[1]},${D[2]},${O.toFixed(3)})`,t.fillRect(C,w,k,k)}}t.globalCompositeOperation=`source-over`,h=requestAnimationFrame(w)};return h=requestAnimationFrame(w),()=>cancelAnimationFrame(h)},[n]),(0,$.jsx)(`canvas`,{ref:i,className:`pointer-events-none block`,style:{width:n,height:n},"aria-hidden":`true`})}var io=new Map;function ao(e,t){let n=io.get(e)??new Set;return n.add(t),io.set(e,n),()=>{n.delete(t),n.size||io.delete(e)}}function oo(e){for(let t of io.get(e.sessionId)??[])t(e)}function so(e,t){let n=t.messages.length-1;for(;n>=0&&t.messages[n].role!==`user`;)--n;let r=t.messages.slice(n+1).filter(e=>e.role===`agent`||e.role===`assistant`),i=r.find(e=>e.streaming)??r.at(-1);oo({sessionId:e,messageId:i?.id??``,prompt:t.messages[n]?.text,startedAt:t.startedAt??void 0,source:`snapshot`,users:t.messages.filter(e=>e.role===`user`),text:i?.text??``,status:t.error||i?.error?`failed`:t.streaming?i?`streaming`:`started`:`completed`,error:t.error||i?.error})}function co(e){let t=``,n=0,r=!1,i,a,o=()=>{a?.(),a=void 0},s=()=>{i=_(e),o()};return e.addEventListener(`abort`,s,{once:!0}),e.aborted&&s(),{get text(){return t},update(e){if(!(r||i)){if(e.length>32e3)throw Error(`Speech text exceeds the supported limit.`);if(!e.startsWith(t))throw Error(`The streamed speech response was rewritten.`);t=e,o()}},finish(e){r&&e===void 0||(r=!0,e!==void 0&&(i=e),o())},async*[Symbol.asyncIterator](){try{for(;;){if(g(e),i)throw i;if(n<t.length){let e=t.slice(n);n=t.length,yield e}else if(r)return;else await new Promise(e=>{a=e})}}finally{e.removeEventListener(`abort`,s),r=!0,o()}}}}function lo(e){let{t}=o(),n=(0,Q.useRef)({...e,t});n.current={...e,t};let[r,i]=(0,Q.useState)(`idle`),[a,s]=(0,Q.useState)(0),[c,l]=(0,Q.useState)(``),[u,d]=(0,Q.useState)([]),[f,p]=(0,Q.useState)(``),[m,h]=(0,Q.useState)(!1),[_,v]=(0,Q.useState)(0),y=(0,Q.useRef)(`idle`),b=(0,Q.useRef)(0),x=(0,Q.useRef)(null),S=(0,Q.useRef)(Promise.resolve()),C=(0,Q.useRef)(!1),w=(0,Q.useRef)(null),T=(0,Q.useRef)(!1),E=(0,Q.useRef)(!1),D=(0,Q.useRef)(!1),O=(0,Q.useRef)({start:async()=>{},commit:async()=>{},stop:()=>{}}),k=(0,Q.useCallback)(e=>{y.current=e,i(e)},[]),A=e=>T.current&&n.current.open&&e.sessionId===n.current.sessionId&&x.current===e&&b.current===e.generation&&!e.controller.signal.aborted,j=()=>!!(n.current.streaming||n.current.messages.some(e=>e.streaming));function M(){let e=w.current;w.current=null,e?.controller.abort()}function N(){if(w.current)return w.current.preparing;let e=new AbortController,t=n.current.sessionId,r=(async()=>{C.current||=(await n.current.ensureReady?.(e.signal),g(e.signal),!0);let{hotwords:r}=await Er(t,e.signal);await Cr({kinds:[`asr`,`tts`],hotwords:r},e.signal),g(e.signal)})().catch(t=>{throw w.current?.controller===e&&(w.current=null),e.abort(),t});return w.current={controller:e,preparing:r},r}function P(e){window.clearTimeout(e.limitTimer),e.limitTimer=void 0,e.microphone.abort(),e.endpoint?.dispose(),e.endpoint=void 0;let t=e.capture;return e.capture=void 0,t&&(e.captureStopping=t.stop()),e.captureStopping??Promise.resolve()}function F(e){if(e.cleanup)return e.cleanup;e.controller.abort(),e.unsubscribe?.(),e.unsubscribe=void 0,e.responseSubscription?.(),e.responseSubscription=void 0,e.checkOwnership=void 0;let t=P(e),n=e.recognizer;return e.recognizer=void 0,e.cleanup=Promise.allSettled([t,e.capturePending,e.recognizerDisposing,e.playback,n?.dispose()]).then(()=>{}),e.cleanup}function I(){b.current+=1;let e=x.current;if(x.current=null,!e)return;let t=Promise.resolve(),r=n.current.messages.filter(t=>t.role===`user`&&!e.baseline?.has(t.id)),i=n.current.sessionId===e.sessionId&&(r.length>1||r.length===1&&r[0].text?.trim()!==e.prompt);if(e.ownsRun&&!i){e.ownsRun=!1;try{t=Promise.resolve(e.abortRun?.()).catch(()=>{})}catch{}}S.current=Promise.allSettled([S.current,F(e),t]).then(()=>{})}function L(){D.current=!1,I(),k(`idle`),l(``),s(0),d(e=>e.filter(e=>!e.pending))}function R(e,t){if(!A(e))return;let r=t instanceof Error?t.message:typeof t==`string`?t:t&&typeof t==`object`&&`message`in t?t.message:void 0,i=typeof r==`string`&&r.trim()?r:n.current.t(`chat:voiceMode.failed`),a=t instanceof DOMException&&t.name===`NotAllowedError`||i.includes(`microphone_permission_denied`)?n.current.t(`chat:voiceInput.permissionDenied`):i;L(),p(a),k(`error`),n.current.notifyError?.(a)}function z(e){return new Promise(t=>{let n=e.controller.signal,r=()=>{window.clearTimeout(i),n.removeEventListener(`abort`,r),t()},i=window.setTimeout(r,50);n.addEventListener(`abort`,r,{once:!0}),n.aborted&&r()})}async function B(e,t,r){let i=e.controller.signal,a=co(i),o,s,c,l=!1,u=!1,f=!1,p=!1,m=!1,h=1/0,_=n=>{let r=n.filter(e=>e.role===`user`&&!t.has(e.id));return r.length>1||r.length===1&&r[0].text?.trim()!==e.prompt};e.checkOwnership=()=>{A(e)&&_(n.current.messages)&&(e.ownsRun=!1,R(e,Error(n.current.t(`chat:voiceMode.failed`))))};let v=e=>{a.update(e),d(t=>t.map(t=>t.id===r?{...t,text:e,pending:!e.trim()}:t))};e.responseSubscription=ao(e.sessionId,r=>{if(!(!A(e)||r.source!==`snapshot`&&t.has(r.messageId)))try{let t=r.source===`snapshot`,i=!!(c&&r.startedAt===c);if(r.users&&_(r.users)||r.prompt!==void 0&&r.prompt.trim()!==e.prompt||s&&r.runId&&s!==r.runId||c&&r.startedAt&&c!==r.startedAt||t&&!i&&!(p&&!r.startedAt&&r.status===`completed`)||!t&&o&&o!==r.messageId)throw e.ownsRun=!1,Error(n.current.t(`chat:voiceMode.failed`));if(p&&t)return;if(s||=r.runId,c||=r.startedAt,r.messageId&&(o=r.messageId),r.status===`recovering`){l=!0;return}if(t&&(l=!0,u=r.status===`streaming`||r.status===`started`),r.status===`started`)return;if(f=!0,r.status===`failed`)throw e.ownsRun=!1,Error(r.error||n.current.t(`chat:voiceMode.failed`));v(r.text),r.status===`completed`&&(p=!0,e.ownsRun=!1,a.finish())}catch(t){a.finish(t),R(e,t)}});let y=Promise.resolve().then(()=>(g(i),n.current.sendPrompt(e.prompt,[],!1,!1,null))).catch(t=>{throw e.ownsRun=!1,a.finish(t),t}).finally(()=>{!f&&!s&&!c&&(e.ownsRun=!1),m=!0,h=Date.now()+15e3}),b=async()=>{for(;A(e);){if(await z(e),!A(e))return;let r=n.current.messages.filter(e=>!t.has(e.id)),i=r.filter(e=>e.role===`user`);if(i.length>1||i.length===1&&i[0].text?.trim()!==e.prompt)throw Error(n.current.t(`chat:voiceMode.failed`));let s=r.filter(e=>e.role===`assistant`||e.role===`agent`),c=s.find(e=>e.error);if(c)throw Error(String(c.error));if(p&&m&&!j())return;let d=s.at(-1);if(!l&&d?.text&&(!f||m&&!j())){if(o&&o!==d.id)throw Error(n.current.t(`chat:voiceMode.failed`));o=d.id,v(d.text)}if(!l&&m&&!j()&&d?.text?.trim()){e.ownsRun=!1,a.finish();return}if(m&&(j()||u)&&(h=Date.now()+15e3),Date.now()>=h)throw Error(n.current.t(`chat:voiceMode.emptyReply`))}};try{e.playback=Promise.resolve().then(()=>n.current.speakText(a,i,()=>{A(e)&&k(`speaking`)})),await Promise.all([y,b(),e.playback])}catch(e){throw a.finish(e),e}finally{e.responseSubscription?.(),e.responseSubscription=void 0,e.checkOwnership=void 0,a.finish()}}async function V(){let e=x.current;if(!e||!A(e)||e.committed||y.current!==`listening`)return;e.committed=!0;let t=e.endpoint?.hasSpeech;k(`transcribing`),s(0);try{if(await P(e),!A(e))return;if(!t){L();return}let r=(await e.recognizer?.finish())?.trim();if(!A(e))return;e.unsubscribe?.(),e.unsubscribe=void 0;let i=e.recognizer;if(e.recognizer=void 0,e.recognizerDisposing=i?.dispose(),await e.recognizerDisposing,!A(e))return;if(l(``),!r)throw Error(n.current.t(`chat:voiceMode.emptyReply`));if(j()){L();return}let a=new Set(n.current.messages.map(e=>e.id));e.baseline=a,e.prompt=r;let o=`voice-agent-${e.generation}`;if(d(t=>[...t.slice(-4),{id:`voice-user-${e.generation}`,role:`user`,text:r},{id:o,role:`agent`,text:``,pending:!0}]),k(`thinking`),e.abortRun=n.current.onAbort,e.ownsRun=!0,await B(e,a,o),!A(e))return;D.current&&!E.current?(k(`idle`),await O.current.start()):L()}catch(t){R(e,t)}}async function H(){if(!T.current||!n.current.open||E.current||document.hidden||![`idle`,`error`,`speaking`].includes(y.current))return;I();let e={generation:++b.current,sessionId:n.current.sessionId,controller:new AbortController,microphone:new AbortController,permissionPending:!1,committed:!1,commitRequested:!1,ownsRun:!1};x.current=e,D.current=!0,p(``),l(``),s(0),k(`requesting`);let t=ca(),r=0;try{if(await S.current,!A(e)||(await N(),!A(e)))return;if(j()){L();return}e.permissionPending=!0;try{await Pa()}finally{e.permissionPending=!1}if(!A(e))return;if(document.hidden||j()){L();return}let n=await ma();if(!A(e)){n.dispose();return}e.endpoint=n;let i=Ra({chatSessionId:e.sessionId});if(e.recognizer=i,e.unsubscribe=i.onPartial(t=>{A(e)&&l(t)}),await i.start(),!A(e)||(e.capturePending=Va(a=>{if(!(!A(e)||e.committed||e.microphone.signal.aborted))try{let o=t.push(sa(a)),c=performance.now();c-r>=66&&(r=c,s(o));let l=i.acceptPcm(a),u=n.acceptPcm(a);(l||u)&&(e.commitRequested=!0,y.current===`listening`?O.current.commit():e.microphone.abort())}catch(t){R(e,t)}},e.microphone.signal).then(async t=>(!A(e)||e.microphone.signal.aborted?await t.stop():e.capture=t,t)),await e.capturePending,!A(e)))return;if(k(`listening`),e.commitRequested){await O.current.commit();return}e.limitTimer=window.setTimeout(()=>void O.current.commit(),6e4)}catch(t){A(e)&&e.commitRequested&&e.microphone.signal.aborted?(k(`listening`),await O.current.commit()):R(e,t)}}O.current={start:H,commit:V,stop:L};let U=(0,Q.useCallback)(()=>O.current.commit(),[]),ee=(0,Q.useCallback)(()=>{O.current.stop();let e=b.current;S.current.then(()=>{b.current===e&&T.current&&O.current.start()})},[]),te=(0,Q.useCallback)(()=>{y.current===`listening`?O.current.commit():y.current===`thinking`||y.current===`speaking`?ee():(y.current===`idle`||y.current===`error`)&&(E.current=!1,h(!1),O.current.start())},[ee]),ne=(0,Q.useCallback)(()=>{let e=!E.current;E.current=e,h(e),e?O.current.stop():O.current.start()},[]),re=(0,Q.useCallback)(()=>{M(),O.current.stop(),p(``),v(0)},[]);return(0,Q.useEffect)(()=>{if(!e.open)return;T.current=!0,C.current=!1,E.current=!1,h(!1),d([]),v(0),k(`idle`),O.current.start();let t=()=>{x.current?.permissionPending&&window.__PISPER_MOBILE_APP__||(M(),O.current.stop())},n=()=>{document.hidden&&t()},r=()=>{M(),O.current.stop()};return window.addEventListener(`blur`,t),window.addEventListener(`pisper:speech-interrupted`,r),document.addEventListener(`visibilitychange`,n),()=>{T.current=!1,M(),O.current.stop(),window.removeEventListener(`blur`,t),window.removeEventListener(`pisper:speech-interrupted`,r),document.removeEventListener(`visibilitychange`,n)}},[e.open,e.sessionId,k]),(0,Q.useEffect)(()=>{x.current?.checkOwnership?.()},[e.messages,e.streaming]),(0,Q.useEffect)(()=>{if(![`listening`,`transcribing`,`thinking`,`speaking`].includes(r))return;let e=window.setInterval(()=>v(e=>e+1),1e3);return()=>window.clearInterval(e)},[r]),{stage:r,level:a,partial:c,turns:u,error:f,muted:m,elapsed:_,toggleMain:te,toggleMute:ne,hangUp:re,commitListening:U,interrupt:ee}}function uo(e){return{idle:e(`chat:voiceMode.idle`),requesting:e(`chat:voiceMode.requesting`),listening:e(`chat:voiceMode.listening`),transcribing:e(`chat:voiceMode.transcribing`),thinking:e(`chat:voiceMode.thinking`),speaking:e(`chat:voiceMode.speaking`),error:e(`chat:voiceMode.failed`)}}function fo(e){let t=Math.floor(e/60),n=e%60;return`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}`}function po(){let[e,t]=(0,Q.useState)(()=>document.documentElement.dataset.theme!==`light`);return(0,Q.useEffect)(()=>{let e=document.documentElement,n=()=>t(e.dataset.theme!==`light`);n();let r=new MutationObserver(n);return r.observe(e,{attributes:!0,attributeFilter:[`data-theme`]}),()=>r.disconnect()},[]),e}function mo(e){let[t,n]=(0,Q.useState)(()=>typeof window>`u`?380:Math.max(48,Math.min(window.innerWidth*.52,window.innerHeight-304,460)));return(0,Q.useEffect)(()=>{if(!e)return;let t=()=>n(Math.max(48,Math.min(window.innerWidth*.52,window.innerHeight-304,460)));return t(),window.addEventListener(`resize`,t),()=>window.removeEventListener(`resize`,t)},[e]),Math.floor(t)}function ho({open:e,sessionId:t,messages:n,streaming:r,sendPrompt:i,onAbort:a,onClose:s}){let{t:c}=o(),l=po(),u=ga([`asr`,`tts`]),d=lo({open:e,sessionId:t,messages:n,streaming:r,sendPrompt:i,onAbort:a,ensureReady:u.ensureReady,speakText:(e,t,n)=>Ca(e,u.selectedVoice,t,n)}),{stage:f,level:p,partial:m,turns:h,error:g,elapsed:_}=d,v=mo(e),y=(0,Q.useRef)(null);(0,Q.useEffect)(()=>{if(!e)return;let t=document.activeElement;return y.current?.focus({preventScroll:!0}),()=>{t instanceof HTMLElement&&t.isConnected&&t.focus({preventScroll:!0})}},[e]);let b=()=>{try{d.hangUp()}finally{u.close(),s()}},x=f===`listening`||f===`transcribing`||f===`thinking`||f===`speaking`||f===`requesting`;if((0,Q.useEffect)(()=>{if(!e)return;let t=e=>{if(!(u.open||e.defaultPrevented||e.isComposing)){if(e.key===`Escape`){e.preventDefault(),b();return}if(e.key===`Tab`){let t=[...y.current?.querySelectorAll(`button:not(:disabled)`)||[]],n=t[0],r=t[t.length-1];e.shiftKey&&(document.activeElement===n||document.activeElement===y.current)?(e.preventDefault(),r?.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n?.focus())}e.target instanceof Element&&e.target.closest(`input, textarea, select, button, [contenteditable="true"]`)||e.key===` `&&!e.repeat&&(e.preventDefault(),x?d.hangUp():d.toggleMain())}};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[e,s,x,u.open]),!e)return null;let S=uo(c),C=h[h.length-1],w=f===`listening`&&m?m:C?`${C.role,``}${la(C.text,120)}`:``,T=f===`error`?g||c(`chat:voiceMode.failed`):S[f];return(0,xi.createPortal)((0,$.jsxs)(`div`,{className:`fixed inset-0 z-[90] grid grid-cols-[minmax(0,1fr)] grid-rows-[minmax(0,1fr)_100px_108px] overflow-hidden bg-chrome pt-[env(safe-area-inset-top)] pr-[env(safe-area-inset-right)] pb-[env(safe-area-inset-bottom)] pl-[env(safe-area-inset-left)] text-content select-none`,ref:y,tabIndex:-1,role:`dialog`,"aria-modal":`true`,"aria-label":c(`chat:voiceMode.title`),children:[(0,$.jsxs)(`header`,{className:`pointer-events-none absolute left-[calc(env(safe-area-inset-left)_+_28px)] top-[calc(env(safe-area-inset-top)_+_24px)] flex items-center gap-3`,children:[(0,$.jsx)(`span`,{className:`inline-block size-2 rounded-full ${x?`animate-pulse bg-star`:`bg-content-faint`}`,"aria-hidden":`true`}),(0,$.jsx)(`span`,{className:`text-[13px] font-semibold tracking-[0.3em] text-content`,children:`PISPER`})]}),(0,$.jsxs)(`div`,{className:`absolute top-[calc(env(safe-area-inset-top)_+_16px)] right-[calc(env(safe-area-inset-right)_+_16px)] z-10 flex items-center gap-1`,children:[(0,$.jsxs)(qt,{children:[(0,$.jsx)(Gt,{asChild:!0,children:(0,$.jsx)(Y,{variant:`ghost`,size:`icon-sm`,"aria-label":c(`chat:speechModels.title`),onClick:()=>{d.hangUp(),u.show()},children:(0,$.jsx)(Ar,{})})}),(0,$.jsx)(Kt,{children:c(`chat:speechModels.title`)})]}),(0,$.jsxs)(qt,{children:[(0,$.jsx)(Gt,{asChild:!0,children:(0,$.jsx)(Y,{variant:`ghost`,size:`icon-sm`,className:`size-11 flex-none`,"aria-label":c(`chat:speechModels.close`),onClick:b,children:(0,$.jsx)(At,{})})}),(0,$.jsx)(Kt,{children:c(`chat:speechModels.close`)})]})]}),(0,$.jsx)(Aa,{manager:u,onClose:()=>d.hangUp()}),(0,$.jsx)(`div`,{className:`flex min-h-0 items-center justify-center pt-16 pb-6`,children:(0,$.jsx)(ro,{stage:f,level:p,size:v,dark:l})}),(0,$.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-col items-center justify-center gap-2 px-6 text-center`,children:[(0,$.jsx)(`div`,{className:`max-w-full text-xs font-medium tracking-normal ${f===`error`?`max-h-full overflow-y-auto break-words text-danger`:`line-clamp-2 text-content-muted`}`,role:`status`,"aria-live":`polite`,children:T}),(0,$.jsx)(`p`,{className:`m-0 line-clamp-2 min-h-[22px] max-w-[640px] text-[15px] leading-[1.6] text-content`,children:w})]}),(0,$.jsx)(`div`,{className:`relative flex justify-center pt-3 sm:items-center sm:pt-0`,children:(0,$.jsx)(`button`,{type:`button`,className:`h-11 cursor-pointer rounded-full border px-8 text-sm font-medium transition-colors ${x?`border-control bg-key text-content shadow-key hover:bg-surface-hover`:`border-transparent bg-star text-on-accent shadow-primary hover:bg-star-hover`}`,onClick:()=>x?d.hangUp():d.toggleMain(),children:c(x?`chat:voiceMode.endConversation`:`chat:voiceMode.startConversation`)})}),(0,$.jsxs)(`div`,{className:`pointer-events-none absolute bottom-[calc(env(safe-area-inset-bottom)_+_12px)] right-[calc(env(safe-area-inset-right)_+_20px)] flex items-center gap-2.5 sm:bottom-[calc(env(safe-area-inset-bottom)_+_36px)] sm:right-[calc(env(safe-area-inset-right)_+_28px)]`,children:[(0,$.jsx)(`span`,{className:`hidden size-9 place-items-center rounded-full border border-key-border bg-key text-xs text-accent-fg shadow-key sm:grid`,"aria-hidden":`true`,children:x?`●`:`○`}),(0,$.jsx)(`span`,{className:`font-mono text-[13px] tracking-[0.08em] text-content-muted tabular-nums`,children:fo(_)})]}),(0,$.jsx)(`div`,{className:`absolute bottom-[env(safe-area-inset-bottom)] left-[calc(env(safe-area-inset-left)_+_20px)] sm:bottom-[calc(env(safe-area-inset-bottom)_+_36px)] sm:left-[calc(env(safe-area-inset-left)_+_28px)]`,children:(0,$.jsxs)(qt,{children:[(0,$.jsx)(Gt,{asChild:!0,children:(0,$.jsx)(Y,{variant:`ghost`,size:`icon`,className:`size-11 flex-none`,disabled:!x&&!d.muted,"aria-label":f===`speaking`||f===`thinking`?c(`chat:voiceMode.interrupt`):d.muted?c(`chat:voiceMode.unmute`):c(`chat:voiceMode.mute`),onClick:()=>f===`speaking`||f===`thinking`?d.interrupt():d.toggleMute(),children:f===`speaking`||f===`thinking`?(0,$.jsx)(wt,{}):d.muted?(0,$.jsx)(Lr,{}):(0,$.jsx)(Rr,{})})}),(0,$.jsx)(Kt,{children:f===`speaking`||f===`thinking`?c(`chat:voiceMode.interrupt`):d.muted?c(`chat:voiceMode.unmute`):c(`chat:voiceMode.mute`)})]})})]}),document.body)}var go=[`plan`,`goal`,`team`];function _o(e){return go.includes(e)?e:`plan`}function vo({sessionId:e,runMode:t,goalsAvailable:n,teamAvailable:r,workflowsAvailable:i,goal:a,streaming:o,compaction:s,value:c,selection:l,clearDraft:u,captureSubmission:d,promptRef:f,onCompact:p,onGoalPause:m,onSend:h,onQueue:g,onAbort:_,requestTranscriptBottom:v}){let[y,b]=(0,Q.useState)(()=>_o(t)),x=(0,Q.useRef)(t);x.current=t;let[S,C]=(0,Q.useState)(null),[w,T]=(0,Q.useState)(null),E=(0,Q.useRef)(null),[D,O]=(0,Q.useState)(!1),[k,A]=(0,Q.useState)(!1),[j,M]=(0,Q.useState)(!1),[N,P]=(0,Q.useState)(``),F=(0,Q.useRef)(null),I=(0,Q.useRef)(e);I.current=e;let[L,R]=(0,Q.useState)(!1),[z,B]=(0,Q.useState)(null),V=(0,Q.useRef)(z);return V.current=z,(0,Q.useEffect)(()=>{b(_o(x.current)),E.current=null,C(null),T(null),F.current=null,A(!1),M(!1),P(``),O(!1),R(!1),B(null)},[e]),(0,Q.useEffect)(()=>{b(_o(t))},[e,t]),(0,Q.useEffect)(()=>{n||b(`plan`),!r&&y===`team`&&b(`goal`),!i&&z?.kind===`workflow`&&B(null)},[y,n,z?.kind,r,i]),(0,Q.useEffect)(()=>{a?.status===`active`&&b(a.mode===`team`&&r?`team`:`goal`)},[a?.id,a?.mode,a?.status,r]),(0,Q.useEffect)(()=>{if(!a?.id){C(null);return}let e=a.mode===`team`?a.teamTokenBudget:a.tokenBudget,t=e==null?null:Number(e),n=t!==null&&Number.isFinite(t)&&t>0?t:null;a.mode===`team`?T(n):C(n)},[a?.id,a?.mode,a?.teamTokenBudget,a?.tokenBudget]),{composerExecutionMode:y,setComposerExecutionMode:b,goalTokenBudget:S,setGoalTokenBudget:C,teamTokenBudget:w,setTeamTokenBudget:T,queueing:D,submitting:k,stopping:j,submitError:N,stop:async()=>{if(j||!_)return;let t=e;M(!0);try{await _()}catch(e){I.current===t&&P(e instanceof Error?e.message:String(e))}finally{I.current===t&&M(!1)}},compactingManually:L,invocation:z,setInvocation:B,requestGoalPause:()=>{if(E.current)return E.current;let e=Promise.resolve().then(()=>m?.());return E.current=e,e.catch(()=>{}),e},compactContext:async()=>{if(!(!p||o||L||s?.active)){R(!0);try{await p()}finally{R(!1)}}},submit:async(t,n=`steer`)=>{if(t.preventDefault(),F.current||j||l.preparingAttachments?.length||!c.trim()&&!l.attachments.length&&!z||o&&(!c.trim()&&!l.attachments.length||!g))return;let r={},i=e;F.current=r;let s=()=>I.current===i&&F.current===r,p=d?.(),_=!1,x=()=>{_||(_=!0,p?p.accept():u(),s()&&(A(!1),O(!1),b(`plan`),V.current===z&&B(null),v(),f.current&&(f.current.style.height=`auto`),F.current=null))};P(``),o?O(!0):A(!0);try{if(o){await g?.(c,l.attachments,n,x)&&x();return}let e=E.current;if(e?(await e,E.current=null):a?.status===`active`&&(y===`plan`||y!==a.mode)&&await m?.(),!s())return;let t=await h(c,l.attachments,y===`goal`||y===`team`,y===`team`,y===`team`?w:y===`goal`?S:null,z,x);!_&&t!==!1&&x()}catch(e){s()&&(E.current=null,P(e instanceof Error?e.message:String(e)))}finally{s()&&(F.current=null,A(!1),O(!1))}}}}var yo=[`[role="dialog"]`,`[role="alertdialog"]`,`[role="menu"]`,`[role="listbox"]`,`.anchored-popup-menu`,`.voice-input-popup`,`.git-diff-dialog-backdrop`,`[data-slot='popover-content']`,`[data-slot='dropdown-menu-content']`,`[data-slot='select-content']`,`[data-slot='sheet-content']`].join(`, `);function bo(){return[...document.querySelectorAll(yo)].some(e=>e.dataset.state!==`closed`&&e.getAttribute(`aria-hidden`)!==`true`&&e.getClientRects().length>0)}var xo=(0,Q.memo)(function({session:e,draft:t,emptyState:n,shortcutEnabled:r=!1,messages:i,transcriptLoadState:a=`ready`,messageStart:s,hasNewer:c,hasOlder:l,loadingOlder:u,olderError:d,model:f,thinkingLevel:p,availableThinkingLevels:m,thinkingStatus:h,thinkingMessage:g,executionMode:_,goal:v,team:y,currentActivity:b,activityFeed:x,tools:S,thinkingText:C,queuedInputs:O,withdrawingInputIds:k,compaction:A,contextUsage:j,sessionUsage:M,sessionTreeRevision:N,sessionTreePulse:P,cwd:F,availableModels:I,pendingRuntimeSelection:L,switchingModel:R,switchingThinking:z,switchingCwd:B,switchingPermission:H,streaming:U,runStartedAt:ee,lastActivityAt:te,runFinishedAt:ne,runStopped:re,runNotice:ae,approvals:se,questions:ce,error:de,pendingAsset:fe,notify:pe,onOpenModelSettings:q,onAssetConsumed:xe,onLoadOlder:Te,onLoadLatest:Ee,onModelChange:De,onThinkingLevelChange:Oe,onExecutionModeChange:ke,onRunModeChange:Ae,onCompact:je,onCompactionThresholdChange:Me,onGoalPause:Ne,onGoalBudgetChange:Pe,onApproval:Fe,onAnswerQuestion:Ie,onWorkspace:Le,onRename:Re,onBranchFromHere:ze,onCreateChildSession:Be,onRetryLastTurn:Ve,onTreeNavigated:Ke,onSend:Je,onQueue:$e,onWithdrawQueuedInput:nt,onSendQueuedInputNow:it,onAbort:at}){let ot=(0,Q.useContext)(He),st=(0,Q.useContext)(Si),ct=(0,Q.useContext)(Qe),lt=!!ct?.phone,{t:J}=o(),ut=pn(e=>e.bindings),dt=D(),ft=E(),pt=dt||ft,mt=T(e=>e.capabilities),gt=w(mt,`goals`),_t=w(mt,`multiAgent`),yt=w(mt,`workflows`),bt=w(mt,`visualGeneration`),xt=w(mt,`inputInterrupt`),St=xt?`interrupt`:`steer`,{value:Ct,updateValue:wt,selection:Tt,clearDraft:Et,restoreDraft:Dt,captureSubmission:Ot}=W(t?me:e.id),[kt,At]=(0,Q.useState)(!1),[jt,Mt]=(0,Q.useState)(!1),Nt=(0,Q.useRef)(null),It=(0,Q.useRef)(null),[Bt,Vt]=(0,Q.useState)(!1),[Ht,Ut]=(0,Q.useState)(!1),[Wt,Gt]=(0,Q.useState)(``),[Kt,qt]=(0,Q.useState)(!1),[Yt,Y]=(0,Q.useState)(0),Xt=Tt.addAttachments,Zt=(0,Q.useRef)(null),Qt=(0,Q.useRef)(null),$t=(0,Q.useRef)(`steer`),en=ut.steerMessage,tn=()=>{$t.current=St,Zt.current?.form?.requestSubmit()},rn=_n(`sendMessage`),an=_n(`voiceInput`),on=(0,Q.useRef)(null),cn=(0,Q.useRef)(null);(0,Q.useEffect)(()=>{if(!r)return;let e=e=>{!fn(e)&&gn(e,ut.focusComposer)&&(e.preventDefault(),Zt.current?.focus())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,ut.focusComposer]);let ln=!!t;(0,Q.useEffect)(()=>{if(!ln)return;let e=()=>{let e=Zt.current;e&&(e.focus(),e.setSelectionRange(e.value.length,e.value.length),e.scrollTop=e.scrollHeight,nn())};return(nn()||!pt)&&e(),window.addEventListener(sn,e),()=>window.removeEventListener(sn,e)},[ln,pt]);let un=(0,Q.useRef)(!1),dn=a!==`ready`||i.length>0,mn=U?pt?J(`board:composer.placeholderRunningTouch`):en?J(`board:composer.placeholderRunning`,{queue:rn,steer:vn(en)}):J(`board:composer.placeholderRunningQueueOnly`,{queue:rn}):J(t?`chat:newTask.placeholder`:`board:composer.placeholder`),yn=()=>Y(e=>e+1),bn=e=>{wt(e),requestAnimationFrame(()=>{let e=Zt.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,220)}px`)})},{composerExecutionMode:xn,setComposerExecutionMode:Sn,goalTokenBudget:Cn,setGoalTokenBudget:Tn,teamTokenBudget:En,setTeamTokenBudget:Dn,queueing:On,submitting:kn,stopping:An,submitError:jn,stop:Mn,compactingManually:Nn,invocation:Pn,setInvocation:Fn,requestGoalPause:In,compactContext:Ln,submit:Rn}=vo({sessionId:e.id,runMode:e.runMode,goalsAvailable:gt,teamAvailable:_t,workflowsAvailable:yt,goal:v,streaming:U,compaction:A,value:Ct,selection:Tt,clearDraft:Et,captureSubmission:Ot,promptRef:Zt,onCompact:je,onGoalPause:Ne,onSend:Je,onQueue:$e,onAbort:at,requestTranscriptBottom:yn}),zn=(0,Q.useRef)(Mn);zn.current=Mn,(0,Q.useEffect)(()=>{if(!ct||!r||!U)return;let e=new WeakSet,t=t=>{t.key===`Escape`&&bo()&&e.add(t)},n=t=>{if(t.key!==`Escape`||!t.isTrusted||t.defaultPrevented||t.isComposing||t.keyCode===229||e.has(t))return;let n=t.target,r=Qt.current,i=n===document.body||n===document.documentElement||n instanceof Element&&!!n.closest(`[data-session-conversation]`)&&!n.closest(`.terminal-panel, .xterm`);!r||!i||hn(n)&&n!==Zt.current||(t.preventDefault(),zn.current())};return window.addEventListener(`keydown`,t,!0),window.addEventListener(`keydown`,n),()=>{window.removeEventListener(`keydown`,t,!0),window.removeEventListener(`keydown`,n)}},[ct,r,U]);let Bn=e=>{v?.status===`active`&&(e===`plan`||e!==v.mode)&&In().catch(()=>{}),Sn(e),Ae(e)},Vn=(0,Q.useContext)(tt),Hn=ct?.onNewTask||ct?.phone?.onNewTask,Un=t?t.cwd:null,Wn=(0,Q.useCallback)(()=>Un===null?X.getSessionCommands(e.id):X.getWorkspaceCommands(Un),[Un,e.id]),Gn=Vi(e.id),Kn=[...Hn&&!t?[{invocation:`/new`,description:J(`chat:commands.builtin.new`),run:Hn}]:[],...Se({t:J,models:I,model:L?.model||f,onModel:e=>De(e),thinkingLevels:L?.model?[]:m||[],thinkingLevel:L?.thinkingLevel||p||``,thinkingLabel:e=>_e(J,e),onThinking:e=>Oe(e),executionModes:[`approval-required`,`workspace-write`,`full-access`],executionMode:_,executionLabel:e=>J(e===`full-access`?`chat:focusSession.fullAccess`:e===`workspace-write`?`chat:focusSession.workspaceWrite`:`chat:focusSession.approvalRequired`),onExecutionMode:e=>ke(e),runModes:U?[]:[`plan`,...gt?[`goal`]:[],...gt&&_t?[`team`]:[]],runMode:xn,runModeLabel:e=>J(e===`team`?`chat:focusSession.teamMode`:e===`goal`?`chat:focusSession.goalMode`:`chat:focusSession.planMode`),onRunMode:e=>Bn(e)}),...t?[]:[{invocation:`/btw`,description:J(`chat:commands.builtin.btw`)}],...je?[{invocation:`/compact`,description:J(`chat:commands.builtin.compact`),run:()=>Ln()}]:[],...Vn&&!t?[{invocation:`/changes`,description:J(`chat:commands.builtin.changes`),run:()=>Vn.show(`changes`)}]:[]],qn=L?.model||f||``,Yn=Jn(I.find(e=>e.key===qn)?.label||qn.split(`/`).at(-1)||``,I.map(e=>e.label)),Xn=e?.botId,Zn=(0,Q.useMemo)(()=>ct?{model:Yn,...Xn?{botId:Xn}:{}}:null,[Xn,Yn,ct]),Qn=(0,Q.useRef)([]);(0,Q.useEffect)(()=>()=>{for(let e of Qn.current)window.clearTimeout(e);Qn.current=[]},[e.id]);let $n=rt(e.id,!!Xn,()=>{for(let e of[1500,4e3,9e3])Qn.current.push(window.setTimeout(()=>void Ee?.(),e))}),er=(0,Q.useRef)(U),tr=$n.reload;(0,Q.useEffect)(()=>{let e=er.current&&!U;if(er.current=U,!Xn||!e)return;let t=[1500,4e3].map(e=>window.setTimeout(tr,e));return()=>{for(let e of t)window.clearTimeout(e)}},[Xn,tr,U]);let nr=(0,Q.useMemo)(()=>Xn?{sessionId:e.id,agents:new Map($n.agents.map(e=>[e.id,e])),links:new Map($n.links.map(e=>[e.id,e])),reload:$n.reload}:null,[Xn,e.id,$n.agents,$n.links,$n.reload]),rr=(0,Q.useMemo)(()=>{let e=lt?i:i.filter(e=>!Xe(e));return Xn?We(e,$n.agents,$n.links):e},[Xn,i,lt,$n.agents,$n.links]),ir=Number(j?.percent),ar=j?.percent!=null&&Number.isFinite(ir)?ir:null,sr=i[Ye(i)],cr=sr?.role===`agent`?sr:null,lr=jn||de||(U?``:String(cr?.error||``)),ur=!c&&!jn&&!U&&i.some(e=>e.role===`user`);(0,Q.useEffect)(()=>{At(!1),Vt(!1)},[e.id]),(0,Q.useEffect)(()=>{fe&&(Xt([fe]),xe?.())},[fe,xe,Xt]);let dr=async e=>{let t=await nt?.(e);if(!t||!Dt(t))return;let n=Zt.current;requestAnimationFrame(()=>{!n||Zt.current!==n||!n.isConnected||(n.focus(),n.style.height=`auto`,n.style.height=`${Math.min(n.scrollHeight,220)}px`)})},fr=async e=>{await nt?.(e)},pr=e=>{wt(e),requestAnimationFrame(()=>{let e=Zt.current;e&&(e.focus(),e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,220)}px`)})},Z=Di({cwd:F,selection:Tt}),mr=(0,$.jsx)(Ga,{sessionId:e.id,shortcutEnabled:r,variant:lt?`button`:`menu`,controlRef:cn,onLiveText:e=>{if(e===null){on.current!==null&&(bn(on.current),on.current=null);return}on.current===null&&(on.current=(Zt.current?.value??Ct).trimEnd());let t=on.current;bn(t&&e?`${t}\n${e}`:t||e)},onInsert:e=>{let t=on.current??(Zt.current?.value??Ct).trimEnd();on.current=null,bn(t?`${t}\n${e}`:e),requestAnimationFrame(()=>Zt.current?.focus())}}),hr=J(`board:composer.plusMenu`),gr=(0,$.jsxs)(zt,{children:[(0,$.jsx)(Lt,{asChild:!0,children:(0,$.jsxs)(`button`,{type:`button`,className:Jt(ve,`composer-plus-trigger aria-expanded:bg-surface-hover aria-expanded:text-content max-[650px]:rounded-full max-[650px]:bg-surface-muted max-[650px]:dark:bg-surface-active max-[650px]:text-content`),ref:It,title:hr,"aria-label":hr,"data-composer-plus":!0,children:[(0,$.jsx)(vt,{size:18,className:G,"aria-hidden":`true`}),Tt.attachments.length>0&&(0,$.jsx)(`span`,{className:`absolute -top-0.5 -right-0.5 grid h-4 min-w-4 place-items-center rounded-full border-2 border-panel bg-star px-0.5 text-[10px] leading-none font-medium text-on-accent tabular-nums`,children:Tt.attachments.length})]})}),(0,$.jsxs)(Rt,{align:`start`,side:`top`,className:`min-w-56 p-1 [&_[role=menuitem]]:min-h-9 max-[650px]:[&_[role=menuitem]]:min-h-11 pointer-coarse:[&_[role=menuitem]]:min-h-11`,"data-composer-plus-menu":!0,onCloseAutoFocus:()=>{let e=Nt.current;Nt.current=null,e&&window.setTimeout(e,0)},children:[lt&&U&&(0,$.jsxs)(Pt,{"data-composer-steer":!0,disabled:!Ct.trim()&&!Tt.attachments.length&&!Pn,onSelect:tn,children:[(0,$.jsx)(we,{"aria-hidden":`true`}),(0,$.jsxs)(`span`,{className:`grid min-w-0`,children:[(0,$.jsx)(`span`,{children:J(`board:composer.steerNow`)}),(0,$.jsx)(`span`,{className:`truncate text-xs text-content-muted`,children:J(`board:composer.steerHint`)})]})]}),(0,$.jsxs)(Pt,{"data-composer-plus-item":`attachment`,onSelect:()=>void Z.choose(),children:[(0,$.jsx)(ht,{"aria-hidden":`true`}),J(`chat:focusSession.addAttachment`)]}),(0,$.jsxs)(Pt,{"data-composer-plus-item":`resource`,onSelect:()=>At(!0),children:[(0,$.jsx)(V,{"aria-hidden":`true`}),J(`chat:resourcePicker.open`)]}),bt&&(0,$.jsxs)(Pt,{"data-composer-plus-item":`visual`,onSelect:()=>void ia({templatePrompt:J(`chat:focusSession.visualPromptTemplate`),configureHint:J(`chat:focusSession.configureVisualModelFirst`),notify:pe,onOpenModelSettings:q,onInsertPrompt:pr}),children:[(0,$.jsx)(ie,{"aria-hidden":`true`}),J(`chat:focusSession.generateImage`)]}),lt&&Xn?null:lt?(0,$.jsxs)(Pt,{"data-composer-plus-item":`mode`,onSelect:()=>{Nt.current=()=>Mt(!0)},children:[(0,$.jsx)(zr,{"aria-hidden":`true`}),J(`board:composer.modeChip`),(0,$.jsx)(Ft,{className:`tracking-normal`,children:J(_===`full-access`?`chat:focusSession.fullAccessShort`:_===`workspace-write`?`chat:focusSession.workspaceWriteShort`:`chat:focusSession.approvalRequiredShort`)})]}):(0,$.jsxs)(Pt,{"data-composer-plus-item":`voice`,onSelect:()=>cn.current?.(),children:[(0,$.jsx)(Rr,{"aria-hidden":`true`}),J(`chat:voiceInput.open`),an&&(0,$.jsx)(Ft,{children:an})]}),t?.plusMenuItems]})]}),_r=(0,$.jsx)(Ri,{sheet:lt,collapse:lt,open:jt,onOpenChange:e=>{Mt(e),!e&<&&window.setTimeout(()=>It.current?.focus(),0)},approvalMode:_,onApprovalModeChange:ke,approvalDisabled:H,runMode:xn,onRunModeChange:Bn,runModeDisabled:!!U,goalsAvailable:gt,teamAvailable:_t,goal:v,tokenBudget:xn===`team`?En:Cn,onTokenBudgetChange:xn===`team`?Dn:Tn,onSaveTokenBudget:e=>Pe?.(e)}),vr=(0,$.jsx)(he,{sheet:lt,model:L?.model||f,models:I,onModelChange:De,thinkingLevel:L?.thinkingLevel||p||`medium`,levels:L?.model?[]:m||[],status:h,message:g,onThinkingChange:Oe,modelDisabled:R||z,thinkingDisabled:z||R,deferred:U,pendingModel:!!L?.model,usage:(0,$.jsx)(ye,{usage:j,sessionUsage:M,model:f,availableModels:I,onThresholdChange:Me})}),yr=(0,$.jsx)(`div`,{className:Jt(`flex items-center`,lt?`shrink-0`:`min-w-0 shrink [&_.model-effort-pill]:max-w-full @max-[300px]/composer-footer:[&_.model-effort-pill>span:nth-child(n+2)]:hidden`),children:vr}),br=(0,Q.useMemo)(()=>wn(ce),[ce]),xr={session:e,cwd:F||``,streaming:!!U,treeAvailable:i.length>0,onRename:Re,onWorkspace:Le,workspaceDisabled:!!(U||B),onCompact:je?()=>void Ln():void 0,compactDisabled:!!(U||Nn||A?.active||i.length===0),goalAvailable:gt,goalEngaged:xn===`goal`,goalDisabled:!!U,onToggleGoal:()=>Bn(xn===`goal`?`plan`:`goal`),workflowsAvailable:yt,onVoiceMode:()=>Ut(!0),notify:pe??(()=>void 0)},Sr=ct&&(0,$.jsx)(na,{visible:i.length>0,open:Bt,sessionId:e.id,streaming:!!U,revision:N,pulseToken:P,onOpenChange:Vt,onNavigated:async e=>{e!==null&&pr(e),await Ke?.(),yn()},onCreateChildSession:e=>Be(e),notify:pe,children:(e,t)=>lt?(0,$.jsx)(Ei,{...xr,runStartedAt:ee,approvals:se.length,failed:!!(!U&&(de||cr?.error)),stopped:!!(!U&&re),contextPercent:ar,leading:st,branches:t.branches,onOpenTree:t.open}):(0,$.jsx)(wi,{...xr,contextPercent:ar,branches:t.branches,onOpenTree:t.open})}),Cr=t?(0,$.jsx)(Pi,{phone:lt,leading:st,project:lt?t.renderProjectControl(`header`):void 0}):Sr,wr=(0,$.jsx)(et,{emptyState:t?(0,$.jsx)(Ni,{}):n,layoutMeasurementKey:`fixed`,sessionId:e.id,messages:rr,transcriptLoadState:a,messageStart:s,hasNewer:c,onLoadLatest:Ee,hasOlder:l,loadingOlder:u,olderError:d,currentActivity:b,team:y,activityFeed:x,tools:S,thinkingText:C,compaction:A,streaming:U,runStartedAt:ee,lastActivityAt:te,runFinishedAt:ne,runStopped:re,runNotice:ae,error:de,scrollRequest:Yt,cwd:F,lineage:e.lineage,switchingCwd:B,onLoadOlder:Te,onBranchFromHere:ze,onCreateChildSession:Be,onRetryLastTurn:Ve,onPromptSelect:pr,onWorkspace:Le,collapseEarlierTurns:lt},`transcript`),Tr=e=>Ce(e.dataTransfer)?(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`copy`),qt(!0),!0):!1,Er=(0,$.jsxs)(`form`,{className:Jt(`focus-composer-shell relative z-20 mx-auto flex w-[min(768px,calc(100%_-_48px))] shrink-0 flex-col gap-2 pt-2 pb-3 @max-[700px]:w-[calc(100%_-_24px)] max-[650px]:pb-2.5`,dn&&`before:pointer-events-none before:absolute before:inset-x-0 before:-top-9 before:h-9 before:bg-linear-to-b before:from-transparent before:to-panel`),onSubmit:e=>{let t=$t.current;$t.current=`steer`;let n=oe(Ct);if(n!==null){e.preventDefault(),n&&(Gn.ask(n),wt(``));return}if(!U&&(L||R||z)){e.preventDefault();return}Rn(e,ct?t:`steer`)},children:[Gn.state&&(0,$.jsx)(Bi,{state:Gn.state,cwd:F||void 0,onDismiss:()=>{Gn.dismiss(),Zt.current?.focus()}}),(0,$.jsx)(Ue,{approvals:se,onResolve:Fe,sessionTitle:e.name||e.id,cwd:F||``}),br[0]&&Ie&&(0,$.jsx)(ra,{question:br[0],more:br.length-1,collapsed:se.length>0,onAnswer:Ie},br[0].id),yt&&!t&&(0,$.jsx)(li,{sessionId:e.id}),Pn&&(0,$.jsx)(be,{invocation:Pn,onRemove:()=>Fn(null)}),Tt.attachmentError&&(0,$.jsx)(`span`,{className:`text-[var(--danger)] text-[13px]`,children:Tt.attachmentError}),lr&&(0,$.jsx)(Ge,{error:lr,onRetry:ur?Ve:void 0,className:`w-full`}),(0,$.jsxs)(`div`,{className:`flex min-w-0 flex-col`,children:[(0,$.jsx)(K,{streaming:U,compaction:A,startedAt:ee,stopping:An,onStop:()=>void Mn(),runRow:!lt,queuedInputs:O,withdrawingInputIds:k,onEdit:nt?dr:void 0,onCancel:nt?fr:void 0,onSendNow:xt&&it?e=>void it(e):void 0,queueList:!lt}),t?.notice&&(0,$.jsx)(`div`,{className:`px-1`,children:t.notice}),(0,$.jsxs)(`div`,{className:Jt(`focus-composer relative flex min-w-0 flex-col rounded-[var(--composer-radius,22px)] [corner-shape:var(--composer-corner-shape,round)] border border-control bg-solid shadow-composer transition-[border-color,box-shadow] duration-(--d-fast) ease-(--ease) has-[textarea:focus]:border-focus has-[textarea:focus]:ring-3 has-[textarea:focus]:ring-focus-ring max-[650px]:rounded-[28px] max-[650px]:border-stroke-strong max-[650px]:shadow-none max-[650px]:has-[textarea:focus]:border-control max-[650px]:has-[textarea:focus]:ring-0 [&>.attachment-tray]:px-3 [&>.attachment-tray]:pt-3 [&_textarea]:w-full [&_textarea]:min-w-0 [&_textarea]:min-h-11 [&_textarea]:max-h-[220px] [&_textarea]:resize-none [&_textarea]:overflow-y-auto [&_textarea]:border-0 [&_textarea]:[outline:0]! [&_textarea]:bg-transparent [&_textarea]:px-4 [&_textarea]:pt-3 [&_textarea]:pb-1 [&_textarea]:text-[length:calc(var(--app-message-font-size)*.9375)] max-[650px]:[&_textarea]:px-3.5 max-[650px]:[&_textarea]:text-[length:var(--app-message-font-size)] [&_textarea]:[font-family:var(--font-content-family)] [&_textarea]:font-[400] [&_textarea]:leading-5 [&_textarea]:text-content [&_textarea]:placeholder:text-content-muted`,Kt&&`border-focus ring-3 ring-focus-ring`),onDragEnter:Tr,onDragOver:Tr,onDragLeave:e=>{let t=e.relatedTarget;t instanceof Node&&e.currentTarget.contains(t)||qt(!1)},onDrop:e=>{qt(!1),Tt.dropFiles(e)},children:[Kt&&(0,$.jsx)(`div`,{role:`status`,className:`pointer-events-none absolute inset-0 z-10 grid place-items-center rounded-[inherit] border border-dashed border-focus bg-panel px-4 text-center text-sm text-content`,children:J(`chat:focusSession.dropAttachment`)}),(0,$.jsx)(ki,{attachments:Tt.attachments,preparing:Tt.preparingAttachments,onRemove:Tt.removeAttachment}),(0,$.jsx)(ge,{placement:`top`,resourceKey:e.id,loadCommands:Wn,builtinCommands:Kn,value:Ct,onChange:wt,inputRef:Zt}),(0,$.jsx)(`textarea`,{ref:Zt,rows:1,"aria-label":J(`chat:focusSession.taskDescription`),value:Ct,onChange:e=>{wt(e.target.value),e.currentTarget.style.height=`auto`,e.currentTarget.style.height=`${Math.min(e.currentTarget.scrollHeight,220)}px`},onPaste:Tt.pasteFiles,onCompositionStart:()=>un.current=!0,onCompositionEnd:()=>window.setTimeout(()=>un.current=!1,0),onKeyDown:e=>{let t=e.nativeEvent.isComposing||un.current;if(ct&&U&&!t&&en&&gn(e.nativeEvent,en)){e.preventDefault(),$t.current=St,e.currentTarget.form?.requestSubmit();return}if(e.key===`Tab`&&e.shiftKey&&!e.altKey&&!e.ctrlKey&&!e.metaKey&&!t&&!U){let t=zi(xn,{goalsAvailable:gt,teamAvailable:_t});if(t){e.preventDefault(),Bn(t),Gt(J(t===`team`?`chat:focusSession.teamMode`:t===`goal`?`chat:focusSession.goalMode`:`chat:focusSession.planMode`));return}}!t&&gn(e.nativeEvent,ut.sendMessage)&&(e.preventDefault(),e.currentTarget.form?.requestSubmit()),!ct&&U&&!t&&e.key===`Escape`&&!e.defaultPrevented&&(e.preventDefault(),Mn())},"data-mobile-composer-input":pt||void 0,enterKeyHint:pt&&ut.sendMessage===`Enter`?`send`:`enter`,placeholder:mn}),(0,$.jsx)(`span`,{role:`status`,className:`sr-only`,children:Wt}),(0,$.jsxs)(`div`,{className:`focus-composer-footer @container/composer-footer flex min-w-0 items-center gap-1 px-2 pt-1 pb-2 max-[650px]:gap-2 max-[650px]:pt-2 max-[650px]:pb-3`,"data-composer-toolbar":!0,children:[gr,Z.input,lt&&!Xn&&yr,!lt&&t?.renderProjectControl(`chip`),!Xn&&_r,(0,$.jsx)(`span`,{className:`min-w-0 flex-1`}),mr,!lt&&!Xn&&yr,(0,$.jsx)(le,{streaming:U,queueing:On,submitting:kn,stopping:An,preparing:Tt.preparingAttachments.length>0,hasDraft:!!(Ct.trim()||Tt.attachments.length||Pn),canQueue:!!$e,blockedReason:!U&&(L||R||z)?J(`chat:focusSession.waitingForModel`):void 0,disabled:!U&&(!!L||R||z||On||!Ct.trim()&&!Tt.attachments.length&&!Pn),onLongPress:lt&&U?tn:void 0,longPressHint:J(`board:composer.longPressSteer`),onStop:lt?()=>void Mn():void 0})]})]})]})]},`composer`);return(0,$.jsxs)(or,{className:Jt(`focus-session [--chat-content-width:768px] [.session-dock-panel_&]:overflow-hidden [.session-dock-panel_&]:min-h-0 [.session-dock-panel_&]:border-0 [.session-dock-panel_&]:rounded-[0] [.session-dock-panel_&]:bg-[var(--panel)] [.session-dock-panel_&]:p-0 [.session-dock-panel_&]:shadow-[none] [[data-theme='dark']_.session-dock-panel_&]:bg-[var(--main-surface-bg)] min-[651px]:[[data-density='compact']_.app-card:not(&)]:p-[10px] max-[650px]:min-h-[460px] max-[650px]:[.session-dock-panel_&]:min-h-0 relative flex h-full min-h-0 flex-col ${dn?`has-conversation`:`is-empty`}`,t&&`min-[651px]:[&_[data-chat-region=messages]]:!flex-none min-[651px]:[&_[data-chat-region=messages]]:mt-[max(48px,calc((100dvh-520px)/2))] min-[651px]:[&_[data-chat-region=messages]]:!overflow-visible min-[651px]:[&_.transcript]:!overflow-visible min-[651px]:[&_.transcript]:!p-0 min-[651px]:[&_.transcript]:!pb-6`),"data-chat-message-style":`bubble`,children:[(0,$.jsxs)(`div`,{ref:Qt,className:`flex h-full min-h-0 min-w-0 flex-1 flex-col overflow-hidden`,children:[(0,$.jsx)(`div`,{className:`shrink-0`,"data-chat-region":`header`,children:ot?.headerHost?(0,xi.createPortal)(Cr,ot.headerHost):ot?null:Cr}),(0,$.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-hidden`,"data-chat-region":`messages`,"data-focus-region":`content`,children:(0,$.jsx)(Ze.Provider,{value:nr,children:Zn?(0,$.jsx)(qe.Provider,{value:Zn,children:wr}):wr})}),(0,$.jsx)(`div`,{className:`shrink-0`,"data-chat-region":`composer`,"data-focus-region":`composer`,children:Er})]}),ot?.sourceActionHost&&(0,xi.createPortal)((0,$.jsx)(Oi,{cwd:F,selection:Tt}),ot.sourceActionHost),(0,$.jsx)(Ai,{open:kt,sessionId:e.id,cwd:F||``,onClose:()=>At(!1),onSelect:Fn,onCommandSelect:e=>pr(ue(e,Ct))}),(0,$.jsx)(ho,{open:Ht,sessionId:e.id,sessionName:e.name||e.id,messages:i,streaming:U,sendPrompt:async(...e)=>{await Je(...e)},onAbort:at,onClose:()=>Ut(!1)})]})}),So=(0,Q.createContext)(null),Co=40,wo=[],To=()=>void 0;function Eo(e){let t=e?.queue;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t.startAfter;return typeof n==`string`?n:``}function Do({draft:e}){let t=(0,Q.useContext)(So),{t:n}=o(),r=n(`board:home.draftTitle`),i=(0,Q.useMemo)(()=>({id:``,name:r,cwd:e.cwd,runMode:e.runMode}),[e.cwd,e.runMode,r]);if(!t)return null;let a=t.pendingAsset?.asset&&!t.pendingAsset.targetSessionId?t.pendingAsset.asset:null;return(0,$.jsx)(`div`,{className:`session-dock-panel h-full w-full min-w-0 min-h-0 overflow-hidden [container-type:inline-size] bg-panel`,"data-new-task-draft":!0,children:(0,$.jsx)(xo,{session:i,shortcutEnabled:!0,draft:e,messages:wo,transcriptLoadState:`ready`,model:e.model||t.defaultModel,thinkingLevel:e.thinkingLevel,availableThinkingLevels:e.availableThinkingLevels,executionMode:e.executionMode,runMode:e.runMode,activityFeed:wo,tools:wo,queuedInputs:wo,approvals:wo,cwd:e.cwd,availableModels:t.availableModels,pendingAsset:a,onAssetConsumed:t.onAssetConsumed,notify:t.notify,onOpenModelSettings:t.openModelSettings,onModelChange:e.onModelChange,onThinkingLevelChange:e.onThinkingLevelChange,onExecutionModeChange:e.onExecutionModeChange,onRunModeChange:e.onRunModeChange,onApproval:To,onWorkspace:To,onRename:To,onBranchFromHere:To,onCreateChildSession:To,onRetryLastTurn:To,onAbort:To,onSend:(n,r,i,a,o,s,c)=>t.sendNewTask(e,n,r,i,a,o,s,{onAccepted:c})})})}function Oo({sessionId:e,onCreateSession:t}){let n=(0,Q.useContext)(So),r=e??(n?.activeId||``);return r?(0,$.jsx)(ko,{sessionId:r,panelId:`single-${r}`,shortcutEnabled:!0},r):(0,$.jsx)(Ao,{onNewSession:t})}function ko({sessionId:e,panelId:t,shortcutEnabled:n,onFocusCapture:r}){let i=(0,Q.useContext)(So),{t:a}=o(),s=(0,Q.useContext)(Qe),c=T(e=>e.capabilities),l=i?.subscribeSessionState,u=i?.getSessionState,d=(0,Q.useMemo)(()=>t=>l?.(e,t)??(()=>{}),[l,e]),f=(0,Q.useMemo)(()=>()=>u?.(e),[u,e]),p=(0,Q.useSyncExternalStore)(d,f),m=i?.sessions.find(t=>t.id===e),h=p||Ve,g=Je(h,m),_=Eo(m),v=Ie(p,m),y=p&&Object.hasOwn(p,`team`)?p.team:m?.team??null,b=Oe(v,{streaming:g})?v:null,x=i?.sessionTreePulseSessionId===e?i.sessionTreePulseToken:0,S=i?.loadSessionMessages,C=i?.loadSessionThinkingLevel,E=(0,Q.useRef)(``);(0,Q.useEffect)(()=>{e&&S?.(e,{limit:Co})},[S,e]),(0,Q.useEffect)(()=>{!e||!m||!C||h.thinkingStatus||(h.availableThinkingLevels||[]).length||E.current!==e&&(E.current=e,C(e))},[C,m,e,h.availableThinkingLevels,h.thinkingStatus,g]);let D=(0,Q.useMemo)(()=>({onLoadLatest:()=>i?.loadSessionMessages(e,{force:!0}),onLoadOlder:()=>i?.loadOlderMessages(e)??!1,onModelChange:t=>i?.switchSessionModel(e,t),onThinkingLevelChange:t=>i?.switchSessionThinkingLevel(e,t),onExecutionModeChange:t=>i?.switchSessionExecutionMode(e,t)??!1,onRunModeChange:t=>i?.switchSessionRunMode(e,t)??!1,onGoalPause:()=>i?.pauseGoal(e),onGoalBudgetChange:t=>i?.setGoalBudget(e,t),onCompact:()=>i?.compactSession(e),onApproval:(t,n)=>i?.resolveToolApproval(e,t,n),onAnswerQuestion:async(t,n)=>{await i?.answerQuestion(e,t,n)},onWorkspace:()=>{m&&i?.selectSessionWorkspace(m)},onRename:()=>{m&&i?.renameSession(m)},onBranchFromHere:(e,t)=>{if(m)return i?.branchFromEntry(m,e,t)},onCreateChildSession:e=>{if(m)return i?.createChildSession(m,e)},onRetryLastTurn:()=>i?.retryLastTurn(e),onTreeNavigated:()=>i?.reloadSessionBranch(e),onSend:(t,n,r,a,o,s,c)=>i?.sendPrompt(t,e,n,r,a,o,s,{onAccepted:c}),onQueue:(t,n,r,a)=>i?.queuePrompt(t,e,n,r,a)??!1,onWithdrawQueuedInput:t=>i?.withdrawQueuedInput(e,t)??Promise.resolve(null),onSendQueuedInputNow:t=>i?.sendQueuedInputNow(e,t)??Promise.resolve(!1),onAbort:()=>i?.abort(e)}),[i,e,m]);if(!i||!m)return(0,$.jsxs)(`div`,{className:`session-dock-missing flex h-full min-h-[180px] items-center justify-center gap-2 text-sm text-content-secondary`,children:[(0,$.jsx)(Dt,{size:16}),i?`Session unavailable`:`Loading session`]});let O=i.pendingAsset?.asset&&(!i.pendingAsset.targetSessionId||i.pendingAsset.targetSessionId===e)?i.pendingAsset.asset:null,k=h.historyWindow?.messages||h.messages||wo,A=h.loaded?`ready`:h.loading||!h.error?`loading`:`error`,j=!!(h.recovering&&!k.length&&!h.error),M=h.lifecycle?.phase===`completed`&&!h.error&&!h.runStopped,N=typeof h.runStartedAt==`string`?h.runStartedAt:null,P=h.goal??m.goal??null,F=_&&i.sessions.find(e=>e.id===_)?.name||``,I=_!==null&&!g&&!k.length?(0,$.jsx)($n,{compact:!0,className:`min-h-full`,title:a(`chat:focusSession.queuedTitle`),description:F?a(`chat:focusSession.queuedAfter`,{title:F}):a(`chat:focusSession.queuedAfterUnknown`),action:(0,$.jsx)(Y,{variant:`secondary`,size:`sm`,className:`pointer-coarse:min-h-11`,onClick:()=>void X.startQueuedSession(e).then(()=>i.loadSessionMessages(e,{force:!0})).catch(e=>i.notify(Z(e),`error`)),children:a(`chat:focusSession.startQueuedNow`)})}):void 0,L=(0,$.jsx)(xo,{session:m,emptyState:I,shortcutEnabled:n,messages:k,transcriptLoadState:j?`loading`:A,hasNewer:!!h.historyWindow,messageStart:h.historyWindow?.messageStart??h.messageStart,hasOlder:h.historyWindow?.hasOlder??h.hasOlder,loadingOlder:h.loadingOlder,olderError:h.olderError,model:h.model||m.model||i.defaultModel,thinkingLevel:h.thinkingLevel||m.thinkingLevel||`medium`,availableThinkingLevels:h.availableThinkingLevels||wo,thinkingStatus:h.thinkingStatus||``,thinkingMessage:h.thinkingMessage||``,executionMode:h.executionMode||m.executionMode||`approval-required`,runMode:h.runMode||m.runMode||`plan`,goal:P,team:y,plan:b,currentActivity:h.currentActivity,activityFeed:h.activityFeed||wo,tools:h.tools||wo,thinkingText:h.thinkingText||``,queuedInputs:h.queuedInputs||wo,withdrawingInputIds:h.withdrawingInputIds||wo,compaction:h.compaction,contextUsage:h.contextUsage,sessionUsage:h.sessionUsage,sessionTreeRevision:h.sessionTreeRevision,sessionTreePulse:x,cwd:h.cwd||m.cwd,availableModels:i.availableModels,pendingRuntimeSelection:h.pendingRuntimeSelection,switchingModel:h.switchingModel,switchingThinking:h.switchingThinking,switchingCwd:h.switchingCwd,switchingPermission:h.switchingPermission,streaming:g,runStartedAt:h.runStartedAt,lastActivityAt:h.lastActivityAt,runFinishedAt:h.runFinishedAt,runStopped:h.runStopped,runNotice:h.runNotice,approvals:h.approvals||wo,questions:h.questions||wo,error:h.error||(i.activeId===e?i.globalError:``),pendingAsset:O,onAssetConsumed:i.onAssetConsumed,notify:i.notify,onOpenModelSettings:i.openModelSettings,onCompactionThresholdChange:i.setCompactionThreshold,...D});return(0,$.jsx)(`div`,{className:Jt(`session-dock-panel w-full h-full min-w-0 min-h-0 overflow-hidden [container-type:inline-size] bg-panel`,s&&`animate-[fade-in_var(--d-fast)_var(--ease-enter)]`),onFocusCapture:r,"data-session-panel":e,children:s?(0,$.jsx)(bi,{sessionId:e,messages:k,cwd:h.cwd||m.cwd||``,active:n,plan:b,goal:P,team:y,activity:h.activityFeed?.length?h.activityFeed:h.tools||wo,planTab:!!(b?.items?.length||P||y),streaming:g,completed:M,runStartedAt:N,requestConfirm:i.requestConfirm,children:L},e):(0,$.jsx)(ni,{messages:k,taskName:m.name||e,cwd:h.cwd||m.cwd||``,sessionId:e,panelId:t||`mobile-${e}`,active:n,mobile:i.mobileLayout,plan:b,streaming:g,completed:M,runStartedAt:N,plansAvailable:w(c,`plans`),requestConfirm:i.requestConfirm,children:L},e)})}function Ao({onNewSession:e,newSessionShortcut:t}){let{t:n}=o();return(0,$.jsxs)(`div`,{className:`flex h-full min-h-[180px] flex-col items-center justify-center gap-1.5 px-6 text-center`,children:[(0,$.jsx)(Qn,{className:`mb-1.5`}),(0,$.jsx)(`strong`,{className:`text-sm font-medium text-content`,children:n(`chat:chatDock.openAChatToBegin`)}),(0,$.jsx)(`span`,{className:`max-w-[320px] text-xs leading-relaxed text-content-muted`,children:n(`chat:chatDock.openAChatFromTheSessionListOrSplitItInAnyDirection`)}),e?(0,$.jsxs)(Y,{variant:`secondary`,className:`mt-3`,onClick:()=>void e(),children:[(0,$.jsx)(vt,{"aria-hidden":`true`}),n(`chat:chatDock.newChat`),t?(0,$.jsx)(Xt,{"aria-hidden":`true`,className:`ml-1.5 pointer-coarse:hidden`,children:t.split(/\+(?=.)/).map(e=>(0,$.jsx)(Zt,{children:e},e))}):null]}):null]})}var jo=1e4;function Mo(e,t){return{defaultModel:e.model?`${e.provider}/${e.model}`:t(`chat:chatPage.noModelConfigured`),availableModels:e.providers.flatMap(e=>e.configured&&e.enabled?e.models.filter(e=>e.kind===`chat`).map(t=>({key:`${e.id}/${t.id}`,provider:e.id,modelId:t.id,label:t.name||t.id,providerName:e.name||e.id})):[])}}function No(e){let t=e.getQueryData(m)?.sessions,n=e.getQueryData([`config`]);return Array.isArray(t)&&t.length&&n?{sessions:t,config:n}:null}function Po({notify:e}){let{t:r}=o(),i=f(),[a]=(0,Q.useState)(()=>No(i)),[s,c]=(0,Q.useState)(()=>a?.sessions??[]),[l,p]=(0,Q.useState)(()=>n.getItem(u.activeSession)||``),[h,g]=(0,Q.useState)({}),[_,v]=(0,Q.useState)(!a),[y,b]=(0,Q.useState)(``),[x,S]=(0,Q.useState)(()=>a?Mo(a.config,r).defaultModel:r(`chat:chatPage.waitingForConfiguration`)),[C,w]=(0,Q.useState)(()=>a?Mo(a.config,r).availableModels:[]),T=(0,Q.useRef)(s),E=(0,Q.useRef)(h),D=(0,Q.useRef)(new Map),O=(0,Q.useRef)(null),k=(0,Q.useRef)(new Map),A=(0,Q.useRef)(new Set),j=(0,Q.useRef)(0),M=(0,Q.useRef)(0),[N]=(0,Q.useState)(L),R=(0,Q.useCallback)(e=>{let t=T.current,n=typeof e==`function`?e(t):e;if(n===t)return n;let r=i.setQueryData(m,e=>e?{...e,sessions:n}:void 0)?.sessions??n;return r!==T.current&&(T.current=r,c(r)),r},[i]),B=(0,Q.useCallback)(()=>{if(j.current)return;let e=i.getQueryData(m)?.sessions;if(!(!Array.isArray(e)||e===T.current)){if(e.length)M.current=0;else if(T.current.length&&Date.now()<M.current)return;T.current=e,c(e)}},[i]);(0,Q.useEffect)(()=>{B();let e=d(m);return i.getQueryCache().subscribe(t=>{t.type===`updated`&&t.query.queryHash===e&&B()})},[i,B]),(0,Q.useEffect)(()=>Qt(window,e=>{N.record(e),R(t=>F(t,e))}),[N,R]),(0,Q.useEffect)(()=>$t(window,e=>{R(t=>z(t,e))}),[R]);let V=(0,Q.useCallback)(e=>{let t=A.current.size?Object.fromEntries(Object.entries(e).filter(([e])=>!A.current.has(e))):e,n=E.current;E.current=t,g(t);let r=Object.keys(t).filter(e=>t[e].streaming!==n[e]?.streaming);if(r.length){let e=new Set(r);i.setQueryData(m,n=>n&&{...n,sessions:n.sessions.map(n=>e.has(n.id)?{...n,streaming:t[n.id].streaming}:n)})}let a=new Set([...Object.keys(n),...Object.keys(t)]);for(let e of a){if(n[e]===t[e])continue;let r=D.current.get(e);if(r)for(let e of[...r])e()}},[i]);(0,Q.useEffect)(()=>un(window,({deletedIds:e})=>{N.remove(e);let t=new Set(e),n=R(e=>e.filter(e=>!t.has(e.id)));p(e=>t.has(e)?n[0]?.id||``:e);let r=E.current;e.some(e=>e in r)&&V(Object.fromEntries(Object.entries(r).filter(([e])=>!t.has(e))))}),[V,N,R]);let H=(0,Q.useCallback)((e,t)=>{let n=D.current.get(e)||new Set;return n.add(t),D.current.set(e,n),()=>{n.delete(t),n.size||D.current.delete(e)}},[]),U=(0,Q.useCallback)(e=>E.current[e]||Ve,[]),ee=(0,Q.useCallback)((e,t)=>{if(!e||A.current.has(e))return;let n=E.current,r=n[e]||Ve,i=Me(r,t);i!==r&&V({...n,[e]:i})},[V]),te=(0,Q.useCallback)((e,{panelOpen:t=!1,localStreamOwned:n=!1}={})=>{if(!e||t||n||k.current.has(e))return!1;let r=E.current,i=r[e];if(!i||Re(i))return!1;let a={...r};return delete a[e],V(a),!0},[V]),ne=(0,Q.useCallback)(e=>{if(!e)return;A.current.add(e);let t={...E.current};delete t[e],V(t)},[V]),re=(0,Q.useCallback)(e=>{if(A.current.has(e))return()=>{};let t=k.current;t.set(e,(t.get(e)??0)+1);let n=!1;return()=>{if(n)return;n=!0;let r=t.get(e)??0;r>1?t.set(e,r-1):(t.delete(e),te(e))}},[te]),ie=(0,Q.useCallback)(async(e,{preserveExistingOnEmpty:t=!1}={})=>{let n=N.getRevision();t&&(j.current+=1);let r;try{let e=await X.listSessions(),i=!!(t&&!e.sessions.length&&T.current.length);i&&(M.current=Date.now()+jo),r=i?T.current:N.reconcile(e.sessions,n)}finally{t&&(--j.current,B())}return R(r),p(e||(e=>r.some(t=>t.id===e)?e:r[0]?.id||``)),ln(),r},[B,N,R]),ae=(0,Q.useCallback)(e=>{p(e.id),R(t=>P(t,[e])),ee(e.id,{messages:[],tools:[],approvals:[],queuedInputs:[],permissionMode:e.permissionMode||`ask`,executionMode:e.executionMode||`approval-required`,runMode:e.runMode||`plan`,goal:e.goal||null,plan:Fn(e,null),contextUsage:e.contextUsage||null,sessionUsage:e.sessionUsage||null,compaction:null,streaming:!1,error:``,loaded:!0,pageSize:40,messageStart:0,hasOlder:!1,olderCursor:null,runStartedAt:null,lastActivityAt:null,runFinishedAt:null,runStopped:!1,runNotice:``})},[ee,R]),oe=(0,Q.useCallback)((t=``,{inheritRecentCwd:n=!0}={})=>{if(O.current)return O.current;let i=(async()=>{try{b(``);let i=await X.createSession(r(`chat:chatPage.newChat`),I(t,T.current,n));ae(i);try{await ie(i.id)}catch(e){b(r(`chat:chatPage.theChatWasCreatedButTheListCouldNotBeRefreshedError`,{error:Z(e)}))}return e(r(`chat:chatPage.newChatCreated`)),i.id}catch(e){return b(Z(e)),``}})();return O.current=i,i.finally(()=>{O.current===i&&(O.current=null)}),i},[ae,e,ie,r]);(0,Q.useEffect)(()=>{let i=!0,o=N.getRevision();return(a?Promise.resolve([{sessions:a.sessions},a.config]):Promise.all([X.listSessions({refresh:!1}),X.getConfig()])).then(async([a,s])=>{if(!i)return;let c=Mo(s,r);S(c.defaultModel),w(c.availableModels);let l=a.sessions;if(!l.length&&(O.current||Object.keys(E.current).length)){if(await O.current,!i)return;o=N.getRevision(),l=(await X.listSessions()).sessions}if(!i)return;l=N.reconcile(l,o),R(e=>P(e,l));for(let e of l)ee(e.id,{team:e.team||null,agents:e.agents||[],plan:Fn(e,null),...e.streaming?{streaming:!0,recovering:!0,loaded:!1,error:``}:{}});let d=n.getItem(u.activeSession),f=new Set([...l.map(e=>e.id),...Object.keys(E.current)]);if(p(e=>f.has(e)?e:d&&f.has(d)?d:l[0]?.id||``),typeof window<`u`&&window.__PISPER_MOBILE_APP__)try{let{consumeRemoteFallbackNotice:n}=await t(async()=>{let{consumeRemoteFallbackNotice:e}=await import(`./mobile-remote-fallback-C2Q0wAa6.js`);return{consumeRemoteFallbackNotice:e}},__vite__mapDeps([123,8]));n()&&e(r(`chat:chatPage.remoteUnavailableSwitchedToLocal`))}catch{}}).catch(async e=>{if(i){if(typeof window<`u`&&window.__PISPER_MOBILE_APP__)try{let{fallbackRemoteToLocalAfterFailure:n}=await t(async()=>{let{fallbackRemoteToLocalAfterFailure:e}=await import(`./mobile-remote-fallback-C2Q0wAa6.js`);return{fallbackRemoteToLocalAfterFailure:e}},__vite__mapDeps([123,8]));if(await n(e))return}catch{}i&&b(Z(e))}}).finally(()=>i&&v(!1)),()=>{i=!1}},[e,a,r,N,ee,R]),(0,Q.useEffect)(()=>{l?n.setItem(u.activeSession,l):n.removeItem(u.activeSession)},[l]);let W=s.find(e=>e.id===l),se=(h[l]||Ve).model||W?.model||``;return(0,Q.useEffect)(()=>{tn(l,se)},[l,se]),(0,Q.useEffect)(()=>(document.title=W?.name?`${W.name} · ${jt}`:jt,()=>{document.title=jt}),[W?.name]),{sessions:s,sessionsRef:T,activeId:l,setActiveId:p,sessionStates:h,sessionStatesRef:E,loading:_,globalError:y,setGlobalError:b,defaultModel:x,availableModels:C,updateSessions:R,replaceSessionStates:V,updateSessionState:ee,releaseSessionState:te,retainSessionState:re,discardSessionState:ne,subscribeSessionState:H,getSessionState:U,refreshSessions:ie,adoptCreatedSession:ae,createSessionRecord:oe}}function Fo({setActiveId:e,loadSessionMessages:t,openRoutedSession:n}){let r=(0,Q.useRef)(n);r.current=n;let i=(0,Q.useCallback)(t=>(t&&r.current?r.current(t):e(t),!0),[e]);return(0,Q.useEffect)(()=>{let e=e=>{let n=e.detail,r=n?.sessionId||n?.id;r&&(localStorage.removeItem(u.sessionOpenRequest),i(r),n?.targetEntryId&&t(r,{force:!0,limit:40}))};return window.addEventListener(an,e),()=>window.removeEventListener(an,e)},[t,i]),(0,Q.useEffect)(()=>un(window,({deletedIds:e})=>{for(let t of e)it.getState().forget(t),de(t)}),[]),{openSession:i}}function Io(e){return!!e?.agents?.some(e=>[`queued`,`starting`,`running`].includes(String(e.status)))}function Lo(e,{localStreamOwned:t=!1}={}){return!e||t?!1:!!(e.recovering||e.streaming||e.approvals?.length||Io(e))}function Ro(e,t){return Object.hasOwn(e,`team`)?e.team??null:t??null}function zo(e,t){let n=new Map(e.map(e=>[e.id,e]));return t.map(e=>{let t=n.get(e.id);return t&&JSON.stringify(t)===JSON.stringify(e)?t:e})}function Bo(e,t){let n=Number(t.pageInfo?.start)||0,r=Number.isInteger(e.messageStart)?e.messageStart:null,i=r!=null&&r<=n,a=i?Math.max(0,n-r):0,o=i?r:n,s=i?[...e.messages.slice(0,a),...zo(e.messages,t.messages)]:zo(e.messages,t.messages),c=Math.max(0,s.length-200);return c&&(s=s.slice(c),o+=c),{messages:s,messageStart:o,hasNewer:!1,hasOlder:o>0,olderCursor:o>0?String(o):null}}function Vo(e,t){let n=new Set(e.messages.map(e=>e.id)),r=[...t.messages.filter(e=>!n.has(e.id)),...e.messages],i=r.slice(0,200);return{messages:i,messageStart:t.pageInfo.start,hasOlder:t.pageInfo.hasMore,olderCursor:t.pageInfo.nextCursor,hasNewer:!!(e.hasNewer||r.length>i.length)}}function Ho(e,t){let n=Vo(e.historyWindow?{...e,...e.historyWindow}:e,t);return e.historyWindow||n.hasNewer?{...e,historyWindow:n}:{...e,...n}}function Uo(e){return{...e,historyWindow:null}}function Wo(e,t,n){if(t.streaming||!e.error&&!t.error)return{page:n,error:t.error||``};let r=e.messages.at(-2),i=e.messages.at(-1);if(r?.role!==`user`||!/^user-\d+$/.test(r.id)||i?.role!==`agent`||!/^agent-\d+$/.test(i.id))return{page:n,error:t.error||``};let a=Date.parse(e.runStartedAt||``),o=n.messages.findIndex(e=>{if(e.id===r.id)return!0;if(e.role!==`user`||!Number.isFinite(a))return!1;let t=new Date(e.timestamp).getTime();return Number.isFinite(t)&&t>=a});if(o>=0&&n.messages.slice(o+1).some(e=>e.role===`agent`))return{page:n,error:t.error||``};let s=[...n.messages,...o<0?[r]:[],{...i,streaming:!1,error:t.error||e.error||i.error}],c=Math.max(0,s.length-200),l=n.messageStart+c;return{page:{...n,messages:c?s.slice(c):s,messageStart:l,hasOlder:l>0,olderCursor:l>0?String(l):null},error:t.error||e.error||``}}function Go(e,t,n=new Date().toISOString(),r=e.runtimeSelectionRevision||0){let i=r!==(e.runtimeSelectionRevision||0),a=!!(e.switchingModel||e.switchingThinking||i),o=t.finishedAt||e.runFinishedAt||n,s=Wo(e,t,Bo(e,t));return{...Fe({...e,...s.page},t),tools:t.streaming?t.tools||[]:Nn(t.tools||[],{finishedAt:o,error:t.error||``}),streaming:t.streaming,recovering:t.streaming,runStartedAt:t.startedAt||e.runStartedAt||null,lastActivityAt:t.lastActivityAt||e.lastActivityAt||t.startedAt||null,runFinishedAt:t.streaming?null:o,runNotice:t.streaming&&e.runNotice||``,loaded:!0,loading:!1,error:a?e.error:s.error,model:a?e.model:t.model||e.model,cwd:t.cwd||e.cwd,permissionMode:t.permissionMode||e.permissionMode,executionMode:t.executionMode||e.executionMode,runMode:t.runMode||e.runMode,goal:t.goal??e.goal??null,team:Ro(t,e.team),plan:Fn(t,e.plan??null),contextUsage:a?e.contextUsage:t.contextUsage??e.contextUsage??null,sessionUsage:t.sessionUsage??e.sessionUsage??null,compaction:t.compaction??e.compaction??null,approvals:t.approvals||[],questions:Array.isArray(t.questions)?t.questions:e.questions||[],agents:t.agents||[],currentActivity:t.streaming?t.currentActivity||e.currentActivity||null:t.currentActivity?.type===`agent`?t.currentActivity:null,lifecycle:t.lifecycle??e.lifecycle??null,sessionTreeRevision:Number(t.sessionTreeRevision??e.sessionTreeRevision??0),activityFeed:t.streaming?t.activityFeed||e.activityFeed||[]:(t.activityFeed||[]).filter(e=>e.type===`agent`),thinkingText:t.streaming?t.thinkingText??e.thinkingText??``:``,...t.streaming?{}:{hadQueuedInput:!1}}}function Ko(e,{catalogStreaming:t,localStreamOwned:n}){return!e?.loaded||e.loading||e.streaming||e.recovering||n?!1:t||!e.messages?.length}function qo({sessionStates:e,sessionStatesRef:t,localStreamSessionsRef:n,streamGenerationRef:r,updateSessionState:i,updateSessions:a,pollOnly:o}){let s=(0,Q.useRef)(new Set),c=(0,Q.useRef)({timer:null,activeSessions:new Set}),l=(0,Q.useRef)({timer:null,ids:new Set}),u=(0,Q.useCallback)(async(e,{force:o=!1}={})=>{if(!e||!o&&n.current.has(e)||s.current.has(e))return;s.current.add(e);let c=t.current[e]?.runtimeSelectionRevision||0;try{let s=await X.getLiveSession(e);if(!o&&n.current.has(e))return;if(o&&n.current.has(e)){let t=r.current.get(e)||0;r.current.set(e,t+1),n.current.delete(e)}so(e,s),i(e,e=>Go(e,s,void 0,c)),a(n=>n.map(n=>n.id===e?{...n,streaming:s.streaming,model:t.current[e]?.model||s.model||n.model,cwd:s.cwd||n.cwd,permissionMode:s.permissionMode||n.permissionMode,executionMode:s.executionMode||n.executionMode,runMode:s.runMode||n.runMode,goal:s.goal??n.goal??null,team:Ro(s,n.team),plan:Fn(s,n.plan??null)}:n))}catch(t){n.current.has(e)||i(e,{recovering:!1,loading:!1,error:Z(t)})}finally{s.current.delete(e)}},[n,t,r,i,a]),d=(0,Q.useCallback)(async(e,{force:r=!1,limit:o=40}={})=>{if(!e)return;let s=t.current[e];if(r&&s?.historyWindow){if(i(e,Uo),n.current.has(e))return;if(s.streaming||s.recovering){await u(e,{force:r});return}}if(s?.recovering){await u(e,{force:r});return}if(!(!r&&(s?.loading||s?.streaming||s?.loaded&&s.messages?.length&&(s.pageSize||0)>=o))){i(e,{loading:!0});try{let r=await X.getMessages(e,{limit:o}),s=r.streaming===!0&&!n.current.has(e),c=!1;i(e,t=>t.streaming&&!t.loaded&&!t.messages?.length&&!n.current.has(e)?(c=!0,{...t,loading:!1,pageSize:Math.max(t.pageSize||0,o)}):t.streaming?{...t,loaded:!0,loading:!1,pageSize:Math.max(t.pageSize||0,o)}:(s&&(c=!0),{...t,...Bo(t,r),...s?{streaming:!0,recovering:!0}:{},model:t.model||r.model||void 0,contextUsage:r.contextUsage??t.contextUsage??null,sessionUsage:r.sessionUsage??t.sessionUsage??null,loaded:!0,loading:!1,pageSize:Math.max(t.pageSize||0,o),error:``,olderError:``})),c&&u(e);let l=t.current[e]?.model||(typeof r.model==`string`?r.model:``);l&&a(t=>t.map(t=>t.id===e&&t.model!==l?{...t,model:l}:t))}catch(t){i(e,{loading:!1,error:Z(t)})}}},[n,t,u,i,a]),f=(0,Q.useCallback)(async e=>{let n=t.current[e],r=n?.historyWindow?{...n,...n.historyWindow}:n;if(!e||!r?.hasOlder||!r.olderCursor||n.loadingOlder)return!1;let a=n.historyWindow??null;i(e,{loadingOlder:!0,olderError:``});try{let t=await X.getMessages(e,{limit:40,before:r.olderCursor});return i(e,e=>{let n=e.historyWindow||e;return(e.historyWindow??null)!==a||n.olderCursor!==r.olderCursor?{...e,loadingOlder:!1}:{...Ho(e,t),loadingOlder:!1,olderError:``}}),t.messages.length>0}catch(t){return i(e,{loadingOlder:!1,olderError:Z(t)}),!1}},[t,i]),p=(0,Q.useCallback)(()=>{c.current.timer&&window.clearInterval(c.current.timer),c.current.timer=null,c.current.activeSessions.clear()},[]),m=(0,Q.useCallback)(()=>{c.current.timer||!c.current.activeSessions.size||(c.current.timer=window.setInterval(()=>{if(typeof document<`u`&&document.hidden)return;let e=Array.from(c.current.activeSessions).map(async e=>{let r=t.current[e];if(!Lo(r,{localStreamOwned:n.current.has(e)})){c.current.activeSessions.delete(e);return}await u(e)});Promise.allSettled(e).then(()=>{c.current.activeSessions.size||p()})},2e3))},[n,t,p,u]);return(0,Q.useEffect)(()=>{let t=new Set(Object.keys(e));for(let e of c.current.activeSessions)t.has(e)||c.current.activeSessions.delete(e);let r=[];for(let[t,i]of Object.entries(e)){let e=(o===void 0||t===o)&&Lo(i,{localStreamOwned:n.current.has(t)});e&&!c.current.activeSessions.has(t)&&r.push(t),e?c.current.activeSessions.add(t):c.current.activeSessions.delete(t)}if(c.current.activeSessions.size?m():p(),!r.length)return;let i=l.current;for(let e of r)i.ids.add(e);i.timer===null&&(i.timer=window.setTimeout(()=>{i.timer=null;let e=Array.from(i.ids);if(i.ids.clear(),!(typeof document<`u`&&document.hidden))for(let t of e)c.current.activeSessions.has(t)&&u(t)},0))},[m,n,o,e,p,u]),(0,Q.useEffect)(()=>{let e=l.current;return()=>{p(),e.timer!==null&&window.clearTimeout(e.timer),e.timer=null,e.ids.clear()}},[p]),{syncLiveSession:u,loadSessionMessages:d,loadOlderMessages:f,liveSyncInFlightRef:s}}function Jo(e,t){let n=null,r=!1,i=typeof document<`u`,a=()=>!i||document.visibilityState===`visible`,o=()=>{r&&=(document.removeEventListener(`visibilitychange`,c),!1)},s=()=>{n=setTimeout(()=>{n=null,e()},t)},c=()=>{!a()||n!=null||(o(),s())},l=()=>{!i||r||(document.addEventListener(`visibilitychange`,c),r=!0)};return{schedule(){n!=null||r||(a()?s():l())},flushNow(){n!=null&&(clearTimeout(n),n=null),o(),e()},cancel(){n!=null&&clearTimeout(n),n=null,o()},get active(){return n!=null||r}}}function Yo(e,{intervalMs:t=48}={}){let n=null,r=null,i=Jo(()=>{if(n==null)return;let t=n,i=r;n=null,r=null,e(t,i)},t);return{push(e,t=new Date().toISOString()){n=e,r=t,i.schedule()},flush(){i.flushNow()},cancel(){i.cancel(),n=null,r=null}}}function Xo(e,{intervalMs:t=80}={}){let n=new Map,r=null,i=Jo(()=>{if(!n.size)return;let t=n,i=r;n=new Map,r=null,e(t,i)},t);return{push(e,t,a=new Date().toISOString()){e&&(n.set(e,{...n.get(e)||{},...t}),r=a,i.schedule())},flush(){i.flushNow()},cancel(){i.cancel(),n=new Map,r=null}}}function Zo(e){return e>=55296&&e<=56319}function Qo(e,t){let n=Math.min(e.length,t.length),r=0;for(;r<n&&e.charCodeAt(r)===t.charCodeAt(r);)r+=1;return r>0&&Zo(e.charCodeAt(r-1))?r-1:r}var $o=50;function es(e,{minCharsPerSecond:t=36,maxCharsPerSecond:n=1200,catchUpRemaining:r=160,requestFrame:i,cancelFrame:a,isCurrent:o=()=>!0,now:s=()=>typeof performance<`u`&&performance.now?performance.now():Date.now()}={}){let c=!i&&typeof globalThis.requestAnimationFrame==`function`&&typeof globalThis.cancelAnimationFrame==`function`,l=i||(c?globalThis.requestAnimationFrame.bind(globalThis):e=>setTimeout(()=>e(s()),Math.ceil($o))),u=a||(c?globalThis.cancelAnimationFrame.bind(globalThis):clearTimeout),d=typeof document<`u`?document:null,f=()=>!d||d.visibilityState===`visible`,p=``,m=``,h=null,g=null,_=0,v=null,y=0,b=!1,x=new Set,S=e=>{let t=[...x];x.clear();for(let n of t)n(e)},C=()=>{m.length,e(m,h)},w=()=>{b=!0,g!=null&&u(g),d?.removeEventListener(`visibilitychange`,O),g=null,y=0,S(!1)},T=()=>{if(!b){if(!o()){w();return}g!=null&&u(g),g=null,y=0,m=p,v=s(),C(),m===p&&S(!0)}},E=e=>{if(g=null,b)return;if(!o()){w();return}if(!f()){x.size&&T();return}if(p===m){S(!0);return}let i=e-_;if(i+.001<$o||v!=null&&e-v+.001<$o){g=l(E);return}_=e;let a=m;p.startsWith(m)||(m=p.slice(0,Qo(m,p)),y=0);let s=p.length-m.length;if(s>=480)m=p,y=0;else{let e=Math.max(0,Math.min(n,t+s*(s>=r?10:4))),a=y+e*Math.min(.08,Math.max(0,i/1e3)),o=Math.floor(a+1e-9);y=Math.max(0,a-o);let c=m.length;for(let e=0;e<o&&c<p.length;e+=1){let e=p.codePointAt(c)??0;if(Zo(e)&&c+1===p.length&&!x.size)break;c+=e>65535?2:1}m=p.slice(0,c)}m!==a&&(v=e,C()),m===p&&S(!0);let c=!x.size&&m.length+1===p.length&&Zo(p.charCodeAt(m.length));!b&&g==null&&m!==p&&!c&&f()?g=l(E):g??(y=0)},D=()=>{b||g!=null||!f()||p===m||(_=s(),g=l(E))},O=()=>{f()?D():x.size?T():(g!=null&&u(g),g=null,y=0)};return d?.addEventListener(`visibilitychange`,O),{setTarget(e,t=new Date().toISOString()){b||(p=String(e||``),h=t,D())},drain(){return b||!o()?(w(),Promise.resolve(!1)):m===p?Promise.resolve(!0):new Promise(e=>{x.add(e),f()?D():T()})},flush:T,cancel:w,getShown:()=>m,getTarget:()=>p}}var ts=new Set(`contacts.search,camera.capture,location.current,device.info,device.capabilities,device.battery,device.storage,device.memory,device.network,device.display,device.locale,device.status,device.clipboard.get,device.clipboard.set,device.vibrate,device.flashlight,device.notify,photos.list,photos.create_album,photos.add_to_album,photos.delete,apps.open_url,apps.open_map,apps.open_system_settings,apps.open_dialer,apps.compose_sms,apps.open_app,apps.share_text`.split(`,`)),ns=new Map,rs=[];function is(e,t){let n=window.__TAURI__?.core?.invoke??window.__TAURI_INTERNALS__?.invoke;return n?n(e,t):Promise.reject(Error(`native bridge unavailable`))}async function as(e,t){let n=String(t.id||``),r=String(t.operation||``);if(!n||!ts.has(r))return;let i=Date.parse(String(t.expiresAt||``));if(Number.isFinite(i)&&i<=Date.now()){await X.resolveMobileOperation(e,n,{ok:!1,error:`移动设备操作请求已过期。`});return}try{let i=await is(`mobile_execute_device_operation`,{request:{id:n,operation:r,parameters:t.parameters&&typeof t.parameters==`object`?t.parameters:void 0}});await X.resolveMobileOperation(e,n,{ok:!0,result:i})}catch(t){await X.resolveMobileOperation(e,n,{ok:!1,error:t instanceof Error?t.message:String(t)})}finally{rs.push(n),rs.length>128&&rs.splice(0,rs.length-128)}}function os(e){let t=String(e.id||``);!t||rs.includes(t)||(rs.push(t),rs.length>128&&rs.splice(0,rs.length-128))}function ss(e,t){let n=String(t.id||``);if(!n||rs.includes(n)||ns.has(n))return;let r=as(e,t).catch(()=>{}).finally(()=>ns.delete(n));ns.set(n,r)}function cs(e){let t=String(e.path||``).trim().replaceAll(`\\`,`/`).toLowerCase();return t?`path:${t}`:`id:${e.id}`}function ls(e,t){return Object.hasOwn(e,`team`)?e.team??null:t??null}function us(e,{agentId:t,responseText:n,data:r,finishedAt:i,error:a,preserveDisplayedText:o}){let s=!!a,c=r.lifecycle||e.lifecycle||{},l=Fe(e,r);return{...l,streaming:!1,runFinishedAt:i,lastActivityAt:i,...s?{}:{runNotice:``},currentActivity:r.currentActivity?.type===`agent`?r.currentActivity:null,lifecycle:{...c,phase:s?`failed`:`completed`,event:s?`runtime_error`:`runtime_done`,updatedAt:i},sessionTreeRevision:Number(r.sessionTreeRevision??e.sessionTreeRevision??0),activityFeed:(r.activityFeed||[]).filter(e=>e.type===`agent`),goal:s?e.goal:r.goal??e.goal??null,plan:s?e.plan:Fn(r,e.plan),team:ls(r,e.team),agents:r.agents||e.agents||[],contextUsage:r.contextUsage??e.contextUsage??null,sessionUsage:r.sessionUsage??e.sessionUsage??null,compaction:r.compaction??e.compaction??null,approvals:s?[]:r.approvals||[],tools:Nn(r.tools||e.tools,{finishedAt:i,...a?{error:a}:{}}),messages:l.messages.map(e=>e.id===t?{...e,text:o?e.text:typeof r.text==`string`?r.text:n||e.text,streaming:o?e.text!==n:!1,...s?{}:r.turnBoundaryEntryId?{turnBoundaryEntryId:String(r.turnBoundaryEntryId)}:{},...s?{}:r.assets?.length?{attachments:r.assets}:{}}:e)}}function ds({sessionId:e,agentId:t,sessionStatesRef:n,updateSessionState:r,updateSessions:i,typewriter:a,thinkingScheduler:o,toolScheduler:s,t:c}){let l={responseText:``,responseRenderingStreaming:!0,thinkingText:``,thinkingPrefix:``,queuedDuringRun:!1,pendingInputIds:[]},u=e=>(Array.isArray(e)?e:[]).map(e=>typeof e?.id==`string`?e.id:``).filter(Boolean),d=(i,o)=>{let s=u(i.queuedInputs),c=new Set([...n.current[e]?.withdrawnInputIds||[],...typeof i.removedInputId==`string`?[i.removedInputId]:[]]),d=l.pendingInputIds.filter(e=>!s.includes(e)&&!c.has(e));if(l.pendingInputIds=s,!d.length)return;let f=new Set(u((i.sendNowInputIds||[]).map(e=>({id:e})))),p=l.responseText;l.responseText=``,r(e,e=>je(e,{agentId:t,deliveredIds:d,frozenText:p,interrupted:d.some(e=>f.has(e))})),p&&(a.setTarget(``,o),a.flush())},f=t=>{i(n=>n.map(n=>n.id===e?t(n):n))},p=(r,i)=>{let a=n.current[e]?.messages??[],o=a.findIndex(e=>e.id===t),s=a.slice(0,Math.max(0,o)).filter(e=>e.role===`user`).at(-1)?.text;oo({sessionId:e,messageId:t,prompt:s,text:l.responseText,runId:l.runId,startedAt:l.startedAt,status:r,error:i})};return{dispatch:(i,m)=>{let h=new Date().toISOString();if(i===`run`)l.runId=typeof m.runId==`string`?m.runId:void 0,p(`started`);else if(i===`resync_required`)p(`recovering`);else if(i===`meta`)l.startedAt=typeof m.startedAt==`string`?m.startedAt:void 0,Array.isArray(m.queuedInputs)&&(l.pendingInputIds=u(m.queuedInputs)),p(`started`),r(e,e=>({...Fe(e,m),model:m.model||e.model,thinkingLevel:m.thinkingLevel||e.thinkingLevel,cwd:m.cwd,permissionMode:m.permissionMode,executionMode:m.executionMode,runMode:m.runMode||e.runMode,goal:m.goal??null,plan:Fn(m,e.plan),team:ls(m,e.team),agents:m.agents||e.agents||[],currentActivity:m.currentActivity||e.currentActivity||null,activityFeed:m.activityFeed||e.activityFeed||[],lifecycle:m.lifecycle??e.lifecycle??null,sessionTreeRevision:Number(m.sessionTreeRevision??e.sessionTreeRevision??0),thinkingText:m.thinkingText??e.thinkingText??``,contextUsage:m.contextUsage??e.contextUsage??null,sessionUsage:m.sessionUsage??e.sessionUsage??null,runStartedAt:m.startedAt||e.runStartedAt,lastActivityAt:m.lastActivityAt||h})),(m.model||m.thinkingLevel||m.cwd||m.permissionMode||m.executionMode||m.goal!==void 0||m.team!==void 0||Ln(m)!==void 0)&&f(e=>({...e,model:m.model||e.model,thinkingLevel:m.thinkingLevel||e.thinkingLevel,cwd:m.cwd||e.cwd,permissionMode:m.permissionMode||e.permissionMode,executionMode:m.executionMode||e.executionMode,runMode:m.runMode||e.runMode,goal:m.goal??e.goal??null,team:ls(m,e.team),plan:Fn(m,e.plan??null)}));else if(i===`queue_update`)m.queuedInputs?.length&&(l.queuedDuringRun=!0),r(e,e=>Fe(e,{...m,queuedInputs:m.queuedInputs||[]})),d(m,h);else if(i===`agent_update`)r(e,e=>{let t=m.currentActivity||(m.agent?{type:`agent`,agent:m.agent,updatedAt:m.agent.lastActivityAt||h}:null);return{...e,team:ls(m,e.team),agents:m.agents||[],currentActivity:e.currentActivity?.type===`tool`?e.currentActivity:t||e.currentActivity,activityFeed:t?In(e.activityFeed,t):e.activityFeed,lastActivityAt:m.agent?.lastActivityAt||h}}),Object.hasOwn(m,`team`)&&f(e=>({...e,team:ls(m,e.team)}));else if(i===`agent_lifecycle`)r(e,e=>{let t=m.lifecycle||e.lifecycle,n=t?.event===`auto_retry_end`,r=t?.event===`turn_start`&&(e.lifecycle?.phase===`retrying`||e.currentActivity?.type===`retry`);return{...e,lifecycle:t,currentActivity:m.currentActivity||e.currentActivity,lastActivityAt:t?.updatedAt||h,runNotice:n&&t?.retry?.success?``:n&&t?.retry?.message?t.retry.message:r?``:e.runNotice}});else if(i===`session_tree_changed`)r(e,{sessionTreeRevision:Number(m.revision||0),lastActivityAt:h});else if(i===`thinking_level_changed`)r(e,{thinkingLevel:m.level,lastActivityAt:h}),f(e=>({...e,thinkingLevel:m.level}));else if(i===`context_usage`)r(e,{contextUsage:m});else if(i===`session_usage`)r(e,{sessionUsage:m});else if(i===`compaction_start`)s.flush(),r(e,e=>{let t={type:`compaction`,compaction:m,updatedAt:m.startedAt||h};return{...e,compaction:m,currentActivity:t,activityFeed:In(e.activityFeed,t),lastActivityAt:m.startedAt||h}});else if(i===`compaction_end`)r(e,e=>{let t={type:`model`,stage:`processing_result`,updatedAt:m.finishedAt||h};return{...e,compaction:m,currentActivity:t,activityFeed:In(e.activityFeed,t),lastActivityAt:m.finishedAt||h}});else if(i===`text_patch`)l.responseRenderingStreaming=!0,l.responseText=b(l.responseText,m),p(`streaming`),a.setTarget(l.responseText,h);else if(i===`text_delta`)l.responseText.length,l.responseRenderingStreaming=!0,l.responseText+=m.delta||``,p(`streaming`),a.setTarget(l.responseText,h);else if(i===`text_end`)l.responseText.length,typeof m.text==`string`&&(l.responseText=m.text),l.responseRenderingStreaming=!1,p(`streaming`),a.setTarget(l.responseText,m.updatedAt||h),r(e,e=>({...e,messages:e.messages.map(e=>e.id===t?{...e,streaming:e.text!==l.responseText}:e)}));else if(i===`thinking_reset`)l.thinkingText=``,l.thinkingPrefix=String(m.thinkingText||``).slice(-6e3),o.cancel(),r(e,{thinkingText:l.thinkingPrefix,currentActivity:{type:`model`,stage:`thinking`,updatedAt:m.updatedAt||h},lastActivityAt:m.updatedAt||h});else if(i===`thinking_patch`){l.thinkingText=b(l.thinkingText,m).slice(-6e3);let e=[l.thinkingPrefix,l.thinkingText].filter(Boolean).join(`
|
|
551
|
+
`;async function Ga(e){let t=new Blob([Wa],{type:`application/javascript`}),n=URL.createObjectURL(t);try{await e.audioWorklet.addModule(n)}finally{URL.revokeObjectURL(n)}}async function Ka(e,t){if(g(t),!navigator.mediaDevices?.getUserMedia)throw Error(`当前环境不支持麦克风采集。`);if(!window.AudioContext&&!window.webkitAudioContext)throw Error(`当前环境不支持音频处理。`);let n=await navigator.mediaDevices.getUserMedia({audio:{channelCount:1,echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},video:!1}),r=null,i=null,a=null,o=null,s=!1,c=null,l=()=>{if(s)return c??Promise.resolve();s=!0,t?.removeEventListener(`abort`,u);for(let e of n.getTracks())e.removeEventListener?.(`ended`,d),e.removeEventListener?.(`mute`,d),e.stop();return c=r?.close().catch(()=>{})??Promise.resolve(),i&&(i.port.onmessage=null,i.port.close()),a?.disconnect(),i?.disconnect(),o?.disconnect(),c},u=()=>{l()},d=()=>{s||(l(),window.dispatchEvent(new Event(`pisper:speech-interrupted`)))},f=()=>{if(g(t),s)throw new DOMException(`Microphone capture was interrupted.`,`AbortError`)};t?.addEventListener(`abort`,u,{once:!0});for(let e of n.getTracks()){if(s)break;e.addEventListener?.(`ended`,d),e.addEventListener?.(`mute`,d),e.readyState===`ended`&&d()}try{f(),r=new(window.AudioContext||window.webkitAudioContext)({latencyHint:`interactive`}),await Ga(r),f(),a=r.createMediaStreamSource(n),i=new AudioWorkletNode(r,`pisper-voice-input`,{numberOfInputs:1,numberOfOutputs:1,outputChannelCount:[1],processorOptions:{targetSampleRate:Ia}}),o=r.createGain(),o.gain.value=0,i.port.onmessage=n=>{!s&&!t?.aborted&&e(new Float32Array(n.data))},a.connect(i),i.connect(o),o.connect(r.destination),await r.resume(),f()}catch(e){throw await l(),e}return{stop:l}}var qa=32,Ja=50;function Ya(e,t){if(e instanceof DOMException&&e.name===`NotAllowedError`)return`permission`;let n=typeof e==`string`?e:e instanceof Error?e.message:typeof e==`object`&&e&&`message`in e?String(e.message):``;return n.includes(`microphone_permission_denied`)?`permission`:n||t}function Xa({onInsert:e,onLiveText:t,sessionId:n,disabled:r=!1,shortcutEnabled:i=!1,variant:a=`button`,controlRef:s}){let{t:c}=o(),l=xa([`asr`]),u=mn(e=>e.bindings.voiceInput),[d,f]=(0,Q.useState)(`idle`),[p,m]=(0,Q.useState)(``),h=(0,Q.useRef)(`idle`),g=e=>{h.current=e,f(e)},_=(0,Q.useRef)(null),v=(0,Q.useRef)(null),y=(0,Q.useRef)(null),b=(0,Q.useRef)(null),x=(0,Q.useRef)(0),S=(0,Q.useRef)(0),C=(0,Q.useRef)(()=>{}),w=(0,Q.useRef)(!1),T=(0,Q.useRef)(null),E=(0,Q.useRef)(null),D=(0,Q.useRef)(()=>{}),O=(0,Q.useRef)(0),k=(0,Q.useRef)(pa()),A=(0,Q.useRef)(0),[j,M]=(0,Q.useState)([]),N=(0,Q.useRef)([]),P=(0,Q.useRef)(null),F=(0,Q.useRef)(e),I=(0,Q.useRef)(t);F.current=e,I.current=t;let L=()=>{window.clearTimeout(S.current),S.current=0},R=async()=>{L();let e=y.current;y.current=null,e?.abort(),b.current?.(),b.current=null,P.current?.dispose(),P.current=null;let t=v.current;v.current=null;let n=_.current;_.current=null,await Promise.allSettled([t?.stop(),n?.dispose()])},z=e=>{console.warn(`[voice-input]`,e),m(e),g(`error`),window.clearTimeout(O.current),O.current=window.setTimeout(()=>{h.current===`error`&&(m(``),g(`idle`))},4e3)},B=()=>{L(),w.current=!1,g(`idle`),m(``)},V=()=>{T.current=null,E.current=null,x.current+=1,R(),I.current?.(null),B()};D.current=V,(0,Q.useEffect)(()=>{let e=()=>{(E.current!==x.current||T.current===x.current)&&D.current()},t=()=>{document.visibilityState===`hidden`&&e()},n=()=>D.current();return window.addEventListener(`blur`,e),window.addEventListener(`pisper:speech-interrupted`,n),document.addEventListener(`visibilitychange`,t),()=>{window.removeEventListener(`blur`,e),window.removeEventListener(`pisper:speech-interrupted`,n),document.removeEventListener(`visibilitychange`,t),window.clearTimeout(O.current),e()}},[n,i,r]),(0,Q.useEffect)(()=>{if(d!==`recording`){M([]),N.current=[];return}let e=()=>{let e=performance.now()/1e3,t=A.current,n=N.current,r=[];for(let i=0;i<qa;i+=1){let a=i/31*2-1,o=Math.cos(a*Math.PI/2)**1.3,s=.1+.06*Math.sin(e*2.2+i*.55)+.04*Math.sin(e*3.7+i*.21),c=.75+.5*Math.abs(Math.sin(e*9+i*1.7)),l=Math.min(1,Math.max(.05,s+t*o*c*1.15)),u=n[i]??l,d=l>u?.55:.28;r.push(u+(l-u)*d)}N.current=r,M(r)};e();let t=window.setInterval(e,Ja);return()=>window.clearInterval(t)},[d]);let H=()=>!r&&(h.current===`idle`||h.current===`error`),U=async()=>{if(!H())return;let e=++x.current,t=new AbortController;y.current=t,w.current=!1,g(`requesting`),m(``),k.current.reset();let r=Ua({chatSessionId:n});_.current=r,b.current=r.onPartial(e=>{_.current===r&&I.current?.(e)});let i=null,a=async t=>{if(i?.dispose(),i=null,e!==x.current)return;if(t instanceof DOMException&&t.name===`AbortError`){let e=++x.current;if(await R(),e!==x.current)return;B();return}let n=++x.current;if(await R(),n!==x.current)return;let r=Ya(t,c(`chat:voiceInput.failed`));z(r===`permission`?c(`chat:voiceInput.permissionDenied`):r)};try{window.__PISPER_MOBILE_APP__&&(E.current=e);try{await za()}finally{E.current===e&&(E.current=null)}if(e!==x.current)return;if(window.__PISPER_MOBILE_APP__&&document.visibilityState===`hidden`){V();return}if(await l.ensureReady(t.signal),e!==x.current)return;if(r.start().then(()=>{},()=>a(Error(c(`chat:voiceInput.failed`)))),i=await ya(),e!==x.current){i.dispose();return}P.current=i;let n=i,o=await Ka(t=>{if(e!==x.current)return;A.current=k.current.push(fa(t));let i=n.acceptPcm(t);(r.acceptPcm(t)||i)&&C.current()},t.signal);if(e!==x.current){await o.stop();return}v.current=o,g(`recording`),window.__PISPER_MOBILE_APP__&&(S.current=window.setTimeout(()=>C.current(),6e4))}catch(e){await a(e)}},ee=async()=>{if(h.current!==`recording`||w.current)return;T.current=null,w.current=!0,L();let e=++x.current;g(`transcribing`);let t=y.current;y.current=null,t?.abort();let n=v.current;v.current=null;let r=P.current;P.current=null;let i=_.current;try{if(await n?.stop(),e!==x.current)return;if(r&&!r.hasSpeech){if(r.dispose(),I.current?.(null),await R(),e!==x.current)return;B();return}r?.dispose();let t=await i?.finish();if(e!==x.current)return;if(!t)throw Error(c(`chat:voiceInput.empty`));if(F.current(t),await R(),e!==x.current)return;B()}catch(t){if(e!==x.current||(await R(),e!==x.current))return;I.current?.(null);let n=Ya(t,c(`chat:voiceInput.failed`));z(n===`permission`?c(`chat:voiceInput.permissionDenied`):n),w.current=!1}};C.current=()=>void ee(),da({enabled:i&&!r,binding:u,onStart:()=>H()?(U(),T.current=x.current,!0):!1,onRelease:()=>{T.current===x.current&&(v.current?ee():V())},onCancel:()=>{T.current===x.current&&V()}});let te=d===`recording`?c(`chat:voiceInput.stop`):d===`requesting`?c(`chat:voiceInput.close`):d===`error`?p:c(`chat:voiceInput.open`),ne=u&&d!==`error`?`${te} (${yn(u)})`:te,re=d===`recording`?()=>void ee():d===`requesting`?()=>V():()=>void U(),ie=(0,Q.useRef)(re);ie.current=re;let ae=!r&&d!==`transcribing`;(0,Q.useEffect)(()=>{if(s)return s.current=ae?()=>ie.current():null,()=>{s.current=null}},[s,ae]);let oe=a===`menu`&&d===`idle`;return(0,$.jsxs)(`div`,{className:`relative flex flex-none items-center`,"data-voice-input":d,children:[d===`recording`&&(0,xi.createPortal)((0,$.jsx)(`div`,{"aria-hidden":`true`,className:`voice-capsule-pop pointer-events-none fixed bottom-4 left-1/2 z-[80] flex h-10 -translate-x-1/2 items-center gap-[3px] rounded-full bg-ink px-4 shadow-float`,children:j.map((e,t)=>(0,$.jsx)(`span`,{className:`w-[3px] rounded-full bg-on-ink`,style:{height:`${(3+e*19).toFixed(1)}px`,opacity:.55+e*.45,transition:`height 70ms linear`}},t))}),document.body),d===`error`&&(0,xi.createPortal)((0,$.jsxs)(`button`,{type:`button`,className:`voice-capsule-pop fixed bottom-4 left-1/2 z-[80] flex h-9 max-w-[min(480px,calc(100vw-32px))] -translate-x-1/2 cursor-pointer items-center gap-2 rounded-full border border-danger-border bg-solid px-4 text-xs text-danger shadow-float max-[650px]:h-11`,onClick:()=>{window.clearTimeout(O.current),m(``),g(`idle`)},children:[(0,$.jsx)(Lr,{size:13,className:`flex-none`}),(0,$.jsx)(`span`,{className:`truncate`,children:p})]}),document.body),(0,$.jsxs)(`button`,{type:`button`,hidden:oe,className:`relative grid size-8 min-w-8 cursor-pointer place-items-center rounded-sm border transition-colors disabled:cursor-not-allowed disabled:opacity-45 max-[650px]:size-9 max-[650px]:min-w-9 min-[651px]:pointer-coarse:size-11 min-[651px]:pointer-coarse:min-w-11 ${pe} ${d===`recording`?`border-danger bg-danger-soft text-danger`:d===`transcribing`||d===`requesting`?`border-transparent bg-star-soft text-accent-fg`:d===`error`?`border-transparent bg-danger-soft text-danger`:`border-transparent text-content-muted hover:bg-surface-hover hover:text-content`}`,title:ne,"aria-label":c(d===`recording`?`chat:voiceInput.stop`:`chat:voiceInput.open`),"aria-pressed":d===`recording`,disabled:r||d===`transcribing`,onClick:re,children:[d===`recording`&&(0,$.jsx)(`span`,{"aria-hidden":`true`,className:`absolute inset-0 animate-ping rounded-sm bg-danger opacity-25`}),d===`recording`?(0,$.jsx)(Lr,{size:17,className:G}):d===`transcribing`||d===`requesting`?(0,$.jsx)(ft,{className:`animate-spin ${G}`,size:16}):d===`error`?(0,$.jsx)(Lr,{size:17,className:G}):(0,$.jsx)(Rr,{size:17,className:G})]}),(0,$.jsx)(Fa,{manager:l,onClose:()=>{}})]})}var Za={idle:{amp:.14,freq:1.7,speed:.22,spike:0,rot:.22,dim:.8,behavior:`calm`},requesting:{amp:.08,freq:1.6,speed:.3,spike:0,rot:.4,dim:.5,behavior:`calm`},listening:{amp:.15,freq:2,speed:.55,spike:.55,rot:.4,dim:1,behavior:`reactive`},transcribing:{amp:.08,freq:1.8,speed:1,spike:0,rot:1.5,dim:.95,behavior:`converge`},thinking:{amp:.2,freq:2.3,speed:.8,spike:0,rot:.85,dim:1,behavior:`swirl`},speaking:{amp:.13,freq:1.9,speed:.5,spike:.1,rot:.35,dim:1,behavior:`beat`},error:{amp:.12,freq:2.2,speed:1.2,spike:0,rot:.1,dim:.9,behavior:`jitter`}},Qa=64,$a=96,eo=2.6,to=Math.PI*2,no={dark:{base:[223,233,255],cyan:[89,230,255],magenta:[255,95,210],haloInner:[70,110,170],haloMid:[50,80,140],haloAlpha:.1,composite:`lighter`,alphaBase:.1,alphaFront:.68},light:{base:[34,44,76],cyan:[6,132,180],magenta:[176,48,150],haloInner:[110,140,210],haloMid:[130,160,220],haloAlpha:.16,composite:`source-over`,alphaBase:.18,alphaFront:.85}};function ro(e,t,n){let r=Math.sin(e*127.1+t*311.7+n*74.7)*43758.5453123;return r-Math.floor(r)}function io(e){return e*e*(3-2*e)}function ao(e,t,n){let r=Math.floor(e),i=Math.floor(t),a=Math.floor(n),o=io(e-r),s=io(t-i),c=io(n-a),l=0;for(let e=0;e<=1;e+=1)for(let t=0;t<=1;t+=1)for(let n=0;n<=1;n+=1)l+=(e?o:1-o)*(t?s:1-s)*(n?c:1-c)*ro(r+e,i+t,a+n);return l}function oo(e){return 1+2.70158*(e-1)**3+1.70158*(e-1)**2}function so(e){let t=e*.9%1;return Math.exp(-(((t-.12)*9)**2))+.45*Math.exp(-(((t-.34)*9)**2))}function co({stage:e,level:t,size:n=380,dark:r=!0}){let i=(0,Q.useRef)(null),a=(0,Q.useRef)(e),o=(0,Q.useRef)(t),s=(0,Q.useRef)(r);return a.current=e,o.current=t,s.current=r,(0,Q.useEffect)(()=>{let e=i.current;if(!e)return;let t=e.getContext(`2d`);if(!t)return;let r=Math.min(window.devicePixelRatio||1,2);e.width=n*r,e.height=n*r,t.scale(r,r);let c=new Float32Array(Qa),l=new Float32Array(Qa);for(let e=0;e<Qa;e+=1){let t=-Math.PI/2+(e+.5)/Qa*Math.PI;c[e]=Math.sin(t),l[e]=Math.cos(t)}let u=new Float32Array($a),d=new Float32Array($a);for(let e=0;e<$a;e+=1){let t=e/$a*to;u[e]=Math.cos(t),d[e]=Math.sin(t)}let f=n/2,p=n*.31,m=window.matchMedia(`(prefers-reduced-motion: reduce)`).matches,h=0,g=performance.now(),_=g,v=0,y=0,b={...Za[a.current]},x=0,S=0,C=0,w=e=>{let r=Math.min((e-g)/1e3,.05);g=e;let i=Za[a.current],T=Math.min(1,r*5);b={...i,amp:b.amp+(i.amp-b.amp)*T,freq:b.freq+(i.freq-b.freq)*T,speed:b.speed+(i.speed-b.speed)*T,spike:b.spike+(i.spike-b.spike)*T,rot:b.rot+(i.rot-b.rot)*T,dim:b.dim+(i.dim-b.dim)*T};let E=m?.35:1;v+=r*E,y+=b.rot*r*E,x+=(o.current-x)*Math.min(1,r*14);let D=Math.max(0,x-S-.02);S=x,C=Math.min(.6,C*.02**r+D*2.4);let O=x;b.behavior===`beat`?O=Math.max(.08,.4+.28*Math.abs(Math.sin(v*5.2))*Math.sin(v*1.6)+.12*Math.sin(v*9.1)):b.behavior===`converge`?O=.18:b.behavior===`jitter`?O=.3+.2*Math.sin(v*17):b.behavior!==`reactive`&&(O=.1+.05*Math.sin(v*1.3));let k=oo(Math.min(1,Math.max(0,(e-_)/900))),A=b.behavior===`beat`?O:so(v)*.5+O*.5,j=k*(1+A*.04+C*.1);b.behavior===`converge`&&(j*=.9+.1*Math.sin(v*4.2)),t.clearRect(0,0,n,n);let M=no[s.current?`dark`:`light`],N=t.createRadialGradient(f,f,0,f,f,p*1.7);N.addColorStop(0,`rgba(${M.haloInner[0]},${M.haloInner[1]},${M.haloInner[2]},${(M.haloAlpha*b.dim).toFixed(3)})`),N.addColorStop(.6,`rgba(${M.haloMid[0]},${M.haloMid[1]},${M.haloMid[2]},${(M.haloAlpha*.5*b.dim).toFixed(3)})`),N.addColorStop(1,`rgba(0,0,0,0)`),t.fillStyle=N,t.fillRect(0,0,n,n);let P=Math.sin(y),F=Math.cos(y),I=.38,L=Math.sin(I),R=Math.cos(I),z=v*b.speed,B=b.freq,V=b.amp*j,H=b.spike*(O+C),U=p*j,ee=Math.floor(v*15),te=b.dim*(.72+.5*A)+C*.3;t.globalCompositeOperation=M.composite;for(let e=0;e<Qa;e+=1){let n=c[e],r=l[e];for(let i=0;i<$a;i+=1){let a=r*u[i],o=n,s=r*d[i],c=ao(a*B+z,o*B+z*.7,s*B)-.5,l=1+c*2*V;b.behavior===`reactive`?l+=Math.max(c,0)**2*1.7*H:b.behavior===`swirl`?l+=.03*Math.sin(9*a+v*4.6):b.behavior===`jitter`&&(l+=.02*(ro(e*$a+i,ee,3)-.5));let p=a*l,m=o*l,h=s*l,g=p*F-h*P,_=p*P+h*F,y=m*R-_*L,x=m*L+_*R,S=eo/(eo-x),C=f+g*S*U,w=f+y*S*U,T=(x+1)/2,E=ao(a*1.25+31,o*1.25+z*.12,s*1.25-17),D=M.base;E>.62?D=M.magenta:E<.38&&(D=M.cyan);let O=(M.alphaBase+M.alphaFront*T*T)*te;if(O<.015)continue;let k=(1+1.4*T+H*.4)*(.55+.45*S);t.fillStyle=`rgba(${D[0]},${D[1]},${D[2]},${O.toFixed(3)})`,t.fillRect(C,w,k,k)}}t.globalCompositeOperation=`source-over`,h=requestAnimationFrame(w)};return h=requestAnimationFrame(w),()=>cancelAnimationFrame(h)},[n]),(0,$.jsx)(`canvas`,{ref:i,className:`pointer-events-none block`,style:{width:n,height:n},"aria-hidden":`true`})}var lo=new Map;function uo(e,t){let n=lo.get(e)??new Set;return n.add(t),lo.set(e,n),()=>{n.delete(t),n.size||lo.delete(e)}}function fo(e){for(let t of lo.get(e.sessionId)??[])t(e)}function po(e,t){let n=t.messages.length-1;for(;n>=0&&t.messages[n].role!==`user`;)--n;let r=t.messages.slice(n+1).filter(e=>e.role===`agent`||e.role===`assistant`),i=r.find(e=>e.streaming)??r.at(-1);fo({sessionId:e,messageId:i?.id??``,prompt:t.messages[n]?.text,startedAt:t.startedAt??void 0,source:`snapshot`,users:t.messages.filter(e=>e.role===`user`),text:i?.text??``,status:t.error||i?.error?`failed`:t.streaming?i?`streaming`:`started`:`completed`,error:t.error||i?.error})}function mo(e){let t=``,n=0,r=!1,i,a,o=()=>{a?.(),a=void 0},s=()=>{i=_(e),o()};return e.addEventListener(`abort`,s,{once:!0}),e.aborted&&s(),{get text(){return t},update(e){if(!(r||i)){if(e.length>32e3)throw Error(`Speech text exceeds the supported limit.`);if(!e.startsWith(t))throw Error(`The streamed speech response was rewritten.`);t=e,o()}},finish(e){r&&e===void 0||(r=!0,e!==void 0&&(i=e),o())},async*[Symbol.asyncIterator](){try{for(;;){if(g(e),i)throw i;if(n<t.length){let e=t.slice(n);n=t.length,yield e}else if(r)return;else await new Promise(e=>{a=e})}}finally{e.removeEventListener(`abort`,s),r=!0,o()}}}}function ho(e){let{t}=o(),n=(0,Q.useRef)({...e,t});n.current={...e,t};let[r,i]=(0,Q.useState)(`idle`),[a,s]=(0,Q.useState)(0),[c,l]=(0,Q.useState)(``),[u,d]=(0,Q.useState)([]),[f,p]=(0,Q.useState)(``),[m,h]=(0,Q.useState)(!1),[_,v]=(0,Q.useState)(0),y=(0,Q.useRef)(`idle`),b=(0,Q.useRef)(0),x=(0,Q.useRef)(null),S=(0,Q.useRef)(Promise.resolve()),C=(0,Q.useRef)(!1),w=(0,Q.useRef)(null),T=(0,Q.useRef)(!1),E=(0,Q.useRef)(!1),D=(0,Q.useRef)(!1),O=(0,Q.useRef)({start:async()=>{},commit:async()=>{},stop:()=>{}}),k=(0,Q.useCallback)(e=>{y.current=e,i(e)},[]),A=e=>T.current&&n.current.open&&e.sessionId===n.current.sessionId&&x.current===e&&b.current===e.generation&&!e.controller.signal.aborted,j=()=>!!(n.current.streaming||n.current.messages.some(e=>e.streaming));function M(){let e=w.current;w.current=null,e?.controller.abort()}function N(){if(w.current)return w.current.preparing;let e=new AbortController,t=n.current.sessionId,r=(async()=>{C.current||=(await n.current.ensureReady?.(e.signal),g(e.signal),!0);let{hotwords:r}=await Er(t,e.signal);await Cr({kinds:[`asr`,`tts`],hotwords:r},e.signal),g(e.signal)})().catch(t=>{throw w.current?.controller===e&&(w.current=null),e.abort(),t});return w.current={controller:e,preparing:r},r}function P(e){window.clearTimeout(e.limitTimer),e.limitTimer=void 0,e.microphone.abort(),e.endpoint?.dispose(),e.endpoint=void 0;let t=e.capture;return e.capture=void 0,t&&(e.captureStopping=t.stop()),e.captureStopping??Promise.resolve()}function F(e){if(e.cleanup)return e.cleanup;e.controller.abort(),e.unsubscribe?.(),e.unsubscribe=void 0,e.responseSubscription?.(),e.responseSubscription=void 0,e.checkOwnership=void 0;let t=P(e),n=e.recognizer;return e.recognizer=void 0,e.cleanup=Promise.allSettled([t,e.capturePending,e.recognizerDisposing,e.playback,n?.dispose()]).then(()=>{}),e.cleanup}function I(){b.current+=1;let e=x.current;if(x.current=null,!e)return;let t=Promise.resolve(),r=n.current.messages.filter(t=>t.role===`user`&&!e.baseline?.has(t.id)),i=n.current.sessionId===e.sessionId&&(r.length>1||r.length===1&&r[0].text?.trim()!==e.prompt);if(e.ownsRun&&!i){e.ownsRun=!1;try{t=Promise.resolve(e.abortRun?.()).catch(()=>{})}catch{}}S.current=Promise.allSettled([S.current,F(e),t]).then(()=>{})}function L(){D.current=!1,I(),k(`idle`),l(``),s(0),d(e=>e.filter(e=>!e.pending))}function R(e,t){if(!A(e))return;let r=t instanceof Error?t.message:typeof t==`string`?t:t&&typeof t==`object`&&`message`in t?t.message:void 0,i=typeof r==`string`&&r.trim()?r:n.current.t(`chat:voiceMode.failed`),a=t instanceof DOMException&&t.name===`NotAllowedError`||i.includes(`microphone_permission_denied`)?n.current.t(`chat:voiceInput.permissionDenied`):i;L(),p(a),k(`error`),n.current.notifyError?.(a)}function z(e){return new Promise(t=>{let n=e.controller.signal,r=()=>{window.clearTimeout(i),n.removeEventListener(`abort`,r),t()},i=window.setTimeout(r,50);n.addEventListener(`abort`,r,{once:!0}),n.aborted&&r()})}async function B(e,t,r){let i=e.controller.signal,a=mo(i),o,s,c,l=!1,u=!1,f=!1,p=!1,m=!1,h=1/0,_=n=>{let r=n.filter(e=>e.role===`user`&&!t.has(e.id));return r.length>1||r.length===1&&r[0].text?.trim()!==e.prompt};e.checkOwnership=()=>{A(e)&&_(n.current.messages)&&(e.ownsRun=!1,R(e,Error(n.current.t(`chat:voiceMode.failed`))))};let v=e=>{a.update(e),d(t=>t.map(t=>t.id===r?{...t,text:e,pending:!e.trim()}:t))};e.responseSubscription=uo(e.sessionId,r=>{if(!(!A(e)||r.source!==`snapshot`&&t.has(r.messageId)))try{let t=r.source===`snapshot`,i=!!(c&&r.startedAt===c);if(r.users&&_(r.users)||r.prompt!==void 0&&r.prompt.trim()!==e.prompt||s&&r.runId&&s!==r.runId||c&&r.startedAt&&c!==r.startedAt||t&&!i&&!(p&&!r.startedAt&&r.status===`completed`)||!t&&o&&o!==r.messageId)throw e.ownsRun=!1,Error(n.current.t(`chat:voiceMode.failed`));if(p&&t)return;if(s||=r.runId,c||=r.startedAt,r.messageId&&(o=r.messageId),r.status===`recovering`){l=!0;return}if(t&&(l=!0,u=r.status===`streaming`||r.status===`started`),r.status===`started`)return;if(f=!0,r.status===`failed`)throw e.ownsRun=!1,Error(r.error||n.current.t(`chat:voiceMode.failed`));v(r.text),r.status===`completed`&&(p=!0,e.ownsRun=!1,a.finish())}catch(t){a.finish(t),R(e,t)}});let y=Promise.resolve().then(()=>(g(i),n.current.sendPrompt(e.prompt,[],!1,!1,null))).catch(t=>{throw e.ownsRun=!1,a.finish(t),t}).finally(()=>{!f&&!s&&!c&&(e.ownsRun=!1),m=!0,h=Date.now()+15e3}),b=async()=>{for(;A(e);){if(await z(e),!A(e))return;let r=n.current.messages.filter(e=>!t.has(e.id)),i=r.filter(e=>e.role===`user`);if(i.length>1||i.length===1&&i[0].text?.trim()!==e.prompt)throw Error(n.current.t(`chat:voiceMode.failed`));let s=r.filter(e=>e.role===`assistant`||e.role===`agent`),c=s.find(e=>e.error);if(c)throw Error(String(c.error));if(p&&m&&!j())return;let d=s.at(-1);if(!l&&d?.text&&(!f||m&&!j())){if(o&&o!==d.id)throw Error(n.current.t(`chat:voiceMode.failed`));o=d.id,v(d.text)}if(!l&&m&&!j()&&d?.text?.trim()){e.ownsRun=!1,a.finish();return}if(m&&(j()||u)&&(h=Date.now()+15e3),Date.now()>=h)throw Error(n.current.t(`chat:voiceMode.emptyReply`))}};try{e.playback=Promise.resolve().then(()=>n.current.speakText(a,i,()=>{A(e)&&k(`speaking`)})),await Promise.all([y,b(),e.playback])}catch(e){throw a.finish(e),e}finally{e.responseSubscription?.(),e.responseSubscription=void 0,e.checkOwnership=void 0,a.finish()}}async function V(){let e=x.current;if(!e||!A(e)||e.committed||y.current!==`listening`)return;e.committed=!0;let t=e.endpoint?.hasSpeech;k(`transcribing`),s(0);try{if(await P(e),!A(e))return;if(!t){L();return}let r=(await e.recognizer?.finish())?.trim();if(!A(e))return;e.unsubscribe?.(),e.unsubscribe=void 0;let i=e.recognizer;if(e.recognizer=void 0,e.recognizerDisposing=i?.dispose(),await e.recognizerDisposing,!A(e))return;if(l(``),!r)throw Error(n.current.t(`chat:voiceMode.emptyReply`));if(j()){L();return}let a=new Set(n.current.messages.map(e=>e.id));e.baseline=a,e.prompt=r;let o=`voice-agent-${e.generation}`;if(d(t=>[...t.slice(-4),{id:`voice-user-${e.generation}`,role:`user`,text:r},{id:o,role:`agent`,text:``,pending:!0}]),k(`thinking`),e.abortRun=n.current.onAbort,e.ownsRun=!0,await B(e,a,o),!A(e))return;D.current&&!E.current?(k(`idle`),await O.current.start()):L()}catch(t){R(e,t)}}async function H(){if(!T.current||!n.current.open||E.current||document.hidden||![`idle`,`error`,`speaking`].includes(y.current))return;I();let e={generation:++b.current,sessionId:n.current.sessionId,controller:new AbortController,microphone:new AbortController,permissionPending:!1,committed:!1,commitRequested:!1,ownsRun:!1};x.current=e,D.current=!0,p(``),l(``),s(0),k(`requesting`);let t=pa(),r=0;try{if(await S.current,!A(e)||(await N(),!A(e)))return;if(j()){L();return}e.permissionPending=!0;try{await za()}finally{e.permissionPending=!1}if(!A(e))return;if(document.hidden||j()){L();return}let n=await ya();if(!A(e)){n.dispose();return}e.endpoint=n;let i=Ua({chatSessionId:e.sessionId});if(e.recognizer=i,e.unsubscribe=i.onPartial(t=>{A(e)&&l(t)}),await i.start(),!A(e)||(e.capturePending=Ka(a=>{if(!(!A(e)||e.committed||e.microphone.signal.aborted))try{let o=t.push(fa(a)),c=performance.now();c-r>=66&&(r=c,s(o));let l=i.acceptPcm(a),u=n.acceptPcm(a);(l||u)&&(e.commitRequested=!0,y.current===`listening`?O.current.commit():e.microphone.abort())}catch(t){R(e,t)}},e.microphone.signal).then(async t=>(!A(e)||e.microphone.signal.aborted?await t.stop():e.capture=t,t)),await e.capturePending,!A(e)))return;if(k(`listening`),e.commitRequested){await O.current.commit();return}e.limitTimer=window.setTimeout(()=>void O.current.commit(),6e4)}catch(t){A(e)&&e.commitRequested&&e.microphone.signal.aborted?(k(`listening`),await O.current.commit()):R(e,t)}}O.current={start:H,commit:V,stop:L};let U=(0,Q.useCallback)(()=>O.current.commit(),[]),ee=(0,Q.useCallback)(()=>{O.current.stop();let e=b.current;S.current.then(()=>{b.current===e&&T.current&&O.current.start()})},[]),te=(0,Q.useCallback)(()=>{y.current===`listening`?O.current.commit():y.current===`thinking`||y.current===`speaking`?ee():(y.current===`idle`||y.current===`error`)&&(E.current=!1,h(!1),O.current.start())},[ee]),ne=(0,Q.useCallback)(()=>{let e=!E.current;E.current=e,h(e),e?O.current.stop():O.current.start()},[]),re=(0,Q.useCallback)(()=>{M(),O.current.stop(),p(``),v(0)},[]);return(0,Q.useEffect)(()=>{if(!e.open)return;T.current=!0,C.current=!1,E.current=!1,h(!1),d([]),v(0),k(`idle`),O.current.start();let t=()=>{x.current?.permissionPending&&window.__PISPER_MOBILE_APP__||(M(),O.current.stop())},n=()=>{document.hidden&&t()},r=()=>{M(),O.current.stop()};return window.addEventListener(`blur`,t),window.addEventListener(`pisper:speech-interrupted`,r),document.addEventListener(`visibilitychange`,n),()=>{T.current=!1,M(),O.current.stop(),window.removeEventListener(`blur`,t),window.removeEventListener(`pisper:speech-interrupted`,r),document.removeEventListener(`visibilitychange`,n)}},[e.open,e.sessionId,k]),(0,Q.useEffect)(()=>{x.current?.checkOwnership?.()},[e.messages,e.streaming]),(0,Q.useEffect)(()=>{if(![`listening`,`transcribing`,`thinking`,`speaking`].includes(r))return;let e=window.setInterval(()=>v(e=>e+1),1e3);return()=>window.clearInterval(e)},[r]),{stage:r,level:a,partial:c,turns:u,error:f,muted:m,elapsed:_,toggleMain:te,toggleMute:ne,hangUp:re,commitListening:U,interrupt:ee}}function go(e){return{idle:e(`chat:voiceMode.idle`),requesting:e(`chat:voiceMode.requesting`),listening:e(`chat:voiceMode.listening`),transcribing:e(`chat:voiceMode.transcribing`),thinking:e(`chat:voiceMode.thinking`),speaking:e(`chat:voiceMode.speaking`),error:e(`chat:voiceMode.failed`)}}function _o(e){let t=Math.floor(e/60),n=e%60;return`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}`}function vo(){let[e,t]=(0,Q.useState)(()=>document.documentElement.dataset.theme!==`light`);return(0,Q.useEffect)(()=>{let e=document.documentElement,n=()=>t(e.dataset.theme!==`light`);n();let r=new MutationObserver(n);return r.observe(e,{attributes:!0,attributeFilter:[`data-theme`]}),()=>r.disconnect()},[]),e}function yo(e){let[t,n]=(0,Q.useState)(()=>typeof window>`u`?380:Math.max(48,Math.min(window.innerWidth*.52,window.innerHeight-304,460)));return(0,Q.useEffect)(()=>{if(!e)return;let t=()=>n(Math.max(48,Math.min(window.innerWidth*.52,window.innerHeight-304,460)));return t(),window.addEventListener(`resize`,t),()=>window.removeEventListener(`resize`,t)},[e]),Math.floor(t)}function bo({open:e,sessionId:t,messages:n,streaming:r,sendPrompt:i,onAbort:a,onClose:s}){let{t:c}=o(),l=vo(),u=xa([`asr`,`tts`]),d=ho({open:e,sessionId:t,messages:n,streaming:r,sendPrompt:i,onAbort:a,ensureReady:u.ensureReady,speakText:(e,t,n)=>Oa(e,u.selectedVoice,t,n)}),{stage:f,level:p,partial:m,turns:h,error:g,elapsed:_}=d,v=yo(e),y=(0,Q.useRef)(null);(0,Q.useEffect)(()=>{if(!e)return;let t=document.activeElement;return y.current?.focus({preventScroll:!0}),()=>{t instanceof HTMLElement&&t.isConnected&&t.focus({preventScroll:!0})}},[e]);let b=()=>{try{d.hangUp()}finally{u.close(),s()}},x=f===`listening`||f===`transcribing`||f===`thinking`||f===`speaking`||f===`requesting`;if((0,Q.useEffect)(()=>{if(!e)return;let t=e=>{if(!(u.open||e.defaultPrevented||e.isComposing)){if(e.key===`Escape`){e.preventDefault(),b();return}if(e.key===`Tab`){let t=[...y.current?.querySelectorAll(`button:not(:disabled)`)||[]],n=t[0],r=t[t.length-1];e.shiftKey&&(document.activeElement===n||document.activeElement===y.current)?(e.preventDefault(),r?.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n?.focus())}e.target instanceof Element&&e.target.closest(`input, textarea, select, button, [contenteditable="true"]`)||e.key===` `&&!e.repeat&&(e.preventDefault(),x?d.hangUp():d.toggleMain())}};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[e,s,x,u.open]),!e)return null;let S=go(c),C=h[h.length-1],w=f===`listening`&&m?m:C?`${C.role,``}${ma(C.text,120)}`:``,T=f===`error`?g||c(`chat:voiceMode.failed`):S[f];return(0,xi.createPortal)((0,$.jsxs)(`div`,{className:`fixed inset-0 z-[90] grid grid-cols-[minmax(0,1fr)] grid-rows-[minmax(0,1fr)_100px_108px] overflow-hidden bg-chrome pt-[env(safe-area-inset-top)] pr-[env(safe-area-inset-right)] pb-[env(safe-area-inset-bottom)] pl-[env(safe-area-inset-left)] text-content select-none`,ref:y,tabIndex:-1,role:`dialog`,"aria-modal":`true`,"aria-label":c(`chat:voiceMode.title`),children:[(0,$.jsxs)(`header`,{className:`pointer-events-none absolute left-[calc(env(safe-area-inset-left)_+_28px)] top-[calc(env(safe-area-inset-top)_+_24px)] flex items-center gap-3`,children:[(0,$.jsx)(`span`,{className:`inline-block size-2 rounded-full ${x?`animate-pulse bg-star`:`bg-content-faint`}`,"aria-hidden":`true`}),(0,$.jsx)(`span`,{className:`text-[13px] font-semibold tracking-[0.3em] text-content`,children:`PISPER`})]}),(0,$.jsxs)(`div`,{className:`absolute top-[calc(env(safe-area-inset-top)_+_16px)] right-[calc(env(safe-area-inset-right)_+_16px)] z-10 flex items-center gap-1`,children:[(0,$.jsxs)(Jt,{children:[(0,$.jsx)(Kt,{asChild:!0,children:(0,$.jsx)(Y,{variant:`ghost`,size:`icon-sm`,"aria-label":c(`chat:speechModels.title`),onClick:()=>{d.hangUp(),u.show()},children:(0,$.jsx)(Ar,{})})}),(0,$.jsx)(qt,{children:c(`chat:speechModels.title`)})]}),(0,$.jsxs)(Jt,{children:[(0,$.jsx)(Kt,{asChild:!0,children:(0,$.jsx)(Y,{variant:`ghost`,size:`icon-sm`,className:`size-11 flex-none`,"aria-label":c(`chat:speechModels.close`),onClick:b,children:(0,$.jsx)(At,{})})}),(0,$.jsx)(qt,{children:c(`chat:speechModels.close`)})]})]}),(0,$.jsx)(Fa,{manager:u,onClose:()=>d.hangUp()}),(0,$.jsx)(`div`,{className:`flex min-h-0 items-center justify-center pt-16 pb-6`,children:(0,$.jsx)(co,{stage:f,level:p,size:v,dark:l})}),(0,$.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-col items-center justify-center gap-2 px-6 text-center`,children:[(0,$.jsx)(`div`,{className:`max-w-full text-xs font-medium tracking-normal ${f===`error`?`max-h-full overflow-y-auto break-words text-danger`:`line-clamp-2 text-content-muted`}`,role:`status`,"aria-live":`polite`,children:T}),(0,$.jsx)(`p`,{className:`m-0 line-clamp-2 min-h-[22px] max-w-[640px] text-[15px] leading-[1.6] text-content`,children:w})]}),(0,$.jsx)(`div`,{className:`relative flex justify-center pt-3 sm:items-center sm:pt-0`,children:(0,$.jsx)(`button`,{type:`button`,className:`h-11 cursor-pointer rounded-full border px-8 text-sm font-medium transition-colors ${x?`border-control bg-key text-content shadow-key hover:bg-surface-hover`:`border-transparent bg-star text-on-accent shadow-primary hover:bg-star-hover`}`,onClick:()=>x?d.hangUp():d.toggleMain(),children:c(x?`chat:voiceMode.endConversation`:`chat:voiceMode.startConversation`)})}),(0,$.jsxs)(`div`,{className:`pointer-events-none absolute bottom-[calc(env(safe-area-inset-bottom)_+_12px)] right-[calc(env(safe-area-inset-right)_+_20px)] flex items-center gap-2.5 sm:bottom-[calc(env(safe-area-inset-bottom)_+_36px)] sm:right-[calc(env(safe-area-inset-right)_+_28px)]`,children:[(0,$.jsx)(`span`,{className:`hidden size-9 place-items-center rounded-full border border-key-border bg-key text-xs text-accent-fg shadow-key sm:grid`,"aria-hidden":`true`,children:x?`●`:`○`}),(0,$.jsx)(`span`,{className:`font-mono text-[13px] tracking-[0.08em] text-content-muted tabular-nums`,children:_o(_)})]}),(0,$.jsx)(`div`,{className:`absolute bottom-[env(safe-area-inset-bottom)] left-[calc(env(safe-area-inset-left)_+_20px)] sm:bottom-[calc(env(safe-area-inset-bottom)_+_36px)] sm:left-[calc(env(safe-area-inset-left)_+_28px)]`,children:(0,$.jsxs)(Jt,{children:[(0,$.jsx)(Kt,{asChild:!0,children:(0,$.jsx)(Y,{variant:`ghost`,size:`icon`,className:`size-11 flex-none`,disabled:!x&&!d.muted,"aria-label":f===`speaking`||f===`thinking`?c(`chat:voiceMode.interrupt`):d.muted?c(`chat:voiceMode.unmute`):c(`chat:voiceMode.mute`),onClick:()=>f===`speaking`||f===`thinking`?d.interrupt():d.toggleMute(),children:f===`speaking`||f===`thinking`?(0,$.jsx)(wt,{}):d.muted?(0,$.jsx)(Lr,{}):(0,$.jsx)(Rr,{})})}),(0,$.jsx)(qt,{children:f===`speaking`||f===`thinking`?c(`chat:voiceMode.interrupt`):d.muted?c(`chat:voiceMode.unmute`):c(`chat:voiceMode.mute`)})]})})]}),document.body)}var xo=[`plan`,`goal`,`team`];function So(e){return xo.includes(e)?e:`plan`}function Co({sessionId:e,runMode:t,goalsAvailable:n,teamAvailable:r,workflowsAvailable:i,goal:a,streaming:o,compaction:s,value:c,selection:l,clearDraft:u,captureSubmission:d,promptRef:f,onCompact:p,onGoalPause:m,onSend:h,onQueue:g,onAbort:_,requestTranscriptBottom:v}){let[y,b]=(0,Q.useState)(()=>So(t)),x=(0,Q.useRef)(t);x.current=t;let[S,C]=(0,Q.useState)(null),[w,T]=(0,Q.useState)(null),E=(0,Q.useRef)(null),[D,O]=(0,Q.useState)(!1),[k,A]=(0,Q.useState)(!1),[j,M]=(0,Q.useState)(!1),[N,P]=(0,Q.useState)(``),F=(0,Q.useRef)(null),I=(0,Q.useRef)(e);I.current=e;let[L,R]=(0,Q.useState)(!1),[z,B]=(0,Q.useState)(null),V=(0,Q.useRef)(z);return V.current=z,(0,Q.useEffect)(()=>{b(So(x.current)),E.current=null,C(null),T(null),F.current=null,A(!1),M(!1),P(``),O(!1),R(!1),B(null)},[e]),(0,Q.useEffect)(()=>{b(So(t))},[e,t]),(0,Q.useEffect)(()=>{n||b(`plan`),!r&&y===`team`&&b(`goal`),!i&&z?.kind===`workflow`&&B(null)},[y,n,z?.kind,r,i]),(0,Q.useEffect)(()=>{a?.status===`active`&&b(a.mode===`team`&&r?`team`:`goal`)},[a?.id,a?.mode,a?.status,r]),(0,Q.useEffect)(()=>{if(!a?.id){C(null);return}let e=a.mode===`team`?a.teamTokenBudget:a.tokenBudget,t=e==null?null:Number(e),n=t!==null&&Number.isFinite(t)&&t>0?t:null;a.mode===`team`?T(n):C(n)},[a?.id,a?.mode,a?.teamTokenBudget,a?.tokenBudget]),{composerExecutionMode:y,setComposerExecutionMode:b,goalTokenBudget:S,setGoalTokenBudget:C,teamTokenBudget:w,setTeamTokenBudget:T,queueing:D,submitting:k,stopping:j,submitError:N,stop:async()=>{if(j||!_)return;let t=e;M(!0);try{await _()}catch(e){I.current===t&&P(e instanceof Error?e.message:String(e))}finally{I.current===t&&M(!1)}},compactingManually:L,invocation:z,setInvocation:B,requestGoalPause:()=>{if(E.current)return E.current;let e=Promise.resolve().then(()=>m?.());return E.current=e,e.catch(()=>{}),e},compactContext:async()=>{if(!(!p||o||L||s?.active)){R(!0);try{await p()}finally{R(!1)}}},submit:async(t,n=`steer`)=>{if(t.preventDefault(),F.current||j||l.preparingAttachments?.length||!c.trim()&&!l.attachments.length&&!z||o&&(!c.trim()&&!l.attachments.length||!g))return;let r={},i=e;F.current=r;let s=()=>I.current===i&&F.current===r,p=d?.(),_=!1,x=()=>{_||(_=!0,p?p.accept():u(),s()&&(A(!1),O(!1),b(`plan`),V.current===z&&B(null),v(),f.current&&(f.current.style.height=`auto`),F.current=null))};P(``),o?O(!0):A(!0);try{if(o){await g?.(c,l.attachments,n,x)&&x();return}let e=E.current;if(e?(await e,E.current=null):a?.status===`active`&&(y===`plan`||y!==a.mode)&&await m?.(),!s())return;let t=await h(c,l.attachments,y===`goal`||y===`team`,y===`team`,y===`team`?w:y===`goal`?S:null,z,x);!_&&t!==!1&&x()}catch(e){s()&&(E.current=null,P(e instanceof Error?e.message:String(e)))}finally{s()&&(F.current=null,A(!1),O(!1))}}}}var wo=[`[role="dialog"]`,`[role="alertdialog"]`,`[role="menu"]`,`[role="listbox"]`,`.anchored-popup-menu`,`.voice-input-popup`,`.git-diff-dialog-backdrop`,`[data-slot='popover-content']`,`[data-slot='dropdown-menu-content']`,`[data-slot='select-content']`,`[data-slot='sheet-content']`].join(`, `);function To(){return[...document.querySelectorAll(wo)].some(e=>e.dataset.state!==`closed`&&e.getAttribute(`aria-hidden`)!==`true`&&e.getClientRects().length>0)}var Eo=(0,Q.memo)(function({session:e,draft:t,emptyState:n,shortcutEnabled:r=!1,messages:i,transcriptLoadState:a=`ready`,messageStart:s,hasNewer:c,hasOlder:l,loadingOlder:u,olderError:d,model:f,thinkingLevel:p,availableThinkingLevels:m,thinkingStatus:h,thinkingMessage:g,executionMode:_,goal:v,team:y,currentActivity:b,activityFeed:x,tools:S,thinkingText:C,queuedInputs:O,withdrawingInputIds:k,compaction:A,contextUsage:j,sessionUsage:M,sessionTreeRevision:N,sessionTreePulse:P,cwd:F,availableModels:I,pendingRuntimeSelection:L,switchingModel:R,switchingThinking:z,switchingCwd:B,switchingPermission:H,streaming:U,runStartedAt:ee,lastActivityAt:te,runFinishedAt:ne,runStopped:re,runNotice:ae,approvals:se,questions:ce,error:de,pendingAsset:fe,notify:pe,onOpenModelSettings:q,onAssetConsumed:xe,onLoadOlder:we,onLoadLatest:Te,onModelChange:Ee,onThinkingLevelChange:De,onExecutionModeChange:Oe,onRunModeChange:ke,onCompact:Ae,onCompactionThresholdChange:je,onGoalPause:Me,onGoalBudgetChange:Ne,onApproval:Pe,onAnswerQuestion:Fe,onWorkspace:Ie,onRename:Le,onBranchFromHere:Re,onCreateChildSession:ze,onRetryLastTurn:Be,onTreeNavigated:Ve,onSend:Ke,onQueue:Je,onWithdrawQueuedInput:$e,onSendQueuedInputNow:nt,onAbort:it}){let at=(0,Q.useContext)(He),ot=(0,Q.useContext)(Si),st=(0,Q.useContext)(Qe),ct=!!st?.phone,{t:J}=o(),lt=mn(e=>e.bindings),ut=D(),dt=E(),ft=ut||dt,pt=T(e=>e.capabilities),mt=w(pt,`goals`),gt=w(pt,`multiAgent`),_t=w(pt,`workflows`),yt=w(pt,`visualGeneration`),bt=w(pt,`inputInterrupt`),xt=bt?`interrupt`:`steer`,{value:St,updateValue:Ct,selection:wt,clearDraft:Tt,restoreDraft:Et,captureSubmission:Dt}=W(t?me:e.id),[Ot,kt]=(0,Q.useState)(!1),[At,jt]=(0,Q.useState)(!1),[Mt,zt]=(0,Q.useState)(!1),Bt=(0,Q.useRef)(null),[Vt,Ht]=(0,Q.useState)(!1),[Ut,Wt]=(0,Q.useState)(!1),[Gt,Kt]=(0,Q.useState)(``),[qt,Jt]=(0,Q.useState)(!1),[Xt,Y]=(0,Q.useState)(0),Zt=wt.addAttachments,Qt=(0,Q.useRef)(null),$t=(0,Q.useRef)(null),en=(0,Q.useRef)(`steer`),tn=lt.steerMessage,nn=()=>{en.current=xt,Qt.current?.form?.requestSubmit()},an=vn(`sendMessage`),on=vn(`voiceInput`),sn=(0,Q.useRef)(null),ln=(0,Q.useRef)(null);(0,Q.useEffect)(()=>{if(!r)return;let e=e=>{!pn(e)&&_n(e,lt.focusComposer)&&(e.preventDefault(),Qt.current?.focus())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,lt.focusComposer]);let un=!!t;(0,Q.useEffect)(()=>{if(!un)return;let e=()=>{let e=Qt.current;e&&(e.focus(),e.setSelectionRange(e.value.length,e.value.length),e.scrollTop=e.scrollHeight,rn())};return(rn()||!ft)&&e(),window.addEventListener(cn,e),()=>window.removeEventListener(cn,e)},[un,ft]);let dn=(0,Q.useRef)(!1),fn=a!==`ready`||i.length>0,hn=U?ft?J(`board:composer.placeholderRunningTouch`):tn?J(`board:composer.placeholderRunning`,{queue:an,steer:yn(tn)}):J(`board:composer.placeholderRunningQueueOnly`,{queue:an}):J(t?`chat:newTask.placeholder`:`board:composer.placeholder`),bn=()=>Y(e=>e+1),xn=e=>{Ct(e),requestAnimationFrame(()=>{let e=Qt.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,220)}px`)})},{composerExecutionMode:Sn,setComposerExecutionMode:Cn,goalTokenBudget:wn,setGoalTokenBudget:En,teamTokenBudget:Dn,setTeamTokenBudget:On,queueing:kn,submitting:An,stopping:jn,submitError:Mn,stop:Nn,compactingManually:Pn,invocation:Fn,setInvocation:In,requestGoalPause:Ln,compactContext:Rn,submit:zn}=Co({sessionId:e.id,runMode:e.runMode,goalsAvailable:mt,teamAvailable:gt,workflowsAvailable:_t,goal:v,streaming:U,compaction:A,value:St,selection:wt,clearDraft:Tt,captureSubmission:Dt,promptRef:Qt,onCompact:Ae,onGoalPause:Me,onSend:Ke,onQueue:Je,onAbort:it,requestTranscriptBottom:bn}),Bn=(0,Q.useRef)(Nn);Bn.current=Nn,(0,Q.useEffect)(()=>{if(!st||!r||!U)return;let e=new WeakSet,t=t=>{t.key===`Escape`&&To()&&e.add(t)},n=t=>{if(t.key!==`Escape`||!t.isTrusted||t.defaultPrevented||t.isComposing||t.keyCode===229||e.has(t))return;let n=t.target,r=$t.current,i=n===document.body||n===document.documentElement||n instanceof Element&&!!n.closest(`[data-session-conversation]`)&&!n.closest(`.terminal-panel, .xterm`);!r||!i||gn(n)&&n!==Qt.current||(t.preventDefault(),Bn.current())};return window.addEventListener(`keydown`,t,!0),window.addEventListener(`keydown`,n),()=>{window.removeEventListener(`keydown`,t,!0),window.removeEventListener(`keydown`,n)}},[st,r,U]);let Vn=e=>{v?.status===`active`&&(e===`plan`||e!==v.mode)&&Ln().catch(()=>{}),Cn(e),ke(e)},Hn=(0,Q.useContext)(tt),Un=st?.onNewTask||st?.phone?.onNewTask,Wn=t?t.cwd:null,Gn=(0,Q.useCallback)(()=>Wn===null?X.getSessionCommands(e.id):X.getWorkspaceCommands(Wn),[Wn,e.id]),Kn=Ki(e.id),qn=[...Un&&!t?[{invocation:`/new`,description:J(`chat:commands.builtin.new`),run:Un}]:[],...Se({t:J,models:I,model:L?.model||f,onModel:e=>Ee(e),thinkingLevels:L?.model?[]:m||[],thinkingLevel:L?.thinkingLevel||p||``,thinkingLabel:e=>_e(J,e),onThinking:e=>De(e),executionModes:[`approval-required`,`workspace-write`,`full-access`],executionMode:_,executionLabel:e=>J(e===`full-access`?`chat:focusSession.fullAccess`:e===`workspace-write`?`chat:focusSession.workspaceWrite`:`chat:focusSession.approvalRequired`),onExecutionMode:e=>Oe(e),runModes:U?[]:[`plan`,...mt?[`goal`]:[],...mt&>?[`team`]:[]],runMode:Sn,runModeLabel:e=>J(e===`team`?`chat:focusSession.teamMode`:e===`goal`?`chat:focusSession.goalMode`:`chat:focusSession.planMode`),onRunMode:e=>Vn(e)}),...t?[]:[{invocation:`/btw`,description:J(`chat:commands.builtin.btw`)}],...Ae?[{invocation:`/compact`,description:J(`chat:commands.builtin.compact`),run:()=>Rn()}]:[],...Hn&&!t?[{invocation:`/changes`,description:J(`chat:commands.builtin.changes`),run:()=>Hn.show(`changes`)}]:[]],Jn=L?.model||f||``,Xn=Yn(I.find(e=>e.key===Jn)?.label||Jn.split(`/`).at(-1)||``,I.map(e=>e.label)),Zn=e?.botId,Qn=(0,Q.useMemo)(()=>st?{model:Xn,...Zn?{botId:Zn}:{}}:null,[Zn,Xn,st]),$n=(0,Q.useRef)([]);(0,Q.useEffect)(()=>()=>{for(let e of $n.current)window.clearTimeout(e);$n.current=[]},[e.id]);let er=rt(e.id,!!Zn,()=>{for(let e of[1500,4e3,9e3])$n.current.push(window.setTimeout(()=>void Te?.(),e))}),tr=(0,Q.useRef)(U),nr=er.reload;(0,Q.useEffect)(()=>{let e=tr.current&&!U;if(tr.current=U,!Zn||!e)return;let t=[1500,4e3].map(e=>window.setTimeout(nr,e));return()=>{for(let e of t)window.clearTimeout(e)}},[Zn,nr,U]);let rr=(0,Q.useMemo)(()=>Zn?{sessionId:e.id,agents:new Map(er.agents.map(e=>[e.id,e])),links:new Map(er.links.map(e=>[e.id,e])),reload:er.reload}:null,[Zn,e.id,er.agents,er.links,er.reload]),ir=(0,Q.useMemo)(()=>{let e=ct?i:i.filter(e=>!Xe(e));return Zn?We(e,er.agents,er.links):e},[Zn,i,ct,er.agents,er.links]),ar=Number(j?.percent),sr=j?.percent!=null&&Number.isFinite(ar)?ar:null,cr=i[Ye(i)],lr=cr?.role===`agent`?cr:null,ur=Mn||de||(U?``:String(lr?.error||``)),dr=!c&&!Mn&&!U&&i.some(e=>e.role===`user`);(0,Q.useEffect)(()=>{kt(!1),Ht(!1)},[e.id]),(0,Q.useEffect)(()=>{fe&&(Zt([fe]),xe?.())},[fe,xe,Zt]);let fr=async e=>{let t=await $e?.(e);if(!t||!Et(t))return;let n=Qt.current;requestAnimationFrame(()=>{!n||Qt.current!==n||!n.isConnected||(n.focus(),n.style.height=`auto`,n.style.height=`${Math.min(n.scrollHeight,220)}px`)})},pr=async e=>{await $e?.(e)},Z=e=>{Ct(e),requestAnimationFrame(()=>{let e=Qt.current;e&&(e.focus(),e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,220)}px`)})},mr=Mi({cwd:F,selection:wt}),hr=(0,$.jsx)(Xa,{sessionId:e.id,shortcutEnabled:r,variant:ct?`button`:`menu`,controlRef:ln,onLiveText:e=>{if(e===null){sn.current!==null&&(xn(sn.current),sn.current=null);return}sn.current===null&&(sn.current=(Qt.current?.value??St).trimEnd());let t=sn.current;xn(t&&e?`${t}\n${e}`:t||e)},onInsert:e=>{let t=sn.current??(Qt.current?.value??St).trimEnd();sn.current=null,xn(t?`${t}\n${e}`:e),requestAnimationFrame(()=>Qt.current?.focus())}}),gr=J(`board:composer.plusMenu`),_r=()=>void la({templatePrompt:J(`chat:focusSession.visualPromptTemplate`),configureHint:J(`chat:focusSession.configureVisualModelFirst`),notify:pe,onOpenModelSettings:q,onInsertPrompt:Z}),vr=(0,$.jsxs)(`button`,{type:`button`,className:Yt(ve,`composer-plus-trigger aria-expanded:bg-surface-hover aria-expanded:text-content max-[650px]:rounded-full max-[650px]:bg-surface-muted max-[650px]:dark:bg-surface-active max-[650px]:text-content`),ref:Bt,title:gr,"aria-label":gr,"data-composer-plus":!0,children:[(0,$.jsx)(vt,{size:18,className:G,"aria-hidden":`true`}),wt.attachments.length>0&&(0,$.jsx)(`span`,{className:`absolute -top-0.5 -right-0.5 grid h-4 min-w-4 place-items-center rounded-full border-2 border-panel bg-star px-0.5 text-[10px] leading-none font-medium text-on-accent tabular-nums`,children:wt.attachments.length})]}),yr=ct?(0,$.jsx)(Ui,{trigger:vr,open:Mt,onOpenChange:zt,onAttachment:()=>void mr.choose(),onResource:()=>kt(!0),onVisual:yt?_r:void 0,steer:U?{disabled:!St.trim()&&!wt.attachments.length&&!Fn,onSelect:nn}:void 0,mode:Zn?void 0:{valueLabel:J(_===`full-access`?`chat:focusSession.fullAccessShort`:_===`workspace-write`?`chat:focusSession.workspaceWriteShort`:`chat:focusSession.approvalRequiredShort`),onOpen:()=>jt(!0)}}):(0,$.jsxs)(Rt,{children:[(0,$.jsx)(It,{asChild:!0,children:vr}),(0,$.jsxs)(Lt,{align:`start`,side:`top`,className:`w-60 p-1 max-[650px]:[&_[role=menuitem]]:min-h-11`,"data-composer-plus-menu":!0,children:[(0,$.jsxs)(Pt,{"data-composer-plus-item":`attachment`,onSelect:()=>void mr.choose(),children:[(0,$.jsx)(ht,{"aria-hidden":`true`}),J(`chat:focusSession.addAttachment`)]}),(0,$.jsxs)(Pt,{"data-composer-plus-item":`resource`,onSelect:()=>kt(!0),children:[(0,$.jsx)(V,{"aria-hidden":`true`}),J(`chat:resourcePicker.open`)]}),(0,$.jsx)(Nt,{}),yt&&(0,$.jsxs)(Pt,{"data-composer-plus-item":`visual`,onSelect:_r,children:[(0,$.jsx)(ie,{"aria-hidden":`true`}),J(`chat:focusSession.generateImage`)]}),(0,$.jsxs)(Pt,{"data-composer-plus-item":`voice`,onSelect:()=>ln.current?.(),children:[(0,$.jsx)(Rr,{"aria-hidden":`true`}),J(`board:composer.voiceInput`),on&&(0,$.jsx)(Ft,{children:on})]})]})]}),br=(0,$.jsx)(Hi,{sheet:ct,collapse:ct,open:At,onOpenChange:e=>{jt(e),!e&&ct&&window.setTimeout(()=>Bt.current?.focus(),0)},approvalMode:_,onApprovalModeChange:Oe,approvalDisabled:H,runMode:Sn,onRunModeChange:Vn,runModeDisabled:!!U,goalsAvailable:mt,teamAvailable:gt,goal:v,tokenBudget:Sn===`team`?Dn:wn,onTokenBudgetChange:Sn===`team`?On:En,onSaveTokenBudget:e=>Ne?.(e)}),xr=(0,$.jsx)(he,{sheet:ct,model:L?.model||f,models:I,onModelChange:Ee,thinkingLevel:L?.thinkingLevel||p||`medium`,levels:L?.model?[]:m||[],status:h,message:g,onThinkingChange:De,modelDisabled:R||z,thinkingDisabled:z||R,deferred:U,pendingModel:!!L?.model,usage:(0,$.jsx)(ye,{usage:j,sessionUsage:M,model:f,availableModels:I,onThresholdChange:je})}),Sr=(0,$.jsx)(`div`,{className:Yt(`flex items-center`,ct?`shrink-0`:`min-w-0 shrink [&_.model-effort-pill]:max-w-full @max-[300px]/composer-footer:[&_.model-effort-pill>span:nth-child(n+2)]:hidden`),children:xr}),Cr=(0,Q.useMemo)(()=>Tn(ce),[ce]),wr={session:e,cwd:F||``,streaming:!!U,treeAvailable:i.length>0,onRename:Le,onWorkspace:Ie,workspaceDisabled:!!(U||B),onCompact:Ae?()=>void Rn():void 0,compactDisabled:!!(U||Pn||A?.active||i.length===0),workflowsAvailable:_t,onVoiceMode:()=>Wt(!0),notify:pe??(()=>void 0)},Tr=st&&(0,$.jsx)(sa,{visible:i.length>0,open:Vt,sessionId:e.id,streaming:!!U,revision:N,pulseToken:P,onOpenChange:Ht,onNavigated:async e=>{e!==null&&Z(e),await Ve?.(),bn()},onCreateChildSession:e=>ze(e),notify:pe,children:(e,t)=>ct?(0,$.jsx)(ji,{...wr,runStartedAt:ee,approvals:se.length,failed:!!(!U&&(de||lr?.error)),stopped:!!(!U&&re),contextPercent:sr,leading:ot,branches:t.branches,onOpenTree:t.open}):(0,$.jsx)(wi,{...wr,contextPercent:sr,branches:t.branches,onOpenTree:t.open})}),Er=t?(0,$.jsx)(zi,{phone:ct,leading:ot,project:ct?t.renderProjectControl(`header`):void 0}):Tr,Dr=(0,$.jsx)(et,{emptyState:t?(0,$.jsx)(Ri,{}):n,layoutMeasurementKey:`fixed`,sessionId:e.id,messages:ir,transcriptLoadState:a,messageStart:s,hasNewer:c,onLoadLatest:Te,hasOlder:l,loadingOlder:u,olderError:d,currentActivity:b,team:y,activityFeed:x,tools:S,thinkingText:C,compaction:A,streaming:U,runStartedAt:ee,lastActivityAt:te,runFinishedAt:ne,runStopped:re,runNotice:ae,error:de,scrollRequest:Xt,cwd:F,lineage:e.lineage,switchingCwd:B,onLoadOlder:we,onBranchFromHere:Re,onCreateChildSession:ze,onRetryLastTurn:Be,onPromptSelect:Z,onWorkspace:Ie,collapseEarlierTurns:ct},`transcript`),Or=e=>Ce(e.dataTransfer)?(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`copy`),Jt(!0),!0):!1,kr=(0,$.jsxs)(`form`,{className:Yt(`focus-composer-shell relative z-20 mx-auto flex w-[min(768px,calc(100%_-_48px))] shrink-0 flex-col gap-2 pt-2 pb-3 @max-[700px]:w-[calc(100%_-_24px)] max-[650px]:pb-2.5`,fn&&`before:pointer-events-none before:absolute before:inset-x-0 before:-top-9 before:h-9 before:bg-linear-to-b before:from-transparent before:to-panel`),onSubmit:e=>{let t=en.current;en.current=`steer`;let n=oe(St);if(n!==null){e.preventDefault(),n&&(Kn.ask(n),Ct(``));return}if(!U&&(L||R||z)){e.preventDefault();return}zn(e,st?t:`steer`)},children:[Kn.state&&(0,$.jsx)(Gi,{state:Kn.state,cwd:F||void 0,onDismiss:()=>{Kn.dismiss(),Qt.current?.focus()}}),(0,$.jsx)(Ue,{approvals:se,onResolve:Pe,sessionTitle:e.name||e.id,cwd:F||``}),Cr[0]&&Fe&&(0,$.jsx)(ca,{question:Cr[0],more:Cr.length-1,collapsed:se.length>0,onAnswer:Fe},Cr[0].id),_t&&!t&&(0,$.jsx)(li,{sessionId:e.id}),Fn&&(0,$.jsx)(be,{invocation:Fn,onRemove:()=>In(null)}),wt.attachmentError&&(0,$.jsx)(`span`,{className:`text-[var(--danger)] text-[13px]`,children:wt.attachmentError}),ur&&(0,$.jsx)(Ge,{error:ur,onRetry:dr?Be:void 0,className:`w-full`}),(0,$.jsxs)(`div`,{className:`flex min-w-0 flex-col`,children:[(0,$.jsx)(K,{streaming:U,compaction:A,startedAt:ee,stopping:jn,onStop:()=>void Nn(),runRow:!ct,queuedInputs:O,withdrawingInputIds:k,onEdit:$e?fr:void 0,onCancel:$e?pr:void 0,onSendNow:bt&&nt?e=>void nt(e):void 0,queueList:!ct}),(0,$.jsxs)(`div`,{className:Yt(`focus-composer relative flex min-w-0 flex-col rounded-[var(--composer-radius,22px)] [corner-shape:var(--composer-corner-shape,round)] border border-control bg-solid shadow-composer transition-[border-color,box-shadow] duration-(--d-fast) ease-(--ease) has-[textarea:focus]:border-focus has-[textarea:focus]:ring-3 has-[textarea:focus]:ring-focus-ring max-[650px]:rounded-[28px] max-[650px]:border-stroke-strong max-[650px]:shadow-none max-[650px]:has-[textarea:focus]:border-control max-[650px]:has-[textarea:focus]:ring-0 [&>.attachment-tray]:px-3 [&>.attachment-tray]:pt-3 [&_textarea]:w-full [&_textarea]:min-w-0 [&_textarea]:min-h-11 [&_textarea]:max-h-[220px] [&_textarea]:resize-none [&_textarea]:overflow-y-auto [&_textarea]:border-0 [&_textarea]:[outline:0]! [&_textarea]:bg-transparent [&_textarea]:px-4 [&_textarea]:pt-3 [&_textarea]:pb-1 [&_textarea]:text-[length:calc(var(--app-message-font-size)*.9375)] max-[650px]:[&_textarea]:px-3.5 max-[650px]:[&_textarea]:text-[length:var(--app-message-font-size)] [&_textarea]:[font-family:var(--font-content-family)] [&_textarea]:font-[400] [&_textarea]:leading-5 [&_textarea]:text-content [&_textarea]:placeholder:text-content-muted`,qt&&`border-focus ring-3 ring-focus-ring`),onDragEnter:Or,onDragOver:Or,onDragLeave:e=>{let t=e.relatedTarget;t instanceof Node&&e.currentTarget.contains(t)||Jt(!1)},onDrop:e=>{Jt(!1),wt.dropFiles(e)},children:[qt&&(0,$.jsx)(`div`,{role:`status`,className:`pointer-events-none absolute inset-0 z-10 grid place-items-center rounded-[inherit] border border-dashed border-focus bg-panel px-4 text-center text-sm text-content`,children:J(`chat:focusSession.dropAttachment`)}),(0,$.jsx)(Pi,{attachments:wt.attachments,preparing:wt.preparingAttachments,onRemove:wt.removeAttachment}),(0,$.jsx)(ge,{placement:`top`,resourceKey:e.id,loadCommands:Gn,builtinCommands:qn,value:St,onChange:Ct,inputRef:Qt}),(0,$.jsx)(`textarea`,{ref:Qt,rows:1,"aria-label":J(`chat:focusSession.taskDescription`),value:St,onChange:e=>{Ct(e.target.value),e.currentTarget.style.height=`auto`,e.currentTarget.style.height=`${Math.min(e.currentTarget.scrollHeight,220)}px`},onPaste:wt.pasteFiles,onCompositionStart:()=>dn.current=!0,onCompositionEnd:()=>window.setTimeout(()=>dn.current=!1,0),onKeyDown:e=>{let t=e.nativeEvent.isComposing||dn.current;if(st&&U&&!t&&tn&&_n(e.nativeEvent,tn)){e.preventDefault(),en.current=xt,e.currentTarget.form?.requestSubmit();return}if(e.key===`Tab`&&e.shiftKey&&!e.altKey&&!e.ctrlKey&&!e.metaKey&&!t&&!U){let t=Wi(Sn,{goalsAvailable:mt,teamAvailable:gt});if(t){e.preventDefault(),Vn(t),Kt(J(t===`team`?`chat:focusSession.teamMode`:t===`goal`?`chat:focusSession.goalMode`:`chat:focusSession.planMode`));return}}!t&&_n(e.nativeEvent,lt.sendMessage)&&(e.preventDefault(),e.currentTarget.form?.requestSubmit()),!st&&U&&!t&&e.key===`Escape`&&!e.defaultPrevented&&(e.preventDefault(),Nn())},"data-mobile-composer-input":ft||void 0,enterKeyHint:ft&<.sendMessage===`Enter`?`send`:`enter`,placeholder:hn}),(0,$.jsx)(`span`,{role:`status`,className:`sr-only`,children:Gt}),(0,$.jsxs)(`div`,{className:`focus-composer-footer @container/composer-footer flex min-w-0 items-center gap-1 px-2 pt-1 pb-2 max-[650px]:gap-2 max-[650px]:pt-2 max-[650px]:pb-3`,"data-composer-toolbar":!0,children:[yr,mr.input,ct&&!Zn&&Sr,!ct&&t?.renderProjectControl(`chip`),!Zn&&br,(0,$.jsx)(`span`,{className:`min-w-0 flex-1`}),hr,!ct&&!Zn&&Sr,(0,$.jsx)(le,{streaming:U,queueing:kn,submitting:An,stopping:jn,preparing:wt.preparingAttachments.length>0,hasDraft:!!(St.trim()||wt.attachments.length||Fn),canQueue:!!Je,blockedReason:!U&&(L||R||z)?J(`chat:focusSession.waitingForModel`):void 0,disabled:!U&&(!!L||R||z||kn||!St.trim()&&!wt.attachments.length&&!Fn),onLongPress:ct&&U?nn:void 0,longPressHint:J(`board:composer.longPressSteer`),onStop:ct?()=>void Nn():void 0})]})]})]})]},`composer`);return(0,$.jsxs)(or,{className:Yt(`focus-session [--chat-content-width:768px] [.session-dock-panel_&]:overflow-hidden [.session-dock-panel_&]:min-h-0 [.session-dock-panel_&]:border-0 [.session-dock-panel_&]:rounded-[0] [.session-dock-panel_&]:bg-[var(--panel)] [.session-dock-panel_&]:p-0 [.session-dock-panel_&]:shadow-[none] [[data-theme='dark']_.session-dock-panel_&]:bg-[var(--main-surface-bg)] min-[651px]:[[data-density='compact']_.app-card:not(&)]:p-[10px] max-[650px]:min-h-[460px] max-[650px]:[.session-dock-panel_&]:min-h-0 relative flex h-full min-h-0 flex-col ${fn?`has-conversation`:`is-empty`}`,t&&`min-[651px]:[&_[data-chat-region=messages]]:!flex-none min-[651px]:[&_[data-chat-region=messages]]:mt-[max(48px,calc((100dvh-520px)/2))] min-[651px]:[&_[data-chat-region=messages]]:!overflow-visible min-[651px]:[&_.transcript]:!overflow-visible min-[651px]:[&_.transcript]:!p-0 min-[651px]:[&_.transcript]:!pb-6`),"data-chat-message-style":`bubble`,children:[(0,$.jsxs)(`div`,{ref:$t,className:`flex h-full min-h-0 min-w-0 flex-1 flex-col overflow-hidden`,children:[(0,$.jsx)(`div`,{className:`shrink-0`,"data-chat-region":`header`,children:at?.headerHost?(0,xi.createPortal)(Er,at.headerHost):at?null:Er}),(0,$.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-hidden`,"data-chat-region":`messages`,"data-focus-region":`content`,children:(0,$.jsx)(Ze.Provider,{value:rr,children:Qn?(0,$.jsx)(qe.Provider,{value:Qn,children:Dr}):Dr})}),(0,$.jsx)(`div`,{className:`shrink-0`,"data-chat-region":`composer`,"data-focus-region":`composer`,children:kr})]}),at?.sourceActionHost&&(0,xi.createPortal)((0,$.jsx)(Ni,{cwd:F,selection:wt}),at.sourceActionHost),(0,$.jsx)(Fi,{open:Ot,sessionId:e.id,cwd:F||``,onClose:()=>kt(!1),onSelect:In,onCommandSelect:e=>Z(ue(e,St))}),(0,$.jsx)(bo,{open:Ut,sessionId:e.id,sessionName:e.name||e.id,messages:i,streaming:U,sendPrompt:async(...e)=>{await Ke(...e)},onAbort:it,onClose:()=>Wt(!1)})]})}),Do=(0,Q.createContext)(null),Oo=40,ko=[],Ao=()=>void 0;function jo(e){let t=e?.queue;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t.startAfter;return typeof n==`string`?n:``}function Mo({draft:e}){let t=(0,Q.useContext)(Do),{t:n}=o(),r=n(`board:home.draftTitle`),i=(0,Q.useMemo)(()=>({id:``,name:r,cwd:e.cwd,runMode:e.runMode}),[e.cwd,e.runMode,r]);if(!t)return null;let a=t.pendingAsset?.asset&&!t.pendingAsset.targetSessionId?t.pendingAsset.asset:null;return(0,$.jsx)(`div`,{className:`session-dock-panel h-full w-full min-w-0 min-h-0 overflow-hidden [container-type:inline-size] bg-panel`,"data-new-task-draft":!0,children:(0,$.jsx)(Eo,{session:i,shortcutEnabled:!0,draft:e,messages:ko,transcriptLoadState:`ready`,model:e.model||t.defaultModel,thinkingLevel:e.thinkingLevel,availableThinkingLevels:e.availableThinkingLevels,executionMode:e.executionMode,runMode:e.runMode,activityFeed:ko,tools:ko,queuedInputs:ko,approvals:ko,cwd:e.cwd,availableModels:t.availableModels,pendingAsset:a,onAssetConsumed:t.onAssetConsumed,notify:t.notify,onOpenModelSettings:t.openModelSettings,onModelChange:e.onModelChange,onThinkingLevelChange:e.onThinkingLevelChange,onExecutionModeChange:e.onExecutionModeChange,onRunModeChange:e.onRunModeChange,onApproval:Ao,onWorkspace:Ao,onRename:Ao,onBranchFromHere:Ao,onCreateChildSession:Ao,onRetryLastTurn:Ao,onAbort:Ao,onSend:(n,r,i,a,o,s,c)=>t.sendNewTask(e,n,r,i,a,o,s,{onAccepted:c})})})}function No({sessionId:e,onCreateSession:t}){let n=(0,Q.useContext)(Do),r=e??(n?.activeId||``);return r?(0,$.jsx)(Po,{sessionId:r,panelId:`single-${r}`,shortcutEnabled:!0},r):(0,$.jsx)(Fo,{onNewSession:t})}function Po({sessionId:e,panelId:t,shortcutEnabled:n,onFocusCapture:r}){let i=(0,Q.useContext)(Do),{t:a}=o(),s=(0,Q.useContext)(Qe),c=T(e=>e.capabilities),l=i?.subscribeSessionState,u=i?.getSessionState,d=(0,Q.useMemo)(()=>t=>l?.(e,t)??(()=>{}),[l,e]),f=(0,Q.useMemo)(()=>()=>u?.(e),[u,e]),p=(0,Q.useSyncExternalStore)(d,f),m=i?.sessions.find(t=>t.id===e),h=p||Ve,g=Je(h,m),_=jo(m),v=Ie(p,m),y=p&&Object.hasOwn(p,`team`)?p.team:m?.team??null,b=Oe(v,{streaming:g})?v:null,x=i?.sessionTreePulseSessionId===e?i.sessionTreePulseToken:0,S=i?.loadSessionMessages,C=i?.loadSessionThinkingLevel,E=(0,Q.useRef)(``);(0,Q.useEffect)(()=>{e&&S?.(e,{limit:Oo})},[S,e]),(0,Q.useEffect)(()=>{!e||!m||!C||h.thinkingStatus||(h.availableThinkingLevels||[]).length||E.current!==e&&(E.current=e,C(e))},[C,m,e,h.availableThinkingLevels,h.thinkingStatus,g]);let D=(0,Q.useMemo)(()=>({onLoadLatest:()=>i?.loadSessionMessages(e,{force:!0}),onLoadOlder:()=>i?.loadOlderMessages(e)??!1,onModelChange:t=>i?.switchSessionModel(e,t),onThinkingLevelChange:t=>i?.switchSessionThinkingLevel(e,t),onExecutionModeChange:t=>i?.switchSessionExecutionMode(e,t)??!1,onRunModeChange:t=>i?.switchSessionRunMode(e,t)??!1,onGoalPause:()=>i?.pauseGoal(e),onGoalBudgetChange:t=>i?.setGoalBudget(e,t),onCompact:()=>i?.compactSession(e),onApproval:(t,n)=>i?.resolveToolApproval(e,t,n),onAnswerQuestion:async(t,n)=>{await i?.answerQuestion(e,t,n)},onWorkspace:()=>{m&&i?.selectSessionWorkspace(m)},onRename:()=>{m&&i?.renameSession(m)},onBranchFromHere:(e,t)=>{if(m)return i?.branchFromEntry(m,e,t)},onCreateChildSession:e=>{if(m)return i?.createChildSession(m,e)},onRetryLastTurn:()=>i?.retryLastTurn(e),onTreeNavigated:()=>i?.reloadSessionBranch(e),onSend:(t,n,r,a,o,s,c)=>i?.sendPrompt(t,e,n,r,a,o,s,{onAccepted:c}),onQueue:(t,n,r,a)=>i?.queuePrompt(t,e,n,r,a)??!1,onWithdrawQueuedInput:t=>i?.withdrawQueuedInput(e,t)??Promise.resolve(null),onSendQueuedInputNow:t=>i?.sendQueuedInputNow(e,t)??Promise.resolve(!1),onAbort:()=>i?.abort(e)}),[i,e,m]);if(!i||!m)return(0,$.jsxs)(`div`,{className:`session-dock-missing flex h-full min-h-[180px] items-center justify-center gap-2 text-sm text-content-secondary`,children:[(0,$.jsx)(Dt,{size:16}),i?`Session unavailable`:`Loading session`]});let O=i.pendingAsset?.asset&&(!i.pendingAsset.targetSessionId||i.pendingAsset.targetSessionId===e)?i.pendingAsset.asset:null,k=h.historyWindow?.messages||h.messages||ko,A=h.loaded?`ready`:h.loading||!h.error?`loading`:`error`,j=!!(h.recovering&&!k.length&&!h.error),M=h.lifecycle?.phase===`completed`&&!h.error&&!h.runStopped,N=typeof h.runStartedAt==`string`?h.runStartedAt:null,P=h.goal??m.goal??null,F=_&&i.sessions.find(e=>e.id===_)?.name||``,I=_!==null&&!g&&!k.length?(0,$.jsx)(er,{compact:!0,className:`min-h-full`,title:a(`chat:focusSession.queuedTitle`),description:F?a(`chat:focusSession.queuedAfter`,{title:F}):a(`chat:focusSession.queuedAfterUnknown`),action:(0,$.jsx)(Y,{variant:`secondary`,size:`sm`,className:`pointer-coarse:min-h-11`,onClick:()=>void X.startQueuedSession(e).then(()=>i.loadSessionMessages(e,{force:!0})).catch(e=>i.notify(Z(e),`error`)),children:a(`chat:focusSession.startQueuedNow`)})}):void 0,L=(0,$.jsx)(Eo,{session:m,emptyState:I,shortcutEnabled:n,messages:k,transcriptLoadState:j?`loading`:A,hasNewer:!!h.historyWindow,messageStart:h.historyWindow?.messageStart??h.messageStart,hasOlder:h.historyWindow?.hasOlder??h.hasOlder,loadingOlder:h.loadingOlder,olderError:h.olderError,model:h.model||m.model||i.defaultModel,thinkingLevel:h.thinkingLevel||m.thinkingLevel||`medium`,availableThinkingLevels:h.availableThinkingLevels||ko,thinkingStatus:h.thinkingStatus||``,thinkingMessage:h.thinkingMessage||``,executionMode:h.executionMode||m.executionMode||`approval-required`,runMode:h.runMode||m.runMode||`plan`,goal:P,team:y,plan:b,currentActivity:h.currentActivity,activityFeed:h.activityFeed||ko,tools:h.tools||ko,thinkingText:h.thinkingText||``,queuedInputs:h.queuedInputs||ko,withdrawingInputIds:h.withdrawingInputIds||ko,compaction:h.compaction,contextUsage:h.contextUsage,sessionUsage:h.sessionUsage,sessionTreeRevision:h.sessionTreeRevision,sessionTreePulse:x,cwd:h.cwd||m.cwd,availableModels:i.availableModels,pendingRuntimeSelection:h.pendingRuntimeSelection,switchingModel:h.switchingModel,switchingThinking:h.switchingThinking,switchingCwd:h.switchingCwd,switchingPermission:h.switchingPermission,streaming:g,runStartedAt:h.runStartedAt,lastActivityAt:h.lastActivityAt,runFinishedAt:h.runFinishedAt,runStopped:h.runStopped,runNotice:h.runNotice,approvals:h.approvals||ko,questions:h.questions||ko,error:h.error||(i.activeId===e?i.globalError:``),pendingAsset:O,onAssetConsumed:i.onAssetConsumed,notify:i.notify,onOpenModelSettings:i.openModelSettings,onCompactionThresholdChange:i.setCompactionThreshold,...D});return(0,$.jsx)(`div`,{className:Yt(`session-dock-panel w-full h-full min-w-0 min-h-0 overflow-hidden [container-type:inline-size] bg-panel`,s&&`animate-[fade-in_var(--d-fast)_var(--ease-enter)]`),onFocusCapture:r,"data-session-panel":e,children:s?(0,$.jsx)(bi,{sessionId:e,messages:k,cwd:h.cwd||m.cwd||``,active:n,plan:b,goal:P,team:y,activity:h.activityFeed?.length?h.activityFeed:h.tools||ko,planTab:!!(b?.items?.length||P||y),streaming:g,completed:M,runStartedAt:N,requestConfirm:i.requestConfirm,children:L},e):(0,$.jsx)(ni,{messages:k,taskName:m.name||e,cwd:h.cwd||m.cwd||``,sessionId:e,panelId:t||`mobile-${e}`,active:n,mobile:i.mobileLayout,plan:b,streaming:g,completed:M,runStartedAt:N,plansAvailable:w(c,`plans`),requestConfirm:i.requestConfirm,children:L},e)})}function Fo({onNewSession:e,newSessionShortcut:t}){let{t:n}=o();return(0,$.jsxs)(`div`,{className:`flex h-full min-h-[180px] flex-col items-center justify-center gap-1.5 px-6 text-center`,children:[(0,$.jsx)($n,{className:`mb-1.5`}),(0,$.jsx)(`strong`,{className:`text-sm font-medium text-content`,children:n(`chat:chatDock.openAChatToBegin`)}),(0,$.jsx)(`span`,{className:`max-w-[320px] text-xs leading-relaxed text-content-muted`,children:n(`chat:chatDock.openAChatFromTheSessionListOrSplitItInAnyDirection`)}),e?(0,$.jsxs)(Y,{variant:`secondary`,className:`mt-3`,onClick:()=>void e(),children:[(0,$.jsx)(vt,{"aria-hidden":`true`}),n(`chat:chatDock.newChat`),t?(0,$.jsx)(Zt,{"aria-hidden":`true`,className:`ml-1.5 pointer-coarse:hidden`,children:t.split(/\+(?=.)/).map(e=>(0,$.jsx)(Qt,{children:e},e))}):null]}):null]})}var Io=1e4;function Lo(e,t){return{defaultModel:e.model?`${e.provider}/${e.model}`:t(`chat:chatPage.noModelConfigured`),availableModels:e.providers.flatMap(e=>e.configured&&e.enabled?e.models.filter(e=>e.kind===`chat`).map(t=>({key:`${e.id}/${t.id}`,provider:e.id,modelId:t.id,label:t.name||t.id,providerName:e.name||e.id})):[])}}function Ro(e){let t=e.getQueryData(m)?.sessions,n=e.getQueryData([`config`]);return Array.isArray(t)&&t.length&&n?{sessions:t,config:n}:null}function zo({notify:e}){let{t:r}=o(),i=f(),[a]=(0,Q.useState)(()=>Ro(i)),[s,c]=(0,Q.useState)(()=>a?.sessions??[]),[l,p]=(0,Q.useState)(()=>n.getItem(u.activeSession)||``),[h,g]=(0,Q.useState)({}),[_,v]=(0,Q.useState)(!a),[y,b]=(0,Q.useState)(``),[x,S]=(0,Q.useState)(()=>a?Lo(a.config,r).defaultModel:r(`chat:chatPage.waitingForConfiguration`)),[C,w]=(0,Q.useState)(()=>a?Lo(a.config,r).availableModels:[]),T=(0,Q.useRef)(s),E=(0,Q.useRef)(h),D=(0,Q.useRef)(new Map),O=(0,Q.useRef)(null),k=(0,Q.useRef)(new Map),A=(0,Q.useRef)(new Set),j=(0,Q.useRef)(0),M=(0,Q.useRef)(0),[N]=(0,Q.useState)(L),R=(0,Q.useCallback)(e=>{let t=T.current,n=typeof e==`function`?e(t):e;if(n===t)return n;let r=i.setQueryData(m,e=>e?{...e,sessions:n}:void 0)?.sessions??n;return r!==T.current&&(T.current=r,c(r)),r},[i]),B=(0,Q.useCallback)(()=>{if(j.current)return;let e=i.getQueryData(m)?.sessions;if(!(!Array.isArray(e)||e===T.current)){if(e.length)M.current=0;else if(T.current.length&&Date.now()<M.current)return;T.current=e,c(e)}},[i]);(0,Q.useEffect)(()=>{B();let e=d(m);return i.getQueryCache().subscribe(t=>{t.type===`updated`&&t.query.queryHash===e&&B()})},[i,B]),(0,Q.useEffect)(()=>$t(window,e=>{N.record(e),R(t=>F(t,e))}),[N,R]),(0,Q.useEffect)(()=>en(window,e=>{R(t=>z(t,e))}),[R]);let V=(0,Q.useCallback)(e=>{let t=A.current.size?Object.fromEntries(Object.entries(e).filter(([e])=>!A.current.has(e))):e,n=E.current;E.current=t,g(t);let r=Object.keys(t).filter(e=>t[e].streaming!==n[e]?.streaming);if(r.length){let e=new Set(r);i.setQueryData(m,n=>n&&{...n,sessions:n.sessions.map(n=>e.has(n.id)?{...n,streaming:t[n.id].streaming}:n)})}let a=new Set([...Object.keys(n),...Object.keys(t)]);for(let e of a){if(n[e]===t[e])continue;let r=D.current.get(e);if(r)for(let e of[...r])e()}},[i]);(0,Q.useEffect)(()=>dn(window,({deletedIds:e})=>{N.remove(e);let t=new Set(e),n=R(e=>e.filter(e=>!t.has(e.id)));p(e=>t.has(e)?n[0]?.id||``:e);let r=E.current;e.some(e=>e in r)&&V(Object.fromEntries(Object.entries(r).filter(([e])=>!t.has(e))))}),[V,N,R]);let H=(0,Q.useCallback)((e,t)=>{let n=D.current.get(e)||new Set;return n.add(t),D.current.set(e,n),()=>{n.delete(t),n.size||D.current.delete(e)}},[]),U=(0,Q.useCallback)(e=>E.current[e]||Ve,[]),ee=(0,Q.useCallback)((e,t)=>{if(!e||A.current.has(e))return;let n=E.current,r=n[e]||Ve,i=Me(r,t);i!==r&&V({...n,[e]:i})},[V]),te=(0,Q.useCallback)((e,{panelOpen:t=!1,localStreamOwned:n=!1}={})=>{if(!e||t||n||k.current.has(e))return!1;let r=E.current,i=r[e];if(!i||Re(i))return!1;let a={...r};return delete a[e],V(a),!0},[V]),ne=(0,Q.useCallback)(e=>{if(!e)return;A.current.add(e);let t={...E.current};delete t[e],V(t)},[V]),re=(0,Q.useCallback)(e=>{if(A.current.has(e))return()=>{};let t=k.current;t.set(e,(t.get(e)??0)+1);let n=!1;return()=>{if(n)return;n=!0;let r=t.get(e)??0;r>1?t.set(e,r-1):(t.delete(e),te(e))}},[te]),ie=(0,Q.useCallback)(async(e,{preserveExistingOnEmpty:t=!1}={})=>{let n=N.getRevision();t&&(j.current+=1);let r;try{let e=await X.listSessions(),i=!!(t&&!e.sessions.length&&T.current.length);i&&(M.current=Date.now()+Io),r=i?T.current:N.reconcile(e.sessions,n)}finally{t&&(--j.current,B())}return R(r),p(e||(e=>r.some(t=>t.id===e)?e:r[0]?.id||``)),un(),r},[B,N,R]),ae=(0,Q.useCallback)(e=>{p(e.id),R(t=>P(t,[e])),ee(e.id,{messages:[],tools:[],approvals:[],queuedInputs:[],permissionMode:e.permissionMode||`ask`,executionMode:e.executionMode||`approval-required`,runMode:e.runMode||`plan`,goal:e.goal||null,plan:In(e,null),contextUsage:e.contextUsage||null,sessionUsage:e.sessionUsage||null,compaction:null,streaming:!1,error:``,loaded:!0,pageSize:40,messageStart:0,hasOlder:!1,olderCursor:null,runStartedAt:null,lastActivityAt:null,runFinishedAt:null,runStopped:!1,runNotice:``})},[ee,R]),oe=(0,Q.useCallback)((t=``,{inheritRecentCwd:n=!0}={})=>{if(O.current)return O.current;let i=(async()=>{try{b(``);let i=await X.createSession(r(`chat:chatPage.newChat`),I(t,T.current,n));ae(i);try{await ie(i.id)}catch(e){b(r(`chat:chatPage.theChatWasCreatedButTheListCouldNotBeRefreshedError`,{error:Z(e)}))}return e(r(`chat:chatPage.newChatCreated`)),i.id}catch(e){return b(Z(e)),``}})();return O.current=i,i.finally(()=>{O.current===i&&(O.current=null)}),i},[ae,e,ie,r]);(0,Q.useEffect)(()=>{let i=!0,o=N.getRevision();return(a?Promise.resolve([{sessions:a.sessions},a.config]):Promise.all([X.listSessions({refresh:!1}),X.getConfig()])).then(async([a,s])=>{if(!i)return;let c=Lo(s,r);S(c.defaultModel),w(c.availableModels);let l=a.sessions;if(!l.length&&(O.current||Object.keys(E.current).length)){if(await O.current,!i)return;o=N.getRevision(),l=(await X.listSessions()).sessions}if(!i)return;l=N.reconcile(l,o),R(e=>P(e,l));for(let e of l)ee(e.id,{team:e.team||null,agents:e.agents||[],plan:In(e,null),...e.streaming?{streaming:!0,recovering:!0,loaded:!1,error:``}:{}});let d=n.getItem(u.activeSession),f=new Set([...l.map(e=>e.id),...Object.keys(E.current)]);if(p(e=>f.has(e)?e:d&&f.has(d)?d:l[0]?.id||``),typeof window<`u`&&window.__PISPER_MOBILE_APP__)try{let{consumeRemoteFallbackNotice:n}=await t(async()=>{let{consumeRemoteFallbackNotice:e}=await import(`./mobile-remote-fallback-C2Q0wAa6.js`);return{consumeRemoteFallbackNotice:e}},__vite__mapDeps([122,8]));n()&&e(r(`chat:chatPage.remoteUnavailableSwitchedToLocal`))}catch{}}).catch(async e=>{if(i){if(typeof window<`u`&&window.__PISPER_MOBILE_APP__)try{let{fallbackRemoteToLocalAfterFailure:n}=await t(async()=>{let{fallbackRemoteToLocalAfterFailure:e}=await import(`./mobile-remote-fallback-C2Q0wAa6.js`);return{fallbackRemoteToLocalAfterFailure:e}},__vite__mapDeps([122,8]));if(await n(e))return}catch{}i&&b(Z(e))}}).finally(()=>i&&v(!1)),()=>{i=!1}},[e,a,r,N,ee,R]),(0,Q.useEffect)(()=>{l?n.setItem(u.activeSession,l):n.removeItem(u.activeSession)},[l]);let W=s.find(e=>e.id===l),se=(h[l]||Ve).model||W?.model||``;return(0,Q.useEffect)(()=>{nn(l,se)},[l,se]),(0,Q.useEffect)(()=>(document.title=W?.name?`${W.name} · ${jt}`:jt,()=>{document.title=jt}),[W?.name]),{sessions:s,sessionsRef:T,activeId:l,setActiveId:p,sessionStates:h,sessionStatesRef:E,loading:_,globalError:y,setGlobalError:b,defaultModel:x,availableModels:C,updateSessions:R,replaceSessionStates:V,updateSessionState:ee,releaseSessionState:te,retainSessionState:re,discardSessionState:ne,subscribeSessionState:H,getSessionState:U,refreshSessions:ie,adoptCreatedSession:ae,createSessionRecord:oe}}function Bo({setActiveId:e,loadSessionMessages:t,openRoutedSession:n}){let r=(0,Q.useRef)(n);r.current=n;let i=(0,Q.useCallback)(t=>(t&&r.current?r.current(t):e(t),!0),[e]);return(0,Q.useEffect)(()=>{let e=e=>{let n=e.detail,r=n?.sessionId||n?.id;r&&(localStorage.removeItem(u.sessionOpenRequest),i(r),n?.targetEntryId&&t(r,{force:!0,limit:40}))};return window.addEventListener(on,e),()=>window.removeEventListener(on,e)},[t,i]),(0,Q.useEffect)(()=>dn(window,({deletedIds:e})=>{for(let t of e)it.getState().forget(t),de(t)}),[]),{openSession:i}}function Vo(e){return!!e?.agents?.some(e=>[`queued`,`starting`,`running`].includes(String(e.status)))}function Ho(e,{localStreamOwned:t=!1}={}){return!e||t?!1:!!(e.recovering||e.streaming||e.approvals?.length||Vo(e))}function Uo(e,t){return Object.hasOwn(e,`team`)?e.team??null:t??null}function Wo(e,t){let n=new Map(e.map(e=>[e.id,e]));return t.map(e=>{let t=n.get(e.id);return t&&JSON.stringify(t)===JSON.stringify(e)?t:e})}function Go(e,t){let n=Number(t.pageInfo?.start)||0,r=Number.isInteger(e.messageStart)?e.messageStart:null,i=r!=null&&r<=n,a=i?Math.max(0,n-r):0,o=i?r:n,s=i?[...e.messages.slice(0,a),...Wo(e.messages,t.messages)]:Wo(e.messages,t.messages),c=Math.max(0,s.length-200);return c&&(s=s.slice(c),o+=c),{messages:s,messageStart:o,hasNewer:!1,hasOlder:o>0,olderCursor:o>0?String(o):null}}function Ko(e,t){let n=new Set(e.messages.map(e=>e.id)),r=[...t.messages.filter(e=>!n.has(e.id)),...e.messages],i=r.slice(0,200);return{messages:i,messageStart:t.pageInfo.start,hasOlder:t.pageInfo.hasMore,olderCursor:t.pageInfo.nextCursor,hasNewer:!!(e.hasNewer||r.length>i.length)}}function qo(e,t){let n=Ko(e.historyWindow?{...e,...e.historyWindow}:e,t);return e.historyWindow||n.hasNewer?{...e,historyWindow:n}:{...e,...n}}function Jo(e){return{...e,historyWindow:null}}function Yo(e,t,n){if(t.streaming||!e.error&&!t.error)return{page:n,error:t.error||``};let r=e.messages.at(-2),i=e.messages.at(-1);if(r?.role!==`user`||!/^user-\d+$/.test(r.id)||i?.role!==`agent`||!/^agent-\d+$/.test(i.id))return{page:n,error:t.error||``};let a=Date.parse(e.runStartedAt||``),o=n.messages.findIndex(e=>{if(e.id===r.id)return!0;if(e.role!==`user`||!Number.isFinite(a))return!1;let t=new Date(e.timestamp).getTime();return Number.isFinite(t)&&t>=a});if(o>=0&&n.messages.slice(o+1).some(e=>e.role===`agent`))return{page:n,error:t.error||``};let s=[...n.messages,...o<0?[r]:[],{...i,streaming:!1,error:t.error||e.error||i.error}],c=Math.max(0,s.length-200),l=n.messageStart+c;return{page:{...n,messages:c?s.slice(c):s,messageStart:l,hasOlder:l>0,olderCursor:l>0?String(l):null},error:t.error||e.error||``}}function Xo(e,t,n=new Date().toISOString(),r=e.runtimeSelectionRevision||0){let i=r!==(e.runtimeSelectionRevision||0),a=!!(e.switchingModel||e.switchingThinking||i),o=t.finishedAt||e.runFinishedAt||n,s=Yo(e,t,Go(e,t));return{...Fe({...e,...s.page},t),tools:t.streaming?t.tools||[]:Pn(t.tools||[],{finishedAt:o,error:t.error||``}),streaming:t.streaming,recovering:t.streaming,runStartedAt:t.startedAt||e.runStartedAt||null,lastActivityAt:t.lastActivityAt||e.lastActivityAt||t.startedAt||null,runFinishedAt:t.streaming?null:o,runNotice:t.streaming&&e.runNotice||``,loaded:!0,loading:!1,error:a?e.error:s.error,model:a?e.model:t.model||e.model,cwd:t.cwd||e.cwd,permissionMode:t.permissionMode||e.permissionMode,executionMode:t.executionMode||e.executionMode,runMode:t.runMode||e.runMode,goal:t.goal??e.goal??null,team:Uo(t,e.team),plan:In(t,e.plan??null),contextUsage:a?e.contextUsage:t.contextUsage??e.contextUsage??null,sessionUsage:t.sessionUsage??e.sessionUsage??null,compaction:t.compaction??e.compaction??null,approvals:t.approvals||[],questions:Array.isArray(t.questions)?t.questions:e.questions||[],agents:t.agents||[],currentActivity:t.streaming?t.currentActivity||e.currentActivity||null:t.currentActivity?.type===`agent`?t.currentActivity:null,lifecycle:t.lifecycle??e.lifecycle??null,sessionTreeRevision:Number(t.sessionTreeRevision??e.sessionTreeRevision??0),activityFeed:t.streaming?t.activityFeed||e.activityFeed||[]:(t.activityFeed||[]).filter(e=>e.type===`agent`),thinkingText:t.streaming?t.thinkingText??e.thinkingText??``:``,...t.streaming?{}:{hadQueuedInput:!1}}}function Zo(e,{catalogStreaming:t,localStreamOwned:n}){return!e?.loaded||e.loading||e.streaming||e.recovering||n?!1:t||!e.messages?.length}function Qo({sessionStates:e,sessionStatesRef:t,localStreamSessionsRef:n,streamGenerationRef:r,updateSessionState:i,updateSessions:a,pollOnly:o}){let s=(0,Q.useRef)(new Set),c=(0,Q.useRef)({timer:null,activeSessions:new Set}),l=(0,Q.useRef)({timer:null,ids:new Set}),u=(0,Q.useCallback)(async(e,{force:o=!1}={})=>{if(!e||!o&&n.current.has(e)||s.current.has(e))return;s.current.add(e);let c=t.current[e]?.runtimeSelectionRevision||0;try{let s=await X.getLiveSession(e);if(!o&&n.current.has(e))return;if(o&&n.current.has(e)){let t=r.current.get(e)||0;r.current.set(e,t+1),n.current.delete(e)}po(e,s),i(e,e=>Xo(e,s,void 0,c)),a(n=>n.map(n=>n.id===e?{...n,streaming:s.streaming,model:t.current[e]?.model||s.model||n.model,cwd:s.cwd||n.cwd,permissionMode:s.permissionMode||n.permissionMode,executionMode:s.executionMode||n.executionMode,runMode:s.runMode||n.runMode,goal:s.goal??n.goal??null,team:Uo(s,n.team),plan:In(s,n.plan??null)}:n))}catch(t){n.current.has(e)||i(e,{recovering:!1,loading:!1,error:Z(t)})}finally{s.current.delete(e)}},[n,t,r,i,a]),d=(0,Q.useCallback)(async(e,{force:r=!1,limit:o=40}={})=>{if(!e)return;let s=t.current[e];if(r&&s?.historyWindow){if(i(e,Jo),n.current.has(e))return;if(s.streaming||s.recovering){await u(e,{force:r});return}}if(s?.recovering){await u(e,{force:r});return}if(!(!r&&(s?.loading||s?.streaming||s?.loaded&&s.messages?.length&&(s.pageSize||0)>=o))){i(e,{loading:!0});try{let r=await X.getMessages(e,{limit:o}),s=r.streaming===!0&&!n.current.has(e),c=!1;i(e,t=>t.streaming&&!t.loaded&&!t.messages?.length&&!n.current.has(e)?(c=!0,{...t,loading:!1,pageSize:Math.max(t.pageSize||0,o)}):t.streaming?{...t,loaded:!0,loading:!1,pageSize:Math.max(t.pageSize||0,o)}:(s&&(c=!0),{...t,...Go(t,r),...s?{streaming:!0,recovering:!0}:{},model:t.model||r.model||void 0,contextUsage:r.contextUsage??t.contextUsage??null,sessionUsage:r.sessionUsage??t.sessionUsage??null,loaded:!0,loading:!1,pageSize:Math.max(t.pageSize||0,o),error:``,olderError:``})),c&&u(e);let l=t.current[e]?.model||(typeof r.model==`string`?r.model:``);l&&a(t=>t.map(t=>t.id===e&&t.model!==l?{...t,model:l}:t))}catch(t){i(e,{loading:!1,error:Z(t)})}}},[n,t,u,i,a]),f=(0,Q.useCallback)(async e=>{let n=t.current[e],r=n?.historyWindow?{...n,...n.historyWindow}:n;if(!e||!r?.hasOlder||!r.olderCursor||n.loadingOlder)return!1;let a=n.historyWindow??null;i(e,{loadingOlder:!0,olderError:``});try{let t=await X.getMessages(e,{limit:40,before:r.olderCursor});return i(e,e=>{let n=e.historyWindow||e;return(e.historyWindow??null)!==a||n.olderCursor!==r.olderCursor?{...e,loadingOlder:!1}:{...qo(e,t),loadingOlder:!1,olderError:``}}),t.messages.length>0}catch(t){return i(e,{loadingOlder:!1,olderError:Z(t)}),!1}},[t,i]),p=(0,Q.useCallback)(()=>{c.current.timer&&window.clearInterval(c.current.timer),c.current.timer=null,c.current.activeSessions.clear()},[]),m=(0,Q.useCallback)(()=>{c.current.timer||!c.current.activeSessions.size||(c.current.timer=window.setInterval(()=>{if(typeof document<`u`&&document.hidden)return;let e=Array.from(c.current.activeSessions).map(async e=>{let r=t.current[e];if(!Ho(r,{localStreamOwned:n.current.has(e)})){c.current.activeSessions.delete(e);return}await u(e)});Promise.allSettled(e).then(()=>{c.current.activeSessions.size||p()})},2e3))},[n,t,p,u]);return(0,Q.useEffect)(()=>{let t=new Set(Object.keys(e));for(let e of c.current.activeSessions)t.has(e)||c.current.activeSessions.delete(e);let r=[];for(let[t,i]of Object.entries(e)){let e=(o===void 0||t===o)&&Ho(i,{localStreamOwned:n.current.has(t)});e&&!c.current.activeSessions.has(t)&&r.push(t),e?c.current.activeSessions.add(t):c.current.activeSessions.delete(t)}if(c.current.activeSessions.size?m():p(),!r.length)return;let i=l.current;for(let e of r)i.ids.add(e);i.timer===null&&(i.timer=window.setTimeout(()=>{i.timer=null;let e=Array.from(i.ids);if(i.ids.clear(),!(typeof document<`u`&&document.hidden))for(let t of e)c.current.activeSessions.has(t)&&u(t)},0))},[m,n,o,e,p,u]),(0,Q.useEffect)(()=>{let e=l.current;return()=>{p(),e.timer!==null&&window.clearTimeout(e.timer),e.timer=null,e.ids.clear()}},[p]),{syncLiveSession:u,loadSessionMessages:d,loadOlderMessages:f,liveSyncInFlightRef:s}}function $o(e,t){let n=null,r=!1,i=typeof document<`u`,a=()=>!i||document.visibilityState===`visible`,o=()=>{r&&=(document.removeEventListener(`visibilitychange`,c),!1)},s=()=>{n=setTimeout(()=>{n=null,e()},t)},c=()=>{!a()||n!=null||(o(),s())},l=()=>{!i||r||(document.addEventListener(`visibilitychange`,c),r=!0)};return{schedule(){n!=null||r||(a()?s():l())},flushNow(){n!=null&&(clearTimeout(n),n=null),o(),e()},cancel(){n!=null&&clearTimeout(n),n=null,o()},get active(){return n!=null||r}}}function es(e,{intervalMs:t=48}={}){let n=null,r=null,i=$o(()=>{if(n==null)return;let t=n,i=r;n=null,r=null,e(t,i)},t);return{push(e,t=new Date().toISOString()){n=e,r=t,i.schedule()},flush(){i.flushNow()},cancel(){i.cancel(),n=null,r=null}}}function ts(e,{intervalMs:t=80}={}){let n=new Map,r=null,i=$o(()=>{if(!n.size)return;let t=n,i=r;n=new Map,r=null,e(t,i)},t);return{push(e,t,a=new Date().toISOString()){e&&(n.set(e,{...n.get(e)||{},...t}),r=a,i.schedule())},flush(){i.flushNow()},cancel(){i.cancel(),n=new Map,r=null}}}function ns(e){return e>=55296&&e<=56319}function rs(e,t){let n=Math.min(e.length,t.length),r=0;for(;r<n&&e.charCodeAt(r)===t.charCodeAt(r);)r+=1;return r>0&&ns(e.charCodeAt(r-1))?r-1:r}var is=50;function as(e,{minCharsPerSecond:t=36,maxCharsPerSecond:n=1200,catchUpRemaining:r=160,requestFrame:i,cancelFrame:a,isCurrent:o=()=>!0,now:s=()=>typeof performance<`u`&&performance.now?performance.now():Date.now()}={}){let c=!i&&typeof globalThis.requestAnimationFrame==`function`&&typeof globalThis.cancelAnimationFrame==`function`,l=i||(c?globalThis.requestAnimationFrame.bind(globalThis):e=>setTimeout(()=>e(s()),Math.ceil(is))),u=a||(c?globalThis.cancelAnimationFrame.bind(globalThis):clearTimeout),d=typeof document<`u`?document:null,f=()=>!d||d.visibilityState===`visible`,p=``,m=``,h=null,g=null,_=0,v=null,y=0,b=!1,x=new Set,S=e=>{let t=[...x];x.clear();for(let n of t)n(e)},C=()=>{m.length,e(m,h)},w=()=>{b=!0,g!=null&&u(g),d?.removeEventListener(`visibilitychange`,O),g=null,y=0,S(!1)},T=()=>{if(!b){if(!o()){w();return}g!=null&&u(g),g=null,y=0,m=p,v=s(),C(),m===p&&S(!0)}},E=e=>{if(g=null,b)return;if(!o()){w();return}if(!f()){x.size&&T();return}if(p===m){S(!0);return}let i=e-_;if(i+.001<is||v!=null&&e-v+.001<is){g=l(E);return}_=e;let a=m;p.startsWith(m)||(m=p.slice(0,rs(m,p)),y=0);let s=p.length-m.length;if(s>=480)m=p,y=0;else{let e=Math.max(0,Math.min(n,t+s*(s>=r?10:4))),a=y+e*Math.min(.08,Math.max(0,i/1e3)),o=Math.floor(a+1e-9);y=Math.max(0,a-o);let c=m.length;for(let e=0;e<o&&c<p.length;e+=1){let e=p.codePointAt(c)??0;if(ns(e)&&c+1===p.length&&!x.size)break;c+=e>65535?2:1}m=p.slice(0,c)}m!==a&&(v=e,C()),m===p&&S(!0);let c=!x.size&&m.length+1===p.length&&ns(p.charCodeAt(m.length));!b&&g==null&&m!==p&&!c&&f()?g=l(E):g??(y=0)},D=()=>{b||g!=null||!f()||p===m||(_=s(),g=l(E))},O=()=>{f()?D():x.size?T():(g!=null&&u(g),g=null,y=0)};return d?.addEventListener(`visibilitychange`,O),{setTarget(e,t=new Date().toISOString()){b||(p=String(e||``),h=t,D())},drain(){return b||!o()?(w(),Promise.resolve(!1)):m===p?Promise.resolve(!0):new Promise(e=>{x.add(e),f()?D():T()})},flush:T,cancel:w,getShown:()=>m,getTarget:()=>p}}var os=new Set(`contacts.search,camera.capture,location.current,device.info,device.capabilities,device.battery,device.storage,device.memory,device.network,device.display,device.locale,device.status,device.clipboard.get,device.clipboard.set,device.vibrate,device.flashlight,device.notify,photos.list,photos.create_album,photos.add_to_album,photos.delete,apps.open_url,apps.open_map,apps.open_system_settings,apps.open_dialer,apps.compose_sms,apps.open_app,apps.share_text`.split(`,`)),ss=new Map,cs=[];function ls(e,t){let n=window.__TAURI__?.core?.invoke??window.__TAURI_INTERNALS__?.invoke;return n?n(e,t):Promise.reject(Error(`native bridge unavailable`))}async function us(e,t){let n=String(t.id||``),r=String(t.operation||``);if(!n||!os.has(r))return;let i=Date.parse(String(t.expiresAt||``));if(Number.isFinite(i)&&i<=Date.now()){await X.resolveMobileOperation(e,n,{ok:!1,error:`移动设备操作请求已过期。`});return}try{let i=await ls(`mobile_execute_device_operation`,{request:{id:n,operation:r,parameters:t.parameters&&typeof t.parameters==`object`?t.parameters:void 0}});await X.resolveMobileOperation(e,n,{ok:!0,result:i})}catch(t){await X.resolveMobileOperation(e,n,{ok:!1,error:t instanceof Error?t.message:String(t)})}finally{cs.push(n),cs.length>128&&cs.splice(0,cs.length-128)}}function ds(e){let t=String(e.id||``);!t||cs.includes(t)||(cs.push(t),cs.length>128&&cs.splice(0,cs.length-128))}function fs(e,t){let n=String(t.id||``);if(!n||cs.includes(n)||ss.has(n))return;let r=us(e,t).catch(()=>{}).finally(()=>ss.delete(n));ss.set(n,r)}function ps(e){let t=String(e.path||``).trim().replaceAll(`\\`,`/`).toLowerCase();return t?`path:${t}`:`id:${e.id}`}function ms(e,t){return Object.hasOwn(e,`team`)?e.team??null:t??null}function hs(e,{agentId:t,responseText:n,data:r,finishedAt:i,error:a,preserveDisplayedText:o}){let s=!!a,c=r.lifecycle||e.lifecycle||{},l=Fe(e,r);return{...l,streaming:!1,runFinishedAt:i,lastActivityAt:i,...s?{}:{runNotice:``},currentActivity:r.currentActivity?.type===`agent`?r.currentActivity:null,lifecycle:{...c,phase:s?`failed`:`completed`,event:s?`runtime_error`:`runtime_done`,updatedAt:i},sessionTreeRevision:Number(r.sessionTreeRevision??e.sessionTreeRevision??0),activityFeed:(r.activityFeed||[]).filter(e=>e.type===`agent`),goal:s?e.goal:r.goal??e.goal??null,plan:s?e.plan:In(r,e.plan),team:ms(r,e.team),agents:r.agents||e.agents||[],contextUsage:r.contextUsage??e.contextUsage??null,sessionUsage:r.sessionUsage??e.sessionUsage??null,compaction:r.compaction??e.compaction??null,approvals:s?[]:r.approvals||[],tools:Pn(r.tools||e.tools,{finishedAt:i,...a?{error:a}:{}}),messages:l.messages.map(e=>e.id===t?{...e,text:o?e.text:typeof r.text==`string`?r.text:n||e.text,streaming:o?e.text!==n:!1,...s?{}:r.turnBoundaryEntryId?{turnBoundaryEntryId:String(r.turnBoundaryEntryId)}:{},...s?{}:r.assets?.length?{attachments:r.assets}:{}}:e)}}function gs({sessionId:e,agentId:t,sessionStatesRef:n,updateSessionState:r,updateSessions:i,typewriter:a,thinkingScheduler:o,toolScheduler:s,t:c}){let l={responseText:``,responseRenderingStreaming:!0,thinkingText:``,thinkingPrefix:``,queuedDuringRun:!1,pendingInputIds:[]},u=e=>(Array.isArray(e)?e:[]).map(e=>typeof e?.id==`string`?e.id:``).filter(Boolean),d=(i,o)=>{let s=u(i.queuedInputs),c=new Set([...n.current[e]?.withdrawnInputIds||[],...typeof i.removedInputId==`string`?[i.removedInputId]:[]]),d=l.pendingInputIds.filter(e=>!s.includes(e)&&!c.has(e));if(l.pendingInputIds=s,!d.length)return;let f=new Set(u((i.sendNowInputIds||[]).map(e=>({id:e})))),p=l.responseText;l.responseText=``,r(e,e=>je(e,{agentId:t,deliveredIds:d,frozenText:p,interrupted:d.some(e=>f.has(e))})),p&&(a.setTarget(``,o),a.flush())},f=t=>{i(n=>n.map(n=>n.id===e?t(n):n))},p=(r,i)=>{let a=n.current[e]?.messages??[],o=a.findIndex(e=>e.id===t),s=a.slice(0,Math.max(0,o)).filter(e=>e.role===`user`).at(-1)?.text;fo({sessionId:e,messageId:t,prompt:s,text:l.responseText,runId:l.runId,startedAt:l.startedAt,status:r,error:i})};return{dispatch:(i,m)=>{let h=new Date().toISOString();if(i===`run`)l.runId=typeof m.runId==`string`?m.runId:void 0,p(`started`);else if(i===`resync_required`)p(`recovering`);else if(i===`meta`)l.startedAt=typeof m.startedAt==`string`?m.startedAt:void 0,Array.isArray(m.queuedInputs)&&(l.pendingInputIds=u(m.queuedInputs)),p(`started`),r(e,e=>({...Fe(e,m),model:m.model||e.model,thinkingLevel:m.thinkingLevel||e.thinkingLevel,cwd:m.cwd,permissionMode:m.permissionMode,executionMode:m.executionMode,runMode:m.runMode||e.runMode,goal:m.goal??null,plan:In(m,e.plan),team:ms(m,e.team),agents:m.agents||e.agents||[],currentActivity:m.currentActivity||e.currentActivity||null,activityFeed:m.activityFeed||e.activityFeed||[],lifecycle:m.lifecycle??e.lifecycle??null,sessionTreeRevision:Number(m.sessionTreeRevision??e.sessionTreeRevision??0),thinkingText:m.thinkingText??e.thinkingText??``,contextUsage:m.contextUsage??e.contextUsage??null,sessionUsage:m.sessionUsage??e.sessionUsage??null,runStartedAt:m.startedAt||e.runStartedAt,lastActivityAt:m.lastActivityAt||h})),(m.model||m.thinkingLevel||m.cwd||m.permissionMode||m.executionMode||m.goal!==void 0||m.team!==void 0||Rn(m)!==void 0)&&f(e=>({...e,model:m.model||e.model,thinkingLevel:m.thinkingLevel||e.thinkingLevel,cwd:m.cwd||e.cwd,permissionMode:m.permissionMode||e.permissionMode,executionMode:m.executionMode||e.executionMode,runMode:m.runMode||e.runMode,goal:m.goal??e.goal??null,team:ms(m,e.team),plan:In(m,e.plan??null)}));else if(i===`queue_update`)m.queuedInputs?.length&&(l.queuedDuringRun=!0),r(e,e=>Fe(e,{...m,queuedInputs:m.queuedInputs||[]})),d(m,h);else if(i===`agent_update`)r(e,e=>{let t=m.currentActivity||(m.agent?{type:`agent`,agent:m.agent,updatedAt:m.agent.lastActivityAt||h}:null);return{...e,team:ms(m,e.team),agents:m.agents||[],currentActivity:e.currentActivity?.type===`tool`?e.currentActivity:t||e.currentActivity,activityFeed:t?Ln(e.activityFeed,t):e.activityFeed,lastActivityAt:m.agent?.lastActivityAt||h}}),Object.hasOwn(m,`team`)&&f(e=>({...e,team:ms(m,e.team)}));else if(i===`agent_lifecycle`)r(e,e=>{let t=m.lifecycle||e.lifecycle,n=t?.event===`auto_retry_end`,r=t?.event===`turn_start`&&(e.lifecycle?.phase===`retrying`||e.currentActivity?.type===`retry`);return{...e,lifecycle:t,currentActivity:m.currentActivity||e.currentActivity,lastActivityAt:t?.updatedAt||h,runNotice:n&&t?.retry?.success?``:n&&t?.retry?.message?t.retry.message:r?``:e.runNotice}});else if(i===`session_tree_changed`)r(e,{sessionTreeRevision:Number(m.revision||0),lastActivityAt:h});else if(i===`thinking_level_changed`)r(e,{thinkingLevel:m.level,lastActivityAt:h}),f(e=>({...e,thinkingLevel:m.level}));else if(i===`context_usage`)r(e,{contextUsage:m});else if(i===`session_usage`)r(e,{sessionUsage:m});else if(i===`compaction_start`)s.flush(),r(e,e=>{let t={type:`compaction`,compaction:m,updatedAt:m.startedAt||h};return{...e,compaction:m,currentActivity:t,activityFeed:Ln(e.activityFeed,t),lastActivityAt:m.startedAt||h}});else if(i===`compaction_end`)r(e,e=>{let t={type:`model`,stage:`processing_result`,updatedAt:m.finishedAt||h};return{...e,compaction:m,currentActivity:t,activityFeed:Ln(e.activityFeed,t),lastActivityAt:m.finishedAt||h}});else if(i===`text_patch`)l.responseRenderingStreaming=!0,l.responseText=b(l.responseText,m),p(`streaming`),a.setTarget(l.responseText,h);else if(i===`text_delta`)l.responseText.length,l.responseRenderingStreaming=!0,l.responseText+=m.delta||``,p(`streaming`),a.setTarget(l.responseText,h);else if(i===`text_end`)l.responseText.length,typeof m.text==`string`&&(l.responseText=m.text),l.responseRenderingStreaming=!1,p(`streaming`),a.setTarget(l.responseText,m.updatedAt||h),r(e,e=>({...e,messages:e.messages.map(e=>e.id===t?{...e,streaming:e.text!==l.responseText}:e)}));else if(i===`thinking_reset`)l.thinkingText=``,l.thinkingPrefix=String(m.thinkingText||``).slice(-6e3),o.cancel(),r(e,{thinkingText:l.thinkingPrefix,currentActivity:{type:`model`,stage:`thinking`,updatedAt:m.updatedAt||h},lastActivityAt:m.updatedAt||h});else if(i===`thinking_patch`){l.thinkingText=b(l.thinkingText,m).slice(-6e3);let e=[l.thinkingPrefix,l.thinkingText].filter(Boolean).join(`
|
|
552
552
|
|
|
553
|
-
`);o.push(e.slice(-6e3),h)}else if(i===`tool_start`)o.flush(),s.flush(),r(e,e=>{let t={type:`tool`,id:m.id,name:m.name,args:m.args,status:`running`,startedAt:m.startedAt||h,updatedAt:h,...m.output===void 0?{}:{output:m.output}};return{...e,lastActivityAt:h,runNotice:``,tools:In(e.tools,t),currentActivity:t,activityFeed:In(e.activityFeed,t)}});else if(i===`tool_update`)s.push(m.id,{message:m.message||``,updatedAt:m.updatedAt||h,...m.output===void 0?{}:{output:m.output},...m.agent?{agent:m.agent}:{},...m.previewImage?{previewImage:m.previewImage}:{},...m.target?{target:m.target}:{}},m.updatedAt||h);else if(i===`tool_end`)s.flush(),r(e,e=>{let t=e.tools.find(e=>e.id===m.id),n=m.finishedAt||h,r=String(t?.name||``),i=(Pn(r)||[`spawn_agent`,`list_agents`,`send_message`,`followup_task`,`wait_agent`,`interrupt_agent`].includes(r))&&[`plan`,`agent`].includes(e.currentActivity?.type),a={...t||{},type:`tool`,status:m.error?`error`:`done`,message:m.message||t?.message||``,updatedAt:n,finishedAt:n,...m.output===void 0?{}:{output:m.output},...m.previewImage?{previewImage:m.previewImage}:{},...m.target?{target:m.target}:{}},o=m.agent?{type:`agent`,agent:m.agent,updatedAt:m.agent.lastActivityAt||n}:null,s=e.activityFeed||[];return(m.error||!i&&!o)&&(s=In(s,a)),o&&(s=In(s,o)),{...e,lastActivityAt:n,tools:e.tools.map(e=>e.id===m.id?{...e,status:m.error?`error`:`done`,message:m.message||``,updatedAt:n,finishedAt:n,...m.output===void 0?{}:{output:m.output},...m.previewImage?{previewImage:m.previewImage}:{},...m.target?{target:m.target}:{}}:e),currentActivity:m.error?a:o||(i?e.currentActivity:a),activityFeed:s}});else if(i===`mobile_operation_request`)ss(e,m);else if(i===`mobile_operation_cancel`)os(m);else if(i===`permission_request`)s.flush(),r(e,e=>({...e,lastActivityAt:h,approvals:[...(e.approvals||[]).filter(e=>e.id!==m.id),m]}));else if(i===`permission_resolved`)r(e,e=>({...e,lastActivityAt:h,approvals:(e.approvals||[]).filter(e=>e.id!==m.id)}));else if(i===`question_request`){s.flush();let t=typeof m.id==`string`?m.id:m.questionId;r(e,e=>({...e,lastActivityAt:h,questions:[...(e.questions||[]).filter(e=>(e.id??e.questionId)!==t),m]}))}else if(i===`question_resolved`){let t=typeof m.questionId==`string`?m.questionId:m.id;r(e,e=>({...e,lastActivityAt:h,questions:(e.questions||[]).filter(e=>(e.id??e.questionId)!==t)}))}else if(i===`generated_asset`)r(e,e=>({...e,lastActivityAt:h,messages:e.messages.map(e=>e.id===t?{...e,attachments:[...(e.attachments||[]).filter(e=>cs(e)!==cs(m)),m]}:e)}));else if(i===`goal_update`)r(e,e=>({...e,goal:m.goal??null,team:ls(m,e.team)})),f(e=>({...e,goal:m.goal??null,team:ls(m,e.team)}));else if(Rn(i))s.flush(),r(e,e=>{let t=Fn(m,e.plan),n=m.currentActivity||{type:`plan`,plan:t,changes:Mn(e.plan,t),updatedAt:t?.updatedAt||h};return{...e,lastActivityAt:h,plan:t,currentActivity:n,activityFeed:In(e.activityFeed,n)}}),f(e=>({...e,plan:Fn(m,e.plan??null)}));else if(i===`session_title`)f(e=>({...e,name:m.name}));else if(i===`model_fallback`){let t=typeof m.model==`string`?m.model:``;if(!t)return;let n=c(`chat:requestNotice.modelFallback`,{model:typeof m.modelId==`string`&&m.modelId?m.modelId:t});r(e,e=>{let r={type:`retry`,message:m.message,summary:n,updatedAt:h};return{...e,model:t,...typeof m.thinkingLevel==`string`?{thinkingLevel:m.thinkingLevel}:{},runNotice:n,currentActivity:r,activityFeed:In(e.activityFeed,r),lastActivityAt:h}}),f(e=>({...e,model:t,...typeof m.thinkingLevel==`string`?{thinkingLevel:m.thinkingLevel}:{}}))}else if(i===`retry`){let t=c(`chat:requestNotice.retryingAttempt`,{attempt:m.attempt,maxAttempts:m.maxAttempts});r(e,e=>{let n={type:`retry`,message:m.message,summary:t,updatedAt:h};return{...e,runNotice:t,currentActivity:n,activityFeed:In(e.activityFeed,n),lastActivityAt:h}})}else if(i===`done`||i===`error`){l.queuedDuringRun||=!!(n.current[e]?.hadQueuedInput||n.current[e]?.queuedInputs?.length);let c=m.finishedAt||h;if(typeof m.text==`string`&&(l.responseText=m.text),l.responseRenderingStreaming=!1,l.terminal=!0,p(i===`done`?`completed`:`failed`,i===`error`?m.message||`Speech response failed.`:void 0),a.setTarget(l.responseText,c),i===`error`&&a.flush(),o.flush(),s.cancel(),r(e,e=>us(e,{agentId:t,responseText:l.responseText,data:m,finishedAt:c,preserveDisplayedText:i===`done`,...i===`error`?{error:m.message}:{}})),i===`done`)return f(e=>({...e,streaming:!1,goal:m.goal??e.goal??null,team:ls(m,e.team),plan:Fn(m,e.plan??null)})),!1;throw Error(m.message)}},state:l}}var fs=`pisper:usage-updated`;function ps({browserNotify:e,notify:t,defaultModel:n,localStreamSessionsRef:r,streamGenerationRef:i,sessionStatesRef:a,setActiveId:s,setGlobalError:c,updateSessionState:l,updateSessions:u,createSession:d,loadSessionMessages:f,refreshSessions:p,syncLiveSession:m}){let{t:h}=o(),g=(0,Q.useRef)(new Map),_=(0,Q.useRef)(new Set),v=(0,Q.useRef)(new Map),y=(0,Q.useCallback)(async(t,o,_=[],v=!1,y=!1,b=null,x=null,S={})=>{let C=S.retryFromIndex,w=C==null?t.trim()||(_.length?h(`chat:chatPage.pleaseAnalyzeTheseAttachments`):``)||(x?x.resourceName:``):t;if(!w&&!x)return!1;let T=o;if(T||=await d(),!T||a.current[T]?.streaming)return!1;a.current[T]?.historyWindow&&await f(T,{force:!0});let E=a.current[T];if(E?.streaming)return!1;if(C!=null){let e=-1;for(let t=(E?.messages.length||0)-1;t>=0;--t)if(E.messages[t]?.role===`user`){e=t;break}let t=E?.messages[e];if(!t||S.retryUserMessageId&&t.id!==S.retryUserMessageId)return!1;C=e,w=t.text||``,_=t.attachments||[]}let D=a.current[T];if(D?.pendingRuntimeSelection||D?.switchingModel||D?.switchingThinking)return!1;let O=(i.current.get(T)||0)+1;i.current.set(T,O);let k=!1,A=()=>!k&&i.current.get(T)===O,j=()=>{},M=new Promise(e=>{j=e});g.current.set(T,{promise:M,resolve:j}),S.activate!==!1&&(s(T),c(``));let N={id:`user-${Date.now()}`,role:`user`,text:w,invocation:x,attachments:_.map(({id:e,kind:t,name:n,mimeType:r,size:i,data:a})=>({id:e,kind:t,name:n,mimeType:r,size:i,data:t===`image`?a:void 0}))},P=`agent-${Date.now()}`,F=new Date().toISOString(),I={responseText:``,responseRenderingStreaming:!0,thinkingText:``,thinkingPrefix:``,queuedDuringRun:!1,pendingInputIds:[]},L=Yo((e,t)=>{A()&&l(T,n=>A()?{...n,thinkingText:e,lastActivityAt:t||n.lastActivityAt,currentActivity:{type:`model`,stage:`thinking`,updatedAt:t||n.lastActivityAt}}:n)},{intervalMs:80}),R=es((e,t)=>{A()&&l(T,n=>{if(!A())return n;let r=n.messages.map(t=>t.id===P?{...t,text:e,streaming:I.responseRenderingStreaming||e!==I.responseText}:t);if(I.terminal||!I.responseRenderingStreaming||n.currentActivity&&n.currentActivity.type!==`model`)return{...n,messages:r};let i={type:`model`,stage:`responding`,updatedAt:t||n.lastActivityAt};return{...n,lastActivityAt:t||n.lastActivityAt,runNotice:``,currentActivity:i,activityFeed:In(n.activityFeed,i),messages:r}})},{isCurrent:A}),z=Xo((e,t)=>{A()&&l(T,n=>{if(!A())return n;let r=n.activityFeed||[];for(let[n,i]of e){let e=r.find(e=>e.type===`tool`&&e.id===n);e&&(r=In(r,{...e,...i,updatedAt:t||e.updatedAt}))}let i=n.currentActivity?.type===`tool`&&e.has(n.currentActivity.id)?{...n.currentActivity,...e.get(n.currentActivity.id),updatedAt:t||n.currentActivity.updatedAt}:n.currentActivity;return{...n,lastActivityAt:t||n.lastActivityAt,tools:n.tools.map(t=>{let n=e.get(String(t.id||``));return n?{...t,...n}:t}),currentActivity:i,activityFeed:r}})}),B=ds({sessionId:T,agentId:P,sessionStatesRef:a,updateSessionState:l,updateSessions:u,typewriter:R,thinkingScheduler:L,toolScheduler:z,t:h}),V=!1,H=(e,t)=>A()?(!V&&(e===`run`||e===`meta`)&&(V=!0,S.onAccepted?.()),e===`resync_required`?(B.dispatch(e,t),k=!0,i.current.delete(T),r.current.delete(T),m(T),!1):B.dispatch(e,t)):!1;I=B.state,l(T,e=>{let t=v||y||e.goal?.status===`active`;return{...e,messages:[...C==null?e.messages:e.messages.slice(0,C),N,{id:P,role:`agent`,text:``,streaming:!0}],tools:[],approvals:[],error:``,streaming:!0,loaded:!0,runStartedAt:F,lastActivityAt:F,runFinishedAt:null,runStopped:!1,runNotice:``,currentActivity:{type:`model`,stage:`thinking`,updatedAt:F},activityFeed:[],lifecycle:{phase:`starting`,event:`prompt_submitted`,turn:0,updatedAt:F},thinkingText:``,hadQueuedInput:!1,withdrawnInputIds:[],queuedInputRunId:P,compaction:null,plan:t?e.plan:null}}),!v&&!y&&u(e=>e.map(e=>e.id!==T||e.goal?.status===`active`?e:{...e,plan:null})),r.current.add(T);let U=!1;try{if(C==null?await X.openStream({sessionId:T,message:w,attachments:_,goalMode:v,teamMode:y,goalTokenBudget:b,invocation:x},H):await X.retryLastTurn(T,H),!A())return V;I.responseRenderingStreaming=!1,I.terminal=!0,R.setTarget(I.responseText),L.flush(),z.flush();let t=new Date().toISOString();if(a.current[T]?.streaming&&l(T,e=>{let n=e.runFinishedAt||t;return{...e,streaming:!1,runFinishedAt:n,lastActivityAt:n,runNotice:``,currentActivity:null,activityFeed:[],approvals:[],tools:Nn(e.tools,{finishedAt:n}),messages:e.messages.map(e=>e.id===P?{...e,streaming:e.text!==I.responseText}:e)}}),!await R.drain()||!A()||(l(T,e=>({...e,messages:e.messages.map(e=>e.id===P?{...e,text:I.responseText,streaming:!1}:e)})),!A()))return V;let r=!!(I.queuedDuringRun||a.current[T]?.hadQueuedInput);(v||y||r||a.current[T]?.goal||a.current[T]?.queuedInputs?.length)&&l(T,{queuedInputs:[],hadQueuedInput:!1});let i;try{i=(await p()).find(e=>e.id===T)}catch{m(T)}if(!A()||(r&&await f(T,{force:!0}).catch(()=>void 0),!A()))return V;S.activate!==!1&&e?.(`chat.completed`,{chat:{title:i?.name||h(`chat:chatPage.appChat`,{app:`Pisper`}),summary:I.responseText.trim().slice(0,260)||h(`chat:chatPage.theAgentHasFinishedResponding`),model:a.current[T]?.model||n}})}catch(e){if(!A())return V;if((I.runId||I.startedAt)&&!I.terminal)return B.dispatch(`resync_required`,{}),k=!0,i.current.delete(T),r.current.delete(T),m(T),V;U=!0,R.cancel(),L.flush(),z.cancel();let t=new Date().toISOString(),n=Z(e);if(l(T,e=>({...e,streaming:!1,error:n,runFinishedAt:t,lastActivityAt:t,runNotice:``,currentActivity:null,activityFeed:[],approvals:[],tools:Nn(e.tools,{finishedAt:t,error:n}),messages:e.messages.map(e=>e.id===P?{...e,streaming:!1,error:n,text:e.text||I.responseText}:e)})),I.queuedDuringRun||a.current[T]?.hadQueuedInput||a.current[T]?.queuedInputs?.length){try{await f(T,{force:!0})}catch{}l(T,{queuedInputs:[],hadQueuedInput:!1})}u(e=>e.map(e=>e.id===T?{...e,streaming:!1}:e))}finally{let e=A();if(k=!0,e&&(r.current.delete(T),i.current.delete(T),l(T,{streaming:!1,hadQueuedInput:!1}),g.current.get(T)?.promise===M&&g.current.delete(T)),R.cancel(),L.cancel(),z.cancel(),j(),window.dispatchEvent(new Event(fs)),U&&e)m(T);else if(e){let e=a.current[T];(e?.recovering||e&&!e.loaded)&&m(T)}}return V},[e,d,n,f,r,p,i,a,s,c,m,h,l,u]),b=(0,Q.useCallback)(async(e,n,r=[],i=`steer`,o)=>{let s=String(e||``).trim()||(r.length?h(`chat:chatPage.pleaseAnalyzeTheseAttachments`):``);if(!n||!s)return!1;a.current[n]?.historyWindow&&await f(n,{force:!0});let c=a.current[n]?.queuedInputRunId;try{let e=await X.queueInput(n,s,r,i),t=new Date().toISOString(),a={id:`interactive-user-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,role:`user`,text:s,queuedAt:t,queuedInputId:e.inputId||void 0,streamingBehavior:e.behavior||i,attachments:r.map(({id:e,kind:t,name:n,mimeType:r,size:i,data:a})=>({id:e,kind:t,name:n,mimeType:r,size:i,data:t===`image`?a:void 0}))};return l(n,n=>{let r=Fe(n,e),i=!r.withdrawnInputIds?.includes(e.inputId)&&n.queuedInputRunId===c,o=!!(e.inputId&&r.deliveredInputIds?.includes(e.inputId));return{...r,messages:i?Le(r.messages,{...a,queuedPending:!!e.inputId&&!o}):r.messages,hadQueuedInput:!0,lastActivityAt:t}}),!0}catch(e){if(mr(e)){let e=g.current.get(n);return e?await e.promise:await m(n),l(n,{streaming:!1,recovering:!1,queuedInputs:[],hadQueuedInput:!1}),await f(n,{force:!0}),await y(s,n,r,!1,!1,null,null,{onAccepted:o})??!1}return t(Z(e),`error`),!1}},[f,t,y,a,m,h,l]),x=(0,Q.useCallback)(e=>{if(!e)return Promise.resolve();let n=a.current[e],r=v.current.get(e);if(r?.matchesRun(n))return r.promise;let i=n?.runStartedAt,o=n?.queuedInputRunId,s=!!n?.runStopped,c=e=>!!(e&&(o?e.queuedInputRunId===o:!e.queuedInputRunId&&e.runStartedAt===i));l(e,{runStopped:!0});let d=(async()=>{let n;try{n=await X.abort(e)}catch(t){let n=a.current[e];throw c(n)&&n?.runStopped&&l(e,{runStopped:s}),t}if(!c(a.current[e])||(await m(e,{force:!0}),!c(a.current[e])))return;let r=new Date().toISOString();l(e,e=>({...e,streaming:!1,queuedInputs:[],hadQueuedInput:!1,goal:n.goal??null,team:Object.hasOwn(n,`team`)?n.team??null:e.team,compaction:e.compaction?.active?{...e.compaction,active:!1,status:`aborted`,aborted:!0,finishedAt:r}:e.compaction,runFinishedAt:r,lastActivityAt:r,runStopped:!0,runNotice:``,approvals:[],tools:Nn(e.tools,{finishedAt:r,error:h(`chat:chatPage.stopped`)}),messages:e.messages.map(e=>e.streaming?{...e,streaming:!1}:e)})),u(t=>t.map(t=>t.id===e?{...t,streaming:!1,goal:n.goal??t.goal??null,team:Object.hasOwn(n,`team`)?n.team??null:t.team}:t)),t(h(`chat:chatPage.currentRunStopped`),`info`)})().finally(()=>{v.current.get(e)?.promise===d&&v.current.delete(e)});return v.current.set(e,{matchesRun:c,promise:d}),d},[t,a,m,h,l,u]),S=(0,Q.useCallback)(async(e,n)=>{let r=`${e}/${n}`;if(!e||!n||_.current.has(r))return null;_.current.add(r),l(e,e=>({...e,withdrawingInputIds:[...e.withdrawingInputIds||[],n]}));try{let r=await X.withdrawQueuedInput(e,n);return l(e,e=>Fe(e,{...r,removedInputId:r.removed?n:void 0})),r.removed?r.withdrawnInput||null:(t(h(`chat:focusSession.queuedInputAlreadyConsumed`),`info`),null)}catch(e){return t(Z(e),`error`),null}finally{_.current.delete(r),l(e,e=>({...e,withdrawingInputIds:(e.withdrawingInputIds||[]).filter(e=>e!==n)}))}},[t,h,l]),C=(0,Q.useCallback)(async(e,n)=>{let r=`${e}/${n}`;if(!e||!n||_.current.has(r))return!1;_.current.add(r),l(e,e=>({...e,withdrawingInputIds:[...e.withdrawingInputIds||[],n]}));try{let r=await X.sendQueuedInputNow(e,n);return l(e,e=>Fe(e,r)),r.sent||t(h(`chat:focusSession.queuedInputAlreadyConsumed`),`info`),r.sent}catch(e){return t(Z(e),`error`),!1}finally{_.current.delete(r),l(e,e=>({...e,withdrawingInputIds:(e.withdrawingInputIds||[]).filter(e=>e!==n)}))}},[t,h,l]);return{sendPrompt:y,retryLastTurn:(0,Q.useCallback)(async(e,t={})=>{let n=a.current[e];if(!n||n.streaming)return;if(n.historyWindow){try{await f(e,{force:!0})}catch{return}if(n=a.current[e],!n||n.streaming||n.historyWindow||n.loading||n.error)return}let r=n.messages||[],i=-1;for(let e=r.length-1;e>=0;--e)if(r[e]?.role===`user`){i=e;break}if(i<0)return;let o=r[i];await y(o.text||``,e,o.attachments||[],!1,!1,null,null,{retryFromIndex:i,retryUserMessageId:o.id,...t})},[f,y,a]),queuePrompt:b,withdrawQueuedInput:S,sendQueuedInputNow:C,abort:x}}function ms(e,t){return new Promise(n=>{let r=()=>{clearTimeout(i),t.removeEventListener(`abort`,r),n()},i=setTimeout(r,e);t.addEventListener(`abort`,r,{once:!0}),t.aborted&&r()})}function hs({isStreaming:e,apply:t,intervalMs:n=750}){let r=new Map,i=new Map,a=new Set,o=e=>{let t=r.get(e);for(let n of a)n(e,t);a.size&&r.get(e)===t&&(t?.status===`success`||t?.status===`error`)&&r.delete(e)},s=e=>{i.get(e)?.controller.abort(),i.delete(e),r.delete(e),o(e)};return{select:(a,c)=>{if(r.get(a)?.status===`applying`)return!1;if(!c)return s(a),!0;if(r.set(a,{selection:c,status:`pending`}),o(a),i.has(a))return!0;let l=new AbortController,{signal:u}=l,d={controller:l,promise:Promise.resolve()};return i.set(a,d),d.promise=(async()=>{try{for(;!u.aborted;){let s=await e(a,u);if(u.aborted)return;if(s){await ms(n,u);continue}let c=r.get(a);if(!c)return;r.set(a,{...c,status:`applying`}),o(a);let l=await t(a,c.selection);u.aborted||(i.get(a)===d&&i.delete(a),r.set(a,{...c,status:`success`,result:l}),o(a));return}}catch(e){let t=r.get(a);!u.aborted&&t&&(i.get(a)===d&&i.delete(a),r.set(a,{...t,status:`error`,error:e}),o(a))}finally{i.get(a)===d&&i.delete(a)}})(),!0},subscribe(e){a.add(e);for(let[t,n]of r)e(t,n),r.get(t)===n&&(n.status===`success`||n.status===`error`)&&r.delete(t);return()=>{a.delete(e)}},async dispose(){let e=[...i.values()];a.clear();for(let e of i.keys())s(e);r.clear(),await Promise.all(e.map(e=>e.promise))}}}var gs=hs({isStreaming:async(e,t)=>{let n=await X.getLiveSession(e,{signal:t});return!!(n.configurationBusy??n.streaming)},apply:(e,t)=>t.model?X.updateModel(e,t.model.provider,t.model.modelId):X.setThinkingLevel(e,t.thinkingLevel)});function _s({notify:e,requestText:t,requestConfirm:n,availableModels:r,sessionStatesRef:i,updateSessionState:a,updateSessions:s,replaceSessionStates:c,setGlobalError:l,syncLiveSession:u}){let{t:d,language:f}=o(),[p,m]=(0,Q.useState)(null),h=(0,Q.useCallback)(e=>{a(e,e=>({...e,runtimeSelectionRevision:(e.runtimeSelectionRevision||0)+1}))},[a]),g=(0,Q.useCallback)((e,t)=>{s(n=>n.map(n=>n.id===e?t(n):n))},[s]),_=(0,Q.useCallback)(async t=>{if(t)try{let n=await X.pauseGoal(t);a(t,{goal:n.goal||null}),g(t,e=>({...e,goal:n.goal||null})),e(d(`chat:chatPage.goalPaused`),`info`)}catch(e){a(t,{error:Z(e)})}},[e,d,a,g]),v=(0,Q.useCallback)(async(t,n)=>{if(t)try{let r=await X.setGoalBudget(t,n);a(t,{goal:r.goal||null}),g(t,e=>({...e,goal:r.goal||null})),e(d(`chat:chatPage.goalTokenBudgetUpdated`),`info`)}catch(e){a(t,{error:Z(e)})}},[e,d,a,g]),y=(0,Q.useCallback)(async t=>{let n=i.current[t];if(!(!t||n?.streaming||n?.compaction?.active)){a(t,{compaction:{...n?.compaction||{},active:!0,status:`running`,reason:`manual`},error:``});try{let n=await X.compactSession(t);a(t,{compaction:n.compaction||null,contextUsage:n.contextUsage||null}),e(d(`chat:chatPage.contextCompacted`))}catch(e){await u(t).catch(()=>{}),a(t,{error:Z(e)})}}},[e,i,u,d,a]),b=(0,Q.useCallback)(async e=>{let t=await X.updateCompactionPreference(e);c(Object.fromEntries(Object.entries(i.current).map(([e,n])=>{let r=Number(n.contextUsage?.contextWindow)||0;return r?[e,{...n,contextUsage:{...n.contextUsage,compactAtPercent:t.thresholdPercent,compactAtTokens:Math.floor(r*t.thresholdPercent/100)}}]:[e,n]})))},[c,i]),x=(0,Q.useCallback)((e,t={})=>{let n=String(t.model||``),r=String(i.current[e]?.model||``);if(n&&r&&n!==r)return;let o=Array.isArray(t.availableThinkingLevels)?t.availableThinkingLevels.map(e=>String(e)):Array.isArray(t.availableLevels)?t.availableLevels.map(e=>String(e)):[],s=String(t.thinkingLevel||``);a(e,{thinkingLevel:s||void 0,availableThinkingLevels:o,thinkingStatus:String(t.thinkingStatus||t.status||``),thinkingMessage:String(t.thinkingMessage||t.message||``),switchingThinking:!1}),s&&g(e,e=>({...e,thinkingLevel:s}))},[i,a,g]),S=(0,Q.useCallback)(async e=>{if(!e)return;let t=i.current[e]?.runtimeSelectionRevision,n=i.current[e];if(!(n?.switchingModel||n?.switchingThinking))try{let n=await X.getThinkingLevel(e);if(i.current[e]?.runtimeSelectionRevision!==t)return;x(e,n)}catch{if(i.current[e]?.runtimeSelectionRevision!==t)return;a(e,{thinkingStatus:`error`,thinkingMessage:d(`chat:focusSession.thinkingLevelsLoadFailed`)})}},[x,i,d,a]),w=(0,Q.useCallback)(async(t,o)=>{let s=r.find(e=>e.key===o);if(!t||!s)return;let c=i.current[t];if(c?.switchingModel||c?.switchingThinking)return;if(c?.streaming||c?.pendingRuntimeSelection){gs.select(t,s.key===c.model?void 0:{model:s});return}h(t);let l=c?.model||``,u=!!c?.messages?.length&&!c?.compaction?.active;a(t,{switchingModel:!0,model:s.key,error:``}),g(t,e=>({...e,model:s.key}));try{let r=await X.updateModel(t,s.provider,s.modelId);h(t),a(t,{model:r.model||s.key,contextUsage:r.contextUsage??null,switchingModel:!1}),g(t,e=>({...e,model:r.model||s.key})),x(t,r),e(d(`chat:chatPage.switchedToModel`,{model:s.label})),u&&await n({title:d(`chat:chatPage.compactAfterModelSwitch`),message:d(`chat:chatPage.compactAfterModelSwitchDescription`),confirmLabel:d(`chat:chatPage.compactNow`),tone:`primary`})&&await y(t)}catch(e){h(t),a(t,{switchingModel:!1,model:l||void 0,error:Z(e)}),l&&g(t,e=>({...e,model:l}))}},[x,r,y,h,e,n,i,d,a,g]),T=(0,Q.useCallback)(async(t,n)=>{let r=String(n||``).trim();if(!t||!r)return;let o=i.current[t]||{};if(o.switchingModel||o.switchingThinking)return;if(o.streaming||o.pendingRuntimeSelection){if(o.pendingRuntimeSelection?.model)return;gs.select(t,r===o.thinkingLevel?void 0:{thinkingLevel:r});return}h(t);let s=String(o.thinkingLevel||``);a(t,{switchingThinking:!0,thinkingLevel:r,error:``}),g(t,e=>({...e,thinkingLevel:r}));try{let n=await X.setThinkingLevel(t,r);h(t),x(t,n),e(d(`chat:chatPage.switchedToThinkingLevel`,{level:String(n.thinkingLevel||r)}))}catch(e){h(t),a(t,{switchingThinking:!1,thinkingLevel:s||void 0,error:Z(e)}),s&&g(t,e=>({...e,thinkingLevel:s}))}},[x,h,e,i,d,a,g]);(0,Q.useEffect)(()=>gs.subscribe((t,n)=>{if(!n){a(t,{pendingRuntimeSelection:void 0});return}let{selection:r,status:i}=n;if(i===`pending`||i===`applying`){h(t),a(t,{pendingRuntimeSelection:{model:r.model?.key,thinkingLevel:r.thinkingLevel},switchingModel:i===`applying`&&!!r.model,switchingThinking:i===`applying`&&!!r.thinkingLevel,error:``});return}if(h(t),a(t,{pendingRuntimeSelection:void 0,switchingModel:!1,switchingThinking:!1,...n.error?{error:Z(n.error)}:{}}),i===`error`)return;let o=n.result||{};if(r.model){let e=String(o.model||r.model.key);a(t,{model:e,contextUsage:o.contextUsage??null}),g(t,t=>({...t,model:e}))}x(t,o),e(r.model?d(`chat:chatPage.switchedToModel`,{model:r.model.label}):d(`chat:chatPage.switchedToThinkingLevel`,{level:String(o.thinkingLevel||r.thinkingLevel)}))}),[x,h,e,d,a,g]);let E=(0,Q.useCallback)(async(t,r)=>{if(!t)return!1;a(t,{switchingPermission:!0,error:``});try{if(r===`full-access`&&!await n({title:d(`chat:chatPage.enableFullAccess`),message:d(`chat:chatPage.fullAccessAllowsTheAgentToUseFilesAndNetworkServicesOutsideTheWorkspaceAndShellCommandsWillNoLon`),confirmLabel:d(`chat:chatPage.enableFullAccess`)}))return a(t,{switchingPermission:!1}),!1;let i=await X.updateExecutionMode(t,r);return a(t,{executionMode:i.executionMode,permissionMode:i.permissionMode,switchingPermission:!1}),g(t,e=>({...e,executionMode:i.executionMode,permissionMode:i.permissionMode})),e(d(`chat:chatPage.executionModeChangedToMode`,{mode:i.executionMode===`approval-required`?d(`chat:chatPage.approvalRequired`):i.executionMode===`workspace-write`?d(`chat:focusSession.workspaceWrite`):d(`chat:chatPage.fullAccess`)})),!0}catch(e){return a(t,{switchingPermission:!1,error:Z(e)}),!1}},[e,n,d,a,g]),D=(0,Q.useCallback)(async(e,t)=>{if(!e)return!1;try{let n=await X.updateRunMode(e,t),r=String(n.runMode||t);return a(e,{runMode:r}),g(e,e=>({...e,runMode:r})),!0}catch(t){return a(e,{error:Z(t)}),!1}},[a,g]),O=(0,Q.useCallback)(async(t,n,r)=>{a(t,{error:``});try{let e=await X.resolveApproval(t,n,r);a(t,e=>({...e,approvals:(e.approvals||[]).filter(e=>e.id!==n)})),e.alreadyResolved&&u(t,{force:!0})}catch(n){if(await u(t,{force:!0}),n instanceof C&&n.status===404){e(d(`chat:chatPage.approvalStatusUpdated`),`info`);return}throw a(t,{error:Z(n)}),n}},[e,u,d,a]),k=(0,Q.useCallback)(async(e,t,n)=>{try{await X.answerQuestion(e,t,n),a(e,e=>({...e,questions:(e.questions||[]).filter(e=>(e.id??e.questionId)!==t)}))}catch(t){throw await u(e,{force:!0}),t}},[u,a]),A=(0,Q.useCallback)(async(t,n)=>{if(!(!t?.id||i.current[t.id]?.streaming)){a(t.id,{switchingCwd:!0,error:``});try{let r=await X.updateCwd(t.id,n);a(t.id,{cwd:r.cwd,switchingCwd:!1}),g(t.id,e=>({...e,cwd:r.cwd})),m(null),e(d(`chat:chatPage.workingDirectoryChangedToWorkspace`,{workspace:On(r.cwd,f)}))}catch(e){throw a(t.id,{switchingCwd:!1,error:Z(e)}),e}}},[f,e,i,d,a,g]);return{workspaceSession:p,setWorkspaceSession:m,switchSessionCwd:A,selectSessionWorkspace:(0,Q.useCallback)(async t=>{if(t?.id){if(i.current[t.id]?.streaming){e(d(`chat:chatPage.stopTheActiveRunBeforeChangingTheWorkspace`),`info`);return}try{let e=await Xn(t.cwd,d(`common:workspacePicker.setWorkingDirectory`));e.status===`picked`?await A(t,e.path):e.status===`unavailable`&&m(t)}catch(e){a(t.id,{switchingCwd:!1,error:Z(e)})}}},[e,i,A,d,a]),renameSession:(0,Q.useCallback)(async n=>{if(!n?.id)return;if(i.current[n.id]?.streaming){e(d(`chat:chatPage.stopTheActiveRunBeforeRenamingTheChat`),`info`);return}let r=await t({title:d(`chat:chatPage.renameChat`),inputLabel:d(`chat:chatPage.chatTitle`),value:n.name,confirmLabel:d(`chat:chatPage.save`)});if(r!==null&&r!==n.name)try{let t=await X.renameSession(n.id,r);g(n.id,e=>({...e,name:t.name})),ln({id:n.id,name:t.name}),e(d(`chat:chatPage.chatTitleUpdated`))}catch(e){l(Z(e))}},[e,t,i,l,d,g]),pauseGoal:_,setGoalBudget:v,compactSession:y,setCompactionThreshold:b,loadSessionThinkingLevel:S,switchSessionModel:w,switchSessionThinkingLevel:T,switchSessionExecutionMode:E,switchSessionRunMode:D,resolveToolApproval:O,answerQuestion:k}}function vs(e,t){if(!e||!t)return!1;let n=it.getState(),r=n.sessions[e]?.pages.find(e=>e.kind===`browser`);if(r)return n.update(e,`browser`,{type:`select`,id:r.id}),n.update(e,`browser`,{type:`browser`,id:r.id,url:t,draft:t}),!0;if(n.update(e,`browser`,{type:`open`,kind:`browser`})===`limit`)return!1;let i=it.getState().sessions[e],a=i?.pages.find(e=>e.id===i.activeId);return a?.kind===`browser`&&(n.update(e,`browser`,{type:`browser`,id:a.id,url:t,draft:t}),!0)}function ys(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function bs(e){if(!ys(e)||typeof e.created!=`boolean`)throw y();if(e.session===null){if(e.expiresAt!==null||e.created)throw y();return{session:null,expiresAt:null,created:!1}}let t=e.session;if(!ys(t)||typeof t.id!=`string`||!t.id||typeof e.expiresAt!=`string`||!Number.isFinite(Date.parse(e.expiresAt)))throw y();let n={id:t.id};for(let e of[`name`,`cwd`,`model`,`thinkingLevel`,`executionMode`,`permissionMode`,`runMode`]){let r=t[e];if(r!=null&&typeof r!=`string`)throw y();typeof r==`string`&&(n[e]=r)}if(t.streaming!==void 0&&typeof t.streaming!=`boolean`)throw y();return typeof t.streaming==`boolean`&&(n.streaming=t.streaming),{session:n,expiresAt:e.expiresAt,created:e.created}}async function xs(e,t){return bs(await v(`/api/sessions/${encodeURIComponent(e)}/side-chat`,{signal:t}))}async function Ss(e,t){let n=bs(await v(`/api/sessions/${encodeURIComponent(e)}/side-chat`,{method:`POST`,signal:t}));if(!n.session)throw y();return n}function Cs({runtime:e,children:t}){let[n,r]=(0,Q.useState)({}),i=(0,Q.useRef)(n),a=(0,Q.useRef)(!0),o=(0,Q.useRef)(e),s=(0,Q.useRef)(new Map),c=(0,Q.useRef)(new Map);(0,Q.useLayoutEffect)(()=>{o.current=e},[e]),(0,Q.useLayoutEffect)(()=>(a.current=!0,()=>{a.current=!1}),[]);let l=(0,Q.useCallback)((e,t)=>{let n={...i.current,[e]:{...i.current[e]??nt,...t}};i.current=n,r(n)},[]),u=(0,Q.useCallback)(async(e,t=!1)=>{if(!a.current)return null;let n=c.current.get(e);if(n){let r=await n.promise;return!t||n.create?r:u(e,!0)}let r=new AbortController;l(e,{loading:!0,error:``});let d=(async()=>{try{let n=await(t?Ss:xs)(e,r.signal);if(r.signal.aborted)return null;let a=i.current[e]?.session?.id;if(a&&a!==n.session?.id&&(o.current.discard(a),s.current.get(a)?.(),s.current.delete(a),de(a)),l(e,{...n,expired:!n.session&&!!(a||i.current[e]?.expired)}),n.session){if(s.current.has(n.session.id)||s.current.set(n.session.id,o.current.retainSessionState(n.session.id)),await o.current.syncLiveSession(n.session.id),r.signal.aborted)return null;await o.current.loadSessionMessages(n.session.id)}return r.signal.aborted?null:n}catch(t){return r.signal.aborted||l(e,{error:Z(t)}),null}finally{r.signal.aborted||l(e,{loading:!1}),c.current.get(e)?.controller===r&&c.current.delete(e)}})();return c.current.set(e,{create:t,controller:r,promise:d}),d},[l]);(0,Q.useEffect)(()=>{a.current=!0;let e=c.current,t=s.current,n=()=>{for(let[e,t]of Object.entries(i.current))t.expiresAt&&Date.parse(t.expiresAt)<=Date.now()&&!c.current.has(e)&&u(e)},r=window.setInterval(n,6e4),o=()=>{document.visibilityState===`visible`&&n()};return document.addEventListener(`visibilitychange`,o),()=>{a.current=!1,window.clearInterval(r),document.removeEventListener(`visibilitychange`,o);for(let t of e.values())t.controller.abort();e.clear();for(let e of t.values())e();t.clear()}},[u]);let d=(0,Q.useCallback)((e,t)=>l(e,{draft:t}),[l]),f=(0,Q.useMemo)(()=>({entries:n,runtime:e,load:u,setDraft:d}),[n,e,u,d]);return(0,$.jsx)($e.Provider,{value:f,children:t})}var ws=`new`,Ts=40;function Es(e){let t=window.__TAURI__?.core?.invoke??window.__TAURI_INTERNALS__?.invoke;return t?t(e):Promise.reject(Error(`native bridge unavailable`))}function Ds({notify:e,navigate:t,browserNotify:n,pendingAsset:r,onAssetConsumed:i,requestText:a,requestConfirm:s,routeSessionId:c,onRouteSessionChange:l,routeLeading:u,pageChrome:d}){let{t:f}=o(),p=c!==void 0,m=p&&c!==ws?c:``,h=O(e=>e.client===`mobile-app`),g=O(e=>e.loaded),_=E(),v=h||_,y=(0,Q.useRef)(null),b=(0,Q.useRef)(new Set),S=(0,Q.useRef)(new Map),C=(0,Q.useRef)(null),w=Po({notify:e}),D=(0,Q.useRef)(new Set),k=(0,Q.useRef)(new Set);(0,Q.useEffect)(()=>{for(let e of k.current)w.sessions.some(t=>t.id===e&&t.unread)||k.current.delete(e);let e=e=>{let t=w.activeId;!t||document.visibilityState!==`visible`||!w.sessions.some(e=>e.id===t&&e.unread)||D.current.has(t)||!e&&k.current.has(t)||(D.current.add(t),k.current.add(t),Cn(t,{read:!0}).catch(()=>void 0).finally(()=>D.current.delete(t)))};return e(),document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[w.activeId,w.sessions]);let A=T(e=>e.capabilities.features[`board.events`]===!0),j=qo({sessionStates:w.sessionStates,sessionStatesRef:w.sessionStatesRef,localStreamSessionsRef:b,streamGenerationRef:S,updateSessionState:w.updateSessionState,updateSessions:w.updateSessions,pollOnly:A?w.activeId||null:void 0}),M=Fo({setActiveId:w.setActiveId,loadSessionMessages:j.loadSessionMessages,openRoutedSession:p?l:void 0}),N=w.createSessionRecord,P=j.loadSessionMessages,F=w.refreshSessions,I=w.sessionStatesRef,L=j.syncLiveSession,z=w.setGlobalError,B=M.openSession,[V,H]=(0,Q.useState)({sessionId:``,token:0}),U=(0,Q.useCallback)(async(e=``)=>{let t=null;h&&(t=await Es(`mobile_state`).catch(()=>null));let n=R(h,t),r=await N(e,{inheritRecentCwd:n});return r?(B(r),r):``},[N,h,B]),ee=w.setActiveId,te=!!(m&&w.sessions.some(e=>e.id===m));(0,Q.useEffect)(()=>{!m||w.activeId===m||!te&&!w.loading||ee(m)},[w.activeId,w.loading,te,m,ee]);let ne=(0,Q.useRef)(``);(0,Q.useEffect)(()=>{if(!m||ne.current===m)return;ne.current=m;let e=on();e?.sessionId===m&&e.targetEntryId&&P(m,{force:!0,limit:Ts})},[P,m]);let re=w.activeId,ie=w.sessions.some(e=>e.id===re&&e.streaming===!0),ae=w.sessions.find(e=>e.id===re)?.botId;(0,Q.useEffect)(()=>{re&&ae&&L(re)},[ae,ie,re,L]);let oe=(0,Q.useRef)({id:``,streaming:!1});(0,Q.useEffect)(()=>{let e=oe.current;oe.current={id:re,streaming:ie},re&&(e.id===re?e.streaming!==ie:ie)&&Ko(I.current[re],{catalogStreaming:ie,localStreamOwned:b.current.has(re)})&&P(re,{force:!0})},[ie,re,P,I]),(0,Q.useEffect)(()=>{if(!m||!te)return;let e=Or();e&&vs(m,e.url);let t=e=>{let t=e.detail?.url;t&&vs(m,t)};return window.addEventListener(kr,t),()=>window.removeEventListener(kr,t)},[te,m]);let W=ps({browserNotify:n,notify:e,defaultModel:w.defaultModel,localStreamSessionsRef:b,streamGenerationRef:S,sessionStatesRef:w.sessionStatesRef,setActiveId:w.setActiveId,setGlobalError:w.setGlobalError,updateSessionState:w.updateSessionState,updateSessions:w.updateSessions,createSession:U,loadSessionMessages:j.loadSessionMessages,refreshSessions:w.refreshSessions,syncLiveSession:j.syncLiveSession}),{sendPrompt:se,retryLastTurn:ce}=W,G=w.adoptCreatedSession,le=(0,Q.useCallback)(async(t,n,r=[],i=!1,a=!1,o=null,s=null,c={})=>{let l=n.trim()||(r.length?f(`chat:chatPage.pleaseAnalyzeTheseAttachments`):``)||(s?s.resourceName:``);if(!l)return!1;let u;try{u=await t.prepare(l)}catch(t){return e(Z(t),`error`),!1}return G(u.session),t.onSent(),de(me),B(u.session.id),u.queued?(c.onAccepted?.(),!0):se(n,u.session.id,r,i,a,o,s,{onAccepted:c.onAccepted})},[G,e,B,se,f]),K=_s({notify:e,requestText:a,requestConfirm:s,availableModels:w.availableModels,sessionStatesRef:w.sessionStatesRef,updateSessionState:w.updateSessionState,updateSessions:w.updateSessions,replaceSessionStates:w.replaceSessionStates,setGlobalError:w.setGlobalError,syncLiveSession:j.syncLiveSession}),ue=(0,Q.useCallback)(()=>{if(document.visibilityState!==`visible`||C.current)return;let e=(async()=>{h&&await x().catch(()=>void 0);let e=[];try{e=await F(void 0,{preserveExistingOnEmpty:!0})}catch{}let t=new Set([...Object.keys(I.current),...w.activeId?[w.activeId]:[],...e.filter(e=>e.streaming).map(e=>e.id)]);await Promise.allSettled(Array.from(t).map(e=>L(e,{force:!0})))})().finally(()=>{C.current=null});C.current=e},[w.activeId,h,F,I,L]);(0,Q.useEffect)(()=>{let e=()=>ue();return document.addEventListener(`visibilitychange`,e),window.addEventListener(`pageshow`,e),window.addEventListener(`online`,e),()=>{document.removeEventListener(`visibilitychange`,e),window.removeEventListener(`pageshow`,e),window.removeEventListener(`online`,e)}},[ue]);let fe=(0,Q.useCallback)(async e=>{await P(e,{force:!0}),await F(e)},[P,F]),pe=(0,Q.useCallback)(async(t,n,r)=>{if(!(!t?.id||!n))try{z(``);let i=null;if(r?.rewindFiles){let e=await X.previewFileRewind(t.id,n);if(!await s(gr(e,f)))return;i=await X.rewindFiles(t.id,n)}let a=await X.navigateSessionTree(t.id,n,!1);if(a.cancelled)return;hr(t.id,a),await fe(t.id),H(e=>({sessionId:t.id,token:e.token+1})),i?e(_r(i,f)):vr(t.id,a,f(`chat:chatPage.branchedFromNode`),{notify:e,t:f})}catch(e){z(e instanceof Error?e.message:String(e))}},[e,fe,s,z,f]);(0,Q.useEffect)(()=>en(e=>{I.current[e]&&fe(e).catch(()=>void 0)}),[fe,I]);let he=(0,Q.useCallback)(async(t,n)=>{if(!t?.id||!n)return;let r=await a({title:f(`chat:chatPage.createChildChat`),inputLabel:f(`chat:chatPage.chatTitle`),value:`${f(`chat:chatPage.separateChatSuffix`)} · ${t.name||f(`chat:chatPage.newChat`)}`,confirmLabel:f(`chat:chatPage.create`)});if(r!==null)try{z(``);let i=await X.deriveSession(t.id,n,r);await F(),B(i.id),H(e=>({sessionId:i.id,token:e.token+1})),e(f(`chat:chatPage.childChatCreated`))}catch(e){z(e instanceof Error?e.message:String(e))}},[e,B,F,a,z,f]),q=(0,Q.useCallback)(()=>t(`config`),[t]),ge=(0,Q.useMemo)(()=>({sessions:w.sessions,subscribeSessionState:w.subscribeSessionState,getSessionState:w.getSessionState,defaultModel:w.defaultModel,availableModels:w.availableModels,globalError:w.globalError,activeId:w.activeId,mobileLayout:v,requestConfirm:s,sessionTreePulseSessionId:V.sessionId,sessionTreePulseToken:V.token,pendingAsset:r,onAssetConsumed:i,notify:e,openModelSettings:q,loadSessionMessages:j.loadSessionMessages,loadOlderMessages:j.loadOlderMessages,sendPrompt:W.sendPrompt,sendNewTask:le,retryLastTurn:W.retryLastTurn,queuePrompt:W.queuePrompt,withdrawQueuedInput:W.withdrawQueuedInput,sendQueuedInputNow:W.sendQueuedInputNow,abort:W.abort,pauseGoal:K.pauseGoal,setGoalBudget:K.setGoalBudget,compactSession:K.compactSession,setCompactionThreshold:K.setCompactionThreshold,switchSessionModel:K.switchSessionModel,loadSessionThinkingLevel:K.loadSessionThinkingLevel,switchSessionThinkingLevel:K.switchSessionThinkingLevel,switchSessionExecutionMode:K.switchSessionExecutionMode,switchSessionRunMode:K.switchSessionRunMode,resolveToolApproval:K.resolveToolApproval,answerQuestion:K.answerQuestion,selectSessionWorkspace:K.selectSessionWorkspace,renameSession:K.renameSession,branchFromEntry:pe,createChildSession:he,reloadSessionBranch:fe}),[w.sessions,w.subscribeSessionState,w.getSessionState,w.defaultModel,w.availableModels,w.globalError,w.activeId,v,s,V.sessionId,V.token,r,i,e,q,j.loadSessionMessages,j.loadOlderMessages,W.sendPrompt,le,W.retryLastTurn,W.queuePrompt,W.withdrawQueuedInput,W.sendQueuedInputNow,W.abort,K.pauseGoal,K.setGoalBudget,K.compactSession,K.setCompactionThreshold,K.switchSessionModel,K.loadSessionThinkingLevel,K.switchSessionThinkingLevel,K.switchSessionExecutionMode,K.switchSessionRunMode,K.resolveToolApproval,K.selectSessionWorkspace,K.renameSession,pe,he,fe]),_e=w.discardSessionState,ve=(0,Q.useMemo)(()=>({subscribeSessionState:w.subscribeSessionState,getSessionState:w.getSessionState,retainSessionState:w.retainSessionState,discard:e=>{S.current.set(e,(S.current.get(e)??0)+1),b.current.delete(e),_e(e)},loadSessionMessages:j.loadSessionMessages,loadOlderMessages:j.loadOlderMessages,syncLiveSession:j.syncLiveSession,send:async(e,t)=>{await se(t,e,[],!1,!1,null,null,{activate:!1})},retry:e=>ce(e,{activate:!1}),abort:W.abort,approve:K.resolveToolApproval}),[w.subscribeSessionState,w.getSessionState,w.retainSessionState,_e,j.loadSessionMessages,j.loadOlderMessages,j.syncLiveSession,se,ce,W.abort,K.resolveToolApproval]);return(0,$.jsxs)(Cs,{runtime:ve,children:[(0,$.jsx)(`div`,{ref:y,className:`chat-layout dock-layout relative flex w-full min-w-0 min-h-0 flex-1`,children:w.loading?(0,$.jsx)(Zn,{kind:`loading`,title:f(`chat:chatPage.wakingTheAgent`),description:f(`chat:chatPage.modelsSessionsAndContextAreSettlingIntoPlace`)}):(0,$.jsx)(`div`,{className:`chat-dock-workspace relative h-full w-full min-w-0 min-h-0 flex-1 [isolation:isolate] overflow-hidden border-0 rounded-none bg-panel`,children:(0,$.jsx)(So.Provider,{value:ge,children:(0,$.jsx)(Qe.Provider,{value:p?d??null:null,children:(0,$.jsx)(Si.Provider,{value:p?u??null:null,children:g&&(p?m&&!te?(0,$.jsx)(Zn,{kind:`empty`,title:f(`navigation:shell.sessionNotFound`),description:f(`navigation:shell.sessionNotFoundHint`),action:d?.onHome?(0,$.jsx)(Y,{variant:`secondary`,onClick:d.onHome,children:f(`board:home.goHome`)}):(0,$.jsx)(Y,{variant:`secondary`,onClick:()=>t(`board`),children:f(`navigation:shell.backToBoardLabel`)})}):c===ws&&d?.newTaskDraft?(0,$.jsx)(Do,{draft:d.newTaskDraft}):m?(0,$.jsx)(Oo,{sessionId:m,onCreateSession:U}):w.globalError?(0,$.jsx)(Zn,{kind:`error`,title:f(`navigation:shell.createSessionFailed`),description:w.globalError,action:(0,$.jsx)(Y,{variant:`secondary`,onClick:()=>void U(),children:f(`navigation:more.retry`)})}):(0,$.jsx)(Zn,{kind:`loading`,title:f(`chat:chatPage.wakingTheAgent`)}):(0,$.jsx)(Oo,{onCreateSession:U}))})})})})}),K.workspaceSession&&(0,$.jsx)(lt,{open:!0,initialPath:K.workspaceSession.cwd,description:f(`common:workspacePicker.selectWorkspaceForChat`,{name:K.workspaceSession.name}),onOpenChange:e=>!e&&K.setWorkspaceSession(null),onSelect:e=>K.switchSessionCwd(K.workspaceSession,e)})]})}export{Ds as ChatPage};
|
|
553
|
+
`);o.push(e.slice(-6e3),h)}else if(i===`tool_start`)o.flush(),s.flush(),r(e,e=>{let t={type:`tool`,id:m.id,name:m.name,args:m.args,status:`running`,startedAt:m.startedAt||h,updatedAt:h,...m.output===void 0?{}:{output:m.output}};return{...e,lastActivityAt:h,runNotice:``,tools:Ln(e.tools,t),currentActivity:t,activityFeed:Ln(e.activityFeed,t)}});else if(i===`tool_update`)s.push(m.id,{message:m.message||``,updatedAt:m.updatedAt||h,...m.output===void 0?{}:{output:m.output},...m.agent?{agent:m.agent}:{},...m.previewImage?{previewImage:m.previewImage}:{},...m.target?{target:m.target}:{}},m.updatedAt||h);else if(i===`tool_end`)s.flush(),r(e,e=>{let t=e.tools.find(e=>e.id===m.id),n=m.finishedAt||h,r=String(t?.name||``),i=(Fn(r)||[`spawn_agent`,`list_agents`,`send_message`,`followup_task`,`wait_agent`,`interrupt_agent`].includes(r))&&[`plan`,`agent`].includes(e.currentActivity?.type),a={...t||{},type:`tool`,status:m.error?`error`:`done`,message:m.message||t?.message||``,updatedAt:n,finishedAt:n,...m.output===void 0?{}:{output:m.output},...m.previewImage?{previewImage:m.previewImage}:{},...m.target?{target:m.target}:{}},o=m.agent?{type:`agent`,agent:m.agent,updatedAt:m.agent.lastActivityAt||n}:null,s=e.activityFeed||[];return(m.error||!i&&!o)&&(s=Ln(s,a)),o&&(s=Ln(s,o)),{...e,lastActivityAt:n,tools:e.tools.map(e=>e.id===m.id?{...e,status:m.error?`error`:`done`,message:m.message||``,updatedAt:n,finishedAt:n,...m.output===void 0?{}:{output:m.output},...m.previewImage?{previewImage:m.previewImage}:{},...m.target?{target:m.target}:{}}:e),currentActivity:m.error?a:o||(i?e.currentActivity:a),activityFeed:s}});else if(i===`mobile_operation_request`)fs(e,m);else if(i===`mobile_operation_cancel`)ds(m);else if(i===`permission_request`)s.flush(),r(e,e=>({...e,lastActivityAt:h,approvals:[...(e.approvals||[]).filter(e=>e.id!==m.id),m]}));else if(i===`permission_resolved`)r(e,e=>({...e,lastActivityAt:h,approvals:(e.approvals||[]).filter(e=>e.id!==m.id)}));else if(i===`question_request`){s.flush();let t=typeof m.id==`string`?m.id:m.questionId;r(e,e=>({...e,lastActivityAt:h,questions:[...(e.questions||[]).filter(e=>(e.id??e.questionId)!==t),m]}))}else if(i===`question_resolved`){let t=typeof m.questionId==`string`?m.questionId:m.id;r(e,e=>({...e,lastActivityAt:h,questions:(e.questions||[]).filter(e=>(e.id??e.questionId)!==t)}))}else if(i===`generated_asset`)r(e,e=>({...e,lastActivityAt:h,messages:e.messages.map(e=>e.id===t?{...e,attachments:[...(e.attachments||[]).filter(e=>ps(e)!==ps(m)),m]}:e)}));else if(i===`goal_update`)r(e,e=>({...e,goal:m.goal??null,team:ms(m,e.team)})),f(e=>({...e,goal:m.goal??null,team:ms(m,e.team)}));else if(zn(i))s.flush(),r(e,e=>{let t=In(m,e.plan),n=m.currentActivity||{type:`plan`,plan:t,changes:Nn(e.plan,t),updatedAt:t?.updatedAt||h};return{...e,lastActivityAt:h,plan:t,currentActivity:n,activityFeed:Ln(e.activityFeed,n)}}),f(e=>({...e,plan:In(m,e.plan??null)}));else if(i===`session_title`)f(e=>({...e,name:m.name}));else if(i===`model_fallback`){let t=typeof m.model==`string`?m.model:``;if(!t)return;let n=c(`chat:requestNotice.modelFallback`,{model:typeof m.modelId==`string`&&m.modelId?m.modelId:t});r(e,e=>{let r={type:`retry`,message:m.message,summary:n,updatedAt:h};return{...e,model:t,...typeof m.thinkingLevel==`string`?{thinkingLevel:m.thinkingLevel}:{},runNotice:n,currentActivity:r,activityFeed:Ln(e.activityFeed,r),lastActivityAt:h}}),f(e=>({...e,model:t,...typeof m.thinkingLevel==`string`?{thinkingLevel:m.thinkingLevel}:{}}))}else if(i===`retry`){let t=c(`chat:requestNotice.retryingAttempt`,{attempt:m.attempt,maxAttempts:m.maxAttempts});r(e,e=>{let n={type:`retry`,message:m.message,summary:t,updatedAt:h};return{...e,runNotice:t,currentActivity:n,activityFeed:Ln(e.activityFeed,n),lastActivityAt:h}})}else if(i===`done`||i===`error`){l.queuedDuringRun||=!!(n.current[e]?.hadQueuedInput||n.current[e]?.queuedInputs?.length);let c=m.finishedAt||h;if(typeof m.text==`string`&&(l.responseText=m.text),l.responseRenderingStreaming=!1,l.terminal=!0,p(i===`done`?`completed`:`failed`,i===`error`?m.message||`Speech response failed.`:void 0),a.setTarget(l.responseText,c),i===`error`&&a.flush(),o.flush(),s.cancel(),r(e,e=>hs(e,{agentId:t,responseText:l.responseText,data:m,finishedAt:c,preserveDisplayedText:i===`done`,...i===`error`?{error:m.message}:{}})),i===`done`)return f(e=>({...e,streaming:!1,goal:m.goal??e.goal??null,team:ms(m,e.team),plan:In(m,e.plan??null)})),!1;throw Error(m.message)}},state:l}}var _s=`pisper:usage-updated`;function vs({browserNotify:e,notify:t,defaultModel:n,localStreamSessionsRef:r,streamGenerationRef:i,sessionStatesRef:a,setActiveId:s,setGlobalError:c,updateSessionState:l,updateSessions:u,createSession:d,loadSessionMessages:f,refreshSessions:p,syncLiveSession:m}){let{t:h}=o(),g=(0,Q.useRef)(new Map),_=(0,Q.useRef)(new Set),v=(0,Q.useRef)(new Map),y=(0,Q.useCallback)(async(t,o,_=[],v=!1,y=!1,b=null,x=null,S={})=>{let C=S.retryFromIndex,w=C==null?t.trim()||(_.length?h(`chat:chatPage.pleaseAnalyzeTheseAttachments`):``)||(x?x.resourceName:``):t;if(!w&&!x)return!1;let T=o;if(T||=await d(),!T||a.current[T]?.streaming)return!1;a.current[T]?.historyWindow&&await f(T,{force:!0});let E=a.current[T];if(E?.streaming)return!1;if(C!=null){let e=-1;for(let t=(E?.messages.length||0)-1;t>=0;--t)if(E.messages[t]?.role===`user`){e=t;break}let t=E?.messages[e];if(!t||S.retryUserMessageId&&t.id!==S.retryUserMessageId)return!1;C=e,w=t.text||``,_=t.attachments||[]}let D=a.current[T];if(D?.pendingRuntimeSelection||D?.switchingModel||D?.switchingThinking)return!1;let O=(i.current.get(T)||0)+1;i.current.set(T,O);let k=!1,A=()=>!k&&i.current.get(T)===O,j=()=>{},M=new Promise(e=>{j=e});g.current.set(T,{promise:M,resolve:j}),S.activate!==!1&&(s(T),c(``));let N={id:`user-${Date.now()}`,role:`user`,text:w,invocation:x,attachments:_.map(({id:e,kind:t,name:n,mimeType:r,size:i,data:a})=>({id:e,kind:t,name:n,mimeType:r,size:i,data:t===`image`?a:void 0}))},P=`agent-${Date.now()}`,F=new Date().toISOString(),I={responseText:``,responseRenderingStreaming:!0,thinkingText:``,thinkingPrefix:``,queuedDuringRun:!1,pendingInputIds:[]},L=es((e,t)=>{A()&&l(T,n=>A()?{...n,thinkingText:e,lastActivityAt:t||n.lastActivityAt,currentActivity:{type:`model`,stage:`thinking`,updatedAt:t||n.lastActivityAt}}:n)},{intervalMs:80}),R=as((e,t)=>{A()&&l(T,n=>{if(!A())return n;let r=n.messages.map(t=>t.id===P?{...t,text:e,streaming:I.responseRenderingStreaming||e!==I.responseText}:t);if(I.terminal||!I.responseRenderingStreaming||n.currentActivity&&n.currentActivity.type!==`model`)return{...n,messages:r};let i={type:`model`,stage:`responding`,updatedAt:t||n.lastActivityAt};return{...n,lastActivityAt:t||n.lastActivityAt,runNotice:``,currentActivity:i,activityFeed:Ln(n.activityFeed,i),messages:r}})},{isCurrent:A}),z=ts((e,t)=>{A()&&l(T,n=>{if(!A())return n;let r=n.activityFeed||[];for(let[n,i]of e){let e=r.find(e=>e.type===`tool`&&e.id===n);e&&(r=Ln(r,{...e,...i,updatedAt:t||e.updatedAt}))}let i=n.currentActivity?.type===`tool`&&e.has(n.currentActivity.id)?{...n.currentActivity,...e.get(n.currentActivity.id),updatedAt:t||n.currentActivity.updatedAt}:n.currentActivity;return{...n,lastActivityAt:t||n.lastActivityAt,tools:n.tools.map(t=>{let n=e.get(String(t.id||``));return n?{...t,...n}:t}),currentActivity:i,activityFeed:r}})}),B=gs({sessionId:T,agentId:P,sessionStatesRef:a,updateSessionState:l,updateSessions:u,typewriter:R,thinkingScheduler:L,toolScheduler:z,t:h}),V=!1,H=(e,t)=>A()?(!V&&(e===`run`||e===`meta`)&&(V=!0,S.onAccepted?.()),e===`resync_required`?(B.dispatch(e,t),k=!0,i.current.delete(T),r.current.delete(T),m(T),!1):B.dispatch(e,t)):!1;I=B.state,l(T,e=>{let t=v||y||e.goal?.status===`active`;return{...e,messages:[...C==null?e.messages:e.messages.slice(0,C),N,{id:P,role:`agent`,text:``,streaming:!0}],tools:[],approvals:[],error:``,streaming:!0,loaded:!0,runStartedAt:F,lastActivityAt:F,runFinishedAt:null,runStopped:!1,runNotice:``,currentActivity:{type:`model`,stage:`thinking`,updatedAt:F},activityFeed:[],lifecycle:{phase:`starting`,event:`prompt_submitted`,turn:0,updatedAt:F},thinkingText:``,hadQueuedInput:!1,withdrawnInputIds:[],queuedInputRunId:P,compaction:null,plan:t?e.plan:null}}),!v&&!y&&u(e=>e.map(e=>e.id!==T||e.goal?.status===`active`?e:{...e,plan:null})),r.current.add(T);let U=!1;try{if(C==null?await X.openStream({sessionId:T,message:w,attachments:_,goalMode:v,teamMode:y,goalTokenBudget:b,invocation:x},H):await X.retryLastTurn(T,H),!A())return V;I.responseRenderingStreaming=!1,I.terminal=!0,R.setTarget(I.responseText),L.flush(),z.flush();let t=new Date().toISOString();if(a.current[T]?.streaming&&l(T,e=>{let n=e.runFinishedAt||t;return{...e,streaming:!1,runFinishedAt:n,lastActivityAt:n,runNotice:``,currentActivity:null,activityFeed:[],approvals:[],tools:Pn(e.tools,{finishedAt:n}),messages:e.messages.map(e=>e.id===P?{...e,streaming:e.text!==I.responseText}:e)}}),!await R.drain()||!A()||(l(T,e=>({...e,messages:e.messages.map(e=>e.id===P?{...e,text:I.responseText,streaming:!1}:e)})),!A()))return V;let r=!!(I.queuedDuringRun||a.current[T]?.hadQueuedInput);(v||y||r||a.current[T]?.goal||a.current[T]?.queuedInputs?.length)&&l(T,{queuedInputs:[],hadQueuedInput:!1});let i;try{i=(await p()).find(e=>e.id===T)}catch{m(T)}if(!A()||(r&&await f(T,{force:!0}).catch(()=>void 0),!A()))return V;S.activate!==!1&&e?.(`chat.completed`,{chat:{title:i?.name||h(`chat:chatPage.appChat`,{app:`Pisper`}),summary:I.responseText.trim().slice(0,260)||h(`chat:chatPage.theAgentHasFinishedResponding`),model:a.current[T]?.model||n}})}catch(e){if(!A())return V;if((I.runId||I.startedAt)&&!I.terminal)return B.dispatch(`resync_required`,{}),k=!0,i.current.delete(T),r.current.delete(T),m(T),V;U=!0,R.cancel(),L.flush(),z.cancel();let t=new Date().toISOString(),n=Z(e);if(l(T,e=>({...e,streaming:!1,error:n,runFinishedAt:t,lastActivityAt:t,runNotice:``,currentActivity:null,activityFeed:[],approvals:[],tools:Pn(e.tools,{finishedAt:t,error:n}),messages:e.messages.map(e=>e.id===P?{...e,streaming:!1,error:n,text:e.text||I.responseText}:e)})),I.queuedDuringRun||a.current[T]?.hadQueuedInput||a.current[T]?.queuedInputs?.length){try{await f(T,{force:!0})}catch{}l(T,{queuedInputs:[],hadQueuedInput:!1})}u(e=>e.map(e=>e.id===T?{...e,streaming:!1}:e))}finally{let e=A();if(k=!0,e&&(r.current.delete(T),i.current.delete(T),l(T,{streaming:!1,hadQueuedInput:!1}),g.current.get(T)?.promise===M&&g.current.delete(T)),R.cancel(),L.cancel(),z.cancel(),j(),window.dispatchEvent(new Event(_s)),U&&e)m(T);else if(e){let e=a.current[T];(e?.recovering||e&&!e.loaded)&&m(T)}}return V},[e,d,n,f,r,p,i,a,s,c,m,h,l,u]),b=(0,Q.useCallback)(async(e,n,r=[],i=`steer`,o)=>{let s=String(e||``).trim()||(r.length?h(`chat:chatPage.pleaseAnalyzeTheseAttachments`):``);if(!n||!s)return!1;a.current[n]?.historyWindow&&await f(n,{force:!0});let c=a.current[n]?.queuedInputRunId;try{let e=await X.queueInput(n,s,r,i),t=new Date().toISOString(),a={id:`interactive-user-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,role:`user`,text:s,queuedAt:t,queuedInputId:e.inputId||void 0,streamingBehavior:e.behavior||i,attachments:r.map(({id:e,kind:t,name:n,mimeType:r,size:i,data:a})=>({id:e,kind:t,name:n,mimeType:r,size:i,data:t===`image`?a:void 0}))};return l(n,n=>{let r=Fe(n,e),i=!r.withdrawnInputIds?.includes(e.inputId)&&n.queuedInputRunId===c,o=!!(e.inputId&&r.deliveredInputIds?.includes(e.inputId));return{...r,messages:i?Le(r.messages,{...a,queuedPending:!!e.inputId&&!o}):r.messages,hadQueuedInput:!0,lastActivityAt:t}}),!0}catch(e){if(mr(e)){let e=g.current.get(n);return e?await e.promise:await m(n),l(n,{streaming:!1,recovering:!1,queuedInputs:[],hadQueuedInput:!1}),await f(n,{force:!0}),await y(s,n,r,!1,!1,null,null,{onAccepted:o})??!1}return t(Z(e),`error`),!1}},[f,t,y,a,m,h,l]),x=(0,Q.useCallback)(e=>{if(!e)return Promise.resolve();let n=a.current[e],r=v.current.get(e);if(r?.matchesRun(n))return r.promise;let i=n?.runStartedAt,o=n?.queuedInputRunId,s=!!n?.runStopped,c=e=>!!(e&&(o?e.queuedInputRunId===o:!e.queuedInputRunId&&e.runStartedAt===i));l(e,{runStopped:!0});let d=(async()=>{let n;try{n=await X.abort(e)}catch(t){let n=a.current[e];throw c(n)&&n?.runStopped&&l(e,{runStopped:s}),t}if(!c(a.current[e])||(await m(e,{force:!0}),!c(a.current[e])))return;let r=new Date().toISOString();l(e,e=>({...e,streaming:!1,queuedInputs:[],hadQueuedInput:!1,goal:n.goal??null,team:Object.hasOwn(n,`team`)?n.team??null:e.team,compaction:e.compaction?.active?{...e.compaction,active:!1,status:`aborted`,aborted:!0,finishedAt:r}:e.compaction,runFinishedAt:r,lastActivityAt:r,runStopped:!0,runNotice:``,approvals:[],tools:Pn(e.tools,{finishedAt:r,error:h(`chat:chatPage.stopped`)}),messages:e.messages.map(e=>e.streaming?{...e,streaming:!1}:e)})),u(t=>t.map(t=>t.id===e?{...t,streaming:!1,goal:n.goal??t.goal??null,team:Object.hasOwn(n,`team`)?n.team??null:t.team}:t)),t(h(`chat:chatPage.currentRunStopped`),`info`)})().finally(()=>{v.current.get(e)?.promise===d&&v.current.delete(e)});return v.current.set(e,{matchesRun:c,promise:d}),d},[t,a,m,h,l,u]),S=(0,Q.useCallback)(async(e,n)=>{let r=`${e}/${n}`;if(!e||!n||_.current.has(r))return null;_.current.add(r),l(e,e=>({...e,withdrawingInputIds:[...e.withdrawingInputIds||[],n]}));try{let r=await X.withdrawQueuedInput(e,n);return l(e,e=>Fe(e,{...r,removedInputId:r.removed?n:void 0})),r.removed?r.withdrawnInput||null:(t(h(`chat:focusSession.queuedInputAlreadyConsumed`),`info`),null)}catch(e){return t(Z(e),`error`),null}finally{_.current.delete(r),l(e,e=>({...e,withdrawingInputIds:(e.withdrawingInputIds||[]).filter(e=>e!==n)}))}},[t,h,l]),C=(0,Q.useCallback)(async(e,n)=>{let r=`${e}/${n}`;if(!e||!n||_.current.has(r))return!1;_.current.add(r),l(e,e=>({...e,withdrawingInputIds:[...e.withdrawingInputIds||[],n]}));try{let r=await X.sendQueuedInputNow(e,n);return l(e,e=>Fe(e,r)),r.sent||t(h(`chat:focusSession.queuedInputAlreadyConsumed`),`info`),r.sent}catch(e){return t(Z(e),`error`),!1}finally{_.current.delete(r),l(e,e=>({...e,withdrawingInputIds:(e.withdrawingInputIds||[]).filter(e=>e!==n)}))}},[t,h,l]);return{sendPrompt:y,retryLastTurn:(0,Q.useCallback)(async(e,t={})=>{let n=a.current[e];if(!n||n.streaming)return;if(n.historyWindow){try{await f(e,{force:!0})}catch{return}if(n=a.current[e],!n||n.streaming||n.historyWindow||n.loading||n.error)return}let r=n.messages||[],i=-1;for(let e=r.length-1;e>=0;--e)if(r[e]?.role===`user`){i=e;break}if(i<0)return;let o=r[i];await y(o.text||``,e,o.attachments||[],!1,!1,null,null,{retryFromIndex:i,retryUserMessageId:o.id,...t})},[f,y,a]),queuePrompt:b,withdrawQueuedInput:S,sendQueuedInputNow:C,abort:x}}function ys(e,t){return new Promise(n=>{let r=()=>{clearTimeout(i),t.removeEventListener(`abort`,r),n()},i=setTimeout(r,e);t.addEventListener(`abort`,r,{once:!0}),t.aborted&&r()})}function bs({isStreaming:e,apply:t,intervalMs:n=750}){let r=new Map,i=new Map,a=new Set,o=e=>{let t=r.get(e);for(let n of a)n(e,t);a.size&&r.get(e)===t&&(t?.status===`success`||t?.status===`error`)&&r.delete(e)},s=e=>{i.get(e)?.controller.abort(),i.delete(e),r.delete(e),o(e)};return{select:(a,c)=>{if(r.get(a)?.status===`applying`)return!1;if(!c)return s(a),!0;if(r.set(a,{selection:c,status:`pending`}),o(a),i.has(a))return!0;let l=new AbortController,{signal:u}=l,d={controller:l,promise:Promise.resolve()};return i.set(a,d),d.promise=(async()=>{try{for(;!u.aborted;){let s=await e(a,u);if(u.aborted)return;if(s){await ys(n,u);continue}let c=r.get(a);if(!c)return;r.set(a,{...c,status:`applying`}),o(a);let l=await t(a,c.selection);u.aborted||(i.get(a)===d&&i.delete(a),r.set(a,{...c,status:`success`,result:l}),o(a));return}}catch(e){let t=r.get(a);!u.aborted&&t&&(i.get(a)===d&&i.delete(a),r.set(a,{...t,status:`error`,error:e}),o(a))}finally{i.get(a)===d&&i.delete(a)}})(),!0},subscribe(e){a.add(e);for(let[t,n]of r)e(t,n),r.get(t)===n&&(n.status===`success`||n.status===`error`)&&r.delete(t);return()=>{a.delete(e)}},async dispose(){let e=[...i.values()];a.clear();for(let e of i.keys())s(e);r.clear(),await Promise.all(e.map(e=>e.promise))}}}var xs=bs({isStreaming:async(e,t)=>{let n=await X.getLiveSession(e,{signal:t});return!!(n.configurationBusy??n.streaming)},apply:(e,t)=>t.model?X.updateModel(e,t.model.provider,t.model.modelId):X.setThinkingLevel(e,t.thinkingLevel)});function Ss({notify:e,requestText:t,requestConfirm:n,availableModels:r,sessionStatesRef:i,updateSessionState:a,updateSessions:s,replaceSessionStates:c,setGlobalError:l,syncLiveSession:u}){let{t:d,language:f}=o(),[p,m]=(0,Q.useState)(null),h=(0,Q.useCallback)(e=>{a(e,e=>({...e,runtimeSelectionRevision:(e.runtimeSelectionRevision||0)+1}))},[a]),g=(0,Q.useCallback)((e,t)=>{s(n=>n.map(n=>n.id===e?t(n):n))},[s]),_=(0,Q.useCallback)(async t=>{if(t)try{let n=await X.pauseGoal(t);a(t,{goal:n.goal||null}),g(t,e=>({...e,goal:n.goal||null})),e(d(`chat:chatPage.goalPaused`),`info`)}catch(e){a(t,{error:Z(e)})}},[e,d,a,g]),v=(0,Q.useCallback)(async(t,n)=>{if(t)try{let r=await X.setGoalBudget(t,n);a(t,{goal:r.goal||null}),g(t,e=>({...e,goal:r.goal||null})),e(d(`chat:chatPage.goalTokenBudgetUpdated`),`info`)}catch(e){a(t,{error:Z(e)})}},[e,d,a,g]),y=(0,Q.useCallback)(async t=>{let n=i.current[t];if(!(!t||n?.streaming||n?.compaction?.active)){a(t,{compaction:{...n?.compaction||{},active:!0,status:`running`,reason:`manual`},error:``});try{let n=await X.compactSession(t);a(t,{compaction:n.compaction||null,contextUsage:n.contextUsage||null}),e(d(`chat:chatPage.contextCompacted`))}catch(e){await u(t).catch(()=>{}),a(t,{error:Z(e)})}}},[e,i,u,d,a]),b=(0,Q.useCallback)(async e=>{let t=await X.updateCompactionPreference(e);c(Object.fromEntries(Object.entries(i.current).map(([e,n])=>{let r=Number(n.contextUsage?.contextWindow)||0;return r?[e,{...n,contextUsage:{...n.contextUsage,compactAtPercent:t.thresholdPercent,compactAtTokens:Math.floor(r*t.thresholdPercent/100)}}]:[e,n]})))},[c,i]),x=(0,Q.useCallback)((e,t={})=>{let n=String(t.model||``),r=String(i.current[e]?.model||``);if(n&&r&&n!==r)return;let o=Array.isArray(t.availableThinkingLevels)?t.availableThinkingLevels.map(e=>String(e)):Array.isArray(t.availableLevels)?t.availableLevels.map(e=>String(e)):[],s=String(t.thinkingLevel||``);a(e,{thinkingLevel:s||void 0,availableThinkingLevels:o,thinkingStatus:String(t.thinkingStatus||t.status||``),thinkingMessage:String(t.thinkingMessage||t.message||``),switchingThinking:!1}),s&&g(e,e=>({...e,thinkingLevel:s}))},[i,a,g]),S=(0,Q.useCallback)(async e=>{if(!e)return;let t=i.current[e]?.runtimeSelectionRevision,n=i.current[e];if(!(n?.switchingModel||n?.switchingThinking))try{let n=await X.getThinkingLevel(e);if(i.current[e]?.runtimeSelectionRevision!==t)return;x(e,n)}catch{if(i.current[e]?.runtimeSelectionRevision!==t)return;a(e,{thinkingStatus:`error`,thinkingMessage:d(`chat:focusSession.thinkingLevelsLoadFailed`)})}},[x,i,d,a]),w=(0,Q.useCallback)(async(t,o)=>{let s=r.find(e=>e.key===o);if(!t||!s)return;let c=i.current[t];if(c?.switchingModel||c?.switchingThinking)return;if(c?.streaming||c?.pendingRuntimeSelection){xs.select(t,s.key===c.model?void 0:{model:s});return}h(t);let l=c?.model||``,u=!!c?.messages?.length&&!c?.compaction?.active;a(t,{switchingModel:!0,model:s.key,error:``}),g(t,e=>({...e,model:s.key}));try{let r=await X.updateModel(t,s.provider,s.modelId);h(t),a(t,{model:r.model||s.key,contextUsage:r.contextUsage??null,switchingModel:!1}),g(t,e=>({...e,model:r.model||s.key})),x(t,r),e(d(`chat:chatPage.switchedToModel`,{model:s.label})),u&&await n({title:d(`chat:chatPage.compactAfterModelSwitch`),message:d(`chat:chatPage.compactAfterModelSwitchDescription`),confirmLabel:d(`chat:chatPage.compactNow`),tone:`primary`})&&await y(t)}catch(e){h(t),a(t,{switchingModel:!1,model:l||void 0,error:Z(e)}),l&&g(t,e=>({...e,model:l}))}},[x,r,y,h,e,n,i,d,a,g]),T=(0,Q.useCallback)(async(t,n)=>{let r=String(n||``).trim();if(!t||!r)return;let o=i.current[t]||{};if(o.switchingModel||o.switchingThinking)return;if(o.streaming||o.pendingRuntimeSelection){if(o.pendingRuntimeSelection?.model)return;xs.select(t,r===o.thinkingLevel?void 0:{thinkingLevel:r});return}h(t);let s=String(o.thinkingLevel||``);a(t,{switchingThinking:!0,thinkingLevel:r,error:``}),g(t,e=>({...e,thinkingLevel:r}));try{let n=await X.setThinkingLevel(t,r);h(t),x(t,n),e(d(`chat:chatPage.switchedToThinkingLevel`,{level:String(n.thinkingLevel||r)}))}catch(e){h(t),a(t,{switchingThinking:!1,thinkingLevel:s||void 0,error:Z(e)}),s&&g(t,e=>({...e,thinkingLevel:s}))}},[x,h,e,i,d,a,g]);(0,Q.useEffect)(()=>xs.subscribe((t,n)=>{if(!n){a(t,{pendingRuntimeSelection:void 0});return}let{selection:r,status:i}=n;if(i===`pending`||i===`applying`){h(t),a(t,{pendingRuntimeSelection:{model:r.model?.key,thinkingLevel:r.thinkingLevel},switchingModel:i===`applying`&&!!r.model,switchingThinking:i===`applying`&&!!r.thinkingLevel,error:``});return}if(h(t),a(t,{pendingRuntimeSelection:void 0,switchingModel:!1,switchingThinking:!1,...n.error?{error:Z(n.error)}:{}}),i===`error`)return;let o=n.result||{};if(r.model){let e=String(o.model||r.model.key);a(t,{model:e,contextUsage:o.contextUsage??null}),g(t,t=>({...t,model:e}))}x(t,o),e(r.model?d(`chat:chatPage.switchedToModel`,{model:r.model.label}):d(`chat:chatPage.switchedToThinkingLevel`,{level:String(o.thinkingLevel||r.thinkingLevel)}))}),[x,h,e,d,a,g]);let E=(0,Q.useCallback)(async(t,r)=>{if(!t)return!1;a(t,{switchingPermission:!0,error:``});try{if(r===`full-access`&&!await n({title:d(`chat:chatPage.enableFullAccess`),message:d(`chat:chatPage.fullAccessAllowsTheAgentToUseFilesAndNetworkServicesOutsideTheWorkspaceAndShellCommandsWillNoLon`),confirmLabel:d(`chat:chatPage.enableFullAccess`)}))return a(t,{switchingPermission:!1}),!1;let i=await X.updateExecutionMode(t,r);return a(t,{executionMode:i.executionMode,permissionMode:i.permissionMode,switchingPermission:!1}),g(t,e=>({...e,executionMode:i.executionMode,permissionMode:i.permissionMode})),e(d(`chat:chatPage.executionModeChangedToMode`,{mode:i.executionMode===`approval-required`?d(`chat:chatPage.approvalRequired`):i.executionMode===`workspace-write`?d(`chat:focusSession.workspaceWrite`):d(`chat:chatPage.fullAccess`)})),!0}catch(e){return a(t,{switchingPermission:!1,error:Z(e)}),!1}},[e,n,d,a,g]),D=(0,Q.useCallback)(async(e,t)=>{if(!e)return!1;try{let n=await X.updateRunMode(e,t),r=String(n.runMode||t);return a(e,{runMode:r}),g(e,e=>({...e,runMode:r})),!0}catch(t){return a(e,{error:Z(t)}),!1}},[a,g]),O=(0,Q.useCallback)(async(t,n,r)=>{a(t,{error:``});try{let e=await X.resolveApproval(t,n,r);a(t,e=>({...e,approvals:(e.approvals||[]).filter(e=>e.id!==n)})),e.alreadyResolved&&u(t,{force:!0})}catch(n){if(await u(t,{force:!0}),n instanceof C&&n.status===404){e(d(`chat:chatPage.approvalStatusUpdated`),`info`);return}throw a(t,{error:Z(n)}),n}},[e,u,d,a]),k=(0,Q.useCallback)(async(e,t,n)=>{try{await X.answerQuestion(e,t,n),a(e,e=>({...e,questions:(e.questions||[]).filter(e=>(e.id??e.questionId)!==t)}))}catch(t){throw await u(e,{force:!0}),t}},[u,a]),A=(0,Q.useCallback)(async(t,n)=>{if(!(!t?.id||i.current[t.id]?.streaming)){a(t.id,{switchingCwd:!0,error:``});try{let r=await X.updateCwd(t.id,n);a(t.id,{cwd:r.cwd,switchingCwd:!1}),g(t.id,e=>({...e,cwd:r.cwd})),m(null),e(d(`chat:chatPage.workingDirectoryChangedToWorkspace`,{workspace:kn(r.cwd,f)}))}catch(e){throw a(t.id,{switchingCwd:!1,error:Z(e)}),e}}},[f,e,i,d,a,g]);return{workspaceSession:p,setWorkspaceSession:m,switchSessionCwd:A,selectSessionWorkspace:(0,Q.useCallback)(async t=>{if(t?.id){if(i.current[t.id]?.streaming){e(d(`chat:chatPage.stopTheActiveRunBeforeChangingTheWorkspace`),`info`);return}try{let e=await Zn(t.cwd,d(`common:workspacePicker.setWorkingDirectory`));e.status===`picked`?await A(t,e.path):e.status===`unavailable`&&m(t)}catch(e){a(t.id,{switchingCwd:!1,error:Z(e)})}}},[e,i,A,d,a]),renameSession:(0,Q.useCallback)(async n=>{if(!n?.id)return;if(i.current[n.id]?.streaming){e(d(`chat:chatPage.stopTheActiveRunBeforeRenamingTheChat`),`info`);return}let r=await t({title:d(`chat:chatPage.renameChat`),inputLabel:d(`chat:chatPage.chatTitle`),value:n.name,confirmLabel:d(`chat:chatPage.save`)});if(r!==null&&r!==n.name)try{let t=await X.renameSession(n.id,r);g(n.id,e=>({...e,name:t.name})),un({id:n.id,name:t.name}),e(d(`chat:chatPage.chatTitleUpdated`))}catch(e){l(Z(e))}},[e,t,i,l,d,g]),pauseGoal:_,setGoalBudget:v,compactSession:y,setCompactionThreshold:b,loadSessionThinkingLevel:S,switchSessionModel:w,switchSessionThinkingLevel:T,switchSessionExecutionMode:E,switchSessionRunMode:D,resolveToolApproval:O,answerQuestion:k}}function Cs(e,t){if(!e||!t)return!1;let n=it.getState(),r=n.sessions[e]?.pages.find(e=>e.kind===`browser`);if(r)return n.update(e,`browser`,{type:`select`,id:r.id}),n.update(e,`browser`,{type:`browser`,id:r.id,url:t,draft:t}),!0;if(n.update(e,`browser`,{type:`open`,kind:`browser`})===`limit`)return!1;let i=it.getState().sessions[e],a=i?.pages.find(e=>e.id===i.activeId);return a?.kind===`browser`&&(n.update(e,`browser`,{type:`browser`,id:a.id,url:t,draft:t}),!0)}function ws(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ts(e){if(!ws(e)||typeof e.created!=`boolean`)throw y();if(e.session===null){if(e.expiresAt!==null||e.created)throw y();return{session:null,expiresAt:null,created:!1}}let t=e.session;if(!ws(t)||typeof t.id!=`string`||!t.id||typeof e.expiresAt!=`string`||!Number.isFinite(Date.parse(e.expiresAt)))throw y();let n={id:t.id};for(let e of[`name`,`cwd`,`model`,`thinkingLevel`,`executionMode`,`permissionMode`,`runMode`]){let r=t[e];if(r!=null&&typeof r!=`string`)throw y();typeof r==`string`&&(n[e]=r)}if(t.streaming!==void 0&&typeof t.streaming!=`boolean`)throw y();return typeof t.streaming==`boolean`&&(n.streaming=t.streaming),{session:n,expiresAt:e.expiresAt,created:e.created}}async function Es(e,t){return Ts(await v(`/api/sessions/${encodeURIComponent(e)}/side-chat`,{signal:t}))}async function Ds(e,t){let n=Ts(await v(`/api/sessions/${encodeURIComponent(e)}/side-chat`,{method:`POST`,signal:t}));if(!n.session)throw y();return n}function Os({runtime:e,children:t}){let[n,r]=(0,Q.useState)({}),i=(0,Q.useRef)(n),a=(0,Q.useRef)(!0),o=(0,Q.useRef)(e),s=(0,Q.useRef)(new Map),c=(0,Q.useRef)(new Map);(0,Q.useLayoutEffect)(()=>{o.current=e},[e]),(0,Q.useLayoutEffect)(()=>(a.current=!0,()=>{a.current=!1}),[]);let l=(0,Q.useCallback)((e,t)=>{let n={...i.current,[e]:{...i.current[e]??nt,...t}};i.current=n,r(n)},[]),u=(0,Q.useCallback)(async(e,t=!1)=>{if(!a.current)return null;let n=c.current.get(e);if(n){let r=await n.promise;return!t||n.create?r:u(e,!0)}let r=new AbortController;l(e,{loading:!0,error:``});let d=(async()=>{try{let n=await(t?Ds:Es)(e,r.signal);if(r.signal.aborted)return null;let a=i.current[e]?.session?.id;if(a&&a!==n.session?.id&&(o.current.discard(a),s.current.get(a)?.(),s.current.delete(a),de(a)),l(e,{...n,expired:!n.session&&!!(a||i.current[e]?.expired)}),n.session){if(s.current.has(n.session.id)||s.current.set(n.session.id,o.current.retainSessionState(n.session.id)),await o.current.syncLiveSession(n.session.id),r.signal.aborted)return null;await o.current.loadSessionMessages(n.session.id)}return r.signal.aborted?null:n}catch(t){return r.signal.aborted||l(e,{error:Z(t)}),null}finally{r.signal.aborted||l(e,{loading:!1}),c.current.get(e)?.controller===r&&c.current.delete(e)}})();return c.current.set(e,{create:t,controller:r,promise:d}),d},[l]);(0,Q.useEffect)(()=>{a.current=!0;let e=c.current,t=s.current,n=()=>{for(let[e,t]of Object.entries(i.current))t.expiresAt&&Date.parse(t.expiresAt)<=Date.now()&&!c.current.has(e)&&u(e)},r=window.setInterval(n,6e4),o=()=>{document.visibilityState===`visible`&&n()};return document.addEventListener(`visibilitychange`,o),()=>{a.current=!1,window.clearInterval(r),document.removeEventListener(`visibilitychange`,o);for(let t of e.values())t.controller.abort();e.clear();for(let e of t.values())e();t.clear()}},[u]);let d=(0,Q.useCallback)((e,t)=>l(e,{draft:t}),[l]),f=(0,Q.useMemo)(()=>({entries:n,runtime:e,load:u,setDraft:d}),[n,e,u,d]);return(0,$.jsx)($e.Provider,{value:f,children:t})}var ks=`new`,As=40;function js(e){let t=window.__TAURI__?.core?.invoke??window.__TAURI_INTERNALS__?.invoke;return t?t(e):Promise.reject(Error(`native bridge unavailable`))}function Ms({notify:e,navigate:t,browserNotify:n,pendingAsset:r,onAssetConsumed:i,requestText:a,requestConfirm:s,routeSessionId:c,onRouteSessionChange:l,routeLeading:u,pageChrome:d}){let{t:f}=o(),p=c!==void 0,m=p&&c!==ks?c:``,h=O(e=>e.client===`mobile-app`),g=O(e=>e.loaded),_=E(),v=h||_,y=(0,Q.useRef)(null),b=(0,Q.useRef)(new Set),S=(0,Q.useRef)(new Map),C=(0,Q.useRef)(null),w=zo({notify:e}),D=(0,Q.useRef)(new Set),k=(0,Q.useRef)(new Set);(0,Q.useEffect)(()=>{for(let e of k.current)w.sessions.some(t=>t.id===e&&t.unread)||k.current.delete(e);let e=e=>{let t=w.activeId;!t||document.visibilityState!==`visible`||!w.sessions.some(e=>e.id===t&&e.unread)||D.current.has(t)||!e&&k.current.has(t)||(D.current.add(t),k.current.add(t),wn(t,{read:!0}).catch(()=>void 0).finally(()=>D.current.delete(t)))};return e(),document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[w.activeId,w.sessions]);let A=T(e=>e.capabilities.features[`board.events`]===!0),j=Qo({sessionStates:w.sessionStates,sessionStatesRef:w.sessionStatesRef,localStreamSessionsRef:b,streamGenerationRef:S,updateSessionState:w.updateSessionState,updateSessions:w.updateSessions,pollOnly:A?w.activeId||null:void 0}),M=Bo({setActiveId:w.setActiveId,loadSessionMessages:j.loadSessionMessages,openRoutedSession:p?l:void 0}),N=w.createSessionRecord,P=j.loadSessionMessages,F=w.refreshSessions,I=w.sessionStatesRef,L=j.syncLiveSession,z=w.setGlobalError,B=M.openSession,[V,H]=(0,Q.useState)({sessionId:``,token:0}),U=(0,Q.useCallback)(async(e=``)=>{let t=null;h&&(t=await js(`mobile_state`).catch(()=>null));let n=R(h,t),r=await N(e,{inheritRecentCwd:n});return r?(B(r),r):``},[N,h,B]),ee=w.setActiveId,te=!!(m&&w.sessions.some(e=>e.id===m));(0,Q.useEffect)(()=>{!m||w.activeId===m||!te&&!w.loading||ee(m)},[w.activeId,w.loading,te,m,ee]);let ne=(0,Q.useRef)(``);(0,Q.useEffect)(()=>{if(!m||ne.current===m)return;ne.current=m;let e=sn();e?.sessionId===m&&e.targetEntryId&&P(m,{force:!0,limit:As})},[P,m]);let re=w.activeId,ie=w.sessions.some(e=>e.id===re&&e.streaming===!0),ae=w.sessions.find(e=>e.id===re)?.botId;(0,Q.useEffect)(()=>{re&&ae&&L(re)},[ae,ie,re,L]);let oe=(0,Q.useRef)({id:``,streaming:!1});(0,Q.useEffect)(()=>{let e=oe.current;oe.current={id:re,streaming:ie},re&&(e.id===re?e.streaming!==ie:ie)&&Zo(I.current[re],{catalogStreaming:ie,localStreamOwned:b.current.has(re)})&&P(re,{force:!0})},[ie,re,P,I]),(0,Q.useEffect)(()=>{if(!m||!te)return;let e=Or();e&&Cs(m,e.url);let t=e=>{let t=e.detail?.url;t&&Cs(m,t)};return window.addEventListener(kr,t),()=>window.removeEventListener(kr,t)},[te,m]);let W=vs({browserNotify:n,notify:e,defaultModel:w.defaultModel,localStreamSessionsRef:b,streamGenerationRef:S,sessionStatesRef:w.sessionStatesRef,setActiveId:w.setActiveId,setGlobalError:w.setGlobalError,updateSessionState:w.updateSessionState,updateSessions:w.updateSessions,createSession:U,loadSessionMessages:j.loadSessionMessages,refreshSessions:w.refreshSessions,syncLiveSession:j.syncLiveSession}),{sendPrompt:se,retryLastTurn:ce}=W,G=w.adoptCreatedSession,le=(0,Q.useCallback)(async(t,n,r=[],i=!1,a=!1,o=null,s=null,c={})=>{let l=n.trim()||(r.length?f(`chat:chatPage.pleaseAnalyzeTheseAttachments`):``)||(s?s.resourceName:``);if(!l)return!1;let u;try{u=await t.prepare(l)}catch(t){return e(Z(t),`error`),!1}return G(u.session),t.onSent(),de(me),B(u.session.id),se(n,u.session.id,r,i,a,o,s,{onAccepted:c.onAccepted})},[G,e,B,se,f]),K=Ss({notify:e,requestText:a,requestConfirm:s,availableModels:w.availableModels,sessionStatesRef:w.sessionStatesRef,updateSessionState:w.updateSessionState,updateSessions:w.updateSessions,replaceSessionStates:w.replaceSessionStates,setGlobalError:w.setGlobalError,syncLiveSession:j.syncLiveSession}),ue=(0,Q.useCallback)(()=>{if(document.visibilityState!==`visible`||C.current)return;let e=(async()=>{h&&await x().catch(()=>void 0);let e=[];try{e=await F(void 0,{preserveExistingOnEmpty:!0})}catch{}let t=new Set([...Object.keys(I.current),...w.activeId?[w.activeId]:[],...e.filter(e=>e.streaming).map(e=>e.id)]);await Promise.allSettled(Array.from(t).map(e=>L(e,{force:!0})))})().finally(()=>{C.current=null});C.current=e},[w.activeId,h,F,I,L]);(0,Q.useEffect)(()=>{let e=()=>ue();return document.addEventListener(`visibilitychange`,e),window.addEventListener(`pageshow`,e),window.addEventListener(`online`,e),()=>{document.removeEventListener(`visibilitychange`,e),window.removeEventListener(`pageshow`,e),window.removeEventListener(`online`,e)}},[ue]);let fe=(0,Q.useCallback)(async e=>{await P(e,{force:!0}),await F(e)},[P,F]),pe=(0,Q.useCallback)(async(t,n,r)=>{if(!(!t?.id||!n))try{z(``);let i=null;if(r?.rewindFiles){let e=await X.previewFileRewind(t.id,n);if(!await s(gr(e,f)))return;i=await X.rewindFiles(t.id,n)}let a=await X.navigateSessionTree(t.id,n,!1);if(a.cancelled)return;hr(t.id,a),await fe(t.id),H(e=>({sessionId:t.id,token:e.token+1})),i?e(_r(i,f)):vr(t.id,a,f(`chat:chatPage.branchedFromNode`),{notify:e,t:f})}catch(e){z(e instanceof Error?e.message:String(e))}},[e,fe,s,z,f]);(0,Q.useEffect)(()=>tn(e=>{I.current[e]&&fe(e).catch(()=>void 0)}),[fe,I]);let he=(0,Q.useCallback)(async(t,n)=>{if(!t?.id||!n)return;let r=await a({title:f(`chat:chatPage.createChildChat`),inputLabel:f(`chat:chatPage.chatTitle`),value:`${f(`chat:chatPage.separateChatSuffix`)} · ${t.name||f(`chat:chatPage.newChat`)}`,confirmLabel:f(`chat:chatPage.create`)});if(r!==null)try{z(``);let i=await X.deriveSession(t.id,n,r);await F(),B(i.id),H(e=>({sessionId:i.id,token:e.token+1})),e(f(`chat:chatPage.childChatCreated`))}catch(e){z(e instanceof Error?e.message:String(e))}},[e,B,F,a,z,f]),q=(0,Q.useCallback)(()=>t(`config`),[t]),ge=(0,Q.useMemo)(()=>({sessions:w.sessions,subscribeSessionState:w.subscribeSessionState,getSessionState:w.getSessionState,defaultModel:w.defaultModel,availableModels:w.availableModels,globalError:w.globalError,activeId:w.activeId,mobileLayout:v,requestConfirm:s,sessionTreePulseSessionId:V.sessionId,sessionTreePulseToken:V.token,pendingAsset:r,onAssetConsumed:i,notify:e,openModelSettings:q,loadSessionMessages:j.loadSessionMessages,loadOlderMessages:j.loadOlderMessages,sendPrompt:W.sendPrompt,sendNewTask:le,retryLastTurn:W.retryLastTurn,queuePrompt:W.queuePrompt,withdrawQueuedInput:W.withdrawQueuedInput,sendQueuedInputNow:W.sendQueuedInputNow,abort:W.abort,pauseGoal:K.pauseGoal,setGoalBudget:K.setGoalBudget,compactSession:K.compactSession,setCompactionThreshold:K.setCompactionThreshold,switchSessionModel:K.switchSessionModel,loadSessionThinkingLevel:K.loadSessionThinkingLevel,switchSessionThinkingLevel:K.switchSessionThinkingLevel,switchSessionExecutionMode:K.switchSessionExecutionMode,switchSessionRunMode:K.switchSessionRunMode,resolveToolApproval:K.resolveToolApproval,answerQuestion:K.answerQuestion,selectSessionWorkspace:K.selectSessionWorkspace,renameSession:K.renameSession,branchFromEntry:pe,createChildSession:he,reloadSessionBranch:fe}),[w.sessions,w.subscribeSessionState,w.getSessionState,w.defaultModel,w.availableModels,w.globalError,w.activeId,v,s,V.sessionId,V.token,r,i,e,q,j.loadSessionMessages,j.loadOlderMessages,W.sendPrompt,le,W.retryLastTurn,W.queuePrompt,W.withdrawQueuedInput,W.sendQueuedInputNow,W.abort,K.pauseGoal,K.setGoalBudget,K.compactSession,K.setCompactionThreshold,K.switchSessionModel,K.loadSessionThinkingLevel,K.switchSessionThinkingLevel,K.switchSessionExecutionMode,K.switchSessionRunMode,K.resolveToolApproval,K.selectSessionWorkspace,K.renameSession,pe,he,fe]),_e=w.discardSessionState,ve=(0,Q.useMemo)(()=>({subscribeSessionState:w.subscribeSessionState,getSessionState:w.getSessionState,retainSessionState:w.retainSessionState,discard:e=>{S.current.set(e,(S.current.get(e)??0)+1),b.current.delete(e),_e(e)},loadSessionMessages:j.loadSessionMessages,loadOlderMessages:j.loadOlderMessages,syncLiveSession:j.syncLiveSession,send:async(e,t)=>{await se(t,e,[],!1,!1,null,null,{activate:!1})},retry:e=>ce(e,{activate:!1}),abort:W.abort,approve:K.resolveToolApproval}),[w.subscribeSessionState,w.getSessionState,w.retainSessionState,_e,j.loadSessionMessages,j.loadOlderMessages,j.syncLiveSession,se,ce,W.abort,K.resolveToolApproval]);return(0,$.jsxs)(Os,{runtime:ve,children:[(0,$.jsx)(`div`,{ref:y,className:`chat-layout dock-layout relative flex w-full min-w-0 min-h-0 flex-1`,children:w.loading?(0,$.jsx)(Qn,{kind:`loading`,title:f(`chat:chatPage.wakingTheAgent`),description:f(`chat:chatPage.modelsSessionsAndContextAreSettlingIntoPlace`)}):(0,$.jsx)(`div`,{className:`chat-dock-workspace relative h-full w-full min-w-0 min-h-0 flex-1 [isolation:isolate] overflow-hidden border-0 rounded-none bg-panel`,children:(0,$.jsx)(Do.Provider,{value:ge,children:(0,$.jsx)(Qe.Provider,{value:p?d??null:null,children:(0,$.jsx)(Si.Provider,{value:p?u??null:null,children:g&&(p?m&&!te?(0,$.jsx)(Qn,{kind:`empty`,title:f(`navigation:shell.sessionNotFound`),description:f(`navigation:shell.sessionNotFoundHint`),action:d?.onHome?(0,$.jsx)(Y,{variant:`secondary`,onClick:d.onHome,children:f(`board:home.goHome`)}):(0,$.jsx)(Y,{variant:`secondary`,onClick:()=>t(`board`),children:f(`navigation:shell.backToBoardLabel`)})}):c===ks&&d?.newTaskDraft?(0,$.jsx)(Mo,{draft:d.newTaskDraft}):m?(0,$.jsx)(No,{sessionId:m,onCreateSession:U}):w.globalError?(0,$.jsx)(Qn,{kind:`error`,title:f(`navigation:shell.createSessionFailed`),description:w.globalError,action:(0,$.jsx)(Y,{variant:`secondary`,onClick:()=>void U(),children:f(`navigation:more.retry`)})}):(0,$.jsx)(Qn,{kind:`loading`,title:f(`chat:chatPage.wakingTheAgent`)}):(0,$.jsx)(No,{onCreateSession:U}))})})})})}),K.workspaceSession&&(0,$.jsx)(J,{open:!0,initialPath:K.workspaceSession.cwd,description:f(`common:workspacePicker.selectWorkspaceForChat`,{name:K.workspaceSession.name}),onOpenChange:e=>!e&&K.setWorkspaceSession(null),onSelect:e=>K.switchSessionCwd(K.workspaceSession,e)})]})}export{Ms as ChatPage};
|