pisper 0.6.28 → 0.6.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/package.json +6 -6
  2. package/web/.vite/manifest.json +654 -641
  3. package/web/assets/{AppDialog-Cjnspn8J.js → AppDialog-CX0n4qav.js} +1 -1
  4. package/web/assets/{AppOverlays-ielr5J2J.js → AppOverlays-J_rOhlw3.js} +1 -1
  5. package/web/assets/{AssetsPage-BC1mYvQw.js → AssetsPage-BuAZJf2M.js} +1 -1
  6. package/web/assets/{BoardPage-BS3oBeRU.js → BoardPage-BT684h8Y.js} +3 -3
  7. package/web/assets/{ChannelsPage-DOysYIcY.js → ChannelsPage-CznKEDyh.js} +1 -1
  8. package/web/assets/{ChatAppearancePage-DqNJD2hC.js → ChatAppearancePage-BrZ30LfD.js} +1 -1
  9. package/web/assets/{ChatHistoryPage-DcTFMdWO.js → ChatHistoryPage-BEJbiMs3.js} +1 -1
  10. package/web/assets/{ChatPage-DaKslieG.js → ChatPage-CCL8A95i.js} +3 -3
  11. package/web/assets/{ConfigPage-Cg93xSDY.js → ConfigPage-_YQZcZlC.js} +2 -2
  12. package/web/assets/{DesktopWindowControls-Zz88RwFF.js → DesktopWindowControls-C-LzcrLu.js} +1 -1
  13. package/web/assets/{FeaturePage-bqByIxYg.js → FeaturePage-C4fMefC-.js} +1 -1
  14. package/web/assets/{FileAttachmentPreview-Dc92kq62.js → FileAttachmentPreview-DCdc0GFC.js} +1 -1
  15. package/web/assets/{FloatingWidgets-CwJuWUMz.js → FloatingWidgets-C5PMwmK1.js} +1 -1
  16. package/web/assets/{FocusRuntimeControls-huHLWDdy.js → FocusRuntimeControls-D6Rj2AHK.js} +1 -1
  17. package/web/assets/{GitDiffViewer-b4QqrnGx.js → GitDiffViewer-D2QUzasQ.js} +1 -1
  18. package/web/assets/{ManageProjectsDialog-DpwUwosB.js → ManageProjectsDialog-CCg0vZ07.js} +1 -1
  19. package/web/assets/{MarkdownMessage-BEmTlPSn.js → MarkdownMessage-DbPFHAG0.js} +1 -1
  20. package/web/assets/{McpPage-COTq4Jjj.js → McpPage-DAg9VlnU.js} +1 -1
  21. package/web/assets/{MemoryEvolution-CNi44VEB.js → MemoryEvolution-CVF6CYuV.js} +1 -1
  22. package/web/assets/{MemoryPage-fUDrPE_v.js → MemoryPage-C4C8Efhi.js} +2 -2
  23. package/web/assets/{MobileNavigation-BvCRGO5c.js → MobileNavigation-EsJOtmUl.js} +1 -1
  24. package/web/assets/{MorePage-BuKQ5rBF.js → MorePage-BslKLMFa.js} +1 -1
  25. package/web/assets/{NewFolderDialog-Btk5x-Ar.js → NewFolderDialog-Bb4T0UPO.js} +1 -1
  26. package/web/assets/{PageHeader-BjhZ50ed.js → PageHeader-DjJ0Ab6e.js} +1 -1
  27. package/web/assets/{PhoneDrawer-Cs-ka4ZZ.js → PhoneDrawer-Cu2FDUc1.js} +1 -1
  28. package/web/assets/{PhoneMenuButton-CTlyYTpl.js → PhoneMenuButton-C8pYulkt.js} +1 -1
  29. package/web/assets/{PhoneTopBar-Cx2DM1ne.js → PhoneTopBar-CvMWkksM.js} +1 -1
  30. package/web/assets/{PluginsPage-B9Xlbo-c.js → PluginsPage-DxjMMa05.js} +1 -1
  31. package/web/assets/{SafeModePrompt-BCrBZdI6.js → SafeModePrompt-DG64bady.js} +1 -1
  32. package/web/assets/{SchedulesPage-Eh7MyRAr.js → SchedulesPage-Bd0sjkiZ.js} +1 -1
  33. package/web/assets/{SessionBrowserPane-Zeec5cZP.js → SessionBrowserPane-CigWhKGU.js} +2 -2
  34. package/web/assets/{SessionContextPanel-CVKmX-do.js → SessionContextPanel-HfjETMcF.js} +2 -2
  35. package/web/assets/{SessionHome-CJR_Ufgl.js → SessionHome-DtzbkF19.js} +1 -1
  36. package/web/assets/{SessionInspector-D5tmy63H.js → SessionInspector-BZyFstFl.js} +1 -1
  37. package/web/assets/{SessionShell-w3sKK33I.js → SessionShell-BCIVsKr9.js} +1 -1
  38. package/web/assets/{SettingsSidebar-CseRAdbZ.js → SettingsSidebar-F20r1qhh.js} +1 -1
  39. package/web/assets/{ShortcutHelpDialog-R4Gx-9DQ.js → ShortcutHelpDialog-BSiv5k3S.js} +1 -1
  40. package/web/assets/{ShortcutKeys-DksC1OkE.js → ShortcutKeys-BWYkyL77.js} +1 -1
  41. package/web/assets/{SidebarUpdateStatus-BCd1eq_6.js → SidebarUpdateStatus-BA3cyY6N.js} +1 -1
  42. package/web/assets/{SkillsPage-Bn2y_EfT.js → SkillsPage-C6cF2A7j.js} +1 -1
  43. package/web/assets/{TaskProcessesPane-FwGhuWob.js → TaskProcessesPane-B6O5Mirv.js} +1 -1
  44. package/web/assets/{TaskTerminalView-Cd4PIsW7.js → TaskTerminalView-IR5bGXk7.js} +1 -1
  45. package/web/assets/{TerminalPanel-48zgvDnP.js → TerminalPanel-BAl1Ytmx.js} +1 -1
  46. package/web/assets/{WebDesktopPet-gSDBRZ3C.js → WebDesktopPet-CLjE98zM.js} +1 -1
  47. package/web/assets/{WorkflowsPage-Cs8PPuKK.js → WorkflowsPage-5kMzkdP5.js} +1 -1
  48. package/web/assets/{WorkspacePicker-93gmdtjf.js → WorkspacePicker-Dy3QRSbL.js} +1 -1
  49. package/web/assets/{api-AeFmYDtL.js → api-BhPOJ07B.js} +1 -1
  50. package/web/assets/app-update-DK-2lnli.js +34 -0
  51. package/web/assets/{approval-confirm-D-cfu-xY.js → approval-confirm-BiKVYJXn.js} +1 -1
  52. package/web/assets/{board-projects-CjfuDvHx.js → board-projects-BmfKMy9W.js} +1 -1
  53. package/web/assets/{bots-store-vErH7x9u.js → bots-store-sXgxSYjm.js} +1 -1
  54. package/web/assets/browser-notifications-CvHO-BlP.js +1 -0
  55. package/web/assets/{chat-api-CSAs7Y6E.js → chat-api-CdqM-TFw.js} +1 -1
  56. package/web/assets/{client-store-B5wZ2IWH.js → client-store-CkmBBzE5.js} +1 -1
  57. package/web/assets/{config-search-eh2zQyZD.js → config-search-DTHZrqfb.js} +1 -1
  58. package/web/assets/{desktop-hosts-BNXtrr7R.js → desktop-hosts-BzI81G6K.js} +1 -1
  59. package/web/assets/{dialog-BDNbY1pW.js → dialog-BVAtioHy.js} +1 -1
  60. package/web/assets/{event-stream-Dh7h5sXJ.js → event-stream-B9eeQcgA.js} +1 -1
  61. package/web/assets/{events-CuVwhRWu.js → events-CcKmvwE6.js} +1 -1
  62. package/web/assets/{focus-session-composer-bits-Dkc0qSzm.js → focus-session-composer-bits-BuYWKdXR.js} +1 -1
  63. package/web/assets/{folder-paths-BKS24lJ6.js → folder-paths-D8nYAh7q.js} +1 -1
  64. package/web/assets/{hosts-B_02vF1S.js → hosts-BRNTbndS.js} +1 -1
  65. package/web/assets/{http-Bp65Kb4t.js → http-CXQuFoDX.js} +1 -1
  66. package/web/assets/{http-response-PZN5QIRk.js → http-response-scdqC11Q.js} +1 -1
  67. package/web/assets/i18n-D5XUOwJ3.js +1 -0
  68. package/web/assets/{index-CiRnxTh1.js → index-at6jiRd2.js} +2 -2
  69. package/web/assets/{machine-messages-Y3INM-Uy.js → machine-messages-BhLpbeyp.js} +1 -1
  70. package/web/assets/{machines-api-08M8wQiu.js → machines-api-c4gyvYeB.js} +1 -1
  71. package/web/assets/{memory-api-DSpQSQ5N.js → memory-api-BZLLcIF1.js} +1 -1
  72. package/web/assets/mount-app-713eDAlJ.js +9 -0
  73. package/web/assets/notification-sound-synth-DIRfyEoK.js +1 -0
  74. package/web/assets/{permission-rules-api-D931wxo9.js → permission-rules-api-BoggV-So.js} +1 -1
  75. package/web/assets/{pick-system-directory-CaiscVfr.js → pick-system-directory-COxOQmRm.js} +1 -1
  76. package/web/assets/{placements-BERPVxJD.js → placements-CWg24KPB.js} +2 -2
  77. package/web/assets/{popover-BKgOyW2Z.js → popover-BKEwGK6p.js} +1 -1
  78. package/web/assets/{public-DrlrVRdl.js → public-CFmAK4C5.js} +1 -1
  79. package/web/assets/{public-D9GopZqN.js → public-Ds92tfxs.js} +2 -2
  80. package/web/assets/{public-CEKKZh7R.js → public-DyoA5qbn.js} +2 -2
  81. package/web/assets/{public-CwI1S0by.js → public-_SuCE3iR.js} +1 -1
  82. package/web/assets/{public-components-BX9oxLC6.js → public-components-CiFLJxlo.js} +1 -1
  83. package/web/assets/public-diff-ByaSqbeU.js +1 -0
  84. package/web/assets/public-events-BZoQRupR.js +1 -0
  85. package/web/assets/{public-flags-DaG3PoAy.js → public-flags-wwqdZl3u.js} +1 -1
  86. package/web/assets/{public-folder-dialog-_QoxpOd4.js → public-folder-dialog-MYvmKYka.js} +1 -1
  87. package/web/assets/{public-greeting-hvhJuZMw.js → public-greeting-DFC9u9sY.js} +1 -1
  88. package/web/assets/{public-session-DUzugr9Y.js → public-session-qSMh175y.js} +1 -1
  89. package/web/assets/{public-sidebar-QGIKY-SE.js → public-sidebar-WFoUZVnB.js} +1 -1
  90. package/web/assets/{runtime-capabilities-store-Bd3gWIM7.js → runtime-capabilities-store-D0EC-a9c.js} +1 -1
  91. package/web/assets/{safe-mode-instance-B7_JMLGQ.js → safe-mode-instance-Ct43-TDv.js} +1 -1
  92. package/web/assets/safe-mode-sentinel-BKPGGJEL.js +1 -0
  93. package/web/assets/{session-change-summary-api-BHpd8dcW.js → session-change-summary-api-CyghX14t.js} +1 -1
  94. package/web/assets/{session-home-BmAnhROp.js → session-home-DY7RkKbH.js} +1 -1
  95. package/web/assets/{session-inspector-store-DHEIlh_X.js → session-inspector-store-BocK0l86.js} +1 -1
  96. package/web/assets/{session-organization-api-D9hTSIh7.js → session-organization-api-CGRK7VMP.js} +1 -1
  97. package/web/assets/{session-scope-yI3Hi_8F.js → session-scope-DDZF_AQ6.js} +1 -1
  98. package/web/assets/{session-tree-actions-BhCOaiTd.js → session-tree-actions-g769G3qz.js} +1 -1
  99. package/web/assets/{session-tree-summary-BLv-bkYC.js → session-tree-summary-CqrRroey.js} +1 -1
  100. package/web/assets/{shortcuts-Dsd4mjfP.js → shortcuts-BsrTXPiU.js} +1 -1
  101. package/web/assets/{side-chat-context-scyCH7W7.js → side-chat-context-DNQ3tThq.js} +4 -4
  102. package/web/assets/{sidebar-BKgF_JcM.js → sidebar-R690QKPw.js} +1 -1
  103. package/web/assets/{sidebar-store-DHwAOBnN.js → sidebar-store-QvX0w7hQ.js} +1 -1
  104. package/web/assets/{speech-session-B7DFYRtL.js → speech-session-DnBIZldd.js} +1 -1
  105. package/web/assets/{startup-queries-BlA4Hayt.js → startup-queries-BpV9-ykp.js} +1 -1
  106. package/web/assets/{use-i18n-BVRhlQ1v.js → use-i18n-AM3jlRYR.js} +1 -1
  107. package/web/assets/{use-open-bot-DyXtOatN.js → use-open-bot-BDco631W.js} +1 -1
  108. package/web/assets/{use-studio-actions-DEeR_rS9.js → use-studio-actions-C7W6Soh6.js} +1 -1
  109. package/web/assets/{useCatalogProjects-BD5GyCxg.js → useCatalogProjects-DCT51aGo.js} +1 -1
  110. package/web/assets/{useMachines-CwX7YqNe.js → useMachines-BJtbuUVt.js} +1 -1
  111. package/web/assets/{useNewProjectPicker-COxPJj6n.js → useNewProjectPicker-B85EuCYh.js} +2 -2
  112. package/web/assets/{useNow-CfPk0uIz.js → useNow-BUhFR4QI.js} +1 -1
  113. package/web/assets/{usePhoneShell-BpuKJgci.js → usePhoneShell-CK9XBtgf.js} +1 -1
  114. package/web/assets/{useSessionListQuery-CURESPBn.js → useSessionListQuery-B4Xmcfwa.js} +1 -1
  115. package/web/assets/{useSessionRowActions-DoCwFh8w.js → useSessionRowActions-BMestf2F.js} +1 -1
  116. package/web/assets/{useSidebarModel-CY79-mYl.js → useSidebarModel-BDfzya9Z.js} +1 -1
  117. package/web/assets/{workspace-order-store-C-jYrC0l.js → workspace-order-store-C_t43Zgq.js} +1 -1
  118. package/web/index.html +1 -1
  119. package/web/assets/app-update-Cf9JJ7WK.js +0 -34
  120. package/web/assets/browser-notifications-DBS0oXqN.js +0 -1
  121. package/web/assets/i18n-D80GstlU.js +0 -1
  122. package/web/assets/mount-app-DRohHSG7.js +0 -9
  123. package/web/assets/public-diff-DpNMZ8NJ.js +0 -1
  124. package/web/assets/public-events-CLCgth5h.js +0 -1
  125. package/web/assets/safe-mode-sentinel-B_NPQ0qy.js +0 -1
