@openhands/agent-canvas 1.0.0-alpha.8 → 1.0.0-beta.1

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 (409) hide show
  1. package/README.md +17 -6
  2. package/bin/agent-canvas.mjs +22 -2
  3. package/build/assets/{QueryClientProvider-B7kl84Kj.js → QueryClientProvider-CkGuhXg-.js} +1 -1
  4. package/build/assets/{Trans-1j65oy9O.js → Trans-Cvm_-SMi.js} +1 -1
  5. package/build/assets/acp-providers-CbiRekh9.js +1 -0
  6. package/build/assets/{acp-route-guard-CQTmeJwM.js → acp-route-guard-B2yoBZ_4.js} +1 -1
  7. package/build/assets/{active-backend-context-TVbjnvmP.js → active-backend-context-cCM1vYYZ.js} +1 -1
  8. package/build/assets/add-backend-modal-DIUQzMPa.js +1 -0
  9. package/build/assets/agent-server-client-options-Bc5ZorQZ.js +1 -0
  10. package/build/assets/agent-server-compatibility-BlkUsrX2.js +1 -0
  11. package/build/assets/agent-server-conversation-service.api-DFvqqEDo.js +5 -0
  12. package/build/assets/{agent-settings-B247S9G3.js → agent-settings-CnGSCmK8.js} +1 -1
  13. package/build/assets/{alert-banner-BWoqueRw.js → alert-banner-DtzAX654.js} +1 -1
  14. package/build/assets/{analytics-consent-form-modal-C7sXfxRh.js → analytics-consent-form-modal-CHZ3I37v.js} +1 -1
  15. package/build/assets/api-key-entry-screen-B2gynaCp.js +1 -0
  16. package/build/assets/{app-settings-BVeSaty9.js → app-settings-Db9ITeJH.js} +1 -1
  17. package/build/assets/{automation-detail-g5-RZ0da.js → automation-detail-Di7EOIZD.js} +1 -1
  18. package/build/assets/{automations-list-DHoq_0MM.js → automations-list-IsIWdDiw.js} +1 -1
  19. package/build/assets/backend-form-modal-Dnk33xA_.js +1 -0
  20. package/build/assets/{backend-synced-settings-badge-nAfiUWvM.js → backend-synced-settings-badge-Dc6c7GT4.js} +1 -1
  21. package/build/assets/{base-modal-CQRvRHu1.js → base-modal-_dYTw1ri.js} +1 -1
  22. package/build/assets/{brand-button-C2nEKopC.js → brand-button-Br7f0kZJ.js} +1 -1
  23. package/build/assets/browser-D810xUYt.js +5 -0
  24. package/build/assets/browser-store-Couc4S5D.js +1 -0
  25. package/build/assets/browser-tab-B-aIqXRl.js +1 -0
  26. package/build/assets/{checkmark-BJJrZUF8.js → checkmark-DL7acQA7.js} +1 -1
  27. package/build/assets/{chevron-left-small-CSh-sE9L.js → chevron-left-small-CVWf8TI6.js} +1 -1
  28. package/build/assets/{circle-plus-check-toggle-qs8Va1cC.js → circle-plus-check-toggle-P7ZZToV4.js} +1 -1
  29. package/build/assets/{clock-ZR4Kn-_Y.js → clock-BRjCgHTc.js} +1 -1
  30. package/build/assets/{close-BdmyeRqS.js → close-B5LROHR3.js} +1 -1
  31. package/build/assets/{combobox-caret-B53O9Hsq.js → combobox-caret-to1O8irE.js} +1 -1
  32. package/build/assets/{condenser-settings-A35V3yng.js → condenser-settings-wnEKhBof.js} +1 -1
  33. package/build/assets/{confirmation-modal-C9-La0h3.js → confirmation-modal-Dau3w_sa.js} +1 -1
  34. package/build/assets/{context-menu-list-item-Buu9nc0q.js → context-menu-list-item-CWNFpuiC.js} +1 -1
  35. package/build/assets/conversation-HlncOV7n.js +19 -0
  36. package/build/assets/conversation-MtnkpqA9.js +1 -0
  37. package/build/assets/conversation-panel-DxnM6tRe.js +1 -0
  38. package/build/assets/{conversation-service.api-C8pYCyV6.js → conversation-service.api-nb5W1PqR.js} +1 -1
  39. package/build/assets/{conversation-tab-empty-state-D8dNvo-V.js → conversation-tab-empty-state-DyssnnWa.js} +1 -1
  40. package/build/assets/conversation-websocket-context-C8_PkGLi.js +3 -0
  41. package/build/assets/{copy-C7Ti2d8C.js → copy-DYgmUdIw.js} +1 -1
  42. package/build/assets/{custom-toast-handlers-BOc3qeQ7.js → custom-toast-handlers-C-SZFmto.js} +1 -1
  43. package/build/assets/declaration-BNMqORFE.js +1 -0
  44. package/build/assets/{device-verify-CMusn8nX.js → device-verify-DqDlphsG.js} +1 -1
  45. package/build/assets/{dist-DZHSA2e6.js → dist-C6t0EXL7.js} +1 -1
  46. package/build/assets/{edit-automation-modal-Dnjxbjn7.js → edit-automation-modal-BGzR3nfZ.js} +1 -1
  47. package/build/assets/{ellipsis-button-ugUATsNo.js → ellipsis-button-ZyLMPURn.js} +1 -1
  48. package/build/assets/{entry.client-D9uR9Blz.js → entry.client-1VMHpktY.js} +2 -2
  49. package/build/assets/{enum-filter-dropdown-1vpOGySB.js → enum-filter-dropdown-CEgCdu4A.js} +1 -1
  50. package/build/assets/{environment-switch-overlay-CTCTQikP.js → environment-switch-overlay-XL8yCGP6.js} +1 -1
  51. package/build/assets/{extensions-hub-BSUseHVF.js → extensions-hub-C651jsVh.js} +1 -1
  52. package/build/assets/{extensions-navigation-CT1kc1u_.js → extensions-navigation-BYR8Giqq.js} +1 -1
  53. package/build/assets/files-tab-BhnLgimi.js +1 -0
  54. package/build/assets/{folder-0WSMImNX.js → folder-ZZJVGgd7.js} +1 -1
  55. package/build/assets/git-control-bar-branch-button-M34A5_vX.js +27 -0
  56. package/build/assets/{git-provider-icon-DYE9n7fs.js → git-provider-icon-D5dCNy-k.js} +1 -1
  57. package/build/assets/home-CYQv7yc_.js +1 -0
  58. package/build/assets/{i18n-DjAGhTis.js → i18n-CTohRuoO.js} +1 -1
  59. package/build/assets/install-server-modal-f31_CLrW.js +1 -0
  60. package/build/assets/{launch-hZ0ifhcV.js → launch-DHEUYn2A.js} +1 -1
  61. package/build/assets/{lesson-plan-DRYG5SLI.js → lesson-plan-dH5Bj0pN.js} +1 -1
  62. package/build/assets/{link-external-Df8J52xI.js → link-external-D2POYx4c.js} +1 -1
  63. package/build/assets/{llm-client-ChQzg4wX.js → llm-client-DaH1TuyR.js} +1 -1
  64. package/build/assets/llm-settings-Bql-vydt.js +1 -0
  65. package/build/assets/llm-settings-C_tal6Ds.js +1 -0
  66. package/build/assets/{loading-spinner-C04FGh14.js → loading-spinner-BPtYORNK.js} +1 -1
  67. package/build/assets/{manage-backends-modal-rYeyGx7j.js → manage-backends-modal-l7RkKfwX.js} +1 -1
  68. package/build/assets/{manage-workspaces-modal-C5EuW8m1.js → manage-workspaces-modal-DhKF_8z3.js} +1 -1
  69. package/build/assets/manifest-9fee01b9.js +1 -0
  70. package/build/assets/{markdown-renderer-CEX4Becj.js → markdown-renderer-DMzf2i4x.js} +1 -1
  71. package/build/assets/mcp-D2onbwVk.js +9 -0
  72. package/build/assets/{messages-T2ewVkbp.js → messages-BMzyOW2V.js} +1 -1
  73. package/build/assets/{modal-backdrop-DTYGVmOR.js → modal-backdrop-BAbgYsqB.js} +1 -1
  74. package/build/assets/{modal-body-YElmM1dV.js → modal-body-BI6Ru2Qr.js} +1 -1
  75. package/build/assets/{modal-close-button-C_GpQt9F.js → modal-close-button-t1Gh3qmL.js} +1 -1
  76. package/build/assets/{model-selector-DeMmw-Xa.js → model-selector-SM9IUz-q.js} +1 -1
  77. package/build/assets/{mutation-Cz7N4XAo.js → mutation-D0OogFCz.js} +1 -1
  78. package/build/assets/{navigation-context-DeIPtGPp.js → navigation-context-D0YWpT8d.js} +1 -1
  79. package/build/assets/{navigation-link-C9JD4PYD.js → navigation-link-Cn7KP3c5.js} +1 -1
  80. package/build/assets/{openhands-logo-CI5Fhn1W.js → openhands-logo-CnrF6LKb.js} +1 -1
  81. package/build/assets/{option-service.api-DsI1UW7N.js → option-service.api-KvY_mZMY.js} +1 -1
  82. package/build/assets/{organization-service.api-COwMPFg5.js → organization-service.api-DzYTHTYC.js} +1 -1
  83. package/build/assets/{path-utils-CqJboYxo.js → path-utils-YohAYyMv.js} +1 -1
  84. package/build/assets/{plan-components-DEjMuDDG.js → plan-components-atxXCF0R.js} +1 -1
  85. package/build/assets/{planner-tab-BrntFmb1.js → planner-tab-CFc-hV07.js} +1 -1
  86. package/build/assets/{profiles-client-BGkKEV9j.js → profiles-client-D6IkTJof.js} +1 -1
  87. package/build/assets/{providers-DXvCAN_u.js → providers-Bx6EfrzZ.js} +1 -1
  88. package/build/assets/{proxy-CurRmrqf.js → proxy-CxydCnis.js} +1 -1
  89. package/build/assets/{query-client-config-Ba7qAAoO.js → query-client-config-B7u9asM0.js} +1 -1
  90. package/build/assets/{recommended-automations-launcher-BI9NhG8Y.js → recommended-automations-launcher-sgvfU62c.js} +3 -3
  91. package/build/assets/root-BXWU99D-.js +2 -0
  92. package/build/assets/{root-layout-BLjAEgle.js → root-layout-DVepR4To.js} +2 -2
  93. package/build/assets/sdk-section-page-DOIKvwSL.js +1 -0
  94. package/build/assets/{sdk-settings-schema-QBYH-ONX.js → sdk-settings-schema-DsUf9wu1.js} +1 -1
  95. package/build/assets/{search-Cq_cFrDt.js → search-27Owlc3A.js} +1 -1
  96. package/build/assets/{secrets-service-Bwd5DeUs.js → secrets-service-BsnKFc2x.js} +1 -1
  97. package/build/assets/secrets-settings-Bz_UohPJ.js +1 -0
  98. package/build/assets/{server-client-C3mC8Hl3.js → server-client-DyAQ3NZ_.js} +1 -1
  99. package/build/assets/{settings-D7E2U5tK.js → settings-BYkVX7vW.js} +1 -1
  100. package/build/assets/{settings-client-CwjfwoiB.js → settings-client-C73C7IgV.js} +1 -1
  101. package/build/assets/{settings-dropdown-input-VwAXNrOb.js → settings-dropdown-input-BJYvGdg-.js} +1 -1
  102. package/build/assets/{settings-gear-BJwWR1ej.js → settings-gear-C77PgE_O.js} +1 -1
  103. package/build/assets/{settings-index-J-3BNR0W.js → settings-index-Dz0BmdJD.js} +1 -1
  104. package/build/assets/{settings-input-DBywAnA7.js → settings-input-Bn7F5C75.js} +1 -1
  105. package/build/assets/{settings-list-classes-BOS092DR.js → settings-list-classes-Bf80tWtc.js} +1 -1
  106. package/build/assets/{settings-modal-B8vgWDTe.js → settings-modal-Brzgh5Yw.js} +1 -1
  107. package/build/assets/{settings-section-header-context-32x6WTyL.js → settings-section-header-context-BgZe5YkE.js} +1 -1
  108. package/build/assets/{settings-service.api-FvJGK45W.js → settings-service.api-CZ3uWx4v.js} +1 -1
  109. package/build/assets/{settings-switch-DTKmHC8F.js → settings-switch-BeIKrWms.js} +1 -1
  110. package/build/assets/{shared-conversation-a0QV8o99.js → shared-conversation-DChOdb0t.js} +1 -1
  111. package/build/assets/{sidebar-mobile-menu-toggle-DTUNI1WQ.js → sidebar-mobile-menu-toggle-BWuf4PRH.js} +1 -1
  112. package/build/assets/{sidebar-nav-link-CnWoZcwc.js → sidebar-nav-link-BGjiJq-4.js} +1 -1
  113. package/build/assets/{skill-card-pill-row-tZ599jli.js → skill-card-pill-row-DF1axQCG.js} +1 -1
  114. package/build/assets/{skills-ZyAO5dyK.js → skills-ChIKZPK4.js} +1 -1
  115. package/build/assets/{skills-plugins-BSRz041I.js → skills-plugins-CcI_19lM.js} +1 -1
  116. package/build/assets/{skills-settings-DOnMn9q1.js → skills-settings-DlA5hlXw.js} +1 -1
  117. package/build/assets/{status-CsatcFbK.js → status-hp6M6E7E.js} +1 -1
  118. package/build/assets/{styled-tooltip-CS3mB_1X.js → styled-tooltip-CBzrri6o.js} +1 -1
  119. package/build/assets/{switch-skeleton-C-CfhYYV.js → switch-skeleton-DnC9wLp7.js} +1 -1
  120. package/build/assets/{task-list-tab-Day9nhRT.js → task-list-tab-DUJn1sgz.js} +1 -1
  121. package/build/assets/{terminal-ro4SNjUU.js → terminal-CRf9S0Z2.js} +1 -1
  122. package/build/assets/{terminal-LNa-iU5c.js → terminal-RmuaSdhJ.js} +1 -1
  123. package/build/assets/{toggle-switch-k-IZCDbt.js → toggle-switch-Pvyp2RAN.js} +1 -1
  124. package/build/assets/{typography-vVUMoNUg.js → typography-gpuWmrQO.js} +1 -1
  125. package/build/assets/{u-check-circle-DplbarS5.js → u-check-circle-IUIfACQQ.js} +1 -1
  126. package/build/assets/{u-check-circle-half-yDuiSZHC.js → u-check-circle-half-C1YxB6py.js} +1 -1
  127. package/build/assets/{u-circuit-C9tYkpeK.js → u-circuit-BmVikJHu.js} +1 -1
  128. package/build/assets/{u-edit-KAUlufD8.js → u-edit-CFvXHqZk.js} +1 -1
  129. package/build/assets/use-active-conversation-Db3IWSPK.js +1 -0
  130. package/build/assets/{use-agent-settings-schema-Bvp5UzV8.js → use-agent-settings-schema-33Un7UF2.js} +1 -1
  131. package/build/assets/{use-agent-state-DE5dlEXJ.js → use-agent-state-Bn8vS5sY.js} +1 -1
  132. package/build/assets/{use-cloud-current-user-id-DWVar4st.js → use-cloud-current-user-id-CvkXFnTT.js} +1 -1
  133. package/build/assets/use-config-Co1O8-Ey.js +1 -0
  134. package/build/assets/{use-create-conversation-DW7AGgLA.js → use-create-conversation-CKS3EAHu.js} +1 -1
  135. package/build/assets/{use-event-store-CQZCcVz-.js → use-event-store-BT_gV3ut.js} +1 -1
  136. package/build/assets/use-get-secrets-DuhdIA59.js +1 -0
  137. package/build/assets/{use-handle-plan-click-DpgEQDAV.js → use-handle-plan-click-C9zJpK8A.js} +1 -1
  138. package/build/assets/use-is-authed-BggE5wPj.js +1 -0
  139. package/build/assets/{use-is-creating-conversation-DhDeeWfA.js → use-is-creating-conversation-BZ5hB_Bg.js} +1 -1
  140. package/build/assets/{use-launch-skill-in-chat-DVGPFrbI.js → use-launch-skill-in-chat-fNN_xGZG.js} +1 -1
  141. package/build/assets/{use-llm-profiles-D3-KXwQ0.js → use-llm-profiles-DDOol3gK.js} +1 -1
  142. package/build/assets/use-runtime-is-ready-CQCE3xZC.js +1 -0
  143. package/build/assets/{use-save-settings-CEEKSTWG.js → use-save-settings-VUrj_QNG.js} +1 -1
  144. package/build/assets/{use-settings-DQ7Oo1Hj.js → use-settings-DQIZmIov.js} +1 -1
  145. package/build/assets/{use-settings-nav-items-YmrXrjn9.js → use-settings-nav-items-1ZvovKSr.js} +1 -1
  146. package/build/assets/use-skills-DAMLFjKU.js +1 -0
  147. package/build/assets/{use-task-list-Bs90uF2N.js → use-task-list-CLJbuJgM.js} +1 -1
  148. package/build/assets/use-unified-vscode-url-sZt29HrC.js +1 -0
  149. package/build/assets/use-user-conversation-DfgEB6RW.js +1 -0
  150. package/build/assets/{useMutation-B4OUESdw.js → useMutation-DqrumCWD.js} +1 -1
  151. package/build/assets/{useTranslation-CpIcQBq6.js → useTranslation-DCOdSSMl.js} +1 -1
  152. package/build/assets/{utils-D-HX7JCe.js → utils-i18rdUj2.js} +1 -1
  153. package/build/assets/v4-CNn21NXa.js +1 -0
  154. package/build/assets/{vendor~browser-Dr71AdrG.js → vendor~browser-BNjNhjFU.js} +1 -1
  155. package/build/assets/{vendor~browser-tab-BiVxfjJo.js → vendor~browser-tab-BgwV1mxF.js} +1 -1
  156. package/build/assets/{vendor~conversation-panel~conversation-BlCIz9XQ.js → vendor~conversation-panel~conversation-a9SyrrhV.js} +1 -1
  157. package/build/assets/{vendor~files-tab-DtLR-QD9.js → vendor~files-tab-BGKayPiK.js} +1 -1
  158. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-Ds9quNZ9.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-smY2r837.js} +1 -1
  159. package/build/assets/{vendor~home~mcp~automations-list-C5PoHCy6.js → vendor~home~mcp~automations-list-Ccy2I0KU.js} +1 -1
  160. package/build/assets/{vendor~home~mcp~automations-list-BUBGGGYz.js → vendor~home~mcp~automations-list-DoPfwaXj.js} +1 -1
  161. package/build/assets/{vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-CGlZoBKa.js → vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-DbfELDJu.js} +2 -2
  162. package/build/assets/{vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-DE11mPxp.js → vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-Z3nsiNNq.js} +1 -1
  163. package/build/assets/{vendor~launch-Dg--Ssk6.js → vendor~launch-vdeRTWFu.js} +1 -1
  164. package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-DrXgiSCq.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-DW31UyBp.js} +1 -1
  165. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-8b8V5bfO.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-BkQGKpye.js} +1 -1
  166. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-Dy7L6fMG.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-DzIXV3Ui.js} +1 -1
  167. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~k776hupu-D40EXhZx.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~k776hupu-Bbs7UJ5U.js} +2 -2
  168. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~dp08i1qy-CHrEOFl6.js → vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~dp08i1qy-DTwbEEcX.js} +1 -1
  169. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-BP1SKG0F.js → vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-d2oallMa.js} +1 -1
  170. package/build/assets/{vendor~root~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-s~kyz9p27j-CyUbhpbm.js → vendor~root~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-s~f2l2lr17-CDXvdvb2.js} +1 -1
  171. package/build/assets/{verification-settings-BtlTiHP8.js → verification-settings-CsbvQcYS.js} +1 -1
  172. package/build/assets/{vscode-tab-C0ShhiSU.js → vscode-tab-Zb-QbTuV.js} +1 -1
  173. package/build/assets/{waiting-for-runtime-message-DWPl_Yby.js → waiting-for-runtime-message-CntjExbU.js} +1 -1
  174. package/build/assets/{x-mark-CWI0f9yI.js → x-mark-CrpjscNc.js} +1 -1
  175. package/build/index.html +4 -4
  176. package/build/locales/ar/openhands.json +7 -0
  177. package/build/locales/ca/openhands.json +7 -0
  178. package/build/locales/de/openhands.json +7 -0
  179. package/build/locales/en/openhands.json +7 -0
  180. package/build/locales/es/openhands.json +7 -0
  181. package/build/locales/fr/openhands.json +7 -0
  182. package/build/locales/it/openhands.json +7 -0
  183. package/build/locales/ja/openhands.json +7 -0
  184. package/build/locales/ko-KR/openhands.json +7 -0
  185. package/build/locales/no/openhands.json +7 -0
  186. package/build/locales/pt/openhands.json +7 -0
  187. package/build/locales/tr/openhands.json +7 -0
  188. package/build/locales/uk/openhands.json +7 -0
  189. package/build/locales/zh-CN/openhands.json +7 -0
  190. package/build/locales/zh-TW/openhands.json +7 -0
  191. package/config/defaults.json +0 -4
  192. package/dist/api/agent-server-adapter.cjs +1 -1
  193. package/dist/api/agent-server-adapter.cjs.map +1 -1
  194. package/dist/api/agent-server-adapter.js +2 -1
  195. package/dist/api/agent-server-adapter.js.map +1 -1
  196. package/dist/api/agent-server-compatibility.cjs +1 -1
  197. package/dist/api/agent-server-compatibility.cjs.map +1 -1
  198. package/dist/api/agent-server-compatibility.d.ts +16 -0
  199. package/dist/api/agent-server-compatibility.js +31 -20
  200. package/dist/api/agent-server-compatibility.js.map +1 -1
  201. package/dist/api/agent-server-config.cjs +1 -1
  202. package/dist/api/agent-server-config.cjs.map +1 -1
  203. package/dist/api/agent-server-config.d.ts +45 -0
  204. package/dist/api/agent-server-config.js +49 -21
  205. package/dist/api/agent-server-config.js.map +1 -1
  206. package/dist/api/backend-registry/storage.cjs +1 -1
  207. package/dist/api/backend-registry/storage.cjs.map +1 -1
  208. package/dist/api/backend-registry/storage.js +34 -32
  209. package/dist/api/backend-registry/storage.js.map +1 -1
  210. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
  211. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
  212. package/dist/api/conversation-service/agent-server-conversation-service.api.d.ts +5 -4
  213. package/dist/api/conversation-service/agent-server-conversation-service.api.js +70 -76
  214. package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
  215. package/dist/api/skills-service.cjs +1 -1
  216. package/dist/api/skills-service.cjs.map +1 -1
  217. package/dist/api/skills-service.d.ts +1 -1
  218. package/dist/api/skills-service.js +2 -2
  219. package/dist/api/skills-service.js.map +1 -1
  220. package/dist/components/features/backends/api-key-entry-screen.d.ts +10 -0
  221. package/dist/components/features/backends/backend-form-modal.cjs +1 -1
  222. package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
  223. package/dist/components/features/backends/backend-form-modal.d.ts +23 -2
  224. package/dist/components/features/backends/backend-form-modal.js +185 -173
  225. package/dist/components/features/backends/backend-form-modal.js.map +1 -1
  226. package/dist/components/features/browser/browser.cjs +1 -1
  227. package/dist/components/features/browser/browser.cjs.map +1 -1
  228. package/dist/components/features/browser/browser.js +10 -16
  229. package/dist/components/features/browser/browser.js.map +1 -1
  230. package/dist/components/features/conversation-panel/skills-modal.cjs +1 -1
  231. package/dist/components/features/conversation-panel/skills-modal.cjs.map +1 -1
  232. package/dist/components/features/conversation-panel/skills-modal.js +1 -1
  233. package/dist/components/features/conversation-panel/skills-modal.js.map +1 -1
  234. package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
  235. package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
  236. package/dist/components/features/mcp-page/install-server-modal.js +123 -116
  237. package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
  238. package/dist/components/features/mcp-page/installed-server-card.cjs +1 -1
  239. package/dist/components/features/mcp-page/installed-server-card.cjs.map +1 -1
  240. package/dist/components/features/mcp-page/installed-server-card.js +40 -40
  241. package/dist/components/features/mcp-page/installed-server-card.js.map +1 -1
  242. package/dist/components/features/mcp-page/marketplace-card.cjs +1 -1
  243. package/dist/components/features/mcp-page/marketplace-card.cjs.map +1 -1
  244. package/dist/components/features/mcp-page/marketplace-card.js +2 -3
  245. package/dist/components/features/mcp-page/marketplace-card.js.map +1 -1
  246. package/dist/components/features/mcp-page/marketplace-section.cjs +1 -1
  247. package/dist/components/features/mcp-page/marketplace-section.cjs.map +1 -1
  248. package/dist/components/features/mcp-page/marketplace-section.js +21 -21
  249. package/dist/components/features/mcp-page/marketplace-section.js.map +1 -1
  250. package/dist/components/features/onboarding/steps/setup-acp-secrets-step.d.ts +27 -0
  251. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
  252. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +2 -0
  253. package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs +1 -1
  254. package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs.map +1 -1
  255. package/dist/components/features/settings/sdk-settings/sdk-section-page.d.ts +10 -1
  256. package/dist/components/features/settings/sdk-settings/sdk-section-page.js +87 -84
  257. package/dist/components/features/settings/sdk-settings/sdk-section-page.js.map +1 -1
  258. package/dist/constants/acp-providers.cjs +1 -1
  259. package/dist/constants/acp-providers.cjs.map +1 -1
  260. package/dist/constants/acp-providers.d.ts +25 -0
  261. package/dist/constants/acp-providers.js +1 -0
  262. package/dist/constants/acp-providers.js.map +1 -1
  263. package/dist/contexts/conversation-websocket-context.cjs +3 -3
  264. package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
  265. package/dist/contexts/conversation-websocket-context.js +177 -165
  266. package/dist/contexts/conversation-websocket-context.js.map +1 -1
  267. package/dist/hooks/chat/use-model-interceptor.cjs.map +1 -1
  268. package/dist/hooks/chat/use-model-interceptor.js.map +1 -1
  269. package/dist/hooks/chat/use-slash-command.cjs +1 -1
  270. package/dist/hooks/chat/use-slash-command.cjs.map +1 -1
  271. package/dist/hooks/chat/use-slash-command.js +1 -1
  272. package/dist/hooks/chat/use-slash-command.js.map +1 -1
  273. package/dist/hooks/mutation/use-switch-llm-profile.cjs.map +1 -1
  274. package/dist/hooks/mutation/use-switch-llm-profile.d.ts +1 -1
  275. package/dist/hooks/mutation/use-switch-llm-profile.js.map +1 -1
  276. package/dist/hooks/query/use-config.cjs +1 -1
  277. package/dist/hooks/query/use-config.cjs.map +1 -1
  278. package/dist/hooks/query/use-config.js +10 -10
  279. package/dist/hooks/query/use-config.js.map +1 -1
  280. package/dist/hooks/query/use-conversation-skills.cjs +2 -0
  281. package/dist/hooks/query/use-conversation-skills.cjs.map +1 -0
  282. package/dist/hooks/query/use-conversation-skills.d.ts +7 -0
  283. package/dist/hooks/query/use-conversation-skills.js +8 -0
  284. package/dist/hooks/query/use-conversation-skills.js.map +1 -0
  285. package/dist/hooks/query/use-local-git-info.cjs +3 -3
  286. package/dist/hooks/query/use-local-git-info.cjs.map +1 -1
  287. package/dist/hooks/query/use-local-git-info.js +24 -25
  288. package/dist/hooks/query/use-local-git-info.js.map +1 -1
  289. package/dist/hooks/query/use-skills.cjs +1 -1
  290. package/dist/hooks/query/use-skills.cjs.map +1 -1
  291. package/dist/hooks/query/use-skills.d.ts +6 -1
  292. package/dist/hooks/query/use-skills.js +3 -3
  293. package/dist/hooks/query/use-skills.js.map +1 -1
  294. package/dist/i18n/declaration.cjs +1 -1
  295. package/dist/i18n/declaration.cjs.map +1 -1
  296. package/dist/i18n/declaration.d.ts +7 -0
  297. package/dist/i18n/declaration.js +1 -1
  298. package/dist/i18n/declaration.js.map +1 -1
  299. package/dist/i18n/translation.cjs +2 -2
  300. package/dist/i18n/translation.cjs.map +1 -1
  301. package/dist/i18n/translation.js +119 -0
  302. package/dist/i18n/translation.js.map +1 -1
  303. package/dist/locales/ar/openhands.json +7 -0
  304. package/dist/locales/ca/openhands.json +7 -0
  305. package/dist/locales/de/openhands.json +7 -0
  306. package/dist/locales/en/openhands.json +7 -0
  307. package/dist/locales/es/openhands.json +7 -0
  308. package/dist/locales/fr/openhands.json +7 -0
  309. package/dist/locales/it/openhands.json +7 -0
  310. package/dist/locales/ja/openhands.json +7 -0
  311. package/dist/locales/ko-KR/openhands.json +7 -0
  312. package/dist/locales/no/openhands.json +7 -0
  313. package/dist/locales/pt/openhands.json +7 -0
  314. package/dist/locales/tr/openhands.json +7 -0
  315. package/dist/locales/uk/openhands.json +7 -0
  316. package/dist/locales/zh-CN/openhands.json +7 -0
  317. package/dist/locales/zh-TW/openhands.json +7 -0
  318. package/dist/package.cjs +1 -1
  319. package/dist/package.cjs.map +1 -1
  320. package/dist/package.js +3 -3
  321. package/dist/package.js.map +1 -1
  322. package/dist/routes/conversation.cjs +1 -1
  323. package/dist/routes/conversation.cjs.map +1 -1
  324. package/dist/routes/conversation.js +61 -63
  325. package/dist/routes/conversation.js.map +1 -1
  326. package/dist/routes/mcp.cjs +1 -1
  327. package/dist/routes/mcp.cjs.map +1 -1
  328. package/dist/routes/mcp.js +64 -64
  329. package/dist/routes/mcp.js.map +1 -1
  330. package/dist/stores/browser-store.cjs +1 -1
  331. package/dist/stores/browser-store.cjs.map +1 -1
  332. package/dist/stores/browser-store.js +1 -1
  333. package/dist/stores/browser-store.js.map +1 -1
  334. package/dist/stores/use-event-store.cjs +1 -1
  335. package/dist/stores/use-event-store.cjs.map +1 -1
  336. package/dist/stores/use-event-store.d.ts +22 -0
  337. package/dist/stores/use-event-store.js +9 -1
  338. package/dist/stores/use-event-store.js.map +1 -1
  339. package/dist/ui/context-menu.d.ts +1 -1
  340. package/dist/ui/help-link.d.ts +1 -1
  341. package/dist/utils/mcp-marketplace-utils.cjs +1 -1
  342. package/dist/utils/mcp-marketplace-utils.cjs.map +1 -1
  343. package/dist/utils/mcp-marketplace-utils.d.ts +13 -22
  344. package/dist/utils/mcp-marketplace-utils.js +46 -28
  345. package/dist/utils/mcp-marketplace-utils.js.map +1 -1
  346. package/dist/utils/sdk-settings-schema.cjs +1 -1
  347. package/dist/utils/sdk-settings-schema.cjs.map +1 -1
  348. package/dist/utils/sdk-settings-schema.d.ts +1 -0
  349. package/dist/utils/sdk-settings-schema.js +1 -1
  350. package/dist/utils/sdk-settings-schema.js.map +1 -1
  351. package/package.json +3 -3
  352. package/scripts/dev-safe.mjs +94 -57
  353. package/scripts/dev-static.mjs +2 -3
  354. package/scripts/dev-with-automation.mjs +98 -67
  355. package/scripts/static-server.mjs +77 -35
  356. package/tools/canvas_ui_tool.py +4 -0
  357. package/build/assets/acp-providers-DauuOsW9.js +0 -1
  358. package/build/assets/add-backend-modal-KMmPQNZU.js +0 -1
  359. package/build/assets/agent-server-client-options-DT2GP6VJ.js +0 -1
  360. package/build/assets/agent-server-compatibility-2aOx5iWd.js +0 -1
  361. package/build/assets/agent-server-conversation-service.api-DSl9G5UR.js +0 -5
  362. package/build/assets/backend-form-modal-K6IMCr3p.js +0 -1
  363. package/build/assets/browser-DKG63inJ.js +0 -5
  364. package/build/assets/browser-store-C3AqxAO7.js +0 -1
  365. package/build/assets/browser-tab-B_BuTvrO.js +0 -1
  366. package/build/assets/conversation-BD5WemJI.js +0 -19
  367. package/build/assets/conversation-C47K62n8.js +0 -1
  368. package/build/assets/conversation-panel-Dn-S56Gk.js +0 -1
  369. package/build/assets/conversation-websocket-context-Ywrxd_9p.js +0 -3
  370. package/build/assets/declaration-D378OjpZ.js +0 -1
  371. package/build/assets/files-tab-B3A1NDlZ.js +0 -1
  372. package/build/assets/git-control-bar-branch-button-CcIpmyfM.js +0 -27
  373. package/build/assets/home-dIzxi5Dd.js +0 -1
  374. package/build/assets/install-server-modal-z5VaHeXd.js +0 -1
  375. package/build/assets/llm-settings-2036m7Wt.js +0 -1
  376. package/build/assets/llm-settings-CcHqGOYL.js +0 -1
  377. package/build/assets/manifest-97e839da.js +0 -1
  378. package/build/assets/mcp-C06YssEI.js +0 -9
  379. package/build/assets/root-BS1Td78t.js +0 -2
  380. package/build/assets/sdk-section-page-CJW0G04-.js +0 -1
  381. package/build/assets/secrets-settings-MLXqOtX2.js +0 -1
  382. package/build/assets/use-active-conversation-D15D9GgR.js +0 -1
  383. package/build/assets/use-config-BSu_53GL.js +0 -1
  384. package/build/assets/use-conversation-id-DajhCn2A.js +0 -1
  385. package/build/assets/use-is-authed-hXC8vxgT.js +0 -1
  386. package/build/assets/use-runtime-is-ready-XFbT16BD.js +0 -1
  387. package/build/assets/use-skills-Xe0vjPMt.js +0 -1
  388. package/build/assets/use-unified-vscode-url-BOsIOd-b.js +0 -1
  389. package/build/assets/use-user-conversation-Mc0mQgkl.js +0 -1
  390. /package/build/assets/{automation-XLxhq3I8.js → automation-IdgZq6ZK.js} +0 -0
  391. /package/build/assets/{common-SMkEaBSr.js → common-DR1t-EeP.js} +0 -0
  392. /package/build/assets/{conversation-state-store-Bc0slAjL.js → conversation-state-store-u5jepov0.js} +0 -0
  393. /package/build/assets/{dist-yMQV8IUk.js → dist-BxBP7tFD.js} +0 -0
  394. /package/build/assets/{git-status-mapper-BI8FyUVp.js → git-status-mapper-DnL9OC8_.js} +0 -0
  395. /package/build/assets/{handle-capture-consent-BfZATzpI.js → handle-capture-consent-3XrjZ8wi.js} +0 -0
  396. /package/build/assets/{iconBase-C7N9pPOs.js → iconBase-DE30Zj_-.js} +0 -0
  397. /package/build/assets/{settings-D5am1n6X.js → settings-D_H-qsRm.js} +0 -0
  398. /package/build/assets/{settings-like-page-layout-classes-Bn-M9oOa.js → settings-like-page-layout-classes-I0BDBEoq.js} +0 -0
  399. /package/build/assets/{settings-utils-BsvSU3OM.js → settings-utils-B6Nl07io.js} +0 -0
  400. /package/build/assets/{sidebar-store-cOeaKmIm.js → sidebar-store-Uy3v0AOV.js} +0 -0
  401. /package/build/assets/{use-breakpoint-B86yKT9n.js → use-breakpoint-DbJ6FkQ-.js} +0 -0
  402. /package/build/assets/{use-click-outside-element-835W9pC6.js → use-click-outside-element-DffgWWoZ.js} +0 -0
  403. /package/build/assets/{vendor~browser-BpdPBhgZ.js → vendor~browser-DDiZgqD3.js} +0 -0
  404. /package/build/assets/{vendor~conversation-panel~conversation~alert-banner-Df7_G0zR.js → vendor~conversation-panel~conversation~alert-banner-DbvX3OcM.js} +0 -0
  405. /package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~b4cctr4k-B7YVdv1X.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~g56ukk6u-DsSvIDZQ.js} +0 -0
  406. /package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~i9dbt75i-CI82Did1.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~hkqzh1hb-BZ0HXuHD.js} +0 -0
  407. /package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~pfbaerbd-zhv9fooy.js → vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~ninslayh-D9P8e98a.js} +0 -0
  408. /package/build/assets/{vendor~terminal-BUxzHKcC.js → vendor~terminal-DUrOWGFE.js} +0 -0
  409. /package/build/assets/{vscode-url-helper-jesbpos5.js → vscode-url-helper-Cwy1A62q.js} +0 -0
