@hienlh/ppm 0.23.11 → 0.23.12

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 (641) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/CLAUDE.md +13 -2
  3. package/assets/skills/ppm/SKILL.md +1 -1
  4. package/assets/skills/ppm/references/cli-reference.md +4 -4
  5. package/assets/skills/ppm/references/http-api.md +37 -1
  6. package/bun.lock +34 -0
  7. package/dist/web/assets/accounts-settings-section-CGe5ikvs.js +1 -0
  8. package/dist/web/assets/accounts-settings-section-CGe5ikvs.js.br +0 -0
  9. package/dist/web/assets/accounts-settings-section-CGe5ikvs.js.gz +0 -0
  10. package/dist/web/assets/{agent-session-sheet-CBMsnl_p.js → agent-session-sheet-vBhfHYrC.js} +2 -2
  11. package/dist/web/assets/agent-session-sheet-vBhfHYrC.js.br +0 -0
  12. package/dist/web/assets/agent-session-sheet-vBhfHYrC.js.gz +0 -0
  13. package/dist/web/assets/{agent-session-window-content-D9C9FA7E.js → agent-session-window-content-BxIxDN5i.js} +1 -1
  14. package/dist/web/assets/agent-session-window-content-BxIxDN5i.js.br +0 -0
  15. package/dist/web/assets/agent-session-window-content-BxIxDN5i.js.gz +0 -0
  16. package/dist/web/assets/{ai-resource-editor-DhUVgDEG.js → ai-resource-editor-Y8clBPRv.js} +1 -1
  17. package/dist/web/assets/ai-resource-editor-Y8clBPRv.js.br +0 -0
  18. package/dist/web/assets/ai-resource-editor-Y8clBPRv.js.gz +0 -0
  19. package/dist/web/assets/{ai-settings-section-DOckWvp4.js → ai-settings-section-BB8vscte.js} +1 -1
  20. package/dist/web/assets/{ai-settings-section-CETpSpYd.js → ai-settings-section-Ck8uN_Bw.js} +1 -1
  21. package/dist/web/assets/ai-settings-section-Ck8uN_Bw.js.br +0 -0
  22. package/dist/web/assets/ai-settings-section-Ck8uN_Bw.js.gz +0 -0
  23. package/dist/web/assets/android-tab-BIOUVVoW.js +2 -0
  24. package/dist/web/assets/android-tab-BIOUVVoW.js.br +0 -0
  25. package/dist/web/assets/android-tab-BIOUVVoW.js.gz +0 -0
  26. package/dist/web/assets/{api-settings-JIgKfcCx.js → api-settings-D1axn9vm.js} +1 -1
  27. package/dist/web/assets/{appearance-settings-section-BJUiLUb7.js → appearance-settings-section-Bv5_n9lH.js} +1 -1
  28. package/dist/web/assets/appearance-settings-section-Bv5_n9lH.js.br +0 -0
  29. package/dist/web/assets/appearance-settings-section-Bv5_n9lH.js.gz +0 -0
  30. package/dist/web/assets/{apps-panel-1VElRgV3.js → apps-panel-DXHF0QEv.js} +1 -1
  31. package/dist/web/assets/apps-panel-DXHF0QEv.js.br +0 -0
  32. package/dist/web/assets/apps-panel-DXHF0QEv.js.gz +0 -0
  33. package/dist/web/assets/{audio-preview-DYkyHu5X.js → audio-preview-DpjOKEm4.js} +1 -1
  34. package/dist/web/assets/audio-preview-DpjOKEm4.js.br +0 -0
  35. package/dist/web/assets/audio-preview-DpjOKEm4.js.gz +0 -0
  36. package/dist/web/assets/branch-review-tab-4dgMNadQ.js +1 -0
  37. package/dist/web/assets/branch-review-tab-4dgMNadQ.js.br +0 -0
  38. package/dist/web/assets/branch-review-tab-4dgMNadQ.js.gz +0 -0
  39. package/dist/web/assets/chat-tab-Bbe_77oJ.js +15 -0
  40. package/dist/web/assets/chat-tab-Bbe_77oJ.js.br +0 -0
  41. package/dist/web/assets/chat-tab-Bbe_77oJ.js.gz +0 -0
  42. package/dist/web/assets/chat-tab-D3i5O3dO.js +1 -0
  43. package/dist/web/assets/chat-tab-D3i5O3dO.js.br +0 -0
  44. package/dist/web/assets/chat-tab-D3i5O3dO.js.gz +0 -0
  45. package/dist/web/assets/code-editor-DXsIWoQ1.js +7 -0
  46. package/dist/web/assets/code-editor-DXsIWoQ1.js.br +0 -0
  47. package/dist/web/assets/code-editor-DXsIWoQ1.js.gz +0 -0
  48. package/dist/web/assets/{codex-reset-credit-button-Fr45FUxi.js → codex-reset-credit-button-DRhievFQ.js} +1 -1
  49. package/dist/web/assets/codex-reset-credit-button-DRhievFQ.js.br +0 -0
  50. package/dist/web/assets/codex-reset-credit-button-DRhievFQ.js.gz +0 -0
  51. package/dist/web/assets/{conflict-editor-B-wdjSXI.js → conflict-editor-D_RImo_V.js} +3 -3
  52. package/dist/web/assets/conflict-editor-D_RImo_V.js.br +0 -0
  53. package/dist/web/assets/conflict-editor-D_RImo_V.js.gz +0 -0
  54. package/dist/web/assets/{csv-preview-B6RodObB.js → csv-preview-BuFdfLo3.js} +1 -1
  55. package/dist/web/assets/csv-preview-BuFdfLo3.js.br +0 -0
  56. package/dist/web/assets/csv-preview-BuFdfLo3.js.gz +0 -0
  57. package/dist/web/assets/{database-viewer-CdPBUQPY.js → database-viewer-ChcbYn9E.js} +1 -1
  58. package/dist/web/assets/database-viewer-ChcbYn9E.js.br +0 -0
  59. package/dist/web/assets/database-viewer-ChcbYn9E.js.gz +0 -0
  60. package/dist/web/assets/{design-settings-section-BpCpaBwL.js → design-settings-section-B_xOf51h.js} +1 -1
  61. package/dist/web/assets/design-settings-section-B_xOf51h.js.br +0 -0
  62. package/dist/web/assets/design-settings-section-B_xOf51h.js.gz +0 -0
  63. package/dist/web/assets/{design-skill-suggestion-DkT2E2IV.js → design-skill-suggestion-BbEDg15Z.js} +1 -1
  64. package/dist/web/assets/design-skill-suggestion-BbEDg15Z.js.br +0 -0
  65. package/dist/web/assets/design-skill-suggestion-BbEDg15Z.js.gz +0 -0
  66. package/dist/web/assets/{design-tab-BZb9eemI.js → design-tab-BQSYJ4cS.js} +6 -6
  67. package/dist/web/assets/design-tab-BQSYJ4cS.js.br +0 -0
  68. package/dist/web/assets/design-tab-BQSYJ4cS.js.gz +0 -0
  69. package/dist/web/assets/{designs-sidebar-panel-CF4tp6j-.js → designs-sidebar-panel-AiPaYfSU.js} +1 -1
  70. package/dist/web/assets/designs-sidebar-panel-AiPaYfSU.js.br +0 -0
  71. package/dist/web/assets/designs-sidebar-panel-AiPaYfSU.js.gz +0 -0
  72. package/dist/web/assets/{diff-viewer-BqEqwSw6.js → diff-viewer-BZ6glGK-.js} +1 -1
  73. package/dist/web/assets/diff-viewer-BZ6glGK-.js.br +0 -0
  74. package/dist/web/assets/diff-viewer-BZ6glGK-.js.gz +0 -0
  75. package/dist/web/assets/{edit-diff-preview-DD4HayXY.js → edit-diff-preview-D-FNLOU2.js} +1 -1
  76. package/dist/web/assets/edit-diff-preview-D-FNLOU2.js.br +0 -0
  77. package/dist/web/assets/edit-diff-preview-D-FNLOU2.js.gz +0 -0
  78. package/dist/web/assets/{editor-language-service-CkA5sEdV.js → editor-language-service-4sbsdqBV.js} +1 -1
  79. package/dist/web/assets/editor-language-service-4sbsdqBV.js.br +0 -0
  80. package/dist/web/assets/editor-language-service-4sbsdqBV.js.gz +0 -0
  81. package/dist/web/assets/explorer-body-DbgrG1fe.js +2 -0
  82. package/dist/web/assets/explorer-body-DbgrG1fe.js.br +0 -0
  83. package/dist/web/assets/explorer-body-DbgrG1fe.js.gz +0 -0
  84. package/dist/web/assets/{explorer-window-content-CRJ2eMZ4.js → explorer-window-content-BCjWvHpp.js} +1 -1
  85. package/dist/web/assets/explorer-window-content-BCjWvHpp.js.br +0 -0
  86. package/dist/web/assets/explorer-window-content-BCjWvHpp.js.gz +0 -0
  87. package/dist/web/assets/{extension-manager-section-DwQTdCII.js → extension-manager-section-DiMF4RnT.js} +1 -1
  88. package/dist/web/assets/extension-manager-section-DiMF4RnT.js.br +0 -0
  89. package/dist/web/assets/extension-manager-section-DiMF4RnT.js.gz +0 -0
  90. package/dist/web/assets/{extension-webview-CMq-VTLu.js → extension-webview-Coti6Vfw.js} +1 -1
  91. package/dist/web/assets/extension-webview-Coti6Vfw.js.br +0 -0
  92. package/dist/web/assets/extension-webview-Coti6Vfw.js.gz +0 -0
  93. package/dist/web/assets/file-store-Cm7-pHux.js +1 -0
  94. package/dist/web/assets/file-store-Cm7-pHux.js.br +0 -0
  95. package/dist/web/assets/file-store-Cm7-pHux.js.gz +0 -0
  96. package/dist/web/assets/{files-settings-section-B2lcyh-6.js → files-settings-section-ZTVwOwx0.js} +1 -1
  97. package/dist/web/assets/files-settings-section-ZTVwOwx0.js.br +0 -0
  98. package/dist/web/assets/files-settings-section-ZTVwOwx0.js.gz +0 -0
  99. package/dist/web/assets/{general-settings-section-Doepm2sH.js → general-settings-section-B7Hjx_fb.js} +1 -1
  100. package/dist/web/assets/general-settings-section-B7Hjx_fb.js.br +0 -0
  101. package/dist/web/assets/general-settings-section-B7Hjx_fb.js.gz +0 -0
  102. package/dist/web/assets/{git-log-panel-CJakNMDc.js → git-log-panel-CbcJ_YEH.js} +1 -1
  103. package/dist/web/assets/git-log-panel-CbcJ_YEH.js.br +0 -0
  104. package/dist/web/assets/git-log-panel-CbcJ_YEH.js.gz +0 -0
  105. package/dist/web/assets/{glide-data-grid-C_SeOhSq.js → glide-data-grid-BfByGSf1.js} +3 -3
  106. package/dist/web/assets/glide-data-grid-BfByGSf1.js.br +0 -0
  107. package/dist/web/assets/glide-data-grid-BfByGSf1.js.gz +0 -0
  108. package/dist/web/assets/group-chat-tab-DCo9OP3D.js +1 -0
  109. package/dist/web/assets/group-chat-tab-DCo9OP3D.js.br +0 -0
  110. package/dist/web/assets/group-chat-tab-DCo9OP3D.js.gz +0 -0
  111. package/dist/web/assets/{image-preview-C1Frlx22.js → image-preview-Cjlps7Pt.js} +1 -1
  112. package/dist/web/assets/index-CyDLBddf.js +52 -0
  113. package/dist/web/assets/index-CyDLBddf.js.br +0 -0
  114. package/dist/web/assets/index-CyDLBddf.js.gz +0 -0
  115. package/dist/web/assets/index-Dh5apC3I.css +1 -0
  116. package/dist/web/assets/index-Dh5apC3I.css.br +0 -0
  117. package/dist/web/assets/index-Dh5apC3I.css.gz +0 -0
  118. package/dist/web/assets/{jira-watcher-section-BmkIGQFV.js → jira-watcher-section-Dz_-sUC2.js} +1 -1
  119. package/dist/web/assets/keybindings-store-BTq5Z7XP.js +1 -0
  120. package/dist/web/assets/{keyboard-shortcuts-section-BgZe3QDr.js → keyboard-shortcuts-section-Ba5NYwlG.js} +1 -1
  121. package/dist/web/assets/keyboard-shortcuts-section-Ba5NYwlG.js.br +0 -0
  122. package/dist/web/assets/keyboard-shortcuts-section-Ba5NYwlG.js.gz +0 -0
  123. package/dist/web/assets/{language-servers-section-CCMzgOaE.js → language-servers-section-DJJ7SFXo.js} +2 -2
  124. package/dist/web/assets/language-servers-section-DJJ7SFXo.js.br +0 -0
  125. package/dist/web/assets/language-servers-section-DJJ7SFXo.js.gz +0 -0
  126. package/dist/web/assets/{lsp-client-B10suuaZ.js → lsp-client-Dr3vQ1bb.js} +1 -1
  127. package/dist/web/assets/lsp-client-Dr3vQ1bb.js.br +0 -0
  128. package/dist/web/assets/lsp-client-Dr3vQ1bb.js.gz +0 -0
  129. package/dist/web/assets/{markdown-renderer-AHHFS3jc.js → markdown-renderer-CmnqFfTU.js} +3 -3
  130. package/dist/web/assets/markdown-renderer-CmnqFfTU.js.br +0 -0
  131. package/dist/web/assets/markdown-renderer-CmnqFfTU.js.gz +0 -0
  132. package/dist/web/assets/markdown-renderer-LJdVMbGl.js +1 -0
  133. package/dist/web/assets/{mobile-explorer-sheet-CqCsLWSr.js → mobile-explorer-sheet-BiIhZtJ2.js} +1 -1
  134. package/dist/web/assets/mobile-explorer-sheet-BiIhZtJ2.js.br +0 -0
  135. package/dist/web/assets/mobile-explorer-sheet-BiIhZtJ2.js.gz +0 -0
  136. package/dist/web/assets/new-design-dialog-DI_hxvFV.js +1 -0
  137. package/dist/web/assets/new-design-dialog-DI_hxvFV.js.br +0 -0
  138. package/dist/web/assets/new-design-dialog-DI_hxvFV.js.gz +0 -0
  139. package/dist/web/assets/notification-store-9lBSplOV.js +1 -0
  140. package/dist/web/assets/{notifications-settings-section-CXgzH_bK.js → notifications-settings-section-0s-2OKRv.js} +1 -1
  141. package/dist/web/assets/notifications-settings-section-0s-2OKRv.js.br +0 -0
  142. package/dist/web/assets/notifications-settings-section-0s-2OKRv.js.gz +0 -0
  143. package/dist/web/assets/{overview-panel-BYB8mgRE.js → overview-panel-3htxfZS2.js} +1 -1
  144. package/dist/web/assets/overview-panel-3htxfZS2.js.br +0 -0
  145. package/dist/web/assets/overview-panel-3htxfZS2.js.gz +0 -0
  146. package/dist/web/assets/panel-store-B6PoCwBA.js +1 -0
  147. package/dist/web/assets/panel-store-B6PoCwBA.js.br +0 -0
  148. package/dist/web/assets/panel-store-B6PoCwBA.js.gz +0 -0
  149. package/dist/web/assets/{performance-panel-Dpuq3g0W.js → performance-panel-V8gpnnf7.js} +2 -2
  150. package/dist/web/assets/performance-panel-V8gpnnf7.js.br +0 -0
  151. package/dist/web/assets/performance-panel-V8gpnnf7.js.gz +0 -0
  152. package/dist/web/assets/{postgres-viewer-DW0Gkmow.js → postgres-viewer-sWS-ogTC.js} +1 -1
  153. package/dist/web/assets/postgres-viewer-sWS-ogTC.js.br +0 -0
  154. package/dist/web/assets/postgres-viewer-sWS-ogTC.js.gz +0 -0
  155. package/dist/web/assets/{ppmbot-settings-section-DFtlGoW6.js → ppmbot-settings-section-CT8vvlzk.js} +1 -1
  156. package/dist/web/assets/ppmbot-settings-section-CT8vvlzk.js.br +0 -0
  157. package/dist/web/assets/ppmbot-settings-section-CT8vvlzk.js.gz +0 -0
  158. package/dist/web/assets/{pptx-export-CNyG32Xr.js → pptx-export-Ugjv0hso.js} +4 -4
  159. package/dist/web/assets/pptx-export-Ugjv0hso.js.br +0 -0
  160. package/dist/web/assets/pptx-export-Ugjv0hso.js.gz +0 -0
  161. package/dist/web/assets/{problems-panel-V5zqpuXq.js → problems-panel-Gcy79pSS.js} +1 -1
  162. package/dist/web/assets/problems-panel-Gcy79pSS.js.br +0 -0
  163. package/dist/web/assets/problems-panel-Gcy79pSS.js.gz +0 -0
  164. package/dist/web/assets/{process-row-format-CiJJSf_V.js → process-row-format-u6y7lOee.js} +1 -1
  165. package/dist/web/assets/process-table-BUTIp9Oy.js +1 -0
  166. package/dist/web/assets/process-table-BUTIp9Oy.js.br +0 -0
  167. package/dist/web/assets/process-table-BUTIp9Oy.js.gz +0 -0
  168. package/dist/web/assets/{proxy-settings-section-B7AVlTfY.js → proxy-settings-section-Buv_8y54.js} +1 -1
  169. package/dist/web/assets/proxy-settings-section-Buv_8y54.js.br +0 -0
  170. package/dist/web/assets/proxy-settings-section-Buv_8y54.js.gz +0 -0
  171. package/dist/web/assets/{query-audit-section-gHmRfWKr.js → query-audit-section-N2DQtgJx.js} +1 -1
  172. package/dist/web/assets/query-audit-section-N2DQtgJx.js.br +0 -0
  173. package/dist/web/assets/query-audit-section-N2DQtgJx.js.gz +0 -0
  174. package/dist/web/assets/remote-desktop-clipboard-notice-CRvJqmaz.js +1 -0
  175. package/dist/web/assets/remote-desktop-clipboard-notice-CRvJqmaz.js.br +0 -0
  176. package/dist/web/assets/remote-desktop-clipboard-notice-CRvJqmaz.js.gz +0 -0
  177. package/dist/web/assets/remote-desktop-mobile-sheet-BoYINLbJ.js +2 -0
  178. package/dist/web/assets/remote-desktop-mobile-sheet-BoYINLbJ.js.br +0 -0
  179. package/dist/web/assets/remote-desktop-mobile-sheet-BoYINLbJ.js.gz +0 -0
  180. package/dist/web/assets/remote-desktop-mobile-view-DPdP0yYu.js +1 -0
  181. package/dist/web/assets/remote-desktop-mobile-view-DPdP0yYu.js.br +0 -0
  182. package/dist/web/assets/remote-desktop-mobile-view-DPdP0yYu.js.gz +0 -0
  183. package/dist/web/assets/remote-desktop-readiness-gate-BeQ_Jrp7.js +1 -0
  184. package/dist/web/assets/remote-desktop-readiness-gate-BeQ_Jrp7.js.br +0 -0
  185. package/dist/web/assets/remote-desktop-readiness-gate-BeQ_Jrp7.js.gz +0 -0
  186. package/dist/web/assets/remote-desktop-settings-section-Bs4sHS3l.js +1 -0
  187. package/dist/web/assets/remote-desktop-settings-section-Bs4sHS3l.js.br +0 -0
  188. package/dist/web/assets/remote-desktop-settings-section-Bs4sHS3l.js.gz +0 -0
  189. package/dist/web/assets/remote-desktop-window-content-DDr__JxQ.js +1 -0
  190. package/dist/web/assets/remote-desktop-window-content-DDr__JxQ.js.br +0 -0
  191. package/dist/web/assets/remote-desktop-window-content-DDr__JxQ.js.gz +0 -0
  192. package/dist/web/assets/{run-in-terminal-DKBcEGVu.js → run-in-terminal-DCBNtYHQ.js} +1 -1
  193. package/dist/web/assets/{schedules-settings-section-sYDAsBMO.js → schedules-settings-section-_cHX2qOa.js} +1 -1
  194. package/dist/web/assets/schedules-settings-section-_cHX2qOa.js.br +0 -0
  195. package/dist/web/assets/schedules-settings-section-_cHX2qOa.js.gz +0 -0
  196. package/dist/web/assets/{send-to-chat-CCdOrKc7.js → send-to-chat-dNqNV7Y4.js} +1 -1
  197. package/dist/web/assets/send-to-chat-dNqNV7Y4.js.br +0 -0
  198. package/dist/web/assets/send-to-chat-dNqNV7Y4.js.gz +0 -0
  199. package/dist/web/assets/{services-panel-CKa2aP1d.js → services-panel-Dm54cnW3.js} +1 -1
  200. package/dist/web/assets/services-panel-Dm54cnW3.js.br +0 -0
  201. package/dist/web/assets/services-panel-Dm54cnW3.js.gz +0 -0
  202. package/dist/web/assets/settings-body-DRRQNaDA.js +1 -0
  203. package/dist/web/assets/settings-body-DRRQNaDA.js.br +0 -0
  204. package/dist/web/assets/settings-body-DRRQNaDA.js.gz +0 -0
  205. package/dist/web/assets/settings-section-content-DRaHfvm8.js +1 -0
  206. package/dist/web/assets/settings-section-content-U3mIx6hF.js +2 -0
  207. package/dist/web/assets/settings-section-content-U3mIx6hF.js.br +0 -0
  208. package/dist/web/assets/settings-section-content-U3mIx6hF.js.gz +0 -0
  209. package/dist/web/assets/{settings-store-DfuiLq_9.js → settings-store-Cyuo8ceh.js} +2 -2
  210. package/dist/web/assets/settings-store-Cyuo8ceh.js.br +0 -0
  211. package/dist/web/assets/settings-store-Cyuo8ceh.js.gz +0 -0
  212. package/dist/web/assets/settings-tab-CB_BhHTK.js +1 -0
  213. package/dist/web/assets/settings-window-content-CgZIMNX8.js +1 -0
  214. package/dist/web/assets/{slash-command-picker-CLevA_Gf.js → slash-command-picker-CQlIqMW0.js} +1 -1
  215. package/dist/web/assets/slash-command-picker-CQlIqMW0.js.br +0 -0
  216. package/dist/web/assets/slash-command-picker-CQlIqMW0.js.gz +0 -0
  217. package/dist/web/assets/{sql-query-editor-Db8b0jEr.js → sql-query-editor--Z4bcqd8.js} +1 -1
  218. package/dist/web/assets/sql-query-editor--Z4bcqd8.js.br +0 -0
  219. package/dist/web/assets/sql-query-editor--Z4bcqd8.js.gz +0 -0
  220. package/dist/web/assets/{sqlite-viewer-VzYLMqkD.js → sqlite-viewer-CSmX3qaj.js} +1 -1
  221. package/dist/web/assets/sqlite-viewer-CSmX3qaj.js.br +0 -0
  222. package/dist/web/assets/sqlite-viewer-CSmX3qaj.js.gz +0 -0
  223. package/dist/web/assets/{system-monitor-body-BR60W_mG.js → system-monitor-body-LannpU6H.js} +2 -2
  224. package/dist/web/assets/system-monitor-body-LannpU6H.js.br +0 -0
  225. package/dist/web/assets/system-monitor-body-LannpU6H.js.gz +0 -0
  226. package/dist/web/assets/system-monitor-tab-BfVucwEF.js +1 -0
  227. package/dist/web/assets/{system-monitor-window-content-BLw1QBXo.js → system-monitor-window-content-kLNW9Ln3.js} +1 -1
  228. package/dist/web/assets/{tab-host-window-content-BL61SB5m.js → tab-host-window-content-II_FtOYM.js} +1 -1
  229. package/dist/web/assets/tab-host-window-content-II_FtOYM.js.br +0 -0
  230. package/dist/web/assets/tab-host-window-content-II_FtOYM.js.gz +0 -0
  231. package/dist/web/assets/{tab-store-CbPh8CAX.js → tab-store-DCpc0g0Q.js} +1 -1
  232. package/dist/web/assets/{terminal-tab-B4y6at4h.js → terminal-tab-CTe2polt.js} +1 -1
  233. package/dist/web/assets/terminal-tab-CTe2polt.js.br +0 -0
  234. package/dist/web/assets/terminal-tab-CTe2polt.js.gz +0 -0
  235. package/dist/web/assets/{tool-cards-K0r_yxI0.js → tool-cards-rxLXbBSm.js} +5 -5
  236. package/dist/web/assets/tool-cards-rxLXbBSm.js.br +0 -0
  237. package/dist/web/assets/tool-cards-rxLXbBSm.js.gz +0 -0
  238. package/dist/web/assets/use-h264-canvas-decoder-BfO9QrlH.js +1 -0
  239. package/dist/web/assets/use-h264-canvas-decoder-BfO9QrlH.js.br +0 -0
  240. package/dist/web/assets/use-h264-canvas-decoder-BfO9QrlH.js.gz +0 -0
  241. package/dist/web/assets/{use-inline-blame-BK23icsE.js → use-inline-blame-CxZ_QWzS.js} +3 -3
  242. package/dist/web/assets/use-inline-blame-CxZ_QWzS.js.br +0 -0
  243. package/dist/web/assets/use-inline-blame-CxZ_QWzS.js.gz +0 -0
  244. package/dist/web/assets/{use-lsp-CRdCPCKW.js → use-lsp-gCNE5A9K.js} +1 -1
  245. package/dist/web/assets/use-lsp-gCNE5A9K.js.br +0 -0
  246. package/dist/web/assets/use-lsp-gCNE5A9K.js.gz +0 -0
  247. package/dist/web/assets/{use-monaco-theme-CpXT2uh3.js → use-monaco-theme-DvNGcCvz.js} +1 -1
  248. package/dist/web/assets/{use-process-kill-BWYX03KF.js → use-process-kill-Cbiu1mbY.js} +1 -1
  249. package/dist/web/assets/use-process-kill-Cbiu1mbY.js.br +0 -0
  250. package/dist/web/assets/use-process-kill-Cbiu1mbY.js.gz +0 -0
  251. package/dist/web/assets/{use-websocket-CiWQKhHr.js → use-websocket-AC7EG1LK.js} +1 -1
  252. package/dist/web/assets/video-preview-C2Y61WUE.js +1 -0
  253. package/dist/web/assets/video-preview-C2Y61WUE.js.br +0 -0
  254. package/dist/web/assets/video-preview-C2Y61WUE.js.gz +0 -0
  255. package/dist/web/assets/{voice-settings-section-Ceihggqf.js → voice-settings-section-DCXZeLYI.js} +1 -1
  256. package/dist/web/assets/voice-settings-section-DCXZeLYI.js.br +0 -0
  257. package/dist/web/assets/voice-settings-section-DCXZeLYI.js.gz +0 -0
  258. package/dist/web/assets/{window-pip-registry-mDgwpAwP.js → window-pip-registry-9Y9LQQYS.js} +1 -1
  259. package/dist/web/index.html +50 -7
  260. package/dist/web/index.html.br +0 -0
  261. package/dist/web/index.html.gz +0 -0
  262. package/dist/web/sw.js +1 -1
  263. package/dist/web/sw.js.br +0 -0
  264. package/dist/web/sw.js.gz +0 -0
  265. package/docs/architecture/android-emulator-phase0-report-260921.md +310 -0
  266. package/docs/architecture/android-emulator-phase2-report-260921.md +163 -0
  267. package/docs/architecture/android-emulator-phase3-report-260921.md +203 -0
  268. package/docs/architecture/android-emulator-phase4-report-260921.md +191 -0
  269. package/docs/architecture/android-emulator-plan-260920.md +376 -0
  270. package/docs/architecture/plugins-and-tracing.md +48 -7
  271. package/package.json +4 -2
  272. package/scripts/gen-android-proto.ts +37 -0
  273. package/scripts/release.sh +3 -1
  274. package/src/cli/commands/chat-cmd.ts +2 -2
  275. package/src/providers/claude-agent-sdk-query-options.ts +28 -0
  276. package/src/providers/claude-agent-sdk.ts +153 -71
  277. package/src/providers/claude-warm-spare.ts +176 -0
  278. package/src/providers/provider.interface.ts +1 -0
  279. package/src/server/index.ts +53 -0
  280. package/src/server/middleware/gzip-json.ts +13 -1
  281. package/src/server/routes/android.ts +616 -0
  282. package/src/server/routes/chat.ts +31 -0
  283. package/src/server/routes/files.ts +52 -5
  284. package/src/server/routes/remote-desktop.ts +95 -2
  285. package/src/server/routes/trace.ts +66 -0
  286. package/src/server/ws/android.ts +101 -0
  287. package/src/server/ws/chat.ts +12 -17
  288. package/src/server/ws/global.ts +13 -1
  289. package/src/server/ws/remote-desktop.ts +6 -1
  290. package/src/services/android/android-apk.ts +387 -0
  291. package/src/services/android/android-capabilities.ts +154 -0
  292. package/src/services/android/android-flag.ts +12 -0
  293. package/src/services/android/android-grpc.ts +124 -0
  294. package/src/services/android/android-input.ts +129 -0
  295. package/src/services/android/android-logcat.ts +169 -0
  296. package/src/services/android/android-nonce.ts +50 -0
  297. package/src/services/android/android-operations.ts +124 -0
  298. package/src/services/android/android-screenshot.ts +53 -0
  299. package/src/services/android/android-session.ts +510 -0
  300. package/src/services/android/android-video.ts +495 -0
  301. package/src/services/android/avd-list.ts +131 -0
  302. package/src/services/android/avd-manager.ts +397 -0
  303. package/src/services/android/device-registry.ts +223 -0
  304. package/src/services/android/emulator-discovery.ts +160 -0
  305. package/src/services/android/emulator-launcher.ts +290 -0
  306. package/src/services/android/proto/emulator-controller-descriptor.ts +10 -0
  307. package/src/services/android/proto/emulator_controller.proto +1791 -0
  308. package/src/services/android/sdk-discovery.ts +178 -0
  309. package/src/services/android/system-images.ts +124 -0
  310. package/src/services/chat.service.ts +81 -4
  311. package/src/services/config.service.ts +1 -1
  312. package/src/services/file-filter.service.ts +2 -61
  313. package/src/services/file-glob.ts +67 -0
  314. package/src/services/file-index/file-index-runner.ts +169 -0
  315. package/src/services/file-index/file-index-worker.ts +73 -0
  316. package/src/services/file-index/index-search.ts +152 -0
  317. package/src/services/file-index/index-walk.ts +109 -0
  318. package/src/services/file-list-index.service.ts +189 -70
  319. package/src/services/file-watcher/linux-inotify.ts +238 -0
  320. package/src/services/file-watcher/watch-tree.ts +37 -6
  321. package/src/services/file-watcher.service.ts +40 -8
  322. package/src/services/file.service.ts +17 -6
  323. package/src/services/group-chat/group-chat.service.ts +1 -1
  324. package/src/services/jira-debug-session.service.ts +1 -1
  325. package/src/services/ppmbot/ppmbot-delegation.ts +1 -1
  326. package/src/services/ppmbot/ppmbot-service.ts +1 -1
  327. package/src/services/project-content-search.service.ts +45 -11
  328. package/src/services/proxy-agent-turn.ts +7 -3
  329. package/src/services/remote-desktop/mediamtx-catalog.ts +89 -0
  330. package/src/services/remote-desktop/mediamtx-config.ts +91 -0
  331. package/src/services/remote-desktop/mediamtx-install.service.ts +191 -0
  332. package/src/services/remote-desktop/mediamtx-paths.ts +51 -0
  333. package/src/services/remote-desktop/mediamtx-process.ts +152 -0
  334. package/src/services/remote-desktop/remote-desktop-capture-wayland.ts +312 -0
  335. package/src/services/remote-desktop/remote-desktop-capture.ts +60 -4
  336. package/src/services/remote-desktop/remote-desktop-portal.ts +529 -0
  337. package/src/services/remote-desktop/remote-desktop-requirements.ts +56 -20
  338. package/src/services/remote-desktop/remote-desktop-session.ts +77 -3
  339. package/src/services/remote-desktop/remote-desktop-whep-registry.ts +36 -0
  340. package/src/services/scheduler-runner.ts +2 -3
  341. package/src/services/session-trace/browser-trace-ingest.ts +131 -0
  342. package/src/services/session-trace/session-trace-cleanup.ts +65 -0
  343. package/src/services/session-trace/session-trace-db.ts +89 -0
  344. package/src/services/session-trace/session-trace-store.ts +132 -0
  345. package/src/services/session-trace/trace-coalescer.ts +86 -0
  346. package/src/services/session-trace/trace-recorder.ts +304 -0
  347. package/src/services/session-trace/trace-writer.ts +83 -0
  348. package/src/shared/android-avd.ts +53 -0
  349. package/src/shared/android-protocol.ts +184 -0
  350. package/src/shared/file-index-limits.ts +17 -0
  351. package/src/shared/session-trace.ts +61 -0
  352. package/src/types/chat.ts +17 -0
  353. package/src/types/config.ts +27 -0
  354. package/src/types/project.ts +9 -0
  355. package/src/web/app.tsx +5 -0
  356. package/src/web/components/android/android-apk-upload.ts +75 -0
  357. package/src/web/components/android/android-avd-create-dialog.tsx +305 -0
  358. package/src/web/components/android/android-avd-destroy-dialog.tsx +151 -0
  359. package/src/web/components/android/android-clipboard-panel.tsx +94 -0
  360. package/src/web/components/android/android-controls.tsx +128 -0
  361. package/src/web/components/android/android-coords.ts +99 -0
  362. package/src/web/components/android/android-device-list.tsx +329 -0
  363. package/src/web/components/android/android-install-panel.tsx +280 -0
  364. package/src/web/components/android/android-log-filter.ts +75 -0
  365. package/src/web/components/android/android-logcat-panel.tsx +214 -0
  366. package/src/web/components/android/android-screenshot-download.ts +56 -0
  367. package/src/web/components/android/android-tab.tsx +66 -0
  368. package/src/web/components/android/android-tools-drawer.tsx +76 -0
  369. package/src/web/components/android/android-viewer.tsx +200 -0
  370. package/src/web/components/android/android-ws-url.ts +21 -0
  371. package/src/web/components/android/open-android.ts +21 -0
  372. package/src/web/components/android/use-android-available.ts +29 -0
  373. package/src/web/components/android/use-android-keyboard.ts +111 -0
  374. package/src/web/components/android/use-android-session.ts +277 -0
  375. package/src/web/components/android/use-android-touch.ts +123 -0
  376. package/src/web/components/chat/chat-tab.tsx +28 -2
  377. package/src/web/components/chat/message-input.tsx +3 -5
  378. package/src/web/components/editor/compare-picker.tsx +12 -2
  379. package/src/web/components/explorer/file-tree.tsx +6 -7
  380. package/src/web/components/explorer/use-tree-row-dnd.ts +0 -2
  381. package/src/web/components/floating-window/window-content-registry.ts +8 -8
  382. package/src/web/components/layout/command-palette.tsx +31 -9
  383. package/src/web/components/layout/mobile-drawer.tsx +8 -1
  384. package/src/web/components/layout/nav-section-rail.tsx +8 -1
  385. package/src/web/components/layout/reparenting-tab.tsx +2 -2
  386. package/src/web/components/layout/tab-content.tsx +5 -0
  387. package/src/web/components/layout/tab-pool.tsx +31 -20
  388. package/src/web/components/remote-desktop/use-h264-canvas-decoder.ts +23 -1
  389. package/src/web/components/remote-desktop/use-remote-desktop-connection.ts +64 -6
  390. package/src/web/components/remote-desktop/use-webrtc-canvas-video.ts +255 -0
  391. package/src/web/components/root-error-boundary.tsx +5 -0
  392. package/src/web/components/settings/remote-desktop-settings-section.tsx +176 -0
  393. package/src/web/components/settings/settings-categories.ts +3 -0
  394. package/src/web/components/settings/settings-section-content.tsx +25 -18
  395. package/src/web/hooks/use-chat-prewarm.ts +53 -0
  396. package/src/web/hooks/use-chat.ts +18 -4
  397. package/src/web/hooks/use-file-index-invalidation.ts +7 -5
  398. package/src/web/hooks/use-global-events.ts +12 -1
  399. package/src/web/hooks/use-remote-file-search.ts +39 -0
  400. package/src/web/hooks/use-ui-preload.ts +38 -0
  401. package/src/web/index.html +43 -0
  402. package/src/web/lib/chunk-recovery.ts +5 -1
  403. package/src/web/lib/device-id.ts +39 -0
  404. package/src/web/lib/feature-badges.ts +2 -0
  405. package/src/web/lib/lazy-with-preload.tsx +43 -0
  406. package/src/web/lib/preload-ui.ts +60 -0
  407. package/src/web/lib/score-file-search.ts +27 -14
  408. package/src/web/lib/tab-type-icons.ts +2 -1
  409. package/src/web/lib/trace-boot.ts +8 -0
  410. package/src/web/lib/trace-client.ts +516 -0
  411. package/src/web/main.tsx +12 -0
  412. package/src/web/stores/file-store.ts +124 -18
  413. package/src/web/stores/panel-utils.ts +3 -0
  414. package/src/web/stores/tab-store.ts +2 -1
  415. package/src/web/stores/window-panel-persistence.ts +3 -0
  416. package/vite.config.ts +3 -0
  417. package/dist/web/assets/accounts-settings-section-DEIm-W-D.js +0 -1
  418. package/dist/web/assets/accounts-settings-section-DEIm-W-D.js.br +0 -0
  419. package/dist/web/assets/accounts-settings-section-DEIm-W-D.js.gz +0 -0
  420. package/dist/web/assets/agent-session-sheet-CBMsnl_p.js.br +0 -0
  421. package/dist/web/assets/agent-session-sheet-CBMsnl_p.js.gz +0 -0
  422. package/dist/web/assets/agent-session-window-content-D9C9FA7E.js.br +0 -0
  423. package/dist/web/assets/agent-session-window-content-D9C9FA7E.js.gz +0 -0
  424. package/dist/web/assets/ai-resource-editor-DhUVgDEG.js.br +0 -0
  425. package/dist/web/assets/ai-resource-editor-DhUVgDEG.js.gz +0 -0
  426. package/dist/web/assets/ai-settings-section-CETpSpYd.js.br +0 -0
  427. package/dist/web/assets/ai-settings-section-CETpSpYd.js.gz +0 -0
  428. package/dist/web/assets/appearance-settings-section-BJUiLUb7.js.br +0 -0
  429. package/dist/web/assets/appearance-settings-section-BJUiLUb7.js.gz +0 -0
  430. package/dist/web/assets/apps-panel-1VElRgV3.js.br +0 -0
  431. package/dist/web/assets/apps-panel-1VElRgV3.js.gz +0 -0
  432. package/dist/web/assets/audio-preview-DYkyHu5X.js.br +0 -0
  433. package/dist/web/assets/audio-preview-DYkyHu5X.js.gz +0 -0
  434. package/dist/web/assets/branch-review-tab-DhTMSpSU.js +0 -1
  435. package/dist/web/assets/branch-review-tab-DhTMSpSU.js.br +0 -0
  436. package/dist/web/assets/branch-review-tab-DhTMSpSU.js.gz +0 -0
  437. package/dist/web/assets/chat-tab-Cg3BKugo.js +0 -15
  438. package/dist/web/assets/chat-tab-Cg3BKugo.js.br +0 -0
  439. package/dist/web/assets/chat-tab-Cg3BKugo.js.gz +0 -0
  440. package/dist/web/assets/chat-tab-tbUDK__Y.js +0 -1
  441. package/dist/web/assets/chat-tab-tbUDK__Y.js.br +0 -0
  442. package/dist/web/assets/chat-tab-tbUDK__Y.js.gz +0 -0
  443. package/dist/web/assets/code-editor-6ZiQehbr.js +0 -7
  444. package/dist/web/assets/code-editor-6ZiQehbr.js.br +0 -0
  445. package/dist/web/assets/code-editor-6ZiQehbr.js.gz +0 -0
  446. package/dist/web/assets/codex-reset-credit-button-Fr45FUxi.js.br +0 -0
  447. package/dist/web/assets/codex-reset-credit-button-Fr45FUxi.js.gz +0 -0
  448. package/dist/web/assets/conflict-editor-B-wdjSXI.js.br +0 -0
  449. package/dist/web/assets/conflict-editor-B-wdjSXI.js.gz +0 -0
  450. package/dist/web/assets/csv-preview-B6RodObB.js.br +0 -0
  451. package/dist/web/assets/csv-preview-B6RodObB.js.gz +0 -0
  452. package/dist/web/assets/database-viewer-CdPBUQPY.js.br +0 -0
  453. package/dist/web/assets/database-viewer-CdPBUQPY.js.gz +0 -0
  454. package/dist/web/assets/design-settings-section-BpCpaBwL.js.br +0 -0
  455. package/dist/web/assets/design-settings-section-BpCpaBwL.js.gz +0 -0
  456. package/dist/web/assets/design-skill-suggestion-DkT2E2IV.js.br +0 -0
  457. package/dist/web/assets/design-skill-suggestion-DkT2E2IV.js.gz +0 -0
  458. package/dist/web/assets/design-tab-BZb9eemI.js.br +0 -0
  459. package/dist/web/assets/design-tab-BZb9eemI.js.gz +0 -0
  460. package/dist/web/assets/designs-sidebar-panel-CF4tp6j-.js.br +0 -0
  461. package/dist/web/assets/designs-sidebar-panel-CF4tp6j-.js.gz +0 -0
  462. package/dist/web/assets/diff-viewer-BqEqwSw6.js.br +0 -0
  463. package/dist/web/assets/diff-viewer-BqEqwSw6.js.gz +0 -0
  464. package/dist/web/assets/edit-diff-preview-DD4HayXY.js.br +0 -0
  465. package/dist/web/assets/edit-diff-preview-DD4HayXY.js.gz +0 -0
  466. package/dist/web/assets/editor-language-service-CkA5sEdV.js.br +0 -0
  467. package/dist/web/assets/editor-language-service-CkA5sEdV.js.gz +0 -0
  468. package/dist/web/assets/explorer-body-Ds7oKuz7.js +0 -2
  469. package/dist/web/assets/explorer-body-Ds7oKuz7.js.br +0 -0
  470. package/dist/web/assets/explorer-body-Ds7oKuz7.js.gz +0 -0
  471. package/dist/web/assets/explorer-window-content-CRJ2eMZ4.js.br +0 -0
  472. package/dist/web/assets/explorer-window-content-CRJ2eMZ4.js.gz +0 -0
  473. package/dist/web/assets/extension-manager-section-DwQTdCII.js.br +0 -0
  474. package/dist/web/assets/extension-manager-section-DwQTdCII.js.gz +0 -0
  475. package/dist/web/assets/extension-webview-CMq-VTLu.js.br +0 -0
  476. package/dist/web/assets/extension-webview-CMq-VTLu.js.gz +0 -0
  477. package/dist/web/assets/file-store-DY1_0nzY.js +0 -1
  478. package/dist/web/assets/file-store-DY1_0nzY.js.br +0 -0
  479. package/dist/web/assets/file-store-DY1_0nzY.js.gz +0 -0
  480. package/dist/web/assets/files-settings-section-B2lcyh-6.js.br +0 -0
  481. package/dist/web/assets/files-settings-section-B2lcyh-6.js.gz +0 -0
  482. package/dist/web/assets/general-settings-section-Doepm2sH.js.br +0 -0
  483. package/dist/web/assets/general-settings-section-Doepm2sH.js.gz +0 -0
  484. package/dist/web/assets/git-log-panel-CJakNMDc.js.br +0 -0
  485. package/dist/web/assets/git-log-panel-CJakNMDc.js.gz +0 -0
  486. package/dist/web/assets/glide-data-grid-C_SeOhSq.js.br +0 -0
  487. package/dist/web/assets/glide-data-grid-C_SeOhSq.js.gz +0 -0
  488. package/dist/web/assets/group-chat-tab--by1xCQW.js +0 -1
  489. package/dist/web/assets/group-chat-tab--by1xCQW.js.br +0 -0
  490. package/dist/web/assets/group-chat-tab--by1xCQW.js.gz +0 -0
  491. package/dist/web/assets/index-DhWjx5iR.js +0 -52
  492. package/dist/web/assets/index-DhWjx5iR.js.br +0 -0
  493. package/dist/web/assets/index-DhWjx5iR.js.gz +0 -0
  494. package/dist/web/assets/index-oIvYSKTT.css +0 -1
  495. package/dist/web/assets/index-oIvYSKTT.css.br +0 -0
  496. package/dist/web/assets/index-oIvYSKTT.css.gz +0 -0
  497. package/dist/web/assets/keybindings-store-30LYZU0l.js +0 -1
  498. package/dist/web/assets/keyboard-shortcuts-section-BgZe3QDr.js.br +0 -0
  499. package/dist/web/assets/keyboard-shortcuts-section-BgZe3QDr.js.gz +0 -0
  500. package/dist/web/assets/language-servers-section-CCMzgOaE.js.br +0 -0
  501. package/dist/web/assets/language-servers-section-CCMzgOaE.js.gz +0 -0
  502. package/dist/web/assets/lsp-client-B10suuaZ.js.br +0 -0
  503. package/dist/web/assets/lsp-client-B10suuaZ.js.gz +0 -0
  504. package/dist/web/assets/markdown-renderer-AHHFS3jc.js.br +0 -0
  505. package/dist/web/assets/markdown-renderer-AHHFS3jc.js.gz +0 -0
  506. package/dist/web/assets/markdown-renderer-DxnXtBoj.js +0 -1
  507. package/dist/web/assets/mobile-explorer-sheet-CqCsLWSr.js.br +0 -0
  508. package/dist/web/assets/mobile-explorer-sheet-CqCsLWSr.js.gz +0 -0
  509. package/dist/web/assets/new-design-dialog-B9tgnQXq.js +0 -1
  510. package/dist/web/assets/new-design-dialog-B9tgnQXq.js.br +0 -0
  511. package/dist/web/assets/new-design-dialog-B9tgnQXq.js.gz +0 -0
  512. package/dist/web/assets/notification-store-HUVzO_bp.js +0 -1
  513. package/dist/web/assets/notifications-settings-section-CXgzH_bK.js.br +0 -0
  514. package/dist/web/assets/notifications-settings-section-CXgzH_bK.js.gz +0 -0
  515. package/dist/web/assets/overview-panel-BYB8mgRE.js.br +0 -0
  516. package/dist/web/assets/overview-panel-BYB8mgRE.js.gz +0 -0
  517. package/dist/web/assets/panel-store-CWHPmHwj.js +0 -1
  518. package/dist/web/assets/panel-store-CWHPmHwj.js.br +0 -0
  519. package/dist/web/assets/panel-store-CWHPmHwj.js.gz +0 -0
  520. package/dist/web/assets/performance-panel-Dpuq3g0W.js.br +0 -0
  521. package/dist/web/assets/performance-panel-Dpuq3g0W.js.gz +0 -0
  522. package/dist/web/assets/postgres-viewer-DW0Gkmow.js.br +0 -0
  523. package/dist/web/assets/postgres-viewer-DW0Gkmow.js.gz +0 -0
  524. package/dist/web/assets/ppmbot-settings-section-DFtlGoW6.js.br +0 -0
  525. package/dist/web/assets/ppmbot-settings-section-DFtlGoW6.js.gz +0 -0
  526. package/dist/web/assets/pptx-export-CNyG32Xr.js.br +0 -0
  527. package/dist/web/assets/pptx-export-CNyG32Xr.js.gz +0 -0
  528. package/dist/web/assets/problems-panel-V5zqpuXq.js.br +0 -0
  529. package/dist/web/assets/problems-panel-V5zqpuXq.js.gz +0 -0
  530. package/dist/web/assets/process-table-DAj46HIl.js +0 -1
  531. package/dist/web/assets/process-table-DAj46HIl.js.br +0 -0
  532. package/dist/web/assets/process-table-DAj46HIl.js.gz +0 -0
  533. package/dist/web/assets/proxy-settings-section-B7AVlTfY.js.br +0 -0
  534. package/dist/web/assets/proxy-settings-section-B7AVlTfY.js.gz +0 -0
  535. package/dist/web/assets/query-audit-section-gHmRfWKr.js.br +0 -0
  536. package/dist/web/assets/query-audit-section-gHmRfWKr.js.gz +0 -0
  537. package/dist/web/assets/remote-desktop-clipboard-notice-Cgoznh8L.js +0 -1
  538. package/dist/web/assets/remote-desktop-clipboard-notice-Cgoznh8L.js.br +0 -0
  539. package/dist/web/assets/remote-desktop-clipboard-notice-Cgoznh8L.js.gz +0 -0
  540. package/dist/web/assets/remote-desktop-mobile-sheet-X12QbPhO.js +0 -2
  541. package/dist/web/assets/remote-desktop-mobile-sheet-X12QbPhO.js.br +0 -0
  542. package/dist/web/assets/remote-desktop-mobile-sheet-X12QbPhO.js.gz +0 -0
  543. package/dist/web/assets/remote-desktop-mobile-view-DsSHawSK.js +0 -1
  544. package/dist/web/assets/remote-desktop-mobile-view-DsSHawSK.js.br +0 -0
  545. package/dist/web/assets/remote-desktop-mobile-view-DsSHawSK.js.gz +0 -0
  546. package/dist/web/assets/remote-desktop-readiness-gate-CHiQEd9Q.js +0 -1
  547. package/dist/web/assets/remote-desktop-readiness-gate-CHiQEd9Q.js.br +0 -0
  548. package/dist/web/assets/remote-desktop-readiness-gate-CHiQEd9Q.js.gz +0 -0
  549. package/dist/web/assets/remote-desktop-window-content-BnznIby3.js +0 -1
  550. package/dist/web/assets/remote-desktop-window-content-BnznIby3.js.br +0 -0
  551. package/dist/web/assets/remote-desktop-window-content-BnznIby3.js.gz +0 -0
  552. package/dist/web/assets/schedules-settings-section-sYDAsBMO.js.br +0 -0
  553. package/dist/web/assets/schedules-settings-section-sYDAsBMO.js.gz +0 -0
  554. package/dist/web/assets/send-to-chat-CCdOrKc7.js.br +0 -0
  555. package/dist/web/assets/send-to-chat-CCdOrKc7.js.gz +0 -0
  556. package/dist/web/assets/services-panel-CKa2aP1d.js.br +0 -0
  557. package/dist/web/assets/services-panel-CKa2aP1d.js.gz +0 -0
  558. package/dist/web/assets/settings-body-CEIF8lkl.js +0 -2
  559. package/dist/web/assets/settings-body-CEIF8lkl.js.br +0 -0
  560. package/dist/web/assets/settings-body-CEIF8lkl.js.gz +0 -0
  561. package/dist/web/assets/settings-store-DfuiLq_9.js.br +0 -0
  562. package/dist/web/assets/settings-store-DfuiLq_9.js.gz +0 -0
  563. package/dist/web/assets/settings-tab-Du5AUPni.js +0 -1
  564. package/dist/web/assets/settings-window-content-BTflfLez.js +0 -1
  565. package/dist/web/assets/slash-command-picker-CLevA_Gf.js.br +0 -0
  566. package/dist/web/assets/slash-command-picker-CLevA_Gf.js.gz +0 -0
  567. package/dist/web/assets/sql-query-editor-Db8b0jEr.js.br +0 -0
  568. package/dist/web/assets/sql-query-editor-Db8b0jEr.js.gz +0 -0
  569. package/dist/web/assets/sqlite-viewer-VzYLMqkD.js.br +0 -0
  570. package/dist/web/assets/sqlite-viewer-VzYLMqkD.js.gz +0 -0
  571. package/dist/web/assets/system-monitor-body-BR60W_mG.js.br +0 -0
  572. package/dist/web/assets/system-monitor-body-BR60W_mG.js.gz +0 -0
  573. package/dist/web/assets/system-monitor-tab-BYpantE2.js +0 -1
  574. package/dist/web/assets/tab-host-window-content-BL61SB5m.js.br +0 -0
  575. package/dist/web/assets/tab-host-window-content-BL61SB5m.js.gz +0 -0
  576. package/dist/web/assets/terminal-tab-B4y6at4h.js.br +0 -0
  577. package/dist/web/assets/terminal-tab-B4y6at4h.js.gz +0 -0
  578. package/dist/web/assets/tool-cards-K0r_yxI0.js.br +0 -0
  579. package/dist/web/assets/tool-cards-K0r_yxI0.js.gz +0 -0
  580. package/dist/web/assets/use-inline-blame-BK23icsE.js.br +0 -0
  581. package/dist/web/assets/use-inline-blame-BK23icsE.js.gz +0 -0
  582. package/dist/web/assets/use-lsp-CRdCPCKW.js.br +0 -0
  583. package/dist/web/assets/use-lsp-CRdCPCKW.js.gz +0 -0
  584. package/dist/web/assets/use-process-kill-BWYX03KF.js.br +0 -0
  585. package/dist/web/assets/use-process-kill-BWYX03KF.js.gz +0 -0
  586. package/dist/web/assets/video-preview-DugVkMB7.js +0 -1
  587. package/dist/web/assets/video-preview-DugVkMB7.js.br +0 -0
  588. package/dist/web/assets/video-preview-DugVkMB7.js.gz +0 -0
  589. package/dist/web/assets/voice-settings-section-Ceihggqf.js.br +0 -0
  590. package/dist/web/assets/voice-settings-section-Ceihggqf.js.gz +0 -0
  591. /package/dist/web/assets/{__vite-browser-external-B_XMEguz.js → __vite-browser-external-C5mXParC.js} +0 -0
  592. /package/dist/web/assets/{agent-session-sheet-store-DO682WSg.js → agent-session-sheet-store-_OeezCXB.js} +0 -0
  593. /package/dist/web/assets/{api-settings-CpO8SPk9.js → api-settings-Cc_CpfmC.js} +0 -0
  594. /package/dist/web/assets/{api-settings-CpO8SPk9.js.br → api-settings-Cc_CpfmC.js.br} +0 -0
  595. /package/dist/web/assets/{api-settings-CpO8SPk9.js.gz → api-settings-Cc_CpfmC.js.gz} +0 -0
  596. /package/dist/web/assets/{api-themes-CJipDH_l.js → api-themes-BtMBSjuM.js} +0 -0
  597. /package/dist/web/assets/{can-open-in-ppm-Bw_xiOXX.js → can-open-in-ppm-DeE2-kd5.js} +0 -0
  598. /package/dist/web/assets/{can-open-in-ppm-Bw_xiOXX.js.br → can-open-in-ppm-DeE2-kd5.js.br} +0 -0
  599. /package/dist/web/assets/{can-open-in-ppm-Bw_xiOXX.js.gz → can-open-in-ppm-DeE2-kd5.js.gz} +0 -0
  600. /package/dist/web/assets/{csv-parser-DcRWxcNV.js → csv-parser-CoxPdyLw.js} +0 -0
  601. /package/dist/web/assets/{csv-parser-DcRWxcNV.js.br → csv-parser-CoxPdyLw.js.br} +0 -0
  602. /package/dist/web/assets/{csv-parser-DcRWxcNV.js.gz → csv-parser-CoxPdyLw.js.gz} +0 -0
  603. /package/dist/web/assets/{design-export-client-CHffN3DM.js → design-export-client-BfdZB7xK.js} +0 -0
  604. /package/dist/web/assets/{design-export-client-CHffN3DM.js.br → design-export-client-BfdZB7xK.js.br} +0 -0
  605. /package/dist/web/assets/{design-export-client-CHffN3DM.js.gz → design-export-client-BfdZB7xK.js.gz} +0 -0
  606. /package/dist/web/assets/{design-responsive-dialog-DSCpv6O1.js → design-responsive-dialog-BiYy3ibS.js} +0 -0
  607. /package/dist/web/assets/{design-responsive-dialog-DSCpv6O1.js.br → design-responsive-dialog-BiYy3ibS.js.br} +0 -0
  608. /package/dist/web/assets/{design-responsive-dialog-DSCpv6O1.js.gz → design-responsive-dialog-BiYy3ibS.js.gz} +0 -0
  609. /package/dist/web/assets/{design-system-status-label-B_0I_3a8.js → design-system-status-label-ekiLyjKn.js} +0 -0
  610. /package/dist/web/assets/{docx-preview-B3eJyY2y.js → docx-preview-Dt6RQpfA.js} +0 -0
  611. /package/dist/web/assets/{docx-preview-B3eJyY2y.js.br → docx-preview-Dt6RQpfA.js.br} +0 -0
  612. /package/dist/web/assets/{docx-preview-B3eJyY2y.js.gz → docx-preview-Dt6RQpfA.js.gz} +0 -0
  613. /package/dist/web/assets/{editor-font-BNwo7zo5.js → editor-font-CBszn6vt.js} +0 -0
  614. /package/dist/web/assets/{format-bytes-CRZfxO2J.js → format-bytes-FQmpZ25A.js} +0 -0
  615. /package/dist/web/assets/{image-gallery-DC3gRAqk.js → image-gallery-B16hO6Ab.js} +0 -0
  616. /package/dist/web/assets/{image-preview-geometry-DN3DZQp0.js → image-preview-geometry-D4Ihz4UV.js} +0 -0
  617. /package/dist/web/assets/{lib-B9k5tn9s.js → lib-6APiJkU3.js} +0 -0
  618. /package/dist/web/assets/{lib-B9k5tn9s.js.br → lib-6APiJkU3.js.br} +0 -0
  619. /package/dist/web/assets/{lib-B9k5tn9s.js.gz → lib-6APiJkU3.js.gz} +0 -0
  620. /package/dist/web/assets/{libesm-5f7T4AHA.js → libesm-5wREk7JN.js} +0 -0
  621. /package/dist/web/assets/{libesm-5f7T4AHA.js.br → libesm-5wREk7JN.js.br} +0 -0
  622. /package/dist/web/assets/{libesm-5f7T4AHA.js.gz → libesm-5wREk7JN.js.gz} +0 -0
  623. /package/dist/web/assets/{media-url-CCGOIxzS.js → media-url-CrT-qulZ.js} +0 -0
  624. /package/dist/web/assets/{metric-chart-canvas-CjFbZuhk.js → metric-chart-canvas-D7f-LQ8x.js} +0 -0
  625. /package/dist/web/assets/{metric-chart-canvas-CjFbZuhk.js.br → metric-chart-canvas-D7f-LQ8x.js.br} +0 -0
  626. /package/dist/web/assets/{metric-chart-canvas-CjFbZuhk.js.gz → metric-chart-canvas-D7f-LQ8x.js.gz} +0 -0
  627. /package/dist/web/assets/{monaco-dotenv-language-Bwq3gQsi.js → monaco-dotenv-language-DbSss7YR.js} +0 -0
  628. /package/dist/web/assets/{onboarding-entry-CuH1Kqwu.js → onboarding-entry-CGFdGLLP.js} +0 -0
  629. /package/dist/web/assets/{onboarding-entry-CuH1Kqwu.js.br → onboarding-entry-CGFdGLLP.js.br} +0 -0
  630. /package/dist/web/assets/{onboarding-entry-CuH1Kqwu.js.gz → onboarding-entry-CGFdGLLP.js.gz} +0 -0
  631. /package/dist/web/assets/{pdf-preview-X8bdpfE9.js → pdf-preview-B8A4T-ES.js} +0 -0
  632. /package/dist/web/assets/{pdf-preview-X8bdpfE9.js.br → pdf-preview-B8A4T-ES.js.br} +0 -0
  633. /package/dist/web/assets/{pdf-preview-X8bdpfE9.js.gz → pdf-preview-B8A4T-ES.js.gz} +0 -0
  634. /package/dist/web/assets/{separator-DMu7VFQa.js → separator-dHj3Km--.js} +0 -0
  635. /package/dist/web/assets/{sortable-header-CipIP7aH.js → sortable-header-BOa8o7NJ.js} +0 -0
  636. /package/dist/web/assets/{sortable-header-CipIP7aH.js.br → sortable-header-BOa8o7NJ.js.br} +0 -0
  637. /package/dist/web/assets/{sortable-header-CipIP7aH.js.gz → sortable-header-BOa8o7NJ.js.gz} +0 -0
  638. /package/dist/web/assets/{use-blob-url-DjuRQWnR.js → use-blob-url-BC69n15x.js} +0 -0
  639. /package/dist/web/assets/{vendor-xterm-Be4L1NHd.js → vendor-xterm-CfasyE0m.js} +0 -0
  640. /package/dist/web/assets/{vendor-xterm-Be4L1NHd.js.br → vendor-xterm-CfasyE0m.js.br} +0 -0
  641. /package/dist/web/assets/{vendor-xterm-Be4L1NHd.js.gz → vendor-xterm-CfasyE0m.js.gz} +0 -0
