pisper 0.5.50 → 0.5.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/package.json +7 -7
  2. package/web/.vite/manifest.json +162 -159
  3. package/web/assets/{AppOverlays-DrS2NA9w.js → AppOverlays-DlB6SVT6.js} +1 -1
  4. package/web/assets/{AppSelect-CRjRgr38.js → AppSelect-kDqZkETY.js} +1 -1
  5. package/web/assets/{AssetsPage-C2GY8596.js → AssetsPage-mZkZgR9g.js} +1 -1
  6. package/web/assets/{ChannelsPage-FPSrQa1G.js → ChannelsPage-Dau7vaaV.js} +1 -1
  7. package/web/assets/{ChatDockView-BJGa8Bm8.js → ChatDockView-Cq7J6Xmn.js} +1 -1
  8. package/web/assets/{ChatHistoryPage-BBmrFY5U.js → ChatHistoryPage-BpoHAiYo.js} +1 -1
  9. package/web/assets/{ChatPage-DfQGtuLo.js → ChatPage-CCMsSvJV.js} +3 -3
  10. package/web/assets/{ConfigPage-D27UB6Ni.js → ConfigPage-BGZoCXnB.js} +1 -1
  11. package/web/assets/{MarkdownMessage-BQ_6o9-O.js → MarkdownMessage-Dbgb5XkJ.js} +1 -1
  12. package/web/assets/{MemoryPage-D46RKJLE.js → MemoryPage-BiAbcHbL.js} +1 -1
  13. package/web/assets/{PageHeader-DH1jtT2l.js → PageHeader-9ctH9v28.js} +1 -1
  14. package/web/assets/PluginsPage-D-D22LWb.js +1 -0
  15. package/web/assets/{PreviewPages-BBwzd5LJ.js → PreviewPages-DUZgwvOb.js} +1 -1
  16. package/web/assets/{SchedulesPage-AyePMsz_.js → SchedulesPage-C3sS9Ej3.js} +1 -1
  17. package/web/assets/{SkillsPage-Cb3i7xyX.js → SkillsPage-BeeTZyfc.js} +1 -1
  18. package/web/assets/{TerminalPanel-B06cwdRZ.js → TerminalPanel-a4jiIuSs.js} +1 -1
  19. package/web/assets/{WelcomeEffects-CsxWSguh.js → WelcomeEffects-Xo1Z1Nf4.js} +1 -1
  20. package/web/assets/{WorkflowsPage-Byq1cQot.js → WorkflowsPage-BCdz4ise.js} +1 -1
  21. package/web/assets/{WorkspacePicker-BNVaK0c9.js → WorkspacePicker-Ctf1A8lp.js} +1 -1
  22. package/web/assets/client-store-ohgbeJNh.js +1 -0
  23. package/web/assets/{collapsible-C4owDMcF.js → collapsible-U8Wh2f7S.js} +1 -1
  24. package/web/assets/{config-search-CsGhOXIG.js → config-search-CdRsMMUS.js} +1 -1
  25. package/web/assets/{dist-VQXpFPjV.js → dist-Dq4VqZgU.js} +1 -1
  26. package/web/assets/{dist-CyztUDRL.js → dist-cR3ayBwn.js} +1 -1
  27. package/web/assets/{es2015-BpePoPbM.js → es2015-DycjrqX-.js} +1 -1
  28. package/web/assets/{field-BAyGDYW_.js → field-t72VAR-1.js} +1 -1
  29. package/web/assets/index-Bd5A8V1V.js +40 -0
  30. package/web/assets/index-DUhopGVK.css +2 -0
  31. package/web/assets/{progress-BqaId9J2.js → progress-DQDjWjzV.js} +1 -1
  32. package/web/assets/{scroll-area-DkxdCF8r.js → scroll-area-C1DpxpHg.js} +1 -1
  33. package/web/assets/{separator-0_agp17Z.js → separator-Br2F2Mir.js} +1 -1
  34. package/web/assets/tool-labels-v0OysnpI.js +1 -0
  35. package/web/assets/{tooltip-D9uQM6ab.js → tooltip-DfGEs0yi.js} +1 -1
  36. package/web/assets/use-i18n-jYw5s_Yn.js +1 -0
  37. package/web/assets/{use-mobile-A2egKMjY.js → use-mobile-C1OVAMOm.js} +1 -1
  38. package/web/assets/web-preview-panel-uBOnhY4Z.js +556 -0
  39. package/web/assets/{welcome-brand-CYtVVlIL.js → welcome-brand-R7Xflzvb.js} +1 -1
  40. package/web/index.html +10 -10
  41. package/web/assets/PluginsPage-B4cG171E.js +0 -1
  42. package/web/assets/client-store-BSV7t02b.js +0 -1
  43. package/web/assets/index-CAWCOpxG.js +0 -40
  44. package/web/assets/index-DT-gaDrM.css +0 -2
  45. package/web/assets/tool-labels-BJhLig5u.js +0 -1
  46. package/web/assets/use-i18n-yjKc6F2w.js +0 -1
  47. package/web/assets/web-preview-panel-BOmJGqhe.js +0 -556
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mobile-remote-fallback-JvG4VcPg.js","assets/storage-BE5DCCG3.js","assets/ChatDockView-BJGa8Bm8.js","assets/rolldown-runtime-B0Z9INg1.js","assets/vendor-react-CHuvPdJE.js","assets/vendor-router-Bw2aAdMs.js","assets/button-XhIEgIsg.js","assets/vendor-ui-DvrYggeS.js","assets/utils-C8uzG5AZ.js","assets/use-i18n-yjKc6F2w.js","assets/vendor-state-DE1O_s6m.js","assets/collapsible-C4owDMcF.js","assets/es2015-BpePoPbM.js","assets/dist-CyztUDRL.js","assets/web-preview-panel-BOmJGqhe.js","assets/chat-api-Cy0t78Jm.js","assets/api-B6CluO7V.js","assets/abort-signal-f4JsiYKX.js","assets/use-mobile-A2egKMjY.js","assets/AppSelect-CRjRgr38.js","assets/check-jIXqkGKr.js","assets/chevron-down-DT6AXwTP.js","assets/index-CAWCOpxG.js","assets/dist-VQXpFPjV.js","assets/separator-0_agp17Z.js","assets/tooltip-D9uQM6ab.js","assets/panel-left-CVuoi3zo.js","assets/client-store-BSV7t02b.js","assets/x-bw26XDZM.js","assets/input-D1QFzNMx.js","assets/index-DT-gaDrM.css","assets/progress-BqaId9J2.js","assets/scroll-area-DkxdCF8r.js","assets/circle-dot-rl11gaty.js","assets/code-xml-Z4K2ea1N.js","assets/file-C8GNXmhJ.js","assets/loader-circle-72TYCcVQ.js","assets/panel-top-CA2GX1Rj.js","assets/paperclip-BMRj9kRG.js","assets/pencil-CxA1IK0x.js","assets/play-N6mg4pFl.js","assets/send-DcLH_sg0.js","assets/shield-check-BQHFfxVy.js","assets/square-BZ3Bi3O-.js","assets/tag-Csd134FL.js","assets/trash-2-mhzzyC6i.js","assets/wrench-BqeVhocX.js","assets/shortcuts-BIzphxhz.js","assets/vendor-motion-XxgxfZSY.js","assets/MarkdownMessage-BQ_6o9-O.js","assets/copy-DS-8Hh_R.js","assets/vendor-markdown-plugins-Wv1dLaAO.js","assets/vendor-shiki-runtime-CxE5QolQ.js","assets/vendor-markdown-plugins-DEcVZfaU.css","assets/vendor-markdown-Bsw0Ng3w.js","assets/alert-B7D8joCd.js","assets/tool-labels-BJhLig5u.js","assets/welcome-brand-CYtVVlIL.js","assets/speech-session-DpiCjZiC.js","assets/arrow-right-KWvgbo3p.js","assets/earth-DR_clkZ9.js","assets/vendor-dockview-yY5mBM3U.js","assets/vendor-dockview-D5adAaCg.css"])))=>i.map(i=>d[i]);
2
- import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t,t as n}from"./vendor-react-CHuvPdJE.js";import{f as r}from"./vendor-router-Bw2aAdMs.js";import{t as i}from"./chat-api-Cy0t78Jm.js";import{a,n as o,s,t as c}from"./api-B6CluO7V.js";import{t as l}from"./use-i18n-yjKc6F2w.js";import{r as u}from"./use-mobile-A2egKMjY.js";import{S as d,_ as f,b as p,c as m,d as h,f as g,g as _,h as v,i as y,l as b,m as x,n as S,o as C,p as w,s as T,t as E,u as D,v as O,x as k,y as A}from"./web-preview-panel-BOmJGqhe.js";import{t as j}from"./storage-BE5DCCG3.js";import{t as M}from"./WorkspacePicker-BNVaK0c9.js";import{t as N}from"./client-store-BSV7t02b.js";import{G as P,K as F,V as I,W as L,X as R,Y as z,at as B,bt as ee,ct as V,it as H,lt as te,nt as U,ot as W,q as G,r as ne,rt as re,st as ie,tt as ae}from"./index-CAWCOpxG.js";import{t as K}from"./usePagePrimaryAction-Bw0OFTDZ.js";import{t as q}from"./brand-DIEc3fK8.js";import{n as J,t as oe}from"./pick-system-directory-BnIFt85A.js";var Y=e(t(),1);function X(e,t){let n=new Set(t.map(e=>e.id)),r=e.filter(e=>!n.has(e.id));return[...t,...r]}function se(e){for(let t of e){let e=typeof t.cwd==`string`?t.cwd.trim():``;if(e)return e}return``}function ce(e,t){return!e||t?.paired===!0&&t.mode===`remote`}function le(e,t,n=!0){return e||(n?se(t):``)}function ue({notify:e}){let{t}=l(),[n,a]=(0,Y.useState)([]),[o,s]=(0,Y.useState)(()=>localStorage.getItem(j.activeSession)||``),[c,u]=(0,Y.useState)({}),[f,p]=(0,Y.useState)(!0),[m,h]=(0,Y.useState)(``),[g,_]=(0,Y.useState)(()=>t(`chat:chatPage.waitingForConfiguration`)),[y,S]=(0,Y.useState)([]),C=(0,Y.useRef)(n),w=(0,Y.useRef)(c),T=(0,Y.useRef)(new Map),E=(0,Y.useRef)(null),D=(0,Y.useCallback)(e=>{let t=C.current,n=typeof e==`function`?e(t):e;return C.current=n,a(n),n},[]),k=(0,Y.useCallback)(e=>{let t=w.current;w.current=e,u(e);let n=new Set([...Object.keys(t),...Object.keys(e)]);for(let r of n){if(t[r]===e[r])continue;let n=T.current.get(r);if(n)for(let e of[...n])e()}},[]),A=(0,Y.useCallback)((e,t)=>{let n=T.current.get(e)||new Set;return n.add(t),T.current.set(e,n),()=>{n.delete(t),n.size||T.current.delete(e)}},[]),M=(0,Y.useCallback)(e=>w.current[e]||x,[]),N=(0,Y.useCallback)((e,t)=>{if(!e)return;let n=w.current,r=n[e]||x,i=v(r,t);i!==r&&k({...n,[e]:i})},[k]),P=(0,Y.useCallback)((e,{panelOpen:t=!1,localStreamOwned:n=!1}={})=>{if(!e||t||n)return!1;let r=w.current,i=r[e];if(!i||O(i))return!1;let a={...r};return delete a[e],k(a),!0},[k]),I=(0,Y.useCallback)(async(e,{preserveExistingOnEmpty:t=!1}={})=>{let n=await i.listSessions(),r=t&&!n.sessions.length&&C.current.length?C.current:n.sessions;return D(r),s(e||(e=>r.some(t=>t.id===e)?e:r[0]?.id||``)),G(),r},[D]),L=(0,Y.useCallback)((n=``,{inheritRecentCwd:r=!0}={})=>{if(E.current)return E.current;let a=(async()=>{try{h(``);let a=await i.createSession(t(`chat:chatPage.newChat`),le(n,C.current,r));s(a.id),D(e=>X(e,[a])),N(a.id,{messages:[],tools:[],approvals:[],queuedInputs:[],permissionMode:a.permissionMode||`ask`,executionMode:a.executionMode||`approval-required`,runMode:a.runMode||`plan`,goal:a.goal||null,plan:d(a,null),contextUsage:a.contextUsage||null,sessionUsage:a.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:``});try{await I(a.id)}catch(e){h(t(`chat:chatPage.theChatWasCreatedButTheListCouldNotBeRefreshedError`,{error:b(e)}))}return e(t(`chat:chatPage.newChatCreated`)),a.id}catch(e){return h(b(e)),``}})();return E.current=a,a.finally(()=>{E.current===a&&(E.current=null)}),a},[e,I,t,N,D]);(0,Y.useEffect)(()=>{let n=!0;return Promise.all([i.listSessions({refresh:!1}),i.getConfig()]).then(async([a,o])=>{if(!n)return;_(o.model?`${o.provider}/${o.model}`:t(`chat:chatPage.noModelConfigured`)),S(o.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})):[]));let c=a.sessions;if(!c.length&&(E.current||Object.keys(w.current).length)){if(await E.current,!n)return;c=(await i.listSessions()).sessions}if(c.length||(c=[await i.createSession(t(`chat:chatPage.newChat`))]),!n)return;D(e=>X(e,c));for(let e of c)N(e.id,{team:e.team||null,agents:e.agents||[],plan:d(e,null),...e.streaming?{streaming:!0,recovering:!0,loaded:!1,error:``}:{}});let l=localStorage.getItem(j.activeSession),u=new Set([...c.map(e=>e.id),...Object.keys(w.current)]);if(s(e=>u.has(e)?e:l&&u.has(l)?l:c[0]?.id||``),typeof window<`u`&&window.__PISPER_MOBILE_APP__)try{let{consumeRemoteFallbackNotice:n}=await r(async()=>{let{consumeRemoteFallbackNotice:e}=await import(`./mobile-remote-fallback-JvG4VcPg.js`);return{consumeRemoteFallbackNotice:e}},__vite__mapDeps([0,1]));n()&&e(t(`chat:chatPage.remoteUnavailableSwitchedToLocal`))}catch{}}).catch(async e=>{if(n){if(typeof window<`u`&&window.__PISPER_MOBILE_APP__)try{let{fallbackRemoteToLocalAfterFailure:t}=await r(async()=>{let{fallbackRemoteToLocalAfterFailure:e}=await import(`./mobile-remote-fallback-JvG4VcPg.js`);return{fallbackRemoteToLocalAfterFailure:e}},__vite__mapDeps([0,1]));if(await t(e))return}catch{}n&&h(b(e))}}).finally(()=>n&&p(!1)),()=>{n=!1}},[e,t,N,D]),(0,Y.useEffect)(()=>{o&&localStorage.setItem(j.activeSession,o)},[o]);let R=n.find(e=>e.id===o),z=(c[o]||x).model||R?.model||``;return(0,Y.useEffect)(()=>{F(o,z)},[o,z]),(0,Y.useEffect)(()=>(document.title=R?.name?`${R.name} · ${q}`:q,()=>{document.title=q}),[R?.name]),{sessions:n,sessionsRef:C,activeId:o,setActiveId:s,sessionStates:c,sessionStatesRef:w,loading:f,globalError:m,setGlobalError:h,defaultModel:g,availableModels:y,updateSessions:D,replaceSessionStates:k,updateSessionState:N,releaseSessionState:P,subscribeSessionState:A,getSessionState:M,refreshSessions:I,createSessionRecord:L}}function de({sessions:e,sessionsRef:t,sessionStates:n,activeId:r,setActiveId:i,loading:a,localStreamSessionsRef:o,loadSessionMessages:s,releaseSessionState:u,singleSessionLayout:d,notify:f}){let{t:p}=l(),[m,h]=(0,Y.useState)(0),g=(0,Y.useRef)(d);g.current=d;let[_,v]=(0,Y.useState)(()=>window.matchMedia(`(max-width: 900px)`).matches),y=(0,Y.useRef)(null),b=(0,Y.useRef)(!1),x=(0,Y.useRef)([]),C=(0,Y.useRef)(void 0),w=(0,Y.useRef)(null),T=(0,Y.useRef)(null),D=(0,Y.useRef)(null),O=(0,Y.useRef)(_),k=(0,Y.useRef)(null),A=(0,Y.useRef)(!1),[M,N]=(0,Y.useState)(null),[F,I]=(0,Y.useState)(!1),[L,z]=(0,Y.useState)([]);(0,Y.useEffect)(()=>{!d||!r||z(e=>e.includes(r)?e:[...e,r])},[r,d]);let ee=(0,Y.useMemo)(()=>{let t=new Set(e.map(e=>e.id));return[...L,...ie(M?.layout),r].filter((e,n,r)=>e&&t.has(e)&&r.indexOf(e)===n)},[r,L,e,M]);(0,Y.useEffect)(()=>{let e=!0;return c(`/api/settings/chat-dock-layout`).then(t=>{e&&(N(B(t)),I(!0))}).catch(()=>{e&&I(!0)}),()=>{e=!1}},[]),(0,Y.useEffect)(()=>{let e=window.matchMedia(`(max-width: 900px)`),t=()=>{O.current=e.matches,v(e.matches)};return t(),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let G=(0,Y.useCallback)(()=>{A.current||(A.current=!0,(async()=>{do{for(;k.current;){let e=k.current;k.current=null;try{await c(`/api/settings/chat-dock-layout`,{method:`PUT`,body:e})}catch{}}A.current=!1,k.current&&(A.current=!0)}while(A.current)})())},[]),ne=(0,Y.useCallback)(e=>{k.current=e,G()},[G]),K=(0,Y.useCallback)((e=y.current)=>{if(!b.current)return!1;window.clearTimeout(C.current),C.current=void 0;let t=w.current;if(e)try{let n=ae(e.toJSON(),e.activePanel?.id||``);t=JSON.stringify(n)}catch{}return t?(ne(t),w.current=null,!0):!1},[ne]),q=(0,Y.useCallback)((e=y.current)=>{if(!e||!b.current)return;let t;try{t=JSON.stringify(ae(e.toJSON(),e.activePanel?.id||``))}catch{return}w.current=t,window.clearTimeout(C.current),C.current=window.setTimeout(()=>{C.current=void 0,!(!b.current||y.current!==e)&&(ne(t),w.current===t&&(w.current=null))},180)},[ne]),J=(0,Y.useCallback)((e,n=`open`)=>{if(g.current)return e&&z(t=>t.includes(e)?t:[...t,e]),i(e),!0;let r=t.current.find(t=>t.id===e),a=y.current;if(!r||!a||!b.current)return T.current={sessionId:e,disposition:n},!1;let o=O.current?`open`:n,c=H(e),l=a.getPanel(c),u=a.activePanel;if(l)return o!==`open`&&(u&&l.id!==u.id?l.api.moveTo({group:u.group,position:U(o)}):l.group.size>1&&l.api.moveTo({group:l.group,position:U(o)})),l.api.setActive(),i(e),!0;let d=o===`open`?a.activeGroup?{referenceGroup:a.activeGroup}:void 0:u?{referencePanel:u,direction:o}:{direction:o};return a.addPanel({id:c,component:`session`,title:r.name||p(`chat:chatPage.untitledChat`),params:{sessionId:e},renderer:`always`,minimumWidth:300,minimumHeight:240,...d?{position:d}:{}}),i(e),s(e,{limit:40}),!0},[s,t,i,p]),oe=(0,Y.useCallback)(e=>{let t=y.current;if(!t||!b.current)return D.current=e,!1;let n=t.getPanel(E),r=S(e.url,p(`common:webPreview.title`));if(n)return n.api.updateParameters({url:e.url}),n.api.setTitle(r),n.api.setActive(),!0;let i=t.activePanel,a=O.current?t.activeGroup?{referenceGroup:t.activeGroup}:void 0:i?{referencePanel:i,direction:`right`}:{direction:`right`};return t.addPanel({id:E,component:`webPreview`,title:r,params:{url:e.url},renderer:`always`,minimumWidth:360,...a?{position:a}:{}}),!0},[p]),X=(0,Y.useCallback)((e,t)=>{let n=y.current?.getPanel(e);if(n){if(O.current){f(p(`chat:chatPage.onNarrowScreensChatsStayInASingleTabGroup`),`info`);return}if(n.group.size<=1){f(p(`chat:chatPage.thisGroupHasOnlyOneChatChooseAnotherChatFromTheSessionListToCreateASplit`),`info`);return}n.api.moveTo({group:n.group,position:U(t)}),n.api.setActive()}},[f,p]),se=(0,Y.useCallback)(e=>{y.current?.getPanel(e)?.api.close()},[]),ce=(0,Y.useCallback)((e,t)=>{if(!t)return;let n=y.current?.getPanel(H(e));n&&n.group!==t&&n.api.moveTo({group:t})},[]),le=(0,Y.useCallback)(e=>u(e,{panelOpen:!!y.current?.getPanel(H(e)),localStreamOwned:o.current.has(e)}),[o,u]),ue=(0,Y.useCallback)(({api:e})=>{y.current&&y.current!==e&&(b.current=!1);for(let e of x.current)e.dispose();x.current=[],y.current=e,x.current.push(e.onDidActivePanelChange(({panel:t})=>{let n=W(t);n&&i(n),q(e)}),e.onDidLayoutChange(()=>q(e)),e.onDidAddPanel(e=>{let t=W(e);t&&s(t,{limit:40})}),e.onDidRemovePanel(e=>{let t=W(e);t&&queueMicrotask(()=>le(t))})),h(e=>e+1)},[s,le,q,i]);return(0,Y.useEffect)(()=>{if(b.current)for(let e of Object.keys(n))le(e)},[le,n]),(0,Y.useEffect)(()=>{let e=e=>{let t=e.detail,n=t?.sessionId||t?.id;n&&(localStorage.removeItem(j.sessionOpenRequest),J(n,t?.disposition||`open`),t?.targetEntryId&&s(n,{force:!0,limit:40}))};return window.addEventListener(P,e),()=>window.removeEventListener(P,e)},[s,J]),(0,Y.useEffect)(()=>{let e=e=>{let t=e.detail;t?.url&&(localStorage.removeItem(j.webPreviewRequest),oe(t))};return window.addEventListener(V,e),()=>window.removeEventListener(V,e)},[oe]),(0,Y.useEffect)(()=>{let e=()=>{document.visibilityState===`hidden`&&K()},t=()=>K();return document.addEventListener(`visibilitychange`,e),window.addEventListener(`pagehide`,t),()=>{document.removeEventListener(`visibilitychange`,e),window.removeEventListener(`pagehide`,t)}},[K]),(0,Y.useEffect)(()=>()=>{let e=y.current;K(e),b.current=!1,window.clearTimeout(C.current),C.current=void 0;for(let e of x.current)e.dispose();x.current=[],y.current=null},[K]),(0,Y.useEffect)(()=>{if(!m||!F||a||b.current||!y.current)return;let t=y.current,n=new Set(e.map(e=>e.id)),i=M;if(i)try{t.fromJSON(i.layout);for(let e of[...t.panels]){if(e.api.component!==`session`)continue;let r=W(e);n.has(r)||t.removePanel(e)}}catch{t.clear()}if(!t.panels.length){let n=re({activeSessionId:r,validSessionIds:e.map(e=>e.id)}),i;for(let r of n){let n=e.find(e=>e.id===r);if(!n)continue;let a=t.addPanel({id:H(r),component:`session`,title:n.name||p(`chat:chatPage.untitledChat`),params:{sessionId:r},renderer:`always`,minimumWidth:300,...i?{position:{referenceGroup:i}}:{},inactive:!!i});i||=a.group}}for(let n of t.panels){let t=e.find(e=>e.id===W(n));t&&n.api.setTitle(t.name||p(`chat:chatPage.untitledChat`))}b.current=!0,localStorage.removeItem(j.chatMode);let o=T.current||R();T.current=null,o?(J(o.sessionId,o.disposition),o.targetEntryId&&s(o.sessionId,{force:!0,limit:40})):(t.getPanel(i?.activePanelId||H(r))||t.panels[0])?.api.setActive();let c=D.current||te();D.current=null,c&&oe(c),q(t)},[r,F,m,s,a,J,oe,q,e,M,p]),(0,Y.useEffect)(()=>{if(!(!b.current||!y.current))for(let t of e)y.current.getPanel(H(t.id))?.api.setTitle(t.name||p(`chat:chatPage.untitledChat`))},[e,p]),{compactDock:_,mobileSessionIds:ee,openSessionInDock:J,splitDockPanel:X,closeDockPanel:se,moveSessionToGroup:ce,onDockReady:ue,getTabContextMenuItems:(0,Y.useCallback)(({panel:e})=>{let t={label:p(`chat:focusSession.closeTab`),action:()=>se(e.id)};return _||e.group.size<=1?[t]:[{label:p(`chat:chatPage.splitToLeft`),action:()=>X(e.id,`left`)},{label:p(`chat:chatPage.splitToRight`),action:()=>X(e.id,`right`)},{label:p(`chat:chatPage.splitToTop`),action:()=>X(e.id,`above`)},{label:p(`chat:chatPage.splitToBottom`),action:()=>X(e.id,`below`)},`separator`,t]},[se,_,X,p])}}function fe(e){return!!e?.agents?.some(e=>[`queued`,`starting`,`running`].includes(String(e.status)))}function pe(e,{localStreamOwned:t=!1}={}){return!e||t?!1:!!(e.recovering||e.streaming||e.approvals?.length||fe(e))}function me(e,t){return Object.hasOwn(e,`team`)?e.team??null:t??null}function he(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 ge(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),...he(e.messages,t.messages)]:he(e.messages,t.messages),c=Math.max(0,s.length-200);return c&&(s=s.slice(c),o+=c),{messages:s,messageStart:o,hasOlder:o>0,olderCursor:o>0?String(o):null}}function _e(e,t,n=new Date().toISOString()){let r=t.finishedAt||e.runFinishedAt||n;return{...f({...e,...ge(e,t)},t),tools:t.streaming?t.tools||[]:w(t.tools||[],{finishedAt:r,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:r,runNotice:t.streaming&&e.runNotice||``,loaded:!0,loading:!1,error:t.error||``,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:me(t,e.team),plan:d(t,e.plan??null),contextUsage:t.contextUsage??e.contextUsage??null,sessionUsage:t.sessionUsage??e.sessionUsage??null,compaction:t.compaction??e.compaction??null,approvals:t.approvals||[],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 ve({sessionStates:e,sessionStatesRef:t,localStreamSessionsRef:n,streamGenerationRef:r,updateSessionState:a,updateSessions:o}){let s=(0,Y.useRef)(new Set),c=(0,Y.useRef)({timer:null,activeSessions:new Set}),l=(0,Y.useCallback)(async(e,{force:t=!1}={})=>{if(!(!e||!t&&n.current.has(e)||s.current.has(e))){s.current.add(e);try{let s=await i.getLiveSession(e);if(!t&&n.current.has(e))return;if(t&&n.current.has(e)){let t=r.current.get(e)||0;r.current.set(e,t+1),n.current.delete(e)}m(e,s),a(e,e=>_e(e,s)),o(t=>t.map(t=>t.id===e?{...t,streaming:s.streaming,model:s.model||t.model,cwd:s.cwd||t.cwd,permissionMode:s.permissionMode||t.permissionMode,executionMode:s.executionMode||t.executionMode,runMode:s.runMode||t.runMode,goal:s.goal??t.goal??null,team:me(s,t.team),plan:d(s,t.plan??null)}:t))}catch(t){n.current.has(e)||a(e,{recovering:!1,loading:!1,error:b(t)})}finally{s.current.delete(e)}}},[n,r,a,o]),u=(0,Y.useCallback)(async(e,{force:n=!1,limit:r=40}={})=>{if(!e)return;let s=t.current[e];if(s?.recovering){await l(e);return}if(!(!n&&(s?.loading||s?.streaming||s?.loaded&&(s.pageSize||0)>=r))){a(e,{loading:!0});try{let n=await i.getMessages(e,{limit:r});a(e,e=>e.streaming?{...e,loaded:!0,loading:!1,pageSize:Math.max(e.pageSize||0,r)}:{...e,...ge(e,n),model:e.model||n.model||void 0,contextUsage:n.contextUsage??e.contextUsage??null,sessionUsage:n.sessionUsage??e.sessionUsage??null,loaded:!0,loading:!1,pageSize:Math.max(e.pageSize||0,r),error:``,olderError:``});let s=t.current[e]?.model||(typeof n.model==`string`?n.model:``);s&&o(t=>t.map(t=>t.id===e&&t.model!==s?{...t,model:s}:t))}catch(t){a(e,{loading:!1,error:b(t)})}}},[t,l,a,o]),f=(0,Y.useCallback)(async e=>{let n=t.current[e];if(!e||!n?.hasOlder||!n.olderCursor||n.loadingOlder)return!1;a(e,{loadingOlder:!0,olderError:``});try{let t=await i.getMessages(e,{limit:40,before:n.olderCursor});return a(e,e=>{let n=new Set(e.messages.map(e=>e.id)),r=[...t.messages.filter(e=>!n.has(e.id)),...e.messages],i=Math.max(0,r.length-200);return{...e,messages:i?r.slice(i):r,messageStart:t.pageInfo.start+i,hasOlder:t.pageInfo.hasMore,olderCursor:t.pageInfo.nextCursor,loadingOlder:!1,olderError:``}}),t.messages.length>0}catch(t){return a(e,{loadingOlder:!1,olderError:b(t)}),!1}},[t,a]),p=(0,Y.useCallback)(()=>{c.current.timer&&window.clearInterval(c.current.timer),c.current.timer=null,c.current.activeSessions.clear()},[]),h=(0,Y.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(!pe(r,{localStreamOwned:n.current.has(e)})){c.current.activeSessions.delete(e);return}await l(e)});Promise.allSettled(e).then(()=>{c.current.activeSessions.size||p()})},2e3))},[n,t,p,l]);return(0,Y.useEffect)(()=>{let t=new Set(Object.keys(e));for(let e of c.current.activeSessions)t.has(e)||c.current.activeSessions.delete(e);for(let[t,r]of Object.entries(e))pe(r,{localStreamOwned:n.current.has(t)})?c.current.activeSessions.add(t):c.current.activeSessions.delete(t);c.current.activeSessions.size?h():p()},[h,n,e,p]),(0,Y.useEffect)(()=>p,[p]),{syncLiveSession:l,loadSessionMessages:u,loadOlderMessages:f,liveSyncInFlightRef:s}}function ye(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 be(e,{intervalMs:t=48}={}){let n=null,r=null,i=ye(()=>{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 xe(e,{intervalMs:t=80}={}){let n=new Map,r=null,i=ye(()=>{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 Se(e){return e>=55296&&e<=56319}function Ce(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&&Se(e.charCodeAt(r-1))?r-1:r}var we=50;function Te(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(we))),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<we||v!=null&&e-v+.001<we){g=l(E);return}_=e;let a=m;p.startsWith(m)||(m=p.slice(0,Ce(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(Se(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&&Se(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 Ee=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(`,`)),De=new Map,Z=[];function Oe(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 ke(e,t){let n=String(t.id||``),r=String(t.operation||``);if(!n||!Ee.has(r))return;let a=Date.parse(String(t.expiresAt||``));if(Number.isFinite(a)&&a<=Date.now()){await i.resolveMobileOperation(e,n,{ok:!1,error:`移动设备操作请求已过期。`});return}try{let a=await Oe(`mobile_execute_device_operation`,{request:{id:n,operation:r,parameters:t.parameters&&typeof t.parameters==`object`?t.parameters:void 0}});await i.resolveMobileOperation(e,n,{ok:!0,result:a})}catch(t){await i.resolveMobileOperation(e,n,{ok:!1,error:t instanceof Error?t.message:String(t)})}finally{Z.push(n),Z.length>128&&Z.splice(0,Z.length-128)}}function Ae(e){let t=String(e.id||``);!t||Z.includes(t)||(Z.push(t),Z.length>128&&Z.splice(0,Z.length-128))}function je(e,t){let n=String(t.id||``);if(!n||Z.includes(n)||De.has(n))return;let r=ke(e,t).catch(()=>{}).finally(()=>De.delete(n));De.set(n,r)}function Me(e){let t=String(e.path||``).trim().replaceAll(`\\`,`/`).toLowerCase();return t?`path:${t}`:`id:${e.id}`}function Q(e,t){return Object.hasOwn(e,`team`)?e.team??null:t??null}function Ne(e,{agentId:t,responseText:n,data:r,finishedAt:i,error:a,preserveDisplayedText:o}){let s=!!a,c=r.lifecycle||e.lifecycle||{},l=f(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:d(r,e.plan),team:Q(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:w(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 Pe({sessionId:e,agentId:t,sessionStatesRef:n,updateSessionState:r,updateSessions:i,typewriter:a,thinkingScheduler:s,toolScheduler:c,t:l}){let u={responseText:``,responseRenderingStreaming:!0,thinkingText:``,thinkingPrefix:``,queuedDuringRun:!1},m=t=>{i(n=>n.map(n=>n.id===e?t(n):n))},_=(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;T({sessionId:e,messageId:t,prompt:s,text:u.responseText,runId:u.runId,startedAt:u.startedAt,status:r,error:i})};return{dispatch:(i,v)=>{let y=new Date().toISOString();if(i===`run`)u.runId=typeof v.runId==`string`?v.runId:void 0,_(`started`);else if(i===`resync_required`)_(`recovering`);else if(i===`meta`)u.startedAt=typeof v.startedAt==`string`?v.startedAt:void 0,_(`started`),r(e,e=>({...f(e,v),model:v.model||e.model,thinkingLevel:v.thinkingLevel||e.thinkingLevel,cwd:v.cwd,permissionMode:v.permissionMode,executionMode:v.executionMode,runMode:v.runMode||e.runMode,goal:v.goal??null,plan:d(v,e.plan),team:Q(v,e.team),agents:v.agents||e.agents||[],currentActivity:v.currentActivity||e.currentActivity||null,activityFeed:v.activityFeed||e.activityFeed||[],lifecycle:v.lifecycle??e.lifecycle??null,sessionTreeRevision:Number(v.sessionTreeRevision??e.sessionTreeRevision??0),thinkingText:v.thinkingText??e.thinkingText??``,contextUsage:v.contextUsage??e.contextUsage??null,sessionUsage:v.sessionUsage??e.sessionUsage??null,runStartedAt:v.startedAt||e.runStartedAt,lastActivityAt:v.lastActivityAt||y})),(v.model||v.thinkingLevel||v.cwd||v.permissionMode||v.executionMode||v.goal!==void 0||v.team!==void 0||k(v)!==void 0)&&m(e=>({...e,model:v.model||e.model,thinkingLevel:v.thinkingLevel||e.thinkingLevel,cwd:v.cwd||e.cwd,permissionMode:v.permissionMode||e.permissionMode,executionMode:v.executionMode||e.executionMode,runMode:v.runMode||e.runMode,goal:v.goal??e.goal??null,team:Q(v,e.team),plan:d(v,e.plan??null)}));else if(i===`queue_update`)v.queuedInputs?.length&&(u.queuedDuringRun=!0),r(e,e=>f(e,{...v,queuedInputs:v.queuedInputs||[]}));else if(i===`agent_update`)r(e,e=>{let t=v.currentActivity||(v.agent?{type:`agent`,agent:v.agent,updatedAt:v.agent.lastActivityAt||y}:null);return{...e,team:Q(v,e.team),agents:v.agents||[],currentActivity:e.currentActivity?.type===`tool`?e.currentActivity:t||e.currentActivity,activityFeed:t?g(e.activityFeed,t):e.activityFeed,lastActivityAt:v.agent?.lastActivityAt||y}}),Object.hasOwn(v,`team`)&&m(e=>({...e,team:Q(v,e.team)}));else if(i===`agent_lifecycle`)r(e,e=>{let t=v.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:v.currentActivity||e.currentActivity,lastActivityAt:t?.updatedAt||y,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(v.revision||0),lastActivityAt:y});else if(i===`thinking_level_changed`)r(e,{thinkingLevel:v.level,lastActivityAt:y}),m(e=>({...e,thinkingLevel:v.level}));else if(i===`context_usage`)r(e,{contextUsage:v});else if(i===`session_usage`)r(e,{sessionUsage:v});else if(i===`compaction_start`)c.flush(),r(e,e=>{let t={type:`compaction`,compaction:v,updatedAt:v.startedAt||y};return{...e,compaction:v,currentActivity:t,activityFeed:g(e.activityFeed,t),lastActivityAt:v.startedAt||y}});else if(i===`compaction_end`)r(e,e=>{let t={type:`model`,stage:`processing_result`,updatedAt:v.finishedAt||y};return{...e,compaction:v,currentActivity:t,activityFeed:g(e.activityFeed,t),lastActivityAt:v.finishedAt||y}});else if(i===`text_patch`)u.responseRenderingStreaming=!0,u.responseText=o(u.responseText,v),_(`streaming`),a.setTarget(u.responseText,y);else if(i===`text_delta`)u.responseText.length,u.responseRenderingStreaming=!0,u.responseText+=v.delta||``,_(`streaming`),a.setTarget(u.responseText,y);else if(i===`text_end`)u.responseText.length,typeof v.text==`string`&&(u.responseText=v.text),u.responseRenderingStreaming=!1,_(`streaming`),a.setTarget(u.responseText,v.updatedAt||y),r(e,e=>({...e,messages:e.messages.map(e=>e.id===t?{...e,streaming:e.text!==u.responseText}:e)}));else if(i===`thinking_reset`)u.thinkingText=``,u.thinkingPrefix=String(v.thinkingText||``).slice(-6e3),s.cancel(),r(e,{thinkingText:u.thinkingPrefix,currentActivity:{type:`model`,stage:`thinking`,updatedAt:v.updatedAt||y},lastActivityAt:v.updatedAt||y});else if(i===`thinking_patch`){u.thinkingText=o(u.thinkingText,v).slice(-6e3);let e=[u.thinkingPrefix,u.thinkingText].filter(Boolean).join(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mobile-remote-fallback-JvG4VcPg.js","assets/storage-BE5DCCG3.js","assets/ChatDockView-Cq7J6Xmn.js","assets/rolldown-runtime-B0Z9INg1.js","assets/vendor-react-CHuvPdJE.js","assets/vendor-router-Bw2aAdMs.js","assets/button-XhIEgIsg.js","assets/vendor-ui-DvrYggeS.js","assets/utils-C8uzG5AZ.js","assets/use-i18n-jYw5s_Yn.js","assets/vendor-state-DE1O_s6m.js","assets/collapsible-U8Wh2f7S.js","assets/es2015-DycjrqX-.js","assets/dist-cR3ayBwn.js","assets/web-preview-panel-uBOnhY4Z.js","assets/chat-api-Cy0t78Jm.js","assets/api-B6CluO7V.js","assets/abort-signal-f4JsiYKX.js","assets/use-mobile-C1OVAMOm.js","assets/AppSelect-kDqZkETY.js","assets/check-jIXqkGKr.js","assets/chevron-down-DT6AXwTP.js","assets/index-Bd5A8V1V.js","assets/dist-Dq4VqZgU.js","assets/separator-Br2F2Mir.js","assets/tooltip-DfGEs0yi.js","assets/client-store-ohgbeJNh.js","assets/panel-left-CVuoi3zo.js","assets/x-bw26XDZM.js","assets/input-D1QFzNMx.js","assets/index-DUhopGVK.css","assets/progress-DQDjWjzV.js","assets/scroll-area-C1DpxpHg.js","assets/circle-dot-rl11gaty.js","assets/code-xml-Z4K2ea1N.js","assets/file-C8GNXmhJ.js","assets/loader-circle-72TYCcVQ.js","assets/panel-top-CA2GX1Rj.js","assets/paperclip-BMRj9kRG.js","assets/pencil-CxA1IK0x.js","assets/play-N6mg4pFl.js","assets/send-DcLH_sg0.js","assets/tool-labels-v0OysnpI.js","assets/shield-check-BQHFfxVy.js","assets/square-BZ3Bi3O-.js","assets/tag-Csd134FL.js","assets/trash-2-mhzzyC6i.js","assets/wrench-BqeVhocX.js","assets/shortcuts-BIzphxhz.js","assets/vendor-motion-XxgxfZSY.js","assets/MarkdownMessage-Dbgb5XkJ.js","assets/copy-DS-8Hh_R.js","assets/vendor-markdown-plugins-Wv1dLaAO.js","assets/vendor-shiki-runtime-CxE5QolQ.js","assets/vendor-markdown-plugins-DEcVZfaU.css","assets/vendor-markdown-Bsw0Ng3w.js","assets/alert-B7D8joCd.js","assets/welcome-brand-R7Xflzvb.js","assets/speech-session-DpiCjZiC.js","assets/arrow-right-KWvgbo3p.js","assets/earth-DR_clkZ9.js","assets/vendor-dockview-yY5mBM3U.js","assets/vendor-dockview-D5adAaCg.css"])))=>i.map(i=>d[i]);
2
+ import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t,t as n}from"./vendor-react-CHuvPdJE.js";import{f as r}from"./vendor-router-Bw2aAdMs.js";import{t as i}from"./chat-api-Cy0t78Jm.js";import{a,n as o,s,t as c}from"./api-B6CluO7V.js";import{t as l}from"./use-i18n-jYw5s_Yn.js";import{r as u}from"./use-mobile-C1OVAMOm.js";import{S as d,_ as f,b as p,c as m,d as h,f as g,g as _,h as v,i as y,l as b,m as x,n as S,o as C,p as w,s as T,t as E,u as D,v as O,x as k,y as A}from"./web-preview-panel-uBOnhY4Z.js";import{t as j}from"./storage-BE5DCCG3.js";import{t as M}from"./WorkspacePicker-Ctf1A8lp.js";import{t as N}from"./client-store-ohgbeJNh.js";import{G as P,K as F,V as I,W as L,X as R,Y as z,at as B,bt as ee,ct as V,it as H,lt as te,nt as U,ot as W,q as G,r as ne,rt as re,st as ie,tt as ae}from"./index-Bd5A8V1V.js";import{t as K}from"./usePagePrimaryAction-Bw0OFTDZ.js";import{t as q}from"./brand-DIEc3fK8.js";import{n as J,t as oe}from"./pick-system-directory-BnIFt85A.js";var Y=e(t(),1);function X(e,t){let n=new Set(t.map(e=>e.id)),r=e.filter(e=>!n.has(e.id));return[...t,...r]}function se(e){for(let t of e){let e=typeof t.cwd==`string`?t.cwd.trim():``;if(e)return e}return``}function ce(e,t){return!e||t?.paired===!0&&t.mode===`remote`}function le(e,t,n=!0){return e||(n?se(t):``)}function ue({notify:e}){let{t}=l(),[n,a]=(0,Y.useState)([]),[o,s]=(0,Y.useState)(()=>localStorage.getItem(j.activeSession)||``),[c,u]=(0,Y.useState)({}),[f,p]=(0,Y.useState)(!0),[m,h]=(0,Y.useState)(``),[g,_]=(0,Y.useState)(()=>t(`chat:chatPage.waitingForConfiguration`)),[y,S]=(0,Y.useState)([]),C=(0,Y.useRef)(n),w=(0,Y.useRef)(c),T=(0,Y.useRef)(new Map),E=(0,Y.useRef)(null),D=(0,Y.useCallback)(e=>{let t=C.current,n=typeof e==`function`?e(t):e;return C.current=n,a(n),n},[]),k=(0,Y.useCallback)(e=>{let t=w.current;w.current=e,u(e);let n=new Set([...Object.keys(t),...Object.keys(e)]);for(let r of n){if(t[r]===e[r])continue;let n=T.current.get(r);if(n)for(let e of[...n])e()}},[]),A=(0,Y.useCallback)((e,t)=>{let n=T.current.get(e)||new Set;return n.add(t),T.current.set(e,n),()=>{n.delete(t),n.size||T.current.delete(e)}},[]),M=(0,Y.useCallback)(e=>w.current[e]||x,[]),N=(0,Y.useCallback)((e,t)=>{if(!e)return;let n=w.current,r=n[e]||x,i=v(r,t);i!==r&&k({...n,[e]:i})},[k]),P=(0,Y.useCallback)((e,{panelOpen:t=!1,localStreamOwned:n=!1}={})=>{if(!e||t||n)return!1;let r=w.current,i=r[e];if(!i||O(i))return!1;let a={...r};return delete a[e],k(a),!0},[k]),I=(0,Y.useCallback)(async(e,{preserveExistingOnEmpty:t=!1}={})=>{let n=await i.listSessions(),r=t&&!n.sessions.length&&C.current.length?C.current:n.sessions;return D(r),s(e||(e=>r.some(t=>t.id===e)?e:r[0]?.id||``)),G(),r},[D]),L=(0,Y.useCallback)((n=``,{inheritRecentCwd:r=!0}={})=>{if(E.current)return E.current;let a=(async()=>{try{h(``);let a=await i.createSession(t(`chat:chatPage.newChat`),le(n,C.current,r));s(a.id),D(e=>X(e,[a])),N(a.id,{messages:[],tools:[],approvals:[],queuedInputs:[],permissionMode:a.permissionMode||`ask`,executionMode:a.executionMode||`approval-required`,runMode:a.runMode||`plan`,goal:a.goal||null,plan:d(a,null),contextUsage:a.contextUsage||null,sessionUsage:a.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:``});try{await I(a.id)}catch(e){h(t(`chat:chatPage.theChatWasCreatedButTheListCouldNotBeRefreshedError`,{error:b(e)}))}return e(t(`chat:chatPage.newChatCreated`)),a.id}catch(e){return h(b(e)),``}})();return E.current=a,a.finally(()=>{E.current===a&&(E.current=null)}),a},[e,I,t,N,D]);(0,Y.useEffect)(()=>{let n=!0;return Promise.all([i.listSessions({refresh:!1}),i.getConfig()]).then(async([a,o])=>{if(!n)return;_(o.model?`${o.provider}/${o.model}`:t(`chat:chatPage.noModelConfigured`)),S(o.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})):[]));let c=a.sessions;if(!c.length&&(E.current||Object.keys(w.current).length)){if(await E.current,!n)return;c=(await i.listSessions()).sessions}if(c.length||(c=[await i.createSession(t(`chat:chatPage.newChat`))]),!n)return;D(e=>X(e,c));for(let e of c)N(e.id,{team:e.team||null,agents:e.agents||[],plan:d(e,null),...e.streaming?{streaming:!0,recovering:!0,loaded:!1,error:``}:{}});let l=localStorage.getItem(j.activeSession),u=new Set([...c.map(e=>e.id),...Object.keys(w.current)]);if(s(e=>u.has(e)?e:l&&u.has(l)?l:c[0]?.id||``),typeof window<`u`&&window.__PISPER_MOBILE_APP__)try{let{consumeRemoteFallbackNotice:n}=await r(async()=>{let{consumeRemoteFallbackNotice:e}=await import(`./mobile-remote-fallback-JvG4VcPg.js`);return{consumeRemoteFallbackNotice:e}},__vite__mapDeps([0,1]));n()&&e(t(`chat:chatPage.remoteUnavailableSwitchedToLocal`))}catch{}}).catch(async e=>{if(n){if(typeof window<`u`&&window.__PISPER_MOBILE_APP__)try{let{fallbackRemoteToLocalAfterFailure:t}=await r(async()=>{let{fallbackRemoteToLocalAfterFailure:e}=await import(`./mobile-remote-fallback-JvG4VcPg.js`);return{fallbackRemoteToLocalAfterFailure:e}},__vite__mapDeps([0,1]));if(await t(e))return}catch{}n&&h(b(e))}}).finally(()=>n&&p(!1)),()=>{n=!1}},[e,t,N,D]),(0,Y.useEffect)(()=>{o&&localStorage.setItem(j.activeSession,o)},[o]);let R=n.find(e=>e.id===o),z=(c[o]||x).model||R?.model||``;return(0,Y.useEffect)(()=>{F(o,z)},[o,z]),(0,Y.useEffect)(()=>(document.title=R?.name?`${R.name} · ${q}`:q,()=>{document.title=q}),[R?.name]),{sessions:n,sessionsRef:C,activeId:o,setActiveId:s,sessionStates:c,sessionStatesRef:w,loading:f,globalError:m,setGlobalError:h,defaultModel:g,availableModels:y,updateSessions:D,replaceSessionStates:k,updateSessionState:N,releaseSessionState:P,subscribeSessionState:A,getSessionState:M,refreshSessions:I,createSessionRecord:L}}function de({sessions:e,sessionsRef:t,sessionStates:n,activeId:r,setActiveId:i,loading:a,localStreamSessionsRef:o,loadSessionMessages:s,releaseSessionState:u,singleSessionLayout:d,notify:f}){let{t:p}=l(),[m,h]=(0,Y.useState)(0),g=(0,Y.useRef)(d);g.current=d;let[_,v]=(0,Y.useState)(()=>window.matchMedia(`(max-width: 900px)`).matches),y=(0,Y.useRef)(null),b=(0,Y.useRef)(!1),x=(0,Y.useRef)([]),C=(0,Y.useRef)(void 0),w=(0,Y.useRef)(null),T=(0,Y.useRef)(null),D=(0,Y.useRef)(null),O=(0,Y.useRef)(_),k=(0,Y.useRef)(null),A=(0,Y.useRef)(!1),[M,N]=(0,Y.useState)(null),[F,I]=(0,Y.useState)(!1),[L,z]=(0,Y.useState)([]);(0,Y.useEffect)(()=>{!d||!r||z(e=>e.includes(r)?e:[...e,r])},[r,d]);let ee=(0,Y.useMemo)(()=>{let t=new Set(e.map(e=>e.id));return[...L,...ie(M?.layout),r].filter((e,n,r)=>e&&t.has(e)&&r.indexOf(e)===n)},[r,L,e,M]);(0,Y.useEffect)(()=>{let e=!0;return c(`/api/settings/chat-dock-layout`).then(t=>{e&&(N(B(t)),I(!0))}).catch(()=>{e&&I(!0)}),()=>{e=!1}},[]),(0,Y.useEffect)(()=>{let e=window.matchMedia(`(max-width: 900px)`),t=()=>{O.current=e.matches,v(e.matches)};return t(),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let G=(0,Y.useCallback)(()=>{A.current||(A.current=!0,(async()=>{do{for(;k.current;){let e=k.current;k.current=null;try{await c(`/api/settings/chat-dock-layout`,{method:`PUT`,body:e})}catch{}}A.current=!1,k.current&&(A.current=!0)}while(A.current)})())},[]),ne=(0,Y.useCallback)(e=>{k.current=e,G()},[G]),K=(0,Y.useCallback)((e=y.current)=>{if(!b.current)return!1;window.clearTimeout(C.current),C.current=void 0;let t=w.current;if(e)try{let n=ae(e.toJSON(),e.activePanel?.id||``);t=JSON.stringify(n)}catch{}return t?(ne(t),w.current=null,!0):!1},[ne]),q=(0,Y.useCallback)((e=y.current)=>{if(!e||!b.current)return;let t;try{t=JSON.stringify(ae(e.toJSON(),e.activePanel?.id||``))}catch{return}w.current=t,window.clearTimeout(C.current),C.current=window.setTimeout(()=>{C.current=void 0,!(!b.current||y.current!==e)&&(ne(t),w.current===t&&(w.current=null))},180)},[ne]),J=(0,Y.useCallback)((e,n=`open`)=>{if(g.current)return e&&z(t=>t.includes(e)?t:[...t,e]),i(e),!0;let r=t.current.find(t=>t.id===e),a=y.current;if(!r||!a||!b.current)return T.current={sessionId:e,disposition:n},!1;let o=O.current?`open`:n,c=H(e),l=a.getPanel(c),u=a.activePanel;if(l)return o!==`open`&&(u&&l.id!==u.id?l.api.moveTo({group:u.group,position:U(o)}):l.group.size>1&&l.api.moveTo({group:l.group,position:U(o)})),l.api.setActive(),i(e),!0;let d=o===`open`?a.activeGroup?{referenceGroup:a.activeGroup}:void 0:u?{referencePanel:u,direction:o}:{direction:o};return a.addPanel({id:c,component:`session`,title:r.name||p(`chat:chatPage.untitledChat`),params:{sessionId:e},renderer:`always`,minimumWidth:300,minimumHeight:240,...d?{position:d}:{}}),i(e),s(e,{limit:40}),!0},[s,t,i,p]),oe=(0,Y.useCallback)(e=>{let t=y.current;if(!t||!b.current)return D.current=e,!1;let n=t.getPanel(E),r=S(e.url,p(`common:webPreview.title`));if(n)return n.api.updateParameters({url:e.url}),n.api.setTitle(r),n.api.setActive(),!0;let i=t.activePanel,a=O.current?t.activeGroup?{referenceGroup:t.activeGroup}:void 0:i?{referencePanel:i,direction:`right`}:{direction:`right`};return t.addPanel({id:E,component:`webPreview`,title:r,params:{url:e.url},renderer:`always`,minimumWidth:360,...a?{position:a}:{}}),!0},[p]),X=(0,Y.useCallback)((e,t)=>{let n=y.current?.getPanel(e);if(n){if(O.current){f(p(`chat:chatPage.onNarrowScreensChatsStayInASingleTabGroup`),`info`);return}if(n.group.size<=1){f(p(`chat:chatPage.thisGroupHasOnlyOneChatChooseAnotherChatFromTheSessionListToCreateASplit`),`info`);return}n.api.moveTo({group:n.group,position:U(t)}),n.api.setActive()}},[f,p]),se=(0,Y.useCallback)(e=>{y.current?.getPanel(e)?.api.close()},[]),ce=(0,Y.useCallback)((e,t)=>{if(!t)return;let n=y.current?.getPanel(H(e));n&&n.group!==t&&n.api.moveTo({group:t})},[]),le=(0,Y.useCallback)(e=>u(e,{panelOpen:!!y.current?.getPanel(H(e)),localStreamOwned:o.current.has(e)}),[o,u]),ue=(0,Y.useCallback)(({api:e})=>{y.current&&y.current!==e&&(b.current=!1);for(let e of x.current)e.dispose();x.current=[],y.current=e,x.current.push(e.onDidActivePanelChange(({panel:t})=>{let n=W(t);n&&i(n),q(e)}),e.onDidLayoutChange(()=>q(e)),e.onDidAddPanel(e=>{let t=W(e);t&&s(t,{limit:40})}),e.onDidRemovePanel(e=>{let t=W(e);t&&queueMicrotask(()=>le(t))})),h(e=>e+1)},[s,le,q,i]);return(0,Y.useEffect)(()=>{if(b.current)for(let e of Object.keys(n))le(e)},[le,n]),(0,Y.useEffect)(()=>{let e=e=>{let t=e.detail,n=t?.sessionId||t?.id;n&&(localStorage.removeItem(j.sessionOpenRequest),J(n,t?.disposition||`open`),t?.targetEntryId&&s(n,{force:!0,limit:40}))};return window.addEventListener(P,e),()=>window.removeEventListener(P,e)},[s,J]),(0,Y.useEffect)(()=>{let e=e=>{let t=e.detail;t?.url&&(localStorage.removeItem(j.webPreviewRequest),oe(t))};return window.addEventListener(V,e),()=>window.removeEventListener(V,e)},[oe]),(0,Y.useEffect)(()=>{let e=()=>{document.visibilityState===`hidden`&&K()},t=()=>K();return document.addEventListener(`visibilitychange`,e),window.addEventListener(`pagehide`,t),()=>{document.removeEventListener(`visibilitychange`,e),window.removeEventListener(`pagehide`,t)}},[K]),(0,Y.useEffect)(()=>()=>{let e=y.current;K(e),b.current=!1,window.clearTimeout(C.current),C.current=void 0;for(let e of x.current)e.dispose();x.current=[],y.current=null},[K]),(0,Y.useEffect)(()=>{if(!m||!F||a||b.current||!y.current)return;let t=y.current,n=new Set(e.map(e=>e.id)),i=M;if(i)try{t.fromJSON(i.layout);for(let e of[...t.panels]){if(e.api.component!==`session`)continue;let r=W(e);n.has(r)||t.removePanel(e)}}catch{t.clear()}if(!t.panels.length){let n=re({activeSessionId:r,validSessionIds:e.map(e=>e.id)}),i;for(let r of n){let n=e.find(e=>e.id===r);if(!n)continue;let a=t.addPanel({id:H(r),component:`session`,title:n.name||p(`chat:chatPage.untitledChat`),params:{sessionId:r},renderer:`always`,minimumWidth:300,...i?{position:{referenceGroup:i}}:{},inactive:!!i});i||=a.group}}for(let n of t.panels){let t=e.find(e=>e.id===W(n));t&&n.api.setTitle(t.name||p(`chat:chatPage.untitledChat`))}b.current=!0,localStorage.removeItem(j.chatMode);let o=T.current||R();T.current=null,o?(J(o.sessionId,o.disposition),o.targetEntryId&&s(o.sessionId,{force:!0,limit:40})):(t.getPanel(i?.activePanelId||H(r))||t.panels[0])?.api.setActive();let c=D.current||te();D.current=null,c&&oe(c),q(t)},[r,F,m,s,a,J,oe,q,e,M,p]),(0,Y.useEffect)(()=>{if(!(!b.current||!y.current))for(let t of e)y.current.getPanel(H(t.id))?.api.setTitle(t.name||p(`chat:chatPage.untitledChat`))},[e,p]),{compactDock:_,mobileSessionIds:ee,openSessionInDock:J,splitDockPanel:X,closeDockPanel:se,moveSessionToGroup:ce,onDockReady:ue,getTabContextMenuItems:(0,Y.useCallback)(({panel:e})=>{let t={label:p(`chat:focusSession.closeTab`),action:()=>se(e.id)};return _||e.group.size<=1?[t]:[{label:p(`chat:chatPage.splitToLeft`),action:()=>X(e.id,`left`)},{label:p(`chat:chatPage.splitToRight`),action:()=>X(e.id,`right`)},{label:p(`chat:chatPage.splitToTop`),action:()=>X(e.id,`above`)},{label:p(`chat:chatPage.splitToBottom`),action:()=>X(e.id,`below`)},`separator`,t]},[se,_,X,p])}}function fe(e){return!!e?.agents?.some(e=>[`queued`,`starting`,`running`].includes(String(e.status)))}function pe(e,{localStreamOwned:t=!1}={}){return!e||t?!1:!!(e.recovering||e.streaming||e.approvals?.length||fe(e))}function me(e,t){return Object.hasOwn(e,`team`)?e.team??null:t??null}function he(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 ge(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),...he(e.messages,t.messages)]:he(e.messages,t.messages),c=Math.max(0,s.length-200);return c&&(s=s.slice(c),o+=c),{messages:s,messageStart:o,hasOlder:o>0,olderCursor:o>0?String(o):null}}function _e(e,t,n=new Date().toISOString()){let r=t.finishedAt||e.runFinishedAt||n;return{...f({...e,...ge(e,t)},t),tools:t.streaming?t.tools||[]:w(t.tools||[],{finishedAt:r,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:r,runNotice:t.streaming&&e.runNotice||``,loaded:!0,loading:!1,error:t.error||``,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:me(t,e.team),plan:d(t,e.plan??null),contextUsage:t.contextUsage??e.contextUsage??null,sessionUsage:t.sessionUsage??e.sessionUsage??null,compaction:t.compaction??e.compaction??null,approvals:t.approvals||[],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 ve({sessionStates:e,sessionStatesRef:t,localStreamSessionsRef:n,streamGenerationRef:r,updateSessionState:a,updateSessions:o}){let s=(0,Y.useRef)(new Set),c=(0,Y.useRef)({timer:null,activeSessions:new Set}),l=(0,Y.useCallback)(async(e,{force:t=!1}={})=>{if(!(!e||!t&&n.current.has(e)||s.current.has(e))){s.current.add(e);try{let s=await i.getLiveSession(e);if(!t&&n.current.has(e))return;if(t&&n.current.has(e)){let t=r.current.get(e)||0;r.current.set(e,t+1),n.current.delete(e)}m(e,s),a(e,e=>_e(e,s)),o(t=>t.map(t=>t.id===e?{...t,streaming:s.streaming,model:s.model||t.model,cwd:s.cwd||t.cwd,permissionMode:s.permissionMode||t.permissionMode,executionMode:s.executionMode||t.executionMode,runMode:s.runMode||t.runMode,goal:s.goal??t.goal??null,team:me(s,t.team),plan:d(s,t.plan??null)}:t))}catch(t){n.current.has(e)||a(e,{recovering:!1,loading:!1,error:b(t)})}finally{s.current.delete(e)}}},[n,r,a,o]),u=(0,Y.useCallback)(async(e,{force:n=!1,limit:r=40}={})=>{if(!e)return;let s=t.current[e];if(s?.recovering){await l(e);return}if(!(!n&&(s?.loading||s?.streaming||s?.loaded&&(s.pageSize||0)>=r))){a(e,{loading:!0});try{let n=await i.getMessages(e,{limit:r});a(e,e=>e.streaming?{...e,loaded:!0,loading:!1,pageSize:Math.max(e.pageSize||0,r)}:{...e,...ge(e,n),model:e.model||n.model||void 0,contextUsage:n.contextUsage??e.contextUsage??null,sessionUsage:n.sessionUsage??e.sessionUsage??null,loaded:!0,loading:!1,pageSize:Math.max(e.pageSize||0,r),error:``,olderError:``});let s=t.current[e]?.model||(typeof n.model==`string`?n.model:``);s&&o(t=>t.map(t=>t.id===e&&t.model!==s?{...t,model:s}:t))}catch(t){a(e,{loading:!1,error:b(t)})}}},[t,l,a,o]),f=(0,Y.useCallback)(async e=>{let n=t.current[e];if(!e||!n?.hasOlder||!n.olderCursor||n.loadingOlder)return!1;a(e,{loadingOlder:!0,olderError:``});try{let t=await i.getMessages(e,{limit:40,before:n.olderCursor});return a(e,e=>{let n=new Set(e.messages.map(e=>e.id)),r=[...t.messages.filter(e=>!n.has(e.id)),...e.messages],i=Math.max(0,r.length-200);return{...e,messages:i?r.slice(i):r,messageStart:t.pageInfo.start+i,hasOlder:t.pageInfo.hasMore,olderCursor:t.pageInfo.nextCursor,loadingOlder:!1,olderError:``}}),t.messages.length>0}catch(t){return a(e,{loadingOlder:!1,olderError:b(t)}),!1}},[t,a]),p=(0,Y.useCallback)(()=>{c.current.timer&&window.clearInterval(c.current.timer),c.current.timer=null,c.current.activeSessions.clear()},[]),h=(0,Y.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(!pe(r,{localStreamOwned:n.current.has(e)})){c.current.activeSessions.delete(e);return}await l(e)});Promise.allSettled(e).then(()=>{c.current.activeSessions.size||p()})},2e3))},[n,t,p,l]);return(0,Y.useEffect)(()=>{let t=new Set(Object.keys(e));for(let e of c.current.activeSessions)t.has(e)||c.current.activeSessions.delete(e);for(let[t,r]of Object.entries(e))pe(r,{localStreamOwned:n.current.has(t)})?c.current.activeSessions.add(t):c.current.activeSessions.delete(t);c.current.activeSessions.size?h():p()},[h,n,e,p]),(0,Y.useEffect)(()=>p,[p]),{syncLiveSession:l,loadSessionMessages:u,loadOlderMessages:f,liveSyncInFlightRef:s}}function ye(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 be(e,{intervalMs:t=48}={}){let n=null,r=null,i=ye(()=>{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 xe(e,{intervalMs:t=80}={}){let n=new Map,r=null,i=ye(()=>{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 Se(e){return e>=55296&&e<=56319}function Ce(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&&Se(e.charCodeAt(r-1))?r-1:r}var we=50;function Te(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(we))),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<we||v!=null&&e-v+.001<we){g=l(E);return}_=e;let a=m;p.startsWith(m)||(m=p.slice(0,Ce(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(Se(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&&Se(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 Ee=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(`,`)),De=new Map,Z=[];function Oe(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 ke(e,t){let n=String(t.id||``),r=String(t.operation||``);if(!n||!Ee.has(r))return;let a=Date.parse(String(t.expiresAt||``));if(Number.isFinite(a)&&a<=Date.now()){await i.resolveMobileOperation(e,n,{ok:!1,error:`移动设备操作请求已过期。`});return}try{let a=await Oe(`mobile_execute_device_operation`,{request:{id:n,operation:r,parameters:t.parameters&&typeof t.parameters==`object`?t.parameters:void 0}});await i.resolveMobileOperation(e,n,{ok:!0,result:a})}catch(t){await i.resolveMobileOperation(e,n,{ok:!1,error:t instanceof Error?t.message:String(t)})}finally{Z.push(n),Z.length>128&&Z.splice(0,Z.length-128)}}function Ae(e){let t=String(e.id||``);!t||Z.includes(t)||(Z.push(t),Z.length>128&&Z.splice(0,Z.length-128))}function je(e,t){let n=String(t.id||``);if(!n||Z.includes(n)||De.has(n))return;let r=ke(e,t).catch(()=>{}).finally(()=>De.delete(n));De.set(n,r)}function Me(e){let t=String(e.path||``).trim().replaceAll(`\\`,`/`).toLowerCase();return t?`path:${t}`:`id:${e.id}`}function Q(e,t){return Object.hasOwn(e,`team`)?e.team??null:t??null}function Ne(e,{agentId:t,responseText:n,data:r,finishedAt:i,error:a,preserveDisplayedText:o}){let s=!!a,c=r.lifecycle||e.lifecycle||{},l=f(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:d(r,e.plan),team:Q(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:w(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 Pe({sessionId:e,agentId:t,sessionStatesRef:n,updateSessionState:r,updateSessions:i,typewriter:a,thinkingScheduler:s,toolScheduler:c,t:l}){let u={responseText:``,responseRenderingStreaming:!0,thinkingText:``,thinkingPrefix:``,queuedDuringRun:!1},m=t=>{i(n=>n.map(n=>n.id===e?t(n):n))},_=(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;T({sessionId:e,messageId:t,prompt:s,text:u.responseText,runId:u.runId,startedAt:u.startedAt,status:r,error:i})};return{dispatch:(i,v)=>{let y=new Date().toISOString();if(i===`run`)u.runId=typeof v.runId==`string`?v.runId:void 0,_(`started`);else if(i===`resync_required`)_(`recovering`);else if(i===`meta`)u.startedAt=typeof v.startedAt==`string`?v.startedAt:void 0,_(`started`),r(e,e=>({...f(e,v),model:v.model||e.model,thinkingLevel:v.thinkingLevel||e.thinkingLevel,cwd:v.cwd,permissionMode:v.permissionMode,executionMode:v.executionMode,runMode:v.runMode||e.runMode,goal:v.goal??null,plan:d(v,e.plan),team:Q(v,e.team),agents:v.agents||e.agents||[],currentActivity:v.currentActivity||e.currentActivity||null,activityFeed:v.activityFeed||e.activityFeed||[],lifecycle:v.lifecycle??e.lifecycle??null,sessionTreeRevision:Number(v.sessionTreeRevision??e.sessionTreeRevision??0),thinkingText:v.thinkingText??e.thinkingText??``,contextUsage:v.contextUsage??e.contextUsage??null,sessionUsage:v.sessionUsage??e.sessionUsage??null,runStartedAt:v.startedAt||e.runStartedAt,lastActivityAt:v.lastActivityAt||y})),(v.model||v.thinkingLevel||v.cwd||v.permissionMode||v.executionMode||v.goal!==void 0||v.team!==void 0||k(v)!==void 0)&&m(e=>({...e,model:v.model||e.model,thinkingLevel:v.thinkingLevel||e.thinkingLevel,cwd:v.cwd||e.cwd,permissionMode:v.permissionMode||e.permissionMode,executionMode:v.executionMode||e.executionMode,runMode:v.runMode||e.runMode,goal:v.goal??e.goal??null,team:Q(v,e.team),plan:d(v,e.plan??null)}));else if(i===`queue_update`)v.queuedInputs?.length&&(u.queuedDuringRun=!0),r(e,e=>f(e,{...v,queuedInputs:v.queuedInputs||[]}));else if(i===`agent_update`)r(e,e=>{let t=v.currentActivity||(v.agent?{type:`agent`,agent:v.agent,updatedAt:v.agent.lastActivityAt||y}:null);return{...e,team:Q(v,e.team),agents:v.agents||[],currentActivity:e.currentActivity?.type===`tool`?e.currentActivity:t||e.currentActivity,activityFeed:t?g(e.activityFeed,t):e.activityFeed,lastActivityAt:v.agent?.lastActivityAt||y}}),Object.hasOwn(v,`team`)&&m(e=>({...e,team:Q(v,e.team)}));else if(i===`agent_lifecycle`)r(e,e=>{let t=v.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:v.currentActivity||e.currentActivity,lastActivityAt:t?.updatedAt||y,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(v.revision||0),lastActivityAt:y});else if(i===`thinking_level_changed`)r(e,{thinkingLevel:v.level,lastActivityAt:y}),m(e=>({...e,thinkingLevel:v.level}));else if(i===`context_usage`)r(e,{contextUsage:v});else if(i===`session_usage`)r(e,{sessionUsage:v});else if(i===`compaction_start`)c.flush(),r(e,e=>{let t={type:`compaction`,compaction:v,updatedAt:v.startedAt||y};return{...e,compaction:v,currentActivity:t,activityFeed:g(e.activityFeed,t),lastActivityAt:v.startedAt||y}});else if(i===`compaction_end`)r(e,e=>{let t={type:`model`,stage:`processing_result`,updatedAt:v.finishedAt||y};return{...e,compaction:v,currentActivity:t,activityFeed:g(e.activityFeed,t),lastActivityAt:v.finishedAt||y}});else if(i===`text_patch`)u.responseRenderingStreaming=!0,u.responseText=o(u.responseText,v),_(`streaming`),a.setTarget(u.responseText,y);else if(i===`text_delta`)u.responseText.length,u.responseRenderingStreaming=!0,u.responseText+=v.delta||``,_(`streaming`),a.setTarget(u.responseText,y);else if(i===`text_end`)u.responseText.length,typeof v.text==`string`&&(u.responseText=v.text),u.responseRenderingStreaming=!1,_(`streaming`),a.setTarget(u.responseText,v.updatedAt||y),r(e,e=>({...e,messages:e.messages.map(e=>e.id===t?{...e,streaming:e.text!==u.responseText}:e)}));else if(i===`thinking_reset`)u.thinkingText=``,u.thinkingPrefix=String(v.thinkingText||``).slice(-6e3),s.cancel(),r(e,{thinkingText:u.thinkingPrefix,currentActivity:{type:`model`,stage:`thinking`,updatedAt:v.updatedAt||y},lastActivityAt:v.updatedAt||y});else if(i===`thinking_patch`){u.thinkingText=o(u.thinkingText,v).slice(-6e3);let e=[u.thinkingPrefix,u.thinkingText].filter(Boolean).join(`
3
3
 
4
- `);s.push(e.slice(-6e3),y)}else if(i===`tool_start`)s.flush(),c.flush(),r(e,e=>{let t={type:`tool`,id:v.id,name:v.name,args:v.args,status:`running`,startedAt:v.startedAt||y,updatedAt:y,...v.output===void 0?{}:{output:v.output}};return{...e,lastActivityAt:y,runNotice:``,tools:g(e.tools,t),currentActivity:t,activityFeed:g(e.activityFeed,t)}});else if(i===`tool_update`)c.push(v.id,{message:v.message||``,updatedAt:v.updatedAt||y,...v.output===void 0?{}:{output:v.output},...v.agent?{agent:v.agent}:{}},v.updatedAt||y);else if(i===`tool_end`)c.flush(),r(e,e=>{let t=e.tools.find(e=>e.id===v.id),n=v.finishedAt||y,r=String(t?.name||``),i=(p(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:v.error?`error`:`done`,message:v.message||t?.message||``,updatedAt:n,finishedAt:n,...v.output===void 0?{}:{output:v.output}},o=v.agent?{type:`agent`,agent:v.agent,updatedAt:v.agent.lastActivityAt||n}:null,s=e.activityFeed||[];return(v.error||!i&&!o)&&(s=g(s,a)),o&&(s=g(s,o)),{...e,lastActivityAt:n,tools:e.tools.map(e=>e.id===v.id?{...e,status:v.error?`error`:`done`,message:v.message||``,updatedAt:n,finishedAt:n,...v.output===void 0?{}:{output:v.output}}:e),currentActivity:v.error?a:o||(i?e.currentActivity:a),activityFeed:s}});else if(i===`mobile_operation_request`)je(e,v);else if(i===`mobile_operation_cancel`)Ae(v);else if(i===`permission_request`)c.flush(),r(e,e=>({...e,lastActivityAt:y,approvals:[...(e.approvals||[]).filter(e=>e.id!==v.id),v]}));else if(i===`permission_resolved`)r(e,e=>({...e,lastActivityAt:y,approvals:(e.approvals||[]).filter(e=>e.id!==v.id)}));else if(i===`generated_asset`)r(e,e=>({...e,lastActivityAt:y,messages:e.messages.map(e=>e.id===t?{...e,attachments:[...(e.attachments||[]).filter(e=>Me(e)!==Me(v)),v]}:e)}));else if(i===`goal_update`)r(e,e=>({...e,goal:v.goal??null,team:Q(v,e.team)})),m(e=>({...e,goal:v.goal??null,team:Q(v,e.team)}));else if(A(i))c.flush(),r(e,e=>{let t=d(v,e.plan),n=v.currentActivity||{type:`plan`,plan:t,changes:h(e.plan,t),updatedAt:t?.updatedAt||y};return{...e,lastActivityAt:y,plan:t,currentActivity:n,activityFeed:g(e.activityFeed,n)}}),m(e=>({...e,plan:d(v,e.plan??null)}));else if(i===`session_title`)m(e=>({...e,name:v.name}));else if(i===`retry`){let t=l(`chat:chatPage.retryingAttemptMaxAttemptsMessage`,{attempt:v.attempt,maxAttempts:v.maxAttempts,message:v.message});r(e,e=>{let n={type:`retry`,message:t,updatedAt:y};return{...e,runNotice:t,currentActivity:n,activityFeed:g(e.activityFeed,n),lastActivityAt:y}})}else if(i===`done`||i===`error`){u.queuedDuringRun||=!!(n.current[e]?.hadQueuedInput||n.current[e]?.queuedInputs?.length);let o=v.finishedAt||y;if(typeof v.text==`string`&&(u.responseText=v.text),u.responseRenderingStreaming=!1,u.terminal=!0,_(i===`done`?`completed`:`failed`,i===`error`?v.message||`Speech response failed.`:void 0),a.setTarget(u.responseText,o),i===`error`&&a.flush(),s.flush(),c.cancel(),r(e,e=>Ne(e,{agentId:t,responseText:u.responseText,data:v,finishedAt:o,preserveDisplayedText:i===`done`,...i===`error`?{error:v.message}:{}})),i===`done`)return m(e=>({...e,streaming:!1,goal:v.goal??e.goal??null,team:Q(v,e.team),plan:d(v,e.plan??null)})),!1;throw Error(v.message)}},state:u}}var Fe=`pisper:usage-updated`;function Ie({browserNotify:e,notify:t,defaultModel:n,localStreamSessionsRef:r,streamGenerationRef:a,sessionStatesRef:o,setActiveId:s,setGlobalError:c,updateSessionState:u,updateSessions:d,createSession:p,loadSessionMessages:m,refreshSessions:h,syncLiveSession:v}){let{t:y}=l(),x=(0,Y.useRef)(new Map),S=(0,Y.useRef)(new Set),C=(0,Y.useCallback)(async(t,l,f=[],_=!1,S=!1,C=null,T=null,E={})=>{let D=E.retryFromIndex,O=D==null?t.trim()||(f.length?y(`chat:chatPage.pleaseAnalyzeTheseAttachments`):``)||(T?T.resourceName:``):t;if(!O&&!T)return;let k=l;if(k||=await p(),!k||o.current[k]?.streaming)return;let A=(a.current.get(k)||0)+1;a.current.set(k,A);let j=!1,M=()=>!j&&a.current.get(k)===A,N=()=>{},P=new Promise(e=>{N=e});x.current.set(k,{promise:P,resolve:N}),s(k),c(``);let F={id:`user-${Date.now()}`,role:`user`,text:O,invocation:T,attachments:f.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}))},I=`agent-${Date.now()}`,L=new Date().toISOString(),R={responseText:``,responseRenderingStreaming:!0,thinkingText:``,thinkingPrefix:``,queuedDuringRun:!1},z=be((e,t)=>{M()&&u(k,n=>M()?{...n,thinkingText:e,lastActivityAt:t||n.lastActivityAt,currentActivity:{type:`model`,stage:`thinking`,updatedAt:t||n.lastActivityAt}}:n)},{intervalMs:80}),B=Te((e,t)=>{M()&&u(k,n=>{if(!M())return n;let r=n.messages.map(t=>t.id===I?{...t,text:e,streaming:R.responseRenderingStreaming||e!==R.responseText}:t);if(R.terminal||!R.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:g(n.activityFeed,i),messages:r}})},{isCurrent:M}),ee=xe((e,t)=>{M()&&u(k,n=>{if(!M())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=g(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}})}),V=Pe({sessionId:k,agentId:I,sessionStatesRef:o,updateSessionState:u,updateSessions:d,typewriter:B,thinkingScheduler:z,toolScheduler:ee,t:y}),H=(e,t)=>M()?e===`resync_required`?(V.dispatch(e,t),j=!0,a.current.delete(k),r.current.delete(k),v(k),!1):V.dispatch(e,t):!1;R=V.state,u(k,e=>{let t=_||S||e.goal?.status===`active`;return{...e,messages:[...D==null?e.messages:e.messages.slice(0,D),F,{id:I,role:`agent`,text:``,streaming:!0}],tools:[],approvals:[],error:``,streaming:!0,loaded:!0,runStartedAt:L,lastActivityAt:L,runFinishedAt:null,runStopped:!1,runNotice:``,currentActivity:{type:`model`,stage:`thinking`,updatedAt:L},activityFeed:[],lifecycle:{phase:`starting`,event:`prompt_submitted`,turn:0,updatedAt:L},thinkingText:``,hadQueuedInput:!1,withdrawnInputIds:[],queuedInputRunId:I,compaction:null,plan:t?e.plan:null}}),!_&&!S&&d(e=>e.map(e=>e.id!==k||e.goal?.status===`active`?e:{...e,plan:null})),r.current.add(k);let te=!1;try{if(D==null?await i.openStream({sessionId:k,message:O,attachments:f,goalMode:_,teamMode:S,goalTokenBudget:C,invocation:T},H):await i.retryLastTurn(k,H),!M())return;R.responseRenderingStreaming=!1,R.terminal=!0,B.setTarget(R.responseText),z.flush(),ee.flush();let t=new Date().toISOString();if(o.current[k]?.streaming&&u(k,e=>{let n=e.runFinishedAt||t;return{...e,streaming:!1,runFinishedAt:n,lastActivityAt:n,runNotice:``,currentActivity:null,activityFeed:[],approvals:[],tools:w(e.tools,{finishedAt:n}),messages:e.messages.map(e=>e.id===I?{...e,streaming:e.text!==R.responseText}:e)}}),!await B.drain()||!M()||(u(k,e=>({...e,messages:e.messages.map(e=>e.id===I?{...e,text:R.responseText,streaming:!1}:e)})),!M()))return;(_||S||R.queuedDuringRun||o.current[k]?.hadQueuedInput||o.current[k]?.goal||o.current[k]?.queuedInputs?.length)&&u(k,{queuedInputs:[],hadQueuedInput:!1});let r;try{r=(await h()).find(e=>e.id===k)}catch{v(k)}if(!M())return;e?.(`chat.completed`,{chat:{title:r?.name||y(`chat:chatPage.appChat`,{app:`Pisper`}),summary:R.responseText.trim().slice(0,260)||y(`chat:chatPage.theAgentHasFinishedResponding`),model:o.current[k]?.model||n}})}catch(e){if(!M())return;if((R.runId||R.startedAt)&&!R.terminal){V.dispatch(`resync_required`,{}),j=!0,a.current.delete(k),r.current.delete(k),v(k);return}te=!0,B.cancel(),z.flush(),ee.cancel();let t=new Date().toISOString(),n=b(e);if(u(k,e=>({...e,streaming:!1,error:n,runFinishedAt:t,lastActivityAt:t,runNotice:``,currentActivity:null,activityFeed:[],approvals:[],tools:w(e.tools,{finishedAt:t,error:n}),messages:e.messages.map(e=>e.id===I?{...e,streaming:!1,error:n,text:e.text||R.responseText||n}:e)})),R.queuedDuringRun||o.current[k]?.hadQueuedInput||o.current[k]?.queuedInputs?.length){try{await m(k,{force:!0})}catch{}u(k,{queuedInputs:[],hadQueuedInput:!1})}d(e=>e.map(e=>e.id===k?{...e,streaming:!1}:e))}finally{let e=M();j=!0,e&&(r.current.delete(k),a.current.delete(k),u(k,{streaming:!1,hadQueuedInput:!1}),x.current.get(k)?.promise===P&&x.current.delete(k)),B.cancel(),z.cancel(),ee.cancel(),N(),window.dispatchEvent(new Event(Fe)),te&&e&&v(k)}},[e,p,n,m,r,h,a,o,s,c,v,y,u,d]),T=(0,Y.useCallback)(async(e,n,r=[],a=`steer`)=>{let s=String(e||``).trim()||(r.length?y(`chat:chatPage.pleaseAnalyzeTheseAttachments`):``);if(!n||!s)return!1;let c=o.current[n]?.queuedInputRunId;try{let e=await i.queueInput(n,s,r,a),t=new Date().toISOString(),o={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||a,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 u(n,n=>{let r=f(n,e),i=!r.withdrawnInputIds?.includes(e.inputId)&&n.queuedInputRunId===c;return{...r,messages:i?_(r.messages,o):r.messages,hadQueuedInput:!0,lastActivityAt:t}}),!0}catch(e){if(D(e)){let e=x.current.get(n);return e?await e.promise:await v(n),u(n,{streaming:!1,recovering:!1,queuedInputs:[],hadQueuedInput:!1}),await m(n,{force:!0}),C(s,n,r),!0}return t(b(e),`error`),!1}},[m,t,C,o,v,y,u]),E=(0,Y.useCallback)(async e=>{if(!e)return;let n=await i.abort(e);await v(e,{force:!0});let r=new Date().toISOString();u(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:w(e.tools,{finishedAt:r,error:y(`chat:chatPage.stopped`)}),messages:e.messages.map(e=>e.streaming?{...e,streaming:!1}:e)})),d(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(y(`chat:chatPage.currentRunStopped`),`info`)},[t,v,y,u,d]),O=(0,Y.useCallback)(async(e,n)=>{let r=`${e}/${n}`;if(!e||!n||S.current.has(r))return null;S.current.add(r),u(e,e=>({...e,withdrawingInputIds:[...e.withdrawingInputIds||[],n]}));try{let r=await i.withdrawQueuedInput(e,n);return u(e,e=>f(e,{...r,removedInputId:r.removed?n:void 0})),r.removed?r.withdrawnInput||null:(t(y(`chat:focusSession.queuedInputAlreadyConsumed`),`info`),null)}catch(e){return t(b(e),`error`),null}finally{S.current.delete(r),u(e,e=>({...e,withdrawingInputIds:(e.withdrawingInputIds||[]).filter(e=>e!==n)}))}},[t,y,u]);return{sendPrompt:C,retryLastTurn:(0,Y.useCallback)(async e=>{let t=o.current[e];if(!t||t.streaming)return;let n=t.messages||[],r=-1;for(let e=n.length-1;e>=0;--e)if(n[e]?.role===`user`){r=e;break}if(r<0)return;let i=n[r];await C(i.text||``,e,i.attachments||[],!1,!1,null,null,{retryFromIndex:r})},[C,o]),queuePrompt:T,withdrawQueuedInput:O,abort:E}}function Le({notify:e,requestText:t,requestConfirm:n,availableModels:r,sessionStatesRef:o,updateSessionState:s,updateSessions:c,replaceSessionStates:u,setGlobalError:d,syncLiveSession:f}){let{t:p,language:m}=l(),[h,g]=(0,Y.useState)(null),_=(0,Y.useCallback)((e,t)=>{c(n=>n.map(n=>n.id===e?t(n):n))},[c]),v=(0,Y.useCallback)(async t=>{if(t)try{let n=await i.pauseGoal(t);s(t,{goal:n.goal||null}),_(t,e=>({...e,goal:n.goal||null})),e(p(`chat:chatPage.goalPaused`),`info`)}catch(e){s(t,{error:b(e)})}},[e,p,s,_]),y=(0,Y.useCallback)(async(t,n)=>{if(t)try{let r=await i.setGoalBudget(t,n);s(t,{goal:r.goal||null}),_(t,e=>({...e,goal:r.goal||null})),e(p(`chat:chatPage.goalTokenBudgetUpdated`),`info`)}catch(e){s(t,{error:b(e)})}},[e,p,s,_]),x=(0,Y.useCallback)(async t=>{let n=o.current[t];if(!(!t||n?.streaming||n?.compaction?.active)){s(t,{compaction:{...n?.compaction||{},active:!0,status:`running`,reason:`manual`},error:``});try{let n=await i.compactSession(t);s(t,{compaction:n.compaction||null,contextUsage:n.contextUsage||null}),e(p(`chat:chatPage.contextCompacted`))}catch(e){await f(t).catch(()=>{}),s(t,{error:b(e)})}}},[e,o,f,p,s]),S=(0,Y.useCallback)(async e=>{let t=await i.updateCompactionPreference(e);u(Object.fromEntries(Object.entries(o.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]})))},[u,o]),C=(0,Y.useCallback)((e,t={})=>{let n=String(t.model||``),r=String(o.current[e]?.model||``);if(n&&r&&n!==r)return;let i=Array.isArray(t.availableThinkingLevels)?t.availableThinkingLevels.map(e=>String(e)):Array.isArray(t.availableLevels)?t.availableLevels.map(e=>String(e)):[],a=String(t.thinkingLevel||``);s(e,{thinkingLevel:a||void 0,availableThinkingLevels:i,thinkingStatus:String(t.thinkingStatus||t.status||``),thinkingMessage:String(t.thinkingMessage||t.message||``),switchingThinking:!1}),a&&_(e,e=>({...e,thinkingLevel:a}))},[o,s,_]),w=(0,Y.useCallback)(async e=>{if(!(!e||o.current[e]?.streaming))try{let t=await i.getThinkingLevel(e);C(e,t)}catch{s(e,{thinkingStatus:`error`,thinkingMessage:p(`chat:focusSession.thinkingLevelsLoadFailed`)})}},[C,o,p,s]),T=(0,Y.useCallback)(async(t,a)=>{let c=r.find(e=>e.key===a);if(!t||!c||o.current[t]?.streaming)return;let l=o.current[t],u=l?.model||``,d=!!l?.messages?.length&&!l?.compaction?.active;s(t,{switchingModel:!0,model:c.key,error:``}),_(t,e=>({...e,model:c.key}));try{let r=await i.updateModel(t,c.provider,c.modelId);s(t,{model:r.model||c.key,contextUsage:r.contextUsage??null,switchingModel:!1}),_(t,e=>({...e,model:r.model||c.key})),C(t,r),e(p(`chat:chatPage.switchedToModel`,{model:c.label})),d&&await n({title:p(`chat:chatPage.compactAfterModelSwitch`),message:p(`chat:chatPage.compactAfterModelSwitchDescription`),confirmLabel:p(`chat:chatPage.compactNow`),tone:`primary`})&&await x(t)}catch(e){s(t,{switchingModel:!1,model:u||void 0,error:b(e)}),u&&_(t,e=>({...e,model:u}))}},[C,r,x,e,n,o,p,s,_]),E=(0,Y.useCallback)(async(t,n)=>{let r=String(n||``).trim();if(!t||!r||o.current[t]?.streaming)return;let a=o.current[t]||{},c=String(a.thinkingLevel||``);s(t,{switchingThinking:!0,thinkingLevel:r,error:``}),_(t,e=>({...e,thinkingLevel:r}));try{let n=await i.setThinkingLevel(t,r);C(t,n),e(p(`chat:chatPage.switchedToThinkingLevel`,{level:String(n.thinkingLevel||r)}))}catch(e){s(t,{switchingThinking:!1,thinkingLevel:c||void 0,error:b(e)}),c&&_(t,e=>({...e,thinkingLevel:c}))}},[C,e,o,p,s,_]),D=(0,Y.useCallback)(async(t,r)=>{if(!t)return!1;s(t,{switchingPermission:!0,error:``});try{if(r===`full-access`&&!await n({title:p(`chat:chatPage.enableFullAccess`),message:p(`chat:chatPage.fullAccessAllowsTheAgentToUseFilesAndNetworkServicesOutsideTheWorkspaceAndShellCommandsWillNoLon`),confirmLabel:p(`chat:chatPage.enableFullAccess`)}))return s(t,{switchingPermission:!1}),!1;let a=await i.updateExecutionMode(t,r);return s(t,{executionMode:a.executionMode,permissionMode:a.permissionMode,switchingPermission:!1}),_(t,e=>({...e,executionMode:a.executionMode,permissionMode:a.permissionMode})),e(p(`chat:chatPage.executionModeChangedToMode`,{mode:a.executionMode===`approval-required`?p(`chat:chatPage.approvalRequired`):a.executionMode===`workspace-write`?p(`chat:focusSession.workspaceWrite`):p(`chat:chatPage.fullAccess`)})),!0}catch(e){return s(t,{switchingPermission:!1,error:b(e)}),!1}},[e,n,p,s,_]),O=(0,Y.useCallback)(async(e,t)=>{if(!e)return!1;try{let n=await i.updateRunMode(e,t),r=String(n.runMode||t);return s(e,{runMode:r}),_(e,e=>({...e,runMode:r})),!0}catch(t){return s(e,{error:b(t)}),!1}},[s,_]),k=(0,Y.useCallback)(async(t,n,r)=>{s(t,e=>({...e,approvals:(e.approvals||[]).filter(e=>e.id!==n),error:``}));try{(await i.resolveApproval(t,n,r)).alreadyResolved&&f(t)}catch(n){if(await f(t),n instanceof a&&n.status===404){e(p(`chat:chatPage.approvalStatusUpdated`),`info`);return}throw s(t,{error:b(n)}),n}},[e,f,p,s]),A=(0,Y.useCallback)(async(t,n)=>{if(!(!t?.id||o.current[t.id]?.streaming)){s(t.id,{switchingCwd:!0,error:``});try{let r=await i.updateCwd(t.id,n);s(t.id,{cwd:r.cwd,switchingCwd:!1}),_(t.id,e=>({...e,cwd:r.cwd})),g(null),e(p(`chat:chatPage.workingDirectoryChangedToWorkspace`,{workspace:I(r.cwd,m)}))}catch(e){throw s(t.id,{switchingCwd:!1,error:b(e)}),e}}},[m,e,o,p,s,_]);return{workspaceSession:h,setWorkspaceSession:g,switchSessionCwd:A,selectSessionWorkspace:(0,Y.useCallback)(async t=>{if(t?.id){if(o.current[t.id]?.streaming){e(p(`chat:chatPage.stopTheActiveRunBeforeChangingTheWorkspace`),`info`);return}if(!oe()){g(t);return}try{let e=await J(t.cwd);e&&await A(t,e)}catch(e){s(t.id,{switchingCwd:!1,error:b(e)})}}},[e,o,A,p,s]),renameSession:(0,Y.useCallback)(async n=>{if(!n?.id)return;if(o.current[n.id]?.streaming){e(p(`chat:chatPage.stopTheActiveRunBeforeRenamingTheChat`),`info`);return}let r=await t({title:p(`chat:chatPage.renameChat`),inputLabel:p(`chat:chatPage.chatTitle`),value:n.name,confirmLabel:p(`chat:chatPage.save`)});if(r!==null&&r!==n.name)try{let t=await i.renameSession(n.id,r);_(n.id,e=>({...e,name:t.name})),G(),e(p(`chat:chatPage.chatTitleUpdated`))}catch(e){d(b(e))}},[e,t,o,d,p,_]),pauseGoal:v,setGoalBudget:y,compactSession:x,setCompactionThreshold:S,loadSessionThinkingLevel:w,switchSessionModel:T,switchSessionThinkingLevel:E,switchSessionExecutionMode:D,switchSessionRunMode:O,resolveToolApproval:k}}var $=n(),Re=(0,Y.lazy)(()=>r(()=>import(`./ChatDockView-BJGa8Bm8.js`).then(e=>({default:e.ChatDockView})),__vite__mapDeps([2,3,4,5,6,7,8,9,10,1,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])));function ze(e){let t=window.__TAURI__?.core?.invoke??window.__TAURI_INTERNALS__?.invoke;return t?t(e):Promise.reject(Error(`native bridge unavailable`))}function Be({notify:e,navigate:t,browserNotify:n,registerPrimaryAction:r,pendingAsset:a,onAssetConsumed:o,requestText:c,requestConfirm:d}){let{t:f}=l(),p=N(e=>e.client===`mobile-app`),m=N(e=>e.loaded),h=u(),g=p||h,_=(0,Y.useRef)(new Set),v=(0,Y.useRef)(new Map),b=(0,Y.useRef)(null),x=ue({notify:e}),S=ve({sessionStates:x.sessionStates,sessionStatesRef:x.sessionStatesRef,localStreamSessionsRef:_,streamGenerationRef:v,updateSessionState:x.updateSessionState,updateSessions:x.updateSessions}),w=de({sessions:x.sessions,sessionsRef:x.sessionsRef,sessionStates:x.sessionStates,activeId:x.activeId,setActiveId:x.setActiveId,loading:x.loading,localStreamSessionsRef:_,loadSessionMessages:S.loadSessionMessages,releaseSessionState:x.releaseSessionState,singleSessionLayout:g,notify:e}),T=x.createSessionRecord,E=S.loadSessionMessages,D=x.refreshSessions,O=x.sessionStatesRef,k=S.syncLiveSession,A=x.setGlobalError,j=w.openSessionInDock,P=w.moveSessionToGroup,[F,I]=(0,Y.useState)({sessionId:``,token:0}),R=(0,Y.useCallback)(async(e,t=``)=>{let n=null;p&&(n=await ze(`mobile_state`).catch(()=>null));let r=ce(p,n),i=await T(t,{inheritRecentCwd:r});return i?(j(i)&&P(i,e),i):``},[T,p,P,j]);K(r,R);let B=Ie({browserNotify:n,notify:e,defaultModel:x.defaultModel,localStreamSessionsRef:_,streamGenerationRef:v,sessionStatesRef:x.sessionStatesRef,setActiveId:x.setActiveId,setGlobalError:x.setGlobalError,updateSessionState:x.updateSessionState,updateSessions:x.updateSessions,createSession:R,loadSessionMessages:S.loadSessionMessages,refreshSessions:x.refreshSessions,syncLiveSession:S.syncLiveSession}),{sendPrompt:V}=B;(0,Y.useEffect)(()=>{let e=()=>{let e=z();e&&(async()=>{let t=await R(void 0,e.cwd);t&&e.prompt&&V(e.prompt,t)})()};return window.addEventListener(L,e),e(),()=>window.removeEventListener(L,e)},[R,V]);let H=Le({notify:e,requestText:c,requestConfirm:d,availableModels:x.availableModels,sessionStatesRef:x.sessionStatesRef,updateSessionState:x.updateSessionState,updateSessions:x.updateSessions,replaceSessionStates:x.replaceSessionStates,setGlobalError:x.setGlobalError,syncLiveSession:S.syncLiveSession}),te=(0,Y.useCallback)(()=>{if(document.visibilityState!==`visible`||b.current)return;let e=(async()=>{p&&await s().catch(()=>void 0);let e=[];try{e=await D(void 0,{preserveExistingOnEmpty:!0})}catch{}let t=new Set([...Object.keys(O.current),...x.activeId?[x.activeId]:[],...e.filter(e=>e.streaming).map(e=>e.id)]);await Promise.allSettled(Array.from(t).map(e=>k(e,{force:!0})))})().finally(()=>{b.current=null});b.current=e},[x.activeId,p,D,O,k]);(0,Y.useEffect)(()=>{let e=()=>te();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)}},[te]);let U=(0,Y.useCallback)(async e=>{await E(e,{force:!0}),await D(e)},[E,D]),W=(0,Y.useCallback)(async(t,n)=>{if(!(!t?.id||!n))try{if(A(``),(await i.navigateSessionTree(t.id,n,!1)).cancelled)return;await U(t.id),I(e=>({sessionId:t.id,token:e.token+1})),e(f(`chat:chatPage.branchedFromNode`))}catch(e){A(e instanceof Error?e.message:String(e))}},[e,U,A,f]),G=(0,Y.useCallback)(async(t,n)=>{if(!t?.id||!n)return;let r=await c({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{A(``);let a=await i.deriveSession(t.id,n,r);await D(a.id),I(e=>({sessionId:t.id,token:e.token+1})),await new Promise(e=>window.setTimeout(e,550)),j(a.id),e(f(`chat:chatPage.childChatCreated`))}catch(e){A(e instanceof Error?e.message:String(e))}},[e,j,D,c,A,f]),re=(0,Y.useCallback)(()=>t(`config`),[t]),ie=(0,Y.useMemo)(()=>({sessions:x.sessions,subscribeSessionState:x.subscribeSessionState,getSessionState:x.getSessionState,defaultModel:x.defaultModel,availableModels:x.availableModels,globalError:x.globalError,activeId:x.activeId,compactDock:w.compactDock,sessionTreePulseSessionId:F.sessionId,sessionTreePulseToken:F.token,pendingAsset:a,onAssetConsumed:o,notify:e,openModelSettings:re,loadSessionMessages:S.loadSessionMessages,loadOlderMessages:S.loadOlderMessages,sendPrompt:B.sendPrompt,retryLastTurn:B.retryLastTurn,queuePrompt:B.queuePrompt,withdrawQueuedInput:B.withdrawQueuedInput,abort:B.abort,pauseGoal:H.pauseGoal,setGoalBudget:H.setGoalBudget,compactSession:H.compactSession,setCompactionThreshold:H.setCompactionThreshold,switchSessionModel:H.switchSessionModel,loadSessionThinkingLevel:H.loadSessionThinkingLevel,switchSessionThinkingLevel:H.switchSessionThinkingLevel,switchSessionExecutionMode:H.switchSessionExecutionMode,switchSessionRunMode:H.switchSessionRunMode,resolveToolApproval:H.resolveToolApproval,selectSessionWorkspace:H.selectSessionWorkspace,renameSession:H.renameSession,branchFromEntry:W,createChildSession:G,reloadSessionBranch:U,splitDockPanel:w.splitDockPanel,closeDockPanel:w.closeDockPanel}),[x.sessions,x.subscribeSessionState,x.getSessionState,x.defaultModel,x.availableModels,x.globalError,x.activeId,w.compactDock,w.splitDockPanel,w.closeDockPanel,F.sessionId,F.token,a,o,e,re,S.loadSessionMessages,S.loadOlderMessages,B.sendPrompt,B.retryLastTurn,B.queuePrompt,B.withdrawQueuedInput,B.abort,H.pauseGoal,H.setGoalBudget,H.compactSession,H.setCompactionThreshold,H.switchSessionModel,H.loadSessionThinkingLevel,H.switchSessionThinkingLevel,H.switchSessionExecutionMode,H.switchSessionRunMode,H.resolveToolApproval,H.selectSessionWorkspace,H.renameSession,W,G,U]);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{className:`chat-layout max-[900px]:grid-cols-[minmax(0,1fr)] max-[650px]:flex max-[650px]:flex-col max-[650px]:min-h-0 relative grid w-full min-w-0 min-h-0 flex-1 grid-cols-[minmax(0,1fr)] gap-[0] dock-layout`,children:x.loading?(0,$.jsxs)(ne,{children:[(0,$.jsx)(ee,{className:`animate-spin`,size:24}),(0,$.jsx)(`h2`,{children:f(`chat:chatPage.wakingTheAgent`)}),(0,$.jsx)(`p`,{children:f(`chat:chatPage.modelsSessionsAndContextAreSettlingIntoPlace`)})]}):(0,$.jsx)(`div`,{className:`chat-dock-workspace max-[650px]:[flex:1_1_0] max-[650px]:min-h-0 relative min-w-0 min-h-0 [isolation:isolate] overflow-hidden [border:1px_solid_var(--stroke-soft)] rounded-[var(--r-md)] bg-[var(--panel)]`,children:(0,$.jsx)(C.Provider,{value:ie,children:m&&g?(0,$.jsx)(y,{sessionIds:w.mobileSessionIds,onSelectSession:j,onCreateSession:R}):m?(0,$.jsx)(Y.Suspense,{fallback:null,children:(0,$.jsx)(Re,{compactDock:w.compactDock,onDockReady:w.onDockReady,getTabContextMenuItems:w.getTabContextMenuItems,createSession:R})}):null})})}),H.workspaceSession&&(0,$.jsx)(M,{open:!0,initialPath:H.workspaceSession.cwd,description:f(`common:workspacePicker.selectWorkspaceForChat`,{name:H.workspaceSession.name}),onOpenChange:e=>!e&&H.setWorkspaceSession(null),onSelect:e=>H.switchSessionCwd(H.workspaceSession,e)})]})}export{Be as ChatPage};
4
+ `);s.push(e.slice(-6e3),y)}else if(i===`tool_start`)s.flush(),c.flush(),r(e,e=>{let t={type:`tool`,id:v.id,name:v.name,args:v.args,status:`running`,startedAt:v.startedAt||y,updatedAt:y,...v.output===void 0?{}:{output:v.output}};return{...e,lastActivityAt:y,runNotice:``,tools:g(e.tools,t),currentActivity:t,activityFeed:g(e.activityFeed,t)}});else if(i===`tool_update`)c.push(v.id,{message:v.message||``,updatedAt:v.updatedAt||y,...v.output===void 0?{}:{output:v.output},...v.agent?{agent:v.agent}:{},...v.previewImage?{previewImage:v.previewImage}:{},...v.target?{target:v.target}:{}},v.updatedAt||y);else if(i===`tool_end`)c.flush(),r(e,e=>{let t=e.tools.find(e=>e.id===v.id),n=v.finishedAt||y,r=String(t?.name||``),i=(p(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:v.error?`error`:`done`,message:v.message||t?.message||``,updatedAt:n,finishedAt:n,...v.output===void 0?{}:{output:v.output},...v.previewImage?{previewImage:v.previewImage}:{},...v.target?{target:v.target}:{}},o=v.agent?{type:`agent`,agent:v.agent,updatedAt:v.agent.lastActivityAt||n}:null,s=e.activityFeed||[];return(v.error||!i&&!o)&&(s=g(s,a)),o&&(s=g(s,o)),{...e,lastActivityAt:n,tools:e.tools.map(e=>e.id===v.id?{...e,status:v.error?`error`:`done`,message:v.message||``,updatedAt:n,finishedAt:n,...v.output===void 0?{}:{output:v.output},...v.previewImage?{previewImage:v.previewImage}:{},...v.target?{target:v.target}:{}}:e),currentActivity:v.error?a:o||(i?e.currentActivity:a),activityFeed:s}});else if(i===`mobile_operation_request`)je(e,v);else if(i===`mobile_operation_cancel`)Ae(v);else if(i===`permission_request`)c.flush(),r(e,e=>({...e,lastActivityAt:y,approvals:[...(e.approvals||[]).filter(e=>e.id!==v.id),v]}));else if(i===`permission_resolved`)r(e,e=>({...e,lastActivityAt:y,approvals:(e.approvals||[]).filter(e=>e.id!==v.id)}));else if(i===`generated_asset`)r(e,e=>({...e,lastActivityAt:y,messages:e.messages.map(e=>e.id===t?{...e,attachments:[...(e.attachments||[]).filter(e=>Me(e)!==Me(v)),v]}:e)}));else if(i===`goal_update`)r(e,e=>({...e,goal:v.goal??null,team:Q(v,e.team)})),m(e=>({...e,goal:v.goal??null,team:Q(v,e.team)}));else if(A(i))c.flush(),r(e,e=>{let t=d(v,e.plan),n=v.currentActivity||{type:`plan`,plan:t,changes:h(e.plan,t),updatedAt:t?.updatedAt||y};return{...e,lastActivityAt:y,plan:t,currentActivity:n,activityFeed:g(e.activityFeed,n)}}),m(e=>({...e,plan:d(v,e.plan??null)}));else if(i===`session_title`)m(e=>({...e,name:v.name}));else if(i===`retry`){let t=l(`chat:chatPage.retryingAttemptMaxAttemptsMessage`,{attempt:v.attempt,maxAttempts:v.maxAttempts,message:v.message});r(e,e=>{let n={type:`retry`,message:t,updatedAt:y};return{...e,runNotice:t,currentActivity:n,activityFeed:g(e.activityFeed,n),lastActivityAt:y}})}else if(i===`done`||i===`error`){u.queuedDuringRun||=!!(n.current[e]?.hadQueuedInput||n.current[e]?.queuedInputs?.length);let o=v.finishedAt||y;if(typeof v.text==`string`&&(u.responseText=v.text),u.responseRenderingStreaming=!1,u.terminal=!0,_(i===`done`?`completed`:`failed`,i===`error`?v.message||`Speech response failed.`:void 0),a.setTarget(u.responseText,o),i===`error`&&a.flush(),s.flush(),c.cancel(),r(e,e=>Ne(e,{agentId:t,responseText:u.responseText,data:v,finishedAt:o,preserveDisplayedText:i===`done`,...i===`error`?{error:v.message}:{}})),i===`done`)return m(e=>({...e,streaming:!1,goal:v.goal??e.goal??null,team:Q(v,e.team),plan:d(v,e.plan??null)})),!1;throw Error(v.message)}},state:u}}var Fe=`pisper:usage-updated`;function Ie({browserNotify:e,notify:t,defaultModel:n,localStreamSessionsRef:r,streamGenerationRef:a,sessionStatesRef:o,setActiveId:s,setGlobalError:c,updateSessionState:u,updateSessions:d,createSession:p,loadSessionMessages:m,refreshSessions:h,syncLiveSession:v}){let{t:y}=l(),x=(0,Y.useRef)(new Map),S=(0,Y.useRef)(new Set),C=(0,Y.useCallback)(async(t,l,f=[],_=!1,S=!1,C=null,T=null,E={})=>{let D=E.retryFromIndex,O=D==null?t.trim()||(f.length?y(`chat:chatPage.pleaseAnalyzeTheseAttachments`):``)||(T?T.resourceName:``):t;if(!O&&!T)return;let k=l;if(k||=await p(),!k||o.current[k]?.streaming)return;let A=(a.current.get(k)||0)+1;a.current.set(k,A);let j=!1,M=()=>!j&&a.current.get(k)===A,N=()=>{},P=new Promise(e=>{N=e});x.current.set(k,{promise:P,resolve:N}),s(k),c(``);let F={id:`user-${Date.now()}`,role:`user`,text:O,invocation:T,attachments:f.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}))},I=`agent-${Date.now()}`,L=new Date().toISOString(),R={responseText:``,responseRenderingStreaming:!0,thinkingText:``,thinkingPrefix:``,queuedDuringRun:!1},z=be((e,t)=>{M()&&u(k,n=>M()?{...n,thinkingText:e,lastActivityAt:t||n.lastActivityAt,currentActivity:{type:`model`,stage:`thinking`,updatedAt:t||n.lastActivityAt}}:n)},{intervalMs:80}),B=Te((e,t)=>{M()&&u(k,n=>{if(!M())return n;let r=n.messages.map(t=>t.id===I?{...t,text:e,streaming:R.responseRenderingStreaming||e!==R.responseText}:t);if(R.terminal||!R.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:g(n.activityFeed,i),messages:r}})},{isCurrent:M}),ee=xe((e,t)=>{M()&&u(k,n=>{if(!M())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=g(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}})}),V=Pe({sessionId:k,agentId:I,sessionStatesRef:o,updateSessionState:u,updateSessions:d,typewriter:B,thinkingScheduler:z,toolScheduler:ee,t:y}),H=(e,t)=>M()?e===`resync_required`?(V.dispatch(e,t),j=!0,a.current.delete(k),r.current.delete(k),v(k),!1):V.dispatch(e,t):!1;R=V.state,u(k,e=>{let t=_||S||e.goal?.status===`active`;return{...e,messages:[...D==null?e.messages:e.messages.slice(0,D),F,{id:I,role:`agent`,text:``,streaming:!0}],tools:[],approvals:[],error:``,streaming:!0,loaded:!0,runStartedAt:L,lastActivityAt:L,runFinishedAt:null,runStopped:!1,runNotice:``,currentActivity:{type:`model`,stage:`thinking`,updatedAt:L},activityFeed:[],lifecycle:{phase:`starting`,event:`prompt_submitted`,turn:0,updatedAt:L},thinkingText:``,hadQueuedInput:!1,withdrawnInputIds:[],queuedInputRunId:I,compaction:null,plan:t?e.plan:null}}),!_&&!S&&d(e=>e.map(e=>e.id!==k||e.goal?.status===`active`?e:{...e,plan:null})),r.current.add(k);let te=!1;try{if(D==null?await i.openStream({sessionId:k,message:O,attachments:f,goalMode:_,teamMode:S,goalTokenBudget:C,invocation:T},H):await i.retryLastTurn(k,H),!M())return;R.responseRenderingStreaming=!1,R.terminal=!0,B.setTarget(R.responseText),z.flush(),ee.flush();let t=new Date().toISOString();if(o.current[k]?.streaming&&u(k,e=>{let n=e.runFinishedAt||t;return{...e,streaming:!1,runFinishedAt:n,lastActivityAt:n,runNotice:``,currentActivity:null,activityFeed:[],approvals:[],tools:w(e.tools,{finishedAt:n}),messages:e.messages.map(e=>e.id===I?{...e,streaming:e.text!==R.responseText}:e)}}),!await B.drain()||!M()||(u(k,e=>({...e,messages:e.messages.map(e=>e.id===I?{...e,text:R.responseText,streaming:!1}:e)})),!M()))return;(_||S||R.queuedDuringRun||o.current[k]?.hadQueuedInput||o.current[k]?.goal||o.current[k]?.queuedInputs?.length)&&u(k,{queuedInputs:[],hadQueuedInput:!1});let r;try{r=(await h()).find(e=>e.id===k)}catch{v(k)}if(!M())return;e?.(`chat.completed`,{chat:{title:r?.name||y(`chat:chatPage.appChat`,{app:`Pisper`}),summary:R.responseText.trim().slice(0,260)||y(`chat:chatPage.theAgentHasFinishedResponding`),model:o.current[k]?.model||n}})}catch(e){if(!M())return;if((R.runId||R.startedAt)&&!R.terminal){V.dispatch(`resync_required`,{}),j=!0,a.current.delete(k),r.current.delete(k),v(k);return}te=!0,B.cancel(),z.flush(),ee.cancel();let t=new Date().toISOString(),n=b(e);if(u(k,e=>({...e,streaming:!1,error:n,runFinishedAt:t,lastActivityAt:t,runNotice:``,currentActivity:null,activityFeed:[],approvals:[],tools:w(e.tools,{finishedAt:t,error:n}),messages:e.messages.map(e=>e.id===I?{...e,streaming:!1,error:n,text:e.text||R.responseText||n}:e)})),R.queuedDuringRun||o.current[k]?.hadQueuedInput||o.current[k]?.queuedInputs?.length){try{await m(k,{force:!0})}catch{}u(k,{queuedInputs:[],hadQueuedInput:!1})}d(e=>e.map(e=>e.id===k?{...e,streaming:!1}:e))}finally{let e=M();j=!0,e&&(r.current.delete(k),a.current.delete(k),u(k,{streaming:!1,hadQueuedInput:!1}),x.current.get(k)?.promise===P&&x.current.delete(k)),B.cancel(),z.cancel(),ee.cancel(),N(),window.dispatchEvent(new Event(Fe)),te&&e&&v(k)}},[e,p,n,m,r,h,a,o,s,c,v,y,u,d]),T=(0,Y.useCallback)(async(e,n,r=[],a=`steer`)=>{let s=String(e||``).trim()||(r.length?y(`chat:chatPage.pleaseAnalyzeTheseAttachments`):``);if(!n||!s)return!1;let c=o.current[n]?.queuedInputRunId;try{let e=await i.queueInput(n,s,r,a),t=new Date().toISOString(),o={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||a,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 u(n,n=>{let r=f(n,e),i=!r.withdrawnInputIds?.includes(e.inputId)&&n.queuedInputRunId===c;return{...r,messages:i?_(r.messages,o):r.messages,hadQueuedInput:!0,lastActivityAt:t}}),!0}catch(e){if(D(e)){let e=x.current.get(n);return e?await e.promise:await v(n),u(n,{streaming:!1,recovering:!1,queuedInputs:[],hadQueuedInput:!1}),await m(n,{force:!0}),C(s,n,r),!0}return t(b(e),`error`),!1}},[m,t,C,o,v,y,u]),E=(0,Y.useCallback)(async e=>{if(!e)return;let n=await i.abort(e);await v(e,{force:!0});let r=new Date().toISOString();u(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:w(e.tools,{finishedAt:r,error:y(`chat:chatPage.stopped`)}),messages:e.messages.map(e=>e.streaming?{...e,streaming:!1}:e)})),d(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(y(`chat:chatPage.currentRunStopped`),`info`)},[t,v,y,u,d]),O=(0,Y.useCallback)(async(e,n)=>{let r=`${e}/${n}`;if(!e||!n||S.current.has(r))return null;S.current.add(r),u(e,e=>({...e,withdrawingInputIds:[...e.withdrawingInputIds||[],n]}));try{let r=await i.withdrawQueuedInput(e,n);return u(e,e=>f(e,{...r,removedInputId:r.removed?n:void 0})),r.removed?r.withdrawnInput||null:(t(y(`chat:focusSession.queuedInputAlreadyConsumed`),`info`),null)}catch(e){return t(b(e),`error`),null}finally{S.current.delete(r),u(e,e=>({...e,withdrawingInputIds:(e.withdrawingInputIds||[]).filter(e=>e!==n)}))}},[t,y,u]);return{sendPrompt:C,retryLastTurn:(0,Y.useCallback)(async e=>{let t=o.current[e];if(!t||t.streaming)return;let n=t.messages||[],r=-1;for(let e=n.length-1;e>=0;--e)if(n[e]?.role===`user`){r=e;break}if(r<0)return;let i=n[r];await C(i.text||``,e,i.attachments||[],!1,!1,null,null,{retryFromIndex:r})},[C,o]),queuePrompt:T,withdrawQueuedInput:O,abort:E}}function Le({notify:e,requestText:t,requestConfirm:n,availableModels:r,sessionStatesRef:o,updateSessionState:s,updateSessions:c,replaceSessionStates:u,setGlobalError:d,syncLiveSession:f}){let{t:p,language:m}=l(),[h,g]=(0,Y.useState)(null),_=(0,Y.useCallback)((e,t)=>{c(n=>n.map(n=>n.id===e?t(n):n))},[c]),v=(0,Y.useCallback)(async t=>{if(t)try{let n=await i.pauseGoal(t);s(t,{goal:n.goal||null}),_(t,e=>({...e,goal:n.goal||null})),e(p(`chat:chatPage.goalPaused`),`info`)}catch(e){s(t,{error:b(e)})}},[e,p,s,_]),y=(0,Y.useCallback)(async(t,n)=>{if(t)try{let r=await i.setGoalBudget(t,n);s(t,{goal:r.goal||null}),_(t,e=>({...e,goal:r.goal||null})),e(p(`chat:chatPage.goalTokenBudgetUpdated`),`info`)}catch(e){s(t,{error:b(e)})}},[e,p,s,_]),x=(0,Y.useCallback)(async t=>{let n=o.current[t];if(!(!t||n?.streaming||n?.compaction?.active)){s(t,{compaction:{...n?.compaction||{},active:!0,status:`running`,reason:`manual`},error:``});try{let n=await i.compactSession(t);s(t,{compaction:n.compaction||null,contextUsage:n.contextUsage||null}),e(p(`chat:chatPage.contextCompacted`))}catch(e){await f(t).catch(()=>{}),s(t,{error:b(e)})}}},[e,o,f,p,s]),S=(0,Y.useCallback)(async e=>{let t=await i.updateCompactionPreference(e);u(Object.fromEntries(Object.entries(o.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]})))},[u,o]),C=(0,Y.useCallback)((e,t={})=>{let n=String(t.model||``),r=String(o.current[e]?.model||``);if(n&&r&&n!==r)return;let i=Array.isArray(t.availableThinkingLevels)?t.availableThinkingLevels.map(e=>String(e)):Array.isArray(t.availableLevels)?t.availableLevels.map(e=>String(e)):[],a=String(t.thinkingLevel||``);s(e,{thinkingLevel:a||void 0,availableThinkingLevels:i,thinkingStatus:String(t.thinkingStatus||t.status||``),thinkingMessage:String(t.thinkingMessage||t.message||``),switchingThinking:!1}),a&&_(e,e=>({...e,thinkingLevel:a}))},[o,s,_]),w=(0,Y.useCallback)(async e=>{if(!(!e||o.current[e]?.streaming))try{let t=await i.getThinkingLevel(e);C(e,t)}catch{s(e,{thinkingStatus:`error`,thinkingMessage:p(`chat:focusSession.thinkingLevelsLoadFailed`)})}},[C,o,p,s]),T=(0,Y.useCallback)(async(t,a)=>{let c=r.find(e=>e.key===a);if(!t||!c||o.current[t]?.streaming)return;let l=o.current[t],u=l?.model||``,d=!!l?.messages?.length&&!l?.compaction?.active;s(t,{switchingModel:!0,model:c.key,error:``}),_(t,e=>({...e,model:c.key}));try{let r=await i.updateModel(t,c.provider,c.modelId);s(t,{model:r.model||c.key,contextUsage:r.contextUsage??null,switchingModel:!1}),_(t,e=>({...e,model:r.model||c.key})),C(t,r),e(p(`chat:chatPage.switchedToModel`,{model:c.label})),d&&await n({title:p(`chat:chatPage.compactAfterModelSwitch`),message:p(`chat:chatPage.compactAfterModelSwitchDescription`),confirmLabel:p(`chat:chatPage.compactNow`),tone:`primary`})&&await x(t)}catch(e){s(t,{switchingModel:!1,model:u||void 0,error:b(e)}),u&&_(t,e=>({...e,model:u}))}},[C,r,x,e,n,o,p,s,_]),E=(0,Y.useCallback)(async(t,n)=>{let r=String(n||``).trim();if(!t||!r||o.current[t]?.streaming)return;let a=o.current[t]||{},c=String(a.thinkingLevel||``);s(t,{switchingThinking:!0,thinkingLevel:r,error:``}),_(t,e=>({...e,thinkingLevel:r}));try{let n=await i.setThinkingLevel(t,r);C(t,n),e(p(`chat:chatPage.switchedToThinkingLevel`,{level:String(n.thinkingLevel||r)}))}catch(e){s(t,{switchingThinking:!1,thinkingLevel:c||void 0,error:b(e)}),c&&_(t,e=>({...e,thinkingLevel:c}))}},[C,e,o,p,s,_]),D=(0,Y.useCallback)(async(t,r)=>{if(!t)return!1;s(t,{switchingPermission:!0,error:``});try{if(r===`full-access`&&!await n({title:p(`chat:chatPage.enableFullAccess`),message:p(`chat:chatPage.fullAccessAllowsTheAgentToUseFilesAndNetworkServicesOutsideTheWorkspaceAndShellCommandsWillNoLon`),confirmLabel:p(`chat:chatPage.enableFullAccess`)}))return s(t,{switchingPermission:!1}),!1;let a=await i.updateExecutionMode(t,r);return s(t,{executionMode:a.executionMode,permissionMode:a.permissionMode,switchingPermission:!1}),_(t,e=>({...e,executionMode:a.executionMode,permissionMode:a.permissionMode})),e(p(`chat:chatPage.executionModeChangedToMode`,{mode:a.executionMode===`approval-required`?p(`chat:chatPage.approvalRequired`):a.executionMode===`workspace-write`?p(`chat:focusSession.workspaceWrite`):p(`chat:chatPage.fullAccess`)})),!0}catch(e){return s(t,{switchingPermission:!1,error:b(e)}),!1}},[e,n,p,s,_]),O=(0,Y.useCallback)(async(e,t)=>{if(!e)return!1;try{let n=await i.updateRunMode(e,t),r=String(n.runMode||t);return s(e,{runMode:r}),_(e,e=>({...e,runMode:r})),!0}catch(t){return s(e,{error:b(t)}),!1}},[s,_]),k=(0,Y.useCallback)(async(t,n,r)=>{s(t,e=>({...e,approvals:(e.approvals||[]).filter(e=>e.id!==n),error:``}));try{(await i.resolveApproval(t,n,r)).alreadyResolved&&f(t)}catch(n){if(await f(t),n instanceof a&&n.status===404){e(p(`chat:chatPage.approvalStatusUpdated`),`info`);return}throw s(t,{error:b(n)}),n}},[e,f,p,s]),A=(0,Y.useCallback)(async(t,n)=>{if(!(!t?.id||o.current[t.id]?.streaming)){s(t.id,{switchingCwd:!0,error:``});try{let r=await i.updateCwd(t.id,n);s(t.id,{cwd:r.cwd,switchingCwd:!1}),_(t.id,e=>({...e,cwd:r.cwd})),g(null),e(p(`chat:chatPage.workingDirectoryChangedToWorkspace`,{workspace:I(r.cwd,m)}))}catch(e){throw s(t.id,{switchingCwd:!1,error:b(e)}),e}}},[m,e,o,p,s,_]);return{workspaceSession:h,setWorkspaceSession:g,switchSessionCwd:A,selectSessionWorkspace:(0,Y.useCallback)(async t=>{if(t?.id){if(o.current[t.id]?.streaming){e(p(`chat:chatPage.stopTheActiveRunBeforeChangingTheWorkspace`),`info`);return}if(!oe()){g(t);return}try{let e=await J(t.cwd);e&&await A(t,e)}catch(e){s(t.id,{switchingCwd:!1,error:b(e)})}}},[e,o,A,p,s]),renameSession:(0,Y.useCallback)(async n=>{if(!n?.id)return;if(o.current[n.id]?.streaming){e(p(`chat:chatPage.stopTheActiveRunBeforeRenamingTheChat`),`info`);return}let r=await t({title:p(`chat:chatPage.renameChat`),inputLabel:p(`chat:chatPage.chatTitle`),value:n.name,confirmLabel:p(`chat:chatPage.save`)});if(r!==null&&r!==n.name)try{let t=await i.renameSession(n.id,r);_(n.id,e=>({...e,name:t.name})),G(),e(p(`chat:chatPage.chatTitleUpdated`))}catch(e){d(b(e))}},[e,t,o,d,p,_]),pauseGoal:v,setGoalBudget:y,compactSession:x,setCompactionThreshold:S,loadSessionThinkingLevel:w,switchSessionModel:T,switchSessionThinkingLevel:E,switchSessionExecutionMode:D,switchSessionRunMode:O,resolveToolApproval:k}}var $=n(),Re=(0,Y.lazy)(()=>r(()=>import(`./ChatDockView-Cq7J6Xmn.js`).then(e=>({default:e.ChatDockView})),__vite__mapDeps([2,3,4,5,6,7,8,9,10,1,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])));function ze(e){let t=window.__TAURI__?.core?.invoke??window.__TAURI_INTERNALS__?.invoke;return t?t(e):Promise.reject(Error(`native bridge unavailable`))}function Be({notify:e,navigate:t,browserNotify:n,registerPrimaryAction:r,pendingAsset:a,onAssetConsumed:o,requestText:c,requestConfirm:d}){let{t:f}=l(),p=N(e=>e.client===`mobile-app`),m=N(e=>e.loaded),h=u(),g=p||h,_=(0,Y.useRef)(new Set),v=(0,Y.useRef)(new Map),b=(0,Y.useRef)(null),x=ue({notify:e}),S=ve({sessionStates:x.sessionStates,sessionStatesRef:x.sessionStatesRef,localStreamSessionsRef:_,streamGenerationRef:v,updateSessionState:x.updateSessionState,updateSessions:x.updateSessions}),w=de({sessions:x.sessions,sessionsRef:x.sessionsRef,sessionStates:x.sessionStates,activeId:x.activeId,setActiveId:x.setActiveId,loading:x.loading,localStreamSessionsRef:_,loadSessionMessages:S.loadSessionMessages,releaseSessionState:x.releaseSessionState,singleSessionLayout:g,notify:e}),T=x.createSessionRecord,E=S.loadSessionMessages,D=x.refreshSessions,O=x.sessionStatesRef,k=S.syncLiveSession,A=x.setGlobalError,j=w.openSessionInDock,P=w.moveSessionToGroup,[F,I]=(0,Y.useState)({sessionId:``,token:0}),R=(0,Y.useCallback)(async(e,t=``)=>{let n=null;p&&(n=await ze(`mobile_state`).catch(()=>null));let r=ce(p,n),i=await T(t,{inheritRecentCwd:r});return i?(j(i)&&P(i,e),i):``},[T,p,P,j]);K(r,R);let B=Ie({browserNotify:n,notify:e,defaultModel:x.defaultModel,localStreamSessionsRef:_,streamGenerationRef:v,sessionStatesRef:x.sessionStatesRef,setActiveId:x.setActiveId,setGlobalError:x.setGlobalError,updateSessionState:x.updateSessionState,updateSessions:x.updateSessions,createSession:R,loadSessionMessages:S.loadSessionMessages,refreshSessions:x.refreshSessions,syncLiveSession:S.syncLiveSession}),{sendPrompt:V}=B;(0,Y.useEffect)(()=>{let e=()=>{let e=z();e&&(async()=>{let t=await R(void 0,e.cwd);t&&e.prompt&&V(e.prompt,t)})()};return window.addEventListener(L,e),e(),()=>window.removeEventListener(L,e)},[R,V]);let H=Le({notify:e,requestText:c,requestConfirm:d,availableModels:x.availableModels,sessionStatesRef:x.sessionStatesRef,updateSessionState:x.updateSessionState,updateSessions:x.updateSessions,replaceSessionStates:x.replaceSessionStates,setGlobalError:x.setGlobalError,syncLiveSession:S.syncLiveSession}),te=(0,Y.useCallback)(()=>{if(document.visibilityState!==`visible`||b.current)return;let e=(async()=>{p&&await s().catch(()=>void 0);let e=[];try{e=await D(void 0,{preserveExistingOnEmpty:!0})}catch{}let t=new Set([...Object.keys(O.current),...x.activeId?[x.activeId]:[],...e.filter(e=>e.streaming).map(e=>e.id)]);await Promise.allSettled(Array.from(t).map(e=>k(e,{force:!0})))})().finally(()=>{b.current=null});b.current=e},[x.activeId,p,D,O,k]);(0,Y.useEffect)(()=>{let e=()=>te();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)}},[te]);let U=(0,Y.useCallback)(async e=>{await E(e,{force:!0}),await D(e)},[E,D]),W=(0,Y.useCallback)(async(t,n)=>{if(!(!t?.id||!n))try{if(A(``),(await i.navigateSessionTree(t.id,n,!1)).cancelled)return;await U(t.id),I(e=>({sessionId:t.id,token:e.token+1})),e(f(`chat:chatPage.branchedFromNode`))}catch(e){A(e instanceof Error?e.message:String(e))}},[e,U,A,f]),G=(0,Y.useCallback)(async(t,n)=>{if(!t?.id||!n)return;let r=await c({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{A(``);let a=await i.deriveSession(t.id,n,r);await D(a.id),I(e=>({sessionId:t.id,token:e.token+1})),await new Promise(e=>window.setTimeout(e,550)),j(a.id),e(f(`chat:chatPage.childChatCreated`))}catch(e){A(e instanceof Error?e.message:String(e))}},[e,j,D,c,A,f]),re=(0,Y.useCallback)(()=>t(`config`),[t]),ie=(0,Y.useMemo)(()=>({sessions:x.sessions,subscribeSessionState:x.subscribeSessionState,getSessionState:x.getSessionState,defaultModel:x.defaultModel,availableModels:x.availableModels,globalError:x.globalError,activeId:x.activeId,compactDock:w.compactDock,sessionTreePulseSessionId:F.sessionId,sessionTreePulseToken:F.token,pendingAsset:a,onAssetConsumed:o,notify:e,openModelSettings:re,loadSessionMessages:S.loadSessionMessages,loadOlderMessages:S.loadOlderMessages,sendPrompt:B.sendPrompt,retryLastTurn:B.retryLastTurn,queuePrompt:B.queuePrompt,withdrawQueuedInput:B.withdrawQueuedInput,abort:B.abort,pauseGoal:H.pauseGoal,setGoalBudget:H.setGoalBudget,compactSession:H.compactSession,setCompactionThreshold:H.setCompactionThreshold,switchSessionModel:H.switchSessionModel,loadSessionThinkingLevel:H.loadSessionThinkingLevel,switchSessionThinkingLevel:H.switchSessionThinkingLevel,switchSessionExecutionMode:H.switchSessionExecutionMode,switchSessionRunMode:H.switchSessionRunMode,resolveToolApproval:H.resolveToolApproval,selectSessionWorkspace:H.selectSessionWorkspace,renameSession:H.renameSession,branchFromEntry:W,createChildSession:G,reloadSessionBranch:U,splitDockPanel:w.splitDockPanel,closeDockPanel:w.closeDockPanel}),[x.sessions,x.subscribeSessionState,x.getSessionState,x.defaultModel,x.availableModels,x.globalError,x.activeId,w.compactDock,w.splitDockPanel,w.closeDockPanel,F.sessionId,F.token,a,o,e,re,S.loadSessionMessages,S.loadOlderMessages,B.sendPrompt,B.retryLastTurn,B.queuePrompt,B.withdrawQueuedInput,B.abort,H.pauseGoal,H.setGoalBudget,H.compactSession,H.setCompactionThreshold,H.switchSessionModel,H.loadSessionThinkingLevel,H.switchSessionThinkingLevel,H.switchSessionExecutionMode,H.switchSessionRunMode,H.resolveToolApproval,H.selectSessionWorkspace,H.renameSession,W,G,U]);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{className:`chat-layout max-[900px]:grid-cols-[minmax(0,1fr)] max-[650px]:flex max-[650px]:flex-col max-[650px]:min-h-0 relative grid w-full min-w-0 min-h-0 flex-1 grid-cols-[minmax(0,1fr)] gap-[0] dock-layout`,children:x.loading?(0,$.jsxs)(ne,{children:[(0,$.jsx)(ee,{className:`animate-spin`,size:24}),(0,$.jsx)(`h2`,{children:f(`chat:chatPage.wakingTheAgent`)}),(0,$.jsx)(`p`,{children:f(`chat:chatPage.modelsSessionsAndContextAreSettlingIntoPlace`)})]}):(0,$.jsx)(`div`,{className:`chat-dock-workspace max-[650px]:[flex:1_1_0] max-[650px]:min-h-0 relative min-w-0 min-h-0 [isolation:isolate] overflow-hidden [border:1px_solid_var(--stroke-soft)] rounded-[var(--r-md)] bg-[var(--panel)]`,children:(0,$.jsx)(C.Provider,{value:ie,children:m&&g?(0,$.jsx)(y,{sessionIds:w.mobileSessionIds,onSelectSession:j,onCreateSession:R}):m?(0,$.jsx)(Y.Suspense,{fallback:null,children:(0,$.jsx)(Re,{compactDock:w.compactDock,onDockReady:w.onDockReady,getTabContextMenuItems:w.getTabContextMenuItems,createSession:R})}):null})})}),H.workspaceSession&&(0,$.jsx)(M,{open:!0,initialPath:H.workspaceSession.cwd,description:f(`common:workspacePicker.selectWorkspaceForChat`,{name:H.workspaceSession.name}),onOpenChange:e=>!e&&H.setWorkspaceSession(null),onSelect:e=>H.switchSessionCwd(H.workspaceSession,e)})]})}export{Be as ChatPage};