@@ -1,42 +1,43 @@
1
1
  import { useTranslation as e } from "../../../node_modules/react-i18next/dist/es/useTranslation.js";
2
2
  import { I18nKey as t } from "../../../i18n/declaration.js";
3
3
  import { cn as n } from "../../../utils/utils.js";
4
- import { useActiveBackendContext as r } from "../../../contexts/active-backend-context.js";
5
- import { ServerClient as i } from "../../../node_modules/@openhands/typescript-client/dist/client/server-client.js";
6
- import { useQuery as a } from "../../../node_modules/@tanstack/react-query/build/modern/useQuery.js";
7
- import { getAgentServerClientOptions as o } from "../../../api/agent-server-client-options.js";
8
- import { ModalBackdrop as s } from "../../shared/modals/modal-backdrop.js";
9
- import { MODAL_MAX_WIDTH_VIEWPORT as c, modalWidthClassName as l } from "../../shared/modals/modal-body.js";
10
- import { ModalCloseButton as u } from "../../shared/modals/modal-close-button.js";
11
- import { BrandButton as d } from "../settings/brand-button.js";
12
- import { SettingsInput as f } from "../settings/settings-input.js";
13
- import { useBackendsHealth as p } from "../../../hooks/query/use-backends-health.js";
14
- import m from "../../../assets/branding/openhands-logo-white.js";
15
- import h from "../../../icons/chevron-down-small.js";
16
- import { BackendStatusDot as g } from "./backend-status-dot.js";
17
- import { DeviceFlowAuth as _ } from "./device-flow-auth.js";
18
- import v from "react";
19
- import { jsx as y, jsxs as b } from "react/jsx-runtime";
4
+ import { useNavigation as r } from "../../../context/navigation-context.js";
5
+ import { useActiveBackendContext as i } from "../../../contexts/active-backend-context.js";
6
+ import { ServerClient as a } from "../../../node_modules/@openhands/typescript-client/dist/client/server-client.js";
7
+ import { useQuery as o } from "../../../node_modules/@tanstack/react-query/build/modern/useQuery.js";
8
+ import { getAgentServerClientOptions as s } from "../../../api/agent-server-client-options.js";
9
+ import { ModalBackdrop as c } from "../../shared/modals/modal-backdrop.js";
10
+ import { MODAL_MAX_WIDTH_VIEWPORT as l, modalWidthClassName as u } from "../../shared/modals/modal-body.js";
11
+ import { ModalCloseButton as d } from "../../shared/modals/modal-close-button.js";
12
+ import { BrandButton as f } from "../settings/brand-button.js";
13
+ import { SettingsInput as p } from "../settings/settings-input.js";
14
+ import { useBackendsHealth as m } from "../../../hooks/query/use-backends-health.js";
15
+ import h from "../../../assets/branding/openhands-logo-white.js";
16
+ import g from "../../../icons/chevron-down-small.js";
17
+ import { BackendStatusDot as _ } from "./backend-status-dot.js";
18
+ import { DeviceFlowAuth as v } from "./device-flow-auth.js";
19
+ import y from "react";
20
+ import { jsx as b, jsxs as x } from "react/jsx-runtime";
20
21
  //#region src/components/features/backends/backend-form-modal.tsx