@@ -1,9 +1,9 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/markdown-renderer-DxnXtBoj.js","assets/vendor-ui-P9Ym7hCv.js","assets/rolldown-runtime-C5c2KzVm.js","assets/vendor-markdown-QKPNiWEd.js","assets/markdown-renderer-AHHFS3jc.js","assets/index-DhWjx5iR.js","assets/preload-helper-BEFjQwLd.js","assets/button-DeAyLH9U.js","assets/utils-btZ8C8-R.js","assets/createLucideIcon-DBXq3G0e.js","assets/api-client-F5Zi1sR0.js","assets/react-CzUPVyyG.js","assets/panel-store-CWHPmHwj.js","assets/session-list-sync-triggers-ATvz-1g3.js","assets/project-store-CCimwgGF.js","assets/window-store-vo1N70nK.js","assets/settings-store-DfuiLq_9.js","assets/file-store-DY1_0nzY.js","assets/window-pip-registry-mDgwpAwP.js","assets/onboarding-quick-orientation-DPHYFMbA.js","assets/dialog-Bocc0Fgb.js","assets/portal-container-context-NFSuymMu.js","assets/icons-CO_II6D-.js","assets/use-is-mobile-BClDZJP5.js","assets/format-file-meta-Drxf2J-k.js","assets/fs-api-IX9SHt5k.js","assets/context-menu-7OX80HDB.js","assets/input-CG8PS8mS.js","assets/mobile-bottom-sheet-D4UyOatB.js","assets/use-visual-viewport-BGpcMnIx.js","assets/scroll-area-sjOeAfoD.js","assets/chat-preparation-cache-BUCR58h4.js","assets/file-icons-CK0J4QSy.js","assets/format-date-BMtvCeb9.js","assets/git-repo-store-B_u5RzIM.js","assets/ws-auth-Ytui7dXP.js","assets/tab-store-CbPh8CAX.js","assets/apply-theme-Cc_cmrD5.js","assets/resolve-theme-STMsK2vc.js","assets/index-oIvYSKTT.css","assets/image-gallery-DC3gRAqk.js","assets/run-in-terminal-DKBcEGVu.js","assets/edit-diff-preview-DD4HayXY.js","assets/libesm-5f7T4AHA.js"])))=>i.map(i=>d[i]);
2
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import{E as r,Ft as i,J as a,K as o,O as s,V as c,Vr as l,Yr as u,Z as d,_t as f,br as p,ct as m,dr as h,et as g,gt as _,j as v,kr as y,ln as b,mt as x,n as S,on as C,qt as w,u as T,un as E,ur as D,v as O}from"./icons-CO_II6D-.js";import{O as k}from"./api-client-F5Zi1sR0.js";import{t as ee}from"./react-CzUPVyyG.js";import{t as A}from"./preload-helper-BEFjQwLd.js";import{n as j,t as M}from"./utils-btZ8C8-R.js";import{s as N,t as P}from"./window-store-vo1N70nK.js";import{t as F}from"./tab-store-CbPh8CAX.js";import{n as I}from"./use-is-mobile-BClDZJP5.js";import{Qt as te,Rn as ne,r as re,vn as ie}from"./index-DhWjx5iR.js";import{a as ae,i as oe,n as se,r as ce,t as le}from"./image-preview-geometry-DN3DZQp0.js";import{t as L}from"./agent-session-sheet-store-DO682WSg.js";import{t as ue}from"./libesm-5f7T4AHA.js";import{t as de}from"./use-blob-url-DjuRQWnR.js";import{r as fe,t as pe}from"./image-gallery-DC3gRAqk.js";var me=new Set([`Write`,`Edit`,`MultiEdit`,`NotebookEdit`]),he={create:3,write:2,notebook:2,edit:1};function R(e){return typeof e==`string`?e:``}function ge(e,t){let n=0,r=0;for(let i of ue(e,t))i.added?n+=i.count??0:i.removed&&(r+=i.count??0);return{added:n,removed:r}}function _e(e){return e&&/created successfully/i.test(e)?`create`:`write`}function ve(e,t,n){switch(e){case`Write`:{let e=R(t.file_path);return e?{filePath:e,op:_e(n),fragments:[{oldStr:``,newStr:R(t.content)}]}:null}case`Edit`:{let e=R(t.file_path);return e?{filePath:e,op:`edit`,fragments:[{oldStr:R(t.old_string),newStr:R(t.new_string)}]}:null}case`MultiEdit`:{let e=R(t.file_path);if(!e||!Array.isArray(t.edits))return null;let n=t.edits.filter(e=>!!e&&typeof e==`object`).map(e=>({oldStr:R(e.old_string),newStr:R(e.new_string)}));return n.length===0?null:{filePath:e,op:`edit`,fragments:n}}case`NotebookEdit`:{let e=R(t.notebook_path)||R(t.file_path);return e?{filePath:e,op:`notebook`,fragments:[{oldStr:``,newStr:R(t.new_source)}]}:null}default:return null}}function ye(e,t){if(e){for(let n of e)if(n.type===`tool_result`&&n.toolUseId&&t.set(n.toolUseId,n.output??``),n.type===`tool_use`){let e=n.result;n.toolUseId&&e?.output!=null&&!t.has(n.toolUseId)&&t.set(n.toolUseId,e.output),ye(n.children,t)}}}function be(e,t,n,r){if(e)for(let i of e){if(i.type!==`tool_use`||(i.children?.length&&be(i.children,!0,n,r),!me.has(i.tool)))continue;let e=i.input&&typeof i.input==`object`?i.input:null;if(!e)continue;let a=ve(i.tool,e,i.toolUseId?r.get(i.toolUseId):void 0);if(!a)continue;let o=n.get(a.filePath);o||(o={filePath:a.filePath,op:a.op,editCount:0,linesAdded:0,linesRemoved:0,edits:[],viaSubagent:!1},n.set(a.filePath,o)),he[a.op]>he[o.op]&&(o.op=a.op),t&&(o.viaSubagent=!0),a.fragments.forEach((e,n)=>{let{added:r,removed:a}=ge(e.oldStr,e.newStr);o.linesAdded+=r,o.linesRemoved+=a,o.editCount+=1,o.edits.push({...e,toolUseId:i.toolUseId,editIndex:n,editRef:i.toolUseId?`${i.toolUseId}-${n}`:void 0,viaSubagent:t})})}}function xe(e){let t=new Map;for(let n of e)ye(n.events,t);let n=new Map;for(let r of e)be(r.events,!1,n,t);return[...n.values()]}function Se(e,t){let n=[];for(let r=t;r>=0&&e[r]?.role===`assistant`;r--)n.unshift(e[r]);return n}function z(e){return typeof e==`string`?e:``}function B(e){return`${e} step${e===1?``:`s`}`}function V(e,t){return e.length>t?e.slice(0,t)+`…`:e}function Ce(e){if(e.type!==`tool_use`)return``;let t=e.tool,n=e.input&&typeof e.input==`object`?e.input:{};switch(t){case`Read`:case`Write`:case`Edit`:case`MultiEdit`:case`NotebookEdit`:{let e=z(n.notebook_path||n.file_path);return e?`${t} ${M(e)}`:t}case`Bash`:case`PowerShell`:return V(n.description?z(n.description):z(n.command),60)||t;case`Glob`:return`Glob ${z(n.pattern)}`;case`Grep`:return`Grep ${V(z(n.pattern),40)}`;case`WebSearch`:return`Search ${V(z(n.query),50)}`;case`WebFetch`:return`Fetch ${V(z(n.url),50)}`;case`ToolSearch`:return`Search ${V(z(n.query),50)}`;case`Agent`:case`Task`:{let e=typeof n.name==`string`&&n.name.trim()?n.name.trim():null,r=V(z(n.description||n.prompt),44);return e?r?`${e} · ${r}`:e:r||t}case`SendMessage`:return`Message ${V(z(n.to),30)}`.trim();case`TodoWrite`:return`Todo update`;case`AskUserQuestion`:return`Question`;case`ScheduleWakeup`:return`Scheduled wakeup`;case`TaskCreate`:return V(z(n.subject),60)||t;case`TaskUpdate`:return`Task #${z(n.taskId)} → ${z(n.status)}`;case`TaskStop`:return`Task #${z(n.taskId)} stopped`;case`ImageGen`:return`Image generation`;default:return t}}function we(e){return e===`Agent`||e===`Task`||me.has(e)}function H(e){let t=[],n=[],r=new Set,i;return(e??[]).forEach((e,a)=>{if(e.type===`tool_use`){t.push(e.toolUseId??`idx:${a}`);let o=Ce(e);if(o&&(i=o),we(e.tool)){if(e.tool===`Agent`||e.tool===`Task`){let t=H(e.children);n.push({...e,children:t.kept,stepIds:t.stepIds,stepCount:t.stepIds.length,lastStep:t.lastStep})}else n.push(e);e.toolUseId&&r.add(e.toolUseId)}}else e.type===`tool_result`&&e.toolUseId&&r.has(e.toolUseId)&&n.push(e)}),{stepIds:t,lastStep:i,kept:n}}function Te(e){let t=e.stepCount??e.stepIds?.length??H(e.children).stepIds.length;for(let n of e.children??[])n.type===`tool_use`&&(n.tool===`Agent`||n.tool===`Task`)&&(t+=Te(n));return t}function Ee(e){let t=Te(e);if(e.stepCount!=null)return{stepCount:t,lastStep:e.lastStep};let{lastStep:n}=H(e.children);return{stepCount:t,lastStep:n}}function De(e){try{return JSON.stringify(e).length}catch{return 0}}function Oe(e){let t=e.reduce((e,t)=>e+De(t),0),n=0;for(;t>262144&&n<e.length-1;)t-=De(e[n]),n++;return n>0?e.slice(n):e}function ke(e,t,n){let r=t.toolUseId;if(r){let i=e.findIndex(e=>e.type===t.type&&e.toolUseId===r);if(i!==-1){let r=e[i].arrivalSeq,a=[...e];return a[i]=n==null?t:{...t,arrivalSeq:r},a}}let i=n==null?t:{...t,arrivalSeq:n},a=[...e,i];return Oe(a.length>200?a.slice(a.length-200):a)}function Ae(e,t){let n=e=>e.map((e,t)=>({ev:e,seq:e.arrivalSeq??t}));return[...n(e),...n(t)].sort((e,t)=>e.seq-t.seq).map(e=>e.ev)}function je(e,t){if(e.type!==`tool_use`)return e;let n=e.stepIds,r=e.lastStep;if(t.type===`tool_use`){let e=t.toolUseId;(!e||!n?.includes(e))&&(n=[...n??[],e??`idx:${n?.length??0}`]);let i=Ce(t);i&&(r=i)}let i=e.childSeq??0,a=e=>{let n=t.toolUseId,r=n?e.findIndex(e=>e.type===t.type&&e.toolUseId===n):-1;if(r!==-1){let n=e[r].arrivalSeq,i=[...e];return i[r]={...t,arrivalSeq:n},i}return[...e,{...t,arrivalSeq:i}]},o=e.children??[],s=e.recentChildren??[],c=t.type===`tool_use`&&we(t.tool),l=e=>!!e&&o.some(t=>t.type===`tool_use`&&t.toolUseId===e),u=o,d=s;return c||t.type===`tool_result`&&l(t.toolUseId)?u=a(o):d=ke(s,t,i),{...e,children:u,recentChildren:d,stepIds:n,stepCount:n?.length,lastStep:r,childSeq:i+1}}function Me(e){return e&&e.map(e=>{if(e.type!==`tool_use`||e.tool!==`Agent`&&e.tool!==`Task`||!e.transcriptAvailable)return e;let{stepIds:t,lastStep:n,kept:r}=H(e.children);return{...e,children:r,stepIds:t,stepCount:t.length,lastStep:n}})}function U(e,t){return t.kind===`card`?`${e}:${t.cardId}`:`${e}:${t.teamName}:${t.memberName}`}var W=ee(()=>({entries:{}}));function Ne(e,t){W.setState(n=>({entries:{...n.entries,[e]:t}}))}function Pe(){let e=new Set;for(let t of Object.values(P.getState().windows)){if(t.kind!==`agent-session`)continue;let n=t.payload;typeof n?.sessionId==`string`&&n.source&&e.add(U(n.sessionId,n.source))}let t=L.getState().payload;return t&&e.add(U(t.sessionId,t.source)),e}function Fe(){let e=Pe();W.setState(t=>{let n={},r=!1;for(let[i,a]of Object.entries(t.entries))e.has(i)?n[i]=a:r=!0;return r?{entries:n}:t})}P.subscribe(Fe),L.subscribe(Fe);var G=e(t(),1),K=n(),Ie=(0,G.lazy)(()=>A(()=>import(`./markdown-renderer-DxnXtBoj.js`).then(e=>({default:e.MarkdownRenderer})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41])));function q({content:e,maxHeight:t=`max-h-48`}){return(0,K.jsx)(G.Suspense,{fallback:(0,K.jsx)(`div`,{className:`animate-pulse h-4 bg-muted rounded`}),children:(0,K.jsx)(Ie,{content:e,className:`text-text-secondary overflow-auto ${t}`})})}var Le={task_assignment:{label:`task`,className:`bg-primary/20 text-primary`},idle_notification:{label:`idle`,className:`bg-warning/20 text-warning`},completion:{label:`done`,className:`bg-success/20 text-success`},shutdown_request:{label:`shutdown`,className:`bg-error/20 text-error`},shutdown_approved:{label:`shutdown ✓`,className:`bg-text-3/20 text-text-3`},shutdown_response:{label:`shutdown reply`,className:`bg-text-3/20 text-text-3`},plan_approval_request:{label:`plan review`,className:`bg-primary/20 text-primary`},plan_approval_response:{label:`plan reply`,className:`bg-primary/20 text-primary`}},Re=new Set([`to`,`message`,`summary`,`notify_when_idle`,`recipient`,`content`,`type`]),J=e=>typeof e==`string`?e:e==null?``:String(e);function ze(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e;return typeof t.type!=`string`||!t.type?null:{type:t.type,request_id:typeof t.request_id==`string`?t.request_id:void 0,approve:typeof t.approve==`boolean`?t.approve:void 0,reason:typeof t.reason==`string`?t.reason:void 0,feedback:typeof t.feedback==`string`?t.feedback:void 0}}function Be(e){let t=e.trim();if(!t.startsWith(`{`))return null;try{return ze(JSON.parse(t))}catch{return null}}function Ve(e){let t=J(e.to)||J(e.recipient),n=e.message??e.content,r=ze(n)??Be(J(n)),i=r?``:J(n),a=J(e.type),o=r?.type||(a&&a!==`message`?a:`message`),s=J(e.summary).trim(),c=Object.entries(e).filter(([e])=>!Re.has(e)).map(([e,t])=>({key:e,value:typeof t==`string`?t:JSON.stringify(t)??``}));return{to:t,summary:s||void 0,text:i,firstLine:i.split(`
3
- `).map(e=>e.trim()).find(e=>e.length>0)??``,protocol:r??void 0,kind:o,notifyWhenIdle:e.notify_when_idle===!0,extras:c}}function He(e){if(!e)return null;let t;try{t=JSON.parse(e)}catch{return null}if(Array.isArray(t)){let e=J(t.find(e=>e&&typeof e==`object`&&e.type===`text`)?.text);if(!e)return null;try{t=JSON.parse(e)}catch{return null}}if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t;if(typeof n.success!=`boolean`)return null;let r=n.pin&&typeof n.pin==`object`?n.pin:null;return{ok:n.success,detail:J(n.message)||J(n.error)||void 0,peer:r&&J(r.name)||void 0,ref:r&&J(r.ref)||void 0}}function Ue({kind:e}){if(e===`message`)return null;let t=Le[e];return(0,K.jsx)(`span`,{className:`inline-block rounded px-1.5 py-0.5 text-[10px] ${t?.className??`bg-panel-2 text-text-3`}`,children:t?.label??e})}function We({name:e,input:t}){let n=Ve(t),r=n.summary||n.firstLine||(n.protocol?n.kind:``),i=r.length>72?`${r.slice(0,72)}…`:r;return(0,K.jsxs)(K.Fragment,{children:[e,` `,(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[(0,K.jsx)(T,{className:`size-3 inline`}),` `,n.to||`unknown`,i?` · ${i}`:``]}),n.notifyWhenIdle&&(0,K.jsx)(a,{className:`size-3 inline ml-1 text-text-3`})]})}function Ge({input:e}){let t=Ve(e);return(0,K.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,K.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,K.jsx)(`span`,{className:`text-text-subtle`,children:`To`}),(0,K.jsx)(`span`,{className:`font-medium text-text-primary`,children:t.to||`unknown`}),(0,K.jsx)(Ue,{kind:t.kind}),t.notifyWhenIdle&&(0,K.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] bg-panel-2 text-text-3`,children:[(0,K.jsx)(a,{className:`size-3`}),` notify when idle`]})]}),!!t.text&&(0,K.jsx)(q,{content:t.text,maxHeight:`max-h-40`}),t.protocol&&(0,K.jsxs)(`div`,{className:`space-y-0.5 text-text-secondary`,children:[t.protocol.approve!=null&&(0,K.jsxs)(`p`,{children:[t.protocol.approve?`Approved`:`Rejected`,t.protocol.request_id?(0,K.jsxs)(`span`,{className:`text-text-subtle font-mono`,children:[` · `,t.protocol.request_id]}):null]}),!!t.protocol.reason&&(0,K.jsx)(`p`,{className:`text-text-subtle`,children:t.protocol.reason}),!!t.protocol.feedback&&(0,K.jsx)(`p`,{className:`text-text-subtle`,children:t.protocol.feedback})]}),t.extras.length>0&&(0,K.jsx)(`div`,{className:`space-y-0.5`,children:t.extras.map(e=>(0,K.jsxs)(`p`,{className:`text-text-subtle`,children:[(0,K.jsx)(`span`,{className:`font-mono`,children:e.key}),`: `,e.value]},e.key))})]})}function Ke({output:e}){let[t,n]=(0,G.useState)(!1),i=He(e);return i?(0,K.jsxs)(`div`,{className:`border-t border-border pt-1.5 space-y-1`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:[i.ok?(0,K.jsx)(r,{className:`size-3 text-success shrink-0`}):(0,K.jsx)(u,{className:`size-3 text-error shrink-0`}),(0,K.jsx)(`span`,{className:i.ok?`text-success`:`text-error`,children:i.ok?`Delivered`:`Not delivered`}),!!i.detail&&(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[`· `,i.detail]}),!!i.ref&&(0,K.jsxs)(`span`,{className:`text-text-3 font-mono text-[10px]`,children:[`[`,i.ref,`]`]})]}),(0,K.jsxs)(`button`,{type:`button`,onClick:()=>n(!t),className:`flex items-center gap-1 text-[10px] text-text-subtle hover:text-text-secondary transition-colors`,children:[(0,K.jsx)(d,{className:`size-3`}),t?`Hide`:`Show`,` raw`]}),t&&(0,K.jsx)(`pre`,{className:`overflow-x-auto text-text-subtle font-mono max-h-40 whitespace-pre-wrap break-all text-[10px]`,children:e})]}):null}var qe=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.webp`,`.bmp`,`.avif`,`.ico`]);function Je(e){let t=e.lastIndexOf(`.`);return t===-1?!1:qe.has(e.slice(t).toLowerCase())}var Ye=/^\[image(?: · [\d.]+(?:B|KB|MB))?\]$/;function Xe(e){if(!e.startsWith(`[`))return!1;let t;try{t=JSON.parse(e)}catch{return!1}return Array.isArray(t)?t.some(e=>{let t=e;return t?.type===`text`&&typeof t.text==`string`&&Ye.test(t.text)}):!1}var Ze=`Async agent launched successfully`;function Qe(e){return!!e&&e.includes(Ze)}var $e=`text-[var(--img-meta-label)] @max-[470px]:hidden`,et=[`60%`,`45%`,`80%`];function tt({aspect:e,actions:t}){return(0,K.jsxs)(`div`,{className:`grid grid-cols-[132px_1fr] items-start gap-[14px] overflow-hidden rounded-lg border border-border bg-panel p-[14px] @max-[470px]:grid-cols-[64px_1fr] @max-[470px]:gap-[11px] @max-[470px]:p-[11px]`,children:[(0,K.jsx)(`div`,{className:`img-skeleton rounded-lg`,style:{aspectRatio:e}}),(0,K.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-[9px]`,children:[(0,K.jsx)(`div`,{className:`img-skeleton h-[13px] w-2/5 rounded @max-[470px]:hidden`}),(0,K.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-[14px] gap-y-[4px] font-mono text-[11.5px] @max-[470px]:grid-cols-[1fr]`,children:[`dimensions`,`size`,`path`].map((e,t)=>(0,K.jsxs)(G.Fragment,{children:[(0,K.jsx)(`dt`,{className:$e,children:e}),(0,K.jsx)(`dd`,{className:`flex items-center`,children:(0,K.jsx)(`span`,{className:`img-skeleton h-[11px] rounded`,style:{width:et[t]}})})]},e))}),t]})]})}function nt({code:e,onRetry:t}){return(0,K.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg border border-border bg-panel px-2.5 py-2 font-mono text-[12px] text-text-2`,children:[(0,K.jsx)(S,{className:`size-3 shrink-0`}),(0,K.jsxs)(`span`,{className:`truncate`,children:[`preview unavailable`,e?` · ${e}`:``]}),(0,K.jsx)(`button`,{type:`button`,onClick:t,className:`ml-auto shrink-0 text-accent`,children:`retry`})]})}var rt=4/5,Y=`text-[var(--img-meta-label)] @max-[470px]:hidden`,X=`truncate text-text @max-[470px]:text-text-2`,Z=`h-[30px] @max-[470px]:h-[36px] shrink-0 rounded-[7px] px-[9px] font-mono text-[11.5px] text-text-2 bg-[var(--img-ghost)] border border-[var(--img-ghost-border)] backdrop-blur-[6px] transition-colors can-hover:hover:bg-[var(--img-ghost-hover)] can-hover:hover:border-[var(--img-ghost-hover-border)] can-hover:hover:text-text`;function it({filePath:e,projectName:t}){let[n,r]=(0,G.useState)(0),{blobUrl:i,blob:a,error:o,errorCode:s}=de(e,t,void 0,n),[c,l]=(0,G.useState)(()=>oe(e)),[u,d]=(0,G.useState)(!1),[f,p]=(0,G.useState)(!1),m=re(e=>e.open),{openTab:h}=F(ie(e=>({openTab:e.openTab}))),g=M(e);(0,G.useEffect)(()=>{if(!f)return;let e=setTimeout(()=>p(!1),1200);return()=>clearTimeout(e)},[f]);let _=t=>{let n={w:t.naturalWidth,h:t.naturalHeight};if(!n.w||!n.h)return d(!0);le(e,n),l(n)},v=()=>{d(!1),r(e=>e+1)};if(o||u)return(0,K.jsx)(`div`,{className:`border-t border-border pt-1.5`,children:(0,K.jsx)(nt,{code:u?void 0:s??void 0,onRetry:v})});let y=c?ae(c,132):null,b=y?.aspect??rt,x=(0,K.jsxs)(`div`,{className:`flex flex-wrap gap-[6px]`,children:[(0,K.jsxs)(`button`,{type:`button`,onClick:S,className:Z,children:[(0,K.jsx)(`span`,{className:`@max-[470px]:hidden`,children:`open in editor`}),(0,K.jsx)(`span`,{className:`hidden @max-[470px]:inline`,children:`open`})]}),(0,K.jsx)(`button`,{type:`button`,onClick:C,className:Z,children:f?`copied`:`copy path`}),(0,K.jsx)(`button`,{type:`button`,onClick:w,className:Z,children:`full size`})]});function S(){t&&h({type:`editor`,title:g,metadata:{filePath:e,projectName:t},projectId:t,closable:!0})}function C(){ne(e).then(()=>p(!0))}function w(e){i&&m(i,g,fe(e.currentTarget))}if(!i||!y||!c)return(0,K.jsxs)(`div`,{className:`@container border-t border-border pt-1.5`,children:[i&&(0,K.jsx)(`img`,{src:i,alt:``,className:`hidden`,onLoad:e=>_(e.currentTarget),onError:()=>d(!0)}),(0,K.jsx)(tt,{aspect:b,actions:x})]});let T=(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`dt`,{className:Y,children:`dimensions`}),(0,K.jsx)(`dd`,{className:X,children:se(c,y.fit)}),a&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`dt`,{className:Y,children:`size`}),(0,K.jsxs)(`dd`,{className:X,children:[ce(a.size),a.type?` · ${a.type}`:``]})]}),(0,K.jsx)(`dt`,{className:Y,children:`path`}),(0,K.jsx)(`dd`,{dir:`rtl`,className:`${X} text-left`,children:e})]}),E=(0,K.jsx)(`img`,{src:i,alt:g,[pe]:``,onLoad:e=>_(e.currentTarget),onError:()=>d(!0),className:y.fit===`cover`?`size-full object-cover`:y.fit===`contain`?`size-full object-contain`:`max-h-full max-w-full`});return(0,K.jsx)(`div`,{className:`@container border-t border-border pt-1.5`,children:(0,K.jsxs)(`div`,{className:`relative overflow-hidden rounded-lg border border-border p-[14px] @max-[470px]:p-[11px]`,children:[(0,K.jsx)(`img`,{"aria-hidden":`true`,alt:``,src:i,className:`absolute inset-0 size-full object-cover`,style:{filter:`var(--img-backdrop)`,transform:`scale(1.3)`}}),(0,K.jsx)(`div`,{className:`absolute inset-0`,style:{background:`var(--img-veil)`}}),y.variant===`band`?(0,K.jsxs)(`div`,{className:`relative grid gap-[11px]`,children:[(0,K.jsx)(`button`,{type:`button`,onClick:w,title:`Open ${g}`,className:`img-checkerboard w-full cursor-zoom-in overflow-hidden rounded-lg border border-[var(--img-plate-border)]`,style:{aspectRatio:y.aspect},children:E}),(0,K.jsx)(`dl`,{className:`grid grid-cols-[auto_auto_1fr] gap-x-[18px] font-mono text-[11.5px] [&_dt]:hidden`,children:T}),x]}):(0,K.jsxs)(`div`,{className:`relative grid grid-cols-[132px_1fr] items-start gap-[14px] @max-[470px]:grid-cols-[64px_1fr] @max-[470px]:gap-[11px]`,children:[(0,K.jsx)(`button`,{type:`button`,onClick:w,title:`Open ${g}`,className:`cursor-zoom-in overflow-hidden rounded-lg border border-[var(--img-plate-border)] bg-[var(--img-plate)] shadow-[var(--img-plate-shadow)] ${y.fit===`cover`?``:`img-checkerboard flex items-center justify-center`}`,style:{aspectRatio:y.aspect},children:E}),(0,K.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-[9px]`,children:[(0,K.jsx)(`p`,{className:`truncate text-[13px] font-semibold text-text @max-[470px]:hidden`,children:g}),(0,K.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-[14px] gap-y-[4px] font-mono text-[11.5px] @max-[470px]:grid-cols-[1fr]`,children:T}),x]})]})]})})}function at({handle:e,description:t,stepCount:n,lastStep:i,status:a,bgRunning:o,onOpen:s}){let c=te(),d=a===`error`?u:a===`done`?r:E,f=a===`error`?`text-error`:a===`done`?`text-success`:`text-primary animate-spin`;return(0,K.jsxs)(`button`,{type:`button`,onClick:s,className:j(`flex w-full items-center gap-2.5 rounded-[11px] border border-border bg-panel px-2.5 text-left text-xs`,`transition-colors hover:bg-panel-2/40`,c?`min-h-[44px] py-2`:`py-2`),title:e?`Open ${e}'s session`:`Open agent session`,children:[(0,K.jsx)(`span`,{className:j(`inline-flex items-center justify-center size-6 rounded-[7px] shrink-0`,e?`bg-accent-2/15 text-accent-2`:`bg-accent-wash text-primary`),children:e?(0,K.jsx)(l,{className:`size-3.5`}):(0,K.jsx)(O,{className:`size-3.5`})}),(0,K.jsxs)(`span`,{className:`min-w-0 flex-1 truncate`,children:[e?(0,K.jsx)(`span`,{className:`font-medium text-text-primary`,children:e}):(0,K.jsx)(`span`,{className:`font-medium text-text`,children:t||`Agent`}),!!i&&(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[` · `,i]})]}),(0,K.jsxs)(`span`,{className:`ml-auto flex items-center gap-2 shrink-0 text-text-3`,children:[o&&(0,K.jsx)(`span`,{className:`text-[10px] text-primary`,children:`running…`}),n>0&&(0,K.jsx)(`span`,{className:`font-mono text-[10px]`,children:B(n)}),(0,K.jsx)(d,{className:j(`size-3.5`,f)}),(0,K.jsx)(v,{className:`size-3`})]})]})}function ot(e,t){let n=e;return typeof n?.sessionId!=`string`||!n.source?!1:U(n.sessionId,n.source)===U(t.sessionId,t.source)}function st(){let e=I(),t=L(e=>e.open);return(0,G.useCallback)((n,r)=>{if(!n.sessionId)return;if(r&&Ne(U(n.sessionId,n.source),r),e){t(n);return}let i=P.getState(),a=n,o=Object.values(i.windows),s=o.find(e=>e.kind===`agent-session`&&ot(e.payload,n));if(s){i.focus(s.id);return}if(o.length>=8){let e=o.filter(e=>e.kind===`agent-session`).sort((e,t)=>e.rank-t.rank);if(e.length===0){k.error(`Too many windows open`,{description:`Close one to open this session.`});return}i.close(e[0].id)}let c=N(Object.values(P.getState().windows).map(e=>e.rect),P.getState().bounds);P.getState().open(`agent-session`,a,c)},[e,t])}function ct(e){return e===`codex`?`codex`:`claude`}var lt=(0,G.createContext)(null);function ut(){return(0,G.useContext)(lt)}function dt({value:e,children:t}){return(0,G.createElement)(lt.Provider,{value:e},t)}function Q(e,t){if(e!==`Agent`&&e!==`Task`)return null;let n=t.name;return typeof n==`string`&&n.trim()?n.trim():null}function ft(e,t,n=!1){if(t&&(e===`Bash`||e===`PowerShell`))return{Icon:y,cls:`bg-error/15 text-error`};if(n)return{Icon:l,cls:`bg-accent-2/15 text-accent-2`};switch(e){case`Read`:case`Glob`:case`LS`:return{Icon:f,cls:`bg-accent-wash text-primary`};case`Grep`:case`Search`:case`WebSearch`:case`ToolSearch`:return{Icon:D,cls:`bg-accent-wash text-primary`};case`WebFetch`:case`Fetch`:return{Icon:i,cls:`bg-info/15 text-info`};case`Edit`:case`MultiEdit`:case`NotebookEdit`:return{Icon:x,cls:`bg-accent-2/15 text-accent-2`};case`Write`:return{Icon:_,cls:`bg-success/15 text-success`};case`Bash`:case`PowerShell`:return{Icon:y,cls:`bg-panel-2 text-text-2`};case`TodoWrite`:return{Icon:C,cls:`bg-warning/15 text-warning`};case`Task`:case`Agent`:return{Icon:O,cls:`bg-accent-wash text-primary`};case`SendMessage`:return{Icon:h,cls:`bg-info/15 text-info`};case`AskUserQuestion`:return{Icon:c,cls:`bg-accent-wash text-primary`};case`ExitPlanMode`:return{Icon:o,cls:`bg-accent-wash text-primary`};case`Skill`:return{Icon:p,cls:`bg-accent-2/15 text-accent-2`};case`ImageGen`:return{Icon:w,cls:`bg-accent-2/15 text-accent-2`};default:return{Icon:d,cls:`bg-panel-2 text-text-2`}}}function pt(e){let t=e.type===`approval_request`;return{toolName:e.type===`tool_use`?e.tool:t?e.tool??`Tool`:`Tool`,input:e.type===`tool_use`?e.input:t?e.input??{}:{}}}var mt=new Set([`Read`,`ImageGen`]);function ht(e){if(e.type!==`tool_use`||!mt.has(e.tool))return null;let t=e.input?.file_path;return typeof t!=`string`||!/^(\/|[A-Za-z]:[/\\])/.test(t)?null:Je(t)?t:null}function gt({tool:e,result:t,completed:n,projectName:i,bashPartialOutput:a,variant:o=`chat`}){let[c,l]=(0,G.useState)(()=>{let n=(e.type,e.tool),r=t?.type===`tool_result`&&!!t.isError;return(n===`Edit`||n===`MultiEdit`)&&!r?!0:!!ht(e)}),d=st(),f=ut();if(e.type===`error`)return(0,K.jsxs)(`div`,{className:`flex items-center gap-2 rounded bg-error/10 border border-error/20 px-2 py-1.5 text-xs text-error`,children:[(0,K.jsx)(S,{className:`size-3`}),(0,K.jsx)(`span`,{children:e.message})]});let{toolName:p,input:m}=pt(e),h=t?.type===`tool_result`,g=h&&!!t.isError,_=h&&typeof t.exitCode==`number`?t.exitCode:void 0,y=p===`AskUserQuestion`&&!!m?.answers,b=e.type===`approval_request`&&e.approved!=null,x=(p===`Agent`||p===`Task`)&&e.type===`tool_use`,C=x?e.children:void 0,w=C&&C.length>0,T=x&&e.type===`tool_use`?e.bgStatus:void 0,D=x&&(T!=null||h&&!g&&Qe(String(t.output??``)))&&T==null,O=T===`failed`||T===`stopped`,k=D?!1:h||y||b||n,ee=[`Edit`,`MultiEdit`,`Write`,`NotebookEdit`].includes(p),A=ht(e),j=h&&Xe(String(t.output??``)),M=!!A,N=e.type===`tool_use`?e.toolUseId:void 0;if(x&&o===`chat`&&e.type===`tool_use`){let t=Q(p,m),n=t?``:$(String(m.description??m.prompt??``),60),{stepCount:r,lastStep:a}=Ee(e),o=g||O?`error`:k?`done`:`running`,s=N??``,c=f??{projectName:i??``,providerId:ct(void 0),sessionId:`local:${s||`card`}`},l=Ae(e.children??[],e.recentChildren??[]);return(0,K.jsx)(at,{handle:t,description:n,stepCount:r,lastStep:a,status:o,bgRunning:D,onOpen:()=>d({projectName:c.projectName,providerId:c.providerId,sessionId:c.sessionId,source:{kind:`card`,cardId:s},title:t?`Session — ${t}`:n||`Agent session`,prompt:String(m.prompt??m.description??``)},l)})}let P=(p===`Bash`||p===`PowerShell`)&&!h&&N?a?.current?.get(N):void 0,F=!!P;(0,G.useEffect)(()=>{F&&!c&&l(!0)},[F]);let I=(0,G.useRef)(!1);(0,G.useEffect)(()=>{g&&(p===`Edit`||p===`MultiEdit`)&&!I.current&&(I.current=!0,l(!1))},[g,p]);let{Icon:te,cls:ne}=ft(p,g,!!Q(p,m)),re=p===`AskUserQuestion`||p===`ExitPlanMode`||x;return(0,K.jsxs)(`div`,{"data-tool-ref":N,className:`rounded-[11px] border overflow-hidden text-xs bg-panel ${re?`border-accent-wash-border`:`border-border`}`,children:[(0,K.jsxs)(`button`,{onClick:()=>l(!c),className:`flex items-center gap-2.5 px-2.5 py-2 w-full text-left hover:bg-panel-2/40 transition-colors min-w-0`,children:[(0,K.jsx)(`span`,{className:`inline-flex items-center justify-center size-6 rounded-[7px] shrink-0 ${ne}`,children:(0,K.jsx)(te,{className:`size-3.5`})}),(0,K.jsx)(`span`,{className:`truncate text-text font-medium`,children:(0,K.jsx)(_t,{name:p,input:m})}),(0,K.jsxs)(`span`,{className:`ml-auto flex items-center gap-2 shrink-0`,children:[F&&(0,K.jsxs)(`span`,{className:`text-[10px] text-warning`,children:[P.lineCount,` line`,P.lineCount===1?``:`s`,` streaming…`]}),w&&!F&&(0,K.jsx)(`span`,{className:`text-[10px] text-text-3 font-mono`,children:B(C.length)}),D&&(0,K.jsx)(`span`,{className:`text-[10px] text-primary`,children:`running…`}),_!=null&&(0,K.jsxs)(`span`,{className:`text-[10px] font-mono ${_===0?`text-text-3`:`text-error`}`,children:[`exit `,_]}),g||O?(0,K.jsx)(u,{className:`size-3.5 text-error`}):k?(0,K.jsx)(r,{className:`size-3.5 text-success`}):(0,K.jsx)(E,{className:`size-3.5 text-primary animate-spin`}),c?(0,K.jsx)(s,{className:`size-3 text-text-3`}):(0,K.jsx)(v,{className:`size-3 text-text-3`})]})]}),c&&(0,K.jsxs)(`div`,{className:`px-2 pb-2 space-y-1.5 select-text`,children:[(e.type===`tool_use`||e.type===`approval_request`)&&(0,K.jsx)(vt,{name:p,input:m,projectName:i,toolUseId:N}),P&&(0,K.jsx)(wt,{content:P.content,lineCount:P.lineCount}),w&&(0,K.jsx)(Ct,{events:C,projectName:i,variant:o}),A&&(0,K.jsx)(it,{filePath:A,projectName:i??``}),h&&!(ee&&!g)&&!(j&&!g)&&!(M&&!g)&&(0,K.jsx)(xt,{toolName:p,output:t.output})]})]})}function _t({name:e,input:t}){let n=e=>String(e??``);switch(e){case`Read`:case`Write`:case`Edit`:case`MultiEdit`:case`NotebookEdit`:return(0,K.jsxs)(K.Fragment,{children:[e,` `,(0,K.jsx)(`span`,{className:`text-text-subtle`,children:M(n(t.file_path))})]});case`Bash`:case`PowerShell`:{let r=t.description?n(t.description):n(t.command);return(0,K.jsxs)(K.Fragment,{children:[e,` `,(0,K.jsx)(`span`,{className:`text-text-subtle${t.description?``:` font-mono`}`,children:$(r,60)})]})}case`Glob`:return(0,K.jsxs)(K.Fragment,{children:[e,` `,(0,K.jsx)(`span`,{className:`font-mono text-text-subtle`,children:n(t.pattern)})]});case`Grep`:return(0,K.jsxs)(K.Fragment,{children:[e,` `,(0,K.jsx)(`span`,{className:`font-mono text-text-subtle`,children:$(n(t.pattern),40)})]});case`WebSearch`:return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(D,{className:`size-3 inline`}),` `,e,` `,(0,K.jsx)(`span`,{className:`text-text-subtle`,children:$(n(t.query),50)})]});case`WebFetch`:return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(i,{className:`size-3 inline`}),` `,e,` `,(0,K.jsx)(`span`,{className:`text-text-subtle`,children:$(n(t.url),50)})]});case`ToolSearch`:return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(D,{className:`size-3 inline`}),` `,e,` `,(0,K.jsx)(`span`,{className:`text-text-subtle`,children:$(n(t.query),50)})]});case`ImageGen`:{let e=(n(t.prompt).split(`
4
- `).find(e=>e.trim())??``)||M(n(t.file_path));return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(w,{className:`size-3 inline`}),` Image`,(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[` `,$(e,50)]})]})}case`Agent`:case`Task`:{let r=Q(e,t),i=$(n(t.description||t.prompt),r?44:60);return(0,K.jsxs)(K.Fragment,{children:[!r&&(0,K.jsx)(O,{className:`size-3 inline`}),` `,e,` `,r&&(0,K.jsx)(`span`,{className:`text-text-primary font-medium`,children:r}),(0,K.jsx)(`span`,{className:`text-text-subtle`,children:r?` · ${i}`:i})]})}case`SendMessage`:return(0,K.jsx)(We,{name:e,input:t});case`TodoWrite`:{let n=Array.isArray(t.todos)?t.todos:[],r=n.filter(e=>e.status===`completed`).length;return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(b,{className:`size-3 inline`}),` `,e,` `,(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[r,`/`,n.length,` done`]})]})}case`AskUserQuestion`:{let n=Array.isArray(t.questions)?t.questions:[],r=!!t.answers;return(0,K.jsxs)(K.Fragment,{children:[e,` `,(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[n.length,` question`,n.length===1?``:`s`,r?` ✓`:``]})]})}case`ScheduleWakeup`:return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(a,{className:`size-3 inline`}),` `,e,` `,(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[`in `,Ot(Number(t.delaySeconds)),t.reason?` — ${$(n(t.reason),50)}`:``]})]});case`TaskCreate`:return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(b,{className:`size-3 inline`}),` `,e,` `,(0,K.jsx)(`span`,{className:`text-text-subtle`,children:$(n(t.subject),60)})]});case`TaskUpdate`:return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(b,{className:`size-3 inline`}),` `,e,` `,(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[`#`,n(t.taskId),` → `,n(t.status)]})]});case`TaskStop`:return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(b,{className:`size-3 inline`}),` `,e,` `,(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[`#`,n(t.taskId),` stopped`]})]});default:return(0,K.jsx)(K.Fragment,{children:e})}}function vt({name:e,input:t,projectName:n,toolUseId:r}){let o=e=>String(e??``),{openTab:s}=F(ie(e=>({openTab:e.openTab}))),c=e=>{n&&s({type:`editor`,title:M(e),metadata:{filePath:e,projectName:n},projectId:n,closable:!0})},l=(e,t,r)=>{s({type:`git-diff`,title:`Diff ${M(e)}`,metadata:{filePath:e,projectName:n,original:t,modified:r},projectId:n??null,closable:!0})};switch(e){case`Bash`:case`PowerShell`:return(0,K.jsxs)(`div`,{className:`space-y-1`,children:[!!t.description&&(0,K.jsx)(`p`,{className:`text-text-subtle italic`,children:o(t.description)}),(0,K.jsx)(`pre`,{className:`font-mono text-text-secondary overflow-x-auto whitespace-pre-wrap break-all`,children:o(t.command)})]});case`Read`:case`Write`:case`Edit`:case`MultiEdit`:case`NotebookEdit`:{let n=o(t.notebook_path||t.file_path),i=e===`Edit`&&(!!t.old_string||!!t.new_string),a=e=>r?`${r}-${e}`:void 0;return(0,K.jsxs)(`div`,{className:`space-y-1`,children:[(0,K.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,K.jsxs)(`button`,{type:`button`,className:`font-mono text-text-secondary break-all hover:text-primary hover:underline text-left flex items-center gap-1 min-w-0`,onClick:()=>c(n),title:`Open file in editor`,children:[(0,K.jsx)(m,{className:`size-3 shrink-0`}),n]}),i&&(0,K.jsxs)(`button`,{type:`button`,className:`text-text-subtle hover:text-primary hover:underline flex items-center gap-1 shrink-0 whitespace-nowrap`,onClick:()=>l(n,o(t.old_string),o(t.new_string)),title:`View diff in new tab`,children:[(0,K.jsx)(g,{className:`size-3 shrink-0`}),`View Diff`]})]}),i&&(0,K.jsx)(`div`,{"data-edit-ref":a(0),children:(0,K.jsx)(Dt,{oldStr:o(t.old_string),newStr:o(t.new_string),filePath:n})}),e===`MultiEdit`&&Array.isArray(t.edits)&&(0,K.jsx)(`div`,{className:`space-y-1.5`,children:t.edits.map((e,t)=>(0,K.jsxs)(`div`,{"data-edit-ref":a(t),className:`space-y-0.5`,children:[(0,K.jsxs)(`p`,{className:`text-text-subtle text-[10px]`,children:[`Edit `,t+1]}),(0,K.jsx)(Dt,{oldStr:o(e.old_string),newStr:o(e.new_string),filePath:n})]},t))}),e===`Write`&&!!t.content&&(0,K.jsx)(`pre`,{"data-edit-ref":a(0),className:`font-mono text-text-subtle overflow-x-auto max-h-32 whitespace-pre-wrap`,children:$(o(t.content),300)})]})}case`Glob`:return(0,K.jsxs)(`p`,{className:`font-mono text-text-secondary`,children:[o(t.pattern),t.path?` in ${o(t.path)}`:``]});case`Grep`:return(0,K.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,K.jsxs)(`p`,{className:`font-mono text-text-secondary`,children:[`/`,o(t.pattern),`/`]}),!!t.path&&(0,K.jsxs)(`p`,{className:`text-text-subtle`,children:[`in `,o(t.path)]})]});case`TodoWrite`:return(0,K.jsx)(bt,{todos:t.todos??[]});case`Agent`:case`Task`:{let n=Q(e,t);return(0,K.jsxs)(`div`,{className:`space-y-1`,children:[!!n&&(0,K.jsxs)(`p`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,K.jsx)(`span`,{className:`text-text-subtle`,children:`Name`}),(0,K.jsx)(`span`,{className:`font-medium text-text-primary`,children:n}),(0,K.jsx)(`span`,{className:`inline-block rounded px-1.5 py-0.5 text-[10px] bg-accent-2/15 text-accent-2`,children:`teammate`}),t.isolation===`worktree`&&(0,K.jsx)(`span`,{className:`inline-block rounded px-1.5 py-0.5 text-[10px] bg-panel-2 text-text-3`,children:`worktree`})]}),!!t.description&&(0,K.jsx)(`p`,{className:`text-text-secondary font-medium`,children:o(t.description)}),!!t.subagent_type&&(0,K.jsxs)(`p`,{className:`text-text-subtle`,children:[`Type: `,o(t.subagent_type)]}),!!t.prompt&&(0,K.jsx)(q,{content:o(t.prompt),maxHeight:`max-h-48`})]})}case`SendMessage`:return(0,K.jsx)(Ge,{input:t});case`ToolSearch`:return(0,K.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,K.jsx)(`p`,{className:`font-mono text-text-secondary`,children:o(t.query)}),!!t.max_results&&(0,K.jsxs)(`p`,{className:`text-text-subtle`,children:[`Max results: `,o(t.max_results)]})]});case`WebFetch`:return(0,K.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,K.jsxs)(`a`,{href:o(t.url),target:`_blank`,rel:`noopener noreferrer`,className:`font-mono text-primary hover:underline break-all flex items-center gap-1`,children:[(0,K.jsx)(i,{className:`size-3 shrink-0`}),o(t.url)]}),!!t.prompt&&(0,K.jsx)(`p`,{className:`text-text-subtle`,children:$(o(t.prompt),100)})]});case`AskUserQuestion`:{let e=t.questions??[],n=t.answers??{};return(0,K.jsx)(`div`,{className:`space-y-2`,children:e.map((e,t)=>(0,K.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,K.jsxs)(`p`,{className:`text-text-primary font-medium`,children:[e.header?`${e.header}: `:``,e.question]}),(0,K.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.options.map((t,r)=>(0,K.jsx)(`span`,{className:`inline-block rounded px-1.5 py-0.5 text-xs border ${(n[e.question]??``).split(`, `).includes(t.label)?`border-primary bg-primary/20 text-text-primary`:`border-border text-text-subtle`}`,children:t.label},r))}),n[e.question]&&(0,K.jsxs)(`p`,{className:`text-foreground text-xs`,children:[`Answer: `,n[e.question]]})]},t))})}case`ScheduleWakeup`:{let e=Number(t.delaySeconds)||0;return(0,K.jsxs)(`div`,{className:`space-y-1`,children:[(0,K.jsxs)(`p`,{className:`text-text-secondary`,children:[(0,K.jsx)(a,{className:`size-3 inline mr-1`}),`Wake in `,(0,K.jsx)(`span`,{className:`font-medium text-text-primary`,children:Ot(e)}),(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[` (`,e,`s)`]})]}),!!t.reason&&(0,K.jsx)(`p`,{className:`text-text-secondary italic`,children:o(t.reason)}),!!t.prompt&&(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`p`,{className:`text-text-subtle text-[10px] mb-0.5`,children:`Prompt on wake`}),(0,K.jsx)(q,{content:o(t.prompt),maxHeight:`max-h-48`})]})]})}case`TaskCreate`:return(0,K.jsxs)(`div`,{className:`space-y-1`,children:[(0,K.jsx)(`p`,{className:`text-text-primary font-medium`,children:o(t.subject)}),!!t.description&&(0,K.jsx)(`p`,{className:`text-text-subtle`,children:o(t.description)}),!!t.activeForm&&(0,K.jsx)(`p`,{className:`text-text-subtle italic`,children:o(t.activeForm)})]});case`TaskUpdate`:return(0,K.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,K.jsxs)(`span`,{className:`font-mono text-text-secondary`,children:[`#`,o(t.taskId)]}),(0,K.jsx)(yt,{status:o(t.status)})]});case`TaskStop`:return(0,K.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,K.jsxs)(`span`,{className:`font-mono text-text-secondary`,children:[`#`,o(t.taskId)]}),(0,K.jsx)(yt,{status:`stopped`})]});case`ImageGen`:return(0,K.jsxs)(`div`,{className:`space-y-1`,children:[!!t.prompt&&(0,K.jsx)(`p`,{className:`text-text-secondary whitespace-pre-wrap`,children:o(t.prompt)}),t.transparentBackground===!0&&(0,K.jsx)(`p`,{className:`text-text-subtle`,children:`Transparent background`})]});default:return(0,K.jsx)(`pre`,{className:`overflow-x-auto text-text-secondary font-mono whitespace-pre-wrap break-all`,children:JSON.stringify(t,null,2)})}}function yt({status:e}){return(0,K.jsx)(`span`,{className:`inline-block rounded px-1.5 py-0.5 text-[10px] border ${e===`completed`?`text-success border-success/30 bg-success/10`:e===`in_progress`?`text-warning border-warning/30 bg-warning/10`:`text-text-subtle border-border bg-surface`}`,children:e})}function bt({todos:e}){return(0,K.jsx)(`div`,{className:`space-y-0.5`,children:e.map((e,t)=>(0,K.jsxs)(`div`,{className:`flex items-start gap-1.5`,children:[(0,K.jsx)(`span`,{className:`shrink-0 mt-0.5 ${e.status===`completed`?`text-success`:e.status===`in_progress`?`text-warning`:`text-text-subtle`}`,children:e.status===`completed`?`✓`:e.status===`in_progress`?`▶`:`○`}),(0,K.jsx)(`span`,{className:e.status===`completed`?`line-through text-text-subtle`:`text-text-secondary`,children:e.content})]},t))})}function xt({toolName:e,output:t}){let[n,r]=(0,G.useState)(!1),i=(0,G.useMemo)(()=>{if(e!==`Agent`&&e!==`Task`)return null;try{let e=JSON.parse(t);if(Array.isArray(e)){let t=e.filter(e=>e.type===`text`&&e.text).map(e=>e.text).join(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/markdown-renderer-LJdVMbGl.js","assets/vendor-ui-P9Ym7hCv.js","assets/rolldown-runtime-C5c2KzVm.js","assets/vendor-markdown-QKPNiWEd.js","assets/markdown-renderer-CmnqFfTU.js","assets/index-CyDLBddf.js","assets/preload-helper-BEFjQwLd.js","assets/button-DeAyLH9U.js","assets/utils-btZ8C8-R.js","assets/createLucideIcon-DBXq3G0e.js","assets/api-client-F5Zi1sR0.js","assets/react-CzUPVyyG.js","assets/file-store-Cm7-pHux.js","assets/panel-store-B6PoCwBA.js","assets/session-list-sync-triggers-ATvz-1g3.js","assets/project-store-CCimwgGF.js","assets/window-store-vo1N70nK.js","assets/settings-store-Cyuo8ceh.js","assets/window-pip-registry-9Y9LQQYS.js","assets/onboarding-quick-orientation-DPHYFMbA.js","assets/dialog-Bocc0Fgb.js","assets/portal-container-context-NFSuymMu.js","assets/icons-CO_II6D-.js","assets/use-is-mobile-BClDZJP5.js","assets/format-file-meta-Drxf2J-k.js","assets/fs-api-IX9SHt5k.js","assets/context-menu-7OX80HDB.js","assets/input-CG8PS8mS.js","assets/mobile-bottom-sheet-D4UyOatB.js","assets/use-visual-viewport-BGpcMnIx.js","assets/scroll-area-sjOeAfoD.js","assets/chat-preparation-cache-BUCR58h4.js","assets/file-icons-CK0J4QSy.js","assets/format-date-BMtvCeb9.js","assets/git-repo-store-B_u5RzIM.js","assets/ws-auth-Ytui7dXP.js","assets/tab-store-DCpc0g0Q.js","assets/apply-theme-Cc_cmrD5.js","assets/resolve-theme-STMsK2vc.js","assets/index-Dh5apC3I.css","assets/image-gallery-B16hO6Ab.js","assets/run-in-terminal-DCBNtYHQ.js","assets/edit-diff-preview-D-FNLOU2.js","assets/libesm-5wREk7JN.js"])))=>i.map(i=>d[i]);
2
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import{E as r,Ft as i,J as a,K as o,O as s,V as c,Vr as l,Yr as u,Z as d,_t as f,br as p,ct as m,dr as h,et as g,gt as _,j as v,kr as y,ln as b,mt as x,n as S,on as C,qt as w,u as T,un as E,ur as D,v as O}from"./icons-CO_II6D-.js";import{O as ee}from"./api-client-F5Zi1sR0.js";import{t as te}from"./react-CzUPVyyG.js";import{t as k}from"./preload-helper-BEFjQwLd.js";import{n as A,t as j}from"./utils-btZ8C8-R.js";import{s as M,t as N}from"./window-store-vo1N70nK.js";import{t as P}from"./tab-store-DCpc0g0Q.js";import{n as F}from"./use-is-mobile-BClDZJP5.js";import{Vn as ne,bn as I,en as re,r as ie}from"./index-CyDLBddf.js";import{a as ae,i as oe,n as se,r as ce,t as le}from"./image-preview-geometry-D4Ihz4UV.js";import{t as L}from"./agent-session-sheet-store-_OeezCXB.js";import{t as ue}from"./libesm-5wREk7JN.js";import{t as de}from"./use-blob-url-BC69n15x.js";import{r as fe,t as pe}from"./image-gallery-B16hO6Ab.js";var me=new Set([`Write`,`Edit`,`MultiEdit`,`NotebookEdit`]),he={create:3,write:2,notebook:2,edit:1};function R(e){return typeof e==`string`?e:``}function ge(e,t){let n=0,r=0;for(let i of ue(e,t))i.added?n+=i.count??0:i.removed&&(r+=i.count??0);return{added:n,removed:r}}function _e(e){return e&&/created successfully/i.test(e)?`create`:`write`}function ve(e,t,n){switch(e){case`Write`:{let e=R(t.file_path);return e?{filePath:e,op:_e(n),fragments:[{oldStr:``,newStr:R(t.content)}]}:null}case`Edit`:{let e=R(t.file_path);return e?{filePath:e,op:`edit`,fragments:[{oldStr:R(t.old_string),newStr:R(t.new_string)}]}:null}case`MultiEdit`:{let e=R(t.file_path);if(!e||!Array.isArray(t.edits))return null;let n=t.edits.filter(e=>!!e&&typeof e==`object`).map(e=>({oldStr:R(e.old_string),newStr:R(e.new_string)}));return n.length===0?null:{filePath:e,op:`edit`,fragments:n}}case`NotebookEdit`:{let e=R(t.notebook_path)||R(t.file_path);return e?{filePath:e,op:`notebook`,fragments:[{oldStr:``,newStr:R(t.new_source)}]}:null}default:return null}}function ye(e,t){if(e){for(let n of e)if(n.type===`tool_result`&&n.toolUseId&&t.set(n.toolUseId,n.output??``),n.type===`tool_use`){let e=n.result;n.toolUseId&&e?.output!=null&&!t.has(n.toolUseId)&&t.set(n.toolUseId,e.output),ye(n.children,t)}}}function be(e,t,n,r){if(e)for(let i of e){if(i.type!==`tool_use`||(i.children?.length&&be(i.children,!0,n,r),!me.has(i.tool)))continue;let e=i.input&&typeof i.input==`object`?i.input:null;if(!e)continue;let a=ve(i.tool,e,i.toolUseId?r.get(i.toolUseId):void 0);if(!a)continue;let o=n.get(a.filePath);o||(o={filePath:a.filePath,op:a.op,editCount:0,linesAdded:0,linesRemoved:0,edits:[],viaSubagent:!1},n.set(a.filePath,o)),he[a.op]>he[o.op]&&(o.op=a.op),t&&(o.viaSubagent=!0),a.fragments.forEach((e,n)=>{let{added:r,removed:a}=ge(e.oldStr,e.newStr);o.linesAdded+=r,o.linesRemoved+=a,o.editCount+=1,o.edits.push({...e,toolUseId:i.toolUseId,editIndex:n,editRef:i.toolUseId?`${i.toolUseId}-${n}`:void 0,viaSubagent:t})})}}function xe(e){let t=new Map;for(let n of e)ye(n.events,t);let n=new Map;for(let r of e)be(r.events,!1,n,t);return[...n.values()]}function Se(e,t){let n=[];for(let r=t;r>=0&&e[r]?.role===`assistant`;r--)n.unshift(e[r]);return n}function z(e){return typeof e==`string`?e:``}function B(e){return`${e} step${e===1?``:`s`}`}function V(e,t){return e.length>t?e.slice(0,t)+`…`:e}function Ce(e){if(e.type!==`tool_use`)return``;let t=e.tool,n=e.input&&typeof e.input==`object`?e.input:{};switch(t){case`Read`:case`Write`:case`Edit`:case`MultiEdit`:case`NotebookEdit`:{let e=z(n.notebook_path||n.file_path);return e?`${t} ${j(e)}`:t}case`Bash`:case`PowerShell`:return V(n.description?z(n.description):z(n.command),60)||t;case`Glob`:return`Glob ${z(n.pattern)}`;case`Grep`:return`Grep ${V(z(n.pattern),40)}`;case`WebSearch`:return`Search ${V(z(n.query),50)}`;case`WebFetch`:return`Fetch ${V(z(n.url),50)}`;case`ToolSearch`:return`Search ${V(z(n.query),50)}`;case`Agent`:case`Task`:{let e=typeof n.name==`string`&&n.name.trim()?n.name.trim():null,r=V(z(n.description||n.prompt),44);return e?r?`${e} · ${r}`:e:r||t}case`SendMessage`:return`Message ${V(z(n.to),30)}`.trim();case`TodoWrite`:return`Todo update`;case`AskUserQuestion`:return`Question`;case`ScheduleWakeup`:return`Scheduled wakeup`;case`TaskCreate`:return V(z(n.subject),60)||t;case`TaskUpdate`:return`Task #${z(n.taskId)} → ${z(n.status)}`;case`TaskStop`:return`Task #${z(n.taskId)} stopped`;case`ImageGen`:return`Image generation`;default:return t}}function we(e){return e===`Agent`||e===`Task`||me.has(e)}function H(e){let t=[],n=[],r=new Set,i;return(e??[]).forEach((e,a)=>{if(e.type===`tool_use`){t.push(e.toolUseId??`idx:${a}`);let o=Ce(e);if(o&&(i=o),we(e.tool)){if(e.tool===`Agent`||e.tool===`Task`){let t=H(e.children);n.push({...e,children:t.kept,stepIds:t.stepIds,stepCount:t.stepIds.length,lastStep:t.lastStep})}else n.push(e);e.toolUseId&&r.add(e.toolUseId)}}else e.type===`tool_result`&&e.toolUseId&&r.has(e.toolUseId)&&n.push(e)}),{stepIds:t,lastStep:i,kept:n}}function Te(e){let t=e.stepCount??e.stepIds?.length??H(e.children).stepIds.length;for(let n of e.children??[])n.type===`tool_use`&&(n.tool===`Agent`||n.tool===`Task`)&&(t+=Te(n));return t}function Ee(e){let t=Te(e);if(e.stepCount!=null)return{stepCount:t,lastStep:e.lastStep};let{lastStep:n}=H(e.children);return{stepCount:t,lastStep:n}}function De(e){try{return JSON.stringify(e).length}catch{return 0}}function Oe(e){let t=e.reduce((e,t)=>e+De(t),0),n=0;for(;t>262144&&n<e.length-1;)t-=De(e[n]),n++;return n>0?e.slice(n):e}function ke(e,t,n){let r=t.toolUseId;if(r){let i=e.findIndex(e=>e.type===t.type&&e.toolUseId===r);if(i!==-1){let r=e[i].arrivalSeq,a=[...e];return a[i]=n==null?t:{...t,arrivalSeq:r},a}}let i=n==null?t:{...t,arrivalSeq:n},a=[...e,i];return Oe(a.length>200?a.slice(a.length-200):a)}function Ae(e,t){let n=e=>e.map((e,t)=>({ev:e,seq:e.arrivalSeq??t}));return[...n(e),...n(t)].sort((e,t)=>e.seq-t.seq).map(e=>e.ev)}function je(e,t){if(e.type!==`tool_use`)return e;let n=e.stepIds,r=e.lastStep;if(t.type===`tool_use`){let e=t.toolUseId;(!e||!n?.includes(e))&&(n=[...n??[],e??`idx:${n?.length??0}`]);let i=Ce(t);i&&(r=i)}let i=e.childSeq??0,a=e=>{let n=t.toolUseId,r=n?e.findIndex(e=>e.type===t.type&&e.toolUseId===n):-1;if(r!==-1){let n=e[r].arrivalSeq,i=[...e];return i[r]={...t,arrivalSeq:n},i}return[...e,{...t,arrivalSeq:i}]},o=e.children??[],s=e.recentChildren??[],c=t.type===`tool_use`&&we(t.tool),l=e=>!!e&&o.some(t=>t.type===`tool_use`&&t.toolUseId===e),u=o,d=s;return c||t.type===`tool_result`&&l(t.toolUseId)?u=a(o):d=ke(s,t,i),{...e,children:u,recentChildren:d,stepIds:n,stepCount:n?.length,lastStep:r,childSeq:i+1}}function Me(e){return e&&e.map(e=>{if(e.type!==`tool_use`||e.tool!==`Agent`&&e.tool!==`Task`||!e.transcriptAvailable)return e;let{stepIds:t,lastStep:n,kept:r}=H(e.children);return{...e,children:r,stepIds:t,stepCount:t.length,lastStep:n}})}function U(e,t){return t.kind===`card`?`${e}:${t.cardId}`:`${e}:${t.teamName}:${t.memberName}`}var W=te(()=>({entries:{}}));function Ne(e,t){W.setState(n=>({entries:{...n.entries,[e]:t}}))}function Pe(){let e=new Set;for(let t of Object.values(N.getState().windows)){if(t.kind!==`agent-session`)continue;let n=t.payload;typeof n?.sessionId==`string`&&n.source&&e.add(U(n.sessionId,n.source))}let t=L.getState().payload;return t&&e.add(U(t.sessionId,t.source)),e}function Fe(){let e=Pe();W.setState(t=>{let n={},r=!1;for(let[i,a]of Object.entries(t.entries))e.has(i)?n[i]=a:r=!0;return r?{entries:n}:t})}N.subscribe(Fe),L.subscribe(Fe);var G=e(t(),1),K=n(),Ie=(0,G.lazy)(()=>k(()=>import(`./markdown-renderer-LJdVMbGl.js`).then(e=>({default:e.MarkdownRenderer})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41])));function q({content:e,maxHeight:t=`max-h-48`}){return(0,K.jsx)(G.Suspense,{fallback:(0,K.jsx)(`div`,{className:`animate-pulse h-4 bg-muted rounded`}),children:(0,K.jsx)(Ie,{content:e,className:`text-text-secondary overflow-auto ${t}`})})}var Le={task_assignment:{label:`task`,className:`bg-primary/20 text-primary`},idle_notification:{label:`idle`,className:`bg-warning/20 text-warning`},completion:{label:`done`,className:`bg-success/20 text-success`},shutdown_request:{label:`shutdown`,className:`bg-error/20 text-error`},shutdown_approved:{label:`shutdown ✓`,className:`bg-text-3/20 text-text-3`},shutdown_response:{label:`shutdown reply`,className:`bg-text-3/20 text-text-3`},plan_approval_request:{label:`plan review`,className:`bg-primary/20 text-primary`},plan_approval_response:{label:`plan reply`,className:`bg-primary/20 text-primary`}},Re=new Set([`to`,`message`,`summary`,`notify_when_idle`,`recipient`,`content`,`type`]),J=e=>typeof e==`string`?e:e==null?``:String(e);function ze(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e;return typeof t.type!=`string`||!t.type?null:{type:t.type,request_id:typeof t.request_id==`string`?t.request_id:void 0,approve:typeof t.approve==`boolean`?t.approve:void 0,reason:typeof t.reason==`string`?t.reason:void 0,feedback:typeof t.feedback==`string`?t.feedback:void 0}}function Be(e){let t=e.trim();if(!t.startsWith(`{`))return null;try{return ze(JSON.parse(t))}catch{return null}}function Ve(e){let t=J(e.to)||J(e.recipient),n=e.message??e.content,r=ze(n)??Be(J(n)),i=r?``:J(n),a=J(e.type),o=r?.type||(a&&a!==`message`?a:`message`),s=J(e.summary).trim(),c=Object.entries(e).filter(([e])=>!Re.has(e)).map(([e,t])=>({key:e,value:typeof t==`string`?t:JSON.stringify(t)??``}));return{to:t,summary:s||void 0,text:i,firstLine:i.split(`
3
+ `).map(e=>e.trim()).find(e=>e.length>0)??``,protocol:r??void 0,kind:o,notifyWhenIdle:e.notify_when_idle===!0,extras:c}}function He(e){if(!e)return null;let t;try{t=JSON.parse(e)}catch{return null}if(Array.isArray(t)){let e=J(t.find(e=>e&&typeof e==`object`&&e.type===`text`)?.text);if(!e)return null;try{t=JSON.parse(e)}catch{return null}}if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t;if(typeof n.success!=`boolean`)return null;let r=n.pin&&typeof n.pin==`object`?n.pin:null;return{ok:n.success,detail:J(n.message)||J(n.error)||void 0,peer:r&&J(r.name)||void 0,ref:r&&J(r.ref)||void 0}}function Ue({kind:e}){if(e===`message`)return null;let t=Le[e];return(0,K.jsx)(`span`,{className:`inline-block rounded px-1.5 py-0.5 text-[10px] ${t?.className??`bg-panel-2 text-text-3`}`,children:t?.label??e})}function We({name:e,input:t}){let n=Ve(t),r=n.summary||n.firstLine||(n.protocol?n.kind:``),i=r.length>72?`${r.slice(0,72)}…`:r;return(0,K.jsxs)(K.Fragment,{children:[e,` `,(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[(0,K.jsx)(T,{className:`size-3 inline`}),` `,n.to||`unknown`,i?` · ${i}`:``]}),n.notifyWhenIdle&&(0,K.jsx)(a,{className:`size-3 inline ml-1 text-text-3`})]})}function Ge({input:e}){let t=Ve(e);return(0,K.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,K.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,K.jsx)(`span`,{className:`text-text-subtle`,children:`To`}),(0,K.jsx)(`span`,{className:`font-medium text-text-primary`,children:t.to||`unknown`}),(0,K.jsx)(Ue,{kind:t.kind}),t.notifyWhenIdle&&(0,K.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] bg-panel-2 text-text-3`,children:[(0,K.jsx)(a,{className:`size-3`}),` notify when idle`]})]}),!!t.text&&(0,K.jsx)(q,{content:t.text,maxHeight:`max-h-40`}),t.protocol&&(0,K.jsxs)(`div`,{className:`space-y-0.5 text-text-secondary`,children:[t.protocol.approve!=null&&(0,K.jsxs)(`p`,{children:[t.protocol.approve?`Approved`:`Rejected`,t.protocol.request_id?(0,K.jsxs)(`span`,{className:`text-text-subtle font-mono`,children:[` · `,t.protocol.request_id]}):null]}),!!t.protocol.reason&&(0,K.jsx)(`p`,{className:`text-text-subtle`,children:t.protocol.reason}),!!t.protocol.feedback&&(0,K.jsx)(`p`,{className:`text-text-subtle`,children:t.protocol.feedback})]}),t.extras.length>0&&(0,K.jsx)(`div`,{className:`space-y-0.5`,children:t.extras.map(e=>(0,K.jsxs)(`p`,{className:`text-text-subtle`,children:[(0,K.jsx)(`span`,{className:`font-mono`,children:e.key}),`: `,e.value]},e.key))})]})}function Ke({output:e}){let[t,n]=(0,G.useState)(!1),i=He(e);return i?(0,K.jsxs)(`div`,{className:`border-t border-border pt-1.5 space-y-1`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:[i.ok?(0,K.jsx)(r,{className:`size-3 text-success shrink-0`}):(0,K.jsx)(u,{className:`size-3 text-error shrink-0`}),(0,K.jsx)(`span`,{className:i.ok?`text-success`:`text-error`,children:i.ok?`Delivered`:`Not delivered`}),!!i.detail&&(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[`· `,i.detail]}),!!i.ref&&(0,K.jsxs)(`span`,{className:`text-text-3 font-mono text-[10px]`,children:[`[`,i.ref,`]`]})]}),(0,K.jsxs)(`button`,{type:`button`,onClick:()=>n(!t),className:`flex items-center gap-1 text-[10px] text-text-subtle hover:text-text-secondary transition-colors`,children:[(0,K.jsx)(d,{className:`size-3`}),t?`Hide`:`Show`,` raw`]}),t&&(0,K.jsx)(`pre`,{className:`overflow-x-auto text-text-subtle font-mono max-h-40 whitespace-pre-wrap break-all text-[10px]`,children:e})]}):null}var qe=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.webp`,`.bmp`,`.avif`,`.ico`]);function Je(e){let t=e.lastIndexOf(`.`);return t===-1?!1:qe.has(e.slice(t).toLowerCase())}var Ye=/^\[image(?: · [\d.]+(?:B|KB|MB))?\]$/;function Xe(e){if(!e.startsWith(`[`))return!1;let t;try{t=JSON.parse(e)}catch{return!1}return Array.isArray(t)?t.some(e=>{let t=e;return t?.type===`text`&&typeof t.text==`string`&&Ye.test(t.text)}):!1}var Ze=`Async agent launched successfully`;function Qe(e){return!!e&&e.includes(Ze)}var $e=`text-[var(--img-meta-label)] @max-[470px]:hidden`,et=[`60%`,`45%`,`80%`];function tt({aspect:e,actions:t}){return(0,K.jsxs)(`div`,{className:`grid grid-cols-[132px_1fr] items-start gap-[14px] overflow-hidden rounded-lg border border-border bg-panel p-[14px] @max-[470px]:grid-cols-[64px_1fr] @max-[470px]:gap-[11px] @max-[470px]:p-[11px]`,children:[(0,K.jsx)(`div`,{className:`img-skeleton rounded-lg`,style:{aspectRatio:e}}),(0,K.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-[9px]`,children:[(0,K.jsx)(`div`,{className:`img-skeleton h-[13px] w-2/5 rounded @max-[470px]:hidden`}),(0,K.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-[14px] gap-y-[4px] font-mono text-[11.5px] @max-[470px]:grid-cols-[1fr]`,children:[`dimensions`,`size`,`path`].map((e,t)=>(0,K.jsxs)(G.Fragment,{children:[(0,K.jsx)(`dt`,{className:$e,children:e}),(0,K.jsx)(`dd`,{className:`flex items-center`,children:(0,K.jsx)(`span`,{className:`img-skeleton h-[11px] rounded`,style:{width:et[t]}})})]},e))}),t]})]})}function nt({code:e,onRetry:t}){return(0,K.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg border border-border bg-panel px-2.5 py-2 font-mono text-[12px] text-text-2`,children:[(0,K.jsx)(S,{className:`size-3 shrink-0`}),(0,K.jsxs)(`span`,{className:`truncate`,children:[`preview unavailable`,e?` · ${e}`:``]}),(0,K.jsx)(`button`,{type:`button`,onClick:t,className:`ml-auto shrink-0 text-accent`,children:`retry`})]})}var rt=4/5,Y=`text-[var(--img-meta-label)] @max-[470px]:hidden`,X=`truncate text-text @max-[470px]:text-text-2`,Z=`h-[30px] @max-[470px]:h-[36px] shrink-0 rounded-[7px] px-[9px] font-mono text-[11.5px] text-text-2 bg-[var(--img-ghost)] border border-[var(--img-ghost-border)] backdrop-blur-[6px] transition-colors can-hover:hover:bg-[var(--img-ghost-hover)] can-hover:hover:border-[var(--img-ghost-hover-border)] can-hover:hover:text-text`;function it({filePath:e,projectName:t}){let[n,r]=(0,G.useState)(0),{blobUrl:i,blob:a,error:o,errorCode:s}=de(e,t,void 0,n),[c,l]=(0,G.useState)(()=>oe(e)),[u,d]=(0,G.useState)(!1),[f,p]=(0,G.useState)(!1),m=ie(e=>e.open),{openTab:h}=P(I(e=>({openTab:e.openTab}))),g=j(e);(0,G.useEffect)(()=>{if(!f)return;let e=setTimeout(()=>p(!1),1200);return()=>clearTimeout(e)},[f]);let _=t=>{let n={w:t.naturalWidth,h:t.naturalHeight};if(!n.w||!n.h)return d(!0);le(e,n),l(n)},v=()=>{d(!1),r(e=>e+1)};if(o||u)return(0,K.jsx)(`div`,{className:`border-t border-border pt-1.5`,children:(0,K.jsx)(nt,{code:u?void 0:s??void 0,onRetry:v})});let y=c?ae(c,132):null,b=y?.aspect??rt,x=(0,K.jsxs)(`div`,{className:`flex flex-wrap gap-[6px]`,children:[(0,K.jsxs)(`button`,{type:`button`,onClick:S,className:Z,children:[(0,K.jsx)(`span`,{className:`@max-[470px]:hidden`,children:`open in editor`}),(0,K.jsx)(`span`,{className:`hidden @max-[470px]:inline`,children:`open`})]}),(0,K.jsx)(`button`,{type:`button`,onClick:C,className:Z,children:f?`copied`:`copy path`}),(0,K.jsx)(`button`,{type:`button`,onClick:w,className:Z,children:`full size`})]});function S(){t&&h({type:`editor`,title:g,metadata:{filePath:e,projectName:t},projectId:t,closable:!0})}function C(){ne(e).then(()=>p(!0))}function w(e){i&&m(i,g,fe(e.currentTarget))}if(!i||!y||!c)return(0,K.jsxs)(`div`,{className:`@container border-t border-border pt-1.5`,children:[i&&(0,K.jsx)(`img`,{src:i,alt:``,className:`hidden`,onLoad:e=>_(e.currentTarget),onError:()=>d(!0)}),(0,K.jsx)(tt,{aspect:b,actions:x})]});let T=(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`dt`,{className:Y,children:`dimensions`}),(0,K.jsx)(`dd`,{className:X,children:se(c,y.fit)}),a&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`dt`,{className:Y,children:`size`}),(0,K.jsxs)(`dd`,{className:X,children:[ce(a.size),a.type?` · ${a.type}`:``]})]}),(0,K.jsx)(`dt`,{className:Y,children:`path`}),(0,K.jsx)(`dd`,{dir:`rtl`,className:`${X} text-left`,children:e})]}),E=(0,K.jsx)(`img`,{src:i,alt:g,[pe]:``,onLoad:e=>_(e.currentTarget),onError:()=>d(!0),className:y.fit===`cover`?`size-full object-cover`:y.fit===`contain`?`size-full object-contain`:`max-h-full max-w-full`});return(0,K.jsx)(`div`,{className:`@container border-t border-border pt-1.5`,children:(0,K.jsxs)(`div`,{className:`relative overflow-hidden rounded-lg border border-border p-[14px] @max-[470px]:p-[11px]`,children:[(0,K.jsx)(`img`,{"aria-hidden":`true`,alt:``,src:i,className:`absolute inset-0 size-full object-cover`,style:{filter:`var(--img-backdrop)`,transform:`scale(1.3)`}}),(0,K.jsx)(`div`,{className:`absolute inset-0`,style:{background:`var(--img-veil)`}}),y.variant===`band`?(0,K.jsxs)(`div`,{className:`relative grid gap-[11px]`,children:[(0,K.jsx)(`button`,{type:`button`,onClick:w,title:`Open ${g}`,className:`img-checkerboard w-full cursor-zoom-in overflow-hidden rounded-lg border border-[var(--img-plate-border)]`,style:{aspectRatio:y.aspect},children:E}),(0,K.jsx)(`dl`,{className:`grid grid-cols-[auto_auto_1fr] gap-x-[18px] font-mono text-[11.5px] [&_dt]:hidden`,children:T}),x]}):(0,K.jsxs)(`div`,{className:`relative grid grid-cols-[132px_1fr] items-start gap-[14px] @max-[470px]:grid-cols-[64px_1fr] @max-[470px]:gap-[11px]`,children:[(0,K.jsx)(`button`,{type:`button`,onClick:w,title:`Open ${g}`,className:`cursor-zoom-in overflow-hidden rounded-lg border border-[var(--img-plate-border)] bg-[var(--img-plate)] shadow-[var(--img-plate-shadow)] ${y.fit===`cover`?``:`img-checkerboard flex items-center justify-center`}`,style:{aspectRatio:y.aspect},children:E}),(0,K.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-[9px]`,children:[(0,K.jsx)(`p`,{className:`truncate text-[13px] font-semibold text-text @max-[470px]:hidden`,children:g}),(0,K.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-[14px] gap-y-[4px] font-mono text-[11.5px] @max-[470px]:grid-cols-[1fr]`,children:T}),x]})]})]})})}function at({handle:e,description:t,stepCount:n,lastStep:i,status:a,bgRunning:o,onOpen:s}){let c=re(),d=a===`error`?u:a===`done`?r:E,f=a===`error`?`text-error`:a===`done`?`text-success`:`text-primary animate-spin`;return(0,K.jsxs)(`button`,{type:`button`,onClick:s,className:A(`flex w-full items-center gap-2.5 rounded-[11px] border border-border bg-panel px-2.5 text-left text-xs`,`transition-colors hover:bg-panel-2/40`,c?`min-h-[44px] py-2`:`py-2`),title:e?`Open ${e}'s session`:`Open agent session`,children:[(0,K.jsx)(`span`,{className:A(`inline-flex items-center justify-center size-6 rounded-[7px] shrink-0`,e?`bg-accent-2/15 text-accent-2`:`bg-accent-wash text-primary`),children:e?(0,K.jsx)(l,{className:`size-3.5`}):(0,K.jsx)(O,{className:`size-3.5`})}),(0,K.jsxs)(`span`,{className:`min-w-0 flex-1 truncate`,children:[e?(0,K.jsx)(`span`,{className:`font-medium text-text-primary`,children:e}):(0,K.jsx)(`span`,{className:`font-medium text-text`,children:t||`Agent`}),!!i&&(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[` · `,i]})]}),(0,K.jsxs)(`span`,{className:`ml-auto flex items-center gap-2 shrink-0 text-text-3`,children:[o&&(0,K.jsx)(`span`,{className:`text-[10px] text-primary`,children:`running…`}),n>0&&(0,K.jsx)(`span`,{className:`font-mono text-[10px]`,children:B(n)}),(0,K.jsx)(d,{className:A(`size-3.5`,f)}),(0,K.jsx)(v,{className:`size-3`})]})]})}function ot(e,t){let n=e;return typeof n?.sessionId!=`string`||!n.source?!1:U(n.sessionId,n.source)===U(t.sessionId,t.source)}function st(){let e=F(),t=L(e=>e.open);return(0,G.useCallback)((n,r)=>{if(!n.sessionId)return;if(r&&Ne(U(n.sessionId,n.source),r),e){t(n);return}let i=N.getState(),a=n,o=Object.values(i.windows),s=o.find(e=>e.kind===`agent-session`&&ot(e.payload,n));if(s){i.focus(s.id);return}if(o.length>=8){let e=o.filter(e=>e.kind===`agent-session`).sort((e,t)=>e.rank-t.rank);if(e.length===0){ee.error(`Too many windows open`,{description:`Close one to open this session.`});return}i.close(e[0].id)}let c=M(Object.values(N.getState().windows).map(e=>e.rect),N.getState().bounds);N.getState().open(`agent-session`,a,c)},[e,t])}function ct(e){return e===`codex`?`codex`:`claude`}var lt=(0,G.createContext)(null);function ut(){return(0,G.useContext)(lt)}function dt({value:e,children:t}){return(0,G.createElement)(lt.Provider,{value:e},t)}function Q(e,t){if(e!==`Agent`&&e!==`Task`)return null;let n=t.name;return typeof n==`string`&&n.trim()?n.trim():null}function ft(e,t,n=!1){if(t&&(e===`Bash`||e===`PowerShell`))return{Icon:y,cls:`bg-error/15 text-error`};if(n)return{Icon:l,cls:`bg-accent-2/15 text-accent-2`};switch(e){case`Read`:case`Glob`:case`LS`:return{Icon:f,cls:`bg-accent-wash text-primary`};case`Grep`:case`Search`:case`WebSearch`:case`ToolSearch`:return{Icon:D,cls:`bg-accent-wash text-primary`};case`WebFetch`:case`Fetch`:return{Icon:i,cls:`bg-info/15 text-info`};case`Edit`:case`MultiEdit`:case`NotebookEdit`:return{Icon:x,cls:`bg-accent-2/15 text-accent-2`};case`Write`:return{Icon:_,cls:`bg-success/15 text-success`};case`Bash`:case`PowerShell`:return{Icon:y,cls:`bg-panel-2 text-text-2`};case`TodoWrite`:return{Icon:C,cls:`bg-warning/15 text-warning`};case`Task`:case`Agent`:return{Icon:O,cls:`bg-accent-wash text-primary`};case`SendMessage`:return{Icon:h,cls:`bg-info/15 text-info`};case`AskUserQuestion`:return{Icon:c,cls:`bg-accent-wash text-primary`};case`ExitPlanMode`:return{Icon:o,cls:`bg-accent-wash text-primary`};case`Skill`:return{Icon:p,cls:`bg-accent-2/15 text-accent-2`};case`ImageGen`:return{Icon:w,cls:`bg-accent-2/15 text-accent-2`};default:return{Icon:d,cls:`bg-panel-2 text-text-2`}}}function pt(e){let t=e.type===`approval_request`;return{toolName:e.type===`tool_use`?e.tool:t?e.tool??`Tool`:`Tool`,input:e.type===`tool_use`?e.input:t?e.input??{}:{}}}var mt=new Set([`Read`,`ImageGen`]);function ht(e){if(e.type!==`tool_use`||!mt.has(e.tool))return null;let t=e.input?.file_path;return typeof t!=`string`||!/^(\/|[A-Za-z]:[/\\])/.test(t)?null:Je(t)?t:null}function gt({tool:e,result:t,completed:n,projectName:i,bashPartialOutput:a,variant:o=`chat`}){let[c,l]=(0,G.useState)(()=>{let n=(e.type,e.tool),r=t?.type===`tool_result`&&!!t.isError;return(n===`Edit`||n===`MultiEdit`)&&!r?!0:!!ht(e)}),d=st(),f=ut();if(e.type===`error`)return(0,K.jsxs)(`div`,{className:`flex items-center gap-2 rounded bg-error/10 border border-error/20 px-2 py-1.5 text-xs text-error`,children:[(0,K.jsx)(S,{className:`size-3`}),(0,K.jsx)(`span`,{children:e.message})]});let{toolName:p,input:m}=pt(e),h=t?.type===`tool_result`,g=h&&!!t.isError,_=h&&typeof t.exitCode==`number`?t.exitCode:void 0,y=p===`AskUserQuestion`&&!!m?.answers,b=e.type===`approval_request`&&e.approved!=null,x=(p===`Agent`||p===`Task`)&&e.type===`tool_use`,C=x?e.children:void 0,w=C&&C.length>0,T=x&&e.type===`tool_use`?e.bgStatus:void 0,D=x&&(T!=null||h&&!g&&Qe(String(t.output??``)))&&T==null,O=T===`failed`||T===`stopped`,ee=D?!1:h||y||b||n,te=[`Edit`,`MultiEdit`,`Write`,`NotebookEdit`].includes(p),k=ht(e),A=h&&Xe(String(t.output??``)),j=!!k,M=e.type===`tool_use`?e.toolUseId:void 0;if(x&&o===`chat`&&e.type===`tool_use`){let t=Q(p,m),n=t?``:$(String(m.description??m.prompt??``),60),{stepCount:r,lastStep:a}=Ee(e),o=g||O?`error`:ee?`done`:`running`,s=M??``,c=f??{projectName:i??``,providerId:ct(void 0),sessionId:`local:${s||`card`}`},l=Ae(e.children??[],e.recentChildren??[]);return(0,K.jsx)(at,{handle:t,description:n,stepCount:r,lastStep:a,status:o,bgRunning:D,onOpen:()=>d({projectName:c.projectName,providerId:c.providerId,sessionId:c.sessionId,source:{kind:`card`,cardId:s},title:t?`Session — ${t}`:n||`Agent session`,prompt:String(m.prompt??m.description??``)},l)})}let N=(p===`Bash`||p===`PowerShell`)&&!h&&M?a?.current?.get(M):void 0,P=!!N;(0,G.useEffect)(()=>{P&&!c&&l(!0)},[P]);let F=(0,G.useRef)(!1);(0,G.useEffect)(()=>{g&&(p===`Edit`||p===`MultiEdit`)&&!F.current&&(F.current=!0,l(!1))},[g,p]);let{Icon:ne,cls:I}=ft(p,g,!!Q(p,m)),re=p===`AskUserQuestion`||p===`ExitPlanMode`||x;return(0,K.jsxs)(`div`,{"data-tool-ref":M,className:`rounded-[11px] border overflow-hidden text-xs bg-panel ${re?`border-accent-wash-border`:`border-border`}`,children:[(0,K.jsxs)(`button`,{onClick:()=>l(!c),className:`flex items-center gap-2.5 px-2.5 py-2 w-full text-left hover:bg-panel-2/40 transition-colors min-w-0`,children:[(0,K.jsx)(`span`,{className:`inline-flex items-center justify-center size-6 rounded-[7px] shrink-0 ${I}`,children:(0,K.jsx)(ne,{className:`size-3.5`})}),(0,K.jsx)(`span`,{className:`truncate text-text font-medium`,children:(0,K.jsx)(_t,{name:p,input:m})}),(0,K.jsxs)(`span`,{className:`ml-auto flex items-center gap-2 shrink-0`,children:[P&&(0,K.jsxs)(`span`,{className:`text-[10px] text-warning`,children:[N.lineCount,` line`,N.lineCount===1?``:`s`,` streaming…`]}),w&&!P&&(0,K.jsx)(`span`,{className:`text-[10px] text-text-3 font-mono`,children:B(C.length)}),D&&(0,K.jsx)(`span`,{className:`text-[10px] text-primary`,children:`running…`}),_!=null&&(0,K.jsxs)(`span`,{className:`text-[10px] font-mono ${_===0?`text-text-3`:`text-error`}`,children:[`exit `,_]}),g||O?(0,K.jsx)(u,{className:`size-3.5 text-error`}):ee?(0,K.jsx)(r,{className:`size-3.5 text-success`}):(0,K.jsx)(E,{className:`size-3.5 text-primary animate-spin`}),c?(0,K.jsx)(s,{className:`size-3 text-text-3`}):(0,K.jsx)(v,{className:`size-3 text-text-3`})]})]}),c&&(0,K.jsxs)(`div`,{className:`px-2 pb-2 space-y-1.5 select-text`,children:[(e.type===`tool_use`||e.type===`approval_request`)&&(0,K.jsx)(vt,{name:p,input:m,projectName:i,toolUseId:M}),N&&(0,K.jsx)(wt,{content:N.content,lineCount:N.lineCount}),w&&(0,K.jsx)(Ct,{events:C,projectName:i,variant:o}),k&&(0,K.jsx)(it,{filePath:k,projectName:i??``}),h&&!(te&&!g)&&!(A&&!g)&&!(j&&!g)&&(0,K.jsx)(xt,{toolName:p,output:t.output})]})]})}function _t({name:e,input:t}){let n=e=>String(e??``);switch(e){case`Read`:case`Write`:case`Edit`:case`MultiEdit`:case`NotebookEdit`:return(0,K.jsxs)(K.Fragment,{children:[e,` `,(0,K.jsx)(`span`,{className:`text-text-subtle`,children:j(n(t.file_path))})]});case`Bash`:case`PowerShell`:{let r=t.description?n(t.description):n(t.command);return(0,K.jsxs)(K.Fragment,{children:[e,` `,(0,K.jsx)(`span`,{className:`text-text-subtle${t.description?``:` font-mono`}`,children:$(r,60)})]})}case`Glob`:return(0,K.jsxs)(K.Fragment,{children:[e,` `,(0,K.jsx)(`span`,{className:`font-mono text-text-subtle`,children:n(t.pattern)})]});case`Grep`:return(0,K.jsxs)(K.Fragment,{children:[e,` `,(0,K.jsx)(`span`,{className:`font-mono text-text-subtle`,children:$(n(t.pattern),40)})]});case`WebSearch`:return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(D,{className:`size-3 inline`}),` `,e,` `,(0,K.jsx)(`span`,{className:`text-text-subtle`,children:$(n(t.query),50)})]});case`WebFetch`:return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(i,{className:`size-3 inline`}),` `,e,` `,(0,K.jsx)(`span`,{className:`text-text-subtle`,children:$(n(t.url),50)})]});case`ToolSearch`:return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(D,{className:`size-3 inline`}),` `,e,` `,(0,K.jsx)(`span`,{className:`text-text-subtle`,children:$(n(t.query),50)})]});case`ImageGen`:{let e=(n(t.prompt).split(`
4
+ `).find(e=>e.trim())??``)||j(n(t.file_path));return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(w,{className:`size-3 inline`}),` Image`,(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[` `,$(e,50)]})]})}case`Agent`:case`Task`:{let r=Q(e,t),i=$(n(t.description||t.prompt),r?44:60);return(0,K.jsxs)(K.Fragment,{children:[!r&&(0,K.jsx)(O,{className:`size-3 inline`}),` `,e,` `,r&&(0,K.jsx)(`span`,{className:`text-text-primary font-medium`,children:r}),(0,K.jsx)(`span`,{className:`text-text-subtle`,children:r?` · ${i}`:i})]})}case`SendMessage`:return(0,K.jsx)(We,{name:e,input:t});case`TodoWrite`:{let n=Array.isArray(t.todos)?t.todos:[],r=n.filter(e=>e.status===`completed`).length;return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(b,{className:`size-3 inline`}),` `,e,` `,(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[r,`/`,n.length,` done`]})]})}case`AskUserQuestion`:{let n=Array.isArray(t.questions)?t.questions:[],r=!!t.answers;return(0,K.jsxs)(K.Fragment,{children:[e,` `,(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[n.length,` question`,n.length===1?``:`s`,r?` ✓`:``]})]})}case`ScheduleWakeup`:return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(a,{className:`size-3 inline`}),` `,e,` `,(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[`in `,Ot(Number(t.delaySeconds)),t.reason?` — ${$(n(t.reason),50)}`:``]})]});case`TaskCreate`:return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(b,{className:`size-3 inline`}),` `,e,` `,(0,K.jsx)(`span`,{className:`text-text-subtle`,children:$(n(t.subject),60)})]});case`TaskUpdate`:return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(b,{className:`size-3 inline`}),` `,e,` `,(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[`#`,n(t.taskId),` → `,n(t.status)]})]});case`TaskStop`:return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(b,{className:`size-3 inline`}),` `,e,` `,(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[`#`,n(t.taskId),` stopped`]})]});default:return(0,K.jsx)(K.Fragment,{children:e})}}function vt({name:e,input:t,projectName:n,toolUseId:r}){let o=e=>String(e??``),{openTab:s}=P(I(e=>({openTab:e.openTab}))),c=e=>{n&&s({type:`editor`,title:j(e),metadata:{filePath:e,projectName:n},projectId:n,closable:!0})},l=(e,t,r)=>{s({type:`git-diff`,title:`Diff ${j(e)}`,metadata:{filePath:e,projectName:n,original:t,modified:r},projectId:n??null,closable:!0})};switch(e){case`Bash`:case`PowerShell`:return(0,K.jsxs)(`div`,{className:`space-y-1`,children:[!!t.description&&(0,K.jsx)(`p`,{className:`text-text-subtle italic`,children:o(t.description)}),(0,K.jsx)(`pre`,{className:`font-mono text-text-secondary overflow-x-auto whitespace-pre-wrap break-all`,children:o(t.command)})]});case`Read`:case`Write`:case`Edit`:case`MultiEdit`:case`NotebookEdit`:{let n=o(t.notebook_path||t.file_path),i=e===`Edit`&&(!!t.old_string||!!t.new_string),a=e=>r?`${r}-${e}`:void 0;return(0,K.jsxs)(`div`,{className:`space-y-1`,children:[(0,K.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,K.jsxs)(`button`,{type:`button`,className:`font-mono text-text-secondary break-all hover:text-primary hover:underline text-left flex items-center gap-1 min-w-0`,onClick:()=>c(n),title:`Open file in editor`,children:[(0,K.jsx)(m,{className:`size-3 shrink-0`}),n]}),i&&(0,K.jsxs)(`button`,{type:`button`,className:`text-text-subtle hover:text-primary hover:underline flex items-center gap-1 shrink-0 whitespace-nowrap`,onClick:()=>l(n,o(t.old_string),o(t.new_string)),title:`View diff in new tab`,children:[(0,K.jsx)(g,{className:`size-3 shrink-0`}),`View Diff`]})]}),i&&(0,K.jsx)(`div`,{"data-edit-ref":a(0),children:(0,K.jsx)(Dt,{oldStr:o(t.old_string),newStr:o(t.new_string),filePath:n})}),e===`MultiEdit`&&Array.isArray(t.edits)&&(0,K.jsx)(`div`,{className:`space-y-1.5`,children:t.edits.map((e,t)=>(0,K.jsxs)(`div`,{"data-edit-ref":a(t),className:`space-y-0.5`,children:[(0,K.jsxs)(`p`,{className:`text-text-subtle text-[10px]`,children:[`Edit `,t+1]}),(0,K.jsx)(Dt,{oldStr:o(e.old_string),newStr:o(e.new_string),filePath:n})]},t))}),e===`Write`&&!!t.content&&(0,K.jsx)(`pre`,{"data-edit-ref":a(0),className:`font-mono text-text-subtle overflow-x-auto max-h-32 whitespace-pre-wrap`,children:$(o(t.content),300)})]})}case`Glob`:return(0,K.jsxs)(`p`,{className:`font-mono text-text-secondary`,children:[o(t.pattern),t.path?` in ${o(t.path)}`:``]});case`Grep`:return(0,K.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,K.jsxs)(`p`,{className:`font-mono text-text-secondary`,children:[`/`,o(t.pattern),`/`]}),!!t.path&&(0,K.jsxs)(`p`,{className:`text-text-subtle`,children:[`in `,o(t.path)]})]});case`TodoWrite`:return(0,K.jsx)(bt,{todos:t.todos??[]});case`Agent`:case`Task`:{let n=Q(e,t);return(0,K.jsxs)(`div`,{className:`space-y-1`,children:[!!n&&(0,K.jsxs)(`p`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,K.jsx)(`span`,{className:`text-text-subtle`,children:`Name`}),(0,K.jsx)(`span`,{className:`font-medium text-text-primary`,children:n}),(0,K.jsx)(`span`,{className:`inline-block rounded px-1.5 py-0.5 text-[10px] bg-accent-2/15 text-accent-2`,children:`teammate`}),t.isolation===`worktree`&&(0,K.jsx)(`span`,{className:`inline-block rounded px-1.5 py-0.5 text-[10px] bg-panel-2 text-text-3`,children:`worktree`})]}),!!t.description&&(0,K.jsx)(`p`,{className:`text-text-secondary font-medium`,children:o(t.description)}),!!t.subagent_type&&(0,K.jsxs)(`p`,{className:`text-text-subtle`,children:[`Type: `,o(t.subagent_type)]}),!!t.prompt&&(0,K.jsx)(q,{content:o(t.prompt),maxHeight:`max-h-48`})]})}case`SendMessage`:return(0,K.jsx)(Ge,{input:t});case`ToolSearch`:return(0,K.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,K.jsx)(`p`,{className:`font-mono text-text-secondary`,children:o(t.query)}),!!t.max_results&&(0,K.jsxs)(`p`,{className:`text-text-subtle`,children:[`Max results: `,o(t.max_results)]})]});case`WebFetch`:return(0,K.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,K.jsxs)(`a`,{href:o(t.url),target:`_blank`,rel:`noopener noreferrer`,className:`font-mono text-primary hover:underline break-all flex items-center gap-1`,children:[(0,K.jsx)(i,{className:`size-3 shrink-0`}),o(t.url)]}),!!t.prompt&&(0,K.jsx)(`p`,{className:`text-text-subtle`,children:$(o(t.prompt),100)})]});case`AskUserQuestion`:{let e=t.questions??[],n=t.answers??{};return(0,K.jsx)(`div`,{className:`space-y-2`,children:e.map((e,t)=>(0,K.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,K.jsxs)(`p`,{className:`text-text-primary font-medium`,children:[e.header?`${e.header}: `:``,e.question]}),(0,K.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.options.map((t,r)=>(0,K.jsx)(`span`,{className:`inline-block rounded px-1.5 py-0.5 text-xs border ${(n[e.question]??``).split(`, `).includes(t.label)?`border-primary bg-primary/20 text-text-primary`:`border-border text-text-subtle`}`,children:t.label},r))}),n[e.question]&&(0,K.jsxs)(`p`,{className:`text-foreground text-xs`,children:[`Answer: `,n[e.question]]})]},t))})}case`ScheduleWakeup`:{let e=Number(t.delaySeconds)||0;return(0,K.jsxs)(`div`,{className:`space-y-1`,children:[(0,K.jsxs)(`p`,{className:`text-text-secondary`,children:[(0,K.jsx)(a,{className:`size-3 inline mr-1`}),`Wake in `,(0,K.jsx)(`span`,{className:`font-medium text-text-primary`,children:Ot(e)}),(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[` (`,e,`s)`]})]}),!!t.reason&&(0,K.jsx)(`p`,{className:`text-text-secondary italic`,children:o(t.reason)}),!!t.prompt&&(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`p`,{className:`text-text-subtle text-[10px] mb-0.5`,children:`Prompt on wake`}),(0,K.jsx)(q,{content:o(t.prompt),maxHeight:`max-h-48`})]})]})}case`TaskCreate`:return(0,K.jsxs)(`div`,{className:`space-y-1`,children:[(0,K.jsx)(`p`,{className:`text-text-primary font-medium`,children:o(t.subject)}),!!t.description&&(0,K.jsx)(`p`,{className:`text-text-subtle`,children:o(t.description)}),!!t.activeForm&&(0,K.jsx)(`p`,{className:`text-text-subtle italic`,children:o(t.activeForm)})]});case`TaskUpdate`:return(0,K.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,K.jsxs)(`span`,{className:`font-mono text-text-secondary`,children:[`#`,o(t.taskId)]}),(0,K.jsx)(yt,{status:o(t.status)})]});case`TaskStop`:return(0,K.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,K.jsxs)(`span`,{className:`font-mono text-text-secondary`,children:[`#`,o(t.taskId)]}),(0,K.jsx)(yt,{status:`stopped`})]});case`ImageGen`:return(0,K.jsxs)(`div`,{className:`space-y-1`,children:[!!t.prompt&&(0,K.jsx)(`p`,{className:`text-text-secondary whitespace-pre-wrap`,children:o(t.prompt)}),t.transparentBackground===!0&&(0,K.jsx)(`p`,{className:`text-text-subtle`,children:`Transparent background`})]});default:return(0,K.jsx)(`pre`,{className:`overflow-x-auto text-text-secondary font-mono whitespace-pre-wrap break-all`,children:JSON.stringify(t,null,2)})}}function yt({status:e}){return(0,K.jsx)(`span`,{className:`inline-block rounded px-1.5 py-0.5 text-[10px] border ${e===`completed`?`text-success border-success/30 bg-success/10`:e===`in_progress`?`text-warning border-warning/30 bg-warning/10`:`text-text-subtle border-border bg-surface`}`,children:e})}function bt({todos:e}){return(0,K.jsx)(`div`,{className:`space-y-0.5`,children:e.map((e,t)=>(0,K.jsxs)(`div`,{className:`flex items-start gap-1.5`,children:[(0,K.jsx)(`span`,{className:`shrink-0 mt-0.5 ${e.status===`completed`?`text-success`:e.status===`in_progress`?`text-warning`:`text-text-subtle`}`,children:e.status===`completed`?`✓`:e.status===`in_progress`?`▶`:`○`}),(0,K.jsx)(`span`,{className:e.status===`completed`?`line-through text-text-subtle`:`text-text-secondary`,children:e.content})]},t))})}function xt({toolName:e,output:t}){let[n,r]=(0,G.useState)(!1),i=(0,G.useMemo)(()=>{if(e!==`Agent`&&e!==`Task`)return null;try{let e=JSON.parse(t);if(Array.isArray(e)){let t=e.filter(e=>e.type===`text`&&e.text).map(e=>e.text).join(`
5
5
 
6
6
  `);if(t)return t}if(typeof e==`string`)return e}catch{if(t&&!t.startsWith(`[{`))return t}return null},[e,t]);return e===`SendMessage`&&He(t)?(0,K.jsx)(Ke,{output:t}):i?(0,K.jsxs)(`div`,{className:`border-t border-border pt-1.5 space-y-1`,children:[(0,K.jsx)(q,{content:i,maxHeight:`max-h-60`}),(0,K.jsxs)(`button`,{type:`button`,onClick:()=>r(!n),className:`flex items-center gap-1 text-[10px] text-text-subtle hover:text-text-secondary transition-colors`,children:[(0,K.jsx)(d,{className:`size-3`}),n?`Hide`:`Show`,` raw`]}),n&&(0,K.jsx)(`pre`,{className:`overflow-x-auto text-text-subtle font-mono max-h-40 whitespace-pre-wrap break-all text-[10px]`,children:t})]}):(0,K.jsx)(St,{output:t})}function St({output:e}){let t=e.split(`
7
7
  `).length,n=t>3||e.length>200,[r,i]=(0,G.useState)(n);return(0,K.jsxs)(`div`,{className:`border-t border-border pt-1.5`,children:[n&&(0,K.jsxs)(`button`,{type:`button`,onClick:()=>i(!r),className:`flex items-center gap-1 text-[10px] text-text-subtle hover:text-text-secondary transition-colors mb-1`,children:[r?(0,K.jsx)(v,{className:`size-3`}):(0,K.jsx)(s,{className:`size-3`}),`Output (`,t,` lines)`]}),(0,K.jsx)(`pre`,{className:`overflow-x-auto text-text-subtle font-mono whitespace-pre-wrap break-all ${r?`max-h-16 overflow-hidden`:`max-h-60`}`,children:e})]})}function Ct({events:e,projectName:t,className:n,variant:r=`chat`}){let i=[],a=``;for(let t of e)if(t.type===`text`)a+=t.content;else if(t.type===`tool_use`)a&&=(i.push({kind:`text`,content:a}),``),i.push({kind:`tool`,tool:t});else if(t.type===`tool_result`){let e=t.toolUseId,n=e?i.find(t=>t.kind===`tool`&&t.tool.type===`tool_use`&&t.tool.toolUseId===e&&!t.result):i.findLast(e=>e.kind===`tool`&&!e.result);n&&(n.result=t)}a&&i.push({kind:`text`,content:a});let o=(0,G.useRef)(null),s=(0,G.useRef)(!1);return(0,G.useEffect)(()=>{o.current&&!s.current&&(o.current.scrollTop=o.current.scrollHeight)},[i.length]),(0,K.jsx)(`div`,{ref:o,onScroll:e=>{let t=e.currentTarget;s.current=t.scrollTop+t.clientHeight<t.scrollHeight-20},className:n??`border-l-2 border-accent/20 pl-2 space-y-1 mt-1 max-h-64 md:max-h-96 overflow-y-auto`,children:i.map((e,n)=>e.kind===`text`?(0,K.jsx)(`div`,{className:`text-text-secondary text-[11px]`,children:(0,K.jsx)(q,{content:e.content,maxHeight:`max-h-24`})},`st-${n}`):(0,K.jsx)(gt,{tool:e.tool,result:e.result,completed:!!e.result,projectName:t,variant:r},`sc-${n}`))})}function wt({content:e,lineCount:t}){let n=(0,G.useRef)(null),r=(0,G.useRef)(!1);return(0,G.useEffect)(()=>{n.current&&!r.current&&(n.current.scrollTop=n.current.scrollHeight)},[e]),(0,K.jsxs)(`div`,{className:`border-t border-border pt-1.5`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-1 text-[10px] text-warning mb-1`,children:[(0,K.jsx)(E,{className:`size-3 animate-spin`}),(0,K.jsxs)(`span`,{children:[`Output (`,t,` line`,t===1?``:`s`,`, streaming...)`]})]}),(0,K.jsx)(`pre`,{ref:n,onScroll:e=>{let t=e.currentTarget;r.current=t.scrollTop+t.clientHeight<t.scrollHeight-20},className:`overflow-x-auto overflow-y-auto max-h-60 text-text-subtle font-mono whitespace-pre-wrap break-all text-[11px]`,children:e.split(`
8
8
  `).slice(-200).join(`
9
- `)})]})}var Tt=A(()=>import(`./edit-diff-preview-DD4HayXY.js`),__vite__mapDeps([42,2,3,43])),Et=(0,G.lazy)(()=>Tt);function Dt(e){return(0,K.jsx)(G.Suspense,{fallback:(0,K.jsx)(`div`,{className:`animate-pulse h-8 bg-muted rounded`}),children:(0,K.jsx)(Et,{...e})})}function $(e,t=50){return e?e.length>t?e.slice(0,t)+`…`:e:``}function Ot(e){if(!Number.isFinite(e)||e<=0)return`0s`;let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=Math.round(e%60),i=[];return t&&i.push(`${t}h`),n&&i.push(`${n}m`),(r||i.length===0)&&i.push(`${r}s`),i.join(` `)}export{st as a,W as c,Me as d,xe as f,ct as i,je as l,gt as n,Le as o,Se as p,dt as r,U as s,Ct as t,B as u};
9
+ `)})]})}var Tt=k(()=>import(`./edit-diff-preview-D-FNLOU2.js`),__vite__mapDeps([42,2,3,43])),Et=(0,G.lazy)(()=>Tt);function Dt(e){return(0,K.jsx)(G.Suspense,{fallback:(0,K.jsx)(`div`,{className:`animate-pulse h-8 bg-muted rounded`}),children:(0,K.jsx)(Et,{...e})})}function $(e,t=50){return e?e.length>t?e.slice(0,t)+`…`:e:``}function Ot(e){if(!Number.isFinite(e)||e<=0)return`0s`;let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=Math.round(e%60),i=[];return t&&i.push(`${t}h`),n&&i.push(`${n}m`),(r||i.length===0)&&i.push(`${r}s`),i.join(` `)}export{st as a,W as c,Me as d,xe as f,ct as i,je as l,gt as n,Le as o,Se as p,dt as r,U as s,Ct as t,B as u};
@@ -0,0 +1 @@
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t}from"./vendor-markdown-QKPNiWEd.js";var n=30;function r(e,t=n){return Math.round(e*1e6/t)}var i=e(t(),1);function a(e,t){return t||e}function o(e=typeof window<`u`?window.isSecureContext:!0){return e?`This browser has no WebCodecs VideoDecoder — try Chrome, Edge, or Safari 16.4+.`:`Video needs a secure origin on this transport: browsers only expose WebCodecs over HTTPS or on localhost. Reach PPM through its HTTPS tunnel, or install the WebRTC relay in Settings, which streams over plain HTTP too.`}function s(e){let[t,n]=(0,i.useState)(`idle`),[s,c]=(0,i.useState)(null),[l,u]=(0,i.useState)({width:0,height:0}),d=(0,i.useRef)(null),f=(0,i.useRef)(null),p=(0,i.useRef)(!1),m=(0,i.useRef)(0),h=(0,i.useRef)(0),g=(0,i.useRef)(null),_=(0,i.useRef)(!1),v=(0,i.useCallback)(e=>{n(`error`),c(e)},[]),y=(0,i.useCallback)(async t=>{if(g.current=t,typeof VideoDecoder>`u`){n(`unsupported`),c(o());return}let r={codec:t,optimizeForLatency:!0};try{if(!(await VideoDecoder.isConfigSupported(r)).supported){n(`unsupported`),c(`This browser's decoder does not support ${t}.`);return}}catch(e){v(e.message);return}d.current?.close(),p.current=!1,h.current=0;let i=new VideoDecoder({output:t=>{m.current+=1;let n=e.current;n&&((n.width!==t.displayWidth||n.height!==t.displayHeight)&&(n.width=t.displayWidth,n.height=t.displayHeight,u({width:t.displayWidth,height:t.displayHeight})),f.current||=n.getContext(`2d`),f.current?.drawImage(t,0,0,n.width,n.height)),t.close()},error:e=>b(e.message)});try{i.configure(r)}catch(e){v(e.message);return}d.current=i,_.current=!0,n(`ready`),c(null)},[e,v]),b=(0,i.useCallback)(e=>{if(!_.current)return;let t=g.current;if(!t){v(e);return}try{d.current?.close()}catch{}d.current=null,y(t)},[y,v]);return{status:t,errorMessage:s,configure:y,decodeAccessUnit:(0,i.useCallback)((e,t)=>{let n=d.current;if(!(!n||n.state!==`configured`)&&a(p.current,t)){t&&(p.current=!0);try{n.decode(new EncodedVideoChunk({type:t?`key`:`delta`,timestamp:r(h.current++),data:e}))}catch(e){b(e.message)}}},[b]),reset:(0,i.useCallback)(()=>{_.current=!1;try{d.current?.close()}catch{}d.current=null,p.current=!1,m.current=0,h.current=0,n(`idle`),c(null)},[]),getFrameCount:(0,i.useCallback)(()=>m.current,[]),frameSize:l}}export{s as n,a as t};
@@ -1,7 +1,7 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t}from"./vendor-markdown-QKPNiWEd.js";import{O as n,r}from"./api-client-F5Zi1sR0.js";import{i}from"./project-store-CCimwgGF.js";import{H as a,Rn as o,U as s,V as c,W as l,on as u}from"./index-DhWjx5iR.js";var d=[`ppm.blame.copySha`,`ppm.blame.fileHistory`,`ppm.blame.blameFile`,`ppm.blame.showInGraph`],f=7;function p(e){return e.replace(/[\\`*_{}[\]()#+\-!<>]/g,e=>`\\${e}`)}function m(e){let t=e.trim().split(/\s+/).filter(Boolean);return t.length===0?`?`:(t[0][0]+(t.length>1?t[t.length-1][0]:``)).toUpperCase()}var h=[`4E79A7`,`F28E2B`,`E15759`,`76B7B2`,`59A14F`,`AF7AA1`,`9C755F`,`B07AA1`];function g(e){let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)|0;return h[Math.abs(t)%h.length]}function _(e){let t=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><circle cx="8" cy="8" r="8" fill="#${g(e)}"/><text x="8" y="11.5" font-family="sans-serif" font-size="7" font-weight="700" fill="#ffffff" text-anchor="middle">${v(m(e))}</text></svg>`;return`data:image/svg+xml;charset=utf-8,${encodeURIComponent(t)}`}function v(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function y(e,t){return`command:${e}?${encodeURIComponent(JSON.stringify(t))}`}function b(e){let{commit:t,detail:n,filePath:r,projectPath:i,now:a=Date.now()}=e;if(l(t.hash))return null;let o=t.author||`Unknown`,u=t.hash.slice(0,f),m=[],h=t.authorTime>0?`${s(t.authorTime*1e3,a)} (${c(t.authorTime*1e3)})`:``;m.push(`![](${_(o)}) **${p(o)}**${h?` &nbsp;$(history) ${p(h)}`:``}`);let g=n?.message||t.summary;g&&(m.push(``),m.push(p(g).split(`
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t}from"./vendor-markdown-QKPNiWEd.js";import{O as n,r}from"./api-client-F5Zi1sR0.js";import{i}from"./project-store-CCimwgGF.js";import{G as a,H as o,U as s,Vn as c,W as l,cn as u}from"./index-CyDLBddf.js";var d=[`ppm.blame.copySha`,`ppm.blame.fileHistory`,`ppm.blame.blameFile`,`ppm.blame.showInGraph`],f=7;function p(e){return e.replace(/[\\`*_{}[\]()#+\-!<>]/g,e=>`\\${e}`)}function m(e){let t=e.trim().split(/\s+/).filter(Boolean);return t.length===0?`?`:(t[0][0]+(t.length>1?t[t.length-1][0]:``)).toUpperCase()}var h=[`4E79A7`,`F28E2B`,`E15759`,`76B7B2`,`59A14F`,`AF7AA1`,`9C755F`,`B07AA1`];function g(e){let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)|0;return h[Math.abs(t)%h.length]}function _(e){let t=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><circle cx="8" cy="8" r="8" fill="#${g(e)}"/><text x="8" y="11.5" font-family="sans-serif" font-size="7" font-weight="700" fill="#ffffff" text-anchor="middle">${v(m(e))}</text></svg>`;return`data:image/svg+xml;charset=utf-8,${encodeURIComponent(t)}`}function v(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function y(e,t){return`command:${e}?${encodeURIComponent(JSON.stringify(t))}`}function b(e){let{commit:t,detail:n,filePath:r,projectPath:i,now:s=Date.now()}=e;if(a(t.hash))return null;let c=t.author||`Unknown`,u=t.hash.slice(0,f),m=[],h=t.authorTime>0?`${l(t.authorTime*1e3,s)} (${o(t.authorTime*1e3)})`:``;m.push(`![](${_(c)}) **${p(c)}**${h?` &nbsp;$(history) ${p(h)}`:``}`);let g=n?.message||t.summary;g&&(m.push(``),m.push(p(g).split(`
2
2
  `).join(`
3
3
  `)));let v=[``,`---`,``],b=[`[$(git-commit) ${u}](${y(`ppm.blame.copySha`,[t.hash])} "Copy commit hash")`];i&&b.push(`[$(history) File History](${y(`ppm.blame.fileHistory`,[i,r])} "Open the file's history")`,`[$(users) Blame](${y(`ppm.blame.blameFile`,[i,r])} "Open the blame view")`,`[$(git-branch) Graph](${y(`ppm.blame.showInGraph`,[i])} "Open the commit graph")`),m.push(...v),m.push(b.join(` &nbsp; `));let x=[...(n?.removed??[]).map(e=>`-${e}`),...(n?.added??[]).map(e=>`+${e}`)];if(x.length>0){m.push(...v),m.push("```diff"),m.push(...x),m.push("```"),m.push(``);let e=(n?.removed.length??0)===0?`added in`:`in`;m.push(`Changes ${e} \`${u}\``)}return{value:m.join(`
4
- `),isTrusted:{enabledCommands:[...d]},supportThemeIcons:!0}}var x=!1;function S(e,t){window.dispatchEvent(new CustomEvent(`ext:command:execute`,{detail:{command:e,args:t}}))}function C(e){return typeof e==`string`&&/^[0-9a-f]{7,40}$/.test(e)?e:null}function w(e){return typeof e==`string`&&e.length>0?e:null}function T(e,t,n){let r=w(t),i=w(n);!r||!i||S(e,[r,i])}function E(e){x||(x=!0,e.editor.registerCommand(`ppm.blame.copySha`,(e,t)=>{let r=C(t);r&&o(r).then(e=>{n[e?`success`:`error`](e?`Copied ${r.slice(0,7)}`:`Could not copy`)})}),e.editor.registerCommand(`ppm.blame.fileHistory`,(e,t,n)=>{T(`git-graph.fileHistory`,t,n)}),e.editor.registerCommand(`ppm.blame.blameFile`,(e,t,n)=>{T(`git-graph.blame`,t,n)}),e.editor.registerCommand(`ppm.blame.showInGraph`,(e,t)=>{let n=w(t);n&&S(`git-graph.view`,[n])}))}var D=`diff`,O=!1;function k(e){if(!O){if(e.languages.getLanguages().some(e=>e.id===`diff`)){O=!0;return}e.languages.register({id:D,aliases:[`Diff`,`patch`],extensions:[`.diff`,`.patch`]}),e.languages.setMonarchTokensProvider(D,{tokenizer:{root:[[/^diff .*$/,`meta.diff.header`],[/^(index|similarity index|rename from|rename to|new file mode|deleted file mode|old mode|new mode) .*$/,`meta.diff.header`],[/^(\+\+\+|---) .*$/,`meta.diff.header`],[/^@@.*$/,`meta.diff.range`],[/^\+.*$/,`inserted`],[/^-.*$/,`deleted`],[/^\\ .*$/,`meta.diff.header`],[/^.*$/,``]]}}),O=!0}}var A=e(t(),1),j=`inline-blame-styles`,M=`
4
+ `),isTrusted:{enabledCommands:[...d]},supportThemeIcons:!0}}var x=!1;function S(e,t){window.dispatchEvent(new CustomEvent(`ext:command:execute`,{detail:{command:e,args:t}}))}function C(e){return typeof e==`string`&&/^[0-9a-f]{7,40}$/.test(e)?e:null}function w(e){return typeof e==`string`&&e.length>0?e:null}function T(e,t,n){let r=w(t),i=w(n);!r||!i||S(e,[r,i])}function E(e){x||(x=!0,e.editor.registerCommand(`ppm.blame.copySha`,(e,t)=>{let r=C(t);r&&c(r).then(e=>{n[e?`success`:`error`](e?`Copied ${r.slice(0,7)}`:`Could not copy`)})}),e.editor.registerCommand(`ppm.blame.fileHistory`,(e,t,n)=>{T(`git-graph.fileHistory`,t,n)}),e.editor.registerCommand(`ppm.blame.blameFile`,(e,t,n)=>{T(`git-graph.blame`,t,n)}),e.editor.registerCommand(`ppm.blame.showInGraph`,(e,t)=>{let n=w(t);n&&S(`git-graph.view`,[n])}))}var D=`diff`,O=!1;function k(e){if(!O){if(e.languages.getLanguages().some(e=>e.id===`diff`)){O=!0;return}e.languages.register({id:D,aliases:[`Diff`,`patch`],extensions:[`.diff`,`.patch`]}),e.languages.setMonarchTokensProvider(D,{tokenizer:{root:[[/^diff .*$/,`meta.diff.header`],[/^(index|similarity index|rename from|rename to|new file mode|deleted file mode|old mode|new mode) .*$/,`meta.diff.header`],[/^(\+\+\+|---) .*$/,`meta.diff.header`],[/^@@.*$/,`meta.diff.range`],[/^\+.*$/,`inserted`],[/^-.*$/,`deleted`],[/^\\ .*$/,`meta.diff.header`],[/^.*$/,``]]}}),O=!0}}var A=e(t(),1),j=`inline-blame-styles`,M=`
5
5
  .inline-blame-annotation {
6
6
  color: var(--color-muted-foreground);
7
7
  opacity: 0.6;
@@ -13,4 +13,4 @@ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t}from"./vendor-m
13
13
  .monaco-hover img {
14
14
  vertical-align: text-bottom;
15
15
  }
16
- `;function N(e){let t=e.getDomNode()?.ownerDocument??document;if(t.getElementById(j))return;let n=t.createElement(`style`);n.id=j,n.textContent=M,t.head?.appendChild(n)}function P({editor:e,monaco:t,projectName:n,filePath:o,rev:s,enabled:c,readOnly:d=!1}){let[f,p]=(0,A.useState)(null),[m,h]=(0,A.useState)(!1),[g,_]=(0,A.useState)(0),[v,y]=(0,A.useState)(0),[x,S]=(0,A.useState)(null),C=(0,A.useRef)(new Map),w=(0,A.useRef)(null),T=(0,A.useRef)(0),D=i(e=>e.projects.find(e=>e.name===n)?.path),O=u(n),j=O.repo?.path??D,M=o?O.repoPath(o):null,P=(0,A.useCallback)(()=>y(e=>e+1),[]);(0,A.useEffect)(()=>{!t||!c||(k(t),E(t))},[t,c]),(0,A.useEffect)(()=>{if(!c||!n||!o||M==null){p(null);return}let e=!1,t=new URLSearchParams({path:M});return s&&t.set(`rev`,s),r.get(O.gitUrl(`/blame?${t}`)).then(t=>{e||(p(t),h(!1))}).catch(()=>{e||p(null)}),()=>{e=!0}},[c,n,o,M,s,v,O]),(0,A.useEffect)(()=>{if(!e||!c)return;_(e.getPosition()?.lineNumber??0);let t=e.onDidChangeCursorPosition(e=>_(e.position.lineNumber));if(d)return()=>t.dispose();let n=e.onDidChangeModelContent(()=>h(!0));return()=>{t.dispose(),n.dispose()}},[e,c,d]),(0,A.useEffect)(()=>{if(!e||!c||!window.matchMedia?.(`(hover: none)`).matches)return;let t=e.onMouseDown(t=>{let n=t.target.position,r=e.getModel();!n||!r||n.lineNumber===T.current&&(n.column<r.getLineMaxColumn(n.lineNumber)||e.getAction(`editor.action.showHover`)?.run())});return()=>t.dispose()},[e,c]);let F=(()=>{if(!f||m||g<=0)return null;let e=f.lines[g-1],t=e?.finalLine===g?e:f.lines.find(e=>e.finalLine===g);if(!t)return null;let n=f.commits[t.hash];return n?{commit:n,origLine:t.origLine}:null})(),I=F?.commit??null,L=I&&!l(I.hash)?I.hash:null,R=I?.filename||M||void 0,z=F?.origLine??0,B=`${L} ${z} ${R}`;return(0,A.useEffect)(()=>{if(!c||!n||!L||!R||z<1){S(null);return}let e=B,t=C.current;if(t.has(e)){S({key:e,value:t.get(e)??null});return}let i=!1,a=new URLSearchParams({hash:L,path:R,line:String(z)});return r.get(O.gitUrl(`/commit-line?${a}`)).then(n=>{i||(t.size>=200&&t.delete(t.keys().next().value),t.set(e,n??null),S({key:e,value:n??null}))}).catch(()=>{i||S(null)}),()=>{i=!0}},[c,n,L,R,z,B,O]),(0,A.useEffect)(()=>{if(!e||!t)return;if(!c||!I||g<=0){T.current=0,w.current?.clear();return}N(e);let n=e.getModel();if(!n||g>n.getLineCount()){T.current=0,w.current?.clear();return}T.current=g;let r=n.getLineMaxColumn(g),i=a(I),o={range:new t.Range(g,r,g,r),options:{after:{content:` ${i}`,inlineClassName:`inline-blame-annotation`},showIfCollapsed:!0,hoverMessage:b({commit:I,detail:x?.key===B?x.value:null,filePath:M??``,projectPath:j})}};w.current?w.current.set([o]):w.current=e.createDecorationsCollection([o])},[e,t,c,I,g,x,B,M,j]),(0,A.useEffect)(()=>()=>{w.current?.clear(),w.current=null},[]),{stale:m,refresh:P}}export{P as t};
16
+ `;function N(e){let t=e.getDomNode()?.ownerDocument??document;if(t.getElementById(j))return;let n=t.createElement(`style`);n.id=j,n.textContent=M,t.head?.appendChild(n)}function P({editor:e,monaco:t,projectName:n,filePath:o,rev:c,enabled:l,readOnly:d=!1}){let[f,p]=(0,A.useState)(null),[m,h]=(0,A.useState)(!1),[g,_]=(0,A.useState)(0),[v,y]=(0,A.useState)(0),[x,S]=(0,A.useState)(null),C=(0,A.useRef)(new Map),w=(0,A.useRef)(null),T=(0,A.useRef)(0),D=i(e=>e.projects.find(e=>e.name===n)?.path),O=u(n),j=O.repo?.path??D,M=o?O.repoPath(o):null,P=(0,A.useCallback)(()=>y(e=>e+1),[]);(0,A.useEffect)(()=>{!t||!l||(k(t),E(t))},[t,l]),(0,A.useEffect)(()=>{if(!l||!n||!o||M==null){p(null);return}let e=!1,t=new URLSearchParams({path:M});return c&&t.set(`rev`,c),r.get(O.gitUrl(`/blame?${t}`)).then(t=>{e||(p(t),h(!1))}).catch(()=>{e||p(null)}),()=>{e=!0}},[l,n,o,M,c,v,O]),(0,A.useEffect)(()=>{if(!e||!l)return;_(e.getPosition()?.lineNumber??0);let t=e.onDidChangeCursorPosition(e=>_(e.position.lineNumber));if(d)return()=>t.dispose();let n=e.onDidChangeModelContent(()=>h(!0));return()=>{t.dispose(),n.dispose()}},[e,l,d]),(0,A.useEffect)(()=>{if(!e||!l||!window.matchMedia?.(`(hover: none)`).matches)return;let t=e.onMouseDown(t=>{let n=t.target.position,r=e.getModel();!n||!r||n.lineNumber===T.current&&(n.column<r.getLineMaxColumn(n.lineNumber)||e.getAction(`editor.action.showHover`)?.run())});return()=>t.dispose()},[e,l]);let F=(()=>{if(!f||m||g<=0)return null;let e=f.lines[g-1],t=e?.finalLine===g?e:f.lines.find(e=>e.finalLine===g);if(!t)return null;let n=f.commits[t.hash];return n?{commit:n,origLine:t.origLine}:null})(),I=F?.commit??null,L=I&&!a(I.hash)?I.hash:null,R=I?.filename||M||void 0,z=F?.origLine??0,B=`${L} ${z} ${R}`;return(0,A.useEffect)(()=>{if(!l||!n||!L||!R||z<1){S(null);return}let e=B,t=C.current;if(t.has(e)){S({key:e,value:t.get(e)??null});return}let i=!1,a=new URLSearchParams({hash:L,path:R,line:String(z)});return r.get(O.gitUrl(`/commit-line?${a}`)).then(n=>{i||(t.size>=200&&t.delete(t.keys().next().value),t.set(e,n??null),S({key:e,value:n??null}))}).catch(()=>{i||S(null)}),()=>{i=!0}},[l,n,L,R,z,B,O]),(0,A.useEffect)(()=>{if(!e||!t)return;if(!l||!I||g<=0){T.current=0,w.current?.clear();return}N(e);let n=e.getModel();if(!n||g>n.getLineCount()){T.current=0,w.current?.clear();return}T.current=g;let r=n.getLineMaxColumn(g),i=s(I),a={range:new t.Range(g,r,g,r),options:{after:{content:` ${i}`,inlineClassName:`inline-blame-annotation`},showIfCollapsed:!0,hoverMessage:b({commit:I,detail:x?.key===B?x.value:null,filePath:M??``,projectPath:j})}};w.current?w.current.set([a]):w.current=e.createDecorationsCollection([a])},[e,t,l,I,g,x,B,M,j]),(0,A.useEffect)(()=>()=>{w.current?.clear(),w.current=null},[]),{stale:m,refresh:P}}export{P as t};
@@ -1,4 +1,4 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import{o as n,r}from"./api-client-F5Zi1sR0.js";import"./ws-auth-Ytui7dXP.js";import{X as i}from"./index-DhWjx5iR.js";import{i as a,r as o,t as s}from"./lsp-client-B10suuaZ.js";var c=e(t(),1),l=new Map;function u(e,t){l.set(e.uri.toString(),t)}function ee(e){l.delete(e.uri.toString())}function d(e){return l.get(e.uri.toString())}function f(e){if(!e.startsWith(`file:`))return null;let t=e.slice(5),n=``;if(t.startsWith(`//`)){t=t.slice(2);let e=t.indexOf(`/`);n=e<0?t:t.slice(0,e),t=e<0?``:t.slice(e)}let r=t.split(`/`).map(p).join(`/`);return/^\/[A-Za-z]:/.test(r)?r.slice(1):n?`//${p(n)}${r}`:r}function p(e){try{return decodeURIComponent(e)}catch{return e}}var m=40,h=500,g=3,_=6,v=new Map,y=new Map;function te(e){return(y.get(e)??0)>=g}function b(e){x(e,(y.get(e)??0)+1)}function ne(e){x(e,g)}function x(e,t){for(y.delete(e),y.set(e,t);y.size>h;){let e=y.keys().next().value;if(e===void 0)return;y.delete(e)}}function re(e){y.delete(e)}async function S(e,t,n){let r=0,i=Array.from({length:Math.min(t,e.length)},async()=>{for(;;){let t=r++;if(t>=e.length)return;await n(e[t])}});await Promise.all(i)}function C(e,t){let n=e.replace(/\\/g,`/`).replace(/\/+$/,``),r=t.replace(/\\/g,`/`),i=n+`/`,a=/^[A-Za-z]:\//.test(i),o=r.slice(0,i.length);return(a?o.toLowerCase()!==i.toLowerCase():o!==i)?null:r.slice(i.length)}async function w(e,t,i,a){if(!i)return;let o=new Set,s=[...new Set(a)].filter(t=>{if(te(t))return!1;let n=v.get(t);return n&&(v.delete(t),!n.isDisposed())?(v.set(t,n),o.add(t),!1):t.startsWith(`file:`)&&!e.editor.getModel(e.Uri.parse(t))});s.length!==0&&(await S(s,_,async a=>{try{let s=f(a),c=s?C(i,s):null;if(!c){ne(a);return}let l=(await r.get(`${n(t)}/files/read?path=${encodeURIComponent(c)}`))?.content;if(typeof l!=`string`){b(a);return}re(a);let u=e.Uri.parse(a);if(e.editor.getModel(u)){o.add(a);return}v.set(a,e.editor.createModel(l,void 0,u)),o.add(a)}catch{b(a)}}),T(o))}function T(e){for(let t of[...v.keys()]){if(v.size<=m)return;if(e.has(t))continue;let n=v.get(t);v.delete(t);try{n?.dispose()}catch{}}}function E(){for(let e of v.values())try{e.dispose()}catch{}v.clear(),y.clear()}function D(e){if(!e)return;let t=new AbortController;return e.isCancellationRequested?t.abort():e.onCancellationRequested(()=>t.abort()),t.signal}function O(e){return{line:e.lineNumber-1,character:e.column-1}}function ie(e){return{lineNumber:e.line+1,column:e.character+1}}function k(e){return{start:{line:e.startLineNumber-1,character:e.startColumn-1},end:{line:e.endLineNumber-1,character:e.endColumn-1}}}function A(e){return{startLineNumber:e.start.line+1,startColumn:e.start.character+1,endLineNumber:e.end.line+1,endColumn:e.end.character+1}}var ae={1:`Text`,2:`Method`,3:`Function`,4:`Constructor`,5:`Field`,6:`Variable`,7:`Class`,8:`Interface`,9:`Module`,10:`Property`,11:`Unit`,12:`Value`,13:`Enum`,14:`Keyword`,15:`Snippet`,16:`Color`,17:`File`,18:`Reference`,19:`Folder`,20:`EnumMember`,21:`Constant`,22:`Struct`,23:`Event`,24:`Operator`,25:`TypeParameter`},oe={1:`File`,2:`Module`,3:`Namespace`,4:`Package`,5:`Class`,6:`Method`,7:`Property`,8:`Field`,9:`Constructor`,10:`Enum`,11:`Interface`,12:`Function`,13:`Variable`,14:`Constant`,15:`String`,16:`Number`,17:`Boolean`,18:`Array`,19:`Object`,20:`Key`,21:`Null`,22:`EnumMember`,23:`Struct`,24:`Event`,25:`Operator`,26:`TypeParameter`},se={1:`Error`,2:`Warning`,3:`Info`,4:`Hint`},ce={1:`Text`,2:`Read`,3:`Write`};function j(e,t){let n=ae[t??0];return e.languages.CompletionItemKind[n??`Text`]}function M(e,t){let n=oe[t??0];return e.languages.SymbolKind[n??`Variable`]}function N(e,t){let n=se[t??0];return e.MarkerSeverity[n??`Warning`]}function P(e,t){let n=ce[t??0];return e.languages.DocumentHighlightKind[n??`Text`]}function F(e){if(e!=null){if(Array.isArray(e)){let t=e.map(F).filter(e=>!!e?.value);return t.length===0?void 0:{value:t.map(e=>e.value).join(`
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import{o as n,r}from"./api-client-F5Zi1sR0.js";import"./ws-auth-Ytui7dXP.js";import{Z as i}from"./index-CyDLBddf.js";import{i as a,r as o,t as s}from"./lsp-client-Dr3vQ1bb.js";var c=e(t(),1),l=new Map;function u(e,t){l.set(e.uri.toString(),t)}function ee(e){l.delete(e.uri.toString())}function d(e){return l.get(e.uri.toString())}function f(e){if(!e.startsWith(`file:`))return null;let t=e.slice(5),n=``;if(t.startsWith(`//`)){t=t.slice(2);let e=t.indexOf(`/`);n=e<0?t:t.slice(0,e),t=e<0?``:t.slice(e)}let r=t.split(`/`).map(p).join(`/`);return/^\/[A-Za-z]:/.test(r)?r.slice(1):n?`//${p(n)}${r}`:r}function p(e){try{return decodeURIComponent(e)}catch{return e}}var m=40,h=500,g=3,_=6,v=new Map,y=new Map;function te(e){return(y.get(e)??0)>=g}function b(e){x(e,(y.get(e)??0)+1)}function ne(e){x(e,g)}function x(e,t){for(y.delete(e),y.set(e,t);y.size>h;){let e=y.keys().next().value;if(e===void 0)return;y.delete(e)}}function re(e){y.delete(e)}async function S(e,t,n){let r=0,i=Array.from({length:Math.min(t,e.length)},async()=>{for(;;){let t=r++;if(t>=e.length)return;await n(e[t])}});await Promise.all(i)}function C(e,t){let n=e.replace(/\\/g,`/`).replace(/\/+$/,``),r=t.replace(/\\/g,`/`),i=n+`/`,a=/^[A-Za-z]:\//.test(i),o=r.slice(0,i.length);return(a?o.toLowerCase()!==i.toLowerCase():o!==i)?null:r.slice(i.length)}async function w(e,t,i,a){if(!i)return;let o=new Set,s=[...new Set(a)].filter(t=>{if(te(t))return!1;let n=v.get(t);return n&&(v.delete(t),!n.isDisposed())?(v.set(t,n),o.add(t),!1):t.startsWith(`file:`)&&!e.editor.getModel(e.Uri.parse(t))});s.length!==0&&(await S(s,_,async a=>{try{let s=f(a),c=s?C(i,s):null;if(!c){ne(a);return}let l=(await r.get(`${n(t)}/files/read?path=${encodeURIComponent(c)}`))?.content;if(typeof l!=`string`){b(a);return}re(a);let u=e.Uri.parse(a);if(e.editor.getModel(u)){o.add(a);return}v.set(a,e.editor.createModel(l,void 0,u)),o.add(a)}catch{b(a)}}),T(o))}function T(e){for(let t of[...v.keys()]){if(v.size<=m)return;if(e.has(t))continue;let n=v.get(t);v.delete(t);try{n?.dispose()}catch{}}}function E(){for(let e of v.values())try{e.dispose()}catch{}v.clear(),y.clear()}function D(e){if(!e)return;let t=new AbortController;return e.isCancellationRequested?t.abort():e.onCancellationRequested(()=>t.abort()),t.signal}function O(e){return{line:e.lineNumber-1,character:e.column-1}}function ie(e){return{lineNumber:e.line+1,column:e.character+1}}function k(e){return{start:{line:e.startLineNumber-1,character:e.startColumn-1},end:{line:e.endLineNumber-1,character:e.endColumn-1}}}function A(e){return{startLineNumber:e.start.line+1,startColumn:e.start.character+1,endLineNumber:e.end.line+1,endColumn:e.end.character+1}}var ae={1:`Text`,2:`Method`,3:`Function`,4:`Constructor`,5:`Field`,6:`Variable`,7:`Class`,8:`Interface`,9:`Module`,10:`Property`,11:`Unit`,12:`Value`,13:`Enum`,14:`Keyword`,15:`Snippet`,16:`Color`,17:`File`,18:`Reference`,19:`Folder`,20:`EnumMember`,21:`Constant`,22:`Struct`,23:`Event`,24:`Operator`,25:`TypeParameter`},oe={1:`File`,2:`Module`,3:`Namespace`,4:`Package`,5:`Class`,6:`Method`,7:`Property`,8:`Field`,9:`Constructor`,10:`Enum`,11:`Interface`,12:`Function`,13:`Variable`,14:`Constant`,15:`String`,16:`Number`,17:`Boolean`,18:`Array`,19:`Object`,20:`Key`,21:`Null`,22:`EnumMember`,23:`Struct`,24:`Event`,25:`Operator`,26:`TypeParameter`},se={1:`Error`,2:`Warning`,3:`Info`,4:`Hint`},ce={1:`Text`,2:`Read`,3:`Write`};function j(e,t){let n=ae[t??0];return e.languages.CompletionItemKind[n??`Text`]}function M(e,t){let n=oe[t??0];return e.languages.SymbolKind[n??`Variable`]}function N(e,t){let n=se[t??0];return e.MarkerSeverity[n??`Warning`]}function P(e,t){let n=ce[t??0];return e.languages.DocumentHighlightKind[n??`Text`]}function F(e){if(e!=null){if(Array.isArray(e)){let t=e.map(F).filter(e=>!!e?.value);return t.length===0?void 0:{value:t.map(e=>e.value).join(`
2
2
 
3
3
  ---
4
4
 
@@ -1 +1 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t}from"./vendor-markdown-QKPNiWEd.js";import{t as n}from"./settings-store-DfuiLq_9.js";import{r,t as i}from"./apply-theme-Cc_cmrD5.js";import{t as a}from"./resolve-theme-STMsK2vc.js";import{A as o}from"./index-DhWjx5iR.js";var s=e(t(),1);function c(){let e=n(e=>e.themeStyle),t=n(e=>e.themeMode),c=n(e=>e.customThemeId),l=n(e=>e.customThemes),u=()=>o(r()??a(e,t,l,c)),[d,f]=(0,s.useState)(u);return(0,s.useEffect)(()=>{f(u());let e=()=>f(u());return window.addEventListener(i,e),()=>window.removeEventListener(i,e)},[e,t,c,l]),d}export{c as t};
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t}from"./vendor-markdown-QKPNiWEd.js";import{t as n}from"./settings-store-Cyuo8ceh.js";import{r,t as i}from"./apply-theme-Cc_cmrD5.js";import{t as a}from"./resolve-theme-STMsK2vc.js";import{j as o}from"./index-CyDLBddf.js";var s=e(t(),1);function c(){let e=n(e=>e.themeStyle),t=n(e=>e.themeMode),c=n(e=>e.customThemeId),l=n(e=>e.customThemes),u=()=>o(r()??a(e,t,l,c)),[d,f]=(0,s.useState)(u);return(0,s.useEffect)(()=>{f(u());let e=()=>f(u());return window.addEventListener(i,e),()=>window.removeEventListener(i,e)},[e,t,c,l]),d}export{c as t};
@@ -1 +1 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import{O as r,a as i}from"./api-client-F5Zi1sR0.js";import{n as a}from"./use-is-mobile-BClDZJP5.js";import{t as o}from"./button-DeAyLH9U.js";import{a as s,n as c,o as l,t as u}from"./dialog-Bocc0Fgb.js";import{t as d}from"./mobile-bottom-sheet-D4UyOatB.js";import{Tt as f}from"./index-DhWjx5iR.js";import{r as p}from"./format-bytes-CRZfxO2J.js";var m=e(t(),1),h=n();function g({target:e,onConfirm:t,onCancel:n}){let r=a(),[i,g]=(0,m.useState)(!1);if((0,m.useEffect)(()=>{e||g(!1)},[e]),!e)return null;let _=e.kind===`group`,v=_?`End app`:`End process`,y=_?e.group.cpu:e.proc.cpu,b=_?e.group.ramMB:e.proc.ramMB,x=(0,h.jsxs)(`div`,{className:`space-y-4`,"data-testid":`sysmon-kill-confirm`,"data-kill-kind":e.kind,children:[_?(0,h.jsxs)(`p`,{className:`text-sm`,children:[`End `,(0,h.jsx)(`span`,{className:`font-medium`,children:e.group.label}),` and all its`,` `,(0,h.jsx)(`span`,{className:`font-medium`,children:e.members.length}),` processes?`]}):(0,h.jsxs)(`p`,{className:`text-sm`,children:[`End `,(0,h.jsx)(`span`,{className:`font-medium`,children:e.proc.name}),` (pid `,e.proc.pid,`)?`]}),(0,h.jsxs)(`p`,{className:`text-xs text-text-subtle`,children:[`CPU `,y.toFixed(1),`% · RAM `,p(b)]}),!_&&(0,h.jsxs)(`label`,{className:`flex items-center justify-between gap-3 min-h-11 py-1`,children:[(0,h.jsx)(`span`,{className:`text-sm`,children:`Also end child processes`}),(0,h.jsx)(f,{checked:i,onCheckedChange:g,"data-testid":`sysmon-kill-tree`,"aria-label":`Also end child processes`})]}),(0,h.jsxs)(`div`,{className:`flex flex-col-reverse md:flex-row gap-2 md:justify-end pt-2`,children:[(0,h.jsx)(o,{variant:`outline`,onClick:n,"data-testid":`sysmon-kill-confirm-cancel`,className:`min-h-11`,children:`Cancel`}),(0,h.jsx)(o,{variant:`destructive`,autoFocus:!1,onClick:()=>t(e,i),"data-testid":`sysmon-kill-confirm-ok`,className:`min-h-11`,children:_?`End ${e.members.length} processes`:`End process`})]})]});return r?(0,h.jsx)(d,{open:!0,onClose:n,children:(0,h.jsxs)(`div`,{className:`px-4 pb-4`,children:[(0,h.jsx)(`h2`,{className:`text-base font-semibold mb-3`,children:v}),x]})}):(0,h.jsx)(u,{open:!0,onOpenChange:e=>!e&&n(),children:(0,h.jsxs)(c,{children:[(0,h.jsx)(s,{children:(0,h.jsx)(l,{children:v})}),x]})})}function _(e,t){return{pid:e.pid,startedAt:e.startedAt,tree:t}}function v(e,t){let n=e.rootPid===null?void 0:t.find(t=>t.pid===e.rootPid);return n?[_(n,!0)]:t.map(e=>_(e,!1))}function y(e){return e.some(e=>e.protected)}async function b(e){let t=i(),n={"Content-Type":`application/json`,"X-PPM-Request":`1`};t&&(n.Authorization=`Bearer ${t}`);let r=await fetch(`/api/system/resources/kill`,{method:`POST`,headers:n,body:JSON.stringify(e)}),a;try{a=await r.json()}catch{throw Error(r.ok?`Empty response from server`:`Server error (HTTP ${r.status})`)}if(a.ok===!1)throw Error(a.error??`HTTP ${r.status}`);return a.data}function x(e){let[t,n]=(0,m.useState)(null),i=(0,m.useCallback)(t=>{let n=new Map(e.processes.map(e=>[e.pid,e]));return t.pids.map(e=>n.get(e)).filter(e=>!!e)},[e.processes]),a=(0,m.useMemo)(()=>new Map(e.groups.map(e=>[e.key,y(i(e))])),[e.groups,i]),o=(0,m.useCallback)(e=>n({kind:`process`,proc:e}),[]),s=(0,m.useCallback)(e=>n({kind:`group`,group:e,members:i(e)}),[i]),c=(0,m.useCallback)(()=>n(null),[]);return{pendingKill:t,groupProtected:a,requestKillProcess:o,requestKillGroup:s,confirmKill:(0,m.useCallback)(async(e,t)=>{if(n(null),e.kind===`process`){let{proc:n}=e;try{await b(_(n,t)),r.success(`Ended ${n.name} (${n.pid})`)}catch(e){r.error(e instanceof Error?e.message:`Failed to end ${n.name}`)}return}let{group:i,members:a}=e,o=[];for(let e of v(i,a))try{await b(e)}catch(t){o.push(t instanceof Error?t.message:`pid ${e.pid}`)}o.length===0?r.success(`Ended ${i.label} (${a.length} processes)`):r.error(`${i.label}: ${o.length} of ${a.length} could not be ended — ${o[0]}`)},[]),cancelKill:c}}export{y as n,g as r,x as t};
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import{O as r,a as i}from"./api-client-F5Zi1sR0.js";import{n as a}from"./use-is-mobile-BClDZJP5.js";import{t as o}from"./button-DeAyLH9U.js";import{a as s,n as c,o as l,t as u}from"./dialog-Bocc0Fgb.js";import{t as d}from"./mobile-bottom-sheet-D4UyOatB.js";import{Et as f}from"./index-CyDLBddf.js";import{r as p}from"./format-bytes-FQmpZ25A.js";var m=e(t(),1),h=n();function g({target:e,onConfirm:t,onCancel:n}){let r=a(),[i,g]=(0,m.useState)(!1);if((0,m.useEffect)(()=>{e||g(!1)},[e]),!e)return null;let _=e.kind===`group`,v=_?`End app`:`End process`,y=_?e.group.cpu:e.proc.cpu,b=_?e.group.ramMB:e.proc.ramMB,x=(0,h.jsxs)(`div`,{className:`space-y-4`,"data-testid":`sysmon-kill-confirm`,"data-kill-kind":e.kind,children:[_?(0,h.jsxs)(`p`,{className:`text-sm`,children:[`End `,(0,h.jsx)(`span`,{className:`font-medium`,children:e.group.label}),` and all its`,` `,(0,h.jsx)(`span`,{className:`font-medium`,children:e.members.length}),` processes?`]}):(0,h.jsxs)(`p`,{className:`text-sm`,children:[`End `,(0,h.jsx)(`span`,{className:`font-medium`,children:e.proc.name}),` (pid `,e.proc.pid,`)?`]}),(0,h.jsxs)(`p`,{className:`text-xs text-text-subtle`,children:[`CPU `,y.toFixed(1),`% · RAM `,p(b)]}),!_&&(0,h.jsxs)(`label`,{className:`flex items-center justify-between gap-3 min-h-11 py-1`,children:[(0,h.jsx)(`span`,{className:`text-sm`,children:`Also end child processes`}),(0,h.jsx)(f,{checked:i,onCheckedChange:g,"data-testid":`sysmon-kill-tree`,"aria-label":`Also end child processes`})]}),(0,h.jsxs)(`div`,{className:`flex flex-col-reverse md:flex-row gap-2 md:justify-end pt-2`,children:[(0,h.jsx)(o,{variant:`outline`,onClick:n,"data-testid":`sysmon-kill-confirm-cancel`,className:`min-h-11`,children:`Cancel`}),(0,h.jsx)(o,{variant:`destructive`,autoFocus:!1,onClick:()=>t(e,i),"data-testid":`sysmon-kill-confirm-ok`,className:`min-h-11`,children:_?`End ${e.members.length} processes`:`End process`})]})]});return r?(0,h.jsx)(d,{open:!0,onClose:n,children:(0,h.jsxs)(`div`,{className:`px-4 pb-4`,children:[(0,h.jsx)(`h2`,{className:`text-base font-semibold mb-3`,children:v}),x]})}):(0,h.jsx)(u,{open:!0,onOpenChange:e=>!e&&n(),children:(0,h.jsxs)(c,{children:[(0,h.jsx)(s,{children:(0,h.jsx)(l,{children:v})}),x]})})}function _(e,t){return{pid:e.pid,startedAt:e.startedAt,tree:t}}function v(e,t){let n=e.rootPid===null?void 0:t.find(t=>t.pid===e.rootPid);return n?[_(n,!0)]:t.map(e=>_(e,!1))}function y(e){return e.some(e=>e.protected)}async function b(e){let t=i(),n={"Content-Type":`application/json`,"X-PPM-Request":`1`};t&&(n.Authorization=`Bearer ${t}`);let r=await fetch(`/api/system/resources/kill`,{method:`POST`,headers:n,body:JSON.stringify(e)}),a;try{a=await r.json()}catch{throw Error(r.ok?`Empty response from server`:`Server error (HTTP ${r.status})`)}if(a.ok===!1)throw Error(a.error??`HTTP ${r.status}`);return a.data}function x(e){let[t,n]=(0,m.useState)(null),i=(0,m.useCallback)(t=>{let n=new Map(e.processes.map(e=>[e.pid,e]));return t.pids.map(e=>n.get(e)).filter(e=>!!e)},[e.processes]),a=(0,m.useMemo)(()=>new Map(e.groups.map(e=>[e.key,y(i(e))])),[e.groups,i]),o=(0,m.useCallback)(e=>n({kind:`process`,proc:e}),[]),s=(0,m.useCallback)(e=>n({kind:`group`,group:e,members:i(e)}),[i]),c=(0,m.useCallback)(()=>n(null),[]);return{pendingKill:t,groupProtected:a,requestKillProcess:o,requestKillGroup:s,confirmKill:(0,m.useCallback)(async(e,t)=>{if(n(null),e.kind===`process`){let{proc:n}=e;try{await b(_(n,t)),r.success(`Ended ${n.name} (${n.pid})`)}catch(e){r.error(e instanceof Error?e.message:`Failed to end ${n.name}`)}return}let{group:i,members:a}=e,o=[];for(let e of v(i,a))try{await b(e)}catch(t){o.push(t instanceof Error?t.message:`pid ${e.pid}`)}o.length===0?r.success(`Ended ${i.label} (${a.length} processes)`):r.error(`${i.label}: ${o.length} of ${a.length} could not be ended — ${o[0]}`)},[]),cancelKill:c}}export{y as n,g as r,x as t};
@@ -1 +1 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t}from"./vendor-markdown-QKPNiWEd.js";import{x as n}from"./index-DhWjx5iR.js";var r=e(t(),1);function i({url:e,onMessage:t,autoConnect:i=!0,idleTimeoutMs:a,onConnectionChange:o}){let s=(0,r.useRef)(null),c=(0,r.useRef)(t),l=(0,r.useRef)(o);return c.current=t,l.current=o,(0,r.useEffect)(()=>{let t=!0,r=new n(e,{idleTimeoutMs:a,onConnectionChange:e=>{t&&l.current?.(e)}});return s.current=r,r.onMessage(e=>c.current?.(e)),i&&r.connect(),()=>{t=!1,r.disconnect(),s.current=null}},[e,i,a]),{send:(0,r.useCallback)(e=>{s.current?.send(e)},[]),connect:(0,r.useCallback)(()=>{s.current?.connect()},[]),disconnect:(0,r.useCallback)(()=>{s.current?.disconnect()},[])}}export{i as t};
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t}from"./vendor-markdown-QKPNiWEd.js";import{x as n}from"./index-CyDLBddf.js";var r=e(t(),1);function i({url:e,onMessage:t,autoConnect:i=!0,idleTimeoutMs:a,onConnectionChange:o}){let s=(0,r.useRef)(null),c=(0,r.useRef)(t),l=(0,r.useRef)(o);return c.current=t,l.current=o,(0,r.useEffect)(()=>{let t=!0,r=new n(e,{idleTimeoutMs:a,onConnectionChange:e=>{t&&l.current?.(e)}});return s.current=r,r.onMessage(e=>c.current?.(e)),i&&r.connect(),()=>{t=!1,r.disconnect(),s.current=null}},[e,i,a]),{send:(0,r.useCallback)(e=>{s.current?.send(e)},[]),connect:(0,r.useCallback)(()=>{s.current?.connect()},[]),disconnect:(0,r.useCallback)(()=>{s.current?.disconnect()},[])}}export{i as t};
@@ -0,0 +1 @@
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import{Cn as r,Et as i,Fr as a,Hr as o,Un as s,Ur as c,Wr as l,Yn as u,ar as d,bt as f,fr as p,hn as m,or as h,st as g,un as _,wt as v}from"./icons-CO_II6D-.js";import"./api-client-F5Zi1sR0.js";import"./portal-container-context-NFSuymMu.js";import{t as y}from"./button-DeAyLH9U.js";import{Cn as b,Dn as x,En as S,Mn as C,On as w,Tn as T,wn as E,xn as D}from"./index-CyDLBddf.js";import{o as O}from"./can-open-in-ppm-DeE2-kd5.js";import{a as k,i as A,n as j,r as M,t as ee}from"./media-url-CrT-qulZ.js";var N=e(t(),1),P={rotation:0,flipH:!1,flipV:!1};function F(e){return{...e,rotation:(e.rotation+90)%360}}function te(e){return{...e,rotation:(e.rotation+270)%360}}function I(e){return e.rotation===0&&!e.flipH&&!e.flipV}function ne(e){let t=[];return e.rotation&&t.push(`rotate(${e.rotation}deg)`),e.flipH&&t.push(`scaleX(-1)`),e.flipV&&t.push(`scaleY(-1)`),t.length?t.join(` `):`none`}function re(e,t){return e.rotation===90||e.rotation===270?{maxWidth:t.height,maxHeight:t.width}:{maxWidth:t.width,maxHeight:t.height}}var L=[[`Space / K`,`Play / pause`],[`← / →`,`Seek 5s`],[`J / L or Shift+← / →`,`Seek 10s`],[`↑ / ↓`,`Volume`],[`M`,`Mute`],[`F`,`Fullscreen`],[`< / >`,`Speed`],[`R / Shift+R`,`Rotate`]];function R(e){return(0,N.useCallback)(t=>{let n=t.target;if(n.tagName===`INPUT`||n.tagName===`TEXTAREA`||n.isContentEditable||t.ctrlKey||t.metaKey||t.altKey)return;let r=!0;switch(t.key){case` `:case`k`:case`K`:e.togglePlay();break;case`ArrowLeft`:e.seekBy(t.shiftKey?-10:-5);break;case`ArrowRight`:e.seekBy(t.shiftKey?10:5);break;case`j`:case`J`:e.seekBy(-10);break;case`l`:case`L`:e.seekBy(10);break;case`ArrowUp`:e.volumeBy(.1);break;case`ArrowDown`:e.volumeBy(-.1);break;case`m`:case`M`:e.toggleMute();break;case`f`:case`F`:e.toggleFullscreen();break;case`<`:case`,`:e.speedStep(-1);break;case`>`:case`.`:e.speedStep(1);break;case`r`:e.rotate(1);break;case`R`:e.rotate(-1);break;default:r=!1}r&&t.preventDefault()},[e])}var z=n(),B=[.25,.5,.75,1,1.25,1.5,2,3];function V({speed:e,onSpeed:t,transform:n,onRotate:r,onFlipH:o,onFlipV:s,onResetTransform:c}){return(0,z.jsxs)(D,{children:[(0,z.jsx)(C,{asChild:!0,children:(0,z.jsxs)(y,{variant:`ghost`,size:`icon`,className:`size-11 shrink-0 relative`,"aria-label":`Playback settings`,children:[(0,z.jsx)(p,{className:`size-5`}),e!==1&&(0,z.jsxs)(`span`,{className:`absolute -top-0.5 -right-0.5 text-[10px] leading-none px-1 rounded bg-primary text-primary-foreground tabular-nums`,children:[e,`x`]})]})}),(0,z.jsxs)(b,{align:`end`,className:`w-60 max-h-[70vh] overflow-y-auto`,children:[(0,z.jsx)(T,{children:`Speed`}),(0,z.jsx)(S,{value:String(e),onValueChange:e=>t(Number(e)),children:(0,z.jsx)(`div`,{className:`grid grid-cols-4 gap-1 px-1 pb-1`,children:B.map(e=>(0,z.jsxs)(x,{value:String(e),className:`justify-center pl-2 min-h-11 text-xs tabular-nums data-[state=checked]:bg-accent [&>span:first-child]:hidden`,children:[e,`x`]},e))})}),(0,z.jsx)(w,{}),(0,z.jsx)(T,{children:`Orientation`}),(0,z.jsxs)(E,{className:`min-h-11`,onSelect:e=>{e.preventDefault(),r(1)},children:[(0,z.jsx)(h,{className:`size-4`}),` Rotate right `,(0,z.jsx)(`span`,{className:`ml-auto text-xs text-text-subtle`,children:`R`})]}),(0,z.jsxs)(E,{className:`min-h-11`,onSelect:e=>{e.preventDefault(),r(-1)},children:[(0,z.jsx)(d,{className:`size-4`}),` Rotate left `,(0,z.jsx)(`span`,{className:`ml-auto text-xs text-text-subtle`,children:`⇧R`})]}),(0,z.jsxs)(E,{className:`min-h-11`,onSelect:e=>{e.preventDefault(),o()},children:[(0,z.jsx)(v,{className:`size-4`}),` Flip horizontal `,n.flipH&&(0,z.jsx)(`span`,{className:`ml-auto text-xs`,children:`✓`})]}),(0,z.jsxs)(E,{className:`min-h-11`,onSelect:e=>{e.preventDefault(),s()},children:[(0,z.jsx)(i,{className:`size-4`}),` Flip vertical `,n.flipV&&(0,z.jsx)(`span`,{className:`ml-auto text-xs`,children:`✓`})]}),!I(n)&&(0,z.jsxs)(E,{className:`min-h-11`,onSelect:c,children:[(0,z.jsx)(a,{className:`size-4`}),` Reset orientation`]}),(0,z.jsx)(w,{}),(0,z.jsx)(T,{children:`Keyboard`}),(0,z.jsx)(`div`,{className:`px-2 pb-2 grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 text-xs text-text-secondary`,children:L.map(([e,t])=>(0,z.jsxs)(`div`,{className:`contents`,children:[(0,z.jsx)(`kbd`,{className:`font-mono text-text-subtle whitespace-nowrap`,children:e}),(0,z.jsx)(`span`,{children:t})]},e))})]})]})}function ie(e){let t=e.muted||e.volume===0?l:e.volume<.5?o:c,n=t=>e.onSeek(Number(t.target.value));return(0,z.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-1 bg-surface border-t border-border`,children:[(0,z.jsx)(y,{variant:`ghost`,size:`icon`,className:`size-11 shrink-0`,onClick:e.onTogglePlay,"aria-label":e.playing?`Pause`:`Play`,children:e.playing?(0,z.jsx)(s,{className:`size-5`}):(0,z.jsx)(u,{className:`size-5`})}),(0,z.jsxs)(`span`,{className:`text-xs tabular-nums text-text-secondary shrink-0 min-w-[4.5rem] text-center`,children:[H(e.position),e.duration?` / ${H(e.duration)}`:``]}),e.duration?(0,z.jsx)(`input`,{type:`range`,min:0,max:e.duration,step:.1,value:Math.min(e.position,e.duration),"aria-label":`Seek`,className:`flex-1 h-11 accent-primary cursor-pointer min-w-0`,onChange:t=>e.onScrub(Number(t.target.value)),onPointerUp:n,onKeyUp:n,onTouchEnd:n}):(0,z.jsx)(`div`,{className:`flex-1`}),(0,z.jsxs)(`div`,{className:`flex items-center shrink-0`,children:[(0,z.jsx)(y,{variant:`ghost`,size:`icon`,className:`size-11`,onClick:e.onToggleMute,"aria-label":e.muted?`Unmute`:`Mute`,children:(0,z.jsx)(t,{className:`size-5`})}),(0,z.jsx)(`input`,{type:`range`,min:0,max:1,step:.05,value:e.muted?0:e.volume,"aria-label":`Volume`,className:`hidden sm:block w-20 h-11 accent-primary cursor-pointer`,onChange:t=>e.onVolume(Number(t.target.value))})]}),(0,z.jsx)(V,{speed:e.speed,onSpeed:e.onSpeed,transform:e.transform,onRotate:e.onRotate,onFlipH:e.onFlipH,onFlipV:e.onFlipV,onResetTransform:e.onResetTransform}),(0,z.jsx)(y,{variant:`ghost`,size:`icon`,className:`size-11 shrink-0`,onClick:e.onToggleFullscreen,"aria-label":e.fullscreen?`Exit fullscreen`:`Fullscreen`,children:e.fullscreen?(0,z.jsx)(r,{className:`size-5`}):(0,z.jsx)(m,{className:`size-5`})})]})}function H(e){let t=Math.max(0,Math.floor(Number.isFinite(e)?e:0)),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60,a=n?String(r).padStart(2,`0`):String(r);return`${n?`${n}:`:``}${a}:${String(i).padStart(2,`0`)}`}function U({filePath:e,projectName:t,mode:n,probeDuration:r=null,onNativeError:i}){let a=(0,N.useRef)(null),o=(0,N.useRef)(null),s=(0,N.useRef)(null),c=(0,N.useRef)(!0),[l]=(0,N.useState)(ee),[u,d]=(0,N.useState)(0),[f,p]=(0,N.useState)(0),[m,h]=(0,N.useState)(null),[g,v]=(0,N.useState)(!1),[b,x]=(0,N.useState)(!0),[S,C]=(0,N.useState)(null),[w,T]=(0,N.useState)(1),[E,D]=(0,N.useState)(!1),[O,j]=(0,N.useState)(1),[I,L]=(0,N.useState)(P),[V,H]=(0,N.useState)(!1),[U,W]=(0,N.useState)({width:0,height:0}),[G,K]=(0,N.useState)(null),q=n===`transcode`,J=q?k(e,t,u,l):M(e,t),Y=q?r:m,X=S??(q?u+f:f);(0,N.useEffect)(()=>{p(0),x(!0),K(null)},[J]),(0,N.useEffect)(()=>{d(0),h(null),L(P)},[e,n]),(0,N.useEffect)(()=>{let e=s.current;e&&(e.volume=w,e.muted=E)},[w,E]),(0,N.useEffect)(()=>{let e=s.current;e&&(e.playbackRate=O)},[O,J]),(0,N.useEffect)(()=>{let n=s.current,r=()=>{q&&A(e,t,l)};return window.addEventListener(`pagehide`,r),()=>{window.removeEventListener(`pagehide`,r),n&&!n.isConnected&&(n.pause(),n.removeAttribute(`src`),n.load(),r())}},[e,t,q,l]),(0,N.useEffect)(()=>{let e=()=>H(document.fullscreenElement===a.current);return document.addEventListener(`fullscreenchange`,e),()=>document.removeEventListener(`fullscreenchange`,e)},[]),(0,N.useEffect)(()=>{let e=o.current;if(!e)return;let t=new ResizeObserver(()=>W({width:e.clientWidth,height:e.clientHeight}));return t.observe(e),()=>t.disconnect()},[]);let Z=(0,N.useCallback)(e=>{let t=s.current,n=Math.max(0,Y?Math.min(e,Y-.5):e);if(C(null),!q){t&&(t.currentTime=n);return}Math.abs(n-(u+(t?.currentTime??0)))<.5||d(n)},[Y,q,u]),Q=(0,N.useMemo)(()=>({togglePlay:()=>{let e=s.current;e&&(c.current=e.paused,e.paused?e.play().catch(()=>{}):e.pause())},seekBy:e=>Z((q?u:0)+(s.current?.currentTime??0)+e),toggleFullscreen:()=>{document.fullscreenElement?document.exitFullscreen():a.current?.requestFullscreen?.()},toggleMute:()=>D(e=>!e),volumeBy:e=>{D(!1),T(t=>Math.min(1,Math.max(0,Math.round((t+e)*100)/100)))},speedStep:e=>j(t=>{let n=B.indexOf(t);return B[Math.min(B.length-1,Math.max(0,(n===-1?3:n)+e))]??1}),rotate:e=>L(t=>e===1?F(t):te(t))}),[Z,q,u]),ae=R(Q),$=re(I,U),oe=()=>{K(null),d(e=>e+.001)};return(0,z.jsxs)(`div`,{ref:a,"data-testid":`video-player`,tabIndex:0,onKeyDown:ae,className:`flex flex-col h-full bg-black outline-none focus-visible:ring-1 focus-visible:ring-primary/60`,children:[(0,z.jsxs)(`div`,{ref:o,className:`relative flex-1 min-h-0 flex items-center justify-center overflow-hidden`,onClick:e=>{a.current?.focus(),e.detail===1&&Q.togglePlay()},onDoubleClick:Q.toggleFullscreen,children:[(0,z.jsx)(`video`,{ref:s,src:J,autoPlay:!0,playsInline:!0,preload:q?`auto`:`metadata`,style:{transform:ne(I),maxWidth:$.maxWidth||void 0,maxHeight:$.maxHeight||void 0},onLoadedMetadata:e=>{let t=e.currentTarget;t.playbackRate=O,t.volume=w,t.muted=E,!q&&Number.isFinite(t.duration)&&h(t.duration),q&&!c.current&&t.pause()},onPlay:()=>v(!0),onPause:()=>v(!1),onWaiting:()=>x(!0),onPlaying:()=>x(!1),onCanPlay:()=>x(!1),onTimeUpdate:e=>p(e.currentTarget.currentTime),onEnded:()=>{v(!1),c.current=!1},onError:()=>{q?K(`Transcoding failed. ffmpeg may have stopped or the file is corrupt.`):i?.()}}),b&&!G&&(0,z.jsx)(_,{className:`absolute size-8 animate-spin text-white/80 pointer-events-none`}),G&&(0,z.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center gap-3 bg-black/85 text-text-secondary p-4 text-center`,onClick:e=>e.stopPropagation(),onDoubleClick:e=>e.stopPropagation(),children:[(0,z.jsx)(`p`,{className:`text-sm`,children:G}),(0,z.jsx)(y,{variant:`outline`,size:`sm`,className:`h-11 px-4`,onClick:oe,children:`Retry`})]})]}),(0,z.jsx)(ie,{playing:g,position:X,duration:Y,volume:w,muted:E,speed:O,transform:I,fullscreen:V,onTogglePlay:Q.togglePlay,onScrub:C,onSeek:Z,onVolume:e=>{T(e),D(e===0)},onToggleMute:Q.toggleMute,onSpeed:j,onRotate:Q.rotate,onFlipH:()=>L(e=>({...e,flipH:!e.flipH})),onFlipV:()=>L(e=>({...e,flipV:!e.flipV})),onResetTransform:()=>L(P),onToggleFullscreen:Q.toggleFullscreen})]})}var W=new Set([`mp4`,`m4v`,`webm`,`ogg`,`ogv`,`mov`]);function G({filePath:e,projectName:t}){let n=O(e),[r,i]=(0,N.useState)(()=>W.has(n)?{kind:`native`}:{kind:`probing`});return(0,N.useEffect)(()=>{i(W.has(O(e))?{kind:`native`}:{kind:`probing`})},[e]),(0,N.useEffect)(()=>{if(r.kind!==`probing`)return;let n=!1;return j(e,t).then(e=>{n||i(e.transcodable?{kind:`transcode`,probe:e}:{kind:`unsupported`,probe:e})}).catch(()=>{n||i({kind:`unsupported`,probe:null})}),()=>{n=!0}},[r.kind,e,t]),r.kind===`probing`?(0,z.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,z.jsx)(_,{className:`size-5 animate-spin text-text-subtle`})}):r.kind===`transcode`?(0,z.jsx)(U,{filePath:e,projectName:t,mode:`transcode`,probeDuration:r.probe.duration}):r.kind===`unsupported`?(0,z.jsx)(K,{filePath:e,projectName:t,probe:r.probe}):(0,z.jsx)(U,{filePath:e,projectName:t,mode:`native`,onNativeError:()=>i({kind:`probing`})})}function K({filePath:e,projectName:t,probe:n}){let r=[n?.video?.codec,n?.audio?.codec].filter(Boolean).join(` + `);return(0,z.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary p-6 text-center`,children:[(0,z.jsx)(f,{className:`size-10 text-text-subtle`}),(0,z.jsxs)(`p`,{className:`text-sm`,children:[`This video cannot be played in the browser`,r?` (${r})`:``,`.`]}),(0,z.jsxs)(`p`,{className:`text-xs text-text-subtle max-w-sm`,children:[`Install `,(0,z.jsx)(`code`,{children:`ffmpeg`}),` on the PPM server (e.g. `,(0,z.jsx)(`code`,{children:`winget install ffmpeg`}),`, `,(0,z.jsx)(`code`,{children:`brew install ffmpeg`}),`,`,` `,(0,z.jsx)(`code`,{children:`apt install ffmpeg`}),`) and restart PPM to transcode it on the fly.`]}),(0,z.jsx)(y,{asChild:!0,variant:`outline`,size:`sm`,className:`h-11 px-4`,children:(0,z.jsxs)(`a`,{href:`${M(e,t)}&download=true`,download:!0,children:[(0,z.jsx)(g,{className:`size-4 mr-2`}),` Download file`]})})]})}export{G as VideoPreview};
@@ -1 +1 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import{Mr as r,st as i,un as a,w as o,xn as s}from"./icons-CO_II6D-.js";import{O as c,r as l}from"./api-client-F5Zi1sR0.js";import{t as u}from"./settings-store-DfuiLq_9.js";import{n as d}from"./utils-btZ8C8-R.js";import{t as f}from"./button-DeAyLH9U.js";import{t as p}from"./separator-DMu7VFQa.js";var m=e(t(),1),h=n(),g={binary:`Downloading whisper.cpp`,model:`Downloading the model`,vad:`Downloading the voice detector`,verify:`Checking it runs here`},_=e=>`${Math.round(e/1e6)} MB`;function v(){let e=u(e=>e.voiceEngine),t=u(e=>e.setVoiceEngine),[n,s]=(0,m.useState)(null),[v,b]=(0,m.useState)(null),[x,S]=(0,m.useState)(!1),C=(0,m.useRef)(null),w=(0,m.useCallback)(async()=>{try{let e=await l.get(`/api/speech/status`);s(e),b(t=>t??e.model?.id??e.models.at(-1)?.id??null)}catch{}},[]);(0,m.useEffect)(()=>{w()},[w]);let T=!!n?.install&&!n.install.done;(0,m.useEffect)(()=>{if(T)return C.current=setTimeout(()=>void w(),700),()=>{C.current&&clearTimeout(C.current)}},[T,n,w]),(0,m.useEffect)(()=>{n&&!n.ready&&e===`whisper`&&t(`browser`)},[n,e,t]);let E=async()=>{if(v){S(!0);try{await l.post(`/api/speech/install`,{model:v}),await w()}catch(e){c.error(`Could not start the install`,{description:e instanceof Error?e.message:String(e)})}finally{S(!1)}}},D=async()=>{S(!0);try{await l.post(`/api/speech/uninstall`),t(`browser`),await w()}catch(e){c.error(`Could not remove Whisper`,{description:e instanceof Error?e.message:String(e)})}finally{S(!1)}},O=n?.install??null,k=O&&O.totalBytes>0?Math.round(O.receivedBytes/O.totalBytes*100):null,A=typeof window<`u`&&!window.isSecureContext;return(0,h.jsxs)(`div`,{className:`space-y-6`,children:[(0,h.jsxs)(`section`,{className:`space-y-3`,children:[(0,h.jsxs)(`div`,{children:[(0,h.jsx)(`h3`,{className:`text-sm font-medium`,children:`Speech to text`}),(0,h.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`What the mic button in the chat box uses. This device only.`})]}),(0,h.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-2`,children:[(0,h.jsx)(y,{label:`Browser`,note:`Text appears as you speak. Chrome, Edge and Safari only — the audio goes to their servers.`,value:`browser`,current:e,onChange:t}),n?.ready&&(0,h.jsx)(y,{label:`Whisper on this host`,note:`Works in any browser and the audio never leaves your machine. Text arrives when you stop talking.`,value:`whisper`,current:e,onChange:t})]}),A&&(0,h.jsx)(`p`,{className:`text-xs text-warning`,children:`This page is on plain HTTP, where browsers block the microphone entirely. Open PPM over HTTPS or on localhost to use either engine.`})]}),(0,h.jsx)(p,{}),(0,h.jsxs)(`section`,{className:`space-y-3`,children:[(0,h.jsxs)(`div`,{children:[(0,h.jsx)(`h3`,{className:`text-sm font-medium`,children:`Whisper on this host`}),(0,h.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n?.ready?`Installed — whisper.cpp ${n.version}, model ${n.model?.label}.`:`Runs speech to text on the machine PPM is installed on. Nothing is sent to a cloud service.`})]}),n&&!n.installable&&(0,h.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`There is no prebuilt whisper.cpp for this platform. Install it yourself and PPM will find it:`,` `,(0,h.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5`,children:n.installHint??`whisper-cli on PATH`})]}),O&&!O.done&&(0,h.jsxs)(`div`,{className:`space-y-2`,children:[(0,h.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,h.jsx)(a,{className:`size-3.5 animate-spin`}),(0,h.jsxs)(`span`,{children:[g[O.phase],k===null?`…`:` — ${k}%`]})]}),(0,h.jsx)(`div`,{className:`h-1.5 w-full overflow-hidden rounded-full bg-muted`,children:(0,h.jsx)(`div`,{className:`h-full bg-primary transition-[width]`,style:{width:`${k??0}%`}})})]}),O?.error&&(0,h.jsx)(`p`,{className:`text-xs text-error`,children:O.error}),n?.installable&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`div`,{className:`space-y-2`,children:n.models.map(e=>{let t=v===e.id,r=n.model?.id===e.id;return(0,h.jsxs)(`button`,{type:`button`,onClick:()=>b(e.id),className:d(`w-full rounded-lg border px-4 py-3 text-left transition-colors`,t?`border-primary ring-2 ring-primary`:`border-border hover:bg-muted/50`),children:[(0,h.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,h.jsx)(`span`,{className:`text-sm font-medium`,children:e.label}),(0,h.jsxs)(`span`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,children:[r&&(0,h.jsx)(o,{className:`size-3.5 text-success`}),_(e.bytes)]})]}),(0,h.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.note})]},e.id)})}),(0,h.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-2`,children:[(0,h.jsxs)(f,{onClick:E,disabled:x||T||!v||n.model?.id===v,className:`flex-1 gap-2 cursor-pointer`,children:[(0,h.jsx)(i,{className:`size-4`}),n.model?n.model.id===v?`Installed`:`Switch to ${n.models.find(e=>e.id===v)?.label}`:`Install`]}),(n.model||n.binary?.source===`bundled`)&&(0,h.jsxs)(f,{variant:`outline`,onClick:D,disabled:x||T,className:`gap-2 cursor-pointer text-error`,children:[(0,h.jsx)(r,{className:`size-4`}),`Remove`]})]})]})]})]})}function y({label:e,note:t,value:n,current:r,onChange:i}){return(0,h.jsxs)(`button`,{type:`button`,onClick:()=>i(n),className:d(`flex-1 rounded-lg border px-4 py-3 text-left transition-colors`,r===n?`border-primary ring-2 ring-primary`:`border-border hover:bg-muted/50`),children:[(0,h.jsxs)(`span`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,h.jsx)(s,{className:`size-4`}),e]}),(0,h.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:t})]})}export{v as VoiceSettingsSection};
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import{Mr as r,st as i,un as a,w as o,xn as s}from"./icons-CO_II6D-.js";import{O as c,r as l}from"./api-client-F5Zi1sR0.js";import{t as u}from"./settings-store-Cyuo8ceh.js";import{n as d}from"./utils-btZ8C8-R.js";import{t as f}from"./button-DeAyLH9U.js";import{t as p}from"./separator-dHj3Km--.js";var m=e(t(),1),h=n(),g={binary:`Downloading whisper.cpp`,model:`Downloading the model`,vad:`Downloading the voice detector`,verify:`Checking it runs here`},_=e=>`${Math.round(e/1e6)} MB`;function v(){let e=u(e=>e.voiceEngine),t=u(e=>e.setVoiceEngine),[n,s]=(0,m.useState)(null),[v,b]=(0,m.useState)(null),[x,S]=(0,m.useState)(!1),C=(0,m.useRef)(null),w=(0,m.useCallback)(async()=>{try{let e=await l.get(`/api/speech/status`);s(e),b(t=>t??e.model?.id??e.models.at(-1)?.id??null)}catch{}},[]);(0,m.useEffect)(()=>{w()},[w]);let T=!!n?.install&&!n.install.done;(0,m.useEffect)(()=>{if(T)return C.current=setTimeout(()=>void w(),700),()=>{C.current&&clearTimeout(C.current)}},[T,n,w]),(0,m.useEffect)(()=>{n&&!n.ready&&e===`whisper`&&t(`browser`)},[n,e,t]);let E=async()=>{if(v){S(!0);try{await l.post(`/api/speech/install`,{model:v}),await w()}catch(e){c.error(`Could not start the install`,{description:e instanceof Error?e.message:String(e)})}finally{S(!1)}}},D=async()=>{S(!0);try{await l.post(`/api/speech/uninstall`),t(`browser`),await w()}catch(e){c.error(`Could not remove Whisper`,{description:e instanceof Error?e.message:String(e)})}finally{S(!1)}},O=n?.install??null,k=O&&O.totalBytes>0?Math.round(O.receivedBytes/O.totalBytes*100):null,A=typeof window<`u`&&!window.isSecureContext;return(0,h.jsxs)(`div`,{className:`space-y-6`,children:[(0,h.jsxs)(`section`,{className:`space-y-3`,children:[(0,h.jsxs)(`div`,{children:[(0,h.jsx)(`h3`,{className:`text-sm font-medium`,children:`Speech to text`}),(0,h.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`What the mic button in the chat box uses. This device only.`})]}),(0,h.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-2`,children:[(0,h.jsx)(y,{label:`Browser`,note:`Text appears as you speak. Chrome, Edge and Safari only — the audio goes to their servers.`,value:`browser`,current:e,onChange:t}),n?.ready&&(0,h.jsx)(y,{label:`Whisper on this host`,note:`Works in any browser and the audio never leaves your machine. Text arrives when you stop talking.`,value:`whisper`,current:e,onChange:t})]}),A&&(0,h.jsx)(`p`,{className:`text-xs text-warning`,children:`This page is on plain HTTP, where browsers block the microphone entirely. Open PPM over HTTPS or on localhost to use either engine.`})]}),(0,h.jsx)(p,{}),(0,h.jsxs)(`section`,{className:`space-y-3`,children:[(0,h.jsxs)(`div`,{children:[(0,h.jsx)(`h3`,{className:`text-sm font-medium`,children:`Whisper on this host`}),(0,h.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n?.ready?`Installed — whisper.cpp ${n.version}, model ${n.model?.label}.`:`Runs speech to text on the machine PPM is installed on. Nothing is sent to a cloud service.`})]}),n&&!n.installable&&(0,h.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`There is no prebuilt whisper.cpp for this platform. Install it yourself and PPM will find it:`,` `,(0,h.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5`,children:n.installHint??`whisper-cli on PATH`})]}),O&&!O.done&&(0,h.jsxs)(`div`,{className:`space-y-2`,children:[(0,h.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,h.jsx)(a,{className:`size-3.5 animate-spin`}),(0,h.jsxs)(`span`,{children:[g[O.phase],k===null?`…`:` — ${k}%`]})]}),(0,h.jsx)(`div`,{className:`h-1.5 w-full overflow-hidden rounded-full bg-muted`,children:(0,h.jsx)(`div`,{className:`h-full bg-primary transition-[width]`,style:{width:`${k??0}%`}})})]}),O?.error&&(0,h.jsx)(`p`,{className:`text-xs text-error`,children:O.error}),n?.installable&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`div`,{className:`space-y-2`,children:n.models.map(e=>{let t=v===e.id,r=n.model?.id===e.id;return(0,h.jsxs)(`button`,{type:`button`,onClick:()=>b(e.id),className:d(`w-full rounded-lg border px-4 py-3 text-left transition-colors`,t?`border-primary ring-2 ring-primary`:`border-border hover:bg-muted/50`),children:[(0,h.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,h.jsx)(`span`,{className:`text-sm font-medium`,children:e.label}),(0,h.jsxs)(`span`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,children:[r&&(0,h.jsx)(o,{className:`size-3.5 text-success`}),_(e.bytes)]})]}),(0,h.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.note})]},e.id)})}),(0,h.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-2`,children:[(0,h.jsxs)(f,{onClick:E,disabled:x||T||!v||n.model?.id===v,className:`flex-1 gap-2 cursor-pointer`,children:[(0,h.jsx)(i,{className:`size-4`}),n.model?n.model.id===v?`Installed`:`Switch to ${n.models.find(e=>e.id===v)?.label}`:`Install`]}),(n.model||n.binary?.source===`bundled`)&&(0,h.jsxs)(f,{variant:`outline`,onClick:D,disabled:x||T,className:`gap-2 cursor-pointer text-error`,children:[(0,h.jsx)(r,{className:`size-4`}),`Remove`]})]})]})]})]})}function y({label:e,note:t,value:n,current:r,onChange:i}){return(0,h.jsxs)(`button`,{type:`button`,onClick:()=>i(n),className:d(`flex-1 rounded-lg border px-4 py-3 text-left transition-colors`,r===n?`border-primary ring-2 ring-primary`:`border-border hover:bg-muted/50`),children:[(0,h.jsxs)(`span`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,h.jsx)(s,{className:`size-4`}),e]}),(0,h.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:t})]})}export{v as VoiceSettingsSection};
@@ -1 +1 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t}from"./vendor-markdown-QKPNiWEd.js";import{m as n}from"./panel-store-CWHPmHwj.js";var r=e(t(),1),i=new Map,a=new Map,o=new Set;function s(e,t){t?i.set(e,t):i.delete(e);for(let e of o)e()}function c(e,t=2e3){let n=p(e);return n?Promise.resolve(n):new Promise(n=>{let r=e=>{o.delete(i),clearTimeout(a),n(e)},i=()=>{let t=p(e);t&&r(t)},a=setTimeout(()=>r(null),t);o.add(i)})}var l=new Set;function u(e){l.add(e)}function d(e){return l.has(e)}function f(e){l.delete(e)}function p(e){return i.get(e)??null}function m(e,t){if((a.get(e)??null)!==t){t?a.set(e,t):a.delete(e);for(let e of o)e()}}function h(e){return e?a.get(e)??null:null}function g(e){return o.add(e),()=>{o.delete(e)}}function _(e){return(0,r.useSyncExternalStore)(g,(0,r.useCallback)(()=>h(e),[e]))}function v(e){return _(n(e))?.pipWindow.document.body}export{m as a,c,s as i,h as l,d as n,v as o,u as r,_ as s,f as t,p as u};
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t}from"./vendor-markdown-QKPNiWEd.js";import{m as n}from"./panel-store-B6PoCwBA.js";var r=e(t(),1),i=new Map,a=new Map,o=new Set;function s(e,t){t?i.set(e,t):i.delete(e);for(let e of o)e()}function c(e,t=2e3){let n=p(e);return n?Promise.resolve(n):new Promise(n=>{let r=e=>{o.delete(i),clearTimeout(a),n(e)},i=()=>{let t=p(e);t&&r(t)},a=setTimeout(()=>r(null),t);o.add(i)})}var l=new Set;function u(e){l.add(e)}function d(e){return l.has(e)}function f(e){l.delete(e)}function p(e){return i.get(e)??null}function m(e,t){if((a.get(e)??null)!==t){t?a.set(e,t):a.delete(e);for(let e of o)e()}}function h(e){return e?a.get(e)??null:null}function g(e){return o.add(e),()=>{o.delete(e)}}function _(e){return(0,r.useSyncExternalStore)(g,(0,r.useCallback)(()=>h(e),[e]))}function v(e){return _(n(e))?.pipWindow.document.body}export{m as a,c,s as i,h as l,d as n,v as o,u as r,_ as s,f as t,p as u};
@@ -9,7 +9,7 @@
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com" />
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
11
  <link href="https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400;500;600;700&family=Geist:wght@400;500;600;700&display=swap" rel="stylesheet" />
12
- <script type="module" crossorigin src="/assets/index-DhWjx5iR.js"></script>
12
+ <script type="module" crossorigin src="/assets/index-CyDLBddf.js"></script>
13
13
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C5c2KzVm.js">
14
14
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-BEFjQwLd.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/vendor-markdown-QKPNiWEd.js">
@@ -19,13 +19,13 @@
19
19
  <link rel="modulepreload" crossorigin href="/assets/createLucideIcon-DBXq3G0e.js">
20
20
  <link rel="modulepreload" crossorigin href="/assets/api-client-F5Zi1sR0.js">
21
21
  <link rel="modulepreload" crossorigin href="/assets/react-CzUPVyyG.js">
22
+ <link rel="modulepreload" crossorigin href="/assets/file-store-Cm7-pHux.js">
22
23
  <link rel="modulepreload" crossorigin href="/assets/project-store-CCimwgGF.js">
23
24
  <link rel="modulepreload" crossorigin href="/assets/session-list-sync-triggers-ATvz-1g3.js">
24
25
  <link rel="modulepreload" crossorigin href="/assets/window-store-vo1N70nK.js">
25
- <link rel="modulepreload" crossorigin href="/assets/panel-store-CWHPmHwj.js">
26
- <link rel="modulepreload" crossorigin href="/assets/settings-store-DfuiLq_9.js">
27
- <link rel="modulepreload" crossorigin href="/assets/file-store-DY1_0nzY.js">
28
- <link rel="modulepreload" crossorigin href="/assets/window-pip-registry-mDgwpAwP.js">
26
+ <link rel="modulepreload" crossorigin href="/assets/panel-store-B6PoCwBA.js">
27
+ <link rel="modulepreload" crossorigin href="/assets/settings-store-Cyuo8ceh.js">
28
+ <link rel="modulepreload" crossorigin href="/assets/window-pip-registry-9Y9LQQYS.js">
29
29
  <link rel="modulepreload" crossorigin href="/assets/portal-container-context-NFSuymMu.js">
30
30
  <link rel="modulepreload" crossorigin href="/assets/icons-CO_II6D-.js">
31
31
  <link rel="modulepreload" crossorigin href="/assets/dialog-Bocc0Fgb.js">
@@ -43,10 +43,10 @@
43
43
  <link rel="modulepreload" crossorigin href="/assets/format-date-BMtvCeb9.js">
44
44
  <link rel="modulepreload" crossorigin href="/assets/git-repo-store-B_u5RzIM.js">
45
45
  <link rel="modulepreload" crossorigin href="/assets/ws-auth-Ytui7dXP.js">
46
- <link rel="modulepreload" crossorigin href="/assets/tab-store-CbPh8CAX.js">
46
+ <link rel="modulepreload" crossorigin href="/assets/tab-store-DCpc0g0Q.js">
47
47
  <link rel="modulepreload" crossorigin href="/assets/apply-theme-Cc_cmrD5.js">
48
48
  <link rel="modulepreload" crossorigin href="/assets/resolve-theme-STMsK2vc.js">
49
- <link rel="stylesheet" crossorigin href="/assets/index-oIvYSKTT.css">
49
+ <link rel="stylesheet" crossorigin href="/assets/index-Dh5apC3I.css">
50
50
  <link rel="manifest" href="/manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="/registerSW.js"></script></head>
51
51
  <body class="text-text font-sans antialiased" style="background: var(--bg)">
52
52
  <!-- FOUC guard: apply the persisted theme mode before first paint.
@@ -128,6 +128,48 @@
128
128
  purge().then(function () { location.reload(); });
129
129
  };
130
130
  }
131
+ // Tell the server, since nothing bundled can: an `entry_never_ran` row in the
132
+ // session trace, naming the files that failed to load where the browser says.
133
+ // Same device id and token keys as src/web/lib/device-id.ts and api-client.ts.
134
+ function beacon(retried) {
135
+ try {
136
+ var token = null, dev = null;
137
+ try {
138
+ token = localStorage.getItem("ppm-auth-token");
139
+ dev = localStorage.getItem("ppm-device-id");
140
+ } catch (e) {}
141
+ if (!dev || !/^[A-Za-z0-9-]{8,64}$/.test(dev)) {
142
+ var b = new Uint8Array(16);
143
+ crypto.getRandomValues(b);
144
+ b[6] = (b[6] & 15) | 64;
145
+ b[8] = (b[8] & 63) | 128;
146
+ var h = "";
147
+ for (var i = 0; i < 16; i++) h += (b[i] + 256).toString(16).slice(1);
148
+ dev = h.slice(0, 8) + "-" + h.slice(8, 12) + "-" + h.slice(12, 16) + "-" + h.slice(16, 20) + "-" + h.slice(20);
149
+ try { localStorage.setItem("ppm-device-id", dev); } catch (e) {}
150
+ }
151
+ var failed = [];
152
+ try {
153
+ var list = performance.getEntriesByType("resource");
154
+ for (var j = 0; j < list.length && failed.length < 20; j++) {
155
+ if (list[j].responseStatus >= 400) failed.push(list[j].name.replace(location.origin, "") + " " + list[j].responseStatus);
156
+ }
157
+ } catch (e) {}
158
+ var now = Date.now();
159
+ var headers = { "Content-Type": "application/json" };
160
+ if (token) headers.Authorization = "Bearer " + token;
161
+ fetch("/api/trace", {
162
+ method: "POST",
163
+ keepalive: true,
164
+ headers: headers,
165
+ body: JSON.stringify({
166
+ deviceId: dev,
167
+ sentAt: now,
168
+ entries: [{ ts: now, type: "entry_never_ran", refId: null, payload: { path: location.pathname, retried: retried, failed: failed, ua: navigator.userAgent } }],
169
+ }),
170
+ }).catch(function () {});
171
+ } catch (e) {}
172
+ }
131
173
  function check() {
132
174
  // Module scripts execute before `load`, so a flag still unset here is
133
175
  // never going to be set — this cannot misfire on a slow boot.
@@ -150,6 +192,7 @@
150
192
  // reload is a loop. Go straight to the message.
151
193
  retried = true;
152
194
  }
195
+ beacon(retried);
153
196
  // One silent attempt first: index.html is served `no-cache`, so a
154
197
  // reload with this origin's caches dropped is exactly how a tab
155
198
  // holding an upgraded-away chunk list heals itself.
Binary file
Binary file