pisper 0.6.14 → 0.6.15

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 (197) hide show
  1. package/bin/pisper.mjs +5 -1
  2. package/lib/executor-node.mjs +590 -0
  3. package/lib/npm-update.mjs +2 -0
  4. package/package.json +5 -5
  5. package/web/.vite/manifest.json +852 -856
  6. package/web/assets/{AppDialog-DrhCZm1r.js → AppDialog-CgJEhcYw.js} +1 -1
  7. package/web/assets/{AppOverlays-CxgReqGn.js → AppOverlays-BBlYyb_U.js} +1 -1
  8. package/web/assets/{AppSelect-BGVBQRP1.js → AppSelect-BD6RAaJ5.js} +1 -1
  9. package/web/assets/{AssetsPage-CKK-byQY.js → AssetsPage-D3F4T0_j.js} +1 -1
  10. package/web/assets/BoardPage-CO7nU2Mw.js +3 -0
  11. package/web/assets/BotAvatar-CNL-APwP.js +1 -0
  12. package/web/assets/ChannelsPage-CsRbj9St.js +1 -0
  13. package/web/assets/{ChatAppearancePage-BhqRLf-2.js → ChatAppearancePage-Sc1V75I3.js} +1 -1
  14. package/web/assets/{ChatHistoryPage-DBsNyGYj.js → ChatHistoryPage-BT0mIaDN.js} +1 -1
  15. package/web/assets/ChatPage-C-hswZf9.js +553 -0
  16. package/web/assets/ConfigPage-DH2d8YGn.js +5 -0
  17. package/web/assets/{DesktopWindowControls-DCtIkpTs.js → DesktopWindowControls-Bo5vvIFH.js} +1 -1
  18. package/web/assets/{FeaturePage-Bkt1wWVg.js → FeaturePage-B3wCvGpC.js} +1 -1
  19. package/web/assets/{FileAttachmentPreview-Cnmi_2U-.js → FileAttachmentPreview-D8YqjbeC.js} +1 -1
  20. package/web/assets/{FloatingWidgets-BIJSFz34.js → FloatingWidgets-Dz_T7XWC.js} +1 -1
  21. package/web/assets/FocusRuntimeControls-hYDoXwg7.js +1 -0
  22. package/web/assets/{GitDiffViewer-rjt5_KOt.js → GitDiffViewer-CBju_Sj4.js} +3 -3
  23. package/web/assets/ManageProjectsDialog-Dtb2K7BK.js +1 -0
  24. package/web/assets/{MarkdownMessage-yl-PSRAz.js → MarkdownMessage-BDztlYIy.js} +1 -1
  25. package/web/assets/{McpPage-D6GyZCpt.js → McpPage-DQ6AILOH.js} +1 -1
  26. package/web/assets/MemoryPage-CK4evs_P.js +1 -0
  27. package/web/assets/{MobileNavigation-DcBH2I9Y.js → MobileNavigation-BICCops3.js} +1 -1
  28. package/web/assets/MobileViewportStabilizer-uKI4Zp7f.js +1 -0
  29. package/web/assets/{MorePage-BBfiQbiP.js → MorePage-DuML7bhr.js} +1 -1
  30. package/web/assets/NewBotDialog--2DSe9Sy.js +1 -0
  31. package/web/assets/{NewFolderDialog-BinpbTs8.js → NewFolderDialog-S-Qzjzfu.js} +1 -1
  32. package/web/assets/{PageHeader-D_J-19ni.js → PageHeader-B78dHJed.js} +1 -1
  33. package/web/assets/{PhoneDrawer-CwxDkWZQ.js → PhoneDrawer-DHRBi4XA.js} +1 -1
  34. package/web/assets/PhoneMenuButton-BjDV-dPl.js +1 -0
  35. package/web/assets/PhoneTopBar-BuyzXL4Z.js +1 -0
  36. package/web/assets/PluginsPage-Cd9bu2AS.js +1 -0
  37. package/web/assets/{SafeModePrompt-CLyt-z14.js → SafeModePrompt-BnoccbWI.js} +1 -1
  38. package/web/assets/SchedulesPage-DUhUUQP5.js +1 -0
  39. package/web/assets/SessionBrowserPane-B3weAiaB.js +2 -0
  40. package/web/assets/SessionContextPanel-BtxUlk9m.js +2 -0
  41. package/web/assets/SessionHome-ByiFmH18.js +1 -0
  42. package/web/assets/SessionInspector-VKOz4Rxs.js +1 -0
  43. package/web/assets/SessionShell-BsDAwWHd.js +1 -0
  44. package/web/assets/{SettingsSidebar-IqsOv5h1.js → SettingsSidebar-B-COw6Uw.js} +1 -1
  45. package/web/assets/{ShortcutHelpDialog-DKDAF94g.js → ShortcutHelpDialog-DquhK-Uh.js} +1 -1
  46. package/web/assets/{ShortcutKeys-DQFnMnX1.js → ShortcutKeys-BgwCWvNY.js} +1 -1
  47. package/web/assets/{SidebarUpdateStatus-Cbwy5ii9.js → SidebarUpdateStatus-Ci0ugb91.js} +1 -1
  48. package/web/assets/{SkillsPage-DTOzYSaS.js → SkillsPage-B46uoO_g.js} +1 -1
  49. package/web/assets/{TaskProcessesPane-DRFmGkE3.js → TaskProcessesPane-CI_5lWbf.js} +1 -1
  50. package/web/assets/{TaskTerminalView-DWNACXyI.js → TaskTerminalView-C2acHnAH.js} +1 -1
  51. package/web/assets/{TerminalPanel-QEt-SRiM.js → TerminalPanel-BAQ2VwKg.js} +1 -1
  52. package/web/assets/{WebDesktopPet-4CDch3gC.js → WebDesktopPet-D3bdxKPz.js} +1 -1
  53. package/web/assets/{WorkflowsPage-AMKQBlPo.js → WorkflowsPage-Dp1PRKQb.js} +1 -1
  54. package/web/assets/WorkspacePicker-BJhBGRH0.js +1 -0
  55. package/web/assets/accordion-CiJMkjqX.js +1 -0
  56. package/web/assets/{api-BO7LAPSQ.js → api-CKJOip3Q.js} +1 -1
  57. package/web/assets/{app-update-DKWPHTUY.js → app-update-yPQVXuw5.js} +1 -1
  58. package/web/assets/{approval-confirm-ByiI22Wo.js → approval-confirm-Cv754IjO.js} +1 -1
  59. package/web/assets/board-messages-CIYKjAla.js +1 -0
  60. package/web/assets/board-projects-wd79Rqt5.js +2 -0
  61. package/web/assets/channels-messages-KabR1HOR.js +1 -0
  62. package/web/assets/chat-api-Bvirerdj.js +1 -0
  63. package/web/assets/{client-store-6GNC8uyK.js → client-store-BaTctJrB.js} +1 -1
  64. package/web/assets/collapsible-Dcoy-qnz.js +1 -0
  65. package/web/assets/config-search-KYVClDpx.js +1 -0
  66. package/web/assets/{dialog-CUhFgsVd.js → dialog-Cb_sjjQV.js} +1 -1
  67. package/web/assets/{collapsible-DMaUQRX4.js → dist-DUSSw9eQ.js} +1 -1
  68. package/web/assets/events-CZTn9wa-.js +1 -0
  69. package/web/assets/file-diff-GxOMJkLj.js +1 -0
  70. package/web/assets/folder-paths--euvEC5U.js +1 -0
  71. package/web/assets/{hosts-1yQREdMi.js → hosts-BRPznOHU.js} +1 -1
  72. package/web/assets/i18n-DEs6BBob.js +1 -0
  73. package/web/assets/{index-CsE52ydO.js → index-C5aKcTGw.js} +2 -2
  74. package/web/assets/index-DD2H2OOC.css +2 -0
  75. package/web/assets/message-circle-question-mark-D7ehy_mi.js +1 -0
  76. package/web/assets/{mobile-remote-fallback-NJCTBu85.js → mobile-remote-fallback-DG_urwIg.js} +1 -1
  77. package/web/assets/mount-app-BdXRP9D-.js +9 -0
  78. package/web/assets/navigation-DkcKi1_5.js +1 -0
  79. package/web/assets/new-task-uLEgjs2Z.js +1 -0
  80. package/web/assets/{palette-navigation-ByC1_QS5.js → palette-navigation-HbVGltCo.js} +1 -1
  81. package/web/assets/{permission-rules-api-BoJ_1W-m.js → permission-rules-api-C9oRUm6Z.js} +1 -1
  82. package/web/assets/{pick-system-directory-B_RJmP26.js → pick-system-directory-B__qKy-X.js} +1 -1
  83. package/web/assets/placements-Bn0vPyEI.js +2 -0
  84. package/web/assets/{popover--UmYQ9yB.js → popover-CiVxYUEU.js} +1 -1
  85. package/web/assets/public-9meoHs0K.js +4 -0
  86. package/web/assets/public-D6X148yH.js +2 -0
  87. package/web/assets/public-DenVz3gW.js +2 -0
  88. package/web/assets/{public-components-DYGekkA7.js → public-components-BfHcj0Pn.js} +1 -1
  89. package/web/assets/public-diff-BqcNo4lt.js +1 -0
  90. package/web/assets/public-events-DCyxz5zX.js +1 -0
  91. package/web/assets/public-flags-BOI2nkm4.js +1 -0
  92. package/web/assets/public-launch-D0t4Hqf5.js +1 -0
  93. package/web/assets/public-sidebar-CdxAohEH.js +1 -0
  94. package/web/assets/react-bits-BsPlLi8F.css +1 -0
  95. package/web/assets/routes-DIeaqWVc.js +1 -0
  96. package/web/assets/runtime-capabilities-CHYOF_hE.js +1 -0
  97. package/web/assets/{runtime-capabilities-store-C2Qv7uDP.js → runtime-capabilities-store-D2d_9z0D.js} +1 -1
  98. package/web/assets/{safe-mode-instance-BiAPYJ2-.js → safe-mode-instance-hnF1BJYr.js} +1 -1
  99. package/web/assets/safe-mode-sentinel-CPmhLLXT.js +1 -0
  100. package/web/assets/{session-change-summary-api-DgRT32uh.js → session-change-summary-api-DmmNGbP7.js} +1 -1
  101. package/web/assets/{session-home-BktP6sGF.js → session-home-BAFT2Fk1.js} +1 -1
  102. package/web/assets/{session-organization-api-DFu3Chto.js → session-organization-api-Bs8DdxU1.js} +1 -1
  103. package/web/assets/{session-scope-DQPNgQMm.js → session-scope-XRVRtwow.js} +1 -1
  104. package/web/assets/{session-tree-actions-DfO8QHBO.js → session-tree-actions-Dzj7hrvM.js} +1 -1
  105. package/web/assets/{session-tree-summary-BwYRdui2.js → session-tree-summary-BXVKYODc.js} +1 -1
  106. package/web/assets/settings-navigation-DiP_AM1C.js +1 -0
  107. package/web/assets/{shortcuts-Cvp9WD9O.js → shortcuts-IA6Uq_O6.js} +1 -1
  108. package/web/assets/side-chat-context-CZ4IqNxt.js +7 -0
  109. package/web/assets/sidebar-Do_8-Hyh.js +2 -0
  110. package/web/assets/sidebar-store-DuRlD5qg.js +1 -0
  111. package/web/assets/{speech-session-DK_09Wky.js → speech-session-D_W5Ulli.js} +1 -1
  112. package/web/assets/{startup-queries-6Oztqpto.js → startup-queries-DeNu46nT.js} +1 -1
  113. package/web/assets/storage-DH3bQdy6.js +1 -0
  114. package/web/assets/tool-labels-ghvpPFmc.js +1 -0
  115. package/web/assets/{use-i18n-B5p-Kzvz.js → use-i18n-CUS2_EGy.js} +1 -1
  116. package/web/assets/use-mobile-C2tPBAza.js +1 -0
  117. package/web/assets/use-studio-actions-CYnwfaOn.js +3 -0
  118. package/web/assets/useNewProjectPicker-CacWA0IS.js +1 -0
  119. package/web/assets/usePhoneShell-cYrS53S8.js +1 -0
  120. package/web/assets/useSessionRowActions-DtunSg_Q.js +1 -0
  121. package/web/assets/useSidebarModel-6sqN4VA5.js +1 -0
  122. package/web/assets/web-preview-Dgng80ZD.js +1 -0
  123. package/web/assets/{web-preview-events-DQchQHt3.js → web-preview-events-JGegs4uF.js} +1 -1
  124. package/web/assets/workflow-messages-Cj35aJZc.js +1 -0
  125. package/web/assets/workspace-order-store-BuPmheRT.js +1 -0
  126. package/web/index.html +2 -2
  127. package/web/assets/BoardPage-vwv5vTDm.js +0 -3
  128. package/web/assets/ChannelsPage-L-wcVDSN.js +0 -1
  129. package/web/assets/ChatPage-DS0euFxR.js +0 -553
  130. package/web/assets/ConfigPage-pOzONr8e.js +0 -5
  131. package/web/assets/DispatchOverlay-n-qbkOP-.js +0 -1
  132. package/web/assets/FocusRuntimeControls-C7NIdpV4.js +0 -1
  133. package/web/assets/LaunchConsole-DtxzpXJo.js +0 -3
  134. package/web/assets/ManageProjectsDialog-RiFg3h1p.js +0 -1
  135. package/web/assets/MemoryPage-Dsx_6JpI.js +0 -1
  136. package/web/assets/MobileViewportStabilizer-OtwVmIPm.js +0 -1
  137. package/web/assets/PhoneMenuButton-B0AwvqEo.js +0 -1
  138. package/web/assets/PhoneTopBar-Dw0mIaWC.js +0 -1
  139. package/web/assets/PluginsPage-BzxPAX26.js +0 -1
  140. package/web/assets/QuickPromptIdeas-Cd3SwBqS.js +0 -1
  141. package/web/assets/SchedulesPage-Cbgl5v_8.js +0 -1
  142. package/web/assets/SessionBrowserPane-CB7jn-MS.js +0 -2
  143. package/web/assets/SessionContextPanel-CNmAp0ed.js +0 -2
  144. package/web/assets/SessionHome-Ck_daJT0.js +0 -1
  145. package/web/assets/SessionInspector-cSzwsc4b.js +0 -1
  146. package/web/assets/SessionShell-BOZ7h0yz.js +0 -1
  147. package/web/assets/WorkspacePicker-B9vYtfab.js +0 -1
  148. package/web/assets/board-launch-BmmPYZe8.js +0 -1
  149. package/web/assets/board-messages-BOWWyhz_.js +0 -1
  150. package/web/assets/board-projects-BU9fZB1q.js +0 -1
  151. package/web/assets/channels-messages-DazltGVm.js +0 -1
  152. package/web/assets/chat-api-DkdyVQY9.js +0 -1
  153. package/web/assets/config-search-HBKDuym0.js +0 -1
  154. package/web/assets/events-DrAPv0se.js +0 -1
  155. package/web/assets/file-text-N9JICX6E.js +0 -1
  156. package/web/assets/folder-paths-DQTpuGh9.js +0 -1
  157. package/web/assets/i18n-CHmr7GzM.js +0 -1
  158. package/web/assets/index-CfTBR7Rs.css +0 -2
  159. package/web/assets/list-checks-B5Jl4aiO.js +0 -1
  160. package/web/assets/mount-app-DfSFF0xv.js +0 -9
  161. package/web/assets/navigation-EoDz3gT8.js +0 -1
  162. package/web/assets/new-task-C3wuHTor.js +0 -1
  163. package/web/assets/placements-CqwqXPTp.js +0 -2
  164. package/web/assets/public-diff-DK-VNIar.js +0 -1
  165. package/web/assets/public-fqyTjQ0F.js +0 -2
  166. package/web/assets/public-jQjEc6OO.js +0 -1
  167. package/web/assets/public-launch-CT_m9KWo.js +0 -1
  168. package/web/assets/react-bits-DQli9s7O.css +0 -1
  169. package/web/assets/routes-Da0OHSy6.js +0 -1
  170. package/web/assets/runtime-capabilities-4_ZwLBqF.js +0 -1
  171. package/web/assets/safe-mode-sentinel-Ccu3Vmta.js +0 -1
  172. package/web/assets/session-workspaces-BWTBYaGT.js +0 -1
  173. package/web/assets/settings-navigation-_yUm71Uk.js +0 -1
  174. package/web/assets/shield-B1ruzHd0.js +0 -1
  175. package/web/assets/side-chat-context-BfOm4dFp.js +0 -7
  176. package/web/assets/sidebar-BLeRyb55.js +0 -2
  177. package/web/assets/sidebar-commands-ZA1UOA_F.js +0 -1
  178. package/web/assets/sidebar-store-1-aNPlDu.js +0 -1
  179. package/web/assets/storage-BY6wEHPw.js +0 -1
  180. package/web/assets/tool-labels-BUEvdohv.js +0 -1
  181. package/web/assets/use-mobile-DauOEda6.js +0 -1
  182. package/web/assets/use-studio-actions-D6c_pSJK.js +0 -3
  183. package/web/assets/useBoardItems-CzEbgTLJ.js +0 -1
  184. package/web/assets/useFleetSystemInfo-Bd8zJIFa.js +0 -1
  185. package/web/assets/useNewProjectPicker-DQY1X_ua.js +0 -1
  186. package/web/assets/useNow-Bxn4_OW9.js +0 -1
  187. package/web/assets/usePagePrimaryAction-CWPC0C_f.js +0 -1
  188. package/web/assets/usePhoneShell-Bvb7m-m4.js +0 -1
  189. package/web/assets/useSessionListQuery-D44XZfGr.js +0 -2
  190. package/web/assets/useSessionRowActions-Cr6SUAeE.js +0 -1
  191. package/web/assets/useSidebarModel-CWED0rsw.js +0 -1
  192. package/web/assets/wand-sparkles-CvEBNUFz.js +0 -1
  193. package/web/assets/web-preview-CqwSe9Zn.js +0 -1
  194. package/web/assets/workflow-messages-CMCQrs5q.js +0 -1
  195. package/web/assets/workspace-order-store-RYWvGOeR.js +0 -1
  196. /package/web/assets/{AnimatedList-D8fxDNGr.js → AnimatedList-DB5vqafO.js} +0 -0
  197. /package/web/assets/{ClickSpark-DmnEAJNI.js → ClickSpark-B1Rn7ZwL.js} +0 -0
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/GitDiffViewer-rjt5_KOt.js","assets/rolldown-runtime-B0Z9INg1.js","assets/vendor-react-DwNgTV1j.js","assets/use-i18n-B5p-Kzvz.js","assets/i18n-CHmr7GzM.js","assets/vendor-router-CSN_DGvx.js","assets/index-CsE52ydO.js","assets/index-CfTBR7Rs.css","assets/storage-BY6wEHPw.js","assets/vendor-state-GkUciC5H.js","assets/createLucideIcon-Cd-3GVxJ.js","assets/x-07u4-129.js","assets/utils-C8uzG5AZ.js","assets/vendor-ui-DvrYggeS.js","assets/button-CCcCN8tE.js","assets/dist-41X0pdUs.js","assets/events-DrAPv0se.js","assets/esm-DCV8yILT.js"])))=>i.map(i=>d[i]);
2
- import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{h as t}from"./vendor-router-CSN_DGvx.js";import{i as n,r}from"./vendor-react-DwNgTV1j.js";import{t as i}from"./use-i18n-B5p-Kzvz.js";import{i as a}from"./runtime-capabilities-4_ZwLBqF.js";import{t as o}from"./runtime-capabilities-store-C2Qv7uDP.js";import{a as s}from"./permission-rules-api-BoJ_1W-m.js";import{t as c}from"./arrow-left-B8oVrQ2S.js";import{t as l}from"./check-2vYc6QaP.js";import{t as u}from"./chevron-right-C3t2Rckj.js";import{a as d,c as f,i as p,l as m,n as h,o as g,r as _,s as v,t as y}from"./SessionBrowserPane-CB7jn-MS.js";import{t as b}from"./earth-Ddy13fHh.js";import{i as x,o as S}from"./GitDiffViewer-rjt5_KOt.js";import{A as C,M as w,P as T,_ as E,g as D,h as O}from"./side-chat-context-BfOm4dFp.js";import{t as k}from"./link-2-mgasYn21.js";import{t as A}from"./message-square-SKjZyY3v.js";import{t as j}from"./plus-fQbSqB1n.js";import{t as M}from"./refresh-cw-TbWxTY4K.js";import{t as N}from"./square-terminal-BVG6cUT1.js";import{t as P}from"./x-07u4-129.js";import{n as F,t as I}from"./button-CCcCN8tE.js";import{s as L}from"./events-DrAPv0se.js";import{a as ee,n as te,o as ne,t as re}from"./sheet-BTaIEX4w.js";import{n as R,t as z}from"./PageState-Cz6vFMXv.js";import{t as B}from"./input-CPw-zkYh.js";import{t as V}from"./web-preview-CqwSe9Zn.js";import{n as ie}from"./terminal-context-aIsIJPn8.js";var H=e(n(),1),U=r(),W=(0,H.lazy)(()=>t(()=>import(`./GitDiffViewer-rjt5_KOt.js`).then(e=>e.n).then(e=>({default:e.GitDiffDialog})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]))),G=100;function ae({sessionId:e,streaming:t,requestConfirm:n,view:r,onViewChange:a}){let{t:o}=i(),s=x(r?.reading?.list,e=>a?.({reading:{...r?.reading,list:e}})),[c,d]=(0,H.useState)([]),p=r?.expandedFiles||c,m=e=>a?a({expandedFiles:e}):d(e),{changes:h,loading:_,running:v,diff:y,setDiff:b,diffLoading:w,snapshotRevision:T,writesDisabled:E,pendingCount:D,reversibleCount:O,displayedError:k,notice:A,viewDiff:j,runAction:N,refresh:P}=g({sessionId:e,streaming:t,requestConfirm:n}),L=`max-[650px]:size-11 pointer-coarse:size-11`;return(0,U.jsxs)(`section`,{className:`flex min-h-0 flex-1 flex-col`,"aria-label":o(`chat:focusSession.fileChanges`),"aria-busy":_||!!v,children:[(0,U.jsxs)(`header`,{className:`flex min-h-10 min-w-0 shrink-0 items-center gap-2 border-b border-stroke-soft pr-1.5 pl-3`,children:[(0,U.jsx)(`h2`,{className:`min-w-0 flex-1 truncate text-xs font-medium tracking-[.02em] text-content-muted`,children:o(`chat:focusSession.fileChanges`)}),h&&(0,U.jsxs)(`span`,{className:`shrink-0 font-mono text-xs tabular-nums`,children:[(0,U.jsxs)(`span`,{className:`text-success`,children:[`+`,h.summary.added]}),` `,(0,U.jsxs)(`span`,{className:`text-danger`,children:[`−`,h.summary.removed]})]}),(0,U.jsx)(I,{type:`button`,variant:`ghost`,size:`icon`,className:L,"aria-label":o(`chat:focusSession.gitRefresh`),title:o(`chat:focusSession.gitRefresh`),disabled:_||!!v,onClick:P,children:(0,U.jsx)(M,{className:_?`animate-spin`:``,size:15})})]}),(0,U.jsxs)(`div`,{className:`flex shrink-0 flex-col gap-2 border-b border-stroke-soft px-3 py-2.5`,children:[h&&(0,U.jsxs)(`p`,{className:`text-xs text-content-secondary tabular-nums`,children:[o(`chat:focusSession.fileChangesCount`,{count:h.summary.files}),D>0&&` · ${o(`chat:focusSession.fileChangesPending`,{count:D})}`]}),(0,U.jsx)(`p`,{className:`text-xs leading-relaxed text-content-muted`,children:o(`chat:workbench.taskSnapshotScope`)}),(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-1`,children:[(0,U.jsxs)(`div`,{className:`flex gap-1`,children:[(0,U.jsxs)(I,{type:`button`,variant:`secondary`,size:`sm`,disabled:E||D===0,title:t?o(`chat:focusSession.gitWaitForRunToFinish`):void 0,onClick:()=>void N({kind:`approve`}),children:[v?.kind===`approve`&&!v.path?(0,U.jsx)(M,{className:`animate-spin`,size:14}):(0,U.jsx)(l,{size:14}),o(`chat:focusSession.fileChangesApproveAll`)]}),(0,U.jsxs)(I,{type:`button`,variant:`secondary`,size:`sm`,disabled:E||O===0,title:o(t?`chat:focusSession.gitWaitForRunToFinish`:`chat:focusSession.fileChangesRevertAllDescription`),onClick:()=>void N({kind:`revert`}),children:[v?.kind===`revert`&&!v.path?(0,U.jsx)(M,{className:`animate-spin`,size:14}):(0,U.jsx)(C,{size:14}),o(`chat:focusSession.fileChangesRevertAll`)]})]}),(0,U.jsxs)(`div`,{className:`flex gap-1`,children:[(0,U.jsx)(I,{variant:`ghost`,size:`sm`,disabled:_||!h?.files.length,onClick:()=>m(h?.files.slice(0,G).map(e=>e.path)||[]),children:o(`chat:workbench.expandAll`)}),(0,U.jsx)(I,{variant:`ghost`,size:`sm`,onClick:()=>m([]),children:o(`chat:workbench.collapseAll`)})]})]})]}),k&&(0,U.jsx)(`p`,{role:`alert`,className:`px-3 pt-2.5 text-xs text-danger`,children:k}),A&&!k&&(0,U.jsx)(`p`,{role:`status`,className:`px-3 pt-2.5 text-xs text-content-secondary`,children:A}),_&&!h?(0,U.jsx)(R,{kind:`loading`,title:o(`chat:focusSession.gitLoading`)}):h?.files.length?(0,U.jsxs)(`ul`,{ref:s.ref,className:`min-h-0 flex-1 overflow-y-auto`,"aria-label":o(`chat:focusSession.fileChanges`),children:[h.files.slice(0,G).map(t=>{let n=p.includes(t.path);return(0,U.jsxs)(`li`,{className:`min-w-0 border-b border-stroke-soft`,children:[(0,U.jsxs)(`div`,{className:`flex min-w-0 items-center gap-0.5 pr-1.5 hover:bg-surface-subtle ${n?`bg-surface-subtle`:``}`,children:[(0,U.jsxs)(`button`,{type:`button`,className:`flex min-h-9 min-w-0 flex-1 items-center gap-2 pl-2 text-left text-xs focus-visible:-outline-offset-2 disabled:opacity-60 max-[650px]:min-h-11 pointer-coarse:min-h-11`,title:t.path,disabled:_||!!v,"aria-busy":w===t.path,"aria-expanded":n,onClick:()=>m(n?p.filter(e=>e!==t.path):[...p,t.path]),children:[(0,U.jsx)(u,{size:14,className:`shrink-0 text-content-muted transition-transform duration-(--d-fast) ${n?`rotate-90`:``}`}),w===t.path?(0,U.jsx)(F,{className:`size-3.5`}):(0,U.jsx)(S,{size:14,className:`flex-none text-content-muted`}),(0,U.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-mono`,children:t.path}),(t.reverted||t.approved)&&(0,U.jsx)(`span`,{className:`shrink-0 text-content-muted`,children:t.reverted?o(`chat:focusSession.fileChangesReverted`):o(`chat:focusSession.fileChangesApproved`)}),(0,U.jsxs)(`span`,{className:`shrink-0 font-mono tabular-nums`,children:[(0,U.jsxs)(`span`,{className:`text-success`,children:[`+`,t.added]}),` `,(0,U.jsxs)(`span`,{className:`text-danger`,children:[`−`,t.removed]})]})]}),(0,U.jsx)(I,{type:`button`,variant:`ghost`,size:`icon`,className:L,title:o(`chat:focusSession.fileChangesApproveFile`),"aria-label":`${o(`chat:focusSession.fileChangesApproveFile`)} ${t.path}`,disabled:E||!t.pending||t.approved||t.reverted,onClick:()=>void N({kind:`approve`,path:t.path}),children:(0,U.jsx)(l,{size:14})}),(0,U.jsx)(I,{type:`button`,variant:`ghost`,size:`icon`,className:L,title:o(`chat:focusSession.fileChangesRevertFile`),"aria-label":`${o(`chat:focusSession.fileChangesRevertFile`)} ${t.path}`,disabled:E||t.reverted||!t.canRevert,onClick:()=>void N({kind:`revert`,path:t.path}),children:(0,U.jsx)(C,{size:14})})]}),n&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(f,{sessionId:e,path:t.path,scope:`task`,position:r?.reading?.[t.path],onReading:e=>a?.({reading:{...r?.reading,[t.path]:e}}),revision:T}),(0,U.jsx)(I,{variant:`ghost`,size:`sm`,className:`m-1.5`,onClick:()=>void j(t.path),children:o(`chat:workbench.fullDiff`)})]})]},t.path)}),h.files.length>G&&(0,U.jsx)(`li`,{className:`px-3 py-2 text-xs text-content-muted tabular-nums`,children:o(`chat:focusSession.gitMoreFiles`,{count:h.files.length-G})})]}):!k&&(0,U.jsx)(z,{compact:!0,title:o(`chat:focusSession.fileChangesEmpty`)}),y&&(0,U.jsx)(H.Suspense,{fallback:null,children:(0,U.jsx)(W,{diff:y.diff,truncated:y.truncated,onClose:()=>b(null)})})]})}function oe({tools:e,onSelect:t,onOpenUrl:n}){let{t:r}=i(),[a,o]=(0,H.useState)(``),[s,c]=(0,H.useState)(!1);return(0,U.jsxs)(`section`,{className:`@container/new-tab flex min-h-0 flex-1 flex-col overflow-y-auto bg-panel p-4`,children:[(0,U.jsx)(`h2`,{className:`mb-3 text-sm font-medium text-content`,children:r(`chat:workbench.newTab`)}),(0,U.jsxs)(`form`,{className:`mb-4 flex gap-2`,onSubmit:e=>{e.preventDefault();let t=V(a,window.location.href);c(!t),t&&n(t)},children:[(0,U.jsx)(B,{className:`font-mono`,"aria-label":r(`common:webPreview.url`),placeholder:r(`common:webPreview.urlPlaceholder`),value:a,maxLength:2048,onChange:e=>o(e.target.value)}),(0,U.jsx)(I,{type:`submit`,variant:`secondary`,children:r(`chat:sessionContext.openUrl`)})]}),s&&(0,U.jsx)(`p`,{role:`alert`,className:`mb-3 text-xs text-danger`,children:r(`chat:sessionContext.invalidUrl`)}),(0,U.jsx)(`div`,{className:`grid grid-cols-1 gap-1.5 @min-[420px]/new-tab:grid-cols-2`,children:e.map(({id:e,label:n,icon:r,disabled:i})=>(0,U.jsxs)(I,{disabled:i,variant:`ghost`,className:`h-10 min-w-0 justify-start gap-2.5 border-stroke bg-panel px-3 font-normal text-content max-[650px]:h-11 pointer-coarse:h-11 [&_svg]:text-content-muted`,onClick:()=>t(e),children:[(0,U.jsx)(r,{className:`size-4 shrink-0`}),(0,U.jsx)(`span`,{className:`truncate`,children:n})]},e))})]})}function K({panelId:e,compact:t,embedded:n=!1,active:r=!0,sessionId:l,cwd:u=``,sources:f=[],tab:g,plan:x,streaming:C,plansAvailable:M,requestConfirm:F,onTabChange:R,onClose:B,onBack:V}){let{t:W}=i(),G=ie(),K=o(e=>e.capabilities),q=[{id:`terminal`,icon:N,label:W(`terminal:workspace.terminal`)},{id:`processes`,icon:s,label:W(`terminal:workspace.processes`)},{id:`changes`,icon:S,label:W(`chat:workbench.projectChanges`)},{id:`sources`,icon:k,label:W(`chat:workbench.sources`)},{id:`files`,icon:T,label:W(`chat:workbench.taskSnapshots`)},...M?[{id:`plan`,icon:w,label:W(`chat:sessionContext.plan`)}]:[],{id:`browser`,icon:b,label:W(`common:webPreview.title`)},{id:`side-chat`,icon:A,label:W(`chat:sideChat.title`)}],se=(0,H.useMemo)(()=>D(g),[g]),J=O(e=>Object.prototype.hasOwnProperty.call(e.sessions,l)?e.sessions[l]:void 0)??se,ce=(0,H.useRef)(null),Y=J.pages.find(e=>e.id===J.activeId)??J.pages[0],X=e=>e.kind===`new`?{id:`new`,icon:j,label:W(`chat:workbench.newTab`)}:q.find(t=>t.id===e.kind)??q[0],le=t=>requestAnimationFrame(()=>document.getElementById(`${e}-${t}-tab`)?.focus()),ue=(0,H.useEffectEvent)(()=>{r&&document.getElementById(`${e}-${J.activeId}-tab`)?.focus()});(0,H.useEffect)(()=>{let e=requestAnimationFrame(()=>ue());return()=>cancelAnimationFrame(e)},[e,J.activeId]);let Z=e=>{if(e.type===`view`&&!O.getState().sessions[l])return;[`add`,`open`,`select`,`close`,`kind`].includes(e.type)&&window.dispatchEvent(new Event(L));let t=E(J,e);O.getState().update(l,g,e);let n=t.pages.find(e=>e.id===t.activeId);n&&R(n.kind),(e.type===`add`||e.type===`select`||e.type===`close`)&&le(t.activeId),e.type===`close`&&J.pages.length===1&&B()},Q=W(`chat:sessionContext.addPage`),de=W(`chat:sessionContext.pageLimit`),fe=(0,U.jsx)(I,{variant:`ghost`,size:`icon`,className:`max-[650px]:size-11`,disabled:J.pages.length>=12,"aria-label":Q,title:J.pages.length>=12?de:Q,onClick:()=>Z({type:`add`,kind:`new`}),children:(0,U.jsx)(j,{size:16})}),$=(0,U.jsxs)(`div`,{"data-session-context-panel":!0,className:`flex h-full min-h-0 min-w-0 flex-col bg-panel text-content`,children:[(0,U.jsxs)(`header`,{"data-window-drag-region":!0,className:`auxiliary-page-header flex h-12 shrink-0 items-center gap-1 border-b border-stroke-soft px-2`,children:[V&&(0,U.jsx)(I,{variant:`ghost`,size:`icon`,className:`max-[650px]:size-11`,"aria-label":W(`chat:workbench.backToConversation`),title:W(`chat:workbench.backToConversation`),onClick:V,children:(0,U.jsx)(c,{size:16})}),(0,U.jsx)(`div`,{ref:ce,className:`flex min-w-0 flex-1 items-center gap-0.5 overflow-x-auto px-px py-1 [scrollbar-width:none]`,role:`tablist`,"aria-label":W(`chat:sessionContext.title`),onKeyDown:e=>{if(!(e.target instanceof HTMLElement)||e.target.getAttribute(`role`)!==`tab`)return;if(e.key===`Delete`){e.preventDefault(),Z({type:`close`,id:Y.id});return}if(![`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes(e.key))return;e.preventDefault();let t=J.pages.findIndex(e=>e.id===Y.id),n=e.key===`Home`?0:e.key===`End`?J.pages.length-1:(t+(e.key===`ArrowRight`?1:-1)+J.pages.length)%J.pages.length;Z({type:`select`,id:J.pages[n].id})},children:J.pages.map(t=>{let{icon:n,label:r}=X(t);return(0,U.jsxs)(`div`,{className:`relative flex max-w-40 min-w-20 shrink-0 items-center rounded-sm transition-colors duration-(--d-fast) ${t.id===Y.id?`bg-key font-medium text-content shadow-key ring-1 ring-key-border after:absolute after:inset-x-2 after:bottom-0 after:h-0.5 after:rounded-full after:bg-star`:`text-content-muted hover:bg-surface-hover hover:text-content`}`,children:[(0,U.jsxs)(`button`,{id:`${e}-${t.id}-tab`,type:`button`,role:`tab`,"aria-selected":t.id===Y.id,"aria-controls":`${e}-${t.id}-content`,tabIndex:t.id===Y.id?0:-1,className:`flex h-7 min-w-0 flex-1 items-center gap-1.5 rounded-sm pl-2 text-sm focus-visible:outline-offset-0 max-[650px]:h-11`,onClick:()=>Z({type:`select`,id:t.id}),children:[(0,U.jsx)(n,{size:14,className:`shrink-0`}),(0,U.jsx)(`span`,{className:`truncate`,children:r})]}),(0,U.jsx)(`button`,{type:`button`,className:`mx-0.5 grid size-5 shrink-0 place-items-center rounded-xs text-content-muted hover:bg-surface-hover hover:text-content focus-visible:outline-offset-0 max-[650px]:size-11`,"aria-label":`${W(`chat:sessionContext.closePage`)} · ${r}`,onClick:()=>Z({type:`close`,id:t.id}),children:(0,U.jsx)(P,{size:12})})]},t.id)})}),fe]}),J.pages.map(t=>{let n=X(t),r=Y.id===t.id;return(0,U.jsx)(`div`,{id:`${e}-${t.id}-content`,role:`tabpanel`,"aria-labelledby":`${e}-${t.id}-tab`,className:r?`flex min-h-0 flex-1 flex-col`:`hidden`,hidden:!r,children:n.id===`new`?r&&(0,U.jsx)(oe,{tools:q.map(e=>({...e,disabled:e.id===`terminal`||e.id===`processes`?!G||!a(K,`terminal`):e.id===`changes`&&!a(K,`vcs`)})),onOpenUrl:e=>{Z({type:`open`,kind:`browser`,replaceId:t.id}),O.getState().update(l,`browser`,{type:`browser`,id:t.id,url:e,draft:e})},onSelect:e=>Z({type:`open`,kind:e,replaceId:t.id})}):n.id===`changes`?r&&(0,U.jsx)(v,{sessionId:l,cwd:u,streaming:C,view:t.view,onViewChange:e=>Z({type:`view`,id:t.id,patch:e})}):n.id===`sources`?r&&(0,U.jsx)(_,{sources:f,view:t.view,onViewChange:e=>Z({type:`view`,id:t.id,patch:e})}):n.id===`terminal`?r&&(0,U.jsx)(d,{sessionId:l,cwd:u,terminalId:t.resourceId||void 0,onCreated:e=>O.getState().update(l,g,{type:`resource`,id:t.id,resourceId:e})}):n.id===`processes`?r&&(0,U.jsx)(p,{view:t.view,onViewChange:e=>Z({type:`view`,id:t.id,patch:e}),sessionId:l,onOpenTerminal:e=>Z({type:`open`,kind:`terminal`,resourceId:e})}):n.id===`side-chat`?(0,U.jsx)(h,{parentId:l,active:r}):n.id===`browser`?(0,U.jsx)(y,{page:t,onChange:e=>Z({type:`browser`,id:t.id,...e})}):r&&(n.id===`files`?(0,U.jsx)(ae,{view:t.view,onViewChange:e=>Z({type:`view`,id:t.id,patch:e}),sessionId:l,streaming:C,requestConfirm:F}):(0,U.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-3`,children:x?.items?.length?(0,U.jsx)(m,{plan:x}):(0,U.jsx)(z,{compact:!0,title:W(`chat:sessionContext.planEmpty`)})}))},t.id)})]});return t?(0,U.jsx)(re,{open:!0,onOpenChange:e=>!e&&B(),children:(0,U.jsxs)(te,{id:e,side:`right`,showCloseButton:!1,className:`gap-0 overflow-hidden p-0`,style:{top:`var(--pisper-safe-area-top)`,right:`var(--pisper-safe-area-right)`,bottom:`var(--pisper-safe-area-bottom)`,height:`auto`,width:`min(calc(100vw - var(--pisper-safe-area-left) - var(--pisper-safe-area-right)), 420px)`,maxWidth:`none`},children:[(0,U.jsx)(ee,{className:`sr-only`,children:(0,U.jsx)(ne,{children:W(`chat:sessionContext.title`)})}),$]})}):(0,U.jsx)(`aside`,{id:e,tabIndex:n?-1:void 0,className:`h-full min-h-0 w-full overflow-hidden border-l border-stroke bg-panel`,"aria-label":W(`chat:sessionContext.title`),children:$})}export{K as SessionContextPanel};
@@ -1 +0,0 @@
1
- import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{u as t}from"./vendor-router-CSN_DGvx.js";import{i as n,r}from"./vendor-react-DwNgTV1j.js";import{f as i,t as a}from"./routes-Da0OHSy6.js";import{t as o}from"./use-i18n-B5p-Kzvz.js";import{n as s,t as c}from"./usePhoneShell-Bvb7m-m4.js";import{t as l}from"./LaunchConsole-DtxzpXJo.js";import{t as u}from"./PhoneMenuButton-B0AwvqEo.js";import{t as d}from"./message-square-SKjZyY3v.js";import{t as f}from"./button-CCcCN8tE.js";import{t as p}from"./useSessionListQuery-D44XZfGr.js";import{r as m}from"./new-task-C3wuHTor.js";import"./public-jQjEc6OO.js";import{n as h}from"./PageState-Cz6vFMXv.js";import{n as g,r as _}from"./session-home-BktP6sGF.js";var v=e(n(),1),y=r(),b=new Set([`shortcut`,`sidebar`]);function x({phone:e,leading:t,onDispatched:n,onDetachedFailure:r,onConfigureModels:i}){let{t:a}=o(),s=(0,v.useRef)(null);m(({source:e})=>!b.has(e)||!s.current?!1:(s.current.focusEnd(),!0));let c=(0,y.jsxs)(`div`,{className:`flex min-w-0 flex-col items-start gap-2`,"data-new-task-intro":!0,children:[(0,y.jsx)(`span`,{"aria-hidden":`true`,className:`grid size-9 place-items-center rounded-md border border-stroke bg-solid text-content-muted shadow-edge`,children:(0,y.jsx)(d,{className:`size-[18px]`,strokeWidth:1.75})}),(0,y.jsx)(`h2`,{className:`text-xl font-semibold tracking-[-.01em] text-content max-[650px]:text-lg`,children:a(`board:home.draftHeading`)}),(0,y.jsx)(`p`,{className:`text-sm leading-6 text-content-muted`,children:a(`board:home.draftHint`)})]}),u=(0,y.jsx)(l,{variant:`composer`,ref:s,touch:e,compactChips:e,autoFocus:!e,onDispatched:e=>n(e),onDetachedFailure:r,onConfigureModels:i});return e?(0,y.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col bg-panel pb-[var(--pisper-safe-area-bottom)] [[data-mobile-keyboard='open']_&]:pb-0`,"data-new-task-draft":`phone`,children:[(0,y.jsxs)(`header`,{"data-session-header":`draft`,"data-focus-region":`header`,className:`grid h-14 min-w-0 shrink-0 grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center bg-panel px-1`,children:[(0,y.jsx)(`div`,{className:`flex min-w-0 items-center`,children:t}),(0,y.jsxs)(`div`,{className:`flex max-w-[min(58vw,260px)] min-w-0 flex-col items-center justify-center`,children:[(0,y.jsx)(`h1`,{className:`max-w-full truncate px-1.5 text-[15px] leading-5 font-semibold text-content`,children:a(`board:home.draftTitle`)}),(0,y.jsx)(`p`,{className:`max-w-full truncate text-xs leading-5 text-content-muted`,children:a(`board:home.draftSubtitle`)})]}),(0,y.jsx)(`span`,{"aria-hidden":`true`})]}),(0,y.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col justify-end overflow-y-auto px-4 pt-4 pb-5`,children:c}),(0,y.jsx)(`div`,{"data-focus-region":`composer`,className:`shrink-0 px-3 pt-1 pb-2.5`,children:u})]}):(0,y.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col bg-panel`,"data-new-task-draft":`desktop`,children:[(0,y.jsxs)(`header`,{"data-session-header":`draft`,"data-focus-region":`header`,"data-window-drag-region":!0,className:`flex h-[52px] min-w-0 shrink-0 items-center gap-2 border-b border-stroke-soft pr-2 pl-4 [[data-custom-titlebar]_&]:pr-[144px]`,children:[(0,y.jsx)(`h1`,{className:`flex-none text-[15px] leading-6 font-semibold text-content`,children:a(`board:home.draftTitle`)}),(0,y.jsx)(`span`,{className:`min-w-0 truncate text-xs text-content-muted`,children:a(`board:home.draftSubtitle`)})]}),(0,y.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col justify-end overflow-y-auto`,children:(0,y.jsx)(`div`,{className:`mx-auto w-[min(768px,calc(100%_-_48px))] pt-8 pb-6`,children:c})}),(0,y.jsx)(`div`,{"data-focus-region":`composer`,className:`mx-auto w-[min(768px,calc(100%_-_48px))] shrink-0 pt-2 pb-3`,children:u})]})}function S({context:e}){let{t:n}=o(),r=t(),l=c(),d=s(),m=!l||d,[b]=(0,v.useState)(_),[S,C]=(0,v.useState)(!1),w=p(),T=S?{kind:`draft`}:g({lastId:b,data:w.data,failed:w.isError&&!w.isFetching}),E=T.kind===`session`?T.id:``,D=e.notify,O=(0,v.useRef)(!1);(0,v.useEffect)(()=>(O.current=!0,()=>{O.current=!1}),[]);let k=(0,v.useCallback)(e=>{if(e){if(O.current){r(i(e),{replace:!0,state:a});return}D(n(`board:launch.dispatched`),`success`,{action:{label:n(`board:phone.openSession`),onAction:()=>r(i(e))}})}},[r,D,n]);(0,v.useEffect)(()=>k(E),[k,E]);let A=(0,v.useCallback)(e=>D(e,`error`),[D]),j=(0,v.useCallback)(()=>r(`/config/models`),[r]),M=(0,y.jsx)(u,{}),N;return N=T.kind===`draft`?(0,y.jsx)(x,{phone:!m,leading:M,onDispatched:k,onDetachedFailure:A,onConfigureModels:j}):(0,y.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col bg-panel`,children:[!m&&(0,y.jsx)(`header`,{className:`flex h-14 shrink-0 items-center bg-panel px-1`,children:M}),(0,y.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center`,children:T.kind===`error`?(0,y.jsx)(h,{kind:`error`,title:n(`board:home.loadFailed`),description:n(`board:home.loadFailedHint`),action:(0,y.jsxs)(`div`,{className:`flex flex-wrap justify-center gap-2`,children:[(0,y.jsx)(f,{variant:`secondary`,className:`pointer-coarse:min-h-11`,onClick:()=>void w.refetch(),children:n(`navigation:more.retry`)}),(0,y.jsx)(f,{variant:`ghost`,className:`pointer-coarse:min-h-11`,onClick:()=>C(!0),children:n(`board:home.startDraft`)})]})}):(0,y.jsx)(h,{kind:`loading`,title:n(`board:home.loading`)})})]}),(0,y.jsx)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,"data-session-shell":m?`desktop`:`phone`,"data-session-home":T.kind,children:(0,y.jsx)(`div`,{className:`flex min-h-0 min-w-0 flex-1`,children:N})})}export{S as SessionHome};
@@ -1 +0,0 @@
1
- import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t,r as n}from"./vendor-react-DwNgTV1j.js";import{t as r}from"./use-i18n-B5p-Kzvz.js";import{t as i}from"./useQuery-DdcpUQhO.js";import{i as a}from"./runtime-capabilities-4_ZwLBqF.js";import{t as o}from"./runtime-capabilities-store-C2Qv7uDP.js";import{t as s}from"./createLucideIcon-Cd-3GVxJ.js";import{i as c}from"./permission-rules-api-BoJ_1W-m.js";import{t as l}from"./check-2vYc6QaP.js";import{a as u,c as d,i as f,l as p,n as m,o as h,r as g,t as _}from"./SessionBrowserPane-CB7jn-MS.js";import{t as v}from"./earth-Ddy13fHh.js";import{t as y}from"./ellipsis-CfGKfbq6.js";import{o as b}from"./GitDiffViewer-rjt5_KOt.js";import{A as ee,M as te,P as x,c as ne,h as S,p as C,s as re}from"./side-chat-context-BfOm4dFp.js";import{t as w}from"./git-branch-N7LGjtzt.js";import{t as ie}from"./message-square-SKjZyY3v.js";import{t as ae}from"./plus-fQbSqB1n.js";import{t as T}from"./refresh-cw-TbWxTY4K.js";import{t as oe}from"./square-terminal-BVG6cUT1.js";import{t as se}from"./x-07u4-129.js";import{c as ce,i as E,p as le,r as D,t as O}from"./dropdown-menu-CFIFNaKO.js";import{i as ue,n as de,t as fe}from"./popover--UmYQ9yB.js";import{t as pe}from"./segmented-control-BlM_GKV6.js";import{t as k}from"./utils-C8uzG5AZ.js";import{t as A}from"./button-CCcCN8tE.js";import{t as me}from"./chat-api-DkdyVQY9.js";import{a as j,r as M}from"./format-DMJQzoZ7.js";import{n as he,t as N}from"./PageState-Cz6vFMXv.js";import{t as ge}from"./session-change-summary-api-DgRT32uh.js";import{i as P,n as F,r as I}from"./MarkdownMessage-yl-PSRAz.js";import{t as _e}from"./route-context-DvWDul4T.js";import{t as ve}from"./StatusGlyph-1KgitlUg.js";import"./web-preview-CqwSe9Zn.js";import{n as ye}from"./terminal-context-aIsIJPn8.js";var be=s(`folder-search`,[[`path`,{d:`M10.7 20H4a2 2 0 0 1-2-2V5a2 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 2v4.1`,key:`1bw5m7`}],[`path`,{d:`m21 21-1.9-1.9`,key:`1g2n9r`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}]]),xe=s(`panel-right-close`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M15 3v18`,key:`14nvp0`}],[`path`,{d:`m8 9 3 3-3 3`,key:`12hl5m`}]]),L=e(t(),1),R=n(),z={running:{kind:`run`,color:`text-st-run`},starting:{kind:`run`,color:`text-st-run`},queued:{kind:`queued`,color:`text-st-queue`},completed:{kind:`done`,color:`text-st-done`},failed:{kind:`failed`,color:`text-st-fail`},interrupted:{kind:`stopped`,color:`text-st-queue`},blocked:{kind:`queued`,color:`text-st-queue`}};function Se(e,t){return t(e===`queued`?`chat:agentRunActivity.teamTaskQueued`:e===`starting`?`chat:agentRunActivity.teamTaskStarting`:e===`running`?`chat:agentRunActivity.teamTaskRunning`:e===`completed`?`chat:agentRunActivity.teamTaskCompleted`:e===`failed`?`chat:agentRunActivity.teamTaskFailed`:e===`interrupted`?`chat:agentRunActivity.teamTaskInterrupted`:e===`blocked`?`chat:agentRunActivity.teamTaskBlocked`:`chat:agentRunActivity.teamTaskStatusUpdated`)}function B(e,t){return e.status===`active`?e.mode===`team`?t(`chat:focusSession.runningAsTeam`):t(`chat:focusSession.runningAutonomously`):e.status===`paused`?t(`chat:focusSession.goalPaused`):e.status===`complete`?t(`chat:focusSession.goalComplete`):e.status===`budget_limited`?t(`chat:focusSession.goalReachedItsBudget`):``}function V({title:e,children:t}){return(0,R.jsxs)(`section`,{className:`grid min-w-0 gap-2`,"aria-label":e,children:[(0,R.jsx)(`h3`,{className:`text-xs font-semibold text-content-secondary`,children:e}),t]})}function H({status:e,name:t,detail:n,t:r}){let i=z[String(e)]??{kind:`queued`,color:`text-st-queue`};return(0,R.jsxs)(`li`,{className:`flex min-w-0 items-start gap-2 py-1.5 text-xs`,children:[(0,R.jsx)(ve,{status:i.kind,className:`mt-px size-3.5 ${i.color}`}),(0,R.jsxs)(`span`,{className:`grid min-w-0 flex-1 gap-0.5`,children:[(0,R.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,R.jsx)(`strong`,{className:`min-w-0 truncate font-medium text-content`,children:t}),(0,R.jsx)(`span`,{className:`flex-none text-content-muted`,children:Se(e,r)})]}),n&&(0,R.jsx)(`span`,{className:`min-w-0 break-words text-content-muted`,children:n})]})]})}function Ce(e){let t=new Map;for(let n of e){if(n?.type!==`agent`||!n.agent||typeof n.agent!=`object`)continue;let e=n.agent,r=String(e.id||e.taskName||t.size);t.set(r,e)}return[...t.values()]}function we({plan:e,goal:t,team:n,activity:i}){let{t:a}=r(),o=Array.isArray(n?.tasks)?n.tasks:[],s=Ce(i),c=!!(t?.id&&String(t.objective||``).trim()),l=!!e?.items?.length;if(!c&&!l&&!o.length&&!s.length)return(0,R.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-3`,children:(0,R.jsx)(N,{compact:!0,icon:te,title:a(`chat:sessionContext.planEmpty`)})});let u=Number(t?.mode===`team`?t?.teamTokenBudget:t?.tokenBudget)||0;return(0,R.jsxs)(`div`,{className:`grid min-h-0 flex-1 content-start gap-5 overflow-y-auto p-3`,"data-inspector-plan":!0,children:[c&&t&&(0,R.jsx)(V,{title:a(`board:inspector.goal`),children:(0,R.jsxs)(`div`,{className:`grid gap-1.5 rounded-md border border-stroke-soft bg-surface-subtle p-3 text-xs`,children:[(0,R.jsx)(`p`,{className:`whitespace-pre-wrap break-words text-content`,children:String(t.objective)}),(0,R.jsxs)(`p`,{className:`flex flex-wrap items-center gap-x-2 text-content-muted tabular-nums`,children:[(0,R.jsx)(`span`,{children:B(t,a)}),(0,R.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,R.jsx)(`span`,{children:u>0?a(`chat:focusSession.usedBudgetTokensUsed`,{used:M(t.tokensUsed),budget:M(u)}):a(`chat:focusSession.usedUnlimitedGoalTokens`,{used:M(t.tokensUsed)})})]})]})}),l&&(0,R.jsx)(V,{title:a(`board:inspector.plan`),children:(0,R.jsx)(p,{plan:e})}),o.length>0&&(0,R.jsx)(V,{title:a(`board:inspector.team`),children:(0,R.jsx)(`ul`,{className:`divide-y divide-stroke-soft`,children:o.map((e,t)=>(0,R.jsx)(H,{status:e.status,name:e.taskName||a(`chat:agentRunActivity.subagent`),detail:e.error||e.output||``,t:a},e.id||`${e.taskName}-${t}`))})}),s.length>0&&(0,R.jsx)(V,{title:a(`board:inspector.subAgents`),children:(0,R.jsx)(`ul`,{className:`divide-y divide-stroke-soft`,children:s.map((e,t)=>(0,R.jsx)(H,{status:e.status,name:String(e.taskName||``).trim()||a(`chat:agentRunActivity.subagent`),detail:String(e.error||e.message||``).trim(),t:a},String(e.id||t)))})})]})}var U=100;function W(e){let t=e.trim().toUpperCase();return t===`??`||t.includes(`A`)?`created`:t.includes(`D`)?`deleted`:t.includes(`R`)?`renamed`:t.includes(`M`)?`modified`:`other`}var Te={modified:`M`,created:`A`,deleted:`D`,renamed:`R`,other:`·`},Ee={modified:`text-content-secondary`,created:`text-st-done`,deleted:`text-st-fail`,renamed:`text-content-secondary`,other:`text-content-muted`};function G(e){let t=e.replace(/\\/g,`/`),n=t.lastIndexOf(`/`);return n<0?{directory:``,name:t}:{directory:t.slice(0,n+1),name:t.slice(n+1)}}function K(e,t){return/^(?:[a-zA-Z]:[\\/]|\/|\\\\)/.test(t)?t:`${e.replace(/[\\/]+$/,``)}/${t}`}function De(e,t){window.dispatchEvent(new CustomEvent(_e,{detail:{message:e,tone:t}}))}function q({added:e,removed:t}){return e===null||t===null?null:(0,R.jsxs)(`span`,{className:`flex-none font-mono text-xs tabular-nums`,children:[(0,R.jsxs)(`span`,{className:`text-success`,children:[`+`,e]}),` `,(0,R.jsxs)(`span`,{className:`text-danger`,children:[`−`,t]})]})}function J({status:e,children:t}){let{t:n}=r();return(0,R.jsxs)(`footer`,{className:`mt-auto flex h-10 shrink-0 items-center gap-2 border-t border-stroke-soft pr-1.5 pl-3 text-xs text-content-muted`,"data-changes-footer":!0,children:[(0,R.jsx)(`span`,{className:`flex min-w-0 flex-1 items-center gap-1.5 truncate`,children:e}),(0,R.jsxs)(O,{children:[(0,R.jsx)(le,{asChild:!0,children:(0,R.jsx)(A,{type:`button`,variant:`ghost`,size:`icon-sm`,className:`pointer-coarse:size-11`,"aria-label":n(`board:changes.more`),title:n(`board:changes.more`),"data-changes-more":!0,children:(0,R.jsx)(y,{"aria-hidden":`true`})})}),(0,R.jsx)(D,{align:`end`,side:`top`,className:`min-w-48`,children:t})]})]})}function Y({status:e}){let{t}=r(),n=t(e===`created`?`board:changes.statusCreated`:e===`deleted`?`board:changes.statusDeleted`:e===`renamed`?`board:changes.statusRenamed`:`board:changes.statusModified`);return(0,R.jsxs)(`span`,{className:k(`w-3.5 flex-none text-center font-mono text-xs font-semibold`,Ee[e]),title:n,children:[(0,R.jsx)(`span`,{"aria-hidden":`true`,children:Te[e]}),(0,R.jsx)(`span`,{className:`sr-only`,children:n})]})}function X({files:e,selected:t,label:n,onSelect:r}){let i=(0,L.useRef)(null);return(0,R.jsxs)(`ul`,{ref:i,"aria-label":n,className:`max-h-[34%] min-h-11 shrink-0 overflow-y-auto border-b border-stroke-soft py-1`,onKeyDown:e=>{if(![`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key))return;let t=[...i.current?.querySelectorAll(`[data-change-file]`)??[]],n=t.findIndex(e=>e===document.activeElement),a=t[e.key===`Home`?0:e.key===`End`?t.length-1:Math.min(t.length-1,Math.max(0,n+(e.key===`ArrowDown`?1:-1)))];a&&(e.preventDefault(),a.focus(),r(a.dataset.changeFile||``))},"data-change-list":!0,children:[e.slice(0,U).map(e=>{let n=e.path===t,{directory:i,name:a}=G(e.path);return(0,R.jsx)(`li`,{className:`px-1`,children:(0,R.jsxs)(`button`,{type:`button`,title:e.path,"aria-label":[e.path,Te[e.status],e.added!==null&&e.removed!==null?`+${e.added} −${e.removed}`:``,e.note||``].filter(Boolean).join(` `),"aria-current":n?`true`:void 0,"data-change-file":e.path,className:k(`flex h-8 w-full min-w-0 items-center gap-2 rounded-sm px-2 text-left text-xs transition-colors duration-(--d-fast) focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus max-[650px]:h-11 pointer-coarse:h-11`,n?`bg-solid shadow-[inset_0_0_0_1px_var(--stroke-strong)]`:`hover:bg-surface-hover`),onClick:()=>r(e.path),children:[(0,R.jsx)(Y,{status:e.status}),(0,R.jsxs)(`span`,{className:`flex min-w-0 flex-1 font-mono`,children:[(0,R.jsx)(`span`,{className:`min-w-0 truncate text-content-muted`,children:i}),(0,R.jsx)(`span`,{className:`flex-none text-content`,children:a})]}),e.note&&(0,R.jsx)(`span`,{className:`flex-none text-content-muted`,children:e.note}),(0,R.jsx)(q,{added:e.added,removed:e.removed})]})},e.path)}),e.length>U&&(0,R.jsx)(`li`,{className:`px-3 py-1.5 text-xs text-content-muted tabular-nums`,children:(0,R.jsx)(Oe,{count:e.length-U})})]})}function Oe({count:e}){let{t}=r();return(0,R.jsx)(R.Fragment,{children:t(`chat:focusSession.gitMoreFiles`,{count:e})})}var Z=600;function ke({sessionId:e,file:t,scope:n,revision:i,view:a,onViewChange:o,footer:s}){let{t:l}=r(),u=c(e=>e.diffMode),f=c(e=>e.setDiffMode),p=(0,L.useRef)(null),[m,h]=(0,L.useState)(0);(0,L.useLayoutEffect)(()=>{let e=p.current;if(!e)return;let t=()=>h(e.clientWidth);t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let g=m===0||m>=Z,_=g?u:`unified`,v=g?void 0:l(`board:changes.splitTooNarrow`);return(0,R.jsxs)(`section`,{ref:p,className:`flex min-h-0 flex-1 flex-col`,"aria-label":t.path,"data-change-detail":t.path,children:[(0,R.jsxs)(`header`,{className:`flex min-h-10 shrink-0 items-center gap-2 border-b border-stroke-soft py-1.5 pr-2 pl-3`,children:[(0,R.jsx)(Y,{status:t.status}),(0,R.jsx)(`strong`,{className:`min-w-0 flex-1 truncate font-mono text-xs font-semibold text-content`,title:t.path,children:t.path}),(0,R.jsx)(q,{added:t.added,removed:t.removed}),(0,R.jsx)(pe,{size:`sm`,"aria-label":l(`board:changes.diffView`),title:v,"aria-description":v,value:_,onValueChange:f,options:[{value:`unified`,label:l(`board:changes.unified`)},{value:`split`,label:l(`board:changes.split`),disabled:!g}]})]}),(0,R.jsx)(d,{sessionId:e,path:t.path,scope:n,revision:i,mode:_,fill:!0,position:a?.reading?.[t.path],onReading:e=>o?.({reading:{...a?.reading,[t.path]:e}})},`${n}:${t.path}`),(0,R.jsx)(`footer`,{className:`flex min-h-10 shrink-0 flex-wrap items-center gap-1 border-t border-stroke-soft py-1 pr-1.5 pl-3 text-xs`,children:s})]})}function Ae({cwd:e,path:t}){let{t:n}=r();if(!window.pisperDesktop||!e)return null;let i=K(e,t);return(0,R.jsxs)(A,{type:`button`,variant:`ghost`,size:`sm`,className:`max-[650px]:h-11`,onClick:async()=>{try{await I(i,P),De(n(`common:markdownMessage.revealLocalPathOk`,{path:t}),`info`)}catch(e){De(e instanceof F&&e.reason===`unavailable`?n(`common:markdownMessage.revealLocalPathUnavailable`):e instanceof F&&e.reason===`timeout`?n(`common:markdownMessage.revealLocalPathTimeout`):n(`common:markdownMessage.revealLocalPathFailed`,{path:t}),`error`)}},children:[(0,R.jsx)(be,{"aria-hidden":`true`}),n(`chat:chatMessage.fileActionReveal`)]})}function Q(e){return{path:e.path,status:e.status===`created`?`created`:e.status===`deleted`?`deleted`:`modified`,added:e.added,removed:e.removed}}function $(e,t){if(!e)return;let n=[];return e.lineEnding&&n.push(t(`chat:focusSession.fileChangesLineEnding`,{from:e.lineEnding[0].toUpperCase(),to:e.lineEnding[1].toUpperCase()})),e.bom?.[1]?n.push(t(`chat:focusSession.fileChangesBomAdded`)):e.bom&&n.push(t(`chat:focusSession.fileChangesBomRemoved`)),t(`chat:focusSession.fileChangesFormatOnly`,{detail:n.join(` · `)})}function je({sessionId:e,cwd:t,streaming:n,view:i,onViewChange:a,requestConfirm:o}){let{t:s,language:c}=r(),{changes:u,loading:d,running:f,snapshotRevision:p,writesDisabled:m,pendingCount:g,reversibleCount:_,displayedError:v,notice:y,runAction:b,refresh:te}=h({sessionId:e,streaming:n,requestConfirm:o}),x=u?.files??[],ne=i?.expandedFiles?.[0],S=x.find(e=>e.path===ne)??x[0],C=e=>a?.({expandedFiles:[e]}),re=(e,t)=>f?.kind===e&&f.path===t,w=n?s(`chat:focusSession.gitWaitForRunToFinish`):void 0;return(0,R.jsxs)(`section`,{className:`flex min-h-0 flex-1 flex-col`,"aria-label":s(`chat:focusSession.fileChanges`),"aria-busy":d||!!f,"data-changes-scope":`session`,children:[(0,R.jsx)(`header`,{className:`flex min-h-10 shrink-0 items-center gap-1.5 border-b border-stroke-soft py-1 pr-1.5 pl-3`,children:(0,R.jsxs)(`p`,{className:`flex min-w-0 flex-1 items-center gap-2 text-xs text-content-secondary`,children:[(0,R.jsx)(`span`,{className:`min-w-0 truncate`,children:s(`board:changes.sessionSummary`,{count:u?.summary.files??0})}),u&&u.summary.files>0&&(0,R.jsx)(q,{added:u.summary.added,removed:u.summary.removed})]})}),v&&(0,R.jsx)(`p`,{role:`alert`,className:`shrink-0 px-3 pt-2 text-xs text-st-fail`,children:v}),y&&!v&&(0,R.jsx)(`p`,{role:`status`,className:`shrink-0 px-3 pt-2 text-xs text-content-secondary`,children:y}),d&&!u?(0,R.jsx)(he,{kind:`loading`,title:s(`chat:focusSession.gitLoading`)}):x.length?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(X,{files:x.map(e=>({...Q(e),note:e.reverted?s(`chat:focusSession.fileChangesReverted`):e.approved?s(`chat:focusSession.fileChangesApproved`):$(e.formatChange,s)})),selected:S?.path??``,label:s(`board:changes.files`),onSelect:C}),S&&(0,R.jsx)(ke,{sessionId:e,file:Q(S),scope:`task`,revision:p,view:i,onViewChange:a,footer:(0,R.jsxs)(R.Fragment,{children:[(0,R.jsxs)(`span`,{className:k(`mr-auto flex min-w-0 items-center gap-1.5 truncate`,S.approved?`text-st-done`:`text-content-muted`),"data-change-state":S.reverted?`reverted`:S.approved?`approved`:`pending`,children:[S.approved&&!S.reverted&&(0,R.jsx)(l,{className:`size-3.5 flex-none`,"aria-hidden":`true`}),S.reverted?s(`board:changes.revertedAt`,{time:j(S.changedAt,c)}):S.approved?s(`board:changes.approvedAt`,{time:j(S.changedAt,c)}):s(`board:changes.pendingAt`,{time:j(S.changedAt,c)})]}),S.pending&&!S.approved&&!S.reverted&&(0,R.jsxs)(A,{type:`button`,variant:`ghost`,size:`sm`,disabled:m,title:w,onClick:()=>void b({kind:`approve`,path:S.path}),children:[re(`approve`,S.path)?(0,R.jsx)(T,{className:`animate-spin`}):(0,R.jsx)(l,{}),s(`chat:focusSession.fileChangesApproveFile`)]}),(0,R.jsxs)(A,{type:`button`,variant:`ghost`,size:`sm`,disabled:m||S.reverted||!S.canRevert,title:w,onClick:()=>void b({kind:`revert`,path:S.path}),children:[re(`revert`,S.path)?(0,R.jsx)(T,{className:`animate-spin`}):(0,R.jsx)(ee,{}),s(`board:changes.revertFile`)]}),(0,R.jsx)(Ae,{cwd:t,path:S.path})]})})]}):!v&&(0,R.jsx)(N,{compact:!0,title:s(`chat:focusSession.fileChangesEmpty`)}),(0,R.jsxs)(J,{status:f?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(T,{className:`size-3.5 flex-none animate-spin`,"aria-hidden":`true`}),f.kind===`approve`?s(`chat:focusSession.fileChangesApproveAll`):s(`board:changes.revertAll`)]}):g>0?s(`board:changes.pending`,{count:g}):null,children:[g>0&&(0,R.jsxs)(E,{disabled:m,title:w,onSelect:()=>void b({kind:`approve`}),children:[(0,R.jsx)(l,{}),s(`chat:focusSession.fileChangesApproveAll`)]}),(u?.summary.files??0)>0&&(0,R.jsxs)(E,{disabled:m||_===0,title:w??s(`chat:focusSession.fileChangesRevertAllDescription`),onSelect:()=>void b({kind:`revert`}),children:[(0,R.jsx)(ee,{}),s(`board:changes.revertAll`)]}),(g>0||(u?.summary.files??0)>0)&&(0,R.jsx)(ce,{}),(0,R.jsxs)(E,{disabled:d||!!f,onSelect:te,children:[(0,R.jsx)(T,{}),s(`chat:focusSession.gitRefresh`)]})]})]})}function Me({sessionId:e,cwd:t,streaming:n,view:a,onViewChange:o}){let{t:s}=r(),c=i({queryKey:[`task-project-changes`,e,t,n],queryFn:({signal:t})=>me.getVcsChanges(e,{signal:t})}),l=(0,L.useMemo)(()=>C(c.data?.diff||``,c.data?.files.map(e=>e.path)||[],c.data?.diffTruncated),[c.data]),u=c.error?.message||c.data?.error,d=(c.data?.files||[]).map(e=>({path:e.path,status:W(e.status),added:Object.hasOwn(l.files,e.path)?l.files[e.path].added:null,removed:Object.hasOwn(l.files,e.path)?l.files[e.path].removed:null})),f=a?.expandedFiles?.[0],p=d.find(e=>e.path===f)??d[0];return(0,R.jsxs)(`section`,{className:`flex min-h-0 flex-1 flex-col`,"aria-label":s(`chat:workbench.projectChanges`),"aria-busy":c.isFetching,"data-changes-scope":`workspace`,children:[(0,R.jsxs)(`header`,{className:`flex min-h-10 shrink-0 items-center gap-1.5 border-b border-stroke-soft py-1 pr-1.5 pl-3`,children:[(0,R.jsxs)(`p`,{className:`flex min-w-0 flex-1 items-center gap-2 text-xs text-content-secondary`,children:[(0,R.jsx)(`span`,{className:`min-w-0 truncate`,children:s(`board:changes.workspaceSummary`,{count:d.length})}),c.data?.isRepo&&!u&&d.length>0&&(0,R.jsx)(q,{added:l.added,removed:l.removed})]}),c.data?.branch&&(0,R.jsxs)(`span`,{className:`inline-flex h-5.5 max-w-[40%] min-w-0 flex-none items-center gap-1 rounded-xs border border-stroke px-1.5 font-mono text-xs text-content-secondary`,title:t,children:[(0,R.jsx)(w,{size:12,className:`flex-none`,"aria-hidden":`true`}),(0,R.jsx)(`span`,{className:`truncate`,children:c.data.branch})]})]}),c.isPending?(0,R.jsx)(he,{kind:`loading`,title:s(`chat:focusSession.gitLoading`)}):u?(0,R.jsx)(`p`,{role:`alert`,className:`p-3 text-xs text-st-fail`,children:u}):c.data?.isRepo?d.length?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(X,{files:d,selected:p?.path??``,label:s(`board:changes.files`),onSelect:e=>o?.({expandedFiles:[e]})}),p&&(0,R.jsx)(ke,{sessionId:e,file:p,scope:`project`,revision:c.dataUpdatedAt,view:a,onViewChange:o,footer:(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`span`,{className:`mr-auto min-w-0 truncate font-mono text-content-muted`,title:t,children:t}),(0,R.jsx)(Ae,{cwd:t,path:p.path})]})})]}):(0,R.jsx)(N,{compact:!0,title:s(`chat:focusSession.fileChangesEmpty`)}):(0,R.jsx)(N,{compact:!0,title:s(`chat:workbench.notRepository`)}),(0,R.jsx)(J,{status:c.isFetching?(0,R.jsx)(T,{className:`size-3.5 flex-none animate-spin`,"aria-hidden":`true`}):null,children:(0,R.jsxs)(E,{disabled:c.isFetching,onSelect:()=>void c.refetch(),children:[(0,R.jsx)(T,{}),s(`chat:focusSession.gitRefresh`)]})})]})}function Ne({sessionId:e,cwd:t,streaming:n,scope:i,onScopeChange:a,vcsAvailable:o,view:s,onViewChange:c,requestConfirm:l}){let{t:u}=r();return(0,R.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,"data-inspector-changes":i,children:[(0,R.jsx)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-stroke-soft px-3 py-2`,children:(0,R.jsx)(pe,{size:`sm`,"aria-label":u(`board:inspector.changesScope`),value:i,onValueChange:a,options:[{value:`session`,label:u(`board:inspector.scopeSession`)},{value:`workspace`,label:u(`board:inspector.scopeWorkspace`),disabled:!o}]})}),s?i===`workspace`?(0,R.jsx)(Me,{sessionId:e,cwd:t,streaming:n,view:s,onViewChange:c}):(0,R.jsx)(je,{sessionId:e,cwd:t,streaming:n,view:s,onViewChange:c,requestConfirm:l}):(0,R.jsx)(`p`,{role:`status`,className:`p-4 text-sm text-content-muted`,children:u(`chat:focusSession.gitLoading`)})]})}var Pe=[];function Fe(e,t,n){return e===`changes`?n===`workspace`?`changes`:`files`:e===`terminal`?t:e===`files`?`sources`:e===`preview`?`browser`:e===`side-chat`?`side-chat`:null}function Ie({panelId:e,sessionId:t,cwd:n,streaming:s,plan:l,goal:d,team:p,activity:h,planTab:y,sources:ee,mode:C,requestConfirm:w,onClose:T,onOpenComponents:ce,componentTabs:E,autoFocus:le=!1}){let{t:D}=r(),O=C===`sheet`,me=ye(),j=o(e=>e.capabilities),M=!!me&&a(j,`terminal`),he=a(j,`vcs`),P=c(e=>e.tab),F=c(e=>e.setTab),I=c(e=>e.terminalView),_e=c(e=>e.setTerminalView),ve=c(e=>e.changesView),be=c(e=>e.setChangesView),z=S(e=>e.sessions[t]?.pages)??Pe,Se=z.some(e=>e.kind===`side-chat`),B=P===`side-chat`&&!Se||P===`plan`&&!y?`changes`:P,V=Fe(B,I,ve),H=V?z.find(e=>e.kind===V):void 0,Ce=!O&&E?E.tabs(n):[],[U,W]=(0,L.useState)(null),[Te,Ee]=(0,L.useState)(!1),G=Ce.some(e=>e.id===U)?U:null;(0,L.useEffect)(()=>W(null),[P]);let K=(0,L.useRef)(null);(0,L.useEffect)(()=>{K.current?.querySelector(`[role="tab"][aria-selected="true"]`)?.scrollIntoView?.({block:`nearest`,inline:`nearest`})},[B,G]);let De=(0,L.useRef)(le);(0,L.useEffect)(()=>{if(!De.current)return;let e=requestAnimationFrame(()=>K.current?.querySelector(`[role="tab"][aria-selected="true"]`)?.focus({preventScroll:!0}));return()=>cancelAnimationFrame(e)},[]),(0,L.useEffect)(()=>{if(!V||H||(V===`terminal`||V===`processes`)&&!M)return;let e=S.getState(),n=e.sessions[t]?.contentOpen??!1;e.update(t,V,{type:`add`,kind:V}),n||e.update(t,V,{type:`workspace`,contentOpen:!1})},[V,H,t,M]);let q=i({queryKey:[`session-change-summary`,t,s],queryFn:()=>ge(t),staleTime:1e4}),J=q.data?.status===`known`?q.data.changedFiles??0:0,Y=[{id:`changes`,icon:b,label:J>0?D(`board:inspector.changesCount`,{count:J}):D(`board:inspector.changes`)},{id:`terminal`,icon:oe,label:D(`board:inspector.terminal`)},{id:`files`,icon:x,label:D(`board:inspector.files`)},{id:`preview`,icon:v,label:D(`board:inspector.preview`)},...y?[{id:`plan`,icon:te,label:D(`board:inspector.plan`)}]:[],...Se?[{id:`side-chat`,icon:ie,label:D(`board:inspector.sideChat`)}]:[]],X=e=>{H&&S.getState().update(t,H.kind,{type:`view`,id:H.id,patch:e})},Oe=()=>{let n=z.find(e=>e.kind===`side-chat`);if(n&&S.getState().update(t,`side-chat`,{type:`close`,id:n.id}),F(`changes`),O){T();return}requestAnimationFrame(()=>document.getElementById(`${e}-changes-tab`)?.focus())},Z=t=>`${e}-component-${t}-tab`,ke=e=>{W(null),F(e)},Ae=t=>{if(![`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes(t.key))return;t.preventDefault();let n=[...Y.map(t=>({fixed:t.id,id:`${e}-${t.id}-tab`})),...Ce.map(e=>({component:e.id,id:Z(e.id)}))],r=n.findIndex(e=>G?e.component===G:e.fixed===B),i=n[t.key===`Home`?0:t.key===`End`?n.length-1:(r+(t.key===`ArrowRight`?1:-1)+n.length)%n.length];i.component?W(i.component):i.fixed&&ke(i.fixed),requestAnimationFrame(()=>document.getElementById(i.id)?.focus())},Q=(0,R.jsx)(`p`,{role:`status`,className:`p-4 text-sm text-content-muted`,children:D(`chat:focusSession.gitLoading`)}),$;if(G&&E)$=E.render(G,{sessionId:t,cwd:n});else if(B===`changes`)$=(0,R.jsx)(Ne,{sessionId:t,cwd:n,streaming:s,scope:ve,onScopeChange:be,vcsAvailable:he,view:H?.view,onViewChange:H?X:void 0,requestConfirm:w});else if(B===`terminal`)$=M?(0,R.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,R.jsx)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-stroke-soft px-3 py-2`,children:(0,R.jsx)(pe,{size:`sm`,"aria-label":D(`board:inspector.terminalScope`),value:I,onValueChange:_e,options:[{value:`terminal`,label:D(`board:inspector.terminal`)},{value:`processes`,label:D(`board:inspector.processes`)}]})}),(0,R.jsx)(L.Suspense,{fallback:Q,children:H?I===`processes`?(0,R.jsx)(f,{sessionId:t,view:H.view,onViewChange:X,onOpenTerminal:e=>{let n=S.getState(),r=n.sessions[t]?.pages.find(e=>e.kind===`terminal`);r?n.update(t,`terminal`,{type:`resource`,id:r.id,resourceId:e}):n.update(t,`terminal`,{type:`open`,kind:`terminal`,resourceId:e}),_e(`terminal`)}}):(0,R.jsx)(u,{sessionId:t,cwd:n,terminalId:H.resourceId||void 0,onCreated:e=>S.getState().update(t,`terminal`,{type:`resource`,id:H.id,resourceId:e})},H.id):Q})]}):(0,R.jsx)(N,{compact:!0,icon:oe,title:D(`board:inspector.terminalUnavailable`)});else if(B===`files`)$=H?(0,R.jsx)(g,{sources:ee,view:H.view,onViewChange:X}):Q;else if(B===`preview`){let e=s?re([...h]):null;$=H?(0,R.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,"data-inspector-preview":!0,children:[e&&(0,R.jsx)(`div`,{className:`max-h-[50%] shrink-0 overflow-y-auto border-b border-stroke-soft p-2`,children:(0,R.jsx)(ne,{target:e,fallbackImage:e.previewImage,streaming:s})}),(0,R.jsx)(_,{page:H,onChange:e=>S.getState().update(t,`browser`,{type:`browser`,id:H.id,...e})})]}):Q}else $=B===`plan`?(0,R.jsx)(we,{plan:l,goal:d,team:p,activity:h}):(0,R.jsx)(m,{parentId:t,active:!0});return(0,R.jsxs)(`section`,{id:e,"aria-label":D(`board:inspector.label`),"data-session-inspector":C,"data-inspector-tab":B,"data-inspector-component":G??void 0,className:`flex h-full min-h-0 w-full min-w-0 flex-col bg-panel text-content`,children:[(0,R.jsxs)(`header`,{className:k(`flex shrink-0 items-center gap-1 border-b border-stroke-soft pr-1.5 pl-2`,O?`h-[52px]`:C===`aside`?`h-[52px] [[data-custom-titlebar]_&]:h-11 [[data-custom-titlebar]_&]:pointer-coarse:h-[52px]`:`h-11 pointer-coarse:h-[52px]`),children:[(0,R.jsxs)(`div`,{ref:K,role:`tablist`,"aria-label":D(`board:inspector.tabs`),className:`flex min-w-0 flex-1 items-center gap-0.5 overflow-x-auto [scrollbar-width:none]`,onKeyDown:Ae,children:[Y.map(({id:t,icon:n,label:r})=>{let i=!G&&t===B;return(0,R.jsxs)(`button`,{id:`${e}-${t}-tab`,type:`button`,role:`tab`,"aria-selected":i,"aria-controls":`${e}-body`,tabIndex:i?0:-1,"data-inspector-tab-id":t,className:k(`flex flex-none items-center gap-1.5 rounded-sm px-2 text-[13px] whitespace-nowrap transition-colors duration-(--d-fast) focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus`,O?`h-11 min-w-11 justify-center px-2.5`:`h-8 pointer-coarse:h-11 pointer-coarse:min-w-11`,i?`bg-solid font-medium text-content shadow-edge ring-1 ring-stroke-strong ring-inset`:`text-content-secondary hover:bg-surface-hover hover:text-content`),onClick:()=>ke(t),children:[!O&&(0,R.jsx)(n,{className:`size-3.5`,"aria-hidden":`true`}),r]},t)}),!G&&B===`side-chat`&&(0,R.jsx)(A,{type:`button`,variant:`ghost`,size:`icon-sm`,className:k(O&&`size-11`),"aria-label":D(`board:inspector.closeTab`,{tab:D(`board:inspector.sideChat`)}),onClick:Oe,children:(0,R.jsx)(se,{"aria-hidden":`true`})}),!O&&(0,R.jsx)(`span`,{"aria-hidden":`true`,className:`mx-1 h-4 w-px flex-none bg-stroke`}),Ce.map(({id:t,label:n})=>{let r=t===G;return(0,R.jsx)(`button`,{id:Z(t),type:`button`,role:`tab`,"aria-selected":r,"aria-controls":`${e}-body`,tabIndex:r?0:-1,"data-inspector-component-tab":t,className:k(`flex h-8 max-w-40 flex-none items-center rounded-sm px-2 text-[13px] whitespace-nowrap transition-colors duration-(--d-fast) focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus pointer-coarse:h-11 pointer-coarse:min-w-11`,r?`bg-solid font-medium text-content shadow-edge ring-1 ring-stroke-strong ring-inset`:`text-content-secondary hover:bg-surface-hover hover:text-content`),onClick:()=>W(t),children:(0,R.jsx)(`span`,{className:`truncate`,children:n})},t)})]}),!O&&(0,R.jsxs)(fe,{open:Te,onOpenChange:Ee,children:[(0,R.jsx)(ue,{asChild:!0,children:(0,R.jsx)(A,{type:`button`,variant:`ghost`,size:`icon-sm`,className:`flex-none`,"aria-label":D(`board:inspector.add`),title:D(`board:inspector.add`),"data-inspector-component-add":!0,children:(0,R.jsx)(ae,{"aria-hidden":`true`})})}),(0,R.jsxs)(de,{align:`end`,className:`w-64 text-xs`,children:[E?.addMenu?E.addMenu({cwd:n,onAdded:e=>{W(e),Ee(!1)}}):(0,R.jsx)(`p`,{className:`text-content-secondary`,children:D(`board:inspector.addHint`)}),ce&&(0,R.jsx)(A,{type:`button`,variant:`secondary`,size:`sm`,className:`self-start`,onClick:ce,children:D(`board:inspector.openComponents`)})]})]}),(0,R.jsx)(A,{type:`button`,variant:`ghost`,size:`icon-sm`,className:k(`flex-none`,O&&`size-11`),"aria-label":D(`board:inspector.close`),title:D(`board:inspector.close`),"aria-controls":e,onClick:T,children:C===`aside`?(0,R.jsx)(xe,{"aria-hidden":`true`}):(0,R.jsx)(se,{"aria-hidden":`true`})})]}),(0,R.jsx)(`div`,{id:`${e}-body`,role:`tabpanel`,"aria-labelledby":G?Z(G):`${e}-${B}-tab`,className:`flex min-h-0 flex-1 flex-col overflow-hidden`,children:$})]})}export{Ie as SessionInspector};
@@ -1 +0,0 @@
1
- import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{f as t,l as n,u as r}from"./vendor-router-CSN_DGvx.js";import{i,r as a}from"./vendor-react-DwNgTV1j.js";import{f as o,r as s}from"./routes-Da0OHSy6.js";import{t as c}from"./use-i18n-B5p-Kzvz.js";import{a as l,o as u,s as d,u as f}from"./placements-CqwqXPTp.js";import{t as p}from"./client-store-6GNC8uyK.js";import{t as m}from"./usePhoneShell-Bvb7m-m4.js";import{t as h}from"./PhoneMenuButton-B0AwvqEo.js";import{t as g}from"./useSessionListQuery-D44XZfGr.js";import"./public-jQjEc6OO.js";import{i as _,t as v}from"./session-home-BktP6sGF.js";var y=e(i(),1),b=a(),x=`(max-width: 1279px), (max-height: 760px)`,S=`(min-width: 960px) and (min-height: 640px)`;function C(e){let[t,n]=(0,y.useState)(()=>window.matchMedia(e).matches);return(0,y.useEffect)(()=>{let t=window.matchMedia(e),r=()=>n(t.matches);return r(),t.addEventListener(`change`,r),()=>t.removeEventListener(`change`,r)},[e]),t}function w({context:e,ChatPage:i}){let a=r(),c=n(),{sessionId:l=``}=t(),u=m(),d=p(e=>e.client===`mobile-app`),f=C(`(min-width: 960px) and (min-height: 640px)`)&&d,S=C(x),w=!u||f,E=(0,y.useRef)(l);E.current=l;let D=(0,y.useRef)(c.state);D.current=c.state;let O=(0,y.useCallback)(e=>{if(!e||e===E.current)return;let t=E.current===`new`;a(o(e),{replace:t,state:t?D.current:void 0})},[a]),k=g(),A=!!(l&&l!==`new`&&k.data?.sessions.some(e=>e.id===l));(0,y.useEffect)(()=>{A&&_(l)},[A,l]);let j=T(e.notify,O),M=e.startNewTask,N=(0,y.useMemo)(()=>({compact:S,overlayOnly:d,onOpenComponents:()=>a(s.components),componentTabs:j,onArchived:e=>{v(e),a(`/`,{replace:!0})},onHome:()=>a(`/`),onNewTask:M}),[S,d,a,j,M]),P=(0,y.useMemo)(()=>({...N,phone:{onNewTask:M}}),[N,M]);return(0,b.jsx)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,"data-session-shell":w?`desktop`:`phone`,children:(0,b.jsx)(`div`,{className:`flex min-h-0 min-w-0 flex-1`,children:(0,b.jsx)(i,{notify:e.notify,navigate:e.navigate,browserNotify:e.browserNotify,registerPrimaryAction:e.registerPrimaryAction,pendingAsset:e.pendingAsset,onAssetConsumed:e.onAssetConsumed,requestText:e.requestText,requestConfirm:e.requestConfirm,routeSessionId:l,onRouteSessionChange:O,routeLeading:w?void 0:(0,b.jsx)(h,{}),pageChrome:w?N:P})})})}function T(e,t){let{language:n}=c(),{available:r,placed:i}=f(`session-panel`);return(0,y.useMemo)(()=>{if(r)return{tabs:e=>d(i,e,n),render:(n,{sessionId:r,cwd:a})=>{let o=i.find(e=>e.instance.instanceId===n);return o?(0,b.jsx)(y.Suspense,{fallback:null,children:(0,b.jsx)(u,{placed:o,sessionId:r,cwd:a,notify:e,onOpenSession:t})}):null},addMenu:({cwd:t,onAdded:n})=>(0,b.jsx)(y.Suspense,{fallback:null,children:(0,b.jsx)(l,{cwd:t,notify:e,onAdded:n})})}},[r,n,e,t,i])}export{x as SESSION_COMPACT_QUERY,S as SESSION_TABLET_QUERY,w as SessionShell};
@@ -1 +0,0 @@
1
- import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t,r as n}from"./vendor-react-DwNgTV1j.js";import{t as r}from"./use-i18n-B5p-Kzvz.js";import{t as i}from"./createLucideIcon-Cd-3GVxJ.js";import{t as a}from"./check-2vYc6QaP.js";import{t as o}from"./triangle-alert-CE1q54ci.js";import{n as s,t as c}from"./button-CCcCN8tE.js";import{a as l,i as u,l as d,o as f,s as p,t as m}from"./dialog-CUhFgsVd.js";import{t as h}from"./input-CPw-zkYh.js";import{n as g,t as _}from"./alert-firawb0H.js";var v=i(`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`}]]),y=e(t(),1);function b(e){let t=window.__TAURI__?.core?.invoke??window.__TAURI_INTERNALS__?.invoke;return t?t(e):Promise.reject(Error(`native bridge unavailable`))}async function x(){return window.__PISPER_MOBILE_APP__?(await b(`mobile_state`)).mode:null}async function S(){if(window.__PISPER_MOBILE_PLATFORM__!==`android`)throw Error(`workspace_import_unsupported`);let e=await b(`mobile_state`);if(e.mode!==`local`||!e.onDevice?.running)throw Error(`workspace_import_requires_local_runtime`);let t=await b(`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 C=n();function w({open:e,initialPath:t=``,description:n,onOpenChange:i,onSelect:b,onCloseAutoFocus:w}){let{t:T}=r(),[E,D]=(0,y.useState)(t),[O,k]=(0,y.useState)(!1),[A,j]=(0,y.useState)(!1),[M,N]=(0,y.useState)(!1),[P,F]=(0,y.useState)(``),I=(0,y.useRef)(0),L=(0,y.useRef)(!1),R=O||A;(0,y.useEffect)(()=>{let n=++I.current;return L.current=!1,e&&(D(t),k(!1),j(!1),N(!1),F(``),window.__PISPER_MOBILE_PLATFORM__===`android`&&x().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 S();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 b(E.trim()),t===I.current&&i(!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,C.jsx)(m,{open:e,onOpenChange:e=>!L.current&&i(e),children:(0,C.jsxs)(u,{showCloseButton:!R,className:`sm:max-w-lg`,onCloseAutoFocus:w,children:[(0,C.jsxs)(p,{children:[(0,C.jsx)(d,{children:T(`common:workspacePicker.setWorkingDirectory`)}),(0,C.jsx)(l,{children:n||T(`common:workspacePicker.selectDirectoryDescription`)})]}),(0,C.jsxs)(`form`,{className:`flex min-w-0 flex-col gap-4`,onSubmit:e=>void B(e),children:[(0,C.jsxs)(`label`,{className:`flex min-w-0 flex-col gap-1.5 text-sm font-medium text-content`,children:[T(`common:workspacePicker.workingDirectoryPath`),(0,C.jsx)(h,{autoFocus:!0,className:`font-mono text-xs font-normal max-[650px]:h-11`,value:E,disabled:R,placeholder:T(`common:workspacePicker.enterAbsolutePath`),onChange:e=>D(e.target.value)})]}),M&&(0,C.jsxs)(c,{type:`button`,variant:`secondary`,className:`max-[650px]:h-11`,disabled:R,onClick:()=>void z(),children:[A?(0,C.jsx)(s,{className:`text-current`}):(0,C.jsx)(v,{}),T(A?`common:workspacePicker.importingFolder`:`common:workspacePicker.importFolderCopy`)]}),P&&(0,C.jsxs)(_,{variant:`destructive`,children:[(0,C.jsx)(o,{}),(0,C.jsx)(g,{className:`min-w-0 break-words`,children:P})]}),(0,C.jsxs)(f,{children:[(0,C.jsx)(c,{type:`button`,variant:`secondary`,size:`dialogAction`,disabled:R,onClick:()=>i(!1),children:T(`common:ui.cancel`)}),(0,C.jsxs)(c,{type:`submit`,size:`dialogAction`,disabled:R||!E.trim(),children:[O?(0,C.jsx)(s,{className:`text-current`}):(0,C.jsx)(a,{}),T(O?`common:workspacePicker.switching`:`common:workspacePicker.useThisFolder`)]})]})]})]})})}export{w as WorkspacePicker};
@@ -1 +0,0 @@
1
- import"./rolldown-runtime-B0Z9INg1.js";import{i as e,r as t}from"./vendor-react-DwNgTV1j.js";import{t as n}from"./vendor-ui-DvrYggeS.js";import{a as r,i}from"./startup-queries-6Oztqpto.js";import{a,u as o}from"./api-BO7LAPSQ.js";import{t as s}from"./dist-41X0pdUs.js";import{t as c}from"./utils-C8uzG5AZ.js";import{u as l}from"./events-DrAPv0se.js";import{t as u}from"./chat-api-DkdyVQY9.js";import{_ as d,d as f,l as p,u as m,v as h,x as g,y as _}from"./useSessionListQuery-D44XZfGr.js";e();var v=t(),y=n(`inline-flex w-fit max-w-full shrink-0 items-center justify-center gap-1.5 rounded-sm border border-stroke-strong bg-solid font-medium whitespace-nowrap text-content-secondary shadow-edge transition-colors duration-(--d-fast) select-none hover:bg-surface-hover hover:text-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 aria-expanded:bg-surface-hover aria-expanded:text-foreground aria-pressed:border-control aria-pressed:bg-surface-active aria-pressed:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5 [&_svg:not([class*='text-'])]:text-content-muted`,{variants:{size:{default:`h-7 px-2.5 text-sm pointer-coarse:min-h-11`,sm:`h-6 gap-1 px-2 text-xs`}},defaultVariants:{size:`default`}});function b({className:e,size:t=`default`,asChild:n=!1,type:r,...i}){let a=n?s:`button`;return(0,v.jsx)(a,{"data-slot":`chip`,"data-size":t,className:c(y({size:t}),e),...n?{}:{type:r??`button`},...i})}var x=class extends Error{stage;cause;sessionId;code=`board_launch_failed`;constructor(e,t,n=``){super(t instanceof Error?t.message:String(t||`launch failed`)),this.stage=e,this.cause=t,this.sessionId=n}},S=1e5,C=5e3;function w(e){if(!e||typeof e!=`object`)return!1;let t=e;return Array.isArray(t.messages)&&t.messages.length===0&&t.streaming===!1&&t.configurationBusy!==!0&&(t.queuedInputs===void 0||Array.isArray(t.queuedInputs)&&t.queuedInputs.length===0)}function T(e){return e instanceof o&&e.kind===`http`}function E(e){return e instanceof o?`${e.kind||`error`}:${e.status??`-`}`:`error`}async function D(e){let t=`/api/sessions/${encodeURIComponent(e)}`;try{if(!w(await u.getLiveSession(e,{timeout:C})))return!1;await a(t,{method:`DELETE`,timeout:C})}catch(e){return console.warn(`[board] 派发失败后未能清理空会话(${E(e)})`),!1}return r.setQueryData(p,t=>t&&{...t,sessions:t.sessions.filter(t=>t.id!==e)}),l({deletedIds:[e]}),!0}function O(e){r.setQueryData(p,t=>t&&!t.sessions.some(t=>t.id===e.id)?{...t,sessions:[e,...t.sessions]}:t),i(`sessions`)}function k(e){let t=e.indexOf(`/`);return t>0?{provider:e.slice(0,t),modelId:e.slice(t+1)}:null}async function A(e,t,n){let r=k(n.model);r&&n.model!==t.model&&await u.updateModel(e,r.provider,r.modelId),n.thinkingLevel&&n.thinkingLevel!==t.thinkingLevel&&await u.setThinkingLevel(e,n.thinkingLevel),n.executionMode&&n.executionMode!==t.executionMode&&await u.updateExecutionMode(e,n.executionMode),n.runMode!==`plan`&&n.runMode!==t.runMode&&await u.updateRunMode(e,n.runMode)}async function j(e){let t=e.prompt.trim().slice(0,S);if(!t)throw new x(`create`,Error(`empty prompt`));let n;try{n=await u.createSession(``,e.cwd,{projectless:e.projectless===!0})}catch(e){throw new x(`create`,e)}let r=n.id;try{await A(r,n,e)}catch(e){throw await D(r),new x(`configure`,e,r)}if(e.startAfter)return M(r,n,t,e);O({...n,firstMessage:t,messageCount:1});let i=f(r,{streaming:!0});try{await g(r,`launch`,(n,i)=>u.openStream({sessionId:r,message:t,attachments:[],goalMode:e.runMode===`goal`,teamMode:e.runMode===`team`},n,{signal:i}))}catch(e){throw d(r,i),T(e)&&await D(r),_().catch(()=>void 0),new x(`send`,e,r)}return h(r,e=>!!e).catch(()=>void 0).finally(()=>d(r,i)),r}async function M(e,t,n,r){let i;try{i=await u.enqueueSessionStart(e,{startAfter:r.startAfter??``,message:n,runMode:r.runMode})}catch(t){throw T(t)&&await D(e),_().catch(()=>void 0),new x(`send`,t,e)}let a=i&&typeof i.queue==`object`?i.queue:null;return O({...t,firstMessage:n,...a?{queue:a}:{messageCount:1,streaming:!0}}),h(e,e=>!!e).catch(()=>void 0),e}var N=/^\/[a-z][a-z0-9:-]{0,63}$/;async function P(e){let{sessionId:t}=e,n=e.prompt.trim().slice(0,S);if(!t||!n)throw new x(`send`,Error(`empty prompt`),t);let a=e.commandWhenEmpty?.trim()??``;if(a&&!N.test(a))throw new x(`send`,Error(`invalid command`),t);let o;try{o=await u.getLiveSession(t)}catch(e){throw new x(`send`,e,t)}let s=o&&typeof o==`object`?o:{},c=Array.isArray(s.messages)&&s.messages.length===0&&a?`${a} ${n}`:n,l=async()=>{try{await u.queueInput(t,c,[],`followUp`)}catch(e){throw new x(`send`,e,t)}return{sessionId:t,queued:!0}};if(s.streaming===!0)return l();e.created?.id===t?O({...e.created,firstMessage:n,messageCount:1}):r.getQueryData(p)?.sessions.some(e=>e.id===t)||i(`sessions`);let v=f(t,{streaming:!0});try{await g(t,`launch`,(e,n)=>u.openStream({sessionId:t,message:c,attachments:[],goalMode:!1,teamMode:!1},e,{signal:n}))}catch(e){if(d(t,v),e instanceof m)return l();throw _().catch(()=>void 0),new x(`send`,e,t)}return h(t,e=>!!e).catch(()=>void 0).finally(()=>d(t,v)),{sessionId:t,queued:!1}}export{b as i,j as n,P as r,x as t};
@@ -1 +0,0 @@
1
- var e={zh:{"page.title":`全部代理`,"page.summary":`{agents} 个代理 · {projects} 个项目 · {running} 个在运行`,"page.loading":`正在读取代理…`,"page.error":`暂时无法读取会话`,"page.errorHint":`检查本机运行时是否在线,然后重试。`,"page.retry":`重试`,"lane.attention":`需要你`,"lane.running":`运行中`,"lane.queued":`排队`,"lane.done":`已完成`,"lane.orderAttention":`按等待时长`,"lane.orderRunning":`按开始时间`,"lane.orderQueued":`按队列顺序`,"lane.orderDone":`最新的在前`,"lane.history":`全部历史会话`,"status.approval":`等待批准`,"status.failed":`失败`,"status.failedHandled":`失败 · 已查看`,"status.running":`运行中`,"status.queued":`排队中`,"status.done":`已完成`,"status.stopped":`已停止`,"filter.projects":`项目`,"filter.projectsTitle":`项目:{projects}`,"filter.listSeparator":`、`,"filter.statuses":`状态`,"filter.statusTitle":`状态:{statuses}`,"filter.noProject":`无项目`,"filter.emptyTitle":`筛选后没有卡片`,"filter.emptyHint":`换一个项目或状态,或者清除筛选。`,"filter.clear":`清除筛选`,"group.label":`分组方式`,"group.lane":`按状态`,"group.project":`按项目`,"card.label":`{title},{status}`,"card.more":`“{title}”的更多操作`,"card.pinned":`已置顶`,"card.standard":`常规操作`,"card.critical":`高风险`,"card.criticalWithReason":`高风险 · {reason}`,"card.approvalLoading":`正在读取审批详情…`,"card.approvalUnavailable":`暂时读不到审批详情,请在会话里查看。`,"card.moreApprovals":`还有 {count} 条审批等你处理`,"card.moreApprovalsCritical":`还有 {count} 条审批等你处理,其中有高风险`,"card.deny":`拒绝`,"card.approve":`允许`,"card.approveCritical":`允许…`,"card.retry":`重试`,"card.archive":`归档`,"card.files":`{count} 个文件`,"card.expand":`展开完整命令`,"card.expandArgs":`展开完整参数`,"card.collapse":`收起`,"card.subAgent":`子代理`,"card.subAgentProgress":`子代理 {running} 个运行中,共 {total} 个`,"activity.starting":`启动中`,"activity.thinking":`思考中`,"activity.responding":`回复中`,"activity.working":`处理中`,"activity.compacting":`压缩上下文中`,"menu.open":`打开会话`,"menu.pin":`置顶`,"menu.unpin":`取消置顶`,"menu.markHandled":`标记已处理`,"menu.copyLink":`复制会话链接`,"menu.archive":`归档`,"action.failed":`操作没有完成,请稍后重试。`,"action.archived":`已归档:{title}`,"action.copied":`已复制会话链接`,"action.copyFailed":`无法复制链接`,"confirm.title":`确认高风险操作`,"confirm.titleStandard":`确认批准`,"confirm.description":`这条审批被命令守卫标记为高风险,批准前请核对完整参数。`,"confirm.descriptionCritical":`这是高风险操作(例如安装全局插件或提交表单),批准前请核对完整参数。`,"confirm.descriptionStandard":`批准前请核对完整参数。`,"confirm.descriptionLoading":`正在读取审批详情…`,"confirm.session":`会话`,"confirm.tool":`工具`,"confirm.cwd":`工作目录`,"confirm.fullArgs":`完整参数`,"confirm.loading":`正在读取审批详情,读取完成前不能批准。`,"confirm.hint":`按住确认按钮 0.6 秒,或按`,"confirm.hintTouch":`按住确认按钮 0.6 秒`,"confirm.hold":`按住确认`,"confirm.approving":`正在批准…`,"confirm.cancel":`取消`,"triage.progress":`逐个处理 {index}/{total}`,"triage.approve":`允许`,"triage.deny":`拒绝`,"triage.retry":`重试`,"triage.open":`打开`,"triage.exit":`退出`,"triage.finished":`全部处理完`,"triage.nothing":`没有需要你处理的事项`,"announce.moved":`{title} 进入 {lane}`,"launch.title":`新任务`,"launch.inputLabel":`任务描述`,"launch.placeholder":`描述任务…(Tab 切换项目)`,"launch.placeholderTouch":`描述任务…`,"launch.projects":`最近的项目`,"launch.projectLabel":`项目:{project}`,"launch.defaultProject":`默认目录`,"launch.noProject":`不选项目`,"launch.chooseFolder":`选择文件夹…`,"launch.newFolder":`新建文件夹…`,"launch.dispatch":`派发`,"launch.sending":`派发中 {count}`,"launch.noModel":`还没有可用的模型`,"launch.configureModels":`配置模型`,"launch.failed":`派发失败,草稿已保留。`,"launch.failedWithReason":`派发失败:{reason}(草稿已保留)`,"launch.dispatched":`已派发,可在全部代理查看进度`,"launch.fullAccessOnce":`仅本次派发,不会被记住`,"launch.startNowChip":`立即开始`,"launch.startAfterChip":`排在 {title} 之后`,"launch.startAfterShort":`等「{title}」`,"launch.startAfterNote":`排在「{title}」之后:它这一轮结束时自动开始。`,"launch.startAfterGone":`已结束的会话`,"launch.startAfterLabel":`什么时候开始`,"launch.startAfterRunning":`运行中`,"launch.startAfterQueued":`排队中`,"launch.startAfterHint":`等它这一轮结束(完成、失败或停止都算)再开始;排队后也可以在全部代理里“立即开始”。`,"dispatch.title":`新任务`,"dispatch.description":`派发后留在当前页面,新代理会出现在侧栏「运行中」。`,"dispatch.descriptionPhone":`派发后留在当前页面,新代理会出现在抽屉的「运行中」。`,"dispatch.hint":`↵ 派发 · ⌘/Ctrl+↵ 派发并打开 · ⇧↵ 换行`,"dispatch.reopen":`重新打开`,"project.actionsFor":`{project} 的操作`,"project.new":`新建项目…`,"folder.title":`新建文件夹`,"folder.description":`在所选位置新建一个空文件夹,并把它作为这次任务的项目。`,"folder.parent":`位置`,"folder.parentPlaceholder":`绝对路径;留空则使用默认工作目录`,"folder.browse":`浏览…`,"folder.browseTitle":`选择新文件夹的位置`,"folder.browseUnavailable":`这台设备无法打开系统文件管理器,请直接填写位置的路径。`,"folder.name":`名称`,"folder.namePlaceholder":`例如 my-project`,"folder.preview":`将新建:{path}`,"folder.create":`新建`,"folder.creating":`正在新建…`,"folder.error.nameRequired":`请填写文件夹名称。`,"folder.error.nameInvalid":`名称不能包含 / \\ : * ? " < > | 等字符,也不能以点或空格结尾。`,"folder.error.parentMissing":`位置不存在或不是文件夹。`,"folder.error.existsAsFile":`这个位置已经有一个同名的文件。`,"folder.error.permission":`没有权限在这个位置新建文件夹。`,"folder.error.failed":`新建文件夹失败。`,"folder.error.failedWithReason":`新建文件夹失败:{reason}`,"project.manage":`管理项目…`,"project.newTaskHere":`在此项目新建任务`,"project.rename":`重命名…`,"project.resetName":`恢复目录名`,"project.delete":`删除项目…`,"project.chosen":`已选择项目「{project}」,描述第一个任务即可派发`,"project.pickerDescription":`选择项目所在的文件夹,它会成为启动台的派发目标。`,"project.renameDescription":`自定义全部代理与派发对话框里显示的项目名称,工作目录保持不变。`,"project.manageTitle":`管理项目`,"project.manageDescription":`调整项目的显示顺序与名称。还没有会话的项目可以直接移除,不影响目录与文件;有会话的项目删除时会连同其中的全部会话一起删除。`,"project.sessions":`{count} 个会话`,"project.folderName":`目录名:{name}`,"project.moveUp":`上移 {project}`,"project.moveDown":`下移 {project}`,"project.renameNamed":`重命名 {project}`,"project.resetNamed":`{project} 恢复目录名`,"project.deleteWithChatsNamed":`连同会话一起删除 {project}`,"project.removeNamed":`移除项目 {project}`,"project.listLabel":`项目列表`,"project.empty":`还没有项目`,"project.emptyHint":`新建项目后,在启动台描述第一个任务即可派发。`,"project.loading":`正在读取项目…`,"project.error":`读取项目失败`,"project.deleting":`正在删除…`,"project.done":`完成`,"phone.openSession":`打开会话`,"phone.running":`运行中 {elapsed}`,"phone.changes":`+{count} 改动`,"phone.changesLabel":`查看本会话的 {count} 个改动`,"phone.openInspector":`改动、终端、文件与预览`,"phone.inspectorDescription":`本会话的改动、终端、资料来源与网页预览`,"phone.earlierTurns":`展开更早的对话:{summary}`,"phone.previousTurn":`上一轮`,"session.moveWorkspace":`移动工作区…`,"session.goalMode":`目标模式`,"session.workflowRuns":`工作流运行记录`,"session.workflowRunsEmpty":`这个会话还没有工作流运行记录`,"session.plan":`计划 {done}/{total}`,"session.planLabel":`计划进度:已完成 {done} 项,共 {total} 项`,"session.titleMenu":`{title}:会话操作`,"session.tree":`会话树`,"session.treeBranches":`会话树:{count} 个分支`,"session.changedFiles":`{count} 个文件`,"session.changes":`{count} 个文件 +{added} −{removed}`,"session.contextUsage":`上下文已用 {percent}%`,"session.withShortcut":`{label}({shortcut})`,"session.planOpen":`{plan}:在检查器里查看`,"inspector.label":`检查器`,"inspector.tabs":`检查器标签`,"inspector.changes":`改动`,"inspector.changesCount":`改动 {count}`,"inspector.changesScope":`改动范围`,"inspector.scopeSession":`本会话`,"inspector.scopeWorkspace":`工作区`,"inspector.terminal":`终端`,"inspector.terminalScope":`终端视图`,"inspector.processes":`进程`,"inspector.terminalUnavailable":`这台设备或当前运行时不提供终端`,"inspector.files":`文件`,"inspector.preview":`预览`,"inspector.plan":`计划`,"inspector.sideChat":`侧聊`,"inspector.closeTab":`关闭“{tab}”`,"inspector.add":`添加组件标签`,"inspector.addHint":`组件放到“会话面板”位置后,会作为标签出现在这里。`,"inspector.openComponents":`打开组件页`,"inspector.close":`收起检查器`,"transcript.operations":`{count} 个操作`,"transcript.running":`{count} 运行中`,"transcript.failed":`{count} 失败`,"transcript.turn":`第 {count} 轮`,"composer.placeholder":`回复代理,或用 / 调用命令`,"composer.tokens":`{tokens} tok`,"composer.queuedFollowUp":`排队`,"composer.queuedSteer":`插话`,"composer.steerNow":`插话发送`,"composer.steerHint":`代理在下一步就读到,不必等这一轮结束`,"composer.longPressSteer":`运行中长按可插话`,"changes.sessionSummary":`本会话改动 {count} 个文件`,"changes.workspaceSummary":`工作区改动 {count} 个文件`,"changes.revertAll":`全部还原`,"changes.more":`更多改动操作`,"changes.pending":`{count} 个待批准`,"changes.revertFile":`还原此文件`,"changes.files":`改动的文件`,"changes.diffView":`差异视图`,"changes.unified":`统一`,"changes.split":`并排`,"changes.splitTooNarrow":`检查器不足 600 像素宽,放不下并排视图;把检查器拖宽后可用。`,"changes.approvedAt":`已批准写入 · {time}`,"changes.pendingAt":`待批准 · {time}`,"changes.revertedAt":`已还原 · {time}`,"changes.statusModified":`已修改`,"changes.statusCreated":`新建`,"changes.statusDeleted":`已删除`,"changes.statusRenamed":`已重命名`,"inspector.goal":`目标`,"inspector.team":`团队`,"inspector.subAgents":`子代理`,"shortcuts.agentPanel":`聚焦侧栏会话列表`,"shortcuts.toggleInspector":`显示 / 隐藏检查器`,"shortcuts.previousAgent":`按侧栏顺序切换到上一个会话`,"shortcuts.nextAgent":`按侧栏顺序切换到下一个会话`,"shortcuts.steerMessage":`运行中插话`,"shortcuts.shortcutHelp":`快捷键速查`,"shortcuts.sendMessage":`发送(运行中排队)`,"shortcuts.focusSearch":`聚焦筛选 / 搜索`,"shortcuts.groupGlobal":`全局`,"shortcuts.groupBoard":`全部代理`,"shortcuts.groupSession":`会话`,"shortcuts.globalHint":`带修饰键的组合在输入框内同样生效。`,"shortcuts.boardHint":`只在全部代理页生效;单字母键在焦点不在输入框时生效,只能改成不带修饰键的字母。`,"shortcuts.sessionHint":`只在会话页生效;Esc 永远不用于返回。`,"shortcuts.fixed":`固定`,"shortcuts.boardMove":`在代理之间移动(焦点在行上)`,"shortcuts.boardOpen":`打开会话`,"shortcuts.boardExitTriage":`退出逐个处理`,"shortcuts.newline":`换行`,"shortcuts.stopRun":`停止运行(有打开的浮层时先关闭浮层)`,"shortcuts.helpDescription":`当前设备上的绑定。改绑后这里立即更新。`,"shortcuts.helpCustomize":`在设置中改绑`,"home.draftTitle":`新任务`,"home.draftSubtitle":`发出第一条消息时才会创建会话`,"home.draftHeading":`从一个新任务开始`,"home.draftHint":`选好项目,描述要做的事。发出第一条消息后,这里就是它的会话;其他代理都在“全部代理”里。`,"home.composerLabel":`新任务输入框`,"home.placeholder":`描述要做的事…({send} 发送,Tab 切换项目)`,"home.placeholderUnbound":`描述要做的事…(Tab 切换项目)`,"home.placeholderTouch":`描述要做的事…`,"home.send":`发送`,"home.sending":`正在创建会话…`,"home.loading":`正在打开上次的会话…`,"home.loadFailed":`无法读取会话列表`,"home.loadFailedHint":`暂时无法确认上次停留的会话。可以重试,或直接开始一个新任务。`,"home.startDraft":`开始新任务`,"home.goHome":`回到主页`,"shortcuts.openSession":`打开会话主页`,"shortcuts.sessionTree":`会话树(分支与标记)`,"shortcuts.sideChat":`侧聊`,"shortcuts.cycleFocusRegion":`在侧栏、顶栏、对话、输入框之间切换焦点`,"shortcuts.groupSidebar":`侧栏`,"shortcuts.sidebarHint":`焦点在侧栏会话行上时生效;A / D 跟随“全部代理”的允许 / 拒绝键,只处理普通批准。`,"shortcuts.sidebarMove":`在会话行之间移动`,"shortcuts.sidebarOpen":`打开会话`,"sidebar.reason.failed":`运行失败`,"sidebar.reason.approval":`等你批准`,"sidebar.reason.criticalApproval":`高风险批准`,"sidebar.reason.question":`等你回答`,"sidebar.reason.questions":`等你回答 · {count} 个问题`,"sidebar.reason.questionCount":`{count} 个问题`,"sidebar.group.attention":`需要你`,"sidebar.group.running":`运行中`,"sidebar.group.queued":`排队`,"sidebar.group.pinned":`置顶`,"sidebar.group.done":`今天完成`,"sidebar.loading":`正在加载会话`,"sidebar.error":`会话列表加载失败`,"sidebar.retry":`重试`,"sidebar.empty":`还没有代理在运行。用“新任务”派出第一个。`,"sidebar.emptyAttention":`没有等你处理的事`,"sidebar.emptyRunning":`没有在运行的代理`,"sidebar.moreRunning":`还有 {count} 个 →`,"sidebar.allDone":`全部 →`,"sidebar.history":`历史会话`,"sidebar.announce":`{title} 需要你:{reason}`,"sidebar.announceSeparator":`;`,"sidebar.attentionRow":`{title},{reason},已等 {wait}`,"sidebar.attentionRowNoWait":`{title},{reason}`,"sidebar.unread":`未读`,"sidebar.deny":`拒绝`,"sidebar.approve":`允许`,"sidebar.open":`打开`,"sidebar.denyNamed":`拒绝 {title} 的请求`,"sidebar.approveNamed":`允许 {title} 的请求`,"sidebar.openNamed":`打开 {title} 处理`,"sidebar.rowMenu":`{title} 的更多操作`,"sidebar.renameTitle":`重命名会话`,"sidebar.renameLabel":`会话标题`,"sidebar.renameSave":`保存`,"sidebar.renamed":`会话标题已更新`,"sidebar.railAttention":`{count} 个代理需要你,打开全部代理`,"sidebar.railRunning":`{count} 个代理运行中,打开全部代理`,"sidebar.filter.all":`全部`,"sidebar.filter.projectActions":`项目操作`,"sidebar.filter.addProject":`添加项目…`,"sidebar.filter.noProjects":`还没有项目`,"sidebar.fleet.attention":`{count} 个需要你`,"sidebar.fleet.running":`{count} 个运行中`,"sidebar.fleet.label":`{attention} 个代理需要你,{running} 个运行中,打开全部代理`,"menu.rename":`重命名`,"composer.placeholderRunning":`运行中:{queue} 排队,{steer} 插话`,"composer.placeholderRunningQueueOnly":`运行中:{queue} 排队`,"composer.placeholderRunningTouch":`运行中:点发送排队,长按发送插话`,"composer.editQueued":`编辑排队消息`,"composer.cancelQueued":`取消排队`,"composer.plusMenu":`添加附件、技能或语音输入`,"composer.modeChip":`审批与执行方式`,"composer.goalShort":`Goal`,"composer.teamShort":`Team`,"composer.cycleRunMode":`切换`,"composer.contextUsage":`上下文`,"composer.sessionTokens":`本会话`,"composer.cacheHitLabel":`缓存命中`,"transcript.allDone":`全部完成`,"transcript.copyMarkdown":`复制为 Markdown`,"card.holdToApprove":`按住允许`,"card.holdHint":`高风险操作需按住 0.6 秒`,"card.moreWaiting":`还有 {count} 项等你处理`,"shortcuts.cycleRunMode":`切换执行方式(Plan / Goal / Team)`,"project.moveUpShort":`上移`,"project.moveDownShort":`下移`,"triage.answer":`回答`,"overview.doneUnread":`已完成 · 未读`,"overview.waited":`已等 {wait}`,"overview.ran":`已运行 {time}`,"overview.finishedAt":`{time} 完成`,"overview.openToHandle":`打开处理`,"overview.log":`日志`,"overview.retryNamed":`重试 {title}`,"overview.subAgents":`子代理 {running}/{total}`,"overview.startNow":`立即开始`,"overview.queuedAfter":`排在「{title}」之后`,"overview.queuedAfterUnknown":`等前一个任务结束`,"overview.queuePosition":`第 {n} 位`,"overview.empty":`还没有代理在运行`,"overview.newTask":`新任务`,"overview.widgets":`已放置的组件`,"overview.subAgentSlots":`子代理 {running}/{max}`,"overview.todayTokens":`今日 {tokens} tok`,"overview.memory":`内存 {memory}`,"overview.systemLoading":`正在读取系统信息…`,"overview.systemUnavailable":`暂时读不到系统信息`,"overview.projectAttention":`{count} 个需要你`,"overview.projectRunning":`{count} 个运行中`,"overview.projectQueued":`{count} 个排队`,"overview.projectDone":`{count} 个今天完成`,"question.title":`代理在问你`,"question.label":`代理的提问`,"question.waiting":`还有 {count} 个提问等你回答`,"question.moreAfter":`之后还有 {count} 个`,"question.failed":`没能提交回答,请再试一次(可能已经在别处回答过)`,"question.other":`其他…`,"question.otherLabel":`其他回答:{question}`,"question.otherPlaceholder":`写下你的回答`,"question.skip":`跳过`,"question.submit":`提交`,"question.answerNamed":`回答“{title}”:{option}`,"question.open":`打开回答`},en:{"page.title":`All agents`,"page.summary":`{agents} agents · {projects} projects · {running} running`,"page.loading":`Loading agents…`,"page.error":`Sessions could not be loaded`,"page.errorHint":`Check that the local runtime is online, then retry.`,"page.retry":`Retry`,"lane.attention":`Needs you`,"lane.running":`Running`,"lane.queued":`Queued`,"lane.done":`Done`,"lane.orderAttention":`Longest wait first`,"lane.orderRunning":`By start time`,"lane.orderQueued":`Queue order`,"lane.orderDone":`Newest first`,"lane.history":`All sessions`,"status.approval":`Awaiting approval`,"status.failed":`Failed`,"status.failedHandled":`Failed · seen`,"status.running":`Running`,"status.queued":`Queued`,"status.done":`Done`,"status.stopped":`Stopped`,"filter.projects":`Projects`,"filter.projectsTitle":`Project: {projects}`,"filter.listSeparator":`, `,"filter.statuses":`Status`,"filter.statusTitle":`Status: {statuses}`,"filter.noProject":`No project`,"filter.emptyTitle":`No cards match these filters`,"filter.emptyHint":`Pick another project or status, or clear the filters.`,"filter.clear":`Clear filters`,"group.label":`Group by`,"group.lane":`By status`,"group.project":`By project`,"card.label":`{title}, {status}`,"card.more":`More actions for “{title}”`,"card.pinned":`Pinned`,"card.standard":`Routine`,"card.critical":`High risk`,"card.criticalWithReason":`High risk · {reason}`,"card.approvalLoading":`Loading approval details…`,"card.approvalUnavailable":`Approval details are unavailable; check them in the session.`,"card.moreApprovals":`{count} more approvals waiting`,"card.moreApprovalsCritical":`{count} more approvals waiting, including high-risk ones`,"card.deny":`Deny`,"card.approve":`Allow`,"card.approveCritical":`Allow…`,"card.retry":`Retry`,"card.archive":`Archive`,"card.files":`{count} files`,"card.expand":`Show full command`,"card.expandArgs":`Show all arguments`,"card.collapse":`Collapse`,"card.subAgent":`Sub-agent`,"card.subAgentProgress":`Sub-agents: {running} of {total} running`,"activity.starting":`Starting`,"activity.thinking":`Thinking`,"activity.responding":`Responding`,"activity.working":`Working`,"activity.compacting":`Compacting context`,"menu.open":`Open session`,"menu.pin":`Pin`,"menu.unpin":`Unpin`,"menu.markHandled":`Mark as handled`,"menu.copyLink":`Copy session link`,"menu.archive":`Archive`,"action.failed":`That didn't go through. Try again shortly.`,"action.archived":`Archived: {title}`,"action.copied":`Session link copied`,"action.copyFailed":`Couldn't copy the link`,"confirm.title":`Confirm high-risk action`,"confirm.titleStandard":`Confirm approval`,"confirm.description":`The command guard flagged this approval as high risk. Check the full arguments before allowing it.`,"confirm.descriptionCritical":`This is a high-risk action, such as installing a global plugin or submitting a form. Check the full arguments before allowing it.`,"confirm.descriptionStandard":`Check the full arguments before allowing it.`,"confirm.descriptionLoading":`Loading approval details…`,"confirm.session":`Session`,"confirm.tool":`Tool`,"confirm.cwd":`Working folder`,"confirm.fullArgs":`Full arguments`,"confirm.loading":`Loading approval details. You can allow it once they arrive.`,"confirm.hint":`Hold the confirm button for 0.6 s, or press`,"confirm.hintTouch":`Hold the confirm button for 0.6 s`,"confirm.hold":`Hold to confirm`,"confirm.approving":`Allowing…`,"confirm.cancel":`Cancel`,"triage.progress":`Triage {index}/{total}`,"triage.approve":`Allow`,"triage.deny":`Deny`,"triage.retry":`Retry`,"triage.open":`Open`,"triage.exit":`Exit`,"triage.finished":`All handled`,"triage.nothing":`Nothing needs you`,"announce.moved":`{title} moved to {lane}`,"launch.title":`New task`,"launch.inputLabel":`Task description`,"launch.placeholder":`Describe the task… (Tab switches project)`,"launch.placeholderTouch":`Describe the task…`,"launch.projects":`Recent projects`,"launch.projectLabel":`Project: {project}`,"launch.defaultProject":`Default folder`,"launch.noProject":`No project`,"launch.chooseFolder":`Choose folder…`,"launch.newFolder":`New folder…`,"launch.dispatch":`Dispatch`,"launch.sending":`Dispatching {count}`,"launch.noModel":`No model is available yet`,"launch.configureModels":`Set up models`,"launch.failed":`Dispatch failed. Your draft was kept.`,"launch.failedWithReason":`Dispatch failed: {reason} (draft kept)`,"launch.dispatched":`Dispatched. Follow its progress in All agents.`,"launch.fullAccessOnce":`This dispatch only, not remembered`,"launch.startNowChip":`Start now`,"launch.startAfterChip":`After {title}`,"launch.startAfterShort":`After “{title}”`,"launch.startAfterNote":`Queued after “{title}”: starts when that run ends.`,"launch.startAfterGone":`a finished session`,"launch.startAfterLabel":`When to start`,"launch.startAfterRunning":`Running`,"launch.startAfterQueued":`Queued`,"launch.startAfterHint":`Starts when that run ends, whether it finishes, fails or is stopped. You can still start it from All agents.`,"dispatch.title":`New task`,"dispatch.description":`You stay on this page; the new agent shows up under Running in the sidebar.`,"dispatch.descriptionPhone":`You stay on this page; the new agent shows up under Running in the drawer.`,"dispatch.hint":`↵ dispatch · ⌘/Ctrl+↵ dispatch and open · ⇧↵ new line`,"dispatch.reopen":`Reopen`,"project.actionsFor":`Actions for {project}`,"project.new":`New project…`,"folder.title":`New folder`,"folder.description":`Create an empty folder at the chosen location and use it as this task's project.`,"folder.parent":`Location`,"folder.parentPlaceholder":`Absolute path; leave empty for the default working folder`,"folder.browse":`Browse…`,"folder.browseTitle":`Choose where to create the new folder`,"folder.browseUnavailable":`This device can't open the system file manager. Type the location path instead.`,"folder.name":`Name`,"folder.namePlaceholder":`e.g. my-project`,"folder.preview":`Will create: {path}`,"folder.create":`Create`,"folder.creating":`Creating…`,"folder.error.nameRequired":`Enter a folder name.`,"folder.error.nameInvalid":`The name can't contain / \\ : * ? " < > | and can't end with a dot or space.`,"folder.error.parentMissing":`The location doesn't exist or isn't a folder.`,"folder.error.existsAsFile":`A file with this name already exists at the location.`,"folder.error.permission":`You don't have permission to create a folder at this location.`,"folder.error.failed":`Couldn't create the folder.`,"folder.error.failedWithReason":`Couldn't create the folder: {reason}`,"project.manage":`Manage projects…`,"project.newTaskHere":`New task in this project`,"project.rename":`Rename…`,"project.resetName":`Use folder name`,"project.delete":`Delete project…`,"project.chosen":`Project "{project}" selected. Describe the first task to dispatch it.`,"project.pickerDescription":`Choose the project folder. It becomes the launch console target.`,"project.renameDescription":`Customize the project name shown in All agents and the dispatch dialog. The working directory stays the same.`,"project.manageTitle":`Manage projects`,"project.manageDescription":`Change the order and names of your projects. Projects without chats can be removed without touching their folders or files. Deleting a project with chats also deletes all of its chats.`,"project.sessions":`{count} chats`,"project.folderName":`Folder: {name}`,"project.moveUp":`Move {project} up`,"project.moveDown":`Move {project} down`,"project.renameNamed":`Rename {project}`,"project.resetNamed":`Use folder name for {project}`,"project.deleteWithChatsNamed":`Delete {project} and its chats`,"project.removeNamed":`Remove project {project}`,"project.listLabel":`Projects`,"project.empty":`No projects yet`,"project.emptyHint":`Create a project, then describe its first task in the launch console.`,"project.loading":`Loading projects…`,"project.error":`Couldn't load projects`,"project.deleting":`Deleting…`,"project.done":`Done`,"phone.openSession":`Open session`,"phone.running":`Running {elapsed}`,"phone.changes":`+{count} changes`,"phone.changesLabel":`View the {count} files changed in this session`,"phone.openInspector":`Changes, terminal, files and preview`,"phone.inspectorDescription":`Changes, terminal, sources and web preview for this session`,"phone.earlierTurns":`Show earlier conversation: {summary}`,"phone.previousTurn":`Previous turn`,"session.moveWorkspace":`Move workspace…`,"session.goalMode":`Goal mode`,"session.workflowRuns":`Workflow runs`,"session.workflowRunsEmpty":`This session has no workflow runs yet`,"session.plan":`Plan {done}/{total}`,"session.planLabel":`Plan progress: {done} of {total} done`,"session.titleMenu":`{title}: session actions`,"session.tree":`Session tree`,"session.treeBranches":`Session tree: {count} branches`,"session.treeBranches_one":`Session tree: {count} branch`,"session.changedFiles":`{count} files`,"session.changedFiles_one":`{count} file`,"session.changes":`{count} files +{added} −{removed}`,"session.changes_one":`{count} file +{added} −{removed}`,"session.contextUsage":`Context used {percent}%`,"session.withShortcut":`{label} ({shortcut})`,"session.planOpen":`{plan}: view in the inspector`,"inspector.label":`Inspector`,"inspector.tabs":`Inspector tabs`,"inspector.changes":`Changes`,"inspector.changesCount":`Changes {count}`,"inspector.changesScope":`Change scope`,"inspector.scopeSession":`This session`,"inspector.scopeWorkspace":`Workspace`,"inspector.terminal":`Terminal`,"inspector.terminalScope":`Terminal view`,"inspector.processes":`Processes`,"inspector.terminalUnavailable":`This device or runtime does not provide a terminal`,"inspector.files":`Files`,"inspector.preview":`Preview`,"inspector.plan":`Plan`,"inspector.sideChat":`Side chat`,"inspector.closeTab":`Close “{tab}”`,"inspector.add":`Add component tab`,"inspector.addHint":`Components placed in the “session panel” slot show up here as tabs.`,"inspector.openComponents":`Open Components`,"inspector.close":`Hide inspector`,"transcript.operations":`{count} operations`,"transcript.operations_one":`{count} operation`,"transcript.running":`{count} running`,"transcript.failed":`{count} failed`,"transcript.turn":`Turn {count}`,"composer.placeholder":`Reply to the agent, or use / for commands`,"composer.tokens":`{tokens} tok`,"composer.queuedFollowUp":`Queued`,"composer.queuedSteer":`Steer`,"composer.steerNow":`Send as steer`,"composer.steerHint":`The agent reads it at its next step instead of after this run`,"composer.longPressSteer":`While running, press and hold to steer`,"changes.sessionSummary":`{count} files changed in this session`,"changes.workspaceSummary":`{count} uncommitted files in the workspace`,"changes.revertAll":`Revert all`,"changes.more":`More change actions`,"changes.pending":`{count} pending approval`,"changes.revertFile":`Revert this file`,"changes.files":`Changed files`,"changes.diffView":`Diff view`,"changes.unified":`Unified`,"changes.split":`Split`,"changes.splitTooNarrow":`The inspector is narrower than 600 px, too narrow for side by side. Widen it to use this view.`,"changes.approvedAt":`Write approved · {time}`,"changes.pendingAt":`Awaiting approval · {time}`,"changes.revertedAt":`Reverted · {time}`,"changes.statusModified":`Modified`,"changes.statusCreated":`Added`,"changes.statusDeleted":`Deleted`,"changes.statusRenamed":`Renamed`,"inspector.goal":`Goal`,"inspector.team":`Team`,"inspector.subAgents":`Sub-agents`,"shortcuts.agentPanel":`Focus the sidebar session list`,"shortcuts.toggleInspector":`Show / hide inspector`,"shortcuts.previousAgent":`Previous session in sidebar order`,"shortcuts.nextAgent":`Next session in sidebar order`,"shortcuts.steerMessage":`Steer while running`,"shortcuts.shortcutHelp":`Keyboard shortcuts`,"shortcuts.sendMessage":`Send (queues while running)`,"shortcuts.focusSearch":`Focus filter / search`,"shortcuts.groupGlobal":`Global`,"shortcuts.groupBoard":`All agents`,"shortcuts.groupSession":`Session`,"shortcuts.globalHint":`Chords with a modifier also work while typing.`,"shortcuts.boardHint":`All agents page only. Single-letter keys work when focus is not in a text field and can only be letters without modifiers.`,"shortcuts.sessionHint":`Session page only. Esc never navigates back.`,"shortcuts.fixed":`Fixed`,"shortcuts.boardMove":`Move between agents (row focused)`,"shortcuts.boardOpen":`Open the session`,"shortcuts.boardExitTriage":`Leave triage`,"shortcuts.newline":`New line`,"shortcuts.stopRun":`Stop the run (closes an open overlay first)`,"shortcuts.helpDescription":`Bindings on this device. Changes show up here right away.`,"shortcuts.helpCustomize":`Customize in Settings`,"home.draftTitle":`New task`,"home.draftSubtitle":`A session is created when you send the first message`,"home.draftHeading":`Start a new task`,"home.draftHint":`Pick a project and describe the task. After the first message this becomes its session; other agents stay in All agents.`,"home.composerLabel":`New task composer`,"home.placeholder":`Describe the task… ({send} sends, Tab switches project)`,"home.placeholderUnbound":`Describe the task… (Tab switches project)`,"home.placeholderTouch":`Describe the task…`,"home.send":`Send`,"home.sending":`Creating the session…`,"home.loading":`Opening your last session…`,"home.loadFailed":`Couldn't load sessions`,"home.loadFailedHint":`Your last session can't be confirmed right now. Retry, or start a new task instead.`,"home.startDraft":`Start a new task`,"home.goHome":`Go to home`,"shortcuts.openSession":`Open session home`,"shortcuts.sessionTree":`Session tree (branches and marks)`,"shortcuts.sideChat":`Side chat`,"shortcuts.cycleFocusRegion":`Move focus between sidebar, top bar, conversation and composer`,"shortcuts.groupSidebar":`Sidebar`,"shortcuts.sidebarHint":`When a session row in the sidebar has focus. A / D follow the All agents allow / deny keys and only handle standard approvals.`,"shortcuts.sidebarMove":`Move between session rows`,"shortcuts.sidebarOpen":`Open session`,"sidebar.reason.failed":`Run failed`,"sidebar.reason.approval":`Waiting for your approval`,"sidebar.reason.criticalApproval":`High-risk approval`,"sidebar.reason.question":`Waiting for your answer`,"sidebar.reason.questions":`Waiting for your answer · {count} questions`,"sidebar.reason.questions_one":`Waiting for your answer · {count} question`,"sidebar.reason.questionCount":`{count} questions`,"sidebar.reason.questionCount_one":`{count} question`,"sidebar.group.attention":`Needs you`,"sidebar.group.running":`Running`,"sidebar.group.queued":`Queued`,"sidebar.group.pinned":`Pinned`,"sidebar.group.done":`Done today`,"sidebar.loading":`Loading sessions`,"sidebar.error":`Couldn't load sessions`,"sidebar.retry":`Retry`,"sidebar.empty":`No agents running yet. Start one with New task.`,"sidebar.emptyAttention":`Nothing needs you`,"sidebar.emptyRunning":`No agents running`,"sidebar.moreRunning":`{count} more →`,"sidebar.allDone":`All →`,"sidebar.history":`History`,"sidebar.announce":`{title} needs you: {reason}`,"sidebar.announceSeparator":`; `,"sidebar.attentionRow":`{title}, {reason}, waiting {wait}`,"sidebar.attentionRowNoWait":`{title}, {reason}`,"sidebar.unread":`Unread`,"sidebar.deny":`Deny`,"sidebar.approve":`Allow`,"sidebar.open":`Open`,"sidebar.denyNamed":`Deny the request from {title}`,"sidebar.approveNamed":`Allow the request from {title}`,"sidebar.openNamed":`Open {title} to handle it`,"sidebar.rowMenu":`More actions for {title}`,"sidebar.renameTitle":`Rename session`,"sidebar.renameLabel":`Session title`,"sidebar.renameSave":`Save`,"sidebar.renamed":`Session title updated`,"sidebar.railAttention":`{count} agents need you, open all agents`,"sidebar.railAttention_one":`{count} agent needs you, open all agents`,"sidebar.railRunning":`{count} agents running, open all agents`,"sidebar.railRunning_one":`{count} agent running, open all agents`,"sidebar.filter.all":`All`,"sidebar.filter.projectActions":`Project actions`,"sidebar.filter.addProject":`Add project…`,"sidebar.filter.noProjects":`No projects yet`,"sidebar.fleet.attention":`{count} need you`,"sidebar.fleet.running":`{count} running`,"sidebar.fleet.label":`{attention} need you, {running} running, open all agents`,"menu.rename":`Rename`,"composer.placeholderRunning":`Running: {queue} to queue, {steer} to steer`,"composer.placeholderRunningQueueOnly":`Running: {queue} to queue`,"composer.placeholderRunningTouch":`Running: tap send to queue, hold send to steer`,"composer.editQueued":`Edit queued message`,"composer.cancelQueued":`Cancel queued message`,"composer.plusMenu":`Add attachments, skills or voice input`,"composer.modeChip":`Approval and run mode`,"composer.goalShort":`Goal`,"composer.teamShort":`Team`,"composer.cycleRunMode":`Cycle`,"composer.contextUsage":`Context`,"composer.sessionTokens":`This session`,"composer.cacheHitLabel":`Cache hits`,"transcript.allDone":`all done`,"transcript.copyMarkdown":`Copy as Markdown`,"card.holdToApprove":`Hold to allow`,"card.holdHint":`High-risk: hold for 0.6 s`,"card.moreWaiting":`{count} more waiting for you`,"shortcuts.cycleRunMode":`Cycle run mode (Plan / Goal / Team)`,"project.moveUpShort":`Move up`,"project.moveDownShort":`Move down`,"triage.answer":`Answer`,"overview.doneUnread":`Done · unread`,"overview.waited":`waited {wait}`,"overview.ran":`running for {time}`,"overview.finishedAt":`finished at {time}`,"overview.openToHandle":`Open to handle`,"overview.log":`Log`,"overview.retryNamed":`Retry {title}`,"overview.subAgents":`Sub-agents {running}/{total}`,"overview.startNow":`Start now`,"overview.queuedAfter":`After “{title}”`,"overview.queuedAfterUnknown":`Waiting for an earlier task`,"overview.queuePosition":`No. {n} in queue`,"overview.empty":`No agents are running yet`,"overview.newTask":`New task`,"overview.widgets":`Placed components`,"overview.subAgentSlots":`Sub-agents {running}/{max}`,"overview.todayTokens":`{tokens} tok today`,"overview.memory":`Memory {memory}`,"overview.systemLoading":`Reading system info…`,"overview.systemUnavailable":`System info is unavailable right now`,"overview.projectAttention":`{count} need you`,"overview.projectAttention_one":`{count} needs you`,"overview.projectRunning":`{count} running`,"overview.projectQueued":`{count} queued`,"overview.projectDone":`{count} done today`,"question.title":`The agent is asking you`,"question.label":`Agent question`,"question.waiting":`{count} more questions are waiting for you`,"question.moreAfter":`{count} more after this`,"question.failed":`Couldn't send the answer. Try again (it may have been answered elsewhere).`,"question.other":`Other…`,"question.otherLabel":`Other answer: {question}`,"question.otherPlaceholder":`Write your answer`,"question.skip":`Skip`,"question.submit":`Submit`,"question.answerNamed":`Answer “{title}”: {option}`,"question.open":`Open to answer`}};export{e as boardMessages};
@@ -1 +0,0 @@
1
- import{s as e}from"./useSessionListQuery-D44XZfGr.js";import{n as t}from"./session-workspaces-BWTBYaGT.js";import{o as n}from"./card-presentation-1oph2b8P.js";import{r}from"./workspace-order-store-RYWvGOeR.js";function i(e,t){let n=r(t,e.map(e=>e.key)).map(e=>({...e,count:0}));return[...e,...n]}function a(e,i,a){let o=[...e].sort((e,t)=>(Date.parse(t.modified||``)||0)-(Date.parse(e.modified||``)||0)),s=t(o).filter(e=>e.key!==`\0`&&e.cwd);return[...r(i,s.map(e=>e.key)),...s.slice(0,12)].map(e=>({key:e.key,cwd:e.cwd,label:a[e.key]||n(e.cwd)}))}function o(e,t){return a(e,[],{})[0]?.cwd||t[0]?.cwd||``}function s(r,a,o,s,c){let l=t(r).map(e=>({key:e.key,cwd:e.cwd,count:e.sessions.length}));return e(i(l,a).map(e=>{let t=e.cwd?n(e.cwd):c,r=e.key===`\0`?``:o[e.key]||``;return{...e,label:r||t,folderLabel:t,custom:!!r}}),s)}export{i,s as n,a as r,o as t};
@@ -1 +0,0 @@
1
- var e={zh:{"channelsPage.feishu":`飞书`,"channelsPage.weChat":`微信`,"channelsPage.qq":`QQ`,"channelsPage.telegram":`Telegram`,"channelsPage.feishuAppBot":`飞书应用机器人`,"channelsPage.qqBot":`QQ 机器人`,"channelsPage.telegramBot":`Telegram 机器人`,"channelsPage.webSocketPersistentConnection":`WebSocket 长连接`,"channelsPage.tencentILinkPersistentConnection":`Tencent iLink 持续连接`,"channelsPage.qqPersistentConnection":`QQ 机器人持续连接`,"channelsPage.telegramPersistentConnection":`Telegram Bot 长轮询连接`,"channelsPage.feishuCapabilities":`私聊、群聊 @、图片和文件`,"channelsPage.weChatCapabilities":`个人微信私聊、图片和文件`,"channelsPage.qqCapabilities":`私聊、群聊、图片和文件`,"channelsPage.telegramCapabilities":`私聊、群聊、图片和文件`,"channelsPage.notConnected":`未连接`,"channelsPage.connecting":`连接中`,"channelsPage.online":`在线`,"channelsPage.reconnecting":`重连中`,"channelsPage.connectionFailed":`连接失败`,"channelsPage.requestingLoginQrCode":`正在申请登录二维码…`,"channelsPage.scanAndConfirmConnection":`请使用手机扫码并确认连接`,"channelsPage.scannedWaitingForConfirmation":`已扫码,正在等待确认…`,"channelsPage.enterPairingCode":`请输入手机上显示的数字配对码`,"channelsPage.confirmingAuthorization":`正在确认授权…`,"channelsPage.authorizationSucceededConnecting":`授权成功,正在建立持续连接…`,"channelsPage.channelConnected":`渠道已经连接`,"channelsPage.cancelled":`已取消`,"channelsPage.accessScope":`访问范围`,"channelsPage.approvalMode":`审批模式`,"channelsPage.approvalModeUpdated":`渠道审批模式已更新`,"channelsPage.approvalRequired":`每次操作都需审批`,"channelsPage.workspaceWrite":`工作区写入自动执行`,"channelsPage.fullAccess":`完全访问`,"channelsPage.executionMode":`执行模式`,"channelsPage.executionModeUpdated":`渠道执行模式已更新`,"channelsPage.planMode":`计划`,"channelsPage.goalMode":`目标`,"channelsPage.teamMode":`团队`,"channelsPage.accessScopeUpdated":`访问范围已更新`,"channelsPage.afterYouScanAndConfirmCredentialsAreSavedAndTheChannelStaysOnlineIncomingMessagesGoDirectlyToThe":`扫码确认后会自动保存凭据并保持在线,收到消息后直接交给指定模型和 {agent}。`,"channelsPage.cancel":`取消`,"channelsPage.cannotScanOpenTheSignInLink":`无法扫码?打开登录链接`,"channelsPage.channelChatReset":`渠道会话已重置`,"channelsPage.channelChats":`渠道会话`,"channelsPage.platforms":`渠道平台`,"channelsPage.channelReplyModelUpdated":`渠道回复模型已更新`,"channelsPage.closeDialog":`关闭对话框`,"channelsPage.connectedTime":`已连接 {time}`,"channelsPage.connectNameByQRCode":`扫码连接 {name}`,"channelsPage.configureName":`配置{name}`,"channelsPage.connect":`连接`,"channelsPage.enterBotCredentialsForName":`输入 {name} 的机器人凭据。`,"channelsPage.scanWithQQToCreateOfficialBot":`使用手机 QQ 扫描二维码,授权创建并绑定官方机器人。`,"channelsPage.officialSetupRequired":`先完成官方机器人创建`,"channelsPage.officialSetupInstructions":`打开官方页面创建机器人,然后将 App ID、App Secret 或 Bot Token 粘贴到下方;Pisper 不会读取页面中的敏感信息。`,"channelsPage.openOfficialSetup":`打开官方创建页面`,"channelsPage.openOfficialSetupQRCode":`官方机器人创建页面二维码`,"channelsPage.qqAppId":`QQ App ID`,"channelsPage.qqAppSecret":`QQ App Secret`,"channelsPage.qqCredentialsOrToken":`请填写 App ID,并填写 App Secret;已有访问 Token 时也可使用 Token。`,"channelsPage.botToken":`Bot Token`,"channelsPage.continueScanning":`继续扫码`,"channelsPage.continueConfiguration":`继续配置`,"channelsPage.configuringAgainWillReplaceTheCurrentNameConnectionContinue":`重新配置会替换当前{name}连接,是否继续?`,"channelsPage.retry":`重试`,"channelsPage.countLinked":`{count} 个已绑定`,"channelsPage.createTheBotAppThroughTheOfficialFeishuAuthorizationPage":`由飞书官方授权页创建机器人应用。`,"channelsPage.defaultModel":`默认模型`,"channelsPage.defaultWorkingDirectoryForNewChats":`新会话默认工作目录`,"channelsPage.defaultWorkingDirectorySaved":`默认工作目录已保存`,"channelsPage.disconnect":`解除连接`,"channelsPage.disconnectName":`解除{name}连接`,"channelsPage.eachContactOrChatMapsToAnIndependentAgentSession":`每个联系人或聊天独立映射 Agent 会话`,"channelsPage.enableThisChannel":`启用此渠道`,"channelsPage.enterTheNumberShownOnYourPhone":`输入手机显示的数字`,"channelsPage.establishingPersistentConnection":`正在建立持续连接`,"channelsPage.generateANewQRCode":`重新生成二维码`,"channelsPage.loadingChannels":`正在加载渠道`,"channelsPage.localCredentialsAndChatMappingsWillBeDeleted":`本地凭据和会话映射会被删除。`,"channelsPage.localSecurityBoundary":`本机安全边界`,"channelsPage.channelPaused":`渠道已暂停`,"channelsPage.channelEnabled":`渠道已启用`,"channelsPage.allWeChatUsersWhoMessageTheBot":`所有给机器人发消息的微信用户`,"channelsPage.allMembersInTheCurrentTenant":`当前租户所有成员`,"channelsPage.scanAgainToReconnect":`重新扫码绑定`,"channelsPage.nameConnectionQRCode":`{name}连接二维码`,"channelsPage.nameDisconnected":`{name}已解除连接`,"channelsPage.nameReconnected":`{name}已重新连接`,"channelsPage.nameSettings":`{name}设置`,"channelsPage.nameTwoWayConnectionEstablished":`{name}已建立双向连接`,"channelsPage.noMessages":`暂无消息`,"channelsPage.off":`关闭`,"channelsPage.onceConnectedMessagesFromFeishuOrWeixinWillArriveHereInPisper":`连接完成后,来自飞书或微信的消息会在这里抵达 Pisper。`,"channelsPage.onceConnectedMessagesFromSupportedChannelsWillArriveHereInPisper":`连接完成后,来自已接入渠道的消息会在这里抵达 Pisper。`,"channelsPage.allUsersWhoMessageTheBot":`所有给机器人发消息的用户`,"channelsPage.ownerOnlyAccessRespectsToolPermissionsAndExecutionMode":`默认仅允许扫码创建者使用;Agent 工具仍遵循已配置的工具权限和会话执行模式。渠道消息也支持 TUI 的 /dir、/mode、/run、/status、/stop、/new 命令。`,"channelsPage.pairingCodeSubmitted":`配对码已提交`,"channelsPage.persistentTwoWayConnection":`持续在线的双向连接`,"channelsPage.processing":`正在处理…`,"channelsPage.qrCodeExpiresTime":`二维码将在 {time}过期`,"channelsPage.qrCodeOwnerOnly":`仅扫码创建者`,"channelsPage.reconnect":`重连`,"channelsPage.reconnectName":`重新连接 {name}`,"channelsPage.replyModel":`回复模型`,"channelsPage.reset":`重置`,"channelsPage.resetChannelChat":`重置渠道会话`,"channelsPage.resetChat":`重置会话`,"channelsPage.resetTheAppChatLinkedToScope":`重置“{scope}”绑定的 {app} 会话?`,"channelsPage.save":`保存`,"channelsPage.scanningAgainWillReplaceTheCurrentNameConnectionContinue":`重新扫码会替换当前{name}连接,是否继续?`,"channelsPage.signInToPersonalWeChatThroughTencentILinkBot":`由腾讯 iLink Bot 完成个人微信登录。`,"channelsPage.submitPairingCode":`提交配对码`,"channelsPage.tencentILinkContinuouslyPollsDirectMessagesAndSupportsTextAndMediaReplies":`腾讯 iLink 持续拉取私聊消息,并支持文字与媒体回复。`,"channelsPage.trueTwoWayMessagingNoNotificationWebhookRequired":`真正双向收发,不使用通知 Webhook`,"channelsPage.turnOffToDisconnectWhileKeepingSignInCredentials":`关闭后断开连接,但保留登录凭据`,"channelsPage.twoWay":`双向`,"channelsPage.twoWayCapability":`双向能力`,"channelsPage.useApplicationDefaultModel":`跟随应用默认模型`,"channelsPage.waitingForTheFirstReplyFromAfar":`等待远方的第一声回应`,"channelsPage.webSocketReceivesDirectMessagesAndGroupMentions":`WebSocket 接收私聊和群聊 @ 消息。`,"channelsPage.lede":`连接飞书、微信、QQ 与 Telegram,在聊天软件里和 Pisper 双向对话。`,"channelsPage.loadFailed":`渠道读取失败`,"channelsPage.disconnectedCount":`{count} 个断开`,"channelsPage.togglePlatformDetails":`展开或收起 {name} 的设置`,"channelsPage.noMatchingChannels":`没有符合搜索的渠道`,"channelsPage.noMatchingChats":`没有符合搜索的渠道会话`,"channelsPage.searchPlaceholder":`搜索渠道与渠道会话`,"channelsPage.paused":`已暂停`,"channelsPage.disconnected":`已断开`,"channelsPage.notConnectedHint":`还没有连接。点右侧的连接按钮扫码或填写机器人凭据,连上后可以在这里调整回复模型、审批模式与访问范围。`},en:{"channelsPage.feishu":`Feishu`,"channelsPage.weChat":`WeChat`,"channelsPage.qq":`QQ`,"channelsPage.telegram":`Telegram`,"channelsPage.feishuAppBot":`Feishu app bot`,"channelsPage.qqBot":`QQ bot`,"channelsPage.telegramBot":`Telegram bot`,"channelsPage.webSocketPersistentConnection":`Persistent WebSocket connection`,"channelsPage.tencentILinkPersistentConnection":`Persistent Tencent iLink connection`,"channelsPage.qqPersistentConnection":`Persistent QQ bot connection`,"channelsPage.telegramPersistentConnection":`Telegram Bot long-polling connection`,"channelsPage.feishuCapabilities":`Direct messages, group mentions, images, and files`,"channelsPage.weChatCapabilities":`Personal WeChat messages, images, and files`,"channelsPage.qqCapabilities":`Direct messages, group chats, images, and files`,"channelsPage.telegramCapabilities":`Direct messages, group chats, images, and files`,"channelsPage.notConnected":`Not connected`,"channelsPage.connecting":`Connecting`,"channelsPage.online":`Online`,"channelsPage.reconnecting":`Reconnecting`,"channelsPage.connectionFailed":`Connection failed`,"channelsPage.requestingLoginQrCode":`Requesting login QR code…`,"channelsPage.scanAndConfirmConnection":`Scan with your phone and confirm the connection`,"channelsPage.scannedWaitingForConfirmation":`Scanned; waiting for confirmation…`,"channelsPage.enterPairingCode":`Enter the numeric pairing code shown on your phone`,"channelsPage.confirmingAuthorization":`Confirming authorization…`,"channelsPage.authorizationSucceededConnecting":`Authorization succeeded; establishing connection…`,"channelsPage.channelConnected":`Channel connected`,"channelsPage.cancelled":`Cancelled`,"channelsPage.accessScope":`Access scope`,"channelsPage.approvalMode":`Approval mode`,"channelsPage.approvalModeUpdated":`Channel approval mode updated`,"channelsPage.approvalRequired":`Approve every operation`,"channelsPage.workspaceWrite":`Auto-run workspace writes`,"channelsPage.fullAccess":`Full access`,"channelsPage.executionMode":`Execution mode`,"channelsPage.executionModeUpdated":`Channel execution mode updated`,"channelsPage.planMode":`Plan`,"channelsPage.goalMode":`Goal`,"channelsPage.teamMode":`Team`,"channelsPage.accessScopeUpdated":`Access scope updated`,"channelsPage.afterYouScanAndConfirmCredentialsAreSavedAndTheChannelStaysOnlineIncomingMessagesGoDirectlyToThe":`After you scan and confirm, credentials are saved and the channel stays online. Incoming messages go directly to the selected model and {agent}.`,"channelsPage.cancel":`Cancel`,"channelsPage.cannotScanOpenTheSignInLink":`Cannot scan? Open the sign-in link`,"channelsPage.channelChatReset":`Channel chat reset`,"channelsPage.channelChats":`Channel chats`,"channelsPage.platforms":`Platforms`,"channelsPage.channelReplyModelUpdated":`Channel reply model updated`,"channelsPage.closeDialog":`Close dialog`,"channelsPage.connectedTime":`Connected {time}`,"channelsPage.connectNameByQRCode":`Connect {name} by QR code`,"channelsPage.configureName":`Configure {name}`,"channelsPage.connect":`Connect`,"channelsPage.enterBotCredentialsForName":`Enter the {name} bot credentials.`,"channelsPage.scanWithQQToCreateOfficialBot":`Scan with the QQ mobile app to authorize creation and binding of the official bot.`,"channelsPage.officialSetupRequired":`Create the official bot first`,"channelsPage.officialSetupInstructions":`Open the official page to create the bot, then paste the App ID, App Secret, or Bot Token below; Pisper never reads sensitive values from that page.`,"channelsPage.openOfficialSetup":`Open official setup page`,"channelsPage.openOfficialSetupQRCode":`QR code for the official bot setup page`,"channelsPage.qqAppId":`QQ App ID`,"channelsPage.qqAppSecret":`QQ App Secret`,"channelsPage.qqCredentialsOrToken":`Enter App ID and App Secret, or just a token.`,"channelsPage.botToken":`Bot token`,"channelsPage.continueScanning":`Continue scanning`,"channelsPage.continueConfiguration":`Continue configuration`,"channelsPage.configuringAgainWillReplaceTheCurrentNameConnectionContinue":`Configuring again will replace the current {name} connection. Continue?`,"channelsPage.retry":`Retry`,"channelsPage.countLinked":`{count} linked`,"channelsPage.createTheBotAppThroughTheOfficialFeishuAuthorizationPage":`Create the bot app through the official Feishu authorization page.`,"channelsPage.defaultModel":`Default model`,"channelsPage.defaultWorkingDirectoryForNewChats":`Default working directory for new chats`,"channelsPage.defaultWorkingDirectorySaved":`Default working directory saved`,"channelsPage.disconnect":`Disconnect`,"channelsPage.disconnectName":`Disconnect {name}`,"channelsPage.eachContactOrChatMapsToAnIndependentAgentSession":`Each contact or chat maps to an independent agent session`,"channelsPage.enableThisChannel":`Enable this channel`,"channelsPage.enterTheNumberShownOnYourPhone":`Enter the number shown on your phone`,"channelsPage.establishingPersistentConnection":`Establishing persistent connection`,"channelsPage.generateANewQRCode":`Generate a new QR code`,"channelsPage.loadingChannels":`Loading channels`,"channelsPage.localCredentialsAndChatMappingsWillBeDeleted":`Local credentials and chat mappings will be deleted.`,"channelsPage.localSecurityBoundary":`Local security boundary`,"channelsPage.channelPaused":`Channel paused`,"channelsPage.channelEnabled":`Channel enabled`,"channelsPage.allWeChatUsersWhoMessageTheBot":`All WeChat users who message the bot`,"channelsPage.allMembersInTheCurrentTenant":`All members in the current tenant`,"channelsPage.scanAgainToReconnect":`Scan again to reconnect`,"channelsPage.nameConnectionQRCode":`{name} connection QR code`,"channelsPage.nameDisconnected":`{name} disconnected`,"channelsPage.nameReconnected":`{name} reconnected`,"channelsPage.nameSettings":`{name} settings`,"channelsPage.nameTwoWayConnectionEstablished":`{name} two-way connection established`,"channelsPage.noMessages":`No messages`,"channelsPage.off":`Off`,"channelsPage.onceConnectedMessagesFromFeishuOrWeixinWillArriveHereInPisper":`Once connected, messages from Feishu or Weixin will arrive here in Pisper.`,"channelsPage.onceConnectedMessagesFromSupportedChannelsWillArriveHereInPisper":`Once connected, messages from supported channels will arrive here in Pisper.`,"channelsPage.allUsersWhoMessageTheBot":`All users who message the bot`,"channelsPage.ownerOnlyAccessRespectsToolPermissionsAndExecutionMode":`Only the person who scanned the QR code is allowed by default. Agent tools still follow the configured tool permissions and session execution mode. Channel messages also support the TUI commands /dir, /mode, /run, /status, /stop, and /new.`,"channelsPage.pairingCodeSubmitted":`Pairing code submitted`,"channelsPage.persistentTwoWayConnection":`Persistent two-way connection`,"channelsPage.processing":`Processing…`,"channelsPage.qrCodeExpiresTime":`QR code expires {time}`,"channelsPage.qrCodeOwnerOnly":`QR-code owner only`,"channelsPage.reconnect":`Reconnect`,"channelsPage.reconnectName":`Reconnect {name}`,"channelsPage.replyModel":`Reply model`,"channelsPage.reset":`Reset`,"channelsPage.resetChannelChat":`Reset channel chat`,"channelsPage.resetChat":`Reset chat`,"channelsPage.resetTheAppChatLinkedToScope":`Reset the {app} chat linked to “{scope}”?`,"channelsPage.save":`Save`,"channelsPage.scanningAgainWillReplaceTheCurrentNameConnectionContinue":`Scanning again will replace the current {name} connection. Continue?`,"channelsPage.signInToPersonalWeChatThroughTencentILinkBot":`Sign in to personal WeChat through Tencent iLink Bot.`,"channelsPage.submitPairingCode":`Submit pairing code`,"channelsPage.tencentILinkContinuouslyPollsDirectMessagesAndSupportsTextAndMediaReplies":`Tencent iLink continuously polls direct messages and supports text and media replies.`,"channelsPage.trueTwoWayMessagingNoNotificationWebhookRequired":`True two-way messaging; no notification webhook required`,"channelsPage.turnOffToDisconnectWhileKeepingSignInCredentials":`Turn off to disconnect while keeping sign-in credentials.`,"channelsPage.twoWay":`Two-way`,"channelsPage.twoWayCapability":`Two-way capability`,"channelsPage.useApplicationDefaultModel":`Use application default model`,"channelsPage.waitingForTheFirstReplyFromAfar":`Waiting for the first reply from afar`,"channelsPage.webSocketReceivesDirectMessagesAndGroupMentions":`WebSocket receives direct messages and group @ mentions.`,"channelsPage.lede":`Connect Feishu, WeChat, QQ and Telegram to talk with Pisper from your chat apps.`,"channelsPage.loadFailed":`Could not load channels`,"channelsPage.disconnectedCount":`{count} disconnected`,"channelsPage.togglePlatformDetails":`Show or hide settings for {name}`,"channelsPage.noMatchingChannels":`No channels match your search`,"channelsPage.noMatchingChats":`No channel chats match your search`,"channelsPage.searchPlaceholder":`Search channels and chats`,"channelsPage.paused":`Paused`,"channelsPage.disconnected":`Disconnected`,"channelsPage.notConnectedHint":`Not connected yet. Use the connect button on the right to scan or enter bot credentials; once connected you can adjust the reply model, approval mode and access scope here.`}};export{e as channelsMessages};
@@ -1 +0,0 @@
1
- import{i as e,n as t}from"./startup-queries-6Oztqpto.js";import{a as n,c as r,i,r as a,s as o}from"./api-BO7LAPSQ.js";var s=e=>`/api/sessions/${encodeURIComponent(e)}`;async function c(t,r={}){let i=await n(t,r);return r.method&&r.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`)),i}var l={listSessions:({refresh:e=!0}={})=>t(`sessions`,e),searchSessionTreeLabels:(e,t=20,n)=>c(`/api/session-labels?${new URLSearchParams({query:e,limit:String(t)})}`,{signal:n}),listSessionTreeLabels:(e=500)=>c(`/api/session-labels?limit=${e}`),createSession:(e,t=``,n={})=>c(`/api/sessions`,{method:`POST`,data:{name:e,...n.projectless?{projectless:!0}:t?{cwd:t}:{}}}),deriveSession:(e,t,n)=>c(`${s(e)}/derive`,{method:`POST`,data:{boundaryEntryId:t,name:n}}),getSessionTree:e=>c(`${s(e)}/tree`),navigateSessionTree:(e,t,n)=>c(`${s(e)}/tree/navigate`,{method:`POST`,data:{targetEntryId:t,summarize:n},timeout:18e4}),navigateSessionTreeTarget:(e,t)=>c(`${s(e)}/tree/navigate`,{method:`POST`,data:{targetEntryId:t,summarize:!1,includeTree:!1},timeout:18e4}),previewFileRewind:(e,t)=>c(`${s(e)}/tree/${encodeURIComponent(t)}/file-rewind`),rewindFiles:(e,t)=>c(`${s(e)}/tree/${encodeURIComponent(t)}/file-rewind`,{method:`POST`,timeout:18e4}),setSessionTreeLabel:(e,t,n)=>c(`${s(e)}/tree/labels/${encodeURIComponent(t)}`,{method:`PUT`,data:{label:n}}),getSessionCommands:e=>c(`${s(e)}/commands`),getWorkspaceCommands:e=>c(`/api/commands?cwd=${encodeURIComponent(e)}`),getConfig:({refresh:e=!1}={})=>t(`config`,e),updateCompactionPreference:e=>c(`/api/settings/compaction`,{method:`PATCH`,data:{thresholdPercent:e}}),getLiveSession:(e,t={})=>c(`${s(e)}/live`,t),getMessages:(e,t)=>{let n=new URLSearchParams({limit:String(t.limit)});return t.before&&n.set(`before`,t.before),c(`${s(e)}/messages?${n}`)},openStream:async(e,t,{signal:n}={})=>{await a({open:async()=>(await o(),fetch(`/api/chat`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e),signal:n})),resume:async(e,t)=>(await o(),fetch(`/api/runs/${encodeURIComponent(e)}/events?after=${t}`,{signal:n})),onEvent:t,signal:n})},askSideQuestion:async(e,t,{signal:n,onDelta:i}={})=>{await o();let a=await fetch(`${s(e)}/side-question`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({question:t}),signal:n}),c=null;if(await r(a,(e,t)=>{if(e===`delta`&&typeof t.text==`string`)i?.(t.text);else if(e===`error`)throw Error(String(t.message||``));else if(e===`done`)return c={text:typeof t.text==`string`?t.text:``,toolCallIgnored:t.toolCallIgnored===!0},!1}),!c)throw Error(`side question ended before completion`);return c},retryLastTurn:async(e,t,{signal:n}={})=>{await a({open:async()=>(await o(),fetch(`${s(e)}/retry`,{method:`POST`,signal:n})),resume:async(e,t)=>(await o(),fetch(`/api/runs/${encodeURIComponent(e)}/events?after=${t}`,{signal:n})),onEvent:t,signal:n})},queueInput:(e,t,n,r)=>c(`${s(e)}/input`,{method:`POST`,data:{message:t,attachments:n,behavior:r}}),withdrawQueuedInput:(e,t)=>c(`${s(e)}/input/${encodeURIComponent(t)}`,{method:`DELETE`}),compactSession:e=>c(`${s(e)}/compact`,{method:`POST`,data:{},timeout:18e4}),getSessionWorkflowRuns:e=>c(`${s(e)}/workflow-runs`),resolveWorkflowApproval:(e,t,n)=>c(`/api/workflow-runs/${encodeURIComponent(e)}/approvals/${encodeURIComponent(t)}`,{method:`POST`,data:{approved:n}}),stopWorkflowRun:e=>c(`/api/workflow-runs/${encodeURIComponent(e)}/stop`,{method:`POST`,data:{}}),abort:e=>c(`${s(e)}/abort`,{method:`POST`,data:{}}),resolveMobileOperation:(e,t,n)=>c(`${s(e)}/mobile-operations/${encodeURIComponent(t)}`,{method:`POST`,data:n}),pauseGoal:e=>c(`${s(e)}/goal`,{method:`PATCH`,data:{action:`pause`}}),setGoalBudget:(e,t)=>c(`${s(e)}/goal`,{method:`PATCH`,data:{action:`set-budget`,tokenBudget:t}}),getGitChanges:e=>c(`${s(e)}/git/changes`),commitGitChanges:(e,t)=>c(`${s(e)}/git/commit`,{method:`POST`,data:{message:t},timeout:6e4}),pushGitChanges:e=>c(`${s(e)}/git/push`,{method:`POST`,data:{},timeout:15e4}),revertGitChanges:e=>c(`${s(e)}/git/revert`,{method:`POST`,data:{},timeout:6e4}),getVcsChanges:(e,t={})=>c(`${s(e)}/vcs/changes`,t),getFileDiff:(e,t,n={})=>c(`${s(e)}/vcs/file-diff?path=${encodeURIComponent(t)}`,n),commitVcsChanges:(e,t)=>c(`${s(e)}/vcs/commit`,{method:`POST`,data:{message:t},timeout:15e4}),pushVcsChanges:e=>c(`${s(e)}/vcs/push`,{method:`POST`,data:{},timeout:15e4}),revertVcsChanges:e=>c(`${s(e)}/vcs/revert`,{method:`POST`,data:{},timeout:6e4}),getSessionFileChanges:(e,t={})=>c(`${s(e)}/file-changes`,t),getSessionFileChangeDiff:(e,t,n={})=>c(`${s(e)}/file-changes/diff?path=${encodeURIComponent(t)}`,n),revertSessionFileChanges:(e,t=``)=>c(`${s(e)}/file-changes/revert`,{method:`POST`,data:{path:t},timeout:6e4}),approveSessionFileChanges:(e,t=``)=>c(`${s(e)}/file-changes/approve`,{method:`POST`,data:{path:t}}),updateModel:(e,t,n)=>c(`${s(e)}/model`,{method:`PUT`,data:{provider:t,model:n}}),getThinkingLevel:e=>c(`${s(e)}/thinking-level`),setThinkingLevel:(e,t)=>c(`${s(e)}/thinking-level`,{method:`PUT`,data:{level:t}}),updateExecutionMode:(e,t)=>c(`${s(e)}/execution-mode`,{method:`PUT`,data:{mode:t}}),updateRunMode:(e,t)=>c(`${s(e)}/run-mode`,{method:`PUT`,data:{mode:t}}),resolveApproval:(e,t,n)=>c(`${s(e)}/approvals/${encodeURIComponent(t)}`,{method:`POST`,data:{approved:n}}),answerQuestion:(e,t,n)=>c(`${s(e)}/questions/${encodeURIComponent(t)}`,{method:`POST`,data:n}),enqueueSessionStart:(e,t)=>c(`${s(e)}/queue`,{method:`POST`,data:t}),startQueuedSession:e=>c(`${s(e)}/queue/start`,{method:`POST`,data:{}}),exportSessionMarkdown:(e,t)=>i(`${s(e)}/export?format=markdown&lang=${t===`en-US`?`en-US`:`zh-CN`}`,{timeout:6e4}),updateCwd:(e,t)=>c(`${s(e)}/cwd`,{method:`PUT`,data:{cwd:t}}),renameSession:(e,t)=>c(s(e),{method:`PATCH`,data:{name:t}})};export{l as t};
@@ -1 +0,0 @@
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-CHmr7GzM.js";import{i as r,r as i,t as a}from"./runtime-capabilities-4_ZwLBqF.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`,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-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 +0,0 @@
1
- import{t as e}from"./index-CsE52ydO.js";import{t}from"./storage-BY6wEHPw.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:session-create-requested`,u=`pisper:active-session-changed`,d=`pisper:sessions-updated`,f=`pisper:command-palette-requested`,p=`pisper:session-command`,m=`pisper:session-branch-changed`;function h(e){if(!e||typeof e!=`object`)return null;let{cwd:t,prompt:n}=e;if(t!==void 0&&typeof t!=`string`)return null;let r=typeof n==`string`&&n.trim()?n.trim():void 0;return{cwd:typeof t==`string`?t:``,...r?{prompt:r}:{}}}function g(e){if(!e)return null;try{return h(JSON.parse(e))}catch{return null}}function _(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 v=``;function y(e=``){v=typeof e==`string`?e.slice(0,200):``,window.dispatchEvent(new Event(f))}function b(){let e=v;return v=``,e}function x(e){window.dispatchEvent(new CustomEvent(p,{detail:e}))}function S(){let e=g(localStorage.getItem(t.sessionCreateRequest));return localStorage.removeItem(t.sessionCreateRequest),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=_(localStorage.getItem(t.sessionMessageTarget));return n?.sessionId===e?n.entryId:``}function T(e,n){let r=_(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(){if(g(localStorage.getItem(t.sessionCreateRequest)))return{type:`create`};let e=a(localStorage.getItem(t.sessionOpenRequest));return e?{type:`open`,sessionId:e.sessionId}:null}function O(e,t=``){window.dispatchEvent(new CustomEvent(u,{detail:{id:e||``,model:t||``}}))}function k(e){window.dispatchEvent(e?new CustomEvent(d,{detail:e}):new Event(d))}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(d,n),()=>e.removeEventListener(d,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(d,n),()=>e.removeEventListener(d,n)}function P(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 F(e,t){let n=e=>{let n=P(e);n&&t(n)};return e.addEventListener(d,n),()=>e.removeEventListener(d,n)}function I(e){e&&window.dispatchEvent(new CustomEvent(m,{detail:{sessionId:e}}))}function L(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(m,t),()=>window.removeEventListener(m,t)}export{b as C,N as S,x as _,s as a,F as b,O as c,T as d,S as f,y as g,D as h,l as i,I as l,w as m,f as n,c as o,E as p,p as r,o as s,u as t,k as u,C as v,j as x,L as y};
@@ -1 +0,0 @@
1
- import{t as e}from"./createLucideIcon-Cd-3GVxJ.js";var t=e(`file-text`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]);export{t};
@@ -1 +0,0 @@
1
- import{t as e}from"./index-CsE52ydO.js";import{t}from"./storage-BY6wEHPw.js";import{n}from"./startup-queries-6Oztqpto.js";import{t as r}from"./api-BO7LAPSQ.js";import{c as i,u as a}from"./events-DrAPv0se.js";import{l as o,o as s,t as c}from"./session-workspaces-BWTBYaGT.js";import{n as l,t as u}from"./workspace-order-store-RYWvGOeR.js";import{t as d}from"./pick-system-directory-B_RJmP26.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,a){try{let o=e.getItem(t.activeSession)||``,c=s(o,n,r,a);if(c===null)return;c?e.setItem(t.activeSession,c):e.removeItem(t.activeSession),i(c)}catch{}}async function h(e,{t,notify:n,requestConfirm:i}){let s=f(e);try{let u=await p(),d=o(u,e.key);if(!d.length)return n(t(`navigation:appSidebar.projectNoChats`,{project:s}),`info`),`empty`;if(!await i({title:t(`navigation:appSidebar.deleteProject`),message:t(`navigation:appSidebar.deleteProjectConfirm`,{project:s,count:d.length}),confirmLabel:t(`navigation:appSidebar.deleteProjectAction`)}))return`cancelled`;let f=await c(d.map(e=>e.id),e=>r(`/api/sessions/${encodeURIComponent(e)}`,{method:`DELETE`}));a(f.deletedIds.length?{deletedIds:f.deletedIds}:void 0);let h=new Set(f.deletedIds),g=null;try{g=await p()}catch{}if(m(g??u.filter(e=>!h.has(e.id)),h,g!==null),g===null)return n(t(`navigation:appSidebar.projectDeleteUnverified`,{project:s,deleted:f.deletedIds.length}),`error`),`unverified`;let _=o(g,e.key).length;return f.failedId!==null||_?(n(t(`navigation:appSidebar.projectDeletePartial`,{project:s,deleted:f.deletedIds.length,remaining:_}),`error`),`partial`):(e.cwd&&l.getState().unregisterProject(e.cwd),n(t(`navigation:appSidebar.projectDeleted`,{project:s})),`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=l.getState().unregisterProject(e.cwd);return r&&n(t(`navigation:appSidebar.projectRemoved`,{project:f(e)})),r}function _(e,t,{t:n,notify:r}){try{return u.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:a}=n,o=(await a({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(!o)return!1;let s=o===t?``:o;return s!==(u.getState().names[e.key]||``)&&_(e,s,n)}function y(e,t){return!e.cwd||!u.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};