21
- function x(e) {
22
+ function S(e) {
22
23
  let t = e.trim().toLowerCase();
23
24
  return t.includes("all-hands.dev") || t.includes("openhands.dev") ? "cloud" : "local";
24
25
  }
25
- function S(e) {
26
+ function C(e) {
26
27
  let t = e.toLowerCase().replace(/^\[|\]$/g, "");
27
28
  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(":"));
28
29
  }
29
- function C(e) {
30
+ function w(e) {
30
31
  let t = e.trim().replace(/\/+$/, "");
31
32
  if (!t) return "";
32
33
  if (/^https?:\/\//i.test(t)) return t;
33
34
  let n = t.match(/^\[([^\]]+)\]/);
34
- return `${S(n ? n[1] : (t.match(/:/g) ?? []).length > 1 ? t : t.split(":")[0]) ? "http" : "https"}://${t}`;
35
+ return `${C(n ? n[1] : (t.match(/:/g) ?? []).length > 1 ? t : t.split(":")[0]) ? "http" : "https"}://${t}`;
35
36
  }
36
- function w(e) {
37
+ function T(e) {
37
38
  let t = e.trim();
38
39
  if (!t || /\s/.test(t)) return !1;
39
- let n = C(t);
40
+ let n = w(t);
40
41
  if (!n) return !1;
41
42
  try {
42
43
  let e = new URL(n);
@@ -45,15 +46,15 @@ function w(e) {
45
46
  return !1;
46
47
  }
47
48
  }
48
- var T = "https://app.all-hands.dev";
49
- function E({ backend: n, testIdRoot: r }) {
50
- let { t: s } = e("openhands"), c = p([n])[n.id], l = c?.isConnected ?? null, u = c?.disabled === !0, d = c?.consecutiveFailures ?? 0, f = c?.lastError ?? null, { data: m } = a({
49
+ var E = "https://app.all-hands.dev";
50
+ function D({ backend: n, testIdRoot: r }) {
51
+ let { t: i } = e("openhands"), c = m([n])[n.id], l = c?.isConnected ?? null, u = c?.disabled === !0, d = c?.consecutiveFailures ?? 0, f = c?.lastError ?? null, { data: p } = o({
51
52
  queryKey: [
52
53
  "backend-version",
53
54
  n.host,
54
55
  n.apiKey
55
56
  ],
56
- queryFn: async () => (await new i(o({
57
+ queryFn: async () => (await new a(s({
57
58
  host: n.host,
58
59
  sessionApiKey: n.apiKey || null,
59
60
  timeout: 5e3
@@ -62,47 +63,47 @@ function E({ backend: n, testIdRoot: r }) {
62
63
  staleTime: 6e4,
63
64
  enabled: n.kind === "local" && !u
64
65
  }), h;
65
- h = s(l === !0 ? t.ONBOARDING$BACKEND_STATUS_CONNECTED : l === !1 ? t.ONBOARDING$BACKEND_STATUS_DISCONNECTED : t.ONBOARDING$BACKEND_STATUS_CHECKING);
66
- let _ = n.kind === "cloud" ? s(t.BACKEND$KIND_CLOUD) : s(t.BACKEND$KIND_LOCAL);
67
- return /* @__PURE__ */ b("div", {
66
+ h = i(l === !0 ? t.ONBOARDING$BACKEND_STATUS_CONNECTED : l === !1 ? t.ONBOARDING$BACKEND_STATUS_DISCONNECTED : t.ONBOARDING$BACKEND_STATUS_CHECKING);
67
+ let g = n.kind === "cloud" ? i(t.BACKEND$KIND_CLOUD) : i(t.BACKEND$KIND_LOCAL);
68
+ return /* @__PURE__ */ x("div", {
68
69
  className: "flex flex-col gap-2",
69
- children: [/* @__PURE__ */ b("div", {
70
+ children: [/* @__PURE__ */ x("div", {
70
71
  "data-testid": `${r}-status`,
71
72
  className: "flex items-center gap-3 text-sm",
72
73
  children: [
73
- /* @__PURE__ */ y(g, { isConnected: l }),
74
- /* @__PURE__ */ y("span", {
74
+ /* @__PURE__ */ b(_, { isConnected: l }),
75
+ /* @__PURE__ */ b("span", {
75
76
  className: "text-white",
76
77
  "data-testid": `${r}-status-label`,
77
78
  children: h
78
79
  }),
79
- /* @__PURE__ */ y("span", {
80
+ /* @__PURE__ */ b("span", {
80
81
  className: "text-tertiary-alt",
81
82
  children: "·"
82
83
  }),
83
- /* @__PURE__ */ y("span", {
84
+ /* @__PURE__ */ b("span", {
84
85
  className: "text-[var(--oh-text-tertiary)]",
85
- children: _
86
+ children: g
86
87
  }),
87
- m ? /* @__PURE__ */ y("span", {
88
+ p ? /* @__PURE__ */ b("span", {
88
89
  className: "text-xs text-[var(--oh-muted)]",
89
90
  "data-testid": `${r}-version`,
90
- children: s(t.BACKEND$VERSION_LABEL, { version: m })
91
+ children: i(t.BACKEND$VERSION_LABEL, { version: p })
91
92
  }) : null
92
93
  ]
93
- }), u ? /* @__PURE__ */ b("div", {
94
+ }), u ? /* @__PURE__ */ x("div", {
94
95
  "data-testid": `${r}-status-error`,
95
96
  className: "flex flex-col gap-1 rounded-md border border-red-500/40 bg-red-500/10 p-3 text-sm",
96
97
  children: [
97
- /* @__PURE__ */ y("span", {
98
+ /* @__PURE__ */ b("span", {
98
99
  className: "font-semibold text-red-300",
99
- children: s(t.BACKEND$HEALTH_FAILED_TITLE)
100
+ children: i(t.BACKEND$HEALTH_FAILED_TITLE)
100
101
  }),
101
- /* @__PURE__ */ y("span", {
102
+ /* @__PURE__ */ b("span", {
102
103
  className: "text-xs text-[var(--oh-text-tertiary)]",
103
- children: s(t.BACKEND$HEALTH_FAILED_DETAIL, { count: d })
104
+ children: i(t.BACKEND$HEALTH_FAILED_DETAIL, { count: d })
104
105
  }),
105
- f ? /* @__PURE__ */ y("span", {
106
+ f ? /* @__PURE__ */ b("span", {
106
107
  "data-testid": `${r}-status-error-message`,
107
108
  className: "text-xs text-red-300 whitespace-pre-wrap break-words",
108
109
  children: f
@@ -111,213 +112,224 @@ function E({ backend: n, testIdRoot: r }) {
111
112
  }) : null]
112
113
  });
113
114
  }
114
- function D({ mode: n, backend: i, onSubmitted: a, renderActions: o, testIdRoot: s }) {
115
- let { t: c } = e("openhands"), { addBackend: l, updateBackend: u } = r(), [p, m] = v.useState(i?.name ?? ""), [h, g] = v.useState(i?.host ?? ""), [_, S] = v.useState(i?.apiKey ?? ""), [D, O] = v.useState(!1), [k, A] = v.useState(!1), j = x(h), M = s ?? (n === "edit" ? "edit-backend" : "add-backend"), N = p.trim().length > 0 && w(h) && (j === "local" || _.trim().length > 0), P = D && !p.trim() ? c(t.BACKEND$NAME_REQUIRED) : void 0, F = k ? h.trim() ? w(h) ? void 0 : c(t.BACKEND$HOST_INVALID) : c(t.BACKEND$HOST_REQUIRED) : void 0;
116
- return /* @__PURE__ */ b("form", {
117
- "data-testid": `${M}-form`,
118
- onSubmit: (e) => {
119
- if (e.preventDefault(), !N) {
120
- O(!0), A(!0);
115
+ function O({ mode: n, backend: r, onSubmitted: a, renderActions: o, testIdRoot: s, hostReadOnly: c, requireApiKey: l, onSubmitOverride: u }) {
116
+ let { t: d } = e("openhands"), { addBackend: m, updateBackend: h } = i(), [g, _] = y.useState(r?.name ?? ""), [v, C] = y.useState(r?.host ?? ""), [O, k] = y.useState(r?.apiKey ?? ""), [A, j] = y.useState(!1), [M, N] = y.useState(!1), P = S(v), F = s ?? (n === "edit" ? "edit-backend" : "add-backend"), I = l || P !== "local", L = g.trim().length > 0 && T(v) && (!I || O.trim().length > 0), R = A && !g.trim() ? d(t.BACKEND$NAME_REQUIRED) : void 0, z = M ? v.trim() ? T(v) ? void 0 : d(t.BACKEND$HOST_INVALID) : d(t.BACKEND$HOST_REQUIRED) : void 0;
117
+ return /* @__PURE__ */ x("form", {
118
+ "data-testid": `${F}-form`,
119
+ onSubmit: async (e) => {
120
+ if (e.preventDefault(), !L) {
121
+ j(!0), N(!0);
121
122
  return;
122
123
  }
123
124
  let t = {
124
- name: p.trim(),
125
- host: C(h),
126
- apiKey: _.trim(),
127
- kind: j
125
+ name: g.trim(),
126
+ host: w(v),
127
+ apiKey: O.trim(),
128
+ kind: P
128
129
  };
129
- n === "edit" && i ? u(i.id, t) : l(t), a();
130
+ if (u) {
131
+ await u(t);
132
+ return;
133
+ }
134
+ n === "edit" && r ? h(r.id, t) : m(t), a();
130
135
  },
131
136
  className: "flex flex-col gap-4",
132
137
  children: [
133
- /* @__PURE__ */ y(f, {
134
- testId: `${M}-name`,
135
- name: `${M}-name`,
138
+ /* @__PURE__ */ b(p, {
139
+ testId: `${F}-name`,
140
+ name: `${F}-name`,
136
141
  type: "text",
137
- label: c(t.BACKEND$NAME_LABEL),
138
- value: p,
139
- onChange: m,
140
- onBlur: () => O(!0),
142
+ label: d(t.BACKEND$NAME_LABEL),
143
+ value: g,
144
+ onChange: _,
145
+ onBlur: () => j(!0),
141
146
  placeholder: "Production",
142
147
  className: "w-full",
143
148
  showRequiredTag: !0,
144
- error: P
149
+ error: R
145
150
  }),
146
- /* @__PURE__ */ y(f, {
147
- testId: `${M}-host`,
148
- name: `${M}-host`,
151
+ /* @__PURE__ */ b(p, {
152
+ testId: `${F}-host`,
153
+ name: `${F}-host`,
149
154
  type: "text",
150
- label: c(t.BACKEND$HOST_LABEL),
151
- value: h,
152
- onChange: g,
153
- onBlur: () => A(!0),
154
- placeholder: T,
155
+ label: d(t.BACKEND$HOST_LABEL),
156
+ value: v,
157
+ onChange: c ? void 0 : C,
158
+ onBlur: () => N(!0),
159
+ placeholder: E,
155
160
  className: "w-full",
156
161
  showRequiredTag: !0,
157
- error: F
162
+ error: z,
163
+ isDisabled: c
158
164
  }),
159
- /* @__PURE__ */ y(f, {
160
- testId: `${M}-api-key`,
161
- name: `${M}-api-key`,
165
+ /* @__PURE__ */ b(p, {
166
+ testId: `${F}-api-key`,
167
+ name: `${F}-api-key`,
162
168
  type: "password",
163
- label: c(t.BACKEND$KEY_LABEL),
164
- value: _,
165
- onChange: S,
169
+ label: d(t.BACKEND$KEY_LABEL),
170
+ value: O,
171
+ onChange: k,
166
172
  placeholder: "",
167
173
  className: "w-full"
168
174
  }),
169
- n === "edit" && i && /* @__PURE__ */ y(E, {
170
- backend: i,
171
- testIdRoot: M
175
+ n === "edit" && r && /* @__PURE__ */ b(D, {
176
+ backend: r,
177
+ testIdRoot: F
172
178
  }),
173
179
  o ? o({
174
- canSubmit: N,
175
- testIdRoot: M
176
- }) : /* @__PURE__ */ b("div", {
180
+ canSubmit: L,
181
+ testIdRoot: F
182
+ }) : /* @__PURE__ */ x("div", {
177
183
  className: "flex justify-end gap-2 mt-2 w-full",
178
- children: [/* @__PURE__ */ y(d, {
184
+ children: [/* @__PURE__ */ b(f, {
179
185
  type: "button",
180
186
  variant: "secondary",
181
187
  onClick: a,
182
- testId: `${M}-cancel`,
183
- children: c(t.BUTTON$CANCEL)
184
- }), /* @__PURE__ */ y(d, {
188
+ testId: `${F}-cancel`,
189
+ children: d(t.BUTTON$CANCEL)
190
+ }), /* @__PURE__ */ b(f, {
185
191
  type: "submit",
186
192
  variant: "primary",
187
- isDisabled: !N,
188
- testId: `${M}-submit`,
189
- children: c(t.BACKEND$SAVE)
193
+ isDisabled: !L,
194
+ testId: `${F}-submit`,
195
+ children: d(t.BACKEND$SAVE)
190
196
  })]
191
197
  })
192
198
  ]
193
199
  });
194
200
  }
195
- function O({ onClose: n }) {
196
- let { t: i } = e("openhands"), { addBackend: a } = r(), [o, s] = v.useState(""), [c, l] = v.useState(""), [u, p] = v.useState(""), m = x(c), h = o.trim().length > 0 && w(c) && (m === "local" || u.trim().length > 0);
197
- return /* @__PURE__ */ b("form", {
201
+ function k() {
202
+ let { currentPath: e, navigate: t } = r();
203
+ return y.useCallback(() => {
204
+ /^\/automations\/[^/]+/.test(e) ? t("/automations") : /^\/conversations\/[^/]+/.test(e) && t("/conversations");
205
+ }, [e, t]);
206
+ }
207
+ function A({ onClose: n }) {
208
+ let { t: r } = e("openhands"), { addBackend: a } = i(), o = k(), [s, c] = y.useState(""), [l, u] = y.useState(""), [d, m] = y.useState(""), h = S(l), g = s.trim().length > 0 && T(l) && (h === "local" || d.trim().length > 0);
209
+ return /* @__PURE__ */ x("form", {
198
210
  "data-testid": "add-backend-form",
199
211
  onSubmit: (e) => {
200
- e.preventDefault(), h && (a({
201
- name: o.trim(),
202
- host: C(c),
203
- apiKey: u.trim(),
204
- kind: m
205
- }), n());
212
+ e.preventDefault(), g && (a({
213
+ name: s.trim(),
214
+ host: w(l),
215
+ apiKey: d.trim(),
216
+ kind: h
217
+ }), o(), n());
206
218
  },
207
219
  className: "flex flex-col gap-4 flex-1 min-w-0",
208
220
  children: [
209
- /* @__PURE__ */ b("div", {
221
+ /* @__PURE__ */ x("div", {
210
222
  className: "flex flex-col gap-1",
211
- children: [/* @__PURE__ */ y(f, {
223
+ children: [/* @__PURE__ */ b(p, {
212
224
  testId: "add-backend-name",
213
225
  name: "add-backend-name",
214
226
  type: "text",
215
- label: i(t.BACKEND$NAME_LABEL),
216
- value: o,
217
- onChange: s,
227
+ label: r(t.BACKEND$NAME_LABEL),
228
+ value: s,
229
+ onChange: c,
218
230
  placeholder: "e.g. My Server",
219
231
  className: "w-full"
220
- }), /* @__PURE__ */ y("p", {
232
+ }), /* @__PURE__ */ b("p", {
221
233
  className: "text-xs text-[var(--oh-muted)]",
222
- children: i(t.BACKEND$NAME_HELPER)
234
+ children: r(t.BACKEND$NAME_HELPER)
223
235
  })]
224
236
  }),
225
- /* @__PURE__ */ b("div", {
237
+ /* @__PURE__ */ x("div", {
226
238
  className: "flex flex-col gap-1",
227
- children: [/* @__PURE__ */ y(f, {
239
+ children: [/* @__PURE__ */ b(p, {
228
240
  testId: "add-backend-host",
229
241
  name: "add-backend-host",
230
242
  type: "text",
231
- label: i(t.BACKEND$HOST_LABEL),
232
- value: c,
233
- onChange: l,
243
+ label: r(t.BACKEND$HOST_LABEL),
244
+ value: l,
245
+ onChange: u,
234
246
  placeholder: "http://localhost:8000",
235
247
  className: "w-full"
236
- }), /* @__PURE__ */ y("p", {
248
+ }), /* @__PURE__ */ b("p", {
237
249
  className: "text-xs text-[var(--oh-muted)]",
238
250
  "data-testid": "add-backend-host-helper",
239
- children: i(t.BACKEND$HOST_HELPER)
251
+ children: r(t.BACKEND$HOST_HELPER)
240
252
  })]
241
253
  }),
242
- /* @__PURE__ */ y(f, {
254
+ /* @__PURE__ */ b(p, {
243
255
  testId: "add-backend-api-key",
244
256
  name: "add-backend-api-key",
245
257
  type: "password",
246
- label: i(t.BACKEND$KEY_LABEL),
247
- value: u,
248
- onChange: p,
258
+ label: r(t.BACKEND$KEY_LABEL),
259
+ value: d,
260
+ onChange: m,
249
261
  placeholder: "sk-••••••••••",
250
262
  className: "w-full"
251
263
  }),
252
- /* @__PURE__ */ y(d, {
264
+ /* @__PURE__ */ b(f, {
253
265
  type: "submit",
254
266
  variant: "secondary",
255
- isDisabled: !h,
267
+ isDisabled: !g,
256
268
  testId: "add-backend-submit",
257
269
  className: "w-full text-center",
258
- children: i(t.BACKEND$CONNECT)
270
+ children: r(t.BACKEND$CONNECT)
259
271
  })
260
272
  ]
261
273
  });
262
274
  }
263
- function k({ onClose: i }) {
264
- let { t: a } = e("openhands"), { addBackend: o } = r(), [s, c] = v.useState(!1), [l, u] = v.useState(""), d = l.trim() || T;
265
- return /* @__PURE__ */ b("div", {
275
+ function j({ onClose: r }) {
276
+ let { t: a } = e("openhands"), { addBackend: o } = i(), s = k(), [c, l] = y.useState(!1), [u, d] = y.useState(""), f = u.trim() || E;
277
+ return /* @__PURE__ */ x("div", {
266
278
  className: "flex flex-1 min-w-0 flex-col items-center gap-3",
267
279
  children: [
268
- /* @__PURE__ */ b("div", {
280
+ /* @__PURE__ */ x("div", {
269
281
  className: "flex flex-col items-center gap-1",
270
- children: [/* @__PURE__ */ y(m, {
282
+ children: [/* @__PURE__ */ b(h, {
271
283
  width: 56,
272
284
  height: 56,
273
285
  "aria-hidden": !0
274
- }), /* @__PURE__ */ y("h4", {
286
+ }), /* @__PURE__ */ b("h4", {
275
287
  className: "text-lg font-medium text-white",
276
288
  "data-testid": "add-backend-cloud-title",
277
289
  children: a(t.BACKEND$CLOUD_TITLE)
278
290
  })]
279
291
  }),
280
- /* @__PURE__ */ y("p", {
292
+ /* @__PURE__ */ b("p", {
281
293
  className: "text-center text-sm leading-relaxed text-[var(--oh-muted)]",
282
294
  children: a(t.BACKEND$CLOUD_DESCRIPTION)
283
295
  }),
284
- /* @__PURE__ */ y(_, {
285
- host: d,
296
+ /* @__PURE__ */ b(v, {
297
+ host: f,
286
298
  onSuccess: (e) => {
287
299
  o({
288
300
  name: "OpenHands Cloud",
289
- host: C(d),
301
+ host: w(f),
290
302
  apiKey: e,
291
303
  kind: "cloud"
292
- }), i();
304
+ }), s(), r();
293
305
  },
294
306
  testIdRoot: "add-backend"
295
307
  }),
296
- /* @__PURE__ */ b("div", {
308
+ /* @__PURE__ */ x("div", {
297
309
  className: "w-full",
298
- children: [/* @__PURE__ */ b("button", {
310
+ children: [/* @__PURE__ */ x("button", {
299
311
  type: "button",
300
- onClick: () => c((e) => !e),
301
- "aria-expanded": s,
312
+ onClick: () => l((e) => !e),
313
+ "aria-expanded": c,
302
314
  "data-testid": "add-backend-advanced-toggle",
303
315
  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",
304
- children: [/* @__PURE__ */ y("span", { children: a(t.BACKEND$ADVANCED) }), /* @__PURE__ */ y(h, {
305
- className: n("h-4 w-4 shrink-0 text-muted transition-transform", s && "rotate-180"),
316
+ children: [/* @__PURE__ */ b("span", { children: a(t.BACKEND$ADVANCED) }), /* @__PURE__ */ b(g, {
317
+ className: n("h-4 w-4 shrink-0 text-muted transition-transform", c && "rotate-180"),
306
318
  "aria-hidden": !0
307
319
  })]
308
- }), /* @__PURE__ */ b("div", {
309
- className: n("pt-2", !s && "pointer-events-none invisible"),
310
- "aria-hidden": !s,
311
- children: [/* @__PURE__ */ y(f, {
320
+ }), /* @__PURE__ */ x("div", {
321
+ className: n("pt-2", !c && "pointer-events-none invisible"),
322
+ "aria-hidden": !c,
323
+ children: [/* @__PURE__ */ b(p, {
312
324
  testId: "add-backend-cloud-host",
313
325
  name: "add-backend-cloud-host",
314
326
  type: "text",
315
327
  label: a(t.BACKEND$HOST_LABEL),
316
- value: l,
317
- onChange: u,
318
- placeholder: T,
328
+ value: u,
329
+ onChange: d,
330
+ placeholder: E,
319
331
  className: "w-full"
320
- }), /* @__PURE__ */ y("p", {
332
+ }), /* @__PURE__ */ b("p", {
321
333
  className: "mt-1 text-xs text-[var(--oh-muted)]",
322
334
  children: a(t.BACKEND$LOGIN_CLOUD_HINT)
323
335
  })]
@@ -326,82 +338,82 @@ function k({ onClose: i }) {
326
338
  ]
327
339
  });
328
340
  }
329
- function A({ mode: r, backend: i, onClose: a }) {
341
+ function M({ mode: r, backend: i, onClose: a }) {
330
342
  let { t: o } = e("openhands");
331
- if (r === "add") return /* @__PURE__ */ y(s, {
343
+ if (r === "add") return /* @__PURE__ */ b(c, {
332
344
  onClose: a,
333
345
  closeOnEscape: !1,
334
346
  "aria-label": o(t.BACKEND$ADD_TITLE),
335
- children: /* @__PURE__ */ b("div", {
347
+ children: /* @__PURE__ */ x("div", {
336
348
  "data-testid": "add-backend-modal",
337
- className: n("relative rounded-xl border border-[var(--oh-border)] bg-base-secondary", l("xl"), c),
349
+ className: n("relative rounded-xl border border-[var(--oh-border)] bg-base-secondary", u("xl"), l),
338
350
  children: [
339
- /* @__PURE__ */ y(u, {
351
+ /* @__PURE__ */ b(d, {
340
352
  onClose: a,
341
353
  testId: "add-backend-close"
342
354
  }),
343
- /* @__PURE__ */ y("div", {
355
+ /* @__PURE__ */ b("div", {
344
356
  className: "px-6 pt-6 pb-2 pr-12",
345
- children: /* @__PURE__ */ y("h2", {
357
+ children: /* @__PURE__ */ b("h2", {
346
358
  className: "text-lg font-semibold",
347
359
  children: o(t.BACKEND$ADD_TITLE)
348
360
  })
349
361
  }),
350
- /* @__PURE__ */ b("div", {
362
+ /* @__PURE__ */ x("div", {
351
363
  className: "flex gap-6 px-6 pb-6 pt-2",
352
364
  children: [
353
- /* @__PURE__ */ y("div", {
365
+ /* @__PURE__ */ b("div", {
354
366
  className: "flex-1 min-w-0",
355
- children: /* @__PURE__ */ y(O, { onClose: a })
367
+ children: /* @__PURE__ */ b(A, { onClose: a })
356
368
  }),
357
- /* @__PURE__ */ b("div", {
369
+ /* @__PURE__ */ x("div", {
358
370
  className: "flex shrink-0 flex-col items-center",
359
371
  children: [
360
- /* @__PURE__ */ y("div", { className: "flex-1 w-px bg-[var(--oh-border)]" }),
361
- /* @__PURE__ */ y("span", {
372
+ /* @__PURE__ */ b("div", { className: "flex-1 w-px bg-[var(--oh-border)]" }),
373
+ /* @__PURE__ */ b("span", {
362
374
  className: "py-3 text-xs uppercase text-[var(--oh-muted)]",
363
375
  children: o(t.BACKEND$LOGIN_OR)
364
376
  }),
365
- /* @__PURE__ */ y("div", { className: "flex-1 w-px bg-[var(--oh-border)]" })
377
+ /* @__PURE__ */ b("div", { className: "flex-1 w-px bg-[var(--oh-border)]" })
366
378
  ]
367
379
  }),
368
- /* @__PURE__ */ y("div", {
380
+ /* @__PURE__ */ b("div", {
369
381
  className: "flex-1 min-w-0",
370
- children: /* @__PURE__ */ y(k, { onClose: a })
382
+ children: /* @__PURE__ */ b(j, { onClose: a })
371
383
  })
372
384
  ]
373
385
  })
374
386
  ]
375
387
  })
376
388
  });
377
- let d = "edit-backend";
378
- return /* @__PURE__ */ y(s, {
389
+ let s = "edit-backend";
390
+ return /* @__PURE__ */ b(c, {
379
391
  onClose: a,
380
392
  closeOnEscape: !1,
381
393
  "aria-label": o(t.BACKEND$EDIT_TITLE),
382
- children: /* @__PURE__ */ b("div", {
383
- "data-testid": `${d}-modal`,
384
- className: n("relative bg-base-secondary p-6 rounded-xl flex flex-col gap-4 border border-[var(--oh-border)]", l("md")),
394
+ children: /* @__PURE__ */ x("div", {
395
+ "data-testid": `${s}-modal`,
396
+ className: n("relative bg-base-secondary p-6 rounded-xl flex flex-col gap-4 border border-[var(--oh-border)]", u("md")),
385
397
  children: [
386
- /* @__PURE__ */ y(u, {
398
+ /* @__PURE__ */ b(d, {
387
399
  onClose: a,
388
- testId: `${d}-close`
400
+ testId: `${s}-close`
389
401
  }),
390
- /* @__PURE__ */ y("h2", {
402
+ /* @__PURE__ */ b("h2", {
391
403
  className: "pr-6 text-lg font-semibold",
392
404
  children: o(t.BACKEND$EDIT_TITLE)
393
405
  }),
394
- /* @__PURE__ */ y(D, {
406
+ /* @__PURE__ */ b(O, {
395
407
  mode: "edit",
396
408
  backend: i,
397
409
  onSubmitted: a,
398
- testIdRoot: d
410
+ testIdRoot: s
399
411
  })
400
412
  ]
401
413
  })
402
414
  });
403
415
  }
404
416
  //#endregion
405
- export { A as BackendFormModal };
417
+ export { M as BackendFormModal };
406
418
 
407
419
  //# sourceMappingURL=backend-form-modal.js.map