@openhands/agent-canvas 1.7.2 → 1.9.0

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 (599) hide show
  1. package/README.md +1 -1
  2. package/README.windows.md +2 -2
  3. package/build/assets/{Trans-DP5rcauH.js → Trans-Bwpzk1wT.js} +1 -1
  4. package/build/assets/{acp-providers-BHKZvEm5.js → acp-providers-C921BlYB.js} +1 -1
  5. package/build/assets/active-backend-context-BiwzkzDy.js +2 -0
  6. package/build/assets/agent-context-settings-DXNT_dcw.js +1 -0
  7. package/build/assets/agent-profiles-settings-BymJf3EP.js +1 -0
  8. package/build/assets/agent-server-conversation-service.api-CYSWw-2g.js +41 -0
  9. package/build/assets/agent-settings-BjgQQe-_.js +1 -0
  10. package/build/assets/{agent-settings-BIOsUglV.js → agent-settings-WzqXk6B4.js} +2 -2
  11. package/build/assets/{alert-banner-C1nzoXBC.js → alert-banner-DR8EVyZM.js} +1 -1
  12. package/build/assets/api-error-message-e16L1kwH.js +1 -0
  13. package/build/assets/api-key-entry-screen-DI0I04O3.js +1 -0
  14. package/build/assets/app-settings-DGistSFV.js +1 -0
  15. package/build/assets/automation-C_eCrGyP.js +1 -0
  16. package/build/assets/automation-detail-DY6x2FW1.js +2 -0
  17. package/build/assets/automation-export-C09f-Lua.js +2 -0
  18. package/build/assets/automation-setup-route-CqKp0717.js +1 -0
  19. package/build/assets/automations-list-CqWJ7qXW.js +1 -0
  20. package/build/assets/{back-nav-button-Be_L157B.js → back-nav-button-D4ngzpSh.js} +1 -1
  21. package/build/assets/backend-form-modal-B8D5hBzK.js +1 -0
  22. package/build/assets/{backend-synced-settings-badge-BNpEylNP.js → backend-synced-settings-badge-BnzI8Ysj.js} +1 -1
  23. package/build/assets/{badge-DwgrwohM.js → badge-1Mf1iPcX.js} +1 -1
  24. package/build/assets/{base-modal-CSHhJTSr.js → base-modal-BBuy0WQQ.js} +1 -1
  25. package/build/assets/{brand-button-CQO8oqVo.js → brand-button-DGN6Y9o6.js} +1 -1
  26. package/build/assets/browser-D_ekTlTS.js +6 -0
  27. package/build/assets/{browser-tab-CEApjoEV.js → browser-tab-D4a4Ou_w.js} +1 -1
  28. package/build/assets/{chat-send-button-D4614wUz.js → chat-send-button-CgbcjD97.js} +1 -1
  29. package/build/assets/check-CPLXgluF.js +1 -0
  30. package/build/assets/chevron-down-CP4QHvyc.js +1 -0
  31. package/build/assets/circle-check-Dpy2_xSI.js +1 -0
  32. package/build/assets/{circle-plus-check-toggle-E3Ecb_gg.js → circle-plus-check-toggle-yTAS-nX3.js} +1 -1
  33. package/build/assets/cloud-funnel-analytics-CEOl5Gxr.js +1 -0
  34. package/build/assets/{combobox-caret-C8_eGdp2.js → combobox-caret-Bd2yySnF.js} +1 -1
  35. package/build/assets/command-menu-Bj6X4ckE.js +1 -0
  36. package/build/assets/condenser-settings-EAXQNR2E.js +1 -0
  37. package/build/assets/{confirmation-modal-gZtbojCm.js → confirmation-modal-NCUPr2-O.js} +1 -1
  38. package/build/assets/{context-menu-list-item-BTHGFhIx.js → context-menu-list-item-CrCrYuPF.js} +1 -1
  39. package/build/assets/conversation-BzyIcSwr.js +1 -0
  40. package/build/assets/conversation-CUJ0Vo8g.js +90 -0
  41. package/build/assets/conversation-panel-BzyIcSwr.js +1 -0
  42. package/build/assets/conversation-state-store-F62HvuI1.js +1 -0
  43. package/build/assets/{conversation-tab-empty-state-BCMHkGQk.js → conversation-tab-empty-state-BCZ7rUMH.js} +1 -1
  44. package/build/assets/{copy-B8Y5ufoR.js → copy-DCmZtz6n.js} +1 -1
  45. package/build/assets/{copy-to-clipboard-button-C4l3CMSd.js → copy-to-clipboard-button-D_Lp6-Fl.js} +1 -1
  46. package/build/assets/{device-verify-C_M7Z8xs.js → device-verify-DLmolX8Q.js} +1 -1
  47. package/build/assets/{dropdown-classes-DQlj-MpS.js → dropdown-classes-BB8rzqXL.js} +1 -1
  48. package/build/assets/{entry.client-DETaouwO.js → entry.client-BbIYOsIg.js} +2 -2
  49. package/build/assets/{enum-filter-dropdown-paB-lFSP.js → enum-filter-dropdown-C08-srev.js} +1 -1
  50. package/build/assets/{environment-switch-overlay-D0FgCMqs.js → environment-switch-overlay-BepBBX66.js} +1 -1
  51. package/build/assets/extensions-hub-R3KNv-5V.js +1 -0
  52. package/build/assets/extensions-navigation-CfWFmI1I.js +1 -0
  53. package/build/assets/{external-link-Cnnd6ikC.js → external-link-BdBSg8rk.js} +1 -1
  54. package/build/assets/files-tab-DEq8MbHu.js +1 -0
  55. package/build/assets/{form-control-classes-CSPevi7c.js → form-control-classes-DAfsCJTe.js} +1 -1
  56. package/build/assets/{format-time-delta-DuhE50B-.js → format-time-delta-CxfPJpzC.js} +1 -1
  57. package/build/assets/git-provider-icon-BZqqUPlm.js +1 -0
  58. package/build/assets/git-repo-dropdown-9WKINV6J.js +1 -0
  59. package/build/assets/git-repo-dropdown-DEpOwUez.js +1 -0
  60. package/build/assets/{highlighted-source-view-suUKd5if.js → highlighted-source-view-CX9oIoVT.js} +1 -1
  61. package/build/assets/home-CY0JaxiY.js +1 -0
  62. package/build/assets/home-CaNWlVvB.js +1 -0
  63. package/build/assets/home-store-Ch1ErdBc.js +1 -0
  64. package/build/assets/index-home-CaNWlVvB.js +1 -0
  65. package/build/assets/info-CmWQXtRQ.js +1 -0
  66. package/build/assets/install-server-modal-BWrudmZU.js +1 -0
  67. package/build/assets/{launch-Ccnhte5b.js → launch-B1POpHuP.js} +1 -1
  68. package/build/assets/{list-todo-_BXQzOiB.js → list-todo-DtiL3lTp.js} +1 -1
  69. package/build/assets/llm-not-configured-banner-3tMsM4K6.js +27 -0
  70. package/build/assets/llm-settings-CXo8iPNW.js +1 -0
  71. package/build/assets/llm-settings-D0W8mJDk.js +1 -0
  72. package/build/assets/{llm-subscription-service-W5BprsNA.js → llm-subscription-service-DBJbfd8Z.js} +1 -1
  73. package/build/assets/loader-circle-B4QDBARx.js +1 -0
  74. package/build/assets/{loading-spinner-CcpnCr_d.js → loading-spinner-DfZ_bhV7.js} +1 -1
  75. package/build/assets/manage-backends-modal-CwyWsiag.js +1 -0
  76. package/build/assets/manifest-39f4789d.js +1 -0
  77. package/build/assets/{markdown-renderer-CvOO0YIr.js → markdown-renderer-DgiLLhW6.js} +6 -6
  78. package/build/assets/mcp-DXG9LWrI.js +9 -0
  79. package/build/assets/mcp-marketplace-utils-DFmhKc5s.js +1 -0
  80. package/build/assets/messages-kBjKaAeA.js +40 -0
  81. package/build/assets/{modal-body-DQhiw-AR.js → modal-body-CMsDpalT.js} +1 -1
  82. package/build/assets/{modal-classes-YaEEa5eZ.js → modal-classes-B6PDrxXo.js} +1 -1
  83. package/build/assets/{modal-close-button-turIYn0t.js → modal-close-button-DyxBZaAb.js} +1 -1
  84. package/build/assets/{onboarding-BegDrOKn.js → onboarding-47hh2IHA.js} +1 -1
  85. package/build/assets/onboarding-modal-9BuvvROo.js +1 -0
  86. package/build/assets/organization-service.api-UDy63-oC.js +1 -0
  87. package/build/assets/{pencil-8_lvWDoZ.js → pencil-BjgtZmWp.js} +1 -1
  88. package/build/assets/{planner-tab-w6HT0N_A.js → planner-tab-BWk8885v.js} +1 -1
  89. package/build/assets/plugins-management-service-CjkgF2dd.js +1 -0
  90. package/build/assets/plus-DrKuuvMe.js +1 -0
  91. package/build/assets/profiles-service.api-CukSFLzz.js +1 -0
  92. package/build/assets/providers-CqUWC85T.js +1 -0
  93. package/build/assets/proxy-BBUG3sd2.js +1 -0
  94. package/build/assets/{puzzle-DXWdfaa7.js → puzzle-BoNc6zZ8.js} +1 -1
  95. package/build/assets/recommended-automations-launcher-ejxy1P27.js +1 -0
  96. package/build/assets/{refresh-cw-D7CYLy-d.js → refresh-cw-BrM5ZAZD.js} +1 -1
  97. package/build/assets/root-5S-M8SYa.js +2 -0
  98. package/build/assets/root-DZ39lS5f.css +1 -0
  99. package/build/assets/root-layout-BPqoa0gv.js +3 -0
  100. package/build/assets/schema-field-nImDoY6-.js +1 -0
  101. package/build/assets/{sdk-section-page-BW-i45yr.js → sdk-section-page-BxMrtUNV.js} +1 -1
  102. package/build/assets/search-Dc2qR4O2.js +1 -0
  103. package/build/assets/secrets-service-Dhjh3HhH.js +1 -0
  104. package/build/assets/{secrets-settings-D7U1ErCH.js → secrets-settings-CPdxceT_.js} +1 -1
  105. package/build/assets/segmented-toggle-Do6oyepX.js +1 -0
  106. package/build/assets/settings-BRbnfKEm.js +1 -0
  107. package/build/assets/{settings-dropdown-input-Dx6vlkgf.js → settings-dropdown-input-DYCULKpp.js} +1 -1
  108. package/build/assets/{settings-index-COAdxm2Q.js → settings-index-C9o2NBO0.js} +1 -1
  109. package/build/assets/settings-input-B-q2gkVy.js +1 -0
  110. package/build/assets/{settings-list-classes-gQdBahdt.js → settings-list-classes-WpQi0q1L.js} +1 -1
  111. package/build/assets/{settings-modal-CFnbQ8_4.js → settings-modal-CEK0AIx6.js} +1 -1
  112. package/build/assets/settings-service.api-CZiPD8__.js +1 -0
  113. package/build/assets/{settings-switch-UNSf8K8I.js → settings-switch-LqKdGxHL.js} +1 -1
  114. package/build/assets/shared-conversation-Bu-dQlgp.js +1 -0
  115. package/build/assets/{sidebar-layout-DXHtbEj1.js → sidebar-layout-oHBGQmLh.js} +1 -1
  116. package/build/assets/{sidebar-mobile-menu-toggle-U78hQRJ1.js → sidebar-mobile-menu-toggle-ND-hgygu.js} +1 -1
  117. package/build/assets/{sidebar-nav-link-pvUivfK2.js → sidebar-nav-link-CrujNA09.js} +1 -1
  118. package/build/assets/{sidebar-store-DwrYKwYr.js → sidebar-store-Bui-WNEr.js} +1 -1
  119. package/build/assets/{skill-card-pill-row-D7XCz5uk.js → skill-card-pill-row-CZBI7OqH.js} +1 -1
  120. package/build/assets/{skill-icon-badge-HqBWZ2Eq.js → skill-icon-badge-BOov_phZ.js} +1 -1
  121. package/build/assets/{skills-plugins-BPhaNpfx.js → skills-plugins-D0PiHWAD.js} +1 -1
  122. package/build/assets/{skills-settings-CcwMtnnJ.js → skills-settings-B43KArIz.js} +2 -2
  123. package/build/assets/{styled-tooltip-DsjDnR_W.js → styled-tooltip-C7grwnOX.js} +1 -1
  124. package/build/assets/{task-list-tab-BmaTwjaS.js → task-list-tab-R3ac6m7O.js} +1 -1
  125. package/build/assets/{terminal-BRcoba5B.js → terminal-yqkNdEAx.js} +1 -1
  126. package/build/assets/{toggle-switch-BptY3XRG.js → toggle-switch-BeSrbgCg.js} +1 -1
  127. package/build/assets/{trash-2-Bq4lHbTB.js → trash-2-wW5TWcdN.js} +1 -1
  128. package/build/assets/{typography-C6fuRTTT.js → typography-iYhzLlHO.js} +1 -1
  129. package/build/assets/{use-acp-credential-form-B0_pZ_uS.js → use-acp-credential-form-DUxbxmbq.js} +1 -1
  130. package/build/assets/use-activate-agent-profile-CDHA52tC.js +1 -0
  131. package/build/assets/use-agent-profiles-TsOdIyw5.js +1 -0
  132. package/build/assets/{use-can-manage-org-profiles-CrG1km7R.js → use-can-manage-org-profiles-Bt1M71u5.js} +1 -1
  133. package/build/assets/use-cloud-current-user-id-DWt7HCgf.js +1 -0
  134. package/build/assets/{use-config-Csy8EAP9.js → use-config-CxlEdf_v.js} +1 -1
  135. package/build/assets/{use-create-conversation-Dsa4nzU9.js → use-create-conversation-nOJ6Um5h.js} +1 -1
  136. package/build/assets/{use-create-secret-BnxuAjDt.js → use-create-secret-Dj5ang9x.js} +1 -1
  137. package/build/assets/use-is-authed-BT7Iud4U.js +1 -0
  138. package/build/assets/{use-is-creating-conversation-CIAcnd8M.js → use-is-creating-conversation-CAggrM75.js} +1 -1
  139. package/build/assets/use-llm-profiles-2Wc2db8u.js +1 -0
  140. package/build/assets/use-onboarding-completion-gxQlcEy2.js +1 -0
  141. package/build/assets/use-plugins-marketplace-CVO7sXYR.js +1 -0
  142. package/build/assets/use-save-agent-profile-D0wC5ExW.js +1 -0
  143. package/build/assets/{use-save-settings-BRh9p_fv.js → use-save-settings-L3aMaDeS.js} +1 -1
  144. package/build/assets/use-settings-8nt3DGxW.js +1 -0
  145. package/build/assets/use-settings-nav-items-DHAAD-zk.js +16 -0
  146. package/build/assets/use-skills-CE6miQ3r.js +1 -0
  147. package/build/assets/use-tracking-BGboadaZ.js +68 -0
  148. package/build/assets/{use-user-conversation-GnGhs_Ob.js → use-user-conversation-BIIpGUgM.js} +1 -1
  149. package/build/assets/useInfiniteQuery-BLRVmVPU.js +1 -0
  150. package/build/assets/{useMutation-DyQXZFEF.js → useMutation-CaSHLnX0.js} +1 -1
  151. package/build/assets/{useQueries-B3T1a7qt.js → useQueries--d_WWAzc.js} +1 -1
  152. package/build/assets/{useQuery-B38jBavx.js → useQuery-DiPh8LRJ.js} +1 -1
  153. package/build/assets/utils-BgGG1znF.js +1 -0
  154. package/build/assets/{vendor~browser-CIoZCqGs.js → vendor~browser-IVYgIgG1.js} +1 -1
  155. package/build/assets/{vendor~entry.client-Di4qO77Y.js → vendor~entry.client-BcYIVQvB.js} +1 -1
  156. package/build/assets/{vendor~entry.client-BfviqoVc.js → vendor~entry.client-CXM9oiAk.js} +1 -1
  157. package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~g4xrpilz-CJ7amdtQ.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0bpqexo-CbTboogo.js} +2 -2
  158. package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~f9xdmd0z-DLMP7bZx.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~d4by102p-C2f0ZhS-.js} +1 -1
  159. package/build/assets/{vendor~files-tab-vm3f67Pz.js → vendor~files-tab-C7RmQJwN.js} +1 -1
  160. package/build/assets/{vendor~index-home~home~conversation-panel~conversation-kX4LrGQC.js → vendor~index-home~home~conversation-panel~conversation-Bqp1ZqJM.js} +1 -1
  161. package/build/assets/{vendor~root-layout~conversation-panel~conversation-DpA6fir3.js → vendor~root-layout~conversation-panel~conversation-BCn8lzeG.js} +1 -1
  162. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~automation-setup-route-B_L-gcOG.js +1 -0
  163. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-sjx0x5ac.js +1 -0
  164. package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~automation-setup-route~onboarding-modal-D7IDevqN.js +1 -0
  165. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~bi2r7bko-Bw4AuHN1.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~dfc8ddxy-tTyxnjXT.js} +1 -1
  166. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hakxo2tj-ClV0p9g3.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gy8zbn65-CGt6bWRT.js} +1 -1
  167. package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~eywn6ulz-BKxxr74w.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~dufan6ng-Dtdw8H0q.js} +17 -4
  168. package/build/assets/{verification-settings-CaCzojbc.js → verification-settings-DBsnSXC3.js} +1 -1
  169. package/build/assets/x-omAzpXkl.js +1 -0
  170. package/build/favicon-16x16.png +0 -0
  171. package/build/favicon-32x32.png +0 -0
  172. package/build/favicon.ico +0 -0
  173. package/build/index.html +4 -4
  174. package/build/locales/ar/openhands.json +39 -2
  175. package/build/locales/ca/openhands.json +39 -2
  176. package/build/locales/de/openhands.json +39 -2
  177. package/build/locales/en/openhands.json +40 -3
  178. package/build/locales/es/openhands.json +39 -2
  179. package/build/locales/fr/openhands.json +39 -2
  180. package/build/locales/it/openhands.json +39 -2
  181. package/build/locales/ja/openhands.json +39 -2
  182. package/build/locales/ko-KR/openhands.json +39 -2
  183. package/build/locales/no/openhands.json +39 -2
  184. package/build/locales/pt/openhands.json +39 -2
  185. package/build/locales/tr/openhands.json +39 -2
  186. package/build/locales/uk/openhands.json +39 -2
  187. package/build/locales/zh-CN/openhands.json +39 -2
  188. package/build/locales/zh-TW/openhands.json +39 -2
  189. package/config/defaults.json +4 -4
  190. package/dist/api/agent-server-adapter.cjs +3 -3
  191. package/dist/api/agent-server-adapter.cjs.map +1 -1
  192. package/dist/api/agent-server-adapter.d.ts +46 -6
  193. package/dist/api/agent-server-adapter.js +187 -168
  194. package/dist/api/agent-server-adapter.js.map +1 -1
  195. package/dist/api/agent-server-compatibility.cjs +1 -1
  196. package/dist/api/agent-server-compatibility.cjs.map +1 -1
  197. package/dist/api/agent-server-compatibility.d.ts +4 -0
  198. package/dist/api/agent-server-compatibility.js +41 -38
  199. package/dist/api/agent-server-compatibility.js.map +1 -1
  200. package/dist/api/automation-service/automation-service.api.cjs +1 -1
  201. package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
  202. package/dist/api/automation-service/automation-service.api.d.ts +20 -0
  203. package/dist/api/automation-service/automation-service.api.js +136 -99
  204. package/dist/api/automation-service/automation-service.api.js.map +1 -1
  205. package/dist/api/backend-registry/storage.cjs +1 -1
  206. package/dist/api/backend-registry/storage.cjs.map +1 -1
  207. package/dist/api/backend-registry/storage.js +1 -1
  208. package/dist/api/backend-registry/storage.js.map +1 -1
  209. package/dist/api/backend-registry/types.d.ts +2 -0
  210. package/dist/api/cloud/conversation-service.api.cjs +1 -1
  211. package/dist/api/cloud/conversation-service.api.js +22 -22
  212. package/dist/api/mcp-service/mcp-service.api.cjs +1 -1
  213. package/dist/api/mcp-service/mcp-service.api.cjs.map +1 -1
  214. package/dist/api/mcp-service/mcp-service.api.js +19 -19
  215. package/dist/api/mcp-service/mcp-service.api.js.map +1 -1
  216. package/dist/api/settings-service/settings-service.api.cjs +1 -1
  217. package/dist/api/settings-service/settings-service.api.cjs.map +1 -1
  218. package/dist/api/settings-service/settings-service.api.js +26 -12
  219. package/dist/api/settings-service/settings-service.api.js.map +1 -1
  220. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.cjs +2 -0
  221. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.cjs.map +1 -0
  222. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.d.ts +12 -0
  223. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.js +94 -0
  224. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.js.map +1 -0
  225. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs +1 -1
  226. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs.map +1 -1
  227. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js +31 -90
  228. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js.map +1 -1
  229. package/dist/components/features/automations/recommended-automations-launcher.d.ts +0 -7
  230. package/dist/components/features/automations/recommended-automations-section.d.ts +0 -6
  231. package/dist/components/features/backends/backend-form-modal.cjs +1 -1
  232. package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
  233. package/dist/components/features/backends/backend-form-modal.js +568 -358
  234. package/dist/components/features/backends/backend-form-modal.js.map +1 -1
  235. package/dist/components/features/backends/device-flow-auth.cjs +1 -1
  236. package/dist/components/features/backends/device-flow-auth.cjs.map +1 -1
  237. package/dist/components/features/backends/device-flow-auth.d.ts +9 -1
  238. package/dist/components/features/backends/device-flow-auth.js +56 -55
  239. package/dist/components/features/backends/device-flow-auth.js.map +1 -1
  240. package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
  241. package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
  242. package/dist/components/features/backends/manage-backends-modal.js +1 -1
  243. package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
  244. package/dist/components/features/chat/chat-interface.cjs +1 -1
  245. package/dist/components/features/chat/chat-interface.cjs.map +1 -1
  246. package/dist/components/features/chat/chat-interface.js +105 -105
  247. package/dist/components/features/chat/chat-interface.js.map +1 -1
  248. package/dist/components/features/chat/chat-message.cjs +1 -1
  249. package/dist/components/features/chat/chat-message.cjs.map +1 -1
  250. package/dist/components/features/chat/chat-message.d.ts +2 -1
  251. package/dist/components/features/chat/chat-message.js +59 -49
  252. package/dist/components/features/chat/chat-message.js.map +1 -1
  253. package/dist/components/features/chat/pending-user-messages.cjs +1 -1
  254. package/dist/components/features/chat/pending-user-messages.cjs.map +1 -1
  255. package/dist/components/features/chat/pending-user-messages.js +4 -1
  256. package/dist/components/features/chat/pending-user-messages.js.map +1 -1
  257. package/dist/components/features/chat/typing-indicator.cjs +1 -1
  258. package/dist/components/features/chat/typing-indicator.cjs.map +1 -1
  259. package/dist/components/features/chat/typing-indicator.d.ts +8 -1
  260. package/dist/components/features/chat/typing-indicator.js +94 -10
  261. package/dist/components/features/chat/typing-indicator.js.map +1 -1
  262. package/dist/components/features/command-menu/command-menu-items.d.ts +5 -1
  263. package/dist/components/features/files-tab/segmented-toggle.cjs +1 -1
  264. package/dist/components/features/files-tab/segmented-toggle.cjs.map +1 -1
  265. package/dist/components/features/files-tab/segmented-toggle.d.ts +2 -0
  266. package/dist/components/features/files-tab/segmented-toggle.js +17 -14
  267. package/dist/components/features/files-tab/segmented-toggle.js.map +1 -1
  268. package/dist/components/features/manifest/manifest-form-field.d.ts +27 -0
  269. package/dist/components/features/manifest/manifest-prerequisites-step.d.ts +11 -0
  270. package/dist/components/features/manifest/manifest-review-step.d.ts +14 -0
  271. package/dist/components/features/manifest/manifest-setup-dialog.d.ts +14 -0
  272. package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
  273. package/dist/components/features/mcp-page/custom-server-editor.js +16 -16
  274. package/dist/components/features/mcp-page/installed-server-card.cjs +1 -1
  275. package/dist/components/features/mcp-page/installed-server-card.cjs.map +1 -1
  276. package/dist/components/features/mcp-page/installed-server-card.d.ts +2 -2
  277. package/dist/components/features/mcp-page/installed-server-card.js +6 -7
  278. package/dist/components/features/mcp-page/installed-server-card.js.map +1 -1
  279. package/dist/components/features/mcp-page/installed-servers-section.cjs +1 -1
  280. package/dist/components/features/mcp-page/installed-servers-section.cjs.map +1 -1
  281. package/dist/components/features/mcp-page/installed-servers-section.d.ts +2 -2
  282. package/dist/components/features/mcp-page/installed-servers-section.js +2 -2
  283. package/dist/components/features/mcp-page/installed-servers-section.js.map +1 -1
  284. package/dist/components/features/mcp-page/mcp-server-health.cjs +1 -1
  285. package/dist/components/features/mcp-page/mcp-server-health.js +4 -4
  286. package/dist/components/features/settings/mcp-settings/mcp-server-form.cjs +1 -1
  287. package/dist/components/features/settings/mcp-settings/mcp-server-form.cjs.map +1 -1
  288. package/dist/components/features/settings/mcp-settings/mcp-server-form.js +2 -1
  289. package/dist/components/features/settings/mcp-settings/mcp-server-form.js.map +1 -1
  290. package/dist/components/features/settings/settings-input.cjs +1 -1
  291. package/dist/components/features/settings/settings-input.cjs.map +1 -1
  292. package/dist/components/features/settings/settings-input.d.ts +6 -0
  293. package/dist/components/features/settings/settings-input.js +13 -8
  294. package/dist/components/features/settings/settings-input.js.map +1 -1
  295. package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
  296. package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
  297. package/dist/components/features/sidebar/sidebar-rail-body.js +124 -123
  298. package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
  299. package/dist/config/defaults.cjs +1 -1
  300. package/dist/config/defaults.cjs.map +1 -1
  301. package/dist/config/defaults.js +3 -3
  302. package/dist/config/defaults.js.map +1 -1
  303. package/dist/contexts/active-backend-context.cjs +1 -1
  304. package/dist/contexts/active-backend-context.cjs.map +1 -1
  305. package/dist/contexts/active-backend-context.d.ts +3 -2
  306. package/dist/contexts/active-backend-context.js +55 -42
  307. package/dist/contexts/active-backend-context.js.map +1 -1
  308. package/dist/favicon-16x16.png +0 -0
  309. package/dist/favicon-32x32.png +0 -0
  310. package/dist/favicon.ico +0 -0
  311. package/dist/hooks/mutation/use-update-mcp-server.cjs +1 -1
  312. package/dist/hooks/mutation/use-update-mcp-server.js +5 -5
  313. package/dist/hooks/query/query-keys.cjs.map +1 -1
  314. package/dist/hooks/query/query-keys.d.ts +4 -0
  315. package/dist/hooks/query/query-keys.js.map +1 -1
  316. package/dist/hooks/query/use-cloud-current-user-id.cjs +1 -1
  317. package/dist/hooks/query/use-cloud-current-user-id.cjs.map +1 -1
  318. package/dist/hooks/query/use-cloud-current-user-id.js +7 -5
  319. package/dist/hooks/query/use-cloud-current-user-id.js.map +1 -1
  320. package/dist/hooks/query/use-cloud-organizations.cjs +1 -1
  321. package/dist/hooks/query/use-cloud-organizations.cjs.map +1 -1
  322. package/dist/hooks/query/use-cloud-organizations.js +5 -1
  323. package/dist/hooks/query/use-cloud-organizations.js.map +1 -1
  324. package/dist/hooks/query/use-manifest-capabilities.d.ts +21 -0
  325. package/dist/hooks/query/use-manifest-prerequisites.d.ts +24 -0
  326. package/dist/hooks/use-can-manage-org-profiles.cjs +1 -1
  327. package/dist/hooks/use-can-manage-org-profiles.cjs.map +1 -1
  328. package/dist/hooks/use-can-manage-org-profiles.js +2 -1
  329. package/dist/hooks/use-can-manage-org-profiles.js.map +1 -1
  330. package/dist/hooks/use-llm-configured.cjs +1 -1
  331. package/dist/hooks/use-llm-configured.cjs.map +1 -1
  332. package/dist/hooks/use-llm-configured.js +2 -1
  333. package/dist/hooks/use-llm-configured.js.map +1 -1
  334. package/dist/hooks/use-manifest-preflight.d.ts +18 -0
  335. package/dist/hooks/use-tracking.cjs +1 -1
  336. package/dist/hooks/use-tracking.cjs.map +1 -1
  337. package/dist/hooks/use-tracking.d.ts +14 -0
  338. package/dist/hooks/use-tracking.js +28 -10
  339. package/dist/hooks/use-tracking.js.map +1 -1
  340. package/dist/i18n/declaration.cjs +1 -1
  341. package/dist/i18n/declaration.cjs.map +1 -1
  342. package/dist/i18n/declaration.d.ts +38 -1
  343. package/dist/i18n/declaration.js +1 -1
  344. package/dist/i18n/declaration.js.map +1 -1
  345. package/dist/i18n/translation.cjs +2 -2
  346. package/dist/i18n/translation.cjs.map +1 -1
  347. package/dist/i18n/translation.js +645 -16
  348. package/dist/i18n/translation.js.map +1 -1
  349. package/dist/icons/external-link.cjs +2 -0
  350. package/dist/icons/external-link.cjs.map +1 -0
  351. package/dist/icons/external-link.js +22 -0
  352. package/dist/icons/external-link.js.map +1 -0
  353. package/dist/icons/server.cjs +2 -0
  354. package/dist/icons/server.cjs.map +1 -0
  355. package/dist/icons/server.js +17 -0
  356. package/dist/icons/server.js.map +1 -0
  357. package/dist/locales/ar/openhands.json +39 -2
  358. package/dist/locales/ca/openhands.json +39 -2
  359. package/dist/locales/de/openhands.json +39 -2
  360. package/dist/locales/en/openhands.json +40 -3
  361. package/dist/locales/es/openhands.json +39 -2
  362. package/dist/locales/fr/openhands.json +39 -2
  363. package/dist/locales/it/openhands.json +39 -2
  364. package/dist/locales/ja/openhands.json +39 -2
  365. package/dist/locales/ko-KR/openhands.json +39 -2
  366. package/dist/locales/no/openhands.json +39 -2
  367. package/dist/locales/pt/openhands.json +39 -2
  368. package/dist/locales/tr/openhands.json +39 -2
  369. package/dist/locales/uk/openhands.json +39 -2
  370. package/dist/locales/zh-CN/openhands.json +39 -2
  371. package/dist/locales/zh-TW/openhands.json +39 -2
  372. package/dist/manifests/automation-interface.cjs +2 -0
  373. package/dist/manifests/automation-interface.cjs.map +1 -0
  374. package/dist/manifests/automation-interface.d.ts +44 -0
  375. package/dist/manifests/automation-interface.js +81 -0
  376. package/dist/manifests/automation-interface.js.map +1 -0
  377. package/dist/manifests/automation-setup.cjs +2 -0
  378. package/dist/manifests/automation-setup.cjs.map +1 -0
  379. package/dist/manifests/automation-setup.d.ts +52 -0
  380. package/dist/manifests/automation-setup.js +8 -0
  381. package/dist/manifests/automation-setup.js.map +1 -0
  382. package/dist/manifests/interface-validation.cjs +2 -0
  383. package/dist/manifests/interface-validation.cjs.map +1 -0
  384. package/dist/manifests/interface-validation.d.ts +27 -0
  385. package/dist/manifests/interface-validation.js +182 -0
  386. package/dist/manifests/interface-validation.js.map +1 -0
  387. package/dist/manifests/manifest-actions.d.ts +15 -0
  388. package/dist/manifests/manifest-capabilities.d.ts +25 -0
  389. package/dist/manifests/manifest-error-map.d.ts +40 -0
  390. package/dist/manifests/manifest-local-validation.d.ts +56 -0
  391. package/dist/manifests/manifest-registry.cjs +2 -0
  392. package/dist/manifests/manifest-registry.cjs.map +1 -0
  393. package/dist/manifests/manifest-registry.d.ts +15 -0
  394. package/dist/manifests/manifest-registry.js +26 -0
  395. package/dist/manifests/manifest-registry.js.map +1 -0
  396. package/dist/manifests/manifest-sources.cjs +2 -0
  397. package/dist/manifests/manifest-sources.cjs.map +1 -0
  398. package/dist/manifests/manifest-sources.d.ts +15 -0
  399. package/dist/manifests/manifest-sources.js +8 -0
  400. package/dist/manifests/manifest-sources.js.map +1 -0
  401. package/dist/manifests/manifest-template.d.ts +18 -0
  402. package/dist/manifests/manifest-validation.cjs +2 -0
  403. package/dist/manifests/manifest-validation.cjs.map +1 -0
  404. package/dist/manifests/manifest-validation.d.ts +30 -0
  405. package/dist/manifests/manifest-validation.js +145 -0
  406. package/dist/manifests/manifest-validation.js.map +1 -0
  407. package/dist/manifests/types.cjs +2 -0
  408. package/dist/manifests/types.cjs.map +1 -0
  409. package/dist/manifests/types.d.ts +227 -0
  410. package/dist/manifests/types.js +6 -0
  411. package/dist/manifests/types.js.map +1 -0
  412. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs +9 -0
  413. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs.map +1 -0
  414. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js +75 -0
  415. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js.map +1 -0
  416. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs +9 -0
  417. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs.map +1 -0
  418. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js +78 -0
  419. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js.map +1 -0
  420. package/dist/node_modules/@openhands/extensions/automations/catalog/incident-retrospective-drafter/manifest.cjs +17 -0
  421. package/dist/node_modules/@openhands/extensions/automations/catalog/incident-retrospective-drafter/manifest.cjs.map +1 -0
  422. package/dist/node_modules/@openhands/extensions/automations/catalog/incident-retrospective-drafter/manifest.js +89 -0
  423. package/dist/node_modules/@openhands/extensions/automations/catalog/incident-retrospective-drafter/manifest.js.map +1 -0
  424. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs +10 -0
  425. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs.map +1 -0
  426. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js +17 -0
  427. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js.map +1 -0
  428. package/dist/node_modules/@openhands/extensions/automations/catalog/linear-triage-assistant/manifest.cjs +9 -0
  429. package/dist/node_modules/@openhands/extensions/automations/catalog/linear-triage-assistant/manifest.cjs.map +1 -0
  430. package/dist/node_modules/@openhands/extensions/automations/catalog/linear-triage-assistant/manifest.js +15 -0
  431. package/dist/node_modules/@openhands/extensions/automations/catalog/linear-triage-assistant/manifest.js.map +1 -0
  432. package/dist/node_modules/@openhands/extensions/automations/catalog/research-brief-writer/manifest.cjs +9 -0
  433. package/dist/node_modules/@openhands/extensions/automations/catalog/research-brief-writer/manifest.cjs.map +1 -0
  434. package/dist/node_modules/@openhands/extensions/automations/catalog/research-brief-writer/manifest.js +18 -0
  435. package/dist/node_modules/@openhands/extensions/automations/catalog/research-brief-writer/manifest.js.map +1 -0
  436. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-channel-monitor/manifest.cjs +9 -0
  437. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-channel-monitor/manifest.cjs.map +1 -0
  438. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-channel-monitor/manifest.js +14 -0
  439. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-channel-monitor/manifest.js.map +1 -0
  440. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-standup-digest/manifest.cjs +9 -0
  441. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-standup-digest/manifest.cjs.map +1 -0
  442. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-standup-digest/manifest.js +14 -0
  443. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-standup-digest/manifest.js.map +1 -0
  444. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs +2 -0
  445. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -0
  446. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +23 -0
  447. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -0
  448. package/dist/node_modules/@openhands/extensions/automations/index.cjs +2 -0
  449. package/dist/node_modules/@openhands/extensions/automations/index.cjs.map +1 -0
  450. package/dist/node_modules/@openhands/extensions/automations/index.js +18 -0
  451. package/dist/node_modules/@openhands/extensions/automations/index.js.map +1 -0
  452. package/dist/node_modules/@openhands/extensions/automations/interface.cjs +2 -0
  453. package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -0
  454. package/dist/node_modules/@openhands/extensions/automations/interface.js +89 -0
  455. package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -0
  456. package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.cjs +1 -1
  457. package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.cjs.map +1 -1
  458. package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.js +3 -3
  459. package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.js.map +1 -1
  460. package/dist/node_modules/@openhands/extensions/skills/index.cjs +17 -4
  461. package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
  462. package/dist/node_modules/@openhands/extensions/skills/index.js +5 -5
  463. package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
  464. package/dist/node_modules/@openhands/typescript-client/dist/client/settings-client.cjs +1 -1
  465. package/dist/node_modules/@openhands/typescript-client/dist/client/settings-client.cjs.map +1 -1
  466. package/dist/node_modules/@openhands/typescript-client/dist/client/settings-client.js +9 -0
  467. package/dist/node_modules/@openhands/typescript-client/dist/client/settings-client.js.map +1 -1
  468. package/dist/node_modules/lucide-react/dist/esm/icons/monitor.cjs +2 -0
  469. package/dist/node_modules/lucide-react/dist/esm/icons/monitor.cjs.map +1 -0
  470. package/dist/node_modules/lucide-react/dist/esm/icons/monitor.js +29 -0
  471. package/dist/node_modules/lucide-react/dist/esm/icons/monitor.js.map +1 -0
  472. package/dist/package.cjs +1 -1
  473. package/dist/package.cjs.map +1 -1
  474. package/dist/package.js +3 -3
  475. package/dist/package.js.map +1 -1
  476. package/dist/routes/app-settings.cjs +1 -1
  477. package/dist/routes/app-settings.js +5 -5
  478. package/dist/routes/mcp.cjs +1 -1
  479. package/dist/routes/mcp.cjs.map +1 -1
  480. package/dist/routes/mcp.js +73 -82
  481. package/dist/routes/mcp.js.map +1 -1
  482. package/dist/services/telemetry.cjs +1 -1
  483. package/dist/services/telemetry.cjs.map +1 -1
  484. package/dist/services/telemetry.d.ts +8 -0
  485. package/dist/services/telemetry.js +163 -116
  486. package/dist/services/telemetry.js.map +1 -1
  487. package/dist/types/agent-server/core/events/conversation-state-event.d.ts +2 -19
  488. package/dist/types/agent-server/core/events/observation-event.d.ts +2 -18
  489. package/dist/types/automation.d.ts +7 -3
  490. package/dist/types/mcp-server.d.ts +5 -0
  491. package/dist/types/settings.d.ts +3 -0
  492. package/dist/utils/api-error-message.d.ts +6 -2
  493. package/dist/utils/automation-catalog.cjs +2 -0
  494. package/dist/utils/automation-catalog.cjs.map +1 -0
  495. package/dist/utils/automation-catalog.d.ts +28 -0
  496. package/dist/utils/automation-catalog.js +5 -0
  497. package/dist/utils/automation-catalog.js.map +1 -0
  498. package/dist/utils/automation-timeout.d.ts +3 -2
  499. package/dist/utils/mcp-config.cjs +1 -1
  500. package/dist/utils/mcp-config.cjs.map +1 -1
  501. package/dist/utils/mcp-config.d.ts +8 -0
  502. package/dist/utils/mcp-config.js +25 -20
  503. package/dist/utils/mcp-config.js.map +1 -1
  504. package/dist/utils/mcp-installed-servers.cjs +1 -1
  505. package/dist/utils/mcp-installed-servers.cjs.map +1 -1
  506. package/dist/utils/mcp-installed-servers.js +6 -3
  507. package/dist/utils/mcp-installed-servers.js.map +1 -1
  508. package/dist/utils/responder-deployment.d.ts +5 -1
  509. package/dist/utils/transcript-export/index.cjs +5 -5
  510. package/dist/utils/transcript-export/index.js +12 -12
  511. package/package.json +3 -3
  512. package/scripts/check-sdk-version-sync.mjs +6 -6
  513. package/scripts/check-translation-completeness.cjs +1 -0
  514. package/scripts/dev-safe.mjs +17 -12
  515. package/scripts/dev-static.mjs +17 -0
  516. package/scripts/dev-with-automation.mjs +12 -14
  517. package/scripts/ingress.mjs +22 -0
  518. package/scripts/proxy-utils.mjs +157 -2
  519. package/scripts/runtime-services-info.mjs +6 -6
  520. package/scripts/static-build.mjs +0 -7
  521. package/scripts/static-server.mjs +10 -0
  522. package/build/assets/active-backend-context-BlZPzZNU.js +0 -1
  523. package/build/assets/agent-context-settings-CTaN-Iw9.js +0 -1
  524. package/build/assets/agent-profiles-settings-CR4VTqv_.js +0 -1
  525. package/build/assets/agent-server-conversation-service.api-Btmi4q6d.js +0 -41
  526. package/build/assets/agent-settings-KQs-occT.js +0 -1
  527. package/build/assets/api-key-entry-screen-BhR24gkM.js +0 -1
  528. package/build/assets/app-settings-Bs4sY8WP.js +0 -1
  529. package/build/assets/automation-BGP_I1RR.js +0 -1
  530. package/build/assets/automation-detail-CwDnJbYR.js +0 -2
  531. package/build/assets/automation-export-Bu-r-EzL.js +0 -2
  532. package/build/assets/automations-list-CYw7_6FR.js +0 -1
  533. package/build/assets/backend-form-modal-Ce-KRHOJ.js +0 -1
  534. package/build/assets/browser-BUDJnBg4.js +0 -6
  535. package/build/assets/check-BMOG005H.js +0 -1
  536. package/build/assets/chevron-down-CV1zZP_K.js +0 -1
  537. package/build/assets/circle-check-lvN_jFN5.js +0 -1
  538. package/build/assets/client-source-1v-kWLNU.js +0 -1
  539. package/build/assets/cloud-funnel-analytics-CasMM7EO.js +0 -1
  540. package/build/assets/command-menu-N_BriUy8.js +0 -1
  541. package/build/assets/condenser-settings-Czi8cKxV.js +0 -1
  542. package/build/assets/conversation-C25pc2dT.js +0 -1
  543. package/build/assets/conversation-CObLYSJd.js +0 -90
  544. package/build/assets/conversation-panel-C25pc2dT.js +0 -1
  545. package/build/assets/conversation-state-store-DTq4hFoP.js +0 -1
  546. package/build/assets/extensions-hub-BKftOQ-X.js +0 -1
  547. package/build/assets/extensions-navigation-DF24q1H1.js +0 -1
  548. package/build/assets/files-tab-SAiFCnS5.js +0 -1
  549. package/build/assets/git-provider-icon-BREx-yUX.js +0 -1
  550. package/build/assets/home-EPNFgzUh.js +0 -1
  551. package/build/assets/home-sN90Xcxp.js +0 -1
  552. package/build/assets/index-home-EPNFgzUh.js +0 -1
  553. package/build/assets/install-server-modal-BI8yUfmr.js +0 -1
  554. package/build/assets/llm-not-configured-banner-DTWzISnk.js +0 -27
  555. package/build/assets/llm-settings-BXk5_Pac.js +0 -1
  556. package/build/assets/llm-settings-C1vpgWam.js +0 -1
  557. package/build/assets/loader-circle-6zlEYCJw.js +0 -1
  558. package/build/assets/manage-backends-modal-DhflyGTf.js +0 -1
  559. package/build/assets/manifest-8082e879.js +0 -1
  560. package/build/assets/mcp-CxLPda-W.js +0 -9
  561. package/build/assets/messages-DINDkPNK.js +0 -40
  562. package/build/assets/onboarding-modal-DdvE6rzw.js +0 -1
  563. package/build/assets/organization-service.api-CT2OQlLz.js +0 -1
  564. package/build/assets/plugins-management-service-DVkoM3eA.js +0 -1
  565. package/build/assets/plus-vIbGD459.js +0 -1
  566. package/build/assets/profiles-service.api-CBafmAPO.js +0 -1
  567. package/build/assets/providers-9UzRB9mT.js +0 -1
  568. package/build/assets/proxy-C79PCMjo.js +0 -1
  569. package/build/assets/recommended-automations-launcher-BF2mtAKw.js +0 -58
  570. package/build/assets/root-B5JXKp1P.css +0 -1
  571. package/build/assets/root-Sj7W28yE.js +0 -2
  572. package/build/assets/root-layout-DbhKVoc7.js +0 -3
  573. package/build/assets/schema-field-CV6bFnoL.js +0 -1
  574. package/build/assets/search-sKuYKllf.js +0 -1
  575. package/build/assets/secrets-service-BjK-bPN2.js +0 -1
  576. package/build/assets/segmented-toggle-DbbD3Tve.js +0 -1
  577. package/build/assets/settings-Bj5Oo45A.js +0 -1
  578. package/build/assets/settings-input-BjW_zyTN.js +0 -1
  579. package/build/assets/settings-service.api-DryhKdSr.js +0 -1
  580. package/build/assets/shared-conversation-CnMxy7p_.js +0 -1
  581. package/build/assets/telemetry-cmCL3o6Z.js +0 -2
  582. package/build/assets/use-activate-agent-profile-DH33MvVj.js +0 -1
  583. package/build/assets/use-agent-profiles-Dmd_4H8q.js +0 -1
  584. package/build/assets/use-cloud-current-user-id-B6DP3s47.js +0 -1
  585. package/build/assets/use-is-authed-BsS4XwSL.js +0 -1
  586. package/build/assets/use-llm-profiles-BMQoc612.js +0 -1
  587. package/build/assets/use-onboarding-completion-B-2BTS-y.js +0 -1
  588. package/build/assets/use-plugins-marketplace-PBc_XNz_.js +0 -1
  589. package/build/assets/use-save-agent-profile-2Mk9ZX37.js +0 -1
  590. package/build/assets/use-settings-DBI44RnH.js +0 -1
  591. package/build/assets/use-settings-nav-items-Cva28C-c.js +0 -16
  592. package/build/assets/use-skills-RQsCtdzN.js +0 -1
  593. package/build/assets/use-tracking-CN1nIMnY.js +0 -1
  594. package/build/assets/utils-qjs_KuS4.js +0 -1
  595. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation-EShpjxey.js +0 -1
  596. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-DD_UNO02.js +0 -1
  597. package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-Be63Q2Ln.js +0 -1
  598. package/build/assets/x-EjvKGawc.js +0 -1
  599. /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~f1hl7voa-BrmgjeOw.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~emdr2jt4-BrmgjeOw.js} +0 -0
