@openhands/agent-canvas 1.0.0-beta.6 → 1.0.0-beta.8

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 (802) hide show
  1. package/README.md +24 -7
  2. package/README.windows.md +27 -0
  3. package/bin/agent-canvas.mjs +26 -3
  4. package/build/assets/{QueryClientProvider-CkGuhXg-.js → QueryClientProvider-Cnr-Yl3j.js} +1 -1
  5. package/build/assets/{Trans-Cvm_-SMi.js → Trans-4jmk54WC.js} +1 -1
  6. package/build/assets/acp-providers-BAX8OU5C.js +1 -0
  7. package/build/assets/{acp-route-guard-B2yoBZ_4.js → acp-route-guard-HPk6TV-L.js} +1 -1
  8. package/build/assets/active-backend-context-BSPE-W72.js +1 -0
  9. package/build/assets/add-backend-modal-mXKmfMI2.js +1 -0
  10. package/build/assets/agent-server-client-options-9agOSarV.js +1 -0
  11. package/build/assets/agent-server-compatibility-B7QStIcH.js +1 -0
  12. package/build/assets/agent-server-conversation-service.api-B9TUYJon.js +5 -0
  13. package/build/assets/{agent-settings-CnGSCmK8.js → agent-settings-g3F623RJ.js} +1 -1
  14. package/build/assets/{alert-banner-DtzAX654.js → alert-banner-DFnn_lC6.js} +1 -1
  15. package/build/assets/{analytics-consent-form-modal-CHZ3I37v.js → analytics-consent-form-modal-BQCNeNVt.js} +1 -1
  16. package/build/assets/api-key-entry-screen-myuWMqzW.js +1 -0
  17. package/build/assets/{app-settings-Db9ITeJH.js → app-settings-CCcX8ZEH.js} +1 -1
  18. package/build/assets/automation-detail-BDHLHSJd.js +1 -0
  19. package/build/assets/automations-list-CiNtQhq_.js +1 -0
  20. package/build/assets/back-nav-button-7dQJ2k3O.js +1 -0
  21. package/build/assets/backend-form-modal-D3bDMO3C.js +1 -0
  22. package/build/assets/{backend-synced-settings-badge-Dc6c7GT4.js → backend-synced-settings-badge-BkW5evM0.js} +1 -1
  23. package/build/assets/base-modal-C2oy2EBG.js +1 -0
  24. package/build/assets/brand-button-DJ_S16rO.js +1 -0
  25. package/build/assets/{browser-D810xUYt.js → browser-CGM-k-sH.js} +2 -2
  26. package/build/assets/browser-store-DAsixKdU.js +1 -0
  27. package/build/assets/{browser-tab-B-aIqXRl.js → browser-tab-dvSPdvkm.js} +1 -1
  28. package/build/assets/{checkmark-DL7acQA7.js → checkmark-Dus0b6jt.js} +1 -1
  29. package/build/assets/{chevron-left-small-CVWf8TI6.js → chevron-left-small-_uvG7RVM.js} +1 -1
  30. package/build/assets/{circle-plus-check-toggle-P7ZZToV4.js → circle-plus-check-toggle-DKS8MAVV.js} +1 -1
  31. package/build/assets/{close-B5LROHR3.js → close-BU5iTc66.js} +1 -1
  32. package/build/assets/code-tag-BzyqOtPD.js +1 -0
  33. package/build/assets/combobox-caret-BJC7XJsz.js +1 -0
  34. package/build/assets/{command-store-DFN_17p1.js → command-store-CE1weJy8.js} +1 -1
  35. package/build/assets/{condenser-settings-wnEKhBof.js → condenser-settings-DCTulgLO.js} +1 -1
  36. package/build/assets/{confirmation-modal-Dau3w_sa.js → confirmation-modal-B5Ca6qFE.js} +1 -1
  37. package/build/assets/context-menu-list-item-7tAcm2c3.js +1 -0
  38. package/build/assets/conversation-BKhikfYl.js +1 -0
  39. package/build/assets/conversation-DTn8jN8L.js +19 -0
  40. package/build/assets/conversation-panel-DfHR42mG.js +1 -0
  41. package/build/assets/conversation-service.api-B6CkzaKD.js +1 -0
  42. package/build/assets/conversation-state-store-D-w0uurj.js +1 -0
  43. package/build/assets/conversation-store-CC-isCnP.js +1 -0
  44. package/build/assets/{conversation-tab-empty-state-DyssnnWa.js → conversation-tab-empty-state-CStQLPVW.js} +1 -1
  45. package/build/assets/conversation-websocket-context-DShEuLjh.js +3 -0
  46. package/build/assets/{copy-DYgmUdIw.js → copy-Chg-sFu3.js} +1 -1
  47. package/build/assets/{custom-toast-handlers-C-SZFmto.js → custom-toast-handlers-ufGJ6_Rc.js} +1 -1
  48. package/build/assets/declaration-CR6HMp29.js +1 -0
  49. package/build/assets/{device-verify-DqDlphsG.js → device-verify-C6mj28zv.js} +1 -1
  50. package/build/assets/dist-DNeWJ2bh.js +1 -0
  51. package/build/assets/dropdown-classes-BsVmxlNG.js +1 -0
  52. package/build/assets/edit-automation-modal-DamwL0s0.js +1 -0
  53. package/build/assets/ellipsis-button-Vh5MvRZa.js +1 -0
  54. package/build/assets/entry.client-Cn71WM8q.js +2 -0
  55. package/build/assets/enum-filter-dropdown-5JeF2RLb.js +1 -0
  56. package/build/assets/{environment-switch-overlay-XL8yCGP6.js → environment-switch-overlay-Tf_BIfeR.js} +1 -1
  57. package/build/assets/extensions-hub-CUEmfvGy.js +1 -0
  58. package/build/assets/{extensions-navigation-BYR8Giqq.js → extensions-navigation-VQ-3umJ7.js} +1 -1
  59. package/build/assets/file-BTY6Gyy9.js +1 -0
  60. package/build/assets/files-tab-C47fQEeL.js +1 -0
  61. package/build/assets/files-tab-store-m0ARqX_E.js +1 -0
  62. package/build/assets/{folder-ZZJVGgd7.js → folder-D1T2W1cj.js} +1 -1
  63. package/build/assets/git-control-bar-branch-button-BT0aWH-o.js +27 -0
  64. package/build/assets/git-provider-icon-Pi-Cxpgv.js +1 -0
  65. package/build/assets/globe-Bzj_0oXT.js +1 -0
  66. package/build/assets/home-C3k6sFvB.js +1 -0
  67. package/build/assets/{i18n-CTohRuoO.js → i18n-DET2iOyh.js} +1 -1
  68. package/build/assets/install-server-modal-6fuq-TU6.js +1 -0
  69. package/build/assets/launch-DGghLfGx.js +1 -0
  70. package/build/assets/{lesson-plan-dH5Bj0pN.js → lesson-plan-duSsqWVs.js} +1 -1
  71. package/build/assets/link-external-DGxVm4Ps.js +1 -0
  72. package/build/assets/{llm-client-DaH1TuyR.js → llm-client-BqyLKgUN.js} +1 -1
  73. package/build/assets/llm-settings-BKraGtOu.js +1 -0
  74. package/build/assets/llm-settings-DRQTgOF1.js +1 -0
  75. package/build/assets/{loading-spinner-BPtYORNK.js → loading-spinner-5GT9q1xy.js} +1 -1
  76. package/build/assets/manage-backends-modal-CRMwyU0t.js +1 -0
  77. package/build/assets/manage-workspaces-modal-BYmGD1W7.js +1 -0
  78. package/build/assets/manifest-99b06a11.js +1 -0
  79. package/build/assets/{markdown-renderer-DMzf2i4x.js → markdown-renderer-B3IAVfv4.js} +1 -1
  80. package/build/assets/mcp-CfDRAmPn.js +9 -0
  81. package/build/assets/messages-Ba1vaw6t.js +36 -0
  82. package/build/assets/{modal-backdrop-BAbgYsqB.js → modal-backdrop-RfNCrSpK.js} +1 -1
  83. package/build/assets/{modal-body-BI6Ru2Qr.js → modal-body-aoa2fx5W.js} +1 -1
  84. package/build/assets/modal-classes-6YqcqA6y.js +1 -0
  85. package/build/assets/{modal-close-button-t1Gh3qmL.js → modal-close-button-CtWOUMmw.js} +1 -1
  86. package/build/assets/{model-selector-SM9IUz-q.js → model-selector-DcztJSxT.js} +1 -1
  87. package/build/assets/{navigation-context-D0YWpT8d.js → navigation-context-BdKYH32C.js} +1 -1
  88. package/build/assets/{navigation-link-Cn7KP3c5.js → navigation-link-U4vY9i_C.js} +1 -1
  89. package/build/assets/{openhands-logo-CnrF6LKb.js → openhands-logo-CCo0wJZX.js} +1 -1
  90. package/build/assets/{option-service.api-KvY_mZMY.js → option-service.api-CGNANEcT.js} +1 -1
  91. package/build/assets/{organization-service.api-DzYTHTYC.js → organization-service.api-BeuMC9QL.js} +1 -1
  92. package/build/assets/{path-utils-C3bQf6lJ.js → path-utils-z12iCrQO.js} +1 -1
  93. package/build/assets/{plan-components-atxXCF0R.js → plan-components-CRDMQzsS.js} +1 -1
  94. package/build/assets/{planner-tab-BlrCpv-7.js → planner-tab-Dte6Vzza.js} +1 -1
  95. package/build/assets/{profiles-client-D6IkTJof.js → profiles-client-BrqNmaDV.js} +1 -1
  96. package/build/assets/{providers-Bx6EfrzZ.js → providers-eUyo6pgr.js} +1 -1
  97. package/build/assets/proxy-BqDMnUY-.js +1 -0
  98. package/build/assets/{query-client-config-B7u9asM0.js → query-client-config-CRnGSujB.js} +1 -1
  99. package/build/assets/{recommended-automations-launcher-CgV8FyPK.js → recommended-automations-launcher-D5ADbXao.js} +3 -3
  100. package/build/assets/{root-dNntxffj.js → root-BmhaEJJ8.js} +2 -2
  101. package/build/assets/root-Z2VHU4R3.css +1 -0
  102. package/build/assets/root-layout-CNggm0d8.js +2 -0
  103. package/build/assets/{sdk-section-page-DOIKvwSL.js → sdk-section-page-CRCRY3PG.js} +1 -1
  104. package/build/assets/{sdk-settings-schema-DsUf9wu1.js → sdk-settings-schema-CLmJ9sho.js} +1 -1
  105. package/build/assets/{search-27Owlc3A.js → search-SuJctqNJ.js} +1 -1
  106. package/build/assets/secrets-service-B9AFn9OE.js +1 -0
  107. package/build/assets/secrets-settings-0UrKMS60.js +1 -0
  108. package/build/assets/{server-client-DyAQ3NZ_.js → server-client-DYv_GHPl.js} +1 -1
  109. package/build/assets/{settings-BYkVX7vW.js → settings-6t6LGW04.js} +1 -1
  110. package/build/assets/{settings-dropdown-input-BJYvGdg-.js → settings-dropdown-input-BtoovFre.js} +1 -1
  111. package/build/assets/{settings-gear-C77PgE_O.js → settings-gear-Dd8K2_8B.js} +1 -1
  112. package/build/assets/settings-index-CR6Ou73o.js +1 -0
  113. package/build/assets/{settings-input-Bn7F5C75.js → settings-input-CehsXnb3.js} +1 -1
  114. package/build/assets/settings-list-classes-E3v_f6QG.js +1 -0
  115. package/build/assets/settings-modal-T_Yk1Zfo.js +1 -0
  116. package/build/assets/{settings-section-header-context-BgZe5YkE.js → settings-section-header-context-DewwJ0-F.js} +1 -1
  117. package/build/assets/settings-service.api-DwtyDeGh.js +1 -0
  118. package/build/assets/{settings-switch-BeIKrWms.js → settings-switch-BiBuS3xa.js} +1 -1
  119. package/build/assets/{settings-utils-B6Nl07io.js → settings-utils-DY04tWG1.js} +1 -1
  120. package/build/assets/{shared-conversation-AMyqXvpk.js → shared-conversation-BzccsVej.js} +1 -1
  121. package/build/assets/sidebar-mobile-menu-toggle-DGlRg6jG.js +1 -0
  122. package/build/assets/{sidebar-nav-link-BGjiJq-4.js → sidebar-nav-link-dgVb8Fpy.js} +1 -1
  123. package/build/assets/{sidebar-store-Uy3v0AOV.js → sidebar-store-DnQAJAE5.js} +1 -1
  124. package/build/assets/{skill-card-pill-row-DF1axQCG.js → skill-card-pill-row-BW9qvhoK.js} +1 -1
  125. package/build/assets/{skills-ChIKZPK4.js → skills-0GRKX5Xj.js} +1 -1
  126. package/build/assets/{skills-plugins-CcI_19lM.js → skills-plugins-DctDrZ8Y.js} +1 -1
  127. package/build/assets/skills-settings-rvxImDj_.js +2 -0
  128. package/build/assets/{styled-tooltip-CBzrri6o.js → styled-tooltip-hdfMXPQC.js} +1 -1
  129. package/build/assets/{switch-skeleton-DnC9wLp7.js → switch-skeleton-DSKqSx2A.js} +1 -1
  130. package/build/assets/{task-list-tab-DUJn1sgz.js → task-list-tab-DT6_zfUs.js} +1 -1
  131. package/build/assets/{terminal-RmuaSdhJ.js → terminal-CPYWdo4j.js} +1 -1
  132. package/build/assets/{terminal-DgQk1Ay6.js → terminal-KldRPIRT.js} +2 -2
  133. package/build/assets/{toggle-switch-Pvyp2RAN.js → toggle-switch-T2v6sJ6l.js} +1 -1
  134. package/build/assets/{typography-gpuWmrQO.js → typography-BDgnT7Yp.js} +1 -1
  135. package/build/assets/{u-check-circle-IUIfACQQ.js → u-check-circle-DOauqQKb.js} +1 -1
  136. package/build/assets/{u-check-circle-half-C1YxB6py.js → u-check-circle-half-steSK_JB.js} +1 -1
  137. package/build/assets/{u-circuit-BmVikJHu.js → u-circuit-x3ExjBbU.js} +1 -1
  138. package/build/assets/{u-edit-CFvXHqZk.js → u-edit-BbrptMCa.js} +1 -1
  139. package/build/assets/{use-active-conversation-BEFNwnFk.js → use-active-conversation-sPgfSkql.js} +1 -1
  140. package/build/assets/use-agent-settings-schema-B66kGIi_.js +1 -0
  141. package/build/assets/{use-agent-state-Bkrd1FZq.js → use-agent-state-Dp3pD1h3.js} +1 -1
  142. package/build/assets/{use-cloud-current-user-id-CvkXFnTT.js → use-cloud-current-user-id-ClKFPjFz.js} +1 -1
  143. package/build/assets/{use-config-Co1O8-Ey.js → use-config-C9pvb0Sm.js} +1 -1
  144. package/build/assets/{use-create-conversation-CEgXpkfH.js → use-create-conversation-B-lwTnfE.js} +1 -1
  145. package/build/assets/{use-event-store-BT_gV3ut.js → use-event-store-BomO7ywK.js} +1 -1
  146. package/build/assets/{use-get-secrets-DuhdIA59.js → use-get-secrets-oyC7PFRz.js} +1 -1
  147. package/build/assets/{use-handle-plan-click-Ckkm5eIY.js → use-handle-plan-click-DP6Rs-YP.js} +1 -1
  148. package/build/assets/use-is-authed-dw2026rR.js +1 -0
  149. package/build/assets/{use-is-creating-conversation-BZ5hB_Bg.js → use-is-creating-conversation-DX2qSlfL.js} +1 -1
  150. package/build/assets/{use-launch-skill-in-chat-fNN_xGZG.js → use-launch-skill-in-chat-sQNEOLGD.js} +1 -1
  151. package/build/assets/use-llm-profiles-Bh5JqZUZ.js +1 -0
  152. package/build/assets/use-runtime-is-ready-BakOUVU-.js +1 -0
  153. package/build/assets/{use-save-settings-VUrj_QNG.js → use-save-settings-uXXkqvD7.js} +1 -1
  154. package/build/assets/use-settings-DeO7nvpM.js +1 -0
  155. package/build/assets/{use-settings-nav-items-1ZvovKSr.js → use-settings-nav-items-BGMFn25b.js} +1 -1
  156. package/build/assets/{use-skills-DAMLFjKU.js → use-skills-DWIK3l3a.js} +1 -1
  157. package/build/assets/{use-task-list-CLJbuJgM.js → use-task-list-CsT10CBb.js} +1 -1
  158. package/build/assets/{use-unified-vscode-url-DdSRw-6P.js → use-unified-vscode-url-DXPtB317.js} +1 -1
  159. package/build/assets/use-user-conversation-DJen4YIP.js +1 -0
  160. package/build/assets/{useMutation-DqrumCWD.js → useMutation-GSSKKebK.js} +1 -1
  161. package/build/assets/{useTranslation-DCOdSSMl.js → useTranslation-B6voJV4y.js} +1 -1
  162. package/build/assets/utils-DCVfKFRt.js +1 -0
  163. package/build/assets/{vendor~browser-BNjNhjFU.js → vendor~browser-BrOJLj3y.js} +1 -1
  164. package/build/assets/vendor~conversation-panel~conversation-C9o-K1hW.js +1 -0
  165. package/build/assets/vendor~conversation-panel~conversation~index-RXYdJYxU.js +1 -0
  166. package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~jfc6hidu-VnmIZrq3.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~jfc6hidu-DJS-rJdI.js} +1 -1
  167. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DpAdkv8m.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-6ByzelMS.js} +1 -1
  168. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-B92czPCF.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BED5W_c4.js} +1 -1
  169. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-By5W2oHN.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CCbqAFiI.js} +1 -1
  170. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BbFOrAjI.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CG96FCly.js} +1 -1
  171. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-smY2r837.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-E4d6IEfI.js} +1 -1
  172. package/build/assets/{vendor~home~mcp~automations-list-Cs-TO3fK.js → vendor~home~mcp~automations-list-CZSK-lT2.js} +1 -1
  173. package/build/assets/{vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-Z3nsiNNq.js → vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-CjJdFLoM.js} +1 -1
  174. package/build/assets/{vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-DbfELDJu.js → vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-m8dOii0J.js} +2 -2
  175. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation-DjAjXS5J.js → vendor~root-layout~home~conversation-panel~conversation-B5WNMnt4.js} +1 -1
  176. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~i4kjfqhl-CbAhtEMv.js +1 -0
  177. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-6Rm8U_Sr.js +9 -0
  178. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-BkQGKpye.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-tTR8C6m0.js} +1 -1
  179. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~k776hupu-Bbs7UJ5U.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~k776hupu-BJbu9kpL.js} +2 -2
  180. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~dp08i1qy-DTwbEEcX.js → vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~dp08i1qy-D8soyAAx.js} +1 -1
  181. package/build/assets/{vendor~root~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-s~f2l2lr17-CDXvdvb2.js → vendor~root~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-s~f2l2lr17-DYXOLEck.js} +1 -1
  182. package/build/assets/{verification-settings-CsbvQcYS.js → verification-settings-C_zHuDx9.js} +1 -1
  183. package/build/assets/{vscode-tab-DjNArCgY.js → vscode-tab-DH9x7xXS.js} +1 -1
  184. package/build/assets/{waiting-for-runtime-message-CntjExbU.js → waiting-for-runtime-message-CdK3btDZ.js} +1 -1
  185. package/build/assets/{x-mark-CrpjscNc.js → x-mark-BrkSPIiT.js} +1 -1
  186. package/build/index.html +4 -4
  187. package/build/locales/ar/openhands.json +20 -2
  188. package/build/locales/ca/openhands.json +20 -2
  189. package/build/locales/de/openhands.json +20 -2
  190. package/build/locales/en/openhands.json +20 -2
  191. package/build/locales/es/openhands.json +20 -2
  192. package/build/locales/fr/openhands.json +20 -2
  193. package/build/locales/it/openhands.json +20 -2
  194. package/build/locales/ja/openhands.json +20 -2
  195. package/build/locales/ko-KR/openhands.json +20 -2
  196. package/build/locales/no/openhands.json +20 -2
  197. package/build/locales/pt/openhands.json +20 -2
  198. package/build/locales/tr/openhands.json +20 -2
  199. package/build/locales/uk/openhands.json +20 -2
  200. package/build/locales/zh-CN/openhands.json +20 -2
  201. package/build/locales/zh-TW/openhands.json +20 -2
  202. package/dist/api/acp-service/acp-service.api.d.ts +18 -0
  203. package/dist/api/agent-server-adapter.cjs +3 -3
  204. package/dist/api/agent-server-adapter.cjs.map +1 -1
  205. package/dist/api/agent-server-adapter.js +54 -55
  206. package/dist/api/agent-server-adapter.js.map +1 -1
  207. package/dist/api/agent-server-client-options.cjs +1 -1
  208. package/dist/api/agent-server-client-options.cjs.map +1 -1
  209. package/dist/api/agent-server-client-options.d.ts +4 -0
  210. package/dist/api/agent-server-client-options.js +18 -12
  211. package/dist/api/agent-server-client-options.js.map +1 -1
  212. package/dist/api/agent-server-compatibility.cjs +1 -1
  213. package/dist/api/agent-server-compatibility.cjs.map +1 -1
  214. package/dist/api/agent-server-compatibility.d.ts +1 -1
  215. package/dist/api/agent-server-compatibility.js +30 -25
  216. package/dist/api/agent-server-compatibility.js.map +1 -1
  217. package/dist/api/agent-server-config.cjs +1 -1
  218. package/dist/api/agent-server-config.cjs.map +1 -1
  219. package/dist/api/agent-server-config.d.ts +15 -48
  220. package/dist/api/agent-server-config.js +25 -69
  221. package/dist/api/agent-server-config.js.map +1 -1
  222. package/dist/api/backend-registry/active-store.cjs +1 -1
  223. package/dist/api/backend-registry/active-store.cjs.map +1 -1
  224. package/dist/api/backend-registry/active-store.d.ts +11 -5
  225. package/dist/api/backend-registry/active-store.js +36 -27
  226. package/dist/api/backend-registry/active-store.js.map +1 -1
  227. package/dist/api/backend-registry/auth.cjs +1 -1
  228. package/dist/api/backend-registry/auth.cjs.map +1 -1
  229. package/dist/api/backend-registry/auth.js +3 -9
  230. package/dist/api/backend-registry/auth.js.map +1 -1
  231. package/dist/api/backend-registry/default-backend.cjs +1 -1
  232. package/dist/api/backend-registry/default-backend.cjs.map +1 -1
  233. package/dist/api/backend-registry/default-backend.d.ts +9 -16
  234. package/dist/api/backend-registry/default-backend.js +5 -4
  235. package/dist/api/backend-registry/default-backend.js.map +1 -1
  236. package/dist/api/backend-registry/storage.cjs +1 -1
  237. package/dist/api/backend-registry/storage.cjs.map +1 -1
  238. package/dist/api/backend-registry/storage.js +67 -34
  239. package/dist/api/backend-registry/storage.js.map +1 -1
  240. package/dist/api/cloud/conversation-service.api.cjs.map +1 -1
  241. package/dist/api/cloud/conversation-service.api.d.ts +8 -13
  242. package/dist/api/cloud/conversation-service.api.js.map +1 -1
  243. package/dist/api/cloud/organization-service.api.cjs.map +1 -1
  244. package/dist/api/cloud/organization-service.api.d.ts +1 -2
  245. package/dist/api/cloud/organization-service.api.js.map +1 -1
  246. package/dist/api/cloud/proxy.cjs +1 -1
  247. package/dist/api/cloud/proxy.cjs.map +1 -1
  248. package/dist/api/cloud/proxy.d.ts +6 -6
  249. package/dist/api/cloud/proxy.js +33 -24
  250. package/dist/api/cloud/proxy.js.map +1 -1
  251. package/dist/api/cloud/sandbox-service.api.cjs.map +1 -1
  252. package/dist/api/cloud/sandbox-service.api.d.ts +3 -3
  253. package/dist/api/cloud/sandbox-service.api.js.map +1 -1
  254. package/dist/api/cloud/secrets-service.api.cjs.map +1 -1
  255. package/dist/api/cloud/secrets-service.api.d.ts +3 -4
  256. package/dist/api/cloud/secrets-service.api.js.map +1 -1
  257. package/dist/api/cloud/settings-service.api.cjs +1 -1
  258. package/dist/api/cloud/settings-service.api.cjs.map +1 -1
  259. package/dist/api/cloud/settings-service.api.js +5 -1
  260. package/dist/api/cloud/settings-service.api.js.map +1 -1
  261. package/dist/api/cloud/skills-service.api.cjs.map +1 -1
  262. package/dist/api/cloud/skills-service.api.d.ts +5 -5
  263. package/dist/api/cloud/skills-service.api.js.map +1 -1
  264. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
  265. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
  266. package/dist/api/conversation-service/agent-server-conversation-service.api.js +115 -108
  267. package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
  268. package/dist/api/device-flow-client.cjs +1 -1
  269. package/dist/api/device-flow-client.cjs.map +1 -1
  270. package/dist/api/device-flow-client.d.ts +3 -5
  271. package/dist/api/device-flow-client.js +55 -66
  272. package/dist/api/device-flow-client.js.map +1 -1
  273. package/dist/api/event-service/event-service.api.cjs +1 -1
  274. package/dist/api/event-service/event-service.api.cjs.map +1 -1
  275. package/dist/api/event-service/event-service.api.d.ts +3 -3
  276. package/dist/api/event-service/event-service.api.js +17 -17
  277. package/dist/api/event-service/event-service.api.js.map +1 -1
  278. package/dist/api/git-service/agent-server-git-service.api.cjs +1 -1
  279. package/dist/api/git-service/agent-server-git-service.api.js +11 -11
  280. package/dist/api/runtime-service/agent-server-runtime-service.cjs +1 -1
  281. package/dist/api/runtime-service/agent-server-runtime-service.js +6 -6
  282. package/dist/components/conversation-events/chat/event-content-helpers/get-action-content.cjs +2 -2
  283. package/dist/components/conversation-events/chat/event-content-helpers/get-action-content.js +10 -10
  284. package/dist/components/conversation-events/chat/event-content-helpers/get-observation-result.cjs.map +1 -1
  285. package/dist/components/conversation-events/chat/event-content-helpers/get-observation-result.d.ts +5 -5
  286. package/dist/components/conversation-events/chat/event-content-helpers/get-observation-result.js.map +1 -1
  287. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs +1 -1
  288. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs.map +1 -1
  289. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js +1 -1
  290. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js.map +1 -1
  291. package/dist/components/features/automations/automation-action-button-classes.d.ts +2 -2
  292. package/dist/components/features/backends/backend-form-modal.cjs +1 -1
  293. package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
  294. package/dist/components/features/backends/backend-form-modal.d.ts +1 -0
  295. package/dist/components/features/backends/backend-form-modal.js +203 -140
  296. package/dist/components/features/backends/backend-form-modal.js.map +1 -1
  297. package/dist/components/features/backends/backend-selector.cjs +1 -1
  298. package/dist/components/features/backends/backend-selector.cjs.map +1 -1
  299. package/dist/components/features/backends/backend-selector.js +117 -105
  300. package/dist/components/features/backends/backend-selector.js.map +1 -1
  301. package/dist/components/features/backends/backend-status-dot.cjs +1 -1
  302. package/dist/components/features/backends/backend-status-dot.cjs.map +1 -1
  303. package/dist/components/features/backends/backend-status-dot.d.ts +1 -1
  304. package/dist/components/features/backends/backend-status-dot.js +1 -1
  305. package/dist/components/features/backends/backend-status-dot.js.map +1 -1
  306. package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
  307. package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
  308. package/dist/components/features/backends/manage-backends-modal.js +81 -70
  309. package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
  310. package/dist/components/features/chat/change-agent-button.cjs +1 -1
  311. package/dist/components/features/chat/change-agent-button.cjs.map +1 -1
  312. package/dist/components/features/chat/change-agent-button.js +59 -57
  313. package/dist/components/features/chat/change-agent-button.js.map +1 -1
  314. package/dist/components/features/chat/change-agent-context-menu.cjs +1 -1
  315. package/dist/components/features/chat/change-agent-context-menu.cjs.map +1 -1
  316. package/dist/components/features/chat/change-agent-context-menu.d.ts +3 -1
  317. package/dist/components/features/chat/change-agent-context-menu.js +30 -25
  318. package/dist/components/features/chat/change-agent-context-menu.js.map +1 -1
  319. package/dist/components/features/chat/chat-add-file-button.cjs +1 -1
  320. package/dist/components/features/chat/chat-add-file-button.cjs.map +1 -1
  321. package/dist/components/features/chat/chat-add-file-button.js +39 -38
  322. package/dist/components/features/chat/chat-add-file-button.js.map +1 -1
  323. package/dist/components/features/chat/chat-message.cjs +1 -1
  324. package/dist/components/features/chat/chat-message.cjs.map +1 -1
  325. package/dist/components/features/chat/chat-message.d.ts +2 -1
  326. package/dist/components/features/chat/chat-message.js +185 -57
  327. package/dist/components/features/chat/chat-message.js.map +1 -1
  328. package/dist/components/features/chat/components/chat-input-actions.cjs +1 -1
  329. package/dist/components/features/chat/components/chat-input-actions.cjs.map +1 -1
  330. package/dist/components/features/chat/components/chat-input-actions.js +113 -113
  331. package/dist/components/features/chat/components/chat-input-actions.js.map +1 -1
  332. package/dist/components/features/chat/components/chat-input-model.cjs +1 -1
  333. package/dist/components/features/chat/components/chat-input-model.cjs.map +1 -1
  334. package/dist/components/features/chat/components/chat-input-model.js +52 -51
  335. package/dist/components/features/chat/components/chat-input-model.js.map +1 -1
  336. package/dist/components/features/chat/components/slash-command-menu.cjs +2 -2
  337. package/dist/components/features/chat/components/slash-command-menu.cjs.map +1 -1
  338. package/dist/components/features/chat/components/slash-command-menu.js +38 -34
  339. package/dist/components/features/chat/components/slash-command-menu.js.map +1 -1
  340. package/dist/components/features/chat/git-control-bar-pr-button.cjs +1 -1
  341. package/dist/components/features/chat/git-control-bar-pr-button.cjs.map +1 -1
  342. package/dist/components/features/chat/git-control-bar-pr-button.js +16 -15
  343. package/dist/components/features/chat/git-control-bar-pr-button.js.map +1 -1
  344. package/dist/components/features/chat/git-control-bar-pull-button.cjs +1 -1
  345. package/dist/components/features/chat/git-control-bar-pull-button.cjs.map +1 -1
  346. package/dist/components/features/chat/git-control-bar-pull-button.js +16 -15
  347. package/dist/components/features/chat/git-control-bar-pull-button.js.map +1 -1
  348. package/dist/components/features/chat/git-control-bar-push-button.cjs +1 -1
  349. package/dist/components/features/chat/git-control-bar-push-button.cjs.map +1 -1
  350. package/dist/components/features/chat/git-control-bar-push-button.js +16 -15
  351. package/dist/components/features/chat/git-control-bar-push-button.js.map +1 -1
  352. package/dist/components/features/chat/git-control-bar.cjs +1 -1
  353. package/dist/components/features/chat/git-control-bar.cjs.map +1 -1
  354. package/dist/components/features/chat/git-control-bar.js +63 -62
  355. package/dist/components/features/chat/git-control-bar.js.map +1 -1
  356. package/dist/components/features/chat/pending-user-messages.cjs +1 -1
  357. package/dist/components/features/chat/pending-user-messages.cjs.map +1 -1
  358. package/dist/components/features/chat/pending-user-messages.js +27 -23
  359. package/dist/components/features/chat/pending-user-messages.js.map +1 -1
  360. package/dist/components/features/chat/switch-profile-button.cjs +1 -1
  361. package/dist/components/features/chat/switch-profile-button.cjs.map +1 -1
  362. package/dist/components/features/chat/switch-profile-button.js +26 -25
  363. package/dist/components/features/chat/switch-profile-button.js.map +1 -1
  364. package/dist/components/features/chat/switch-profile-context-menu.cjs +1 -1
  365. package/dist/components/features/chat/switch-profile-context-menu.cjs.map +1 -1
  366. package/dist/components/features/chat/switch-profile-context-menu.js +77 -67
  367. package/dist/components/features/chat/switch-profile-context-menu.js.map +1 -1
  368. package/dist/components/features/context-menu/context-menu-icon-text-with-description.cjs +1 -1
  369. package/dist/components/features/context-menu/context-menu-icon-text-with-description.cjs.map +1 -1
  370. package/dist/components/features/context-menu/context-menu-icon-text-with-description.d.ts +2 -1
  371. package/dist/components/features/context-menu/context-menu-icon-text-with-description.js +3 -2
  372. package/dist/components/features/context-menu/context-menu-icon-text-with-description.js.map +1 -1
  373. package/dist/components/features/context-menu/context-menu-icon-text.cjs +1 -1
  374. package/dist/components/features/context-menu/context-menu-icon-text.cjs.map +1 -1
  375. package/dist/components/features/context-menu/context-menu-icon-text.d.ts +2 -1
  376. package/dist/components/features/context-menu/context-menu-icon-text.js +20 -10
  377. package/dist/components/features/context-menu/context-menu-icon-text.js.map +1 -1
  378. package/dist/components/features/context-menu/context-menu-list-item.cjs +1 -1
  379. package/dist/components/features/context-menu/context-menu-list-item.cjs.map +1 -1
  380. package/dist/components/features/context-menu/context-menu-list-item.js +10 -9
  381. package/dist/components/features/context-menu/context-menu-list-item.js.map +1 -1
  382. package/dist/components/features/controls/agent-status.cjs +1 -1
  383. package/dist/components/features/controls/agent-status.js +12 -12
  384. package/dist/components/features/controls/git-tools-submenu.cjs +1 -1
  385. package/dist/components/features/controls/git-tools-submenu.cjs.map +1 -1
  386. package/dist/components/features/controls/git-tools-submenu.js +1 -1
  387. package/dist/components/features/controls/git-tools-submenu.js.map +1 -1
  388. package/dist/components/features/controls/macros-submenu.cjs +1 -1
  389. package/dist/components/features/controls/macros-submenu.cjs.map +1 -1
  390. package/dist/components/features/controls/macros-submenu.js +1 -1
  391. package/dist/components/features/controls/macros-submenu.js.map +1 -1
  392. package/dist/components/features/controls/server-status-context-menu-icon-text.cjs +1 -1
  393. package/dist/components/features/controls/server-status-context-menu-icon-text.cjs.map +1 -1
  394. package/dist/components/features/controls/server-status-context-menu-icon-text.js +14 -15
  395. package/dist/components/features/controls/server-status-context-menu-icon-text.js.map +1 -1
  396. package/dist/components/features/controls/server-status-context-menu.cjs +1 -1
  397. package/dist/components/features/controls/server-status-context-menu.js +4 -4
  398. package/dist/components/features/controls/server-status.cjs +1 -1
  399. package/dist/components/features/controls/server-status.js +7 -7
  400. package/dist/components/features/controls/tools-context-menu-icon-text.cjs +1 -1
  401. package/dist/components/features/controls/tools-context-menu-icon-text.cjs.map +1 -1
  402. package/dist/components/features/controls/tools-context-menu-icon-text.js +16 -16
  403. package/dist/components/features/controls/tools-context-menu-icon-text.js.map +1 -1
  404. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.cjs +1 -1
  405. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.cjs.map +1 -1
  406. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.js +11 -11
  407. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.js.map +1 -1
  408. package/dist/components/features/conversation/conversation-name-with-status.cjs +1 -1
  409. package/dist/components/features/conversation/conversation-name-with-status.js +11 -11
  410. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs +1 -1
  411. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs.map +1 -1
  412. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js +60 -47
  413. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js.map +1 -1
  414. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.cjs +1 -1
  415. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.cjs.map +1 -1
  416. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.js +86 -82
  417. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.js.map +1 -1
  418. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.cjs +1 -1
  419. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js +4 -4
  420. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs +1 -1
  421. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js +9 -9
  422. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs +1 -1
  423. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs.map +1 -1
  424. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js +93 -93
  425. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js.map +1 -1
  426. package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
  427. package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
  428. package/dist/components/features/conversation-panel/conversation-panel.js +177 -177
  429. package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
  430. package/dist/components/features/conversation-panel/ellipsis-button.cjs +1 -1
  431. package/dist/components/features/conversation-panel/ellipsis-button.cjs.map +1 -1
  432. package/dist/components/features/conversation-panel/ellipsis-button.js +13 -13
  433. package/dist/components/features/conversation-panel/ellipsis-button.js.map +1 -1
  434. package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs +1 -1
  435. package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs.map +1 -1
  436. package/dist/components/features/conversation-panel/local-new-conversation-menu.js +57 -53
  437. package/dist/components/features/conversation-panel/local-new-conversation-menu.js.map +1 -1
  438. package/dist/components/features/conversation-panel/new-conversation-dropdown-styles.cjs +1 -1
  439. package/dist/components/features/conversation-panel/new-conversation-dropdown-styles.cjs.map +1 -1
  440. package/dist/components/features/conversation-panel/new-conversation-dropdown-styles.js +3 -2
  441. package/dist/components/features/conversation-panel/new-conversation-dropdown-styles.js.map +1 -1
  442. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.cjs +1 -1
  443. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.cjs.map +1 -1
  444. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.js +11 -8
  445. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.js.map +1 -1
  446. package/dist/components/features/conversation-panel/system-message-modal/tab-content.cjs.map +1 -1
  447. package/dist/components/features/conversation-panel/system-message-modal/tab-content.d.ts +2 -5
  448. package/dist/components/features/conversation-panel/system-message-modal/tab-content.js.map +1 -1
  449. package/dist/components/features/files-tab/file-content-viewer.cjs +1 -1
  450. package/dist/components/features/files-tab/file-content-viewer.cjs.map +1 -1
  451. package/dist/components/features/files-tab/file-content-viewer.js +45 -42
  452. package/dist/components/features/files-tab/file-content-viewer.js.map +1 -1
  453. package/dist/components/features/home/llm-not-configured-banner.d.ts +11 -0
  454. package/dist/components/features/home/shared/dropdown-item.cjs +1 -1
  455. package/dist/components/features/home/shared/dropdown-item.cjs.map +1 -1
  456. package/dist/components/features/home/shared/dropdown-item.js +20 -16
  457. package/dist/components/features/home/shared/dropdown-item.js.map +1 -1
  458. package/dist/components/features/home/shared/generic-dropdown-menu.cjs +1 -1
  459. package/dist/components/features/home/shared/generic-dropdown-menu.cjs.map +1 -1
  460. package/dist/components/features/home/shared/generic-dropdown-menu.js +23 -22
  461. package/dist/components/features/home/shared/generic-dropdown-menu.js.map +1 -1
  462. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.cjs +1 -1
  463. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.cjs.map +1 -1
  464. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.js +103 -102
  465. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.js.map +1 -1
  466. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.cjs +1 -1
  467. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.cjs.map +1 -1
  468. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.js +68 -67
  469. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.js.map +1 -1
  470. package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
  471. package/dist/components/features/mcp-page/custom-server-editor.cjs.map +1 -1
  472. package/dist/components/features/mcp-page/custom-server-editor.js +62 -60
  473. package/dist/components/features/mcp-page/custom-server-editor.js.map +1 -1
  474. package/dist/components/features/mcp-page/index.cjs +1 -1
  475. package/dist/components/features/mcp-page/index.d.ts +1 -0
  476. package/dist/components/features/mcp-page/index.js +1 -0
  477. package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
  478. package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
  479. package/dist/components/features/mcp-page/install-server-modal.js +141 -121
  480. package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
  481. package/dist/components/features/mcp-page/save-as-secret-toggle.cjs +2 -0
  482. package/dist/components/features/mcp-page/save-as-secret-toggle.cjs.map +1 -0
  483. package/dist/components/features/mcp-page/save-as-secret-toggle.d.ts +7 -0
  484. package/dist/components/features/mcp-page/save-as-secret-toggle.js +50 -0
  485. package/dist/components/features/mcp-page/save-as-secret-toggle.js.map +1 -0
  486. package/dist/components/features/onboarding/onboarding-modal.d.ts +2 -2
  487. package/dist/components/features/onboarding/steps/check-backend-step.d.ts +1 -1
  488. package/dist/components/features/onboarding/steps/choose-agent-step.d.ts +2 -1
  489. package/dist/components/features/onboarding/steps/setup-acp-secrets-step.d.ts +19 -10
  490. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
  491. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.d.ts +5 -0
  492. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +2 -0
  493. package/dist/components/features/settings/llm-profiles/profile-actions-menu.cjs +1 -1
  494. package/dist/components/features/settings/llm-profiles/profile-actions-menu.js +1 -0
  495. package/dist/components/features/skills/extensions-navigation.cjs +1 -1
  496. package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
  497. package/dist/components/features/skills/extensions-navigation.js +1 -1
  498. package/dist/components/features/skills/extensions-navigation.js.map +1 -1
  499. package/dist/components/shared/buttons/back-nav-button.cjs +2 -0
  500. package/dist/components/shared/buttons/back-nav-button.cjs.map +1 -0
  501. package/dist/components/shared/buttons/back-nav-button.d.ts +17 -0
  502. package/dist/components/shared/buttons/back-nav-button.js +33 -0
  503. package/dist/components/shared/buttons/back-nav-button.js.map +1 -0
  504. package/dist/components/shared/buttons/conversation-confirmation-buttons.cjs +1 -1
  505. package/dist/components/shared/buttons/conversation-confirmation-buttons.js +5 -5
  506. package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
  507. package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
  508. package/dist/components/shared/filters/enum-filter-dropdown.js +32 -31
  509. package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
  510. package/dist/components/shared/modals/confirmation-modals/base-modal.cjs +1 -1
  511. package/dist/components/shared/modals/confirmation-modals/base-modal.cjs.map +1 -1
  512. package/dist/components/shared/modals/confirmation-modals/base-modal.js +14 -13
  513. package/dist/components/shared/modals/confirmation-modals/base-modal.js.map +1 -1
  514. package/dist/components/shared/modals/settings/settings-modal.cjs +1 -1
  515. package/dist/components/shared/modals/settings/settings-modal.cjs.map +1 -1
  516. package/dist/components/shared/modals/settings/settings-modal.js +17 -16
  517. package/dist/components/shared/modals/settings/settings-modal.js.map +1 -1
  518. package/dist/components/shared/text-shimmer.cjs +2 -0
  519. package/dist/components/shared/text-shimmer.cjs.map +1 -0
  520. package/dist/components/shared/text-shimmer.d.ts +11 -0
  521. package/dist/components/shared/text-shimmer.js +43 -0
  522. package/dist/components/shared/text-shimmer.js.map +1 -0
  523. package/dist/constants/acp-providers.cjs +1 -1
  524. package/dist/constants/acp-providers.cjs.map +1 -1
  525. package/dist/constants/acp-providers.d.ts +16 -3
  526. package/dist/constants/acp-providers.js +0 -1
  527. package/dist/constants/acp-providers.js.map +1 -1
  528. package/dist/contexts/active-backend-context.cjs +1 -1
  529. package/dist/contexts/active-backend-context.cjs.map +1 -1
  530. package/dist/contexts/active-backend-context.js +32 -32
  531. package/dist/contexts/active-backend-context.js.map +1 -1
  532. package/dist/hooks/chat/use-chat-input-logic.cjs +1 -1
  533. package/dist/hooks/chat/use-chat-input-logic.cjs.map +1 -1
  534. package/dist/hooks/chat/use-chat-input-logic.js +13 -6
  535. package/dist/hooks/chat/use-chat-input-logic.js.map +1 -1
  536. package/dist/hooks/mutation/use-save-fields-as-secrets.cjs +2 -0
  537. package/dist/hooks/mutation/use-save-fields-as-secrets.cjs.map +1 -0
  538. package/dist/hooks/mutation/use-save-fields-as-secrets.d.ts +9 -0
  539. package/dist/hooks/mutation/use-save-fields-as-secrets.js +24 -0
  540. package/dist/hooks/mutation/use-save-fields-as-secrets.js.map +1 -0
  541. package/dist/hooks/mutation/use-unified-start-conversation.cjs +1 -1
  542. package/dist/hooks/mutation/use-unified-start-conversation.js +8 -8
  543. package/dist/hooks/mutation/use-unified-stop-conversation.cjs +1 -1
  544. package/dist/hooks/mutation/use-unified-stop-conversation.js +15 -15
  545. package/dist/hooks/query/use-acp-auth-status.d.ts +36 -0
  546. package/dist/hooks/query/use-agent-settings-schema.cjs +1 -1
  547. package/dist/hooks/query/use-agent-settings-schema.cjs.map +1 -1
  548. package/dist/hooks/query/use-agent-settings-schema.js +26 -16
  549. package/dist/hooks/query/use-agent-settings-schema.js.map +1 -1
  550. package/dist/hooks/query/use-backends-health.cjs +1 -1
  551. package/dist/hooks/query/use-backends-health.cjs.map +1 -1
  552. package/dist/hooks/query/use-backends-health.d.ts +2 -0
  553. package/dist/hooks/query/use-backends-health.js +31 -21
  554. package/dist/hooks/query/use-backends-health.js.map +1 -1
  555. package/dist/hooks/query/use-paginated-conversations.cjs +1 -1
  556. package/dist/hooks/query/use-paginated-conversations.cjs.map +1 -1
  557. package/dist/hooks/query/use-paginated-conversations.js +15 -14
  558. package/dist/hooks/query/use-paginated-conversations.js.map +1 -1
  559. package/dist/hooks/query/use-settings.cjs +1 -1
  560. package/dist/hooks/query/use-settings.cjs.map +1 -1
  561. package/dist/hooks/query/use-settings.js +65 -52
  562. package/dist/hooks/query/use-settings.js.map +1 -1
  563. package/dist/hooks/query/use-user-conversation.cjs +1 -1
  564. package/dist/hooks/query/use-user-conversation.cjs.map +1 -1
  565. package/dist/hooks/query/use-user-conversation.js +20 -11
  566. package/dist/hooks/query/use-user-conversation.js.map +1 -1
  567. package/dist/hooks/use-agent-state.cjs +1 -1
  568. package/dist/hooks/use-agent-state.js +13 -13
  569. package/dist/hooks/use-conversation-name-context-menu.cjs +1 -1
  570. package/dist/hooks/use-conversation-name-context-menu.js +10 -10
  571. package/dist/hooks/use-conversation-name-context-menu.js.map +1 -1
  572. package/dist/hooks/use-llm-configured.d.ts +25 -0
  573. package/dist/hooks/use-runtime-is-ready.cjs +1 -1
  574. package/dist/hooks/use-runtime-is-ready.js +5 -5
  575. package/dist/i18n/declaration.cjs +1 -1
  576. package/dist/i18n/declaration.cjs.map +1 -1
  577. package/dist/i18n/declaration.d.ts +19 -1
  578. package/dist/i18n/declaration.js +1 -1
  579. package/dist/i18n/declaration.js.map +1 -1
  580. package/dist/i18n/translation.cjs +3 -3
  581. package/dist/i18n/translation.cjs.map +1 -1
  582. package/dist/i18n/translation.js +321 -15
  583. package/dist/i18n/translation.js.map +1 -1
  584. package/dist/icons/stop-circle.cjs +1 -1
  585. package/dist/icons/stop-circle.cjs.map +1 -1
  586. package/dist/icons/stop-circle.js +7 -10
  587. package/dist/icons/stop-circle.js.map +1 -1
  588. package/dist/locales/ar/openhands.json +20 -2
  589. package/dist/locales/ca/openhands.json +20 -2
  590. package/dist/locales/de/openhands.json +20 -2
  591. package/dist/locales/en/openhands.json +20 -2
  592. package/dist/locales/es/openhands.json +20 -2
  593. package/dist/locales/fr/openhands.json +20 -2
  594. package/dist/locales/it/openhands.json +20 -2
  595. package/dist/locales/ja/openhands.json +20 -2
  596. package/dist/locales/ko-KR/openhands.json +20 -2
  597. package/dist/locales/no/openhands.json +20 -2
  598. package/dist/locales/pt/openhands.json +20 -2
  599. package/dist/locales/tr/openhands.json +20 -2
  600. package/dist/locales/uk/openhands.json +20 -2
  601. package/dist/locales/zh-CN/openhands.json +20 -2
  602. package/dist/locales/zh-TW/openhands.json +20 -2
  603. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.cjs +2 -0
  604. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.cjs.map +1 -0
  605. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.js +15 -0
  606. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.js.map +1 -0
  607. package/dist/package.cjs +1 -1
  608. package/dist/package.cjs.map +1 -1
  609. package/dist/package.js +1 -1
  610. package/dist/package.js.map +1 -1
  611. package/dist/routes/conversation.cjs +1 -1
  612. package/dist/routes/conversation.cjs.map +1 -1
  613. package/dist/routes/conversation.js +1 -1
  614. package/dist/routes/conversation.js.map +1 -1
  615. package/dist/routes/llm-settings.cjs +1 -1
  616. package/dist/routes/llm-settings.cjs.map +1 -1
  617. package/dist/routes/llm-settings.js +55 -54
  618. package/dist/routes/llm-settings.js.map +1 -1
  619. package/dist/routes/secrets-settings.cjs +1 -1
  620. package/dist/routes/secrets-settings.cjs.map +1 -1
  621. package/dist/routes/secrets-settings.js +19 -27
  622. package/dist/routes/secrets-settings.js.map +1 -1
  623. package/dist/stores/conversation-store.cjs +1 -1
  624. package/dist/stores/conversation-store.cjs.map +1 -1
  625. package/dist/stores/conversation-store.d.ts +4 -0
  626. package/dist/stores/conversation-store.js +6 -0
  627. package/dist/stores/conversation-store.js.map +1 -1
  628. package/dist/types/agent-server/core/events/acp-tool-call-event.d.ts +6 -4
  629. package/dist/types/agent-server/core/events/system-event.d.ts +5 -0
  630. package/dist/types/automation.d.ts +15 -0
  631. package/dist/types/settings.d.ts +3 -1
  632. package/dist/ui/combobox-caret.cjs +1 -1
  633. package/dist/ui/combobox-caret.cjs.map +1 -1
  634. package/dist/ui/combobox-caret.d.ts +1 -1
  635. package/dist/ui/combobox-caret.js +9 -8
  636. package/dist/ui/combobox-caret.js.map +1 -1
  637. package/dist/ui/context-menu.cjs +1 -1
  638. package/dist/ui/context-menu.cjs.map +1 -1
  639. package/dist/ui/context-menu.js +9 -8
  640. package/dist/ui/context-menu.js.map +1 -1
  641. package/dist/ui/dropdown/dropdown-menu.cjs +1 -1
  642. package/dist/ui/dropdown/dropdown-menu.cjs.map +1 -1
  643. package/dist/ui/dropdown/dropdown-menu.js +21 -17
  644. package/dist/ui/dropdown/dropdown-menu.js.map +1 -1
  645. package/dist/ui/dropdown/dropdown.cjs +1 -1
  646. package/dist/ui/dropdown/dropdown.cjs.map +1 -1
  647. package/dist/ui/dropdown/dropdown.js +2 -2
  648. package/dist/ui/dropdown/dropdown.js.map +1 -1
  649. package/dist/utils/automation-schedule.d.ts +1 -0
  650. package/dist/utils/dropdown-classes.cjs +2 -0
  651. package/dist/utils/dropdown-classes.cjs.map +1 -0
  652. package/dist/utils/dropdown-classes.d.ts +32 -0
  653. package/dist/utils/dropdown-classes.js +8 -0
  654. package/dist/utils/dropdown-classes.js.map +1 -0
  655. package/dist/utils/form-control-classes.cjs +1 -1
  656. package/dist/utils/form-control-classes.cjs.map +1 -1
  657. package/dist/utils/form-control-classes.d.ts +18 -2
  658. package/dist/utils/form-control-classes.js +4 -3
  659. package/dist/utils/form-control-classes.js.map +1 -1
  660. package/dist/utils/git-control-bar-classes.cjs +2 -0
  661. package/dist/utils/git-control-bar-classes.cjs.map +1 -0
  662. package/dist/utils/git-control-bar-classes.d.ts +4 -0
  663. package/dist/utils/git-control-bar-classes.js +14 -0
  664. package/dist/utils/git-control-bar-classes.js.map +1 -0
  665. package/dist/utils/handle-event-for-ui.cjs.map +1 -1
  666. package/dist/utils/handle-event-for-ui.d.ts +6 -3
  667. package/dist/utils/handle-event-for-ui.js.map +1 -1
  668. package/dist/utils/mobile-top-bar-icon-button-classes.cjs +1 -1
  669. package/dist/utils/mobile-top-bar-icon-button-classes.cjs.map +1 -1
  670. package/dist/utils/mobile-top-bar-icon-button-classes.js +3 -3
  671. package/dist/utils/mobile-top-bar-icon-button-classes.js.map +1 -1
  672. package/dist/utils/modal-classes.cjs +2 -0
  673. package/dist/utils/modal-classes.cjs.map +1 -0
  674. package/dist/utils/modal-classes.d.ts +8 -0
  675. package/dist/utils/modal-classes.js +7 -0
  676. package/dist/utils/modal-classes.js.map +1 -0
  677. package/dist/utils/openhands-llm.cjs +2 -0
  678. package/dist/utils/openhands-llm.cjs.map +1 -0
  679. package/dist/utils/openhands-llm.d.ts +2 -0
  680. package/dist/utils/openhands-llm.js +9 -0
  681. package/dist/utils/openhands-llm.js.map +1 -0
  682. package/dist/utils/redact-custom-secrets.cjs +2 -0
  683. package/dist/utils/redact-custom-secrets.cjs.map +1 -0
  684. package/dist/utils/redact-custom-secrets.d.ts +6 -0
  685. package/dist/utils/redact-custom-secrets.js +10 -0
  686. package/dist/utils/redact-custom-secrets.js.map +1 -0
  687. package/dist/utils/status.cjs +1 -1
  688. package/dist/utils/status.cjs.map +1 -1
  689. package/dist/utils/status.d.ts +2 -1
  690. package/dist/utils/status.js +9 -8
  691. package/dist/utils/status.js.map +1 -1
  692. package/dist/utils/system-message-adapter.cjs +1 -1
  693. package/dist/utils/system-message-adapter.cjs.map +1 -1
  694. package/dist/utils/system-message-adapter.js +10 -7
  695. package/dist/utils/system-message-adapter.js.map +1 -1
  696. package/dist/utils/utils.cjs +1 -1
  697. package/dist/utils/utils.cjs.map +1 -1
  698. package/dist/utils/utils.d.ts +2 -1
  699. package/dist/utils/utils.js +21 -20
  700. package/dist/utils/utils.js.map +1 -1
  701. package/package.json +1 -1
  702. package/scripts/dev-safe.mjs +3 -1
  703. package/scripts/dev-static.mjs +2 -2
  704. package/scripts/dev-with-automation.mjs +283 -108
  705. package/scripts/static-build.mjs +20 -19
  706. package/scripts/static-server.mjs +65 -6
  707. package/build/assets/acp-providers-CbiRekh9.js +0 -1
  708. package/build/assets/active-backend-context-cCM1vYYZ.js +0 -1
  709. package/build/assets/add-backend-modal-DIUQzMPa.js +0 -1
  710. package/build/assets/agent-server-client-options-Bc5ZorQZ.js +0 -1
  711. package/build/assets/agent-server-compatibility-BlkUsrX2.js +0 -1
  712. package/build/assets/agent-server-conversation-service.api-C2V5SlHu.js +0 -5
  713. package/build/assets/api-key-entry-screen-B2gynaCp.js +0 -1
  714. package/build/assets/automation-detail-DJvbVSYK.js +0 -1
  715. package/build/assets/automations-list-6FDbI5dc.js +0 -1
  716. package/build/assets/backend-form-modal-Dnk33xA_.js +0 -1
  717. package/build/assets/base-modal-_dYTw1ri.js +0 -1
  718. package/build/assets/brand-button-Br7f0kZJ.js +0 -1
  719. package/build/assets/browser-store-Couc4S5D.js +0 -1
  720. package/build/assets/clock-BRjCgHTc.js +0 -1
  721. package/build/assets/combobox-caret-to1O8irE.js +0 -1
  722. package/build/assets/context-menu-list-item-CWNFpuiC.js +0 -1
  723. package/build/assets/conversation-DVrKU0oz.js +0 -19
  724. package/build/assets/conversation-Dlys-D5A.js +0 -1
  725. package/build/assets/conversation-panel-iF09WjZ4.js +0 -1
  726. package/build/assets/conversation-service.api-CCfztilW.js +0 -1
  727. package/build/assets/conversation-state-store-u5jepov0.js +0 -1
  728. package/build/assets/conversation-store-Z5iMCRpc.js +0 -1
  729. package/build/assets/conversation-websocket-context-DhJhqUna.js +0 -3
  730. package/build/assets/declaration-BNMqORFE.js +0 -1
  731. package/build/assets/dist-BxBP7tFD.js +0 -1
  732. package/build/assets/edit-automation-modal-BGzR3nfZ.js +0 -1
  733. package/build/assets/ellipsis-button-ZyLMPURn.js +0 -1
  734. package/build/assets/entry.client-1VMHpktY.js +0 -2
  735. package/build/assets/enum-filter-dropdown-CEgCdu4A.js +0 -1
  736. package/build/assets/extensions-hub-C651jsVh.js +0 -1
  737. package/build/assets/files-tab-R5z0lLdY.js +0 -1
  738. package/build/assets/files-tab-store-CDyVTXNT.js +0 -1
  739. package/build/assets/git-control-bar-branch-button-COdRAYHb.js +0 -27
  740. package/build/assets/git-provider-icon-BzLbc0yC.js +0 -1
  741. package/build/assets/home-e-egNUXZ.js +0 -1
  742. package/build/assets/install-server-modal-DHlbgqVH.js +0 -1
  743. package/build/assets/launch-CshDse3e.js +0 -1
  744. package/build/assets/link-external-D2POYx4c.js +0 -1
  745. package/build/assets/llm-settings-Bql-vydt.js +0 -1
  746. package/build/assets/llm-settings-C_tal6Ds.js +0 -1
  747. package/build/assets/manage-backends-modal-l7RkKfwX.js +0 -1
  748. package/build/assets/manage-workspaces-modal-DhKF_8z3.js +0 -1
  749. package/build/assets/manifest-3bf30d69.js +0 -1
  750. package/build/assets/mcp-ByeBfdfU.js +0 -9
  751. package/build/assets/messages-D0rWot7s.js +0 -36
  752. package/build/assets/proxy-CxydCnis.js +0 -1
  753. package/build/assets/root-DHeCXo9N.css +0 -1
  754. package/build/assets/root-layout-Czo9Ma6Q.js +0 -2
  755. package/build/assets/secrets-service-BsnKFc2x.js +0 -1
  756. package/build/assets/secrets-settings-Bz_UohPJ.js +0 -1
  757. package/build/assets/settings-client-C73C7IgV.js +0 -1
  758. package/build/assets/settings-index-Dz0BmdJD.js +0 -1
  759. package/build/assets/settings-list-classes-Bf80tWtc.js +0 -1
  760. package/build/assets/settings-modal-Brzgh5Yw.js +0 -1
  761. package/build/assets/settings-service.api-CZ3uWx4v.js +0 -1
  762. package/build/assets/sidebar-mobile-menu-toggle-Do_aA9Zm.js +0 -1
  763. package/build/assets/skills-settings-DlA5hlXw.js +0 -2
  764. package/build/assets/status-hp6M6E7E.js +0 -1
  765. package/build/assets/use-agent-settings-schema-33Un7UF2.js +0 -1
  766. package/build/assets/use-is-authed-BggE5wPj.js +0 -1
  767. package/build/assets/use-llm-profiles-DDOol3gK.js +0 -1
  768. package/build/assets/use-runtime-is-ready-B7EF4BKU.js +0 -1
  769. package/build/assets/use-settings-DQIZmIov.js +0 -1
  770. package/build/assets/use-user-conversation-C6hrMMtn.js +0 -1
  771. package/build/assets/utils-i18rdUj2.js +0 -1
  772. package/build/assets/vendor~conversation-panel~conversation-a9SyrrhV.js +0 -1
  773. package/build/assets/vendor~conversation-panel~conversation~index-C23ZXO4R.js +0 -1
  774. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~i4kjfqhl-BebWhFNT.js +0 -1
  775. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-DzIXV3Ui.js +0 -9
  776. /package/build/assets/{automation-IdgZq6ZK.js → automation-XDPAjiZi.js} +0 -0
  777. /package/build/assets/{color-themes-DSaoIL6A.js → color-themes-B9pm9c-R.js} +0 -0
  778. /package/build/assets/{common-DR1t-EeP.js → common-DqjLSBOt.js} +0 -0
  779. /package/build/assets/{conversation-local-storage-UYl-SX-r.js → conversation-local-storage-YmOVXxxW.js} +0 -0
  780. /package/build/assets/{dist-C6t0EXL7.js → dist-C3NfioQC.js} +0 -0
  781. /package/build/assets/{environment-switch-store-C4ulFJKp.js → environment-switch-store-CiurvTtK.js} +0 -0
  782. /package/build/assets/{health-store-BDC2rM-X.js → health-store-B5f0S2FY.js} +0 -0
  783. /package/build/assets/{map-provider-COBVzZYo.js → map-provider-BJ_8KZKU.js} +0 -0
  784. /package/build/assets/{middleware-BC9EwbB9.js → middleware-CfatjPYZ.js} +0 -0
  785. /package/build/assets/{objectWithoutPropertiesLoose-Du6eBn-V.js → objectWithoutPropertiesLoose-DSQKyRhw.js} +0 -0
  786. /package/build/assets/{react-Do0CT17Y.js → react-Dy05vyj5.js} +0 -0
  787. /package/build/assets/{sdk-settings-field-metadata-CBPmeqYa.js → sdk-settings-field-metadata-DQiaIBie.js} +0 -0
  788. /package/build/assets/{settings-D_H-qsRm.js → settings-DGY6n4J2.js} +0 -0
  789. /package/build/assets/{settings-like-page-layout-classes-I0BDBEoq.js → settings-like-page-layout-classes-D7YjdTd0.js} +0 -0
  790. /package/build/assets/{use-breakpoint-DbJ6FkQ-.js → use-breakpoint-DF_RiQ6s.js} +0 -0
  791. /package/build/assets/{use-click-outside-element-DffgWWoZ.js → use-click-outside-element-DhxCUyWl.js} +0 -0
  792. /package/build/assets/{v4-CNn21NXa.js → v4-khGvL7i2.js} +0 -0
  793. /package/build/assets/{vendor~browser-DDiZgqD3.js → vendor~browser-DisFGEp9.js} +0 -0
  794. /package/build/assets/{vendor~browser-tab-BgwV1mxF.js → vendor~browser-tab-BxhTtM9_.js} +0 -0
  795. /package/build/assets/{vendor~conversation-panel~conversation~alert-banner-DbvX3OcM.js → vendor~conversation-panel~conversation~alert-banner-w-I2sY6c.js} +0 -0
  796. /package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~zm51vy4j-iOsylxCS.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~zm51vy4j-BClAMeFe.js} +0 -0
  797. /package/build/assets/{vendor~files-tab-BGKayPiK.js → vendor~files-tab-BtkpAiMX.js} +0 -0
  798. /package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BW6261Sb.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CyZ-3lDQ.js} +0 -0
  799. /package/build/assets/{vendor~home~mcp~automations-list-DoPfwaXj.js → vendor~home~mcp~automations-list-BgV86Sti.js} +0 -0
  800. /package/build/assets/{vendor~launch-vdeRTWFu.js → vendor~launch-BXgl67Re.js} +0 -0
  801. /package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~ninslayh-D9P8e98a.js → vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~ninslayh-CLlsvdNP.js} +0 -0
  802. /package/build/assets/{vendor~terminal-DUrOWGFE.js → vendor~terminal-DZaJIY8A.js} +0 -0