@@ -1 +1 @@
1
- import{a as e,r as t}from"./rolldown-runtime-B0Z9INg1.js";import{i as n,r}from"./vendor-react-DwNgTV1j.js";import{t as i}from"./use-i18n-BVRhlQ1v.js";import{t as a}from"./createLucideIcon-Cd-3GVxJ.js";import{t as o}from"./check-2vYc6QaP.js";import{t as s}from"./triangle-alert-CE1q54ci.js";import{n as c,t as l}from"./button-CCcCN8tE.js";import{a as u,i as d,l as f,o as p,s as m,t as h}from"./dialog-BDNbY1pW.js";import{t as g}from"./input-CPw-zkYh.js";import{n as _,t as v}from"./alert-DRIrgNI4.js";var y=a(`folder-input`,[[`path`,{d:`M2 9V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-1`,key:`fm4g5t`}],[`path`,{d:`M2 13h10`,key:`pgb2dq`}],[`path`,{d:`m9 16 3-3-3-3`,key:`6m91ic`}]]),b=e(n(),1);function x(e){let t=window.__TAURI__?.core?.invoke??window.__TAURI_INTERNALS__?.invoke;return t?t(e):Promise.reject(Error(`native bridge unavailable`))}async function S(){return window.__PISPER_MOBILE_APP__?(await x(`mobile_state`)).mode:null}async function C(){if(window.__PISPER_MOBILE_PLATFORM__!==`android`)throw Error(`workspace_import_unsupported`);let e=await x(`mobile_state`);if(e.mode!==`local`||!e.onDevice?.running)throw Error(`workspace_import_requires_local_runtime`);let t=await x(`mobile_import_workspace_directory`);if(t.path===null)return null;if(typeof t.path!=`string`||!t.path.startsWith(`/`))throw Error(`workspace_import_invalid_path`);return t.path}var w=t({WorkspacePicker:()=>E}),T=r();function E({open:e,initialPath:t=``,description:n,onOpenChange:r,onSelect:a,onCloseAutoFocus:x}){let{t:w}=i(),[E,D]=(0,b.useState)(t),[O,k]=(0,b.useState)(!1),[A,j]=(0,b.useState)(!1),[M,N]=(0,b.useState)(!1),[P,F]=(0,b.useState)(``),I=(0,b.useRef)(0),L=(0,b.useRef)(!1),R=O||A;(0,b.useEffect)(()=>{let n=++I.current;return L.current=!1,e&&(D(t),k(!1),j(!1),N(!1),F(``),window.__PISPER_MOBILE_PLATFORM__===`android`&&S().then(e=>{n===I.current&&N(e===`local`)},e=>{n===I.current&&F(e instanceof Error?e.message:String(e))})),()=>{I.current+=1}},[t,e]);let z=async()=>{if(L.current)return;L.current=!0;let e=I.current;j(!0),F(``);try{let t=await C();e===I.current&&t&&D(t)}catch(t){e===I.current&&F(t instanceof Error?t.message:String(t))}finally{e===I.current&&(L.current=!1,j(!1))}},B=async e=>{if(e.preventDefault(),L.current||!E.trim())return;L.current=!0;let t=I.current;k(!0),F(``);try{await a(E.trim()),t===I.current&&r(!1)}catch(e){t===I.current&&F(e instanceof Error?e.message:String(e))}finally{t===I.current&&(L.current=!1,k(!1))}};return(0,T.jsx)(h,{open:e,onOpenChange:e=>!L.current&&r(e),children:(0,T.jsxs)(d,{showCloseButton:!R,className:`sm:max-w-lg`,onCloseAutoFocus:x,children:[(0,T.jsxs)(m,{children:[(0,T.jsx)(f,{children:w(`common:workspacePicker.setWorkingDirectory`)}),(0,T.jsx)(u,{children:n||w(`common:workspacePicker.selectDirectoryDescription`)})]}),(0,T.jsxs)(`form`,{className:`flex min-w-0 flex-col gap-4`,onSubmit:e=>void B(e),children:[(0,T.jsxs)(`label`,{className:`flex min-w-0 flex-col gap-1.5 text-sm font-medium text-content`,children:[w(`common:workspacePicker.workingDirectoryPath`),(0,T.jsx)(g,{autoFocus:!0,className:`font-mono text-xs font-normal max-[650px]:h-11`,value:E,disabled:R,placeholder:w(`common:workspacePicker.enterAbsolutePath`),onChange:e=>D(e.target.value)})]}),M&&(0,T.jsxs)(l,{type:`button`,variant:`secondary`,className:`max-[650px]:h-11`,disabled:R,onClick:()=>void z(),children:[A?(0,T.jsx)(c,{className:`text-current`}):(0,T.jsx)(y,{}),w(A?`common:workspacePicker.importingFolder`:`common:workspacePicker.importFolderCopy`)]}),P&&(0,T.jsxs)(v,{variant:`destructive`,children:[(0,T.jsx)(s,{}),(0,T.jsx)(_,{className:`min-w-0 break-words`,children:P})]}),(0,T.jsxs)(p,{children:[(0,T.jsx)(l,{type:`button`,variant:`secondary`,size:`dialogAction`,disabled:R,onClick:()=>r(!1),children:w(`common:ui.cancel`)}),(0,T.jsxs)(l,{type:`submit`,size:`dialogAction`,disabled:R||!E.trim(),children:[O?(0,T.jsx)(c,{className:`text-current`}):(0,T.jsx)(o,{}),w(O?`common:workspacePicker.switching`:`common:workspacePicker.useThisFolder`)]})]})]})]})})}export{w as n,E as t};
1
+ import{a as e,r as t}from"./rolldown-runtime-B0Z9INg1.js";import{i as n,r}from"./vendor-react-DwNgTV1j.js";import{t as i}from"./use-i18n-AM3jlRYR.js";import{t as a}from"./createLucideIcon-Cd-3GVxJ.js";import{t as o}from"./check-2vYc6QaP.js";import{t as s}from"./triangle-alert-CE1q54ci.js";import{n as c,t as l}from"./button-CCcCN8tE.js";import{a as u,i as d,l as f,o as p,s as m,t as h}from"./dialog-BVAtioHy.js";import{t as g}from"./input-CPw-zkYh.js";import{n as _,t as v}from"./alert-DRIrgNI4.js";var y=a(`folder-input`,[[`path`,{d:`M2 9V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-1`,key:`fm4g5t`}],[`path`,{d:`M2 13h10`,key:`pgb2dq`}],[`path`,{d:`m9 16 3-3-3-3`,key:`6m91ic`}]]),b=e(n(),1);function x(e){let t=window.__TAURI__?.core?.invoke??window.__TAURI_INTERNALS__?.invoke;return t?t(e):Promise.reject(Error(`native bridge unavailable`))}async function S(){return window.__PISPER_MOBILE_APP__?(await x(`mobile_state`)).mode:null}async function C(){if(window.__PISPER_MOBILE_PLATFORM__!==`android`)throw Error(`workspace_import_unsupported`);let e=await x(`mobile_state`);if(e.mode!==`local`||!e.onDevice?.running)throw Error(`workspace_import_requires_local_runtime`);let t=await x(`mobile_import_workspace_directory`);if(t.path===null)return null;if(typeof t.path!=`string`||!t.path.startsWith(`/`))throw Error(`workspace_import_invalid_path`);return t.path}var w=t({WorkspacePicker:()=>E}),T=r();function E({open:e,initialPath:t=``,description:n,onOpenChange:r,onSelect:a,onCloseAutoFocus:x}){let{t:w}=i(),[E,D]=(0,b.useState)(t),[O,k]=(0,b.useState)(!1),[A,j]=(0,b.useState)(!1),[M,N]=(0,b.useState)(!1),[P,F]=(0,b.useState)(``),I=(0,b.useRef)(0),L=(0,b.useRef)(!1),R=O||A;(0,b.useEffect)(()=>{let n=++I.current;return L.current=!1,e&&(D(t),k(!1),j(!1),N(!1),F(``),window.__PISPER_MOBILE_PLATFORM__===`android`&&S().then(e=>{n===I.current&&N(e===`local`)},e=>{n===I.current&&F(e instanceof Error?e.message:String(e))})),()=>{I.current+=1}},[t,e]);let z=async()=>{if(L.current)return;L.current=!0;let e=I.current;j(!0),F(``);try{let t=await C();e===I.current&&t&&D(t)}catch(t){e===I.current&&F(t instanceof Error?t.message:String(t))}finally{e===I.current&&(L.current=!1,j(!1))}},B=async e=>{if(e.preventDefault(),L.current||!E.trim())return;L.current=!0;let t=I.current;k(!0),F(``);try{await a(E.trim()),t===I.current&&r(!1)}catch(e){t===I.current&&F(e instanceof Error?e.message:String(e))}finally{t===I.current&&(L.current=!1,k(!1))}};return(0,T.jsx)(h,{open:e,onOpenChange:e=>!L.current&&r(e),children:(0,T.jsxs)(d,{showCloseButton:!R,className:`sm:max-w-lg`,onCloseAutoFocus:x,children:[(0,T.jsxs)(m,{children:[(0,T.jsx)(f,{children:w(`common:workspacePicker.setWorkingDirectory`)}),(0,T.jsx)(u,{children:n||w(`common:workspacePicker.selectDirectoryDescription`)})]}),(0,T.jsxs)(`form`,{className:`flex min-w-0 flex-col gap-4`,onSubmit:e=>void B(e),children:[(0,T.jsxs)(`label`,{className:`flex min-w-0 flex-col gap-1.5 text-sm font-medium text-content`,children:[w(`common:workspacePicker.workingDirectoryPath`),(0,T.jsx)(g,{autoFocus:!0,className:`font-mono text-xs font-normal max-[650px]:h-11`,value:E,disabled:R,placeholder:w(`common:workspacePicker.enterAbsolutePath`),onChange:e=>D(e.target.value)})]}),M&&(0,T.jsxs)(l,{type:`button`,variant:`secondary`,className:`max-[650px]:h-11`,disabled:R,onClick:()=>void z(),children:[A?(0,T.jsx)(c,{className:`text-current`}):(0,T.jsx)(y,{}),w(A?`common:workspacePicker.importingFolder`:`common:workspacePicker.importFolderCopy`)]}),P&&(0,T.jsxs)(v,{variant:`destructive`,children:[(0,T.jsx)(s,{}),(0,T.jsx)(_,{className:`min-w-0 break-words`,children:P})]}),(0,T.jsxs)(p,{children:[(0,T.jsx)(l,{type:`button`,variant:`secondary`,size:`dialogAction`,disabled:R,onClick:()=>r(!1),children:w(`common:ui.cancel`)}),(0,T.jsxs)(l,{type:`submit`,size:`dialogAction`,disabled:R||!E.trim(),children:[O?(0,T.jsx)(c,{className:`text-current`}):(0,T.jsx)(o,{}),w(O?`common:workspacePicker.switching`:`common:workspacePicker.useThisFolder`)]})]})]})]})})}export{w as n,E as t};
@@ -1 +1 @@
1
- import{r as e,t}from"./abort-signal-f4JsiYKX.js";import{i as n}from"./http-response-PZN5QIRk.js";import{t as r}from"./event-stream-Dh7h5sXJ.js";import{n as i}from"./http-Bp65Kb4t.js";async function a(e,t={}){return i(e,t)}var o=5,s=400,c=`SSE 流在终态事件前结束`;function l(e,n){return new Promise((r,i)=>{if(n?.aborted){i(t(n));return}let a=()=>{clearTimeout(o),n&&i(t(n))},o=setTimeout(()=>{n?.removeEventListener(`abort`,a),r()},e);n?.addEventListener(`abort`,a,{once:!0})})}async function u({open:t,resume:i,onEvent:a,maxAttempts:u=o,baseDelayMs:d=s,signal:f}){let p=``,m=0,h=!1,g=null,_=async e=>{await r(e,(e,t,n)=>{if(n.id!=null){let e=Number(n.id);Number.isFinite(e)&&e>m&&(m=e)}let r=t;e===`run`&&typeof r?.runId==`string`&&(p=r.runId);try{let n=a(e,t);return(e===`done`||e===`error`||n===!1)&&(h=!0),n}catch(e){throw g=e,e}})},v=null;try{await _(await t())}catch(e){if(g)throw g;v=e}if(g)throw g;if(h)return;if(!p)throw v??Error(`流在建立运行前中断`);let y=0;for(;;){if(e(f),y+=1,y>u)throw v??Error(`流式连接中断且重挂失败`);await l(d*2**(y-1),f);let t=m;try{if(await _(await i(p,m)),g)throw g;if(!h)throw Error(c);return}catch(e){if(g)throw g;if(e instanceof n&&e.status===409)throw e;v=e,m>t&&(y=0)}}}function d(e,t){let n=String(e||``);if(!t)return n;let r=Math.max(0,Math.min(n.length,Number(t?.start)||0));return`${n.slice(0,r)}${String(t?.text||``)}`}export{d as n,u as r,a as t};
1
+ import{r as e,t}from"./abort-signal-f4JsiYKX.js";import{i as n}from"./http-response-scdqC11Q.js";import{t as r}from"./event-stream-B9eeQcgA.js";import{n as i}from"./http-CXQuFoDX.js";async function a(e,t={}){return i(e,t)}var o=5,s=400,c=`SSE 流在终态事件前结束`;function l(e,n){return new Promise((r,i)=>{if(n?.aborted){i(t(n));return}let a=()=>{clearTimeout(o),n&&i(t(n))},o=setTimeout(()=>{n?.removeEventListener(`abort`,a),r()},e);n?.addEventListener(`abort`,a,{once:!0})})}async function u({open:t,resume:i,onEvent:a,maxAttempts:u=o,baseDelayMs:d=s,signal:f}){let p=``,m=0,h=!1,g=null,_=async e=>{await r(e,(e,t,n)=>{if(n.id!=null){let e=Number(n.id);Number.isFinite(e)&&e>m&&(m=e)}let r=t;e===`run`&&typeof r?.runId==`string`&&(p=r.runId);try{let n=a(e,t);return(e===`done`||e===`error`||n===!1)&&(h=!0),n}catch(e){throw g=e,e}})},v=null;try{await _(await t())}catch(e){if(g)throw g;v=e}if(g)throw g;if(h)return;if(!p)throw v??Error(`流在建立运行前中断`);let y=0;for(;;){if(e(f),y+=1,y>u)throw v??Error(`流式连接中断且重挂失败`);await l(d*2**(y-1),f);let t=m;try{if(await _(await i(p,m)),g)throw g;if(!h)throw Error(c);return}catch(e){if(g)throw g;if(e instanceof n&&e.status===409)throw e;v=e,m>t&&(y=0)}}}function d(e,t){let n=String(e||``);if(!t)return n;let r=Math.max(0,Math.min(n.length,Number(t?.start)||0));return`${n.slice(0,r)}${String(t?.text||``)}`}export{d as n,u as r,a as t};
@@ -0,0 +1,34 @@
1
+ import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{h as t}from"./vendor-router-CSN_DGvx.js";import{t as n}from"./index-at6jiRd2.js";import{i as r}from"./vendor-react-DwNgTV1j.js";import{a as i,i as a,o}from"./vendor-state-GkUciC5H.js";import{t as s}from"./storage-DtvZ_lEu.js";function c(e){let t=String(e||``).trim().replace(/^#/,``);return/^[0-9a-fA-F]{6}$/.test(t)?`#${t.toLowerCase()}`:null}function l(e){return{r:parseInt(e.slice(1,3),16),g:parseInt(e.slice(3,5),16),b:parseInt(e.slice(5,7),16)}}function u({r:e,g:t,b:n}){let r=e=>Math.round(Math.min(255,Math.max(0,e))).toString(16).padStart(2,`0`);return`#${r(e)}${r(t)}${r(n)}`}function d(e,t,n){return u({r:e.r+(t.r-e.r)*n,g:e.g+(t.g-e.g)*n,b:e.b+(t.b-e.b)*n})}var f={r:255,g:255,b:255},p={r:24,g:24,b:27};function m({r:e,g:t,b:n},r){return`rgba(${e}, ${t}, ${n}, ${r})`}function h(e){let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4}function g({r:e,g:t,b:n}){return .2126*h(e)+.7152*h(t)+.0722*h(n)}function _(e,t){let n=g(e),r=g(t),i=Math.max(n,r),a=Math.min(n,r);return(i+.05)/(a+.05)}function v(e){return _(e,f)>=4.5?`#ffffff`:_(e,p)>=4.5?`#18181b`:`#000000`}function y(e,t,n){let r=l(t);return d(e,_(r,f)>_(r,p)?f:p,n)}function b(e){for(let t=.22;t<=1;t+=.04){let n=d(e,p,t);if(_(l(n),f)>=4.5)return n}return`#18181b`}function ee(e){for(let t=.46;t<=1;t+=.04){let n=d(e,f,t);if(_(l(n),p)>=4.5)return n}return`#fff`}function x(e){let t=l(e),n=v(t),r=y(t,n,.12),i=b(t),a=d(t,f,.93),o=d(t,f,.72),s=d(t,f,.22),c=ee(t),u=l(s),p=v(u),h=y(u,p,.14);return`:root[data-accent='custom'] {
2
+ --star: ${e};
3
+ --star-hover: ${r};
4
+ --star-strong: ${i};
5
+ --star-soft: ${a};
6
+ --star-border: ${o};
7
+ --on-accent: ${n};
8
+ --accent-fg: ${i};
9
+ --brand-blue: ${e};
10
+ --brand-blue-hover: ${r};
11
+ --brand-blue-strong: ${i};
12
+ --brand-blue-soft: ${a};
13
+ --brand-blue-border: ${o};
14
+ --accent-ring: ${m(t,.16)};
15
+ --focus: ${i};
16
+ --focus-ring: ${m(t,.18)};
17
+ }
18
+ :root[data-theme='dark'][data-accent='custom'] {
19
+ --star: ${s};
20
+ --star-hover: ${h};
21
+ --star-strong: ${c};
22
+ --star-soft: ${m(u,.15)};
23
+ --star-border: ${m(u,.38)};
24
+ --on-accent: ${p};
25
+ --accent-fg: ${c};
26
+ --brand-blue: ${s};
27
+ --brand-blue-hover: ${h};
28
+ --brand-blue-strong: ${c};
29
+ --brand-blue-soft: ${m(u,.15)};
30
+ --brand-blue-border: ${m(u,.34)};
31
+ --accent-ring: ${m(u,.22)};
32
+ --focus: ${c};
33
+ --focus-ring: ${m(u,.26)};
34
+ }`}var S={default:14,min:11,max:16},C={default:12,min:8,max:24},w={small:13.5,default:14,large:14.5};function T(e,t){return typeof e==`number`&&Number.isFinite(e)?Math.min(t.max,Math.max(t.min,e)):t.default}function E(e){let t=e&&typeof e==`object`?e:{},n=`fontScale`in t?t.fontScale:void 0,r=typeof n==`string`&&Object.hasOwn(w,n)?w[n]:S.default;return{uiFontSize:T(`uiFontSize`in t?t.uiFontSize:r,S),codeFontSize:T(`codeFontSize`in t?t.codeFontSize:void 0,C)}}function D(e){return e<S.default?`small`:e>S.default?`large`:`default`}function O(e,t){if(!/^\d+$/.test(e.trim()))return null;let n=Number(e),r=t===`ui`?S:C;return Number.isInteger(n)&&n>=r.min&&n<=r.max?n:null}var k={theme:`system`,density:`comfortable`,accent:`neutral`,customAccent:`#3d4bef`,fontScale:`default`,uiFontSize:S.default,codeFontSize:C.default,radius:`default`,motion:`system`},A=`blue`,j=[`system`,`dark`,`light`],M=[`system`,`scheduled`,`light`,`dark`];function N(e){return j[(j.indexOf(e)+1)%j.length]}function P(e){if(!e||typeof e!=`object`||Array.isArray(e))return{};let{sidebarCollapsed:t,sidebarWidth:n,...r}=e;return r}var F=o()(i(e=>({...k,setTheme:t=>e({theme:t}),cycleTheme:()=>e(e=>({theme:N(e.theme)})),setDensity:t=>e({density:t}),setAccent:t=>e({accent:t}),setCustomAccent:t=>e({accent:`custom`,customAccent:t}),setFontScale:t=>e({fontScale:t,uiFontSize:w[t]}),setUiFontSize:t=>{let{uiFontSize:n}=E({uiFontSize:t});e({uiFontSize:n,fontScale:D(n)})},setCodeFontSize:t=>e({codeFontSize:E({codeFontSize:t}).codeFontSize}),setRadius:t=>e({radius:t}),setMotion:t=>e({motion:t}),resetAppearance:()=>e(k)}),{name:`pisper-ui`,storage:a(()=>n),version:3,migrate:(e,t)=>{let n=P(e);return{...k,...n,...E(n),accent:t<3&&(n.accent===`neutral`||n.accent===void 0)?A:n.accent??k.accent,theme:t===0&&n.theme===`system`?`scheduled`:n.theme??`system`}},partialize:({theme:e,density:t,accent:n,customAccent:r,fontScale:i,uiFontSize:a,codeFontSize:o,radius:s,motion:c})=>({theme:e,density:t,accent:n,customAccent:r,fontScale:i,uiFontSize:a,codeFontSize:o,radius:s,motion:c}),merge:(e,t)=>{let n=e===void 0?void 0:P(e),r=localStorage.getItem(s.theme),i=localStorage.getItem(s.density);return{...t,...n,theme:n?.theme??(r===`system`?`scheduled`:M.includes(r)?r:t.theme),density:n?.density??(i===`compact`?`compact`:t.density),accent:n?.accent??t.accent,customAccent:n?.customAccent??t.customAccent,...E(n),fontScale:D(E(n).uiFontSize),radius:n?.radius??t.radius,motion:n?.motion??t.motion}}})),I=(0,e(r(),1).createContext)(null),te=`pisperNavigationId`;function L(e,t){return e.pathname!==t.pathname||e.search!==t.search}function R(e){let t=[...e];return{dirty:t.some(e=>e.dirty),saving:t.some(e=>e.saving)}}var z=[`chime`,`marimba`,`drop`,`bell`,`low`];function B(e){return z.some(t=>t===e)}var V=null,H=!1;function U(){if(typeof window>`u`)return null;let e=window;return e.AudioContext||e.webkitAudioContext||null}function W(){if(V)return V;let e=U();if(!e)return null;try{V=new e}catch{return null}return V}function G(){if(H||typeof window>`u`)return()=>{};H=!0;let e=()=>{let t=W();t&&t.state===`suspended`&&t.resume().catch(()=>{}),window.removeEventListener(`pointerdown`,e,!0),window.removeEventListener(`keydown`,e,!0)};return window.addEventListener(`pointerdown`,e,!0),window.addEventListener(`keydown`,e,!0),()=>{H=!1,window.removeEventListener(`pointerdown`,e,!0),window.removeEventListener(`keydown`,e,!0)}}function K(e,n=70){let r=W();r&&(r.state===`suspended`&&r.resume().catch(()=>{}),t(async()=>{let{synthesizeNotificationSound:e}=await import(`./notification-sound-synth-DIRfyEoK.js`);return{synthesizeNotificationSound:e}},[]).then(({synthesizeNotificationSound:t})=>t(r,e,n)).catch(()=>{}))}var q=[`waiting`,`finished`,`failed`],J=Object.freeze({enabled:!0,volume:70,whileFocused:!0,sounds:Object.freeze({waiting:`chime`,finished:`marimba`,failed:`low`})});function Y(e,t){return e===`none`||B(e)?e:t}function X(e){let t=J,n=e;if(typeof e==`string`)try{n=JSON.parse(e)}catch{n=null}let r=n&&typeof n==`object`&&!Array.isArray(n)?n:{},i=r.sounds&&typeof r.sounds==`object`&&!Array.isArray(r.sounds)?r.sounds:{},a=Number(r.volume);return{enabled:typeof r.enabled==`boolean`?r.enabled:t.enabled,volume:Number.isFinite(a)?Math.round(Math.max(0,Math.min(100,a))):t.volume,whileFocused:typeof r.whileFocused==`boolean`?r.whileFocused:t.whileFocused,sounds:{waiting:Y(i.waiting,t.sounds.waiting),finished:Y(i.finished,t.sounds.finished),failed:Y(i.failed,t.sounds.failed)}}}function Z(){try{return X(n.getItem(s.notificationSounds))}catch{return X(null)}}var ne=o((e,t)=>{let r=t=>{e(t);try{n.setItem(s.notificationSounds,JSON.stringify(t))}catch{}},i=()=>{let{enabled:e,volume:n,whileFocused:r,sounds:i}=t();return{enabled:e,volume:n,whileFocused:r,sounds:i}};return{...Z(),update:e=>r(X({...i(),...e})),setSound:(e,t)=>r(X({...i(),sounds:{...i().sounds,[e]:t}}))}});function Q(){return window.__TAURI__?.core?.invoke??window.__TAURI_INTERNALS__?.invoke}function re(){return typeof window<`u`&&!!Q()}function $(e,t){let n=Q();return n?n(e,t):Promise.reject(Error(`Tauri IPC is unavailable.`))}async function ie(){return $(`plugin:notification|is_permission_granted`)}async function ae(){return $(`plugin:notification|request_permission`)}async function oe(e,t){return $(`plugin:notification|notify`,{options:{title:e,body:t}})}var se=`https://github.com/ling-kong-ran/pisper/releases`,ce=`release`;export{c as C,x as S,F as _,oe as a,E as b,ne as c,K as d,te as f,k as g,R as h,ie as i,z as l,L as m,se as n,ae as o,I as p,re as r,q as s,ce as t,G as u,C as v,O as x,S 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{t as r}from"./use-i18n-BVRhlQ1v.js";import{t as i}from"./shield-alert-oZqX6MNu.js";import{t as a}from"./utils-C8uzG5AZ.js";import{t as o}from"./button-CCcCN8tE.js";import{t as s}from"./kbd-CAufZTkl.js";import{a as c,n as l,o as u,r as d,t as f}from"./sheet-BTaIEX4w.js";import{i as p,t as m}from"./card-presentation-1oph2b8P.js";import{a as h,i as g,l as _,o as v,s as y,t as b}from"./dialog-BDNbY1pW.js";import{t as x}from"./HoldToConfirmButton-BxdJ7icc.js";var S=e(t(),1),C=n();function w({target:e,phone:t,pending:n,error:w,onConfirm:T,onOpenChange:E}){let{t:D}=r(),O=!!e,[k,A]=(0,S.useState)(e);e&&e!==k&&A(e);let j=e??k,M=j?.approval??null,N=m(M),P=M?.severity===`critical`,F=D(P?`board:confirm.title`:`board:confirm.titleStandard`),I=M?P?p(M.reason)?D(`board:confirm.description`):D(`board:confirm.descriptionCritical`):D(`board:confirm.descriptionStandard`):D(`board:confirm.descriptionLoading`),L=e=>{e.defaultPrevented||e.key!==`Enter`||e.nativeEvent.isComposing||n||!M||e.target.closest(`[data-approval-cancel]`)||(e.preventDefault(),T())},R=e=>{let t=(e.currentTarget instanceof HTMLElement?e.currentTarget:null)?.querySelector(`[data-approval-hold]`);t&&(e.preventDefault(),t.focus())},z=j&&(0,C.jsxs)(`div`,{className:`grid min-w-0 gap-3 text-sm`,children:[(0,C.jsxs)(`dl`,{className:`grid min-w-0 grid-cols-[auto_minmax(0,1fr)] gap-x-3 gap-y-1.5 text-xs`,children:[(0,C.jsx)(`dt`,{className:`text-content-muted`,children:D(`board:confirm.session`)}),(0,C.jsx)(`dd`,{className:`min-w-0 truncate font-medium text-content`,children:j.title}),(0,C.jsx)(`dt`,{className:`text-content-muted`,children:D(`board:confirm.tool`)}),(0,C.jsx)(`dd`,{className:`min-w-0 truncate font-mono text-content`,children:M?.toolName||`—`}),(0,C.jsx)(`dt`,{className:`text-content-muted`,children:D(`board:confirm.cwd`)}),(0,C.jsx)(`dd`,{className:`min-w-0 font-mono wrap-anywhere text-content-secondary`,children:j.cwd||`—`})]}),M?.reason&&(0,C.jsxs)(`p`,{className:`flex min-w-0 items-start gap-2 rounded-sm border border-st-attn-border bg-st-attn-soft px-2.5 py-2 text-xs text-st-attn`,children:[(0,C.jsx)(i,{className:`mt-px size-3.5 flex-none`,"aria-hidden":`true`}),(0,C.jsx)(`span`,{className:`min-w-0 break-words`,children:M.reason})]}),M?(0,C.jsx)(`pre`,{"aria-label":D(`board:confirm.fullArgs`),className:`max-h-56 min-w-0 overflow-auto rounded-sm border border-well-stroke bg-well px-2.5 py-2 font-mono text-xs leading-5 whitespace-pre-wrap wrap-anywhere text-well-text`,children:N}):(0,C.jsx)(`p`,{role:`status`,className:`text-xs text-content-muted`,children:D(`board:confirm.loading`)}),w&&(0,C.jsx)(`p`,{role:`alert`,className:`text-xs text-st-fail`,children:w}),(0,C.jsx)(`p`,{id:`approval-hold-hint`,className:`flex items-center gap-1.5 text-xs text-content-muted`,children:t?D(`board:confirm.hintTouch`):(0,C.jsxs)(C.Fragment,{children:[D(`board:confirm.hint`),(0,C.jsx)(s,{children:`↵`})]})})]}),B=(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(o,{variant:`outline`,size:`dialogAction`,"data-approval-cancel":!0,className:a(t&&`min-h-11 flex-1`),onClick:()=>E(!1),children:D(`board:confirm.cancel`)}),(0,C.jsx)(x,{disabled:n||!M,onConfirm:T,enterPassesThrough:!0,"data-approval-hold":!0,"aria-describedby":`approval-hold-hint`,className:a(`min-h-9 px-4`,t&&`min-h-11 flex-1`),children:D(n?`board:confirm.approving`:`board:confirm.hold`)})]});return t?(0,C.jsx)(f,{open:O,onOpenChange:E,children:(0,C.jsxs)(l,{side:`bottom`,showCloseButton:!1,className:`max-h-[85dvh] gap-3 overflow-y-auto rounded-t-(--r-sheet) px-4 pt-2 pb-[calc(16px+var(--pisper-safe-area-bottom))]`,onKeyDown:L,onOpenAutoFocus:R,children:[(0,C.jsx)(`span`,{"aria-hidden":`true`,className:`mx-auto h-1 w-9 flex-none rounded-full bg-stroke-strong`}),(0,C.jsxs)(c,{className:`p-0`,children:[(0,C.jsx)(u,{children:F}),(0,C.jsx)(d,{children:I})]}),z,(0,C.jsx)(`div`,{className:`flex gap-2`,children:B})]})}):(0,C.jsx)(b,{open:O,onOpenChange:E,children:(0,C.jsxs)(g,{size:`wide`,onKeyDown:L,onOpenAutoFocus:R,children:[(0,C.jsxs)(y,{children:[(0,C.jsx)(_,{children:F}),(0,C.jsx)(h,{children:I})]}),z,(0,C.jsx)(v,{children:B})]})})}export{w as ApprovalConfirm};
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-AM3jlRYR.js";import{t as i}from"./shield-alert-oZqX6MNu.js";import{t as a}from"./utils-C8uzG5AZ.js";import{t as o}from"./button-CCcCN8tE.js";import{t as s}from"./kbd-CAufZTkl.js";import{a as c,n as l,o as u,r as d,t as f}from"./sheet-BTaIEX4w.js";import{i as p,t as m}from"./card-presentation-1oph2b8P.js";import{a as h,i as g,l as _,o as v,s as y,t as b}from"./dialog-BVAtioHy.js";import{t as x}from"./HoldToConfirmButton-BxdJ7icc.js";var S=e(t(),1),C=n();function w({target:e,phone:t,pending:n,error:w,onConfirm:T,onOpenChange:E}){let{t:D}=r(),O=!!e,[k,A]=(0,S.useState)(e);e&&e!==k&&A(e);let j=e??k,M=j?.approval??null,N=m(M),P=M?.severity===`critical`,F=D(P?`board:confirm.title`:`board:confirm.titleStandard`),I=M?P?p(M.reason)?D(`board:confirm.description`):D(`board:confirm.descriptionCritical`):D(`board:confirm.descriptionStandard`):D(`board:confirm.descriptionLoading`),L=e=>{e.defaultPrevented||e.key!==`Enter`||e.nativeEvent.isComposing||n||!M||e.target.closest(`[data-approval-cancel]`)||(e.preventDefault(),T())},R=e=>{let t=(e.currentTarget instanceof HTMLElement?e.currentTarget:null)?.querySelector(`[data-approval-hold]`);t&&(e.preventDefault(),t.focus())},z=j&&(0,C.jsxs)(`div`,{className:`grid min-w-0 gap-3 text-sm`,children:[(0,C.jsxs)(`dl`,{className:`grid min-w-0 grid-cols-[auto_minmax(0,1fr)] gap-x-3 gap-y-1.5 text-xs`,children:[(0,C.jsx)(`dt`,{className:`text-content-muted`,children:D(`board:confirm.session`)}),(0,C.jsx)(`dd`,{className:`min-w-0 truncate font-medium text-content`,children:j.title}),(0,C.jsx)(`dt`,{className:`text-content-muted`,children:D(`board:confirm.tool`)}),(0,C.jsx)(`dd`,{className:`min-w-0 truncate font-mono text-content`,children:M?.toolName||`—`}),(0,C.jsx)(`dt`,{className:`text-content-muted`,children:D(`board:confirm.cwd`)}),(0,C.jsx)(`dd`,{className:`min-w-0 font-mono wrap-anywhere text-content-secondary`,children:j.cwd||`—`})]}),M?.reason&&(0,C.jsxs)(`p`,{className:`flex min-w-0 items-start gap-2 rounded-sm border border-st-attn-border bg-st-attn-soft px-2.5 py-2 text-xs text-st-attn`,children:[(0,C.jsx)(i,{className:`mt-px size-3.5 flex-none`,"aria-hidden":`true`}),(0,C.jsx)(`span`,{className:`min-w-0 break-words`,children:M.reason})]}),M?(0,C.jsx)(`pre`,{"aria-label":D(`board:confirm.fullArgs`),className:`max-h-56 min-w-0 overflow-auto rounded-sm border border-well-stroke bg-well px-2.5 py-2 font-mono text-xs leading-5 whitespace-pre-wrap wrap-anywhere text-well-text`,children:N}):(0,C.jsx)(`p`,{role:`status`,className:`text-xs text-content-muted`,children:D(`board:confirm.loading`)}),w&&(0,C.jsx)(`p`,{role:`alert`,className:`text-xs text-st-fail`,children:w}),(0,C.jsx)(`p`,{id:`approval-hold-hint`,className:`flex items-center gap-1.5 text-xs text-content-muted`,children:t?D(`board:confirm.hintTouch`):(0,C.jsxs)(C.Fragment,{children:[D(`board:confirm.hint`),(0,C.jsx)(s,{children:`↵`})]})})]}),B=(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(o,{variant:`outline`,size:`dialogAction`,"data-approval-cancel":!0,className:a(t&&`min-h-11 flex-1`),onClick:()=>E(!1),children:D(`board:confirm.cancel`)}),(0,C.jsx)(x,{disabled:n||!M,onConfirm:T,enterPassesThrough:!0,"data-approval-hold":!0,"aria-describedby":`approval-hold-hint`,className:a(`min-h-9 px-4`,t&&`min-h-11 flex-1`),children:D(n?`board:confirm.approving`:`board:confirm.hold`)})]});return t?(0,C.jsx)(f,{open:O,onOpenChange:E,children:(0,C.jsxs)(l,{side:`bottom`,showCloseButton:!1,className:`max-h-[85dvh] gap-3 overflow-y-auto rounded-t-(--r-sheet) px-4 pt-2 pb-[calc(16px+var(--pisper-safe-area-bottom))]`,onKeyDown:L,onOpenAutoFocus:R,children:[(0,C.jsx)(`span`,{"aria-hidden":`true`,className:`mx-auto h-1 w-9 flex-none rounded-full bg-stroke-strong`}),(0,C.jsxs)(c,{className:`p-0`,children:[(0,C.jsx)(u,{children:F}),(0,C.jsx)(d,{children:I})]}),z,(0,C.jsx)(`div`,{className:`flex gap-2`,children:B})]})}):(0,C.jsx)(b,{open:O,onOpenChange:E,children:(0,C.jsxs)(g,{size:`wide`,onKeyDown:L,onOpenAutoFocus:R,children:[(0,C.jsxs)(y,{children:[(0,C.jsx)(_,{children:F}),(0,C.jsx)(h,{children:I})]}),z,(0,C.jsx)(v,{children:B})]})})}export{w as ApprovalConfirm};
@@ -1 +1 @@
1
- import{r as e}from"./workspace-order-store-C-jYrC0l.js";import{s as t}from"./useSessionListQuery-CURESPBn.js";import{n}from"./session-workspaces-Brm-8lHh.js";import{o as r}from"./card-presentation-1oph2b8P.js";function i(t,n){let r=e(n,t.map(e=>e.key)).map(e=>({...e,count:0}));return[...t,...r]}function a(t,i,a){let o=t.filter(e=>!e.machine).sort((e,t)=>(Date.parse(t.modified||``)||0)-(Date.parse(e.modified||``)||0)),s=n(o).filter(e=>e.key!==`\0`&&e.cwd);return[...e(i,s.map(e=>e.key)),...s.slice(0,12)].map(e=>({key:e.key,cwd:e.cwd,label:a[e.key]||r(e.cwd)}))}function o(e,t){return a(e,[],{})[0]?.cwd||t[0]?.cwd||``}function s(e,a,o,s,c){let l=n(e).map(e=>({key:e.key,cwd:e.cwd,count:e.sessions.length}));return t(i(l,a).map(e=>{let t=e.cwd?r(e.cwd):c,n=e.key===`\0`?``:o[e.key]||``;return{...e,label:n||t,folderLabel:t,custom:!!n}}),s)}export{i,s as n,a as r,o as t};
1
+ import{r as e}from"./workspace-order-store-C_t43Zgq.js";import{s as t}from"./useSessionListQuery-B4Xmcfwa.js";import{n}from"./session-workspaces-Brm-8lHh.js";import{o as r}from"./card-presentation-1oph2b8P.js";function i(t,n){let r=e(n,t.map(e=>e.key)).map(e=>({...e,count:0}));return[...t,...r]}function a(t,i,a){let o=t.filter(e=>!e.machine).sort((e,t)=>(Date.parse(t.modified||``)||0)-(Date.parse(e.modified||``)||0)),s=n(o).filter(e=>e.key!==`\0`&&e.cwd);return[...e(i,s.map(e=>e.key)),...s.slice(0,12)].map(e=>({key:e.key,cwd:e.cwd,label:a[e.key]||r(e.cwd)}))}function o(e,t){return a(e,[],{})[0]?.cwd||t[0]?.cwd||``}function s(e,a,o,s,c){let l=n(e).map(e=>({key:e.key,cwd:e.cwd,count:e.sessions.length}));return t(i(l,a).map(e=>{let t=e.cwd?r(e.cwd):c,n=e.key===`\0`?``:o[e.key]||``;return{...e,label:n||t,folderLabel:t,custom:!!n}}),s)}export{i,s as n,a as r,o as t};
@@ -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}from"./i18n-D80GstlU.js";import{o as r}from"./vendor-state-GkUciC5H.js";import{n as i}from"./startup-queries-BlA4Hayt.js";import{t as a}from"./http-response-PZN5QIRk.js";import{n as o}from"./http-Bp65Kb4t.js";import{a as s,o as ee}from"./BotAvatar-CNL-APwP.js";n.addResourceBundle(`zh-CN`,`bots`,{"sidebar.title":`Bots`,"sidebar.newBot":`新建 Bot`,"sidebar.showAll":`显示全部({count})`,"sidebar.showLess":`收起`,"activity.idle":`空闲`,"activity.paused":`已暂停`,"character.blob":`小圆`,"character.bean":`豆豆`,"character.robot":`机器人`,"character.cat":`小猫`,"character.owl":`猫头鹰`,"character.ghost":`小幽灵`,"character.cloud":`云朵`,"character.octo":`章鱼`,"character.bunny":`兔子`,"character.bear":`小熊`,"character.fox":`小狐`,"character.star":`星星`,"new.title":`新建 Bot`,"new.description":`起个名字就能开始。它负责什么可以现在写,也可以之后在对话里告诉它。`,"new.name":`名字`,"new.namePlaceholder":`例如:审查员`,"new.character":`角色`,"new.color":`颜色`,"new.colorOption":`颜色 {index}`,"new.pick":`选择…`,"new.cancel":`取消`,"new.create":`开始对话`,"new.creating":`正在创建…`,"page.disabledTitle":`Bots 还没打开`,"page.disabledDescription":`Bots 是实验功能,在设置 › 实验功能里打开后就能用。`,"page.openLabs":`去实验功能`,"page.loading":`正在读取…`,"page.notFound":`这个 Bot 不存在了`,"page.emptyTitle":`还没有 Bot`,"page.emptyDescription":`Bot 是常驻的同事:一个长期对话,你随时找它,聊天软件和定时任务也能找它。`,"details.instructions":`它负责什么`,"details.instructionsPlaceholder":`例如:你负责 pisper 仓库的 PR 审查;小问题直接改,其余只提建议;先跑 npm test 再下结论。`,"details.save":`保存`,"details.acceptsWork":`接收聊天与定时的消息`,"details.permission":`权限`,"details.modeApproval":`每一步都问我`,"details.modeWorkspace":`危险操作才问`,"details.modeFull":`完全访问`,"details.permissionHint":`它在这台电脑上自己改文件、跑命令,不限于起始目录。“危险操作才问”:只有命令守卫标出的危险命令、浏览器里的点击与填写、第三方插件才停下来问你。能在群聊里叫它时不能选完全访问。`,"computer.description":`它在这台电脑上读写代码、跑命令。可以换成另一台运行 pisper executor 的电脑。`,"computer.runsOn":`运行在`,"computer.local":`本机`,"activity.approval":`等你批准一个操作`,"activity.question":`有问题问你`,"details.tools":`可用工具`,"details.toolsAll":`全部工具`,"details.toolsReadOnly":`只读`,"details.toolsCustom":`自定义({count} 个)`,"details.toolsHint":`只读:能读代码、搜索,不能改文件、不能跑命令。范围外的工具在执行前就会被拦下。`,"computer.unnamed":`未命名的电脑`,"computer.online":`在线`,"computer.offline":`离线`,"computer.option":`{name}({state})`,"computer.folder":`起始目录`,"computer.folderPlaceholder":`/path/to/repo`,"computer.folderInRoots":`必须在这台电脑允许的目录里:{roots}`,"computer.switch":`换到这里`,"computer.listTitle":`电脑`,"computer.usedBy":`{names} 在用`,"computer.remove":`移除`,"computer.confirmRemove":`确定移除`,"computer.cancel":`取消`,"computer.add":`添加电脑`,"computer.addTitle":`添加一台电脑`,"computer.done":`完成`,"computer.code":`配对码`,"computer.codeHint":`10 分钟内有效,只能用一次`,"computer.remoteOff":`先打开远程访问,那台电脑才连得上这里。`,"computer.openRemote":`打开远程访问`,"computer.runThere":`在那台电脑上运行(把目录换成允许 Bot 读写的代码目录,可以写多个 --root):`,"computer.rootPlaceholder":`~/code`,"computer.rootHint":`那台电脑只需要 Node.js,不需要模型密钥。`,"computer.copy":`复制命令`,"computer.copied":`已复制`,"computer.brainPlaceholder":`https://<这台电脑的远程访问地址>`,"triggers.chats":`可以叫它的聊天`,"triggers.chatsHint":`在这些聊天里发“/{name} 要做的事”或“@Pisper {name} 要做的事”就能叫它。聊天与人的 ID 在聊天里发 /whoami 查看。`,"triggers.p2p":`私聊`,"triggers.group":`群聊`,"triggers.peers":`聊天 {ids}`,"triggers.allPeers":`所有聊天`,"triggers.senders":`{ids} 能叫它`,"triggers.ownerOnly":`只有你能叫它`,"triggers.remove":`删除`,"triggers.platform":`渠道`,"triggers.peerIds":`聊天 ID`,"triggers.peerIdsPlaceholder":`聊天 ID,多个用逗号分开;不填表示所有聊天`,"triggers.senderIds":`谁能叫它`,"triggers.senderIdsPlaceholder":`谁能叫它(ID,逗号分开);不填只有你`,"triggers.senderIdsRequired":`谁能叫它(ID,逗号分开);群聊必须填写`,"triggers.cancel":`取消`,"triggers.add":`添加`,"triggers.addChat":`添加聊天`,"triggers.feishu":`飞书`,"triggers.weixin":`微信`,"triggers.qq":`QQ`,"triggers.telegram":`Telegram`,"triggers.schedules":`定时让它做`,"triggers.scheduleEnabled":`启用这个定时`,"triggers.scheduleMessage":`要做的事`,"triggers.scheduleMessagePlaceholder":`例如:检查依赖有没有安全更新`,"triggers.frequency":`频率`,"triggers.daily":`每天`,"triggers.weekly":`每周`,"triggers.once":`一次`,"triggers.weekday":`星期`,"triggers.date":`日期`,"triggers.time":`时间`,"triggers.addSchedule":`添加定时`,"triggers.monday":`周一`,"triggers.tuesday":`周二`,"triggers.wednesday":`周三`,"triggers.thursday":`周四`,"triggers.friday":`周五`,"triggers.saturday":`周六`,"triggers.sunday":`周日`,"triggers.onceAt":`{date} {time} 一次`,"triggers.weeklyAt":`每{day} {time}`,"triggers.dailyAt":`每天 {time}`,"triggers.otherSchedule":`按定时任务页里的设置`,"new.shuffle":`换一个样子`,"new.chooseLook":`自己挑样子`,"new.duty":`它负责什么(可选)`,"new.dutyPlaceholder":`例如:审查 pisper 仓库的 PR;小问题直接改,其余只提建议。`,"new.folder":`起始目录`,"new.folderDefault":`不填就从默认工作目录开始`,"new.folderSummary":`从本机的默认工作目录开始干活。`,"new.changeFolder":`换个目录`,"settings.changeLook":`换个样子`,"settings.doneLook":`选好了`,"settings.computer":`电脑`,"settings.computerSummary":`{computer} · {folder}`,"settings.chatsCount":`{count} 个聊天`,"settings.notSet":`未设置`,"settings.advanced":`高级`,"settings.advancedSummary":`权限:{permission} · 工具、暂停`,"activity.busy":`正在忙`,"settingsPage.backToChat":`和 {name} 聊天`,"settingsPage.title":`{name} 的设置`,"model.title":`模型`,"model.summary":`{model} · 思考:{thinking}`,"model.model":`模型`,"model.thinking":`思考`,"model.hint":`它的会话用这里的模型和思考等级,改了下一轮生效。档位跟着“设置 › 子代理”里的模型档位走。`,"model.tierFast":`快速档`,"model.tierStandard":`标准档`,"model.tierStrong":`强档`,"model.thinkingDefault":`模型默认`,"model.thinkingOff":`关闭`,"model.thinkingMinimal":`极轻`,"model.thinkingLow":`轻度`,"model.thinkingMedium":`标准`,"model.thinkingHigh":`深度`,"model.thinkingXhigh":`极深`,"activity.working":`{count} 件在做`,"activity.workingOn":`{count} 件在做 · 在做:{task}`,"memory.title":`记忆`,"memory.count":`{count} 条`,"memory.hint":`{name} 自己记得的事:你让它记住的、你纠正过的、做完一件活学到的。和当前这件事相关的会自动带上,它派出去的子 agent 也一样。`,"memory.readGlobal":`读取全局记忆`,"memory.readGlobalHint":`只读你的长期偏好,不写入。Bot 之间互相看不到。`,"memory.empty":`{name} 还没记住什么`,"memory.edit":`改这一条`,"memory.editLabel":`改这条记忆`,"memory.delete":`删掉这一条`,"memory.save":`保存`,"memory.cancel":`取消`,"memory.add":`记下`,"memory.addLabel":`加一条记忆`,"memory.addPlaceholder":`例如:发版前要在 iPhone 上点一遍首页`,"skills.title":`它学会的`,"skills.count":`{count} 个技能`,"skills.hint":`{name} 做完一件活会复盘:会反复做的事,它把做法写成自己的技能,之后派出去的子 agent 都带着;你纠正过的做法也会更新进去。`,"skills.empty":`{name} 还没学会什么`,"skills.loading":`正在读取…`,"skills.delete":`删掉这个技能`,"skills.schedule":`设成定时`,"skills.scheduleMessage":`照技能 {name} 做一遍`,"proactive.title":`主动`,"proactive.off":`关着`,"proactive.summaryCheck":`每 {count} 小时巡看`,"proactive.summaryBrief":`每天 {time} 简报`,"proactive.check":`空闲时自己巡看`,"proactive.every":`多久一次`,"proactive.everyHours":`每 {count} 小时`,"proactive.checkHint":`{name} 手上没活时,按它负责的东西只读看一遍(读文件、搜索,不改东西、不跑命令、不往外发消息),发现写成对话里的一条建议,你说“做吧”它才去做。`,"proactive.brief":`每天写一份简报`,"proactive.briefAt":`什么时候`,"proactive.briefHint":`过去一天做了什么、今天排了什么、有什么建议,写在它的对话里。`,"details.parallel":`同时做几件`,"details.parallelCount":`{count} 件`,"details.parallelHint":`它同时派出去干活的子 agent 最多几个,多的排队。`,"greeting.hello":`你好,我是{name}`,"greeting.duty":`我记下了:{duty}`,"greeting.editDuty":`改`,"greeting.ask":`想让我帮你做什么?选一个,或者直接告诉我。`,"greeting.talk":`有事直接告诉我。`,"greeting.brief":`每天给我一份简报`,"greeting.briefHint":`到点告诉你过去一天做了什么、今天有什么安排,每天都会消耗模型用量`,"greeting.briefWhen":`每天几点给你简报?`,"greeting.briefNote":`如果今天已经过了这个时间,会马上写今天这份。`,"greeting.briefConfirm":`好`,"greeting.briefOn":`每天 {time} 给你简报`,"greeting.briefOnHint":`每天都会消耗模型用量,点一下改时间`,"greeting.watch":`帮我盯一个项目`,"greeting.watchHint":`默认每 {count} 小时只读看一遍,每次都消耗模型用量`,"greeting.watchWhen":`多久看一遍?`,"greeting.watchNote":`选好目录后马上看第一遍,之后在我空闲时按这个频率看。只读,不改东西、不跑命令。每次都会调用模型、消耗用量,随时可以在设置里关。`,"greeting.watchConfirm":`选择目录并开始`,"greeting.watchDuty":`盯着这个项目,发现问题告诉我。`,"greeting.folder":`告诉我项目在哪`,"greeting.folderHint":`现在在 {folder},选个目录我就换过去`,"greeting.folderWatchHint":`现在在 {folder}。每 {count} 小时看一遍,每次都消耗模型用量,可在设置里关`,"greeting.chats":`在聊天软件里找我`,"greeting.chatsHint":`连上飞书、微信、QQ 或 Telegram,直接叫我`,"greeting.chatsOn":`已连上 {count} 个聊天`,"greeting.chatsOnHint":`点一下管理`}),n.addResourceBundle(`en-US`,`bots`,{"sidebar.title":`Bots`,"sidebar.newBot":`New Bot`,"sidebar.showAll":`Show all ({count})`,"sidebar.showLess":`Show less`,"activity.idle":`Idle`,"activity.paused":`Paused`,"character.blob":`Blob`,"character.bean":`Bean`,"character.robot":`Robot`,"character.cat":`Cat`,"character.owl":`Owl`,"character.ghost":`Ghost`,"character.cloud":`Cloud`,"character.octo":`Octopus`,"character.bunny":`Bunny`,"character.bear":`Bear`,"character.fox":`Fox`,"character.star":`Star`,"new.title":`New Bot`,"new.description":`A name is all it needs. Say what it’s responsible for now, or tell it later in the chat.`,"new.name":`Name`,"new.namePlaceholder":`e.g. Reviewer`,"new.character":`Character`,"new.color":`Color`,"new.colorOption":`Color {index}`,"new.pick":`Choose…`,"new.cancel":`Cancel`,"new.create":`Start chatting`,"new.creating":`Creating…`,"page.disabledTitle":`Bots are turned off`,"page.disabledDescription":`Bots is a Labs feature. Turn it on in Settings › Labs.`,"page.openLabs":`Open Labs`,"page.loading":`Loading…`,"page.notFound":`This Bot no longer exists`,"page.emptyTitle":`No Bots yet`,"page.emptyDescription":`A Bot is a teammate that's always around: one long conversation you can pick up anytime, and chats and schedules can reach it too.`,"details.instructions":`What it’s responsible for`,"details.instructionsPlaceholder":`e.g. You review PRs in the pisper repo; fix small issues directly, otherwise only suggest; run npm test before concluding.`,"details.save":`Save`,"details.acceptsWork":`Take messages from chats and schedules`,"details.permission":`Permission`,"details.modeApproval":`Ask before every step`,"details.modeWorkspace":`Ask only if risky`,"details.modeFull":`Full access`,"details.permissionHint":`It edits files and runs commands on this computer on its own, not only in the starting folder. “Ask only if risky”: it stops to ask only for commands the guard flags as dangerous, clicks and typing in the browser, and third-party plugins. Bots you can call from a group chat can’t use full access.`,"computer.description":`It reads and writes code and runs commands on this computer. You can switch it to another computer running pisper executor.`,"computer.runsOn":`Runs on`,"computer.local":`This computer`,"activity.approval":`Waiting for your approval`,"activity.question":`Has a question for you`,"details.tools":`Tools`,"details.toolsAll":`All tools`,"details.toolsReadOnly":`Read only`,"details.toolsCustom":`Custom ({count})`,"details.toolsHint":`Read only: it can read and search code but not edit files or run commands. Tools outside the scope are blocked before they run.`,"computer.unnamed":`Unnamed computer`,"computer.online":`online`,"computer.offline":`offline`,"computer.option":`{name} ({state})`,"computer.folder":`Starting folder`,"computer.folderPlaceholder":`/path/to/repo`,"computer.folderInRoots":`Must be inside a folder this computer allows: {roots}`,"computer.switch":`Switch here`,"computer.listTitle":`Computers`,"computer.usedBy":`Used by {names}`,"computer.remove":`Remove`,"computer.confirmRemove":`Yes, remove`,"computer.cancel":`Cancel`,"computer.add":`Add a computer`,"computer.addTitle":`Add a computer`,"computer.done":`Done`,"computer.code":`Pairing code`,"computer.codeHint":`valid for 10 minutes, single use`,"computer.remoteOff":`Turn on remote access first so the other computer can reach this one.`,"computer.openRemote":`Open remote access`,"computer.runThere":`Run this on that computer (replace the folder with the code folder Bots may use; repeat --root for more):`,"computer.rootPlaceholder":`~/code`,"computer.rootHint":`That computer only needs Node.js, no model keys.`,"computer.copy":`Copy commands`,"computer.copied":`Copied`,"computer.brainPlaceholder":`https://<remote-access-address-of-this-computer>`,"triggers.chats":`Chats that can call it`,"triggers.chatsHint":`In these chats, send “/{name} what to do” or “@Pisper {name} what to do”. Send /whoami in a chat to see its IDs.`,"triggers.p2p":`Direct`,"triggers.group":`Group`,"triggers.peers":`chats {ids}`,"triggers.allPeers":`all chats`,"triggers.senders":`{ids} can call it`,"triggers.ownerOnly":`only you can call it`,"triggers.remove":`Remove`,"triggers.platform":`Channel`,"triggers.peerIds":`Chat IDs`,"triggers.peerIdsPlaceholder":`Chat IDs, comma separated; empty means all chats`,"triggers.senderIds":`Who can call it`,"triggers.senderIdsPlaceholder":`Who can call it (IDs, comma separated); empty means only you`,"triggers.senderIdsRequired":`Who can call it (IDs, comma separated); required for groups`,"triggers.cancel":`Cancel`,"triggers.add":`Add`,"triggers.addChat":`Add a chat`,"triggers.feishu":`Feishu`,"triggers.weixin":`WeChat`,"triggers.qq":`QQ`,"triggers.telegram":`Telegram`,"triggers.schedules":`On a schedule`,"triggers.scheduleEnabled":`Schedule on`,"triggers.scheduleMessage":`What to do`,"triggers.scheduleMessagePlaceholder":`e.g. Check dependencies for security updates`,"triggers.frequency":`Frequency`,"triggers.daily":`Daily`,"triggers.weekly":`Weekly`,"triggers.once":`Once`,"triggers.weekday":`Day`,"triggers.date":`Date`,"triggers.time":`Time`,"triggers.addSchedule":`Add a schedule`,"triggers.monday":`Monday`,"triggers.tuesday":`Tuesday`,"triggers.wednesday":`Wednesday`,"triggers.thursday":`Thursday`,"triggers.friday":`Friday`,"triggers.saturday":`Saturday`,"triggers.sunday":`Sunday`,"triggers.onceAt":`Once on {date} at {time}`,"triggers.weeklyAt":`Every {day} at {time}`,"triggers.dailyAt":`Daily at {time}`,"triggers.otherSchedule":`As set on the Schedules page`,"new.shuffle":`Try another look`,"new.chooseLook":`Pick a look`,"new.duty":`What it’s responsible for (optional)`,"new.dutyPlaceholder":`e.g. Review PRs in the pisper repo; fix small issues, otherwise only suggest.`,"new.folder":`Starting folder`,"new.folderDefault":`Leave empty to start in the default working folder`,"new.folderSummary":`Starts in the default working folder on this computer.`,"new.changeFolder":`Change folder`,"settings.changeLook":`Change look`,"settings.doneLook":`Done`,"settings.computer":`Computer`,"settings.computerSummary":`{computer} · {folder}`,"settings.chatsCount":`{count} chats`,"settings.notSet":`Not set`,"settings.advanced":`Advanced`,"settings.advancedSummary":`Permission: {permission} · tools, pause`,"activity.busy":`Busy`,"settingsPage.backToChat":`Chat with {name}`,"settingsPage.title":`{name} settings`,"model.title":`Model`,"model.summary":`{model} · thinking: {thinking}`,"model.model":`Model`,"model.thinking":`Thinking`,"model.hint":`Its session uses this model and thinking level; changes apply from the next turn. Tiers follow the model tiers in Settings › Subagents.`,"model.tierFast":`Fast tier`,"model.tierStandard":`Standard tier`,"model.tierStrong":`Strong tier`,"model.thinkingDefault":`Model default`,"model.thinkingOff":`Off`,"model.thinkingMinimal":`Minimal`,"model.thinkingLow":`Low`,"model.thinkingMedium":`Medium`,"model.thinkingHigh":`High`,"model.thinkingXhigh":`Extra high`,"activity.working":`{count} in progress`,"activity.workingOn":`{count} in progress · now: {task}`,"memory.title":`Memory`,"memory.count":`{count} items`,"memory.hint":`What {name} remembers: what you asked it to remember, your corrections, and lessons from finished work. Whatever relates to the task at hand comes along automatically, also for sub-agents it hands work to.`,"memory.readGlobal":`Read global memory`,"memory.readGlobalHint":`Read-only access to your long-term preferences. Bots cannot see each other's memory.`,"memory.empty":`{name} has not remembered anything yet`,"memory.edit":`Edit`,"memory.editLabel":`Edit this memory`,"memory.delete":`Delete`,"memory.save":`Save`,"memory.cancel":`Cancel`,"memory.add":`Add`,"memory.addLabel":`Add a memory`,"memory.addPlaceholder":`e.g. Check the home page on an iPhone before each release`,"skills.title":`What it learned`,"skills.count":`{count} skills`,"skills.hint":`{name} reviews each finished job: work it will do again gets written down as its own skill, and every sub-agent it hands work to carries its skills. Your corrections update them too.`,"skills.empty":`{name} has not learned anything yet`,"skills.loading":`Loading…`,"skills.delete":`Delete this skill`,"skills.schedule":`Put on a schedule`,"skills.scheduleMessage":`Do it once following skill {name}`,"proactive.title":`Proactive`,"proactive.off":`Off`,"proactive.summaryCheck":`Checks every {count} h`,"proactive.summaryBrief":`Daily brief at {time}`,"proactive.check":`Check on things when idle`,"proactive.every":`How often`,"proactive.everyHours":`Every {count} h`,"proactive.checkHint":`When {name} has nothing to do, it looks over what it is responsible for, read-only (reads and searches files; no edits, no commands, no outgoing messages). Findings become a suggestion in its conversation; it only starts work when you say so.`,"proactive.brief":`Write a daily brief`,"proactive.briefAt":`When`,"proactive.briefHint":`What was done in the last day, what is scheduled today and any suggestions, written in its conversation.`,"details.parallel":`Jobs at once`,"details.parallelCount":`{count}`,"details.parallelHint":`How many sub-agents it runs at the same time; the rest wait in line.`,"greeting.hello":`Hi, I'm {name}`,"greeting.duty":`Noted: {duty}`,"greeting.editDuty":`Edit`,"greeting.ask":`What should I help with? Pick one, or just tell me.`,"greeting.talk":`Just tell me what you need.`,"greeting.brief":`Send me a daily brief`,"greeting.briefHint":`What happened over the past day and what's planned for today. Uses model quota every day`,"greeting.briefWhen":`What time should the brief arrive?`,"greeting.briefNote":`If this time has already passed today, I'll write today's brief right away.`,"greeting.briefConfirm":`OK`,"greeting.briefOn":`Daily brief at {time}`,"greeting.briefOnHint":`Uses model quota every day. Click to change the time`,"greeting.watch":`Keep an eye on a project`,"greeting.watchHint":`Read-only look every {count} h by default. Each look uses model quota`,"greeting.watchWhen":`How often should I look?`,"greeting.watchNote":`I'll take the first look as soon as you pick a folder, then at this interval whenever I'm idle. Read-only: no edits, no commands. Each look calls the model and uses quota. You can turn it off in settings at any time.`,"greeting.watchConfirm":`Pick a folder and start`,"greeting.watchDuty":`Keep an eye on this project and tell me about any problems.`,"greeting.folder":`Show me where the project is`,"greeting.folderHint":`Currently in {folder}. Pick a folder and I'll move there`,"greeting.folderWatchHint":`Currently in {folder}. Looks every {count} h, each using model quota. Turn off in settings`,"greeting.chats":`Reach me in chat apps`,"greeting.chatsHint":`Connect Feishu, WeChat, QQ or Telegram and call me from there`,"greeting.chatsOn":`Connected chats: {count}`,"greeting.chatsOnHint":`Click to manage`});var c=[`read`,`grep`,`find`,`ls`];function l(e){if(e===null)return`all`;let t=[...e].sort();return t.length===c.length&&[...c].sort().every((e,n)=>t[n]===e)?`read-only`:`custom`}function u(e){return e.split(/[\\/]/).filter(Boolean).at(-1)||e}var d=80;function f(e){let t=e.replace(/\s+/g,` `).trim(),n=[...t];return n.length>d?`${n.slice(0,d).join(``)}…`:t}function p(e,{expanded:t,currentId:n}){let r=e=>e.activity?.needsYou?0:e.activity?.status===`running`?1:2,i=e.map((e,t)=>({bot:e,index:t})).sort((e,t)=>r(e.bot)-r(t.bot)||e.index-t.index).map(e=>e.bot);if(t||i.length<=3)return{shown:i,hidden:0};let a=i.filter((e,t)=>t<3||n!==void 0&&e.id===n);return{shown:a,hidden:i.length-a.length}}function m(e){return e.activity?.needsYou?`need`:e.activity?.status===`running`?`running`:`idle`}function h(e,t){if(!t.enabled)return e(`bots:activity.paused`);let n=t.activity,r=n?.working?n.current?e(`bots:activity.workingOn`,{count:n.working,task:n.current}):e(`bots:activity.working`,{count:n.working}):``;return n?.waiting===`approval`?r?`${e(`bots:activity.approval`)} · ${r}`:e(`bots:activity.approval`):n?.waiting===`question`?r?`${e(`bots:activity.question`)} · ${r}`:e(`bots:activity.question`):r||(n?.status===`running`?e(`bots:activity.busy`):e(`bots:activity.idle`))}var g=e(t(),1),_=[`fast`,`standard`,`strong`],v=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],y=[1,3,6,12,24];function b(e){let t=e&&typeof e==`object`?e:{},n=y.find(e=>e===t.everyHours)??6;return{enabled:t.enabled===!0,everyHours:n,brief:t.brief===!0,briefAt:typeof t.briefAt==`string`&&/^\d{2}:\d{2}$/.test(t.briefAt)?t.briefAt:`09:00`}}var x=[`feishu`,`weixin`,`qq`,`telegram`];function te(e){return Array.isArray(e)?e.flatMap(e=>{let t=e&&typeof e==`object`?e:{};if(!x.includes(t.platform))return[];let n=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[];return[{platform:t.platform,chatType:t.chatType===`group`?`group`:`p2p`,peerIds:Array.isArray(t.peerIds)?n(t.peerIds):null,senderIds:n(t.senderIds)}]}):[]}function S(e){if(!e||typeof e!=`object`||Array.isArray(e))throw a();return e}function C(e,t=``){return typeof e==`string`?e:t}function w(e){if(!e||typeof e!=`object`)return null;let t=e,n=t.waiting===`approval`||t.waiting===`question`?t.waiting:null,r=Number(t.working);return{status:t.status===`running`?`running`:`idle`,waiting:n,needsYou:t.needsYou===!0||n!==null,working:Number.isInteger(r)&&r>0?r:0,current:typeof t.current==`string`?t.current.slice(0,120):``}}function T(e){let t=S(e),n=S(t.avatar??{}),r=S(t.workspace??{});if(typeof t.id!=`string`||typeof t.name!=`string`)throw a();return{id:t.id,name:t.name,avatar:{character:s(n.character)?n.character:`blob`,color:ee(n.color)?n.color:`blue`},enabled:t.enabled!==!1,instructions:C(t.instructions),executionMode:t.executionMode===`workspace-write`||t.executionMode===`full-access`?t.executionMode:`approval-required`,model:E(t.model),thinking:v.find(e=>e===t.thinking)??null,channels:te(t.channels),tools:Array.isArray(t.tools)?t.tools.filter(e=>typeof e==`string`):null,workspace:{environmentId:C(r.environmentId,`local`),cwd:C(r.cwd)},threadSessionId:C(t.threadSessionId),activity:w(t.activity),maxParallelAgents:Number.isInteger(t.maxParallelAgents)&&Number(t.maxParallelAgents)>=1&&Number(t.maxParallelAgents)<=6?Number(t.maxParallelAgents):3,readGlobalMemory:t.readGlobalMemory!==!1,proactive:b(t.proactive)}}function E(e){let t=S(e??{});return typeof t.ref==`string`&&t.ref.includes(`/`)?{ref:t.ref}:{tier:_.find(e=>e===t.tier)??`standard`}}async function D(){let e=S(await i(`config`));return(Array.isArray(e.providers)?e.providers:[]).flatMap(e=>{let t=S(e);if(typeof t.id!=`string`||!t.configured||t.enabled===!1)return[];let n=C(t.name,t.id);return(Array.isArray(t.models)?t.models:[]).flatMap(e=>{let r=S(e);return typeof r.id!=`string`||r.kind!==`chat`?[]:[{ref:`${t.id}/${r.id}`,name:C(r.name,r.id),providerName:n}]})})}function O(e,t){return n=>t(S(n)[e])}function k(e){return o(`/api/bots`,{signal:e,parse:e=>{let t=S(e).bots;if(!Array.isArray(t))throw a();return t.map(T)}})}function A(e){return o(`/api/bots`,{method:`POST`,data:e,parse:O(`bot`,T)})}function j(e,t){return o(`/api/bots/${encodeURIComponent(e)}`,{method:`PATCH`,data:t,parse:O(`bot`,T)})}function M(e){return o(`/api/bots/${encodeURIComponent(e)}/session`,{method:`POST`,data:{},parse:e=>{let t=S(e).sessionId;if(typeof t!=`string`||!t)throw a();return t}})}function N(e){let t=e&&typeof e==`object`?e:{};return{enabled:t.enabled===!0,endpoints:Array.isArray(t.endpoints)?t.endpoints.filter(e=>typeof e==`string`&&/^https:\/\//.test(e)):[],fingerprint:typeof t.fingerprint==`string`?t.fingerprint:null}}function P(e){let t=S(e);if(typeof t.id!=`string`||!t.id)throw a();let n=t.capabilities&&typeof t.capabilities==`object`?t.capabilities:{};return{id:t.id,kind:t.kind===`node`?`node`:`local`,name:C(t.name),online:t.online===!0,roots:Array.isArray(t.roots)?t.roots.filter(e=>typeof e==`string`):[],shell:n.shell===!0,usedBy:Array.isArray(t.usedBy)?t.usedBy.flatMap(e=>{let t=e&&typeof e==`object`?e:{};return typeof t.id==`string`&&typeof t.name==`string`?[{id:t.id,name:t.name}]:[]}):[],lastSeenAt:typeof t.lastSeenAt==`string`?t.lastSeenAt:null}}function F(e){return o(`/api/environments`,{signal:e,parse:e=>{let t=S(e);if(!Array.isArray(t.environments))throw a();return{environments:t.environments.map(P),remote:N(t.remote)}}})}function I(){return o(`/api/environments/pairing`,{method:`POST`,data:{},parse:e=>{let t=S(e),n=S(t.pairing);if(typeof n.code!=`string`)throw a();return{code:n.code,expiresAt:C(n.expiresAt),remote:N(t.remote)}}})}function L(e){return o(`/api/environments/${encodeURIComponent(e)}`,{method:`DELETE`,parse:()=>void 0})}function ne(e,t){let n=S(e).tasks;if(!Array.isArray(n))throw a();return n.flatMap(e=>{let n=e&&typeof e==`object`?e:{};if(n.targetType!==`bot`||n.botId!==t||typeof n.id!=`string`)return[];let r=[`once`,`interval`,`daily`,`weekly`,`monthly`].includes(String(n.frequency))?n.frequency:`daily`;return[{id:n.id,enabled:n.enabled!==!1,botMessage:C(n.botMessage),frequency:r,time:C(n.time),date:C(n.date),dayOfWeek:Number(n.dayOfWeek)||0,nextRunAt:typeof n.nextRunAt==`string`?n.nextRunAt:null}]})}function R(e,t){return o(`/api/schedules`,{signal:t,parse:t=>ne(t,e)})}function z(e){return o(`/api/schedules`,{method:`POST`,data:{...e,targetType:`bot`,enabled:!0},parse:()=>void 0})}function B(e,t){return o(`/api/schedules/${encodeURIComponent(e)}`,{method:`PATCH`,data:{enabled:t},parse:()=>void 0})}function V(e){return o(`/api/schedules/${encodeURIComponent(e)}`,{method:`DELETE`,parse:()=>void 0})}var H=[`told`,`correction`,`review`,`proactive`,`manual`,`tidy`];function U(e){if(!e||typeof e!=`object`)return null;let t=e;return typeof t.id!=`string`||typeof t.text!=`string`||!t.text?null:{id:t.id,text:t.text.slice(0,500),source:H.find(e=>e===t.source)??`told`,updatedAt:C(t.updatedAt)}}function W(e){let t=U(S(e).entry);if(!t)throw a();return t}function G(e,t){return o(`/api/bots/${encodeURIComponent(e)}/memory`,{signal:t,parse:e=>{let t=S(e).entries;return Array.isArray(t)?t.map(U).filter(e=>!!e):[]}})}function K(e,t){return o(`/api/bots/${encodeURIComponent(e)}/memory`,{method:`POST`,data:{text:t},parse:W})}function q(e,t,n){return o(`/api/bots/${encodeURIComponent(e)}/memory/${encodeURIComponent(t)}`,{method:`PATCH`,data:{text:n},parse:W})}function J(e,t){return o(`/api/bots/${encodeURIComponent(e)}/memory/${encodeURIComponent(t)}`,{method:`DELETE`,parse:()=>void 0})}function Y(e){let t=S(e);return typeof t.name!=`string`||!t.name?null:{name:t.name.slice(0,64),description:C(t.description).slice(0,1024),updatedAt:C(t.updatedAt)}}function X(e,t){return o(`/api/bots/${encodeURIComponent(e)}/skills`,{signal:t,parse:e=>{let t=S(e).skills;return Array.isArray(t)?t.map(Y).filter(e=>!!e):[]}})}function Z(e,t,n){return o(`/api/bots/${encodeURIComponent(e)}/skills/${encodeURIComponent(t)}`,{signal:n,parse:e=>{let t=S(S(e).skill),n=Y(t);if(!n)throw Error(`Invalid skill response.`);return{...n,body:C(t.body).slice(0,2e4)}}})}function re(e,t){return o(`/api/bots/${encodeURIComponent(e)}/skills/${encodeURIComponent(t)}`,{method:`DELETE`,parse:()=>void 0})}var Q=null,$=r()((e,t)=>({bots:[],loaded:!1,error:``,load:()=>(Q??=k().then(t=>e({bots:t,loaded:!0,error:``})).catch(t=>e({loaded:!0,error:t instanceof Error?t.message:String(t)})).finally(()=>{Q=null}),Q),upsert:n=>{let r=t().bots;e({bots:r.findIndex(e=>e.id===n.id)<0?[...r,n]:r.map(e=>e.id===n.id?{...n,activity:e.activity}:e)})}}));function ie(e){let t=$(e=>e.load),n=$(e=>e.bots.some(e=>e.activity?.status===`running`));(0,g.useEffect)(()=>{if(!e)return;t();let r=window.setInterval(()=>{document.visibilityState===`visible`&&t()},n?3e3:1e4);return()=>window.clearInterval(r)},[e,n,t])}export{l as A,B as C,m as D,h as E,f as O,L as S,c as T,R as _,y as a,F as b,A as c,J as d,V as f,D as g,G as h,x as i,p as j,u as k,z as l,q as m,$ as n,v as o,re as p,_ as r,K as s,ie as t,I as u,Z as v,j as w,M as x,X as y};
1
+ import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t}from"./vendor-react-DwNgTV1j.js";import{c as n}from"./i18n-D5XUOwJ3.js";import{o as r}from"./vendor-state-GkUciC5H.js";import{n as i}from"./startup-queries-BpV9-ykp.js";import{t as a}from"./http-response-scdqC11Q.js";import{n as o}from"./http-CXQuFoDX.js";import{a as s,o as ee}from"./BotAvatar-CNL-APwP.js";n.addResourceBundle(`zh-CN`,`bots`,{"sidebar.title":`Bots`,"sidebar.newBot":`新建 Bot`,"sidebar.showAll":`显示全部({count})`,"sidebar.showLess":`收起`,"activity.idle":`空闲`,"activity.paused":`已暂停`,"character.blob":`小圆`,"character.bean":`豆豆`,"character.robot":`机器人`,"character.cat":`小猫`,"character.owl":`猫头鹰`,"character.ghost":`小幽灵`,"character.cloud":`云朵`,"character.octo":`章鱼`,"character.bunny":`兔子`,"character.bear":`小熊`,"character.fox":`小狐`,"character.star":`星星`,"new.title":`新建 Bot`,"new.description":`起个名字就能开始。它负责什么可以现在写,也可以之后在对话里告诉它。`,"new.name":`名字`,"new.namePlaceholder":`例如:审查员`,"new.character":`角色`,"new.color":`颜色`,"new.colorOption":`颜色 {index}`,"new.pick":`选择…`,"new.cancel":`取消`,"new.create":`开始对话`,"new.creating":`正在创建…`,"page.disabledTitle":`Bots 还没打开`,"page.disabledDescription":`Bots 是实验功能,在设置 › 实验功能里打开后就能用。`,"page.openLabs":`去实验功能`,"page.loading":`正在读取…`,"page.notFound":`这个 Bot 不存在了`,"page.emptyTitle":`还没有 Bot`,"page.emptyDescription":`Bot 是常驻的同事:一个长期对话,你随时找它,聊天软件和定时任务也能找它。`,"details.instructions":`它负责什么`,"details.instructionsPlaceholder":`例如:你负责 pisper 仓库的 PR 审查;小问题直接改,其余只提建议;先跑 npm test 再下结论。`,"details.save":`保存`,"details.acceptsWork":`接收聊天与定时的消息`,"details.permission":`权限`,"details.modeApproval":`每一步都问我`,"details.modeWorkspace":`危险操作才问`,"details.modeFull":`完全访问`,"details.permissionHint":`它在这台电脑上自己改文件、跑命令,不限于起始目录。“危险操作才问”:只有命令守卫标出的危险命令、浏览器里的点击与填写、第三方插件才停下来问你。能在群聊里叫它时不能选完全访问。`,"computer.description":`它在这台电脑上读写代码、跑命令。可以换成另一台运行 pisper executor 的电脑。`,"computer.runsOn":`运行在`,"computer.local":`本机`,"activity.approval":`等你批准一个操作`,"activity.question":`有问题问你`,"details.tools":`可用工具`,"details.toolsAll":`全部工具`,"details.toolsReadOnly":`只读`,"details.toolsCustom":`自定义({count} 个)`,"details.toolsHint":`只读:能读代码、搜索,不能改文件、不能跑命令。范围外的工具在执行前就会被拦下。`,"computer.unnamed":`未命名的电脑`,"computer.online":`在线`,"computer.offline":`离线`,"computer.option":`{name}({state})`,"computer.folder":`起始目录`,"computer.folderPlaceholder":`/path/to/repo`,"computer.folderInRoots":`必须在这台电脑允许的目录里:{roots}`,"computer.switch":`换到这里`,"computer.listTitle":`电脑`,"computer.usedBy":`{names} 在用`,"computer.remove":`移除`,"computer.confirmRemove":`确定移除`,"computer.cancel":`取消`,"computer.add":`添加电脑`,"computer.addTitle":`添加一台电脑`,"computer.done":`完成`,"computer.code":`配对码`,"computer.codeHint":`10 分钟内有效,只能用一次`,"computer.remoteOff":`先打开远程访问,那台电脑才连得上这里。`,"computer.openRemote":`打开远程访问`,"computer.runThere":`在那台电脑上运行(把目录换成允许 Bot 读写的代码目录,可以写多个 --root):`,"computer.rootPlaceholder":`~/code`,"computer.rootHint":`那台电脑只需要 Node.js,不需要模型密钥。`,"computer.copy":`复制命令`,"computer.copied":`已复制`,"computer.brainPlaceholder":`https://<这台电脑的远程访问地址>`,"triggers.chats":`可以叫它的聊天`,"triggers.chatsHint":`在这些聊天里发“/{name} 要做的事”或“@Pisper {name} 要做的事”就能叫它。聊天与人的 ID 在聊天里发 /whoami 查看。`,"triggers.p2p":`私聊`,"triggers.group":`群聊`,"triggers.peers":`聊天 {ids}`,"triggers.allPeers":`所有聊天`,"triggers.senders":`{ids} 能叫它`,"triggers.ownerOnly":`只有你能叫它`,"triggers.remove":`删除`,"triggers.platform":`渠道`,"triggers.peerIds":`聊天 ID`,"triggers.peerIdsPlaceholder":`聊天 ID,多个用逗号分开;不填表示所有聊天`,"triggers.senderIds":`谁能叫它`,"triggers.senderIdsPlaceholder":`谁能叫它(ID,逗号分开);不填只有你`,"triggers.senderIdsRequired":`谁能叫它(ID,逗号分开);群聊必须填写`,"triggers.cancel":`取消`,"triggers.add":`添加`,"triggers.addChat":`添加聊天`,"triggers.feishu":`飞书`,"triggers.weixin":`微信`,"triggers.qq":`QQ`,"triggers.telegram":`Telegram`,"triggers.schedules":`定时让它做`,"triggers.scheduleEnabled":`启用这个定时`,"triggers.scheduleMessage":`要做的事`,"triggers.scheduleMessagePlaceholder":`例如:检查依赖有没有安全更新`,"triggers.frequency":`频率`,"triggers.daily":`每天`,"triggers.weekly":`每周`,"triggers.once":`一次`,"triggers.weekday":`星期`,"triggers.date":`日期`,"triggers.time":`时间`,"triggers.addSchedule":`添加定时`,"triggers.monday":`周一`,"triggers.tuesday":`周二`,"triggers.wednesday":`周三`,"triggers.thursday":`周四`,"triggers.friday":`周五`,"triggers.saturday":`周六`,"triggers.sunday":`周日`,"triggers.onceAt":`{date} {time} 一次`,"triggers.weeklyAt":`每{day} {time}`,"triggers.dailyAt":`每天 {time}`,"triggers.otherSchedule":`按定时任务页里的设置`,"new.shuffle":`换一个样子`,"new.chooseLook":`自己挑样子`,"new.duty":`它负责什么(可选)`,"new.dutyPlaceholder":`例如:审查 pisper 仓库的 PR;小问题直接改,其余只提建议。`,"new.folder":`起始目录`,"new.folderDefault":`不填就从默认工作目录开始`,"new.folderSummary":`从本机的默认工作目录开始干活。`,"new.changeFolder":`换个目录`,"settings.changeLook":`换个样子`,"settings.doneLook":`选好了`,"settings.computer":`电脑`,"settings.computerSummary":`{computer} · {folder}`,"settings.chatsCount":`{count} 个聊天`,"settings.notSet":`未设置`,"settings.advanced":`高级`,"settings.advancedSummary":`权限:{permission} · 工具、暂停`,"activity.busy":`正在忙`,"settingsPage.backToChat":`和 {name} 聊天`,"settingsPage.title":`{name} 的设置`,"model.title":`模型`,"model.summary":`{model} · 思考:{thinking}`,"model.model":`模型`,"model.thinking":`思考`,"model.hint":`它的会话用这里的模型和思考等级,改了下一轮生效。档位跟着“设置 › 子代理”里的模型档位走。`,"model.tierFast":`快速档`,"model.tierStandard":`标准档`,"model.tierStrong":`强档`,"model.thinkingDefault":`模型默认`,"model.thinkingOff":`关闭`,"model.thinkingMinimal":`极轻`,"model.thinkingLow":`轻度`,"model.thinkingMedium":`标准`,"model.thinkingHigh":`深度`,"model.thinkingXhigh":`极深`,"activity.working":`{count} 件在做`,"activity.workingOn":`{count} 件在做 · 在做:{task}`,"memory.title":`记忆`,"memory.count":`{count} 条`,"memory.hint":`{name} 自己记得的事:你让它记住的、你纠正过的、做完一件活学到的。和当前这件事相关的会自动带上,它派出去的子 agent 也一样。`,"memory.readGlobal":`读取全局记忆`,"memory.readGlobalHint":`只读你的长期偏好,不写入。Bot 之间互相看不到。`,"memory.empty":`{name} 还没记住什么`,"memory.edit":`改这一条`,"memory.editLabel":`改这条记忆`,"memory.delete":`删掉这一条`,"memory.save":`保存`,"memory.cancel":`取消`,"memory.add":`记下`,"memory.addLabel":`加一条记忆`,"memory.addPlaceholder":`例如:发版前要在 iPhone 上点一遍首页`,"skills.title":`它学会的`,"skills.count":`{count} 个技能`,"skills.hint":`{name} 做完一件活会复盘:会反复做的事,它把做法写成自己的技能,之后派出去的子 agent 都带着;你纠正过的做法也会更新进去。`,"skills.empty":`{name} 还没学会什么`,"skills.loading":`正在读取…`,"skills.delete":`删掉这个技能`,"skills.schedule":`设成定时`,"skills.scheduleMessage":`照技能 {name} 做一遍`,"proactive.title":`主动`,"proactive.off":`关着`,"proactive.summaryCheck":`每 {count} 小时巡看`,"proactive.summaryBrief":`每天 {time} 简报`,"proactive.check":`空闲时自己巡看`,"proactive.every":`多久一次`,"proactive.everyHours":`每 {count} 小时`,"proactive.checkHint":`{name} 手上没活时,按它负责的东西只读看一遍(读文件、搜索,不改东西、不跑命令、不往外发消息),发现写成对话里的一条建议,你说“做吧”它才去做。`,"proactive.brief":`每天写一份简报`,"proactive.briefAt":`什么时候`,"proactive.briefHint":`过去一天做了什么、今天排了什么、有什么建议,写在它的对话里。`,"details.parallel":`同时做几件`,"details.parallelCount":`{count} 件`,"details.parallelHint":`它同时派出去干活的子 agent 最多几个,多的排队。`,"greeting.hello":`你好,我是{name}`,"greeting.duty":`我记下了:{duty}`,"greeting.editDuty":`改`,"greeting.ask":`想让我帮你做什么?选一个,或者直接告诉我。`,"greeting.talk":`有事直接告诉我。`,"greeting.brief":`每天给我一份简报`,"greeting.briefHint":`到点告诉你过去一天做了什么、今天有什么安排,每天都会消耗模型用量`,"greeting.briefWhen":`每天几点给你简报?`,"greeting.briefNote":`如果今天已经过了这个时间,会马上写今天这份。`,"greeting.briefConfirm":`好`,"greeting.briefOn":`每天 {time} 给你简报`,"greeting.briefOnHint":`每天都会消耗模型用量,点一下改时间`,"greeting.watch":`帮我盯一个项目`,"greeting.watchHint":`默认每 {count} 小时只读看一遍,每次都消耗模型用量`,"greeting.watchWhen":`多久看一遍?`,"greeting.watchNote":`选好目录后马上看第一遍,之后在我空闲时按这个频率看。只读,不改东西、不跑命令。每次都会调用模型、消耗用量,随时可以在设置里关。`,"greeting.watchConfirm":`选择目录并开始`,"greeting.watchDuty":`盯着这个项目,发现问题告诉我。`,"greeting.folder":`告诉我项目在哪`,"greeting.folderHint":`现在在 {folder},选个目录我就换过去`,"greeting.folderWatchHint":`现在在 {folder}。每 {count} 小时看一遍,每次都消耗模型用量,可在设置里关`,"greeting.chats":`在聊天软件里找我`,"greeting.chatsHint":`连上飞书、微信、QQ 或 Telegram,直接叫我`,"greeting.chatsOn":`已连上 {count} 个聊天`,"greeting.chatsOnHint":`点一下管理`}),n.addResourceBundle(`en-US`,`bots`,{"sidebar.title":`Bots`,"sidebar.newBot":`New Bot`,"sidebar.showAll":`Show all ({count})`,"sidebar.showLess":`Show less`,"activity.idle":`Idle`,"activity.paused":`Paused`,"character.blob":`Blob`,"character.bean":`Bean`,"character.robot":`Robot`,"character.cat":`Cat`,"character.owl":`Owl`,"character.ghost":`Ghost`,"character.cloud":`Cloud`,"character.octo":`Octopus`,"character.bunny":`Bunny`,"character.bear":`Bear`,"character.fox":`Fox`,"character.star":`Star`,"new.title":`New Bot`,"new.description":`A name is all it needs. Say what it’s responsible for now, or tell it later in the chat.`,"new.name":`Name`,"new.namePlaceholder":`e.g. Reviewer`,"new.character":`Character`,"new.color":`Color`,"new.colorOption":`Color {index}`,"new.pick":`Choose…`,"new.cancel":`Cancel`,"new.create":`Start chatting`,"new.creating":`Creating…`,"page.disabledTitle":`Bots are turned off`,"page.disabledDescription":`Bots is a Labs feature. Turn it on in Settings › Labs.`,"page.openLabs":`Open Labs`,"page.loading":`Loading…`,"page.notFound":`This Bot no longer exists`,"page.emptyTitle":`No Bots yet`,"page.emptyDescription":`A Bot is a teammate that's always around: one long conversation you can pick up anytime, and chats and schedules can reach it too.`,"details.instructions":`What it’s responsible for`,"details.instructionsPlaceholder":`e.g. You review PRs in the pisper repo; fix small issues directly, otherwise only suggest; run npm test before concluding.`,"details.save":`Save`,"details.acceptsWork":`Take messages from chats and schedules`,"details.permission":`Permission`,"details.modeApproval":`Ask before every step`,"details.modeWorkspace":`Ask only if risky`,"details.modeFull":`Full access`,"details.permissionHint":`It edits files and runs commands on this computer on its own, not only in the starting folder. “Ask only if risky”: it stops to ask only for commands the guard flags as dangerous, clicks and typing in the browser, and third-party plugins. Bots you can call from a group chat can’t use full access.`,"computer.description":`It reads and writes code and runs commands on this computer. You can switch it to another computer running pisper executor.`,"computer.runsOn":`Runs on`,"computer.local":`This computer`,"activity.approval":`Waiting for your approval`,"activity.question":`Has a question for you`,"details.tools":`Tools`,"details.toolsAll":`All tools`,"details.toolsReadOnly":`Read only`,"details.toolsCustom":`Custom ({count})`,"details.toolsHint":`Read only: it can read and search code but not edit files or run commands. Tools outside the scope are blocked before they run.`,"computer.unnamed":`Unnamed computer`,"computer.online":`online`,"computer.offline":`offline`,"computer.option":`{name} ({state})`,"computer.folder":`Starting folder`,"computer.folderPlaceholder":`/path/to/repo`,"computer.folderInRoots":`Must be inside a folder this computer allows: {roots}`,"computer.switch":`Switch here`,"computer.listTitle":`Computers`,"computer.usedBy":`Used by {names}`,"computer.remove":`Remove`,"computer.confirmRemove":`Yes, remove`,"computer.cancel":`Cancel`,"computer.add":`Add a computer`,"computer.addTitle":`Add a computer`,"computer.done":`Done`,"computer.code":`Pairing code`,"computer.codeHint":`valid for 10 minutes, single use`,"computer.remoteOff":`Turn on remote access first so the other computer can reach this one.`,"computer.openRemote":`Open remote access`,"computer.runThere":`Run this on that computer (replace the folder with the code folder Bots may use; repeat --root for more):`,"computer.rootPlaceholder":`~/code`,"computer.rootHint":`That computer only needs Node.js, no model keys.`,"computer.copy":`Copy commands`,"computer.copied":`Copied`,"computer.brainPlaceholder":`https://<remote-access-address-of-this-computer>`,"triggers.chats":`Chats that can call it`,"triggers.chatsHint":`In these chats, send “/{name} what to do” or “@Pisper {name} what to do”. Send /whoami in a chat to see its IDs.`,"triggers.p2p":`Direct`,"triggers.group":`Group`,"triggers.peers":`chats {ids}`,"triggers.allPeers":`all chats`,"triggers.senders":`{ids} can call it`,"triggers.ownerOnly":`only you can call it`,"triggers.remove":`Remove`,"triggers.platform":`Channel`,"triggers.peerIds":`Chat IDs`,"triggers.peerIdsPlaceholder":`Chat IDs, comma separated; empty means all chats`,"triggers.senderIds":`Who can call it`,"triggers.senderIdsPlaceholder":`Who can call it (IDs, comma separated); empty means only you`,"triggers.senderIdsRequired":`Who can call it (IDs, comma separated); required for groups`,"triggers.cancel":`Cancel`,"triggers.add":`Add`,"triggers.addChat":`Add a chat`,"triggers.feishu":`Feishu`,"triggers.weixin":`WeChat`,"triggers.qq":`QQ`,"triggers.telegram":`Telegram`,"triggers.schedules":`On a schedule`,"triggers.scheduleEnabled":`Schedule on`,"triggers.scheduleMessage":`What to do`,"triggers.scheduleMessagePlaceholder":`e.g. Check dependencies for security updates`,"triggers.frequency":`Frequency`,"triggers.daily":`Daily`,"triggers.weekly":`Weekly`,"triggers.once":`Once`,"triggers.weekday":`Day`,"triggers.date":`Date`,"triggers.time":`Time`,"triggers.addSchedule":`Add a schedule`,"triggers.monday":`Monday`,"triggers.tuesday":`Tuesday`,"triggers.wednesday":`Wednesday`,"triggers.thursday":`Thursday`,"triggers.friday":`Friday`,"triggers.saturday":`Saturday`,"triggers.sunday":`Sunday`,"triggers.onceAt":`Once on {date} at {time}`,"triggers.weeklyAt":`Every {day} at {time}`,"triggers.dailyAt":`Daily at {time}`,"triggers.otherSchedule":`As set on the Schedules page`,"new.shuffle":`Try another look`,"new.chooseLook":`Pick a look`,"new.duty":`What it’s responsible for (optional)`,"new.dutyPlaceholder":`e.g. Review PRs in the pisper repo; fix small issues, otherwise only suggest.`,"new.folder":`Starting folder`,"new.folderDefault":`Leave empty to start in the default working folder`,"new.folderSummary":`Starts in the default working folder on this computer.`,"new.changeFolder":`Change folder`,"settings.changeLook":`Change look`,"settings.doneLook":`Done`,"settings.computer":`Computer`,"settings.computerSummary":`{computer} · {folder}`,"settings.chatsCount":`{count} chats`,"settings.notSet":`Not set`,"settings.advanced":`Advanced`,"settings.advancedSummary":`Permission: {permission} · tools, pause`,"activity.busy":`Busy`,"settingsPage.backToChat":`Chat with {name}`,"settingsPage.title":`{name} settings`,"model.title":`Model`,"model.summary":`{model} · thinking: {thinking}`,"model.model":`Model`,"model.thinking":`Thinking`,"model.hint":`Its session uses this model and thinking level; changes apply from the next turn. Tiers follow the model tiers in Settings › Subagents.`,"model.tierFast":`Fast tier`,"model.tierStandard":`Standard tier`,"model.tierStrong":`Strong tier`,"model.thinkingDefault":`Model default`,"model.thinkingOff":`Off`,"model.thinkingMinimal":`Minimal`,"model.thinkingLow":`Low`,"model.thinkingMedium":`Medium`,"model.thinkingHigh":`High`,"model.thinkingXhigh":`Extra high`,"activity.working":`{count} in progress`,"activity.workingOn":`{count} in progress · now: {task}`,"memory.title":`Memory`,"memory.count":`{count} items`,"memory.hint":`What {name} remembers: what you asked it to remember, your corrections, and lessons from finished work. Whatever relates to the task at hand comes along automatically, also for sub-agents it hands work to.`,"memory.readGlobal":`Read global memory`,"memory.readGlobalHint":`Read-only access to your long-term preferences. Bots cannot see each other's memory.`,"memory.empty":`{name} has not remembered anything yet`,"memory.edit":`Edit`,"memory.editLabel":`Edit this memory`,"memory.delete":`Delete`,"memory.save":`Save`,"memory.cancel":`Cancel`,"memory.add":`Add`,"memory.addLabel":`Add a memory`,"memory.addPlaceholder":`e.g. Check the home page on an iPhone before each release`,"skills.title":`What it learned`,"skills.count":`{count} skills`,"skills.hint":`{name} reviews each finished job: work it will do again gets written down as its own skill, and every sub-agent it hands work to carries its skills. Your corrections update them too.`,"skills.empty":`{name} has not learned anything yet`,"skills.loading":`Loading…`,"skills.delete":`Delete this skill`,"skills.schedule":`Put on a schedule`,"skills.scheduleMessage":`Do it once following skill {name}`,"proactive.title":`Proactive`,"proactive.off":`Off`,"proactive.summaryCheck":`Checks every {count} h`,"proactive.summaryBrief":`Daily brief at {time}`,"proactive.check":`Check on things when idle`,"proactive.every":`How often`,"proactive.everyHours":`Every {count} h`,"proactive.checkHint":`When {name} has nothing to do, it looks over what it is responsible for, read-only (reads and searches files; no edits, no commands, no outgoing messages). Findings become a suggestion in its conversation; it only starts work when you say so.`,"proactive.brief":`Write a daily brief`,"proactive.briefAt":`When`,"proactive.briefHint":`What was done in the last day, what is scheduled today and any suggestions, written in its conversation.`,"details.parallel":`Jobs at once`,"details.parallelCount":`{count}`,"details.parallelHint":`How many sub-agents it runs at the same time; the rest wait in line.`,"greeting.hello":`Hi, I'm {name}`,"greeting.duty":`Noted: {duty}`,"greeting.editDuty":`Edit`,"greeting.ask":`What should I help with? Pick one, or just tell me.`,"greeting.talk":`Just tell me what you need.`,"greeting.brief":`Send me a daily brief`,"greeting.briefHint":`What happened over the past day and what's planned for today. Uses model quota every day`,"greeting.briefWhen":`What time should the brief arrive?`,"greeting.briefNote":`If this time has already passed today, I'll write today's brief right away.`,"greeting.briefConfirm":`OK`,"greeting.briefOn":`Daily brief at {time}`,"greeting.briefOnHint":`Uses model quota every day. Click to change the time`,"greeting.watch":`Keep an eye on a project`,"greeting.watchHint":`Read-only look every {count} h by default. Each look uses model quota`,"greeting.watchWhen":`How often should I look?`,"greeting.watchNote":`I'll take the first look as soon as you pick a folder, then at this interval whenever I'm idle. Read-only: no edits, no commands. Each look calls the model and uses quota. You can turn it off in settings at any time.`,"greeting.watchConfirm":`Pick a folder and start`,"greeting.watchDuty":`Keep an eye on this project and tell me about any problems.`,"greeting.folder":`Show me where the project is`,"greeting.folderHint":`Currently in {folder}. Pick a folder and I'll move there`,"greeting.folderWatchHint":`Currently in {folder}. Looks every {count} h, each using model quota. Turn off in settings`,"greeting.chats":`Reach me in chat apps`,"greeting.chatsHint":`Connect Feishu, WeChat, QQ or Telegram and call me from there`,"greeting.chatsOn":`Connected chats: {count}`,"greeting.chatsOnHint":`Click to manage`});var c=[`read`,`grep`,`find`,`ls`];function l(e){if(e===null)return`all`;let t=[...e].sort();return t.length===c.length&&[...c].sort().every((e,n)=>t[n]===e)?`read-only`:`custom`}function u(e){return e.split(/[\\/]/).filter(Boolean).at(-1)||e}var d=80;function f(e){let t=e.replace(/\s+/g,` `).trim(),n=[...t];return n.length>d?`${n.slice(0,d).join(``)}…`:t}function p(e,{expanded:t,currentId:n}){let r=e=>e.activity?.needsYou?0:e.activity?.status===`running`?1:2,i=e.map((e,t)=>({bot:e,index:t})).sort((e,t)=>r(e.bot)-r(t.bot)||e.index-t.index).map(e=>e.bot);if(t||i.length<=3)return{shown:i,hidden:0};let a=i.filter((e,t)=>t<3||n!==void 0&&e.id===n);return{shown:a,hidden:i.length-a.length}}function m(e){return e.activity?.needsYou?`need`:e.activity?.status===`running`?`running`:`idle`}function h(e,t){if(!t.enabled)return e(`bots:activity.paused`);let n=t.activity,r=n?.working?n.current?e(`bots:activity.workingOn`,{count:n.working,task:n.current}):e(`bots:activity.working`,{count:n.working}):``;return n?.waiting===`approval`?r?`${e(`bots:activity.approval`)} · ${r}`:e(`bots:activity.approval`):n?.waiting===`question`?r?`${e(`bots:activity.question`)} · ${r}`:e(`bots:activity.question`):r||(n?.status===`running`?e(`bots:activity.busy`):e(`bots:activity.idle`))}var g=e(t(),1),_=[`fast`,`standard`,`strong`],v=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],y=[1,3,6,12,24];function b(e){let t=e&&typeof e==`object`?e:{},n=y.find(e=>e===t.everyHours)??6;return{enabled:t.enabled===!0,everyHours:n,brief:t.brief===!0,briefAt:typeof t.briefAt==`string`&&/^\d{2}:\d{2}$/.test(t.briefAt)?t.briefAt:`09:00`}}var x=[`feishu`,`weixin`,`qq`,`telegram`];function te(e){return Array.isArray(e)?e.flatMap(e=>{let t=e&&typeof e==`object`?e:{};if(!x.includes(t.platform))return[];let n=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[];return[{platform:t.platform,chatType:t.chatType===`group`?`group`:`p2p`,peerIds:Array.isArray(t.peerIds)?n(t.peerIds):null,senderIds:n(t.senderIds)}]}):[]}function S(e){if(!e||typeof e!=`object`||Array.isArray(e))throw a();return e}function C(e,t=``){return typeof e==`string`?e:t}function w(e){if(!e||typeof e!=`object`)return null;let t=e,n=t.waiting===`approval`||t.waiting===`question`?t.waiting:null,r=Number(t.working);return{status:t.status===`running`?`running`:`idle`,waiting:n,needsYou:t.needsYou===!0||n!==null,working:Number.isInteger(r)&&r>0?r:0,current:typeof t.current==`string`?t.current.slice(0,120):``}}function T(e){let t=S(e),n=S(t.avatar??{}),r=S(t.workspace??{});if(typeof t.id!=`string`||typeof t.name!=`string`)throw a();return{id:t.id,name:t.name,avatar:{character:s(n.character)?n.character:`blob`,color:ee(n.color)?n.color:`blue`},enabled:t.enabled!==!1,instructions:C(t.instructions),executionMode:t.executionMode===`workspace-write`||t.executionMode===`full-access`?t.executionMode:`approval-required`,model:E(t.model),thinking:v.find(e=>e===t.thinking)??null,channels:te(t.channels),tools:Array.isArray(t.tools)?t.tools.filter(e=>typeof e==`string`):null,workspace:{environmentId:C(r.environmentId,`local`),cwd:C(r.cwd)},threadSessionId:C(t.threadSessionId),activity:w(t.activity),maxParallelAgents:Number.isInteger(t.maxParallelAgents)&&Number(t.maxParallelAgents)>=1&&Number(t.maxParallelAgents)<=6?Number(t.maxParallelAgents):3,readGlobalMemory:t.readGlobalMemory!==!1,proactive:b(t.proactive)}}function E(e){let t=S(e??{});return typeof t.ref==`string`&&t.ref.includes(`/`)?{ref:t.ref}:{tier:_.find(e=>e===t.tier)??`standard`}}async function D(){let e=S(await i(`config`));return(Array.isArray(e.providers)?e.providers:[]).flatMap(e=>{let t=S(e);if(typeof t.id!=`string`||!t.configured||t.enabled===!1)return[];let n=C(t.name,t.id);return(Array.isArray(t.models)?t.models:[]).flatMap(e=>{let r=S(e);return typeof r.id!=`string`||r.kind!==`chat`?[]:[{ref:`${t.id}/${r.id}`,name:C(r.name,r.id),providerName:n}]})})}function O(e,t){return n=>t(S(n)[e])}function k(e){return o(`/api/bots`,{signal:e,parse:e=>{let t=S(e).bots;if(!Array.isArray(t))throw a();return t.map(T)}})}function A(e){return o(`/api/bots`,{method:`POST`,data:e,parse:O(`bot`,T)})}function j(e,t){return o(`/api/bots/${encodeURIComponent(e)}`,{method:`PATCH`,data:t,parse:O(`bot`,T)})}function M(e){return o(`/api/bots/${encodeURIComponent(e)}/session`,{method:`POST`,data:{},parse:e=>{let t=S(e).sessionId;if(typeof t!=`string`||!t)throw a();return t}})}function N(e){let t=e&&typeof e==`object`?e:{};return{enabled:t.enabled===!0,endpoints:Array.isArray(t.endpoints)?t.endpoints.filter(e=>typeof e==`string`&&/^https:\/\//.test(e)):[],fingerprint:typeof t.fingerprint==`string`?t.fingerprint:null}}function P(e){let t=S(e);if(typeof t.id!=`string`||!t.id)throw a();let n=t.capabilities&&typeof t.capabilities==`object`?t.capabilities:{};return{id:t.id,kind:t.kind===`node`?`node`:`local`,name:C(t.name),online:t.online===!0,roots:Array.isArray(t.roots)?t.roots.filter(e=>typeof e==`string`):[],shell:n.shell===!0,usedBy:Array.isArray(t.usedBy)?t.usedBy.flatMap(e=>{let t=e&&typeof e==`object`?e:{};return typeof t.id==`string`&&typeof t.name==`string`?[{id:t.id,name:t.name}]:[]}):[],lastSeenAt:typeof t.lastSeenAt==`string`?t.lastSeenAt:null}}function F(e){return o(`/api/environments`,{signal:e,parse:e=>{let t=S(e);if(!Array.isArray(t.environments))throw a();return{environments:t.environments.map(P),remote:N(t.remote)}}})}function I(){return o(`/api/environments/pairing`,{method:`POST`,data:{},parse:e=>{let t=S(e),n=S(t.pairing);if(typeof n.code!=`string`)throw a();return{code:n.code,expiresAt:C(n.expiresAt),remote:N(t.remote)}}})}function L(e){return o(`/api/environments/${encodeURIComponent(e)}`,{method:`DELETE`,parse:()=>void 0})}function ne(e,t){let n=S(e).tasks;if(!Array.isArray(n))throw a();return n.flatMap(e=>{let n=e&&typeof e==`object`?e:{};if(n.targetType!==`bot`||n.botId!==t||typeof n.id!=`string`)return[];let r=[`once`,`interval`,`daily`,`weekly`,`monthly`].includes(String(n.frequency))?n.frequency:`daily`;return[{id:n.id,enabled:n.enabled!==!1,botMessage:C(n.botMessage),frequency:r,time:C(n.time),date:C(n.date),dayOfWeek:Number(n.dayOfWeek)||0,nextRunAt:typeof n.nextRunAt==`string`?n.nextRunAt:null}]})}function R(e,t){return o(`/api/schedules`,{signal:t,parse:t=>ne(t,e)})}function z(e){return o(`/api/schedules`,{method:`POST`,data:{...e,targetType:`bot`,enabled:!0},parse:()=>void 0})}function B(e,t){return o(`/api/schedules/${encodeURIComponent(e)}`,{method:`PATCH`,data:{enabled:t},parse:()=>void 0})}function V(e){return o(`/api/schedules/${encodeURIComponent(e)}`,{method:`DELETE`,parse:()=>void 0})}var H=[`told`,`correction`,`review`,`proactive`,`manual`,`tidy`];function U(e){if(!e||typeof e!=`object`)return null;let t=e;return typeof t.id!=`string`||typeof t.text!=`string`||!t.text?null:{id:t.id,text:t.text.slice(0,500),source:H.find(e=>e===t.source)??`told`,updatedAt:C(t.updatedAt)}}function W(e){let t=U(S(e).entry);if(!t)throw a();return t}function G(e,t){return o(`/api/bots/${encodeURIComponent(e)}/memory`,{signal:t,parse:e=>{let t=S(e).entries;return Array.isArray(t)?t.map(U).filter(e=>!!e):[]}})}function K(e,t){return o(`/api/bots/${encodeURIComponent(e)}/memory`,{method:`POST`,data:{text:t},parse:W})}function q(e,t,n){return o(`/api/bots/${encodeURIComponent(e)}/memory/${encodeURIComponent(t)}`,{method:`PATCH`,data:{text:n},parse:W})}function J(e,t){return o(`/api/bots/${encodeURIComponent(e)}/memory/${encodeURIComponent(t)}`,{method:`DELETE`,parse:()=>void 0})}function Y(e){let t=S(e);return typeof t.name!=`string`||!t.name?null:{name:t.name.slice(0,64),description:C(t.description).slice(0,1024),updatedAt:C(t.updatedAt)}}function X(e,t){return o(`/api/bots/${encodeURIComponent(e)}/skills`,{signal:t,parse:e=>{let t=S(e).skills;return Array.isArray(t)?t.map(Y).filter(e=>!!e):[]}})}function Z(e,t,n){return o(`/api/bots/${encodeURIComponent(e)}/skills/${encodeURIComponent(t)}`,{signal:n,parse:e=>{let t=S(S(e).skill),n=Y(t);if(!n)throw Error(`Invalid skill response.`);return{...n,body:C(t.body).slice(0,2e4)}}})}function re(e,t){return o(`/api/bots/${encodeURIComponent(e)}/skills/${encodeURIComponent(t)}`,{method:`DELETE`,parse:()=>void 0})}var Q=null,$=r()((e,t)=>({bots:[],loaded:!1,error:``,load:()=>(Q??=k().then(t=>e({bots:t,loaded:!0,error:``})).catch(t=>e({loaded:!0,error:t instanceof Error?t.message:String(t)})).finally(()=>{Q=null}),Q),upsert:n=>{let r=t().bots;e({bots:r.findIndex(e=>e.id===n.id)<0?[...r,n]:r.map(e=>e.id===n.id?{...n,activity:e.activity}:e)})}}));function ie(e){let t=$(e=>e.load),n=$(e=>e.bots.some(e=>e.activity?.status===`running`));(0,g.useEffect)(()=>{if(!e)return;t();let r=window.setInterval(()=>{document.visibilityState===`visible`&&t()},n?3e3:1e4);return()=>window.clearInterval(r)},[e,n,t])}export{l as A,B as C,m as D,h as E,f as O,L as S,c as T,R as _,y as a,F as b,A as c,J as d,V as f,D as g,G as h,x as i,p as j,u as k,z as l,q as m,$ as n,v as o,re as p,_ as r,K as s,ie as t,I as u,Z as v,j as w,M as x,X as y};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-B0Z9INg1.js";var t=e({getBrowserNotificationPermission:()=>i,prepareBrowserNotifications:()=>o,requestBrowserNotificationPermission:()=>a,showBrowserSystemNotification:()=>s}),n;function r(e={}){return{windowRef:e.windowRef||(typeof window<`u`?window:void 0),navigatorRef:e.navigatorRef||(typeof navigator<`u`?navigator:void 0)}}function i(e={}){let{windowRef:t}=r(e),n=t?.Notification;return n?n.permission:`unsupported`}async function a(e={}){let{windowRef:t}=r(e),n=t?.Notification;return n?n.permission==="default"?n.requestPermission():n.permission:`unsupported`}async function o(e={}){let{windowRef:t,navigatorRef:i}=r(e),a=i?.serviceWorker;return!t?.isSecureContext||!a?null:((!n||e.forceRegistration)&&(n=a.register(`/notification-sw.js`,{scope:`/`}).then(()=>a.ready).catch(e=>{throw n=void 0,e})),n)}async function s({title:e,body:t=``,tag:n=``,url:i=``},a={}){let{windowRef:s}=r(a),c=s?.Notification;if(!s||!c)throw Error(`当前浏览器不支持系统通知。`);if(c.permission!==`granted`)throw Error(`通知权限未授权,请在浏览器站点设置中允许通知。`);let l=await o(a),u={body:String(t||``),tag:String(n||``),data:{url:String(i||s.location?.href||`/`)}};if(l?.showNotification)return await l.showNotification(String(e||`Pisper`),u),{shown:!0,transport:`service-worker`};let d=new c(String(e||`Pisper`),u);return d.onclick=()=>{s.focus?.(),d.close()},{shown:!0,transport:`window`}}export{s as a,a as i,i as n,o as r,t};
@@ -1 +1 @@
1
- import{i as e,n as t}from"./startup-queries-BlA4Hayt.js";import{t as n}from"./event-stream-Dh7h5sXJ.js";import{i as r,n as i,t as a}from"./http-Bp65Kb4t.js";import{r as o}from"./api-AeFmYDtL.js";var s=[`system`,`project`,`skills`,`tools`,`mcp`,`messages`,`toolResults`];function c(e){return e&&typeof e==`object`?e:{}}function l(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:0}function u(e){let t=c(e),n=new Map((Array.isArray(t.categories)?t.categories:[]).map(e=>[c(e).id,c(e)])),r=Number(t.compactAtPercent);return{contextWindow:l(t.contextWindow),usedTokens:l(t.usedTokens),freeTokens:l(t.freeTokens),totalKnown:t.totalKnown===!0,prefixKnown:t.prefixKnown===!0,compactAtPercent:t.compactAtPercent!=null&&r>0&&r<=100?r:null,categories:s.map(e=>{let t=n.get(e)??{};return{id:e,tokens:l(t.tokens),count:t.count==null?null:l(t.count),deferred:l(t.deferred),calls:l(t.calls),servers:(Array.isArray(t.servers)?t.servers:[]).map(e=>{let t=c(e);return{name:typeof t.name==`string`?t.name:``,tools:l(t.tools),calls:l(t.calls),tokens:l(t.tokens)}})}})}}function d(e,t){if(!t||e<=0)return`0%`;let n=e/t*100;return n<1?`<1%`:`${Math.round(n)}%`}var f=e=>`/api/sessions/${encodeURIComponent(e)}`;async function p(t,n={}){let r=await i(t,n);return n.method&&n.method!==`GET`&&(/^\/api\/sessions(?:$|\/[^/]+(?:\/(?:derive|model|cwd|execution-mode|run-mode|thinking-level|goal|tree\/navigate))?$)/.test(t)&&e(`sessions`),t===`/api/settings/compaction`&&e(`config`)),r}var m={listSessions:({refresh:e=!0}={})=>t(`sessions`,e),searchSessionTreeLabels:(e,t=20,n)=>p(`/api/session-labels?${new URLSearchParams({query:e,limit:String(t)})}`,{signal:n}),listSessionTreeLabels:(e=500)=>p(`/api/session-labels?limit=${e}`),createSession:(e,t=``,n={})=>p(`/api/sessions`,{method:`POST`,...n.machine?{timeout:4e4}:{},data:{name:e,...n.machine?{machine:n.machine}:{},...n.projectless?{projectless:!0}:t?{cwd:t}:{}}}),getContextBreakdown:(e,t)=>p(`${f(e)}/context-breakdown`,{signal:t}).then(u),deriveSession:(e,t,n)=>p(`${f(e)}/derive`,{method:`POST`,data:{boundaryEntryId:t,name:n}}),getSessionTree:e=>p(`${f(e)}/tree`),navigateSessionTree:(e,t,n)=>p(`${f(e)}/tree/navigate`,{method:`POST`,data:{targetEntryId:t,summarize:n},timeout:18e4}),navigateSessionTreeTarget:(e,t)=>p(`${f(e)}/tree/navigate`,{method:`POST`,data:{targetEntryId:t,summarize:!1,includeTree:!1},timeout:18e4}),previewFileRewind:(e,t)=>p(`${f(e)}/tree/${encodeURIComponent(t)}/file-rewind`),rewindFiles:(e,t)=>p(`${f(e)}/tree/${encodeURIComponent(t)}/file-rewind`,{method:`POST`,timeout:18e4}),setSessionTreeLabel:(e,t,n)=>p(`${f(e)}/tree/labels/${encodeURIComponent(t)}`,{method:`PUT`,data:{label:n}}),getSessionCommands:e=>p(`${f(e)}/commands`),getWorkspaceCommands:e=>p(`/api/commands?cwd=${encodeURIComponent(e)}`),getConfig:({refresh:e=!1}={})=>t(`config`,e),updateCompactionPreference:e=>p(`/api/settings/compaction`,{method:`PATCH`,data:{thresholdPercent:e}}),getLiveSession:(e,t={})=>p(`${f(e)}/live`,t),getMessages:(e,t)=>{let n=new URLSearchParams({limit:String(t.limit)});return t.before&&n.set(`before`,t.before),p(`${f(e)}/messages?${n}`)},openStream:async(e,t,{signal:n}={})=>{await o({open:async()=>(await r(),fetch(`/api/chat`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e),signal:n})),resume:async(e,t)=>(await r(),fetch(`/api/runs/${encodeURIComponent(e)}/events?after=${t}`,{signal:n})),onEvent:t,signal:n})},askSideQuestion:async(e,t,{signal:i,onDelta:a}={})=>{await r();let o=await fetch(`${f(e)}/side-question`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({question:t}),signal:i}),s=null;if(await n(o,(e,t)=>{if(e===`delta`&&typeof t.text==`string`)a?.(t.text);else if(e===`error`)throw Error(String(t.message||``));else if(e===`done`)return s={text:typeof t.text==`string`?t.text:``,toolCallIgnored:t.toolCallIgnored===!0},!1}),!s)throw Error(`side question ended before completion`);return s},retryLastTurn:async(e,t,{signal:n}={})=>{await o({open:async()=>(await r(),fetch(`${f(e)}/retry`,{method:`POST`,signal:n})),resume:async(e,t)=>(await r(),fetch(`/api/runs/${encodeURIComponent(e)}/events?after=${t}`,{signal:n})),onEvent:t,signal:n})},queueInput:(e,t,n,r)=>p(`${f(e)}/input`,{method:`POST`,data:{message:t,attachments:n,behavior:r}}),sendQueuedInputNow:(e,t)=>p(`${f(e)}/input/${encodeURIComponent(t)}/send-now`,{method:`POST`,data:{}}),withdrawQueuedInput:(e,t)=>p(`${f(e)}/input/${encodeURIComponent(t)}`,{method:`DELETE`}),compactSession:e=>p(`${f(e)}/compact`,{method:`POST`,data:{},timeout:18e4}),getSessionWorkflowRuns:e=>p(`${f(e)}/workflow-runs`),resolveWorkflowApproval:(e,t,n)=>p(`/api/workflow-runs/${encodeURIComponent(e)}/approvals/${encodeURIComponent(t)}`,{method:`POST`,data:{approved:n}}),stopWorkflowRun:e=>p(`/api/workflow-runs/${encodeURIComponent(e)}/stop`,{method:`POST`,data:{}}),abort:e=>p(`${f(e)}/abort`,{method:`POST`,data:{}}),resolveMobileOperation:(e,t,n)=>p(`${f(e)}/mobile-operations/${encodeURIComponent(t)}`,{method:`POST`,data:n}),pauseGoal:e=>p(`${f(e)}/goal`,{method:`PATCH`,data:{action:`pause`}}),setGoalBudget:(e,t)=>p(`${f(e)}/goal`,{method:`PATCH`,data:{action:`set-budget`,tokenBudget:t}}),getGitChanges:e=>p(`${f(e)}/git/changes`),commitGitChanges:(e,t)=>p(`${f(e)}/git/commit`,{method:`POST`,data:{message:t},timeout:6e4}),pushGitChanges:e=>p(`${f(e)}/git/push`,{method:`POST`,data:{},timeout:15e4}),revertGitChanges:e=>p(`${f(e)}/git/revert`,{method:`POST`,data:{},timeout:6e4}),getVcsChanges:(e,t={})=>p(`${f(e)}/vcs/changes`,t),getFileDiff:(e,t,{preferSession:n=!1,...r}={})=>p(`${f(e)}/vcs/file-diff?path=${encodeURIComponent(t)}${n?`&prefer=session`:``}`,r),commitVcsChanges:(e,t)=>p(`${f(e)}/vcs/commit`,{method:`POST`,data:{message:t},timeout:15e4}),pushVcsChanges:e=>p(`${f(e)}/vcs/push`,{method:`POST`,data:{},timeout:15e4}),revertVcsChanges:e=>p(`${f(e)}/vcs/revert`,{method:`POST`,data:{},timeout:6e4}),createHtmlPreview:(e,t)=>p(`${f(e)}/html-preview`,{method:`POST`,body:JSON.stringify({path:t})}),getSessionFileChanges:(e,t={})=>p(`${f(e)}/file-changes`,t),getSessionFileChangeDiff:(e,t,n={})=>p(`${f(e)}/file-changes/diff?path=${encodeURIComponent(t)}`,n),revertSessionFileChanges:(e,t=``)=>p(`${f(e)}/file-changes/revert`,{method:`POST`,data:{path:t},timeout:6e4}),approveSessionFileChanges:(e,t=``)=>p(`${f(e)}/file-changes/approve`,{method:`POST`,data:{path:t}}),updateModel:(e,t,n)=>p(`${f(e)}/model`,{method:`PUT`,data:{provider:t,model:n}}),getThinkingLevel:e=>p(`${f(e)}/thinking-level`),setThinkingLevel:(e,t)=>p(`${f(e)}/thinking-level`,{method:`PUT`,data:{level:t}}),updateExecutionMode:(e,t)=>p(`${f(e)}/execution-mode`,{method:`PUT`,data:{mode:t}}),updateRunMode:(e,t)=>p(`${f(e)}/run-mode`,{method:`PUT`,data:{mode:t}}),resolveApproval:(e,t,n)=>p(`${f(e)}/approvals/${encodeURIComponent(t)}`,{method:`POST`,data:{approved:n}}),answerQuestion:(e,t,n)=>p(`${f(e)}/questions/${encodeURIComponent(t)}`,{method:`POST`,data:n}),startQueuedSession:e=>p(`${f(e)}/queue/start`,{method:`POST`,data:{}}),exportSessionMarkdown:(e,t)=>a(`${f(e)}/export?format=markdown&lang=${t===`en-US`?`en-US`:`zh-CN`}`,{timeout:6e4}),updateCwd:(e,t)=>p(`${f(e)}/cwd`,{method:`PUT`,data:{cwd:t}}),renameSession:(e,t)=>p(f(e),{method:`PATCH`,data:{name:t}})};export{d as n,m as t};
1
+ import{i as e,n as t}from"./startup-queries-BpV9-ykp.js";import{t as n}from"./event-stream-B9eeQcgA.js";import{i as r,n as i,t as a}from"./http-CXQuFoDX.js";import{r as o}from"./api-BhPOJ07B.js";var s=[`system`,`project`,`skills`,`tools`,`mcp`,`messages`,`toolResults`];function c(e){return e&&typeof e==`object`?e:{}}function l(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:0}function u(e){let t=c(e),n=new Map((Array.isArray(t.categories)?t.categories:[]).map(e=>[c(e).id,c(e)])),r=Number(t.compactAtPercent);return{contextWindow:l(t.contextWindow),usedTokens:l(t.usedTokens),freeTokens:l(t.freeTokens),totalKnown:t.totalKnown===!0,prefixKnown:t.prefixKnown===!0,compactAtPercent:t.compactAtPercent!=null&&r>0&&r<=100?r:null,categories:s.map(e=>{let t=n.get(e)??{};return{id:e,tokens:l(t.tokens),count:t.count==null?null:l(t.count),deferred:l(t.deferred),calls:l(t.calls),servers:(Array.isArray(t.servers)?t.servers:[]).map(e=>{let t=c(e);return{name:typeof t.name==`string`?t.name:``,tools:l(t.tools),calls:l(t.calls),tokens:l(t.tokens)}})}})}}function d(e,t){if(!t||e<=0)return`0%`;let n=e/t*100;return n<1?`<1%`:`${Math.round(n)}%`}var f=e=>`/api/sessions/${encodeURIComponent(e)}`;async function p(t,n={}){let r=await i(t,n);return n.method&&n.method!==`GET`&&(/^\/api\/sessions(?:$|\/[^/]+(?:\/(?:derive|model|cwd|execution-mode|run-mode|thinking-level|goal|tree\/navigate))?$)/.test(t)&&e(`sessions`),t===`/api/settings/compaction`&&e(`config`)),r}var m={listSessions:({refresh:e=!0}={})=>t(`sessions`,e),searchSessionTreeLabels:(e,t=20,n)=>p(`/api/session-labels?${new URLSearchParams({query:e,limit:String(t)})}`,{signal:n}),listSessionTreeLabels:(e=500)=>p(`/api/session-labels?limit=${e}`),createSession:(e,t=``,n={})=>p(`/api/sessions`,{method:`POST`,...n.machine?{timeout:4e4}:{},data:{name:e,...n.machine?{machine:n.machine}:{},...n.projectless?{projectless:!0}:t?{cwd:t}:{}}}),getContextBreakdown:(e,t)=>p(`${f(e)}/context-breakdown`,{signal:t}).then(u),deriveSession:(e,t,n)=>p(`${f(e)}/derive`,{method:`POST`,data:{boundaryEntryId:t,name:n}}),getSessionTree:e=>p(`${f(e)}/tree`),navigateSessionTree:(e,t,n)=>p(`${f(e)}/tree/navigate`,{method:`POST`,data:{targetEntryId:t,summarize:n},timeout:18e4}),navigateSessionTreeTarget:(e,t)=>p(`${f(e)}/tree/navigate`,{method:`POST`,data:{targetEntryId:t,summarize:!1,includeTree:!1},timeout:18e4}),previewFileRewind:(e,t)=>p(`${f(e)}/tree/${encodeURIComponent(t)}/file-rewind`),rewindFiles:(e,t)=>p(`${f(e)}/tree/${encodeURIComponent(t)}/file-rewind`,{method:`POST`,timeout:18e4}),setSessionTreeLabel:(e,t,n)=>p(`${f(e)}/tree/labels/${encodeURIComponent(t)}`,{method:`PUT`,data:{label:n}}),getSessionCommands:e=>p(`${f(e)}/commands`),getWorkspaceCommands:e=>p(`/api/commands?cwd=${encodeURIComponent(e)}`),getConfig:({refresh:e=!1}={})=>t(`config`,e),updateCompactionPreference:e=>p(`/api/settings/compaction`,{method:`PATCH`,data:{thresholdPercent:e}}),getLiveSession:(e,t={})=>p(`${f(e)}/live`,t),getMessages:(e,t)=>{let n=new URLSearchParams({limit:String(t.limit)});return t.before&&n.set(`before`,t.before),p(`${f(e)}/messages?${n}`)},openStream:async(e,t,{signal:n}={})=>{await o({open:async()=>(await r(),fetch(`/api/chat`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e),signal:n})),resume:async(e,t)=>(await r(),fetch(`/api/runs/${encodeURIComponent(e)}/events?after=${t}`,{signal:n})),onEvent:t,signal:n})},askSideQuestion:async(e,t,{signal:i,onDelta:a}={})=>{await r();let o=await fetch(`${f(e)}/side-question`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({question:t}),signal:i}),s=null;if(await n(o,(e,t)=>{if(e===`delta`&&typeof t.text==`string`)a?.(t.text);else if(e===`error`)throw Error(String(t.message||``));else if(e===`done`)return s={text:typeof t.text==`string`?t.text:``,toolCallIgnored:t.toolCallIgnored===!0},!1}),!s)throw Error(`side question ended before completion`);return s},retryLastTurn:async(e,t,{signal:n}={})=>{await o({open:async()=>(await r(),fetch(`${f(e)}/retry`,{method:`POST`,signal:n})),resume:async(e,t)=>(await r(),fetch(`/api/runs/${encodeURIComponent(e)}/events?after=${t}`,{signal:n})),onEvent:t,signal:n})},queueInput:(e,t,n,r)=>p(`${f(e)}/input`,{method:`POST`,data:{message:t,attachments:n,behavior:r}}),sendQueuedInputNow:(e,t)=>p(`${f(e)}/input/${encodeURIComponent(t)}/send-now`,{method:`POST`,data:{}}),withdrawQueuedInput:(e,t)=>p(`${f(e)}/input/${encodeURIComponent(t)}`,{method:`DELETE`}),compactSession:e=>p(`${f(e)}/compact`,{method:`POST`,data:{},timeout:18e4}),getSessionWorkflowRuns:e=>p(`${f(e)}/workflow-runs`),resolveWorkflowApproval:(e,t,n)=>p(`/api/workflow-runs/${encodeURIComponent(e)}/approvals/${encodeURIComponent(t)}`,{method:`POST`,data:{approved:n}}),stopWorkflowRun:e=>p(`/api/workflow-runs/${encodeURIComponent(e)}/stop`,{method:`POST`,data:{}}),abort:e=>p(`${f(e)}/abort`,{method:`POST`,data:{}}),resolveMobileOperation:(e,t,n)=>p(`${f(e)}/mobile-operations/${encodeURIComponent(t)}`,{method:`POST`,data:n}),pauseGoal:e=>p(`${f(e)}/goal`,{method:`PATCH`,data:{action:`pause`}}),setGoalBudget:(e,t)=>p(`${f(e)}/goal`,{method:`PATCH`,data:{action:`set-budget`,tokenBudget:t}}),getGitChanges:e=>p(`${f(e)}/git/changes`),commitGitChanges:(e,t)=>p(`${f(e)}/git/commit`,{method:`POST`,data:{message:t},timeout:6e4}),pushGitChanges:e=>p(`${f(e)}/git/push`,{method:`POST`,data:{},timeout:15e4}),revertGitChanges:e=>p(`${f(e)}/git/revert`,{method:`POST`,data:{},timeout:6e4}),getVcsChanges:(e,t={})=>p(`${f(e)}/vcs/changes`,t),getFileDiff:(e,t,{preferSession:n=!1,...r}={})=>p(`${f(e)}/vcs/file-diff?path=${encodeURIComponent(t)}${n?`&prefer=session`:``}`,r),commitVcsChanges:(e,t)=>p(`${f(e)}/vcs/commit`,{method:`POST`,data:{message:t},timeout:15e4}),pushVcsChanges:e=>p(`${f(e)}/vcs/push`,{method:`POST`,data:{},timeout:15e4}),revertVcsChanges:e=>p(`${f(e)}/vcs/revert`,{method:`POST`,data:{},timeout:6e4}),createHtmlPreview:(e,t)=>p(`${f(e)}/html-preview`,{method:`POST`,body:JSON.stringify({path:t})}),getSessionFileChanges:(e,t={})=>p(`${f(e)}/file-changes`,t),getSessionFileChangeDiff:(e,t,n={})=>p(`${f(e)}/file-changes/diff?path=${encodeURIComponent(t)}`,n),revertSessionFileChanges:(e,t=``)=>p(`${f(e)}/file-changes/revert`,{method:`POST`,data:{path:t},timeout:6e4}),approveSessionFileChanges:(e,t=``)=>p(`${f(e)}/file-changes/approve`,{method:`POST`,data:{path:t}}),updateModel:(e,t,n)=>p(`${f(e)}/model`,{method:`PUT`,data:{provider:t,model:n}}),getThinkingLevel:e=>p(`${f(e)}/thinking-level`),setThinkingLevel:(e,t)=>p(`${f(e)}/thinking-level`,{method:`PUT`,data:{level:t}}),updateExecutionMode:(e,t)=>p(`${f(e)}/execution-mode`,{method:`PUT`,data:{mode:t}}),updateRunMode:(e,t)=>p(`${f(e)}/run-mode`,{method:`PUT`,data:{mode:t}}),resolveApproval:(e,t,n)=>p(`${f(e)}/approvals/${encodeURIComponent(t)}`,{method:`POST`,data:{approved:n}}),answerQuestion:(e,t,n)=>p(`${f(e)}/questions/${encodeURIComponent(t)}`,{method:`POST`,data:n}),startQueuedSession:e=>p(`${f(e)}/queue/start`,{method:`POST`,data:{}}),exportSessionMarkdown:(e,t)=>a(`${f(e)}/export?format=markdown&lang=${t===`en-US`?`en-US`:`zh-CN`}`,{timeout:6e4}),updateCwd:(e,t)=>p(`${f(e)}/cwd`,{method:`PUT`,data:{cwd:t}}),renameSession:(e,t)=>p(f(e),{method:`PATCH`,data:{name:t}})};export{d as n,m as t};
@@ -1 +1 @@
1
- import{o as e}from"./vendor-state-GkUciC5H.js";import{t}from"./api-AeFmYDtL.js";function n(){return typeof window<`u`&&window.__PISPER_MOBILE_APP__===!0}var r=null,i=!1,a=e()(e=>({client:n()?`mobile-app`:`web`,loaded:n(),load:({refresh:a=!0}={})=>r||(!a&&i?Promise.resolve():(r=(async()=>{let r=n();r&&e({client:`mobile-app`,loaded:!0});try{let n=await t(`/api/client-info`);e({client:r||n.client===`mobile-app`?`mobile-app`:`web`,loaded:!0})}catch{e({client:r?`mobile-app`:`web`,loaded:!0})}})().finally(()=>{i=!0,r=null}),r))}));function o(){return a(e=>e.client===`mobile-app`)}export{o as n,a as t};
1
+ import{o as e}from"./vendor-state-GkUciC5H.js";import{t}from"./api-BhPOJ07B.js";function n(){return typeof window<`u`&&window.__PISPER_MOBILE_APP__===!0}var r=null,i=!1,a=e()(e=>({client:n()?`mobile-app`:`web`,loaded:n(),load:({refresh:a=!0}={})=>r||(!a&&i?Promise.resolve():(r=(async()=>{let r=n();r&&e({client:`mobile-app`,loaded:!0});try{let n=await t(`/api/client-info`);e({client:r||n.client===`mobile-app`?`mobile-app`:`web`,loaded:!0})}catch{e({client:r?`mobile-app`:`web`,loaded:!0})}})().finally(()=>{i=!0,r=null}),r))}));function o(){return a(e=>e.client===`mobile-app`)}export{o as n,a as t};
@@ -1 +1 @@
1
- import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t}from"./vendor-react-DwNgTV1j.js";import{d as n}from"./i18n-D80GstlU.js";import{i as r,r as i,t as a}from"./runtime-capabilities-B7qveLBm.js";var o=e(t(),1),s=`section`,c={models:`config:configPage.models`,notifications:`config:configPage.notifications`,interface:`config:configPage.interface`,shortcuts:`config:configPage.shortcuts`,"desktop-pet":`config:configPage.desktopPet`,updates:`config:configPage.appUpdates`,labs:`config:configPage.labs`,about:`config:configPage.about`,"remote-access":`config:configPage.remoteAccess`,"mobile-server":`config:configPage.mobileServer`},l=[{id:`sec-models`,section:`models`,card:s,titleKey:`config:configPage.models`,keywords:[`model`,`provider`,`llm`,`api`,`模型`,`供应商`,`大模型`]},{id:`sec-notifications`,section:`notifications`,card:s,titleKey:`config:configPage.notifications`,keywords:[`notification`,`push`,`alert`,`通知`,`推送`,`提醒`]},{id:`sec-interface`,section:`interface`,card:s,titleKey:`config:configPage.interface`,keywords:[`interface`,`theme`,`appearance`,`display`,`界面`,`主题`,`外观`,`显示`]},{id:`sec-shortcuts`,section:`shortcuts`,card:s,titleKey:`config:configPage.shortcuts`,keywords:[`keyboard`,`shortcut`,`hotkey`,`keybinding`,`voice`,`push to talk`,`快捷键`,`按键`,`键盘`,`语音`,`长按`]},{id:`sec-desktop-pet`,section:`desktop-pet`,card:s,titleKey:`config:configPage.desktopPet`,keywords:[`pet`,`petdex`,`宠物`,`桌宠`]},{id:`sec-updates`,section:`updates`,card:s,titleKey:`config:configPage.appUpdates`,keywords:[`update`,`upgrade`,`version`,`更新`,`升级`,`版本`]},{id:`sec-labs`,section:`labs`,card:s,titleKey:`config:configPage.labs`,keywords:[`labs`,`beta`,`experimental`,`preview`,`实验`,`测试版`,`尝鲜`,`内测`]},{id:`sec-about`,section:`about`,card:s,titleKey:`config:configPage.about`,keywords:[`about`,`info`,`license`,`关于`,`信息`,`许可`]},{id:`sec-remote-access`,section:`remote-access`,card:s,titleKey:`config:configPage.remoteAccess`,keywords:[`remote`,`network`,`phone`,`远程`,`网络`,`手机`]},{id:`sec-mobile-server`,section:`mobile-server`,card:s,titleKey:`config:configPage.mobileServer`,keywords:[`server`,`remote`,`network`,`服务器`,`远程`,`网络`]},{id:`models-current-model`,section:`models`,card:`models-current-model`,targetId:`models-connections`,titleKey:`config:configPage.currentChatModel`,keywords:[`model`,`provider`,`quick setup`,`模型`,`供应商`,`快速配置`,`对话模型`]},{id:`models-connections`,section:`models`,card:`models-connections`,titleKey:`config:configPage.manageConnections`,keywords:[`provider`,`connection`,`api key`,`import`,`连接`,`供应商`,`导入`,`密钥`]},{id:`models-runtime-policy`,section:`models`,card:`models-current-model`,targetId:`models-runtime-policy`,titleKey:`config:configPage.agentRuntimePolicy`,keywords:[`runtime`,`agent`,`policy`,`thinking`,`tools`,`运行策略`,`运行时`,`执行策略`,`思考强度`,`可用工具`]},{id:`models-fallback`,section:`models`,card:`models-current-model`,targetId:`models-runtime-policy`,titleKey:`config:providerWorkbench.fallbackModels`,keywords:[`fallback`,`backup`,`failover`,`quota`,`备用模型`,`备选`,`额度`,`切换模型`]},{id:`models-auxiliary`,section:`models`,card:`models-current-model`,targetId:`models-runtime-policy`,titleKey:`config:providerWorkbench.auxiliaryModel`,keywords:[`auxiliary`,`helper model`,`title`,`compaction`,`summary`,`辅助模型`,`标题`,`压缩`,`摘要`,`记忆`]},{id:`models-subagents`,section:`models`,card:`models-subagents`,targetId:`models-subagents`,titleKey:`config:subagents.title`,keywords:[`subagent`,`agent definition`,`tier`,`fast`,`strong`,`子代理`,`子 Agent`,`档位`,`便宜模型`,`.pisper/agents`]},{id:`models-permission-rules`,section:`models`,card:`models-permission-rules`,targetId:`models-permission-rules`,titleKey:`config:permissionRules.title`,keywords:[`permission`,`allow`,`deny`,`approval`,`rule`,`权限`,`审批`,`允许`,`禁止`,`规则`]},{id:`models-visual`,section:`models`,card:`models-visual`,targetId:`models-visual`,expandGroup:`models-advanced`,titleKey:`config:configPage.currentVisualModel`,keywords:[`image`,`video`,`visual`,`图片`,`图像`,`视频`,`视觉`,`生图`]},{id:`notifications-browser`,section:`notifications`,card:`notifications-browser`,titleKey:`config:notificationSettings.notification`,keywords:[`browser`,`system`,`push`,`浏览器通知`,`系统通知`,`推送`]},{id:`notifications-templates`,section:`notifications`,card:`notifications-templates`,titleKey:`config:notificationSettings.notificationTemplates`,keywords:[`template`,`模板`,`通知模板`]},{id:`interface-custom-ui`,section:`interface`,card:`interface-custom-ui`,titleKey:`navigation:shell.components`,sectionTitleKey:`custom-ui:moved.title`,keywords:[`custom ui`,`standalone widgets`,`component`,`native`,`manifest`,`独立组件`,`自定义组件`,`组件`]},{id:`interface-appearance`,section:`interface`,card:`interface-appearance`,titleKey:`config:interfaceSettings.appearance`,keywords:[`theme`,`dark`,`light`,`accent`,`主题`,`深色`,`浅色`,`强调色`,`外观`]},{id:`interface-style`,section:`interface`,card:`interface-style`,expandGroup:`interface-advanced`,titleKey:`config:interfaceSettings.interfaceStyle`,keywords:[`font`,`corner`,`radius`,`字体`,`字号`,`圆角`]},{id:`interface-motion`,section:`interface`,card:`interface-motion`,expandGroup:`interface-advanced`,titleKey:`config:interfaceSettings.displayAndMotion`,keywords:[`motion`,`density`,`animation`,`动效`,`动画`,`密度`,`显示`]},{id:`interface-language`,section:`interface`,card:`interface-language`,titleKey:`config:languageSettings.displayLanguage`,keywords:[`language`,`chinese`,`english`,`语言`,`中文`,`英文`,`英语`]},{id:`desktop-pet-settings`,section:`desktop-pet`,card:`desktop-pet-settings`,titleKey:`config:desktopPetSettings.title`,keywords:[`pet`,`宠物`,`桌宠`,`宠物设置`]},{id:`desktop-pet-install`,section:`desktop-pet`,card:`desktop-pet-install`,titleKey:`config:desktopPetSettings.installTitle`,keywords:[`petdex`,`install`,`宠物安装`,`添加宠物`]},{id:`desktop-pet-installed`,section:`desktop-pet`,card:`desktop-pet-installed`,titleKey:`config:desktopPetSettings.installedTitle`,keywords:[`installed`,`已安装`,`宠物列表`]},{id:`mobile-server-main`,section:`mobile-server`,card:`mobile-server-main`,titleKey:`config:mobileServer.title`,keywords:[`server`,`remote`,`服务器`,`远程`,`手机访问`]},{id:`mobile-server-local`,section:`mobile-server`,card:`mobile-server-local`,titleKey:`config:mobileServer.localTitle`,keywords:[`local`,`on-device`,`本机`,`本地运行`]},{id:`remote-workspaces`,section:`remote-access`,card:`remote-workspaces`,titleKey:`config:remoteWorkspace.title`,keywords:[`linux`,`remote workspace`,`服务器`,`远程工作区`]},{id:`remote-access-main`,section:`remote-access`,card:`remote-access-main`,titleKey:`config:remoteAccess.title`,keywords:[`remote`,`network`,`phone`,`远程`,`网络`,`手机`]},{id:`remote-access-pairing`,section:`remote-access`,card:`remote-access-pairing`,titleKey:`config:remoteAccess.pairing`,keywords:[`pairing`,`qr`,`配对`,`二维码`]},{id:`remote-access-devices`,section:`remote-access`,card:`remote-access-devices`,titleKey:`config:remoteAccess.devices`,keywords:[`device`,`paired`,`设备`,`已配对`,`授权`]},{id:`updates-main`,section:`updates`,card:`updates-main`,titleKey:`config:updateSettings.pisperAppUpdates`,keywords:[`update`,`version`,`channel`,`更新`,`版本`,`升级`,`渠道`]},{id:`updates-components`,section:`updates`,card:`updates-components`,titleKey:`config:updateSettings.appComponents`,keywords:[`component`,`runtime`,`sidecar`,`组件`,`运行时`]},{id:`updates-cli`,section:`updates`,card:`updates-cli`,titleKey:`config:cliSettings.title`,keywords:[`cli`,`terminal`,`command`,`命令行`,`终端`,`命令`]},{id:`about-project`,section:`about`,card:`about-project`,titleKey:`config:aboutSettings.projectInformation`,keywords:[`project`,`version`,`license`,`项目`,`版本`,`许可`]},{id:`about-support`,section:`about`,card:`about-support`,titleKey:`config:aboutSettings.supportPisper`,keywords:[`support`,`donate`,`sponsor`,`支持`,`捐赠`,`赞助`]}],u={provider:[`sec-models`,`models-current-model`,`models-connections`],供应商:[`sec-models`,`models-current-model`,`models-connections`],model:[`sec-models`,`models-current-model`,`models-connections`],模型:[`sec-models`,`models-current-model`,`models-connections`],theme:[`sec-interface`,`interface-appearance`],主题:[`sec-interface`,`interface-appearance`],interface:[`sec-interface`,`interface-appearance`],界面:[`sec-interface`,`interface-appearance`,`interface-language`],diy:[`interface-custom-ui`],components:[`interface-custom-ui`],widgets:[`interface-custom-ui`],组件:[`interface-custom-ui`],pet:[`sec-desktop-pet`,`desktop-pet-settings`,`desktop-pet-install`,`desktop-pet-installed`],宠物:[`sec-desktop-pet`,`desktop-pet-settings`,`desktop-pet-install`,`desktop-pet-installed`],update:[`sec-updates`,`updates-main`,`updates-components`],更新:[`sec-updates`,`updates-main`,`updates-components`],network:[`sec-remote-access`,`sec-mobile-server`,`remote-access-main`],网络:[`sec-remote-access`,`sec-mobile-server`,`remote-access-main`],remote:[`sec-remote-access`,`sec-mobile-server`,`remote-access-main`],远程:[`sec-remote-access`,`sec-mobile-server`,`remote-access-main`],notification:[`sec-notifications`,`notifications-browser`,`notifications-templates`],通知:[`sec-notifications`,`notifications-browser`,`notifications-templates`],language:[`interface-language`],语言:[`interface-language`]},d=12;function f(e){return[n(e.titleKey,`zh-CN`).toLowerCase(),n(e.titleKey,`en-US`).toLowerCase()]}function p(e,t,{capabilities:o=a,mobileApp:s}={}){let p=e.trim().toLowerCase();if(!p)return[];let m=new Set(u[p]||[]);for(let e of p.split(/\s+/))for(let t of u[e]||[])m.add(t);let h=[];for(let e of l){if(!i(o,e.section)||e.id===`models-visual`&&!r(o,`visualGeneration`)||s!==void 0&&(e.section===`mobile-server`&&!s||e.section===`remote-access`&&s)||typeof window<`u`&&(e.id===`remote-workspaces`&&!window.pisperDesktop?.remoteWorkspaces||e.id===`remote-access-main`&&window.__PISPER_REMOTE_WORKSPACE__))continue;let[t,n]=f(e),a=0;m.has(e.id)?a=100:t===p||n===p?a=90:t.startsWith(p)||n.startsWith(p)?a=80:t.includes(p)||n.includes(p)?a=65:(e.keywords||[]).some(e=>{let t=e.toLowerCase();return t.includes(p)?p.length>=2||/[\u4e00-\u9fff]/.test(p):/[\u4e00-\u9fff]/.test(t)&&t.includes(p)})&&(a=40),a>0&&h.push({entry:e,score:a})}h.sort((e,t)=>t.score-e.score);let g=new Set,_=[];for(let{entry:e}of h){let r={entry:e,title:n(e.titleKey,t),sectionTitle:n(e.sectionTitleKey||c[e.section],t)},i=`${e.section}|${r.title}`;if(!g.has(i)&&(g.add(i),_.push(r),_.length>=d))break}return _}var m=`pisper:config-card-highlight`,h=null,g=0,_=new Set;function v(){for(let e of _)e()}function y(e){return _.add(e),()=>{_.delete(e)}}function b(e,t,n={}){h={card:e,section:t,...n,targetId:n.targetId||e,navigationKey:++g},v(),window.dispatchEvent(new Event(m))}function x(e){let t=(0,o.useSyncExternalStore)(y,()=>h,()=>null);return(0,o.useEffect)(()=>{if(!t||t.section!==e)return;let n=0,r=()=>{cancelAnimationFrame(n),n=requestAnimationFrame(()=>{if(h?.navigationKey!==t.navigationKey)return;let e=Array.from(document.querySelectorAll(`[data-config-target], [data-config-card]`)).find(e=>e.dataset.configTarget===t.targetId||e.dataset.configCard===t.targetId);if(!e||!e.getClientRects().length)return;let n=e.querySelector(`input:not([disabled]), button:not([disabled]), select:not([disabled]), [tabindex="0"]`)||e;!n.hasAttribute(`tabindex`)&&n===e&&(n.tabIndex=-1),n.focus({preventScroll:!0}),e.scrollIntoView({block:`center`}),i.disconnect(),h=null,v()})},i=new MutationObserver(r);return i.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`hidden`,`style`,`data-state`]}),r(),()=>{cancelAnimationFrame(n),i.disconnect()}},[t,e]),t?.section===e?t:null}export{x as i,b as n,p as r,s as t};
1
+ import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t}from"./vendor-react-DwNgTV1j.js";import{d as n}from"./i18n-D5XUOwJ3.js";import{i as r,r as i,t as a}from"./runtime-capabilities-B7qveLBm.js";var o=e(t(),1),s=`section`,c={models:`config:configPage.models`,notifications:`config:configPage.notifications`,interface:`config:configPage.interface`,shortcuts:`config:configPage.shortcuts`,"desktop-pet":`config:configPage.desktopPet`,updates:`config:configPage.appUpdates`,labs:`config:configPage.labs`,about:`config:configPage.about`,"remote-access":`config:configPage.remoteAccess`,"mobile-server":`config:configPage.mobileServer`},l=[{id:`sec-models`,section:`models`,card:s,titleKey:`config:configPage.models`,keywords:[`model`,`provider`,`llm`,`api`,`模型`,`供应商`,`大模型`]},{id:`sec-notifications`,section:`notifications`,card:s,titleKey:`config:configPage.notifications`,keywords:[`notification`,`push`,`alert`,`通知`,`推送`,`提醒`]},{id:`sec-interface`,section:`interface`,card:s,titleKey:`config:configPage.interface`,keywords:[`interface`,`theme`,`appearance`,`display`,`界面`,`主题`,`外观`,`显示`]},{id:`sec-shortcuts`,section:`shortcuts`,card:s,titleKey:`config:configPage.shortcuts`,keywords:[`keyboard`,`shortcut`,`hotkey`,`keybinding`,`voice`,`push to talk`,`快捷键`,`按键`,`键盘`,`语音`,`长按`]},{id:`sec-desktop-pet`,section:`desktop-pet`,card:s,titleKey:`config:configPage.desktopPet`,keywords:[`pet`,`petdex`,`宠物`,`桌宠`]},{id:`sec-updates`,section:`updates`,card:s,titleKey:`config:configPage.appUpdates`,keywords:[`update`,`upgrade`,`version`,`更新`,`升级`,`版本`]},{id:`sec-labs`,section:`labs`,card:s,titleKey:`config:configPage.labs`,keywords:[`labs`,`beta`,`experimental`,`preview`,`实验`,`测试版`,`尝鲜`,`内测`]},{id:`sec-about`,section:`about`,card:s,titleKey:`config:configPage.about`,keywords:[`about`,`info`,`license`,`关于`,`信息`,`许可`]},{id:`sec-remote-access`,section:`remote-access`,card:s,titleKey:`config:configPage.remoteAccess`,keywords:[`remote`,`network`,`phone`,`远程`,`网络`,`手机`]},{id:`sec-mobile-server`,section:`mobile-server`,card:s,titleKey:`config:configPage.mobileServer`,keywords:[`server`,`remote`,`network`,`服务器`,`远程`,`网络`]},{id:`models-current-model`,section:`models`,card:`models-current-model`,targetId:`models-connections`,titleKey:`config:configPage.currentChatModel`,keywords:[`model`,`provider`,`quick setup`,`模型`,`供应商`,`快速配置`,`对话模型`]},{id:`models-connections`,section:`models`,card:`models-connections`,titleKey:`config:configPage.manageConnections`,keywords:[`provider`,`connection`,`api key`,`import`,`连接`,`供应商`,`导入`,`密钥`]},{id:`models-runtime-policy`,section:`models`,card:`models-current-model`,targetId:`models-runtime-policy`,titleKey:`config:configPage.agentRuntimePolicy`,keywords:[`runtime`,`agent`,`policy`,`thinking`,`tools`,`运行策略`,`运行时`,`执行策略`,`思考强度`,`可用工具`]},{id:`models-fallback`,section:`models`,card:`models-current-model`,targetId:`models-runtime-policy`,titleKey:`config:providerWorkbench.fallbackModels`,keywords:[`fallback`,`backup`,`failover`,`quota`,`备用模型`,`备选`,`额度`,`切换模型`]},{id:`models-auxiliary`,section:`models`,card:`models-current-model`,targetId:`models-runtime-policy`,titleKey:`config:providerWorkbench.auxiliaryModel`,keywords:[`auxiliary`,`helper model`,`title`,`compaction`,`summary`,`辅助模型`,`标题`,`压缩`,`摘要`,`记忆`]},{id:`models-subagents`,section:`models`,card:`models-subagents`,targetId:`models-subagents`,titleKey:`config:subagents.title`,keywords:[`subagent`,`agent definition`,`tier`,`fast`,`strong`,`子代理`,`子 Agent`,`档位`,`便宜模型`,`.pisper/agents`]},{id:`models-permission-rules`,section:`models`,card:`models-permission-rules`,targetId:`models-permission-rules`,titleKey:`config:permissionRules.title`,keywords:[`permission`,`allow`,`deny`,`approval`,`rule`,`权限`,`审批`,`允许`,`禁止`,`规则`]},{id:`models-visual`,section:`models`,card:`models-visual`,targetId:`models-visual`,expandGroup:`models-advanced`,titleKey:`config:configPage.currentVisualModel`,keywords:[`image`,`video`,`visual`,`图片`,`图像`,`视频`,`视觉`,`生图`]},{id:`notifications-browser`,section:`notifications`,card:`notifications-browser`,titleKey:`config:notificationSettings.notification`,keywords:[`browser`,`system`,`push`,`浏览器通知`,`系统通知`,`推送`]},{id:`notifications-templates`,section:`notifications`,card:`notifications-templates`,titleKey:`config:notificationSettings.notificationTemplates`,keywords:[`template`,`模板`,`通知模板`]},{id:`interface-custom-ui`,section:`interface`,card:`interface-custom-ui`,titleKey:`navigation:shell.components`,sectionTitleKey:`custom-ui:moved.title`,keywords:[`custom ui`,`standalone widgets`,`component`,`native`,`manifest`,`独立组件`,`自定义组件`,`组件`]},{id:`interface-appearance`,section:`interface`,card:`interface-appearance`,titleKey:`config:interfaceSettings.appearance`,keywords:[`theme`,`dark`,`light`,`accent`,`主题`,`深色`,`浅色`,`强调色`,`外观`]},{id:`interface-style`,section:`interface`,card:`interface-style`,expandGroup:`interface-advanced`,titleKey:`config:interfaceSettings.interfaceStyle`,keywords:[`font`,`corner`,`radius`,`字体`,`字号`,`圆角`]},{id:`interface-motion`,section:`interface`,card:`interface-motion`,expandGroup:`interface-advanced`,titleKey:`config:interfaceSettings.displayAndMotion`,keywords:[`motion`,`density`,`animation`,`动效`,`动画`,`密度`,`显示`]},{id:`interface-language`,section:`interface`,card:`interface-language`,titleKey:`config:languageSettings.displayLanguage`,keywords:[`language`,`chinese`,`english`,`语言`,`中文`,`英文`,`英语`]},{id:`desktop-pet-settings`,section:`desktop-pet`,card:`desktop-pet-settings`,titleKey:`config:desktopPetSettings.title`,keywords:[`pet`,`宠物`,`桌宠`,`宠物设置`]},{id:`desktop-pet-install`,section:`desktop-pet`,card:`desktop-pet-install`,titleKey:`config:desktopPetSettings.installTitle`,keywords:[`petdex`,`install`,`宠物安装`,`添加宠物`]},{id:`desktop-pet-installed`,section:`desktop-pet`,card:`desktop-pet-installed`,titleKey:`config:desktopPetSettings.installedTitle`,keywords:[`installed`,`已安装`,`宠物列表`]},{id:`mobile-server-main`,section:`mobile-server`,card:`mobile-server-main`,titleKey:`config:mobileServer.title`,keywords:[`server`,`remote`,`服务器`,`远程`,`手机访问`]},{id:`mobile-server-local`,section:`mobile-server`,card:`mobile-server-local`,titleKey:`config:mobileServer.localTitle`,keywords:[`local`,`on-device`,`本机`,`本地运行`]},{id:`remote-workspaces`,section:`remote-access`,card:`remote-workspaces`,titleKey:`config:remoteWorkspace.title`,keywords:[`linux`,`remote workspace`,`服务器`,`远程工作区`]},{id:`remote-access-main`,section:`remote-access`,card:`remote-access-main`,titleKey:`config:remoteAccess.title`,keywords:[`remote`,`network`,`phone`,`远程`,`网络`,`手机`]},{id:`remote-access-pairing`,section:`remote-access`,card:`remote-access-pairing`,titleKey:`config:remoteAccess.pairing`,keywords:[`pairing`,`qr`,`配对`,`二维码`]},{id:`remote-access-devices`,section:`remote-access`,card:`remote-access-devices`,titleKey:`config:remoteAccess.devices`,keywords:[`device`,`paired`,`设备`,`已配对`,`授权`]},{id:`updates-main`,section:`updates`,card:`updates-main`,titleKey:`config:updateSettings.pisperAppUpdates`,keywords:[`update`,`version`,`channel`,`更新`,`版本`,`升级`,`渠道`]},{id:`updates-components`,section:`updates`,card:`updates-components`,titleKey:`config:updateSettings.appComponents`,keywords:[`component`,`runtime`,`sidecar`,`组件`,`运行时`]},{id:`updates-cli`,section:`updates`,card:`updates-cli`,titleKey:`config:cliSettings.title`,keywords:[`cli`,`terminal`,`command`,`命令行`,`终端`,`命令`]},{id:`about-project`,section:`about`,card:`about-project`,titleKey:`config:aboutSettings.projectInformation`,keywords:[`project`,`version`,`license`,`项目`,`版本`,`许可`]},{id:`about-support`,section:`about`,card:`about-support`,titleKey:`config:aboutSettings.supportPisper`,keywords:[`support`,`donate`,`sponsor`,`支持`,`捐赠`,`赞助`]}],u={provider:[`sec-models`,`models-current-model`,`models-connections`],供应商:[`sec-models`,`models-current-model`,`models-connections`],model:[`sec-models`,`models-current-model`,`models-connections`],模型:[`sec-models`,`models-current-model`,`models-connections`],theme:[`sec-interface`,`interface-appearance`],主题:[`sec-interface`,`interface-appearance`],interface:[`sec-interface`,`interface-appearance`],界面:[`sec-interface`,`interface-appearance`,`interface-language`],diy:[`interface-custom-ui`],components:[`interface-custom-ui`],widgets:[`interface-custom-ui`],组件:[`interface-custom-ui`],pet:[`sec-desktop-pet`,`desktop-pet-settings`,`desktop-pet-install`,`desktop-pet-installed`],宠物:[`sec-desktop-pet`,`desktop-pet-settings`,`desktop-pet-install`,`desktop-pet-installed`],update:[`sec-updates`,`updates-main`,`updates-components`],更新:[`sec-updates`,`updates-main`,`updates-components`],network:[`sec-remote-access`,`sec-mobile-server`,`remote-access-main`],网络:[`sec-remote-access`,`sec-mobile-server`,`remote-access-main`],remote:[`sec-remote-access`,`sec-mobile-server`,`remote-access-main`],远程:[`sec-remote-access`,`sec-mobile-server`,`remote-access-main`],notification:[`sec-notifications`,`notifications-browser`,`notifications-templates`],通知:[`sec-notifications`,`notifications-browser`,`notifications-templates`],language:[`interface-language`],语言:[`interface-language`]},d=12;function f(e){return[n(e.titleKey,`zh-CN`).toLowerCase(),n(e.titleKey,`en-US`).toLowerCase()]}function p(e,t,{capabilities:o=a,mobileApp:s}={}){let p=e.trim().toLowerCase();if(!p)return[];let m=new Set(u[p]||[]);for(let e of p.split(/\s+/))for(let t of u[e]||[])m.add(t);let h=[];for(let e of l){if(!i(o,e.section)||e.id===`models-visual`&&!r(o,`visualGeneration`)||s!==void 0&&(e.section===`mobile-server`&&!s||e.section===`remote-access`&&s)||typeof window<`u`&&(e.id===`remote-workspaces`&&!window.pisperDesktop?.remoteWorkspaces||e.id===`remote-access-main`&&window.__PISPER_REMOTE_WORKSPACE__))continue;let[t,n]=f(e),a=0;m.has(e.id)?a=100:t===p||n===p?a=90:t.startsWith(p)||n.startsWith(p)?a=80:t.includes(p)||n.includes(p)?a=65:(e.keywords||[]).some(e=>{let t=e.toLowerCase();return t.includes(p)?p.length>=2||/[\u4e00-\u9fff]/.test(p):/[\u4e00-\u9fff]/.test(t)&&t.includes(p)})&&(a=40),a>0&&h.push({entry:e,score:a})}h.sort((e,t)=>t.score-e.score);let g=new Set,_=[];for(let{entry:e}of h){let r={entry:e,title:n(e.titleKey,t),sectionTitle:n(e.sectionTitleKey||c[e.section],t)},i=`${e.section}|${r.title}`;if(!g.has(i)&&(g.add(i),_.push(r),_.length>=d))break}return _}var m=`pisper:config-card-highlight`,h=null,g=0,_=new Set;function v(){for(let e of _)e()}function y(e){return _.add(e),()=>{_.delete(e)}}function b(e,t,n={}){h={card:e,section:t,...n,targetId:n.targetId||e,navigationKey:++g},v(),window.dispatchEvent(new Event(m))}function x(e){let t=(0,o.useSyncExternalStore)(y,()=>h,()=>null);return(0,o.useEffect)(()=>{if(!t||t.section!==e)return;let n=0,r=()=>{cancelAnimationFrame(n),n=requestAnimationFrame(()=>{if(h?.navigationKey!==t.navigationKey)return;let e=Array.from(document.querySelectorAll(`[data-config-target], [data-config-card]`)).find(e=>e.dataset.configTarget===t.targetId||e.dataset.configCard===t.targetId);if(!e||!e.getClientRects().length)return;let n=e.querySelector(`input:not([disabled]), button:not([disabled]), select:not([disabled]), [tabindex="0"]`)||e;!n.hasAttribute(`tabindex`)&&n===e&&(n.tabIndex=-1),n.focus({preventScroll:!0}),e.scrollIntoView({block:`center`}),i.disconnect(),h=null,v()})},i=new MutationObserver(r);return i.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`hidden`,`style`,`data-state`]}),r(),()=>{cancelAnimationFrame(n),i.disconnect()}},[t,e]),t?.section===e?t:null}export{x as i,b as n,p as r,s as t};
@@ -1,4 +1,4 @@
1
- import{t as e}from"./event-stream-Dh7h5sXJ.js";import{i as t,r as n,t as r}from"./session-web-preview-guvsmkWE.js";import{i}from"./web-preview-C7DdG9JP.js";import{t as a}from"./useNativeBrowser-C0j3zafh.js";var o=`pisper-agent-overlay`,s=28,c=`124, 92, 255`,l=`a,button,input,textarea,select,summary,label,[role="button"],[role="link"],[role="tab"],[role="menuitem"],[contenteditable="true"]`,u=`
1
+ import{t as e}from"./event-stream-B9eeQcgA.js";import{i as t,r as n,t as r}from"./session-web-preview-guvsmkWE.js";import{i}from"./web-preview-C7DdG9JP.js";import{t as a}from"./useNativeBrowser-C0j3zafh.js";var o=`pisper-agent-overlay`,s=28,c=`124, 92, 255`,l=`a,button,input,textarea,select,summary,label,[role="button"],[role="link"],[role="tab"],[role="menuitem"],[contenteditable="true"]`,u=`
2
2
  const done = (value) => JSON.stringify({ ok: true, ...value });