@@ -6,102 +6,103 @@ import { Plus as i } from "../../../node_modules/lucide-react/dist/esm/icons/plu
6
6
  import { Server as a } from "../../../node_modules/lucide-react/dist/esm/icons/server.js";
7
7
  import { Settings as o } from "../../../node_modules/lucide-react/dist/esm/icons/settings.js";
8
8
  import { cn as s } from "../../../utils/utils.js";
9
- import { StyledTooltip as c } from "../../shared/buttons/styled-tooltip.js";
10
- import { NavigationLink as l } from "../../shared/navigation-link.js";
11
- import { SIDEBAR_COLLAPSED_LOGO_WRAPPER_CLASS as u, SIDEBAR_COLLAPSE_TOGGLE_OVERLAY_CLASS as d, SIDEBAR_ICON_BUTTON_CLASS as f, SIDEBAR_ICON_SLOT_CLASS as p, sidebarHeaderRowClassName as m, sidebarNavLabelClassName as h, sidebarNavListClassName as g, sidebarNavRowClassName as _ } from "./sidebar-layout.js";
12
- import { SidebarCollapsedIconSlot as v } from "./sidebar-collapsed-icon-slot.js";
13
- import { SidebarNavLink as y } from "./sidebar-nav-link.js";
14
- import { OpenHandsLogoButton as b } from "../../shared/buttons/openhands-logo-button.js";
15
- import { BackendStatusDot as x } from "../backends/backend-status-dot.js";
16
- import { BackendSelector as S } from "../backends/backend-selector.js";
17
- import { CommandMenuTrigger as C } from "../command-menu/command-menu-trigger.js";
18
- import { SidebarConversationList as w } from "./sidebar-conversation-list.js";
19
- import T from "../../../icons/automations.js";
9
+ import { automationListPath as c, getInterfaceCopy as l } from "../../../manifests/automation-interface.js";
10
+ import { StyledTooltip as u } from "../../shared/buttons/styled-tooltip.js";
11
+ import { NavigationLink as d } from "../../shared/navigation-link.js";
12
+ import { SIDEBAR_COLLAPSED_LOGO_WRAPPER_CLASS as f, SIDEBAR_COLLAPSE_TOGGLE_OVERLAY_CLASS as p, SIDEBAR_ICON_BUTTON_CLASS as m, SIDEBAR_ICON_SLOT_CLASS as h, sidebarHeaderRowClassName as g, sidebarNavLabelClassName as _, sidebarNavListClassName as v, sidebarNavRowClassName as y } from "./sidebar-layout.js";
13
+ import { SidebarCollapsedIconSlot as b } from "./sidebar-collapsed-icon-slot.js";
14
+ import { SidebarNavLink as x } from "./sidebar-nav-link.js";
15
+ import { OpenHandsLogoButton as S } from "../../shared/buttons/openhands-logo-button.js";
16
+ import { BackendStatusDot as C } from "../backends/backend-status-dot.js";
17
+ import { BackendSelector as w } from "../backends/backend-selector.js";
18
+ import { CommandMenuTrigger as T } from "../command-menu/command-menu-trigger.js";
19
+ import { SidebarConversationList as E } from "./sidebar-conversation-list.js";
20
+ import D from "../../../icons/automations.js";
20
21
  import "react";