@@ -2,51 +2,51 @@ import { getActiveBackend as e } from "../backend-registry/active-store.js";
2
2
  import { ConversationClient as t } from "../../node_modules/@openhands/typescript-client/dist/client/conversation-client.js";
3
3
  import { buildHttpBaseUrl as n } from "../../utils/websocket-url.js";
4
4
  import { RemoteEventsList as r } from "../../node_modules/@openhands/typescript-client/dist/events/remote-events-list.js";
5
- import { callCloudProxy as i } from "../cloud/proxy.js";
6
- import { getAgentServerClientOptions as a, getAgentServerHttpClientOptions as o } from "../agent-server-client-options.js";
5
+ import { getAgentServerClientOptions as i, getAgentServerHttpClientOptions as a } from "../agent-server-client-options.js";
6
+ import { callCloudProxy as o } from "../cloud/proxy.js";
7
7
  //#region src/api/event-service/event-service.api.ts
8
8
  var s = class {
9
- static async respondToConfirmation(r, o, s, c) {
9
+ static async respondToConfirmation(r, a, s, c) {
10
10
  let l = e().backend;
11
- return l.kind === "cloud" ? i({
11
+ return l.kind === "cloud" ? o({
12
12
  backend: l,
13
13
  method: "POST",
14
- hostOverride: n(o),
14
+ hostOverride: n(a),
15
15
  path: `/api/conversations/${r}/events/respond_to_confirmation`,
16
16
  body: s,
17
17
  authMode: "session-api-key",
18
18
  sessionApiKey: c
19
- }) : new t(a({
20
- conversationUrl: o,
19
+ }) : new t(i({
20
+ conversationUrl: a,
21
21
  sessionApiKey: c
22
22
  })).respondToConfirmation(r, s);
23
23
  }
24
- static async getEventCount(r, o, s) {
24
+ static async getEventCount(r, a, s) {
25
25
  let c = e().backend;
26
- return c.kind === "cloud" ? i({
26
+ return c.kind === "cloud" ? o({
27
27
  backend: c,
28
28
  method: "GET",
29
- hostOverride: n(o),
29
+ hostOverride: n(a),
30
30
  path: `/api/conversations/${r}/events/count`,
31
31
  authMode: "session-api-key",
32
32
  sessionApiKey: s
33
- }) : new t(a({
34
- conversationUrl: o,
33
+ }) : new t(i({
34
+ conversationUrl: a,
35
35
  sessionApiKey: s
36
36
  })).getEventCount(r);
37
37
  }
38
- static async searchEvents(t, n, a, s = {}) {
38
+ static async searchEvents(t, n, i, s = {}) {
39
39
  let c = e().backend, l = s.limit ?? 100;
40
40
  if (c.kind === "cloud") {
41
41
  let e = Math.min(l, 100), n = !!(s.sortOrder || s.pageId || s.timestampGte || s.timestampLt), r = new URLSearchParams();
42
42
  r.set("limit", String(e)), s.sortOrder && r.set("sort_order", s.sortOrder), s.pageId && r.set("page_id", s.pageId), s.timestampGte && r.set("timestamp__gte", s.timestampGte), s.timestampLt && r.set("timestamp__lt", s.timestampLt);
43
- let a = (e) => i({
43
+ let i = (e) => o({
44
44
  backend: c,
45
45
  method: "GET",
46
46
  path: `/api/v1/conversation/${t}/events/search?${e.toString()}`
47
47
  });
48
48
  try {
49
- let e = await a(r);
49
+ let e = await i(r);
50
50
  return {
51
51
  items: e?.items ?? [],
52
52
  next_page_id: e?.next_page_id ?? null
@@ -59,9 +59,9 @@ var s = class {
59
59
  };
60
60
  }
61
61
  }
62
- let u = await new r(o({
62
+ let u = await new r(a({
63
63
  conversationUrl: n,
64
- sessionApiKey: a
64
+ sessionApiKey: i
65
65
  }), t).search({
66
66
  limit: l,
67
67
  ...s.pageId ? { page_id: s.pageId } : {},
@@ -1 +1 @@
1
- {"version":3,"file":"event-service.api.js","names":[],"sources":["../../../src/api/event-service/event-service.api.ts"],"sourcesContent":["import { ConversationClient } from \"@openhands/typescript-client/clients\";\nimport { RemoteEventsList } from \"@openhands/typescript-client/events/remote-events-list\";\nimport { OpenHandsEvent } from \"#/types/agent-server/core\";\nimport { buildHttpBaseUrl } from \"#/utils/websocket-url\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport { callCloudProxy } from \"../cloud/proxy\";\nimport {\n getAgentServerClientOptions,\n getAgentServerHttpClientOptions,\n} from \"../agent-server-client-options\";\nimport type {\n ConfirmationResponseRequest,\n ConfirmationResponseResponse,\n EventSearchOptions,\n EventSearchPage,\n} from \"./event-service.types\";\n\n/**\n * Cloud-mode REST calls are split between two upstream hosts (matching\n * OpenHands' cloud frontend):\n *\n * - **App API** (`backend.host`, default in `callCloudProxy`):\n * event *history* (`/api/v1/conversation/{id}/events/search`).\n * Persisted by the cloud backend — survives the runtime sandbox.\n *\n * - **Runtime sandbox** (extracted from `conversation.conversation_url`\n * and passed as `hostOverride`): live runtime endpoints like\n * `/api/conversations/{id}/events/count` and\n * `/api/conversations/{id}/events/respond_to_confirmation`. Auth on\n * these endpoints is `X-Session-API-Key`, not `Authorization: Bearer`.\n *\n * Both go through the bundled local agent-server's `/api/cloud-proxy`,\n * which sidesteps the cross-origin restrictions that block the GUI at\n * `localhost` from talking directly to either the cloud backend or the runtime.\n *\n * Local mode keeps the existing typescript-client path: it targets the\n * conversation's host directly via typed client classes.\n */\nclass EventService {\n static async respondToConfirmation(\n conversationId: string,\n conversationUrl: string,\n request: ConfirmationResponseRequest,\n sessionApiKey?: string | null,\n ): Promise<ConfirmationResponseResponse> {\n const active = getActiveBackend().backend;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<ConfirmationResponseResponse>({\n backend: active,\n method: \"POST\",\n hostOverride: buildHttpBaseUrl(conversationUrl),\n path: `/api/conversations/${conversationId}/events/respond_to_confirmation`,\n body: request,\n authMode: \"session-api-key\",\n sessionApiKey,\n });\n }\n\n return new ConversationClient(\n getAgentServerClientOptions({\n conversationUrl,\n sessionApiKey,\n }),\n ).respondToConfirmation<ConfirmationResponseResponse>(\n conversationId,\n request,\n );\n }\n\n static async getEventCount(\n conversationId: string,\n conversationUrl: string,\n sessionApiKey?: string | null,\n ): Promise<number> {\n const active = getActiveBackend().backend;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<number>({\n backend: active,\n method: \"GET\",\n hostOverride: buildHttpBaseUrl(conversationUrl),\n path: `/api/conversations/${conversationId}/events/count`,\n authMode: \"session-api-key\",\n sessionApiKey,\n });\n }\n\n return new ConversationClient(\n getAgentServerClientOptions({\n conversationUrl,\n sessionApiKey,\n }),\n ).getEventCount(conversationId);\n }\n\n /**\n * Search events for a conversation. Returns the raw page so callers can\n * paginate (via `next_page_id`) and so REST-driven history loading can\n * tell when there are no more older events to load.\n */\n static async searchEvents(\n conversationId: string,\n conversationUrl?: string | null,\n sessionApiKey?: string | null,\n options: EventSearchOptions = {},\n ): Promise<EventSearchPage<OpenHandsEvent>> {\n const active = getActiveBackend().backend;\n const limit = options.limit ?? 100;\n\n if (active.kind === \"cloud\") {\n // Event *history* lives on the cloud App API, not the runtime\n // sandbox. Path is singular `conversation` and v1-prefixed.\n //\n // Full pagination params (sort_order, page_id, timestamp filters)\n // require the server-side fix from OpenHands/OpenHands#14399. If\n // the cloud backend hasn't been updated yet, the timestamp filters\n // trigger a 500 (str-vs-datetime comparison). We attempt the full\n // request first and fall back to a limit-only request on failure.\n const cloudLimit = Math.min(limit, 100);\n const hasFilterParams = !!(\n options.sortOrder ||\n options.pageId ||\n options.timestampGte ||\n options.timestampLt\n );\n\n const params = new URLSearchParams();\n params.set(\"limit\", String(cloudLimit));\n if (options.sortOrder) params.set(\"sort_order\", options.sortOrder);\n if (options.pageId) params.set(\"page_id\", options.pageId);\n if (options.timestampGte)\n params.set(\"timestamp__gte\", options.timestampGte);\n if (options.timestampLt) params.set(\"timestamp__lt\", options.timestampLt);\n\n const doCloudSearch = (searchParams: URLSearchParams) =>\n callCloudProxy<EventSearchPage<OpenHandsEvent>>({\n backend: active,\n method: \"GET\",\n path: `/api/v1/conversation/${conversationId}/events/search?${searchParams.toString()}`,\n });\n\n try {\n const data = await doCloudSearch(params);\n return {\n items: data?.items ?? [],\n next_page_id: data?.next_page_id ?? null,\n };\n } catch (err) {\n if (!hasFilterParams) throw err;\n\n // Server doesn't support timestamp filters yet — stop pagination\n // by returning an empty page so the UI doesn't retry indefinitely.\n // A limit-only fallback would return the same most-recent events\n // already in the store, which get deduped but keep hasMore=true.\n console.warn(\n \"[EventService] Cloud backend doesn't support pagination filters. \" +\n \"Falling back to initial load only. \" +\n \"Server needs OpenHands/OpenHands#14399.\",\n );\n return { items: [], next_page_id: null };\n }\n }\n\n const page = await new RemoteEventsList(\n getAgentServerHttpClientOptions({ conversationUrl, sessionApiKey }),\n conversationId,\n ).search({\n limit,\n ...(options.pageId ? { page_id: options.pageId } : {}),\n ...(options.sortOrder ? { sort_order: options.sortOrder } : {}),\n ...(options.timestampGte ? { timestamp__gte: options.timestampGte } : {}),\n ...(options.timestampLt ? { timestamp__lt: options.timestampLt } : {}),\n });\n\n return {\n items: (page?.items ?? []) as OpenHandsEvent[],\n next_page_id: page?.next_page_id ?? null,\n };\n }\n}\n\nexport default EventService;\n"],"mappings":";;;;;;;AAsCA,IAAM,IAAN,MAAmB;CACjB,aAAa,sBACX,GACA,GACA,GACA,GACuC;EACvC,IAAM,IAAS,GAAkB,CAAC;AAclC,SAZI,EAAO,SAAS,UACX,EAA6C;GAClD,SAAS;GACT,QAAQ;GACR,cAAc,EAAiB,EAAgB;GAC/C,MAAM,sBAAsB,EAAe;GAC3C,MAAM;GACN,UAAU;GACV;GACD,CAAC,GAGG,IAAI,EACT,EAA4B;GAC1B;GACA;GACD,CAAC,CACH,CAAC,sBACA,GACA,EACD;;CAGH,aAAa,cACX,GACA,GACA,GACiB;EACjB,IAAM,IAAS,GAAkB,CAAC;AAalC,SAXI,EAAO,SAAS,UACX,EAAuB;GAC5B,SAAS;GACT,QAAQ;GACR,cAAc,EAAiB,EAAgB;GAC/C,MAAM,sBAAsB,EAAe;GAC3C,UAAU;GACV;GACD,CAAC,GAGG,IAAI,EACT,EAA4B;GAC1B;GACA;GACD,CAAC,CACH,CAAC,cAAc,EAAe;;CAQjC,aAAa,aACX,GACA,GACA,GACA,IAA8B,EAAE,EACU;EAC1C,IAAM,IAAS,GAAkB,CAAC,SAC5B,IAAQ,EAAQ,SAAS;AAE/B,MAAI,EAAO,SAAS,SAAS;GAS3B,IAAM,IAAa,KAAK,IAAI,GAAO,IAAI,EACjC,IAAkB,CAAC,EACvB,EAAQ,aACR,EAAQ,UACR,EAAQ,gBACR,EAAQ,cAGJ,IAAS,IAAI,iBAAiB;AAMpC,GALA,EAAO,IAAI,SAAS,OAAO,EAAW,CAAC,EACnC,EAAQ,aAAW,EAAO,IAAI,cAAc,EAAQ,UAAU,EAC9D,EAAQ,UAAQ,EAAO,IAAI,WAAW,EAAQ,OAAO,EACrD,EAAQ,gBACV,EAAO,IAAI,kBAAkB,EAAQ,aAAa,EAChD,EAAQ,eAAa,EAAO,IAAI,iBAAiB,EAAQ,YAAY;GAEzE,IAAM,KAAiB,MACrB,EAAgD;IAC9C,SAAS;IACT,QAAQ;IACR,MAAM,wBAAwB,EAAe,iBAAiB,EAAa,UAAU;IACtF,CAAC;AAEJ,OAAI;IACF,IAAM,IAAO,MAAM,EAAc,EAAO;AACxC,WAAO;KACL,OAAO,GAAM,SAAS,EAAE;KACxB,cAAc,GAAM,gBAAgB;KACrC;YACM,GAAK;AACZ,QAAI,CAAC,EAAiB,OAAM;AAW5B,WALA,QAAQ,KACN,8IAGD,EACM;KAAE,OAAO,EAAE;KAAE,cAAc;KAAM;;;EAI5C,IAAM,IAAO,MAAM,IAAI,EACrB,EAAgC;GAAE;GAAiB;GAAe,CAAC,EACnE,EACD,CAAC,OAAO;GACP;GACA,GAAI,EAAQ,SAAS,EAAE,SAAS,EAAQ,QAAQ,GAAG,EAAE;GACrD,GAAI,EAAQ,YAAY,EAAE,YAAY,EAAQ,WAAW,GAAG,EAAE;GAC9D,GAAI,EAAQ,eAAe,EAAE,gBAAgB,EAAQ,cAAc,GAAG,EAAE;GACxE,GAAI,EAAQ,cAAc,EAAE,eAAe,EAAQ,aAAa,GAAG,EAAE;GACtE,CAAC;AAEF,SAAO;GACL,OAAQ,GAAM,SAAS,EAAE;GACzB,cAAc,GAAM,gBAAgB;GACrC"}
1
+ {"version":3,"file":"event-service.api.js","names":[],"sources":["../../../src/api/event-service/event-service.api.ts"],"sourcesContent":["import { ConversationClient } from \"@openhands/typescript-client/clients\";\nimport { RemoteEventsList } from \"@openhands/typescript-client/events/remote-events-list\";\nimport { OpenHandsEvent } from \"#/types/agent-server/core\";\nimport { buildHttpBaseUrl } from \"#/utils/websocket-url\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport { callCloudProxy } from \"../cloud/proxy\";\nimport {\n getAgentServerClientOptions,\n getAgentServerHttpClientOptions,\n} from \"../agent-server-client-options\";\nimport type {\n ConfirmationResponseRequest,\n ConfirmationResponseResponse,\n EventSearchOptions,\n EventSearchPage,\n} from \"./event-service.types\";\n\n/**\n * Cloud-mode REST calls are split between two upstream hosts (matching\n * OpenHands' cloud frontend):\n *\n * - **App API** (`backend.host`, default in `callCloudProxy`):\n * event *history* (`/api/v1/conversation/{id}/events/search`).\n * Persisted by the cloud backend — survives the runtime sandbox.\n *\n * - **Runtime sandbox** (extracted from `conversation.conversation_url`\n * and passed as `hostOverride`): live runtime endpoints like\n * `/api/conversations/{id}/events/count` and\n * `/api/conversations/{id}/events/respond_to_confirmation`. Auth on\n * these endpoints is `X-Session-API-Key`, not `Authorization: Bearer`.\n *\n * App API calls go directly to the cloud backend with bearer auth. Runtime\n * sandbox calls go through `/api/cloud-proxy`, which avoids depending on CORS\n * for per-conversation runtime hosts.\n *\n * Local mode keeps the existing typescript-client path: it targets the\n * conversation's host directly via typed client classes.\n */\nclass EventService {\n static async respondToConfirmation(\n conversationId: string,\n conversationUrl: string,\n request: ConfirmationResponseRequest,\n sessionApiKey?: string | null,\n ): Promise<ConfirmationResponseResponse> {\n const active = getActiveBackend().backend;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<ConfirmationResponseResponse>({\n backend: active,\n method: \"POST\",\n hostOverride: buildHttpBaseUrl(conversationUrl),\n path: `/api/conversations/${conversationId}/events/respond_to_confirmation`,\n body: request,\n authMode: \"session-api-key\",\n sessionApiKey,\n });\n }\n\n return new ConversationClient(\n getAgentServerClientOptions({\n conversationUrl,\n sessionApiKey,\n }),\n ).respondToConfirmation<ConfirmationResponseResponse>(\n conversationId,\n request,\n );\n }\n\n static async getEventCount(\n conversationId: string,\n conversationUrl: string,\n sessionApiKey?: string | null,\n ): Promise<number> {\n const active = getActiveBackend().backend;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<number>({\n backend: active,\n method: \"GET\",\n hostOverride: buildHttpBaseUrl(conversationUrl),\n path: `/api/conversations/${conversationId}/events/count`,\n authMode: \"session-api-key\",\n sessionApiKey,\n });\n }\n\n return new ConversationClient(\n getAgentServerClientOptions({\n conversationUrl,\n sessionApiKey,\n }),\n ).getEventCount(conversationId);\n }\n\n /**\n * Search events for a conversation. Returns the raw page so callers can\n * paginate (via `next_page_id`) and so REST-driven history loading can\n * tell when there are no more older events to load.\n */\n static async searchEvents(\n conversationId: string,\n conversationUrl?: string | null,\n sessionApiKey?: string | null,\n options: EventSearchOptions = {},\n ): Promise<EventSearchPage<OpenHandsEvent>> {\n const active = getActiveBackend().backend;\n const limit = options.limit ?? 100;\n\n if (active.kind === \"cloud\") {\n // Event *history* lives on the cloud App API, not the runtime\n // sandbox. Path is singular `conversation` and v1-prefixed.\n //\n // Full pagination params (sort_order, page_id, timestamp filters)\n // require the server-side fix from OpenHands/OpenHands#14399. If\n // the cloud backend hasn't been updated yet, the timestamp filters\n // trigger a 500 (str-vs-datetime comparison). We attempt the full\n // request first and fall back to a limit-only request on failure.\n const cloudLimit = Math.min(limit, 100);\n const hasFilterParams = !!(\n options.sortOrder ||\n options.pageId ||\n options.timestampGte ||\n options.timestampLt\n );\n\n const params = new URLSearchParams();\n params.set(\"limit\", String(cloudLimit));\n if (options.sortOrder) params.set(\"sort_order\", options.sortOrder);\n if (options.pageId) params.set(\"page_id\", options.pageId);\n if (options.timestampGte)\n params.set(\"timestamp__gte\", options.timestampGte);\n if (options.timestampLt) params.set(\"timestamp__lt\", options.timestampLt);\n\n const doCloudSearch = (searchParams: URLSearchParams) =>\n callCloudProxy<EventSearchPage<OpenHandsEvent>>({\n backend: active,\n method: \"GET\",\n path: `/api/v1/conversation/${conversationId}/events/search?${searchParams.toString()}`,\n });\n\n try {\n const data = await doCloudSearch(params);\n return {\n items: data?.items ?? [],\n next_page_id: data?.next_page_id ?? null,\n };\n } catch (err) {\n if (!hasFilterParams) throw err;\n\n // Server doesn't support timestamp filters yet — stop pagination\n // by returning an empty page so the UI doesn't retry indefinitely.\n // A limit-only fallback would return the same most-recent events\n // already in the store, which get deduped but keep hasMore=true.\n console.warn(\n \"[EventService] Cloud backend doesn't support pagination filters. \" +\n \"Falling back to initial load only. \" +\n \"Server needs OpenHands/OpenHands#14399.\",\n );\n return { items: [], next_page_id: null };\n }\n }\n\n const page = await new RemoteEventsList(\n getAgentServerHttpClientOptions({ conversationUrl, sessionApiKey }),\n conversationId,\n ).search({\n limit,\n ...(options.pageId ? { page_id: options.pageId } : {}),\n ...(options.sortOrder ? { sort_order: options.sortOrder } : {}),\n ...(options.timestampGte ? { timestamp__gte: options.timestampGte } : {}),\n ...(options.timestampLt ? { timestamp__lt: options.timestampLt } : {}),\n });\n\n return {\n items: (page?.items ?? []) as OpenHandsEvent[],\n next_page_id: page?.next_page_id ?? null,\n };\n }\n}\n\nexport default EventService;\n"],"mappings":";;;;;;;AAsCA,IAAM,IAAN,MAAmB;CACjB,aAAa,sBACX,GACA,GACA,GACA,GACuC;EACvC,IAAM,IAAS,GAAkB,CAAC;AAclC,SAZI,EAAO,SAAS,UACX,EAA6C;GAClD,SAAS;GACT,QAAQ;GACR,cAAc,EAAiB,EAAgB;GAC/C,MAAM,sBAAsB,EAAe;GAC3C,MAAM;GACN,UAAU;GACV;GACD,CAAC,GAGG,IAAI,EACT,EAA4B;GAC1B;GACA;GACD,CAAC,CACH,CAAC,sBACA,GACA,EACD;;CAGH,aAAa,cACX,GACA,GACA,GACiB;EACjB,IAAM,IAAS,GAAkB,CAAC;AAalC,SAXI,EAAO,SAAS,UACX,EAAuB;GAC5B,SAAS;GACT,QAAQ;GACR,cAAc,EAAiB,EAAgB;GAC/C,MAAM,sBAAsB,EAAe;GAC3C,UAAU;GACV;GACD,CAAC,GAGG,IAAI,EACT,EAA4B;GAC1B;GACA;GACD,CAAC,CACH,CAAC,cAAc,EAAe;;CAQjC,aAAa,aACX,GACA,GACA,GACA,IAA8B,EAAE,EACU;EAC1C,IAAM,IAAS,GAAkB,CAAC,SAC5B,IAAQ,EAAQ,SAAS;AAE/B,MAAI,EAAO,SAAS,SAAS;GAS3B,IAAM,IAAa,KAAK,IAAI,GAAO,IAAI,EACjC,IAAkB,CAAC,EACvB,EAAQ,aACR,EAAQ,UACR,EAAQ,gBACR,EAAQ,cAGJ,IAAS,IAAI,iBAAiB;AAMpC,GALA,EAAO,IAAI,SAAS,OAAO,EAAW,CAAC,EACnC,EAAQ,aAAW,EAAO,IAAI,cAAc,EAAQ,UAAU,EAC9D,EAAQ,UAAQ,EAAO,IAAI,WAAW,EAAQ,OAAO,EACrD,EAAQ,gBACV,EAAO,IAAI,kBAAkB,EAAQ,aAAa,EAChD,EAAQ,eAAa,EAAO,IAAI,iBAAiB,EAAQ,YAAY;GAEzE,IAAM,KAAiB,MACrB,EAAgD;IAC9C,SAAS;IACT,QAAQ;IACR,MAAM,wBAAwB,EAAe,iBAAiB,EAAa,UAAU;IACtF,CAAC;AAEJ,OAAI;IACF,IAAM,IAAO,MAAM,EAAc,EAAO;AACxC,WAAO;KACL,OAAO,GAAM,SAAS,EAAE;KACxB,cAAc,GAAM,gBAAgB;KACrC;YACM,GAAK;AACZ,QAAI,CAAC,EAAiB,OAAM;AAW5B,WALA,QAAQ,KACN,8IAGD,EACM;KAAE,OAAO,EAAE;KAAE,cAAc;KAAM;;;EAI5C,IAAM,IAAO,MAAM,IAAI,EACrB,EAAgC;GAAE;GAAiB;GAAe,CAAC,EACnE,EACD,CAAC,OAAO;GACP;GACA,GAAI,EAAQ,SAAS,EAAE,SAAS,EAAQ,QAAQ,GAAG,EAAE;GACrD,GAAI,EAAQ,YAAY,EAAE,YAAY,EAAQ,WAAW,GAAG,EAAE;GAC9D,GAAI,EAAQ,eAAe,EAAE,gBAAgB,EAAQ,cAAc,GAAG,EAAE;GACxE,GAAI,EAAQ,cAAc,EAAE,eAAe,EAAQ,aAAa,GAAG,EAAE;GACtE,CAAC;AAEF,SAAO;GACL,OAAQ,GAAM,SAAS,EAAE;GACzB,cAAc,GAAM,gBAAgB;GACrC"}
@@ -1,2 +1,2 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../backend-registry/active-store.cjs`),t=require(`../../utils/websocket-url.cjs`),n=require(`../cloud/proxy.cjs`),r=require(`../agent-server-client-options.cjs`),i=require(`../../node_modules/@openhands/typescript-client/dist/workspace/remote-workspace.cjs`),a=require(`../../utils/git-status-mapper.cjs`);function o(e){return e.startsWith(`/`)?e:`/${e}`}var s=class{static async getGitChanges(s,c,l){let u=e.getActiveBackend().backend;if(u.kind===`cloud`&&s){let e=new URLSearchParams;e.set(`path`,o(l));let r=await n.callCloudProxy({backend:u,method:`GET`,hostOverride:t.buildHttpBaseUrl(s),path:`/api/git/changes?${e.toString()}`,authMode:`session-api-key`,sessionApiKey:c});if(!Array.isArray(r))throw Error(`Invalid response from runtime - runtime may be unavailable`);return r.map(e=>({status:a.mapAnyGitStatusToClientStatus(String(e.status)),path:e.path}))}let d=await new i.RemoteWorkspace(r.getAgentServerClientOptions({conversationUrl:s,sessionApiKey:c})).gitChanges(l,{ref:`HEAD`});if(!Array.isArray(d))throw Error(`Invalid response from runtime - runtime may be unavailable`);return d.map(e=>({status:a.mapAnyGitStatusToClientStatus(String(e.status)),path:e.path}))}static async getGitChangeDiff(a,s,c){let l=e.getActiveBackend().backend;if(l.kind===`cloud`&&a){let e=new URLSearchParams;e.set(`path`,o(c));let r=await n.callCloudProxy({backend:l,method:`GET`,hostOverride:t.buildHttpBaseUrl(a),path:`/api/git/diff?${e.toString()}`,authMode:`session-api-key`,sessionApiKey:s});return{modified:r?.modified??``,original:r?.original??``,...r?.diff?{diff:r.diff}:{}}}let u=await new i.RemoteWorkspace(r.getAgentServerClientOptions({conversationUrl:a,sessionApiKey:s})).gitDiff(c,{ref:`HEAD`});return{modified:u.modified??``,original:u.original??``,...u.diff?{diff:u.diff}:{}}}};exports.default=s;
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../backend-registry/active-store.cjs`),t=require(`../../utils/websocket-url.cjs`),n=require(`../agent-server-client-options.cjs`),r=require(`../cloud/proxy.cjs`),i=require(`../../node_modules/@openhands/typescript-client/dist/workspace/remote-workspace.cjs`),a=require(`../../utils/git-status-mapper.cjs`);function o(e){return e.startsWith(`/`)?e:`/${e}`}var s=class{static async getGitChanges(s,c,l){let u=e.getActiveBackend().backend;if(u.kind===`cloud`&&s){let e=new URLSearchParams;e.set(`path`,o(l));let n=await r.callCloudProxy({backend:u,method:`GET`,hostOverride:t.buildHttpBaseUrl(s),path:`/api/git/changes?${e.toString()}`,authMode:`session-api-key`,sessionApiKey:c});if(!Array.isArray(n))throw Error(`Invalid response from runtime - runtime may be unavailable`);return n.map(e=>({status:a.mapAnyGitStatusToClientStatus(String(e.status)),path:e.path}))}let d=await new i.RemoteWorkspace(n.getAgentServerClientOptions({conversationUrl:s,sessionApiKey:c})).gitChanges(l,{ref:`HEAD`});if(!Array.isArray(d))throw Error(`Invalid response from runtime - runtime may be unavailable`);return d.map(e=>({status:a.mapAnyGitStatusToClientStatus(String(e.status)),path:e.path}))}static async getGitChangeDiff(a,s,c){let l=e.getActiveBackend().backend;if(l.kind===`cloud`&&a){let e=new URLSearchParams;e.set(`path`,o(c));let n=await r.callCloudProxy({backend:l,method:`GET`,hostOverride:t.buildHttpBaseUrl(a),path:`/api/git/diff?${e.toString()}`,authMode:`session-api-key`,sessionApiKey:s});return{modified:n?.modified??``,original:n?.original??``,...n?.diff?{diff:n.diff}:{}}}let u=await new i.RemoteWorkspace(n.getAgentServerClientOptions({conversationUrl:a,sessionApiKey:s})).gitDiff(c,{ref:`HEAD`});return{modified:u.modified??``,original:u.original??``,...u.diff?{diff:u.diff}:{}}}};exports.default=s;
2
2
  //# sourceMappingURL=agent-server-git-service.api.cjs.map
@@ -1,7 +1,7 @@
1
1
  import { getActiveBackend as e } from "../backend-registry/active-store.js";
2
2
  import { buildHttpBaseUrl as t } from "../../utils/websocket-url.js";
3
- import { callCloudProxy as n } from "../cloud/proxy.js";
4
- import { getAgentServerClientOptions as r } from "../agent-server-client-options.js";
3
+ import { getAgentServerClientOptions as n } from "../agent-server-client-options.js";
4
+ import { callCloudProxy as r } from "../cloud/proxy.js";
5
5
  import { RemoteWorkspace as i } from "../../node_modules/@openhands/typescript-client/dist/workspace/remote-workspace.js";
6
6
  import { mapAnyGitStatusToClientStatus as a } from "../../utils/git-status-mapper.js";
7
7
  //#region src/api/git-service/agent-server-git-service.api.ts
@@ -14,7 +14,7 @@ var s = class {
14
14
  if (u.kind === "cloud" && s) {
15
15
  let e = new URLSearchParams();
16
16
  e.set("path", o(l));
17
- let r = await n({
17
+ let n = await r({
18
18
  backend: u,
19
19
  method: "GET",
20
20
  hostOverride: t(s),
@@ -22,13 +22,13 @@ var s = class {
22
22
  authMode: "session-api-key",
23
23
  sessionApiKey: c
24
24
  });
25
- if (!Array.isArray(r)) throw Error("Invalid response from runtime - runtime may be unavailable");
26
- return r.map((e) => ({
25
+ if (!Array.isArray(n)) throw Error("Invalid response from runtime - runtime may be unavailable");
26
+ return n.map((e) => ({
27
27
  status: a(String(e.status)),
28
28
  path: e.path
29
29
  }));
30
30
  }
31
- let d = await new i(r({
31
+ let d = await new i(n({
32
32
  conversationUrl: s,
33
33
  sessionApiKey: c
34
34
  })).gitChanges(l, { ref: "HEAD" });
@@ -43,7 +43,7 @@ var s = class {
43
43
  if (l.kind === "cloud" && a) {
44
44
  let e = new URLSearchParams();
45
45
  e.set("path", o(c));
46
- let r = await n({
46
+ let n = await r({
47
47
  backend: l,
48
48
  method: "GET",
49
49
  hostOverride: t(a),
@@ -52,12 +52,12 @@ var s = class {
52
52
  sessionApiKey: s
53
53
  });
54
54
  return {
55
- modified: r?.modified ?? "",
56
- original: r?.original ?? "",
57
- ...r?.diff ? { diff: r.diff } : {}
55
+ modified: n?.modified ?? "",
56
+ original: n?.original ?? "",
57
+ ...n?.diff ? { diff: n.diff } : {}
58
58
  };
59
59
  }
60
- let u = await new i(r({
60
+ let u = await new i(n({
61
61
  conversationUrl: a,
62
62
  sessionApiKey: s
63
63
  })).gitDiff(c, { ref: "HEAD" });
@@ -1,2 +1,2 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../backend-registry/active-store.cjs`),t=require(`../../node_modules/@openhands/typescript-client/dist/client/file-client.cjs`),n=require(`../../utils/websocket-url.cjs`),r=require(`../cloud/proxy.cjs`),i=require(`../agent-server-client-options.cjs`),a=require(`../../node_modules/@openhands/typescript-client/dist/workspace/remote-workspace.cjs`);var o=class{static async executeCommand(t,o,s,c,l=30){let u=e.getActiveBackend().backend;if(u.kind===`cloud`&&t){let e=await r.callCloudProxy({backend:u,method:`POST`,hostOverride:n.buildHttpBaseUrl(t),path:`/api/bash/execute_bash_command`,body:{command:s,...c?{cwd:c}:{},timeout:Math.floor(l)},authMode:`session-api-key`,sessionApiKey:o,timeoutSeconds:l+10});return{exit_code:e.exit_code??-1,stdout:e.stdout??``,stderr:e.stderr??``}}let d=await new a.RemoteWorkspace(i.getAgentServerClientOptions({conversationUrl:t,sessionApiKey:o})).executeCommand(s,c,l);return{exit_code:d.exit_code,stdout:d.stdout,stderr:d.stderr}}static async downloadFile(a,o,s){let c=e.getActiveBackend().backend;return c.kind===`cloud`&&a?(await r.callCloudProxy({backend:c,method:`GET`,hostOverride:n.buildHttpBaseUrl(a),path:`/api/file/download?path=${encodeURIComponent(s)}`,authMode:`session-api-key`,sessionApiKey:o,responseType:`blob`})).arrayBuffer():new t.FileClient(i.getAgentServerClientOptions({conversationUrl:a,sessionApiKey:o})).downloadFile(s)}};exports.default=o;
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../backend-registry/active-store.cjs`),t=require(`../../node_modules/@openhands/typescript-client/dist/client/file-client.cjs`),n=require(`../../utils/websocket-url.cjs`),r=require(`../agent-server-client-options.cjs`),i=require(`../cloud/proxy.cjs`),a=require(`../../node_modules/@openhands/typescript-client/dist/workspace/remote-workspace.cjs`);var o=class{static async executeCommand(t,o,s,c,l=30){let u=e.getActiveBackend().backend;if(u.kind===`cloud`&&t){let e=await i.callCloudProxy({backend:u,method:`POST`,hostOverride:n.buildHttpBaseUrl(t),path:`/api/bash/execute_bash_command`,body:{command:s,...c?{cwd:c}:{},timeout:Math.floor(l)},authMode:`session-api-key`,sessionApiKey:o,timeoutSeconds:l+10});return{exit_code:e.exit_code??-1,stdout:e.stdout??``,stderr:e.stderr??``}}let d=await new a.RemoteWorkspace(r.getAgentServerClientOptions({conversationUrl:t,sessionApiKey:o})).executeCommand(s,c,l);return{exit_code:d.exit_code,stdout:d.stdout,stderr:d.stderr}}static async downloadFile(a,o,s){let c=e.getActiveBackend().backend;return c.kind===`cloud`&&a?(await i.callCloudProxy({backend:c,method:`GET`,hostOverride:n.buildHttpBaseUrl(a),path:`/api/file/download?path=${encodeURIComponent(s)}`,authMode:`session-api-key`,sessionApiKey:o,responseType:`blob`})).arrayBuffer():new t.FileClient(r.getAgentServerClientOptions({conversationUrl:a,sessionApiKey:o})).downloadFile(s)}};exports.default=o;
2
2
  //# sourceMappingURL=agent-server-runtime-service.cjs.map
@@ -1,15 +1,15 @@
1
1
  import { getActiveBackend as e } from "../backend-registry/active-store.js";
2
2
  import { FileClient as t } from "../../node_modules/@openhands/typescript-client/dist/client/file-client.js";
3
3
  import { buildHttpBaseUrl as n } from "../../utils/websocket-url.js";
4
- import { callCloudProxy as r } from "../cloud/proxy.js";
5
- import { getAgentServerClientOptions as i } from "../agent-server-client-options.js";
4
+ import { getAgentServerClientOptions as r } from "../agent-server-client-options.js";
5
+ import { callCloudProxy as i } from "../cloud/proxy.js";
6
6
  import { RemoteWorkspace as a } from "../../node_modules/@openhands/typescript-client/dist/workspace/remote-workspace.js";
7
7
  //#region src/api/runtime-service/agent-server-runtime-service.ts
8
8
  var o = class {
9
9
  static async executeCommand(t, o, s, c, l = 30) {
10
10
  let u = e().backend;
11
11
  if (u.kind === "cloud" && t) {
12
- let e = await r({
12
+ let e = await i({
13
13
  backend: u,
14
14
  method: "POST",
15
15
  hostOverride: n(t),
@@ -29,7 +29,7 @@ var o = class {
29
29
  stderr: e.stderr ?? ""
30
30
  };
31
31
  }
32
- let d = await new a(i({
32
+ let d = await new a(r({
33
33
  conversationUrl: t,
34
34
  sessionApiKey: o
35
35
  })).executeCommand(s, c, l);
@@ -41,7 +41,7 @@ var o = class {
41
41
  }
42
42
  static async downloadFile(a, o, s) {
43
43
  let c = e().backend;
44
- return c.kind === "cloud" && a ? (await r({
44
+ return c.kind === "cloud" && a ? (await i({
45
45
  backend: c,
46
46
  method: "GET",
47
47
  hostOverride: n(a),
@@ -49,7 +49,7 @@ var o = class {
49
49
  authMode: "session-api-key",
50
50
  sessionApiKey: o,
51
51
  responseType: "blob"
52
- })).arrayBuffer() : new t(i({
52
+ })).arrayBuffer() : new t(r({
53
53
  conversationUrl: a,
54
54
  sessionApiKey: o
55
55
  })).downloadFile(s);
@@ -1,5 +1,5 @@
1
- require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../../i18n/index.cjs`),t=require(`../../../../types/agent-server/core/base/common.cjs`),n=require(`./shared.cjs`);var r=n=>{switch(n){case t.SecurityRisk.LOW:return e.default.t(`SECURITY$LOW_RISK`);case t.SecurityRisk.MEDIUM:return e.default.t(`SECURITY$MEDIUM_RISK`);case t.SecurityRisk.HIGH:return e.default.t(`SECURITY$HIGH_RISK`);case t.SecurityRisk.UNKNOWN:default:return e.default.t(`SECURITY$UNKNOWN_RISK`)}},i=()=>``,a=e=>e.name?`**Skill:** \`${e.name}\``:i(),o=e=>{let{action:t}=e,n=[];return t.pattern&&n.push(`**Pattern:** \`${t.pattern}\``),t.path&&n.push(`**Path:** \`${t.path}\``),`include`in t&&t.include&&n.push(`**Include:** \`${t.include}\``),n.length>0?n.join(`
2
- `):i()},s=e=>{if(e.command!==`create`||!e.file_text)return i();let t=e.file_text;return t.length>1e3&&(t=`${t.slice(0,n.MAX_CONTENT_LENGTH)}...`),`${e.path}\n${t}`},c=e=>{let n=`Command:\n\`${e.action.command}\``;return(e.security_risk===t.SecurityRisk.HIGH||e.security_risk===t.SecurityRisk.MEDIUM)&&(n+=`\n\n${r(e.security_risk)}`),n},l=e=>{let t=`**MCP Tool Call**
1
+ require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../../types/agent-server/core/base/common.cjs`),t=require(`../../../../i18n/index.cjs`),n=require(`./shared.cjs`);var r=n=>{switch(n){case e.SecurityRisk.LOW:return t.default.t(`SECURITY$LOW_RISK`);case e.SecurityRisk.MEDIUM:return t.default.t(`SECURITY$MEDIUM_RISK`);case e.SecurityRisk.HIGH:return t.default.t(`SECURITY$HIGH_RISK`);case e.SecurityRisk.UNKNOWN:default:return t.default.t(`SECURITY$UNKNOWN_RISK`)}},i=()=>``,a=e=>e.name?`**Skill:** \`${e.name}\``:i(),o=e=>{let{action:t}=e,n=[];return t.pattern&&n.push(`**Pattern:** \`${t.pattern}\``),t.path&&n.push(`**Path:** \`${t.path}\``),`include`in t&&t.include&&n.push(`**Include:** \`${t.include}\``),n.length>0?n.join(`
2
+ `):i()},s=e=>{if(e.command!==`create`||!e.file_text)return i();let t=e.file_text;return t.length>1e3&&(t=`${t.slice(0,n.MAX_CONTENT_LENGTH)}...`),`${e.path}\n${t}`},c=t=>{let n=`Command:\n\`${t.action.command}\``;return(t.security_risk===e.SecurityRisk.HIGH||t.security_risk===e.SecurityRisk.MEDIUM)&&(n+=`\n\n${r(t.security_risk)}`),n},l=e=>{let t=`**MCP Tool Call**
3
3
 
4
4
  `;return t+=`**Arguments:**\n\`\`\`json\n${JSON.stringify(e.data,null,2)}\n\`\`\``,t},u=e=>e.thought,d=e=>e.message.trim(),f=e=>{let t=`**Command:** \`${e.command}\``;return e.command===`plan`&&(e.task_list&&e.task_list.length>0?(t+=`\n\n**Task List (${e.task_list.length} ${e.task_list.length===1?`item`:`items`}):**\n`,e.task_list.forEach((e,n)=>{let r={todo:`⏳`,in_progress:`🔄`,done:`✅`}[e.status]||`❓`;t+=`\n${n+1}. ${r} **[${e.status.toUpperCase().replace(`_`,` `)}]** ${e.title}`,e.notes&&(t+=`\n *Notes: ${e.notes}*`)})):t+=`
5
5
 
@@ -1,14 +1,14 @@
1
- import e from "../../../../i18n/index.js";
2
- import { SecurityRisk as t } from "../../../../types/agent-server/core/base/common.js";
1
+ import { SecurityRisk as e } from "../../../../types/agent-server/core/base/common.js";
2
+ import t from "../../../../i18n/index.js";
3
3
  import { MAX_CONTENT_LENGTH as n, getDefaultEventContent as r } from "./shared.js";
4
4
  //#region src/components/conversation-events/chat/event-content-helpers/get-action-content.ts
5
5
  var i = (n) => {
6
6
  switch (n) {
7
- case t.LOW: return e.t("SECURITY$LOW_RISK");
8
- case t.MEDIUM: return e.t("SECURITY$MEDIUM_RISK");
9
- case t.HIGH: return e.t("SECURITY$HIGH_RISK");
10
- case t.UNKNOWN:
11
- default: return e.t("SECURITY$UNKNOWN_RISK");
7
+ case e.LOW: return t.t("SECURITY$LOW_RISK");
8
+ case e.MEDIUM: return t.t("SECURITY$MEDIUM_RISK");
9
+ case e.HIGH: return t.t("SECURITY$HIGH_RISK");
10
+ case e.UNKNOWN:
11
+ default: return t.t("SECURITY$UNKNOWN_RISK");
12
12
  }
13
13
  }, a = () => "", o = (e) => e.name ? `**Skill:** \`${e.name}\`` : a(), s = (e) => {
14
14
  let { action: t } = e, n = [];
@@ -17,9 +17,9 @@ var i = (n) => {
17
17
  if (e.command !== "create" || !e.file_text) return a();
18
18
  let t = e.file_text;
19
19
  return t.length > 1e3 && (t = `${t.slice(0, n)}...`), `${e.path}\n${t}`;
20
- }, l = (e) => {
21
- let n = `Command:\n\`${e.action.command}\``;
22
- return (e.security_risk === t.HIGH || e.security_risk === t.MEDIUM) && (n += `\n\n${i(e.security_risk)}`), n;
20
+ }, l = (t) => {
21
+ let n = `Command:\n\`${t.action.command}\``;
22
+ return (t.security_risk === e.HIGH || t.security_risk === e.MEDIUM) && (n += `\n\n${i(t.security_risk)}`), n;
23
23
  }, u = (e) => {
24
24
  let t = "**MCP Tool Call**\n\n";
25
25
  return t += `**Arguments:**\n\`\`\`json\n${JSON.stringify(e.data, null, 2)}\n\`\`\``, t;
@@ -1 +1 @@
1
- {"version":3,"file":"get-observation-result.cjs","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-content-helpers/get-observation-result.ts"],"sourcesContent":["import { ObservationEvent } from \"#/types/agent-server/core\";\nimport { ACPToolCallEvent } from \"#/types/agent-server/core/events/acp-tool-call-event\";\n\nexport type ObservationResultStatus = \"success\" | \"error\" | \"timeout\";\n\n/**\n * Map an ACPToolCallEvent's lifecycle + error flags to the same\n * success/error status the rest of the UI uses. An ``in_progress`` call\n * returns ``undefined`` so the SuccessIndicator renders nothing — the\n * card shows as \"running\" via the absence of a check mark, matching how\n * regular ActionEvents are displayed before their ObservationEvent\n * arrives.\n */\nexport const getACPToolCallResult = (\n event: ACPToolCallEvent,\n): ObservationResultStatus | undefined => {\n if (event.is_error || event.status === \"failed\") return \"error\";\n if (event.status === \"completed\") return \"success\";\n return undefined;\n};\n\nexport const getObservationResult = (\n event: ObservationEvent,\n): ObservationResultStatus => {\n const { observation } = event;\n const observationType = observation.kind;\n\n switch (observationType) {\n case \"ExecuteBashObservation\": {\n const exitCode = observation.exit_code;\n const { metadata } = observation;\n\n if (exitCode === -1 || metadata.exit_code === -1) return \"timeout\"; // Command timed out\n if (exitCode === 0 || metadata.exit_code === 0) return \"success\"; // Command executed successfully\n return \"error\"; // Command failed\n }\n case \"TerminalObservation\": {\n const exitCode =\n observation.exit_code ?? observation.metadata.exit_code ?? null;\n\n if (observation.timeout || exitCode === -1) return \"timeout\";\n if (exitCode === 0) return \"success\";\n if (observation.is_error) return \"error\";\n return \"success\";\n }\n case \"FileEditorObservation\":\n case \"StrReplaceEditorObservation\":\n // Check if there's an error\n if (observation.error) return \"error\";\n return \"success\";\n case \"MCPToolObservation\":\n if (observation.is_error) return \"error\";\n return \"success\";\n case \"SwitchLLMObservation\":\n if (observation.is_error) return \"error\";\n return \"success\";\n default:\n return \"success\";\n }\n};\n"],"mappings":"sDAaA,IAAa,EACX,GACwC,CACxC,GAAI,EAAM,UAAY,EAAM,SAAW,SAAU,MAAO,QACxD,GAAI,EAAM,SAAW,YAAa,MAAO,WAI9B,EACX,GAC4B,CAC5B,GAAM,CAAE,eAAgB,EAGxB,OAFwB,EAAY,KAEpC,CACE,IAAK,yBAA0B,CAC7B,IAAM,EAAW,EAAY,UACvB,CAAE,YAAa,EAIrB,OAFI,IAAa,IAAM,EAAS,YAAc,GAAW,UACrD,IAAa,GAAK,EAAS,YAAc,EAAU,UAChD,QAET,IAAK,sBAAuB,CAC1B,IAAM,EACJ,EAAY,WAAa,EAAY,SAAS,WAAa,KAK7D,OAHI,EAAY,SAAW,IAAa,GAAW,UAC/C,IAAa,EAAU,UACvB,EAAY,SAAiB,QAC1B,UAET,IAAK,wBACL,IAAK,8BAGH,OADI,EAAY,MAAc,QACvB,UACT,IAAK,qBAEH,OADI,EAAY,SAAiB,QAC1B,UACT,IAAK,uBAEH,OADI,EAAY,SAAiB,QAC1B,UACT,QACE,MAAO"}
1
+ {"version":3,"file":"get-observation-result.cjs","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-content-helpers/get-observation-result.ts"],"sourcesContent":["import { ObservationEvent } from \"#/types/agent-server/core\";\nimport { ACPToolCallEvent } from \"#/types/agent-server/core/events/acp-tool-call-event\";\n\nexport type ObservationResultStatus = \"success\" | \"error\" | \"timeout\";\n\n/**\n * Map an ACPToolCallEvent's lifecycle + error flags to the same\n * success/error status the rest of the UI uses. A non-terminal call\n * (``pending`` / ``in_progress``) falls through to ``undefined`` so the\n * SuccessIndicator renders nothing — the card shows as \"running\" via the\n * absence of a check mark, matching how regular ActionEvents are displayed\n * before their ObservationEvent arrives.\n */\nexport const getACPToolCallResult = (\n event: ACPToolCallEvent,\n): ObservationResultStatus | undefined => {\n if (event.is_error || event.status === \"failed\") return \"error\";\n if (event.status === \"completed\") return \"success\";\n return undefined;\n};\n\nexport const getObservationResult = (\n event: ObservationEvent,\n): ObservationResultStatus => {\n const { observation } = event;\n const observationType = observation.kind;\n\n switch (observationType) {\n case \"ExecuteBashObservation\": {\n const exitCode = observation.exit_code;\n const { metadata } = observation;\n\n if (exitCode === -1 || metadata.exit_code === -1) return \"timeout\"; // Command timed out\n if (exitCode === 0 || metadata.exit_code === 0) return \"success\"; // Command executed successfully\n return \"error\"; // Command failed\n }\n case \"TerminalObservation\": {\n const exitCode =\n observation.exit_code ?? observation.metadata.exit_code ?? null;\n\n if (observation.timeout || exitCode === -1) return \"timeout\";\n if (exitCode === 0) return \"success\";\n if (observation.is_error) return \"error\";\n return \"success\";\n }\n case \"FileEditorObservation\":\n case \"StrReplaceEditorObservation\":\n // Check if there's an error\n if (observation.error) return \"error\";\n return \"success\";\n case \"MCPToolObservation\":\n if (observation.is_error) return \"error\";\n return \"success\";\n case \"SwitchLLMObservation\":\n if (observation.is_error) return \"error\";\n return \"success\";\n default:\n return \"success\";\n }\n};\n"],"mappings":"sDAaA,IAAa,EACX,GACwC,CACxC,GAAI,EAAM,UAAY,EAAM,SAAW,SAAU,MAAO,QACxD,GAAI,EAAM,SAAW,YAAa,MAAO,WAI9B,EACX,GAC4B,CAC5B,GAAM,CAAE,eAAgB,EAGxB,OAFwB,EAAY,KAEpC,CACE,IAAK,yBAA0B,CAC7B,IAAM,EAAW,EAAY,UACvB,CAAE,YAAa,EAIrB,OAFI,IAAa,IAAM,EAAS,YAAc,GAAW,UACrD,IAAa,GAAK,EAAS,YAAc,EAAU,UAChD,QAET,IAAK,sBAAuB,CAC1B,IAAM,EACJ,EAAY,WAAa,EAAY,SAAS,WAAa,KAK7D,OAHI,EAAY,SAAW,IAAa,GAAW,UAC/C,IAAa,EAAU,UACvB,EAAY,SAAiB,QAC1B,UAET,IAAK,wBACL,IAAK,8BAGH,OADI,EAAY,MAAc,QACvB,UACT,IAAK,qBAEH,OADI,EAAY,SAAiB,QAC1B,UACT,IAAK,uBAEH,OADI,EAAY,SAAiB,QAC1B,UACT,QACE,MAAO"}
@@ -3,11 +3,11 @@ import { ACPToolCallEvent } from "#/types/agent-server/core/events/acp-tool-call
3
3
  export type ObservationResultStatus = "success" | "error" | "timeout";
4
4
  /**
5
5
  * Map an ACPToolCallEvent's lifecycle + error flags to the same
6
- * success/error status the rest of the UI uses. An ``in_progress`` call
7
- * returns ``undefined`` so the SuccessIndicator renders nothing the
8
- * card shows as "running" via the absence of a check mark, matching how
9
- * regular ActionEvents are displayed before their ObservationEvent
10
- * arrives.
6
+ * success/error status the rest of the UI uses. A non-terminal call
7
+ * (``pending`` / ``in_progress``) falls through to ``undefined`` so the
8
+ * SuccessIndicator renders nothing — the card shows as "running" via the
9
+ * absence of a check mark, matching how regular ActionEvents are displayed
10
+ * before their ObservationEvent arrives.
11
11
  */
12
12
  export declare const getACPToolCallResult: (event: ACPToolCallEvent) => ObservationResultStatus | undefined;
13
13
  export declare const getObservationResult: (event: ObservationEvent) => ObservationResultStatus;
@@ -1 +1 @@
1
- {"version":3,"file":"get-observation-result.js","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-content-helpers/get-observation-result.ts"],"sourcesContent":["import { ObservationEvent } from \"#/types/agent-server/core\";\nimport { ACPToolCallEvent } from \"#/types/agent-server/core/events/acp-tool-call-event\";\n\nexport type ObservationResultStatus = \"success\" | \"error\" | \"timeout\";\n\n/**\n * Map an ACPToolCallEvent's lifecycle + error flags to the same\n * success/error status the rest of the UI uses. An ``in_progress`` call\n * returns ``undefined`` so the SuccessIndicator renders nothing — the\n * card shows as \"running\" via the absence of a check mark, matching how\n * regular ActionEvents are displayed before their ObservationEvent\n * arrives.\n */\nexport const getACPToolCallResult = (\n event: ACPToolCallEvent,\n): ObservationResultStatus | undefined => {\n if (event.is_error || event.status === \"failed\") return \"error\";\n if (event.status === \"completed\") return \"success\";\n return undefined;\n};\n\nexport const getObservationResult = (\n event: ObservationEvent,\n): ObservationResultStatus => {\n const { observation } = event;\n const observationType = observation.kind;\n\n switch (observationType) {\n case \"ExecuteBashObservation\": {\n const exitCode = observation.exit_code;\n const { metadata } = observation;\n\n if (exitCode === -1 || metadata.exit_code === -1) return \"timeout\"; // Command timed out\n if (exitCode === 0 || metadata.exit_code === 0) return \"success\"; // Command executed successfully\n return \"error\"; // Command failed\n }\n case \"TerminalObservation\": {\n const exitCode =\n observation.exit_code ?? observation.metadata.exit_code ?? null;\n\n if (observation.timeout || exitCode === -1) return \"timeout\";\n if (exitCode === 0) return \"success\";\n if (observation.is_error) return \"error\";\n return \"success\";\n }\n case \"FileEditorObservation\":\n case \"StrReplaceEditorObservation\":\n // Check if there's an error\n if (observation.error) return \"error\";\n return \"success\";\n case \"MCPToolObservation\":\n if (observation.is_error) return \"error\";\n return \"success\";\n case \"SwitchLLMObservation\":\n if (observation.is_error) return \"error\";\n return \"success\";\n default:\n return \"success\";\n }\n};\n"],"mappings":";AAaA,IAAa,KACX,MACwC;AACxC,KAAI,EAAM,YAAY,EAAM,WAAW,SAAU,QAAO;AACxD,KAAI,EAAM,WAAW,YAAa,QAAO;GAI9B,KACX,MAC4B;CAC5B,IAAM,EAAE,mBAAgB;AAGxB,SAFwB,EAAY,MAEpC;EACE,KAAK,0BAA0B;GAC7B,IAAM,IAAW,EAAY,WACvB,EAAE,gBAAa;AAIrB,UAFI,MAAa,MAAM,EAAS,cAAc,KAAW,YACrD,MAAa,KAAK,EAAS,cAAc,IAAU,YAChD;;EAET,KAAK,uBAAuB;GAC1B,IAAM,IACJ,EAAY,aAAa,EAAY,SAAS,aAAa;AAK7D,UAHI,EAAY,WAAW,MAAa,KAAW,YAC/C,MAAa,IAAU,YACvB,EAAY,WAAiB,UAC1B;;EAET,KAAK;EACL,KAAK,8BAGH,QADI,EAAY,QAAc,UACvB;EACT,KAAK,qBAEH,QADI,EAAY,WAAiB,UAC1B;EACT,KAAK,uBAEH,QADI,EAAY,WAAiB,UAC1B;EACT,QACE,QAAO"}
1
+ {"version":3,"file":"get-observation-result.js","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-content-helpers/get-observation-result.ts"],"sourcesContent":["import { ObservationEvent } from \"#/types/agent-server/core\";\nimport { ACPToolCallEvent } from \"#/types/agent-server/core/events/acp-tool-call-event\";\n\nexport type ObservationResultStatus = \"success\" | \"error\" | \"timeout\";\n\n/**\n * Map an ACPToolCallEvent's lifecycle + error flags to the same\n * success/error status the rest of the UI uses. A non-terminal call\n * (``pending`` / ``in_progress``) falls through to ``undefined`` so the\n * SuccessIndicator renders nothing — the card shows as \"running\" via the\n * absence of a check mark, matching how regular ActionEvents are displayed\n * before their ObservationEvent arrives.\n */\nexport const getACPToolCallResult = (\n event: ACPToolCallEvent,\n): ObservationResultStatus | undefined => {\n if (event.is_error || event.status === \"failed\") return \"error\";\n if (event.status === \"completed\") return \"success\";\n return undefined;\n};\n\nexport const getObservationResult = (\n event: ObservationEvent,\n): ObservationResultStatus => {\n const { observation } = event;\n const observationType = observation.kind;\n\n switch (observationType) {\n case \"ExecuteBashObservation\": {\n const exitCode = observation.exit_code;\n const { metadata } = observation;\n\n if (exitCode === -1 || metadata.exit_code === -1) return \"timeout\"; // Command timed out\n if (exitCode === 0 || metadata.exit_code === 0) return \"success\"; // Command executed successfully\n return \"error\"; // Command failed\n }\n case \"TerminalObservation\": {\n const exitCode =\n observation.exit_code ?? observation.metadata.exit_code ?? null;\n\n if (observation.timeout || exitCode === -1) return \"timeout\";\n if (exitCode === 0) return \"success\";\n if (observation.is_error) return \"error\";\n return \"success\";\n }\n case \"FileEditorObservation\":\n case \"StrReplaceEditorObservation\":\n // Check if there's an error\n if (observation.error) return \"error\";\n return \"success\";\n case \"MCPToolObservation\":\n if (observation.is_error) return \"error\";\n return \"success\";\n case \"SwitchLLMObservation\":\n if (observation.is_error) return \"error\";\n return \"success\";\n default:\n return \"success\";\n }\n};\n"],"mappings":";AAaA,IAAa,KACX,MACwC;AACxC,KAAI,EAAM,YAAY,EAAM,WAAW,SAAU,QAAO;AACxD,KAAI,EAAM,WAAW,YAAa,QAAO;GAI9B,KACX,MAC4B;CAC5B,IAAM,EAAE,mBAAgB;AAGxB,SAFwB,EAAY,MAEpC;EACE,KAAK,0BAA0B;GAC7B,IAAM,IAAW,EAAY,WACvB,EAAE,gBAAa;AAIrB,UAFI,MAAa,MAAM,EAAS,cAAc,KAAW,YACrD,MAAa,KAAK,EAAS,cAAc,IAAU,YAChD;;EAET,KAAK,uBAAuB;GAC1B,IAAM,IACJ,EAAY,aAAa,EAAY,SAAS,aAAa;AAK7D,UAHI,EAAY,WAAW,MAAa,KAAW,YAC/C,MAAa,IAAU,YACvB,EAAY,WAAiB,UAC1B;;EAET,KAAK;EACL,KAAK,8BAGH,QADI,EAAY,QAAc,UACvB;EACT,KAAK,qBAEH,QADI,EAAY,WAAiB,UAC1B;EACT,KAAK,uBAEH,QADI,EAAY,WAAiB,UAC1B;EACT,QACE,QAAO"}
@@ -1,2 +1,2 @@
1
- require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../../types/agent-server/type-guards.cjs`);var t=t=>{if(e.isConversationStateUpdateEvent(t))return!1;if(e.isActionEvent(t)){let e=t.action.kind;return!(!e||e===`ExecuteBashAction`&&t.source===`user`||e===`PlanningFileEditorAction`||e===`SwitchLLMAction`)}return e.isObservationEvent(t)?!(t.observation.kind===`SwitchLLMObservation`&&!t.observation.is_error):e.isMessageEvent(t)||e.isAgentErrorEvent(t)||e.isHookExecutionEvent(t)?!0:e.isACPToolCallEvent(t)?t.status===`completed`||t.status===`failed`:!1},n=e=>e.some(e=>e.source===`user`);exports.hasUserEvent=n,exports.shouldRenderEvent=t;
1
+ require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../../types/agent-server/type-guards.cjs`);var t=t=>{if(e.isConversationStateUpdateEvent(t))return!1;if(e.isActionEvent(t)){let e=t.action.kind;return!(!e||e===`ExecuteBashAction`&&t.source===`user`||e===`PlanningFileEditorAction`||e===`SwitchLLMAction`)}return e.isObservationEvent(t)?!(t.observation.kind===`SwitchLLMObservation`&&!t.observation.is_error):!!(e.isMessageEvent(t)||e.isAgentErrorEvent(t)||e.isHookExecutionEvent(t)||e.isACPToolCallEvent(t))},n=e=>e.some(e=>e.source===`user`);exports.hasUserEvent=n,exports.shouldRenderEvent=t;
2
2
  //# sourceMappingURL=should-render-event.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"should-render-event.cjs","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-content-helpers/should-render-event.ts"],"sourcesContent":["import { OpenHandsEvent } from \"#/types/agent-server/core\";\nimport {\n isActionEvent,\n isObservationEvent,\n isMessageEvent,\n isAgentErrorEvent,\n isConversationStateUpdateEvent,\n isHookExecutionEvent,\n isACPToolCallEvent,\n} from \"#/types/agent-server/type-guards\";\n\nexport const shouldRenderEvent = (event: OpenHandsEvent) => {\n // Explicitly exclude system events that should not be rendered in chat\n if (isConversationStateUpdateEvent(event)) {\n return false;\n }\n\n // Render action events (with filtering)\n if (isActionEvent(event)) {\n // For V1, action is an object with kind property\n const actionType = event.action.kind;\n\n if (!actionType) {\n return false;\n }\n\n // Hide user commands from the chat interface\n if (actionType === \"ExecuteBashAction\" && event.source === \"user\") {\n return false;\n }\n\n // Hide PlanningFileEditorAction - handled separately with PlanPreview component\n if (actionType === \"PlanningFileEditorAction\") {\n return false;\n }\n\n // The model switch tool reuses the same inline model message UI as\n // `/model <profile>` once the observation arrives.\n if (actionType === \"SwitchLLMAction\") {\n return false;\n }\n\n return true;\n }\n\n // Render observation events\n if (isObservationEvent(event)) {\n // Successful model switches are rendered through ModelMessages so they\n // look identical to `/model <profile>` confirmations. Failed switches\n // still render as observations so the error remains visible in chat.\n if (\n event.observation.kind === \"SwitchLLMObservation\" &&\n !event.observation.is_error\n ) {\n return false;\n }\n\n return true;\n }\n\n // Render message events (user and assistant messages)\n if (isMessageEvent(event)) {\n return true;\n }\n\n // Render agent error events\n if (isAgentErrorEvent(event)) {\n return true;\n }\n\n // Render hook execution events\n if (isHookExecutionEvent(event)) {\n return true;\n }\n\n // Render ACP sub-agent tool call events only once they've reached a\n // terminal status. ACP servers stream multiple events per\n // ``tool_call_id`` as the call progresses (status flips\n // ``in_progress`` ``completed`` / ``failed``); during streaming the\n // event's ``raw_input`` / ``raw_output`` / ``title`` may still be\n // partially populated, so rendering an in-flight event flashes a\n // half-formed card that then updates in place — visibly noisy.\n // ``null`` (older agent-server builds, before the field was required)\n // is also treated as in-flight: better to wait for the terminal event\n // than to render a card with no status. ``handleEventForUI`` already\n // replaces in place by ``tool_call_id``, so the terminal event lands\n // at the original position once it arrives.\n if (isACPToolCallEvent(event)) {\n return event.status === \"completed\" || event.status === \"failed\";\n }\n\n // Don't render any other event types (system events, etc.)\n return false;\n};\n\nexport const hasUserEvent = (events: OpenHandsEvent[]) =>\n events.some((event) => event.source === \"user\");\n"],"mappings":"wHAWA,IAAa,EAAqB,GAA0B,CAE1D,GAAI,EAAA,+BAA+B,EAAM,CACvC,MAAO,GAIT,GAAI,EAAA,cAAc,EAAM,CAAE,CAExB,IAAM,EAAa,EAAM,OAAO,KAsBhC,MAJA,EAhBI,CAAC,GAKD,IAAe,qBAAuB,EAAM,SAAW,QAKvD,IAAe,4BAMf,IAAe,mBAsDrB,OA9CI,EAAA,mBAAmB,EAAM,CAI3B,EACE,EAAM,YAAY,OAAS,wBAC3B,CAAC,EAAM,YAAY,UASnB,EAAA,eAAe,EAAM,EAKrB,EAAA,kBAAkB,EAAM,EAKxB,EAAA,qBAAqB,EAAM,CACtB,GAeL,EAAA,mBAAmB,EAAM,CACpB,EAAM,SAAW,aAAe,EAAM,SAAW,SAInD,IAGI,EAAgB,GAC3B,EAAO,KAAM,GAAU,EAAM,SAAW,OAAO"}
1
+ {"version":3,"file":"should-render-event.cjs","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-content-helpers/should-render-event.ts"],"sourcesContent":["import { OpenHandsEvent } from \"#/types/agent-server/core\";\nimport {\n isActionEvent,\n isObservationEvent,\n isMessageEvent,\n isAgentErrorEvent,\n isConversationStateUpdateEvent,\n isHookExecutionEvent,\n isACPToolCallEvent,\n} from \"#/types/agent-server/type-guards\";\n\nexport const shouldRenderEvent = (event: OpenHandsEvent) => {\n // Explicitly exclude system events that should not be rendered in chat\n if (isConversationStateUpdateEvent(event)) {\n return false;\n }\n\n // Render action events (with filtering)\n if (isActionEvent(event)) {\n // For V1, action is an object with kind property\n const actionType = event.action.kind;\n\n if (!actionType) {\n return false;\n }\n\n // Hide user commands from the chat interface\n if (actionType === \"ExecuteBashAction\" && event.source === \"user\") {\n return false;\n }\n\n // Hide PlanningFileEditorAction - handled separately with PlanPreview component\n if (actionType === \"PlanningFileEditorAction\") {\n return false;\n }\n\n // The model switch tool reuses the same inline model message UI as\n // `/model <profile>` once the observation arrives.\n if (actionType === \"SwitchLLMAction\") {\n return false;\n }\n\n return true;\n }\n\n // Render observation events\n if (isObservationEvent(event)) {\n // Successful model switches are rendered through ModelMessages so they\n // look identical to `/model <profile>` confirmations. Failed switches\n // still render as observations so the error remains visible in chat.\n if (\n event.observation.kind === \"SwitchLLMObservation\" &&\n !event.observation.is_error\n ) {\n return false;\n }\n\n return true;\n }\n\n // Render message events (user and assistant messages)\n if (isMessageEvent(event)) {\n return true;\n }\n\n // Render agent error events\n if (isAgentErrorEvent(event)) {\n return true;\n }\n\n // Render hook execution events\n if (isHookExecutionEvent(event)) {\n return true;\n }\n\n // Render ACP sub-agent tool call events at every lifecycle stage. The SDK\n // now persists exactly two events per ``tool_call_id`` one early\n // ``started`` event (``pending`` / ``in_progress``) and one terminal\n // (``completed`` / ``failed``) event the action->observation pair for a\n // tool call. The ``started`` event renders the card as \"running\" (no check\n // mark; see ``getACPToolCallResult``) and ``handleEventForUI`` replaces it\n // in place by ``tool_call_id`` once the terminal event arrives, mirroring\n // how an ObservationEvent supersedes its ActionEvent. The old terminal-only\n // gate existed because the source fanned out one cumulative-output frame per\n // ``ToolCallProgress``, which flashed half-formed cards mid-stream; that\n // fan-out is gone, so the running card is now a single clean event.\n if (isACPToolCallEvent(event)) {\n return true;\n }\n\n // Don't render any other event types (system events, etc.)\n return false;\n};\n\nexport const hasUserEvent = (events: OpenHandsEvent[]) =>\n events.some((event) => event.source === \"user\");\n"],"mappings":"wHAWA,IAAa,EAAqB,GAA0B,CAE1D,GAAI,EAAA,+BAA+B,EAAM,CACvC,MAAO,GAIT,GAAI,EAAA,cAAc,EAAM,CAAE,CAExB,IAAM,EAAa,EAAM,OAAO,KAsBhC,MAJA,EAhBI,CAAC,GAKD,IAAe,qBAAuB,EAAM,SAAW,QAKvD,IAAe,4BAMf,IAAe,mBAqDrB,OA7CI,EAAA,mBAAmB,EAAM,CAI3B,EACE,EAAM,YAAY,OAAS,wBAC3B,CAAC,EAAM,YAAY,UAkCvB,GAzBI,EAAA,eAAe,EAAM,EAKrB,EAAA,kBAAkB,EAAM,EAKxB,EAAA,qBAAqB,EAAM,EAe3B,EAAA,mBAAmB,EAAM,GAQlB,EAAgB,GAC3B,EAAO,KAAM,GAAU,EAAM,SAAW,OAAO"}
@@ -6,7 +6,7 @@ var s = (s) => {
6
6
  let e = s.action.kind;
7
7
  return !(!e || e === "ExecuteBashAction" && s.source === "user" || e === "PlanningFileEditorAction" || e === "SwitchLLMAction");
8
8
  }
9
- return o(s) ? !(s.observation.kind === "SwitchLLMObservation" && !s.observation.is_error) : a(s) || n(s) || i(s) ? !0 : e(s) ? s.status === "completed" || s.status === "failed" : !1;
9
+ return o(s) ? !(s.observation.kind === "SwitchLLMObservation" && !s.observation.is_error) : !!(a(s) || n(s) || i(s) || e(s));
10
10
  }, c = (e) => e.some((e) => e.source === "user");
11
11
  //#endregion
12
12
  export { c as hasUserEvent, s as shouldRenderEvent };
@@ -1 +1 @@
1
- {"version":3,"file":"should-render-event.js","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-content-helpers/should-render-event.ts"],"sourcesContent":["import { OpenHandsEvent } from \"#/types/agent-server/core\";\nimport {\n isActionEvent,\n isObservationEvent,\n isMessageEvent,\n isAgentErrorEvent,\n isConversationStateUpdateEvent,\n isHookExecutionEvent,\n isACPToolCallEvent,\n} from \"#/types/agent-server/type-guards\";\n\nexport const shouldRenderEvent = (event: OpenHandsEvent) => {\n // Explicitly exclude system events that should not be rendered in chat\n if (isConversationStateUpdateEvent(event)) {\n return false;\n }\n\n // Render action events (with filtering)\n if (isActionEvent(event)) {\n // For V1, action is an object with kind property\n const actionType = event.action.kind;\n\n if (!actionType) {\n return false;\n }\n\n // Hide user commands from the chat interface\n if (actionType === \"ExecuteBashAction\" && event.source === \"user\") {\n return false;\n }\n\n // Hide PlanningFileEditorAction - handled separately with PlanPreview component\n if (actionType === \"PlanningFileEditorAction\") {\n return false;\n }\n\n // The model switch tool reuses the same inline model message UI as\n // `/model <profile>` once the observation arrives.\n if (actionType === \"SwitchLLMAction\") {\n return false;\n }\n\n return true;\n }\n\n // Render observation events\n if (isObservationEvent(event)) {\n // Successful model switches are rendered through ModelMessages so they\n // look identical to `/model <profile>` confirmations. Failed switches\n // still render as observations so the error remains visible in chat.\n if (\n event.observation.kind === \"SwitchLLMObservation\" &&\n !event.observation.is_error\n ) {\n return false;\n }\n\n return true;\n }\n\n // Render message events (user and assistant messages)\n if (isMessageEvent(event)) {\n return true;\n }\n\n // Render agent error events\n if (isAgentErrorEvent(event)) {\n return true;\n }\n\n // Render hook execution events\n if (isHookExecutionEvent(event)) {\n return true;\n }\n\n // Render ACP sub-agent tool call events only once they've reached a\n // terminal status. ACP servers stream multiple events per\n // ``tool_call_id`` as the call progresses (status flips\n // ``in_progress`` ``completed`` / ``failed``); during streaming the\n // event's ``raw_input`` / ``raw_output`` / ``title`` may still be\n // partially populated, so rendering an in-flight event flashes a\n // half-formed card that then updates in place — visibly noisy.\n // ``null`` (older agent-server builds, before the field was required)\n // is also treated as in-flight: better to wait for the terminal event\n // than to render a card with no status. ``handleEventForUI`` already\n // replaces in place by ``tool_call_id``, so the terminal event lands\n // at the original position once it arrives.\n if (isACPToolCallEvent(event)) {\n return event.status === \"completed\" || event.status === \"failed\";\n }\n\n // Don't render any other event types (system events, etc.)\n return false;\n};\n\nexport const hasUserEvent = (events: OpenHandsEvent[]) =>\n events.some((event) => event.source === \"user\");\n"],"mappings":";;AAWA,IAAa,KAAqB,MAA0B;AAE1D,KAAI,EAA+B,EAAM,CACvC,QAAO;AAIT,KAAI,EAAc,EAAM,EAAE;EAExB,IAAM,IAAa,EAAM,OAAO;AAsBhC,SAJA,EAhBI,CAAC,KAKD,MAAe,uBAAuB,EAAM,WAAW,UAKvD,MAAe,8BAMf,MAAe;;AAsDrB,QA9CI,EAAmB,EAAM,GAI3B,EACE,EAAM,YAAY,SAAS,0BAC3B,CAAC,EAAM,YAAY,YASnB,EAAe,EAAM,IAKrB,EAAkB,EAAM,IAKxB,EAAqB,EAAM,GACtB,KAeL,EAAmB,EAAM,GACpB,EAAM,WAAW,eAAe,EAAM,WAAW,WAInD;GAGI,KAAgB,MAC3B,EAAO,MAAM,MAAU,EAAM,WAAW,OAAO"}
1
+ {"version":3,"file":"should-render-event.js","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-content-helpers/should-render-event.ts"],"sourcesContent":["import { OpenHandsEvent } from \"#/types/agent-server/core\";\nimport {\n isActionEvent,\n isObservationEvent,\n isMessageEvent,\n isAgentErrorEvent,\n isConversationStateUpdateEvent,\n isHookExecutionEvent,\n isACPToolCallEvent,\n} from \"#/types/agent-server/type-guards\";\n\nexport const shouldRenderEvent = (event: OpenHandsEvent) => {\n // Explicitly exclude system events that should not be rendered in chat\n if (isConversationStateUpdateEvent(event)) {\n return false;\n }\n\n // Render action events (with filtering)\n if (isActionEvent(event)) {\n // For V1, action is an object with kind property\n const actionType = event.action.kind;\n\n if (!actionType) {\n return false;\n }\n\n // Hide user commands from the chat interface\n if (actionType === \"ExecuteBashAction\" && event.source === \"user\") {\n return false;\n }\n\n // Hide PlanningFileEditorAction - handled separately with PlanPreview component\n if (actionType === \"PlanningFileEditorAction\") {\n return false;\n }\n\n // The model switch tool reuses the same inline model message UI as\n // `/model <profile>` once the observation arrives.\n if (actionType === \"SwitchLLMAction\") {\n return false;\n }\n\n return true;\n }\n\n // Render observation events\n if (isObservationEvent(event)) {\n // Successful model switches are rendered through ModelMessages so they\n // look identical to `/model <profile>` confirmations. Failed switches\n // still render as observations so the error remains visible in chat.\n if (\n event.observation.kind === \"SwitchLLMObservation\" &&\n !event.observation.is_error\n ) {\n return false;\n }\n\n return true;\n }\n\n // Render message events (user and assistant messages)\n if (isMessageEvent(event)) {\n return true;\n }\n\n // Render agent error events\n if (isAgentErrorEvent(event)) {\n return true;\n }\n\n // Render hook execution events\n if (isHookExecutionEvent(event)) {\n return true;\n }\n\n // Render ACP sub-agent tool call events at every lifecycle stage. The SDK\n // now persists exactly two events per ``tool_call_id`` one early\n // ``started`` event (``pending`` / ``in_progress``) and one terminal\n // (``completed`` / ``failed``) event the action->observation pair for a\n // tool call. The ``started`` event renders the card as \"running\" (no check\n // mark; see ``getACPToolCallResult``) and ``handleEventForUI`` replaces it\n // in place by ``tool_call_id`` once the terminal event arrives, mirroring\n // how an ObservationEvent supersedes its ActionEvent. The old terminal-only\n // gate existed because the source fanned out one cumulative-output frame per\n // ``ToolCallProgress``, which flashed half-formed cards mid-stream; that\n // fan-out is gone, so the running card is now a single clean event.\n if (isACPToolCallEvent(event)) {\n return true;\n }\n\n // Don't render any other event types (system events, etc.)\n return false;\n};\n\nexport const hasUserEvent = (events: OpenHandsEvent[]) =>\n events.some((event) => event.source === \"user\");\n"],"mappings":";;AAWA,IAAa,KAAqB,MAA0B;AAE1D,KAAI,EAA+B,EAAM,CACvC,QAAO;AAIT,KAAI,EAAc,EAAM,EAAE;EAExB,IAAM,IAAa,EAAM,OAAO;AAsBhC,SAJA,EAhBI,CAAC,KAKD,MAAe,uBAAuB,EAAM,WAAW,UAKvD,MAAe,8BAMf,MAAe;;AAqDrB,QA7CI,EAAmB,EAAM,GAI3B,EACE,EAAM,YAAY,SAAS,0BAC3B,CAAC,EAAM,YAAY,YAkCvB,GAzBI,EAAe,EAAM,IAKrB,EAAkB,EAAM,IAKxB,EAAqB,EAAM,IAe3B,EAAmB,EAAM;GAQlB,KAAgB,MAC3B,EAAO,MAAM,MAAU,EAAM,WAAW,OAAO"}
@@ -1,3 +1,3 @@
1
- export declare const automationIconActionButtonClassName = "inline-flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-md border-0 bg-transparent text-muted transition-colors hover:bg-interactive-hover hover:text-white focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent disabled:hover:text-muted";
1
+ export declare const automationIconActionButtonClassName: string;
2
2
  /** Text + icon Run now control on automation grid cards (matches kebab height). */
3
- export declare const automationRunNowTextButtonClassName = "inline-flex h-8 shrink-0 cursor-pointer items-center gap-1.5 rounded-md border-0 bg-transparent px-2 text-xs text-muted transition-colors hover:bg-interactive-hover hover:text-white focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent disabled:hover:text-muted";
3
+ export declare const automationRunNowTextButtonClassName: string;
@@ -1,2 +1,2 @@
1
- const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),n=require(`../../../i18n/declaration.cjs`),r=require(`../../../utils/utils.cjs`),i=require(`../../../context/navigation-context.cjs`),a=require(`../../../contexts/active-backend-context.cjs`),o=require(`../../../node_modules/@openhands/typescript-client/dist/client/server-client.cjs`),s=require(`../../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs`),c=require(`../../../api/agent-server-client-options.cjs`),l=require(`../../shared/modals/modal-backdrop.cjs`),u=require(`../../shared/modals/modal-body.cjs`),d=require(`../../shared/modals/modal-close-button.cjs`),f=require(`../settings/brand-button.cjs`),p=require(`../settings/settings-input.cjs`),m=require(`../../../hooks/query/use-backends-health.cjs`),h=require(`../../../assets/branding/openhands-logo-white.cjs`),g=require(`../../../icons/chevron-down-small.cjs`),_=require(`./backend-status-dot.cjs`),v=require(`./device-flow-auth.cjs`);let y=require(`react`);y=e.__toESM(y,1);let b=require(`react/jsx-runtime`);function x(e){let t=e.trim().toLowerCase();return t.includes(`all-hands.dev`)||t.includes(`openhands.dev`)?`cloud`:`local`}function S(e){let t=e.toLowerCase().replace(/^\[|\]$/g,``);return!!(t===`localhost`||t===`::1`||t===`::`||t===`0.0.0.0`||/^127\./.test(t)||/^::ffff:127\./i.test(t)||/^10\./.test(t)||/^192\.168\./.test(t)||/^172\.(1[6-9]|2\d|3[01])\./.test(t)||/^fe[89ab][0-9a-f]:/i.test(t)||/^f[cd][0-9a-f]{2}:/i.test(t)||t.endsWith(`.local`)||!t.includes(`.`)&&!t.includes(`:`))}function C(e){let t=e.trim().replace(/\/+$/,``);if(!t)return``;if(/^https?:\/\//i.test(t))return t;let n=t.match(/^\[([^\]]+)\]/);return`${S(n?n[1]:(t.match(/:/g)??[]).length>1?t:t.split(`:`)[0])?`http`:`https`}://${t}`}function w(e){let t=e.trim();if(!t||/\s/.test(t))return!1;let n=C(t);if(!n)return!1;try{let e=new URL(n);return(e.protocol===`http:`||e.protocol===`https:`)&&e.hostname.length>0}catch{return!1}}var T=`https://app.all-hands.dev`;function E({backend:e,testIdRoot:r}){let{t:i}=t.useTranslation(`openhands`),a=m.useBackendsHealth([e])[e.id],l=a?.isConnected??null,u=a?.disabled===!0,d=a?.consecutiveFailures??0,f=a?.lastError??null,{data:p}=s.useQuery({queryKey:[`backend-version`,e.host,e.apiKey],queryFn:async()=>(await new o.ServerClient(c.getAgentServerClientOptions({host:e.host,sessionApiKey:e.apiKey||null,timeout:5e3})).getServerInfo()).version??null,retry:!1,staleTime:6e4,enabled:e.kind===`local`&&!u}),h;h=i(l===!0?n.I18nKey.ONBOARDING$BACKEND_STATUS_CONNECTED:l===!1?n.I18nKey.ONBOARDING$BACKEND_STATUS_DISCONNECTED:n.I18nKey.ONBOARDING$BACKEND_STATUS_CHECKING);let g=e.kind===`cloud`?i(n.I18nKey.BACKEND$KIND_CLOUD):i(n.I18nKey.BACKEND$KIND_LOCAL);return(0,b.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,b.jsxs)(`div`,{"data-testid":`${r}-status`,className:`flex items-center gap-3 text-sm`,children:[(0,b.jsx)(_.BackendStatusDot,{isConnected:l}),(0,b.jsx)(`span`,{className:`text-white`,"data-testid":`${r}-status-label`,children:h}),(0,b.jsx)(`span`,{className:`text-tertiary-alt`,children:`·`}),(0,b.jsx)(`span`,{className:`text-[var(--oh-text-tertiary)]`,children:g}),p?(0,b.jsx)(`span`,{className:`text-xs text-[var(--oh-muted)]`,"data-testid":`${r}-version`,children:i(n.I18nKey.BACKEND$VERSION_LABEL,{version:p})}):null]}),u?(0,b.jsxs)(`div`,{"data-testid":`${r}-status-error`,className:`flex flex-col gap-1 rounded-md border border-red-500/40 bg-red-500/10 p-3 text-sm`,children:[(0,b.jsx)(`span`,{className:`font-semibold text-red-300`,children:i(n.I18nKey.BACKEND$HEALTH_FAILED_TITLE)}),(0,b.jsx)(`span`,{className:`text-xs text-[var(--oh-text-tertiary)]`,children:i(n.I18nKey.BACKEND$HEALTH_FAILED_DETAIL,{count:d})}),f?(0,b.jsx)(`span`,{"data-testid":`${r}-status-error-message`,className:`text-xs text-red-300 whitespace-pre-wrap break-words`,children:f}):null]}):null]})}function D({mode:e,backend:r,onSubmitted:i,renderActions:o,testIdRoot:s,hostReadOnly:c,requireApiKey:l,onSubmitOverride:u}){let{t:d}=t.useTranslation(`openhands`),{addBackend:m,updateBackend:h}=a.useActiveBackendContext(),[g,_]=y.default.useState(r?.name??``),[v,S]=y.default.useState(r?.host??``),[D,O]=y.default.useState(r?.apiKey??``),[k,A]=y.default.useState(!1),[j,M]=y.default.useState(!1),N=x(v),P=s??(e===`edit`?`edit-backend`:`add-backend`),F=l||N!==`local`,I=g.trim().length>0&&w(v)&&(!F||D.trim().length>0),L=k&&!g.trim()?d(n.I18nKey.BACKEND$NAME_REQUIRED):void 0,R=j?v.trim()?w(v)?void 0:d(n.I18nKey.BACKEND$HOST_INVALID):d(n.I18nKey.BACKEND$HOST_REQUIRED):void 0;return(0,b.jsxs)(`form`,{"data-testid":`${P}-form`,onSubmit:async t=>{if(t.preventDefault(),!I){A(!0),M(!0);return}let n={name:g.trim(),host:C(v),apiKey:D.trim(),kind:N};if(u){await u(n);return}e===`edit`&&r?h(r.id,n):m(n),i()},className:`flex flex-col gap-4`,children:[(0,b.jsx)(p.SettingsInput,{testId:`${P}-name`,name:`${P}-name`,type:`text`,label:d(n.I18nKey.BACKEND$NAME_LABEL),value:g,onChange:_,onBlur:()=>A(!0),placeholder:`Production`,className:`w-full`,showRequiredTag:!0,error:L}),(0,b.jsx)(p.SettingsInput,{testId:`${P}-host`,name:`${P}-host`,type:`text`,label:d(n.I18nKey.BACKEND$HOST_LABEL),value:v,onChange:c?void 0:S,onBlur:()=>M(!0),placeholder:T,className:`w-full`,showRequiredTag:!0,error:R,isDisabled:c}),(0,b.jsx)(p.SettingsInput,{testId:`${P}-api-key`,name:`${P}-api-key`,type:`password`,label:d(n.I18nKey.BACKEND$KEY_LABEL),value:D,onChange:O,placeholder:``,className:`w-full`}),e===`edit`&&r&&(0,b.jsx)(E,{backend:r,testIdRoot:P}),o?o({canSubmit:I,testIdRoot:P}):(0,b.jsxs)(`div`,{className:`flex justify-end gap-2 mt-2 w-full`,children:[(0,b.jsx)(f.BrandButton,{type:`button`,variant:`secondary`,onClick:i,testId:`${P}-cancel`,children:d(n.I18nKey.BUTTON$CANCEL)}),(0,b.jsx)(f.BrandButton,{type:`submit`,variant:`primary`,isDisabled:!I,testId:`${P}-submit`,children:d(n.I18nKey.BACKEND$SAVE)})]})]})}function O(){let{currentPath:e,navigate:t}=i.useNavigation();return y.default.useCallback(()=>{/^\/automations\/[^/]+/.test(e)?t(`/automations`):/^\/conversations\/[^/]+/.test(e)&&t(`/conversations`)},[e,t])}function k({onClose:e}){let{t:r}=t.useTranslation(`openhands`),{addBackend:i}=a.useActiveBackendContext(),o=O(),[s,c]=y.default.useState(``),[l,u]=y.default.useState(``),[d,m]=y.default.useState(``),h=x(l),g=s.trim().length>0&&w(l)&&(h===`local`||d.trim().length>0);return(0,b.jsxs)(`form`,{"data-testid":`add-backend-form`,onSubmit:t=>{t.preventDefault(),g&&(i({name:s.trim(),host:C(l),apiKey:d.trim(),kind:h}),o(),e())},className:`flex flex-col gap-4 flex-1 min-w-0`,children:[(0,b.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,b.jsx)(p.SettingsInput,{testId:`add-backend-name`,name:`add-backend-name`,type:`text`,label:r(n.I18nKey.BACKEND$NAME_LABEL),value:s,onChange:c,placeholder:`e.g. My Server`,className:`w-full`}),(0,b.jsx)(`p`,{className:`text-xs text-[var(--oh-muted)]`,children:r(n.I18nKey.BACKEND$NAME_HELPER)})]}),(0,b.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,b.jsx)(p.SettingsInput,{testId:`add-backend-host`,name:`add-backend-host`,type:`text`,label:r(n.I18nKey.BACKEND$HOST_LABEL),value:l,onChange:u,placeholder:`http://localhost:8000`,className:`w-full`}),(0,b.jsx)(`p`,{className:`text-xs text-[var(--oh-muted)]`,"data-testid":`add-backend-host-helper`,children:r(n.I18nKey.BACKEND$HOST_HELPER)})]}),(0,b.jsx)(p.SettingsInput,{testId:`add-backend-api-key`,name:`add-backend-api-key`,type:`password`,label:r(n.I18nKey.BACKEND$KEY_LABEL),value:d,onChange:m,placeholder:`sk-••••••••••`,className:`w-full`}),(0,b.jsx)(f.BrandButton,{type:`submit`,variant:`secondary`,isDisabled:!g,testId:`add-backend-submit`,className:`w-full text-center`,children:r(n.I18nKey.BACKEND$CONNECT)})]})}function A({onClose:e}){let{t:i}=t.useTranslation(`openhands`),{addBackend:o}=a.useActiveBackendContext(),s=O(),[c,l]=y.default.useState(!1),[u,d]=y.default.useState(``),f=u.trim()||T;return(0,b.jsxs)(`div`,{className:`flex flex-1 min-w-0 flex-col items-center gap-3`,children:[(0,b.jsxs)(`div`,{className:`flex flex-col items-center gap-1`,children:[(0,b.jsx)(h.default,{width:56,height:56,"aria-hidden":!0}),(0,b.jsx)(`h4`,{className:`text-lg font-medium text-white`,"data-testid":`add-backend-cloud-title`,children:i(n.I18nKey.BACKEND$CLOUD_TITLE)})]}),(0,b.jsx)(`p`,{className:`text-center text-sm leading-relaxed text-[var(--oh-muted)]`,children:i(n.I18nKey.BACKEND$CLOUD_DESCRIPTION)}),(0,b.jsx)(v.DeviceFlowAuth,{host:f,onSuccess:t=>{o({name:`OpenHands Cloud`,host:C(f),apiKey:t,kind:`cloud`}),s(),e()},testIdRoot:`add-backend`}),(0,b.jsxs)(`div`,{className:`w-full`,children:[(0,b.jsxs)(`button`,{type:`button`,onClick:()=>l(e=>!e),"aria-expanded":c,"data-testid":`add-backend-advanced-toggle`,className:`flex w-full cursor-pointer items-center justify-center gap-1 text-center text-xs text-[var(--oh-muted)] transition-colors hover:text-content-2`,children:[(0,b.jsx)(`span`,{children:i(n.I18nKey.BACKEND$ADVANCED)}),(0,b.jsx)(g.default,{className:r.cn(`h-4 w-4 shrink-0 text-muted transition-transform`,c&&`rotate-180`),"aria-hidden":!0})]}),(0,b.jsxs)(`div`,{className:r.cn(`pt-2`,!c&&`pointer-events-none invisible`),"aria-hidden":!c,children:[(0,b.jsx)(p.SettingsInput,{testId:`add-backend-cloud-host`,name:`add-backend-cloud-host`,type:`text`,label:i(n.I18nKey.BACKEND$HOST_LABEL),value:u,onChange:d,placeholder:T,className:`w-full`}),(0,b.jsx)(`p`,{className:`mt-1 text-xs text-[var(--oh-muted)]`,children:i(n.I18nKey.BACKEND$LOGIN_CLOUD_HINT)})]})]})]})}function j({mode:e,backend:i,onClose:a}){let{t:o}=t.useTranslation(`openhands`);if(e===`add`)return(0,b.jsx)(l.ModalBackdrop,{onClose:a,closeOnEscape:!1,"aria-label":o(n.I18nKey.BACKEND$ADD_TITLE),children:(0,b.jsxs)(`div`,{"data-testid":`add-backend-modal`,className:r.cn(`relative rounded-xl border border-[var(--oh-border)] bg-base-secondary`,u.modalWidthClassName(`xl`),u.MODAL_MAX_WIDTH_VIEWPORT),children:[(0,b.jsx)(d.ModalCloseButton,{onClose:a,testId:`add-backend-close`}),(0,b.jsx)(`div`,{className:`px-6 pt-6 pb-2 pr-12`,children:(0,b.jsx)(`h2`,{className:`text-lg font-semibold`,children:o(n.I18nKey.BACKEND$ADD_TITLE)})}),(0,b.jsxs)(`div`,{className:`flex gap-6 px-6 pb-6 pt-2`,children:[(0,b.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,b.jsx)(k,{onClose:a})}),(0,b.jsxs)(`div`,{className:`flex shrink-0 flex-col items-center`,children:[(0,b.jsx)(`div`,{className:`flex-1 w-px bg-[var(--oh-border)]`}),(0,b.jsx)(`span`,{className:`py-3 text-xs uppercase text-[var(--oh-muted)]`,children:o(n.I18nKey.BACKEND$LOGIN_OR)}),(0,b.jsx)(`div`,{className:`flex-1 w-px bg-[var(--oh-border)]`})]}),(0,b.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,b.jsx)(A,{onClose:a})})]})]})});let s=`edit-backend`;return(0,b.jsx)(l.ModalBackdrop,{onClose:a,closeOnEscape:!1,"aria-label":o(n.I18nKey.BACKEND$EDIT_TITLE),children:(0,b.jsxs)(`div`,{"data-testid":`${s}-modal`,className:r.cn(`relative bg-base-secondary p-6 rounded-xl flex flex-col gap-4 border border-[var(--oh-border)]`,u.modalWidthClassName(`md`)),children:[(0,b.jsx)(d.ModalCloseButton,{onClose:a,testId:`${s}-close`}),(0,b.jsx)(`h2`,{className:`pr-6 text-lg font-semibold`,children:o(n.I18nKey.BACKEND$EDIT_TITLE)}),(0,b.jsx)(D,{mode:`edit`,backend:i,onSubmitted:a,testIdRoot:s})]})})}exports.BackendFormModal=j;
1
+ const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),n=require(`../../../i18n/declaration.cjs`),r=require(`../../../utils/utils.cjs`),i=require(`../../../context/navigation-context.cjs`),a=require(`../../../contexts/active-backend-context.cjs`),o=require(`../../../node_modules/@openhands/typescript-client/dist/client/server-client.cjs`),s=require(`../../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs`),c=require(`../../../api/agent-server-client-options.cjs`),l=require(`../../shared/modals/modal-backdrop.cjs`),u=require(`../../shared/modals/modal-body.cjs`),d=require(`../../../utils/modal-classes.cjs`),f=require(`../../shared/modals/modal-close-button.cjs`),p=require(`../settings/brand-button.cjs`),m=require(`../settings/settings-input.cjs`),h=require(`../../../hooks/query/use-backends-health.cjs`),g=require(`../../../assets/branding/openhands-logo-white.cjs`),_=require(`../../../icons/chevron-down-small.cjs`),v=require(`./backend-status-dot.cjs`),y=require(`./device-flow-auth.cjs`);let b=require(`react`);b=e.__toESM(b,1);let x=require(`react/jsx-runtime`);function S(e){let t=e.trim().toLowerCase();return t.includes(`all-hands.dev`)||t.includes(`openhands.dev`)?`cloud`:`local`}function C(e){let t=e.toLowerCase().replace(/^\[|\]$/g,``);return!!(t===`localhost`||t===`::1`||t===`::`||t===`0.0.0.0`||/^127\./.test(t)||/^::ffff:127\./i.test(t)||/^10\./.test(t)||/^192\.168\./.test(t)||/^172\.(1[6-9]|2\d|3[01])\./.test(t)||/^fe[89ab][0-9a-f]:/i.test(t)||/^f[cd][0-9a-f]{2}:/i.test(t)||t.endsWith(`.local`)||!t.includes(`.`)&&!t.includes(`:`))}function w(e){let t=e.trim().replace(/\/+$/,``);if(!t)return``;if(/^https?:\/\//i.test(t))return t;let n=t.match(/^\[([^\]]+)\]/);return`${C(n?n[1]:(t.match(/:/g)??[]).length>1?t:t.split(`:`)[0])?`http`:`https`}://${t}`}function T(e){let t=e.trim();if(!t||/\s/.test(t))return!1;let n=w(t);if(!n)return!1;try{let e=new URL(n);return(e.protocol===`http:`||e.protocol===`https:`)&&e.hostname.length>0}catch{return!1}}var E=`https://app.all-hands.dev`;function D(e,t){return e(n.I18nKey.BACKEND$CONNECTION_TEST_FAILED,{host:t,interpolation:{escapeValue:!1}})}function O(e){return e instanceof Error?e.message:typeof e==`string`?e:null}function k(e,t){let n=O(t);return n?`${e}\n${n}`:e}async function A(e){e.kind===`local`&&await new o.ServerClient(c.getAgentServerClientOptions({host:e.host,sessionApiKey:e.apiKey||null,timeout:5e3})).getServerInfo()}function j({backend:e,testIdRoot:r}){let{t:i}=t.useTranslation(`openhands`),a=h.useBackendsHealth([e])[e.id],l=a?.isConnected??null,u=a?.disabled===!0,d=a?.consecutiveFailures??0,f=a?.lastError??null,{data:p}=s.useQuery({queryKey:[`backend-version`,e.host,e.apiKey],queryFn:async()=>(await new o.ServerClient(c.getAgentServerClientOptions({host:e.host,sessionApiKey:e.apiKey||null,timeout:5e3})).getServerInfo()).version??null,retry:!1,staleTime:6e4,enabled:e.kind===`local`&&!u}),m;m=i(l===!0?n.I18nKey.ONBOARDING$BACKEND_STATUS_CONNECTED:l===!1?n.I18nKey.ONBOARDING$BACKEND_STATUS_DISCONNECTED:n.I18nKey.ONBOARDING$BACKEND_STATUS_CHECKING);let g=e.kind===`cloud`?i(n.I18nKey.BACKEND$KIND_CLOUD):i(n.I18nKey.BACKEND$KIND_LOCAL);return(0,x.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,x.jsxs)(`div`,{"data-testid":`${r}-status`,className:`flex items-center gap-3 text-sm`,children:[(0,x.jsx)(v.BackendStatusDot,{isConnected:l}),(0,x.jsx)(`span`,{className:`text-white`,"data-testid":`${r}-status-label`,children:m}),(0,x.jsx)(`span`,{className:`text-tertiary-alt`,children:`·`}),(0,x.jsx)(`span`,{className:`text-[var(--oh-text-tertiary)]`,children:g}),p?(0,x.jsx)(`span`,{className:`text-xs text-[var(--oh-muted)]`,"data-testid":`${r}-version`,children:i(n.I18nKey.BACKEND$VERSION_LABEL,{version:p})}):null]}),u?(0,x.jsxs)(`div`,{"data-testid":`${r}-status-error`,className:`flex flex-col gap-1 rounded-md border border-red-500/40 bg-red-500/10 p-3 text-sm`,children:[(0,x.jsx)(`span`,{className:`font-semibold text-red-300`,children:i(n.I18nKey.BACKEND$HEALTH_FAILED_TITLE)}),(0,x.jsx)(`span`,{className:`text-xs text-[var(--oh-text-tertiary)]`,children:i(n.I18nKey.BACKEND$HEALTH_FAILED_DETAIL,{count:d})}),f?(0,x.jsx)(`span`,{"data-testid":`${r}-status-error-message`,className:`text-xs text-red-300 whitespace-pre-wrap break-words`,children:f}):null]}):null]})}function M({mode:e,backend:r,onSubmitted:i,renderActions:o,testIdRoot:s,hostReadOnly:c,requireApiKey:l,onSubmitOverride:u}){let{t:d}=t.useTranslation(`openhands`),{addBackend:f,updateBackend:h}=a.useActiveBackendContext(),[g,_]=b.default.useState(r?.name??``),[v,y]=b.default.useState(r?.host??``),[C,O]=b.default.useState(r?.apiKey??``),[M,N]=b.default.useState(null),[P,F]=b.default.useState(!1),[I,L]=b.default.useState(!1),[R,z]=b.default.useState(!1),B=S(v),V=s??(e===`edit`?`edit-backend`:`add-backend`),H=l||B!==`local`,U=g.trim().length>0&&T(v)&&(!H||C.trim().length>0),W=I&&!g.trim()?d(n.I18nKey.BACKEND$NAME_REQUIRED):void 0,G=R?v.trim()?T(v)?void 0:d(n.I18nKey.BACKEND$HOST_INVALID):d(n.I18nKey.BACKEND$HOST_REQUIRED):void 0;return(0,x.jsxs)(`form`,{"data-testid":`${V}-form`,onSubmit:async t=>{if(t.preventDefault(),P)return;if(!U){L(!0),z(!0);return}let n={name:g.trim(),host:w(v),apiKey:C.trim(),kind:B};N(null),F(!0);try{if(u){await u(n);return}await A(n),e===`edit`&&r?h(r.id,n):f(n),i()}catch(e){N(k(D(d,n.host),e))}finally{F(!1)}},className:`flex flex-col gap-4`,children:[(0,x.jsx)(m.SettingsInput,{testId:`${V}-name`,name:`${V}-name`,type:`text`,label:d(n.I18nKey.BACKEND$NAME_LABEL),value:g,onChange:e=>{_(e),N(null)},onBlur:()=>L(!0),placeholder:`Production`,className:`w-full`,showRequiredTag:!0,error:W}),(0,x.jsx)(m.SettingsInput,{testId:`${V}-host`,name:`${V}-host`,type:`text`,label:d(n.I18nKey.BACKEND$HOST_LABEL),value:v,onChange:c?void 0:e=>{y(e),N(null)},onBlur:()=>z(!0),placeholder:E,className:`w-full`,showRequiredTag:!0,error:G,isDisabled:c}),(0,x.jsx)(m.SettingsInput,{testId:`${V}-api-key`,name:`${V}-api-key`,type:`password`,label:d(n.I18nKey.BACKEND$KEY_LABEL),value:C,onChange:e=>{O(e),N(null)},placeholder:``,className:`w-full`}),M?(0,x.jsx)(`div`,{role:`alert`,"data-testid":`${V}-error`,className:`rounded-md border border-red-500/40 bg-red-500/10 p-3 text-sm text-red-300 whitespace-pre-wrap break-words`,children:M}):null,e===`edit`&&r&&(0,x.jsx)(j,{backend:r,testIdRoot:V}),o?o({canSubmit:U&&!P,isSubmitting:P,testIdRoot:V}):(0,x.jsxs)(`div`,{className:`flex justify-end gap-2 mt-2 w-full`,children:[(0,x.jsx)(p.BrandButton,{type:`button`,variant:`secondary`,onClick:i,testId:`${V}-cancel`,children:d(n.I18nKey.BUTTON$CANCEL)}),(0,x.jsx)(p.BrandButton,{type:`submit`,variant:`primary`,isDisabled:!U||P,testId:`${V}-submit`,children:d(n.I18nKey.BACKEND$SAVE)})]})]})}function N(){let{currentPath:e,navigate:t}=i.useNavigation();return b.default.useCallback(()=>{/^\/automations\/[^/]+/.test(e)?t(`/automations`):/^\/conversations\/[^/]+/.test(e)&&t(`/conversations`)},[e,t])}function P({onClose:e}){let{t:r}=t.useTranslation(`openhands`),{addBackend:i}=a.useActiveBackendContext(),o=N(),[s,c]=b.default.useState(``),[l,u]=b.default.useState(``),[d,f]=b.default.useState(``),[h,g]=b.default.useState(null),[_,v]=b.default.useState(!1),y=S(l),C=s.trim().length>0&&T(l)&&(y===`local`||d.trim().length>0);return(0,x.jsxs)(`form`,{"data-testid":`add-backend-form`,onSubmit:async t=>{if(t.preventDefault(),!C||_)return;let n={name:s.trim(),host:w(l),apiKey:d.trim(),kind:y};g(null),v(!0);try{await A(n),i(n),o(),e()}catch(e){g(k(D(r,n.host),e))}finally{v(!1)}},className:`flex flex-col gap-4 flex-1 min-w-0`,children:[(0,x.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,x.jsx)(m.SettingsInput,{testId:`add-backend-name`,name:`add-backend-name`,type:`text`,label:r(n.I18nKey.BACKEND$NAME_LABEL),value:s,onChange:e=>{c(e),g(null)},placeholder:`e.g. My Server`,className:`w-full`}),(0,x.jsx)(`p`,{className:`text-xs text-[var(--oh-muted)]`,children:r(n.I18nKey.BACKEND$NAME_HELPER)})]}),(0,x.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,x.jsx)(m.SettingsInput,{testId:`add-backend-host`,name:`add-backend-host`,type:`text`,label:r(n.I18nKey.BACKEND$HOST_LABEL),value:l,onChange:e=>{u(e),g(null)},placeholder:`http://localhost:8000`,className:`w-full`}),(0,x.jsx)(`p`,{className:`text-xs text-[var(--oh-muted)]`,"data-testid":`add-backend-host-helper`,children:r(n.I18nKey.BACKEND$HOST_HELPER)})]}),(0,x.jsx)(m.SettingsInput,{testId:`add-backend-api-key`,name:`add-backend-api-key`,type:`password`,label:r(n.I18nKey.BACKEND$KEY_LABEL),value:d,onChange:e=>{f(e),g(null)},placeholder:`sk-••••••••••`,className:`w-full`}),h?(0,x.jsx)(`div`,{role:`alert`,"data-testid":`add-backend-error`,className:`rounded-md border border-red-500/40 bg-red-500/10 p-3 text-sm text-red-300 whitespace-pre-wrap break-words`,children:h}):null,(0,x.jsx)(p.BrandButton,{type:`submit`,variant:`secondary`,isDisabled:!C||_,testId:`add-backend-submit`,className:`w-full text-center`,children:r(_?n.I18nKey.ONBOARDING$BACKEND_STATUS_CHECKING:n.I18nKey.BACKEND$CONNECT)})]})}function F({onClose:e}){let{t:i}=t.useTranslation(`openhands`),{addBackend:o}=a.useActiveBackendContext(),s=N(),[c,l]=b.default.useState(!1),[u,f]=b.default.useState(``),p=u.trim()||E;return(0,x.jsxs)(`div`,{className:`flex flex-1 min-w-0 flex-col items-center gap-3`,children:[(0,x.jsxs)(`div`,{className:`flex flex-col items-center gap-1`,children:[(0,x.jsx)(g.default,{width:56,height:56,"aria-hidden":!0}),(0,x.jsx)(`h4`,{className:d.modalTitleLgMediumClassName,"data-testid":`add-backend-cloud-title`,children:i(n.I18nKey.BACKEND$CLOUD_TITLE)})]}),(0,x.jsx)(`p`,{className:`text-center text-sm leading-relaxed text-[var(--oh-muted)]`,children:i(n.I18nKey.BACKEND$CLOUD_DESCRIPTION)}),(0,x.jsx)(y.DeviceFlowAuth,{host:p,onSuccess:t=>{o({name:`OpenHands Cloud`,host:w(p),apiKey:t,kind:`cloud`}),s(),e()},testIdRoot:`add-backend`}),(0,x.jsxs)(`div`,{className:`w-full`,children:[(0,x.jsxs)(`button`,{type:`button`,onClick:()=>l(e=>!e),"aria-expanded":c,"data-testid":`add-backend-advanced-toggle`,className:`flex w-full cursor-pointer items-center justify-center gap-1 text-center text-xs text-[var(--oh-muted)] transition-colors hover:text-content-2`,children:[(0,x.jsx)(`span`,{children:i(n.I18nKey.BACKEND$ADVANCED)}),(0,x.jsx)(_.default,{className:r.cn(`h-4 w-4 shrink-0 text-muted transition-transform`,c&&`rotate-180`),"aria-hidden":!0})]}),(0,x.jsxs)(`div`,{className:r.cn(`pt-2`,!c&&`pointer-events-none invisible`),"aria-hidden":!c,children:[(0,x.jsx)(m.SettingsInput,{testId:`add-backend-cloud-host`,name:`add-backend-cloud-host`,type:`text`,label:i(n.I18nKey.BACKEND$HOST_LABEL),value:u,onChange:f,placeholder:E,className:`w-full`}),(0,x.jsx)(`p`,{className:`mt-1 text-xs text-[var(--oh-muted)]`,children:i(n.I18nKey.BACKEND$LOGIN_CLOUD_HINT)})]})]})]})}function I({mode:e,backend:i,onClose:a}){let{t:o}=t.useTranslation(`openhands`);if(e===`add`)return(0,x.jsx)(l.ModalBackdrop,{onClose:a,closeOnEscape:!1,"aria-label":o(n.I18nKey.BACKEND$ADD_TITLE),children:(0,x.jsxs)(`div`,{"data-testid":`add-backend-modal`,className:r.cn(`relative rounded-xl border border-[var(--oh-border)] bg-base-secondary`,u.modalWidthClassName(`xl`),u.MODAL_MAX_WIDTH_VIEWPORT),children:[(0,x.jsx)(f.ModalCloseButton,{onClose:a,testId:`add-backend-close`}),(0,x.jsx)(`div`,{className:`px-6 pt-6 pb-2 pr-12`,children:(0,x.jsx)(`h2`,{className:d.modalTitleLgClassName,children:o(n.I18nKey.BACKEND$ADD_TITLE)})}),(0,x.jsxs)(`div`,{className:`flex gap-6 px-6 pb-6 pt-2`,children:[(0,x.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,x.jsx)(P,{onClose:a})}),(0,x.jsxs)(`div`,{className:`flex shrink-0 flex-col items-center`,children:[(0,x.jsx)(`div`,{className:`flex-1 w-px bg-[var(--oh-border)]`}),(0,x.jsx)(`span`,{className:`py-3 text-xs uppercase text-[var(--oh-muted)]`,children:o(n.I18nKey.BACKEND$LOGIN_OR)}),(0,x.jsx)(`div`,{className:`flex-1 w-px bg-[var(--oh-border)]`})]}),(0,x.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,x.jsx)(F,{onClose:a})})]})]})});let s=`edit-backend`;return(0,x.jsx)(l.ModalBackdrop,{onClose:a,closeOnEscape:!1,"aria-label":o(n.I18nKey.BACKEND$EDIT_TITLE),children:(0,x.jsxs)(`div`,{"data-testid":`${s}-modal`,className:r.cn(`relative bg-base-secondary p-6 rounded-xl flex flex-col gap-4 border border-[var(--oh-border)]`,u.modalWidthClassName(`md`)),children:[(0,x.jsx)(f.ModalCloseButton,{onClose:a,testId:`${s}-close`}),(0,x.jsx)(`h2`,{className:r.cn(`pr-6`,d.modalTitleLgClassName),children:o(n.I18nKey.BACKEND$EDIT_TITLE)}),(0,x.jsx)(M,{mode:`edit`,backend:i,onSubmitted:a,testIdRoot:s})]})})}exports.BackendFormModal=I;
2
2
  //# sourceMappingURL=backend-form-modal.cjs.map