pisper 0.6.24 → 0.6.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -5
- package/web/.vite/manifest.json +769 -631
- package/web/assets/{AppDialog-BcXOXBcR.js → AppDialog-CuxO26Km.js} +1 -1
- package/web/assets/{AppOverlays-DhOsSE6q.js → AppOverlays-Bt5SL3PY.js} +1 -1
- package/web/assets/{AppSelect-BD6RAaJ5.js → AppSelect-DQYKUW5E.js} +1 -1
- package/web/assets/{AssetsPage-7Fuwati9.js → AssetsPage-BE6AzOGC.js} +1 -1
- package/web/assets/{BoardPage-C81aOK4p.js → BoardPage-DX0fJ_ap.js} +3 -3
- package/web/assets/ChannelsPage-CyT7oDYZ.js +1 -0
- package/web/assets/{ChatAppearancePage-DQr-uhHb.js → ChatAppearancePage-B6Dzj2Bj.js} +1 -1
- package/web/assets/ChatHistoryPage-Cq20l93c.js +1 -0
- package/web/assets/ChatPage-DgiS-Qj_.js +553 -0
- package/web/assets/ConfigPage-CgrWdzb5.js +5 -0
- package/web/assets/{DesktopWindowControls-BWe5YIjj.js → DesktopWindowControls-D8axeuEx.js} +1 -1
- package/web/assets/FeaturePage-BB1TeMlr.js +1 -0
- package/web/assets/{FileAttachmentPreview-IZzA3f8k.js → FileAttachmentPreview-DPjT_iYk.js} +1 -1
- package/web/assets/{FloatingWidgets-DgIJkrEC.js → FloatingWidgets-FI1S4hdn.js} +1 -1
- package/web/assets/FocusRuntimeControls-CvAx-KDV.js +1 -0
- package/web/assets/{GitDiffViewer-CypHOHdP.js → GitDiffViewer-DwFfeFOA.js} +1 -1
- package/web/assets/{ManageProjectsDialog-DxiTEqYf.js → ManageProjectsDialog-BSLNf6qD.js} +1 -1
- package/web/assets/{MarkdownMessage-CuaozZah.js → MarkdownMessage-NK7Ixb4Y.js} +1 -1
- package/web/assets/{McpPage-BbmxMKuy.js → McpPage-Cn-yDgC5.js} +1 -1
- package/web/assets/MemoryEvolution-B8IeSLcd.js +1 -0
- package/web/assets/MemoryPage-ZwoG_oj6.js +2 -0
- package/web/assets/{MobileNavigation-IZrksubf.js → MobileNavigation-DK5a0kZU.js} +1 -1
- package/web/assets/{MorePage-DObfXE0e.js → MorePage-BL8nDnTQ.js} +1 -1
- package/web/assets/{NewFolderDialog-CeRiD1xe.js → NewFolderDialog-COkq83LW.js} +1 -1
- package/web/assets/{PageHeader-D8QTuWd6.js → PageHeader-BBTCMqXc.js} +1 -1
- package/web/assets/{PhoneDrawer-Dfmmixh5.js → PhoneDrawer-BcPKJWl-.js} +1 -1
- package/web/assets/{PhoneMenuButton-Bbna_Bcf.js → PhoneMenuButton-D6vdTZdF.js} +1 -1
- package/web/assets/{PhoneTopBar-Dz94PR8O.js → PhoneTopBar-MqNeI69v.js} +1 -1
- package/web/assets/{PluginsPage-0rmSVMfr.js → PluginsPage-Bp71HpKD.js} +1 -1
- package/web/assets/{SafeModePrompt-CAfT8lBS.js → SafeModePrompt-CpvvU5wL.js} +1 -1
- package/web/assets/SchedulesPage-Drs10rEV.js +1 -0
- package/web/assets/{SessionBrowserPane-DMTNqq-e.js → SessionBrowserPane-DjtB4MCI.js} +2 -2
- package/web/assets/SessionContextPanel-ETfnp4pT.js +2 -0
- package/web/assets/{SessionHome-047YRkeb.js → SessionHome-CHBw3ZvP.js} +1 -1
- package/web/assets/SessionInspector-DVaRflQy.js +1 -0
- package/web/assets/{SessionShell-BqNSjTbQ.js → SessionShell-CwfQAX7i.js} +1 -1
- package/web/assets/{SettingsSidebar-a9IEYCfr.js → SettingsSidebar-FgC-tlY2.js} +1 -1
- package/web/assets/{ShortcutHelpDialog-B1RT_EMe.js → ShortcutHelpDialog-DKbIkUnk.js} +1 -1
- package/web/assets/{ShortcutKeys-DIEI9JQZ.js → ShortcutKeys-BuHXNKVW.js} +1 -1
- package/web/assets/{SidebarUpdateStatus-phIx4K_T.js → SidebarUpdateStatus-LKwNKESF.js} +1 -1
- package/web/assets/{SkillsPage-CZuR-0QX.js → SkillsPage-BbnerW44.js} +1 -1
- package/web/assets/{TaskProcessesPane-x73TNzuV.js → TaskProcessesPane-B2fyZEK9.js} +1 -1
- package/web/assets/{TaskTerminalView-D2UVtmT1.js → TaskTerminalView-CKApgF75.js} +1 -1
- package/web/assets/{TerminalPanel-C0U35k57.js → TerminalPanel-D03WycYm.js} +1 -1
- package/web/assets/{WebDesktopPet-CJtB44aG.js → WebDesktopPet-K2dbcbnQ.js} +1 -1
- package/web/assets/WorkflowsPage-CmzftCtz.js +1 -0
- package/web/assets/{WorkspacePicker-C7hhcfZV.js → WorkspacePicker-DbdbTOV2.js} +1 -1
- package/web/assets/{api-BmSvZCuH.js → api-BW_X0FMZ.js} +1 -1
- package/web/assets/{app-update-DhpOY37a.js → app-update-DYFXTosD.js} +1 -1
- package/web/assets/{approval-confirm-Dc3BZGo4.js → approval-confirm-DQ5N_lJB.js} +1 -1
- package/web/assets/archive-ojKJT7Fp.js +1 -0
- package/web/assets/{board-projects-C7DazgZG.js → board-projects-CrejrMrn.js} +1 -1
- package/web/assets/book-open-BuHHD9os.js +1 -0
- package/web/assets/bots-store-CNXTx3UY.js +1 -0
- package/web/assets/{chat-api-DHqVwcpJ.js → chat-api-Bo6nhq40.js} +1 -1
- package/web/assets/chevrons-up-down-C2sEPdAh.js +1 -0
- package/web/assets/{client-store-Dif482Kx.js → client-store-DzgOPMlh.js} +1 -1
- package/web/assets/{config-search-CKpXm_hp.js → config-search-BiQmWst4.js} +1 -1
- package/web/assets/{dialog-DFcH7POi.js → dialog-DFZX_Dek.js} +1 -1
- package/web/assets/dist-BS3ekNDj.js +1 -0
- package/web/assets/{events-C7sXXop4.js → events-PfANjkHx.js} +1 -1
- package/web/assets/{focus-session-composer-bits-D2XiGLcj.js → focus-session-composer-bits-C_LOpJH_.js} +1 -1
- package/web/assets/{folder-paths-CsQLylLL.js → folder-paths-aRRH_MYq.js} +1 -1
- package/web/assets/{hosts-CwTc21QE.js → hosts-lvoPwC3T.js} +1 -1
- package/web/assets/i18n-EVP8yIdy.js +1 -0
- package/web/assets/index-D_zLThH_.js +2 -0
- package/web/assets/index-l96Dl6z6.css +2 -0
- package/web/assets/memory-api-DkPje--t.js +1 -0
- package/web/assets/message-circle-D-XrK6Ft.js +1 -0
- package/web/assets/{mobile-remote-fallback-C2Q0wAa6.js → mobile-remote-fallback-LLMZWoIu.js} +1 -1
- package/web/assets/mount-app-7pFSwVLO.js +9 -0
- package/web/assets/{permission-rules-api-D1Tbe4E9.js → permission-rules-api-CAJsSBA5.js} +1 -1
- package/web/assets/{pick-system-directory-CQS5pqM-.js → pick-system-directory-yk6L7wR2.js} +1 -1
- package/web/assets/pin-off-BpRu_vrC.js +1 -0
- package/web/assets/placements-CMrgmg3t.js +2 -0
- package/web/assets/{popover-CXB2yzW6.js → popover--q2hs_pT.js} +1 -1
- package/web/assets/{public-D1nVPEiV.js → public-62LVX7HU.js} +1 -1
- package/web/assets/public-DWbrDr0p.js +3 -0
- package/web/assets/{public-BVKkvQiF.js → public-DkqrpWXx.js} +2 -2
- package/web/assets/{public-components-B6uxO_ZB.js → public-components-DHMvCgH2.js} +1 -1
- package/web/assets/public-diff-WjbTu91T.js +1 -0
- package/web/assets/public-events-CTdTIu5Q.js +1 -0
- package/web/assets/{public-flags-KylDNCsK.js → public-flags-D9LdpQwJ.js} +1 -1
- package/web/assets/public-greeting-DEKYruJJ.js +1 -0
- package/web/assets/{public-session-DjI86F5J.js → public-session-B9UHA6rN.js} +1 -1
- package/web/assets/{public-sidebar-PhHPuas_.js → public-sidebar-Lne86i_K.js} +1 -1
- package/web/assets/{runtime-capabilities-store-CTtXyNjK.js → runtime-capabilities-store-BNM5Ug-5.js} +1 -1
- package/web/assets/{safe-mode-instance-_WZgKT1M.js → safe-mode-instance-DnTP7EUr.js} +1 -1
- package/web/assets/safe-mode-sentinel-DOhqH4gj.js +1 -0
- package/web/assets/select-Bbk9bmXO.js +1 -0
- package/web/assets/send-Cj-W03w_.js +1 -0
- package/web/assets/{session-change-summary-api-DENj-A9c.js → session-change-summary-api-DMTwGz7o.js} +1 -1
- package/web/assets/{session-home-D1MkpdBS.js → session-home-DUpZt2dn.js} +1 -1
- package/web/assets/session-list-BRMu9JWa.js +1 -0
- package/web/assets/{session-organization-api-Cm9HoIme.js → session-organization-api-BGyp66Uv.js} +1 -1
- package/web/assets/{session-scope-BnKeB5vZ.js → session-scope-DZITSvZr.js} +1 -1
- package/web/assets/{session-tree-actions-DhF8lJLn.js → session-tree-actions-CRWyFqAD.js} +1 -1
- package/web/assets/{session-tree-summary-DEJ52bdp.js → session-tree-summary-HTmAo_9V.js} +1 -1
- package/web/assets/{shortcuts-DnykOp5e.js → shortcuts-D72gQCwH.js} +1 -1
- package/web/assets/side-chat-context-D1hZOT7g.js +7 -0
- package/web/assets/{sidebar-bemTfe07.js → sidebar-sj8X80Y9.js} +1 -1
- package/web/assets/{sidebar-store-Be8dU3KV.js → sidebar-store-CXZ7QrOr.js} +1 -1
- package/web/assets/slider-De8rWVNs.js +1 -0
- package/web/assets/sliders-horizontal-Dryf1XyC.js +1 -0
- package/web/assets/{speech-session-4UWWW7HR.js → speech-session-D2GQEOAL.js} +1 -1
- package/web/assets/{startup-queries-iq2o5pqJ.js → startup-queries-CuEXV1Zu.js} +1 -1
- package/web/assets/{storage-8QW6lXuT.js → storage-DtvZ_lEu.js} +1 -1
- package/web/assets/tool-labels-Bexnwp5q.js +1 -0
- package/web/assets/undo-2-C-xQ0UVT.js +1 -0
- package/web/assets/{use-i18n-DCxQRXLH.js → use-i18n-_vdxObu5.js} +1 -1
- package/web/assets/{use-open-bot-BTTe7141.js → use-open-bot-BTxzOAbZ.js} +1 -1
- package/web/assets/{use-studio-actions-CvTVL6vy.js → use-studio-actions-CbMHRZpd.js} +1 -1
- package/web/assets/{useCatalogProjects-D0_Xilel.js → useCatalogProjects-BEkCpADy.js} +1 -1
- package/web/assets/{useNewProjectPicker-C3dVgDqI.js → useNewProjectPicker-CUtLjwYE.js} +2 -2
- package/web/assets/{useNow-BrhALV5l.js → useNow-eQeBCqQk.js} +1 -1
- package/web/assets/{usePhoneShell-BleJZMk4.js → usePhoneShell-DZHZWXnN.js} +1 -1
- package/web/assets/{useSessionListQuery-CSTrzBD6.js → useSessionListQuery-BoUzmjZC.js} +1 -1
- package/web/assets/{useSessionRowActions-CBOzJhLW.js → useSessionRowActions-DCqDrGZY.js} +1 -1
- package/web/assets/{useSidebarModel-AYsswvjm.js → useSidebarModel-CZAfH4Fa.js} +1 -1
- package/web/assets/{web-preview-B9ooQu6f.js → web-preview-XrRFo42l.js} +1 -1
- package/web/assets/{web-preview-events-DZb37WWK.js → web-preview-events-Ba6duwGi.js} +1 -1
- package/web/assets/workflow-messages-Cc4pX_oo.js +1 -0
- package/web/assets/{workspace-order-store-CQ4SHO-9.js → workspace-order-store-Ao4OZ13V.js} +1 -1
- package/web/index.html +2 -2
- package/web/assets/ChannelsPage-LM4bpKzy.js +0 -1
- package/web/assets/ChatHistoryPage-DcjG1hoQ.js +0 -1
- package/web/assets/ChatPage-HBq1cr2I.js +0 -553
- package/web/assets/ConfigPage-Bcjc5mbO.js +0 -5
- package/web/assets/FeaturePage-DGauTCbU.js +0 -1
- package/web/assets/FocusRuntimeControls-Bgq7LvMl.js +0 -1
- package/web/assets/MemoryPage-BeI2YTUn.js +0 -1
- package/web/assets/SchedulesPage-C3TpSm9t.js +0 -1
- package/web/assets/SessionContextPanel-DoS-Xqny.js +0 -2
- package/web/assets/SessionInspector-GXGZ9n87.js +0 -1
- package/web/assets/WorkflowsPage-o4p12fMI.js +0 -1
- package/web/assets/bots-store-CeTfxdyY.js +0 -1
- package/web/assets/dist-V8chnW6-.js +0 -1
- package/web/assets/i18n-YQ8mc9k7.js +0 -1
- package/web/assets/index-DJA4qaOu.css +0 -2
- package/web/assets/index-DjSjahBi.js +0 -2
- package/web/assets/mount-app-DAxz1ll-.js +0 -9
- package/web/assets/placements-BuU0Zuqy.js +0 -2
- package/web/assets/public-BVuJa7Dh.js +0 -3
- package/web/assets/public-diff-CCVYk91T.js +0 -1
- package/web/assets/public-events-CVn8fEHx.js +0 -1
- package/web/assets/safe-mode-sentinel-CVhmZl77.js +0 -1
- package/web/assets/select-DD_WO-gs.js +0 -1
- package/web/assets/send-QxBfLFo-.js +0 -1
- package/web/assets/session-list-BeyOEzyU.js +0 -1
- package/web/assets/side-chat-context-C2SzUmd5.js +0 -7
- package/web/assets/slider-DTmAZl-R.js +0 -1
- package/web/assets/tool-labels-ghvpPFmc.js +0 -1
- package/web/assets/workflow-messages-Cj35aJZc.js +0 -1
- package/web/memory-galaxy-background.webp +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{t}from"./index-
|
|
1
|
+
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{t}from"./index-D_zLThH_.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-CuEXV1Zu.js";import{t as s}from"./runtime-capabilities-store-BNM5Ug-5.js";import{l as c,n as l,u}from"./session-board-status-D2lpFPiI.js";import{u as d}from"./events-PfANjkHx.js";import{t as f}from"./chat-api-Bo6nhq40.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-BoUzmjZC.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-
|
|
1
|
+
import{n as e,r as t}from"./use-mobile-C2tPBAza.js";import{t as n}from"./client-store-DzgOPMlh.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-iq2o5pqJ.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-BmSvZCuH.js";import{t as h}from"./runtime-capabilities-store-CTtXyNjK.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-DHqVwcpJ.js";import{n as x}from"./session-organization-api-Cm9HoIme.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-CuEXV1Zu.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-BW_X0FMZ.js";import{t as h}from"./runtime-capabilities-store-BNM5Ug-5.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-Bo6nhq40.js";import{n as x}from"./session-organization-api-BGyp66Uv.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-
|
|
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-_vdxObu5.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-eQeBCqQk.js";import{t as p}from"./session-home-DUpZt2dn.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-
|
|
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-eQeBCqQk.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{
|
|
1
|
+
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t,r as n}from"./vendor-react-DwNgTV1j.js";import{S as r}from"./events-PfANjkHx.js";import"./public-events-CTdTIu5Q.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-
|
|
1
|
+
import{t as e}from"./storage-DtvZ_lEu.js";import{t}from"./web-preview-XrRFo42l.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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={zh:{"workflowsPage.packageTooLarge":`工作流压缩包不能超过 128 MiB。`,"workflowsPage.packageFailed":`工作流包处理失败,请检查文件是否完整及所需依赖是否齐全。`,"workflowsPage.workflowDuplicated":`工作流已复制`,"workflowsPage.workflowImported":`工作流已导入`,"workflowsPage.skillNode":`Skill`,"workflowsPage.callSkill":`调用 Skill`,"workflowsPage.conditionBranch":`条件分支`,"workflowsPage.parallelJoin":`并行汇合`,"workflowsPage.humanApproval":`人工审批`,"workflowsPage.waitingApproval":`等待审批`,"workflowsPage.interrupted":`已中断`,"workflowsPage.runHistory":`运行记录`,"workflowsPage.templates":`模板`,"workflowsPage.import":`导入`,"workflowsPage.neverRun":`尚未运行`,"workflowsPage.moreActionsFor":`{name} 的更多操作`,"workflowsPage.duplicateWorkflow":`复制工作流`,"workflowsPage.export":`导出`,"workflowsPage.countAttempts":`{count} 次尝试`,"workflowsPage.approve":`批准`,"workflowsPage.reject":`拒绝`,"workflowsPage.retryRun":`重试运行`,"workflowsPage.averageDuration":`平均耗时`,"workflowsPage.visibility":`可见范围`,"workflowsPage.private":`仅自己`,"workflowsPage.shared":`工作区共享`,"workflowsPage.tags":`标签`,"workflowsPage.revision":`当前修订`,"workflowsPage.inputParameters":`运行输入`,"workflowsPage.addInput":`添加输入`,"workflowsPage.newInput":`新参数`,"workflowsPage.parameterName":`变量名`,"workflowsPage.parameterType":`内容类型`,"workflowsPage.required":`必填`,"workflowsPage.chooseSkill":`选择已启用的 Skill`,"workflowsPage.mcpToolNames":`MCP 工具名称`,"workflowsPage.executionMode":`执行模式`,"workflowsPage.workspaceWrite":`自动审批`,"workflowsPage.fullAccess":`完全访问`,"workflowsPage.workspaceWriteHelp":`允许修改当前工作目录并自动批准常规命令;目录外访问仍受限制。`,"workflowsPage.fullAccessHelp":`允许访问本机文件和网络,并以当前系统用户权限运行 Shell。`,"workflowsPage.outputFormat":`输出格式`,"workflowsPage.dataPath":`数据路径`,"workflowsPage.operator":`比较方式`,"workflowsPage.comparisonValue":`比较值`,"workflowsPage.approvalMessage":`审批说明`,"workflowsPage.approvalTimeout":`审批超时(分钟)`,"workflowsPage.all":`全部`,"workflowsPage.custom":`自定义`,"workflowsPage.triggerNode":`触发器`,"workflowsPage.fileNode":`文件`,"workflowsPage.mcpNode":`MCP`,"workflowsPage.notificationNode":`通知`,"workflowsPage.notificationTitle":`通知标题`,"workflowsPage.notificationContent":`通知内容`,"workflowsPage.notificationChannels":`通知渠道`,"workflowsPage.notificationChannelEnabled":`渠道已启用`,"workflowsPage.notificationChannelNotEnabled":`该渠道尚未启用,请先前往渠道设置启用`,"workflowsPage.noExternalNotificationChannelsEnabled":`尚未启用飞书或微信渠道。系统通知仍可单独授权使用。`,"workflowsPage.openChannelSettings":`前往渠道`,"workflowsPage.openSystemNotificationSettings":`通知设置`,"workflowsPage.systemNotificationPermissionRequired":`系统通知权限未开启,请在浏览器或操作系统设置中允许 Pisper 发送通知。`,"workflowsPage.systemNotificationReady":`点击后将请求系统通知权限`,"workflowsPage.systemNotificationsEnabled":`系统通知已启用`,"workflowsPage.systemNotificationsUnsupported":`当前环境不支持系统通知。`,"workflowsPage.conditionNode":`判断`,"workflowsPage.parallelNode":`并行`,"workflowsPage.approvalNode":`审批`,"workflowsPage.manualTrigger":`手动触发`,"workflowsPage.readWriteFiles":`读写文件`,"workflowsPage.callMcp":`调用 MCP`,"workflowsPage.sendNotification":`发送通知`,"workflowsPage.runPrompt":`运行 Prompt`,"workflowsPage.browserNotification":`通知`,"workflowsPage.feishu":`飞书`,"workflowsPage.weChat":`微信`,"workflowsPage.qq":`QQ`,"workflowsPage.telegram":`Telegram`,"workflowsPage.codeReview":`代码审查`,"workflowsPage.codeReviewDescription":`读取 diff → 运行测试 → 生成 review`,"workflowsPage.prFix":`PR 修复`,"workflowsPage.prFixDescription":`定位失败 → 修改代码 → 回归测试`,"workflowsPage.research":`资料调研`,"workflowsPage.researchDescription":`搜索资料 → 提取引用 → 保存到记忆`,"workflowsPage.dailyWeeklyReport":`日报周报`,"workflowsPage.reportDescription":`汇总会话 → 生成摘要 → 渠道通知`,"workflowsPage.assetGeneration":`资产生成`,"workflowsPage.assetDescription":`生成图片 → 存入资产库 → 通知验收`,"workflowsPage.releasePreparation":`发布准备`,"workflowsPage.releaseDescription":`版本检查 → changelog → 创建发布单`,"workflowsPage.aConnectionIsCurrentlySelected":`当前选中的是连线。`,"workflowsPage.aTriggerCannotHaveAnUpstreamConnection":`触发器不能连接上游节点`,"workflowsPage.aWorkflowCannotContainCyclicConnections":`工作流不能包含循环连接`,"workflowsPage.completed":`已完成`,"workflowsPage.connectionCreated":`连线已建立`,"workflowsPage.connectionDeleted":`连线已删除`,"workflowsPage.defaultModel":`默认模型`,"workflowsPage.delete":`删除`,"workflowsPage.deleteConnection":`删除连线`,"workflowsPage.deleteNode":`删除节点`,"workflowsPage.deleteWorkflow":`删除工作流`,"workflowsPage.deleteWorkflowNameAndItsRunHistory":`删除工作流「{name}」及其运行记录?`,"workflowsPage.describeTheWorkTheAgentShouldCompleteInThisNode":`描述该节点需要 Agent 完成的工作`,"workflowsPage.description":`描述`,"workflowsPage.draft":`草稿`,"workflowsPage.drag":`拖拽`,"workflowsPage.dragFromANodeOutputToTheTargetInputToConnectThem":`从节点右侧端口拖到目标节点左侧端口建立连线`,"workflowsPage.dragNodesFromTheLeftToStartBuildingTheWorkflow":`选择画布中的节点来编辑,或点击「添加节点」开始组合工作流。`,"workflowsPage.duplicateNode":`复制节点`,"workflowsPage.edit":`编辑`,"workflowsPage.failed":`失败`,"workflowsPage.failureHandling":`失败处理`,"workflowsPage.inheritWorkflowDefaultModel":`继承工作流默认模型`,"workflowsPage.inputPort":`输入端口`,"workflowsPage.latestRun":`最近运行`,"workflowsPage.loadingWorkflowEditor":`正在加载工作流编辑器`,"workflowsPage.workflowEditorLoadFailed":`无法加载工作流编辑器。`,"workflowsPage.retryLoading":`重试`,"workflowsPage.loadingWorkflows":`正在加载工作流`,"workflowsPage.name":`名称`,"workflowsPage.nodeDeleted":`节点已删除`,"workflowsPage.nodeDuplicated":`节点已复制`,"workflowsPage.nodeLibrary":`节点库`,"workflowsPage.nodeModel":`节点模型`,"workflowsPage.nodeName":`节点名称`,"workflowsPage.noMatchingWorkflows":`还没有符合条件的工作流`,"workflowsPage.emptyHint":`点“新建工作流”开始,或从模板、文件导入。`,"workflowsPage.noRunHistory":`暂无运行记录`,"workflowsPage.outputPort":`输出端口`,"workflowsPage.preparing":`准备中`,"workflowsPage.presets":`预设`,"workflowsPage.pressDeleteOrBackspaceToRemoveThisConnection":`按 Delete 或 Backspace 也可以删除这条连线。`,"workflowsPage.published":`已发布`,"workflowsPage.retryCount":`重试次数`,"workflowsPage.run":`运行`,"workflowsPage.running":`正在运行`,"workflowsPage.runningNode":`正在执行:{node}`,"workflowsPage.runningNodeCompletedTotalCompleted":`正在执行:{node} · 已完成 {completed}/{total}`,"workflowsPage.selectedConnection":`选中连线`,"workflowsPage.skipThisNode":`跳过此节点`,"workflowsPage.stop":`停止`,"workflowsPage.stopImmediately":`立即停止`,"workflowsPage.stopped":`已停止`,"workflowsPage.stoppingWorkflow":`正在停止工作流`,"workflowsPage.task":`任务`,"workflowsPage.thisConnectionAlreadyExists":`这条连线已经存在`,"workflowsPage.timeoutMinutes":`超时(分钟)`,"workflowsPage.unknownNode":`未知节点`,"workflowsPage.useSystemDefault":`跟随系统默认`,"workflowsPage.workflowCompleted":`工作流已完成`,"workflowsPage.workflowDeleted":`工作流已删除`,"workflowsPage.workflowDraftSaved":`工作流草稿已保存`,"workflowsPage.workflowFailed":`工作流执行失败`,"workflowsPage.workflowNotFoundABlankEditorWasOpened":`工作流不存在,已打开空白编辑器。`,"workflowsPage.workflowPublished":`工作流已发布`,"workflowsPage.workflowRunning":`工作流运行中`,"workflowsPage.workflows":`工作流`,"workflowsPage.workflowSettings":`工作流设置`,"workflowsPage.workflowStarted":`工作流已开始运行`,"workflowsPage.workingDirectory":`工作目录`,"sprite.cancel":`取消`,"inputs.invalidName":`变量名只能使用英文字母、数字和下划线,不能以数字开头或使用保留名称。`,"inputs.duplicateName":`变量名「{name}」重复,请使用唯一名称。`,"inputs.requiredValue":`请填写「{name}」。`,"inputs.definitionHint":`每次试运行时填写图片、提示词等内容。这里可以调整运行时需要提供哪些内容。`,"inputs.deleteInput":`删除输入「{name}」`,"inputs.label":`显示名称`,"inputs.description":`填写说明`,"inputs.shortText":`短文本`,"inputs.longText":`长文本`,"inputs.number":`数字`,"inputs.boolean":`开关`,"inputs.defaultValue":`默认值(可选)`,"inputs.task":`本次任务`,"inputs.taskHint":`描述这次运行需要完成的目标。`,"inputs.materials":`参考材料`,"inputs.materialsHint":`填写文件路径、链接、代码片段或需要处理的内容。`,"inputs.constraints":`约束与输出要求`,"inputs.constraintsHint":`说明范围、格式、禁止操作及验收条件。`,"inputs.contextHint":`为这一次运行补充任务和背景。这里的内容不会改写工作流模板。`,"inputs.startFailed":`工作流未能启动,请检查输入或页面错误后重试。`,"inputs.runTitle":`运行「{name}」`,"inputs.runHint":`输入只用于本次运行。下次运行可以换一项任务,处理步骤和模板保持复用。`,"inputs.nodeRules":`节点处理规则`,"inputs.nodeRulesHint":`描述这个节点如何处理数据。具体任务在运行时填写,点击变量可插入到光标位置。`,"inputs.insertVariable":`插入「{name}」变量`,"inputs.invalidDefinition":`输入定义不完整或格式无效,请检查变量名、名称、类型及默认值。`,"inputs.valueTooLong":`「{name}」的内容过长,最多 16000 字符。`,"inputs.unknownInput":`存在未声明的输入「{name}」。`,"inputs.image":`图片`,"inputs.video":`视频`,"inputs.invalidValue":`「{name}」的值不符合所选类型。`,"inputs.chooseImage":`选择图片`,"inputs.chooseVideo":`选择视频`,"inputs.removeMedia":`移除素材`,"inputs.uploading":`正在上传素材…`,"inputs.uploadFailed":`素材上传失败,请重试。`,"inputs.previewFailed":`素材预览加载失败,运行仍可使用已上传的素材。`,"inputs.oneFile":`每个输入只选择一个素材文件。`,"inputs.mediaType":`请选择该输入支持的图片或视频格式。`,"inputs.imageLimit":`图片不得超过 8 MB。`,"inputs.videoLimit":`视频不得超过 64 MB。`,"imageNodes.input":`图片输入`,"imageNodes.background":`去背景`,"imageNodes.generate":`动作生成`,"imageNodes.frames":`拆分帧`,"imageNodes.transform":`帧处理`,"imageNodes.preview":`动画预览`,"imageNodes.export":`图集输出`,"imageNodes.inpaint":`区域修补`,"imageNodes.templateName":`游戏精灵图生成`,"imageNodes.templateDescription":`分方向生成动作,去背景、拆帧对齐并导出图集;每个节点均可调整。`,"imageNodes.reference":`角色参考图`,"imageNodes.referenceHint":`上传角色图片,生成时保留原图风格。`,"imageNodes.requestEstimate":`预计调用图像模型 {count} 次,每次生成一个方向的连续动作帧。可返回画布调整方向、动作节点和帧数。`,"imageNodes.inputField":`工作流图片输入`,"imageNodes.chooseInput":`请选择图片输入字段`,"imageNodes.inputHint":`图片通过工作流运行表单上传;在工作流设置中添加或修改输入字段。`,"imageNodes.imageModel":`图像模型`,"imageNodes.defaultImageModel":`使用已配置的默认图像模型`,"imageNodes.modelsFailed":`图像模型加载失败,请稍后重试。`,"imageNodes.action":`动作`,"imageNodes.prompt":`动作要求`,"imageNodes.frameCount":`每个方向的帧数`,"imageNodes.directions":`方向`,"imageNodes.generateHint":`本节点预计 {count} 次图像调用。每次只处理一个方向;保留参考图的风格、比例和配色。`,"imageNodes.method":`处理方式`,"imageNodes.colorKey":`色键抠图(无需下载)`,"imageNodes.localModel":`本地模型`,"imageNodes.modelHint":`算法按需下载,安装后可离线运行,不调用图像生成 API。`,"imageNodes.engineReady":`算法已安装`,"imageNodes.engineMissing":`缺少本地算法,请先下载依赖。`,"imageNodes.engineDownloading":`下载中 {percent}%`,"imageNodes.engineFailed":`算法下载失败,请检查网络后重试。`,"imageNodes.download":`下载算法`,"imageNodes.colors":`抠除颜色`,"imageNodes.colorsHint":`留空时按图片边缘自动选色。也可指定最多 8 种颜色。`,"imageNodes.colorAt":`抠除颜色 {index}`,"imageNodes.removeColor":`移除颜色`,"imageNodes.addColor":`添加颜色`,"imageNodes.tolerance":`颜色容差`,"imageNodes.softness":`软边`,"imageNodes.edgeConnected":`仅移除与边缘连通的背景`,"imageNodes.gridHint":`生成节点的网格信息优先;普通图片使用下方行列数。`,"imageNodes.columns":`列数`,"imageNodes.rows":`行数`,"imageNodes.duration":`帧时长(毫秒)`,"imageNodes.trim":`裁去透明边`,"imageNodes.align":`帧对齐`,"imageNodes.bottomCenter":`底部居中(脚底对齐)`,"imageNodes.center":`居中`,"imageNodes.noAlign":`不对齐`,"imageNodes.padding":`留白(像素)`,"imageNodes.frameEdits":`逐帧调整与顺序`,"imageNodes.frameNumber":`帧序号(从 1 开始)`,"imageNodes.frameEnabled":`保留此帧`,"imageNodes.rotation":`旋转(度)`,"imageNodes.scale":`缩放`,"imageNodes.opacity":`不透明度`,"imageNodes.orderHint":`添加的帧优先按列表顺序排列,其余帧跟在后面;关闭“保留此帧”可移除帧。`,"imageNodes.addToOrder":`将此帧加入排列`,"imageNodes.frameAt":`第 {index} 帧`,"imageNodes.earlier":`向前移动`,"imageNodes.later":`向后移动`,"imageNodes.resetOrder":`恢复此帧默认顺序`,"imageNodes.previewHint":`运行后在下方检查动画、方向、前后帧叠影;可连接多个动作分支。`,"imageNodes.filename":`输出名称`,"imageNodes.exportHint":`将所有输入帧烘焙为透明 PNG 图集,同时保留动作、方向与时长信息。`,"imageNodes.noResult":`运行此工作流后,这里会显示节点处理结果。`,"imageNodes.result":`节点结果`,"imageNodes.sourceRequired":`请先连接有效的图片输入节点。`,"imageNodes.decodeFailed":`图片无法解码,请检查格式和大小。`,"imageNodes.generationFailed":`部分图像未能生成。已生成的结果保留在下方,可调整提示词后重试。`,"imageNodes.tooLarge":`图片尺寸或帧数超过限制,请缩小输入或减少帧数。`,"imageNodes.cancelled":`处理已取消。`,"imageNodes.timeout":`处理超时,请减少本次处理的帧数后重试。`,"imageNodes.invalidOutput":`图像参数或输出无效,请检查节点配置。`,"imageNodes.previousFrame":`上一帧`,"imageNodes.nextFrame":`下一帧`,"imageNodes.play":`播放动画`,"imageNodes.pause":`暂停动画`,"imageNodes.onionSkin":`前后帧叠影(洋葱皮)`,"imageNodes.showInput":`对比处理前的输入`,"imageNodes.saveFrame":`保存此帧`,"imageNodes.downloadFailed":`下载失败,请重试。`,"imageNodes.regionHint":`仅修补指定的矩形区域。用于去除水印或小面积瑕疵;请先在预览中确认位置。`,"imageNodes.regionX":`左侧位置(%)`,"imageNodes.regionY":`顶部位置(%)`,"imageNodes.regionWidth":`区域宽度(%)`,"imageNodes.regionHeight":`区域高度(%)`,"imageNodes.idle":`待机呼吸`,"imageNodes.walk":`走路`,"imageNodes.run":`跑步`,"imageNodes.attack":`攻击`,"imageNodes.runNode":`仅运行此节点`,"imageNodes.runNodeHint":`复用上次已完成的上游结果,不重新运行其他节点。先完成一次上游运行即可使用。`,"imageNodes.sourceStale":`上游节点已修改或缺少已完成的结果,请先运行上游节点或整个工作流。`,"imageNodes.maxFrameSize":`最大帧边长(像素)`,"imageNodes.maxFrameSizeHint":`每帧最长边不超过 {size} 像素(默认 256)。超出时等比例缩小,小图不会放大。`,"workflowsPage.backToWorkflows":`返回工作流`,"workflowsPage.editorNavigation":`工作流导航`,"inputs.optional":`选填`,"inputs.emptyDefinition":`还没有运行输入。添加图片、文字或视频,让这个工作流可以重复使用。`,"inputs.editInput":`编辑输入`,"inputs.editNamedInput":`编辑输入:{name}`,"inputs.advancedSettings":`高级设置`,"inputs.removeInput":`移除此输入`,"editor.addNode":`添加节点`,"editor.searchNodes":`搜索节点`,"editor.flowNodes":`流程控制`,"editor.agentNodes":`任务与工具`,"editor.imageNodes":`图像与动画`,"editor.noMatchingNodes":`没有匹配的节点`,"editor.canvas":`工作流画布`,"editor.nodeProperties":`节点属性`,"editor.settingsDescription":`设置工作流名称、运行输入和默认行为。每次试运行时再填写具体内容。`,"editor.inspectorDescription":`编辑选中节点,查看输出和运行记录。`,"editor.manualTriggerHint":`点击「试运行」启动工作流,并填写本次需要的图片、提示词等内容。`,"editor.parallelHint":`等待所有上游分支完成后,再运行后续节点。`,"editor.executionSettings":`运行与错误处理`,"workflowsPage.lede":`把多步任务连成节点图,手动、定时或从渠道触发运行。`,"workflowsPage.loadFailed":`工作流读取失败`,"workflowsPage.newWorkflow":`新建工作流`,"workflowsPage.publishedCount":`{count} 个已发布`,"workflowsPage.noWorkflowsYet":`还没有工作流`,"workflowsPage.waitingApprovalCount":`{count} 个等你审批`,"workflowsPage.toggleRunDetails":`展开或收起 {name} 的运行明细`,"workflowsPage.templatesHint":`选一个模板,在编辑器里打开一份新的草稿。`,"workflowsPage.useTemplate":`用模板新建:{name}`,"workflowsPage.noMatchingTemplates":`没有符合搜索的模板`,"editor.saveDraft":`保存草稿`,"editor.testRun":`试运行`,"editor.publish":`发布`},en:{"workflowsPage.packageTooLarge":`Workflow packages must not exceed 128 MiB.`,"workflowsPage.packageFailed":`Could not process the workflow package. Check its files and required dependencies.`,"workflowsPage.workflowDuplicated":`Workflow duplicated`,"workflowsPage.workflowImported":`Workflow imported`,"workflowsPage.skillNode":`Skill`,"workflowsPage.callSkill":`Invoke Skill`,"workflowsPage.conditionBranch":`Condition branch`,"workflowsPage.parallelJoin":`Parallel join`,"workflowsPage.humanApproval":`Human approval`,"workflowsPage.waitingApproval":`Waiting for approval`,"workflowsPage.interrupted":`Interrupted`,"workflowsPage.runHistory":`Run history`,"workflowsPage.templates":`Templates`,"workflowsPage.import":`Import`,"workflowsPage.neverRun":`Never run`,"workflowsPage.moreActionsFor":`More actions for {name}`,"workflowsPage.duplicateWorkflow":`Duplicate workflow`,"workflowsPage.export":`Export`,"workflowsPage.countAttempts":`{count} attempts`,"workflowsPage.approve":`Approve`,"workflowsPage.reject":`Reject`,"workflowsPage.retryRun":`Retry run`,"workflowsPage.averageDuration":`Average duration`,"workflowsPage.visibility":`Visibility`,"workflowsPage.private":`Private`,"workflowsPage.shared":`Shared in workspace`,"workflowsPage.tags":`Tags`,"workflowsPage.revision":`Current revision`,"workflowsPage.inputParameters":`Run inputs`,"workflowsPage.addInput":`Add input`,"workflowsPage.newInput":`New input`,"workflowsPage.parameterName":`Variable name`,"workflowsPage.parameterType":`Content type`,"workflowsPage.required":`Required`,"workflowsPage.chooseSkill":`Choose an enabled Skill`,"workflowsPage.mcpToolNames":`MCP tool names`,"workflowsPage.executionMode":`Execution mode`,"workflowsPage.workspaceWrite":`Auto-approve`,"workflowsPage.fullAccess":`Full access`,"workflowsPage.workspaceWriteHelp":`Write to the current working directory and auto-approve routine commands; external access remains restricted.`,"workflowsPage.fullAccessHelp":`Access host files and the network, and run Shell as the current OS user.`,"workflowsPage.outputFormat":`Output format`,"workflowsPage.dataPath":`Data path`,"workflowsPage.operator":`Operator`,"workflowsPage.comparisonValue":`Comparison value`,"workflowsPage.approvalMessage":`Approval message`,"workflowsPage.approvalTimeout":`Approval timeout (minutes)`,"workflowsPage.all":`All`,"workflowsPage.custom":`Custom`,"workflowsPage.triggerNode":`Trigger`,"workflowsPage.fileNode":`File`,"workflowsPage.mcpNode":`MCP`,"workflowsPage.notificationNode":`Notification`,"workflowsPage.notificationTitle":`Notification title`,"workflowsPage.notificationContent":`Notification content`,"workflowsPage.notificationChannels":`Notification channels`,"workflowsPage.notificationChannelEnabled":`Channel enabled`,"workflowsPage.notificationChannelNotEnabled":`This channel is not enabled. Enable it in Channel settings first`,"workflowsPage.noExternalNotificationChannelsEnabled":`No Feishu or WeChat channel is enabled. System notifications can still be authorized separately.`,"workflowsPage.openChannelSettings":`Open Channels`,"workflowsPage.openSystemNotificationSettings":`Notification settings`,"workflowsPage.systemNotificationPermissionRequired":`System notification permission is off. Allow Pisper to send notifications in your browser or operating system settings.`,"workflowsPage.systemNotificationReady":`Click to request system notification permission`,"workflowsPage.systemNotificationsEnabled":`System notifications enabled`,"workflowsPage.systemNotificationsUnsupported":`System notifications are not supported in this environment.`,"workflowsPage.conditionNode":`Condition`,"workflowsPage.parallelNode":`Parallel`,"workflowsPage.approvalNode":`Approval`,"workflowsPage.manualTrigger":`Manual trigger`,"workflowsPage.readWriteFiles":`Read/write files`,"workflowsPage.callMcp":`Call MCP`,"workflowsPage.sendNotification":`Send notification`,"workflowsPage.runPrompt":`Run Prompt`,"workflowsPage.browserNotification":`Notification`,"workflowsPage.feishu":`Feishu`,"workflowsPage.weChat":`WeChat`,"workflowsPage.qq":`QQ`,"workflowsPage.telegram":`Telegram`,"workflowsPage.codeReview":`Code review`,"workflowsPage.codeReviewDescription":`Read diff → run tests → generate review`,"workflowsPage.prFix":`PR fix`,"workflowsPage.prFixDescription":`Locate failure → modify code → regression test`,"workflowsPage.research":`Research`,"workflowsPage.researchDescription":`Search sources → extract citations → save memory`,"workflowsPage.dailyWeeklyReport":`Daily/weekly report`,"workflowsPage.reportDescription":`Collect chats → generate summary → notify channel`,"workflowsPage.assetGeneration":`Asset generation`,"workflowsPage.assetDescription":`Generate image → save to assets → request review`,"workflowsPage.releasePreparation":`Release preparation`,"workflowsPage.releaseDescription":`Check version → changelog → create release checklist`,"workflowsPage.aConnectionIsCurrentlySelected":`A connection is currently selected.`,"workflowsPage.aTriggerCannotHaveAnUpstreamConnection":`A trigger cannot have an upstream connection`,"workflowsPage.aWorkflowCannotContainCyclicConnections":`A workflow cannot contain cyclic connections`,"workflowsPage.completed":`Completed`,"workflowsPage.connectionCreated":`Connection created`,"workflowsPage.connectionDeleted":`Connection deleted`,"workflowsPage.defaultModel":`Default model`,"workflowsPage.delete":`Delete`,"workflowsPage.deleteConnection":`Delete connection`,"workflowsPage.deleteNode":`Delete node`,"workflowsPage.deleteWorkflow":`Delete workflow`,"workflowsPage.deleteWorkflowNameAndItsRunHistory":`Delete workflow “{name}” and its run history?`,"workflowsPage.describeTheWorkTheAgentShouldCompleteInThisNode":`Describe the work the agent should complete in this node`,"workflowsPage.description":`Description`,"workflowsPage.draft":`Draft`,"workflowsPage.drag":`Drag`,"workflowsPage.dragFromANodeOutputToTheTargetInputToConnectThem":`Drag from a node output to the target input to connect them`,"workflowsPage.dragNodesFromTheLeftToStartBuildingTheWorkflow":`Select a node on the canvas to edit it, or choose Add node to build your workflow.`,"workflowsPage.duplicateNode":`Duplicate node`,"workflowsPage.edit":`Edit`,"workflowsPage.failed":`Failed`,"workflowsPage.failureHandling":`Failure handling`,"workflowsPage.inheritWorkflowDefaultModel":`Inherit workflow default model`,"workflowsPage.inputPort":`Input port`,"workflowsPage.latestRun":`Latest run`,"workflowsPage.loadingWorkflowEditor":`Loading workflow editor`,"workflowsPage.workflowEditorLoadFailed":`Could not load the workflow editor.`,"workflowsPage.retryLoading":`Retry`,"workflowsPage.loadingWorkflows":`Loading workflows`,"workflowsPage.name":`Name`,"workflowsPage.nodeDeleted":`Node deleted`,"workflowsPage.nodeDuplicated":`Node duplicated`,"workflowsPage.nodeLibrary":`Node library`,"workflowsPage.nodeModel":`Node model`,"workflowsPage.nodeName":`Node name`,"workflowsPage.noMatchingWorkflows":`No matching workflows`,"workflowsPage.emptyHint":`Start with “New workflow”, or import from a template or file.`,"workflowsPage.noRunHistory":`No run history`,"workflowsPage.outputPort":`Output port`,"workflowsPage.preparing":`Preparing`,"workflowsPage.presets":`Presets`,"workflowsPage.pressDeleteOrBackspaceToRemoveThisConnection":`Press Delete or Backspace to remove this connection.`,"workflowsPage.published":`Published`,"workflowsPage.retryCount":`Retry count`,"workflowsPage.run":`Run`,"workflowsPage.running":`Running`,"workflowsPage.runningNode":`Running: {node}`,"workflowsPage.runningNodeCompletedTotalCompleted":`Running: {node} · {completed}/{total} completed`,"workflowsPage.selectedConnection":`Selected connection`,"workflowsPage.skipThisNode":`Skip this node`,"workflowsPage.stop":`Stop`,"workflowsPage.stopImmediately":`Stop immediately`,"workflowsPage.stopped":`Stopped`,"workflowsPage.stoppingWorkflow":`Stopping workflow`,"workflowsPage.task":`Task`,"workflowsPage.thisConnectionAlreadyExists":`This connection already exists`,"workflowsPage.timeoutMinutes":`Timeout (minutes)`,"workflowsPage.unknownNode":`Unknown node`,"workflowsPage.useSystemDefault":`Use system default`,"workflowsPage.workflowCompleted":`Workflow completed`,"workflowsPage.workflowDeleted":`Workflow deleted`,"workflowsPage.workflowDraftSaved":`Workflow draft saved`,"workflowsPage.workflowFailed":`Workflow failed`,"workflowsPage.workflowNotFoundABlankEditorWasOpened":`Workflow not found. A blank editor was opened.`,"workflowsPage.workflowPublished":`Workflow published`,"workflowsPage.workflowRunning":`Workflow running`,"workflowsPage.workflows":`Workflows`,"workflowsPage.workflowSettings":`Workflow settings`,"workflowsPage.workflowStarted":`Workflow started`,"workflowsPage.workingDirectory":`Working directory`,"sprite.cancel":`Cancel`,"inputs.invalidName":`Variable names may contain letters, numbers and underscores, must not start with a number, and cannot use reserved names.`,"inputs.duplicateName":`Variable “{name}” is duplicated. Use a unique name.`,"inputs.requiredValue":`Enter a value for “{name}”.`,"inputs.definitionHint":`Provide images, prompts, and other content each time you run. Choose here what the workflow asks for.`,"inputs.deleteInput":`Delete input “{name}”`,"inputs.label":`Display label`,"inputs.description":`Input instructions`,"inputs.shortText":`Short text`,"inputs.longText":`Long text`,"inputs.number":`Number`,"inputs.boolean":`Boolean`,"inputs.defaultValue":`Default value (optional)`,"inputs.task":`Task for this run`,"inputs.taskHint":`Describe what this run should accomplish.`,"inputs.materials":`Reference materials`,"inputs.materialsHint":`Provide file paths, links, code snippets, or content to process.`,"inputs.constraints":`Constraints and output requirements`,"inputs.constraintsHint":`Specify scope, format, prohibited actions, and acceptance criteria.`,"inputs.contextHint":`Add task details and context for this run. This does not change the workflow template.`,"inputs.startFailed":`The workflow could not start. Check the inputs or page error and retry.`,"inputs.runTitle":`Run “{name}”`,"inputs.runHint":`Inputs apply only to this run. Use a different task next time while reusing the same processing steps and template.`,"inputs.nodeRules":`Node processing rules`,"inputs.nodeRulesHint":`Describe how this node processes data. Provide the actual task at run time; click a variable to insert it at the cursor.`,"inputs.insertVariable":`Insert “{name}” variable`,"inputs.invalidDefinition":`Input definitions are incomplete or invalid. Check variable names, labels, types, and defaults.`,"inputs.valueTooLong":`“{name}” is too long. Use at most 16,000 characters.`,"inputs.unknownInput":`Input “{name}” is not declared by this workflow.`,"inputs.image":`Image`,"inputs.video":`Video`,"inputs.invalidValue":`The value for “{name}” does not match its type.`,"inputs.chooseImage":`Choose image`,"inputs.chooseVideo":`Choose video`,"inputs.removeMedia":`Remove media`,"inputs.uploading":`Uploading media…`,"inputs.uploadFailed":`Media upload failed. Please retry.`,"inputs.previewFailed":`The preview could not load. The uploaded media can still be used for this run.`,"inputs.oneFile":`Choose one media file per input.`,"inputs.mediaType":`Choose an image or video format supported by this input.`,"inputs.imageLimit":`Images must be no larger than 8 MB.`,"inputs.videoLimit":`Videos must be no larger than 64 MB.`,"imageNodes.input":`Image input`,"imageNodes.background":`Remove background`,"imageNodes.generate":`Generate action`,"imageNodes.frames":`Split frames`,"imageNodes.transform":`Process frames`,"imageNodes.preview":`Animation preview`,"imageNodes.export":`Export atlas`,"imageNodes.inpaint":`Region inpainting`,"imageNodes.templateName":`Game sprite generation`,"imageNodes.templateDescription":`Generate actions by direction, remove backgrounds, align frames and export an atlas. Every node is editable.`,"imageNodes.reference":`Character reference`,"imageNodes.referenceHint":`Upload a character image; generation preserves its original style.`,"imageNodes.requestEstimate":`Estimated image model calls: {count}. Each call generates one direction of an action. Adjust directions, action nodes and frame counts on the canvas.`,"imageNodes.inputField":`Workflow image input`,"imageNodes.chooseInput":`Choose an image input`,"imageNodes.inputHint":`Upload the image in the run form. Add or edit input fields in workflow settings.`,"imageNodes.imageModel":`Image model`,"imageNodes.defaultImageModel":`Use configured default image model`,"imageNodes.modelsFailed":`Could not load image models. Try again later.`,"imageNodes.action":`Action`,"imageNodes.prompt":`Action instructions`,"imageNodes.frameCount":`Frames per direction`,"imageNodes.directions":`Directions`,"imageNodes.generateHint":`This node makes approximately {count} image calls, one direction per call, preserving the reference style, proportions and palette.`,"imageNodes.method":`Method`,"imageNodes.colorKey":`Color key (no download)`,"imageNodes.localModel":`Local model`,"imageNodes.modelHint":`Download the algorithm on demand. Once installed it works offline without a generative image API.`,"imageNodes.engineReady":`Algorithm installed`,"imageNodes.engineMissing":`Local algorithm missing. Download its dependencies first.`,"imageNodes.engineDownloading":`Downloading {percent}%`,"imageNodes.engineFailed":`Algorithm download failed. Check the connection and retry.`,"imageNodes.download":`Download algorithm`,"imageNodes.colors":`Colors to remove`,"imageNodes.colorsHint":`Leave empty to detect colors at the image edges, or choose up to 8 colors.`,"imageNodes.colorAt":`Color {index}`,"imageNodes.removeColor":`Remove color`,"imageNodes.addColor":`Add color`,"imageNodes.tolerance":`Color tolerance`,"imageNodes.softness":`Edge softness`,"imageNodes.edgeConnected":`Only remove background connected to edges`,"imageNodes.gridHint":`Generated grid metadata takes precedence. Other images use the grid below.`,"imageNodes.columns":`Columns`,"imageNodes.rows":`Rows`,"imageNodes.duration":`Frame duration (ms)`,"imageNodes.trim":`Trim transparent edges`,"imageNodes.align":`Frame alignment`,"imageNodes.bottomCenter":`Bottom center (foot baseline)`,"imageNodes.center":`Center`,"imageNodes.noAlign":`No alignment`,"imageNodes.padding":`Padding (pixels)`,"imageNodes.frameEdits":`Per-frame adjustments and order`,"imageNodes.frameNumber":`Frame number (starting at 1)`,"imageNodes.frameEnabled":`Keep this frame`,"imageNodes.rotation":`Rotation (degrees)`,"imageNodes.scale":`Scale`,"imageNodes.opacity":`Opacity`,"imageNodes.orderHint":`Listed frames come first in the chosen order; remaining frames follow. Turn off “Keep this frame” to remove one.`,"imageNodes.addToOrder":`Add this frame to order`,"imageNodes.frameAt":`Frame {index}`,"imageNodes.earlier":`Move earlier`,"imageNodes.later":`Move later`,"imageNodes.resetOrder":`Reset this frame order`,"imageNodes.previewHint":`After running, inspect the animation, direction and onion skins below. Multiple action branches can connect here.`,"imageNodes.filename":`Output name`,"imageNodes.exportHint":`Bake all input frames into a transparent PNG atlas with action, direction and timing metadata.`,"imageNodes.noResult":`Run the workflow to see this node’s results.`,"imageNodes.result":`Node result`,"imageNodes.sourceRequired":`Connect a valid image input node first.`,"imageNodes.decodeFailed":`Could not decode the image. Check its format and size.`,"imageNodes.generationFailed":`Some images could not be generated. Completed results are kept below. Adjust the prompt and retry.`,"imageNodes.tooLarge":`Image dimensions or frame count exceed the limit. Reduce the input size or number of frames.`,"imageNodes.cancelled":`Processing cancelled.`,"imageNodes.timeout":`Processing timed out. Reduce the number of frames and retry.`,"imageNodes.invalidOutput":`Invalid image settings or output. Check the node configuration.`,"imageNodes.previousFrame":`Previous frame`,"imageNodes.nextFrame":`Next frame`,"imageNodes.play":`Play animation`,"imageNodes.pause":`Pause animation`,"imageNodes.onionSkin":`Onion skins (adjacent frames)`,"imageNodes.showInput":`Compare input before processing`,"imageNodes.saveFrame":`Save frame`,"imageNodes.downloadFailed":`Download failed. Please retry.`,"imageNodes.regionHint":`Inpaint only the chosen rectangle, for watermarks or small blemishes. Check its position in the preview first.`,"imageNodes.regionX":`Left (%)`,"imageNodes.regionY":`Top (%)`,"imageNodes.regionWidth":`Width (%)`,"imageNodes.regionHeight":`Height (%)`,"imageNodes.idle":`Breathing idle`,"imageNodes.walk":`Walk`,"imageNodes.run":`Run`,"imageNodes.attack":`Attack`,"imageNodes.runNode":`Run only this node`,"imageNodes.runNodeHint":`Reuse completed upstream outputs without rerunning other nodes. Complete an upstream run first.`,"imageNodes.sourceStale":`Upstream settings changed or completed outputs are missing. Run the upstream nodes or the full workflow first.`,"imageNodes.maxFrameSize":`Maximum frame edge (pixels)`,"imageNodes.maxFrameSizeHint":`Keep each frame’s longest edge within {size} pixels (default: 256). Larger frames are scaled down proportionally; smaller frames are not enlarged.`,"workflowsPage.backToWorkflows":`Back to workflows`,"workflowsPage.editorNavigation":`Workflow navigation`,"inputs.optional":`Optional`,"inputs.emptyDefinition":`No run inputs yet. Add images, text, or video to reuse this workflow with new content.`,"inputs.editInput":`Edit input`,"inputs.editNamedInput":`Edit input: {name}`,"inputs.advancedSettings":`Advanced settings`,"inputs.removeInput":`Remove this input`,"editor.addNode":`Add node`,"editor.searchNodes":`Search nodes`,"editor.flowNodes":`Flow control`,"editor.agentNodes":`Tasks and tools`,"editor.imageNodes":`Images and animation`,"editor.noMatchingNodes":`No matching nodes`,"editor.canvas":`Workflow canvas`,"editor.nodeProperties":`Node properties`,"editor.settingsDescription":`Set the workflow name, run inputs, and defaults. Provide the actual content each time you run.`,"editor.inspectorDescription":`Edit the selected node and inspect its output and run history.`,"editor.manualTriggerHint":`Choose Test run to start the workflow and provide images, prompts, and other inputs for this run.`,"editor.parallelHint":`Wait for every upstream branch to finish before running the next nodes.`,"editor.executionSettings":`Execution and error handling`,"workflowsPage.lede":`Chain multi-step work into a node graph and run it manually, on a schedule or from a channel.`,"workflowsPage.loadFailed":`Could not load workflows`,"workflowsPage.newWorkflow":`New workflow`,"workflowsPage.publishedCount":`{count} published`,"workflowsPage.noWorkflowsYet":`No workflows yet`,"workflowsPage.waitingApprovalCount":`{count} waiting for your approval`,"workflowsPage.toggleRunDetails":`Show or hide run details for {name}`,"workflowsPage.templatesHint":`Pick a template to open a new draft in the editor.`,"workflowsPage.useTemplate":`New from template: {name}`,"workflowsPage.noMatchingTemplates":`No templates match your search`,"editor.saveDraft":`Save draft`,"editor.testRun":`Test run`,"editor.publish":`Publish`}};export{e as workflowMessages};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./index-
|
|
1
|
+
import{t as e}from"./index-D_zLThH_.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-
|
|
58
|
+
<script type="module" crossorigin src="/assets/index-D_zLThH_.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-
|
|
62
|
+
<link rel="stylesheet" crossorigin href="/assets/index-l96Dl6z6.css">
|
|
63
63
|
</head>
|
|
64
64
|
<body>
|
|
65
65
|
<div id="root"></div>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t,r as n}from"./vendor-react-DwNgTV1j.js";import{t as r}from"./use-i18n-DCxQRXLH.js";import{t as i}from"./api-BmSvZCuH.js";import{t as a}from"./createLucideIcon-Cd-3GVxJ.js";import{t as o}from"./bot-B3TaBp_T.js";import{t as s}from"./external-link-CEQqPcqc.js";import{t as c}from"./folder-open-FIShC5Qk.js";import{n as l,t as u}from"./send-QxBfLFo-.js";import{t as d}from"./message-square-SKjZyY3v.js";import{t as f}from"./plus-fQbSqB1n.js";import{t as p}from"./refresh-cw-TbWxTY4K.js";import{t as m}from"./shield-check-Gvek4RJ7.js";import{t as h}from"./trash-2-CNrPOoPR.js";import{t as g}from"./triangle-alert-CE1q54ci.js";import{t as ee}from"./x-07u4-129.js";import"./brand-DIEc3fK8.js";import{t as _}from"./more-pages-D_PnxLN0.js";import{t as v}from"./utils-C8uzG5AZ.js";import{n as y,t as b}from"./button-CCcCN8tE.js";import{s as x}from"./shortcuts-DnykOp5e.js";import{a as S}from"./format-DMJQzoZ7.js";import{t as C}from"./StatusGlyph-1KgitlUg.js";import{t as w}from"./input-CPw-zkYh.js";import{i as T,n as E,t as D}from"./input-group-h8z63MzW.js";import{n as O,t as k}from"./PageState-Cz6vFMXv.js";import{a as A,i as j,n as te,o as ne,r as M,s as re,t as ie}from"./FeaturePage-DGauTCbU.js";import{n as N}from"./field-DoLEb0np.js";import{t as P}from"./AppSelect-BD6RAaJ5.js";import{a as F,n as I,s as L}from"./app-primitives-Drz_SjnR.js";var R=a(`unplug`,[[`path`,{d:`m19 5 3-3`,key:`yk6iyv`}],[`path`,{d:`m2 22 3-3`,key:`19mgm9`}],[`path`,{d:`M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z`,key:`goz73y`}],[`path`,{d:`M7.5 13.5 10 11`,key:`7xgeeb`}],[`path`,{d:`M10.5 16.5 13 14`,key:`10btkg`}],[`path`,{d:`m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z`,key:`1snsnr`}]]),z=e(t(),1),B=n(),V=Object.entries({feishu:{Icon:o},weixin:{Icon:l},qq:{Icon:l},telegram:{Icon:u}}),H=`flex min-h-[34px] min-w-0 items-center justify-between gap-4 border-t border-stroke-soft py-1.5 text-sm first:border-t-0 [&>dt]:shrink-0 [&>dt]:text-content-muted [&>dd]:min-w-0 [&>dd]:truncate [&>dd]:text-right [&>dd]:text-content`,U=`grid min-w-0 gap-1.5 border-t border-stroke-soft py-3 @min-[600px]/page:grid-cols-[168px_minmax(0,1fr)] @min-[600px]/page:items-center @min-[600px]/page:gap-4`,W=`text-sm font-medium text-content`,G=`modal-backdrop fixed inset-0 z-[70] grid place-items-center overflow-y-auto overscroll-contain bg-[var(--modal-overlay)] p-5 max-[650px]:p-2`,K=`modal max-h-[calc(100dvh_-_40px)] w-[min(470px,100%)] overflow-y-auto overscroll-contain rounded-dialog bg-popover p-5 shadow-float max-[650px]:max-h-[calc(100dvh_-_16px)]`,q=`border border-stroke-soft bg-surface-subtle text-content-secondary [&_strong]:text-content [&>svg]:mt-0.5 [&>svg]:shrink-0`;function J(e,t){return t(e===`feishu`?`channels:channelsPage.feishu`:e===`weixin`?`channels:channelsPage.weChat`:e===`qq`?`channels:channelsPage.qq`:`channels:channelsPage.telegram`)}function ae(e,t){return t(e===`feishu`?`channels:channelsPage.feishuAppBot`:e===`weixin`?`channels:channelsPage.weChat`:e===`qq`?`channels:channelsPage.qqBot`:`channels:channelsPage.telegramBot`)}function oe(e,t){return t(e===`feishu`?`channels:channelsPage.webSocketPersistentConnection`:e===`weixin`?`channels:channelsPage.tencentILinkPersistentConnection`:e===`qq`?`channels:channelsPage.qqPersistentConnection`:`channels:channelsPage.telegramPersistentConnection`)}function Y(e,t){return t(e===`feishu`?`channels:channelsPage.feishuCapabilities`:e===`weixin`?`channels:channelsPage.weChatCapabilities`:e===`qq`?`channels:channelsPage.qqCapabilities`:`channels:channelsPage.telegramCapabilities`)}function X(e){return e===`telegram`}function se(e,t,n){return t?n(`channels:channelsPage.reconnectName`,{name:J(e,n)}):X(e)?n(`channels:channelsPage.configureName`,{name:J(e,n)}):n(`channels:channelsPage.connectNameByQRCode`,{name:J(e,n)})}function Z(e,t){return t(e===`connecting`?`channels:channelsPage.connecting`:e===`connected`?`channels:channelsPage.online`:e===`reconnecting`?`channels:channelsPage.reconnecting`:e===`failed`?`channels:channelsPage.connectionFailed`:`channels:channelsPage.notConnected`)}function ce(e,t){return t(e===`starting`?`channels:channelsPage.requestingLoginQrCode`:e===`waiting`?`channels:channelsPage.scanAndConfirmConnection`:e===`scanned`?`channels:channelsPage.scannedWaitingForConfirmation`:e===`verification_required`?`channels:channelsPage.enterPairingCode`:e===`authorizing`?`channels:channelsPage.confirmingAuthorization`:e===`connecting`?`channels:channelsPage.authorizationSucceededConnecting`:e===`completed`?`channels:channelsPage.channelConnected`:e===`failed`?`channels:channelsPage.connectionFailed`:`channels:channelsPage.cancelled`)}function le(e,t=`zh-CN`){let n=Math.max(0,Math.ceil((new Date(e).getTime()-Date.now())/1e3));return t===`en-US`?n>=60?`in ${Math.ceil(n/60)} min`:`in ${n} sec`:n>=60?`${Math.ceil(n/60)} 分钟后`:`${n} 秒后`}function Q(e){return e instanceof Error?e.message:String(e)}function ue({notify:e,onBack:t,requestConfirm:n}){let{t:a,language:o}=r(),[s,c]=(0,z.useState)({providers:[],connections:{feishu:null,weixin:null,qq:null,telegram:null},scopes:[],models:[]}),[m,g]=(0,z.useState)(!0),[ee,_]=(0,z.useState)(!1),[v,y]=(0,z.useState)(``),[x,C]=(0,z.useState)(``),[w,T]=(0,z.useState)(``),[E,D]=(0,z.useState)(null),[A,M]=(0,z.useState)(``),[re,N]=(0,z.useState)(!1),[P,F]=(0,z.useState)(``),I=(0,z.useCallback)(async()=>{try{y(``);let e=await i(`/api/channels`);c(e),_(!0),x&&F(e.connections?.[x]?.defaultCwd||``)}catch(e){y(Q(e))}finally{g(!1)}},[x]);(0,z.useEffect)(()=>{I()},[I]),(0,z.useEffect)(()=>{if(!E?.id||[`completed`,`failed`,`cancelled`].includes(E.status))return;let t=E.id,n=window.setInterval(async()=>{try{let r=E.platform,o=await i(`/api/channels/${r}/onboarding/${encodeURIComponent(t)}`);D({...o,platform:r}),o.status===`completed`&&(window.clearInterval(n),e(a(`channels:channelsPage.nameTwoWayConnectionEstablished`,{name:J(r,a)})),await I(),window.setTimeout(()=>D(null),900))}catch(e){D(t=>t&&{...t,status:`failed`,error:Q(e)})}},1500);return()=>window.clearInterval(n)},[E?.id,E?.platform,E?.status,I,e,a]);let L=async e=>{if(!(s.connections?.[e]&&!await n({title:a(`channels:channelsPage.reconnectName`,{name:J(e,a)}),message:X(e)?a(`channels:channelsPage.configuringAgainWillReplaceTheCurrentNameConnectionContinue`,{name:J(e,a)}):a(`channels:channelsPage.scanningAgainWillReplaceTheCurrentNameConnectionContinue`,{name:J(e,a)}),confirmLabel:X(e)?a(`channels:channelsPage.continueConfiguration`):a(`channels:channelsPage.continueScanning`),tone:`primary`}))){M(e),D({platform:e,status:`starting`});try{let t=await i(`/api/channels/${e}/onboarding`,{method:`POST`,body:`{}`});`mode`in t&&t.mode===`manual`?D({...t,platform:e,status:`starting`,manual:!0}):D({...t,platform:e})}catch(t){D({platform:e,status:`failed`,error:Q(t)})}finally{M(``)}}},R=async()=>{E?.id&&![`completed`,`failed`,`cancelled`].includes(E.status)&&await i(`/api/channels/${E.platform}/onboarding/${encodeURIComponent(E.id)}`,{method:`DELETE`}).catch(()=>{}),D(null)},H=async(t,n,r)=>{N(!0);try{let a=await i(`/api/channels/${t}`,{method:`PATCH`,body:JSON.stringify(n)});c(a),F(a.connections?.[t]?.defaultCwd||``),e(r)}catch(t){e(Q(t),`error`)}finally{N(!1)}},U=async t=>{N(!0);try{c(await i(`/api/channels/${t}/reconnect`,{method:`POST`,body:`{}`})),e(a(`channels:channelsPage.nameReconnected`,{name:J(t,a)}))}catch(t){e(Q(t),`error`),I()}finally{N(!1)}},W=async t=>{if(await n({title:a(`channels:channelsPage.disconnectName`,{name:J(t,a)}),message:a(`channels:channelsPage.localCredentialsAndChatMappingsWillBeDeleted`),confirmLabel:a(`channels:channelsPage.disconnect`)}))try{await i(`/api/channels/${t}`,{method:`DELETE`}),await I(),e(a(`channels:channelsPage.nameDisconnected`,{name:J(t,a)}))}catch(t){e(Q(t),`error`)}},G=async t=>{if(await n({title:a(`channels:channelsPage.resetChannelChat`),message:a(`channels:channelsPage.resetTheAppChatLinkedToScope`,{scope:t.title,app:`Pisper`}),confirmLabel:a(`channels:channelsPage.reset`)}))try{await i(`/api/channels/scopes/${encodeURIComponent(t.key)}`,{method:`DELETE`}),await I(),e(a(`channels:channelsPage.channelChatReset`))}catch(t){e(Q(t),`error`)}};if(m)return(0,B.jsx)($,{onBack:t,query:w,onQueryChange:T,children:(0,B.jsx)(O,{kind:`loading`,title:a(`channels:channelsPage.loadingChannels`)})});if(v&&!ee)return(0,B.jsx)($,{onBack:t,query:w,onQueryChange:T,children:(0,B.jsx)(O,{kind:`error`,title:a(`channels:channelsPage.loadFailed`),description:v,action:(0,B.jsx)(b,{variant:`secondary`,className:`max-[650px]:h-11`,onClick:()=>{g(!0),I()},children:a(`common:pageTemplate.retry`)})})});let K=w.trim().toLocaleLowerCase(),q=V.filter(([e])=>`${ae(e,a)} ${J(e,a)}`.toLocaleLowerCase().includes(K)),Y=K?s.scopes.filter(e=>`${e.title} ${e.lastMessage||``} ${J(e.platform,a)}`.toLocaleLowerCase().includes(K)):s.scopes,Z=V.filter(([e])=>de(s.connections?.[e])===`disconnected`).length;return(0,B.jsxs)($,{onBack:t,query:w,onQueryChange:T,children:[v&&(0,B.jsx)(ie,{children:v}),(0,B.jsx)(ne,{title:a(`channels:channelsPage.platforms`),count:V.length,meta:Z?(0,B.jsx)(`span`,{"data-channels-disconnected":!0,className:`font-medium text-st-attn`,children:a(`channels:channelsPage.disconnectedCount`,{count:Z})}):void 0,children:q.length?(0,B.jsx)(te,{children:q.map(([e,t])=>{let n=s.connections?.[e],r=x===e,i=t.Icon;return(0,B.jsx)(j,{"data-channel-platform":e,className:`channel-platform-card`,icon:(0,B.jsx)(i,{}),name:ae(e,a),description:oe(e,a),status:(0,B.jsx)(fe,{connection:n}),actions:(0,B.jsxs)(b,{variant:`secondary`,size:`sm`,className:`max-[650px]:min-w-11`,loading:A===e,disabled:A===e,title:se(e,!!n,a),onClick:()=>void L(e),children:[n?(0,B.jsx)(p,{}):(0,B.jsx)(f,{}),(0,B.jsx)(`span`,{className:`max-[650px]:sr-only`,children:se(e,!!n,a)})]}),expanded:r,onExpandedChange:t=>{C(t?e:``),t&&F(n?.defaultCwd||``)},toggleLabel:a(`channels:channelsPage.togglePlatformDetails`,{name:J(e,a)}),detail:r?(0,B.jsx)(pe,{platform:e,connection:n,models:s.models,cwd:P,saving:re,onCwdChange:F,onUpdate:H,onReconnect:U,onRemove:W}):null},e)})}):(0,B.jsx)(k,{compact:!0,title:a(`channels:channelsPage.noMatchingChannels`)})}),(0,B.jsx)(ne,{title:a(`channels:channelsPage.channelChats`),count:s.scopes.length,description:a(`channels:channelsPage.onceConnectedMessagesFromSupportedChannelsWillArriveHereInPisper`),children:Y.length?(0,B.jsx)(te,{children:Y.map(e=>(0,B.jsx)(j,{"data-channel-scope":e.key,className:`route-row`,icon:e.platform===`feishu`?(0,B.jsx)(d,{}):e.platform===`telegram`?(0,B.jsx)(u,{}):(0,B.jsx)(l,{}),name:e.title,nameMeta:J(e.platform,a),description:e.lastMessage||a(`channels:channelsPage.noMessages`),meta:(0,B.jsxs)(`span`,{className:`truncate font-mono`,children:[e.model||a(`channels:channelsPage.defaultModel`),` · `,e.cwd]}),status:S(e.updatedAt,o),actions:(0,B.jsx)(b,{variant:`ghost`,size:`icon-sm`,className:`text-content-muted hover:bg-danger-soft hover:text-danger max-[650px]:size-11`,title:a(`channels:channelsPage.resetChat`),"aria-label":`${a(`channels:channelsPage.resetChat`)}: ${e.title}`,onClick:()=>void G(e),children:(0,B.jsx)(h,{})})},e.key))}):(0,B.jsx)(k,{title:s.scopes.length?a(`channels:channelsPage.noMatchingChats`):a(`channels:channelsPage.waitingForTheFirstReplyFromAfar`)})}),E&&(0,B.jsx)(me,{job:E,onClose:R,onRetry:()=>L(E.platform),onSubmitCredentials:async t=>{try{let n=await i(`/api/channels/${E.platform}/onboarding`,{method:`POST`,body:JSON.stringify(t)});`connections`in n?(c(n),D(null),e(a(`channels:channelsPage.nameTwoWayConnectionEstablished`,{name:J(E.platform,a)})),await I()):`mode`in n&&n.mode===`manual`?D({...n,platform:E.platform,status:`starting`,manual:!0}):D({...n,platform:E.platform,manual:n.mode===`manual`})}catch(e){D(t=>t&&{...t,status:`failed`,error:Q(e)})}},notify:e})]})}function $({onBack:e,query:t,onQueryChange:n,children:i}){let{t:a}=r(),o=x(`focusSearch`),s=a(`navigation:navigation.channels`);return(0,B.jsx)(M,{title:s,description:a(`channels:channelsPage.lede`),back:e&&{label:a(`navigation:sidebar.features`),ariaLabel:a(`navigation:shell.backToFeaturesLabel`),onBack:e},toolbar:(0,B.jsx)(re,{search:(0,B.jsx)(A,{id:_,value:t,onValueChange:n,placeholder:a(`channels:channelsPage.searchPlaceholder`),shortcut:o,clearLabel:a(`navigation:more.clearSearch`)})}),children:i})}function de(e){return e?e.enabled===!1?`paused`:e.status===`connected`?`live`:e.status===`connecting`||e.status===`reconnecting`?`busy`:`disconnected`:`none`}function fe({connection:e}){let{t}=r(),n=de(e),i=n===`none`?t(`channels:channelsPage.notConnected`):n===`paused`?t(`channels:channelsPage.paused`):n===`disconnected`?e?.status===`failed`?t(`channels:channelsPage.connectionFailed`):t(`channels:channelsPage.disconnected`):Z(e?.status||`idle`,t);return(0,B.jsxs)(`span`,{"data-channel-state":n,className:v(`inline-flex min-w-0 items-center gap-1.5 whitespace-nowrap`,n===`disconnected`?`font-medium text-st-attn`:`text-content-secondary`),children:[n===`disconnected`?(0,B.jsx)(C,{status:`attention`,className:`size-3.5`}):n===`busy`?(0,B.jsx)(C,{status:`run`,className:`size-3.5`}):n===`live`?(0,B.jsx)(C,{status:`done`,className:`size-3.5`}):null,i]})}function pe({platform:e,connection:t,models:n,cwd:i,saving:a,onCwdChange:o,onUpdate:s,onReconnect:l,onRemove:u}){let{t:d,language:f}=r();return(0,B.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-3`,children:[(0,B.jsxs)(`dl`,{className:`rounded-[var(--r-md)] border border-stroke px-3 py-0.5`,children:[(0,B.jsxs)(`div`,{className:H,children:[(0,B.jsx)(`dt`,{children:d(`channels:channelsPage.twoWayCapability`)}),(0,B.jsx)(`dd`,{children:Y(e,d)})]}),(0,B.jsxs)(`div`,{className:H,children:[(0,B.jsx)(`dt`,{children:d(`channels:channelsPage.replyModel`)}),(0,B.jsx)(`dd`,{className:t?.replyModel?`font-mono`:void 0,children:t?.replyModel?`${t.replyModel.provider}/${t.replyModel.model}`:d(`channels:channelsPage.useApplicationDefaultModel`)})]})]}),t?(0,B.jsxs)(`section`,{className:`test-panel min-w-0`,"aria-label":d(`channels:channelsPage.nameSettings`,{name:J(e,d)}),children:[(0,B.jsxs)(`div`,{className:v(`channel-live-status flex min-w-0 items-center gap-2.5 py-2`,t.status),children:[(0,B.jsx)(fe,{connection:t}),(0,B.jsx)(`small`,{className:v(`min-w-0 truncate text-xs tabular-nums`,t.lastError?`text-content-secondary`:`text-content-muted`),children:t.lastError||(t.status===`connected`?d(`channels:channelsPage.connectedTime`,{time:S(t.connectedAt,f)}):d(`channels:channelsPage.establishingPersistentConnection`))})]}),(0,B.jsxs)(`div`,{className:`modal-toggle-row flex min-w-0 items-center justify-between gap-4 border-t border-stroke-soft py-3`,children:[(0,B.jsxs)(`span`,{className:`flex min-w-0 flex-col gap-0.5`,children:[(0,B.jsx)(`strong`,{className:`text-sm font-medium text-content`,children:d(`channels:channelsPage.enableThisChannel`)}),(0,B.jsx)(`small`,{className:`text-xs text-content-muted`,children:d(`channels:channelsPage.turnOffToDisconnectWhileKeepingSignInCredentials`)})]}),(0,B.jsx)(L,{value:t.enabled,disabled:a,ariaLabel:d(`channels:channelsPage.enableThisChannel`),onChange:t=>s(e,{enabled:t},d(t?`channels:channelsPage.channelEnabled`:`channels:channelsPage.channelPaused`))})]}),(0,B.jsxs)(`label`,{className:U,children:[(0,B.jsx)(`span`,{className:W,children:d(`channels:channelsPage.replyModel`)}),(0,B.jsxs)(P,{value:t.replyModel?`${t.replyModel.provider}/${t.replyModel.model}`:``,onChange:t=>{let[n,...r]=t.target.value.split(`/`);s(e,{replyModel:t.target.value?{provider:n,model:r.join(`/`)}:null},d(`channels:channelsPage.channelReplyModelUpdated`))},children:[(0,B.jsx)(`option`,{value:``,children:d(`channels:channelsPage.useApplicationDefaultModel`)}),n.map(e=>(0,B.jsx)(`option`,{value:`${e.provider}/${e.model}`,children:e.label},`${e.provider}/${e.model}`))]})]}),(0,B.jsxs)(`label`,{className:U,children:[(0,B.jsx)(`span`,{className:W,children:d(`channels:channelsPage.approvalMode`)}),(0,B.jsxs)(P,{value:t.executionMode,onChange:t=>s(e,{executionMode:t.target.value},d(`channels:channelsPage.approvalModeUpdated`)),children:[(0,B.jsx)(`option`,{value:`approval-required`,children:d(`channels:channelsPage.approvalRequired`)}),(0,B.jsx)(`option`,{value:`workspace-write`,children:d(`channels:channelsPage.workspaceWrite`)}),(0,B.jsx)(`option`,{value:`full-access`,children:d(`channels:channelsPage.fullAccess`)})]})]}),(0,B.jsxs)(`label`,{className:U,children:[(0,B.jsx)(`span`,{className:W,children:d(`channels:channelsPage.executionMode`)}),(0,B.jsxs)(P,{value:t.runMode,onChange:t=>s(e,{runMode:t.target.value},d(`channels:channelsPage.executionModeUpdated`)),children:[(0,B.jsx)(`option`,{value:`plan`,children:d(`channels:channelsPage.planMode`)}),(0,B.jsx)(`option`,{value:`goal`,children:d(`channels:channelsPage.goalMode`)}),(0,B.jsx)(`option`,{value:`team`,children:d(`channels:channelsPage.teamMode`)})]})]}),(0,B.jsxs)(`label`,{className:U,children:[(0,B.jsx)(`span`,{className:W,children:d(`channels:channelsPage.accessScope`)}),(0,B.jsxs)(P,{value:t.accessMode,onChange:t=>s(e,{accessMode:t.target.value===`all`?`all`:`owner`},d(`channels:channelsPage.accessScopeUpdated`)),children:[(0,B.jsx)(`option`,{value:`owner`,disabled:!t.ownerConfigured,children:d(`channels:channelsPage.qrCodeOwnerOnly`)}),(0,B.jsx)(`option`,{value:`all`,children:d(e===`feishu`?`channels:channelsPage.allMembersInTheCurrentTenant`:e===`weixin`?`channels:channelsPage.allWeChatUsersWhoMessageTheBot`:`channels:channelsPage.allUsersWhoMessageTheBot`)})]})]}),(0,B.jsxs)(`label`,{className:U,children:[(0,B.jsx)(`span`,{className:W,children:d(`channels:channelsPage.defaultWorkingDirectoryForNewChats`)}),(0,B.jsxs)(D,{className:`channel-setting-input max-[650px]:h-11`,children:[(0,B.jsx)(E,{children:(0,B.jsx)(c,{"aria-hidden":`true`})}),(0,B.jsx)(T,{className:`font-mono text-xs`,value:i,onChange:e=>o(e.target.value)}),(0,B.jsx)(E,{align:`inline-end`,children:(0,B.jsx)(b,{variant:`secondary`,size:`sm`,className:`max-[650px]:h-9`,disabled:a||i===t.defaultCwd,onClick:()=>s(e,{defaultCwd:i},d(`channels:channelsPage.defaultWorkingDirectorySaved`)),children:d(`channels:channelsPage.save`)})})]})]}),(0,B.jsxs)(F,{className:v(`mt-1`,q),children:[(0,B.jsx)(m,{size:15}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:d(`channels:channelsPage.localSecurityBoundary`)}),(0,B.jsx)(`small`,{children:d(`channels:channelsPage.ownerOnlyAccessRespectsToolPermissionsAndExecutionMode`)})]})]}),(0,B.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center justify-end gap-2 max-[650px]:[&>button]:h-11`,children:[(0,B.jsxs)(b,{variant:`ghost`,size:`sm`,className:`text-danger hover:bg-danger-soft hover:text-danger`,onClick:()=>u(e),children:[(0,B.jsx)(R,{}),d(`channels:channelsPage.disconnect`)]}),(0,B.jsxs)(b,{variant:`secondary`,size:`sm`,onClick:()=>l(e),disabled:a,children:[(0,B.jsx)(p,{}),d(`channels:channelsPage.reconnect`)]})]})]}):(0,B.jsx)(`p`,{className:`text-xs leading-relaxed text-content-muted`,children:d(`channels:channelsPage.notConnectedHint`)})]})}function me({job:e,onClose:t,onRetry:n,onSubmitCredentials:a,notify:o}){let{t:c,language:l}=r(),[u,d]=(0,z.useState)(``),[h,_]=(0,z.useState)(``),[x,S]=(0,z.useState)(``),[C,T]=(0,z.useState)(``),[E,D]=(0,z.useState)(!1),O=[`completed`,`failed`,`cancelled`].includes(e.status),k=e.manual||X(e.platform)&&e.mode!==`qr`,A=e.platform===`qq`?!!(h.trim()&&(x.trim()||C.trim())):!!C.trim(),j=async()=>{if(A){D(!0);try{await a({...h.trim()?{appId:h.trim()}:{},...x.trim()?{appSecret:x.trim()}:{},...C.trim()?{token:C.trim()}:{}})}finally{D(!1)}}};return(0,B.jsx)(`div`,{className:G,onMouseDown:e=>e.target===e.currentTarget&&t(),children:(0,B.jsxs)(`section`,{className:v(K,`feishu-onboard-modal`),children:[(0,B.jsxs)(I,{className:`[&_h2]:text-[15px] [&_h2]:font-medium`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`h2`,{children:c(k?`channels:channelsPage.configureName`:`channels:channelsPage.connectNameByQRCode`,{name:J(e.platform,c)})}),(0,B.jsx)(`p`,{children:e.platform===`feishu`?c(`channels:channelsPage.createTheBotAppThroughTheOfficialFeishuAuthorizationPage`):e.platform===`weixin`?c(`channels:channelsPage.signInToPersonalWeChatThroughTencentILinkBot`):e.platform===`qq`?c(`channels:channelsPage.scanWithQQToCreateOfficialBot`):c(`channels:channelsPage.enterBotCredentialsForName`,{name:J(e.platform,c)})})]}),(0,B.jsx)(b,{variant:`ghost`,size:`icon`,className:`-mt-1 -mr-1 max-[650px]:size-11`,"aria-label":c(`channels:channelsPage.closeDialog`),onClick:t,children:(0,B.jsx)(ee,{})})]}),k&&!e.id&&!O&&(0,B.jsxs)(`div`,{className:`mt-3.5 grid gap-2.5`,children:[e.platform===`qq`&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(N,{variant:`control`,children:[c(`channels:channelsPage.qqAppId`),(0,B.jsx)(w,{value:h,onChange:e=>_(e.target.value)})]}),(0,B.jsxs)(N,{variant:`control`,children:[c(`channels:channelsPage.qqAppSecret`),(0,B.jsx)(w,{type:`password`,value:x,onChange:e=>S(e.target.value)})]}),(0,B.jsx)(`small`,{className:`text-xs text-content-muted`,children:c(`channels:channelsPage.qqCredentialsOrToken`)})]}),(0,B.jsxs)(N,{variant:`control`,children:[c(`channels:channelsPage.botToken`),(0,B.jsx)(w,{type:`password`,value:C,onChange:e=>T(e.target.value)})]}),e.setupUrl&&(0,B.jsxs)(F,{className:v(q,`[&_a]:inline-flex [&_a]:items-center [&_a]:gap-1 [&_a]:text-xs [&_a]:text-content [&_a]:underline [&_a]:underline-offset-4`),children:[e.qrDataUrl&&(0,B.jsx)(`img`,{src:e.qrDataUrl,alt:c(`channels:channelsPage.openOfficialSetupQRCode`),className:`size-[120px] rounded-sm bg-[var(--lightbox-action-bg)] p-1`}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:c(`channels:channelsPage.officialSetupRequired`)}),(0,B.jsx)(`small`,{children:c(`channels:channelsPage.officialSetupInstructions`)}),(0,B.jsxs)(`a`,{href:e.setupUrl,target:`_blank`,rel:`noreferrer`,children:[c(`channels:channelsPage.openOfficialSetup`),(0,B.jsx)(s,{size:12})]})]})]}),(0,B.jsxs)(b,{className:`max-[650px]:h-11`,loading:E,disabled:!A||E,onClick:()=>void j(),children:[(0,B.jsx)(f,{}),c(`channels:channelsPage.connect`)]})]}),(!k||e.id||O)&&(0,B.jsxs)(`div`,{className:v(`feishu-qr-stage mt-3.5 flex min-h-[min(330px,52dvh)] flex-col items-center justify-center gap-2.5 rounded-md border border-stroke bg-surface-subtle p-4 text-center [&_img]:w-[248px] [&_img]:max-w-[86%] [&_img]:rounded-md [&_img]:border [&_img]:border-stroke [&_img]:bg-[var(--lightbox-action-bg)] [&_img]:p-2 [&_p]:max-w-[330px] [&_p]:text-xs [&_p]:leading-normal [&_p]:text-content-secondary [&_small]:text-xs [&_small]:text-content-muted [&_small]:tabular-nums [&_strong]:text-sm [&_strong]:font-medium [&.completed]:text-success [&.failed]:text-content-secondary`,e.status),children:[e.qrDataUrl?(0,B.jsx)(`img`,{src:e.qrDataUrl,alt:c(`channels:channelsPage.nameConnectionQRCode`,{name:J(e.platform,c)})}):e.status===`failed`?(0,B.jsx)(g,{className:`size-8`,strokeWidth:1.5}):(0,B.jsx)(y,{className:`size-7`}),(0,B.jsx)(`strong`,{children:k&&!e.id?c(`channels:channelsPage.enterBotCredentialsForName`,{name:J(e.platform,c)}):ce(e.status,c)}),e.error&&(0,B.jsx)(`p`,{children:e.error}),e.expireAt&&!O&&(0,B.jsx)(`small`,{children:c(`channels:channelsPage.qrCodeExpiresTime`,{time:le(e.expireAt,l)})})]}),e.needsVerifyCode&&(0,B.jsxs)(`div`,{className:`weixin-verify-code mt-2.5 grid grid-cols-[minmax(0,1fr)_auto] gap-2`,children:[(0,B.jsx)(w,{className:`font-mono tracking-[.08em] tabular-nums`,inputMode:`numeric`,value:u,onChange:e=>d(e.target.value.replace(/\D/g,``).slice(0,8)),placeholder:c(`channels:channelsPage.enterTheNumberShownOnYourPhone`)}),(0,B.jsx)(b,{className:`max-[650px]:h-11`,disabled:!u,onClick:async()=>{try{await i(`/api/channels/${e.platform}/onboarding/${encodeURIComponent(e.id||``)}/verify`,{method:`POST`,body:JSON.stringify({code:u})}),o(c(`channels:channelsPage.pairingCodeSubmitted`))}catch(e){o(Q(e),`error`)}},children:c(`channels:channelsPage.submitPairingCode`)})]}),e.qrUrl&&!O&&(0,B.jsx)(b,{asChild:!0,variant:`secondary`,className:`mt-2.5 w-full no-underline max-[650px]:h-11`,children:(0,B.jsxs)(`a`,{href:e.qrUrl,target:`_blank`,rel:`noreferrer`,children:[(0,B.jsx)(s,{}),c(`channels:channelsPage.cannotScanOpenTheSignInLink`)]})}),(0,B.jsxs)(F,{className:q,children:[(0,B.jsx)(m,{size:15}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:c(`channels:channelsPage.persistentTwoWayConnection`)}),(0,B.jsx)(`small`,{children:e.platform===`feishu`?c(`channels:channelsPage.webSocketReceivesDirectMessagesAndGroupMentions`):e.platform===`weixin`?c(`channels:channelsPage.tencentILinkContinuouslyPollsDirectMessagesAndSupportsTextAndMediaReplies`):Y(e.platform,c)})]})]}),(0,B.jsxs)(`div`,{className:`mt-4 flex justify-end gap-2`,children:[(0,B.jsx)(b,{variant:`secondary`,className:`max-[650px]:h-11`,onClick:t,children:c(O?`channels:channelsPage.off`:`channels:channelsPage.cancel`)}),e.status===`failed`&&(0,B.jsxs)(b,{className:`max-[650px]:h-11`,onClick:n,children:[(0,B.jsx)(p,{}),c(k?`channels:channelsPage.retry`:`channels:channelsPage.generateANewQRCode`)]})]})]})})}export{ue as ChannelsPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{t}from"./index-DjSjahBi.js";import{i as n,r}from"./vendor-react-DwNgTV1j.js";import{t as i}from"./use-i18n-DCxQRXLH.js";import{t as a}from"./storage-8QW6lXuT.js";import{t as o}from"./useQuery-DdcpUQhO.js";import{a as s,n as c,o as l,t as u}from"./startup-queries-iq2o5pqJ.js";import{t as d}from"./api-BmSvZCuH.js";import{t as ee}from"./usePhoneShell-BleJZMk4.js";import{t as f}from"./createLucideIcon-Cd-3GVxJ.js";import{a as p,c as te,t as ne}from"./session-list-BeyOEzyU.js";import{t as re}from"./ellipsis-CfGKfbq6.js";import{t as ie}from"./pencil-U08v_vV9.js";import{t as m}from"./pin-CU0FG0lI.js";import{t as ae}from"./refresh-cw-TbWxTY4K.js";import{t as oe}from"./square-pen-hYbjKh6A.js";import{t as se}from"./trash-2-CNrPOoPR.js";import{t as h}from"./brand-DIEc3fK8.js";import{t as ce}from"./more-pages-D_PnxLN0.js";import{c as le,i as g,p as ue,r as de,t as fe}from"./dropdown-menu-Ds0gD8S8.js";import{t as _}from"./utils-C8uzG5AZ.js";import{n as pe,t as v}from"./button-CCcCN8tE.js";import{c as me,t as y,u as b,y as he}from"./events-C7sXXop4.js";import{s as ge}from"./shortcuts-DnykOp5e.js";import{n as _e,t as ve}from"./session-organization-api-Cm9HoIme.js";import{a as ye,o as be}from"./format-DMJQzoZ7.js";import{t as x}from"./StatusGlyph-1KgitlUg.js";import{t as S}from"./session-change-summary-api-DENj-A9c.js";import{n as C}from"./PageState-Cz6vFMXv.js";import{a as xe,i as Se,n as Ce,o as we,r as Te,s as Ee,t as De}from"./FeaturePage-DGauTCbU.js";import{t as Oe}from"./badge-CWB3lj2H.js";var ke=f(`archive-restore`,[[`rect`,{width:`20`,height:`5`,x:`2`,y:`3`,rx:`1`,key:`1wp1u1`}],[`path`,{d:`M4 8v11a2 2 0 0 0 2 2h2`,key:`tvwodi`}],[`path`,{d:`M20 8v11a2 2 0 0 1-2 2h-2`,key:`1gkqxj`}],[`path`,{d:`m9 15 3-3 3 3`,key:`1pd0qc`}],[`path`,{d:`M12 12v9`,key:`192myk`}]]),Ae=f(`folder-closed`,[[`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`}],[`path`,{d:`M2 10h20`,key:`1ir3d8`}]]),je=f(`pin-off`,[[`path`,{d:`M12 17v5`,key:`bb1du9`}],[`path`,{d:`M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89`,key:`znwnzq`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11`,key:`c9qhm2`}]]),w=e(n(),1),T=864e5;function E(e,t=Date.now()){if(e.pinned)return`pinned`;let n=Date.parse(e.modified||``);if(!Number.isFinite(n))return`earlier`;let r=new Date(t);return r.setHours(0,0,0,0),n>=r.getTime()?`today`:n>=r.getTime()-6*T?`week`:`earlier`}function D(e,t,n=Date.now()){let r=new Map;return e.forEach((e,i)=>{let a=E(e,n),o=r.get(a)??{key:a,count:0,items:[]};o.count+=1,i<t&&o.items.push(e),r.set(a,o)}),[...r.values()].filter(e=>e.items.length>0)}function Me(e,t,n,r=`active`,i=Date.now()){let a=t.trim().toLowerCase(),o=a?e.filter(e=>`${e.name||``} ${e.firstMessage||``} ${e.cwd||``} ${e.model||``}`.toLowerCase().includes(a)):e.filter(e=>!!e.archived==(r===`archived`)),s=p(o),c=s.slice(0,Math.max(0,n));return{total:o.length,items:c,groups:D(s,c.length,i)}}var O=r();function k({sessionId:e,lastCompletedAt:t,streaming:n}){let{t:r}=i(),a=(0,w.useRef)(null),[s,c]=(0,w.useState)(!1);(0,w.useEffect)(()=>{let e=a.current;if(!e||s)return;if(!(`IntersectionObserver`in window)){c(!0);return}let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(c(!0),t.disconnect())},{rootMargin:`120px`});return t.observe(e),()=>t.disconnect()},[s]);let{data:l}=o({queryKey:[`session-change-summary`,e,t],queryFn:()=>S(e),enabled:s,staleTime:6e4,retry:0,refetchInterval:n&&s?2e4:!1});return l?.status!==`known`||!l.changedFiles?(0,O.jsx)(`span`,{ref:a}):(0,O.jsx)(`span`,{ref:a,className:`ml-1 inline-flex items-center gap-1 tabular-nums before:mr-1 before:content-['·']`,children:r(`chat:chatHistoryPage.changeSummary`,{count:l.changedFiles,added:l.added||0,removed:l.removed||0})})}function A(e){s.setQueryData(u,t=>t&&{...t,sessions:e(t.sessions||[])})}function j({navigate:e,onBack:n,onNewTask:r,notify:s,requestConfirm:u,requestText:f}){let{t:S,language:T}=i(),E=ee(),D=ge(`focusSearch`),[j,Ne]=(0,w.useState)(``),M=o(l(`sessions`)),N=(0,w.useMemo)(()=>p(M.data?.sessions||[]),[M.data]),[P,Pe]=(0,w.useState)(`active`),F=`${P}\0${j}`,[I,L]=(0,w.useState)({filterKey:F,count:50}),R=(0,w.useRef)(!1),z=(0,w.useRef)(null),[B,V]=(0,w.useState)(()=>t.getItem(a.activeSession)||``),[Fe,H]=(0,w.useState)(!1),[U,W]=(0,w.useState)(``),G=M.isPending||Fe,K=M.error&&!M.data?M.error instanceof Error?M.error.message:String(M.error):``;(0,w.useEffect)(()=>{L(e=>e.filterKey===F&&e.count===50?e:{filterKey:F,count:50})},[F]);let q=(0,w.useCallback)(async()=>{H(!0),W(``);try{await c(`sessions`,!0)}catch(e){W(e instanceof Error?e.message:String(e))}finally{H(!1)}},[]);(0,w.useEffect)(()=>(document.title=`${S(`chat:chatHistoryPage.chatHistory`)} · ${h}`,()=>{document.title=h}),[S]),(0,w.useEffect)(()=>{let e=e=>V(e.detail?.id||t.getItem(a.activeSession)||``);return window.addEventListener(y,e),()=>window.removeEventListener(y,e)},[]);let J=I.filterKey===F?I.count:50,Y=(0,w.useMemo)(()=>Me(N,j,J,P),[P,j,N,J]),X=N.filter(e=>e.archived).length,Z={active:N.length-X,archived:X},Ie={pinned:S(`chat:chatHistoryPage.groupPinned`),today:S(`chat:chatHistoryPage.groupToday`),week:S(`chat:chatHistoryPage.groupWeek`),earlier:S(`chat:chatHistoryPage.groupEarlier`)};(0,w.useEffect)(()=>{R.current&&(R.current=!1,z.current?.focus())},[Y.items.length,Y.total]);let Le=t=>{he(t),e(`chat`)},Re=async e=>{let t=await f({title:S(`chat:chatHistoryPage.renameChat`),inputLabel:S(`chat:chatHistoryPage.chatTitle`),value:e.name,confirmLabel:S(`chat:chatHistoryPage.save`)});if(t!==null&&t!==e.name)try{let n=await d(`/api/sessions/${encodeURIComponent(e.id)}`,{method:`PATCH`,body:JSON.stringify({name:t})});A(t=>t.map(t=>t.id===e.id?{...t,name:n.name}:t)),b({id:e.id,name:n.name}),s(S(`chat:chatHistoryPage.chatTitleUpdated`))}catch(e){W(e instanceof Error?e.message:String(e))}},Q=async(e,t,n)=>{try{let r=await _e(e.id,t);A(e=>ne(e,r)),s(n)}catch(e){W(e instanceof ve?S(`chat:chatHistoryPage.sessionUpdateFailed`):e instanceof Error?e.message:String(e))}},ze=async e=>{if(await u({title:S(`chat:chatHistoryPage.deleteChat`),message:S(`chat:chatHistoryPage.deleteChatNameThisAlsoRemovesLocalChatHistory`,{name:e.name}),confirmLabel:S(`chat:chatHistoryPage.delete`)}))try{await d(`/api/sessions/${encodeURIComponent(e.id)}`,{method:`DELETE`});let n=N.filter(t=>t.id!==e.id);if(A(t=>t.filter(t=>t.id!==e.id)),B===e.id){let e=n[0]?.id||``;V(e),e?t.setItem(a.activeSession,e):t.removeItem(a.activeSession),me(e)}b({deletedIds:[e.id]}),s(S(`chat:chatHistoryPage.chatDeleted`))}catch(e){W(e instanceof Error?e.message:String(e))}},Be=e=>e.streaming?(0,O.jsxs)(`span`,{className:`inline-flex shrink-0 items-center gap-1 text-content-secondary`,children:[(0,O.jsx)(x,{status:`run`,className:`size-3.5`}),S(`chat:chatHistoryPage.statusRunning`)]}):e.needsAttention?(0,O.jsxs)(`span`,{className:`inline-flex shrink-0 items-center gap-1 font-medium text-warning-strong`,children:[(0,O.jsx)(x,{status:`attention`,className:`size-3.5`}),e.attentionReason===`failure`?S(`chat:chatHistoryPage.statusFailed`):e.attentionReason===`approval`?S(`chat:chatHistoryPage.statusApproval`):S(`chat:chatHistoryPage.needsAttention`)]}):null,$=S(`chat:chatHistoryPage.chatHistory`),Ve=j?S(`chat:chatHistoryPage.noMatchingConversations`):P===`archived`?S(`chat:chatHistoryPage.noArchivedChats`):N.length?S(`chat:chatHistoryPage.noActiveChats`):S(`chat:chatHistoryPage.noConversationsHaveLeftAnEchoYet`),He=j?S(`chat:chatHistoryPage.tryADifferentSearch`):P===`archived`?S(`chat:chatHistoryPage.archivedChatsAppearHere`):N.length?S(`chat:chatHistoryPage.restoreArchivedChats`):S(`chat:chatHistoryPage.onceAConversationBeginsItWillBeQuietlyGatheredHere`);return(0,O.jsx)(Te,{title:$,description:S(`chat:chatHistoryPage.lede`),back:n&&{label:S(`navigation:sidebar.features`),ariaLabel:S(`navigation:shell.backToFeaturesLabel`),onBack:n},toolbar:(0,O.jsx)(Ee,{search:(0,O.jsx)(xe,{id:ce,value:j,onValueChange:Ne,placeholder:S(`navigation:pageHeader.searchPage`,{page:$}),shortcut:D,clearLabel:S(`navigation:more.clearSearch`)}),actions:r&&!E&&(0,O.jsxs)(v,{type:`button`,className:`h-9`,onClick:r,children:[(0,O.jsx)(oe,{}),S(`navigation:shell.newTask`)]}),filters:(0,O.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-x-4 gap-y-2`,children:[(0,O.jsx)(`div`,{role:`group`,"aria-label":S(`chat:chatHistoryPage.historySections`),className:`inline-grid h-8 grid-cols-2 rounded-md border border-stroke bg-chrome p-[3px] max-[650px]:h-auto max-[650px]:flex-1 max-[650px]:rounded-[10px] pointer-coarse:h-auto`,children:[`active`,`archived`].map(e=>(0,O.jsxs)(`button`,{type:`button`,"aria-pressed":P===e,"aria-label":e===`active`?S(`chat:chatHistoryPage.activeChatsCount`,{count:Z.active}):S(`chat:chatHistoryPage.archivedChats`,{count:Z.archived}),className:_(`inline-flex min-w-0 items-center justify-center gap-1.5 rounded-sm border border-transparent px-3 text-sm text-content-secondary transition-colors duration-(--d-fast) hover:text-content max-[650px]:h-11 max-[650px]:text-base pointer-coarse:h-11`,P===e&&`border-key-border bg-key font-medium text-content shadow-key`),onClick:()=>Pe(e),children:[S(e===`active`?`chat:chatHistoryPage.activeChats`:`chat:chatHistoryPage.archived`),(0,O.jsx)(`span`,{className:_(`text-xs font-normal tabular-nums`,P===e?`text-content-secondary`:`text-content-muted`),children:Z[e]})]},e))}),(0,O.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1 text-xs text-content-muted tabular-nums`,children:[(0,O.jsxs)(`span`,{className:_(`truncate`,!j&&`max-[650px]:hidden`),children:[S(`chat:chatHistoryPage.countChatHistoryItems`,{count:N.length}),` · `,j?S(`chat:chatHistoryPage.countCurrentlyFiltered`,{count:Y.total}):S(`chat:chatHistoryPage.sortedByMostRecentlyUpdated`)]}),(0,O.jsx)(v,{variant:`ghost`,size:`icon-sm`,className:`text-content-muted max-[650px]:size-11 pointer-coarse:size-11`,"aria-label":S(`chat:chatHistoryPage.refresh`),title:S(`chat:chatHistoryPage.refresh`),onClick:()=>void q(),disabled:G,children:G?(0,O.jsx)(pe,{className:`text-current`}):(0,O.jsx)(ae,{size:14})})]})]})}),children:G&&!N.length?(0,O.jsx)(C,{kind:`loading`,title:S(`chat:chatHistoryPage.loadingChatHistory`)}):K&&!N.length?(0,O.jsx)(C,{kind:`error`,title:S(`chat:chatHistoryPage.loadFailed`),description:K,action:(0,O.jsx)(v,{variant:`secondary`,className:`max-[650px]:h-11`,loading:G,disabled:G,onClick:()=>void q(),children:S(`common:pageTemplate.retry`)})}):(0,O.jsxs)(O.Fragment,{children:[(U||K)&&(0,O.jsx)(De,{children:U||K}),Y.total?(0,O.jsxs)(`div`,{className:`chat-history-list`,children:[Y.groups.map(e=>(0,O.jsx)(we,{title:Ie[e.key],count:e.count,children:(0,O.jsx)(Ce,{children:e.items.map(e=>{let t=e.name||S(`chat:chatHistoryPage.untitledChat`),n=e.model&&!/(^|\/)unknown$/i.test(String(e.model))?String(e.model).split(`/`).at(-1):``,r=e.id===B;return(0,O.jsx)(Se,{"data-history-session":e.id,"data-current":r||void 0,className:_(`chat-history-row relative`,r&&`after:absolute after:top-3.5 after:bottom-3.5 after:-left-3 after:w-[3px] after:rounded-r-[3px] after:bg-star max-[650px]:after:-left-2.5`),onOpen:()=>Le(e.id),openLabel:S(`chat:chatHistoryPage.openChatNamed`,{name:t}),name:(0,O.jsxs)(`span`,{className:`chat-history-copy inline-flex max-w-full min-w-0 items-center gap-2`,children:[e.unread&&(0,O.jsx)(`span`,{role:`img`,"aria-label":S(`chat:chatHistoryPage.unread`),className:`size-1.5 shrink-0 rounded-full bg-ink`}),e.pinned&&(0,O.jsx)(m,{className:`size-3.5 shrink-0 text-content-muted`,"aria-hidden":`true`}),(0,O.jsx)(`strong`,{"data-history-name":!0,className:`min-w-0 truncate font-medium`,title:t,children:t})]}),description:(0,O.jsx)(`span`,{className:_(`line-clamp-1`,e.firstMessage?`text-content-secondary`:void 0),children:e.firstMessage||S(`chat:chatHistoryPage.noMessageSummary`)}),meta:(0,O.jsxs)(O.Fragment,{children:[Be(e),e.archived&&j.trim()&&(0,O.jsx)(Oe,{children:S(`chat:chatHistoryPage.archived`)}),(0,O.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-1 font-mono`,children:[(0,O.jsx)(Ae,{className:`size-3.5 shrink-0`,"aria-hidden":`true`}),(0,O.jsx)(`span`,{className:`truncate`,children:be(e.projectless?``:e.cwd,T)})]}),(0,O.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,O.jsx)(`span`,{className:`shrink-0 tabular-nums`,children:S(`chat:chatHistoryPage.countMessages`,{count:e.messageCount||0})}),n&&(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(`span`,{"aria-hidden":`true`,className:`max-[650px]:hidden`,children:`·`}),(0,O.jsx)(`span`,{className:`min-w-0 truncate font-mono max-[650px]:hidden`,children:n})]}),(0,O.jsx)(k,{sessionId:e.id,lastCompletedAt:e.lastCompletedAt,streaming:e.streaming})]}),status:(0,O.jsx)(`time`,{dateTime:e.modified,children:ye(e.modified,T)}),actions:(0,O.jsxs)(fe,{children:[(0,O.jsx)(ue,{asChild:!0,children:(0,O.jsx)(v,{type:`button`,variant:`ghost`,size:`icon`,className:`size-8 shrink-0 text-content-muted max-[650px]:size-11 pointer-coarse:size-11`,"aria-label":S(`chat:chatHistoryPage.moreActionsForChat`,{name:t}),children:(0,O.jsx)(re,{size:16})})}),(0,O.jsxs)(de,{align:`end`,className:`min-w-48`,children:[(0,O.jsxs)(g,{className:`min-h-11`,onSelect:()=>void Re(e),children:[(0,O.jsx)(ie,{}),S(`chat:chatHistoryPage.renameChat`)]}),(0,O.jsxs)(g,{className:`min-h-11`,onSelect:()=>void Q(e,{pinned:!e.pinned},e.pinned?S(`chat:chatHistoryPage.unpinned`):S(`chat:chatHistoryPage.pinned`)),children:[e.pinned?(0,O.jsx)(je,{}):(0,O.jsx)(m,{}),e.pinned?S(`chat:chatHistoryPage.unpin`):S(`chat:chatHistoryPage.pin`)]}),(0,O.jsxs)(g,{className:`min-h-11`,onSelect:()=>void Q(e,{archived:!e.archived},e.archived?S(`chat:chatHistoryPage.restored`):S(`chat:chatHistoryPage.movedToArchive`)),children:[e.archived?(0,O.jsx)(ke,{}):(0,O.jsx)(te,{}),e.archived?S(`chat:chatHistoryPage.restore`):S(`chat:chatHistoryPage.archive`)]}),e.unread&&(0,O.jsx)(g,{className:`min-h-11`,onSelect:()=>void Q(e,{read:!0},S(`chat:chatHistoryPage.markedRead`)),children:S(`chat:chatHistoryPage.markRead`)}),(0,O.jsx)(le,{}),(0,O.jsxs)(g,{variant:`destructive`,className:`min-h-11`,onSelect:()=>void ze(e),children:[(0,O.jsx)(se,{}),S(`chat:chatHistoryPage.deleteChat`)]})]})]})},e.id)})})},e.key)),Y.total>50&&(0,O.jsx)(`div`,{className:`flex justify-center pt-4`,children:Y.total>Y.items.length?(0,O.jsx)(v,{type:`button`,variant:`secondary`,className:`tabular-nums max-[650px]:min-h-11 pointer-coarse:min-h-11`,onClick:()=>{let e=J+50;R.current=e>=Y.total,L({filterKey:F,count:e})},children:S(`chat:chatHistoryPage.loadMoreChats`,{shown:Y.items.length,total:Y.total})}):(0,O.jsx)(`p`,{ref:z,tabIndex:-1,role:`status`,className:`py-2 text-xs text-content-muted tabular-nums`,children:S(`chat:chatHistoryPage.allChatsShown`,{count:Y.total})})})]}):(0,O.jsx)(C,{kind:`empty`,title:Ve,description:He})]})})}export{j as ChatHistoryPage};
|