21
- import { jsx as E, jsxs as D } from "react/jsx-runtime";
22
+ import { jsx as O, jsxs as k } from "react/jsx-runtime";
22
23
  //#region src/components/features/sidebar/sidebar-rail-body.tsx
23
- var O = 18, k = 34, A = Math.round(k * 30 / 46);
24
- function j({ collapsed: j, showCollapseToggle: M, showMobileCloseButton: N = !1, onCloseMobile: P, collapseToggleLabel: F, onCollapse: I, onExpand: L, showCollapsedExpandButton: R, isExtensionsActive: z, currentPath: B, activeBackendHealth: V, collapsedBackendPopoverOpen: H, setCollapsedBackendPopoverOpen: U, collapsedBackendPopoverRef: W, collapsedBackendCloseTimer: G, onOpenAddBackend: K, onOpenManageBackends: q }) {
25
- let { t: J } = e("openhands"), Y = G;
26
- return /* @__PURE__ */ D("div", {
24
+ var A = 18, j = 34, M = Math.round(j * 30 / 46);
25
+ function N({ collapsed: N, showCollapseToggle: P, showMobileCloseButton: F = !1, onCloseMobile: I, collapseToggleLabel: L, onCollapse: R, onExpand: z, showCollapsedExpandButton: B, isExtensionsActive: V, currentPath: H, activeBackendHealth: U, collapsedBackendPopoverOpen: W, setCollapsedBackendPopoverOpen: G, collapsedBackendPopoverRef: K, collapsedBackendCloseTimer: q, onOpenAddBackend: J, onOpenManageBackends: Y }) {
26
+ let { t: X } = e("openhands"), Z = q;
27
+ return /* @__PURE__ */ k("div", {
27
28
  className: "flex min-h-0 flex-1 flex-col",
28
29
  children: [
29
- /* @__PURE__ */ D("div", {
30
- className: m(j),
30
+ /* @__PURE__ */ k("div", {
31
+ className: g(N),
31
32
  children: [
32
- /* @__PURE__ */ D("div", {
33
- className: s(j && M ? u : "flex min-w-0 shrink-0 items-center"),
34
- children: [/* @__PURE__ */ E("div", {
35
- className: s(j && M && "flex h-full w-full items-center justify-start pl-2.5 transition-opacity duration-150", j && R && "opacity-0"),
36
- children: /* @__PURE__ */ E(b, {
37
- logoWidth: k,
38
- logoHeight: A,
33
+ /* @__PURE__ */ k("div", {
34
+ className: s(N && P ? f : "flex min-w-0 shrink-0 items-center"),
35
+ children: [/* @__PURE__ */ O("div", {
36
+ className: s(N && P && "flex h-full w-full items-center justify-start pl-2.5 transition-opacity duration-150", N && B && "opacity-0"),
37
+ children: /* @__PURE__ */ O(S, {
38
+ logoWidth: j,
39
+ logoHeight: M,
39
40
  logoClassName: "max-w-none",
40
- className: s(p, "overflow-visible")
41
+ className: s(h, "overflow-visible")
41
42
  })
42
- }), j && M ? /* @__PURE__ */ E("button", {
43
+ }), N && P ? /* @__PURE__ */ O("button", {
43
44
  type: "button",
44
45
  "data-testid": "sidebar-collapse-toggle",
45
- "aria-pressed": j,
46
- "aria-label": F,
47
- onClick: L,
48
- className: s(d, R ? "opacity-100 pointer-events-auto" : "opacity-0 pointer-events-none"),
49
- children: /* @__PURE__ */ E(r, {
46
+ "aria-pressed": N,
47
+ "aria-label": L,
48
+ onClick: z,
49
+ className: s(p, B ? "opacity-100 pointer-events-auto" : "opacity-0 pointer-events-none"),
50
+ children: /* @__PURE__ */ O(r, {
50
51
  width: 14,
51
52
  height: 14
52
53
  })
53
54
  }) : null]
54
55
  }),
55
- !j && M ? /* @__PURE__ */ E("button", {
56
+ !N && P ? /* @__PURE__ */ O("button", {
56
57
  type: "button",
57
58
  "data-testid": "sidebar-collapse-toggle",
58
- "aria-pressed": j,
59
- "aria-label": F,
60
- onClick: I,
61
- className: s("hidden md:inline-flex ml-auto", f, "text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]"),
62
- children: /* @__PURE__ */ E(n, {
59
+ "aria-pressed": N,
60
+ "aria-label": L,
61
+ onClick: R,
62
+ className: s("hidden md:inline-flex ml-auto", m, "text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]"),
63
+ children: /* @__PURE__ */ O(n, {
63
64
  width: 14,
64
65
  height: 14
65
66
  })
66
67
  }) : null,
67
- !j && N ? /* @__PURE__ */ E("button", {
68
+ !N && F ? /* @__PURE__ */ O("button", {
68
69
  type: "button",
69
70
  "data-testid": "sidebar-mobile-drawer-close",
70
- onClick: P,
71
- "aria-label": J(t.SIDEBAR$CLOSE_MENU),
72
- className: s("inline-flex ml-auto", f, "text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]"),
73
- children: /* @__PURE__ */ E(n, {
71
+ onClick: I,
72
+ "aria-label": X(t.SIDEBAR$CLOSE_MENU),
73
+ className: s("inline-flex ml-auto", m, "text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]"),
74
+ children: /* @__PURE__ */ O(n, {
74
75
  width: 14,
75
76
  height: 14
76
77
  })
77
78
  }) : null
78
79
  ]
79
80
  }),
80
- /* @__PURE__ */ D("nav", {
81
- className: g(j),
81
+ /* @__PURE__ */ k("nav", {
82
+ className: v(N),
82
83
  children: [
83
- /* @__PURE__ */ E(C, { collapsed: j }),
84
- /* @__PURE__ */ E(y, {
84
+ /* @__PURE__ */ O(T, { collapsed: N }),
85
+ /* @__PURE__ */ O(x, {
85
86
  to: "/conversations",
86
87
  end: !0,
87
- label: J(t.SIDEBAR$NEW_CHAT),
88
+ label: X(t.SIDEBAR$NEW_CHAT),
88
89
  testId: "sidebar-conversations-link",
89
- collapsed: j,
90
- icon: /* @__PURE__ */ E(i, {
91
- width: O,
92
- height: O
90
+ collapsed: N,
91
+ icon: /* @__PURE__ */ O(i, {
92
+ width: A,
93
+ height: A
93
94
  })
94
95
  }),
95
- /* @__PURE__ */ E(y, {
96
+ /* @__PURE__ */ O(x, {
96
97
  to: "/customize",
97
- label: J(t.NAV$CUSTOMIZE),
98
+ label: X(t.NAV$CUSTOMIZE),
98
99
  testId: "sidebar-skills-link",
99
- collapsed: j,
100
- forceActive: z,
101
- icon: /* @__PURE__ */ D("svg", {
100
+ collapsed: N,
101
+ forceActive: V,
102
+ icon: /* @__PURE__ */ k("svg", {
102
103
  xmlns: "http://www.w3.org/2000/svg",
103
- width: O,
104
- height: O,
104
+ width: A,
105
+ height: A,
105
106
  viewBox: "0 0 24 24",
106
107
  fill: "none",
107
108
  stroke: "currentColor",
@@ -110,109 +111,109 @@ function j({ collapsed: j, showCollapseToggle: M, showMobileCloseButton: N = !1,
110
111
  strokeLinejoin: "round",
111
112
  "aria-hidden": "true",
112
113
  children: [
113
- /* @__PURE__ */ E("path", { d: "M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z" }),
114
- /* @__PURE__ */ E("path", { d: "m7 16.5-4.74-2.85" }),
115
- /* @__PURE__ */ E("path", { d: "m7 16.5 5-3" }),
116
- /* @__PURE__ */ E("path", { d: "M7 16.5v5.17" }),
117
- /* @__PURE__ */ E("path", { d: "M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z" }),
118
- /* @__PURE__ */ E("path", { d: "m17 16.5-5-3" }),
119
- /* @__PURE__ */ E("path", { d: "m17 16.5 4.74-2.85" }),
120
- /* @__PURE__ */ E("path", { d: "m17 16.5v5.17" }),
121
- /* @__PURE__ */ E("path", { d: "M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z" }),
122
- /* @__PURE__ */ E("path", { d: "M12 8 7.26 5.15" }),
123
- /* @__PURE__ */ E("path", { d: "m12 8 4.74-2.85" }),
124
- /* @__PURE__ */ E("path", { d: "M12 13.5V8" })
114
+ /* @__PURE__ */ O("path", { d: "M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z" }),
115
+ /* @__PURE__ */ O("path", { d: "m7 16.5-4.74-2.85" }),
116
+ /* @__PURE__ */ O("path", { d: "m7 16.5 5-3" }),
117
+ /* @__PURE__ */ O("path", { d: "M7 16.5v5.17" }),
118
+ /* @__PURE__ */ O("path", { d: "M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z" }),
119
+ /* @__PURE__ */ O("path", { d: "m17 16.5-5-3" }),
120
+ /* @__PURE__ */ O("path", { d: "m17 16.5 4.74-2.85" }),
121
+ /* @__PURE__ */ O("path", { d: "m17 16.5v5.17" }),
122
+ /* @__PURE__ */ O("path", { d: "M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z" }),
123
+ /* @__PURE__ */ O("path", { d: "M12 8 7.26 5.15" }),
124
+ /* @__PURE__ */ O("path", { d: "m12 8 4.74-2.85" }),
125
+ /* @__PURE__ */ O("path", { d: "M12 13.5V8" })
125
126
  ]
126
127
  })
127
128
  }),
128
- /* @__PURE__ */ E(y, {
129
- to: "/automations",
130
- label: J(t.SIDEBAR$AUTOMATIONS),
129
+ /* @__PURE__ */ O(x, {
130
+ to: c(),
131
+ label: l().sidebarLabel ?? X(t.SIDEBAR$AUTOMATIONS),
131
132
  testId: "sidebar-automations-link",
132
- collapsed: j,
133
- icon: /* @__PURE__ */ E(T, {
134
- width: O,
135
- height: O
133
+ collapsed: N,
134
+ icon: /* @__PURE__ */ O(D, {
135
+ width: A,
136
+ height: A
136
137
  })
137
138
  })
138
139
  ]
139
140
  }),
140
- /* @__PURE__ */ E(w, { collapsed: j }),
141
- j && M ? /* @__PURE__ */ D("nav", {
142
- className: s(g(j), "mt-auto pb-2 cursor-pointer"),
143
- children: [/* @__PURE__ */ E(c, {
144
- content: J(t.SIDEBAR$SETTINGS),
141
+ /* @__PURE__ */ O(E, { collapsed: N }),
142
+ N && P ? /* @__PURE__ */ k("nav", {
143
+ className: s(v(N), "mt-auto pb-2 cursor-pointer"),
144
+ children: [/* @__PURE__ */ O(u, {
145
+ content: X(t.SIDEBAR$SETTINGS),
145
146
  placement: "right",
146
- children: /* @__PURE__ */ D(l, {
147
+ children: /* @__PURE__ */ k(d, {
147
148
  to: "/settings",
148
149
  "data-testid": "collapsed-settings-link",
149
- "aria-label": J(t.SIDEBAR$SETTINGS),
150
- className: _({ collapsed: !0 }),
151
- children: [/* @__PURE__ */ E(v, {
152
- active: B.startsWith("/settings"),
153
- children: /* @__PURE__ */ E(o, {
154
- width: O,
155
- height: O
150
+ "aria-label": X(t.SIDEBAR$SETTINGS),
151
+ className: y({ collapsed: !0 }),
152
+ children: [/* @__PURE__ */ O(b, {
153
+ active: H.startsWith("/settings"),
154
+ children: /* @__PURE__ */ O(o, {
155
+ width: A,
156
+ height: A
156
157
  })
157
- }), /* @__PURE__ */ E("span", {
158
- className: h(!0),
159
- children: J(t.SIDEBAR$SETTINGS)
158
+ }), /* @__PURE__ */ O("span", {
159
+ className: _(!0),
160
+ children: X(t.SIDEBAR$SETTINGS)
160
161
  })]
161
162
  })
162
- }), /* @__PURE__ */ D("div", {
163
+ }), /* @__PURE__ */ k("div", {
163
164
  className: "relative",
164
- ref: W,
165
+ ref: K,
165
166
  onMouseEnter: () => {
166
- Y.current &&= (clearTimeout(Y.current), null), U(!0);
167
+ Z.current &&= (clearTimeout(Z.current), null), G(!0);
167
168
  },
168
169
  onMouseLeave: () => {
169
- Y.current = setTimeout(() => U(!1), 150);
170
+ Z.current = setTimeout(() => G(!1), 150);
170
171
  },
171
- children: [/* @__PURE__ */ D("button", {
172
+ children: [/* @__PURE__ */ k("button", {
172
173
  type: "button",
173
174
  "data-testid": "collapsed-backend-selector-link",
174
- "aria-label": J(t.BACKEND$MANAGE),
175
- "aria-expanded": H,
175
+ "aria-label": X(t.BACKEND$MANAGE),
176
+ "aria-expanded": W,
176
177
  onMouseDown: (e) => {
177
178
  e.preventDefault(), e.stopPropagation();
178
179
  },
179
180
  onMouseUp: (e) => e.stopPropagation(),
180
- className: s(_({ collapsed: !0 }), "relative"),
181
- children: [/* @__PURE__ */ E(v, {
182
- active: H,
183
- children: /* @__PURE__ */ D("span", {
181
+ className: s(y({ collapsed: !0 }), "relative"),
182
+ children: [/* @__PURE__ */ O(b, {
183
+ active: W,
184
+ children: /* @__PURE__ */ k("span", {
184
185
  className: "relative inline-flex size-[18px] shrink-0 items-center justify-center",
185
- children: [/* @__PURE__ */ E(x, {
186
- isConnected: V?.isConnected ?? null,
186
+ children: [/* @__PURE__ */ O(C, {
187
+ isConnected: U?.isConnected ?? null,
187
188
  className: "absolute -left-0.5 -top-0.5 z-[1] pointer-events-none"
188
- }), /* @__PURE__ */ E(a, {
189
- width: O,
190
- height: O
189
+ }), /* @__PURE__ */ O(a, {
190
+ width: A,
191
+ height: A
191
192
  })]
192
193
  })
193
- }), /* @__PURE__ */ E("span", {
194
- className: h(!0),
195
- children: J(t.BACKEND$MANAGE)
194
+ }), /* @__PURE__ */ O("span", {
195
+ className: _(!0),
196
+ children: X(t.BACKEND$MANAGE)
196
197
  })]
197
- }), H ? /* @__PURE__ */ E("div", {
198
+ }), W ? /* @__PURE__ */ O("div", {
198
199
  className: "absolute bottom-[-4px] left-full pl-2.5 z-40 w-[272px]",
199
200
  onClick: (e) => e.stopPropagation(),
200
- children: /* @__PURE__ */ E(S, {
201
- sidebarCollapsed: j,
201
+ children: /* @__PURE__ */ O(w, {
202
+ sidebarCollapsed: N,
202
203
  hideTrigger: !0,
203
204
  defaultOpen: !0,
204
205
  openUpward: !0,
205
- onSelectOption: () => U(!1),
206
- onOpenAddBackend: K,
207
- onOpenManageBackends: q
206
+ onSelectOption: () => G(!1),
207
+ onOpenAddBackend: J,
208
+ onOpenManageBackends: Y
208
209
  })
209
210
  }) : null]
210
211
  })]
211
212
  }) : null,
212
- j ? null : /* @__PURE__ */ E("div", {
213
+ N ? null : /* @__PURE__ */ O("div", {
213
214
  className: s("flex flex-col items-stretch max-w-none box-border shrink-0", "-ml-2.5 w-[calc(100%+0.625rem)] border-t border-[var(--oh-border)] pt-2 px-2.5"),
214
- children: /* @__PURE__ */ E(S, {
215
- sidebarCollapsed: j,
215
+ children: /* @__PURE__ */ O(w, {
216
+ sidebarCollapsed: N,
216
217
  openUpward: !0
217
218
  })
218
219
  })
@@ -220,6 +221,6 @@ function j({ collapsed: j, showCollapseToggle: M, showMobileCloseButton: N = !1,
220
221
  });
221
222
  }
222
223
  //#endregion
223
- export { j as SidebarRailBody };
224
+ export { N as SidebarRailBody };
224
225
 
225
226
  //# sourceMappingURL=sidebar-rail-body.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-rail-body.js","names":[],"sources":["../../../../src/components/features/sidebar/sidebar-rail-body.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n ChevronLeft,\n ChevronRight,\n Plus,\n Server,\n Settings,\n} from \"lucide-react\";\nimport { OpenHandsLogoButton } from \"#/components/shared/buttons/openhands-logo-button\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport { SidebarCollapsedIconSlot } from \"./sidebar-collapsed-icon-slot\";\nimport { SidebarNavLink } from \"./sidebar-nav-link\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\nimport { StyledTooltip } from \"#/components/shared/buttons/styled-tooltip\";\nimport { BackendSelector } from \"#/components/features/backends/backend-selector\";\nimport { BackendStatusDot } from \"#/components/features/backends/backend-status-dot\";\nimport { CommandMenuTrigger } from \"#/components/features/command-menu/command-menu-trigger\";\nimport { SidebarConversationList } from \"./sidebar-conversation-list\";\nimport AutomationsIcon from \"#/icons/automations.svg?react\";\nimport {\n SIDEBAR_COLLAPSE_TOGGLE_OVERLAY_CLASS,\n SIDEBAR_COLLAPSED_LOGO_WRAPPER_CLASS,\n SIDEBAR_ICON_BUTTON_CLASS,\n SIDEBAR_ICON_SLOT_CLASS,\n sidebarHeaderRowClassName,\n sidebarNavLabelClassName,\n sidebarNavListClassName,\n sidebarNavRowClassName,\n} from \"./sidebar-layout\";\n\nconst ICON_SIZE = 18;\nconst SIDEBAR_LOGO_WIDTH = 34;\nconst SIDEBAR_LOGO_HEIGHT = Math.round((SIDEBAR_LOGO_WIDTH * 30) / 46);\n\nexport interface SidebarRailBodyProps {\n collapsed: boolean;\n showCollapseToggle: boolean;\n showMobileCloseButton?: boolean;\n onCloseMobile?: () => void;\n collapseToggleLabel: string;\n onCollapse: () => void;\n onExpand: () => void;\n showCollapsedExpandButton: boolean;\n isExtensionsActive: boolean;\n currentPath: string;\n activeBackendHealth: { isConnected: boolean | null } | undefined;\n collapsedBackendPopoverOpen: boolean;\n setCollapsedBackendPopoverOpen: (open: boolean) => void;\n collapsedBackendPopoverRef: React.RefObject<HTMLDivElement | null>;\n collapsedBackendCloseTimer: React.MutableRefObject<ReturnType<\n typeof setTimeout\n > | null>;\n onOpenAddBackend: () => void;\n onOpenManageBackends: () => void;\n}\n\nexport function SidebarRailBody({\n collapsed,\n showCollapseToggle,\n showMobileCloseButton = false,\n onCloseMobile,\n collapseToggleLabel,\n onCollapse,\n onExpand,\n showCollapsedExpandButton,\n isExtensionsActive,\n currentPath,\n activeBackendHealth,\n collapsedBackendPopoverOpen,\n setCollapsedBackendPopoverOpen,\n collapsedBackendPopoverRef,\n collapsedBackendCloseTimer,\n onOpenAddBackend,\n onOpenManageBackends,\n}: SidebarRailBodyProps) {\n const { t } = useTranslation(\"openhands\");\n const backendCloseTimerRef = collapsedBackendCloseTimer;\n\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <div className={sidebarHeaderRowClassName(collapsed)}>\n <div\n className={cn(\n collapsed && showCollapseToggle\n ? SIDEBAR_COLLAPSED_LOGO_WRAPPER_CLASS\n : \"flex min-w-0 shrink-0 items-center\",\n )}\n >\n <div\n className={cn(\n collapsed &&\n showCollapseToggle &&\n \"flex h-full w-full items-center justify-start pl-2.5 transition-opacity duration-150\",\n collapsed && showCollapsedExpandButton && \"opacity-0\",\n )}\n >\n <OpenHandsLogoButton\n logoWidth={SIDEBAR_LOGO_WIDTH}\n logoHeight={SIDEBAR_LOGO_HEIGHT}\n logoClassName=\"max-w-none\"\n className={cn(SIDEBAR_ICON_SLOT_CLASS, \"overflow-visible\")}\n />\n </div>\n {collapsed && showCollapseToggle ? (\n <button\n type=\"button\"\n data-testid=\"sidebar-collapse-toggle\"\n aria-pressed={collapsed}\n aria-label={collapseToggleLabel}\n onClick={onExpand}\n className={cn(\n SIDEBAR_COLLAPSE_TOGGLE_OVERLAY_CLASS,\n showCollapsedExpandButton\n ? \"opacity-100 pointer-events-auto\"\n : \"opacity-0 pointer-events-none\",\n )}\n >\n <ChevronRight width={14} height={14} />\n </button>\n ) : null}\n </div>\n {!collapsed && showCollapseToggle ? (\n <button\n type=\"button\"\n data-testid=\"sidebar-collapse-toggle\"\n aria-pressed={collapsed}\n aria-label={collapseToggleLabel}\n onClick={onCollapse}\n className={cn(\n \"hidden md:inline-flex ml-auto\",\n SIDEBAR_ICON_BUTTON_CLASS,\n \"text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]\",\n )}\n >\n <ChevronLeft width={14} height={14} />\n </button>\n ) : null}\n {!collapsed && showMobileCloseButton ? (\n <button\n type=\"button\"\n data-testid=\"sidebar-mobile-drawer-close\"\n onClick={onCloseMobile}\n aria-label={t(I18nKey.SIDEBAR$CLOSE_MENU)}\n className={cn(\n \"inline-flex ml-auto\",\n SIDEBAR_ICON_BUTTON_CLASS,\n \"text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]\",\n )}\n >\n <ChevronLeft width={14} height={14} />\n </button>\n ) : null}\n </div>\n\n <nav className={sidebarNavListClassName(collapsed)}>\n <CommandMenuTrigger collapsed={collapsed} />\n <SidebarNavLink\n to=\"/conversations\"\n end\n label={t(I18nKey.SIDEBAR$NEW_CHAT)}\n testId=\"sidebar-conversations-link\"\n collapsed={collapsed}\n icon={<Plus width={ICON_SIZE} height={ICON_SIZE} />}\n />\n <SidebarNavLink\n to=\"/customize\"\n label={t(I18nKey.NAV$CUSTOMIZE)}\n testId=\"sidebar-skills-link\"\n collapsed={collapsed}\n forceActive={isExtensionsActive}\n icon={\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={ICON_SIZE}\n height={ICON_SIZE}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z\" />\n <path d=\"m7 16.5-4.74-2.85\" />\n <path d=\"m7 16.5 5-3\" />\n <path d=\"M7 16.5v5.17\" />\n <path d=\"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z\" />\n <path d=\"m17 16.5-5-3\" />\n <path d=\"m17 16.5 4.74-2.85\" />\n <path d=\"m17 16.5v5.17\" />\n <path d=\"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z\" />\n <path d=\"M12 8 7.26 5.15\" />\n <path d=\"m12 8 4.74-2.85\" />\n <path d=\"M12 13.5V8\" />\n </svg>\n }\n />\n <SidebarNavLink\n to=\"/automations\"\n label={t(I18nKey.SIDEBAR$AUTOMATIONS)}\n testId=\"sidebar-automations-link\"\n collapsed={collapsed}\n icon={<AutomationsIcon width={ICON_SIZE} height={ICON_SIZE} />}\n />\n </nav>\n\n <SidebarConversationList collapsed={collapsed} />\n\n {collapsed && showCollapseToggle ? (\n <nav\n className={cn(\n sidebarNavListClassName(collapsed),\n \"mt-auto pb-2 cursor-pointer\",\n )}\n >\n <StyledTooltip\n content={t(I18nKey.SIDEBAR$SETTINGS)}\n placement=\"right\"\n >\n <NavigationLink\n to=\"/settings\"\n data-testid=\"collapsed-settings-link\"\n aria-label={t(I18nKey.SIDEBAR$SETTINGS)}\n className={sidebarNavRowClassName({ collapsed: true })}\n >\n <SidebarCollapsedIconSlot\n active={currentPath.startsWith(\"/settings\")}\n >\n <Settings width={ICON_SIZE} height={ICON_SIZE} />\n </SidebarCollapsedIconSlot>\n <span className={sidebarNavLabelClassName(true)}>\n {t(I18nKey.SIDEBAR$SETTINGS)}\n </span>\n </NavigationLink>\n </StyledTooltip>\n <div\n className=\"relative\"\n ref={collapsedBackendPopoverRef}\n onMouseEnter={() => {\n if (backendCloseTimerRef.current) {\n clearTimeout(backendCloseTimerRef.current);\n backendCloseTimerRef.current = null;\n }\n setCollapsedBackendPopoverOpen(true);\n }}\n onMouseLeave={() => {\n backendCloseTimerRef.current = setTimeout(\n () => setCollapsedBackendPopoverOpen(false),\n 150,\n );\n }}\n >\n <button\n type=\"button\"\n data-testid=\"collapsed-backend-selector-link\"\n aria-label={t(I18nKey.BACKEND$MANAGE)}\n aria-expanded={collapsedBackendPopoverOpen}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onMouseUp={(event) => event.stopPropagation()}\n className={cn(\n sidebarNavRowClassName({ collapsed: true }),\n \"relative\",\n )}\n >\n <SidebarCollapsedIconSlot active={collapsedBackendPopoverOpen}>\n <span className=\"relative inline-flex size-[18px] shrink-0 items-center justify-center\">\n <BackendStatusDot\n isConnected={activeBackendHealth?.isConnected ?? null}\n className=\"absolute -left-0.5 -top-0.5 z-[1] pointer-events-none\"\n />\n <Server width={ICON_SIZE} height={ICON_SIZE} />\n </span>\n </SidebarCollapsedIconSlot>\n <span className={sidebarNavLabelClassName(true)}>\n {t(I18nKey.BACKEND$MANAGE)}\n </span>\n </button>\n {collapsedBackendPopoverOpen ? (\n <div\n className=\"absolute bottom-[-4px] left-full pl-2.5 z-40 w-[272px]\"\n onClick={(event) => event.stopPropagation()}\n >\n <BackendSelector\n sidebarCollapsed={collapsed}\n hideTrigger\n defaultOpen\n openUpward\n onSelectOption={() => setCollapsedBackendPopoverOpen(false)}\n onOpenAddBackend={onOpenAddBackend}\n onOpenManageBackends={onOpenManageBackends}\n />\n </div>\n ) : null}\n </div>\n </nav>\n ) : null}\n\n {!collapsed ? (\n <div\n className={cn(\n \"flex flex-col items-stretch max-w-none box-border shrink-0\",\n \"-ml-2.5 w-[calc(100%+0.625rem)] border-t border-[var(--oh-border)] pt-2 px-2.5\",\n )}\n >\n <BackendSelector sidebarCollapsed={collapsed} openUpward />\n </div>\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"sidebar-rail-body.js","names":[],"sources":["../../../../src/components/features/sidebar/sidebar-rail-body.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n ChevronLeft,\n ChevronRight,\n Plus,\n Server,\n Settings,\n} from \"lucide-react\";\nimport { OpenHandsLogoButton } from \"#/components/shared/buttons/openhands-logo-button\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport {\n automationListPath,\n getInterfaceCopy,\n} from \"#/manifests/automation-interface\";\nimport { SidebarCollapsedIconSlot } from \"./sidebar-collapsed-icon-slot\";\nimport { SidebarNavLink } from \"./sidebar-nav-link\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\nimport { StyledTooltip } from \"#/components/shared/buttons/styled-tooltip\";\nimport { BackendSelector } from \"#/components/features/backends/backend-selector\";\nimport { BackendStatusDot } from \"#/components/features/backends/backend-status-dot\";\nimport { CommandMenuTrigger } from \"#/components/features/command-menu/command-menu-trigger\";\nimport { SidebarConversationList } from \"./sidebar-conversation-list\";\nimport AutomationsIcon from \"#/icons/automations.svg?react\";\nimport {\n SIDEBAR_COLLAPSE_TOGGLE_OVERLAY_CLASS,\n SIDEBAR_COLLAPSED_LOGO_WRAPPER_CLASS,\n SIDEBAR_ICON_BUTTON_CLASS,\n SIDEBAR_ICON_SLOT_CLASS,\n sidebarHeaderRowClassName,\n sidebarNavLabelClassName,\n sidebarNavListClassName,\n sidebarNavRowClassName,\n} from \"./sidebar-layout\";\n\nconst ICON_SIZE = 18;\nconst SIDEBAR_LOGO_WIDTH = 34;\nconst SIDEBAR_LOGO_HEIGHT = Math.round((SIDEBAR_LOGO_WIDTH * 30) / 46);\n\nexport interface SidebarRailBodyProps {\n collapsed: boolean;\n showCollapseToggle: boolean;\n showMobileCloseButton?: boolean;\n onCloseMobile?: () => void;\n collapseToggleLabel: string;\n onCollapse: () => void;\n onExpand: () => void;\n showCollapsedExpandButton: boolean;\n isExtensionsActive: boolean;\n currentPath: string;\n activeBackendHealth: { isConnected: boolean | null } | undefined;\n collapsedBackendPopoverOpen: boolean;\n setCollapsedBackendPopoverOpen: (open: boolean) => void;\n collapsedBackendPopoverRef: React.RefObject<HTMLDivElement | null>;\n collapsedBackendCloseTimer: React.MutableRefObject<ReturnType<\n typeof setTimeout\n > | null>;\n onOpenAddBackend: () => void;\n onOpenManageBackends: () => void;\n}\n\nexport function SidebarRailBody({\n collapsed,\n showCollapseToggle,\n showMobileCloseButton = false,\n onCloseMobile,\n collapseToggleLabel,\n onCollapse,\n onExpand,\n showCollapsedExpandButton,\n isExtensionsActive,\n currentPath,\n activeBackendHealth,\n collapsedBackendPopoverOpen,\n setCollapsedBackendPopoverOpen,\n collapsedBackendPopoverRef,\n collapsedBackendCloseTimer,\n onOpenAddBackend,\n onOpenManageBackends,\n}: SidebarRailBodyProps) {\n const { t } = useTranslation(\"openhands\");\n const backendCloseTimerRef = collapsedBackendCloseTimer;\n\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <div className={sidebarHeaderRowClassName(collapsed)}>\n <div\n className={cn(\n collapsed && showCollapseToggle\n ? SIDEBAR_COLLAPSED_LOGO_WRAPPER_CLASS\n : \"flex min-w-0 shrink-0 items-center\",\n )}\n >\n <div\n className={cn(\n collapsed &&\n showCollapseToggle &&\n \"flex h-full w-full items-center justify-start pl-2.5 transition-opacity duration-150\",\n collapsed && showCollapsedExpandButton && \"opacity-0\",\n )}\n >\n <OpenHandsLogoButton\n logoWidth={SIDEBAR_LOGO_WIDTH}\n logoHeight={SIDEBAR_LOGO_HEIGHT}\n logoClassName=\"max-w-none\"\n className={cn(SIDEBAR_ICON_SLOT_CLASS, \"overflow-visible\")}\n />\n </div>\n {collapsed && showCollapseToggle ? (\n <button\n type=\"button\"\n data-testid=\"sidebar-collapse-toggle\"\n aria-pressed={collapsed}\n aria-label={collapseToggleLabel}\n onClick={onExpand}\n className={cn(\n SIDEBAR_COLLAPSE_TOGGLE_OVERLAY_CLASS,\n showCollapsedExpandButton\n ? \"opacity-100 pointer-events-auto\"\n : \"opacity-0 pointer-events-none\",\n )}\n >\n <ChevronRight width={14} height={14} />\n </button>\n ) : null}\n </div>\n {!collapsed && showCollapseToggle ? (\n <button\n type=\"button\"\n data-testid=\"sidebar-collapse-toggle\"\n aria-pressed={collapsed}\n aria-label={collapseToggleLabel}\n onClick={onCollapse}\n className={cn(\n \"hidden md:inline-flex ml-auto\",\n SIDEBAR_ICON_BUTTON_CLASS,\n \"text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]\",\n )}\n >\n <ChevronLeft width={14} height={14} />\n </button>\n ) : null}\n {!collapsed && showMobileCloseButton ? (\n <button\n type=\"button\"\n data-testid=\"sidebar-mobile-drawer-close\"\n onClick={onCloseMobile}\n aria-label={t(I18nKey.SIDEBAR$CLOSE_MENU)}\n className={cn(\n \"inline-flex ml-auto\",\n SIDEBAR_ICON_BUTTON_CLASS,\n \"text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]\",\n )}\n >\n <ChevronLeft width={14} height={14} />\n </button>\n ) : null}\n </div>\n\n <nav className={sidebarNavListClassName(collapsed)}>\n <CommandMenuTrigger collapsed={collapsed} />\n <SidebarNavLink\n to=\"/conversations\"\n end\n label={t(I18nKey.SIDEBAR$NEW_CHAT)}\n testId=\"sidebar-conversations-link\"\n collapsed={collapsed}\n icon={<Plus width={ICON_SIZE} height={ICON_SIZE} />}\n />\n <SidebarNavLink\n to=\"/customize\"\n label={t(I18nKey.NAV$CUSTOMIZE)}\n testId=\"sidebar-skills-link\"\n collapsed={collapsed}\n forceActive={isExtensionsActive}\n icon={\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={ICON_SIZE}\n height={ICON_SIZE}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z\" />\n <path d=\"m7 16.5-4.74-2.85\" />\n <path d=\"m7 16.5 5-3\" />\n <path d=\"M7 16.5v5.17\" />\n <path d=\"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z\" />\n <path d=\"m17 16.5-5-3\" />\n <path d=\"m17 16.5 4.74-2.85\" />\n <path d=\"m17 16.5v5.17\" />\n <path d=\"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z\" />\n <path d=\"M12 8 7.26 5.15\" />\n <path d=\"m12 8 4.74-2.85\" />\n <path d=\"M12 13.5V8\" />\n </svg>\n }\n />\n <SidebarNavLink\n to={automationListPath()}\n label={\n getInterfaceCopy().sidebarLabel ?? t(I18nKey.SIDEBAR$AUTOMATIONS)\n }\n testId=\"sidebar-automations-link\"\n collapsed={collapsed}\n icon={<AutomationsIcon width={ICON_SIZE} height={ICON_SIZE} />}\n />\n </nav>\n\n <SidebarConversationList collapsed={collapsed} />\n\n {collapsed && showCollapseToggle ? (\n <nav\n className={cn(\n sidebarNavListClassName(collapsed),\n \"mt-auto pb-2 cursor-pointer\",\n )}\n >\n <StyledTooltip\n content={t(I18nKey.SIDEBAR$SETTINGS)}\n placement=\"right\"\n >\n <NavigationLink\n to=\"/settings\"\n data-testid=\"collapsed-settings-link\"\n aria-label={t(I18nKey.SIDEBAR$SETTINGS)}\n className={sidebarNavRowClassName({ collapsed: true })}\n >\n <SidebarCollapsedIconSlot\n active={currentPath.startsWith(\"/settings\")}\n >\n <Settings width={ICON_SIZE} height={ICON_SIZE} />\n </SidebarCollapsedIconSlot>\n <span className={sidebarNavLabelClassName(true)}>\n {t(I18nKey.SIDEBAR$SETTINGS)}\n </span>\n </NavigationLink>\n </StyledTooltip>\n <div\n className=\"relative\"\n ref={collapsedBackendPopoverRef}\n onMouseEnter={() => {\n if (backendCloseTimerRef.current) {\n clearTimeout(backendCloseTimerRef.current);\n backendCloseTimerRef.current = null;\n }\n setCollapsedBackendPopoverOpen(true);\n }}\n onMouseLeave={() => {\n backendCloseTimerRef.current = setTimeout(\n () => setCollapsedBackendPopoverOpen(false),\n 150,\n );\n }}\n >\n <button\n type=\"button\"\n data-testid=\"collapsed-backend-selector-link\"\n aria-label={t(I18nKey.BACKEND$MANAGE)}\n aria-expanded={collapsedBackendPopoverOpen}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onMouseUp={(event) => event.stopPropagation()}\n className={cn(\n sidebarNavRowClassName({ collapsed: true }),\n \"relative\",\n )}\n >\n <SidebarCollapsedIconSlot active={collapsedBackendPopoverOpen}>\n <span className=\"relative inline-flex size-[18px] shrink-0 items-center justify-center\">\n <BackendStatusDot\n isConnected={activeBackendHealth?.isConnected ?? null}\n className=\"absolute -left-0.5 -top-0.5 z-[1] pointer-events-none\"\n />\n <Server width={ICON_SIZE} height={ICON_SIZE} />\n </span>\n </SidebarCollapsedIconSlot>\n <span className={sidebarNavLabelClassName(true)}>\n {t(I18nKey.BACKEND$MANAGE)}\n </span>\n </button>\n {collapsedBackendPopoverOpen ? (\n <div\n className=\"absolute bottom-[-4px] left-full pl-2.5 z-40 w-[272px]\"\n onClick={(event) => event.stopPropagation()}\n >\n <BackendSelector\n sidebarCollapsed={collapsed}\n hideTrigger\n defaultOpen\n openUpward\n onSelectOption={() => setCollapsedBackendPopoverOpen(false)}\n onOpenAddBackend={onOpenAddBackend}\n onOpenManageBackends={onOpenManageBackends}\n />\n </div>\n ) : null}\n </div>\n </nav>\n ) : null}\n\n {!collapsed ? (\n <div\n className={cn(\n \"flex flex-col items-stretch max-w-none box-border shrink-0\",\n \"-ml-2.5 w-[calc(100%+0.625rem)] border-t border-[var(--oh-border)] pt-2 px-2.5\",\n )}\n >\n <BackendSelector sidebarCollapsed={collapsed} openUpward />\n </div>\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- require("../_virtual/_rolldown/runtime.cjs");var e={_comment:`Single source of truth for version pins, ports, paths, and defaults shared across the npm and Docker install paths. Read by scripts/dev-safe.mjs, scripts/dev-with-automation.mjs, docker/entrypoint.sh (via generated defaults.env), and .github/workflows/docker.yml.`,versions:{agentServer:`1.38.0`,agentCanvas:`1.7.2`,automation:`1.4.1`},compatibility:{minimumAgentServer:`1.28.0`},constraints:{_comment:`Temporary upper bound on the agent-client-protocol (acp) transitive dependency. openhands-sdk 1.35.0 requires agent-client-protocol>=0.10.1 with no upper bound, but acp 0.11.0 reordered the ACP prompt() arguments and breaks the SDK's ACP client (a PromptRequest validation error surfaces as 'ACP error: 2 validation errors for PromptRequest'). Pin acp <0.11 until a fixed openhands-sdk ships. Consumed by scripts/dev-safe.mjs (agent-server uvx install) and .github/workflows/mock-llm-e2e.yml (mock ACP server venv).`,agentClientProtocol:`agent-client-protocol<0.11`},images:{agentServer:`ghcr.io/openhands/agent-server`,agentCanvas:`ghcr.io/openhands/agent-canvas`},ports:{agentServer:18e3,automation:18001,proxy:8e3},paths:{stateSubdir:`agent-canvas`,conversations:`agent-canvas/conversations`,bashEvents:`agent-canvas/bash_events`,automationDb:`automation/automations.db`,canvasBasePath:`/canvas`},packages:{agentServer:`openhands-agent-server`,automation:`openhands-automation`,tools:`openhands-tools`,workspace:`openhands-workspace`},telemetry:{posthogApiKey:`phc_kBtz5nKmxVRRQ7HtPwr2QX9eMC5j65zE86QKocVNwb4U`,posthogHost:`https://us.i.posthog.com`}};exports.default=e;
1
+ require("../_virtual/_rolldown/runtime.cjs");var e={_comment:`Single source of truth for version pins, ports, paths, and defaults shared across the npm and Docker install paths. Read by scripts/dev-safe.mjs, scripts/dev-with-automation.mjs, docker/entrypoint.sh (via generated defaults.env), and .github/workflows/docker.yml.`,versions:{agentServer:`1.39.1`,agentCanvas:`1.9.0`,automation:`1.5.0`},compatibility:{minimumAgentServer:`1.28.0`},constraints:{_comment:`Temporary upper bound on the agent-client-protocol (acp) transitive dependency. openhands-sdk 1.35.0 requires agent-client-protocol>=0.10.1 with no upper bound, but acp 0.11.0 reordered the ACP prompt() arguments and breaks the SDK's ACP client (a PromptRequest validation error surfaces as 'ACP error: 2 validation errors for PromptRequest'). Pin acp <0.11 until a fixed openhands-sdk ships. Consumed by scripts/dev-safe.mjs (agent-server uvx install) and .github/workflows/mock-llm-e2e.yml (mock ACP server venv).`,agentClientProtocol:`agent-client-protocol<0.11`},images:{agentServer:`ghcr.io/openhands/agent-server`,agentCanvas:`ghcr.io/openhands/agent-canvas`},ports:{agentServer:18e3,automation:18001,proxy:8e3},paths:{stateSubdir:`agent-canvas`,conversations:`agent-canvas/conversations`,bashEvents:`agent-canvas/bash_events`,automationDb:`automation/automations.db`,canvasBasePath:`/canvas`},packages:{agentServer:`openhands-agent-server`,automation:`openhands-automation`,tools:`openhands-tools`,workspace:`openhands-workspace`},telemetry:{posthogApiKey:`phc_kBtz5nKmxVRRQ7HtPwr2QX9eMC5j65zE86QKocVNwb4U`,posthogHost:`https://us.i.posthog.com`}};exports.default=e;
2
2
  //# sourceMappingURL=defaults.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.cjs","names":[],"sources":["../../config/defaults.json"],"sourcesContent":["{\n \"_comment\": \"Single source of truth for version pins, ports, paths, and defaults shared across the npm and Docker install paths. Read by scripts/dev-safe.mjs, scripts/dev-with-automation.mjs, docker/entrypoint.sh (via generated defaults.env), and .github/workflows/docker.yml.\",\n \"versions\": {\n \"agentServer\": \"1.38.0\",\n \"agentCanvas\": \"1.7.2\",\n \"automation\": \"1.4.1\"\n },\n \"compatibility\": {\n \"minimumAgentServer\": \"1.28.0\"\n },\n \"constraints\": {\n \"_comment\": \"Temporary upper bound on the agent-client-protocol (acp) transitive dependency. openhands-sdk 1.35.0 requires agent-client-protocol>=0.10.1 with no upper bound, but acp 0.11.0 reordered the ACP prompt() arguments and breaks the SDK's ACP client (a PromptRequest validation error surfaces as 'ACP error: 2 validation errors for PromptRequest'). Pin acp <0.11 until a fixed openhands-sdk ships. Consumed by scripts/dev-safe.mjs (agent-server uvx install) and .github/workflows/mock-llm-e2e.yml (mock ACP server venv).\",\n \"agentClientProtocol\": \"agent-client-protocol<0.11\"\n },\n \"images\": {\n \"agentServer\": \"ghcr.io/openhands/agent-server\",\n \"agentCanvas\": \"ghcr.io/openhands/agent-canvas\"\n },\n \"ports\": {\n \"agentServer\": 18000,\n \"automation\": 18001,\n \"proxy\": 8000\n },\n \"paths\": {\n \"stateSubdir\": \"agent-canvas\",\n \"conversations\": \"agent-canvas/conversations\",\n \"bashEvents\": \"agent-canvas/bash_events\",\n \"automationDb\": \"automation/automations.db\",\n \"canvasBasePath\": \"/canvas\"\n },\n \"packages\": {\n \"agentServer\": \"openhands-agent-server\",\n \"automation\": \"openhands-automation\",\n \"tools\": \"openhands-tools\",\n \"workspace\": \"openhands-workspace\"\n },\n \"telemetry\": {\n \"posthogApiKey\": \"phc_kBtz5nKmxVRRQ7HtPwr2QX9eMC5j65zE86QKocVNwb4U\",\n \"posthogHost\": \"https://us.i.posthog.com\"\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"defaults.cjs","names":[],"sources":["../../config/defaults.json"],"sourcesContent":["{\n \"_comment\": \"Single source of truth for version pins, ports, paths, and defaults shared across the npm and Docker install paths. Read by scripts/dev-safe.mjs, scripts/dev-with-automation.mjs, docker/entrypoint.sh (via generated defaults.env), and .github/workflows/docker.yml.\",\n \"versions\": {\n \"agentServer\": \"1.39.1\",\n \"agentCanvas\": \"1.9.0\",\n \"automation\": \"1.5.0\"\n },\n \"compatibility\": {\n \"minimumAgentServer\": \"1.28.0\"\n },\n \"constraints\": {\n \"_comment\": \"Temporary upper bound on the agent-client-protocol (acp) transitive dependency. openhands-sdk 1.35.0 requires agent-client-protocol>=0.10.1 with no upper bound, but acp 0.11.0 reordered the ACP prompt() arguments and breaks the SDK's ACP client (a PromptRequest validation error surfaces as 'ACP error: 2 validation errors for PromptRequest'). Pin acp <0.11 until a fixed openhands-sdk ships. Consumed by scripts/dev-safe.mjs (agent-server uvx install) and .github/workflows/mock-llm-e2e.yml (mock ACP server venv).\",\n \"agentClientProtocol\": \"agent-client-protocol<0.11\"\n },\n \"images\": {\n \"agentServer\": \"ghcr.io/openhands/agent-server\",\n \"agentCanvas\": \"ghcr.io/openhands/agent-canvas\"\n },\n \"ports\": {\n \"agentServer\": 18000,\n \"automation\": 18001,\n \"proxy\": 8000\n },\n \"paths\": {\n \"stateSubdir\": \"agent-canvas\",\n \"conversations\": \"agent-canvas/conversations\",\n \"bashEvents\": \"agent-canvas/bash_events\",\n \"automationDb\": \"automation/automations.db\",\n \"canvasBasePath\": \"/canvas\"\n },\n \"packages\": {\n \"agentServer\": \"openhands-agent-server\",\n \"automation\": \"openhands-automation\",\n \"tools\": \"openhands-tools\",\n \"workspace\": \"openhands-workspace\"\n },\n \"telemetry\": {\n \"posthogApiKey\": \"phc_kBtz5nKmxVRRQ7HtPwr2QX9eMC5j65zE86QKocVNwb4U\",\n \"posthogHost\": \"https://us.i.posthog.com\"\n }\n}\n"],"mappings":""}
@@ -1,9 +1,9 @@
1
1
  var e = {
2
2
  _comment: "Single source of truth for version pins, ports, paths, and defaults shared across the npm and Docker install paths. Read by scripts/dev-safe.mjs, scripts/dev-with-automation.mjs, docker/entrypoint.sh (via generated defaults.env), and .github/workflows/docker.yml.",
3
3
  versions: {
4
- agentServer: "1.38.0",
5
- agentCanvas: "1.7.2",
6
- automation: "1.4.1"
4
+ agentServer: "1.39.1",
5
+ agentCanvas: "1.9.0",
6
+ automation: "1.5.0"
7
7
  },
8
8
  compatibility: { minimumAgentServer: "1.28.0" },
9
9
  constraints: {
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.js","names":[],"sources":["../../config/defaults.json"],"sourcesContent":["{\n \"_comment\": \"Single source of truth for version pins, ports, paths, and defaults shared across the npm and Docker install paths. Read by scripts/dev-safe.mjs, scripts/dev-with-automation.mjs, docker/entrypoint.sh (via generated defaults.env), and .github/workflows/docker.yml.\",\n \"versions\": {\n \"agentServer\": \"1.38.0\",\n \"agentCanvas\": \"1.7.2\",\n \"automation\": \"1.4.1\"\n },\n \"compatibility\": {\n \"minimumAgentServer\": \"1.28.0\"\n },\n \"constraints\": {\n \"_comment\": \"Temporary upper bound on the agent-client-protocol (acp) transitive dependency. openhands-sdk 1.35.0 requires agent-client-protocol>=0.10.1 with no upper bound, but acp 0.11.0 reordered the ACP prompt() arguments and breaks the SDK's ACP client (a PromptRequest validation error surfaces as 'ACP error: 2 validation errors for PromptRequest'). Pin acp <0.11 until a fixed openhands-sdk ships. Consumed by scripts/dev-safe.mjs (agent-server uvx install) and .github/workflows/mock-llm-e2e.yml (mock ACP server venv).\",\n \"agentClientProtocol\": \"agent-client-protocol<0.11\"\n },\n \"images\": {\n \"agentServer\": \"ghcr.io/openhands/agent-server\",\n \"agentCanvas\": \"ghcr.io/openhands/agent-canvas\"\n },\n \"ports\": {\n \"agentServer\": 18000,\n \"automation\": 18001,\n \"proxy\": 8000\n },\n \"paths\": {\n \"stateSubdir\": \"agent-canvas\",\n \"conversations\": \"agent-canvas/conversations\",\n \"bashEvents\": \"agent-canvas/bash_events\",\n \"automationDb\": \"automation/automations.db\",\n \"canvasBasePath\": \"/canvas\"\n },\n \"packages\": {\n \"agentServer\": \"openhands-agent-server\",\n \"automation\": \"openhands-automation\",\n \"tools\": \"openhands-tools\",\n \"workspace\": \"openhands-workspace\"\n },\n \"telemetry\": {\n \"posthogApiKey\": \"phc_kBtz5nKmxVRRQ7HtPwr2QX9eMC5j65zE86QKocVNwb4U\",\n \"posthogHost\": \"https://us.i.posthog.com\"\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"defaults.js","names":[],"sources":["../../config/defaults.json"],"sourcesContent":["{\n \"_comment\": \"Single source of truth for version pins, ports, paths, and defaults shared across the npm and Docker install paths. Read by scripts/dev-safe.mjs, scripts/dev-with-automation.mjs, docker/entrypoint.sh (via generated defaults.env), and .github/workflows/docker.yml.\",\n \"versions\": {\n \"agentServer\": \"1.39.1\",\n \"agentCanvas\": \"1.9.0\",\n \"automation\": \"1.5.0\"\n },\n \"compatibility\": {\n \"minimumAgentServer\": \"1.28.0\"\n },\n \"constraints\": {\n \"_comment\": \"Temporary upper bound on the agent-client-protocol (acp) transitive dependency. openhands-sdk 1.35.0 requires agent-client-protocol>=0.10.1 with no upper bound, but acp 0.11.0 reordered the ACP prompt() arguments and breaks the SDK's ACP client (a PromptRequest validation error surfaces as 'ACP error: 2 validation errors for PromptRequest'). Pin acp <0.11 until a fixed openhands-sdk ships. Consumed by scripts/dev-safe.mjs (agent-server uvx install) and .github/workflows/mock-llm-e2e.yml (mock ACP server venv).\",\n \"agentClientProtocol\": \"agent-client-protocol<0.11\"\n },\n \"images\": {\n \"agentServer\": \"ghcr.io/openhands/agent-server\",\n \"agentCanvas\": \"ghcr.io/openhands/agent-canvas\"\n },\n \"ports\": {\n \"agentServer\": 18000,\n \"automation\": 18001,\n \"proxy\": 8000\n },\n \"paths\": {\n \"stateSubdir\": \"agent-canvas\",\n \"conversations\": \"agent-canvas/conversations\",\n \"bashEvents\": \"agent-canvas/bash_events\",\n \"automationDb\": \"automation/automations.db\",\n \"canvasBasePath\": \"/canvas\"\n },\n \"packages\": {\n \"agentServer\": \"openhands-agent-server\",\n \"automation\": \"openhands-automation\",\n \"tools\": \"openhands-tools\",\n \"workspace\": \"openhands-workspace\"\n },\n \"telemetry\": {\n \"posthogApiKey\": \"phc_kBtz5nKmxVRRQ7HtPwr2QX9eMC5j65zE86QKocVNwb4U\",\n \"posthogHost\": \"https://us.i.posthog.com\"\n }\n}\n"],"mappings":""}
@@ -1,2 +1,2 @@
1
- const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../api/backend-registry/health-store.cjs"),n=require("../api/backend-registry/default-backend.cjs"),r=require("../api/backend-registry/active-store.cjs"),i=require("../api/agent-server-compatibility.cjs"),a=require("../hooks/query/query-keys.cjs"),o=require("../query-client-config.cjs");let s=require("react");s=e.__toESM(s,1);let c=require("react/jsx-runtime");var l=s.default.createContext(null);function u(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`backend-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function d({children:e}){let n=s.default.useSyncExternalStore(r.subscribeActiveBackend,r.getSnapshot,r.getSnapshot),d=s.default.useCallback(()=>{i.clearCachedAgentServerInfo(),o.queryClient.invalidateQueries({queryKey:a.QUERY_KEYS.WEB_CLIENT_CONFIG})},[]),f=s.default.useCallback((e,t)=>{let n=r.getActiveSelection()?.backendId??null,i=r.getActiveSelection()?.orgId??null,a=t??null;e===n&&a===i||(r.setActiveSelection({backendId:e,orgId:a}),d())},[d]),p=s.default.useCallback(e=>{let t={...e,id:u()};return r.setRegisteredBackends([...r.getRegisteredBackends(),t]),r.setActiveSelection({backendId:t.id}),d(),t},[d]),m=s.default.useCallback((e,n)=>{let i=r.getRegisteredBackends().find(t=>t.id===e),a=r.getActiveSelection()?.backendId??null;r.setRegisteredBackends(r.getRegisteredBackends().map(t=>t.id===e?{...t,...n}:t));let o=n.host!==void 0&&i!==void 0&&n.host!==i.host,s=n.apiKey!==void 0&&i!==void 0&&n.apiKey!==i.apiKey;(o||s)&&(t.resetBackendHealth(e),a===e&&d())},[d]),h=s.default.useCallback(e=>{r.setRegisteredBackends(r.getRegisteredBackends().filter(t=>t.id!==e)),t.dropBackendHealth(e),d()},[d]),g=s.default.useMemo(()=>({backends:n.backends,active:n.active,setActive:f,addBackend:p,updateBackend:m,removeBackend:h}),[n,f,p,m,h]);return(0,c.jsx)(l.Provider,{value:g,children:e})}function f(){let e=s.default.useContext(l);if(!e)throw Error(`useActiveBackendContext must be used inside <ActiveBackendProvider>`);return e}function p(){let e=s.default.useContext(l);return e?e.active:{backend:n.makeDefaultLocalBackend()??r.NO_BACKEND,orgId:null}}exports.ActiveBackendProvider=d,exports.useActiveBackend=p,exports.useActiveBackendContext=f;
1
+ const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../api/backend-registry/health-store.cjs"),n=require("../api/backend-registry/default-backend.cjs"),r=require("../api/backend-registry/active-store.cjs"),i=require("../api/agent-server-compatibility.cjs"),a=require("../hooks/query/query-keys.cjs"),o=require("../query-client-config.cjs"),s=require("../services/telemetry.cjs");let c=require("react");c=e.__toESM(c,1);let l=require("react/jsx-runtime");var u=c.default.createContext(null);function d(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`backend-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function f(e,t){let n=e.backend.kind===`cloud`,r=t.backend.kind===`cloud`;!n&&!r||(s.setTelemetryCloudContext(null),r&&(!n||e.backend.id!==t.backend.id)&&s.setTelemetryIdentity(null))}function p({children:e}){let n=c.default.useSyncExternalStore(r.subscribeActiveBackend,r.getSnapshot,r.getSnapshot),p=c.default.useCallback(()=>{i.clearCachedAgentServerInfo(),o.queryClient.invalidateQueries({queryKey:a.QUERY_KEYS.WEB_CLIENT_CONFIG})},[]),m=c.default.useCallback((e,t)=>{let n=r.getSnapshot(),i=r.getActiveSelection()?.backendId??null,a=r.getActiveSelection()?.orgId??null,o=t??null;if(e===i&&o===a)return;let s=r.getRegisteredBackends(),c=s.find(t=>t.id===e),l={backend:c??s[0]??r.NO_BACKEND,orgId:c?o:null};f(n.active,l),r.setActiveSelection({backendId:e,orgId:o}),p()},[p]),h=c.default.useCallback(e=>{let t=r.getSnapshot().active,n={...e,id:d()},i=[...r.getRegisteredBackends(),n];return f(t,{backend:n,orgId:null}),r.setRegisteredBackends(i),r.setActiveSelection({backendId:n.id}),p(),n},[p]),g=c.default.useCallback((e,n)=>{let i=r.getRegisteredBackends().find(t=>t.id===e),a=r.getSnapshot().active.backend.id,o=n.host!==void 0&&i!==void 0&&n.host!==i.host,c=n.apiKey!==void 0&&i!==void 0&&n.apiKey!==i.apiKey;r.setRegisteredBackends(r.getRegisteredBackends().map(t=>t.id===e?{...t,...n,connectionRevision:o||c?(t.connectionRevision??0)+1:t.connectionRevision}:t)),(o||c)&&(t.resetBackendHealth(e),a===e&&(i?.kind===`cloud`&&(s.setTelemetryCloudContext(null),s.setTelemetryIdentity(null)),p()))},[p]),_=c.default.useCallback(e=>{let n=r.getRegisteredBackends().find(t=>t.id===e),i=n?.kind===`cloud`&&r.getSnapshot().active.backend.id===n.id;r.setRegisteredBackends(r.getRegisteredBackends().filter(t=>t.id!==e)),i&&(s.setTelemetryCloudContext(null),s.setTelemetryIdentity(null)),t.dropBackendHealth(e),p()},[p]),v=c.default.useMemo(()=>({backends:n.backends,active:n.active,setActive:m,addBackend:h,updateBackend:g,removeBackend:_}),[n,m,h,g,_]);return(0,l.jsx)(u.Provider,{value:v,children:e})}function m(){let e=c.default.useContext(u);if(!e)throw Error(`useActiveBackendContext must be used inside <ActiveBackendProvider>`);return e}function h(){let e=c.default.useContext(u);return e?e.active:{backend:n.makeDefaultLocalBackend()??r.NO_BACKEND,orgId:null}}exports.ActiveBackendProvider=p,exports.useActiveBackend=h,exports.useActiveBackendContext=m;
2
2
  //# sourceMappingURL=active-backend-context.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"active-backend-context.cjs","names":[],"sources":["../../src/contexts/active-backend-context.tsx"],"sourcesContent":["import React from \"react\";\nimport { clearCachedAgentServerInfo } from \"#/api/agent-server-compatibility\";\nimport {\n getActiveSelection,\n getRegisteredBackends,\n getSnapshot,\n NO_BACKEND,\n setActiveSelection,\n setRegisteredBackends,\n subscribeActiveBackend,\n} from \"#/api/backend-registry/active-store\";\nimport { makeDefaultLocalBackend } from \"#/api/backend-registry/default-backend\";\nimport {\n dropBackendHealth,\n resetBackendHealth,\n} from \"#/api/backend-registry/health-store\";\nimport {\n type Backend,\n type BackendSelection,\n type ResolvedActiveBackend,\n} from \"#/api/backend-registry/types\";\nimport { QUERY_KEYS } from \"#/hooks/query/query-keys\";\nimport { queryClient } from \"#/query-client-config\";\n\ninterface ActiveBackendContextValue {\n backends: Backend[];\n active: ResolvedActiveBackend;\n setActive: (backendId: string, orgId?: string | null) => void;\n addBackend: (backend: Omit<Backend, \"id\">) => Backend;\n updateBackend: (id: string, patch: Partial<Omit<Backend, \"id\">>) => void;\n removeBackend: (id: string) => void;\n}\n\nconst ActiveBackendContext =\n React.createContext<ActiveBackendContextValue | null>(null);\n\nfunction generateId(): string {\n if (\n typeof crypto !== \"undefined\" &&\n typeof crypto.randomUUID === \"function\"\n ) {\n return crypto.randomUUID();\n }\n return `backend-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nexport function ActiveBackendProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const snapshot = React.useSyncExternalStore(\n subscribeActiveBackend,\n getSnapshot,\n getSnapshot,\n );\n\n const retryBootstrapProbe = React.useCallback(() => {\n clearCachedAgentServerInfo();\n void queryClient.invalidateQueries({\n queryKey: QUERY_KEYS.WEB_CLIENT_CONFIG,\n });\n }, []);\n\n const setActive = React.useCallback(\n (backendId: string, orgId?: string | null) => {\n const prevBackendId = getActiveSelection()?.backendId ?? null;\n const prevOrgId = getActiveSelection()?.orgId ?? null;\n const nextOrgId = orgId ?? null;\n\n if (backendId === prevBackendId && nextOrgId === prevOrgId) return;\n\n const next: BackendSelection = { backendId, orgId: nextOrgId };\n setActiveSelection(next);\n retryBootstrapProbe();\n\n // No blanket `invalidateQueries()` here. Long-lived queries\n // (`useSettings`, `usePaginatedConversations`,\n // `useGitRepositories`, `useAppInstallations`,\n // `useCloudCurrentUserId`, `useGitUser`, …) include the active\n // backend's `id` and `orgId` in their query keys, so React Query\n // treats a backend/org switch as a brand-new query and fetches\n // automatically — once, with no duplicate waves.\n },\n [retryBootstrapProbe],\n );\n\n // @spec BM-001 — Auto-switch to newly connected backend\n const addBackend = React.useCallback(\n (backend: Omit<Backend, \"id\">): Backend => {\n const next: Backend = { ...backend, id: generateId() };\n const list = [...getRegisteredBackends(), next];\n setRegisteredBackends(list);\n setActiveSelection({ backendId: next.id });\n retryBootstrapProbe();\n return next;\n },\n [retryBootstrapProbe],\n );\n\n const updateBackend = React.useCallback(\n (id: string, patch: Partial<Omit<Backend, \"id\">>) => {\n const prev = getRegisteredBackends().find((b) => b.id === id);\n const activeBeforeUpdate = getActiveSelection()?.backendId ?? null;\n const list = getRegisteredBackends().map((b) =>\n b.id === id ? { ...b, ...patch } : b,\n );\n setRegisteredBackends(list);\n\n // Re-arm health polling when the user edits the fields that\n // actually drive the probe. Cosmetic edits (name) shouldn't\n // re-enable a backend that was disabled for being unreachable.\n const hostChanged =\n patch.host !== undefined &&\n prev !== undefined &&\n patch.host !== prev.host;\n const apiKeyChanged =\n patch.apiKey !== undefined &&\n prev !== undefined &&\n patch.apiKey !== prev.apiKey;\n if (hostChanged || apiKeyChanged) {\n resetBackendHealth(id);\n if (activeBeforeUpdate === id) {\n retryBootstrapProbe();\n }\n }\n },\n [retryBootstrapProbe],\n );\n\n const removeBackend = React.useCallback(\n (id: string) => {\n const list = getRegisteredBackends().filter((b) => b.id !== id);\n setRegisteredBackends(list);\n dropBackendHealth(id);\n retryBootstrapProbe();\n // If the active selection pointed at this backend, the active\n // store falls back to the first remaining local backend (or the\n // env-derived default if no locals exist); consumer hooks re-key\n // by the new active backend identity and refetch automatically.\n },\n [retryBootstrapProbe],\n );\n\n const value = React.useMemo<ActiveBackendContextValue>(\n () => ({\n backends: snapshot.backends,\n active: snapshot.active,\n setActive,\n addBackend,\n updateBackend,\n removeBackend,\n }),\n [snapshot, setActive, addBackend, updateBackend, removeBackend],\n );\n\n return (\n <ActiveBackendContext.Provider value={value}>\n {children}\n </ActiveBackendContext.Provider>\n );\n}\n\nexport function useActiveBackendContext(): ActiveBackendContextValue {\n const ctx = React.useContext(ActiveBackendContext);\n if (!ctx) {\n throw new Error(\n \"useActiveBackendContext must be used inside <ActiveBackendProvider>\",\n );\n }\n return ctx;\n}\n\n/**\n * Read the resolved active backend.\n *\n * Falls back to a synthesized env-derived local backend when called\n * outside an `<ActiveBackendProvider>` (e.g. from a unit test that\n * mounts a narrow component without the full provider stack). That\n * synthesized backend is identical to the seed used on first install.\n *\n * Components that need to mutate state (`setActive`, `addBackend`,\n * etc.) must use `useActiveBackendContext()` directly — that throws if\n * the provider is missing, since mutation requires the live store.\n */\nexport function useActiveBackend(): ResolvedActiveBackend {\n const ctx = React.useContext(ActiveBackendContext);\n if (ctx) return ctx.active;\n return { backend: makeDefaultLocalBackend() ?? NO_BACKEND, orgId: null };\n}\n"],"mappings":"2aAiCA,IAAM,EACJ,EAAA,QAAM,cAAgD,IAAI,EAE5D,SAAS,GAAqB,CAO5B,OALE,OAAO,OAAW,KAClB,OAAO,OAAO,YAAe,WAEtB,OAAO,WAAW,EAEpB,WAAW,KAAK,IAAI,EAAE,GAAG,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,EAAG,EAAE,GACxE,CAEA,SAAgB,EAAsB,CACpC,YAGC,CACD,IAAM,EAAW,EAAA,QAAM,qBACrB,EAAA,uBACA,EAAA,YACA,EAAA,WACF,EAEM,EAAsB,EAAA,QAAM,gBAAkB,CAClD,EAAA,2BAA2B,EAC3B,EAAK,YAAY,kBAAkB,CACjC,SAAU,EAAA,WAAW,iBACvB,CAAC,CACH,EAAG,CAAC,CAAC,EAEC,EAAY,EAAA,QAAM,aACrB,EAAmB,IAA0B,CAC5C,IAAM,EAAgB,EAAA,mBAAmB,GAAG,WAAa,KACnD,EAAY,EAAA,mBAAmB,GAAG,OAAS,KAC3C,EAAY,GAAS,KAEvB,IAAc,GAAiB,IAAc,IAGjD,EAAA,mBAAmB,CADc,YAAW,MAAO,CAChC,CAAI,EACvB,EAAoB,EAStB,EACA,CAAC,CAAmB,CACtB,EAGM,EAAa,EAAA,QAAM,YACtB,GAA0C,CACzC,IAAM,EAAgB,CAAE,GAAG,EAAS,GAAI,EAAW,CAAE,EAKrD,OAHA,EAAA,sBAAsB,CADR,GAAG,EAAA,sBAAsB,EAAG,CACpB,CAAI,EAC1B,EAAA,mBAAmB,CAAE,UAAW,EAAK,EAAG,CAAC,EACzC,EAAoB,EACb,CACT,EACA,CAAC,CAAmB,CACtB,EAEM,EAAgB,EAAA,QAAM,aACzB,EAAY,IAAwC,CACnD,IAAM,EAAO,EAAA,sBAAsB,EAAE,KAAM,GAAM,EAAE,KAAO,CAAE,EACtD,EAAqB,EAAA,mBAAmB,GAAG,WAAa,KAI9D,EAAA,sBAHa,EAAA,sBAAsB,EAAE,IAAK,GACxC,EAAE,KAAO,EAAK,CAAE,GAAG,EAAG,GAAG,CAAM,EAAI,CAEf,CAAI,EAK1B,IAAM,EACJ,EAAM,OAAS,IAAA,IACf,IAAS,IAAA,IACT,EAAM,OAAS,EAAK,KAChB,EACJ,EAAM,SAAW,IAAA,IACjB,IAAS,IAAA,IACT,EAAM,SAAW,EAAK,QACpB,GAAe,KACjB,EAAA,mBAAmB,CAAE,EACjB,IAAuB,GACzB,EAAoB,EAG1B,EACA,CAAC,CAAmB,CACtB,EAEM,EAAgB,EAAA,QAAM,YACzB,GAAe,CAEd,EAAA,sBADa,EAAA,sBAAsB,EAAE,OAAQ,GAAM,EAAE,KAAO,CACtC,CAAI,EAC1B,EAAA,kBAAkB,CAAE,EACpB,EAAoB,CAKtB,EACA,CAAC,CAAmB,CACtB,EAEM,EAAQ,EAAA,QAAM,aACX,CACL,SAAU,EAAS,SACnB,OAAQ,EAAS,OACjB,YACA,aACA,gBACA,eACF,GACA,CAAC,EAAU,EAAW,EAAY,EAAe,CAAa,CAChE,EAEA,OACE,EAAA,EAAA,KAAC,EAAqB,SAAtB,CAAsC,QACnC,UAC4B,CAAA,CAEnC,CAEA,SAAgB,GAAqD,CACnE,IAAM,EAAM,EAAA,QAAM,WAAW,CAAoB,EACjD,GAAI,CAAC,EACH,MAAU,MACR,qEACF,EAEF,OAAO,CACT,CAcA,SAAgB,GAA0C,CACxD,IAAM,EAAM,EAAA,QAAM,WAAW,CAAoB,EAEjD,OADI,EAAY,EAAI,OACb,CAAE,QAAS,EAAA,wBAAwB,GAAK,EAAA,WAAY,MAAO,IAAK,CACzE"}
1
+ {"version":3,"file":"active-backend-context.cjs","names":[],"sources":["../../src/contexts/active-backend-context.tsx"],"sourcesContent":["import React from \"react\";\nimport { clearCachedAgentServerInfo } from \"#/api/agent-server-compatibility\";\nimport {\n getActiveSelection,\n getRegisteredBackends,\n getSnapshot,\n NO_BACKEND,\n setActiveSelection,\n setRegisteredBackends,\n subscribeActiveBackend,\n} from \"#/api/backend-registry/active-store\";\nimport { makeDefaultLocalBackend } from \"#/api/backend-registry/default-backend\";\nimport {\n dropBackendHealth,\n resetBackendHealth,\n} from \"#/api/backend-registry/health-store\";\nimport {\n type Backend,\n type BackendSelection,\n type ResolvedActiveBackend,\n} from \"#/api/backend-registry/types\";\nimport { QUERY_KEYS } from \"#/hooks/query/query-keys\";\nimport { queryClient } from \"#/query-client-config\";\nimport {\n setTelemetryCloudContext,\n setTelemetryIdentity,\n} from \"#/services/telemetry\";\n\ntype BackendInput = Omit<Backend, \"id\" | \"connectionRevision\">;\n\ninterface ActiveBackendContextValue {\n backends: Backend[];\n active: ResolvedActiveBackend;\n setActive: (backendId: string, orgId?: string | null) => void;\n addBackend: (backend: BackendInput) => Backend;\n updateBackend: (id: string, patch: Partial<BackendInput>) => void;\n removeBackend: (id: string) => void;\n}\n\nconst ActiveBackendContext =\n React.createContext<ActiveBackendContextValue | null>(null);\n\nfunction generateId(): string {\n if (\n typeof crypto !== \"undefined\" &&\n typeof crypto.randomUUID === \"function\"\n ) {\n return crypto.randomUUID();\n }\n return `backend-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction applyTelemetrySelectionBoundary(\n previous: ResolvedActiveBackend,\n next: ResolvedActiveBackend,\n): void {\n const previousWasCloud = previous.backend.kind === \"cloud\";\n const nextIsCloud = next.backend.kind === \"cloud\";\n if (!previousWasCloud && !nextIsCloud) return;\n\n setTelemetryCloudContext(null);\n\n if (\n nextIsCloud &&\n (!previousWasCloud || previous.backend.id !== next.backend.id)\n ) {\n void setTelemetryIdentity(null);\n }\n}\n\nexport function ActiveBackendProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const snapshot = React.useSyncExternalStore(\n subscribeActiveBackend,\n getSnapshot,\n getSnapshot,\n );\n\n const retryBootstrapProbe = React.useCallback(() => {\n clearCachedAgentServerInfo();\n void queryClient.invalidateQueries({\n queryKey: QUERY_KEYS.WEB_CLIENT_CONFIG,\n });\n }, []);\n\n const setActive = React.useCallback(\n (backendId: string, orgId?: string | null) => {\n const currentSnapshot = getSnapshot();\n const prevBackendId = getActiveSelection()?.backendId ?? null;\n const prevOrgId = getActiveSelection()?.orgId ?? null;\n const nextOrgId = orgId ?? null;\n\n if (backendId === prevBackendId && nextOrgId === prevOrgId) return;\n\n const registeredBackends = getRegisteredBackends();\n const selectedBackend = registeredBackends.find(\n (b) => b.id === backendId,\n );\n const nextActive: ResolvedActiveBackend = {\n backend: selectedBackend ?? registeredBackends[0] ?? NO_BACKEND,\n orgId: selectedBackend ? nextOrgId : null,\n };\n applyTelemetrySelectionBoundary(currentSnapshot.active, nextActive);\n\n const next: BackendSelection = { backendId, orgId: nextOrgId };\n setActiveSelection(next);\n retryBootstrapProbe();\n\n // No blanket `invalidateQueries()` here. Long-lived queries\n // (`useSettings`, `usePaginatedConversations`,\n // `useGitRepositories`, `useAppInstallations`,\n // `useCloudCurrentUserId`, `useGitUser`, …) include the active\n // backend's `id` and `orgId` in their query keys, so React Query\n // treats a backend/org switch as a brand-new query and fetches\n // automatically — once, with no duplicate waves.\n },\n [retryBootstrapProbe],\n );\n\n // @spec BM-001 — Auto-switch to newly connected backend\n const addBackend = React.useCallback(\n (backend: BackendInput): Backend => {\n const previousActive = getSnapshot().active;\n const next: Backend = { ...backend, id: generateId() };\n const list = [...getRegisteredBackends(), next];\n applyTelemetrySelectionBoundary(previousActive, {\n backend: next,\n orgId: null,\n });\n setRegisteredBackends(list);\n setActiveSelection({ backendId: next.id });\n retryBootstrapProbe();\n return next;\n },\n [retryBootstrapProbe],\n );\n\n const updateBackend = React.useCallback(\n (id: string, patch: Partial<BackendInput>) => {\n const prev = getRegisteredBackends().find((b) => b.id === id);\n const activeBeforeUpdate = getSnapshot().active.backend.id;\n // Re-arm health polling when the user edits the fields that\n // actually drive the probe. Cosmetic edits (name) shouldn't\n // re-enable a backend that was disabled for being unreachable.\n const hostChanged =\n patch.host !== undefined &&\n prev !== undefined &&\n patch.host !== prev.host;\n const apiKeyChanged =\n patch.apiKey !== undefined &&\n prev !== undefined &&\n patch.apiKey !== prev.apiKey;\n const list = getRegisteredBackends().map((b) =>\n b.id === id\n ? {\n ...b,\n ...patch,\n connectionRevision:\n hostChanged || apiKeyChanged\n ? (b.connectionRevision ?? 0) + 1\n : b.connectionRevision,\n }\n : b,\n );\n setRegisteredBackends(list);\n\n if (hostChanged || apiKeyChanged) {\n resetBackendHealth(id);\n if (activeBeforeUpdate === id) {\n if (prev?.kind === \"cloud\") {\n setTelemetryCloudContext(null);\n void setTelemetryIdentity(null);\n }\n retryBootstrapProbe();\n }\n }\n },\n [retryBootstrapProbe],\n );\n\n const removeBackend = React.useCallback(\n (id: string) => {\n const removed = getRegisteredBackends().find((b) => b.id === id);\n const wasActiveCloud =\n removed?.kind === \"cloud\" &&\n getSnapshot().active.backend.id === removed.id;\n const list = getRegisteredBackends().filter((b) => b.id !== id);\n setRegisteredBackends(list);\n if (wasActiveCloud) {\n setTelemetryCloudContext(null);\n void setTelemetryIdentity(null);\n }\n dropBackendHealth(id);\n retryBootstrapProbe();\n // If the active selection pointed at this backend, the active\n // store falls back to the first remaining local backend (or the\n // env-derived default if no locals exist); consumer hooks re-key\n // by the new active backend identity and refetch automatically.\n },\n [retryBootstrapProbe],\n );\n\n const value = React.useMemo<ActiveBackendContextValue>(\n () => ({\n backends: snapshot.backends,\n active: snapshot.active,\n setActive,\n addBackend,\n updateBackend,\n removeBackend,\n }),\n [snapshot, setActive, addBackend, updateBackend, removeBackend],\n );\n\n return (\n <ActiveBackendContext.Provider value={value}>\n {children}\n </ActiveBackendContext.Provider>\n );\n}\n\nexport function useActiveBackendContext(): ActiveBackendContextValue {\n const ctx = React.useContext(ActiveBackendContext);\n if (!ctx) {\n throw new Error(\n \"useActiveBackendContext must be used inside <ActiveBackendProvider>\",\n );\n }\n return ctx;\n}\n\n/**\n * Read the resolved active backend.\n *\n * Falls back to a synthesized env-derived local backend when called\n * outside an `<ActiveBackendProvider>` (e.g. from a unit test that\n * mounts a narrow component without the full provider stack). That\n * synthesized backend is identical to the seed used on first install.\n *\n * Components that need to mutate state (`setActive`, `addBackend`,\n * etc.) must use `useActiveBackendContext()` directly — that throws if\n * the provider is missing, since mutation requires the live store.\n */\nexport function useActiveBackend(): ResolvedActiveBackend {\n const ctx = React.useContext(ActiveBackendContext);\n if (ctx) return ctx.active;\n return { backend: makeDefaultLocalBackend() ?? NO_BACKEND, orgId: null };\n}\n"],"mappings":"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"}
@@ -1,11 +1,12 @@
1
1
  import React from "react";
2
2
  import { type Backend, type ResolvedActiveBackend } from "#/api/backend-registry/types";
3
+ type BackendInput = Omit<Backend, "id" | "connectionRevision">;
3
4
  interface ActiveBackendContextValue {
4
5
  backends: Backend[];
5
6
  active: ResolvedActiveBackend;
6
7
  setActive: (backendId: string, orgId?: string | null) => void;
7
- addBackend: (backend: Omit<Backend, "id">) => Backend;
8
- updateBackend: (id: string, patch: Partial<Omit<Backend, "id">>) => void;
8
+ addBackend: (backend: BackendInput) => Backend;
9
+ updateBackend: (id: string, patch: Partial<BackendInput>) => void;
9
10
  removeBackend: (id: string) => void;
10
11
  }
11
12
  export declare function ActiveBackendProvider({ children, }: {