pisper 0.6.21 → 0.6.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/package.json +6 -6
  2. package/web/.vite/manifest.json +575 -583
  3. package/web/assets/{AppDialog-CyOinq_c.js → AppDialog-BluIYP8v.js} +1 -1
  4. package/web/assets/{AppOverlays-tniCecGA.js → AppOverlays-vn_Ter3M.js} +1 -1
  5. package/web/assets/{AssetsPage-DYFCPNhU.js → AssetsPage-CLlSYXp8.js} +1 -1
  6. package/web/assets/{BoardPage-Dp-FZv-N.js → BoardPage-nSsZudtr.js} +3 -3
  7. package/web/assets/{ChannelsPage-vBRUJEhU.js → ChannelsPage-DqnfAoWC.js} +1 -1
  8. package/web/assets/{ChatAppearancePage-DH4LSb0w.js → ChatAppearancePage-2itvW4ex.js} +1 -1
  9. package/web/assets/{ChatHistoryPage-ChspTm6r.js → ChatHistoryPage-OPTj6spQ.js} +1 -1
  10. package/web/assets/{ChatPage-DvU-p808.js → ChatPage-C_3_rpJn.js} +5 -5
  11. package/web/assets/{ConfigPage-CFFaLkKD.js → ConfigPage-DnPb_QrV.js} +2 -2
  12. package/web/assets/{DesktopWindowControls-Cz0mpg2c.js → DesktopWindowControls-DQf3N-Pq.js} +1 -1
  13. package/web/assets/{FeaturePage-DT_WfUIg.js → FeaturePage-B8dFhtLs.js} +1 -1
  14. package/web/assets/{FileAttachmentPreview-yuCLHoKm.js → FileAttachmentPreview-CeQTyfpt.js} +1 -1
  15. package/web/assets/{FloatingWidgets-D-48zs1T.js → FloatingWidgets-CWpMJq1K.js} +1 -1
  16. package/web/assets/{FocusRuntimeControls-D61-BVTV.js → FocusRuntimeControls-J_hbXz7v.js} +1 -1
  17. package/web/assets/{GitDiffViewer-DWHHRnjQ.js → GitDiffViewer-DZm3DoP7.js} +1 -1
  18. package/web/assets/{ManageProjectsDialog-B_0l-_Th.js → ManageProjectsDialog-VaG1Uu6p.js} +1 -1
  19. package/web/assets/{MarkdownMessage-zaqhqJ44.js → MarkdownMessage-Dbypp4RC.js} +1 -1
  20. package/web/assets/{McpPage-CuOr94Lo.js → McpPage-D8NZyKoO.js} +1 -1
  21. package/web/assets/{MemoryPage-CI_OOJh3.js → MemoryPage-DZsAXror.js} +1 -1
  22. package/web/assets/{MobileNavigation-CpOrDVyY.js → MobileNavigation-DHWkx5h0.js} +1 -1
  23. package/web/assets/{MorePage-CP0ptgQR.js → MorePage-PK0vEEda.js} +1 -1
  24. package/web/assets/{NewFolderDialog-wwAp2HUt.js → NewFolderDialog-DjC2xSrj.js} +1 -1
  25. package/web/assets/{PageHeader-CbiN6zVm.js → PageHeader-CcgJJB4K.js} +1 -1
  26. package/web/assets/{PhoneDrawer-DN3UBXYe.js → PhoneDrawer-DMIlKCRW.js} +1 -1
  27. package/web/assets/{PhoneMenuButton-BMgvbvez.js → PhoneMenuButton-dzvj0NS0.js} +1 -1
  28. package/web/assets/{PhoneTopBar-DFtEfuO6.js → PhoneTopBar-UqSQG8KO.js} +1 -1
  29. package/web/assets/{PluginsPage-CPkH6yN9.js → PluginsPage-D_7E0Mcm.js} +1 -1
  30. package/web/assets/{SafeModePrompt-vZ-kg03s.js → SafeModePrompt-CYubRBr0.js} +1 -1
  31. package/web/assets/{SchedulesPage-BQBk-HJm.js → SchedulesPage-BsX821QZ.js} +1 -1
  32. package/web/assets/{SessionBrowserPane-CC0qsCP9.js → SessionBrowserPane-ZvjA5vop.js} +2 -2
  33. package/web/assets/{SessionContextPanel-CyPu1SIQ.js → SessionContextPanel-39eXpERL.js} +2 -2
  34. package/web/assets/{SessionHome-C2xp5_yM.js → SessionHome-Cm131bvz.js} +1 -1
  35. package/web/assets/{SessionInspector-D362Va6Y.js → SessionInspector-DiSWVd6R.js} +1 -1
  36. package/web/assets/{SessionShell-BmsJM64n.js → SessionShell-DiWPHdio.js} +1 -1
  37. package/web/assets/{SettingsSidebar-B7qnN1dq.js → SettingsSidebar-Br83KuNT.js} +1 -1
  38. package/web/assets/{ShortcutHelpDialog-BzWvhRT2.js → ShortcutHelpDialog-rmlTJwrg.js} +1 -1
  39. package/web/assets/{ShortcutKeys-Cg-wl3yb.js → ShortcutKeys-CE7wsdx4.js} +1 -1
  40. package/web/assets/{SidebarUpdateStatus-B-MIuH8f.js → SidebarUpdateStatus-BSxoGQFm.js} +1 -1
  41. package/web/assets/{SkillsPage-BowfELnZ.js → SkillsPage-zrZCbP5L.js} +1 -1
  42. package/web/assets/{TaskProcessesPane-DGikk1nH.js → TaskProcessesPane-B9a-bK8Q.js} +1 -1
  43. package/web/assets/{TaskTerminalView-BjR4vuZI.js → TaskTerminalView-Dnl9t0Yq.js} +1 -1
  44. package/web/assets/{TerminalPanel-ZXcyyLBu.js → TerminalPanel-EbsJNe9L.js} +1 -1
  45. package/web/assets/{WebDesktopPet-CrUcp9Ym.js → WebDesktopPet-CqR3puOx.js} +1 -1
  46. package/web/assets/{WorkflowsPage-CTKpPFrC.js → WorkflowsPage-ChXjB-wW.js} +1 -1
  47. package/web/assets/{WorkspacePicker-CROSQVzJ.js → WorkspacePicker-CojYPYIa.js} +1 -1
  48. package/web/assets/{api-CIB7ZPX3.js → api-3pnTJcsp.js} +1 -1
  49. package/web/assets/{app-update-B6njQMB7.js → app-update-C6PjqV-N.js} +1 -1
  50. package/web/assets/{approval-confirm-D2B0tMFE.js → approval-confirm-Ng3lhZR9.js} +1 -1
  51. package/web/assets/board-messages-DRw0EP3S.js +1 -0
  52. package/web/assets/{board-projects-Ca61ZKPH.js → board-projects-Cn83x27D.js} +1 -1
  53. package/web/assets/{bots-store-BG81qEJz.js → bots-store-B0uE78FQ.js} +1 -1
  54. package/web/assets/{chat-api-aEirz9it.js → chat-api-DE-00AQt.js} +1 -1
  55. package/web/assets/{client-store-BSqTT-c2.js → client-store-B0G8KCEA.js} +1 -1
  56. package/web/assets/{config-search-DdXAm7PX.js → config-search-Cnob89Wh.js} +1 -1
  57. package/web/assets/{dialog-D1TVm0d6.js → dialog-sq6TFrs2.js} +1 -1
  58. package/web/assets/{dropdown-menu-CFIFNaKO.js → dropdown-menu-Ds0gD8S8.js} +1 -1
  59. package/web/assets/{events-CrT7ie40.js → events-BYm_7rfH.js} +1 -1
  60. package/web/assets/{folder-paths-BuiyvlAk.js → folder-paths-BeZN9wq7.js} +1 -1
  61. package/web/assets/{hosts-CpFGDuNR.js → hosts-BWu_xvML.js} +1 -1
  62. package/web/assets/i18n-Cewq43aI.js +1 -0
  63. package/web/assets/{index-DcTDwezs.js → index-DT21IKeB.js} +2 -2
  64. package/web/assets/index-dYNkGdsI.css +2 -0
  65. package/web/assets/{mount-app-DhHe93-u.js → mount-app-YAzhl88_.js} +3 -3
  66. package/web/assets/{permission-rules-api-Ch3fRXTD.js → permission-rules-api-DdYftUQE.js} +1 -1
  67. package/web/assets/{pick-system-directory-B8aZR2BS.js → pick-system-directory-LOpQirAM.js} +1 -1
  68. package/web/assets/{placements-5hgUqGzE.js → placements-BzbpQDQ7.js} +2 -2
  69. package/web/assets/{popover-BMTgTASl.js → popover-CEwCyvso.js} +1 -1
  70. package/web/assets/{public-DTq_JyXj.js → public-CgfPT7gK.js} +2 -2
  71. package/web/assets/public-Ck1i4t8o.js +1 -0
  72. package/web/assets/{public-BTvrDX6E.js → public-CoivUKr6.js} +1 -1
  73. package/web/assets/{public-components-DUa3En6P.js → public-components-CQf0np0Z.js} +1 -1
  74. package/web/assets/public-diff-wY-tpFFs.js +1 -0
  75. package/web/assets/public-events-B-fuAF9_.js +1 -0
  76. package/web/assets/{public-flags-DEs9Uj_y.js → public-flags-DZvYvsWH.js} +1 -1
  77. package/web/assets/{public-session-CXzhUUNr.js → public-session-Bx2TqcKh.js} +1 -1
  78. package/web/assets/{public-sidebar-CJVnP7HU.js → public-sidebar-3z7xPwe3.js} +1 -1
  79. package/web/assets/{runtime-capabilities-store-DpEKnn1b.js → runtime-capabilities-store-CDhzPVU-.js} +1 -1
  80. package/web/assets/{safe-mode-instance-CVh0Lclx.js → safe-mode-instance-D_H4Z8Xv.js} +1 -1
  81. package/web/assets/safe-mode-sentinel-BG7I9wh1.js +1 -0
  82. package/web/assets/segmented-control-xkrEOP_d.js +1 -0
  83. package/web/assets/{session-change-summary-api-sn-ejt4H.js → session-change-summary-api-CxOV5OrA.js} +1 -1
  84. package/web/assets/{session-home-DBefA-JE.js → session-home-chPk0XEV.js} +1 -1
  85. package/web/assets/{session-organization-api-BFW_7Myv.js → session-organization-api-A3EudhgK.js} +1 -1
  86. package/web/assets/{session-scope-P-D-Ssd4.js → session-scope-CF4OLtKw.js} +1 -1
  87. package/web/assets/{session-tree-actions-DZ5-Z8_F.js → session-tree-actions-DNefaiZO.js} +1 -1
  88. package/web/assets/{session-tree-summary-Dljblf8P.js → session-tree-summary-DPqtCWEP.js} +1 -1
  89. package/web/assets/{shortcuts-DXHroTTi.js → shortcuts-zcQP1D4E.js} +1 -1
  90. package/web/assets/{side-chat-context-6tf1Gx5C.js → side-chat-context-BpjCorLu.js} +4 -4
  91. package/web/assets/{sidebar-PuiNlAmD.js → sidebar-Bb6NlEeR.js} +1 -1
  92. package/web/assets/{sidebar-store-CbyxBthc.js → sidebar-store-CQWNlMxT.js} +1 -1
  93. package/web/assets/{speech-session-B3-i8f64.js → speech-session-2WJk-z3P.js} +1 -1
  94. package/web/assets/{startup-queries-CceboYee.js → startup-queries-C9AHlyOp.js} +1 -1
  95. package/web/assets/{use-i18n-B2p84ZNR.js → use-i18n-BPJI6-Ue.js} +1 -1
  96. package/web/assets/{use-open-bot-CgFlDm0x.js → use-open-bot-5wf_No4c.js} +1 -1
  97. package/web/assets/{use-studio-actions-DM2CAaXR.js → use-studio-actions-C5heO0nL.js} +3 -3
  98. package/web/assets/{useCatalogProjects-laY-U3Br.js → useCatalogProjects-BWKT2GrE.js} +1 -1
  99. package/web/assets/{useNewProjectPicker-rhLvXi27.js → useNewProjectPicker-BCkEpwht.js} +2 -2
  100. package/web/assets/{useNow-DYvbFah-.js → useNow-e0HHzVad.js} +1 -1
  101. package/web/assets/{usePhoneShell-BSkh5GND.js → usePhoneShell-C90daPSI.js} +1 -1
  102. package/web/assets/{useSessionListQuery-CHbg2lM2.js → useSessionListQuery-Ezaq4rI5.js} +1 -1
  103. package/web/assets/{useSessionRowActions-CO4u1xCd.js → useSessionRowActions-BIJ-eKcN.js} +1 -1
  104. package/web/assets/{useSidebarModel-V_SZjKZH.js → useSidebarModel-DDqX8onb.js} +1 -1
  105. package/web/assets/{web-preview-CR8GMArR.js → web-preview-C5NXKRu-.js} +1 -1
  106. package/web/assets/{web-preview-events-DUqovP-L.js → web-preview-events-CIJw4Wx-.js} +1 -1
  107. package/web/assets/{workspace-order-store-CK1RETHt.js → workspace-order-store-0jm2oVHS.js} +1 -1
  108. package/web/index.html +2 -2
  109. package/web/assets/board-messages-DVz8SE1C.js +0 -1
  110. package/web/assets/i18n-CXRjs9ow.js +0 -1
  111. package/web/assets/index-BY7X-ZtU.css +0 -2
  112. package/web/assets/public-BZlIDP6h.js +0 -1
  113. package/web/assets/public-diff-DEL93aov.js +0 -1
  114. package/web/assets/public-events-BiaqrDkZ.js +0 -1
  115. package/web/assets/safe-mode-sentinel-Bm4e075H.js +0 -1
  116. package/web/assets/segmented-control-BlM_GKV6.js +0 -1
  117. package/web/assets/touch-target-BsyCgjR5.js +0 -1