3
3
  const pageInfo = () => ({ url: location.href, title: document.title });
4
4
  const isVisible = (element) => {
@@ -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{t as r}from"./use-i18n-BVRhlQ1v.js";import{t as i}from"./x-07u4-129.js";import{a,c as o,i as s,n as c,o as l,r as u,s as d,t as f}from"./dist-BHkR6BLP.js";import{t as p}from"./utils-C8uzG5AZ.js";import{t as m}from"./button-CCcCN8tE.js";var h=e(t(),1),g=n(),_=h.createContext(!1),v=h.createContext(null);function y({busy:e=!1,open:t,defaultOpen:n=!1,onOpenChange:r,...i}){let[a,o]=h.useState(n);return(0,g.jsx)(_.Provider,{value:e,children:(0,g.jsx)(f,{"data-slot":`dialog`,open:t??a,onOpenChange:n=>{!n&&e||(t===void 0&&o(n),r?.(n))},...i})})}function b({...e}){return(0,g.jsx)(o,{"data-slot":`dialog-trigger`,...e})}function x({...e}){return(0,g.jsx)(l,{"data-slot":`dialog-portal`,...e})}function S({...e}){return(0,g.jsx)(c,{"data-slot":`dialog-close`,...e})}function C({className:e,...t}){return(0,g.jsx)(a,{"data-slot":`dialog-overlay`,className:p(`fixed inset-0 isolate z-50 bg-[var(--overlay-scrim)] duration-[var(--duration-fast,150ms)] data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0`,e),...t})}function w({className:e,overlayClassName:t,children:n,showCloseButton:a=!0,size:o=`default`,surface:s=`default`,scrollMode:l=`content`,ref:d,onEscapeKeyDown:f,onPointerDownOutside:y,onInteractOutside:b,...S}){let{t:w}=r(),T=h.useContext(_),[E,D]=h.useState(null),O=h.useCallback(e=>{if(D(e),typeof d==`function`)return d(e);d&&(d.current=e)},[d]);return(0,g.jsxs)(x,{children:[(0,g.jsx)(C,{className:t}),(0,g.jsx)(u,{...S,ref:O,"data-slot":`dialog-content`,"data-surface":s,"data-scroll-mode":l,"aria-busy":T||S[`aria-busy`]||void 0,onEscapeKeyDown:e=>{f?.(e),T&&e.preventDefault()},onPointerDownOutside:e=>{y?.(e),T&&e.preventDefault()},onInteractOutside:e=>{b?.(e),T&&e.preventDefault()},className:p(`fixed top-1/2 left-1/2 z-50 grid max-h-[calc(100vh-2rem)] supports-[height:100dvh]:max-h-[calc(100dvh-2rem)] w-full -translate-x-1/2 -translate-y-1/2 gap-4 overflow-y-auto overscroll-contain rounded-[var(--r-lg)] bg-popover p-4 text-sm text-popover-foreground shadow-float duration-[var(--duration-fast,150ms)] outline-none data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0`,o==="default"&&`max-w-[min(92vw,520px)]`,o===`compact`&&`max-w-[min(92vw,430px)]`,o===`wide`&&`max-w-[min(92vw,600px)]`,s===`confirmation`&&`border border-stroke`,l===`body`&&`flex flex-col overflow-hidden`,e),children:(0,g.jsxs)(v.Provider,{value:E,children:[n,a&&(0,g.jsx)(c,{"data-slot":`dialog-close`,asChild:!0,children:(0,g.jsxs)(m,{variant:`ghost`,className:`absolute top-2 right-2`,size:`icon-sm`,disabled:T,children:[(0,g.jsx)(i,{}),(0,g.jsx)(`span`,{className:`sr-only`,children:w(`common:ui.closeDialog`)})]})})]})})]})}function T({className:e,...t}){return(0,g.jsx)(`div`,{"data-slot":`dialog-body`,className:p(`min-h-0 flex-1 overflow-y-auto overscroll-contain`,e),...t})}function E({className:e,...t}){return(0,g.jsx)(`div`,{"data-slot":`dialog-header`,className:p(`flex shrink-0 flex-col gap-2`,e),...t})}function D({className:e,showCloseButton:t=!1,children:n,...i}){let{t:a}=r();return(0,g.jsxs)(`div`,{"data-slot":`dialog-footer`,className:p(`-mx-4 -mb-4 flex shrink-0 flex-col-reverse gap-2 rounded-b-[var(--r-lg)] border-t border-stroke bg-surface-subtle px-4 py-3 sm:flex-row sm:justify-end`,e),...i,children:[n,t&&(0,g.jsx)(c,{asChild:!0,children:(0,g.jsx)(m,{variant:`outline`,size:`dialogAction`,children:a(`common:ui.closeDialog`)})})]})}function O({className:e,...t}){return(0,g.jsx)(d,{"data-slot":`dialog-title`,className:p(`font-heading text-[15px] leading-snug font-medium`,e),...t})}function k({className:e,...t}){return(0,g.jsx)(s,{"data-slot":`dialog-description`,className:p(`text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground`,e),...t})}export{k as a,v as c,w as i,O as l,T as n,D as o,S as r,E as s,y as t,b as u};
1
+ import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t,r as n}from"./vendor-react-DwNgTV1j.js";import{t as r}from"./use-i18n-AM3jlRYR.js";import{t as i}from"./x-07u4-129.js";import{a,c as o,i as s,n as c,o as l,r as u,s as d,t as f}from"./dist-BHkR6BLP.js";import{t as p}from"./utils-C8uzG5AZ.js";import{t as m}from"./button-CCcCN8tE.js";var h=e(t(),1),g=n(),_=h.createContext(!1),v=h.createContext(null);function y({busy:e=!1,open:t,defaultOpen:n=!1,onOpenChange:r,...i}){let[a,o]=h.useState(n);return(0,g.jsx)(_.Provider,{value:e,children:(0,g.jsx)(f,{"data-slot":`dialog`,open:t??a,onOpenChange:n=>{!n&&e||(t===void 0&&o(n),r?.(n))},...i})})}function b({...e}){return(0,g.jsx)(o,{"data-slot":`dialog-trigger`,...e})}function x({...e}){return(0,g.jsx)(l,{"data-slot":`dialog-portal`,...e})}function S({...e}){return(0,g.jsx)(c,{"data-slot":`dialog-close`,...e})}function C({className:e,...t}){return(0,g.jsx)(a,{"data-slot":`dialog-overlay`,className:p(`fixed inset-0 isolate z-50 bg-[var(--overlay-scrim)] duration-[var(--duration-fast,150ms)] data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0`,e),...t})}function w({className:e,overlayClassName:t,children:n,showCloseButton:a=!0,size:o=`default`,surface:s=`default`,scrollMode:l=`content`,ref:d,onEscapeKeyDown:f,onPointerDownOutside:y,onInteractOutside:b,...S}){let{t:w}=r(),T=h.useContext(_),[E,D]=h.useState(null),O=h.useCallback(e=>{if(D(e),typeof d==`function`)return d(e);d&&(d.current=e)},[d]);return(0,g.jsxs)(x,{children:[(0,g.jsx)(C,{className:t}),(0,g.jsx)(u,{...S,ref:O,"data-slot":`dialog-content`,"data-surface":s,"data-scroll-mode":l,"aria-busy":T||S[`aria-busy`]||void 0,onEscapeKeyDown:e=>{f?.(e),T&&e.preventDefault()},onPointerDownOutside:e=>{y?.(e),T&&e.preventDefault()},onInteractOutside:e=>{b?.(e),T&&e.preventDefault()},className:p(`fixed top-1/2 left-1/2 z-50 grid max-h-[calc(100vh-2rem)] supports-[height:100dvh]:max-h-[calc(100dvh-2rem)] w-full -translate-x-1/2 -translate-y-1/2 gap-4 overflow-y-auto overscroll-contain rounded-[var(--r-lg)] bg-popover p-4 text-sm text-popover-foreground shadow-float duration-[var(--duration-fast,150ms)] outline-none data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0`,o==="default"&&`max-w-[min(92vw,520px)]`,o===`compact`&&`max-w-[min(92vw,430px)]`,o===`wide`&&`max-w-[min(92vw,600px)]`,s===`confirmation`&&`border border-stroke`,l===`body`&&`flex flex-col overflow-hidden`,e),children:(0,g.jsxs)(v.Provider,{value:E,children:[n,a&&(0,g.jsx)(c,{"data-slot":`dialog-close`,asChild:!0,children:(0,g.jsxs)(m,{variant:`ghost`,className:`absolute top-2 right-2`,size:`icon-sm`,disabled:T,children:[(0,g.jsx)(i,{}),(0,g.jsx)(`span`,{className:`sr-only`,children:w(`common:ui.closeDialog`)})]})})]})})]})}function T({className:e,...t}){return(0,g.jsx)(`div`,{"data-slot":`dialog-body`,className:p(`min-h-0 flex-1 overflow-y-auto overscroll-contain`,e),...t})}function E({className:e,...t}){return(0,g.jsx)(`div`,{"data-slot":`dialog-header`,className:p(`flex shrink-0 flex-col gap-2`,e),...t})}function D({className:e,showCloseButton:t=!1,children:n,...i}){let{t:a}=r();return(0,g.jsxs)(`div`,{"data-slot":`dialog-footer`,className:p(`-mx-4 -mb-4 flex shrink-0 flex-col-reverse gap-2 rounded-b-[var(--r-lg)] border-t border-stroke bg-surface-subtle px-4 py-3 sm:flex-row sm:justify-end`,e),...i,children:[n,t&&(0,g.jsx)(c,{asChild:!0,children:(0,g.jsx)(m,{variant:`outline`,size:`dialogAction`,children:a(`common:ui.closeDialog`)})})]})}function O({className:e,...t}){return(0,g.jsx)(d,{"data-slot":`dialog-title`,className:p(`font-heading text-[15px] leading-snug font-medium`,e),...t})}function k({className:e,...t}){return(0,g.jsx)(s,{"data-slot":`dialog-description`,className:p(`text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground`,e),...t})}export{k as a,v as c,w as i,O as l,T as n,D as o,S as r,E as s,y as t,b as u};
@@ -1,2 +1,2 @@
1
- import{n as e}from"./http-response-PZN5QIRk.js";async function t(t,n){if(!t.ok)throw await e(t);if(!t.body)throw Error(`响应不包含可读取的数据流`);let r=t.body.getReader(),i=new TextDecoder,a=``,o=`message`,s=null,c=[],l=!1,u=()=>{if(!c.length)return o=`message`,!0;let e=JSON.parse(c.join(`
1
+ import{n as e}from"./http-response-scdqC11Q.js";async function t(t,n){if(!t.ok)throw await e(t);if(!t.body)throw Error(`响应不包含可读取的数据流`);let r=t.body.getReader(),i=new TextDecoder,a=``,o=`message`,s=null,c=[],l=!1,u=()=>{if(!c.length)return o=`message`,!0;let e=JSON.parse(c.join(`
2
2
  `)),t=n(o||`message`,e,{id:s})!==!1;return o=`message`,s=null,c=[],t},d=e=>{if(!e)return u();if(e.startsWith(`:`))return!0;let t=e.indexOf(`:`),n=t<0?e:e.slice(0,t),r=t<0?``:e.slice(t+1);if(r.startsWith(` `)&&(r=r.slice(1)),n===`event`){if(c.length&&!u())return!1;o=r}else n===`data`?c.push(r):n===`id`&&(s=r||null);return!0},f=(e=!1)=>{let t=0;for(let n=0;n<a.length;n+=1){let r=a.charCodeAt(n);if(r!==10&&r!==13)continue;if(r===13&&n+1>=a.length&&!e)break;let i=a.slice(t,n);if(r===13&&a.charCodeAt(n+1)===10&&(n+=1),t=n+1,!d(i))return a=a.slice(t),!1}if(a=a.slice(t),e&&a){let e=a;if(a=``,!d(e))return!1}return!e||u()};try{for(;!l;){let{value:e,done:t}=await r.read();if(a+=i.decode(e||new Uint8Array,{stream:!t}),!f(t)){l=!0;break}if(t)break}}catch(e){throw l=!0,e}finally{l&&await r.cancel().catch(()=>{}),r.releaseLock()}}export{t};
@@ -1 +1 @@
1
- import{t as e}from"./index-CiRnxTh1.js";import{t}from"./storage-DtvZ_lEu.js";var n=Object.freeze([`open`,`left`,`right`,`above`,`below`]);function r(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function i(e,t=`open`,r=``){return!e||!n.includes(t)?null:{sessionId:e,disposition:t,...r?{targetEntryId:r}:{}}}function a(e){if(!e)return null;try{let t=typeof e==`string`?JSON.parse(e):e;return r(t)?i(typeof t.sessionId==`string`?t.sessionId:``,typeof t.disposition==`string`?t.disposition:`open`,typeof t.targetEntryId==`string`?t.targetEntryId:``):null}catch{return null}}var o=`pisper:task-view-will-change`,s=`pisper:session-navigation-will-change`,c=`pisper:session-selected`,l=`pisper:active-session-changed`,u=`pisper:sessions-updated`,d=`pisper:command-palette-requested`,f=`pisper:session-command`,p=`pisper:session-branch-changed`,m=`pisper:new-task-focus`;function h(e){if(!e)return null;try{let t=JSON.parse(e);return typeof t.sessionId==`string`&&typeof t.entryId==`string`?{sessionId:t.sessionId,entryId:t.entryId}:null}catch{return null}}var g=``;function _(e=``){g=typeof e==`string`?e.slice(0,200):``,window.dispatchEvent(new Event(d))}function v(){let e=g;return g=``,e}function y(e){window.dispatchEvent(new CustomEvent(f,{detail:e}))}var b=!1;function x(){b=!0,window.dispatchEvent(new Event(m))}function S(){let e=b;return b=!1,e}function C(n,r=`open`,a=``){let o=i(n,r,a);o&&(window.dispatchEvent(new Event(s)),e.setItem(t.activeSession,n),localStorage.setItem(t.sessionOpenRequest,JSON.stringify(o)),a?localStorage.setItem(t.sessionMessageTarget,JSON.stringify({sessionId:n,entryId:a})):localStorage.removeItem(t.sessionMessageTarget),window.dispatchEvent(new CustomEvent(c,{detail:o})))}function w(e){let n=h(localStorage.getItem(t.sessionMessageTarget));return n?.sessionId===e?n.entryId:``}function T(e,n){let r=h(localStorage.getItem(t.sessionMessageTarget));r?.sessionId===e&&r.entryId===n&&localStorage.removeItem(t.sessionMessageTarget)}function E(){let e=a(localStorage.getItem(t.sessionOpenRequest));return localStorage.removeItem(t.sessionOpenRequest),e}function D(){let e=a(localStorage.getItem(t.sessionOpenRequest));return e?{type:`open`,sessionId:e.sessionId}:null}function O(e,t=``){window.dispatchEvent(new CustomEvent(l,{detail:{id:e||``,model:t||``}}))}function k(e){window.dispatchEvent(e?new CustomEvent(u,{detail:e}):new Event(u))}function A(e){let t=`detail`in e?e.detail:null;if(!t||typeof t!=`object`)return null;let{id:n,pinned:r,archived:i,unread:a,needsAttention:o,attentionReason:s}=t;return typeof n!=`string`||!n||typeof r!=`boolean`||typeof i!=`boolean`||typeof a!=`boolean`||typeof o!=`boolean`||s!==null&&s!==`approval`&&s!==`failure`?null:{id:n,pinned:r,archived:i,unread:a,needsAttention:o,attentionReason:s}}function j(e,t){let n=e=>{let n=A(e);n&&t(n)};return e.addEventListener(u,n),()=>e.removeEventListener(u,n)}function M(e){let t=`detail`in e?e.detail:null;if(!t||typeof t!=`object`)return null;let{id:n,name:r}=t;return typeof n==`string`&&n.length>0&&typeof r==`string`?{id:n,name:r}:null}function N(e,t){let n=e=>{let n=M(e);n&&t(n)};return e.addEventListener(u,n),()=>e.removeEventListener(u,n)}function P(e){let t=`detail`in e?e.detail:null;if(!t||typeof t!=`object`)return null;let{id:n,cwd:r}=t;return typeof n==`string`&&n.length>0&&typeof r==`string`&&r.length>0?{id:n,cwd:r}:null}function F(e,t){let n=e=>{let n=P(e);n&&t(n)};return e.addEventListener(u,n),()=>e.removeEventListener(u,n)}function I(e){let t=`detail`in e?e.detail:null;if(!t||typeof t!=`object`)return null;let{deletedIds:n}=t;return!Array.isArray(n)||!n.length||!n.every(e=>typeof e==`string`&&e.length>0)?null:{deletedIds:[...new Set(n)]}}function L(e,t){let n=e=>{let n=I(e);n&&t(n)};return e.addEventListener(u,n),()=>e.removeEventListener(u,n)}function R(e){e&&window.dispatchEvent(new CustomEvent(p,{detail:{sessionId:e}}))}function z(e){let t=t=>{let n=`detail`in t?t.detail:null,r=n&&typeof n==`object`?n.sessionId:null;typeof r==`string`&&r&&e(r)};return window.addEventListener(p,t),()=>window.removeEventListener(p,t)}export{j as C,L as S,v as T,x as _,s as a,z as b,O as c,T as d,S as f,_ as g,D as h,f as i,R as l,w as m,d as n,c as o,E as p,m as r,o as s,l as t,k as u,y as v,N as w,F as x,C as y};
1
+ import{t as e}from"./index-at6jiRd2.js";import{t}from"./storage-DtvZ_lEu.js";var n=Object.freeze([`open`,`left`,`right`,`above`,`below`]);function r(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function i(e,t=`open`,r=``){return!e||!n.includes(t)?null:{sessionId:e,disposition:t,...r?{targetEntryId:r}:{}}}function a(e){if(!e)return null;try{let t=typeof e==`string`?JSON.parse(e):e;return r(t)?i(typeof t.sessionId==`string`?t.sessionId:``,typeof t.disposition==`string`?t.disposition:`open`,typeof t.targetEntryId==`string`?t.targetEntryId:``):null}catch{return null}}var o=`pisper:task-view-will-change`,s=`pisper:session-navigation-will-change`,c=`pisper:session-selected`,l=`pisper:active-session-changed`,u=`pisper:sessions-updated`,d=`pisper:command-palette-requested`,f=`pisper:session-command`,p=`pisper:session-branch-changed`,m=`pisper:new-task-focus`;function h(e){if(!e)return null;try{let t=JSON.parse(e);return typeof t.sessionId==`string`&&typeof t.entryId==`string`?{sessionId:t.sessionId,entryId:t.entryId}:null}catch{return null}}var g=``;function _(e=``){g=typeof e==`string`?e.slice(0,200):``,window.dispatchEvent(new Event(d))}function v(){let e=g;return g=``,e}function y(e){window.dispatchEvent(new CustomEvent(f,{detail:e}))}var b=!1;function x(){b=!0,window.dispatchEvent(new Event(m))}function S(){let e=b;return b=!1,e}function C(n,r=`open`,a=``){let o=i(n,r,a);o&&(window.dispatchEvent(new Event(s)),e.setItem(t.activeSession,n),localStorage.setItem(t.sessionOpenRequest,JSON.stringify(o)),a?localStorage.setItem(t.sessionMessageTarget,JSON.stringify({sessionId:n,entryId:a})):localStorage.removeItem(t.sessionMessageTarget),window.dispatchEvent(new CustomEvent(c,{detail:o})))}function w(e){let n=h(localStorage.getItem(t.sessionMessageTarget));return n?.sessionId===e?n.entryId:``}function T(e,n){let r=h(localStorage.getItem(t.sessionMessageTarget));r?.sessionId===e&&r.entryId===n&&localStorage.removeItem(t.sessionMessageTarget)}function E(){let e=a(localStorage.getItem(t.sessionOpenRequest));return localStorage.removeItem(t.sessionOpenRequest),e}function D(){let e=a(localStorage.getItem(t.sessionOpenRequest));return e?{type:`open`,sessionId:e.sessionId}:null}function O(e,t=``){window.dispatchEvent(new CustomEvent(l,{detail:{id:e||``,model:t||``}}))}function k(e){window.dispatchEvent(e?new CustomEvent(u,{detail:e}):new Event(u))}function A(e){let t=`detail`in e?e.detail:null;if(!t||typeof t!=`object`)return null;let{id:n,pinned:r,archived:i,unread:a,needsAttention:o,attentionReason:s}=t;return typeof n!=`string`||!n||typeof r!=`boolean`||typeof i!=`boolean`||typeof a!=`boolean`||typeof o!=`boolean`||s!==null&&s!==`approval`&&s!==`failure`?null:{id:n,pinned:r,archived:i,unread:a,needsAttention:o,attentionReason:s}}function j(e,t){let n=e=>{let n=A(e);n&&t(n)};return e.addEventListener(u,n),()=>e.removeEventListener(u,n)}function M(e){let t=`detail`in e?e.detail:null;if(!t||typeof t!=`object`)return null;let{id:n,name:r}=t;return typeof n==`string`&&n.length>0&&typeof r==`string`?{id:n,name:r}:null}function N(e,t){let n=e=>{let n=M(e);n&&t(n)};return e.addEventListener(u,n),()=>e.removeEventListener(u,n)}function P(e){let t=`detail`in e?e.detail:null;if(!t||typeof t!=`object`)return null;let{id:n,cwd:r}=t;return typeof n==`string`&&n.length>0&&typeof r==`string`&&r.length>0?{id:n,cwd:r}:null}function F(e,t){let n=e=>{let n=P(e);n&&t(n)};return e.addEventListener(u,n),()=>e.removeEventListener(u,n)}function I(e){let t=`detail`in e?e.detail:null;if(!t||typeof t!=`object`)return null;let{deletedIds:n}=t;return!Array.isArray(n)||!n.length||!n.every(e=>typeof e==`string`&&e.length>0)?null:{deletedIds:[...new Set(n)]}}function L(e,t){let n=e=>{let n=I(e);n&&t(n)};return e.addEventListener(u,n),()=>e.removeEventListener(u,n)}function R(e){e&&window.dispatchEvent(new CustomEvent(p,{detail:{sessionId:e}}))}function z(e){let t=t=>{let n=`detail`in t?t.detail:null,r=n&&typeof n==`object`?n.sessionId:null;typeof r==`string`&&r&&e(r)};return window.addEventListener(p,t),()=>window.removeEventListener(p,t)}export{j as C,L as S,v as T,x as _,s as a,z as b,O as c,T as d,S as f,_ as g,D as h,f as i,R as l,w as m,d as n,c as o,E as p,m as r,o as s,l as t,k as u,y as v,N as w,F as x,C 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{t as r}from"./use-i18n-BVRhlQ1v.js";import{t as i}from"./createLucideIcon-Cd-3GVxJ.js";import{t as a}from"./arrow-up-DST6-qVQ.js";import{t as o}from"./braces-DQcXLGFF.js";import{t as s}from"./pencil-U08v_vV9.js";import{t as c}from"./refresh-cw-TbWxTY4K.js";import{t as l}from"./square-bHHVTT3G.js";import{t as u}from"./wrench-6pg6_bqI.js";import{t as d}from"./x-07u4-129.js";import{t as f}from"./utils-C8uzG5AZ.js";import{n as p}from"./button-CCcCN8tE.js";import{t as m}from"./kbd-CAufZTkl.js";import{s as h}from"./shortcuts-Dsd4mjfP.js";import{t as g}from"./StatusGlyph-1KgitlUg.js";import{s as _}from"./run-activity-CwfO0cui.js";var v=i(`corner-down-left`,[[`path`,{d:`M20 4v7a4 4 0 0 1-4 4H4`,key:`6o5b7l`}],[`path`,{d:`m9 10-5 5 5 5`,key:`1kshq7`}]]),y=e(t(),1),b=n(),x=`relative max-[650px]:after:absolute max-[650px]:after:-inset-1`,S=`inline-flex h-7 min-w-0 shrink cursor-pointer items-center gap-1.5 rounded-sm border border-transparent px-2 text-[13px] text-content-secondary transition-colors hover:bg-surface-hover hover:text-content aria-expanded:bg-surface-hover aria-expanded:text-content max-[650px]:h-9 max-[650px]:rounded-full max-[650px]:bg-surface-muted max-[650px]:dark:bg-surface-active max-[650px]:px-3 max-[650px]:text-content min-[651px]:pointer-coarse:h-11 ${x}`,C=`grid size-8 min-w-8 flex-none cursor-pointer place-items-center rounded-sm border-0 bg-transparent text-content-muted transition-colors hover:bg-surface-hover hover:text-content disabled:cursor-not-allowed disabled:opacity-50 max-[650px]:size-9 max-[650px]:min-w-9 min-[651px]:pointer-coarse:size-11 min-[651px]:pointer-coarse:min-w-11 ${x}`,w=`max-[650px]:size-4`;function T(e){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?`${n}:${String(r).padStart(2,`0`)}:${i}`:`${r}:${i}`}function E({startedAt:e}){let[t,n]=(0,y.useState)(()=>Date.now());(0,y.useEffect)(()=>{let e=window.setInterval(()=>n(Date.now()),1e3);return()=>window.clearInterval(e)},[]);let r=_(e,null,t);return r?(0,b.jsx)(`span`,{"aria-hidden":`true`,className:`shrink-0 font-mono text-[12.5px] text-content-muted tabular-nums`,"data-tray-clock":!0,children:T(r)}):null}var D=`flex min-h-[34px] min-w-0 items-center gap-2 pr-1.5 pl-3 text-[13px] max-[650px]:min-h-11 max-[650px]:pr-0 pointer-coarse:min-h-11`,O=`grid size-[26px] flex-none cursor-pointer place-items-center rounded-sm text-content-muted opacity-0 transition-opacity duration-(--d-fast) group-hover/queued:opacity-100 group-focus-within/queued:opacity-100 hover:bg-surface-hover hover:text-content focus-visible:opacity-100 disabled:cursor-default disabled:opacity-40 max-[650px]:size-11 max-[650px]:opacity-100 pointer-coarse:size-11 pointer-coarse:opacity-100 [@media(hover:none)]:opacity-100`;function k({streaming:e,compaction:t,startedAt:n,stopping:i=!1,onStop:a,queuedInputs:o=[],withdrawingInputIds:c=[],onEdit:u,onCancel:h,onSendNow:_,runRow:y=!0,queueList:x=!0}){let{t:S}=r(),C=!!t?.active,w=!!e&&y||C,T=x?o:[];if(!w&&!T.length)return null;let k=S(`chat:focusSession.sentToTheRunningAgent`);return(0,b.jsxs)(`div`,{className:`composer-tray mx-3.5 flex min-w-0 flex-col overflow-hidden rounded-t-(--r-lg) border border-b-0 border-stroke bg-well text-content-secondary max-[650px]:mx-2 [&>*+*]:border-t [&>*+*]:border-stroke`,"data-composer-tray":!0,children:[w&&(0,b.jsxs)(`div`,{className:D,"data-run-bar":C?`compacting`:`running`,children:[(0,b.jsxs)(`span`,{role:`status`,className:`flex min-w-0 flex-1 items-center gap-2`,children:[C?(0,b.jsx)(p,{className:`size-3.5 flex-none text-content-secondary`}):(0,b.jsx)(g,{status:`run`,className:`size-4`}),(0,b.jsx)(`span`,{className:`shrink-0 text-content`,children:S(C?`chat:focusSession.compactingContext`:`chat:focusSession.running`)}),e&&(0,b.jsx)(E,{startedAt:n})]}),e&&a&&(0,b.jsxs)(`button`,{type:`button`,className:`inline-flex h-[26px] shrink-0 cursor-pointer items-center gap-1.5 rounded-sm px-2 text-[13px] text-content transition-colors hover:bg-surface-hover disabled:cursor-default disabled:opacity-60 max-[650px]:h-11 max-[650px]:min-w-[72px] max-[650px]:justify-center pointer-coarse:h-11 pointer-coarse:min-w-[72px]`,"aria-label":S(i?`chat:focusSession.stopping`:`chat:focusSession.stop`),title:S(`chat:focusSession.stopRunShortcut`),"aria-busy":i||void 0,disabled:i,onClick:a,"data-run-stop":!0,children:[(0,b.jsx)(l,{size:10,fill:`currentColor`,"aria-hidden":`true`}),S(i?`chat:focusSession.stopping`:`chat:focusSession.stop`),(0,b.jsx)(m,{className:`max-[650px]:hidden pointer-coarse:hidden`,children:`Esc`})]})]}),T.length>0&&(0,b.jsx)(`ul`,{className:`m-0 flex max-h-[136px] min-w-0 list-none flex-col overflow-x-hidden overflow-y-auto overscroll-contain p-0 [&>*+*]:border-t [&>*+*]:border-stroke-soft`,"aria-label":k,"data-pisper-queue-size":T.length,tabIndex:T.length>3?0:void 0,children:T.map((e,t)=>{let n=typeof e.id==`string`?e.id:``,r=c.includes(n),i=!n||r,a=String(e.text||``);return(0,b.jsxs)(`li`,{className:f(D,`group/queued`),"aria-busy":r||void 0,children:[(0,b.jsx)(`span`,{className:`inline-flex h-[18px] flex-none items-center rounded-xs border border-stroke bg-solid px-1.5 text-[11.5px] text-content-muted`,"data-queued-behavior":e.behavior===`steer`?`steer`:`followUp`,children:e.behavior===`steer`?S(`board:composer.queuedSteer`):S(`board:composer.queuedFollowUp`)}),(0,b.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-content [overflow-wrap:anywhere]`,title:a,children:a}),_&&(0,b.jsx)(`button`,{type:`button`,className:O,"aria-label":S(`board:composer.sendQueuedNow`),title:S(`board:composer.sendQueuedNow`),disabled:i,"data-queued-send-now":!0,onClick:()=>_(n),children:(0,b.jsx)(v,{size:14,"aria-hidden":`true`})}),u&&(0,b.jsx)(`button`,{type:`button`,className:O,"aria-label":S(`board:composer.editQueued`),title:S(`board:composer.editQueued`),disabled:i,"data-queued-edit":!0,onClick:()=>void u(n),children:(0,b.jsx)(s,{size:14,"aria-hidden":`true`})}),h&&(0,b.jsx)(`button`,{type:`button`,className:O,"aria-label":S(`board:composer.cancelQueued`),title:S(`board:composer.cancelQueued`),disabled:i,"data-queued-cancel":!0,onClick:()=>void h(n),children:(0,b.jsx)(d,{size:14,"aria-hidden":`true`})})]},n||`${e.behavior}-${t}`)})})]})}function A({invocation:e,onRemove:t}){let{t:n}=r();return(0,b.jsxs)(`div`,{className:`composer-resource-chip [&.workflow]:border-success-border [&.workflow]:bg-success-soft [&.workflow]:text-success-strong [&_button]:grid [&_button]:size-6 [&_button]:place-items-center [&_button]:rounded-xs [&_button]:text-content-muted [&_button]:hover:bg-surface-hover [&_button]:hover:text-content inline-flex h-7 self-start items-center gap-1.5 rounded-sm border border-star-border bg-star-soft pr-0.5 pl-2 text-xs font-medium text-star-strong max-[650px]:h-11 max-[650px]:[&_button]:size-11 ${e.kind}`,children:[e.kind===`tool`?(0,b.jsx)(u,{size:13}):(0,b.jsx)(o,{size:13}),(0,b.jsxs)(`span`,{children:[e.kind===`skill`?`Skill`:e.kind===`tool`?n(`chat:resourcePicker.tool`):n(`chat:resourcePicker.workflow`),` `,`· `,e.resourceName]}),(0,b.jsx)(`button`,{type:`button`,"aria-label":n(`chat:resourcePicker.remove`),onClick:t,children:(0,b.jsx)(d,{size:13})})]})}function j({streaming:e,queueing:t,submitting:n=!1,stopping:i=!1,preparing:o=!1,hasDraft:s=!1,canQueue:u=!1,blockedReason:d,disabled:f,onLongPress:p,longPressHint:m,onStop:g}){let{t:_}=r(),v=h(`sendMessage`),S=(0,y.useRef)(null),C=(0,y.useRef)(!1),T=()=>{S.current&&clearTimeout(S.current),S.current=null};(0,y.useEffect)(()=>{let e=S;return()=>{e.current&&clearTimeout(e.current)}},[]);let E=!!(g&&e&&!s),D=!!(e&&!(s&&u))&&!E,O=t||n||i||o,k=f||O||D||!!d,A=_(o?`chat:focusSession.preparingAttachments`:i?`chat:focusSession.stopping`:E?`chat:focusSession.stop`:`chat:focusSession.sendMessage`);return(0,b.jsx)(`button`,{type:E?`button`:`submit`,"data-send-mode":E?`stop`:`send`,className:`send-button grid size-8 min-w-8 flex-none cursor-pointer place-items-center rounded-full border border-transparent bg-star text-on-accent transition-[background-color,opacity] select-none [-webkit-touch-callout:none] hover:enabled:bg-star-hover active:enabled:translate-y-px disabled:cursor-not-allowed disabled:opacity-30 aria-disabled:opacity-30 max-[650px]:disabled:bg-surface-muted max-[650px]:disabled:text-content max-[650px]:disabled:opacity-100 max-[650px]:aria-disabled:bg-surface-muted max-[650px]:aria-disabled:text-content max-[650px]:aria-disabled:opacity-100 max-[650px]:dark:disabled:bg-surface-active max-[650px]:dark:aria-disabled:bg-surface-active data-[send-mode=stop]:bg-surface-muted data-[send-mode=stop]:text-content data-[send-mode=stop]:hover:enabled:bg-surface-hover dark:data-[send-mode=stop]:bg-surface-active max-[650px]:size-9 max-[650px]:min-w-9 min-[651px]:pointer-coarse:size-11 min-[651px]:pointer-coarse:min-w-11 ${x}`,title:d||(!O&&v?`${A} (${v})`:A),"aria-label":d?`${A}: ${d}`:A,"aria-busy":O||void 0,"aria-disabled":k||void 0,"aria-description":p&&!E?m:void 0,"data-long-press":p&&!E?`steer`:void 0,onPointerDown:e=>{C.current=!1,!(!p||E||k||e.pointerType===`mouse`)&&(T(),S.current=setTimeout(()=>{S.current=null,C.current=!0,p()},500))},onPointerUp:T,onPointerCancel:T,onPointerLeave:T,onContextMenu:e=>{p&&e.preventDefault()},onClick:e=>{if(C.current){C.current=!1,e.preventDefault();return}if(k){e.preventDefault();return}E&&g?.()},disabled:!d&&k,children:O?(0,b.jsx)(c,{className:`animate-spin ${w}`,size:17}):E?(0,b.jsx)(l,{size:13,fill:`currentColor`,"aria-hidden":`true`}):(0,b.jsx)(a,{size:17,strokeWidth:2.1,className:w})})}export{A as a,T as c,x as i,C as n,j as o,w as r,k as s,S as t};
1
+ import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t,r as n}from"./vendor-react-DwNgTV1j.js";import{t as r}from"./use-i18n-AM3jlRYR.js";import{t as i}from"./createLucideIcon-Cd-3GVxJ.js";import{t as a}from"./arrow-up-DST6-qVQ.js";import{t as o}from"./braces-DQcXLGFF.js";import{t as s}from"./pencil-U08v_vV9.js";import{t as c}from"./refresh-cw-TbWxTY4K.js";import{t as l}from"./square-bHHVTT3G.js";import{t as u}from"./wrench-6pg6_bqI.js";import{t as d}from"./x-07u4-129.js";import{t as f}from"./utils-C8uzG5AZ.js";import{n as p}from"./button-CCcCN8tE.js";import{t as m}from"./kbd-CAufZTkl.js";import{s as h}from"./shortcuts-BsrTXPiU.js";import{t as g}from"./StatusGlyph-1KgitlUg.js";import{s as _}from"./run-activity-CwfO0cui.js";var v=i(`corner-down-left`,[[`path`,{d:`M20 4v7a4 4 0 0 1-4 4H4`,key:`6o5b7l`}],[`path`,{d:`m9 10-5 5 5 5`,key:`1kshq7`}]]),y=e(t(),1),b=n(),x=`relative max-[650px]:after:absolute max-[650px]:after:-inset-1`,S=`inline-flex h-7 min-w-0 shrink cursor-pointer items-center gap-1.5 rounded-sm border border-transparent px-2 text-[13px] text-content-secondary transition-colors hover:bg-surface-hover hover:text-content aria-expanded:bg-surface-hover aria-expanded:text-content max-[650px]:h-9 max-[650px]:rounded-full max-[650px]:bg-surface-muted max-[650px]:dark:bg-surface-active max-[650px]:px-3 max-[650px]:text-content min-[651px]:pointer-coarse:h-11 ${x}`,C=`grid size-8 min-w-8 flex-none cursor-pointer place-items-center rounded-sm border-0 bg-transparent text-content-muted transition-colors hover:bg-surface-hover hover:text-content disabled:cursor-not-allowed disabled:opacity-50 max-[650px]:size-9 max-[650px]:min-w-9 min-[651px]:pointer-coarse:size-11 min-[651px]:pointer-coarse:min-w-11 ${x}`,w=`max-[650px]:size-4`;function T(e){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?`${n}:${String(r).padStart(2,`0`)}:${i}`:`${r}:${i}`}function E({startedAt:e}){let[t,n]=(0,y.useState)(()=>Date.now());(0,y.useEffect)(()=>{let e=window.setInterval(()=>n(Date.now()),1e3);return()=>window.clearInterval(e)},[]);let r=_(e,null,t);return r?(0,b.jsx)(`span`,{"aria-hidden":`true`,className:`shrink-0 font-mono text-[12.5px] text-content-muted tabular-nums`,"data-tray-clock":!0,children:T(r)}):null}var D=`flex min-h-[34px] min-w-0 items-center gap-2 pr-1.5 pl-3 text-[13px] max-[650px]:min-h-11 max-[650px]:pr-0 pointer-coarse:min-h-11`,O=`grid size-[26px] flex-none cursor-pointer place-items-center rounded-sm text-content-muted opacity-0 transition-opacity duration-(--d-fast) group-hover/queued:opacity-100 group-focus-within/queued:opacity-100 hover:bg-surface-hover hover:text-content focus-visible:opacity-100 disabled:cursor-default disabled:opacity-40 max-[650px]:size-11 max-[650px]:opacity-100 pointer-coarse:size-11 pointer-coarse:opacity-100 [@media(hover:none)]:opacity-100`;function k({streaming:e,compaction:t,startedAt:n,stopping:i=!1,onStop:a,queuedInputs:o=[],withdrawingInputIds:c=[],onEdit:u,onCancel:h,onSendNow:_,runRow:y=!0,queueList:x=!0}){let{t:S}=r(),C=!!t?.active,w=!!e&&y||C,T=x?o:[];if(!w&&!T.length)return null;let k=S(`chat:focusSession.sentToTheRunningAgent`);return(0,b.jsxs)(`div`,{className:`composer-tray mx-3.5 flex min-w-0 flex-col overflow-hidden rounded-t-(--r-lg) border border-b-0 border-stroke bg-well text-content-secondary max-[650px]:mx-2 [&>*+*]:border-t [&>*+*]:border-stroke`,"data-composer-tray":!0,children:[w&&(0,b.jsxs)(`div`,{className:D,"data-run-bar":C?`compacting`:`running`,children:[(0,b.jsxs)(`span`,{role:`status`,className:`flex min-w-0 flex-1 items-center gap-2`,children:[C?(0,b.jsx)(p,{className:`size-3.5 flex-none text-content-secondary`}):(0,b.jsx)(g,{status:`run`,className:`size-4`}),(0,b.jsx)(`span`,{className:`shrink-0 text-content`,children:S(C?`chat:focusSession.compactingContext`:`chat:focusSession.running`)}),e&&(0,b.jsx)(E,{startedAt:n})]}),e&&a&&(0,b.jsxs)(`button`,{type:`button`,className:`inline-flex h-[26px] shrink-0 cursor-pointer items-center gap-1.5 rounded-sm px-2 text-[13px] text-content transition-colors hover:bg-surface-hover disabled:cursor-default disabled:opacity-60 max-[650px]:h-11 max-[650px]:min-w-[72px] max-[650px]:justify-center pointer-coarse:h-11 pointer-coarse:min-w-[72px]`,"aria-label":S(i?`chat:focusSession.stopping`:`chat:focusSession.stop`),title:S(`chat:focusSession.stopRunShortcut`),"aria-busy":i||void 0,disabled:i,onClick:a,"data-run-stop":!0,children:[(0,b.jsx)(l,{size:10,fill:`currentColor`,"aria-hidden":`true`}),S(i?`chat:focusSession.stopping`:`chat:focusSession.stop`),(0,b.jsx)(m,{className:`max-[650px]:hidden pointer-coarse:hidden`,children:`Esc`})]})]}),T.length>0&&(0,b.jsx)(`ul`,{className:`m-0 flex max-h-[136px] min-w-0 list-none flex-col overflow-x-hidden overflow-y-auto overscroll-contain p-0 [&>*+*]:border-t [&>*+*]:border-stroke-soft`,"aria-label":k,"data-pisper-queue-size":T.length,tabIndex:T.length>3?0:void 0,children:T.map((e,t)=>{let n=typeof e.id==`string`?e.id:``,r=c.includes(n),i=!n||r,a=String(e.text||``);return(0,b.jsxs)(`li`,{className:f(D,`group/queued`),"aria-busy":r||void 0,children:[(0,b.jsx)(`span`,{className:`inline-flex h-[18px] flex-none items-center rounded-xs border border-stroke bg-solid px-1.5 text-[11.5px] text-content-muted`,"data-queued-behavior":e.behavior===`steer`?`steer`:`followUp`,children:e.behavior===`steer`?S(`board:composer.queuedSteer`):S(`board:composer.queuedFollowUp`)}),(0,b.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-content [overflow-wrap:anywhere]`,title:a,children:a}),_&&(0,b.jsx)(`button`,{type:`button`,className:O,"aria-label":S(`board:composer.sendQueuedNow`),title:S(`board:composer.sendQueuedNow`),disabled:i,"data-queued-send-now":!0,onClick:()=>_(n),children:(0,b.jsx)(v,{size:14,"aria-hidden":`true`})}),u&&(0,b.jsx)(`button`,{type:`button`,className:O,"aria-label":S(`board:composer.editQueued`),title:S(`board:composer.editQueued`),disabled:i,"data-queued-edit":!0,onClick:()=>void u(n),children:(0,b.jsx)(s,{size:14,"aria-hidden":`true`})}),h&&(0,b.jsx)(`button`,{type:`button`,className:O,"aria-label":S(`board:composer.cancelQueued`),title:S(`board:composer.cancelQueued`),disabled:i,"data-queued-cancel":!0,onClick:()=>void h(n),children:(0,b.jsx)(d,{size:14,"aria-hidden":`true`})})]},n||`${e.behavior}-${t}`)})})]})}function A({invocation:e,onRemove:t}){let{t:n}=r();return(0,b.jsxs)(`div`,{className:`composer-resource-chip [&.workflow]:border-success-border [&.workflow]:bg-success-soft [&.workflow]:text-success-strong [&_button]:grid [&_button]:size-6 [&_button]:place-items-center [&_button]:rounded-xs [&_button]:text-content-muted [&_button]:hover:bg-surface-hover [&_button]:hover:text-content inline-flex h-7 self-start items-center gap-1.5 rounded-sm border border-star-border bg-star-soft pr-0.5 pl-2 text-xs font-medium text-star-strong max-[650px]:h-11 max-[650px]:[&_button]:size-11 ${e.kind}`,children:[e.kind===`tool`?(0,b.jsx)(u,{size:13}):(0,b.jsx)(o,{size:13}),(0,b.jsxs)(`span`,{children:[e.kind===`skill`?`Skill`:e.kind===`tool`?n(`chat:resourcePicker.tool`):n(`chat:resourcePicker.workflow`),` `,`· `,e.resourceName]}),(0,b.jsx)(`button`,{type:`button`,"aria-label":n(`chat:resourcePicker.remove`),onClick:t,children:(0,b.jsx)(d,{size:13})})]})}function j({streaming:e,queueing:t,submitting:n=!1,stopping:i=!1,preparing:o=!1,hasDraft:s=!1,canQueue:u=!1,blockedReason:d,disabled:f,onLongPress:p,longPressHint:m,onStop:g}){let{t:_}=r(),v=h(`sendMessage`),S=(0,y.useRef)(null),C=(0,y.useRef)(!1),T=()=>{S.current&&clearTimeout(S.current),S.current=null};(0,y.useEffect)(()=>{let e=S;return()=>{e.current&&clearTimeout(e.current)}},[]);let E=!!(g&&e&&!s),D=!!(e&&!(s&&u))&&!E,O=t||n||i||o,k=f||O||D||!!d,A=_(o?`chat:focusSession.preparingAttachments`:i?`chat:focusSession.stopping`:E?`chat:focusSession.stop`:`chat:focusSession.sendMessage`);return(0,b.jsx)(`button`,{type:E?`button`:`submit`,"data-send-mode":E?`stop`:`send`,className:`send-button grid size-8 min-w-8 flex-none cursor-pointer place-items-center rounded-full border border-transparent bg-star text-on-accent transition-[background-color,opacity] select-none [-webkit-touch-callout:none] hover:enabled:bg-star-hover active:enabled:translate-y-px disabled:cursor-not-allowed disabled:opacity-30 aria-disabled:opacity-30 max-[650px]:disabled:bg-surface-muted max-[650px]:disabled:text-content max-[650px]:disabled:opacity-100 max-[650px]:aria-disabled:bg-surface-muted max-[650px]:aria-disabled:text-content max-[650px]:aria-disabled:opacity-100 max-[650px]:dark:disabled:bg-surface-active max-[650px]:dark:aria-disabled:bg-surface-active data-[send-mode=stop]:bg-surface-muted data-[send-mode=stop]:text-content data-[send-mode=stop]:hover:enabled:bg-surface-hover dark:data-[send-mode=stop]:bg-surface-active max-[650px]:size-9 max-[650px]:min-w-9 min-[651px]:pointer-coarse:size-11 min-[651px]:pointer-coarse:min-w-11 ${x}`,title:d||(!O&&v?`${A} (${v})`:A),"aria-label":d?`${A}: ${d}`:A,"aria-busy":O||void 0,"aria-disabled":k||void 0,"aria-description":p&&!E?m:void 0,"data-long-press":p&&!E?`steer`:void 0,onPointerDown:e=>{C.current=!1,!(!p||E||k||e.pointerType===`mouse`)&&(T(),S.current=setTimeout(()=>{S.current=null,C.current=!0,p()},500))},onPointerUp:T,onPointerCancel:T,onPointerLeave:T,onContextMenu:e=>{p&&e.preventDefault()},onClick:e=>{if(C.current){C.current=!1,e.preventDefault();return}if(k){e.preventDefault();return}E&&g?.()},disabled:!d&&k,children:O?(0,b.jsx)(c,{className:`animate-spin ${w}`,size:17}):E?(0,b.jsx)(l,{size:13,fill:`currentColor`,"aria-hidden":`true`}):(0,b.jsx)(a,{size:17,strokeWidth:2.1,className:w})})}export{A as a,T as c,x as i,C as n,j as o,w as r,k as s,S as t};
@@ -1 +1 @@
1
- import{t as e}from"./index-CiRnxTh1.js";import{t}from"./storage-DtvZ_lEu.js";import{n}from"./startup-queries-BlA4Hayt.js";import{t as r}from"./api-AeFmYDtL.js";import{n as i,t as a}from"./workspace-order-store-C-jYrC0l.js";import{c as o,u as s}from"./events-CuVwhRWu.js";import{s as c,t as l,u}from"./session-workspaces-Brm-8lHh.js";import{t as d}from"./pick-system-directory-CaiscVfr.js";function f(e){return e.cwd?`${e.label} · ${e.cwd}`:e.label}async function p(){return(await n(`sessions`,!0)).sessions}function m(n,r,i){try{let a=e.getItem(t.activeSession)||``,s=c(a,n,r,i);if(s===null)return;s?e.setItem(t.activeSession,s):e.removeItem(t.activeSession),o(s)}catch{}}async function h(e,{t,notify:n,requestConfirm:a}){let o=f(e);try{let c=await p(),d=u(c,e.key);if(!d.length)return n(t(`navigation:appSidebar.projectNoChats`,{project:o}),`info`),`empty`;if(!await a({title:t(`navigation:appSidebar.deleteProject`),message:t(`navigation:appSidebar.deleteProjectConfirm`,{project:o,count:d.length}),confirmLabel:t(`navigation:appSidebar.deleteProjectAction`)}))return`cancelled`;let f=await l(d.map(e=>e.id),e=>r(`/api/sessions/${encodeURIComponent(e)}`,{method:`DELETE`}));s(f.deletedIds.length?{deletedIds:f.deletedIds}:void 0);let h=new Set(f.deletedIds),g=null;try{g=await p()}catch{}if(m(g??c.filter(e=>!h.has(e.id)),h,g!==null),g===null)return n(t(`navigation:appSidebar.projectDeleteUnverified`,{project:o,deleted:f.deletedIds.length}),`error`),`unverified`;let _=u(g,e.key).length;return f.failedId!==null||_?(n(t(`navigation:appSidebar.projectDeletePartial`,{project:o,deleted:f.deletedIds.length,remaining:_}),`error`),`partial`):(e.cwd&&i.getState().unregisterProject(e.cwd),n(t(`navigation:appSidebar.projectDeleted`,{project:o})),`deleted`)}catch(e){return n(e instanceof Error?e.message:String(e),`error`),`failed`}}function g(e,{t,notify:n}){if(!e.cwd||e.key===`\0`)return!1;let r=i.getState().unregisterProject(e.cwd);return r&&n(t(`navigation:appSidebar.projectRemoved`,{project:f(e)})),r}function _(e,t,{t:n,notify:r}){try{return a.getState().setWorkspaceName(e.cwd,t),r(n(`navigation:appSidebar.projectNameUpdated`)),!0}catch{return r(n(`navigation:appSidebar.projectNameSaveFailed`),`error`),!1}}async function v(e,t,n,r){if(!e.cwd||e.key===`\0`)return!1;let{t:i,requestText:o}=n,s=(await o({title:i(`navigation:appSidebar.renameProject`),message:r.description,inputLabel:i(`navigation:appSidebar.projectName`),value:e.label,maxLength:120,confirmLabel:i(`chat:chatHistoryPage.save`)}))?.trim()||``;if(!s)return!1;let c=s===t?``:s;return c!==(a.getState().names[e.key]||``)&&_(e,c,n)}function y(e,t){return!e.cwd||!a.getState().names[e.key]?!1:_(e,``,t)}function b(e){return d(``,e(`common:workspacePicker.setWorkingDirectory`))}function x(e,t){return r(`/api/workspace-folders`,{method:`POST`,body:JSON.stringify({parent:e,name:t})})}function S(e){return e.includes(`\\`)&&!e.includes(`/`)?`\\`:`/`}function C(e){let t=e.trim().replace(/[\\/]+$/,``),n=Math.max(t.lastIndexOf(`/`),t.lastIndexOf(`\\`));if(n<0)return``;let r=t.slice(0,n);return r?/^[a-z]:$/i.test(r)?`${r}${t[n]}`:r:t[0]}function w(e,t){let n=e.trim();return n?/[\\/]$/.test(n)?`${n}${t}`:`${n}${S(n)}${t}`:t}export{b as a,y as c,h as i,C as n,g as o,x as r,v as s,w as t};
1
+ import{t as e}from"./index-at6jiRd2.js";import{t}from"./storage-DtvZ_lEu.js";import{n}from"./startup-queries-BpV9-ykp.js";import{t as r}from"./api-BhPOJ07B.js";import{n as i,t as a}from"./workspace-order-store-C_t43Zgq.js";import{c as o,u as s}from"./events-CcKmvwE6.js";import{s as c,t as l,u}from"./session-workspaces-Brm-8lHh.js";import{t as d}from"./pick-system-directory-COxOQmRm.js";function f(e){return e.cwd?`${e.label} · ${e.cwd}`:e.label}async function p(){return(await n(`sessions`,!0)).sessions}function m(n,r,i){try{let a=e.getItem(t.activeSession)||``,s=c(a,n,r,i);if(s===null)return;s?e.setItem(t.activeSession,s):e.removeItem(t.activeSession),o(s)}catch{}}async function h(e,{t,notify:n,requestConfirm:a}){let o=f(e);try{let c=await p(),d=u(c,e.key);if(!d.length)return n(t(`navigation:appSidebar.projectNoChats`,{project:o}),`info`),`empty`;if(!await a({title:t(`navigation:appSidebar.deleteProject`),message:t(`navigation:appSidebar.deleteProjectConfirm`,{project:o,count:d.length}),confirmLabel:t(`navigation:appSidebar.deleteProjectAction`)}))return`cancelled`;let f=await l(d.map(e=>e.id),e=>r(`/api/sessions/${encodeURIComponent(e)}`,{method:`DELETE`}));s(f.deletedIds.length?{deletedIds:f.deletedIds}:void 0);let h=new Set(f.deletedIds),g=null;try{g=await p()}catch{}if(m(g??c.filter(e=>!h.has(e.id)),h,g!==null),g===null)return n(t(`navigation:appSidebar.projectDeleteUnverified`,{project:o,deleted:f.deletedIds.length}),`error`),`unverified`;let _=u(g,e.key).length;return f.failedId!==null||_?(n(t(`navigation:appSidebar.projectDeletePartial`,{project:o,deleted:f.deletedIds.length,remaining:_}),`error`),`partial`):(e.cwd&&i.getState().unregisterProject(e.cwd),n(t(`navigation:appSidebar.projectDeleted`,{project:o})),`deleted`)}catch(e){return n(e instanceof Error?e.message:String(e),`error`),`failed`}}function g(e,{t,notify:n}){if(!e.cwd||e.key===`\0`)return!1;let r=i.getState().unregisterProject(e.cwd);return r&&n(t(`navigation:appSidebar.projectRemoved`,{project:f(e)})),r}function _(e,t,{t:n,notify:r}){try{return a.getState().setWorkspaceName(e.cwd,t),r(n(`navigation:appSidebar.projectNameUpdated`)),!0}catch{return r(n(`navigation:appSidebar.projectNameSaveFailed`),`error`),!1}}async function v(e,t,n,r){if(!e.cwd||e.key===`\0`)return!1;let{t:i,requestText:o}=n,s=(await o({title:i(`navigation:appSidebar.renameProject`),message:r.description,inputLabel:i(`navigation:appSidebar.projectName`),value:e.label,maxLength:120,confirmLabel:i(`chat:chatHistoryPage.save`)}))?.trim()||``;if(!s)return!1;let c=s===t?``:s;return c!==(a.getState().names[e.key]||``)&&_(e,c,n)}function y(e,t){return!e.cwd||!a.getState().names[e.key]?!1:_(e,``,t)}function b(e){return d(``,e(`common:workspacePicker.setWorkingDirectory`))}function x(e,t){return r(`/api/workspace-folders`,{method:`POST`,body:JSON.stringify({parent:e,name:t})})}function S(e){return e.includes(`\\`)&&!e.includes(`/`)?`\\`:`/`}function C(e){let t=e.trim().replace(/[\\/]+$/,``),n=Math.max(t.lastIndexOf(`/`),t.lastIndexOf(`\\`));if(n<0)return``;let r=t.slice(0,n);return r?/^[a-z]:$/i.test(r)?`${r}${t[n]}`:r:t[0]}function w(e,t){let n=e.trim();return n?/[\\/]$/.test(n)?`${n}${t}`:`${n}${S(n)}${t}`:t}export{b as a,y as c,h as i,C as n,g as o,x as r,v as s,w as t};