@@ -1 +1 @@
1
- import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{t}from"./index-DcTDwezs.js";import{i as n}from"./vendor-react-DwNgTV1j.js";import{a as r,i,o as a}from"./vendor-state-GkUciC5H.js";import{a as o}from"./startup-queries-CceboYee.js";import{t as s}from"./runtime-capabilities-store-DpEKnn1b.js";import{l as c,n as l,u}from"./session-board-status-D2lpFPiI.js";import{u as d}from"./events-CrT7ie40.js";import{t as f}from"./chat-api-aEirz9it.js";import{C as p,D as m,E as h,S as g,T as _,_ as v,b as y,c as b,d as x,f as S,g as C,h as ee,i as te,l as w,m as T,p as E,t as ne,v as D,w as O,x as k}from"./useSessionListQuery-CHbg2lM2.js";import{n as A}from"./card-presentation-1oph2b8P.js";var j=e(n(),1),re=class extends Error{code=`board_confirmation_required`},M=()=>({ok:!1,reason:`pending`,error:null});function N(){g().catch(()=>void 0)}async function P(e,t,n,{confirmCritical:r=!1}){let i=T(e,t);if(n&&(!i||i.severity===`critical`&&!r))return{ok:!1,reason:`confirmation-required`,error:new re};let a=n?`approve`:`deny`,o=E(a,e,t);if(!S(o,a))return M();let s=C(e).filter(e=>e.id!==t);p(e,t);let c=s.length?null:x(e,{needsAttention:!1,attentionReason:null,streaming:!0});try{await m.resolveApproval(e,t,n)}catch(t){return c!==null&&v(e,c),i&&O(e,i),y(o),N(),{ok:!1,reason:`failed`,error:t}}try{await D(e,e=>!e||!e.card.approvals.some(e=>e.id===t),{fresh:!0})}catch{}finally{c!==null&&v(e,c),y(o)}return{ok:!0}}function ie(e,t,n={}){return P(e,t,!0,n)}function ae(e,t){return P(e,t,!1,{})}async function oe(e,t,n){let r=E(`answer`,e,t);if(!S(r,`answer`))return M();let i=x(e,{needsAttention:!1,attentionReason:null,streaming:!0});try{await f.answerQuestion(e,t,{answers:[{selected:[n]}]})}catch(t){return v(e,i),y(r),N(),{ok:!1,reason:`failed`,error:t}}try{await D(e,void 0,{fresh:!0})}catch{}finally{v(e,i),y(r)}return{ok:!0}}async function se(e){let t=E(`start`,e);if(!S(t,`start`))return M();let n=x(e,{streaming:!0});try{await f.startQueuedSession(e)}catch(r){return v(e,n),y(t),N(),{ok:!1,reason:`failed`,error:r}}try{await D(e,void 0,{fresh:!0})}catch{}finally{v(e,n),y(t)}return{ok:!0}}async function ce(e){let t=E(`retry`,e);if(!S(t,`retry`))return M();let n=x(e,{streaming:!0});try{await k(e,`retry`,(t,n)=>m.retry(e,t,n))}catch(r){return v(e,n),y(t),N(),{ok:!1,reason:`failed`,error:r}}try{await D(e,e=>!e||e.session.streaming===!0)}catch{}finally{v(e,n),y(t)}return{ok:!0}}function F(e){_(e.id,{pinned:e.pinned,archived:e.archived,unread:e.unread,needsAttention:e.needsAttention,attentionReason:e.attentionReason}),o.setQueryData(w,t=>t&&{...t,sessions:t.sessions.map(t=>t.id===e.id?{...t,pinned:e.pinned,archived:e.archived,unread:e.unread,needsAttention:e.needsAttention,attentionReason:e.attentionReason}:t)})}async function I(e,t,n,r){let i=E(t,e);if(!S(i,t))return M();let a=x(e,n);try{return F(await m.updateOrganization(e,r)),{ok:!0}}catch(e){return N(),{ok:!1,reason:`failed`,error:e}}finally{v(e,a),y(i)}}function L(e){return ee()?I(e,`markHandled`,{unread:!1,needsAttention:!1,attentionReason:null},{read:!0,dismissAttention:!0}):I(e,`markHandled`,{unread:!1},{read:!0})}function R(e,t=!0){return I(e,`pin`,{pinned:t},{pinned:t})}function z(e,t=!0){return I(e,`archive`,{archived:t},{archived:t})}async function B(e,t){let n=E(`rename`,e);if(!S(n,`rename`))return M();try{let n=await m.renameSession(e,t);return _(e,{name:n}),o.setQueryData(w,t=>t&&{...t,sessions:t.sessions.map(t=>t.id===e?{...t,name:n}:t)}),d({id:e,name:n}),{ok:!0}}catch(e){return N(),{ok:!1,reason:`failed`,error:e}}finally{y(n)}}function V(){b();let e=h(e=>e.pending);return(0,j.useMemo)(()=>({approve:ie,deny:ae,retry:ce,markHandled:L,pin:R,archive:z,rename:B,answer:oe,startNow:se,pending:e,isPending:(t,n,r=``)=>!!e[E(t,n,r)]}),[e])}function H(){return i(()=>({getItem:e=>{try{return t.getItem(e)}catch{return null}},setItem:(e,n)=>{try{t.setItem(e,n)}catch{}},removeItem:e=>{try{t.removeItem(e)}catch{}}}))}function U(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:{}}function W(e,{limit:t=200,maxLength:n=4096}={}){if(!Array.isArray(e))return[];let r=[];for(let i of e)if(!(typeof i!=`string`||i.length>n||r.includes(i))&&(r.push(i),r.length>=t))break;return r}var le=`pisper-board-view`,ue=[`lane`,`project`],G={groupBy:`lane`,projects:[],lanes:[],collapsedLanes:[],doneWindow:`today`};function K(e){return W(e,{limit:4,maxLength:16}).filter(c)}function q(e){let t=U(e);return{groupBy:ue.includes(t.groupBy)?t.groupBy:G.groupBy,projects:W(t.projects),lanes:K(t.lanes),collapsedLanes:K(t.collapsedLanes),doneWindow:l.includes(t.doneWindow)?t.doneWindow:G.doneWindow}}function J(e,t){return e.includes(t)?e.filter(e=>e!==t):[...e,t]}var de=a()(r(e=>({...G,deckCollapsed:!1,setDeckCollapsed:t=>e({deckCollapsed:t===!0}),setGroupBy:t=>e({groupBy:q({groupBy:t}).groupBy}),setProjectFilter:t=>e({projects:W([...t])}),toggleProjectFilter:t=>e(e=>({projects:W(J(e.projects,t))})),setLaneFilter:t=>e({lanes:K([...t])}),toggleLaneFilter:t=>e(e=>({lanes:K(J(e.lanes,t))})),setLaneCollapsed:(t,n)=>e(e=>({collapsedLanes:K(n?[...e.collapsedLanes,t]:e.collapsedLanes.filter(e=>e!==t))})),setDoneWindow:t=>e({doneWindow:q({doneWindow:t}).doneWindow}),clearFilters:()=>e({projects:[],lanes:[]})}),{name:le,storage:H(),version:1,partialize:({groupBy:e,projects:t,lanes:n,collapsedLanes:r,doneWindow:i,deckCollapsed:a})=>({groupBy:e,projects:t,lanes:n,collapsedLanes:r,doneWindow:i,deckCollapsed:a}),merge:(e,t)=>({...t,...q(e),deckCollapsed:U(e).deckCollapsed===!0})}));function fe(){let e=s(e=>e.capabilities.features);return(0,j.useMemo)(()=>{let t=e;return{askUser:t.askUser===!0,sessionQueue:t.sessionQueue===!0}},[e])}function pe(e){let t=ne(),n=h(e=>e.live),r=h(e=>e.localRuns),i=h(e=>e.runningSince),a=h(e=>e.patches),o=h(e=>e.pending),s=h(e=>e.feed.entries),c=h(e=>e.feed.ready),l=h(e=>Math.floor(e.feed.updatedAt/6e4)),u=fe(),d=t.data?.sessions,f=Math.max(t.dataUpdatedAt,l*6e4),p=(0,j.useMemo)(()=>({ready:c,entries:s}),[s,c]);return{query:t,items:(0,j.useMemo)(()=>d||p.ready?te(d??[],{live:n,localRuns:r,runningSince:i,patches:a,pending:o,feed:p},{now:f,capabilities:u,doneWindow:e}):[],[u,e,p,n,r,f,a,o,i,d]),capabilities:u,isLoading:t.isPending&&!p.ready}}function Y(e){return typeof e==`number`&&Number.isFinite(e)?e:null}function X(e,t=!1){return(n,r)=>{let i=Y(e(n)),a=Y(e(r));return i===a?n.id<r.id?-1:+(n.id>r.id):i===null?1:a===null?-1:t?a-i:i-a}}function Z(e){let t=[];e.status===`failed`&&t.push({kind:`failed`}),e.status===`approval`&&t.push({kind:`approval`,critical:e.severity===`critical`});let n=Y(e.questionCount);return(e.status===`question`||n!==null&&n>0)&&t.push({kind:`question`,count:n!==null&&n>0?n:null}),t}function Q(e){let t=e.approvals[0],n=Y(e.questionCount);return e.status===`approval`&&e.approvalsState===`ready`&&e.severity===`standard`&&t&&!t.truncated&&!(n!==null&&n>0)?{kind:`decide`,approvalId:t.id,remaining:e.approvals.length-1}:{kind:`open`}}function me(e){return Math.round(e*.381966%1*1e3)/1e3}function he(e,{now:t,capabilities:n,timeZoneOffsetMinutes:r}){let i=[],a=[],o=[],s=[],c=[],l=new Set;for(let d of e)!d||typeof d.id!=`string`||!d.id||l.has(d.id)||d.session?.archived!==!0&&(l.add(d.id),d.lane===`attention`?i.push(d):d.lane===`running`?a.push(d):d.lane===`queued`?n?.sessionQueue===!0&&o.push(d):d.lane===`done`&&(d.pinned?s.push(d):u(d.since,{now:t,timeZoneOffsetMinutes:r,doneWindow:`today`})&&c.push(d)));let d=i.sort(X(e=>e.since)).map(e=>({group:`attention`,id:e.id,title:e.title,...e.bot?{bot:e.bot}:{},status:e.status,pinned:e.pinned===!0,glyph:`attention`,waitingSince:Y(e.since),reasons:Z(e),quickAction:Q(e)})),f=e=>Y(e.startedAt)??Y(e.since),p=a.sort(X(f)).map((e,t)=>({group:`running`,id:e.id,title:e.title,...e.bot?{bot:e.bot}:{},status:e.status,pinned:e.pinned===!0,glyph:`run`,startedAt:f(e),phase:me(t)})),m=X(e=>e.since),h=o.sort((e,t)=>{let n=Y(e.queuePosition),r=Y(t.queuePosition);return n===r?m(e,t):n===null?1:r===null?-1:n-r}).map((e,t)=>({group:`queued`,id:e.id,title:e.title,...e.bot?{bot:e.bot}:{},status:e.status,pinned:e.pinned===!0,glyph:`queued`,position:Y(e.queuePosition)??t+1})),g=s.sort(X(e=>e.since,!0)).map(e=>({group:`pinned`,id:e.id,title:e.title,...e.bot?{bot:e.bot}:{},status:e.status,pinned:e.pinned===!0,glyph:A(e),at:Y(e.since)})),_=c.sort(X(e=>e.since,!0)).map(e=>({group:`done`,id:e.id,title:e.title,...e.bot?{bot:e.bot}:{},status:e.status,pinned:e.pinned===!0,glyph:A(e),finishedAt:Y(e.since),unread:e.unread===!0})),v={attention:d.length,running:p.length,queued:h.length,pinned:g.length,done:_.length},y=(e,t,n=1/0)=>({id:e,count:t.length,rows:t.slice(0,n),hidden:Math.max(0,t.length-n)}),b=[y(`attention`,d),y(`running`,p,8)];return h.length&&b.push(y(`queued`,h)),g.length&&b.push(y(`pinned`,g)),_.length&&b.push(y(`done`,_,10)),{groups:b,counts:v,order:b.flatMap(e=>e.rows.map(e=>e.id)),longestWaitingId:d[0]?.id??null}}function ge(e,t,n){if(!e.length)return null;let r=t?e.indexOf(t):-1;return r<0?n===1?e[0]:e[e.length-1]:e[r+n]??null}function $(e){let[t,n]=(0,j.useState)(()=>Date.now());return(0,j.useEffect)(()=>{if(!e)return;let t=null,r=()=>{t||document.visibilityState===`hidden`||(n(Date.now()),t=setInterval(()=>n(Date.now()),1e3))},i=()=>{t&&clearInterval(t),t=null},a=()=>document.visibilityState===`hidden`?i():r();return r(),document.addEventListener(`visibilitychange`,a),()=>{i(),document.removeEventListener(`visibilitychange`,a)}},[e]),t}function _e(){let[e,t]=(0,j.useState)(()=>Math.floor(Date.now()/6e4)*6e4);return(0,j.useEffect)(()=>{let e=null,n=()=>{let r=Date.now();t(Math.floor(r/6e4)*6e4),e=setTimeout(n,6e4-r%6e4+50)},r=()=>{e&&clearTimeout(e),e=null},i=()=>{r(),document.visibilityState!==`hidden`&&n()};return i(),document.addEventListener(`visibilitychange`,i),()=>{r(),document.removeEventListener(`visibilitychange`,i)}},[]),e}export{X as a,pe as c,U as d,V as f,he as i,de as l,$ as n,Q as o,ge as r,Z as s,_e as t,H as u};
1
+ import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{t}from"./index-DT21IKeB.js";import{i as n}from"./vendor-react-DwNgTV1j.js";import{a as r,i,o as a}from"./vendor-state-GkUciC5H.js";import{a as o}from"./startup-queries-C9AHlyOp.js";import{t as s}from"./runtime-capabilities-store-CDhzPVU-.js";import{l as c,n as l,u}from"./session-board-status-D2lpFPiI.js";import{u as d}from"./events-BYm_7rfH.js";import{t as f}from"./chat-api-DE-00AQt.js";import{C as p,D as m,E as h,S as g,T as _,_ as v,b as y,c as b,d as x,f as S,g as C,h as ee,i as te,l as w,m as T,p as E,t as ne,v as D,w as O,x as k}from"./useSessionListQuery-Ezaq4rI5.js";import{n as A}from"./card-presentation-1oph2b8P.js";var j=e(n(),1),re=class extends Error{code=`board_confirmation_required`},M=()=>({ok:!1,reason:`pending`,error:null});function N(){g().catch(()=>void 0)}async function P(e,t,n,{confirmCritical:r=!1}){let i=T(e,t);if(n&&(!i||i.severity===`critical`&&!r))return{ok:!1,reason:`confirmation-required`,error:new re};let a=n?`approve`:`deny`,o=E(a,e,t);if(!S(o,a))return M();let s=C(e).filter(e=>e.id!==t);p(e,t);let c=s.length?null:x(e,{needsAttention:!1,attentionReason:null,streaming:!0});try{await m.resolveApproval(e,t,n)}catch(t){return c!==null&&v(e,c),i&&O(e,i),y(o),N(),{ok:!1,reason:`failed`,error:t}}try{await D(e,e=>!e||!e.card.approvals.some(e=>e.id===t),{fresh:!0})}catch{}finally{c!==null&&v(e,c),y(o)}return{ok:!0}}function ie(e,t,n={}){return P(e,t,!0,n)}function ae(e,t){return P(e,t,!1,{})}async function oe(e,t,n){let r=E(`answer`,e,t);if(!S(r,`answer`))return M();let i=x(e,{needsAttention:!1,attentionReason:null,streaming:!0});try{await f.answerQuestion(e,t,{answers:[{selected:[n]}]})}catch(t){return v(e,i),y(r),N(),{ok:!1,reason:`failed`,error:t}}try{await D(e,void 0,{fresh:!0})}catch{}finally{v(e,i),y(r)}return{ok:!0}}async function se(e){let t=E(`start`,e);if(!S(t,`start`))return M();let n=x(e,{streaming:!0});try{await f.startQueuedSession(e)}catch(r){return v(e,n),y(t),N(),{ok:!1,reason:`failed`,error:r}}try{await D(e,void 0,{fresh:!0})}catch{}finally{v(e,n),y(t)}return{ok:!0}}async function ce(e){let t=E(`retry`,e);if(!S(t,`retry`))return M();let n=x(e,{streaming:!0});try{await k(e,`retry`,(t,n)=>m.retry(e,t,n))}catch(r){return v(e,n),y(t),N(),{ok:!1,reason:`failed`,error:r}}try{await D(e,e=>!e||e.session.streaming===!0)}catch{}finally{v(e,n),y(t)}return{ok:!0}}function F(e){_(e.id,{pinned:e.pinned,archived:e.archived,unread:e.unread,needsAttention:e.needsAttention,attentionReason:e.attentionReason}),o.setQueryData(w,t=>t&&{...t,sessions:t.sessions.map(t=>t.id===e.id?{...t,pinned:e.pinned,archived:e.archived,unread:e.unread,needsAttention:e.needsAttention,attentionReason:e.attentionReason}:t)})}async function I(e,t,n,r){let i=E(t,e);if(!S(i,t))return M();let a=x(e,n);try{return F(await m.updateOrganization(e,r)),{ok:!0}}catch(e){return N(),{ok:!1,reason:`failed`,error:e}}finally{v(e,a),y(i)}}function L(e){return ee()?I(e,`markHandled`,{unread:!1,needsAttention:!1,attentionReason:null},{read:!0,dismissAttention:!0}):I(e,`markHandled`,{unread:!1},{read:!0})}function R(e,t=!0){return I(e,`pin`,{pinned:t},{pinned:t})}function z(e,t=!0){return I(e,`archive`,{archived:t},{archived:t})}async function B(e,t){let n=E(`rename`,e);if(!S(n,`rename`))return M();try{let n=await m.renameSession(e,t);return _(e,{name:n}),o.setQueryData(w,t=>t&&{...t,sessions:t.sessions.map(t=>t.id===e?{...t,name:n}:t)}),d({id:e,name:n}),{ok:!0}}catch(e){return N(),{ok:!1,reason:`failed`,error:e}}finally{y(n)}}function V(){b();let e=h(e=>e.pending);return(0,j.useMemo)(()=>({approve:ie,deny:ae,retry:ce,markHandled:L,pin:R,archive:z,rename:B,answer:oe,startNow:se,pending:e,isPending:(t,n,r=``)=>!!e[E(t,n,r)]}),[e])}function H(){return i(()=>({getItem:e=>{try{return t.getItem(e)}catch{return null}},setItem:(e,n)=>{try{t.setItem(e,n)}catch{}},removeItem:e=>{try{t.removeItem(e)}catch{}}}))}function U(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:{}}function W(e,{limit:t=200,maxLength:n=4096}={}){if(!Array.isArray(e))return[];let r=[];for(let i of e)if(!(typeof i!=`string`||i.length>n||r.includes(i))&&(r.push(i),r.length>=t))break;return r}var le=`pisper-board-view`,ue=[`lane`,`project`],G={groupBy:`lane`,projects:[],lanes:[],collapsedLanes:[],doneWindow:`today`};function K(e){return W(e,{limit:4,maxLength:16}).filter(c)}function q(e){let t=U(e);return{groupBy:ue.includes(t.groupBy)?t.groupBy:G.groupBy,projects:W(t.projects),lanes:K(t.lanes),collapsedLanes:K(t.collapsedLanes),doneWindow:l.includes(t.doneWindow)?t.doneWindow:G.doneWindow}}function J(e,t){return e.includes(t)?e.filter(e=>e!==t):[...e,t]}var de=a()(r(e=>({...G,deckCollapsed:!1,setDeckCollapsed:t=>e({deckCollapsed:t===!0}),setGroupBy:t=>e({groupBy:q({groupBy:t}).groupBy}),setProjectFilter:t=>e({projects:W([...t])}),toggleProjectFilter:t=>e(e=>({projects:W(J(e.projects,t))})),setLaneFilter:t=>e({lanes:K([...t])}),toggleLaneFilter:t=>e(e=>({lanes:K(J(e.lanes,t))})),setLaneCollapsed:(t,n)=>e(e=>({collapsedLanes:K(n?[...e.collapsedLanes,t]:e.collapsedLanes.filter(e=>e!==t))})),setDoneWindow:t=>e({doneWindow:q({doneWindow:t}).doneWindow}),clearFilters:()=>e({projects:[],lanes:[]})}),{name:le,storage:H(),version:1,partialize:({groupBy:e,projects:t,lanes:n,collapsedLanes:r,doneWindow:i,deckCollapsed:a})=>({groupBy:e,projects:t,lanes:n,collapsedLanes:r,doneWindow:i,deckCollapsed:a}),merge:(e,t)=>({...t,...q(e),deckCollapsed:U(e).deckCollapsed===!0})}));function fe(){let e=s(e=>e.capabilities.features);return(0,j.useMemo)(()=>{let t=e;return{askUser:t.askUser===!0,sessionQueue:t.sessionQueue===!0}},[e])}function pe(e){let t=ne(),n=h(e=>e.live),r=h(e=>e.localRuns),i=h(e=>e.runningSince),a=h(e=>e.patches),o=h(e=>e.pending),s=h(e=>e.feed.entries),c=h(e=>e.feed.ready),l=h(e=>Math.floor(e.feed.updatedAt/6e4)),u=fe(),d=t.data?.sessions,f=Math.max(t.dataUpdatedAt,l*6e4),p=(0,j.useMemo)(()=>({ready:c,entries:s}),[s,c]);return{query:t,items:(0,j.useMemo)(()=>d||p.ready?te(d??[],{live:n,localRuns:r,runningSince:i,patches:a,pending:o,feed:p},{now:f,capabilities:u,doneWindow:e}):[],[u,e,p,n,r,f,a,o,i,d]),capabilities:u,isLoading:t.isPending&&!p.ready}}function Y(e){return typeof e==`number`&&Number.isFinite(e)?e:null}function X(e,t=!1){return(n,r)=>{let i=Y(e(n)),a=Y(e(r));return i===a?n.id<r.id?-1:+(n.id>r.id):i===null?1:a===null?-1:t?a-i:i-a}}function Z(e){let t=[];e.status===`failed`&&t.push({kind:`failed`}),e.status===`approval`&&t.push({kind:`approval`,critical:e.severity===`critical`});let n=Y(e.questionCount);return(e.status===`question`||n!==null&&n>0)&&t.push({kind:`question`,count:n!==null&&n>0?n:null}),t}function Q(e){let t=e.approvals[0],n=Y(e.questionCount);return e.status===`approval`&&e.approvalsState===`ready`&&e.severity===`standard`&&t&&!t.truncated&&!(n!==null&&n>0)?{kind:`decide`,approvalId:t.id,remaining:e.approvals.length-1}:{kind:`open`}}function me(e){return Math.round(e*.381966%1*1e3)/1e3}function he(e,{now:t,capabilities:n,timeZoneOffsetMinutes:r}){let i=[],a=[],o=[],s=[],c=[],l=new Set;for(let d of e)!d||typeof d.id!=`string`||!d.id||l.has(d.id)||d.session?.archived!==!0&&(l.add(d.id),d.lane===`attention`?i.push(d):d.lane===`running`?a.push(d):d.lane===`queued`?n?.sessionQueue===!0&&o.push(d):d.lane===`done`&&(d.pinned?s.push(d):u(d.since,{now:t,timeZoneOffsetMinutes:r,doneWindow:`today`})&&c.push(d)));let d=i.sort(X(e=>e.since)).map(e=>({group:`attention`,id:e.id,title:e.title,...e.bot?{bot:e.bot}:{},status:e.status,pinned:e.pinned===!0,glyph:`attention`,waitingSince:Y(e.since),reasons:Z(e),quickAction:Q(e)})),f=e=>Y(e.startedAt)??Y(e.since),p=a.sort(X(f)).map((e,t)=>({group:`running`,id:e.id,title:e.title,...e.bot?{bot:e.bot}:{},status:e.status,pinned:e.pinned===!0,glyph:`run`,startedAt:f(e),phase:me(t)})),m=X(e=>e.since),h=o.sort((e,t)=>{let n=Y(e.queuePosition),r=Y(t.queuePosition);return n===r?m(e,t):n===null?1:r===null?-1:n-r}).map((e,t)=>({group:`queued`,id:e.id,title:e.title,...e.bot?{bot:e.bot}:{},status:e.status,pinned:e.pinned===!0,glyph:`queued`,position:Y(e.queuePosition)??t+1})),g=s.sort(X(e=>e.since,!0)).map(e=>({group:`pinned`,id:e.id,title:e.title,...e.bot?{bot:e.bot}:{},status:e.status,pinned:e.pinned===!0,glyph:A(e),at:Y(e.since)})),_=c.sort(X(e=>e.since,!0)).map(e=>({group:`done`,id:e.id,title:e.title,...e.bot?{bot:e.bot}:{},status:e.status,pinned:e.pinned===!0,glyph:A(e),finishedAt:Y(e.since),unread:e.unread===!0})),v={attention:d.length,running:p.length,queued:h.length,pinned:g.length,done:_.length},y=(e,t,n=1/0)=>({id:e,count:t.length,rows:t.slice(0,n),hidden:Math.max(0,t.length-n)}),b=[y(`attention`,d),y(`running`,p,8)];return h.length&&b.push(y(`queued`,h)),g.length&&b.push(y(`pinned`,g)),_.length&&b.push(y(`done`,_,10)),{groups:b,counts:v,order:b.flatMap(e=>e.rows.map(e=>e.id)),longestWaitingId:d[0]?.id??null}}function ge(e,t,n){if(!e.length)return null;let r=t?e.indexOf(t):-1;return r<0?n===1?e[0]:e[e.length-1]:e[r+n]??null}function $(e){let[t,n]=(0,j.useState)(()=>Date.now());return(0,j.useEffect)(()=>{if(!e)return;let t=null,r=()=>{t||document.visibilityState===`hidden`||(n(Date.now()),t=setInterval(()=>n(Date.now()),1e3))},i=()=>{t&&clearInterval(t),t=null},a=()=>document.visibilityState===`hidden`?i():r();return r(),document.addEventListener(`visibilitychange`,a),()=>{i(),document.removeEventListener(`visibilitychange`,a)}},[e]),t}function _e(){let[e,t]=(0,j.useState)(()=>Math.floor(Date.now()/6e4)*6e4);return(0,j.useEffect)(()=>{let e=null,n=()=>{let r=Date.now();t(Math.floor(r/6e4)*6e4),e=setTimeout(n,6e4-r%6e4+50)},r=()=>{e&&clearTimeout(e),e=null},i=()=>{r(),document.visibilityState!==`hidden`&&n()};return i(),document.addEventListener(`visibilitychange`,i),()=>{r(),document.removeEventListener(`visibilitychange`,i)}},[]),e}export{X as a,pe as c,U as d,V as f,he as i,de as l,$ as n,Q as o,ge as r,Z as s,_e as t,H as u};
@@ -1 +1 @@
1
- import{n as e,r as t}from"./use-mobile-C2tPBAza.js";import{t as n}from"./client-store-BSqTT-c2.js";function r(){let r=n(e=>e.client===`mobile-app`),i=e(),a=t()&&r;return(r||i)&&!a&&typeof window<`u`&&!window.pisperDesktop}function i(){let e=n(e=>e.client===`mobile-app`);return t()&&e}export{i as n,r as t};
1
+ import{n as e,r as t}from"./use-mobile-C2tPBAza.js";import{t as n}from"./client-store-B0G8KCEA.js";function r(){let r=n(e=>e.client===`mobile-app`),i=e(),a=t()&&r;return(r||i)&&!a&&typeof window<`u`&&!window.pisperDesktop}function i(){let e=n(e=>e.client===`mobile-app`);return t()&&e}export{i as n,r as t};
@@ -1,2 +1,2 @@
1
- import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t}from"./vendor-react-DwNgTV1j.js";import{o as n}from"./vendor-state-GkUciC5H.js";import{u as r}from"./query-Bj-DUNYq.js";import{t as i}from"./useQuery-DdcpUQhO.js";import{a,i as o,n as s,o as c,t as l}from"./startup-queries-CceboYee.js";import{t as u}from"./component-changes-Q9Bf64Ob.js";import{a as d,c as f,s as p,u as m}from"./api-CIB7ZPX3.js";import{t as h}from"./runtime-capabilities-store-DpEKnn1b.js";import{a as g,c as _,r as v,s as y,t as ee}from"./session-board-status-D2lpFPiI.js";import{t as b}from"./chat-api-aEirz9it.js";import{n as x}from"./session-organization-api-BFW_7Myv.js";import{c as te,s as ne}from"./session-workspaces-Csgpuzxd.js";import{i as re}from"./session-questions-Cf-1g85h.js";var S=400,ie=2e3,ae=160,oe=512,se=400,ce=240,le=240,ue=8,C=40,de=80,fe=3;function w(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:{}}function T(e){return typeof e==`string`?e:``}function E(e){return typeof e==`string`&&Number.isFinite(Date.parse(e))?e:null}function D(e,t){let n=Array.from(e);return n.length>t?`${n.slice(0,t-1).join(``)}…`:e}function pe(e,t){let n=w(t),r=e===`bash`?n.command:n.path??n.file_path??n.url??n.query??n.pattern;return D(((typeof r==`string`?r:Object.values(n).find(e=>typeof e==`string`))||``).replace(/\s+/g,` `).trim(),ae)}function me(e){let t=w(e);if(t.type===`model`)return{type:`model`,stage:T(t.stage)||`thinking`};if(t.type===`tool`&&T(t.name)){let e=T(t.name);return{type:`tool`,name:e,summary:pe(e,t.args),startedAt:E(t.startedAt)}}return null}function he(e){let t=w(e),n=T(t.id);if(!n)return null;let r=w(t.args),i=w(t.fileChange);return{id:n,toolName:T(t.toolName),toolCallId:T(t.toolCallId),args:r,command:T(r.command),path:T(i.path)||T(r.path)||T(r.file_path),reason:D(T(t.reason),S),risk:T(t.risk),severity:g(t),createdAt:E(t.createdAt)}}function ge(e){if(!Array.isArray(e))return[];let t=new Set,n=[];for(let r of e){let e=he(r);!e||t.has(e.id)||(t.add(e.id),n.push(e))}return n}function _e(e){return typeof e==`number`&&Number.isFinite(e)?e:null}function O(e){let t=_e(e);return t===null?null:Math.max(0,Math.floor(t))}var ve=/[\u0000-\u001f\u007f-\u009f]/g;function k(e,t){return D(T(e).replace(ve,` `).trimEnd(),t)}function ye(e){let t=/^(?:path|file_path): (.+)$/m.exec(e);return t?t[1].trim():``}function be(e){let t=w(e),n=T(t.id);if(!n)return null;let r=T(t.toolName),i=T(t.argsPreview),a=D(i,oe),o=t.argsTruncated===!0||a!==i,s=r===`bash`;return{id:n,toolName:r,toolCallId:``,args:{},command:s?a:``,path:s?``:ye(a),reason:D(T(t.reason),S),risk:T(t.risk),severity:g({severity:t.severity,reason:t.reason,toolName:r}),createdAt:E(t.createdAt),argsText:s?``:a,truncated:o}}function xe(e){let t=w(e);return t.type===`model`?{type:`model`,stage:D(T(t.stage),C)}:t.type===`tool`&&T(t.name)?{type:`tool`,name:D(T(t.name),C),summary:D(T(t.argsSummary).replace(/\s+/g,` `).trim(),ae),startedAt:E(t.startedAt)}:null}function Se(e){let t=w(e),n=T(t.id),r=k(t.name,C);if(!n||!r)return null;let i=w(t.avatar);return{id:D(n,C),name:r,character:D(T(i.character),C),color:D(T(i.color),C)}}function Ce(e){return e?{bot:e}:{}}function we(e){let t=w(e),n=T(t.status);return n?{added:O(t.added),removed:O(t.removed),files:O(t.files),status:D(n,C)}:null}function Te(e){let t=w(e),n=w(t.error),r=k(n.message,se),i=w(t.agents),a=O(i.running),o=O(i.total),s=_e(t.contextPct),c=ee.includes(T(t.outcome))?t.outcome:null,l=[],u=new Set;for(let e of Array.isArray(t.approvals)?t.approvals:[]){let t=be(e);if(!(!t||u.has(t.id))&&(u.add(t.id),l.push(t),l.length>=ue))break}return{boardStatus:D(T(t.boardStatus),C),runId:D(T(t.runId),de),activity:xe(t.activity),startedAt:E(t.startedAt),lastActivityAt:E(t.lastActivityAt),finishedAt:E(t.finishedAt),outcome:c,error:r?{message:r,kind:D(T(n.kind),C)||`runtime`}:null,approvals:l,queuedInputCount:O(t.queuedInputCount)??0,contextPct:s===null?null:Math.min(100,Math.max(0,s)),changeStats:we(t.changeStats),preview:k(t.lastAssistantPreview,ce),tail:(Array.isArray(t.tail)?t.tail:[]).map(e=>k(e,le)).filter(e=>e.trim()).slice(-3),agents:a!==null&&o!==null&&o>0?{running:Math.min(a,o),total:o}:null,totalTokens:O(w(t.usage).totalTokens),...Ce(Se(t.bot))}}function Ee(e){let t=w(e),n=T(t.id);if(!n)return null;let r={...t,id:n};return delete r.card,r}function De(e){let t=Ee(e);return t?{session:t,card:Te(w(e).card)}:null}function Oe(e){return typeof e==`number`&&Number.isSafeInteger(e)&&e>=0?e:null}function ke(e){let t=w(e),n=[],r=new Set;for(let e of Array.isArray(t.sessions)?t.sessions:[]){let t=De(e);!t||r.has(t.session.id)||(r.add(t.session.id),n.push(t))}let i=T(t.nextCursor);return{items:n,nextCursor:i&&i.length<=1024?i:null,revision:Oe(t.revision)}}function Ae(){return-new Date().getTimezoneOffset()}function je(e){let t=w(e);return{streaming:t.streaming===!0,approvals:ge(t.approvals),error:D(T(t.error),ie),activity:me(t.currentActivity),startedAt:E(t.startedAt),lastActivityAt:E(t.lastActivityAt),finishedAt:E(t.finishedAt)}}var A={listSessions:()=>b.listSessions(),getLiveDetail:async(e,t)=>je(await b.getLiveSession(e,{signal:t,timeout:15e3})),resolveApproval:async(e,t,n)=>{try{return w(await b.resolveApproval(e,t,n)).alreadyResolved===!0?`already-resolved`:`resolved`}catch(e){if(e instanceof m&&e.status===404)return`missing`;throw e}},retry:(e,t,n)=>b.retryLastTurn(e,t,{signal:n}),updateOrganization:(e,t)=>x(e,t),renameSession:async(e,t)=>{let n=w(await b.renameSession(e,t));return typeof n.name==`string`?n.name:t},listBoardView:async e=>{let t=[],n=new Set,r=``,i=null;for(let a=0;a<fe;a+=1){let o=new URLSearchParams({view:`board`,window:`7d`,limit:`200`,tzOffset:String(Ae())});r&&o.set(`cursor`,r);let s=await d(`/api/sessions?${o}`,{signal:e,timeout:15e3,parse:ke});a===0&&(i=s.revision);for(let e of s.items)n.has(e.session.id)||(n.add(e.session.id),t.push(e));if(r=s.nextCursor??``,!r||t.length>=500)break}return{items:t.slice(0,500),nextCursor:r||null,revision:i}},openBoardEvents:async(e,t,n)=>{await p(n);let r=e===null?``:`?after=${encodeURIComponent(String(e))}`,i;try{i=await fetch(`/api/board/events${r}`,{signal:n,headers:{Accept:`text/event-stream`}})}catch(e){throw n.aborted?e:new m(e instanceof Error?e.message:`network`,{kind:`network`})}await f(i,(e,n)=>t(e,n))}};function j(e=`legacy`){return{mode:e,ready:!1,revision:null,awaitingSnapshot:!1,entries:{},updatedAt:0}}function M(){return{upserts:[],removed:[],resync:!1,reconnect:!1,truncated:!1,catalog:!1,changed:!1}}function Me(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:{}}function Ne(e,t,n,r=Date.now()){let i=M(),a={},o=n??e.revision??0;for(let e of t)a[e.session.id]={...e,revision:o,receivedAt:r},i.upserts.push(e.session);for(let t of Object.keys(e.entries))t in a||i.removed.push(t);return i.changed=!0,{feed:{...e,ready:!0,revision:n??e.revision,awaitingSnapshot:!1,entries:a,updatedAt:r},effects:i}}function Pe(e,t,n,r=Date.now()){let i=Me(n),a=Oe(i.revision),o={feed:e,effects:M()};if(t===`snapshot`){if(a===null||!Array.isArray(i.items))return o;let t=[],n=new Set;for(let e of i.items){let r=De(e);!r||n.has(r.session.id)||(n.add(r.session.id),t.push(r))}let s=Ne(e,t,a,r);return s.effects.truncated=i.truncated===!0,s}if(t===`resync_required`){let t=M();return t.resync=!0,t.reconnect=i.reason===`flush_failed`,t.changed=!e.awaitingSnapshot,{feed:{...e,awaitingSnapshot:!0},effects:t}}if(e.awaitingSnapshot||a===null||e.revision!==null&&a<=e.revision)return o;if(t===`heartbeat`||t===`component_changed`||t===`catalog_changed`){let n=M();return n.changed=!0,n.catalog=t===`catalog_changed`,{feed:{...e,revision:a,updatedAt:r},effects:n}}if(t!==`session_card`)return o;let s=typeof i.id==`string`?i.id:``;if(!s)return o;let c=e.entries[s];if(c&&a<=c.revision)return o;let l=M();if(l.changed=!0,i.removed===!0){let t={...e.entries};return delete t[s],c&&l.removed.push(s),{feed:{...e,revision:a,entries:t,updatedAt:r},effects:l}}let u=Ee(i.session);return!u||u.id!==s?{feed:{...e,revision:a,updatedAt:r},effects:l}:(l.upserts.push(u),{feed:{...e,revision:a,entries:{...e.entries,[s]:{session:u,card:Te(i.card),revision:a,receivedAt:r}},updatedAt:r},effects:l})}var N=l,Fe=3e3,Ie=2e3,Le=3e4,Re=1e3,ze=3e4,Be=6e4,Ve=4e3,He=4e4,Ue=300,We=6e3,Ge=6e4,Ke=1e3,qe={feed:j(),live:{},localRuns:{},runningSince:{},patches:{},pending:{}},P=n()(()=>({...qe}));function Je(){return a.getQueryData(N)?.sessions??[]}function F(){return s(`sessions`,!0)}async function Ye(){o(`sessions`),await F()}async function Xe(e,t=()=>!0,{fresh:n=!1}={}){if(V.active&&V.mode===`events`&&V.events.controller){if(!n&&t(P.getState().feed.entries[e]))return;await Ze(e,t,Ve);return}if(V.active&&V.mode!==`legacy`&&I().view){await K();return}await Ye().catch(()=>void 0)}function Ze(e,t,n){return new Promise(r=>{let i=P.getState().feed.entries[e],a=null,o=()=>{},s=()=>{a&&clearTimeout(a),o(),r()};o=P.subscribe(n=>{let r=n.feed.entries[e];r!==i&&t(r)&&s()}),a=setTimeout(s,n)})}function I(){let{capabilities:e,loaded:t}=h.getState(),n=e.features;return{loaded:t,view:t&&n[`board.view`]===!0,events:t&&n[`board.events`]===!0}}function Qe(){return I().view}var $e=0;function et(e,t){let n=++$e;return P.setState(r=>({patches:{...r.patches,[e]:[...r.patches[e]??[],{token:n,patch:t}]}})),n}function tt(e,t){P.setState(n=>{let r=n.patches[e];if(!r?.some(e=>e.token===t))return n;let i=r.filter(e=>e.token!==t),a={...n.patches};return i.length?a[e]=i:delete a[e],{patches:a}})}function L(e,t){let n=t[e.id];return n?.length?n.reduce((e,t)=>({...e,...t.patch}),e):e}function R(e,t,n=``){return e===`approve`||e===`deny`?`approval:${t}:${n}`:`${e}:${t}`}function nt(e,t){return!P.getState().pending[e]&&(P.setState(n=>({pending:{...n.pending,[e]:t}})),!0)}function rt(e){P.setState(t=>{if(!(e in t.pending))return t;let n={...t.pending};return delete n[e],{pending:n}})}function z(e,t){P.setState(n=>{let r=t(n.live[e]);if(r===n.live[e])return n;let i={...n.live};return r?i[e]=r:delete i[e],{live:i}})}function it(e,t){P.setState(n=>{let r=n.feed.entries[e];if(!r)return n;let i=t(r.card.approvals);return i===r.card.approvals?n:{feed:{...n.feed,entries:{...n.feed.entries,[e]:{...r,card:{...r.card,approvals:i}}}}}})}function at(e,t){z(e,e=>e&&e.approvals.some(e=>e.id===t)?{...e,approvals:e.approvals.filter(e=>e.id!==t)}:e??null),it(e,e=>e.some(e=>e.id===t)?e.filter(e=>e.id!==t):e)}function ot(e,t){if(P.getState().feed.entries[e]){it(e,e=>e.some(e=>e.id===t.id)?e:[...e,t]);return}z(e,e=>{let n=e??B(`ready`);return n.approvals.some(e=>e.id===t.id)?n:{...n,approvals:[...n.approvals,t]}})}function st(e,t){let n=P.getState(),r=n.live[e]?.approvals.find(e=>e.id===t);if(r)return r;let i=n.feed.entries[e]?.card.approvals.find(e=>e.id===t);return i&&!i.truncated?i:void 0}function ct(e,t){P.setState(n=>{let r=n.feed.entries[e];return r?{feed:{...n.feed,entries:{...n.feed.entries,[e]:{...r,session:{...r.session,...t},receivedAt:Date.now()}}}}:n})}function lt(e){let t=P.getState(),n=t.feed.entries[e];return n&&V.mode!==`legacy`?n.card.approvals:t.live[e]?.approvals??[]}function B(e){return{status:e,approvals:[],error:``,activity:null,startedAt:null,fetchedAt:null,failures:0}}var V={retainers:0,active:!1,mode:`legacy`,pollTimer:null,releaseTimer:null,catalogTimer:null,liveTimers:new Map,liveControllers:new Map,liveNextAt:new Map,runControllers:new Map,events:{controller:null,retryTimer:null,attempt:0,blockedUntil:0,blockTimer:null,watchdog:null},view:{inFlight:null,controller:null,failures:0},feedSettled:!1,catalogFetchAt:0,cleanups:[]};function H(){return typeof document>`u`||document.visibilityState!==`hidden`}function ut(){let e=I();return e.events&&Date.now()>=V.events.blockedUntil?`events`:e.view?`view`:`legacy`}function U(e=P.getState().feed){return V.mode!==`legacy`&&e.ready}function W(){V.pollTimer&&clearTimeout(V.pollTimer),V.pollTimer=null}function G(e){W(),!(!V.active||V.mode===`events`||!H())&&(V.pollTimer=setTimeout(()=>{V.pollTimer=null,ft()},e))}function dt(){return V.view.failures?Math.min(Ie*2**V.view.failures,Le):Ie}async function ft(){let e=V.mode;if(e===`view`)await pt();else try{await F()}catch{}!V.active||V.mode!==e||(Z(),G(e===`view`?dt():Fe))}function pt(){if(V.view.inFlight)return V.view.inFlight;let e=new AbortController;V.view.controller=e;let t=(async()=>{try{let t=await A.listBoardView(e.signal);if(e.signal.aborted||!V.active)return;V.view.failures=0,V.feedSettled=!0,bt(Ne(P.getState().feed,t.items,V.mode===`events`?null:t.revision))}catch{if(e.signal.aborted)return;V.view.failures+=1,V.feedSettled=!0,Z()}finally{V.view.controller===e&&(V.view.controller=null,V.view.inFlight=null)}})();return V.view.inFlight=t,t}async function K(){let e=V.view.inFlight;e&&await e,await pt()}function mt(){V.view.controller?.abort(),V.view.controller=null,V.view.inFlight=null}function q(){let e=V.events;e.retryTimer&&clearTimeout(e.retryTimer),e.retryTimer=null,J();let t=e.controller;e.controller=null,t?.abort()}function J(){V.events.watchdog&&clearTimeout(V.events.watchdog),V.events.watchdog=null}function ht(e){J(),V.events.watchdog=setTimeout(()=>{V.events.watchdog=null;let t=V.events;t.controller!==e||e.signal.aborted||(t.controller=null,e.abort(),!(!V.active||V.mode!==`events`)&&(gt(0),Z()))},He)}function gt(e){let t=V.events;t.retryTimer&&clearTimeout(t.retryTimer),t.retryTimer=setTimeout(()=>{t.retryTimer=null,Y()},e)}function _t(e){return e instanceof m&&e.kind===`http`&&typeof e.status==`number`&&e.status>=400&&e.status<500}function vt(){let e=V.events;e.blockedUntil=Date.now()+Be,e.blockTimer&&clearTimeout(e.blockTimer),e.blockTimer=setTimeout(()=>{e.blockTimer=null,X()},60010),X()}function Y(){let e=V.events;if(!V.active||V.mode!==`events`||e.controller||e.retryTimer||!H())return;let t=new AbortController;e.controller=t,ht(t);let n=P.getState().feed,r=n.ready&&!n.awaitingSnapshot?n.revision:null,i=!1,a=!1;A.openBoardEvents(r,(n,r)=>{if(t.signal.aborted||e.controller!==t)return!1;if(ht(t),i=!0,e.attempt=0,V.feedSettled=!0,yt(n,r).reconnect)return a=!0,!1},t.signal).then(()=>null,e=>e).then(n=>{if(e.controller===t&&(e.controller=null,J(),!(t.signal.aborted||!V.active))){if(V.feedSettled=!0,n&&_t(n))vt();else{let t=a?0:i?Re:Math.min(Re*2**e.attempt,ze);!i&&!a&&(e.attempt+=1),gt(t)}Z()}})}function yt(e,t){let n=Pe(P.getState().feed,e,t);return bt(n,e===`heartbeat`||e===`component_changed`||e===`catalog_changed`),u(e,t,n.effects.changed),n.effects}function bt({feed:e,effects:t},n=!1){t.changed&&P.setState({feed:{...e,mode:V.mode}}),t.upserts.length&&xt(t.upserts),(t.removed.length||t.resync||t.catalog)&&St(),t.changed&&!n&&Z()}function xt(e){let t=a.getQueryData(N);if(!t||!e.length)return;let n=new Map(t.sessions.map((e,t)=>[e.id,t])),r=null,i=[];for(let a of e){let e=n.get(a.id);if(e===void 0){i.some(e=>e.id===a.id)||i.push(a);continue}let o=(r??t.sessions)[e];JSON.stringify(o)!==JSON.stringify(a)&&(r??=[...t.sessions],r[e]=a)}!r&&!i.length||a.setQueryData(N,{...t,sessions:[...i,...r??t.sessions]})}function St(){V.catalogTimer||!V.active||(V.catalogTimer=setTimeout(()=>{V.catalogTimer=null,V.active&&F().catch(()=>void 0)},Ue))}function X(){if(!V.active)return;let e=ut();e!==V.mode&&(V.mode=e,V.feedSettled=!1,V.view.failures=0,q(),mt(),W(),P.setState(t=>({feed:e===`legacy`?j(`legacy`):{...t.feed,mode:e}})),e===`events`?(V.events.attempt=0,Y()):G(0),Z())}function Ct(){V.retainers+=1,V.releaseTimer&&=(clearTimeout(V.releaseTimer),null),V.active||wt();let e=!1;return()=>{e||(e=!0,V.retainers=Math.max(0,V.retainers-1),!(V.retainers>0)&&(V.releaseTimer=setTimeout(()=>{V.releaseTimer=null,V.retainers===0&&Tt()},Ke)))}}function wt(){V.active=!0,V.mode=ut(),V.feedSettled=!1,V.view.failures=0,V.events.attempt=0,P.setState(e=>({feed:V.mode===`legacy`?j(`legacy`):{...e.feed,mode:V.mode}}));let e=r(N);if(V.catalogFetchAt=Math.max(V.catalogFetchAt,a.getQueryState(N)?.dataUpdatedAt??0),V.cleanups.push(a.getQueryCache().subscribe(t=>{if(t.type===`updated`&&t.query.queryHash===e){if(t.action.type===`fetch`){V.catalogFetchAt=Date.now();return}t.action.type===`success`&&Dt()}})),V.cleanups.push(h.subscribe(()=>X())),typeof document<`u`){let e=()=>{if(H()){V.mode===`events`?Y():G(0),Z();return}W(),q()};document.addEventListener(`visibilitychange`,e),V.cleanups.push(()=>document.removeEventListener(`visibilitychange`,e))}if(Dt(),V.mode===`events`)Y();else if(V.mode===`view`)G(0);else{let e=a.getQueryState(N)?.dataUpdatedAt??0;G(Math.max(0,e+Fe-Date.now()))}}function Tt(){V.active=!1,W(),V.releaseTimer&&clearTimeout(V.releaseTimer),V.catalogTimer&&clearTimeout(V.catalogTimer),V.events.blockTimer&&clearTimeout(V.events.blockTimer),V.releaseTimer=null,V.catalogTimer=null,V.events.blockTimer=null,q(),mt();for(let e of V.cleanups.splice(0))e();for(let e of V.liveTimers.values())clearTimeout(e);for(let e of V.liveControllers.values())e.abort();for(let e of V.runControllers.values())e.controller.abort();V.liveTimers.clear(),V.liveControllers.clear(),V.liveNextAt.clear(),V.runControllers.clear(),P.setState({live:{},localRuns:{},runningSince:{}})}async function Et(){let e=F();V.active&&V.mode===`view`&&await K(),await e}function Dt(){let e=Je(),t=Date.now(),{runningSince:n,localRuns:r,feed:i}=P.getState(),a=U(i)?[...Object.values(i.entries).map(e=>e.session),...e]:e,o={},s=!1;for(let e of a)e.streaming!==!0||e.id in o||(o[e.id]=n[e.id]??r[e.id]?.startedAt??t,e.id in n||(s=!0));s||=Object.keys(n).some(e=>!(e in o)),s&&P.setState({runningSince:o}),U(i)&&Ot(e),Z()}function Ot(e){let t=V.catalogFetchAt,n=new Map(e.map(e=>[e.id,e])),r=[],i={};for(let e of Object.values(P.getState().feed.entries)){if((e.receivedAt??1/0)>=t){r.push(e.session);continue}let a=n.get(e.session.id);a&&a!==e.session&&JSON.stringify(a)!==JSON.stringify(e.session)&&(i[a.id]=a)}Object.keys(i).length&&P.setState(e=>{let t={...e.feed.entries};for(let[e,n]of Object.entries(i))t[e]&&(t[e]={...t[e],session:n});return{feed:{...e.feed,entries:t}}}),xt(r)}function kt(){let{patches:e,feed:t}=P.getState(),n=new Set,r=Date.now();if(U(t)){for(let i of Object.values(t.entries)){let t=L(i.session,e);if(t.archived===!0)continue;let a=i.card.approvals;_({...t,card:{approvals:a}},{now:r}).status===`approval`&&(!a.length||a.some(e=>e.truncated))&&n.add(i.session.id)}return n}if(V.mode!==`legacy`&&!V.feedSettled)return n;for(let t of Je()){let i=L(t,e);i.archived!==!0&&_(i,{now:r}).status===`approval`&&n.add(t.id)}return n}function At(e){let t=V.liveTimers.get(e);t&&clearTimeout(t),V.liveTimers.delete(e),V.liveControllers.get(e)?.abort(),V.liveControllers.delete(e),V.liveNextAt.delete(e),z(e,()=>null)}function Z(){if(!V.active)return;let e=kt();for(let t of Object.keys(P.getState().live))e.has(t)||At(t);for(let t of[...V.liveControllers.keys()])e.has(t)||At(t);if(!H())return;let t=Date.now(),n=P.getState().live,r=[...e].filter(e=>!V.liveControllers.has(e)&&(V.liveNextAt.get(e)??0)<=t).sort((e,t)=>Number(!!n[e])-Number(!!n[t])||(V.liveNextAt.get(e)??0)-(V.liveNextAt.get(t)??0)),i=Math.max(0,Math.min(3-V.liveControllers.size,4-V.liveControllers.size-V.runControllers.size-!!V.events.controller));r.slice(0,i).forEach((e,t)=>jt(e,t*250))}function jt(e,t){let n=new AbortController;V.liveControllers.set(e,n);let r=async()=>{V.liveTimers.delete(e),z(e,e=>e??B(`loading`));try{let t=await A.getLiveDetail(e,n.signal);if(n.signal.aborted||V.liveControllers.get(e)!==n)return;V.liveNextAt.set(e,Date.now()+We);let{pending:r}=P.getState(),i=t.approvals.filter(t=>!r[R(`approve`,e,t.id)]);z(e,()=>({status:`ready`,approvals:i,error:t.error,activity:t.activity,startedAt:t.startedAt,fetchedAt:Date.now(),failures:0}))}catch{if(n.signal.aborted||V.liveControllers.get(e)!==n)return;let t=(P.getState().live[e]?.failures??0)+1;V.liveNextAt.set(e,Date.now()+Math.min(We*2**t,Ge)),z(e,e=>({...e??B(`error`),status:e?.approvals.length?e.status:`error`,failures:t}))}finally{V.liveControllers.get(e)===n&&V.liveControllers.delete(e)}};t<=0?r():V.liveTimers.set(e,setTimeout(()=>void r(),t))}var Mt=class extends Error{code=`board_run_active`},Nt=0;function Pt(e,t){return e===t?!0:!e||!t||e.type!==t.type?!1:e.type===`model`?e.stage===t.stage:e.name===t.name&&e.summary===t.summary}function Q(e,t,n){P.setState(r=>{let i=r.localRuns[e];return!i||i.token!==t||(n.activity===void 0||Pt(i.activity,n.activity))&&(n.runId===void 0||n.runId===i.runId)?r:{localRuns:{...r.localRuns,[e]:{...i,...n}}}})}function Ft(e,t,n,r){if(n===`run`)Q(e,t,{runId:typeof r.runId==`string`?r.runId:``});else if(n===`tool_start`){let n=typeof r.name==`string`?r.name:``;n&&Q(e,t,{activity:{type:`tool`,name:n,summary:pe(n,r.args),startedAt:typeof r.startedAt==`string`?r.startedAt:new Date().toISOString()}})}else if(n===`tool_end`||n===`thinking_patch`||n===`thinking_reset`)Q(e,t,{activity:{type:`model`,stage:`thinking`}});else if(n===`text_delta`||n===`text_patch`)Q(e,t,{activity:{type:`model`,stage:`responding`}});else if(n===`permission_request`){let t=he(r);t&&ot(e,t),o(`sessions`)}else n===`permission_resolved`&&(typeof r.id==`string`&&at(e,r.id),o(`sessions`))}function It(){let e=V.runControllers.size-2;for(let[t,n]of V.runControllers){if(e<=0)return;n.accepted&&(V.runControllers.delete(t),n.controller.abort(),--e)}}function Lt(e,t,n){if(V.runControllers.has(e))return Promise.reject(new Mt);let r=new AbortController,i=++Nt,a={controller:r,accepted:!1};V.runControllers.set(e,a),It();let o=Date.now();return P.setState(n=>({localRuns:{...n.localRuns,[e]:{token:i,kind:t,runId:``,startedAt:o,activity:{type:`model`,stage:`starting`}}}})),new Promise((t,o)=>{let s=()=>{a.accepted||(a.accepted=!0,It(),t())};n((t,n)=>{if(r.signal.aborted)return!1;t===`run`&&s(),Ft(e,i,t,n)},r.signal).then(s,e=>{a.accepted||o(e)}).finally(()=>{V.runControllers.get(e)===a&&V.runControllers.delete(e),P.setState(t=>{if(t.localRuns[e]?.token!==i)return t;let n={...t.localRuns};return delete n[e],{localRuns:n}}),V.active&&(V.mode===`legacy`?F().catch(()=>void 0):I().view&&(V.mode===`view`||!V.events.controller)&&K(),Z())})})}var Rt=e(t(),1);function zt(){(0,Rt.useEffect)(()=>Ct(),[])}function Bt(e){let t=e.queue;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t;return{startAfter:typeof n.startAfter==`string`?n.startAfter:``,position:typeof n.position==`number`&&Number.isSafeInteger(n.position)&&n.position>0?n.position:null}}var Vt=120;function Ht(e){if(!e)return null;let t=Date.parse(e);return Number.isFinite(t)?t:null}function $(e){let t=typeof e.name==`string`?e.name.trim():``;if(t)return D(t,Vt);let n=typeof e.firstMessage==`string`?e.firstMessage.trim():``,r=n.search(/[。!?!?\n]|\.\s/u);return D((r<0?n:n.slice(0,n[r]===`
1
+ import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t}from"./vendor-react-DwNgTV1j.js";import{o as n}from"./vendor-state-GkUciC5H.js";import{u as r}from"./query-Bj-DUNYq.js";import{t as i}from"./useQuery-DdcpUQhO.js";import{a,i as o,n as s,o as c,t as l}from"./startup-queries-C9AHlyOp.js";import{t as u}from"./component-changes-Q9Bf64Ob.js";import{a as d,c as f,s as p,u as m}from"./api-3pnTJcsp.js";import{t as h}from"./runtime-capabilities-store-CDhzPVU-.js";import{a as g,c as _,r as v,s as y,t as ee}from"./session-board-status-D2lpFPiI.js";import{t as b}from"./chat-api-DE-00AQt.js";import{n as x}from"./session-organization-api-A3EudhgK.js";import{c as te,s as ne}from"./session-workspaces-Csgpuzxd.js";import{i as re}from"./session-questions-Cf-1g85h.js";var S=400,ie=2e3,ae=160,oe=512,se=400,ce=240,le=240,ue=8,C=40,de=80,fe=3;function w(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:{}}function T(e){return typeof e==`string`?e:``}function E(e){return typeof e==`string`&&Number.isFinite(Date.parse(e))?e:null}function D(e,t){let n=Array.from(e);return n.length>t?`${n.slice(0,t-1).join(``)}…`:e}function pe(e,t){let n=w(t),r=e===`bash`?n.command:n.path??n.file_path??n.url??n.query??n.pattern;return D(((typeof r==`string`?r:Object.values(n).find(e=>typeof e==`string`))||``).replace(/\s+/g,` `).trim(),ae)}function me(e){let t=w(e);if(t.type===`model`)return{type:`model`,stage:T(t.stage)||`thinking`};if(t.type===`tool`&&T(t.name)){let e=T(t.name);return{type:`tool`,name:e,summary:pe(e,t.args),startedAt:E(t.startedAt)}}return null}function he(e){let t=w(e),n=T(t.id);if(!n)return null;let r=w(t.args),i=w(t.fileChange);return{id:n,toolName:T(t.toolName),toolCallId:T(t.toolCallId),args:r,command:T(r.command),path:T(i.path)||T(r.path)||T(r.file_path),reason:D(T(t.reason),S),risk:T(t.risk),severity:g(t),createdAt:E(t.createdAt)}}function ge(e){if(!Array.isArray(e))return[];let t=new Set,n=[];for(let r of e){let e=he(r);!e||t.has(e.id)||(t.add(e.id),n.push(e))}return n}function _e(e){return typeof e==`number`&&Number.isFinite(e)?e:null}function O(e){let t=_e(e);return t===null?null:Math.max(0,Math.floor(t))}var ve=/[\u0000-\u001f\u007f-\u009f]/g;function k(e,t){return D(T(e).replace(ve,` `).trimEnd(),t)}function ye(e){let t=/^(?:path|file_path): (.+)$/m.exec(e);return t?t[1].trim():``}function be(e){let t=w(e),n=T(t.id);if(!n)return null;let r=T(t.toolName),i=T(t.argsPreview),a=D(i,oe),o=t.argsTruncated===!0||a!==i,s=r===`bash`;return{id:n,toolName:r,toolCallId:``,args:{},command:s?a:``,path:s?``:ye(a),reason:D(T(t.reason),S),risk:T(t.risk),severity:g({severity:t.severity,reason:t.reason,toolName:r}),createdAt:E(t.createdAt),argsText:s?``:a,truncated:o}}function xe(e){let t=w(e);return t.type===`model`?{type:`model`,stage:D(T(t.stage),C)}:t.type===`tool`&&T(t.name)?{type:`tool`,name:D(T(t.name),C),summary:D(T(t.argsSummary).replace(/\s+/g,` `).trim(),ae),startedAt:E(t.startedAt)}:null}function Se(e){let t=w(e),n=T(t.id),r=k(t.name,C);if(!n||!r)return null;let i=w(t.avatar);return{id:D(n,C),name:r,character:D(T(i.character),C),color:D(T(i.color),C)}}function Ce(e){return e?{bot:e}:{}}function we(e){let t=w(e),n=T(t.status);return n?{added:O(t.added),removed:O(t.removed),files:O(t.files),status:D(n,C)}:null}function Te(e){let t=w(e),n=w(t.error),r=k(n.message,se),i=w(t.agents),a=O(i.running),o=O(i.total),s=_e(t.contextPct),c=ee.includes(T(t.outcome))?t.outcome:null,l=[],u=new Set;for(let e of Array.isArray(t.approvals)?t.approvals:[]){let t=be(e);if(!(!t||u.has(t.id))&&(u.add(t.id),l.push(t),l.length>=ue))break}return{boardStatus:D(T(t.boardStatus),C),runId:D(T(t.runId),de),activity:xe(t.activity),startedAt:E(t.startedAt),lastActivityAt:E(t.lastActivityAt),finishedAt:E(t.finishedAt),outcome:c,error:r?{message:r,kind:D(T(n.kind),C)||`runtime`}:null,approvals:l,queuedInputCount:O(t.queuedInputCount)??0,contextPct:s===null?null:Math.min(100,Math.max(0,s)),changeStats:we(t.changeStats),preview:k(t.lastAssistantPreview,ce),tail:(Array.isArray(t.tail)?t.tail:[]).map(e=>k(e,le)).filter(e=>e.trim()).slice(-3),agents:a!==null&&o!==null&&o>0?{running:Math.min(a,o),total:o}:null,totalTokens:O(w(t.usage).totalTokens),...Ce(Se(t.bot))}}function Ee(e){let t=w(e),n=T(t.id);if(!n)return null;let r={...t,id:n};return delete r.card,r}function De(e){let t=Ee(e);return t?{session:t,card:Te(w(e).card)}:null}function Oe(e){return typeof e==`number`&&Number.isSafeInteger(e)&&e>=0?e:null}function ke(e){let t=w(e),n=[],r=new Set;for(let e of Array.isArray(t.sessions)?t.sessions:[]){let t=De(e);!t||r.has(t.session.id)||(r.add(t.session.id),n.push(t))}let i=T(t.nextCursor);return{items:n,nextCursor:i&&i.length<=1024?i:null,revision:Oe(t.revision)}}function Ae(){return-new Date().getTimezoneOffset()}function je(e){let t=w(e);return{streaming:t.streaming===!0,approvals:ge(t.approvals),error:D(T(t.error),ie),activity:me(t.currentActivity),startedAt:E(t.startedAt),lastActivityAt:E(t.lastActivityAt),finishedAt:E(t.finishedAt)}}var A={listSessions:()=>b.listSessions(),getLiveDetail:async(e,t)=>je(await b.getLiveSession(e,{signal:t,timeout:15e3})),resolveApproval:async(e,t,n)=>{try{return w(await b.resolveApproval(e,t,n)).alreadyResolved===!0?`already-resolved`:`resolved`}catch(e){if(e instanceof m&&e.status===404)return`missing`;throw e}},retry:(e,t,n)=>b.retryLastTurn(e,t,{signal:n}),updateOrganization:(e,t)=>x(e,t),renameSession:async(e,t)=>{let n=w(await b.renameSession(e,t));return typeof n.name==`string`?n.name:t},listBoardView:async e=>{let t=[],n=new Set,r=``,i=null;for(let a=0;a<fe;a+=1){let o=new URLSearchParams({view:`board`,window:`7d`,limit:`200`,tzOffset:String(Ae())});r&&o.set(`cursor`,r);let s=await d(`/api/sessions?${o}`,{signal:e,timeout:15e3,parse:ke});a===0&&(i=s.revision);for(let e of s.items)n.has(e.session.id)||(n.add(e.session.id),t.push(e));if(r=s.nextCursor??``,!r||t.length>=500)break}return{items:t.slice(0,500),nextCursor:r||null,revision:i}},openBoardEvents:async(e,t,n)=>{await p(n);let r=e===null?``:`?after=${encodeURIComponent(String(e))}`,i;try{i=await fetch(`/api/board/events${r}`,{signal:n,headers:{Accept:`text/event-stream`}})}catch(e){throw n.aborted?e:new m(e instanceof Error?e.message:`network`,{kind:`network`})}await f(i,(e,n)=>t(e,n))}};function j(e=`legacy`){return{mode:e,ready:!1,revision:null,awaitingSnapshot:!1,entries:{},updatedAt:0}}function M(){return{upserts:[],removed:[],resync:!1,reconnect:!1,truncated:!1,catalog:!1,changed:!1}}function Me(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:{}}function Ne(e,t,n,r=Date.now()){let i=M(),a={},o=n??e.revision??0;for(let e of t)a[e.session.id]={...e,revision:o,receivedAt:r},i.upserts.push(e.session);for(let t of Object.keys(e.entries))t in a||i.removed.push(t);return i.changed=!0,{feed:{...e,ready:!0,revision:n??e.revision,awaitingSnapshot:!1,entries:a,updatedAt:r},effects:i}}function Pe(e,t,n,r=Date.now()){let i=Me(n),a=Oe(i.revision),o={feed:e,effects:M()};if(t===`snapshot`){if(a===null||!Array.isArray(i.items))return o;let t=[],n=new Set;for(let e of i.items){let r=De(e);!r||n.has(r.session.id)||(n.add(r.session.id),t.push(r))}let s=Ne(e,t,a,r);return s.effects.truncated=i.truncated===!0,s}if(t===`resync_required`){let t=M();return t.resync=!0,t.reconnect=i.reason===`flush_failed`,t.changed=!e.awaitingSnapshot,{feed:{...e,awaitingSnapshot:!0},effects:t}}if(e.awaitingSnapshot||a===null||e.revision!==null&&a<=e.revision)return o;if(t===`heartbeat`||t===`component_changed`||t===`catalog_changed`){let n=M();return n.changed=!0,n.catalog=t===`catalog_changed`,{feed:{...e,revision:a,updatedAt:r},effects:n}}if(t!==`session_card`)return o;let s=typeof i.id==`string`?i.id:``;if(!s)return o;let c=e.entries[s];if(c&&a<=c.revision)return o;let l=M();if(l.changed=!0,i.removed===!0){let t={...e.entries};return delete t[s],c&&l.removed.push(s),{feed:{...e,revision:a,entries:t,updatedAt:r},effects:l}}let u=Ee(i.session);return!u||u.id!==s?{feed:{...e,revision:a,updatedAt:r},effects:l}:(l.upserts.push(u),{feed:{...e,revision:a,entries:{...e.entries,[s]:{session:u,card:Te(i.card),revision:a,receivedAt:r}},updatedAt:r},effects:l})}var N=l,Fe=3e3,Ie=2e3,Le=3e4,Re=1e3,ze=3e4,Be=6e4,Ve=4e3,He=4e4,Ue=300,We=6e3,Ge=6e4,Ke=1e3,qe={feed:j(),live:{},localRuns:{},runningSince:{},patches:{},pending:{}},P=n()(()=>({...qe}));function Je(){return a.getQueryData(N)?.sessions??[]}function F(){return s(`sessions`,!0)}async function Ye(){o(`sessions`),await F()}async function Xe(e,t=()=>!0,{fresh:n=!1}={}){if(V.active&&V.mode===`events`&&V.events.controller){if(!n&&t(P.getState().feed.entries[e]))return;await Ze(e,t,Ve);return}if(V.active&&V.mode!==`legacy`&&I().view){await K();return}await Ye().catch(()=>void 0)}function Ze(e,t,n){return new Promise(r=>{let i=P.getState().feed.entries[e],a=null,o=()=>{},s=()=>{a&&clearTimeout(a),o(),r()};o=P.subscribe(n=>{let r=n.feed.entries[e];r!==i&&t(r)&&s()}),a=setTimeout(s,n)})}function I(){let{capabilities:e,loaded:t}=h.getState(),n=e.features;return{loaded:t,view:t&&n[`board.view`]===!0,events:t&&n[`board.events`]===!0}}function Qe(){return I().view}var $e=0;function et(e,t){let n=++$e;return P.setState(r=>({patches:{...r.patches,[e]:[...r.patches[e]??[],{token:n,patch:t}]}})),n}function tt(e,t){P.setState(n=>{let r=n.patches[e];if(!r?.some(e=>e.token===t))return n;let i=r.filter(e=>e.token!==t),a={...n.patches};return i.length?a[e]=i:delete a[e],{patches:a}})}function L(e,t){let n=t[e.id];return n?.length?n.reduce((e,t)=>({...e,...t.patch}),e):e}function R(e,t,n=``){return e===`approve`||e===`deny`?`approval:${t}:${n}`:`${e}:${t}`}function nt(e,t){return!P.getState().pending[e]&&(P.setState(n=>({pending:{...n.pending,[e]:t}})),!0)}function rt(e){P.setState(t=>{if(!(e in t.pending))return t;let n={...t.pending};return delete n[e],{pending:n}})}function z(e,t){P.setState(n=>{let r=t(n.live[e]);if(r===n.live[e])return n;let i={...n.live};return r?i[e]=r:delete i[e],{live:i}})}function it(e,t){P.setState(n=>{let r=n.feed.entries[e];if(!r)return n;let i=t(r.card.approvals);return i===r.card.approvals?n:{feed:{...n.feed,entries:{...n.feed.entries,[e]:{...r,card:{...r.card,approvals:i}}}}}})}function at(e,t){z(e,e=>e&&e.approvals.some(e=>e.id===t)?{...e,approvals:e.approvals.filter(e=>e.id!==t)}:e??null),it(e,e=>e.some(e=>e.id===t)?e.filter(e=>e.id!==t):e)}function ot(e,t){if(P.getState().feed.entries[e]){it(e,e=>e.some(e=>e.id===t.id)?e:[...e,t]);return}z(e,e=>{let n=e??B(`ready`);return n.approvals.some(e=>e.id===t.id)?n:{...n,approvals:[...n.approvals,t]}})}function st(e,t){let n=P.getState(),r=n.live[e]?.approvals.find(e=>e.id===t);if(r)return r;let i=n.feed.entries[e]?.card.approvals.find(e=>e.id===t);return i&&!i.truncated?i:void 0}function ct(e,t){P.setState(n=>{let r=n.feed.entries[e];return r?{feed:{...n.feed,entries:{...n.feed.entries,[e]:{...r,session:{...r.session,...t},receivedAt:Date.now()}}}}:n})}function lt(e){let t=P.getState(),n=t.feed.entries[e];return n&&V.mode!==`legacy`?n.card.approvals:t.live[e]?.approvals??[]}function B(e){return{status:e,approvals:[],error:``,activity:null,startedAt:null,fetchedAt:null,failures:0}}var V={retainers:0,active:!1,mode:`legacy`,pollTimer:null,releaseTimer:null,catalogTimer:null,liveTimers:new Map,liveControllers:new Map,liveNextAt:new Map,runControllers:new Map,events:{controller:null,retryTimer:null,attempt:0,blockedUntil:0,blockTimer:null,watchdog:null},view:{inFlight:null,controller:null,failures:0},feedSettled:!1,catalogFetchAt:0,cleanups:[]};function H(){return typeof document>`u`||document.visibilityState!==`hidden`}function ut(){let e=I();return e.events&&Date.now()>=V.events.blockedUntil?`events`:e.view?`view`:`legacy`}function U(e=P.getState().feed){return V.mode!==`legacy`&&e.ready}function W(){V.pollTimer&&clearTimeout(V.pollTimer),V.pollTimer=null}function G(e){W(),!(!V.active||V.mode===`events`||!H())&&(V.pollTimer=setTimeout(()=>{V.pollTimer=null,ft()},e))}function dt(){return V.view.failures?Math.min(Ie*2**V.view.failures,Le):Ie}async function ft(){let e=V.mode;if(e===`view`)await pt();else try{await F()}catch{}!V.active||V.mode!==e||(Z(),G(e===`view`?dt():Fe))}function pt(){if(V.view.inFlight)return V.view.inFlight;let e=new AbortController;V.view.controller=e;let t=(async()=>{try{let t=await A.listBoardView(e.signal);if(e.signal.aborted||!V.active)return;V.view.failures=0,V.feedSettled=!0,bt(Ne(P.getState().feed,t.items,V.mode===`events`?null:t.revision))}catch{if(e.signal.aborted)return;V.view.failures+=1,V.feedSettled=!0,Z()}finally{V.view.controller===e&&(V.view.controller=null,V.view.inFlight=null)}})();return V.view.inFlight=t,t}async function K(){let e=V.view.inFlight;e&&await e,await pt()}function mt(){V.view.controller?.abort(),V.view.controller=null,V.view.inFlight=null}function q(){let e=V.events;e.retryTimer&&clearTimeout(e.retryTimer),e.retryTimer=null,J();let t=e.controller;e.controller=null,t?.abort()}function J(){V.events.watchdog&&clearTimeout(V.events.watchdog),V.events.watchdog=null}function ht(e){J(),V.events.watchdog=setTimeout(()=>{V.events.watchdog=null;let t=V.events;t.controller!==e||e.signal.aborted||(t.controller=null,e.abort(),!(!V.active||V.mode!==`events`)&&(gt(0),Z()))},He)}function gt(e){let t=V.events;t.retryTimer&&clearTimeout(t.retryTimer),t.retryTimer=setTimeout(()=>{t.retryTimer=null,Y()},e)}function _t(e){return e instanceof m&&e.kind===`http`&&typeof e.status==`number`&&e.status>=400&&e.status<500}function vt(){let e=V.events;e.blockedUntil=Date.now()+Be,e.blockTimer&&clearTimeout(e.blockTimer),e.blockTimer=setTimeout(()=>{e.blockTimer=null,X()},60010),X()}function Y(){let e=V.events;if(!V.active||V.mode!==`events`||e.controller||e.retryTimer||!H())return;let t=new AbortController;e.controller=t,ht(t);let n=P.getState().feed,r=n.ready&&!n.awaitingSnapshot?n.revision:null,i=!1,a=!1;A.openBoardEvents(r,(n,r)=>{if(t.signal.aborted||e.controller!==t)return!1;if(ht(t),i=!0,e.attempt=0,V.feedSettled=!0,yt(n,r).reconnect)return a=!0,!1},t.signal).then(()=>null,e=>e).then(n=>{if(e.controller===t&&(e.controller=null,J(),!(t.signal.aborted||!V.active))){if(V.feedSettled=!0,n&&_t(n))vt();else{let t=a?0:i?Re:Math.min(Re*2**e.attempt,ze);!i&&!a&&(e.attempt+=1),gt(t)}Z()}})}function yt(e,t){let n=Pe(P.getState().feed,e,t);return bt(n,e===`heartbeat`||e===`component_changed`||e===`catalog_changed`),u(e,t,n.effects.changed),n.effects}function bt({feed:e,effects:t},n=!1){t.changed&&P.setState({feed:{...e,mode:V.mode}}),t.upserts.length&&xt(t.upserts),(t.removed.length||t.resync||t.catalog)&&St(),t.changed&&!n&&Z()}function xt(e){let t=a.getQueryData(N);if(!t||!e.length)return;let n=new Map(t.sessions.map((e,t)=>[e.id,t])),r=null,i=[];for(let a of e){let e=n.get(a.id);if(e===void 0){i.some(e=>e.id===a.id)||i.push(a);continue}let o=(r??t.sessions)[e];JSON.stringify(o)!==JSON.stringify(a)&&(r??=[...t.sessions],r[e]=a)}!r&&!i.length||a.setQueryData(N,{...t,sessions:[...i,...r??t.sessions]})}function St(){V.catalogTimer||!V.active||(V.catalogTimer=setTimeout(()=>{V.catalogTimer=null,V.active&&F().catch(()=>void 0)},Ue))}function X(){if(!V.active)return;let e=ut();e!==V.mode&&(V.mode=e,V.feedSettled=!1,V.view.failures=0,q(),mt(),W(),P.setState(t=>({feed:e===`legacy`?j(`legacy`):{...t.feed,mode:e}})),e===`events`?(V.events.attempt=0,Y()):G(0),Z())}function Ct(){V.retainers+=1,V.releaseTimer&&=(clearTimeout(V.releaseTimer),null),V.active||wt();let e=!1;return()=>{e||(e=!0,V.retainers=Math.max(0,V.retainers-1),!(V.retainers>0)&&(V.releaseTimer=setTimeout(()=>{V.releaseTimer=null,V.retainers===0&&Tt()},Ke)))}}function wt(){V.active=!0,V.mode=ut(),V.feedSettled=!1,V.view.failures=0,V.events.attempt=0,P.setState(e=>({feed:V.mode===`legacy`?j(`legacy`):{...e.feed,mode:V.mode}}));let e=r(N);if(V.catalogFetchAt=Math.max(V.catalogFetchAt,a.getQueryState(N)?.dataUpdatedAt??0),V.cleanups.push(a.getQueryCache().subscribe(t=>{if(t.type===`updated`&&t.query.queryHash===e){if(t.action.type===`fetch`){V.catalogFetchAt=Date.now();return}t.action.type===`success`&&Dt()}})),V.cleanups.push(h.subscribe(()=>X())),typeof document<`u`){let e=()=>{if(H()){V.mode===`events`?Y():G(0),Z();return}W(),q()};document.addEventListener(`visibilitychange`,e),V.cleanups.push(()=>document.removeEventListener(`visibilitychange`,e))}if(Dt(),V.mode===`events`)Y();else if(V.mode===`view`)G(0);else{let e=a.getQueryState(N)?.dataUpdatedAt??0;G(Math.max(0,e+Fe-Date.now()))}}function Tt(){V.active=!1,W(),V.releaseTimer&&clearTimeout(V.releaseTimer),V.catalogTimer&&clearTimeout(V.catalogTimer),V.events.blockTimer&&clearTimeout(V.events.blockTimer),V.releaseTimer=null,V.catalogTimer=null,V.events.blockTimer=null,q(),mt();for(let e of V.cleanups.splice(0))e();for(let e of V.liveTimers.values())clearTimeout(e);for(let e of V.liveControllers.values())e.abort();for(let e of V.runControllers.values())e.controller.abort();V.liveTimers.clear(),V.liveControllers.clear(),V.liveNextAt.clear(),V.runControllers.clear(),P.setState({live:{},localRuns:{},runningSince:{}})}async function Et(){let e=F();V.active&&V.mode===`view`&&await K(),await e}function Dt(){let e=Je(),t=Date.now(),{runningSince:n,localRuns:r,feed:i}=P.getState(),a=U(i)?[...Object.values(i.entries).map(e=>e.session),...e]:e,o={},s=!1;for(let e of a)e.streaming!==!0||e.id in o||(o[e.id]=n[e.id]??r[e.id]?.startedAt??t,e.id in n||(s=!0));s||=Object.keys(n).some(e=>!(e in o)),s&&P.setState({runningSince:o}),U(i)&&Ot(e),Z()}function Ot(e){let t=V.catalogFetchAt,n=new Map(e.map(e=>[e.id,e])),r=[],i={};for(let e of Object.values(P.getState().feed.entries)){if((e.receivedAt??1/0)>=t){r.push(e.session);continue}let a=n.get(e.session.id);a&&a!==e.session&&JSON.stringify(a)!==JSON.stringify(e.session)&&(i[a.id]=a)}Object.keys(i).length&&P.setState(e=>{let t={...e.feed.entries};for(let[e,n]of Object.entries(i))t[e]&&(t[e]={...t[e],session:n});return{feed:{...e.feed,entries:t}}}),xt(r)}function kt(){let{patches:e,feed:t}=P.getState(),n=new Set,r=Date.now();if(U(t)){for(let i of Object.values(t.entries)){let t=L(i.session,e);if(t.archived===!0)continue;let a=i.card.approvals;_({...t,card:{approvals:a}},{now:r}).status===`approval`&&(!a.length||a.some(e=>e.truncated))&&n.add(i.session.id)}return n}if(V.mode!==`legacy`&&!V.feedSettled)return n;for(let t of Je()){let i=L(t,e);i.archived!==!0&&_(i,{now:r}).status===`approval`&&n.add(t.id)}return n}function At(e){let t=V.liveTimers.get(e);t&&clearTimeout(t),V.liveTimers.delete(e),V.liveControllers.get(e)?.abort(),V.liveControllers.delete(e),V.liveNextAt.delete(e),z(e,()=>null)}function Z(){if(!V.active)return;let e=kt();for(let t of Object.keys(P.getState().live))e.has(t)||At(t);for(let t of[...V.liveControllers.keys()])e.has(t)||At(t);if(!H())return;let t=Date.now(),n=P.getState().live,r=[...e].filter(e=>!V.liveControllers.has(e)&&(V.liveNextAt.get(e)??0)<=t).sort((e,t)=>Number(!!n[e])-Number(!!n[t])||(V.liveNextAt.get(e)??0)-(V.liveNextAt.get(t)??0)),i=Math.max(0,Math.min(3-V.liveControllers.size,4-V.liveControllers.size-V.runControllers.size-!!V.events.controller));r.slice(0,i).forEach((e,t)=>jt(e,t*250))}function jt(e,t){let n=new AbortController;V.liveControllers.set(e,n);let r=async()=>{V.liveTimers.delete(e),z(e,e=>e??B(`loading`));try{let t=await A.getLiveDetail(e,n.signal);if(n.signal.aborted||V.liveControllers.get(e)!==n)return;V.liveNextAt.set(e,Date.now()+We);let{pending:r}=P.getState(),i=t.approvals.filter(t=>!r[R(`approve`,e,t.id)]);z(e,()=>({status:`ready`,approvals:i,error:t.error,activity:t.activity,startedAt:t.startedAt,fetchedAt:Date.now(),failures:0}))}catch{if(n.signal.aborted||V.liveControllers.get(e)!==n)return;let t=(P.getState().live[e]?.failures??0)+1;V.liveNextAt.set(e,Date.now()+Math.min(We*2**t,Ge)),z(e,e=>({...e??B(`error`),status:e?.approvals.length?e.status:`error`,failures:t}))}finally{V.liveControllers.get(e)===n&&V.liveControllers.delete(e)}};t<=0?r():V.liveTimers.set(e,setTimeout(()=>void r(),t))}var Mt=class extends Error{code=`board_run_active`},Nt=0;function Pt(e,t){return e===t?!0:!e||!t||e.type!==t.type?!1:e.type===`model`?e.stage===t.stage:e.name===t.name&&e.summary===t.summary}function Q(e,t,n){P.setState(r=>{let i=r.localRuns[e];return!i||i.token!==t||(n.activity===void 0||Pt(i.activity,n.activity))&&(n.runId===void 0||n.runId===i.runId)?r:{localRuns:{...r.localRuns,[e]:{...i,...n}}}})}function Ft(e,t,n,r){if(n===`run`)Q(e,t,{runId:typeof r.runId==`string`?r.runId:``});else if(n===`tool_start`){let n=typeof r.name==`string`?r.name:``;n&&Q(e,t,{activity:{type:`tool`,name:n,summary:pe(n,r.args),startedAt:typeof r.startedAt==`string`?r.startedAt:new Date().toISOString()}})}else if(n===`tool_end`||n===`thinking_patch`||n===`thinking_reset`)Q(e,t,{activity:{type:`model`,stage:`thinking`}});else if(n===`text_delta`||n===`text_patch`)Q(e,t,{activity:{type:`model`,stage:`responding`}});else if(n===`permission_request`){let t=he(r);t&&ot(e,t),o(`sessions`)}else n===`permission_resolved`&&(typeof r.id==`string`&&at(e,r.id),o(`sessions`))}function It(){let e=V.runControllers.size-2;for(let[t,n]of V.runControllers){if(e<=0)return;n.accepted&&(V.runControllers.delete(t),n.controller.abort(),--e)}}function Lt(e,t,n){if(V.runControllers.has(e))return Promise.reject(new Mt);let r=new AbortController,i=++Nt,a={controller:r,accepted:!1};V.runControllers.set(e,a),It();let o=Date.now();return P.setState(n=>({localRuns:{...n.localRuns,[e]:{token:i,kind:t,runId:``,startedAt:o,activity:{type:`model`,stage:`starting`}}}})),new Promise((t,o)=>{let s=()=>{a.accepted||(a.accepted=!0,It(),t())};n((t,n)=>{if(r.signal.aborted)return!1;t===`run`&&s(),Ft(e,i,t,n)},r.signal).then(s,e=>{a.accepted||o(e)}).finally(()=>{V.runControllers.get(e)===a&&V.runControllers.delete(e),P.setState(t=>{if(t.localRuns[e]?.token!==i)return t;let n={...t.localRuns};return delete n[e],{localRuns:n}}),V.active&&(V.mode===`legacy`?F().catch(()=>void 0):I().view&&(V.mode===`view`||!V.events.controller)&&K(),Z())})})}var Rt=e(t(),1);function zt(){(0,Rt.useEffect)(()=>Ct(),[])}function Bt(e){let t=e.queue;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t;return{startAfter:typeof n.startAfter==`string`?n.startAfter:``,position:typeof n.position==`number`&&Number.isSafeInteger(n.position)&&n.position>0?n.position:null}}var Vt=120;function Ht(e){if(!e)return null;let t=Date.parse(e);return Number.isFinite(t)?t:null}function $(e){let t=typeof e.name==`string`?e.name.trim():``;if(t)return D(t,Vt);let n=typeof e.firstMessage==`string`?e.firstMessage.trim():``,r=n.search(/[。!?!?\n]|\.\s/u);return D((r<0?n:n.slice(0,n[r]===`
2
2
  `?r:r+1)).trim(),Vt)}function Ut(e){return e.length?e.some(e=>e.severity===`critical`)?`critical`:`standard`:null}function Wt(e,t){if(!t?.approvals.length||!e.approvals.some(e=>e.truncated))return e.approvals;let n=new Map(t.approvals.map(e=>[e.id,e]));return e.approvals.map(e=>e.truncated?n.get(e.id)??e:e)}function Gt(e,t){return!!e[t]?.some(e=>e.patch.streaming===!0)}function Kt(e,t){let n=t.feed;if(!n?.ready)return e.filter(e=>e&&typeof e.id==`string`&&e.id).map(e=>({session:e,card:null}));let r=Object.values(n.entries).map(e=>({session:e.session,card:e.card}));for(let i of e)!i||typeof i.id!=`string`||!i.id||n.entries[i.id]||(t.localRuns[i.id]||Gt(t.patches,i.id))&&r.push({session:i,card:null});return r}function qt(e,t,{now:n,capabilities:r,doneWindow:i=`today`,timeZoneOffsetMinutes:a}){let o=[],s=t.pending??{},c=Kt(e,t),l=new Map;for(let t of e)t?.id&&l.set(t.id,$(t));for(let{session:e}of c)l.set(e.id,$(e));for(let{session:e,card:u}of c){let c=L(e,t.patches),d=t.localRuns[c.id],f=t.live[c.id],p=d?.startedAt??Ht(u?.startedAt)??Ht(f?.startedAt),m=u?Wt(u,f).filter(e=>!s[R(`approve`,c.id,e.id)]):null,h=m?.length?m:f?.approvals,g=_({...c,startedAt:p??t.runningSince[c.id]??null,approvals:h,card:u?{outcome:u.outcome??void 0}:void 0},{now:n,capabilities:r,doneWindow:i,timeZoneOffsetMinutes:a});if(!g.lane)continue;let v=g.status===`approval`?h??[]:[],y=v[0],ee=g.status===`approval`?y&&!y.truncated?`ready`:f?.status===`error`?`error`:`loading`:`none`,b=g.lane===`running`,x=g.status===`failed`,S=g.status===`question`?re(c.question):null;o.push({id:c.id,session:c,title:$(c),cwd:typeof c.cwd==`string`?c.cwd:``,workspaceKey:te(c),projectCwd:ne(c),lane:g.lane,status:g.status,handled:g.handled,since:g.since,startedAt:b?p:null,pinned:c.pinned===!0,unread:c.unread===!0,approvals:v,approvalsState:ee,severity:Ut(v),activity:b?d?.activity??u?.activity??f?.activity??null:null,error:x&&(u?.error?.message||f?.error)||``,localRun:!!d,hasCard:!!u,tail:u&&(b||x)?u.tail:[],preview:u&&g.lane===`done`&&!x?u.preview:``,changeStats:u?.changeStats??null,contextPct:u?.contextPct??null,agents:u?.agents??null,question:S,questionCount:S?S.questions.length:null,totalTokens:u?.totalTokens??null,...u?.bot?{bot:u.bot}:{},...Jt(g.lane,c,l)})}return o.sort(y)}function Jt(e,t,n){let r=e===`queued`?Bt(t):null;return{queuePosition:r?.position??null,queue:r?{startAfter:r.startAfter,startAfterTitle:n.get(r.startAfter)??``}:null}}function Yt(e,{lanes:t,projects:n}){let r=t?.length?new Set(t):null,i=n?.length?new Set(n):null;return!r&&!i?[...e]:e.filter(e=>(!r||r.has(e.lane))&&(!i||i.has(e.workspaceKey)))}function Xt(e){let t=Object.fromEntries(v.map(e=>[e,[]]));for(let n of e)t[n.lane].push(n);return t}function Zt(e){let t=new Map;for(let n of e){let e=t.get(n.workspaceKey);e?e.count+=1:t.set(n.workspaceKey,{key:n.workspaceKey,cwd:n.projectCwd,count:1})}return[...t.values()]}function Qt(e,t){let n=new Map(t.map((e,t)=>[e,t]));return[...e].sort((e,t)=>(n.get(e.key)??2**53-1)-(n.get(t.key)??2**53-1)||t.count-e.count)}function $t(){return zt(),i(c(`sessions`))}export{at as C,A as D,P as E,Et as S,ct as T,tt as _,Yt as a,rt as b,zt as c,et as d,nt as f,lt as g,Qe as h,qt as i,N as l,st as m,Zt as n,Xt as o,R as p,$ as r,Qt as s,$t as t,Mt as u,Xe as v,ot as w,Lt as x,Ye as y};
@@ -1 +1 @@
1
- import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t,r as n}from"./vendor-react-DwNgTV1j.js";import{f as r}from"./routes-DIeaqWVc.js";import{t as i}from"./use-i18n-B2p84ZNR.js";import{t as a}from"./ellipsis-CfGKfbq6.js";import{c as o,i as s,p as c,r as l,t as u}from"./dropdown-menu-CFIFNaKO.js";import{t as d}from"./utils-C8uzG5AZ.js";import{f}from"./useNow-DYvbFah-.js";import{t as p}from"./session-home-DBefA-JE.js";import{t as m}from"./motion-DTR4ZVle.js";import"./BotAvatar-CNL-APwP.js";var h=`pisper:overview-focus`;function g(e){window.dispatchEvent(new CustomEvent(h,{detail:{sessionId:e}}))}var _=n();function v({row:e,actions:t,canMarkHandled:n,open:r,onOpenChange:f,side:p,align:m=`start`,tabIndex:h,className:g}){let{t:v}=i();return(0,_.jsxs)(u,{open:r,onOpenChange:f,children:[(0,_.jsx)(c,{asChild:!0,children:(0,_.jsx)(`button`,{type:`button`,tabIndex:h,"aria-label":v(`board:sidebar.rowMenu`,{title:e.title}),className:d(`grid size-[26px] flex-none place-items-center rounded-[var(--r-sm)] text-content-muted transition-colors duration-(--d-fast) hover:bg-surface-active hover:text-content focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focus`,g),children:(0,_.jsx)(a,{className:`size-4`,"aria-hidden":`true`})})}),(0,_.jsxs)(l,{align:m,side:p,className:`min-w-44`,children:[(0,_.jsx)(s,{onSelect:()=>t.open(e),children:v(`board:menu.open`)}),(0,_.jsx)(s,{onSelect:()=>t.pin(e),children:e.pinned?v(`board:menu.unpin`):v(`board:menu.pin`)}),(0,_.jsx)(s,{onSelect:()=>t.rename(e),children:v(`board:menu.rename`)}),n&&(0,_.jsx)(s,{onSelect:()=>t.markHandled(e),children:v(`board:menu.markHandled`)}),(0,_.jsx)(s,{onSelect:()=>t.copyLink(e),children:v(`board:menu.copyLink`)}),(0,_.jsx)(o,{}),(0,_.jsx)(s,{onSelect:()=>t.archive(e),children:v(`board:menu.archive`)})]})]})}function y(e,t){return t.map((t,n)=>t.kind===`failed`?e(`board:sidebar.reason.failed`):t.kind===`approval`?t.critical?e(`board:sidebar.reason.criticalApproval`):e(`board:sidebar.reason.approval`):t.count===null?e(`board:sidebar.reason.question`):e(n===0?`board:sidebar.reason.questions`:`board:sidebar.reason.questionCount`,{count:t.count})).join(` · `)}function b(e){if(e===null||!Number.isFinite(e))return``;let t=Math.max(0,Math.floor(e/1e3));if(t<60)return`${t}s`;let n=Math.floor(t/60);if(n<60)return`${n}m`;let r=Math.floor(n/60);return r<24?`${r}h`:`${Math.floor(r/24)}d`}function x(e){if(e===null||!Number.isFinite(e))return``;let t=Math.max(0,Math.floor(e/1e3)),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=String(t%60).padStart(2,`0`);return n>0?`${n}:${String(r).padStart(2,`0`)}:${i}`:`${r}:${i}`}function S(e){if(e===null||!Number.isFinite(e))return``;let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`}function C(e,t){if(e===null||!Number.isFinite(e))return``;let n=new Date(e),r=new Date(t);return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()?S(e):`${n.getMonth()+1}/${n.getDate()}`}function w(){return!m()&&document.visibilityState!==`hidden`}function T(e,{duration:t,scale:n}){return!e||!w()||typeof e.animate!=`function`?Promise.resolve():(e.style.transformOrigin=`top center`,e.animate([{transform:`scaleY(1)`,opacity:1},{transform:`scaleY(${n})`,opacity:0}],{duration:t,easing:`ease-in`,fill:`forwards`}).finished.then(()=>void 0,()=>void 0))}var E=e(t(),1);function D(e){let{origin:t,pathname:n,search:i,hash:a}=window.location;return a.startsWith(`#/`)?`${t}${n}${i}#${r(e)}`:`${t}${r(e)}`}function O({notify:e,requestText:t,onOpenSession:n,onArchived:r}){let{t:a}=i(),o=f(),s=(0,E.useRef)(o);s.current=o;let c=(0,E.useCallback)(t=>{t.ok||t.reason===`pending`||e(a(`board:action.failed`),`error`)},[e,a]),l=(0,E.useCallback)(async n=>{let r=(await t({title:a(`board:sidebar.renameTitle`),inputLabel:a(`board:sidebar.renameLabel`),value:n.title,confirmLabel:a(`board:sidebar.renameSave`),maxLength:200}))?.trim();if(!r||r===n.title)return;let i=await s.current.rename(n.id,r);i.ok?e(a(`board:sidebar.renamed`)):c(i)},[e,c,t,a]);return(0,E.useMemo)(()=>({open:e=>n(e.id),pin:e=>void s.current.pin(e.id,!e.pinned).then(c),rename:e=>void l(e),markHandled:e=>void s.current.markHandled(e.id).then(c),copyLink:t=>{let n=typeof navigator<`u`?navigator.clipboard:void 0;if(!n){e(a(`board:action.copyFailed`),`error`);return}n.writeText(D(t.id)).then(()=>e(a(`board:action.copied`)),()=>e(a(`board:action.copyFailed`),`error`))},archive:t=>void s.current.archive(t.id,!0).then(n=>{if(!n.ok){c(n);return}e(a(`board:action.archived`,{title:t.title})),p(t.id),r?.(t.id)}),report:c}),[e,r,n,l,c,a])}export{C as a,y as c,g as d,x as i,v as l,T as n,S as o,w as r,b as s,O as t,h as u};
1
+ import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t,r as n}from"./vendor-react-DwNgTV1j.js";import{f as r}from"./routes-DIeaqWVc.js";import{t as i}from"./use-i18n-BPJI6-Ue.js";import{t as a}from"./ellipsis-CfGKfbq6.js";import{c as o,i as s,p as c,r as l,t as u}from"./dropdown-menu-Ds0gD8S8.js";import{t as d}from"./utils-C8uzG5AZ.js";import{f}from"./useNow-e0HHzVad.js";import{t as p}from"./session-home-chPk0XEV.js";import{t as m}from"./motion-DTR4ZVle.js";import"./BotAvatar-CNL-APwP.js";var h=`pisper:overview-focus`;function g(e){window.dispatchEvent(new CustomEvent(h,{detail:{sessionId:e}}))}var _=n();function v({row:e,actions:t,canMarkHandled:n,open:r,onOpenChange:f,side:p,align:m=`start`,tabIndex:h,className:g}){let{t:v}=i();return(0,_.jsxs)(u,{open:r,onOpenChange:f,children:[(0,_.jsx)(c,{asChild:!0,children:(0,_.jsx)(`button`,{type:`button`,tabIndex:h,"aria-label":v(`board:sidebar.rowMenu`,{title:e.title}),className:d(`grid size-[26px] flex-none place-items-center rounded-[var(--r-sm)] text-content-muted transition-colors duration-(--d-fast) hover:bg-surface-active hover:text-content focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focus`,g),children:(0,_.jsx)(a,{className:`size-4`,"aria-hidden":`true`})})}),(0,_.jsxs)(l,{align:m,side:p,className:`min-w-44`,children:[(0,_.jsx)(s,{onSelect:()=>t.open(e),children:v(`board:menu.open`)}),(0,_.jsx)(s,{onSelect:()=>t.pin(e),children:e.pinned?v(`board:menu.unpin`):v(`board:menu.pin`)}),(0,_.jsx)(s,{onSelect:()=>t.rename(e),children:v(`board:menu.rename`)}),n&&(0,_.jsx)(s,{onSelect:()=>t.markHandled(e),children:v(`board:menu.markHandled`)}),(0,_.jsx)(s,{onSelect:()=>t.copyLink(e),children:v(`board:menu.copyLink`)}),(0,_.jsx)(o,{}),(0,_.jsx)(s,{onSelect:()=>t.archive(e),children:v(`board:menu.archive`)})]})]})}function y(e,t){return t.map((t,n)=>t.kind===`failed`?e(`board:sidebar.reason.failed`):t.kind===`approval`?t.critical?e(`board:sidebar.reason.criticalApproval`):e(`board:sidebar.reason.approval`):t.count===null?e(`board:sidebar.reason.question`):e(n===0?`board:sidebar.reason.questions`:`board:sidebar.reason.questionCount`,{count:t.count})).join(` · `)}function b(e){if(e===null||!Number.isFinite(e))return``;let t=Math.max(0,Math.floor(e/1e3));if(t<60)return`${t}s`;let n=Math.floor(t/60);if(n<60)return`${n}m`;let r=Math.floor(n/60);return r<24?`${r}h`:`${Math.floor(r/24)}d`}function x(e){if(e===null||!Number.isFinite(e))return``;let t=Math.max(0,Math.floor(e/1e3)),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=String(t%60).padStart(2,`0`);return n>0?`${n}:${String(r).padStart(2,`0`)}:${i}`:`${r}:${i}`}function S(e){if(e===null||!Number.isFinite(e))return``;let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`}function C(e,t){if(e===null||!Number.isFinite(e))return``;let n=new Date(e),r=new Date(t);return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()?S(e):`${n.getMonth()+1}/${n.getDate()}`}function w(){return!m()&&document.visibilityState!==`hidden`}function T(e,{duration:t,scale:n}){return!e||!w()||typeof e.animate!=`function`?Promise.resolve():(e.style.transformOrigin=`top center`,e.animate([{transform:`scaleY(1)`,opacity:1},{transform:`scaleY(${n})`,opacity:0}],{duration:t,easing:`ease-in`,fill:`forwards`}).finished.then(()=>void 0,()=>void 0))}var E=e(t(),1);function D(e){let{origin:t,pathname:n,search:i,hash:a}=window.location;return a.startsWith(`#/`)?`${t}${n}${i}#${r(e)}`:`${t}${r(e)}`}function O({notify:e,requestText:t,onOpenSession:n,onArchived:r}){let{t:a}=i(),o=f(),s=(0,E.useRef)(o);s.current=o;let c=(0,E.useCallback)(t=>{t.ok||t.reason===`pending`||e(a(`board:action.failed`),`error`)},[e,a]),l=(0,E.useCallback)(async n=>{let r=(await t({title:a(`board:sidebar.renameTitle`),inputLabel:a(`board:sidebar.renameLabel`),value:n.title,confirmLabel:a(`board:sidebar.renameSave`),maxLength:200}))?.trim();if(!r||r===n.title)return;let i=await s.current.rename(n.id,r);i.ok?e(a(`board:sidebar.renamed`)):c(i)},[e,c,t,a]);return(0,E.useMemo)(()=>({open:e=>n(e.id),pin:e=>void s.current.pin(e.id,!e.pinned).then(c),rename:e=>void l(e),markHandled:e=>void s.current.markHandled(e.id).then(c),copyLink:t=>{let n=typeof navigator<`u`?navigator.clipboard:void 0;if(!n){e(a(`board:action.copyFailed`),`error`);return}n.writeText(D(t.id)).then(()=>e(a(`board:action.copied`)),()=>e(a(`board:action.copyFailed`),`error`))},archive:t=>void s.current.archive(t.id,!0).then(n=>{if(!n.ok){c(n);return}e(a(`board:action.archived`,{title:t.title})),p(t.id),r?.(t.id)}),report:c}),[e,r,n,l,c,a])}export{C as a,y as c,g as d,x as i,v as l,T as n,S as o,w as r,b as s,O as t,h as u};
@@ -1 +1 @@
1
- import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t}from"./vendor-react-DwNgTV1j.js";import{c as n,i as r,t as i}from"./useNow-DYvbFah-.js";var a=e(t(),1);function o(){let{query:e,items:t,capabilities:o,isLoading:s}=n(`today`),c=i(),l=(0,a.useMemo)(()=>r(t,{now:c,capabilities:o}),[o,t,c]),u=e.refetch,d=e.data?.sessions;return(0,a.useMemo)(()=>({model:l,items:t,sessions:d,capabilities:o,isLoading:s,error:e.error??null,refetch:()=>void u()}),[o,s,t,l,e.error,u,d])}export{o as t};
1
+ import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t}from"./vendor-react-DwNgTV1j.js";import{c as n,i as r,t as i}from"./useNow-e0HHzVad.js";var a=e(t(),1);function o(){let{query:e,items:t,capabilities:o,isLoading:s}=n(`today`),c=i(),l=(0,a.useMemo)(()=>r(t,{now:c,capabilities:o}),[o,t,c]),u=e.refetch,d=e.data?.sessions;return(0,a.useMemo)(()=>({model:l,items:t,sessions:d,capabilities:o,isLoading:s,error:e.error??null,refetch:()=>void u()}),[o,s,t,l,e.error,u,d])}export{o as t};
@@ -1 +1 @@
1
- import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t,r as n}from"./vendor-react-DwNgTV1j.js";import{x as r}from"./events-CrT7ie40.js";import"./public-events-BiaqrDkZ.js";import{t as i}from"./terminal-context-aIsIJPn8.js";var a=e(t(),1),o=2097152,s=524288;function c(){let e=new TextDecoder,t=`text`;return n=>{let r=``;for(let i of e.decode(n,{stream:!0})){let e=i.codePointAt(0);t===`text`?e===27?t=`escape`:e===155?t=`csi`:e===157?t=`osc`:(e===9||e===10||e===13||e>=32&&e!==127)&&(r+=i):t===`escape`?t=i===`[`?`csi`:i===`]`?`osc`:`()*+`.includes(i)?`charset`:`text`:t===`csi`?e>=64&&e<=126&&(t=`text`):t===`charset`?t=`text`:t===`osc`?e===7?t=`text`:e===27&&(t=`osc-escape`):t===`osc-escape`&&(t=i===`\\`?`text`:e===27?`osc-escape`:`osc`)}return r}}function l(e){let t=new Map,n=new Map,r=new Set,i=new Map,a=new Map,l=new Set,u=new Set,d=new Map,f=!1,p,m=e=>(d.has(e)||d.set(e,[...t.values()].filter(t=>e===void 0||t.sessionId===e)),d.get(e)),h=()=>{for(let[e,n]of d){let r=[...t.values()].filter(t=>e===void 0||t.sessionId===e);(r.length!==n.length||r.some((e,t)=>e!==n[t]))&&d.set(e,r)}for(let e of l)e()},g=(e,n)=>{let r=t.get(e);r&&(t.set(e,{...r,...n}),h())},_=(e,i)=>{if(!(f||i.terminalId!==e||!r.has(e))){if(i.type===`output`){if(!Array.isArray(i.data)||i.data.some(e=>!Number.isInteger(e)||e<0||e>255))return;let r=n.get(e),a=Uint8Array.from(i.data.slice(-2097152));r.chunks.push({sequence:++r.sequence,data:a}),r.bytes+=a.length;let c=t.get(e).truncated||i.data.length>o;for(;r.bytes>o&&r.chunks.length>1;)r.bytes-=r.chunks.shift().data.length,c=!0;r.text+=r.decoder(a),r.text.length>s&&(r.text=r.text.slice(-524288).replace(/^[\uDC00-\uDFFF]/,``),c=!0),g(e,{output:r.text,truncated:c})}else i.type===`exit`?(r.delete(e),g(e,{status:`exited`,exitCode:i.code,error:``})):i.type===`error`&&g(e,{status:`error`,error:i.message});for(let e of u)e(i)}},v=async(a,o,s)=>{if(f)throw Error(`Terminal registry disposed`);let l=`terminal-${crypto.randomUUID()}`;t.set(l,{id:l,sessionId:a,cwd:o,profileId:s,orphaned:!1,status:`starting`,exitCode:null,error:``,output:``,truncated:!1}),n.set(l,{chunks:[],bytes:0,sequence:0,decoder:c(),text:``}),r.add(l),h();let u=(async()=>{try{let n=await e.terminalCreate({terminalId:l,profileId:s,cwd:o,cols:100,rows:24},e=>_(l,e));if(n.terminalId!==l)throw Error(`Terminal creation returned a different identity`);return g(l,{cwd:n.cwd,profileId:n.profileId,...!f&&t.get(l)?.status===`starting`?{status:`running`}:{}}),l}catch(e){throw g(l,{status:`error`,error:e instanceof Error?e.message:String(e)}),e}finally{i.delete(l)}})();return i.set(l,u),u},y=t=>{let n=a.get(t);if(n)return n;if(!r.has(t))return Promise.resolve();g(t,{status:`stopping`,error:``});let o=(async()=>{try{let n=i.get(t);if(n&&await n.catch(()=>void 0),!r.has(t))return;await e.terminalClose(t),r.delete(t),g(t,{status:`exited`,exitCode:null,error:``})}catch(e){throw g(t,{status:`error`,error:e instanceof Error?e.message:String(e)}),e}finally{a.delete(t)}})();return a.set(t,o),o};return{create:v,stop:y,snapshot:m,subscribe(e){return l.add(e),()=>{l.delete(e)}},subscribeEvents(e){return u.add(e),()=>{u.delete(e)}},outputChunks(e){return n.get(e)?.chunks||[]},async write(t,n){if(f||!r.has(t))throw Error(`Terminal is not running`);await e.terminalWrite(t,n)},async resize(t,n,i){f||!r.has(t)||!Number.isInteger(n)||!Number.isInteger(i)||n<1||i<1||await e.terminalResize(t,n,i)},orphan(e){let n=new Set(e);for(let e of t.values())n.has(e.sessionId)&&!e.orphaned&&t.set(e.id,{...e,orphaned:!0});h()},dispose(){return p||(f=!0,p=(async()=>{let e=await Promise.allSettled([...r].map(y));l.clear(),u.clear();let t=e.find(e=>e.status===`rejected`);if(t?.status===`rejected`)throw t.reason})(),p)}}}var u=n();function d({bridge:e,children:t}){let[n,o]=(0,a.useState)(null);return(0,a.useEffect)(()=>{if(!e?.terminalCreate||!e.terminalWrite||!e.terminalResize||!e.terminalClose||!e.terminalProfiles){o(null);return}let t=l({terminalCreate:e.terminalCreate,terminalWrite:e.terminalWrite,terminalResize:e.terminalResize,terminalClose:e.terminalClose}),n=new Map,i,a=e.terminalProfiles;o({registry:t,profiles:()=>i||=a().catch(e=>{throw i=void 0,e}),renderer:(e,t)=>(n.has(e)||n.set(e,t()),n.get(e))});let s=r(window,({deletedIds:e})=>t.orphan(e)),c=()=>{for(let e of n.values())e.dispose();n.clear(),t.dispose().catch(()=>{})};return window.addEventListener(`pagehide`,c),()=>{s(),window.removeEventListener(`pagehide`,c),c()}},[e]),(0,u.jsx)(i.Provider,{value:n,children:t})}function f(e,t){try{let n=new URL(e,t);return n.protocol===`http:`||n.protocol===`https:`?n:null}catch{return null}}function p(e,t){let n=e.trim();return n&&f(/^[a-z][a-z\d+.-]*:/i.test(n)||n.startsWith(`//`)?n:`https://${n}`,t)?.href||null}function m({href:e,baseUrl:t,button:n=0,download:r=!1,altKey:i=!1,ctrlKey:a=!1,metaKey:o=!1,shiftKey:s=!1,behavior:c}){if(n!==0||r||i||a||o||s||c===`external`||c===`ignore`)return null;let l=f(e,t);if(!l)return null;let u=f(t,t);return u&&l.origin===u.origin?null:l.href}export{m as n,d as r,p as t};
1
+ import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t,r as n}from"./vendor-react-DwNgTV1j.js";import{x as r}from"./events-BYm_7rfH.js";import"./public-events-B-fuAF9_.js";import{t as i}from"./terminal-context-aIsIJPn8.js";var a=e(t(),1),o=2097152,s=524288;function c(){let e=new TextDecoder,t=`text`;return n=>{let r=``;for(let i of e.decode(n,{stream:!0})){let e=i.codePointAt(0);t===`text`?e===27?t=`escape`:e===155?t=`csi`:e===157?t=`osc`:(e===9||e===10||e===13||e>=32&&e!==127)&&(r+=i):t===`escape`?t=i===`[`?`csi`:i===`]`?`osc`:`()*+`.includes(i)?`charset`:`text`:t===`csi`?e>=64&&e<=126&&(t=`text`):t===`charset`?t=`text`:t===`osc`?e===7?t=`text`:e===27&&(t=`osc-escape`):t===`osc-escape`&&(t=i===`\\`?`text`:e===27?`osc-escape`:`osc`)}return r}}function l(e){let t=new Map,n=new Map,r=new Set,i=new Map,a=new Map,l=new Set,u=new Set,d=new Map,f=!1,p,m=e=>(d.has(e)||d.set(e,[...t.values()].filter(t=>e===void 0||t.sessionId===e)),d.get(e)),h=()=>{for(let[e,n]of d){let r=[...t.values()].filter(t=>e===void 0||t.sessionId===e);(r.length!==n.length||r.some((e,t)=>e!==n[t]))&&d.set(e,r)}for(let e of l)e()},g=(e,n)=>{let r=t.get(e);r&&(t.set(e,{...r,...n}),h())},_=(e,i)=>{if(!(f||i.terminalId!==e||!r.has(e))){if(i.type===`output`){if(!Array.isArray(i.data)||i.data.some(e=>!Number.isInteger(e)||e<0||e>255))return;let r=n.get(e),a=Uint8Array.from(i.data.slice(-2097152));r.chunks.push({sequence:++r.sequence,data:a}),r.bytes+=a.length;let c=t.get(e).truncated||i.data.length>o;for(;r.bytes>o&&r.chunks.length>1;)r.bytes-=r.chunks.shift().data.length,c=!0;r.text+=r.decoder(a),r.text.length>s&&(r.text=r.text.slice(-524288).replace(/^[\uDC00-\uDFFF]/,``),c=!0),g(e,{output:r.text,truncated:c})}else i.type===`exit`?(r.delete(e),g(e,{status:`exited`,exitCode:i.code,error:``})):i.type===`error`&&g(e,{status:`error`,error:i.message});for(let e of u)e(i)}},v=async(a,o,s)=>{if(f)throw Error(`Terminal registry disposed`);let l=`terminal-${crypto.randomUUID()}`;t.set(l,{id:l,sessionId:a,cwd:o,profileId:s,orphaned:!1,status:`starting`,exitCode:null,error:``,output:``,truncated:!1}),n.set(l,{chunks:[],bytes:0,sequence:0,decoder:c(),text:``}),r.add(l),h();let u=(async()=>{try{let n=await e.terminalCreate({terminalId:l,profileId:s,cwd:o,cols:100,rows:24},e=>_(l,e));if(n.terminalId!==l)throw Error(`Terminal creation returned a different identity`);return g(l,{cwd:n.cwd,profileId:n.profileId,...!f&&t.get(l)?.status===`starting`?{status:`running`}:{}}),l}catch(e){throw g(l,{status:`error`,error:e instanceof Error?e.message:String(e)}),e}finally{i.delete(l)}})();return i.set(l,u),u},y=t=>{let n=a.get(t);if(n)return n;if(!r.has(t))return Promise.resolve();g(t,{status:`stopping`,error:``});let o=(async()=>{try{let n=i.get(t);if(n&&await n.catch(()=>void 0),!r.has(t))return;await e.terminalClose(t),r.delete(t),g(t,{status:`exited`,exitCode:null,error:``})}catch(e){throw g(t,{status:`error`,error:e instanceof Error?e.message:String(e)}),e}finally{a.delete(t)}})();return a.set(t,o),o};return{create:v,stop:y,snapshot:m,subscribe(e){return l.add(e),()=>{l.delete(e)}},subscribeEvents(e){return u.add(e),()=>{u.delete(e)}},outputChunks(e){return n.get(e)?.chunks||[]},async write(t,n){if(f||!r.has(t))throw Error(`Terminal is not running`);await e.terminalWrite(t,n)},async resize(t,n,i){f||!r.has(t)||!Number.isInteger(n)||!Number.isInteger(i)||n<1||i<1||await e.terminalResize(t,n,i)},orphan(e){let n=new Set(e);for(let e of t.values())n.has(e.sessionId)&&!e.orphaned&&t.set(e.id,{...e,orphaned:!0});h()},dispose(){return p||(f=!0,p=(async()=>{let e=await Promise.allSettled([...r].map(y));l.clear(),u.clear();let t=e.find(e=>e.status===`rejected`);if(t?.status===`rejected`)throw t.reason})(),p)}}}var u=n();function d({bridge:e,children:t}){let[n,o]=(0,a.useState)(null);return(0,a.useEffect)(()=>{if(!e?.terminalCreate||!e.terminalWrite||!e.terminalResize||!e.terminalClose||!e.terminalProfiles){o(null);return}let t=l({terminalCreate:e.terminalCreate,terminalWrite:e.terminalWrite,terminalResize:e.terminalResize,terminalClose:e.terminalClose}),n=new Map,i,a=e.terminalProfiles;o({registry:t,profiles:()=>i||=a().catch(e=>{throw i=void 0,e}),renderer:(e,t)=>(n.has(e)||n.set(e,t()),n.get(e))});let s=r(window,({deletedIds:e})=>t.orphan(e)),c=()=>{for(let e of n.values())e.dispose();n.clear(),t.dispose().catch(()=>{})};return window.addEventListener(`pagehide`,c),()=>{s(),window.removeEventListener(`pagehide`,c),c()}},[e]),(0,u.jsx)(i.Provider,{value:n,children:t})}function f(e,t){try{let n=new URL(e,t);return n.protocol===`http:`||n.protocol===`https:`?n:null}catch{return null}}function p(e,t){let n=e.trim();return n&&f(/^[a-z][a-z\d+.-]*:/i.test(n)||n.startsWith(`//`)?n:`https://${n}`,t)?.href||null}function m({href:e,baseUrl:t,button:n=0,download:r=!1,altKey:i=!1,ctrlKey:a=!1,metaKey:o=!1,shiftKey:s=!1,behavior:c}){if(n!==0||r||i||a||o||s||c===`external`||c===`ignore`)return null;let l=f(e,t);if(!l)return null;let u=f(t,t);return u&&l.origin===u.origin?null:l.href}export{m as n,d as r,p as t};
@@ -1 +1 @@
1
- import{t as e}from"./storage-8QW6lXuT.js";import{t}from"./web-preview-CR8GMArR.js";var n=`pisper:web-preview-open`;function r(r){let i=t(r,window.location.href);if(!i)return null;let a={url:i};return localStorage.setItem(e.webPreviewRequest,JSON.stringify(a)),window.dispatchEvent(new CustomEvent(n,{detail:a})),a}function i(){let n=localStorage.getItem(e.webPreviewRequest);if(localStorage.removeItem(e.webPreviewRequest),!n)return null;try{let e=JSON.parse(n),r=typeof e?.url==`string`?t(e.url,window.location.href):null;return r?{url:r}:null}catch{return null}}export{i as n,r,n as t};
1
+ import{t as e}from"./storage-8QW6lXuT.js";import{t}from"./web-preview-C5NXKRu-.js";var n=`pisper:web-preview-open`;function r(r){let i=t(r,window.location.href);if(!i)return null;let a={url:i};return localStorage.setItem(e.webPreviewRequest,JSON.stringify(a)),window.dispatchEvent(new CustomEvent(n,{detail:a})),a}function i(){let n=localStorage.getItem(e.webPreviewRequest);if(localStorage.removeItem(e.webPreviewRequest),!n)return null;try{let e=JSON.parse(n),r=typeof e?.url==`string`?t(e.url,window.location.href):null;return r?{url:r}:null}catch{return null}}export{i as n,r,n as t};
@@ -1 +1 @@
1
- import{t as e}from"./index-DcTDwezs.js";import{a as t,i as n,o as r}from"./vendor-state-GkUciC5H.js";import{t as i}from"./createLucideIcon-Cd-3GVxJ.js";import{a,i as o,r as s,u as c}from"./session-workspaces-Csgpuzxd.js";var l=i(`folder-plus`,[[`path`,{d:`M12 10v6`,key:`1bos4e`}],[`path`,{d:`M9 13h6`,key:`1uhe8q`}],[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]);function u(e){if(typeof e!=`string`)return``;let t=e.trim();if(!t||t.length>2048||t.includes(`\0`))return``;let n=/^(?:[A-Za-z]:)?[\\/]+$/u.test(t)?t:t.replace(/[\\/]+$/u,``),r=c(n);return r&&r!==`\0`?n:``}function d(e){if(!Array.isArray(e))return[];let t=new Set,n=[];for(let r of e){let e=u(r),i=e&&c(e);if(!(!i||t.has(i))&&(t.add(i),n.push(e),n.length>=50))break}return n}function f(e,t){let n=u(t);if(!n)return d(e);let r=c(n);return d([n,...e.filter(e=>c(e)!==r)])}function p(e,t){let n=c(t);return d(e.filter(e=>c(e)!==n))}function m(e,t){let n=new Set(t),r=[];for(let t of d(e)){let e=c(t);n.has(e)||(n.add(e),r.push({key:e,cwd:t}))}return r}var h=`pisper-registered-projects`,g=n(()=>({getItem:t=>{try{return e.getItem(t)}catch{return null}},setItem:(t,n)=>{try{e.setItem(t,n)}catch{}},removeItem:t=>{try{e.removeItem(t)}catch{}}}));function _(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}var v=r()(t((e,t)=>({projects:[],registerProject:n=>{let r=u(n);if(!r)return``;let i=t().projects,a=f(i,r);return _(a,i)||e({projects:a}),r},unregisterProject:n=>{let r=t().projects;return r.some(e=>c(e)===c(n))?(e({projects:p(r,n)}),!0):!1}}),{name:h,storage:g,version:1,partialize:({projects:e})=>({projects:e}),merge:(e,t)=>({...t,projects:d(e&&typeof e==`object`&&`projects`in e?e.projects:void 0)})}));function y(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function b(e){let t=c(e);return t&&t!==`\0`&&!t.includes(`\0`)?t:null}function x(e){let t=Object.create(null);if(!e||typeof e!=`object`||Array.isArray(e))return t;for(let[n,r]of Object.entries(e)){let e=b(n);if(!e||typeof r!=`string`)continue;let i=r.trim();i&&Array.from(i).length<=120&&(t[e]=i)}return t}var S=n(()=>e),C=r()(t((e,t)=>({order:[],names:x(void 0),rememberWorkspaces:n=>{let r=t().order,i=a(r,n);y(i,r)||e({order:i})},moveWorkspace:(n,r,i)=>{let a=t().order,o=s(a,i,n,r);y(o,a)||e({order:o})},setWorkspaceName:(n,r)=>{let i=typeof n==`string`?b(n):null;if(!i||typeof r!=`string`)throw TypeError(`Invalid workspace name`);let a=r.trim();if(Array.from(a).length>120)throw RangeError(`Workspace name is too long`);let o=t().names;if((o[i]||``)===a)return;if(!S)throw Error(`Workspace preferences storage is unavailable`);let s=x(o);a?s[i]=a:delete s[i];try{e({names:s})}catch(t){try{e({names:o})}catch{}throw t}}}),{name:`pisper-workspace-order`,storage:S,version:1,partialize:({order:e,names:t})=>({order:e,names:t}),merge:(e,t)=>({...t,order:o(e&&typeof e==`object`&&`order`in e?e.order:void 0),names:x(e&&typeof e==`object`&&`names`in e?e.names:void 0)})}));export{l as i,v as n,m as r,C as t};
1
+ import{t as e}from"./index-DT21IKeB.js";import{a as t,i as n,o as r}from"./vendor-state-GkUciC5H.js";import{t as i}from"./createLucideIcon-Cd-3GVxJ.js";import{a,i as o,r as s,u as c}from"./session-workspaces-Csgpuzxd.js";var l=i(`folder-plus`,[[`path`,{d:`M12 10v6`,key:`1bos4e`}],[`path`,{d:`M9 13h6`,key:`1uhe8q`}],[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]);function u(e){if(typeof e!=`string`)return``;let t=e.trim();if(!t||t.length>2048||t.includes(`\0`))return``;let n=/^(?:[A-Za-z]:)?[\\/]+$/u.test(t)?t:t.replace(/[\\/]+$/u,``),r=c(n);return r&&r!==`\0`?n:``}function d(e){if(!Array.isArray(e))return[];let t=new Set,n=[];for(let r of e){let e=u(r),i=e&&c(e);if(!(!i||t.has(i))&&(t.add(i),n.push(e),n.length>=50))break}return n}function f(e,t){let n=u(t);if(!n)return d(e);let r=c(n);return d([n,...e.filter(e=>c(e)!==r)])}function p(e,t){let n=c(t);return d(e.filter(e=>c(e)!==n))}function m(e,t){let n=new Set(t),r=[];for(let t of d(e)){let e=c(t);n.has(e)||(n.add(e),r.push({key:e,cwd:t}))}return r}var h=`pisper-registered-projects`,g=n(()=>({getItem:t=>{try{return e.getItem(t)}catch{return null}},setItem:(t,n)=>{try{e.setItem(t,n)}catch{}},removeItem:t=>{try{e.removeItem(t)}catch{}}}));function _(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}var v=r()(t((e,t)=>({projects:[],registerProject:n=>{let r=u(n);if(!r)return``;let i=t().projects,a=f(i,r);return _(a,i)||e({projects:a}),r},unregisterProject:n=>{let r=t().projects;return r.some(e=>c(e)===c(n))?(e({projects:p(r,n)}),!0):!1}}),{name:h,storage:g,version:1,partialize:({projects:e})=>({projects:e}),merge:(e,t)=>({...t,projects:d(e&&typeof e==`object`&&`projects`in e?e.projects:void 0)})}));function y(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function b(e){let t=c(e);return t&&t!==`\0`&&!t.includes(`\0`)?t:null}function x(e){let t=Object.create(null);if(!e||typeof e!=`object`||Array.isArray(e))return t;for(let[n,r]of Object.entries(e)){let e=b(n);if(!e||typeof r!=`string`)continue;let i=r.trim();i&&Array.from(i).length<=120&&(t[e]=i)}return t}var S=n(()=>e),C=r()(t((e,t)=>({order:[],names:x(void 0),rememberWorkspaces:n=>{let r=t().order,i=a(r,n);y(i,r)||e({order:i})},moveWorkspace:(n,r,i)=>{let a=t().order,o=s(a,i,n,r);y(o,a)||e({order:o})},setWorkspaceName:(n,r)=>{let i=typeof n==`string`?b(n):null;if(!i||typeof r!=`string`)throw TypeError(`Invalid workspace name`);let a=r.trim();if(Array.from(a).length>120)throw RangeError(`Workspace name is too long`);let o=t().names;if((o[i]||``)===a)return;if(!S)throw Error(`Workspace preferences storage is unavailable`);let s=x(o);a?s[i]=a:delete s[i];try{e({names:s})}catch(t){try{e({names:o})}catch{}throw t}}}),{name:`pisper-workspace-order`,storage:S,version:1,partialize:({order:e,names:t})=>({order:e,names:t}),merge:(e,t)=>({...t,order:o(e&&typeof e==`object`&&`order`in e?e.order:void 0),names:x(e&&typeof e==`object`&&`names`in e?e.names:void 0)})}));export{l as i,v as n,m as r,C as t};
package/web/index.html CHANGED
@@ -55,11 +55,11 @@
55
55
  document.documentElement.lang = storedLanguage === 'en-US' ? 'en-US' : 'zh-CN'
56
56
  } catch {}
57
57
  </script>
58
- <script type="module" crossorigin src="/assets/index-DcTDwezs.js"></script>
58
+ <script type="module" crossorigin src="/assets/index-DT21IKeB.js"></script>
59
59
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
60
60
  <link rel="modulepreload" crossorigin href="/assets/vendor-react-DwNgTV1j.js">
61
61
  <link rel="modulepreload" crossorigin href="/assets/vendor-router-CSN_DGvx.js">
62
- <link rel="stylesheet" crossorigin href="/assets/index-BY7X-ZtU.css">
62
+ <link rel="stylesheet" crossorigin href="/assets/index-dYNkGdsI.css">
63
63
  </head>
64
64
  <body>
65
65
  <div id="root"></div>
@@ -1 +0,0 @@
1
- var e={zh:{"page.title":`全部代理`,"page.summary":`{agents} 个代理 · {projects} 个项目 · {running} 个在运行`,"page.loading":`正在读取代理…`,"page.error":`暂时无法读取会话`,"page.errorHint":`检查本机运行时是否在线,然后重试。`,"page.retry":`重试`,"lane.attention":`需要你`,"lane.running":`运行中`,"lane.queued":`排队`,"lane.done":`已完成`,"lane.orderAttention":`按等待时长`,"lane.orderRunning":`按开始时间`,"lane.orderQueued":`按队列顺序`,"lane.orderDone":`最新的在前`,"lane.history":`全部历史会话`,"status.approval":`等待批准`,"status.failed":`失败`,"status.failedHandled":`失败 · 已查看`,"status.running":`运行中`,"status.queued":`排队中`,"status.done":`已完成`,"status.stopped":`已停止`,"filter.projects":`项目`,"filter.allProjects":`全部项目`,"filter.projectsTitle":`项目:{projects}`,"filter.listSeparator":`、`,"filter.statuses":`状态`,"filter.statusTitle":`状态:{statuses}`,"filter.noProject":`无项目`,"filter.emptyTitle":`筛选后没有卡片`,"filter.emptyHint":`换一个项目或状态,或者清除筛选。`,"filter.clear":`清除筛选`,"group.label":`分组方式`,"group.lane":`按状态`,"group.project":`按项目`,"card.label":`{title},{status}`,"card.more":`“{title}”的更多操作`,"card.pinned":`已置顶`,"card.standard":`常规操作`,"card.critical":`高风险`,"card.criticalWithReason":`高风险 · {reason}`,"card.approvalLoading":`正在读取审批详情…`,"card.approvalUnavailable":`暂时读不到审批详情,请在会话里查看。`,"card.moreApprovals":`还有 {count} 条审批等你处理`,"card.moreApprovalsCritical":`还有 {count} 条审批等你处理,其中有高风险`,"card.deny":`拒绝`,"card.approve":`允许`,"card.approveCritical":`允许…`,"card.retry":`重试`,"card.archive":`归档`,"card.files":`{count} 个文件`,"card.expand":`展开完整命令`,"card.expandArgs":`展开完整参数`,"card.collapse":`收起`,"card.subAgent":`子代理`,"card.subAgentProgress":`子代理 {running} 个运行中,共 {total} 个`,"activity.starting":`启动中`,"activity.thinking":`思考中`,"activity.responding":`回复中`,"activity.working":`处理中`,"activity.compacting":`压缩上下文中`,"menu.open":`打开会话`,"menu.pin":`置顶`,"menu.unpin":`取消置顶`,"menu.markHandled":`标记已处理`,"menu.copyLink":`复制会话链接`,"menu.archive":`归档`,"action.failed":`操作没有完成,请稍后重试。`,"action.archived":`已归档:{title}`,"action.copied":`已复制会话链接`,"action.copyFailed":`无法复制链接`,"confirm.title":`确认高风险操作`,"confirm.titleStandard":`确认批准`,"confirm.description":`这条审批被命令守卫标记为高风险,批准前请核对完整参数。`,"confirm.descriptionCritical":`这是高风险操作(例如安装全局插件或提交表单),批准前请核对完整参数。`,"confirm.descriptionStandard":`批准前请核对完整参数。`,"confirm.descriptionLoading":`正在读取审批详情…`,"confirm.session":`会话`,"confirm.tool":`工具`,"confirm.cwd":`工作目录`,"confirm.fullArgs":`完整参数`,"confirm.loading":`正在读取审批详情,读取完成前不能批准。`,"confirm.hint":`按住确认按钮 0.6 秒,或按`,"confirm.hintTouch":`按住确认按钮 0.6 秒`,"confirm.hold":`按住确认`,"confirm.approving":`正在批准…`,"confirm.cancel":`取消`,"triage.progress":`逐个处理 {index}/{total}`,"triage.approve":`允许`,"triage.deny":`拒绝`,"triage.retry":`重试`,"triage.open":`打开`,"triage.exit":`退出`,"triage.finished":`全部处理完`,"triage.nothing":`没有需要你处理的事项`,"announce.moved":`{title} 进入 {lane}`,"launch.projects":`最近的项目`,"launch.projectLabel":`项目:{project}`,"launch.defaultProject":`默认目录`,"launch.noProject":`不选项目`,"launch.chooseFolder":`选择文件夹…`,"launch.newFolder":`新建文件夹…`,"launch.startNowChip":`立即开始`,"launch.startAfterChip":`排在 {title} 之后`,"launch.startAfterNote":`排在「{title}」之后:它这一轮结束时自动开始。`,"launch.startAfterGone":`已结束的会话`,"launch.startAfterLabel":`什么时候开始`,"launch.startAfterRunning":`运行中`,"launch.startAfterQueued":`排队中`,"project.actionsFor":`{project} 的操作`,"project.new":`新建项目…`,"folder.title":`新建文件夹`,"folder.description":`在所选位置新建一个空文件夹,并把它作为这次任务的项目。`,"folder.parent":`位置`,"folder.parentPlaceholder":`绝对路径;留空则使用默认工作目录`,"folder.browse":`浏览…`,"folder.browseTitle":`选择新文件夹的位置`,"folder.browseUnavailable":`这台设备无法打开系统文件管理器,请直接填写位置的路径。`,"folder.name":`名称`,"folder.namePlaceholder":`例如 my-project`,"folder.preview":`将新建:{path}`,"folder.create":`新建`,"folder.creating":`正在新建…`,"folder.error.nameRequired":`请填写文件夹名称。`,"folder.error.nameInvalid":`名称不能包含 / \\ : * ? " < > | 等字符,也不能以点或空格结尾。`,"folder.error.parentMissing":`位置不存在或不是文件夹。`,"folder.error.existsAsFile":`这个位置已经有一个同名的文件。`,"folder.error.permission":`没有权限在这个位置新建文件夹。`,"folder.error.failed":`新建文件夹失败。`,"folder.error.failedWithReason":`新建文件夹失败:{reason}`,"project.manage":`管理项目…`,"project.newTaskHere":`在此项目新建任务`,"project.rename":`重命名…`,"project.resetName":`恢复目录名`,"project.delete":`删除项目…`,"project.remove":`移除项目`,"project.chosen":`已选择项目「{project}」,描述第一个任务即可派发`,"project.pickerDescription":`选择项目所在的文件夹,它会成为启动台的派发目标。`,"project.renameDescription":`自定义全部代理与派发对话框里显示的项目名称,工作目录保持不变。`,"project.manageTitle":`管理项目`,"project.manageDescription":`调整项目的显示顺序与名称。还没有会话的项目可以直接移除,不影响目录与文件;有会话的项目删除时会连同其中的全部会话一起删除。`,"project.sessions":`{count} 个会话`,"project.folderName":`目录名:{name}`,"project.moveUp":`上移 {project}`,"project.moveDown":`下移 {project}`,"project.renameNamed":`重命名 {project}`,"project.resetNamed":`{project} 恢复目录名`,"project.deleteWithChatsNamed":`连同会话一起删除 {project}`,"project.removeNamed":`移除项目 {project}`,"project.listLabel":`项目列表`,"project.empty":`还没有项目`,"project.emptyHint":`新建项目后,在启动台描述第一个任务即可派发。`,"project.loading":`正在读取项目…`,"project.error":`读取项目失败`,"project.deleting":`正在删除…`,"project.done":`完成`,"phone.running":`运行中 {elapsed}`,"phone.changes":`+{count} 改动`,"phone.changesLabel":`查看本会话的 {count} 个改动`,"phone.openInspector":`改动、终端、文件与预览`,"phone.inspectorDescription":`本会话的改动、终端、资料来源与网页预览`,"phone.earlierTurns":`展开更早的对话:{summary}`,"phone.previousTurn":`上一轮`,"session.moveWorkspace":`移动工作区…`,"session.goalMode":`目标模式`,"session.workflowRuns":`工作流运行记录`,"session.workflowRunsEmpty":`这个会话还没有工作流运行记录`,"session.plan":`计划 {done}/{total}`,"session.planLabel":`计划进度:已完成 {done} 项,共 {total} 项`,"session.titleMenu":`{title}:会话操作`,"session.tree":`会话树`,"session.treeBranches":`会话树:{count} 个分支`,"session.changedFiles":`{count} 个文件`,"session.changes":`{count} 个文件 +{added} −{removed}`,"session.contextUsage":`上下文已用 {percent}%`,"session.withShortcut":`{label}({shortcut})`,"session.planOpen":`{plan}:在检查器里查看`,"inspector.label":`检查器`,"inspector.tabs":`检查器标签`,"inspector.changes":`改动`,"inspector.changesCount":`改动 {count}`,"inspector.changesScope":`改动范围`,"inspector.scopeSession":`本会话`,"inspector.scopeWorkspace":`工作区`,"inspector.terminal":`终端`,"inspector.terminalScope":`终端视图`,"inspector.processes":`进程`,"inspector.terminalUnavailable":`这台设备或当前运行时不提供终端`,"inspector.files":`文件`,"inspector.preview":`预览`,"inspector.plan":`计划`,"inspector.sideChat":`侧聊`,"inspector.closeTab":`关闭“{tab}”`,"inspector.add":`添加组件标签`,"inspector.addHint":`组件放到“会话面板”位置后,会作为标签出现在这里。`,"inspector.openComponents":`打开组件页`,"inspector.close":`收起检查器`,"transcript.operations":`{count} 个操作`,"transcript.running":`{count} 运行中`,"transcript.failed":`{count} 失败`,"transcript.turn":`第 {count} 轮`,"composer.placeholder":`回复代理,或用 / 调用命令`,"composer.tokens":`{tokens} tok`,"composer.queuedFollowUp":`本轮后`,"composer.queuedSteer":`排队`,"composer.steerNow":`立即发送`,"composer.steerHint":`打断当前这一步,代理马上读到`,"composer.longPressSteer":`运行中长按立即发送`,"changes.sessionSummary":`本会话改动 {count} 个文件`,"changes.workspaceSummary":`工作区改动 {count} 个文件`,"changes.revertAll":`全部还原`,"changes.more":`更多改动操作`,"changes.pending":`{count} 个待批准`,"changes.revertFile":`还原此文件`,"changes.files":`改动的文件`,"changes.diffView":`差异视图`,"changes.unified":`统一`,"changes.split":`并排`,"changes.splitTooNarrow":`检查器不足 600 像素宽,放不下并排视图;把检查器拖宽后可用。`,"changes.approvedAt":`已批准写入 · {time}`,"changes.pendingAt":`待批准 · {time}`,"changes.revertedAt":`已还原 · {time}`,"changes.statusModified":`已修改`,"changes.statusCreated":`新建`,"changes.statusDeleted":`已删除`,"changes.statusRenamed":`已重命名`,"inspector.goal":`目标`,"inspector.team":`团队`,"inspector.subAgents":`子代理`,"shortcuts.agentPanel":`聚焦侧栏会话列表`,"shortcuts.toggleInspector":`显示 / 隐藏检查器`,"shortcuts.previousAgent":`按侧栏顺序切换到上一个会话`,"shortcuts.nextAgent":`按侧栏顺序切换到下一个会话`,"shortcuts.steerMessage":`运行中立即发送`,"shortcuts.shortcutHelp":`快捷键速查`,"shortcuts.sendMessage":`发送(运行中排队)`,"shortcuts.focusSearch":`聚焦筛选 / 搜索`,"shortcuts.groupGlobal":`全局`,"shortcuts.groupBoard":`全部代理`,"shortcuts.groupSession":`会话`,"shortcuts.globalHint":`带修饰键的组合在输入框内同样生效。`,"shortcuts.boardHint":`只在全部代理页生效;单字母键在焦点不在输入框时生效,只能改成不带修饰键的字母。`,"shortcuts.sessionHint":`只在会话页生效;Esc 永远不用于返回。`,"shortcuts.fixed":`固定`,"shortcuts.boardMove":`在代理之间移动(焦点在行上)`,"shortcuts.boardOpen":`打开会话`,"shortcuts.boardExitTriage":`退出逐个处理`,"shortcuts.newline":`换行`,"shortcuts.stopRun":`停止运行(有打开的浮层时先关闭浮层)`,"shortcuts.helpDescription":`当前设备上的绑定。改绑后这里立即更新。`,"shortcuts.helpCustomize":`在设置中改绑`,"home.draftTitle":`新任务`,"home.draftSubtitle":`发出第一条消息时才会创建会话`,"home.draftHint":`选好项目,描述要做的事。发出第一条消息后,这里就是它的会话;其他代理都在“全部代理”里。`,"home.loading":`正在打开上次的会话…`,"home.loadFailed":`无法读取会话列表`,"home.loadFailedHint":`暂时无法确认上次停留的会话。可以重试,或直接开始一个新任务。`,"home.startDraft":`开始新任务`,"home.goHome":`回到主页`,"shortcuts.openSession":`打开会话主页`,"shortcuts.sessionTree":`会话树(分支与标记)`,"shortcuts.sideChat":`侧聊`,"shortcuts.cycleFocusRegion":`在侧栏、顶栏、对话、输入框之间切换焦点`,"shortcuts.groupSidebar":`侧栏`,"shortcuts.sidebarHint":`焦点在侧栏会话行上时生效;A / D 跟随“全部代理”的允许 / 拒绝键,只处理普通批准。`,"shortcuts.sidebarMove":`在会话行之间移动`,"shortcuts.sidebarOpen":`打开会话`,"sidebar.reason.failed":`运行失败`,"sidebar.reason.approval":`等你批准`,"sidebar.reason.criticalApproval":`高风险批准`,"sidebar.reason.question":`等你回答`,"sidebar.reason.questions":`等你回答 · {count} 个问题`,"sidebar.reason.questionCount":`{count} 个问题`,"sidebar.group.attention":`需要你`,"sidebar.group.running":`运行中`,"sidebar.group.queued":`排队`,"sidebar.group.pinned":`置顶`,"sidebar.group.done":`今天完成`,"sidebar.loading":`正在加载会话`,"sidebar.error":`会话列表加载失败`,"sidebar.retry":`重试`,"sidebar.empty":`还没有代理在运行。用“新任务”派出第一个。`,"sidebar.emptyAttention":`没有等你处理的事`,"sidebar.emptyRunning":`没有在运行的代理`,"sidebar.moreRunning":`还有 {count} 个 →`,"sidebar.allDone":`全部 →`,"sidebar.history":`历史会话`,"sidebar.group.recent":`最近`,"sidebar.emptyRecent":`还没有会话`,"sidebar.allChats":`全部会话`,"sidebar.announce":`{title} 需要你:{reason}`,"sidebar.announceSeparator":`;`,"sidebar.attentionRow":`{title},{reason},已等 {wait}`,"sidebar.attentionRowNoWait":`{title},{reason}`,"sidebar.unread":`未读`,"sidebar.deny":`拒绝`,"sidebar.approve":`允许`,"sidebar.open":`打开`,"sidebar.denyNamed":`拒绝 {title} 的请求`,"sidebar.approveNamed":`允许 {title} 的请求`,"sidebar.openNamed":`打开 {title} 处理`,"sidebar.rowMenu":`{title} 的更多操作`,"sidebar.renameTitle":`重命名会话`,"sidebar.renameLabel":`会话标题`,"sidebar.renameSave":`保存`,"sidebar.renamed":`会话标题已更新`,"sidebar.railAttention":`{count} 个代理需要你,打开全部代理`,"sidebar.railRunning":`{count} 个代理运行中,打开全部代理`,"sidebar.filter.all":`全部`,"sidebar.filter.projectActions":`项目操作`,"sidebar.filter.addProject":`添加项目…`,"sidebar.filter.noProjects":`还没有项目`,"sidebar.fleet.attention":`{count} 个需要你`,"sidebar.fleet.running":`{count} 个运行中`,"sidebar.fleet.label":`{attention} 个代理需要你,{running} 个运行中,打开全部代理`,"menu.rename":`重命名`,"composer.placeholderRunning":`运行中:{queue} 排队,{steer} 立即发送`,"composer.placeholderRunningQueueOnly":`运行中:{queue} 排队`,"composer.placeholderRunningTouch":`运行中:点发送排队,长按立即发送`,"composer.sendQueuedNow":`立即发送这条排队消息`,"composer.editQueued":`编辑排队消息`,"composer.cancelQueued":`取消排队`,"composer.plusMenu":`添加附件、技能或语音输入`,"composer.modeChip":`审批与执行方式`,"composer.goalShort":`Goal`,"composer.teamShort":`Team`,"composer.cycleRunMode":`切换`,"composer.contextUsage":`上下文`,"composer.sessionTokens":`本会话`,"composer.cacheHitLabel":`缓存命中`,"transcript.allDone":`全部完成`,"transcript.copyMarkdown":`复制为 Markdown`,"card.holdToApprove":`按住允许`,"card.holdHint":`高风险操作需按住 0.6 秒`,"card.moreWaiting":`还有 {count} 项等你处理`,"shortcuts.cycleRunMode":`切换执行方式(Plan / Goal / Team)`,"project.moveUpShort":`上移`,"project.moveDownShort":`下移`,"triage.answer":`回答`,"overview.doneUnread":`已完成 · 未读`,"overview.waited":`已等 {wait}`,"overview.ran":`已运行 {time}`,"overview.finishedAt":`{time} 完成`,"overview.openToHandle":`打开处理`,"overview.log":`日志`,"overview.retryNamed":`重试 {title}`,"overview.subAgents":`子代理 {running}/{total}`,"overview.startNow":`立即开始`,"overview.queuedAfter":`排在「{title}」之后`,"overview.queuedAfterUnknown":`等前一个任务结束`,"overview.queuePosition":`第 {n} 位`,"overview.empty":`还没有代理在运行`,"overview.newTask":`新任务`,"overview.widgets":`已放置的组件`,"overview.subAgentSlots":`子代理 {running}/{max}`,"overview.todayTokens":`今日 {tokens} tok`,"overview.memory":`内存 {memory}`,"overview.systemLoading":`正在读取系统信息…`,"overview.systemUnavailable":`暂时读不到系统信息`,"overview.projectAttention":`{count} 个需要你`,"overview.projectRunning":`{count} 个运行中`,"overview.projectQueued":`{count} 个排队`,"overview.projectDone":`{count} 个今天完成`,"question.title":`代理在问你`,"question.label":`代理的提问`,"question.waiting":`还有 {count} 个提问等你回答`,"question.moreAfter":`之后还有 {count} 个`,"question.failed":`没能提交回答,请再试一次(可能已经在别处回答过)`,"question.other":`其他…`,"question.otherLabel":`其他回答:{question}`,"question.otherPlaceholder":`写下你的回答`,"question.skip":`跳过`,"question.submit":`提交`,"question.answerNamed":`回答“{title}”:{option}`},en:{"page.title":`All agents`,"page.summary":`{agents} agents · {projects} projects · {running} running`,"page.loading":`Loading agents…`,"page.error":`Sessions could not be loaded`,"page.errorHint":`Check that the local runtime is online, then retry.`,"page.retry":`Retry`,"lane.attention":`Needs you`,"lane.running":`Running`,"lane.queued":`Queued`,"lane.done":`Done`,"lane.orderAttention":`Longest wait first`,"lane.orderRunning":`By start time`,"lane.orderQueued":`Queue order`,"lane.orderDone":`Newest first`,"lane.history":`All sessions`,"status.approval":`Awaiting approval`,"status.failed":`Failed`,"status.failedHandled":`Failed · seen`,"status.running":`Running`,"status.queued":`Queued`,"status.done":`Done`,"status.stopped":`Stopped`,"filter.projects":`Projects`,"filter.allProjects":`All projects`,"filter.projectsTitle":`Project: {projects}`,"filter.listSeparator":`, `,"filter.statuses":`Status`,"filter.statusTitle":`Status: {statuses}`,"filter.noProject":`No project`,"filter.emptyTitle":`No cards match these filters`,"filter.emptyHint":`Pick another project or status, or clear the filters.`,"filter.clear":`Clear filters`,"group.label":`Group by`,"group.lane":`By status`,"group.project":`By project`,"card.label":`{title}, {status}`,"card.more":`More actions for “{title}”`,"card.pinned":`Pinned`,"card.standard":`Routine`,"card.critical":`High risk`,"card.criticalWithReason":`High risk · {reason}`,"card.approvalLoading":`Loading approval details…`,"card.approvalUnavailable":`Approval details are unavailable; check them in the session.`,"card.moreApprovals":`{count} more approvals waiting`,"card.moreApprovalsCritical":`{count} more approvals waiting, including high-risk ones`,"card.deny":`Deny`,"card.approve":`Allow`,"card.approveCritical":`Allow…`,"card.retry":`Retry`,"card.archive":`Archive`,"card.files":`{count} files`,"card.expand":`Show full command`,"card.expandArgs":`Show all arguments`,"card.collapse":`Collapse`,"card.subAgent":`Sub-agent`,"card.subAgentProgress":`Sub-agents: {running} of {total} running`,"activity.starting":`Starting`,"activity.thinking":`Thinking`,"activity.responding":`Responding`,"activity.working":`Working`,"activity.compacting":`Compacting context`,"menu.open":`Open session`,"menu.pin":`Pin`,"menu.unpin":`Unpin`,"menu.markHandled":`Mark as handled`,"menu.copyLink":`Copy session link`,"menu.archive":`Archive`,"action.failed":`That didn't go through. Try again shortly.`,"action.archived":`Archived: {title}`,"action.copied":`Session link copied`,"action.copyFailed":`Couldn't copy the link`,"confirm.title":`Confirm high-risk action`,"confirm.titleStandard":`Confirm approval`,"confirm.description":`The command guard flagged this approval as high risk. Check the full arguments before allowing it.`,"confirm.descriptionCritical":`This is a high-risk action, such as installing a global plugin or submitting a form. Check the full arguments before allowing it.`,"confirm.descriptionStandard":`Check the full arguments before allowing it.`,"confirm.descriptionLoading":`Loading approval details…`,"confirm.session":`Session`,"confirm.tool":`Tool`,"confirm.cwd":`Working folder`,"confirm.fullArgs":`Full arguments`,"confirm.loading":`Loading approval details. You can allow it once they arrive.`,"confirm.hint":`Hold the confirm button for 0.6 s, or press`,"confirm.hintTouch":`Hold the confirm button for 0.6 s`,"confirm.hold":`Hold to confirm`,"confirm.approving":`Allowing…`,"confirm.cancel":`Cancel`,"triage.progress":`Triage {index}/{total}`,"triage.approve":`Allow`,"triage.deny":`Deny`,"triage.retry":`Retry`,"triage.open":`Open`,"triage.exit":`Exit`,"triage.finished":`All handled`,"triage.nothing":`Nothing needs you`,"announce.moved":`{title} moved to {lane}`,"launch.projects":`Recent projects`,"launch.projectLabel":`Project: {project}`,"launch.defaultProject":`Default folder`,"launch.noProject":`No project`,"launch.chooseFolder":`Choose folder…`,"launch.newFolder":`New folder…`,"launch.startNowChip":`Start now`,"launch.startAfterChip":`After {title}`,"launch.startAfterNote":`Queued after “{title}”: starts when that run ends.`,"launch.startAfterGone":`a finished session`,"launch.startAfterLabel":`When to start`,"launch.startAfterRunning":`Running`,"launch.startAfterQueued":`Queued`,"project.actionsFor":`Actions for {project}`,"project.new":`New project…`,"folder.title":`New folder`,"folder.description":`Create an empty folder at the chosen location and use it as this task's project.`,"folder.parent":`Location`,"folder.parentPlaceholder":`Absolute path; leave empty for the default working folder`,"folder.browse":`Browse…`,"folder.browseTitle":`Choose where to create the new folder`,"folder.browseUnavailable":`This device can't open the system file manager. Type the location path instead.`,"folder.name":`Name`,"folder.namePlaceholder":`e.g. my-project`,"folder.preview":`Will create: {path}`,"folder.create":`Create`,"folder.creating":`Creating…`,"folder.error.nameRequired":`Enter a folder name.`,"folder.error.nameInvalid":`The name can't contain / \\ : * ? " < > | and can't end with a dot or space.`,"folder.error.parentMissing":`The location doesn't exist or isn't a folder.`,"folder.error.existsAsFile":`A file with this name already exists at the location.`,"folder.error.permission":`You don't have permission to create a folder at this location.`,"folder.error.failed":`Couldn't create the folder.`,"folder.error.failedWithReason":`Couldn't create the folder: {reason}`,"project.manage":`Manage projects…`,"project.newTaskHere":`New task in this project`,"project.rename":`Rename…`,"project.resetName":`Use folder name`,"project.delete":`Delete project…`,"project.remove":`Remove project`,"project.chosen":`Project "{project}" selected. Describe the first task to dispatch it.`,"project.pickerDescription":`Choose the project folder. It becomes the launch console target.`,"project.renameDescription":`Customize the project name shown in All agents and the dispatch dialog. The working directory stays the same.`,"project.manageTitle":`Manage projects`,"project.manageDescription":`Change the order and names of your projects. Projects without chats can be removed without touching their folders or files. Deleting a project with chats also deletes all of its chats.`,"project.sessions":`{count} chats`,"project.folderName":`Folder: {name}`,"project.moveUp":`Move {project} up`,"project.moveDown":`Move {project} down`,"project.renameNamed":`Rename {project}`,"project.resetNamed":`Use folder name for {project}`,"project.deleteWithChatsNamed":`Delete {project} and its chats`,"project.removeNamed":`Remove project {project}`,"project.listLabel":`Projects`,"project.empty":`No projects yet`,"project.emptyHint":`Create a project, then describe its first task in the launch console.`,"project.loading":`Loading projects…`,"project.error":`Couldn't load projects`,"project.deleting":`Deleting…`,"project.done":`Done`,"phone.running":`Running {elapsed}`,"phone.changes":`+{count} changes`,"phone.changesLabel":`View the {count} files changed in this session`,"phone.openInspector":`Changes, terminal, files and preview`,"phone.inspectorDescription":`Changes, terminal, sources and web preview for this session`,"phone.earlierTurns":`Show earlier conversation: {summary}`,"phone.previousTurn":`Previous turn`,"session.moveWorkspace":`Move workspace…`,"session.goalMode":`Goal mode`,"session.workflowRuns":`Workflow runs`,"session.workflowRunsEmpty":`This session has no workflow runs yet`,"session.plan":`Plan {done}/{total}`,"session.planLabel":`Plan progress: {done} of {total} done`,"session.titleMenu":`{title}: session actions`,"session.tree":`Session tree`,"session.treeBranches":`Session tree: {count} branches`,"session.treeBranches_one":`Session tree: {count} branch`,"session.changedFiles":`{count} files`,"session.changedFiles_one":`{count} file`,"session.changes":`{count} files +{added} −{removed}`,"session.changes_one":`{count} file +{added} −{removed}`,"session.contextUsage":`Context used {percent}%`,"session.withShortcut":`{label} ({shortcut})`,"session.planOpen":`{plan}: view in the inspector`,"inspector.label":`Inspector`,"inspector.tabs":`Inspector tabs`,"inspector.changes":`Changes`,"inspector.changesCount":`Changes {count}`,"inspector.changesScope":`Change scope`,"inspector.scopeSession":`This session`,"inspector.scopeWorkspace":`Workspace`,"inspector.terminal":`Terminal`,"inspector.terminalScope":`Terminal view`,"inspector.processes":`Processes`,"inspector.terminalUnavailable":`This device or runtime does not provide a terminal`,"inspector.files":`Files`,"inspector.preview":`Preview`,"inspector.plan":`Plan`,"inspector.sideChat":`Side chat`,"inspector.closeTab":`Close “{tab}”`,"inspector.add":`Add component tab`,"inspector.addHint":`Components placed in the “session panel” slot show up here as tabs.`,"inspector.openComponents":`Open Components`,"inspector.close":`Hide inspector`,"transcript.operations":`{count} operations`,"transcript.operations_one":`{count} operation`,"transcript.running":`{count} running`,"transcript.failed":`{count} failed`,"transcript.turn":`Turn {count}`,"composer.placeholder":`Reply to the agent, or use / for commands`,"composer.tokens":`{tokens} tok`,"composer.queuedFollowUp":`After run`,"composer.queuedSteer":`Queued`,"composer.steerNow":`Send now`,"composer.steerHint":`Interrupts the current step so the agent reads it right away`,"composer.longPressSteer":`While running, press and hold to send now`,"changes.sessionSummary":`{count} files changed in this session`,"changes.workspaceSummary":`{count} uncommitted files in the workspace`,"changes.revertAll":`Revert all`,"changes.more":`More change actions`,"changes.pending":`{count} pending approval`,"changes.revertFile":`Revert this file`,"changes.files":`Changed files`,"changes.diffView":`Diff view`,"changes.unified":`Unified`,"changes.split":`Split`,"changes.splitTooNarrow":`The inspector is narrower than 600 px, too narrow for side by side. Widen it to use this view.`,"changes.approvedAt":`Write approved · {time}`,"changes.pendingAt":`Awaiting approval · {time}`,"changes.revertedAt":`Reverted · {time}`,"changes.statusModified":`Modified`,"changes.statusCreated":`Added`,"changes.statusDeleted":`Deleted`,"changes.statusRenamed":`Renamed`,"inspector.goal":`Goal`,"inspector.team":`Team`,"inspector.subAgents":`Sub-agents`,"shortcuts.agentPanel":`Focus the sidebar session list`,"shortcuts.toggleInspector":`Show / hide inspector`,"shortcuts.previousAgent":`Previous session in sidebar order`,"shortcuts.nextAgent":`Next session in sidebar order`,"shortcuts.steerMessage":`Send now while running`,"shortcuts.shortcutHelp":`Keyboard shortcuts`,"shortcuts.sendMessage":`Send (queues while running)`,"shortcuts.focusSearch":`Focus filter / search`,"shortcuts.groupGlobal":`Global`,"shortcuts.groupBoard":`All agents`,"shortcuts.groupSession":`Session`,"shortcuts.globalHint":`Chords with a modifier also work while typing.`,"shortcuts.boardHint":`All agents page only. Single-letter keys work when focus is not in a text field and can only be letters without modifiers.`,"shortcuts.sessionHint":`Session page only. Esc never navigates back.`,"shortcuts.fixed":`Fixed`,"shortcuts.boardMove":`Move between agents (row focused)`,"shortcuts.boardOpen":`Open the session`,"shortcuts.boardExitTriage":`Leave triage`,"shortcuts.newline":`New line`,"shortcuts.stopRun":`Stop the run (closes an open overlay first)`,"shortcuts.helpDescription":`Bindings on this device. Changes show up here right away.`,"shortcuts.helpCustomize":`Customize in Settings`,"home.draftTitle":`New task`,"home.draftSubtitle":`A session is created when you send the first message`,"home.draftHint":`Pick a project and describe the task. After the first message this becomes its session; other agents stay in All agents.`,"home.loading":`Opening your last session…`,"home.loadFailed":`Couldn't load sessions`,"home.loadFailedHint":`Your last session can't be confirmed right now. Retry, or start a new task instead.`,"home.startDraft":`Start a new task`,"home.goHome":`Go to home`,"shortcuts.openSession":`Open session home`,"shortcuts.sessionTree":`Session tree (branches and marks)`,"shortcuts.sideChat":`Side chat`,"shortcuts.cycleFocusRegion":`Move focus between sidebar, top bar, conversation and composer`,"shortcuts.groupSidebar":`Sidebar`,"shortcuts.sidebarHint":`When a session row in the sidebar has focus. A / D follow the All agents allow / deny keys and only handle standard approvals.`,"shortcuts.sidebarMove":`Move between session rows`,"shortcuts.sidebarOpen":`Open session`,"sidebar.reason.failed":`Run failed`,"sidebar.reason.approval":`Waiting for your approval`,"sidebar.reason.criticalApproval":`High-risk approval`,"sidebar.reason.question":`Waiting for your answer`,"sidebar.reason.questions":`Waiting for your answer · {count} questions`,"sidebar.reason.questions_one":`Waiting for your answer · {count} question`,"sidebar.reason.questionCount":`{count} questions`,"sidebar.reason.questionCount_one":`{count} question`,"sidebar.group.attention":`Needs you`,"sidebar.group.running":`Running`,"sidebar.group.queued":`Queued`,"sidebar.group.pinned":`Pinned`,"sidebar.group.done":`Done today`,"sidebar.loading":`Loading sessions`,"sidebar.error":`Couldn't load sessions`,"sidebar.retry":`Retry`,"sidebar.empty":`No agents running yet. Start one with New task.`,"sidebar.emptyAttention":`Nothing needs you`,"sidebar.emptyRunning":`No agents running`,"sidebar.moreRunning":`{count} more →`,"sidebar.allDone":`All →`,"sidebar.history":`History`,"sidebar.group.recent":`Recent`,"sidebar.emptyRecent":`No chats yet`,"sidebar.allChats":`All chats`,"sidebar.announce":`{title} needs you: {reason}`,"sidebar.announceSeparator":`; `,"sidebar.attentionRow":`{title}, {reason}, waiting {wait}`,"sidebar.attentionRowNoWait":`{title}, {reason}`,"sidebar.unread":`Unread`,"sidebar.deny":`Deny`,"sidebar.approve":`Allow`,"sidebar.open":`Open`,"sidebar.denyNamed":`Deny the request from {title}`,"sidebar.approveNamed":`Allow the request from {title}`,"sidebar.openNamed":`Open {title} to handle it`,"sidebar.rowMenu":`More actions for {title}`,"sidebar.renameTitle":`Rename session`,"sidebar.renameLabel":`Session title`,"sidebar.renameSave":`Save`,"sidebar.renamed":`Session title updated`,"sidebar.railAttention":`{count} agents need you, open all agents`,"sidebar.railAttention_one":`{count} agent needs you, open all agents`,"sidebar.railRunning":`{count} agents running, open all agents`,"sidebar.railRunning_one":`{count} agent running, open all agents`,"sidebar.filter.all":`All`,"sidebar.filter.projectActions":`Project actions`,"sidebar.filter.addProject":`Add project…`,"sidebar.filter.noProjects":`No projects yet`,"sidebar.fleet.attention":`{count} need you`,"sidebar.fleet.running":`{count} running`,"sidebar.fleet.label":`{attention} need you, {running} running, open all agents`,"menu.rename":`Rename`,"composer.placeholderRunning":`Running: {queue} to queue, {steer} to send now`,"composer.placeholderRunningQueueOnly":`Running: {queue} to queue`,"composer.placeholderRunningTouch":`Running: tap send to queue, hold send to send now`,"composer.sendQueuedNow":`Send this queued message now`,"composer.editQueued":`Edit queued message`,"composer.cancelQueued":`Cancel queued message`,"composer.plusMenu":`Add attachments, skills or voice input`,"composer.modeChip":`Approval and run mode`,"composer.goalShort":`Goal`,"composer.teamShort":`Team`,"composer.cycleRunMode":`Cycle`,"composer.contextUsage":`Context`,"composer.sessionTokens":`This session`,"composer.cacheHitLabel":`Cache hits`,"transcript.allDone":`all done`,"transcript.copyMarkdown":`Copy as Markdown`,"card.holdToApprove":`Hold to allow`,"card.holdHint":`High-risk: hold for 0.6 s`,"card.moreWaiting":`{count} more waiting for you`,"shortcuts.cycleRunMode":`Cycle run mode (Plan / Goal / Team)`,"project.moveUpShort":`Move up`,"project.moveDownShort":`Move down`,"triage.answer":`Answer`,"overview.doneUnread":`Done · unread`,"overview.waited":`waited {wait}`,"overview.ran":`running for {time}`,"overview.finishedAt":`finished at {time}`,"overview.openToHandle":`Open to handle`,"overview.log":`Log`,"overview.retryNamed":`Retry {title}`,"overview.subAgents":`Sub-agents {running}/{total}`,"overview.startNow":`Start now`,"overview.queuedAfter":`After “{title}”`,"overview.queuedAfterUnknown":`Waiting for an earlier task`,"overview.queuePosition":`No. {n} in queue`,"overview.empty":`No agents are running yet`,"overview.newTask":`New task`,"overview.widgets":`Placed components`,"overview.subAgentSlots":`Sub-agents {running}/{max}`,"overview.todayTokens":`{tokens} tok today`,"overview.memory":`Memory {memory}`,"overview.systemLoading":`Reading system info…`,"overview.systemUnavailable":`System info is unavailable right now`,"overview.projectAttention":`{count} need you`,"overview.projectAttention_one":`{count} needs you`,"overview.projectRunning":`{count} running`,"overview.projectQueued":`{count} queued`,"overview.projectDone":`{count} done today`,"question.title":`The agent is asking you`,"question.label":`Agent question`,"question.waiting":`{count} more questions are waiting for you`,"question.moreAfter":`{count} more after this`,"question.failed":`Couldn't send the answer. Try again (it may have been answered elsewhere).`,"question.other":`Other…`,"question.otherLabel":`Other answer: {question}`,"question.otherPlaceholder":`Write your answer`,"question.skip":`Skip`,"question.submit":`Submit`,"question.answerNamed":`Answer “{title}”: {option}`}};export{e as boardMessages};