@openhands/agent-canvas 1.0.0-beta.9 → 1.0.0-rc.2

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 (405) hide show
  1. package/README.md +2 -2
  2. package/README.windows.md +2 -2
  3. package/build/assets/{QueryClientProvider-w1cZWY41.js → QueryClientProvider-7oLZ1RtQ.js} +1 -1
  4. package/build/assets/{Trans-BJeYqz2A.js → Trans-rF21Jwln.js} +1 -1
  5. package/build/assets/{acp-providers-DJr8DlNG.js → acp-providers-DZEi8wDz.js} +1 -1
  6. package/build/assets/active-backend-context-CQTk4wD8.js +1 -0
  7. package/build/assets/add-backend-modal-CIfhseZn.js +1 -0
  8. package/build/assets/agent-server-client-options-Dvgeb3x4.js +1 -0
  9. package/build/assets/agent-server-compatibility-BANjmMTo.js +1 -0
  10. package/build/assets/agent-server-conversation-service.api-B82pNNTm.js +5 -0
  11. package/build/assets/{agent-settings-BXBaybB_.js → agent-settings-B6htMeS2.js} +1 -1
  12. package/build/assets/{alert-banner-NeUl1-PQ.js → alert-banner-D41ZKDZT.js} +1 -1
  13. package/build/assets/{analytics-consent-form-modal-CmWcFlc6.js → analytics-consent-form-modal-TINgM_jV.js} +1 -1
  14. package/build/assets/api-key-entry-screen-Di1vHgIU.js +1 -0
  15. package/build/assets/{app-settings-C-U6jONZ.js → app-settings-CjCa1MOB.js} +1 -1
  16. package/build/assets/automation-detail-DPoxzTdV.js +1 -0
  17. package/build/assets/{automations-list-BLJzAd-p.js → automations-list-DwUEe2Ea.js} +1 -1
  18. package/build/assets/{back-nav-button-DgkK0Ka6.js → back-nav-button-BDM9vr_o.js} +1 -1
  19. package/build/assets/backend-form-modal-B6q897ZX.js +1 -0
  20. package/build/assets/{backend-synced-settings-badge-BktJcGgH.js → backend-synced-settings-badge-BwTawSCE.js} +1 -1
  21. package/build/assets/{base-modal-DZCNv0A4.js → base-modal-Ba5WcNb6.js} +1 -1
  22. package/build/assets/{brand-button-LBFNic99.js → brand-button-BoiPxAGm.js} +1 -1
  23. package/build/assets/{browser-D08Sp3ZY.js → browser-DTei6kki.js} +1 -1
  24. package/build/assets/browser-store-BjhV_9wS.js +1 -0
  25. package/build/assets/{browser-tab-be3QvXg9.js → browser-tab-DiRTKik8.js} +1 -1
  26. package/build/assets/chat-send-button-06dIuWXm.js +1 -0
  27. package/build/assets/check-BDAbW7je.js +1 -0
  28. package/build/assets/{checkmark-Rmpruj7q.js → checkmark-BB7QCG5T.js} +1 -1
  29. package/build/assets/{chevron-down-KhWYEjeW.js → chevron-down-DUxWwzTm.js} +1 -1
  30. package/build/assets/{chevron-left-small-6nyFCWVQ.js → chevron-left-small-CuuwpRi9.js} +1 -1
  31. package/build/assets/{circle-plus-check-toggle-DquBwJ_6.js → circle-plus-check-toggle-B3_W6-nt.js} +1 -1
  32. package/build/assets/{close-D_o3d8QM.js → close-Cz0OAgTy.js} +1 -1
  33. package/build/assets/{code-tag-DhsjDB-v.js → code-tag-Cz9AIz-X.js} +1 -1
  34. package/build/assets/{color-themes-0biOprdo.js → color-themes-B9n7pBQl.js} +1 -1
  35. package/build/assets/{combobox-caret-CO7eozIY.js → combobox-caret-DwMmhrrA.js} +1 -1
  36. package/build/assets/{command-store-UzKGSUC2.js → command-store-DAd3K0d_.js} +1 -1
  37. package/build/assets/{condenser-settings-BulzYEuW.js → condenser-settings-DczjwkIp.js} +1 -1
  38. package/build/assets/{confirmation-modal-CMAtd9R0.js → confirmation-modal-C_lds1Tb.js} +1 -1
  39. package/build/assets/{context-menu-list-item-D0swnhFt.js → context-menu-list-item-DhG1Ln5m.js} +1 -1
  40. package/build/assets/conversation-CBlJiDaV.js +19 -0
  41. package/build/assets/conversation-Dss8XCN_.js +1 -0
  42. package/build/assets/conversation-panel-B5sVpsz5.js +1 -0
  43. package/build/assets/conversation-service.api-B4s-xIOK.js +1 -0
  44. package/build/assets/conversation-state-store-BUU90dVq.js +1 -0
  45. package/build/assets/{conversation-store-CC-isCnP.js → conversation-store-kHcewy1E.js} +1 -1
  46. package/build/assets/{conversation-tab-empty-state-DYjKsg_c.js → conversation-tab-empty-state-5bW9CQke.js} +1 -1
  47. package/build/assets/conversation-websocket-context-C2yKCqvj.js +3 -0
  48. package/build/assets/{copy-BM0RpLez.js → copy-CA1Dblua.js} +1 -1
  49. package/build/assets/{custom-toast-handlers-BohXx7uh.js → custom-toast-handlers-fgD4IYsu.js} +1 -1
  50. package/build/assets/{declaration-DaUdB2Wg.js → declaration-IA661TBv.js} +1 -1
  51. package/build/assets/{device-verify-DiEJqpJb.js → device-verify-BVl4GEvt.js} +1 -1
  52. package/build/assets/{dist-xtCm0O6P.js → dist-B-SKiGDl.js} +1 -1
  53. package/build/assets/dist-CBUfAk0Z.js +1 -0
  54. package/build/assets/{dropdown-classes-Vqz86I0R.js → dropdown-classes-lT1LUsbO.js} +1 -1
  55. package/build/assets/edit-automation-modal-kc_FzbzK.js +1 -0
  56. package/build/assets/ellipsis-button-DRRmCrWi.js +1 -0
  57. package/build/assets/{entry.client-BvKgdCQ9.js → entry.client-CWkbusD1.js} +2 -2
  58. package/build/assets/{enum-filter-dropdown-DdFgk0EM.js → enum-filter-dropdown-DlY0Q3fj.js} +1 -1
  59. package/build/assets/{environment-switch-overlay-CuBuZOaa.js → environment-switch-overlay-BrHKX6_Z.js} +1 -1
  60. package/build/assets/{extensions-hub-Dayqvv0n.js → extensions-hub-NbQnt-cn.js} +1 -1
  61. package/build/assets/extensions-navigation-oOk5yl8X.js +1 -0
  62. package/build/assets/{file-DwHCkWZT.js → file-DM0ihEsO.js} +1 -1
  63. package/build/assets/files-tab-mK7Mdyuf.js +1 -0
  64. package/build/assets/files-tab-store-QlUCuW8b.js +1 -0
  65. package/build/assets/{folder-2h1hR1Qb.js → folder-UGYUKpqb.js} +1 -1
  66. package/build/assets/git-control-bar-branch-button-C1qmab0K.js +27 -0
  67. package/build/assets/{globe-qFjFNG6J.js → globe-2otpEmVh.js} +1 -1
  68. package/build/assets/home-ChuA06Hv.js +1 -0
  69. package/build/assets/{i18n-zDndR1Ne.js → i18n-CyvU1o95.js} +1 -1
  70. package/build/assets/install-server-modal--lZ1HSHB.js +1 -0
  71. package/build/assets/{launch-I00QV8YT.js → launch-BADsYeGp.js} +1 -1
  72. package/build/assets/{lesson-plan-C18uB_56.js → lesson-plan-5O2tVbD1.js} +1 -1
  73. package/build/assets/{link-external-DtcdPFbw.js → link-external-kU6aFXU6.js} +1 -1
  74. package/build/assets/llm-client-BnqeDPua.js +1 -0
  75. package/build/assets/llm-settings-D477P0Lg.js +1 -0
  76. package/build/assets/llm-settings-DtlQ7i4C.js +1 -0
  77. package/build/assets/{loading-spinner-DNwR4--Z.js → loading-spinner-CFuA0UNt.js} +1 -1
  78. package/build/assets/manage-backends-modal-sH7l5NgI.js +1 -0
  79. package/build/assets/manifest-17af0b17.js +1 -0
  80. package/build/assets/{markdown-renderer-D6B-u2nM.js → markdown-renderer-CZq_UdmE.js} +1 -1
  81. package/build/assets/mcp-DdQ72_AO.js +9 -0
  82. package/build/assets/mcp-client-xEdbDxOL.js +1 -0
  83. package/build/assets/{messages-Bz9TWjlh.js → messages-luW9zf1w.js} +1 -1
  84. package/build/assets/{modal-backdrop-BDqI1zBV.js → modal-backdrop-B1si6TUd.js} +1 -1
  85. package/build/assets/{modal-body-CCLCqX1J.js → modal-body-2Po2nl1e.js} +1 -1
  86. package/build/assets/{modal-classes-DwTdT3IK.js → modal-classes-9XTtWCtF.js} +1 -1
  87. package/build/assets/{modal-close-button-gQgKqUf-.js → modal-close-button-BCvw9IUN.js} +1 -1
  88. package/build/assets/model-selector-DzQRgNGZ.js +1 -0
  89. package/build/assets/{navigation-context-aNGUUtdq.js → navigation-context-CszaA-CJ.js} +1 -1
  90. package/build/assets/{navigation-link-CYkF2y3K.js → navigation-link-DXg4oo29.js} +1 -1
  91. package/build/assets/onboarding-DCL9stdH.js +1 -0
  92. package/build/assets/{openhands-logo-CHmtDV-t.js → openhands-logo-B-IDE1ER.js} +1 -1
  93. package/build/assets/{option-service.api-CGNANEcT.js → option-service.api-DHOGfYKh.js} +1 -1
  94. package/build/assets/organization-service.api-D79cdERN.js +1 -0
  95. package/build/assets/path-utils-CNd_jqv_.js +1 -0
  96. package/build/assets/{pencil-Dr0b2jL1.js → pencil-COslZGUC.js} +1 -1
  97. package/build/assets/{plan-components--aLlpASH.js → plan-components-BRiIX8Wn.js} +1 -1
  98. package/build/assets/{planner-tab-B-5EeCEm.js → planner-tab-QBnZgIXd.js} +1 -1
  99. package/build/assets/plus-D8aJZRkD.js +1 -0
  100. package/build/assets/profiles-client-CesbAK-7.js +1 -0
  101. package/build/assets/{providers-DknP6O2g.js → providers-Bpq3xFRA.js} +1 -1
  102. package/build/assets/proxy-wIasY2Po.js +1 -0
  103. package/build/assets/{query-client-config-CWWGQWvw.js → query-client-config-CITeuHD7.js} +1 -1
  104. package/build/assets/{recommended-automations-launcher-BIul0osB.js → recommended-automations-launcher-B01jchhe.js} +1 -1
  105. package/build/assets/root-BBV8Ew9E.js +2 -0
  106. package/build/assets/root-layout-pQASEqtQ.js +2 -0
  107. package/build/assets/{sdk-section-page-VmtJWH3A.js → sdk-section-page-BQKe3asw.js} +1 -1
  108. package/build/assets/{sdk-settings-schema-DFievvEK.js → sdk-settings-schema-DoRnefvb.js} +1 -1
  109. package/build/assets/{search-BeVRXvX7.js → search-Cbh-hHBu.js} +1 -1
  110. package/build/assets/secrets-service-DEIB-Cfk.js +1 -0
  111. package/build/assets/{secrets-settings-BLMvCkKm.js → secrets-settings-D2EfzdpC.js} +1 -1
  112. package/build/assets/server-client-Cz8PyIbN.js +1 -0
  113. package/build/assets/settings-B7jVceyu.js +1 -0
  114. package/build/assets/settings-client-BUlG0Gzq.js +1 -0
  115. package/build/assets/{settings-dropdown-input-DA_pzHWE.js → settings-dropdown-input-BD7ziSoR.js} +1 -1
  116. package/build/assets/{settings-gear-aNebYlCy.js → settings-gear-xGs_SPgZ.js} +1 -1
  117. package/build/assets/{settings-index-CycvkOoq.js → settings-index-Xj0v9Oas.js} +1 -1
  118. package/build/assets/{settings-input-8y5p4kze.js → settings-input-CPr7vX81.js} +1 -1
  119. package/build/assets/{settings-list-classes-Qk7zl0Wu.js → settings-list-classes-CYDn4jUg.js} +1 -1
  120. package/build/assets/{settings-modal-nJYxCsyp.js → settings-modal-CDBy1S9S.js} +1 -1
  121. package/build/assets/{settings-section-header-context-B77tsYlx.js → settings-section-header-context-aD2iq1gD.js} +1 -1
  122. package/build/assets/settings-service.api-CTQ-LpAA.js +1 -0
  123. package/build/assets/{settings-switch-ba4DuiNO.js → settings-switch-CSHSqH99.js} +1 -1
  124. package/build/assets/{settings-utils-BxzHqLmZ.js → settings-utils-BCbzc6-u.js} +1 -1
  125. package/build/assets/shared-conversation-BHEbOdHj.js +1 -0
  126. package/build/assets/{sidebar-mobile-menu-toggle-C0mmabKj.js → sidebar-mobile-menu-toggle-YYPXGikp.js} +1 -1
  127. package/build/assets/{sidebar-nav-link-BsYdDFfb.js → sidebar-nav-link-CiXbBMQx.js} +1 -1
  128. package/build/assets/{sidebar-store-DnQAJAE5.js → sidebar-store-B76R2gP8.js} +1 -1
  129. package/build/assets/{skill-card-pill-row-BhUlGcYB.js → skill-card-pill-row-BXILn-GK.js} +1 -1
  130. package/build/assets/{skills-TYjOUQ2d.js → skills-CCaEu1KQ.js} +1 -1
  131. package/build/assets/skills-client-Cr9F5306.js +1 -0
  132. package/build/assets/{skills-plugins-D0pdqgKa.js → skills-plugins-Bs5HiF1O.js} +1 -1
  133. package/build/assets/{skills-settings-VqKTkmVl.js → skills-settings-CQYxMmWf.js} +1 -1
  134. package/build/assets/{styled-tooltip-TCp7svY3.js → styled-tooltip-DEr7oa0m.js} +1 -1
  135. package/build/assets/suspense-C9MBE_9N.js +1 -0
  136. package/build/assets/{switch-skeleton-cKrdaYGj.js → switch-skeleton-C87Tx3Tc.js} +1 -1
  137. package/build/assets/{task-list-tab-BiizRsY3.js → task-list-tab-R9N3Wd-U.js} +1 -1
  138. package/build/assets/telemetry-DCrd7gnV.js +2 -0
  139. package/build/assets/{terminal-CpgZx6go.js → terminal-BTM3UFcQ.js} +1 -1
  140. package/build/assets/{terminal-BSYITdM0.js → terminal-DQJ6IJUd.js} +1 -1
  141. package/build/assets/{toggle-switch-CUgOZqZu.js → toggle-switch-C-7juZ1u.js} +1 -1
  142. package/build/assets/{trash-2-CbVljPko.js → trash-2-DAKXV2Wm.js} +1 -1
  143. package/build/assets/{typography-Bvw0IxaN.js → typography-U1gkzkXo.js} +1 -1
  144. package/build/assets/{u-check-circle-half-DjpjzWu3.js → u-check-circle-half-CirnoxXG.js} +1 -1
  145. package/build/assets/{u-check-circle-u9QiS4Fr.js → u-check-circle-lbkXL2z4.js} +1 -1
  146. package/build/assets/{u-circuit-DlBlOwx9.js → u-circuit-Danff2ks.js} +1 -1
  147. package/build/assets/{u-edit-BIYzjs3v.js → u-edit-CH5nNya1.js} +1 -1
  148. package/build/assets/{use-active-conversation-q1wT8LI5.js → use-active-conversation-BY5F6A1G.js} +1 -1
  149. package/build/assets/use-agent-settings-schema-CsuMq16G.js +1 -0
  150. package/build/assets/{use-agent-state-CCHlVqvY.js → use-agent-state-DX5NKEa_.js} +1 -1
  151. package/build/assets/{use-cloud-current-user-id-BAKf91Zx.js → use-cloud-current-user-id-e1Pk7NxQ.js} +1 -1
  152. package/build/assets/use-config-DSzkljTq.js +1 -0
  153. package/build/assets/use-create-conversation-4iJytCT1.js +1 -0
  154. package/build/assets/{use-event-store-Cxqc45Sw.js → use-event-store-Rw1YbvLm.js} +1 -1
  155. package/build/assets/use-get-secrets-BMnFFBUx.js +1 -0
  156. package/build/assets/{use-handle-plan-click-Bfl0zIBr.js → use-handle-plan-click-DYd5a6zN.js} +1 -1
  157. package/build/assets/use-is-authed-DrocXcet.js +1 -0
  158. package/build/assets/{use-launch-skill-in-chat-3ydwpi_M.js → use-launch-skill-in-chat-BoqKmEHC.js} +1 -1
  159. package/build/assets/use-llm-profiles-BhZRf-NX.js +1 -0
  160. package/build/assets/use-runtime-is-ready-DP-KKHO6.js +1 -0
  161. package/build/assets/{use-save-settings-rE9aA29R.js → use-save-settings-hK6LYt0s.js} +1 -1
  162. package/build/assets/use-settings-Clf0Y_P3.js +1 -0
  163. package/build/assets/{use-settings-nav-items-C7MOWj09.js → use-settings-nav-items-oZ-BlOWX.js} +1 -1
  164. package/build/assets/use-skills-v8pQ02ze.js +1 -0
  165. package/build/assets/{use-task-list-YMkSzdDv.js → use-task-list-DydbuRFM.js} +1 -1
  166. package/build/assets/{use-tracking-DQYdZpxi.js → use-tracking-DQU60djN.js} +1 -1
  167. package/build/assets/use-unified-vscode-url-D2Buvmxj.js +1 -0
  168. package/build/assets/use-user-conversation-DwOGM1lc.js +1 -0
  169. package/build/assets/{useMutation-DDo48A8t.js → useMutation-7hG0GuPx.js} +1 -1
  170. package/build/assets/useQuery-JDs8UaWj.js +1 -0
  171. package/build/assets/{useTranslation-CEcjrme-.js → useTranslation-CbJtty1g.js} +1 -1
  172. package/build/assets/{utils-CdgBzLA7.js → utils-CVcuFUYj.js} +1 -1
  173. package/build/assets/{vendor~browser-DWk6fNtJ.js → vendor~browser-3J6WDaAB.js} +1 -1
  174. package/build/assets/{vendor~browser-tab-NZdVoI2Z.js → vendor~browser-tab-DYZ-OmbT.js} +1 -1
  175. package/build/assets/{vendor~conversation-panel~conversation-gp03cWZW.js → vendor~conversation-panel~conversation-DYHL7QoY.js} +1 -1
  176. package/build/assets/{vendor~conversation-panel~conversation~index-BZ5C6Xpz.js → vendor~conversation-panel~conversation~index-Be58Romv.js} +1 -1
  177. package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~oli4dvxu-BodGsxSf.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~oli4dvxu-CBEOG8NF.js} +1 -1
  178. package/build/assets/{vendor~files-tab-Buz36Y-q.js → vendor~files-tab-Diy4WrQz.js} +1 -1
  179. package/build/assets/{vendor~home~conversation-panel~conversation-DG0H5SkJ.js → vendor~home~conversation-panel~conversation-DZ-F7J6T.js} +1 -1
  180. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-Ceeqkj0k.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BighOCzm.js} +1 -1
  181. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-9Il_wz8U.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CWwn0K2j.js} +1 -1
  182. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CXivI4Ym.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-Cntsv2EN.js} +1 -1
  183. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-B7I1ZxCx.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-D13hiNGV.js} +1 -1
  184. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-1pTajrpX.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-dZ3D8RVL.js} +1 -1
  185. package/build/assets/{vendor~launch-DXL78kBf.js → vendor~launch-D65Vw0VZ.js} +1 -1
  186. package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-CfAc3nMS.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-BJPgfJoU.js} +1 -1
  187. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation-DkwcKRtv.js → vendor~root-layout~home~conversation-panel~conversation-Cg0nXqVs.js} +1 -1
  188. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-DSqEbr0N.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~bok0tgtf-Dr8Ly0at.js} +1 -1
  189. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-BC9XTECT.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~bok0tgtf-DveauQfg.js} +1 -1
  190. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~k776hupu-D0XUSHNN.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~jpfhx3ls-BkicN-14.js} +2 -2
  191. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~jxrvuot9-Cwz6a1DC.js +48 -0
  192. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-CcFtthyg.js → vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-C37jLHRk.js} +1 -1
  193. package/build/assets/{vendor~root-layout~home~mcp~automations-list-BnIlGhjl.js → vendor~root-layout~home~mcp~automations-list-BTTZ58Mb.js} +1 -1
  194. package/build/assets/{vendor~root-layout~home~mcp~automations-list-cNHi83v_.js → vendor~root-layout~home~mcp~automations-list-JQ-neDIa.js} +1 -1
  195. package/build/assets/{vendor~root-layout~home~mcp~llm-settings~agent-settings~condenser-settings~verification-set~o7tv66sg-BGWUbqUq.js → vendor~root-layout~home~mcp~llm-settings~agent-settings~condenser-settings~verification-set~o7tv66sg-CbuXadI-.js} +1 -1
  196. package/build/assets/{vendor~root-layout~home~mcp~llm-settings~agent-settings~condenser-settings~verification-set~o7tv66sg-BuCSnjsW.js → vendor~root-layout~home~mcp~llm-settings~agent-settings~condenser-settings~verification-set~o7tv66sg-UYEKKX0Y.js} +2 -2
  197. package/build/assets/{verification-settings-CIqtxWat.js → verification-settings-Rabe5TpK.js} +1 -1
  198. package/build/assets/{vscode-tab-DEt72yJX.js → vscode-tab-zLD5Z-PP.js} +1 -1
  199. package/build/assets/{waiting-for-runtime-message-DSjJfeoj.js → waiting-for-runtime-message-B1Dzhtj5.js} +1 -1
  200. package/build/assets/x-8AbJWTbX.js +1 -0
  201. package/build/assets/{x-mark-DsJ9tDD0.js → x-mark-CmcVOTk2.js} +1 -1
  202. package/build/index.html +4 -4
  203. package/build/locales/ar/openhands.json +1 -0
  204. package/build/locales/ca/openhands.json +1 -0
  205. package/build/locales/de/openhands.json +1 -0
  206. package/build/locales/en/openhands.json +1 -0
  207. package/build/locales/es/openhands.json +1 -0
  208. package/build/locales/fr/openhands.json +1 -0
  209. package/build/locales/it/openhands.json +1 -0
  210. package/build/locales/ja/openhands.json +1 -0
  211. package/build/locales/ko-KR/openhands.json +1 -0
  212. package/build/locales/no/openhands.json +1 -0
  213. package/build/locales/pt/openhands.json +1 -0
  214. package/build/locales/tr/openhands.json +1 -0
  215. package/build/locales/uk/openhands.json +1 -0
  216. package/build/locales/zh-CN/openhands.json +1 -0
  217. package/build/locales/zh-TW/openhands.json +1 -0
  218. package/dist/api/agent-server-adapter.cjs +2 -2
  219. package/dist/api/agent-server-adapter.cjs.map +1 -1
  220. package/dist/api/agent-server-adapter.js +6 -3
  221. package/dist/api/agent-server-adapter.js.map +1 -1
  222. package/dist/api/cloud/proxy.cjs +1 -1
  223. package/dist/api/cloud/proxy.cjs.map +1 -1
  224. package/dist/api/cloud/proxy.d.ts +18 -6
  225. package/dist/api/cloud/proxy.js +1 -1
  226. package/dist/api/cloud/proxy.js.map +1 -1
  227. package/dist/api/config-service/config-service.api.cjs +1 -1
  228. package/dist/api/config-service/config-service.api.cjs.map +1 -1
  229. package/dist/api/config-service/config-service.api.d.ts +12 -0
  230. package/dist/api/config-service/config-service.api.js +55 -18
  231. package/dist/api/config-service/config-service.api.js.map +1 -1
  232. package/dist/api/conversation-metadata-store.cjs.map +1 -1
  233. package/dist/api/conversation-metadata-store.d.ts +8 -0
  234. package/dist/api/conversation-metadata-store.js.map +1 -1
  235. package/dist/api/conversation-service/agent-server-conversation-service.types.d.ts +9 -0
  236. package/dist/components/features/chat/switch-profile-button.cjs +1 -1
  237. package/dist/components/features/chat/switch-profile-button.cjs.map +1 -1
  238. package/dist/components/features/chat/switch-profile-button.js +5 -5
  239. package/dist/components/features/chat/switch-profile-button.js.map +1 -1
  240. package/dist/components/features/conversation-panel/skills-modal.cjs +1 -1
  241. package/dist/components/features/conversation-panel/skills-modal.cjs.map +1 -1
  242. package/dist/components/features/conversation-panel/skills-modal.js +34 -37
  243. package/dist/components/features/conversation-panel/skills-modal.js.map +1 -1
  244. package/dist/components/features/settings/llm-profiles/profile-actions-menu.cjs +1 -1
  245. package/dist/components/features/settings/llm-profiles/profile-actions-menu.js +1 -0
  246. package/dist/components/features/skills/extensions-navigation.cjs +1 -1
  247. package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
  248. package/dist/components/features/skills/extensions-navigation.d.ts +0 -8
  249. package/dist/components/features/skills/extensions-navigation.js +34 -51
  250. package/dist/components/features/skills/extensions-navigation.js.map +1 -1
  251. package/dist/constants/acp-providers.cjs +1 -1
  252. package/dist/constants/acp-providers.js +1 -1
  253. package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
  254. package/dist/hooks/mutation/use-create-conversation.cjs.map +1 -1
  255. package/dist/hooks/mutation/use-create-conversation.js +26 -14
  256. package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
  257. package/dist/hooks/mutation/use-switch-llm-profile-and-log.cjs +1 -1
  258. package/dist/hooks/mutation/use-switch-llm-profile-and-log.cjs.map +1 -1
  259. package/dist/hooks/mutation/use-switch-llm-profile-and-log.js +26 -15
  260. package/dist/hooks/mutation/use-switch-llm-profile-and-log.js.map +1 -1
  261. package/dist/hooks/query/use-verified-models.cjs +1 -1
  262. package/dist/hooks/query/use-verified-models.cjs.map +1 -1
  263. package/dist/hooks/query/use-verified-models.js +7 -6
  264. package/dist/hooks/query/use-verified-models.js.map +1 -1
  265. package/dist/i18n/declaration.cjs +1 -1
  266. package/dist/i18n/declaration.cjs.map +1 -1
  267. package/dist/i18n/declaration.d.ts +1 -0
  268. package/dist/i18n/declaration.js +1 -1
  269. package/dist/i18n/declaration.js.map +1 -1
  270. package/dist/i18n/translation.cjs +1 -1
  271. package/dist/i18n/translation.cjs.map +1 -1
  272. package/dist/i18n/translation.js +17 -0
  273. package/dist/i18n/translation.js.map +1 -1
  274. package/dist/index.cjs +1 -1
  275. package/dist/index.js +10 -10
  276. package/dist/lib/index.cjs +1 -1
  277. package/dist/lib/index.js +1 -1
  278. package/dist/locales/ar/openhands.json +1 -0
  279. package/dist/locales/ca/openhands.json +1 -0
  280. package/dist/locales/de/openhands.json +1 -0
  281. package/dist/locales/en/openhands.json +1 -0
  282. package/dist/locales/es/openhands.json +1 -0
  283. package/dist/locales/fr/openhands.json +1 -0
  284. package/dist/locales/it/openhands.json +1 -0
  285. package/dist/locales/ja/openhands.json +1 -0
  286. package/dist/locales/ko-KR/openhands.json +1 -0
  287. package/dist/locales/no/openhands.json +1 -0
  288. package/dist/locales/pt/openhands.json +1 -0
  289. package/dist/locales/tr/openhands.json +1 -0
  290. package/dist/locales/uk/openhands.json +1 -0
  291. package/dist/locales/zh-CN/openhands.json +1 -0
  292. package/dist/locales/zh-TW/openhands.json +1 -0
  293. package/dist/package.cjs +1 -1
  294. package/dist/package.cjs.map +1 -1
  295. package/dist/package.js +1 -1
  296. package/dist/package.js.map +1 -1
  297. package/dist/routes/mcp.cjs +1 -1
  298. package/dist/routes/mcp.cjs.map +1 -1
  299. package/dist/routes/mcp.d.ts +0 -1
  300. package/dist/routes/mcp.js +0 -1
  301. package/dist/routes/mcp.js.map +1 -1
  302. package/package.json +1 -1
  303. package/scripts/dev-safe.mjs +18 -2
  304. package/build/assets/acp-route-guard-A__sWgbc.js +0 -1
  305. package/build/assets/active-backend-context-I2w666XY.js +0 -1
  306. package/build/assets/add-backend-modal-BDBDBXsJ.js +0 -1
  307. package/build/assets/agent-server-client-options-9agOSarV.js +0 -1
  308. package/build/assets/agent-server-compatibility-B7QStIcH.js +0 -1
  309. package/build/assets/agent-server-conversation-service.api-Cagoqq1V.js +0 -5
  310. package/build/assets/api-key-entry-screen-ByXA4hXH.js +0 -1
  311. package/build/assets/automation-detail-Dbmgt974.js +0 -1
  312. package/build/assets/backend-form-modal-CeB983Sj.js +0 -1
  313. package/build/assets/browser-store-JRrcGdlk.js +0 -1
  314. package/build/assets/chat-send-button-5qz0zj6R.js +0 -1
  315. package/build/assets/check-CZhEL6rP.js +0 -1
  316. package/build/assets/conversation-BrjF2-Ky.js +0 -1
  317. package/build/assets/conversation-HgR_TTPE.js +0 -19
  318. package/build/assets/conversation-panel-BlRcO5AC.js +0 -1
  319. package/build/assets/conversation-service.api-B_Pdmwsa.js +0 -1
  320. package/build/assets/conversation-state-store-D-w0uurj.js +0 -1
  321. package/build/assets/conversation-websocket-context-G95yfL81.js +0 -3
  322. package/build/assets/dist-Bl-1K5Tv.js +0 -1
  323. package/build/assets/edit-automation-modal-CNZgSSiH.js +0 -1
  324. package/build/assets/extensions-navigation-yFLAU06N.js +0 -1
  325. package/build/assets/files-tab-CMredyYX.js +0 -1
  326. package/build/assets/files-tab-store-DLU28g8C.js +0 -1
  327. package/build/assets/git-control-bar-branch-button-D8blTNXh.js +0 -27
  328. package/build/assets/home-TrU0fLgG.js +0 -1
  329. package/build/assets/install-server-modal-D8Q0xZcN.js +0 -1
  330. package/build/assets/llm-client-BqyLKgUN.js +0 -1
  331. package/build/assets/llm-settings-C4R4HMUO.js +0 -1
  332. package/build/assets/llm-settings-Dq3w2cob.js +0 -1
  333. package/build/assets/manage-backends-modal-Ceo_SOcf.js +0 -1
  334. package/build/assets/manifest-8c2efa8a.js +0 -1
  335. package/build/assets/mcp-EvrLVTla.js +0 -9
  336. package/build/assets/model-selector-DoL0CL0_.js +0 -1
  337. package/build/assets/onboarding-DLr9jbKH.js +0 -1
  338. package/build/assets/organization-service.api-Dn74hBTH.js +0 -1
  339. package/build/assets/path-utils-BjxzIGLp.js +0 -1
  340. package/build/assets/plus-DT-M0FA1.js +0 -1
  341. package/build/assets/profiles-client-BrqNmaDV.js +0 -1
  342. package/build/assets/proxy-sRh0WKI7.js +0 -1
  343. package/build/assets/root-BietmyRa.js +0 -2
  344. package/build/assets/root-layout-BgPi-t57.js +0 -2
  345. package/build/assets/secrets-service-DVtlLWY8.js +0 -1
  346. package/build/assets/server-client-DYv_GHPl.js +0 -1
  347. package/build/assets/settings-CXvJUx_j.js +0 -1
  348. package/build/assets/settings-service.api-DxIEtvx6.js +0 -1
  349. package/build/assets/shared-conversation-x41nZQi7.js +0 -1
  350. package/build/assets/telemetry-3piyXm5H.js +0 -2
  351. package/build/assets/use-agent-settings-schema-Yxf7KGyG.js +0 -1
  352. package/build/assets/use-config-DwfigQ_Y.js +0 -1
  353. package/build/assets/use-create-conversation-BEzddjXn.js +0 -1
  354. package/build/assets/use-get-secrets-BlO1BfUo.js +0 -1
  355. package/build/assets/use-is-authed-hHndEep7.js +0 -1
  356. package/build/assets/use-llm-profiles-E-jjZMZw.js +0 -1
  357. package/build/assets/use-runtime-is-ready-DBWzvAmc.js +0 -1
  358. package/build/assets/use-settings-BPTbE7lg.js +0 -1
  359. package/build/assets/use-skills-QhoaIYGF.js +0 -1
  360. package/build/assets/use-unified-vscode-url-DFtNIC1Q.js +0 -1
  361. package/build/assets/use-user-conversation-BRAseenw.js +0 -1
  362. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~dp08i1qy-D8soyAAx.js +0 -48
  363. package/build/assets/vendor~root~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-s~jaomi49z-Cw89stA6.js +0 -1
  364. package/build/assets/x-JOBEVLW0.js +0 -1
  365. package/dist/components/features/conversation-panel/skills-runtime-waiting-state.cjs +0 -2
  366. package/dist/components/features/conversation-panel/skills-runtime-waiting-state.cjs.map +0 -1
  367. package/dist/components/features/conversation-panel/skills-runtime-waiting-state.d.ts +0 -1
  368. package/dist/components/features/conversation-panel/skills-runtime-waiting-state.js +0 -21
  369. package/dist/components/features/conversation-panel/skills-runtime-waiting-state.js.map +0 -1
  370. package/dist/utils/acp-route-guard.cjs +0 -1
  371. package/dist/utils/acp-route-guard.d.ts +0 -26
  372. package/dist/utils/acp-route-guard.js +0 -4
  373. /package/build/assets/{agent-server-ui-style-scope-BwIZYdC1.js → agent-server-ui-style-scope-Bhc5vpWO.js} +0 -0
  374. /package/build/assets/{automation-DJ_3GeXD.js → automation-LZB0MjdV.js} +0 -0
  375. /package/build/assets/{common-DqjLSBOt.js → common-Cfviy7yT.js} +0 -0
  376. /package/build/assets/{context-CEQZwATj.js → context-BBqptpXX.js} +0 -0
  377. /package/build/assets/{conversation-local-storage-YmOVXxxW.js → conversation-local-storage-D5Tre_GA.js} +0 -0
  378. /package/build/assets/{createLucideIcon-Ddu8jDOQ.js → createLucideIcon-C9OEnwvX.js} +0 -0
  379. /package/build/assets/{environment-switch-store-CiurvTtK.js → environment-switch-store-BpKxp6Xq.js} +0 -0
  380. /package/build/assets/{git-status-mapper-DnL9OC8_.js → git-status-mapper-N4-7eaeC.js} +0 -0
  381. /package/build/assets/{handle-capture-consent-3XrjZ8wi.js → handle-capture-consent-OitMkDHc.js} +0 -0
  382. /package/build/assets/{health-store-B5f0S2FY.js → health-store-d-d2ssv4.js} +0 -0
  383. /package/build/assets/{iconBase-BVhFI-0E.js → iconBase-B_5IRYeZ.js} +0 -0
  384. /package/build/assets/{map-provider-C3Z5Dx2J.js → map-provider-BHow6ugd.js} +0 -0
  385. /package/build/assets/{middleware-CfatjPYZ.js → middleware-B5rcobhi.js} +0 -0
  386. /package/build/assets/{objectWithoutPropertiesLoose-DSQKyRhw.js → objectWithoutPropertiesLoose-B-IA9dU9.js} +0 -0
  387. /package/build/assets/{query-keys-tAsQcc_9.js → query-keys-CQaji0wJ.js} +0 -0
  388. /package/build/assets/{react-Dy05vyj5.js → react-CuAHzoGi.js} +0 -0
  389. /package/build/assets/{retrieve-axios-error-message-BY-yIkIq.js → retrieve-axios-error-message-DbnSBc_1.js} +0 -0
  390. /package/build/assets/{sdk-settings-field-metadata-C6KMD-jZ.js → sdk-settings-field-metadata-CtO73dY6.js} +0 -0
  391. /package/build/assets/{settings-DGY6n4J2.js → settings-KgLvVrSm.js} +0 -0
  392. /package/build/assets/{settings-like-page-layout-classes-DNg2vKSM.js → settings-like-page-layout-classes-GknosJgv.js} +0 -0
  393. /package/build/assets/{use-breakpoint-DpxHDmuH.js → use-breakpoint-2sN462wJ.js} +0 -0
  394. /package/build/assets/{use-click-outside-element-DhxCUyWl.js → use-click-outside-element-_vianyPb.js} +0 -0
  395. /package/build/assets/{v4-khGvL7i2.js → v4-BMWDcIWQ.js} +0 -0
  396. /package/build/assets/{vendor~browser-BDNLFng6.js → vendor~browser-C3GKF4mj.js} +0 -0
  397. /package/build/assets/{vendor~conversation-panel~conversation~alert-banner-D_hRW_zc.js → vendor~conversation-panel~conversation~alert-banner-DMcFTqbt.js} +0 -0
  398. /package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~j8sdb9mk-OFpe9fX_.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~j8sdb9mk-oCzr0-9g.js} +0 -0
  399. /package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~lpdshwee-BPuuVEqr.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~lpdshwee-CTmh4bwd.js} +0 -0
  400. /package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~skills-settings~m~o9nrx3fm-D44TR8hL.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~skills-settings~m~o9nrx3fm-87v-LliW.js} +0 -0
  401. /package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-Dr3Ow7Ms.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DTosGXG7.js} +0 -0
  402. /package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~i4kjfqhl-B1TKKuuH.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~ntycl9e1-DspdqGPW.js} +0 -0
  403. /package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~e9ykmtgh-Fa-nXZ4M.js → vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~e9ykmtgh-DMH1jSwL.js} +0 -0
  404. /package/build/assets/{vendor~terminal-0ObOedYm.js → vendor~terminal-CnKZILnC.js} +0 -0
  405. /package/build/assets/{vscode-url-helper-BMq8JBhB.js → vscode-url-helper-CwQPl6QN.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","names":[],"sources":["../../src/routes/mcp.tsx"],"sourcesContent":["import React from \"react\";\nimport { AxiosError } from \"axios\";\nimport { ExtensionsNavigation } from \"#/components/features/skills/extensions-navigation\";\nimport { useTranslation } from \"react-i18next\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { BrandButton } from \"#/components/features/settings/brand-button\";\nimport { ConfirmationModal } from \"#/components/shared/modals/confirmation-modal\";\nimport { useSettings } from \"#/hooks/query/use-settings\";\nimport { useDeleteMcpServer } from \"#/hooks/mutation/use-delete-mcp-server\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { parseMcpConfig } from \"#/utils/mcp-config\";\nimport { redirectIfAcpActive } from \"#/utils/acp-route-guard\";\nimport {\n displayErrorToast,\n displaySuccessToast,\n} from \"#/utils/custom-toast-handlers\";\nimport { retrieveAxiosErrorMessage } from \"#/utils/retrieve-axios-error-message\";\nimport { settingsLikeMainScrollClassName } from \"#/utils/settings-like-page-layout-classes\";\nimport {\n findCatalogEntryForServer,\n getMcpMarketplaceCatalog,\n installedServerMatchesQuery,\n} from \"#/utils/mcp-marketplace-utils\";\nimport {\n INTEGRATION_CATALOG as MCP_MARKETPLACE,\n type IntegrationCatalogEntry as MarketplaceEntry,\n} from \"@openhands/extensions/integrations\";\nimport { MCPServerConfig } from \"#/types/mcp-server\";\nimport { flattenMcpConfig } from \"#/utils/mcp-installed-servers\";\nimport {\n InstalledServersSection,\n McpToolbar,\n MarketplaceSection,\n InstallServerModal,\n CustomServerEditor,\n type McpSectionFilter,\n} from \"#/components/features/mcp-page\";\n\n// ACP guard: the ACP sub-agent owns its own MCP server configuration —\n// the SDK explicitly rejects `mcp_config` on ACPAgent init, and\n// `agent-server-adapter` already strips it from start payloads. The\n// Settings → Agent page is where the user configures the ACP server, so\n// bouncing there is consistent with how `/settings` and\n// `/settings/condenser` already behave under ACP.\n//\n// Declared with no parameters (rather than typed as Route.ClientLoaderArgs)\n// so the lib build doesn't pull generated React Router types out of rootDir.\nexport const clientLoader = async () => redirectIfAcpActive();\n\nexport default function MCPPage() {\n const { t } = useTranslation(\"openhands\");\n const { data: settings, isLoading } = useSettings();\n const { mutate: deleteMcpServer, isPending: isDeleting } =\n useDeleteMcpServer();\n const activeBackend = useActiveBackend();\n const backendKind = activeBackend.backend.kind;\n\n const [installEntry, setInstallEntry] =\n React.useState<MarketplaceEntry | null>(null);\n const [editingServer, setEditingServer] =\n React.useState<MCPServerConfig | null>(null);\n const [serverToDelete, setServerToDelete] =\n React.useState<MCPServerConfig | null>(null);\n const [searchQuery, setSearchQuery] = React.useState(\"\");\n const [sectionFilter, setSectionFilter] =\n React.useState<McpSectionFilter>(\"all\");\n\n const mcpConfig = parseMcpConfig(settings?.agent_settings?.mcp_config);\n const allServers = flattenMcpConfig(mcpConfig);\n const mcpMarketplace = getMcpMarketplaceCatalog(MCP_MARKETPLACE);\n\n // Filter installed servers by the search query. We pair each server\n // with its catalog entry (if any) so the search can match friendly\n // names like \"Slack\" against a stdio server whose own `.name` is\n // just \"slack\".\n const filteredInstalledServers = allServers.filter((server) =>\n installedServerMatchesQuery(\n server,\n findCatalogEntryForServer(server, mcpMarketplace),\n searchQuery,\n ),\n );\n\n const handleMarketplaceInstall = (entry: MarketplaceEntry) => {\n setInstallEntry(entry);\n };\n\n const handleEdit = (server: MCPServerConfig) => {\n setEditingServer(server);\n };\n\n const handleDeleteClick = (serverId: string) => {\n const target = allServers.find((s) => s.id === serverId);\n if (target) setServerToDelete(target);\n };\n\n const handleConfirmDelete = () => {\n if (!serverToDelete) return;\n // Pass the full server config — useDeleteMcpServer re-resolves its\n // position against the fresh settings at mutation time, so a\n // background refresh between this click and confirm cannot point\n // us at the wrong index.\n deleteMcpServer(serverToDelete, {\n onSuccess: () => {\n displaySuccessToast(t(I18nKey.MCP$REMOVE_SUCCESS));\n setServerToDelete(null);\n },\n onError: (err) => {\n const message = retrieveAxiosErrorMessage(err as AxiosError);\n displayErrorToast(message || t(I18nKey.ERROR$GENERIC));\n setServerToDelete(null);\n },\n });\n };\n\n if (isLoading || !settings) {\n return (\n <div\n data-testid=\"mcp-page\"\n className=\"flex h-full gap-4 md:gap-6 md:pl-8 lg:gap-10 lg:pl-10\"\n >\n <ExtensionsNavigation />\n <div className=\"flex h-full flex-1 items-center justify-center px-4 md:px-0\">\n <div className=\"h-8 w-8 rounded-full border-2 border-[var(--oh-border)] border-t-white animate-spin\" />\n </div>\n </div>\n );\n }\n\n return (\n <div\n data-testid=\"mcp-page\"\n className=\"flex h-full gap-4 md:gap-6 md:pl-8 lg:gap-10 lg:pl-10\"\n >\n <ExtensionsNavigation />\n <main className={settingsLikeMainScrollClassName}>\n <div className=\"mx-auto flex w-full min-w-0 max-w-[800px] flex-col gap-6\">\n <div className=\"min-w-0\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"space-y-1\">\n <h2 className=\"text-xl font-medium leading-6 text-foreground\">\n {t(I18nKey.SETTINGS$MCP_TITLE)}\n </h2>\n <div className=\"max-w-2xl text-sm text-tertiary-light\">\n {t(I18nKey.MCP$PAGE_DESCRIPTION)}\n </div>\n </div>\n <BrandButton\n type=\"button\"\n variant=\"secondary\"\n testId=\"mcp-add-custom-server\"\n className=\"flex-shrink-0 whitespace-nowrap\"\n onClick={() => setEditingServer({ id: \"\", type: \"sse\" })}\n >\n {t(I18nKey.MCP$ADD_CUSTOM)}\n </BrandButton>\n </div>\n </div>\n\n <McpToolbar\n search={searchQuery}\n onSearchChange={setSearchQuery}\n sectionFilter={sectionFilter}\n onSectionFilterChange={setSectionFilter}\n />\n\n {sectionFilter !== \"library\" ? (\n <section className=\"flex flex-col gap-3\">\n <h2 className=\"text-base font-semibold text-foreground\">\n {t(I18nKey.MCP$INSTALLED_TITLE)}\n </h2>\n <InstalledServersSection\n servers={filteredInstalledServers}\n hasAnyInstalled={allServers.length > 0}\n query={searchQuery}\n onEdit={handleEdit}\n onDelete={handleDeleteClick}\n />\n </section>\n ) : null}\n\n {sectionFilter !== \"installed\" ? (\n <MarketplaceSection\n backendKind={backendKind}\n onSelect={handleMarketplaceInstall}\n onAdd={handleMarketplaceInstall}\n query={searchQuery}\n />\n ) : null}\n </div>\n\n {installEntry && (\n <InstallServerModal\n entry={installEntry}\n onClose={() => setInstallEntry(null)}\n />\n )}\n\n {/* Custom (or non-marketplace) server editor. The empty-id\n sentinel (`{ id: \"\", type: \"sse\" }`) means \"add new\". */}\n {editingServer && (\n <CustomServerEditor\n server={editingServer}\n existingServers={allServers}\n onClose={() => setEditingServer(null)}\n />\n )}\n\n {serverToDelete && (\n <ConfirmationModal\n text={t(I18nKey.SETTINGS$MCP_CONFIRM_DELETE)}\n onCancel={() => setServerToDelete(null)}\n onConfirm={handleConfirmDelete}\n isConfirming={isDeleting}\n />\n )}\n </main>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAiDA,SAAwB,IAAU;CAChC,IAAM,EAAE,SAAM,EAAe,YAAY,EACnC,EAAE,MAAM,GAAU,iBAAc,GAAa,EAC7C,EAAE,QAAQ,GAAiB,WAAW,MAC1C,GAAoB,EAEhB,IADgB,GACF,CAAc,QAAQ,MAEpC,CAAC,GAAc,KACnB,EAAM,SAAkC,KAAK,EACzC,CAAC,GAAe,KACpB,EAAM,SAAiC,KAAK,EACxC,CAAC,GAAgB,KACrB,EAAM,SAAiC,KAAK,EACxC,CAAC,GAAa,KAAkB,EAAM,SAAS,GAAG,EAClD,CAAC,GAAe,KACpB,EAAM,SAA2B,MAAM,EAGnC,IAAa,EADD,EAAe,GAAU,gBAAgB,WACvB,CAAU,EACxC,IAAiB,EAAyB,EAAgB,EAM1D,IAA2B,EAAW,QAAQ,MAClD,EACE,GACA,EAA0B,GAAQ,EAAe,EACjD,EACD,CACF,EAEK,KAA4B,MAA4B;AAC5D,IAAgB,EAAM;;AA6CxB,QAdI,KAAa,CAAC,IAEd,kBAAC,OAAD;EACE,eAAY;EACZ,WAAU;YAFZ,CAIE,kBAAC,GAAD,EAAwB,CAAA,EACxB,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD,EAAK,WAAU,uFAAwF,CAAA;GACnG,CAAA,CACF;MAKR,kBAAC,OAAD;EACE,eAAY;EACZ,WAAU;YAFZ,CAIE,kBAAC,GAAD,EAAwB,CAAA,EACxB,kBAAC,QAAD;GAAM,WAAW;aAAjB;IACE,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,MAAD;UAAI,WAAU;oBACX,EAAE,EAAQ,mBAAmB;UAC3B,CAAA,EACL,kBAAC,OAAD;UAAK,WAAU;oBACZ,EAAE,EAAQ,qBAAqB;UAC5B,CAAA,CACF;YACN,kBAAC,GAAD;SACE,MAAK;SACL,SAAQ;SACR,QAAO;SACP,WAAU;SACV,eAAe,EAAiB;UAAE,IAAI;UAAI,MAAM;UAAO,CAAC;mBAEvD,EAAE,EAAQ,eAAe;SACd,CAAA,CACV;;OACF,CAAA;MAEN,kBAAC,GAAD;OACE,QAAQ;OACR,gBAAgB;OACD;OACf,uBAAuB;OACvB,CAAA;MAED,MAAkB,YAaf,OAZF,kBAAC,WAAD;OAAS,WAAU;iBAAnB,CACE,kBAAC,MAAD;QAAI,WAAU;kBACX,EAAE,EAAQ,oBAAoB;QAC5B,CAAA,EACL,kBAAC,GAAD;QACE,SAAS;QACT,iBAAiB,EAAW,SAAS;QACrC,OAAO;QACP,SAxFM,MAA4B;AAC9C,WAAiB,EAAO;;QAwFZ,WArFa,MAAqB;SAC9C,IAAM,IAAS,EAAW,MAAM,MAAM,EAAE,OAAO,EAAS;AACxD,SAAI,KAAQ,EAAkB,EAAO;;QAoFzB,CAAA,CACM;;MAGX,MAAkB,cAOf,OANF,kBAAC,GAAD;OACe;OACb,UAAU;OACV,OAAO;OACP,OAAO;OACP,CAAA;MAEA;;IAEL,KACC,kBAAC,GAAD;KACE,OAAO;KACP,eAAe,EAAgB,KAAK;KACpC,CAAA;IAKH,KACC,kBAAC,GAAD;KACE,QAAQ;KACR,iBAAiB;KACjB,eAAe,EAAiB,KAAK;KACrC,CAAA;IAGH,KACC,kBAAC,GAAD;KACE,MAAM,EAAE,EAAQ,4BAA4B;KAC5C,gBAAgB,EAAkB,KAAK;KACvC,iBApHwB;AAC3B,WAKL,EAAgB,GAAgB;OAC9B,iBAAiB;AAEf,QADA,EAAoB,EAAE,EAAQ,mBAAmB,CAAC,EAClD,EAAkB,KAAK;;OAEzB,UAAU,MAAQ;AAGhB,QADA,EADgB,EAA0B,EACxB,IAAW,EAAE,EAAQ,cAAc,CAAC,EACtD,EAAkB,KAAK;;OAE1B,CAAC;;KAqGM,cAAc;KACd,CAAA;IAEC;KACH"}
1
+ {"version":3,"file":"mcp.js","names":[],"sources":["../../src/routes/mcp.tsx"],"sourcesContent":["import React from \"react\";\nimport { AxiosError } from \"axios\";\nimport { ExtensionsNavigation } from \"#/components/features/skills/extensions-navigation\";\nimport { useTranslation } from \"react-i18next\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { BrandButton } from \"#/components/features/settings/brand-button\";\nimport { ConfirmationModal } from \"#/components/shared/modals/confirmation-modal\";\nimport { useSettings } from \"#/hooks/query/use-settings\";\nimport { useDeleteMcpServer } from \"#/hooks/mutation/use-delete-mcp-server\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { parseMcpConfig } from \"#/utils/mcp-config\";\nimport {\n displayErrorToast,\n displaySuccessToast,\n} from \"#/utils/custom-toast-handlers\";\nimport { retrieveAxiosErrorMessage } from \"#/utils/retrieve-axios-error-message\";\nimport { settingsLikeMainScrollClassName } from \"#/utils/settings-like-page-layout-classes\";\nimport {\n findCatalogEntryForServer,\n getMcpMarketplaceCatalog,\n installedServerMatchesQuery,\n} from \"#/utils/mcp-marketplace-utils\";\nimport {\n INTEGRATION_CATALOG as MCP_MARKETPLACE,\n type IntegrationCatalogEntry as MarketplaceEntry,\n} from \"@openhands/extensions/integrations\";\nimport { MCPServerConfig } from \"#/types/mcp-server\";\nimport { flattenMcpConfig } from \"#/utils/mcp-installed-servers\";\nimport {\n InstalledServersSection,\n McpToolbar,\n MarketplaceSection,\n InstallServerModal,\n CustomServerEditor,\n type McpSectionFilter,\n} from \"#/components/features/mcp-page\";\n\n// No ACP guard here (unlike `/settings` and `/settings/condenser`): MCP\n// servers configured via `agent_settings.mcp_config` are now forwarded to\n// the ACP subprocess at session creation, so this page is meaningful for\n// both OpenHands and ACP agents. The same editor and `mcp_config` storage\n// drive both kinds.\n\nexport default function MCPPage() {\n const { t } = useTranslation(\"openhands\");\n const { data: settings, isLoading } = useSettings();\n const { mutate: deleteMcpServer, isPending: isDeleting } =\n useDeleteMcpServer();\n const activeBackend = useActiveBackend();\n const backendKind = activeBackend.backend.kind;\n\n const [installEntry, setInstallEntry] =\n React.useState<MarketplaceEntry | null>(null);\n const [editingServer, setEditingServer] =\n React.useState<MCPServerConfig | null>(null);\n const [serverToDelete, setServerToDelete] =\n React.useState<MCPServerConfig | null>(null);\n const [searchQuery, setSearchQuery] = React.useState(\"\");\n const [sectionFilter, setSectionFilter] =\n React.useState<McpSectionFilter>(\"all\");\n\n const mcpConfig = parseMcpConfig(settings?.agent_settings?.mcp_config);\n const allServers = flattenMcpConfig(mcpConfig);\n const mcpMarketplace = getMcpMarketplaceCatalog(MCP_MARKETPLACE);\n\n // Filter installed servers by the search query. We pair each server\n // with its catalog entry (if any) so the search can match friendly\n // names like \"Slack\" against a stdio server whose own `.name` is\n // just \"slack\".\n const filteredInstalledServers = allServers.filter((server) =>\n installedServerMatchesQuery(\n server,\n findCatalogEntryForServer(server, mcpMarketplace),\n searchQuery,\n ),\n );\n\n const handleMarketplaceInstall = (entry: MarketplaceEntry) => {\n setInstallEntry(entry);\n };\n\n const handleEdit = (server: MCPServerConfig) => {\n setEditingServer(server);\n };\n\n const handleDeleteClick = (serverId: string) => {\n const target = allServers.find((s) => s.id === serverId);\n if (target) setServerToDelete(target);\n };\n\n const handleConfirmDelete = () => {\n if (!serverToDelete) return;\n // Pass the full server config — useDeleteMcpServer re-resolves its\n // position against the fresh settings at mutation time, so a\n // background refresh between this click and confirm cannot point\n // us at the wrong index.\n deleteMcpServer(serverToDelete, {\n onSuccess: () => {\n displaySuccessToast(t(I18nKey.MCP$REMOVE_SUCCESS));\n setServerToDelete(null);\n },\n onError: (err) => {\n const message = retrieveAxiosErrorMessage(err as AxiosError);\n displayErrorToast(message || t(I18nKey.ERROR$GENERIC));\n setServerToDelete(null);\n },\n });\n };\n\n if (isLoading || !settings) {\n return (\n <div\n data-testid=\"mcp-page\"\n className=\"flex h-full gap-4 md:gap-6 md:pl-8 lg:gap-10 lg:pl-10\"\n >\n <ExtensionsNavigation />\n <div className=\"flex h-full flex-1 items-center justify-center px-4 md:px-0\">\n <div className=\"h-8 w-8 rounded-full border-2 border-[var(--oh-border)] border-t-white animate-spin\" />\n </div>\n </div>\n );\n }\n\n return (\n <div\n data-testid=\"mcp-page\"\n className=\"flex h-full gap-4 md:gap-6 md:pl-8 lg:gap-10 lg:pl-10\"\n >\n <ExtensionsNavigation />\n <main className={settingsLikeMainScrollClassName}>\n <div className=\"mx-auto flex w-full min-w-0 max-w-[800px] flex-col gap-6\">\n <div className=\"min-w-0\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"space-y-1\">\n <h2 className=\"text-xl font-medium leading-6 text-foreground\">\n {t(I18nKey.SETTINGS$MCP_TITLE)}\n </h2>\n <div className=\"max-w-2xl text-sm text-tertiary-light\">\n {t(I18nKey.MCP$PAGE_DESCRIPTION)}\n </div>\n </div>\n <BrandButton\n type=\"button\"\n variant=\"secondary\"\n testId=\"mcp-add-custom-server\"\n className=\"flex-shrink-0 whitespace-nowrap\"\n onClick={() => setEditingServer({ id: \"\", type: \"sse\" })}\n >\n {t(I18nKey.MCP$ADD_CUSTOM)}\n </BrandButton>\n </div>\n </div>\n\n <McpToolbar\n search={searchQuery}\n onSearchChange={setSearchQuery}\n sectionFilter={sectionFilter}\n onSectionFilterChange={setSectionFilter}\n />\n\n {sectionFilter !== \"library\" ? (\n <section className=\"flex flex-col gap-3\">\n <h2 className=\"text-base font-semibold text-foreground\">\n {t(I18nKey.MCP$INSTALLED_TITLE)}\n </h2>\n <InstalledServersSection\n servers={filteredInstalledServers}\n hasAnyInstalled={allServers.length > 0}\n query={searchQuery}\n onEdit={handleEdit}\n onDelete={handleDeleteClick}\n />\n </section>\n ) : null}\n\n {sectionFilter !== \"installed\" ? (\n <MarketplaceSection\n backendKind={backendKind}\n onSelect={handleMarketplaceInstall}\n onAdd={handleMarketplaceInstall}\n query={searchQuery}\n />\n ) : null}\n </div>\n\n {installEntry && (\n <InstallServerModal\n entry={installEntry}\n onClose={() => setInstallEntry(null)}\n />\n )}\n\n {/* Custom (or non-marketplace) server editor. The empty-id\n sentinel (`{ id: \"\", type: \"sse\" }`) means \"add new\". */}\n {editingServer && (\n <CustomServerEditor\n server={editingServer}\n existingServers={allServers}\n onClose={() => setEditingServer(null)}\n />\n )}\n\n {serverToDelete && (\n <ConfirmationModal\n text={t(I18nKey.SETTINGS$MCP_CONFIRM_DELETE)}\n onCancel={() => setServerToDelete(null)}\n onConfirm={handleConfirmDelete}\n isConfirming={isDeleting}\n />\n )}\n </main>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA2CA,SAAwB,IAAU;CAChC,IAAM,EAAE,SAAM,EAAe,YAAY,EACnC,EAAE,MAAM,GAAU,iBAAc,GAAa,EAC7C,EAAE,QAAQ,GAAiB,WAAW,MAC1C,GAAoB,EAEhB,IADgB,GACF,CAAc,QAAQ,MAEpC,CAAC,GAAc,KACnB,EAAM,SAAkC,KAAK,EACzC,CAAC,GAAe,KACpB,EAAM,SAAiC,KAAK,EACxC,CAAC,GAAgB,KACrB,EAAM,SAAiC,KAAK,EACxC,CAAC,GAAa,KAAkB,EAAM,SAAS,GAAG,EAClD,CAAC,GAAe,KACpB,EAAM,SAA2B,MAAM,EAGnC,IAAa,EADD,EAAe,GAAU,gBAAgB,WACvB,CAAU,EACxC,IAAiB,EAAyB,EAAgB,EAM1D,IAA2B,EAAW,QAAQ,MAClD,EACE,GACA,EAA0B,GAAQ,EAAe,EACjD,EACD,CACF,EAEK,KAA4B,MAA4B;AAC5D,IAAgB,EAAM;;AA6CxB,QAdI,KAAa,CAAC,IAEd,kBAAC,OAAD;EACE,eAAY;EACZ,WAAU;YAFZ,CAIE,kBAAC,GAAD,EAAwB,CAAA,EACxB,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD,EAAK,WAAU,uFAAwF,CAAA;GACnG,CAAA,CACF;MAKR,kBAAC,OAAD;EACE,eAAY;EACZ,WAAU;YAFZ,CAIE,kBAAC,GAAD,EAAwB,CAAA,EACxB,kBAAC,QAAD;GAAM,WAAW;aAAjB;IACE,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,MAAD;UAAI,WAAU;oBACX,EAAE,EAAQ,mBAAmB;UAC3B,CAAA,EACL,kBAAC,OAAD;UAAK,WAAU;oBACZ,EAAE,EAAQ,qBAAqB;UAC5B,CAAA,CACF;YACN,kBAAC,GAAD;SACE,MAAK;SACL,SAAQ;SACR,QAAO;SACP,WAAU;SACV,eAAe,EAAiB;UAAE,IAAI;UAAI,MAAM;UAAO,CAAC;mBAEvD,EAAE,EAAQ,eAAe;SACd,CAAA,CACV;;OACF,CAAA;MAEN,kBAAC,GAAD;OACE,QAAQ;OACR,gBAAgB;OACD;OACf,uBAAuB;OACvB,CAAA;MAED,MAAkB,YAaf,OAZF,kBAAC,WAAD;OAAS,WAAU;iBAAnB,CACE,kBAAC,MAAD;QAAI,WAAU;kBACX,EAAE,EAAQ,oBAAoB;QAC5B,CAAA,EACL,kBAAC,GAAD;QACE,SAAS;QACT,iBAAiB,EAAW,SAAS;QACrC,OAAO;QACP,SAxFM,MAA4B;AAC9C,WAAiB,EAAO;;QAwFZ,WArFa,MAAqB;SAC9C,IAAM,IAAS,EAAW,MAAM,MAAM,EAAE,OAAO,EAAS;AACxD,SAAI,KAAQ,EAAkB,EAAO;;QAoFzB,CAAA,CACM;;MAGX,MAAkB,cAOf,OANF,kBAAC,GAAD;OACe;OACb,UAAU;OACV,OAAO;OACP,OAAO;OACP,CAAA;MAEA;;IAEL,KACC,kBAAC,GAAD;KACE,OAAO;KACP,eAAe,EAAgB,KAAK;KACpC,CAAA;IAKH,KACC,kBAAC,GAAD;KACE,QAAQ;KACR,iBAAiB;KACjB,eAAe,EAAiB,KAAK;KACrC,CAAA;IAGH,KACC,kBAAC,GAAD;KACE,MAAM,EAAE,EAAQ,4BAA4B;KAC5C,gBAAgB,EAAkB,KAAK;KACvC,iBApHwB;AAC3B,WAKL,EAAgB,GAAgB;OAC9B,iBAAiB;AAEf,QADA,EAAoB,EAAE,EAAQ,mBAAmB,CAAC,EAClD,EAAkB,KAAK;;OAEzB,UAAU,MAAQ;AAGhB,QADA,EADgB,EAA0B,EACxB,IAAW,EAAE,EAAQ,cAAc,CAAC,EACtD,EAAkB,KAAK;;OAE1B,CAAC;;KAqGM,cAAc;KACd,CAAA;IAEC;KACH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openhands/agent-canvas",
3
- "version": "1.0.0-beta.9",
3
+ "version": "1.0.0-rc.2",
4
4
  "description": "Agent Canvas UI for OpenHands - run AI coding agents with a visual interface",
5
5
  "license": "MIT",
6
6
  "private": false,
@@ -10,7 +10,7 @@ import {
10
10
  writeFileSync,
11
11
  } from "node:fs";
12
12
  import net from "node:net";
13
- import { homedir, tmpdir } from "node:os";
13
+ import { homedir } from "node:os";
14
14
  import path from "node:path";
15
15
  import process from "node:process";
16
16
  import { setTimeout as delay } from "node:timers/promises";
@@ -622,7 +622,23 @@ function buildConfigFromPorts(ports, cwd, env) {
622
622
  backendPort,
623
623
  vscodePort,
624
624
  stateDir,
625
- tmuxTmpDir: path.join(tmpdir(), "openhands-agent-canvas-tmux"),
625
+ // tmux socket directory. Defaults to <stateDir>/tmux (under
626
+ // ~/.openhands/agent-canvas), matching where the rest of dev state lives
627
+ // and persisting across restarts.
628
+ //
629
+ // Do NOT use os.tmpdir() here: on macOS it resolves to the per-user
630
+ // $TMPDIR (/var/folders/.../T), which the OS periodically reaps
631
+ // (com.apple.bsd.dirhelper deletes entries untouched for a few days).
632
+ // Reaping deletes the live tmux socket while the server process keeps
633
+ // running, orphaning it — every later new-window then fails with
634
+ // "error connecting to .../openhands (No such file or directory)".
635
+ //
636
+ // The only hosts where <stateDir>/tmux can't hold the socket are those
637
+ // whose $HOME is a network/overlay mount without Unix-domain-socket
638
+ // support (some devcontainers, NFS/CIFS homes). Those rare cases can point
639
+ // tmux at a local, socket-capable path with the standard TMUX_TMPDIR env
640
+ // var (e.g. TMUX_TMPDIR=/tmp), which we honor and pass through below.
641
+ tmuxTmpDir: env.TMUX_TMPDIR || path.join(stateDir, "tmux"),
626
642
  conversationsPath,
627
643
  workspacesPath,
628
644
  bashEventsDir: path.join(stateDir, "bash_events"),
@@ -1 +0,0 @@
1
- import{E as e}from"./vendor~entry.client~root~root-layout~index-redirect~home~conversation-panel~conversation~la~cnj3raoq-DTEXlLSB.js";import{r as t}from"./query-client-config-CWWGQWvw.js";import{d as n}from"./agent-server-client-options-9agOSarV.js";import{a as r}from"./query-keys-tAsQcc_9.js";import{n as i}from"./use-settings-BPTbE7lg.js";async function a(){try{let a=n();if((await t.fetchQuery({queryKey:[...r.byScope(`personal`),a.backend.id,a.orgId],queryFn:()=>i(`personal`),staleTime:0}))?.agent_settings?.agent_kind===`acp`)return e(`/settings/agent`)}catch{}return null}export{a as t};
@@ -1 +0,0 @@
1
- import{a as e}from"./rolldown-runtime-BFRubm34.js";import{t}from"./react-CM_dJw1Z.js";import{o as n}from"./declaration-DaUdB2Wg.js";import{a as r,t as i}from"./health-store-B5f0S2FY.js";import{_ as a,f as o,h as s,m as c,u as l,v as u,x as d,y as f}from"./agent-server-client-options-9agOSarV.js";var p=e(t(),1),m=n(),h=p.createContext(null);function g(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`backend-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function _({children:e}){let t=p.useSyncExternalStore(f,s,s),n=p.useCallback((e,t)=>{let n=o()?.backendId??null,r=o()?.orgId??null,i=t??null;e===n&&i===r||a({backendId:e,orgId:i})},[]),l=p.useCallback(e=>{let t={...e,id:g()};return u([...c(),t]),a({backendId:t.id}),t},[]),d=p.useCallback((e,t)=>{let n=c().find(t=>t.id===e);u(c().map(n=>n.id===e?{...n,...t}:n));let i=t.host!==void 0&&n!==void 0&&t.host!==n.host,a=t.apiKey!==void 0&&n!==void 0&&t.apiKey!==n.apiKey;(i||a)&&r(e)},[]),_=p.useCallback(e=>{u(c().filter(t=>t.id!==e)),i(e)},[]),v=p.useMemo(()=>({backends:t.backends,active:t.active,setActive:n,addBackend:l,updateBackend:d,removeBackend:_}),[t,n,l,d,_]);return(0,m.jsx)(h.Provider,{value:v,children:e})}function v(){let e=p.useContext(h);if(!e)throw Error(`useActiveBackendContext must be used inside <ActiveBackendProvider>`);return e}function y(){let e=p.useContext(h);return e?e.active:{backend:d()??l,orgId:null}}export{y as n,v as r,_ as t};
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-BFRubm34.js";import{o as t}from"./declaration-DaUdB2Wg.js";import{n}from"./backend-form-modal-CeB983Sj.js";var r=e({AddBackendModal:()=>a}),i=t();function a({onClose:e}){return(0,i.jsx)(n,{mode:`add`,onClose:e})}export{r as n,a as t};
@@ -1 +0,0 @@
1
- var e=`workspace/project`;function t(e){return e?.trim()||null}function n(e){if(!e)return null;let t=e.trim().replace(/\/$/,``);return t?/^https?:\/\//i.test(t)?t:typeof window<`u`?`${window.location.protocol}//${t}`:`http://${t}`:null}function r(){return n(void 0)}function i(){let e=t(void 0);if(e)return e;if(typeof window<`u`){let e=window.__AGENT_CANVAS_SESSION_API_KEY__;if(typeof e==`string`)return t(e)}return null}function a(){return{baseUrl:o()??``,sessionApiKey:s()??``}}function o(){return r()||(typeof window<`u`?window.location.origin:null)}function s(){return i()}function c(){return(void 0)?.trim()||e}function ee(e){return`${c().replace(/\/+$/,``)}/${e.replace(/-/g,``)}`}function l(){let e=s();return e?{"X-Session-API-Key":e}:{}}function te(){return!0}function u(){return typeof window<`u`&&window.__AGENT_CANVAS_AUTH_REQUIRED__===!0}function ne(){return u()?!s():!1}var d=`default-local`,f=`Local`;function p(){let e=o(),t=s();return!e||!t?null:{id:d,name:f,host:e,apiKey:t,kind:`local`}}var m=`openhands-backends`,h=`openhands-active-backend`,g=`openhands-agent-server-config`;function _(e){return e===`local`||e===`cloud`}function v(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.id==`string`&&t.id.length>0&&typeof t.name==`string`&&typeof t.host==`string`&&typeof t.apiKey==`string`&&_(t.kind)}function re(e){if(typeof e!=`string`)return null;let t=e.trim().replace(/\/+$/,``);return t?/^https?:\/\//i.test(t)?t:`http://${t}`:null}function y(){let e=window.localStorage.getItem(g);if(!e)return null;try{let t=JSON.parse(e),n=re(t.baseUrl),r=typeof t.sessionApiKey==`string`?t.sessionApiKey.trim():``;return!n||!r?null:{id:d,name:f,host:n,apiKey:r,kind:`local`}}catch{return null}}function b(){window.localStorage.removeItem(g)}function x(e){return T(e),b(),e}function S(e){try{let{hostname:t}=new URL(e);return t===`localhost`||t===`127.0.0.1`||t===`::1`||t===`[::1]`}catch{return!1}}function C(e,t){return e.id!==`default-local`||e.kind!==`local`?!1:e.host===t.host||S(e.host)&&S(t.host)}function w(e){let t=p();if(!t)return e;let n=!1,r=e.map(e=>!C(e,t)||e.apiKey===t.apiKey?e:(n=!0,{...e,apiKey:t.apiKey}));return n?(T(r),r):e}function T(e){if(!(typeof window>`u`))try{window.localStorage.setItem(m,JSON.stringify(e))}catch{}}function E(){if(typeof window>`u`)return[];try{let e=window.localStorage.getItem(m);if(e===null){let e=y();if(e)return x([e]);let t=p();return t?x([t]):[]}let t=JSON.parse(e);if(!Array.isArray(t))return[];let n=t.filter(v);if(n.length===0){let e=p();return e?x([e]):[]}let r=w(n);return b(),r}catch{return[]}}function D(){if(typeof window>`u`)return null;try{let e=window.localStorage.getItem(h);if(!e)return null;let t=JSON.parse(e);if(typeof t!=`object`||!t||typeof t.backendId!=`string`)return null;let n=t.orgId;return{backendId:t.backendId,orgId:typeof n==`string`&&n.length>0?n:null}}catch{return null}}function O(e){if(!(typeof window>`u`))try{if(!e){window.localStorage.removeItem(h);return}window.localStorage.setItem(h,JSON.stringify({backendId:e.backendId,orgId:e.orgId??null}))}catch{}}var k=`no-backend`,A={id:k,name:`No Backend Available`,host:``,apiKey:``,kind:`local`};function j(e){return e.id===k}function ie(e){return e[0]??A}function M(e,t){let n=null,r=null;if(t){let i=e.find(e=>e.id===t.backendId);i&&(n=i,r=t.orgId??null)}return n||(n=ie(e),r=null),{backends:e,selection:t,active:{backend:n,orgId:r}}}var N=M(E(),D()),P=new Set;function F(){P.forEach(e=>e())}function I(){return N.active}function L(){let e=N.active.backend;return e.kind===`local`&&!j(e)?e:null}function R(){return N.backends}function z(){return N.selection}function B(){return N}function V(e){O(e),N=M(N.backends,e),F()}function H(e){T(e);let t=N.selection;t&&!e.some(e=>e.id===t.backendId)&&(t=null,O(null)),N=M(e,t),F()}function U(e){return P.add(e),()=>{P.delete(e)}}var W=class extends Error{constructor(e,t,n,r){super(r||`HTTP ${e}: ${t}`),this.status=e,this.statusText=t,this.response=n,this.name=`HttpError`}},G=class{constructor(e){this.baseUrl=e.baseUrl.replace(/\/$/,``),this.apiKey=e.apiKey,this.timeout=e.timeout||6e4}async request(e){let t=e.url.startsWith(`/`)?e.url.slice(1):e.url,n=new URL(t,this.baseUrl+`/`);e.params&&Object.entries(e.params).forEach(([e,t])=>{t!=null&&(Array.isArray(t)?t.forEach(t=>n.searchParams.append(e,String(t))):n.searchParams.append(e,String(t)))});let r={"Content-Type":`application/json`,...e.headers};this.apiKey&&(r[`X-Session-API-Key`]=this.apiKey);let i={method:e.method,headers:r,signal:AbortSignal.timeout(e.timeout||this.timeout)};e.credentials&&(i.credentials=e.credentials),e.data&&e.method!==`GET`&&(e.data instanceof FormData?(delete r[`Content-Type`],i.body=e.data):i.body=JSON.stringify(e.data));try{let t=await fetch(n.toString(),i);if(!(e.acceptableStatusCodes?.has(t.status)||!e.acceptableStatusCodes&&t.ok)){let e;try{e=t.headers.get(`content-type`)?.includes(`application/json`)?await t.json():await t.text()}catch{e=null}throw new W(t.status,t.statusText,e,`HTTP request failed (${t.status} ${t.statusText}): ${JSON.stringify(e)}`)}let r=await this.parseResponse(t,e.responseType||`auto`),a={};return t.headers.forEach((e,t)=>{a[t]=e}),{data:r,status:t.status,statusText:t.statusText,headers:a}}catch(t){throw t instanceof W?t:t instanceof Error?t.name===`AbortError`?Error(`Request timeout after ${e.timeout||this.timeout}ms`,{cause:t}):Error(`Request failed: ${t.message}`,{cause:t}):Error(`Unknown request error`,{cause:t})}}async parseResponse(e,t){return t===`json`?await e.json():t===`text`?await e.text():t===`blob`?await e.blob():t===`arrayBuffer`?await e.arrayBuffer():e.headers.get(`content-type`)?.includes(`application/json`)?await e.json():await e.text()}async get(e,t){return this.request({method:`GET`,url:e,...t})}async post(e,t,n){return this.request({method:`POST`,url:e,data:t,...n})}async put(e,t,n){return this.request({method:`PUT`,url:e,data:t,...n})}async patch(e,t,n){return this.request({method:`PATCH`,url:e,data:t,...n})}async delete(e,t){return this.request({method:`DELETE`,url:e,...t})}close(){}},K=class{constructor(e){this.host=e.host.replace(/\/$/,``),this.apiKey=e.apiKey,this.client=new G({baseUrl:this.host,apiKey:this.apiKey,timeout:e.timeout||6e4})}async getAgentSchema(){return(await this.client.get(`/api/settings/agent-schema`)).data}async getSettings(e={}){return(await this.client.get(`/api/settings`,{headers:e.exposeSecrets?{"X-Expose-Secrets":e.exposeSecrets}:void 0})).data}async updateSettings(e){return(await this.client.patch(`/api/settings`,e)).data}async listSecrets(){return(await this.client.get(`/api/settings/secrets`)).data}async upsertSecret(e){return(await this.client.put(`/api/settings/secrets`,e)).data}async getSecret(e){return(await this.client.get(`/api/settings/secrets/${encodeURIComponent(e)}`,{responseType:`text`})).data}async deleteSecret(e){return(await this.client.delete(`/api/settings/secrets/${encodeURIComponent(e)}`)).data}async getConversationSchema(){return(await this.client.get(`/api/settings/conversation-schema`)).data}async listProfiles(){return(await this.client.get(`/api/profiles`)).data}async getProfile(e,t={}){return(await this.client.get(`/api/profiles/${encodeURIComponent(e)}`,{headers:t.exposeSecrets?{"X-Expose-Secrets":t.exposeSecrets}:void 0})).data}async saveProfile(e,t){return(await this.client.post(`/api/profiles/${encodeURIComponent(e)}`,t)).data}async deleteProfile(e){return(await this.client.delete(`/api/profiles/${encodeURIComponent(e)}`)).data}async renameProfile(e,t){return(await this.client.post(`/api/profiles/${encodeURIComponent(e)}/rename`,{new_name:t})).data}close(){this.client.close()}};function q(e){if(e&&!e.startsWith(`/`))try{let t=new URL(e),n=t.hostname,r=window.location.hostname??window.location.host?.split(`:`)[0];return r&&(n===`localhost`||n===`127.0.0.1`)&&r!==`localhost`&&r!==`127.0.0.1`?`${r}:${t.port}`:t.host}catch{return window.location.host}return window.location.host}function J(e){if(e&&!e.startsWith(`/`))try{return(new URL(e).pathname.split(`/api/conversations`)[0]||``).replace(/\/$/,``)}catch{return``}return``}function Y(e){let t=q(e),n=J(e);return`${window.location.protocol===`https:`?`https:`:`http:`}//${t}${n}`}function X(e){if(!e||e.startsWith(`/`))return null;try{return new URL(e).protocol}catch{return null}}function ae(e,t){let n=q(e),r=J(e),i=window.location.protocol===`https:`,a=X(e)===`https:`,o=`${i||a?`wss:`:`ws:`}//${n}${r}/sockets/bash-events`;return t?`${o}?session_api_key=${encodeURIComponent(t)}`:o}function oe(e,t){if(!e)return null;let n=q(t),r=J(t),i=window.location.protocol===`https:`,a=X(t)===`https:`;return`${i||a?`wss:`:`ws:`}//${n}${r}/sockets/events/${e}`}var Z=class extends Error{constructor(){super(`No backend is configured.`),this.name=`NoBackendAvailableError`}};function Q(e){return e.replace(/\/+$/,``)}function se(e,t){return e.host?Q(e.host):e.conversationUrl?Q(Y(e.conversationUrl)):Q(t?.host??``)}function $(e={}){let t=L();if(!t&&!e.host&&!e.conversationUrl)throw new Z;let n=e.sessionApiKey??e.apiKey??t?.apiKey??void 0;return{host:se(e,t),...n?{apiKey:n}:{},workingDir:e.workingDir??c(),...e.timeout===void 0?{}:{timeout:e.timeout}}}function ce(e){let{host:t,apiKey:n,timeout:r}=$(e);return{baseUrl:t,...n?{apiKey:n}:{},timeout:r??6e4}}export{te as A,ee as C,c as D,l as E,u as O,e as S,a as T,V as _,Y as a,f as b,G as c,I as d,z as f,j as g,B as h,ae as i,ne as k,W as l,R as m,$ as n,oe as o,L as p,ce as r,K as s,Z as t,A as u,H as v,o as w,p as x,U as y};
@@ -1 +0,0 @@
1
- import{O as e,d as t,g as n,n as r,p as i,s as a}from"./agent-server-client-options-9agOSarV.js";import{t as o}from"./server-client-DYv_GHPl.js";var s=5e3,c=null,l=e=>Array.isArray(e?.usable_tools)?e.usable_tools:null,u=class extends Error{details;constructor(e){super(`Agent server not found. Could not connect to the configured agent server. Start a compatible agent server and reload the page.`),this.name=`AgentServerUnavailableError`,this.details=e??null}},d=e=>e instanceof u||typeof e==`object`&&!!e&&`name`in e&&e.name===`AgentServerUnavailableError`,f=t=>e()&&g(t,401);function p(){c=null}function m(e){let t=l(c);return Array.isArray(t)?t.includes(e):!0}function h(e){return e instanceof Error&&e.name===`HttpError`&&`status`in e&&typeof e.status==`number`}function g(e,t){return h(e)&&e.status===t}async function _(){let l=i();if(!l){if(p(),n(t().backend))throw new u(`No backend configured`);return null}let d=r({host:l.host,sessionApiKey:l.apiKey||null,timeout:s}),f;try{f=await new o(d).getServerInfo()}catch(e){throw p(),g(e,401)?e:new u(e instanceof Error?e.message:null)}if(e())try{await new a(d).getSettings()}catch(e){if(g(e,401))throw e;console.warn(`[agent-server] getSettings() probe failed (non-401):`,e)}return c=f,f}export{_ as a,g as i,m as n,d as r,f as t};
@@ -1,5 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/secrets-service-DVtlLWY8.js","assets/rolldown-runtime-BFRubm34.js","assets/agent-server-client-options-9agOSarV.js","assets/proxy-sRh0WKI7.js","assets/vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~e9ykmtgh-Fa-nXZ4M.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-CT1Z6Pdu.js";import{t}from"./common-DqjLSBOt.js";import{A as n,C as r,D as i,a,c as o,d as s,l as c,n as l,p as u,t as ee}from"./agent-server-client-options-9agOSarV.js";import{n as d,s as f,u as p}from"./vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~dp08i1qy-D8soyAAx.js";import{t as m}from"./profiles-client-BrqNmaDV.js";import{n as h}from"./agent-server-compatibility-B7QStIcH.js";import{n as g,t as _}from"./proxy-sRh0WKI7.js";import{t as v}from"./v4-khGvL7i2.js";import{t as y}from"./settings-DGY6n4J2.js";import{a as b,u as x}from"./acp-providers-DJr8DlNG.js";import{t as S}from"./settings-service.api-DxIEtvx6.js";var C=class{constructor(e){this.host=e.host.replace(/\/$/,``),this.apiKey=e.apiKey,this.client=new o({baseUrl:this.host,apiKey:this.apiKey,timeout:e.timeout||6e4})}async createConversation(e){return(await this.client.post(`/api/conversations`,e)).data}async searchConversations(e={}){return(await this.client.get(`/api/conversations/search`,{params:e})).data}async countConversations(e={}){return(await this.client.get(`/api/conversations/count`,{params:e})).data}async getConversations(e){return(await this.client.get(`/api/conversations`,{params:{ids:e}})).data}async getConversation(e){return(await this.client.get(`/api/conversations/${e}`)).data}async searchEvents(e,t={}){return(await this.client.get(`/api/conversations/${e}/events/search`,{params:t})).data}async getEvent(e,t){return(await this.client.get(`/api/conversations/${e}/events/${t}`)).data}async getEvents(e,t){return Promise.all(t.map(async t=>{try{return await this.getEvent(e,t)}catch(e){if(e instanceof c&&e.status===404)return null;throw e}}))}async sendEvent(e,t,n={}){await this.client.post(`/api/conversations/${e}/events`,{...t,...n.run===void 0?{}:{run:n.run}})}async pauseConversation(e){return(await this.client.post(`/api/conversations/${e}/pause`,{})).data}async interruptConversation(e){return(await this.client.post(`/api/conversations/${e}/interrupt`,{})).data}async runConversation(e){return(await this.client.post(`/api/conversations/${e}/run`,{})).data}async askAgent(e,t){return(await this.client.post(`/api/conversations/${e}/ask_agent`,{question:t})).data}async getEventCount(e,t={}){return(await this.client.get(`/api/conversations/${e}/events/count`,{params:t})).data}async respondToConfirmation(e,t){return(await this.client.post(`/api/conversations/${e}/events/respond_to_confirmation`,t)).data}async getAgentFinalResponse(e){return(await this.client.get(`/api/conversations/${e}/agent_final_response`)).data}async setConfirmationPolicy(e,t){let n=`policy`in t?t:{policy:t};return(await this.client.post(`/api/conversations/${e}/confirmation_policy`,n)).data}async condenseConversation(e){return(await this.client.post(`/api/conversations/${e}/condense`,{})).data}async setSecurityAnalyzer(e,t){let n=te(t)?t:{security_analyzer:t};return(await this.client.post(`/api/conversations/${e}/security_analyzer`,n)).data}async updateSecrets(e,t){return(await this.client.post(`/api/conversations/${e}/secrets`,t)).data}async forkConversation(e,t={},n={}){return(await this.client.post(`/api/conversations/${e}/fork`,t,{params:n.includeSkills===void 0?void 0:{include_skills:n.includeSkills}})).data}async switchProfile(e,t){await this.client.post(`/api/conversations/${e}/switch_profile`,{profile_name:t})}async switchLLM(e,t){await this.client.post(`/api/conversations/${e}/switch_llm`,{llm:t})}async switchAcpModel(e,t){await this.client.post(`/api/conversations/${e}/switch_acp_model`,{model:t})}async deleteConversation(e){await this.client.delete(`/api/conversations/${e}`)}async updateConversation(e,t){return(await this.client.patch(`/api/conversations/${e}`,t)).data}close(){this.client.close()}};function te(e){return typeof e==`object`&&!!e&&`security_analyzer`in e}var w=new Map;function ne(e){return/^([/\\]|[a-zA-Z]:[/\\])/.test(e)}function re(e,t){return`${e.replace(/[/\\]+$/,``)}/${t.replace(/^[/\\]+/,``)}`}async function T(e={}){let t=l(e),n=t.host,r=w.get(n);if(r)return r;let i=(async()=>{let{home:e}=await new p(t).getHome();if(!e||typeof e!=`string`)throw Error(`Agent server returned an empty home directory`);return e.replace(/[/\\]+$/,``)})();w.set(n,i);try{return await i}catch(e){throw w.delete(n),e}}async function E(e,t={}){let n=e.replace(/[/\\]+$/,``);return n?ne(n)?n:re(await T(t),n):T(t)}var D=`openhands-agent-server-conversation-metadata`,O=()=>{if(typeof window>`u`)return{};try{let e=window.localStorage.getItem(D);if(!e)return{};let t=JSON.parse(e);return!t||typeof t!=`object`?{}:t}catch{return{}}},k=e=>{if(!(typeof window>`u`)){if(Object.keys(e).length===0){window.localStorage.removeItem(D);return}window.localStorage.setItem(D,JSON.stringify(e))}},A=e=>O()[e]??null,j=(e,t)=>{let n=O();n[e]=t,k(n)},M=e=>{let t=O();e in t&&(delete t[e],k(t))};function N(e){if(!e?.id)return e;let t=A(e.id);return t?{...e,selected_repository:e.selected_repository??t.selected_repository??null,selected_branch:e.selected_branch??t.selected_branch??null,git_provider:e.git_provider??t.git_provider??null,selected_workspace:e.selected_workspace??t.selected_workspace??null}:e}function P(){let e=s().backend;if(e.kind!==`cloud`)throw Error(`Cloud conversations call requires a cloud backend.`);return e}async function ie(e=20,t){let n=P(),r=new URLSearchParams;r.set(`limit`,String(e)),t&&r.set(`page_id`,t),r.set(`sort_order`,`UPDATED_AT_DESC`);let i=await _({backend:n,method:`GET`,path:`/api/v1/app-conversations/search?${r.toString()}`});return{items:(i?.items??[]).map(e=>N(e)),next_page_id:i?.next_page_id??null}}async function F(e){if(e.length===0)return[];let t=P(),n=new URLSearchParams;for(let t of e)n.append(`ids`,t);return(await _({backend:t,method:`GET`,path:`/api/v1/app-conversations?${n.toString()}`})??[]).map(N)}async function ae(e){return await _({backend:P(),method:`POST`,path:`/api/v1/app-conversations`,body:e})}async function oe(e){return _({backend:P(),method:`GET`,path:`/api/v1/app-conversations/${e}/download`,responseType:`blob`})}async function se(e){await _({backend:P(),method:`DELETE`,path:`/api/v1/app-conversations/${e}`})}async function ce(e,t){return await _({backend:P(),method:`PATCH`,path:`/api/v1/app-conversations/${e}`,body:{public:t}})}async function le(e){await _({backend:P(),method:`POST`,path:`/api/v1/sandboxes/${e}/pause`})}async function ue(e){await _({backend:P(),method:`POST`,path:`/api/v1/sandboxes/${e}/resume`})}async function de(e,t){let n=P(),r=new URLSearchParams;return r.append(`file_path`,t),await _({backend:n,method:`GET`,path:`/api/v1/app-conversations/${e}/file?${r.toString()}`})??``}async function fe(e){let t=P(),n=new URLSearchParams;return n.set(`ids`,e),(await _({backend:t,method:`GET`,path:`/api/v1/app-conversations/start-tasks?${n.toString()}`}))?.[0]??null}var I=`canvas_ui`,pe=`canvas_ui_tool`,me=[`terminal`,`file_editor`,`task_tracker`,I],L=`browser_tool_set`,R=`task_tool_set`;function he(){return!0}function ge(){let e=(void 0)?.trim();if(!e)return null;try{let t=JSON.parse(e);return!t||typeof t!=`object`?null:t}catch{return null}}function _e(){let e=ge();if(!e?.services)return;let t=[];t.push(`<RUNTIME_SERVICES>`),e.mode?t.push(`You are running inside an agent-canvas dev stack started in '${e.mode}' mode.`):t.push(`You are running inside an agent-canvas dev stack.`),t.push(`The following services are reachable from your sandbox. URLs are written`,`from your point of view (i.e., as you should curl/fetch them).`,``);let{agent_server:n,ingress:r,automation:i}=e.services,a=e.services.frontend??e.services.vite;n?.url_from_agent&&t.push(`* Agent Server (you): ${n.url_from_agent}`,` ${n.description??`The agent-server hosting your tool calls.`}`),r?.url_from_agent&&t.push(`* Ingress: ${r.url_from_agent}`,` ${r.description??`Unified entry point for browser-facing traffic.`}`),a?.url_from_agent&&t.push(`* Frontend: ${a.url_from_agent}`,` ${a.description??`Frontend dev server.`}`),i?.url_from_agent?(t.push(`* Automation backend: ${i.url_from_agent}`,` ${i.description??`OpenHands Automations service.`}`),i.docs_url&&t.push(` Docs: ${i.docs_url}`),i.openapi_url&&t.push(` OpenAPI: ${i.openapi_url}`),i.auth_env_var&&t.push(` Auth: header 'X-Session-API-Key: $${i.auth_env_var}'`)):t.push(`* Automation backend: not running in this dev mode (skip /api/automation calls).`);let o=n?.url_from_agent;return t.push(``,`Trust this block over guessing: do not assume any other URLs are running.`),o&&t.push(`In particular, ${o} inside your sandbox is the Agent Server`,`you are running inside of — NOT the automation backend.`),t.push(`</RUNTIME_SERVICES>`),t.join(`
3
- `)}function ve(e){let{host:t}=l();return`${t}/api/conversations/${e}`}function z(e){return`Conversation ${e.slice(0,5)}`}function B(e){let n=A(e.id),r=e.agent?.kind===`ACPAgent`,a=r?e.tags?.acpserver??null:null;return{id:e.id,created_by_user_id:null,selected_repository:n?.selected_repository??null,selected_branch:n?.selected_branch??null,git_provider:n?.git_provider??null,selected_workspace:n?.selected_workspace??null,title:e.title?.trim()?e.title:z(e.id),trigger:null,pr_number:[],agent_kind:r?`acp`:`openhands`,acp_server:a,llm_model:r?x({runtimeName:e.current_model_name,runtimeId:e.current_model_id,configured:e.agent?.acp_model,sdkLlm:e.agent?.llm?.model}):e.agent?.llm?.model??y.llm_model,metrics:e.metrics?{accumulated_cost:e.metrics.accumulated_cost??null,max_budget_per_task:e.metrics.max_budget_per_task??null,accumulated_token_usage:e.metrics.accumulated_token_usage?{prompt_tokens:e.metrics.accumulated_token_usage.prompt_tokens??0,completion_tokens:e.metrics.accumulated_token_usage.completion_tokens??0,cache_read_tokens:e.metrics.accumulated_token_usage.cache_read_tokens??0,cache_write_tokens:e.metrics.accumulated_token_usage.cache_write_tokens??0,context_window:e.metrics.accumulated_token_usage.context_window??0,per_turn_token:e.metrics.accumulated_token_usage.per_turn_token??0}:null}:null,created_at:e.created_at,updated_at:e.updated_at,execution_status:e.execution_status??t.IDLE,sandbox_status:e.sandbox_status??null,conversation_url:ve(e.id),session_api_key:l().apiKey??null,sandbox_id:null,workspace:{working_dir:e.workspace?.working_dir??i()},public:!1,sub_conversation_ids:[]}}function ye(e){return{items:e.items.map(B),next_page_id:e.next_page_id??null}}var V=[`acp_command`,`acp_args`,`acp_model`,`acp_session_mode`,`acp_prompt_timeout`],be=`acpserver`,xe=new Set([`schema_version`,`agent_settings`,`workspace`,`conversation_id`,`initial_message`,`plugins`]);function H(e){return!e||typeof e!=`object`||Array.isArray(e)?{}:structuredClone(e)}function U(e){if(typeof e!=`string`)return;let t=e.trim();return t.length>0?t:void 0}function Se(e){return e.confirmation_mode===!0?e.security_analyzer===`llm`?{kind:`ConfirmRisky`,threshold:`HIGH`,confirm_unknown:!0}:{kind:`AlwaysConfirm`}:{kind:`NeverConfirm`}}function Ce(e){switch(e.security_analyzer){case`llm`:return{kind:`LLMSecurityAnalyzer`};case`pattern`:return{kind:`PatternSecurityAnalyzer`};case`policy_rail`:return{kind:`PolicyRailSecurityAnalyzer`};default:return}}function we(e){return!!e&&typeof e==`object`&&!Array.isArray(e)&&typeof e.name==`string`}function Te(e,t){return e===L?he()&&h(e):e===R?t.enable_sub_agents===!0&&h(e):!0}function Ee(e){let t=new Map;for(let e of me)t.set(e,{name:e,params:{}});for(let n of[L,R])Te(n,e)&&t.set(n,{name:n,params:{}});let n=e.tools;if(Array.isArray(n)&&n.every(e=>we(e)))for(let r of n)Te(r.name,e)&&t.set(r.name,{name:r.name,params:H(r.params)});return Array.from(t.values())}function De(e,t){let n=[e?.trim(),t?.trim()].filter(Boolean);return n.length===0?null:{role:`user`,content:[{type:`text`,text:n.join(`
4
-
5
- `)}],run:!0}}function W(e){let t=_e();return{...H(e.agent_context),load_public_skills:n(),load_user_skills:!0,load_project_skills:!0,...t?{system_message_suffix:t}:{}}}function G(e){return H(e.agent_settings).agent_kind===`acp`}function Oe(e){let t=H(e.agent_settings).acp_server;return typeof t==`string`&&t.length>0?t:void 0}function ke(e){let t=e.acp_command;if(!(Array.isArray(t)&&t.length===0)&&t!==void 0)return t;let n=b(typeof e.acp_server==`string`?e.acp_server:void 0);return n?[...n.default_command]:t}function Ae(e){let t=H(e.agent_settings),n={agent_kind:`acp`,agent_context:W(t)};for(let e of V){if(e===`acp_model`)continue;let r=e===`acp_command`?ke(t):t[e];r!=null&&(n[e]=r)}let r=b(typeof t.acp_server==`string`?t.acp_server:void 0),i=x({configured:t.acp_model,providerDefault:r?.default_model});return i&&(n.acp_model=i),n}function je(e){let t=H(e.agent_settings),n=H(t.llm);n.model=typeof n.model==`string`&&n.model.trim().length>0?n.model:y.llm_model;let r=U(n.api_key);r?n.api_key=r:delete n.api_key;let i=U(n.base_url);i?n.base_url=i:delete n.base_url;let a=H(t.mcp_config);(Object.keys(a).length===0||!(`mcpServers`in a))&&delete t.mcp_config,delete t.acp_server;for(let e of V)delete t[e];return delete t.acp_env,{...t,llm:n,agent_context:W(t),tools:Ee(t)}}function Me(e){return G(e)?Ae(e):je(e)}function Ne(e){let{settings:t,query:n,conversationInstructions:r,plugins:a,workingDir:o}=e,s=H(t.conversation_settings),c=De(n,r);return xe.forEach(e=>delete s[e]),{...s,workspace:{kind:`LocalWorkspace`,working_dir:o??i()},...c?{initial_message:c}:{},...a?.length?{plugins:a.map(e=>({source:e.source,...e.ref?{ref:e.ref}:{},...e.repo_path?{repo_path:e.repo_path}:{}}))}:{}}}function Pe(e){let t=e.encryptedAgentSettings?{...e.settings,agent_settings:e.encryptedAgentSettings}:e.settings,n=G(t),r=Me(t),i=n?Oe(t):void 0,a=Ne(e.encryptedConversationSettings?{...e,settings:{...e.settings,conversation_settings:e.encryptedConversationSettings}}:e),o={agent_settings:r,workspace:a.workspace,confirmation_policy:Se(a),max_iterations:typeof a.max_iterations==`number`?a.max_iterations:500,stuck_detection:!0,autotitle:!0,worktree:!0};i&&(o.tags={[be]:i}),e.secretsEncrypted&&(o.secrets_encrypted=!0),e.conversationId&&(o.conversation_id=e.conversationId);let s=Ce(a);if(s&&(o.security_analyzer=s),a.initial_message&&(o.initial_message=a.initial_message),a.plugins&&(o.plugins=a.plugins),a.hook_config&&(o.hook_config=a.hook_config),o.tool_module_qualnames={[I]:pe,...a.tool_module_qualnames??{}},a.agent_definitions&&(o.agent_definitions=a.agent_definitions),e.customSecrets&&e.customSecrets.length>0){let t=u(),r=t?g(t):{},i={};for(let t of e.customSecrets){let e={kind:`LookupSecret`,url:`/api/settings/secrets/${encodeURIComponent(t.name)}`,description:t.description};Object.keys(r).length>0&&(e.headers=r),i[t.name]=e}o.secrets=i,n&&(o.agent_settings.agent_context={...o.agent_settings.agent_context,secrets:i})}return o}async function Fe(t){let{SecretsService:n}=await e(async()=>{let{SecretsService:e}=await import(`./secrets-service-DVtlLWY8.js`).then(e=>e.n);return{SecretsService:e}},__vite__mapDeps([0,1,2,3,4])),[r,i]=await Promise.all([S.getSettingsForConversation(),n.getSecrets()]),{agentSettings:a,conversationSettings:o,secretsEncrypted:s}=r;return Pe({...t,encryptedAgentSettings:a,encryptedConversationSettings:o,secretsEncrypted:s,customSecrets:i})}function Ie(){return{hooks:[]}}var Le=`1970-01-01T00:00:00.000Z`,Re=`Unable to load conversations because the selected agent server returned data this UI does not understand. Check the backend URL/session key and update the agent server if needed.`;function K(){return Error(Re)}function q(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function J(e){return typeof e==`number`?e:null}function Y(e){return typeof e==`number`?e:0}function X(e){return typeof e==`string`?e:null}function Z(e,t,n){let r=e[t]??e[n];return typeof r==`string`&&r.trim()?r:Le}function ze(e){return q(e)?{prompt_tokens:Y(e.prompt_tokens),completion_tokens:Y(e.completion_tokens),cache_read_tokens:Y(e.cache_read_tokens),cache_write_tokens:Y(e.cache_write_tokens),context_window:Y(e.context_window),per_turn_token:Y(e.per_turn_token)}:null}function Q(e){return q(e)?{accumulated_cost:J(e.accumulated_cost),max_budget_per_task:J(e.max_budget_per_task),accumulated_token_usage:ze(e.accumulated_token_usage)}:null}function Be(e){if(!q(e))return null;let t=q(e.llm)?{model:X(e.llm.model)}:null;return{kind:X(e.kind),acp_model:X(e.acp_model),llm:t}}function Ve(e){return q(e)?{working_dir:X(e.working_dir)}:null}function He(e){if(!q(e))return null;let t={};for(let[n,r]of Object.entries(e))typeof r==`string`&&(t[n]=r);return t}function Ue(e){if(!e.startsWith(`/`))return null;let t=[];for(let n of e.split(`/`))if(n&&n!==`.`)if(n===`..`){if(!t.length)return null;t.pop()}else t.push(n);return`/${t.join(`/`)}`}function We(e,t){let n=Ue(e),r=Ue(t);if(!n||!r||n!==r&&!n.startsWith(`${r}/`))throw Error(`Conversation file path must stay inside the workspace`);return n}function Ge(e){if(!q(e)||typeof e.id!=`string`||!e.id.trim())throw K();return{id:e.id.trim(),title:X(e.title),created_at:Z(e,`created_at`,`createdAt`),updated_at:Z(e,`updated_at`,`updatedAt`),execution_status:X(e.execution_status),sandbox_status:X(e.sandbox_status),metrics:Q(e.metrics),agent:Be(e.agent),workspace:Ve(e.workspace),tags:He(e.tags),current_model_id:X(e.current_model_id),current_model_name:X(e.current_model_name)}}function $(e){if(!Array.isArray(e))throw K();return e.map(Ge)}function Ke(e){if(Array.isArray(e))return{items:$(e),next_page_id:null};if(!q(e))throw K();return{items:$(e.items),next_page_id:typeof e.next_page_id==`string`?e.next_page_id:null}}var qe=new Set([`idle`,`running`,`paused`,`waiting_for_confirmation`,`finished`,`error`,`stuck`]);function Je(e){let t=e??`idle`;return qe.has(t)?t:`idle`}function Ye(e,t){if(!e)throw Error(`Conversation ${t} was not found`);return e}var Xe=class{static async sendMessage(e,t,n){let r=s().backend,i=n?.conversationUrl??null,o=n?.sessionApiKey??null;if(r.kind===`cloud`){if(!i||!o){let[t]=await F([e]);i=t?.conversation_url?.trim()??null,o=t?.session_api_key?.trim()??null}if(!i||!o)throw Error(`Conversation sandbox is still starting. Wait for it to finish, then try again.`);return await _({backend:r,method:`POST`,hostOverride:a(i),path:`/api/conversations/${e}/events`,body:{...t,run:!0},authMode:`session-api-key`,sessionApiKey:o}),t}return await new C(l({conversationUrl:i,sessionApiKey:o})).sendEvent(e,t,{run:!0}),t}static async createConversation(e,t,n,i,a,o,c,d){if(s().backend.kind===`cloud`)return ae({initial_message:e?{role:`user`,content:[{type:`text`,text:e}]}:null,title:t??null,selected_repository:i?.selected_repository??null,selected_branch:i?.selected_branch??null,git_provider:i?.git_provider??null,plugins:n??null,parent_conversation_id:o??null,agent_type:c,sandbox_id:d??null});let f=await S.getSettings(),p=v(),m=await Fe({settings:f,query:e,conversationInstructions:t,plugins:n,conversationId:p,workingDir:await E(a??r(p))}),h=await new C(l()).createConversation(m),g=u();if(!g)throw new ee;return(i?.selected_repository||a)&&j(h.id,{selected_repository:i?.selected_repository??null,selected_branch:i?.selected_branch??null,git_provider:i?.git_provider??null,selected_workspace:a??null}),{id:h.id,created_by_user_id:null,status:`READY`,detail:null,app_conversation_id:h.id,agent_server_url:g.host,request:{initial_message:m.initial_message,plugins:n??null},created_at:h.created_at,updated_at:h.updated_at}}static async getStartTask(e){return s().backend.kind===`cloud`?fe(e):null}static async getVSCodeUrl(e,t,n){let r=await this.resolveConversationWorkingDir(e);return{vscode_url:await new f(l({conversationUrl:t,sessionApiKey:n})).getUrl({baseUrl:typeof window<`u`?window.location.origin:void 0,workspaceDir:r})}}static async resolveConversationWorkingDir(e){let[t]=await this.batchGetAppConversations([e]);return t?.workspace?.working_dir??i()}static async batchGetAppConversations(e){return e.length===0?[]:s().backend.kind===`cloud`?F(e):$(await new C(l()).getConversations(e)).map(e=>B(e))}static async updateConversationPublicFlag(e,t){if(s().backend.kind!==`cloud`)throw Error(`Public sharing requires a cloud backend.`);return ce(e,t)}static async updateConversationRepository(e,t,n,r){t?j(e,{...A(e)??{},selected_repository:t,selected_branch:n??null,git_provider:r??null}):M(e);let[i]=await this.batchGetAppConversations([e]);return Ye(i,e)}static async readConversationFile(e,t){if(s().backend.kind===`cloud`)return de(e,We(t??`/workspace/project/.agents_tmp/PLAN.md`,`/workspace/project`));let n=await this.resolveConversationWorkingDir(e),r=We(t??`${n}/.agents_tmp/PLAN.md`,n);return new p(l()).downloadTextFile(r)}static async downloadConversation(e){return s().backend.kind===`cloud`?oe(e):new p(l()).downloadTrajectory(e)}static async getHooks(e){return Ie()}static async getRuntimeConversation(e,t,n){let r=s().backend,i=r.kind===`cloud`&&t?await _({backend:r,method:`GET`,hostOverride:a(t),path:`/api/conversations/${e}`,authMode:`session-api-key`,sessionApiKey:n}):await new C(l({conversationUrl:t,sessionApiKey:n})).getConversation(e),o=Ge(i),c=q(i)?i.stats:null;return{id:o.id,title:o.title?.trim()?o.title:z(o.id),metrics:Q(o.metrics),created_at:o.created_at,updated_at:o.updated_at,status:Je(o.execution_status),stats:q(c)?c:{usage_to_metrics:{}}}}static async searchConversations(e=20,t){return s().backend.kind===`cloud`?ie(e,t):ye(Ke(await new C(l()).searchConversations({limit:e,page_id:t,sort_order:d.UPDATED_AT_DESC})))}static async deleteConversation(e){s().backend.kind===`cloud`?await se(e):await new C(l()).deleteConversation(e),M(e)}static async updateConversationTitle(e,t){await new C(l()).updateConversation(e,{title:t});let[n]=await this.batchGetAppConversations([e]);return Ye(n,e)}static async switchProfile(e,t){if(s().backend.kind===`cloud`)throw Error(`LLM profile switching is only supported for local agent-server backends.`);if(!e){await new m(l()).activateProfile(t);return}let n=l(),r=new C(n),i=await new m(n).getProfile(t,{exposeSecrets:`encrypted`}),a=typeof i.config.model==`string`?i.config.model:``;if(!a)throw Error(`Profile '${t}' has no model.`);await r.switchLLM(e,{...i.config,model:a,usage_id:`profile:${t}:${v()}`})}static async switchAcpModel(e,t){if(s().backend.kind===`cloud`)throw Error(`ACP model switching is only supported for local agent-server backends.`);await new C(l()).switchAcpModel(e,t)}};export{A as a,ue as i,F as n,E as o,le as r,C as s,Xe as t};
@@ -1 +0,0 @@
1
- import{a as e}from"./rolldown-runtime-BFRubm34.js";import{t}from"./react-CM_dJw1Z.js";import{o as n,t as r}from"./declaration-DaUdB2Wg.js";import{t as i}from"./useTranslation-CEcjrme-.js";import{t as a}from"./utils-CdgBzLA7.js";import{g as o,n as s,s as c}from"./agent-server-client-options-9agOSarV.js";import{r as l}from"./active-backend-context-I2w666XY.js";import{i as u}from"./agent-server-compatibility-B7QStIcH.js";import{r as d,t as f}from"./modal-body-CCLCqX1J.js";import{t as p}from"./brand-button-LBFNic99.js";import{r as m,t as h}from"./backend-form-modal-CeB983Sj.js";var g=e(t(),1),_=n();function v(){let{t:e}=i(`openhands`),{active:t,addBackend:n,updateBackend:v}=l(),y=window.location.origin,[b,x]=g.useState(!1),[S,C]=g.useState(`idle`),[w,T]=g.useState(null),E=g.useCallback(async i=>{x(!0),C(`idle`),T(null);try{await new c(s({host:i.host,sessionApiKey:i.apiKey,timeout:5e3})).getSettings(),C(`success`),o(t.backend)?n(i):v(t.backend.id,i),window.location.reload()}catch(t){if(C(`error`),u(t,401))T(e(r.AUTH$INVALID_KEY));else{let n=t instanceof Error?t.message:String(t);T(`${e(r.AUTH$CONNECTION_FAILED)}${n?`: ${n}`:``}`)}x(!1)}},[t.backend,n,v,e]);return(0,_.jsx)(`div`,{"data-testid":`api-key-entry-screen`,className:`flex min-h-screen items-center justify-center bg-base px-6`,children:(0,_.jsxs)(`div`,{className:a(`relative rounded-xl border border-[var(--oh-border)] bg-base-secondary`,d(`md`),f),children:[(0,_.jsx)(`div`,{className:`px-6 pt-6 pb-2 pr-12`,children:(0,_.jsx)(`h2`,{className:`text-lg font-semibold`,children:e(r.BACKEND$ADD_TITLE)})}),(0,_.jsx)(`div`,{className:`px-6 pb-6 pt-2`,children:(0,_.jsx)(h,{mode:`add`,backend:{...t.backend,host:y,apiKey:``,name:``},onSubmitted:()=>{},testIdRoot:`api-key-entry`,hostReadOnly:!0,requireApiKey:!0,onSubmitOverride:E,renderActions:({canSubmit:t,testIdRoot:n})=>(0,_.jsxs)(_.Fragment,{children:[S!==`idle`&&(0,_.jsxs)(`div`,{className:`flex items-center gap-3 text-sm`,children:[(0,_.jsx)(m,{isConnected:S===`success`}),(0,_.jsx)(`span`,{"data-testid":`${n}-status`,className:S===`error`?`text-red-400`:`text-green-400`,children:S===`error`?w:e(r.ONBOARDING$BACKEND_STATUS_CONNECTED)})]}),(0,_.jsx)(p,{type:`submit`,variant:`secondary`,isDisabled:!t||b,testId:`${n}-submit`,className:`w-full text-center`,children:e(b?r.ONBOARDING$BACKEND_STATUS_CHECKING:r.BACKEND$CONNECT)})]})})})]})})}export{v as default};
@@ -1 +0,0 @@
1
- import{a as e}from"./rolldown-runtime-BFRubm34.js";import{t}from"./react-CM_dJw1Z.js";import{L as n,P as r}from"./vendor~entry.client~root~root-layout~index-redirect~home~conversation-panel~conversation~la~cnj3raoq-DTEXlLSB.js";import{t as i}from"./vendor~root~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-s~jaomi49z-Cw89stA6.js";import{o as a,t as o}from"./declaration-DaUdB2Wg.js";import{t as s}from"./useTranslation-CEcjrme-.js";import{t as c}from"./back-nav-button-DgkK0Ka6.js";import{n as l,r as u}from"./custom-toast-handlers-BohXx7uh.js";import{t as d}from"./utils-CdgBzLA7.js";import{a as f,d as p,n as m}from"./agent-server-client-options-9agOSarV.js";import{n as h}from"./active-backend-context-I2w666XY.js";import{f as g}from"./vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~dp08i1qy-D8soyAAx.js";import{r as _}from"./modal-classes-DwTdT3IK.js";import{n as v}from"./navigation-context-aNGUUtdq.js";import{n as y,r as b}from"./vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~e9ykmtgh-Fa-nXZ4M.js";import{t as x}from"./proxy-sRh0WKI7.js";import{t as S}from"./use-tracking-DQYdZpxi.js";import{t as C}from"./u-edit-BIYzjs3v.js";import{t as w}from"./terminal-BSYITdM0.js";import{t as T}from"./use-user-conversation-BRAseenw.js";import{t as E}from"./toggle-switch-CUgOZqZu.js";import{t as D}from"./x-mark-DsJ9tDD0.js";import{t as O}from"./code-tag-DhsjDB-v.js";import{t as k}from"./link-external-DtcdPFbw.js";import{t as A}from"./globe-qFjFNG6J.js";import{C as j,S as M,a as N,b as ee,c as P,d as F,f as te,g as ne,i as re,l as I,n as ie,o as ae,p as oe,r as se,s as ce,t as le,u as L,v as ue,x as de,y as fe}from"./edit-automation-modal-CNZgSSiH.js";import{t as R}from"./automation-DJ_3GeXD.js";var z=e(t()),B=a();function V(){let{t:e}=s(`openhands`);return(0,B.jsx)(c,{to:`/automations`,children:e(o.AUTOMATIONS$DETAIL$BACK_TO_LIST)})}var pe=e=>(0,B.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2,...e,children:(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3`})});function me({active:e}){let{t}=s(`openhands`);return(0,B.jsx)(`span`,{"data-testid":e?`active-status-badge-active`:`active-status-badge-inactive`,className:d(`inline-flex items-center rounded-full px-3 py-1 text-xs font-medium`,e?`bg-[var(--oh-success)]/15 text-[var(--oh-success)]`:`bg-surface-raised text-muted`),children:t(e?o.AUTOMATIONS$DETAIL$ACTIVE:o.AUTOMATIONS$DETAIL$INACTIVE)})}function he({automation:e,onToggle:t,onEdit:n,onDelete:r,onRunNow:i,isRunningNow:a=!1}){let{t:c}=s(`openhands`),l=te(`manage_automations`),u=[...n?[{label:c(o.AUTOMATIONS$EDIT),icon:(0,B.jsx)(C,{className:`size-4`}),onClick:n}]:[],{label:e.enabled?c(o.AUTOMATIONS$TURN_OFF):c(o.AUTOMATIONS$TURN_ON),icon:(0,B.jsx)(ce,{className:`size-4`}),onClick:t},{label:c(o.AUTOMATIONS$DOWNLOAD_TARBALL),icon:(0,B.jsx)(pe,{className:`size-4`}),onClick:()=>{j.downloadTarball(e.id,e.name)}},{label:c(o.AUTOMATIONS$DELETE),icon:(0,B.jsx)(ae,{className:`size-4`}),onClick:r}];return(0,B.jsx)(`div`,{className:`flex flex-col gap-4`,children:(0,B.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,B.jsx)(`h1`,{className:`text-xl font-medium text-content`,children:e.name}),(0,B.jsx)(me,{active:e.enabled})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[l&&i&&(0,B.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1.5 rounded-md border border-[var(--oh-border)] px-3 py-1.5 text-sm font-medium text-content transition-colors hover:bg-surface-raised disabled:cursor-not-allowed disabled:opacity-60`,disabled:a||!e.enabled,onClick:i,children:[(0,B.jsx)(F,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),a?`Starting…`:c(o.AUTOMATIONS$RUN_NOW)]}),l&&(0,B.jsx)(E,{enabled:e.enabled,label:e.enabled?c(o.AUTOMATIONS$TURN_OFF):c(o.AUTOMATIONS$TURN_ON),onToggle:t}),l&&(0,B.jsx)(oe,{items:u})]})]})})}function H({icon:e,title:t,children:n}){return(0,B.jsxs)(`div`,{className:`rounded-2xl border border-[var(--oh-border)] bg-[var(--oh-surface)]`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-[var(--oh-border)] px-5 py-3`,children:[(0,B.jsx)(`span`,{className:`size-4 text-muted`,children:e}),(0,B.jsx)(`h3`,{className:`text-sm font-medium text-content`,children:t})]}),(0,B.jsx)(`div`,{className:`px-5 py-5`,children:n})]})}var ge=240,_e=`max-h-60`;function ve({prompt:e}){let{t}=s(`openhands`),[n,r]=z.useState(!1),[i,a]=z.useState(!1),c=z.useRef(null),l=i&&!n;return z.useLayoutEffect(()=>{let e=c.current;if(!e)return;let t=()=>{a(e.scrollHeight>ge)};t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[e]),(0,B.jsx)(H,{icon:(0,B.jsx)(w,{className:`size-4`}),title:t(o.AUTOMATIONS$DETAIL$PROMPT),children:(0,B.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,B.jsxs)(`div`,{className:`relative`,children:[(0,B.jsx)(`p`,{ref:c,className:d(`whitespace-pre-wrap text-sm leading-6 text-content`,l&&d(_e,`overflow-hidden`)),"data-testid":`automation-prompt-content`,children:e}),l?(0,B.jsx)(`div`,{className:`pointer-events-none absolute inset-x-0 bottom-0 h-20 bg-gradient-to-t from-[var(--oh-surface)] to-transparent`,"aria-hidden":!0,"data-testid":`automation-prompt-fade`}):null]}),i?(0,B.jsx)(`button`,{type:`button`,className:`self-start cursor-pointer text-sm font-normal text-[var(--oh-muted)] hover:text-white`,onClick:()=>r(e=>!e),"data-testid":`automation-prompt-toggle`,children:t(n?o.COMMON$VIEW_LESS:o.COMMON$VIEW_MORE)}):null]})})}var ye=e=>(0,B.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:[(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 0 1 1.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 0 1-1.449.12l-.738-.527c-.35-.25-.806-.272-1.204-.107-.397.165-.71.505-.78.929l-.15.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 0 1-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.506-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.108-1.204l-.526-.738a1.125 1.125 0 0 1 .12-1.45l.773-.773a1.125 1.125 0 0 1 1.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894Z`}),(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z`})]}),be=e=>(0,B.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:[(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M6 3v12m0 0a3 3 0 1 0 3 3M6 15a3 3 0 0 1 3-3h6a3 3 0 0 0 3-3V3m0 0a3 3 0 1 0 0 0`}),(0,B.jsx)(`circle`,{cx:6,cy:3,r:2}),(0,B.jsx)(`circle`,{cx:18,cy:3,r:2}),(0,B.jsx)(`circle`,{cx:9,cy:18,r:2})]}),U=e=>(0,B.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M9 12.75 11.25 15 15 9.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z`})}),W=e=>(0,B.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 0 1 2.25-2.25h13.5A2.25 2.25 0 0 1 21 7.5v11.25m-18 0A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75m-18 0v-7.5A2.25 2.25 0 0 1 5.25 9h13.5A2.25 2.25 0 0 1 21 11.25v7.5`})}),xe=e=>(0,B.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0`})});function G({icon:e,label:t,children:n}){return(0,B.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(`span`,{className:`size-3.5 text-muted`,children:e}),(0,B.jsx)(`span`,{className:`text-xs font-medium text-muted`,children:t})]}),(0,B.jsx)(`div`,{className:`text-sm text-content`,children:n})]})}function Se({branch:e}){return(0,B.jsx)(`span`,{className:`inline-flex items-center rounded-full border border-[var(--oh-border)] bg-surface-raised px-2.5 py-0.5 text-xs text-muted`,children:e})}var K=60;function Ce({filter:e}){let{t}=s(`openhands`),[n,r]=(0,z.useState)(!1),i=e.length>K;return(0,B.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,B.jsx)(`span`,{className:`break-all`,children:i&&!n?`${e.slice(0,K)}…`:e}),i&&(0,B.jsx)(`button`,{type:`button`,onClick:()=>r(!n),"aria-expanded":n,className:`text-xs text-muted hover:text-content self-start`,children:t(n?o.SETTINGS$SKILLS_SHOW_LESS:o.SETTINGS$SKILLS_SHOW_MORE)})]})}function we({automation:e}){let{t}=s(`openhands`),n=e.trigger.type===`event`,r=e.trigger.schedule??``;e.trigger.schedule_human&&(r=e.timezone?`${e.trigger.schedule_human} (${e.timezone})`:e.trigger.schedule_human);let i=t(n?o.AUTOMATIONS$DETAIL$TRIGGER_EVENT:o.AUTOMATIONS$DETAIL$TRIGGER_SCHEDULE);return(0,B.jsx)(H,{icon:(0,B.jsx)(ye,{className:`size-4`}),title:t(o.AUTOMATIONS$DETAIL$CONFIGURATION),children:(0,B.jsxs)(`div`,{className:`grid grid-cols-2 gap-x-4 gap-y-5`,children:[e.repository&&(0,B.jsx)(G,{icon:(0,B.jsx)(be,{className:`size-3.5`}),label:t(o.AUTOMATIONS$DETAIL$REPOSITORIES),children:(0,B.jsxs)(`span`,{className:`flex items-center gap-1`,children:[e.repository,e.branch&&(0,B.jsx)(Se,{branch:e.branch})]})}),(0,B.jsx)(G,{icon:(0,B.jsx)(U,{className:`size-3.5`}),label:t(o.AUTOMATIONS$DETAIL$TRIGGER),children:i}),!n&&(0,B.jsx)(G,{icon:(0,B.jsx)(W,{className:`size-3.5`}),label:t(o.AUTOMATIONS$DETAIL$SCHEDULE),children:r}),n&&e.trigger.source&&(0,B.jsx)(G,{icon:(0,B.jsx)(A,{className:`size-3.5`}),label:t(o.AUTOMATIONS$DETAIL$EVENT_SOURCE),children:e.trigger.source}),n&&e.trigger.on&&(0,B.jsx)(G,{icon:(0,B.jsx)(k,{className:`size-3.5`}),label:t(o.AUTOMATIONS$DETAIL$EVENT_TYPE),children:P(e.trigger.on)}),n&&e.trigger.filter&&(0,B.jsx)(G,{icon:(0,B.jsx)(O,{className:`size-3.5`}),label:t(o.AUTOMATIONS$DETAIL$EVENT_FILTER),children:(0,B.jsx)(Ce,{filter:e.trigger.filter})}),(0,B.jsx)(G,{icon:(0,B.jsx)(I,{className:`size-3.5`}),label:t(o.AUTOMATIONS$DETAIL$MODEL),children:e.model??`Active profile`}),e.notification&&(0,B.jsx)(G,{icon:(0,B.jsx)(xe,{className:`size-3.5`}),label:t(o.AUTOMATIONS$DETAIL$NOTIFICATION),children:e.notification})]})})}var Te=e=>(0,B.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M14.25 6.087c0-.355.186-.676.401-.959.221-.29.349-.634.349-1.003 0-1.036-1.007-1.875-2.25-1.875s-2.25.84-2.25 1.875c0 .369.128.713.349 1.003.215.283.401.604.401.959v0a.64.64 0 0 1-.657.643 48.39 48.39 0 0 1-4.163-.3c.186 1.613.293 3.25.315 4.907a.656.656 0 0 1-.658.663v0c-.355 0-.676-.186-.959-.401a1.647 1.647 0 0 0-1.003-.349c-1.036 0-1.875 1.007-1.875 2.25s.84 2.25 1.875 2.25c.369 0 .713-.128 1.003-.349.283-.215.604-.401.959-.401v0c.31 0 .555.26.532.57a48.039 48.039 0 0 1-.642 5.056c1.518.19 3.058.309 4.616.354a.64.64 0 0 0 .657-.643v0c0-.355-.186-.676-.401-.959a1.647 1.647 0 0 1-.349-1.003c0-1.035 1.008-1.875 2.25-1.875 1.243 0 2.25.84 2.25 1.875 0 .369-.128.713-.349 1.003-.215.283-.4.604-.4.959v0c0 .333.277.599.61.58a48.1 48.1 0 0 0 5.427-.63 48.05 48.05 0 0 0 .582-4.717.532.532 0 0 0-.533-.57v0c-.355 0-.676.186-.959.401-.29.221-.634.349-1.003.349-1.035 0-1.875-1.007-1.875-2.25s.84-2.25 1.875-2.25c.37 0 .713.128 1.003.349.283.215.604.401.96.401v0a.656.656 0 0 0 .658-.663 48.422 48.422 0 0 0-.37-5.36c-1.886.342-3.81.574-5.766.689a.578.578 0 0 1-.61-.58v0Z`})});function Ee({name:e}){return(0,B.jsx)(`span`,{className:`inline-flex items-center rounded-full border border-[var(--oh-border)] bg-[var(--oh-surface-deep)] px-3.5 py-1.5 text-sm text-content`,children:e})}function De({plugins:e}){let{t}=s(`openhands`);return(0,B.jsx)(H,{icon:(0,B.jsx)(Te,{className:`size-4`}),title:t(o.AUTOMATIONS$DETAIL$PLUGINS),children:(0,B.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.map(e=>(0,B.jsx)(Ee,{name:e},e))})})}var q=e=>(0,B.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182`})});function J(e,t){return new Date(e).toLocaleDateString(t,{year:`numeric`,month:`short`,day:`numeric`})}function Oe(e,t,n){let r=Date.now()-new Date(e).getTime(),i=Math.floor(r/6e4),a=Math.floor(r/36e5),s=Math.floor(r/864e5);return i<1?n(o.AUTOMATIONS$DETAIL$TIME_JUST_NOW):i<60?n(o.AUTOMATIONS$DETAIL$TIME_MINUTES_AGO,{count:i}):a<24?n(o.AUTOMATIONS$DETAIL$TIME_HOURS_AGO,{count:a}):s===1?n(o.AUTOMATIONS$DETAIL$TIME_YESTERDAY):s<7?n(o.AUTOMATIONS$DETAIL$TIME_DAYS_AGO,{count:s}):J(e,t)}function ke({createdAt:e,lastRunAt:t}){let{t:n,i18n:r}=s(`openhands`),i=r.language;return(0,B.jsx)(H,{icon:(0,B.jsx)(q,{className:`size-4`}),title:n(o.AUTOMATIONS$DETAIL$ACTIVITY),children:(0,B.jsxs)(`div`,{className:`grid grid-cols-2 gap-x-4`,children:[(0,B.jsx)(G,{icon:(0,B.jsx)(W,{className:`size-3.5`}),label:n(o.AUTOMATIONS$DETAIL$CREATED),children:J(e,i)}),(0,B.jsx)(G,{icon:(0,B.jsx)(L,{className:`size-3.5`}),label:n(o.AUTOMATIONS$DETAIL$LAST_RUN),children:t?Oe(t,i,n):n(o.AUTOMATIONS$DETAIL$TIME_NEVER)})]})})}var Ae=e=>(0,B.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`m9.75 9.75 4.5 4.5m0-4.5-4.5 4.5M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z`})}),je={[R.COMPLETED]:{label:o.AUTOMATIONS$DETAIL$SUCCESSFUL,style:`border-[var(--oh-success)]/50 bg-[var(--oh-success)]/10 text-[var(--oh-success)]`},[R.FAILED]:{label:o.AUTOMATIONS$DETAIL$FAILED,style:`border-[var(--oh-danger)]/50 bg-[var(--oh-danger)]/10 text-danger`},[R.PENDING]:{label:o.AUTOMATIONS$DETAIL$PENDING,style:`border-[var(--oh-border)] bg-surface-raised text-muted`},[R.RUNNING]:{label:o.AUTOMATIONS$DETAIL$RUNNING,style:`border-[var(--oh-border)] bg-surface-raised text-muted`}};function Me({status:e}){switch(e){case R.COMPLETED:return(0,B.jsx)(U,{"data-testid":`run-status-icon-completed`,className:`size-3.5`});case R.FAILED:return(0,B.jsx)(Ae,{"data-testid":`run-status-icon-failed`,className:`size-3.5`});default:return(0,B.jsx)(L,{"data-testid":`run-status-icon-pending`,className:`size-3.5`})}}function Ne({status:e}){let{t}=s(`openhands`),n=je[e];return(0,B.jsxs)(`span`,{className:d(`inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs font-medium`,n.style),children:[(0,B.jsx)(Me,{status:e}),t(n.label)]})}var Pe=20;function Fe(e){return e.kind===`BashOutput`}var Ie=class e{static async listOutputs(t,n,r){let i=[],a;for(let o=0;o<Pe;o+=1){let o=await e.searchEvents(t,n,{kind__eq:`BashOutput`,command_id__eq:r,sort_order:`TIMESTAMP`,...a?{page_id:a}:{}});if(o.items.forEach(e=>{Fe(e)&&i.push(e)}),!o.next_page_id)break;a=o.next_page_id}return i}static async searchEvents(e,t,n){let r=p().backend;if(r.kind===`cloud`){if(!e)throw Error(`BashService.listOutputs requires a conversation URL on cloud backends`);let i=new URLSearchParams;return Object.entries(n).forEach(([e,t])=>{t!=null&&i.set(e,String(t))}),x({backend:r,method:`GET`,hostOverride:f(e),path:`/api/bash/bash_events/search?${i.toString()}`,authMode:`session-api-key`,sessionApiKey:t})}return new g(m({...e?{conversationUrl:e}:{},sessionApiKey:t})).searchEvents(n)}},Le=[`bash-command-logs`];function Re(e){switch(e){case`MISSING`:return`missing`;case`PAUSED`:return`paused`;case`STARTING`:return`starting`;case`ERROR`:return`errored`;case`RUNNING`:case null:case void 0:default:return null}}function Y(e){if(!b.isAxiosError(e))return null;if(!e.response)return`unreachable`;let t=e.response.status;return t===404||t>=500?`unreachable`:null}function ze(e){let{conversationId:t,bashCommandId:n,enabled:r=!0}=e,a=h(),o=T(r?t??null:null),s=o.data,c=s?.conversation_url??null,l=s?.session_api_key??null,u=a.backend.kind===`cloud`,d=o.isFetched,f=null,p=!1;u&&d&&(s?f=Re(s.sandbox_status)??(s.conversation_url?null:`missing`):p=!0);let m=r&&!!n&&(u?!!c:!0)&&!f&&!p,g=i({queryKey:[...Le,n,c,l,a.backend.id,a.orgId],queryFn:()=>Ie.listOutputs(c,l,n),enabled:m,staleTime:60*1e3,gcTime:300*1e3,retry:!1}),_=u?Y(g.error):null,v=f??_;return{data:g.data,error:_?null:g.error,isFetching:g.isFetching,isPending:g.isPending,isResolvingConversation:u&&o.isPending,conversationMissing:p,sandboxIssue:v}}var Be={missing:o.AUTOMATIONS$DETAIL$LOGS_SANDBOX_MISSING,paused:o.AUTOMATIONS$DETAIL$LOGS_SANDBOX_PAUSED,starting:o.AUTOMATIONS$DETAIL$LOGS_SANDBOX_STARTING,errored:o.AUTOMATIONS$DETAIL$LOGS_SANDBOX_ERROR,unreachable:o.AUTOMATIONS$DETAIL$LOGS_SANDBOX_UNREACHABLE};function X(e,t){return[...e].sort((e,t)=>{let n=e.timestamp.localeCompare(t.timestamp);return n===0?(e.order??0)-(t.order??0):n}).map(e=>e[t]??``).join(``)}function Ve({conversationId:e,bashCommandId:t,isOpen:n,onClose:r}){let{t:i}=s(`openhands`),[a,c]=(0,z.useState)(`stdout`),{data:l,isFetching:u,isResolvingConversation:f,sandboxIssue:p,conversationMissing:m,error:h}=ze({conversationId:e,bashCommandId:t,enabled:n});(0,z.useEffect)(()=>{n&&c(`stdout`)},[n,t]),(0,z.useEffect)(()=>{if(!n)return;let e=e=>{e.key===`Escape`&&r()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n,r]);let{stdout:g,stderr:v}=(0,z.useMemo)(()=>l?{stdout:X(l,`stdout`),stderr:X(l,`stderr`)}:{stdout:``,stderr:``},[l]);if(!n)return null;let y=f||u&&!l,b=!t,x=a===`stdout`?g:v,S=`border-b-2 px-3 py-2 text-sm font-normal transition-colors focus:outline-none`,C=`border-[var(--oh-primary)] text-white`,w=`border-transparent text-muted hover:text-content`;return(0,B.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center p-4`,role:`dialog`,"aria-modal":`true`,"aria-label":i(o.AUTOMATIONS$DETAIL$LOGS_TITLE),children:[(0,B.jsx)(`div`,{className:`absolute inset-0 bg-black/60`,onClick:r,onKeyDown:e=>{e.key===`Escape`&&r()},role:`presentation`}),(0,B.jsxs)(`div`,{className:`relative flex max-h-[80vh] w-full max-w-3xl flex-col rounded-xl border border-[var(--oh-border)] bg-[var(--oh-surface)] p-6`,children:[(0,B.jsx)(`button`,{type:`button`,onClick:r,className:`absolute right-4 top-4 text-muted hover:text-foreground`,"aria-label":i(o.AUTOMATIONS$CANCEL),children:(0,B.jsx)(D,{className:`size-5`})}),(0,B.jsx)(`h2`,{className:d(`pr-8`,_),children:i(o.AUTOMATIONS$DETAIL$LOGS_TITLE)}),(0,B.jsxs)(`div`,{role:`tablist`,"aria-label":i(o.AUTOMATIONS$DETAIL$LOGS_TITLE),className:`mt-4 flex gap-1 border-b border-[var(--oh-border)]`,children:[(0,B.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":a===`stdout`,"aria-controls":`run-logs-panel-stdout`,id:`run-logs-tab-stdout`,tabIndex:a===`stdout`?0:-1,onClick:()=>c(`stdout`),className:`${S} ${a===`stdout`?C:w}`,children:i(o.AUTOMATIONS$DETAIL$LOGS_TAB_OUTPUT)}),(0,B.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":a===`stderr`,"aria-controls":`run-logs-panel-stderr`,id:`run-logs-tab-stderr`,tabIndex:a===`stderr`?0:-1,onClick:()=>c(`stderr`),className:`${S} ${a===`stderr`?C:w}`,children:i(o.AUTOMATIONS$DETAIL$LOGS_TAB_ERROR)})]}),(0,B.jsxs)(`div`,{role:`tabpanel`,id:`run-logs-panel-${a}`,"aria-labelledby":`run-logs-tab-${a}`,className:`mt-3 min-h-[12rem] flex-1 overflow-auto rounded-lg border border-[var(--oh-border)] bg-black/40 p-4 font-mono text-xs`,children:[b&&(0,B.jsx)(`p`,{className:`text-muted italic`,children:i(o.AUTOMATIONS$DETAIL$LOGS_NO_COMMAND)}),!b&&m&&(0,B.jsx)(`p`,{className:`text-muted italic`,children:i(o.AUTOMATIONS$DETAIL$LOGS_CONVERSATION_MISSING)}),!b&&!m&&p&&(0,B.jsx)(`p`,{"data-testid":`run-logs-sandbox-issue-${p}`,className:`text-muted italic`,children:i(Be[p])}),!b&&!m&&!p&&y&&(0,B.jsx)(`p`,{className:`text-muted italic`,children:i(o.AUTOMATIONS$DETAIL$LOGS_LOADING)}),!b&&!m&&!p&&!y&&h&&!l&&(0,B.jsxs)(`p`,{className:`text-danger`,children:[i(o.AUTOMATIONS$DETAIL$LOGS_ERROR),`: `,String(h)]}),!y&&!p&&l&&(0,B.jsx)(`pre`,{"data-testid":`run-logs-output-${a}`,className:`whitespace-pre-wrap break-words ${a===`stderr`?`text-danger`:`text-content`}`,children:x.length>0?x:(0,B.jsx)(`span`,{className:`text-muted italic`,children:i(o.AUTOMATIONS$DETAIL$LOGS_EMPTY)})})]})]})]})}function He(e,t){return new Date(e).toLocaleDateString(t,{weekday:`long`,year:`numeric`,month:`long`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}function Ue(e){if(!e)return!0;let t=new Date(e).getTime();return Number.isNaN(t)||t===0}function We(e){return`/conversations/${e}`}function Ge({run:e}){let{t,i18n:n}=s(`openhands`),r=!!e.conversation_id,i=!!e.bash_command_id,a=e.status===R.COMPLETED||e.status===R.FAILED,c=!r&&a,[l,u]=(0,z.useState)(!1),[d]=(0,z.useState)(()=>new Date().toISOString()),f=He(Ue(e.started_at)?d:e.started_at,n.language),p=i?(0,B.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),e.preventDefault(),u(!0)},className:`rounded-md p-1 text-muted hover:bg-surface-raised hover:text-foreground focus:bg-surface-raised focus:outline-none`,"aria-label":t(o.AUTOMATIONS$DETAIL$LOGS_VIEW,{timestamp:f}),title:t(o.AUTOMATIONS$DETAIL$LOGS_VIEW_SHORT),children:(0,B.jsx)(w,{className:`size-4`})}):null,m=(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,B.jsx)(`span`,{className:`text-sm text-content`,children:f}),c&&(0,B.jsxs)(`span`,{className:`text-xs text-muted italic`,children:[`(`,t(o.AUTOMATIONS$DETAIL$NO_CONVERSATION),`)`]})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[p,(0,B.jsx)(Ne,{status:e.status})]})]});return(0,B.jsxs)(B.Fragment,{children:[r&&e.conversation_id?(0,B.jsx)(`a`,{href:We(e.conversation_id),className:`flex items-center justify-between px-5 py-3 transition-colors cursor-pointer hover:bg-surface-raised focus:bg-surface-raised focus:outline-none`,"aria-label":`View conversation for run at ${f}`,children:m}):(0,B.jsx)(`div`,{className:`flex items-center justify-between px-5 py-3 cursor-default`,children:m}),i&&(0,B.jsx)(Ve,{conversationId:e.conversation_id,bashCommandId:e.bash_command_id,isOpen:l,onClose:()=>u(!1)})]})}var Z=20;function Ke({automationId:e}){let{t}=s(`openhands`),[n,r]=(0,z.useState)(Z),{data:i,isLoading:a}=M({id:e,limit:n,offset:0}),c=i?i.total>i.runs.length:!1;return(0,B.jsxs)(`div`,{className:`rounded-2xl border border-[var(--oh-border)] bg-[var(--oh-surface)]`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-[var(--oh-border)] px-5 py-3`,children:[(0,B.jsx)(`span`,{className:`size-4 text-muted`,children:(0,B.jsx)(q,{className:`size-4`})}),(0,B.jsx)(`h3`,{className:`text-sm font-medium text-content`,children:t(o.AUTOMATIONS$DETAIL$ACTIVITY_LOG)})]}),a&&(0,B.jsx)(`div`,{className:`space-y-1 p-5`,children:Array.from({length:3}).map((e,t)=>(0,B.jsxs)(`div`,{className:`flex items-center justify-between py-3`,children:[(0,B.jsx)(`div`,{className:`h-5 w-64 animate-pulse rounded bg-surface-raised`}),(0,B.jsx)(`div`,{className:`h-6 w-24 animate-pulse rounded-full bg-surface-raised`})]},`skeleton-${t}`))}),!a&&i?.runs.length===0&&(0,B.jsx)(`p`,{className:`px-5 py-8 text-center text-sm text-muted`,children:t(o.AUTOMATIONS$DETAIL$NO_RUNS)}),!a&&i&&i.runs.length>0&&(0,B.jsxs)(`div`,{children:[i.runs.map((e,t)=>(0,B.jsx)(`div`,{className:t>0?`border-t border-[var(--oh-border)]`:``,children:(0,B.jsx)(Ge,{run:e})},e.id)),c&&(0,B.jsx)(`div`,{className:`border-t border-[var(--oh-border)] px-5 py-3`,children:(0,B.jsx)(`button`,{type:`button`,onClick:()=>r(e=>e+Z),className:`text-sm text-muted hover:text-foreground`,children:t(o.AUTOMATIONS$DETAIL$LOAD_MORE_RUNS)})})]})]})}function Q({className:e}){return(0,B.jsx)(`div`,{className:d(`animate-pulse rounded bg-surface-raised`,e)})}function $(){return(0,B.jsxs)(`div`,{className:`flex flex-col gap-4`,"data-testid":`detail-skeleton`,children:[(0,B.jsx)(Q,{className:`h-5 w-40`}),(0,B.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,B.jsx)(Q,{className:`h-6 w-48`}),(0,B.jsx)(Q,{className:`h-6 w-16 rounded-full`})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(Q,{className:`h-6 w-11 rounded-full`}),(0,B.jsx)(Q,{className:`h-8 w-8`})]})]}),(0,B.jsx)(Q,{className:`h-5 w-96`}),(0,B.jsx)(Q,{className:`h-36 w-full rounded-2xl`}),(0,B.jsx)(Q,{className:`h-72 w-full rounded-2xl`}),(0,B.jsx)(Q,{className:`h-32 w-full rounded-2xl`}),(0,B.jsx)(Q,{className:`h-40 w-full rounded-2xl`})]})}function qe(){let{t:e}=s(`openhands`);return(0,B.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-20`,children:[(0,B.jsx)(N,{className:`size-12 text-muted`}),(0,B.jsx)(`p`,{className:`mt-4 text-sm font-medium text-content`,children:e(o.AUTOMATIONS$DETAIL$NOT_FOUND_TITLE)}),(0,B.jsx)(`p`,{className:`mt-2 text-sm text-muted`,children:e(o.AUTOMATIONS$DETAIL$NOT_FOUND_MESSAGE)}),(0,B.jsx)(`div`,{className:`mt-6`,children:(0,B.jsx)(V,{})})]})}var Je=n(function(){let{t:e}=s(`openhands`),{automationId:t}=r(),{navigate:n}=v(),[i,a]=(0,z.useState)(!1),[c,d]=(0,z.useState)(!1),{data:f,isLoading:p,refetch:m}=ne(),g=f?.status===`ok`,_=h(),b=(0,z.useRef)(_.backend.id).current!==_.backend.id,{data:x,isLoading:C,isError:w,error:T,refetch:E}=de({id:t??``,enabled:g&&!b}),{trackPrebuiltAutomationEnabled:D}=S(),O=ee(),k=ue(),A=fe(),j=w&&y(T)&&T.response?.status===404;if(p)return(0,B.jsx)(`div`,{className:`min-h-full`,children:(0,B.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,B.jsx)($,{})})});if(!g)return(0,B.jsx)(`div`,{className:`min-h-full`,children:(0,B.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,B.jsx)(se,{onRetry:m})})});if(C)return(0,B.jsx)(`div`,{className:`min-h-full`,children:(0,B.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,B.jsx)($,{})})});if(j)return(0,B.jsx)(`div`,{className:`min-h-full`,children:(0,B.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,B.jsx)(qe,{})})});if(w||!x)return(0,B.jsx)(`div`,{className:`min-h-full`,children:(0,B.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,B.jsx)(re,{onRetry:()=>E()})})});let M=()=>{let e=!x.enabled;O.mutate({id:x.id,enabled:e}),e&&D({automationId:x.id,automationName:x.name})},N=()=>{k.mutate(x.id,{onSuccess:()=>{n?.(`/automations`)}})},P=()=>{A.mutate(x.id,{onSuccess:()=>{u(e(o.AUTOMATIONS$RUN_NOW_SUCCESS))},onError:t=>{l(y(t)?t.response?.data?.message||t.message||e(o.AUTOMATIONS$RUN_NOW_ERROR):t.message||e(o.AUTOMATIONS$RUN_NOW_ERROR))}})},F=_.backend.kind===`local`;return(0,B.jsx)(`div`,{className:`min-h-full`,children:(0,B.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,B.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,B.jsx)(V,{}),(0,B.jsx)(he,{automation:x,onToggle:M,onEdit:F?()=>d(!0):void 0,onDelete:()=>a(!0),onRunNow:P,isRunningNow:A.isPending}),x.prompt&&(0,B.jsx)(ve,{prompt:x.prompt}),(0,B.jsx)(we,{automation:x}),x.plugins&&x.plugins.length>0&&(0,B.jsx)(De,{plugins:x.plugins}),(0,B.jsx)(ke,{createdAt:x.created_at,lastRunAt:x.last_triggered_at}),(0,B.jsx)(Ke,{automationId:x.id}),(0,B.jsx)(ie,{automationName:x.name,isOpen:i,onConfirm:N,onCancel:()=>a(!1)}),F&&(0,B.jsx)(le,{automation:x,isOpen:c,onClose:()=>d(!1)})]})})})});export{Je as default};
@@ -1 +0,0 @@
1
- import{a as e}from"./rolldown-runtime-BFRubm34.js";import{t}from"./react-CM_dJw1Z.js";import{t as n}from"./vendor~root~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-s~jaomi49z-Cw89stA6.js";import{i as r,r as i}from"./organization-service.api-Dn74hBTH.js";import{o as a,t as o}from"./declaration-DaUdB2Wg.js";import{t as s}from"./useTranslation-CEcjrme-.js";import{t as c}from"./utils-CdgBzLA7.js";import{i as l,n as u,o as d,r as f}from"./health-store-B5f0S2FY.js";import{n as p,s as m}from"./agent-server-client-options-9agOSarV.js";import{r as h}from"./active-backend-context-I2w666XY.js";import{t as g}from"./server-client-DYv_GHPl.js";import{i as _}from"./agent-server-compatibility-B7QStIcH.js";import{t as v}from"./modal-backdrop-BDqI1zBV.js";import{r as y,t as b}from"./modal-body-CCLCqX1J.js";import{n as x,r as S}from"./modal-classes-DwTdT3IK.js";import{t as C}from"./brand-button-LBFNic99.js";import{n as w}from"./navigation-context-aNGUUtdq.js";import{t as T}from"./modal-close-button-gQgKqUf-.js";import{t as E}from"./settings-input-8y5p4kze.js";var D=a(),O=e(t(),1),k=1e4,A=4e3,j=`Invalid API key`;function M(e){return e===j}async function N(e){if(e.kind===`cloud`)return await i(e),!0;try{await new m(p({host:e.host,sessionApiKey:e.apiKey||null,timeout:A})).getSettings()}catch(e){throw _(e,401)?Error(j):e}return!0}function P(e,t={}){let{probeDisabledOnce:n=!1}=t,i=O.useSyncExternalStore(d,u,u),a=r({queries:e.map(e=>{let t=i[e.id]?.disabled===!0,r=!t||n;return{queryKey:[`backend-health`,e.id,e.kind,e.host,e.apiKey??``],queryFn:async()=>{try{let t=await N(e);return l(e.id),t}catch(t){throw f(e.id,t),t}},enabled:r,refetchInterval:t?!1:k,refetchIntervalInBackground:!1,refetchOnMount:t&&n?`always`:!0,refetchOnReconnect:!t,refetchOnWindowFocus:!t,retry:!1,staleTime:t?0:k,meta:{disableToast:!0}}})}),o={};return e.forEach((e,t)=>{let n=a[t],r=i[e.id],s=r?.disabled===!0,c=r?.consecutiveFailures??0,l=r?.lastError??null,u;u=s?!1:n.isSuccess?!0:n.isError?!1:null,o[e.id]={isConnected:u,consecutiveFailures:c,lastError:l,disabled:s}}),o}var F=e=>(0,D.jsxs)(`svg`,{width:1365,height:1365,viewBox:`0 -24 148 148`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,D.jsx)(`path`,{d:`M71.7542 16.863V2.97414C71.7542 1.82355 72.6872 0.890503 73.8378 0.890503C74.9884 0.890503 75.9214 1.82355 75.9214 2.97414V16.863C75.9214 18.0136 74.9884 18.9466 73.8378 18.9466C72.6872 18.9466 71.7542 18.0136 71.7542 16.863Z`,fill:`white`}),(0,D.jsx)(`path`,{d:`M82.5272 18.9329L89.4716 6.90477C90.0469 5.90832 91.3215 5.5668 92.3179 6.1421C93.3144 6.7174 93.6559 7.99197 93.0806 8.98841L86.1362 21.0165C85.5609 22.0129 84.2863 22.3545 83.2899 21.7792C82.2934 21.2039 81.9519 19.9293 82.5272 18.9329Z`,fill:`white`}),(0,D.jsx)(`path`,{d:`M65.1481 18.9329L58.2037 6.90477C57.6284 5.90832 56.3538 5.5668 55.3574 6.1421C54.3609 6.7174 54.0194 7.99197 54.5947 8.98841L61.5391 21.0165C62.1144 22.0129 63.389 22.3545 64.3854 21.7792C65.3819 21.2039 65.7234 19.9293 65.1481 18.9329Z`,fill:`white`}),(0,D.jsx)(`path`,{d:`M140.606 62.0292C140.606 58.409 141.583 47.6748 141.89 44.1323C142.097 41.7374 141.809 40.4247 141.424 39.7542C141.141 39.2626 140.699 38.915 139.634 38.8436C138.865 38.7921 138.027 39.0114 137.401 39.5761C136.814 40.1052 136.159 41.1682 136.159 43.3176L136.155 43.4388L135.198 59.758C135.164 60.3451 134.883 60.8911 134.424 61.2599C133.966 61.6284 133.374 61.7859 132.793 61.6941L122.764 60.1068L111.948 58.6703C110.949 58.5376 110.188 57.7084 110.142 56.7016L109.561 44.1323C109.535 43.621 109.51 43.1141 109.484 42.6146C109.241 37.9294 109.022 33.7805 109.022 32.4282C109.022 28.3859 108.338 26.6806 107.74 25.9634C107.263 25.3915 106.577 25.1402 105.11 25.1402C104.583 25.1402 104.212 25.2481 103.933 25.4111C103.659 25.5714 103.346 25.8587 103.049 26.4208C102.41 27.6257 101.945 29.891 102.118 33.8479C102.342 38.9804 102.692 42.8146 103.035 46.2718C103.377 49.7231 103.718 52.8561 103.908 56.4971C104.204 62.1966 104.178 66.1256 103.945 68.7924C103.828 70.124 103.656 71.1996 103.423 72.0501C103.202 72.8558 102.871 73.6757 102.296 74.2887C101.6 75.0303 100.608 75.3844 99.577 75.136C98.7592 74.9389 98.1847 74.4215 97.8706 74.0916C97.2141 73.4017 96.7501 72.5106 96.568 72.0512C95.5097 69.3812 92.2352 63.1808 87.8023 59.6811C86.5089 58.6599 85.5666 58.3652 84.9736 58.3204C84.4148 58.2783 84.0094 58.4436 83.6909 58.6967C83.34 58.9756 83.0781 59.3811 82.9479 59.7643C82.9019 59.8999 82.8823 59.9968 82.8741 60.0584C84.0759 62.0865 88.8421 69.5222 91.0896 77.069C92.7648 82.6941 96.8038 88.4259 99.8194 90.8809C102.74 93.258 107.988 94.7313 113.9 95.0218C119.756 95.3095 125.788 94.4121 130.033 92.5092C138.233 88.8334 139.903 80.7382 140.651 77.2292C141.232 74.5057 141.243 71.5987 141.087 68.9009C141.01 67.5551 140.894 66.2969 140.793 65.1373C140.695 64.0105 140.606 62.9215 140.606 62.0292ZM120.986 27.0953C120.986 25.8314 120.648 24.7049 120.089 23.9514C119.583 23.27 118.84 22.7987 117.646 22.7984C116.668 22.7982 116.011 22.9187 115.546 23.1167C115.13 23.2943 114.781 23.5699 114.463 24.0831C113.73 25.2671 113.192 27.6455 113.189 32.384L113.721 43.9088C113.91 47.5661 114.106 51.4922 114.235 54.7707L120.986 55.6666V27.0953ZM125.153 56.2652L131.172 57.218L131.992 43.267V32.5083C131.992 31.031 131.39 30.1275 130.678 29.5489C129.884 28.9039 128.957 28.6731 128.519 28.6731C127.722 28.6731 126.899 28.797 126.306 29.2179C125.849 29.5421 125.153 30.3087 125.153 32.5083V56.2652ZM136.159 35.4278C137.406 34.8069 138.74 34.6083 139.912 34.6868C142.037 34.8292 143.91 35.718 145.037 37.6779C146.06 39.4592 146.273 41.8136 146.041 44.4927C145.72 48.1949 144.772 58.6457 144.772 62.0292C144.772 62.708 144.843 63.6116 144.944 64.7758C145.042 65.907 145.165 67.2389 145.247 68.6606C145.411 71.4987 145.422 74.8383 144.727 78.0987C144.002 81.4953 142.041 91.6918 131.738 96.3108C126.731 98.5551 120.002 99.4936 113.696 99.1838C107.445 98.8767 101.128 97.3189 97.1887 94.1122C93.4809 91.0937 88.9938 84.6307 87.0962 78.2589C84.9529 71.0619 80.3109 63.9646 79.1527 61.9533C78.4706 60.7689 78.684 59.3628 79.0019 58.4258C79.3607 57.3688 80.0554 56.2631 81.0993 55.4337C82.1758 54.5784 83.6043 54.0377 85.2876 54.1647C86.9369 54.2893 88.6462 55.0393 90.3834 56.4107C94.8541 59.9401 98.1342 65.5082 99.7424 68.9231C99.759 68.7664 99.779 68.6024 99.7941 68.4298C100.003 66.0435 100.039 62.3344 99.7467 56.7132C99.5635 53.1942 99.2356 50.1809 98.8888 46.6828C98.5425 43.1904 98.184 39.2713 97.955 34.0302C97.7722 29.8481 98.2012 26.6722 99.3672 24.471C99.9716 23.3302 100.79 22.4223 101.83 21.814C102.866 21.2087 103.995 20.974 105.11 20.974C106.759 20.974 108.813 21.2062 110.448 22.7678C110.593 22.4576 110.75 22.1652 110.921 21.8899C111.676 20.6698 112.681 19.8084 113.912 19.2835C115.095 18.7791 116.378 18.6309 117.646 18.6311C120.195 18.6315 122.164 19.7567 123.434 21.4683C124.256 22.576 124.75 23.8775 124.985 25.1982C126.338 24.5876 127.691 24.5068 128.519 24.5068C129.933 24.5068 131.784 25.0791 133.305 26.3154C134.908 27.6179 136.159 29.6733 136.159 32.5083V35.4278Z`,fill:`white`}),(0,D.jsx)(`path`,{d:`M7.15661 62.0292C7.15661 58.409 6.17994 47.6748 5.87291 44.1323C5.6654 41.7374 5.95357 40.4247 6.33875 39.7542C6.62116 39.2626 7.06336 38.915 8.12834 38.8436C8.89759 38.7921 9.73544 39.0114 10.3616 39.5761C10.9484 40.1052 11.6032 41.1682 11.6032 43.3176L11.6074 43.4388L12.5644 59.758C12.5988 60.3451 12.8798 60.8911 13.338 61.2599C13.7961 61.6284 14.3887 61.7859 14.9695 61.6941L24.9988 60.1068L35.8143 58.6703C36.8135 58.5376 37.5741 57.7084 37.6208 56.7016L38.2015 44.1323C38.2279 43.621 38.2525 43.1141 38.2784 42.6146C38.5218 37.9294 38.7401 33.7805 38.7401 32.4282C38.7401 28.3859 39.4246 26.6806 40.0227 25.9634C40.4996 25.3915 41.185 25.1402 42.6523 25.1402C43.1794 25.1402 43.5505 25.2481 43.8295 25.4111C44.1038 25.5714 44.416 25.8587 44.7138 26.4208C45.3521 27.6257 45.8173 29.891 45.6444 33.8479C45.4201 38.9804 45.0703 42.8146 44.7275 46.2718C44.3853 49.7231 44.0443 52.8561 43.8548 56.4971C43.5582 62.1966 43.5847 66.1256 43.8179 68.7924C43.9344 70.124 44.1069 71.1996 44.3396 72.0501C44.5601 72.8558 44.891 73.6757 45.4663 74.2887C46.1625 75.0303 47.1546 75.3844 48.1855 75.136C49.0033 74.9389 49.5778 74.4215 49.8918 74.0916C50.5484 73.4017 51.0123 72.5106 51.1945 72.0512C52.2527 69.3812 55.5272 63.1808 59.9601 59.6811C61.2536 58.6599 62.1958 58.3652 62.7889 58.3204C63.3476 58.2783 63.753 58.4436 64.0715 58.6967C64.4225 58.9756 64.6844 59.3811 64.8146 59.7643C64.8606 59.8999 64.8801 59.9968 64.8883 60.0584C63.6866 62.0865 58.9204 69.5222 56.6729 77.069C54.9977 82.6941 50.9586 88.4259 47.9431 90.8809C45.0229 93.258 39.7747 94.7313 33.8624 95.0218C28.0068 95.3095 21.9748 94.4121 17.7297 92.5092C9.52988 88.8334 7.85961 80.7382 7.11129 77.2292C6.53054 74.5057 6.5195 71.5987 6.67496 68.9009C6.75251 67.5551 6.86809 66.2969 6.96901 65.1373C7.06707 64.0105 7.1566 62.9215 7.15661 62.0292ZM26.7768 27.0953C26.7768 25.8314 27.1147 24.7049 27.6737 23.9514C28.1792 23.27 28.9221 22.7987 30.1167 22.7984C31.0942 22.7982 31.7518 22.9187 32.2162 23.1167C32.6326 23.2943 32.9817 23.5699 33.2996 24.0831C34.0328 25.2671 34.5705 27.6455 34.5738 32.384L34.0416 43.9088C33.8524 47.5661 33.6565 51.4922 33.5273 54.7707L26.7768 55.6666V27.0953ZM22.6095 56.2652L16.5904 57.218L15.7705 43.267V32.5083C15.7705 31.031 16.3726 30.1275 17.0847 29.5489C17.8785 28.9039 18.8058 28.6731 19.2432 28.6731C20.0404 28.6731 20.8634 28.797 21.4565 29.2179C21.9131 29.5421 22.6095 30.3087 22.6095 32.5083V56.2652ZM11.6032 35.4278C10.3568 34.8069 9.02265 34.6083 7.8501 34.6868C5.72541 34.8292 3.85197 35.718 2.72584 37.6779C1.70247 39.4592 1.48924 41.8136 1.72143 44.4927C2.0423 48.1949 2.99038 58.6457 2.99038 62.0292C2.99037 62.708 2.91991 63.6116 2.81859 64.7758C2.72014 65.907 2.59699 67.2389 2.51505 68.6606C2.3515 71.4987 2.34041 74.8383 3.0357 78.0987C3.76005 81.4953 5.72154 91.6918 16.0245 96.3108C21.0311 98.5551 27.7601 99.4936 34.0669 99.1838C40.3172 98.8767 46.6346 97.3189 50.5737 94.1122C54.2816 91.0937 58.7686 84.6307 60.6662 78.2589C62.8095 71.0619 67.4515 63.9646 68.6098 61.9533C69.2919 60.7689 69.0785 59.3628 68.7605 58.4258C68.4018 57.3688 67.707 56.2631 66.6632 55.4337C65.5867 54.5784 64.1582 54.0377 62.4748 54.1647C60.8256 54.2893 59.1162 55.0393 57.379 56.4107C52.9083 59.9401 49.6283 65.5082 48.02 68.9231C48.0034 68.7664 47.9835 68.6024 47.9684 68.4298C47.7597 66.0435 47.7232 62.3344 48.0158 56.7132C48.1989 53.1942 48.5269 50.1809 48.8737 46.6828C49.22 43.1904 49.5784 39.2713 49.8075 34.0302C49.9903 29.8481 49.5612 26.6722 48.3952 24.471C47.7909 23.3302 46.9729 22.4223 45.9321 21.814C44.8964 21.2087 43.7676 20.974 42.6523 20.974C41.0038 20.974 38.9497 21.2062 37.3141 22.7678C37.1698 22.4576 37.0124 22.1652 36.8419 21.8899C36.0863 20.6698 35.0817 19.8084 33.8508 19.2835C32.6679 18.7791 31.3849 18.6309 30.1167 18.6311C27.5677 18.6315 25.5986 19.7567 24.3285 21.4683C23.5066 22.576 23.0121 23.8775 22.7771 25.1982C21.4247 24.5876 20.0718 24.5068 19.2432 24.5068C17.8298 24.5068 15.9788 25.0791 14.4573 26.3154C12.8542 27.6179 11.6032 29.6733 11.6032 32.5083V35.4278Z`,fill:`white`})]}),I=e=>(0,D.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,D.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M15.3235 10.9352L11.5016 14.2111L7.67969 10.9352L8.6152 9.84375L11.5016 12.3178L14.388 9.84375L15.3235 10.9352Z`,fill:`currentColor`})});function L({isConnected:e,className:t}){let n,r,i;return e===`unavailable`?(n=`bg-[var(--oh-text-tertiary)]`,r=`No Backend Available`,i=`unavailable`):e===!0?(n=`bg-[var(--oh-status-success)]`,r=`Connected`,i=`connected`):e===!1?(n=`bg-red-500`,r=`Disconnected`,i=`disconnected`):(n=`bg-[var(--oh-interactive-selected)]`,r=`Checking connection`,i=`checking`),(0,D.jsx)(`span`,{"data-testid":`backend-status-dot`,"data-status":i,"aria-label":r,title:r,role:`status`,className:c(`inline-block w-2 h-2 rounded-full shrink-0`,n,t)})}var R=class extends Error{constructor(e,t){super(e),this.code=t,this.name=`DeviceFlowError`}},z=6e5,ee=3e4;async function B(e,t,n,r,i,a){let o=r===void 0?void 0:typeof r==`string`||r instanceof Blob||r instanceof FormData||r instanceof URLSearchParams?r:JSON.stringify(r);return await fetch(`${e.replace(/\/+$/,``)}${n}`,{method:t,headers:{...i?{"Content-Type":i}:{}},body:o,signal:a})}async function V(e){let t=e.replace(/\/+$/,``);try{let e=await B(t,`POST`,`/oauth/device/authorize`,{},`application/json`);if(!e.ok)throw new R(`Failed to start device flow: Server returned ${e.status}`);let n=await e.json();if(!n.device_code||!n.user_code||!n.verification_uri)throw new R(`Invalid response from device authorization endpoint: missing required fields`);let r=n.verification_uri_complete??`${n.verification_uri}?user_code=${encodeURIComponent(n.user_code)}`;return{device_code:n.device_code,user_code:n.user_code,verification_uri:n.verification_uri,verification_uri_complete:r,expires_in:n.expires_in??600,interval:n.interval??5}}catch(e){throw e instanceof R?e:new R(`Failed to start device flow: ${e instanceof Error?e.message:String(e)}`)}}async function te(e,t,n){let r=e.replace(/\/+$/,``),i=n.timeout??z,a=Math.max(1,n.interval)*1e3,o=Date.now();for(;Date.now()-o<i;){if(n.signal?.aborted)throw new R(`Authorization cancelled`,`cancelled`);try{let e=await B(r,`POST`,`/oauth/device/token`,new URLSearchParams({grant_type:`urn:ietf:params:oauth:grant-type:device_code`,device_code:t}).toString(),`application/x-www-form-urlencoded`,n.signal);if(e.ok){let t=await e.json();if(!t.access_token)throw new R(`Invalid token response: missing access_token`);return{access_token:t.access_token,token_type:t.token_type??`Bearer`,expires_in:t.expires_in}}let i;try{i=await e.json()}catch{throw new R(`Unexpected response from server: ${e.status}`)}let{error:o,error_description:s}=i;switch(o){case`authorization_pending`:break;case`slow_down`:a=typeof i.interval==`number`&&isFinite(i.interval)&&i.interval>0?Math.max(1,Math.min(i.interval,30))*1e3:Math.min(a+5e3,ee);break;case`expired_token`:throw new R(`Device code has expired. Please try again.`,`expired_token`);case`access_denied`:throw new R(`Authorization request was denied.`,`access_denied`);default:throw new R(`Authorization error: ${o}${s?` - ${s}`:``}`,o)}}catch(e){if(e instanceof R)throw e;if(e instanceof DOMException&&e.name===`AbortError`)throw new R(`Authorization cancelled`,`cancelled`);console.warn(`Network error during polling, retrying:`,e)}try{await ne(a,n.signal)}catch(e){throw e instanceof DOMException&&e.name===`AbortError`?new R(`Authorization cancelled`,`cancelled`):e}}throw new R(`Timeout waiting for authorization. Please try again.`,`timeout`)}function ne(e,t){return new Promise((n,r)=>{if(t?.aborted){r(new DOMException(`Aborted`,`AbortError`));return}let i=setTimeout(n,e);t?.addEventListener(`abort`,()=>{clearTimeout(i),r(new DOMException(`Aborted`,`AbortError`))},{once:!0})})}var H={status:`idle`,verificationUrl:null,userCode:null,apiKey:null,error:null,errorCode:null};function re(){let[e,t]=O.useState(H),n=O.useRef(null),r=O.useCallback(e=>{n.current?.abort();let r=new AbortController;n.current=r,t({...H,status:`starting`}),(async()=>{let n;try{n=await V(e)}catch(e){if(r.signal.aborted)return;let n=e instanceof Error?e.message:`Failed to start device flow`,i=e instanceof R?e.code:void 0;t({...H,status:`error`,error:n,errorCode:i??null});return}if(!r.signal.aborted){t({...H,status:`awaiting_authorization`,verificationUrl:n.verification_uri_complete,userCode:n.user_code});try{let i=await te(e,n.device_code,{interval:n.interval,signal:r.signal});if(r.signal.aborted)return;t({...H,status:`success`,apiKey:i.access_token})}catch(e){if(r.signal.aborted)return;if(e instanceof R&&e.code===`cancelled`){t(H);return}let n=e instanceof Error?e.message:`Authorization failed`,i=e instanceof R?e.code:void 0;t({...H,status:`error`,error:n,errorCode:i??null})}}})()},[]),i=O.useCallback(()=>{n.current?.abort(),n.current=null,t(H)},[]),a=O.useCallback(()=>{n.current?.abort(),n.current=null,t(H)},[]);return O.useEffect(()=>()=>{n.current?.abort()},[]),{...e,start:r,cancel:i,reset:a}}function U(e){try{return new URL(e).protocol===`https:`}catch{return!1}}function ie({host:e,onSuccess:t,testIdRoot:n,isDisabled:r=!1}){let{t:i}=s(`openhands`),a=re(),c=O.useRef(null);O.useEffect(()=>()=>{c.current?.close()},[]),O.useEffect(()=>{if(a.status===`awaiting_authorization`&&a.verificationUrl&&c.current&&!c.current.closed){if(!U(a.verificationUrl)){console.error(`Invalid verification URL protocol`);return}try{c.current.location.href=a.verificationUrl}catch{c.current=window.open(a.verificationUrl,`_blank`,`noopener,noreferrer`)}}},[a.status,a.verificationUrl]),O.useEffect(()=>{if(a.status===`success`&&a.apiKey)try{t(a.apiKey)}finally{a.reset(),c.current?.close()}},[a.status,a.apiKey,a.reset,t]);let l=()=>{let t=e.trim().replace(/\/+$/,``),n=/^https?:\/\//i.test(t)?t:`https://${t}`;try{let e=new URL(n);if(e.username||e.password)throw Error(`Invalid URL format`)}catch{return}c.current=window.open(`about:blank`,`_blank`),c.current||console.warn(`Popup blocked - user will need to use manual link`),a.start(n)};return(0,D.jsxs)(`div`,{"data-testid":`${n}-device-flow`,className:`flex flex-col gap-3`,children:[a.status===`idle`&&(0,D.jsx)(C,{type:`button`,variant:`primary`,onClick:l,testId:`${n}-login-button`,className:`w-full`,isDisabled:r,children:i(o.BACKEND$LOGIN_WITH_OPENHANDS)}),a.status===`starting`&&(0,D.jsxs)(`div`,{className:`flex items-center gap-2 p-3 bg-base-tertiary rounded-lg`,"data-testid":`${n}-auth-starting`,role:`status`,"aria-live":`polite`,children:[(0,D.jsx)(W,{}),(0,D.jsx)(`span`,{className:`text-sm text-[var(--oh-text-tertiary)]`,children:i(o.BACKEND$AUTH_STARTING)})]}),a.status===`awaiting_authorization`&&(0,D.jsxs)(`div`,{className:`flex flex-col gap-3 p-4 bg-base-tertiary rounded-lg`,"data-testid":`${n}-auth-awaiting`,role:`status`,"aria-live":`polite`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(W,{}),(0,D.jsx)(`span`,{className:`text-sm font-medium text-white`,children:i(o.BACKEND$AUTH_AWAITING)})]}),(0,D.jsx)(`p`,{className:`text-sm text-[var(--oh-text-tertiary)]`,children:i(o.BACKEND$AUTH_BROWSER_OPENED)}),a.verificationUrl&&U(a.verificationUrl)&&(0,D.jsxs)(`div`,{className:`text-xs text-[var(--oh-muted)]`,children:[(0,D.jsx)(`p`,{children:i(o.BACKEND$AUTH_OPEN_MANUALLY)}),(0,D.jsx)(`a`,{href:a.verificationUrl,target:`_blank`,rel:`noopener noreferrer`,className:`text-blue-400 hover:underline break-all`,children:a.verificationUrl})]}),(0,D.jsx)(C,{type:`button`,variant:`secondary`,onClick:a.cancel,testId:`${n}-auth-cancel`,className:`w-full mt-2`,children:i(o.BACKEND$AUTH_CANCEL)})]}),a.status===`error`&&(0,D.jsxs)(`div`,{className:`flex flex-col gap-3 p-4 bg-red-900/20 border border-red-700 rounded-lg`,"data-testid":`${n}-auth-error`,role:`alert`,children:[(0,D.jsx)(`p`,{className:`text-sm text-red-400`,children:a.error}),(0,D.jsx)(C,{type:`button`,variant:`secondary`,onClick:l,testId:`${n}-auth-retry`,className:`w-full`,children:i(o.BACKEND$AUTH_RETRY)})]})]})}function W(){return(0,D.jsxs)(`svg`,{className:`animate-spin h-4 w-4 text-white`,xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,"aria-hidden":`true`,children:[(0,D.jsx)(`circle`,{className:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,strokeWidth:`4`}),(0,D.jsx)(`path`,{className:`opacity-75`,fill:`currentColor`,d:`M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z`})]})}function G(e){let t=e.trim().toLowerCase();return t.includes(`all-hands.dev`)||t.includes(`openhands.dev`)?`cloud`:`local`}function ae(e){let t=e.toLowerCase().replace(/^\[|\]$/g,``);return!!(t===`localhost`||t===`::1`||t===`::`||t===`0.0.0.0`||/^127\./.test(t)||/^::ffff:127\./i.test(t)||/^10\./.test(t)||/^192\.168\./.test(t)||/^172\.(1[6-9]|2\d|3[01])\./.test(t)||/^fe[89ab][0-9a-f]:/i.test(t)||/^f[cd][0-9a-f]{2}:/i.test(t)||t.endsWith(`.local`)||!t.includes(`.`)&&!t.includes(`:`))}function K(e){let t=e.trim().replace(/\/+$/,``);if(!t)return``;if(/^https?:\/\//i.test(t))return t;let n=t.match(/^\[([^\]]+)\]/);return`${ae(n?n[1]:(t.match(/:/g)??[]).length>1?t:t.split(`:`)[0])?`http`:`https`}://${t}`}function q(e){let t=e.trim();if(!t||/\s/.test(t))return!1;let n=K(t);if(!n)return!1;try{let e=new URL(n);return(e.protocol===`http:`||e.protocol===`https:`)&&e.hostname.length>0}catch{return!1}}var J=`https://app.all-hands.dev`;function Y(e,t){return e(o.BACKEND$CONNECTION_TEST_FAILED,{host:t,interpolation:{escapeValue:!1}})}function oe(e){return e instanceof Error?e.message:typeof e==`string`?e:null}function X(e,t){let n=oe(t);return n?`${e}\n${n}`:e}async function Z(e){e.kind===`local`&&await new g(p({host:e.host,sessionApiKey:e.apiKey||null,timeout:5e3})).getServerInfo()}function se({backend:e,testIdRoot:t}){let{t:r}=s(`openhands`),i=P([e])[e.id],a=i?.isConnected??null,c=i?.disabled===!0,l=i?.consecutiveFailures??0,u=i?.lastError??null,{data:d}=n({queryKey:[`backend-version`,e.host,e.apiKey],queryFn:async()=>(await new g(p({host:e.host,sessionApiKey:e.apiKey||null,timeout:5e3})).getServerInfo()).version??null,retry:!1,staleTime:6e4,enabled:e.kind===`local`&&!c}),f;f=r(a===!0?o.ONBOARDING$BACKEND_STATUS_CONNECTED:a===!1?o.ONBOARDING$BACKEND_STATUS_DISCONNECTED:o.ONBOARDING$BACKEND_STATUS_CHECKING);let m=e.kind===`cloud`?r(o.BACKEND$KIND_CLOUD):r(o.BACKEND$KIND_LOCAL);return(0,D.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,D.jsxs)(`div`,{"data-testid":`${t}-status`,className:`flex items-center gap-3 text-sm`,children:[(0,D.jsx)(L,{isConnected:a}),(0,D.jsx)(`span`,{className:`text-white`,"data-testid":`${t}-status-label`,children:f}),(0,D.jsx)(`span`,{className:`text-tertiary-alt`,children:`·`}),(0,D.jsx)(`span`,{className:`text-[var(--oh-text-tertiary)]`,children:m}),d?(0,D.jsx)(`span`,{className:`text-xs text-[var(--oh-muted)]`,"data-testid":`${t}-version`,children:r(o.BACKEND$VERSION_LABEL,{version:d})}):null]}),c?(0,D.jsxs)(`div`,{"data-testid":`${t}-status-error`,className:`flex flex-col gap-1 rounded-md border border-red-500/40 bg-red-500/10 p-3 text-sm`,children:[(0,D.jsx)(`span`,{className:`font-semibold text-red-300`,children:r(o.BACKEND$HEALTH_FAILED_TITLE)}),(0,D.jsx)(`span`,{className:`text-xs text-[var(--oh-text-tertiary)]`,children:r(o.BACKEND$HEALTH_FAILED_DETAIL,{count:l})}),u?(0,D.jsx)(`span`,{"data-testid":`${t}-status-error-message`,className:`text-xs text-red-300 whitespace-pre-wrap break-words`,children:u}):null]}):null]})}function Q({mode:e,backend:t,onSubmitted:n,renderActions:r,testIdRoot:i,hostReadOnly:a,requireApiKey:l,hideConfigurationFields:u=!1,onSubmitOverride:d}){let{t:f}=s(`openhands`),{addBackend:p,updateBackend:m}=h(),[g,_]=O.useState(t?.name??``),[v,y]=O.useState(t?.host??``),[b,x]=O.useState(t?.apiKey??``),[S,w]=O.useState(null),[T,k]=O.useState(!1),[A,j]=O.useState(!1),[M,N]=O.useState(!1),P=G(v),F=i??(e===`edit`?`edit-backend`:`add-backend`),I=l||P!==`local`,L=g.trim().length>0&&q(v)&&(!I||b.trim().length>0),R=A&&!g.trim()?f(o.BACKEND$NAME_REQUIRED):void 0,z=M?v.trim()?q(v)?void 0:f(o.BACKEND$HOST_INVALID):f(o.BACKEND$HOST_REQUIRED):void 0;return(0,D.jsxs)(`form`,{"data-testid":`${F}-form`,onSubmit:async r=>{if(r.preventDefault(),T)return;if(!L){j(!0),N(!0);return}let i={name:g.trim(),host:K(v),apiKey:b.trim(),kind:P};w(null),k(!0);try{if(d){await d(i);return}await Z(i),e===`edit`&&t?m(t.id,i):p(i),n()}catch(e){w(X(Y(f,i.host),e))}finally{k(!1)}},className:`flex flex-col gap-4`,children:[(0,D.jsxs)(`div`,{"data-testid":`${F}-configuration-fields`,className:c(`flex flex-col gap-4`,u&&`hidden`),children:[(0,D.jsx)(E,{testId:`${F}-name`,name:`${F}-name`,type:`text`,label:f(o.BACKEND$NAME_LABEL),value:g,onChange:e=>{_(e),w(null)},onBlur:()=>j(!0),placeholder:`Production`,className:`w-full`,showRequiredTag:!0,error:R}),(0,D.jsx)(E,{testId:`${F}-host`,name:`${F}-host`,type:`text`,label:f(o.BACKEND$HOST_LABEL),value:v,onChange:a?void 0:e=>{y(e),w(null)},onBlur:()=>N(!0),placeholder:J,className:`w-full`,showRequiredTag:!0,error:z,isDisabled:a}),(0,D.jsx)(E,{testId:`${F}-api-key`,name:`${F}-api-key`,type:`password`,label:f(o.BACKEND$KEY_LABEL),value:b,onChange:e=>{x(e),w(null)},placeholder:``,className:`w-full`}),S?(0,D.jsx)(`div`,{role:`alert`,"data-testid":`${F}-error`,className:`rounded-md border border-red-500/40 bg-red-500/10 p-3 text-sm text-red-300 whitespace-pre-wrap break-words`,children:S}):null,e===`edit`&&t&&(0,D.jsx)(se,{backend:t,testIdRoot:F})]}),r?r({canSubmit:L&&!T,isSubmitting:T,testIdRoot:F}):(0,D.jsxs)(`div`,{className:`flex justify-end gap-2 mt-2 w-full`,children:[(0,D.jsx)(C,{type:`button`,variant:`secondary`,onClick:n,testId:`${F}-cancel`,children:f(o.BUTTON$CANCEL)}),(0,D.jsx)(C,{type:`submit`,variant:`primary`,isDisabled:!L||T,testId:`${F}-submit`,children:f(o.BACKEND$SAVE)})]})]})}function $(){let{currentPath:e,navigate:t}=w();return O.useCallback(()=>{/^\/automations\/[^/]+/.test(e)?t(`/automations`):/^\/conversations\/[^/]+/.test(e)&&t(`/conversations`)},[e,t])}function ce({onClose:e}){let{t}=s(`openhands`),{addBackend:n}=h(),r=$(),[i,a]=O.useState(``),[c,l]=O.useState(``),[u,d]=O.useState(``),[f,p]=O.useState(null),[m,g]=O.useState(!1),_=G(c),v=i.trim().length>0&&q(c)&&(_===`local`||u.trim().length>0);return(0,D.jsxs)(`form`,{"data-testid":`add-backend-form`,onSubmit:async a=>{if(a.preventDefault(),!v||m)return;let o={name:i.trim(),host:K(c),apiKey:u.trim(),kind:_};p(null),g(!0);try{await Z(o),n(o),r(),e()}catch(e){p(X(Y(t,o.host),e))}finally{g(!1)}},className:`flex flex-col gap-4 flex-1 min-w-0`,children:[(0,D.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,D.jsx)(E,{testId:`add-backend-name`,name:`add-backend-name`,type:`text`,label:t(o.BACKEND$NAME_LABEL),value:i,onChange:e=>{a(e),p(null)},placeholder:`e.g. My Server`,className:`w-full`}),(0,D.jsx)(`p`,{className:`text-xs text-[var(--oh-muted)]`,children:t(o.BACKEND$NAME_HELPER)})]}),(0,D.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,D.jsx)(E,{testId:`add-backend-host`,name:`add-backend-host`,type:`text`,label:t(o.BACKEND$HOST_LABEL),value:c,onChange:e=>{l(e),p(null)},placeholder:`http://localhost:8000`,className:`w-full`}),(0,D.jsx)(`p`,{className:`text-xs text-[var(--oh-muted)]`,"data-testid":`add-backend-host-helper`,children:t(o.BACKEND$HOST_HELPER)})]}),(0,D.jsx)(E,{testId:`add-backend-api-key`,name:`add-backend-api-key`,type:`password`,label:t(o.BACKEND$KEY_LABEL),value:u,onChange:e=>{d(e),p(null)},placeholder:`sk-••••••••••`,className:`w-full`}),f?(0,D.jsx)(`div`,{role:`alert`,"data-testid":`add-backend-error`,className:`rounded-md border border-red-500/40 bg-red-500/10 p-3 text-sm text-red-300 whitespace-pre-wrap break-words`,children:f}):null,(0,D.jsx)(C,{type:`submit`,variant:`secondary`,isDisabled:!v||m,testId:`add-backend-submit`,className:`w-full text-center`,children:t(m?o.ONBOARDING$BACKEND_STATUS_CHECKING:o.BACKEND$CONNECT)})]})}function le({onClose:e}){let{t}=s(`openhands`),{addBackend:n}=h(),r=$(),[i,a]=O.useState(!1),[l,u]=O.useState(``),d=l.trim()||J;return(0,D.jsxs)(`div`,{className:`flex flex-1 min-w-0 flex-col items-center gap-3`,children:[(0,D.jsxs)(`div`,{className:`flex flex-col items-center gap-1`,children:[(0,D.jsx)(F,{width:56,height:56,"aria-hidden":!0}),(0,D.jsx)(`h4`,{className:S,"data-testid":`add-backend-cloud-title`,children:t(o.BACKEND$CLOUD_TITLE)})]}),(0,D.jsx)(`p`,{className:`text-center text-sm leading-relaxed text-[var(--oh-muted)]`,children:t(o.BACKEND$CLOUD_DESCRIPTION)}),(0,D.jsx)(ie,{host:d,onSuccess:t=>{n({name:`OpenHands Cloud`,host:K(d),apiKey:t,kind:`cloud`}),r(),e()},testIdRoot:`add-backend`}),(0,D.jsxs)(`div`,{className:`w-full`,children:[(0,D.jsxs)(`button`,{type:`button`,onClick:()=>a(e=>!e),"aria-expanded":i,"data-testid":`add-backend-advanced-toggle`,className:`flex w-full cursor-pointer items-center justify-center gap-1 text-center text-xs text-[var(--oh-muted)] transition-colors hover:text-content-2`,children:[(0,D.jsx)(`span`,{children:t(o.BACKEND$ADVANCED)}),(0,D.jsx)(I,{className:c(`h-4 w-4 shrink-0 text-muted transition-transform`,i&&`rotate-180`),"aria-hidden":!0})]}),(0,D.jsxs)(`div`,{className:c(`pt-2`,!i&&`pointer-events-none invisible`),"aria-hidden":!i,children:[(0,D.jsx)(E,{testId:`add-backend-cloud-host`,name:`add-backend-cloud-host`,type:`text`,label:t(o.BACKEND$HOST_LABEL),value:l,onChange:u,placeholder:J,className:`w-full`}),(0,D.jsx)(`p`,{className:`mt-1 text-xs text-[var(--oh-muted)]`,children:t(o.BACKEND$LOGIN_CLOUD_HINT)})]})]})]})}function ue({mode:e,backend:t,onClose:n}){let{t:r}=s(`openhands`);if(e===`add`)return(0,D.jsx)(v,{onClose:n,closeOnEscape:!1,"aria-label":r(o.BACKEND$ADD_TITLE),children:(0,D.jsxs)(`div`,{"data-testid":`add-backend-modal`,className:c(`relative rounded-xl border border-[var(--oh-border)] bg-base-secondary`,y(`xl`),b),children:[(0,D.jsx)(T,{onClose:n,testId:`add-backend-close`}),(0,D.jsx)(`div`,{className:`px-6 pt-6 pb-2 pr-12`,children:(0,D.jsx)(`h2`,{className:x,children:r(o.BACKEND$ADD_TITLE)})}),(0,D.jsxs)(`div`,{className:`flex gap-6 px-6 pb-6 pt-2`,children:[(0,D.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,D.jsx)(ce,{onClose:n})}),(0,D.jsxs)(`div`,{className:`flex shrink-0 flex-col items-center`,children:[(0,D.jsx)(`div`,{className:`flex-1 w-px bg-[var(--oh-border)]`}),(0,D.jsx)(`span`,{className:`py-3 text-xs uppercase text-[var(--oh-muted)]`,children:r(o.BACKEND$LOGIN_OR)}),(0,D.jsx)(`div`,{className:`flex-1 w-px bg-[var(--oh-border)]`})]}),(0,D.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,D.jsx)(le,{onClose:n})})]})]})});let i=`edit-backend`;return(0,D.jsx)(v,{onClose:n,closeOnEscape:!1,"aria-label":r(o.BACKEND$EDIT_TITLE),children:(0,D.jsxs)(`div`,{"data-testid":`${i}-modal`,className:c(`relative bg-base-secondary p-6 rounded-xl flex flex-col gap-4 border border-[var(--oh-border)]`,y(`md`)),children:[(0,D.jsx)(T,{onClose:n,testId:`${i}-close`}),(0,D.jsx)(`h2`,{className:c(`pr-6`,x),children:r(o.BACKEND$EDIT_TITLE)}),(0,D.jsx)(Q,{mode:`edit`,backend:t,onSubmitted:n,testIdRoot:i})]})})}export{M as a,I as i,ue as n,P as o,L as r,Q as t};
@@ -1 +0,0 @@
1
- import{t as e}from"./react-Dy05vyj5.js";var t={url:``,screenshotSrc:``},n=e(e=>({...t,setUrl:t=>e({url:t}),setScreenshotSrc:t=>e({screenshotSrc:t}),reset:()=>e(t)}));export{n as t};
@@ -1 +0,0 @@
1
- import{a as e}from"./rolldown-runtime-BFRubm34.js";import{t}from"./react-CM_dJw1Z.js";import{t as n}from"./vendor~root~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-s~jaomi49z-Cw89stA6.js";import{a as r,f as i,o as a}from"./path-utils-BjxzIGLp.js";import{t as o}from"./useMutation-DDo48A8t.js";import{o as s,t as c}from"./declaration-DaUdB2Wg.js";import{n as l}from"./QueryClientProvider-w1cZWY41.js";import{t as u}from"./useTranslation-CEcjrme-.js";import{r as d}from"./vendor~root-layout~home~conversation-panel~conversation-DkwcKRtv.js";import{a as f,n as p,t as m}from"./custom-toast-handlers-BohXx7uh.js";import{g as h,i as g,t as _}from"./utils-CdgBzLA7.js";import{t as v}from"./common-DqjLSBOt.js";import{d as y,n as b}from"./agent-server-client-options-9agOSarV.js";import{n as x}from"./active-backend-context-I2w666XY.js";import{r as S}from"./vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~dp08i1qy-D8soyAAx.js";import{t as C}from"./agent-server-conversation-service.api-Cagoqq1V.js";import{n as ee}from"./navigation-context-aNGUUtdq.js";import{t as te}from"./dist-xtCm0O6P.js";import{t as w}from"./proxy-sRh0WKI7.js";import{t as T}from"./react-Dy05vyj5.js";import{r as ne,t as E}from"./middleware-CfatjPYZ.js";import{t as re}from"./conversation-local-storage-YmOVXxxW.js";import{t as D}from"./use-is-authed-hHndEep7.js";import{r as ie}from"./use-settings-BPTbE7lg.js";import{t as ae}from"./use-tracking-DQYdZpxi.js";import{o as oe,s as se,t as O}from"./vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-CcFtthyg.js";import{t as k}from"./git-status-mapper-DnL9OC8_.js";var A=s(),j=te(`shrink-0 self-stretch min-w-full bg-[var(--oh-border)]`,{variants:{orientation:{horizontal:`h-[1px]`},color:{light:`bg-[var(--oh-border)]`},size:{thin:`h-[1px]`},inset:{none:``,menu:``}},defaultVariants:{orientation:`horizontal`,color:`light`,size:`thin`,inset:`none`}});function M({orientation:e,color:t,size:n,inset:r,className:i,testId:a}){return r===`menu`?(0,A.jsx)(`div`,{"data-testid":a,role:`separator`,className:_(`relative min-w-full shrink-0 self-stretch`,`h-3`,i),children:(0,A.jsx)(`div`,{"aria-hidden":!0,className:`absolute top-1/2 -left-1 -right-1 h-px -translate-y-1/2 bg-[var(--oh-border)]`})}):(0,A.jsx)(`div`,{"data-testid":a,role:`separator`,className:_(j({orientation:e,color:t,size:n,inset:r}),i)})}var N=()=>{let e=l();return o({mutationFn:e=>C.deleteConversation(e.conversationId),onMutate:async t=>{await e.cancelQueries({queryKey:[`user`,`conversations`]});let n=e.getQueryData([`user`,`conversations`]);return e.setQueryData([`user`,`conversations`],e=>e?.filter(e=>e.conversation_id!==t.conversationId)),{previousConversations:n}},onSuccess:(e,t)=>{re(t.conversationId)},onError:(t,n,r)=>{r?.previousConversations&&e.setQueryData([`user`,`conversations`],r.previousConversations)},onSettled:()=>{e.invalidateQueries({queryKey:[`user`,`conversations`]}),e.invalidateQueries({queryKey:[`start-tasks`]})}})},P=()=>{let{t:e}=u(`openhands`),t=l(),{conversationId:n,navigate:i}=ee();return o({mutationKey:[`stop-conversation`],mutationFn:async e=>a(e.conversationId),onMutate:async()=>{let n=f.loading(e(c.TOAST$STOPPING_CONVERSATION),m);return await t.cancelQueries({queryKey:[`user`,`conversations`]}),{previousConversations:t.getQueryData([`user`,`conversations`]),toastId:n}},onError:(n,r,i)=>{i?.toastId&&f.dismiss(i.toastId),p(e(c.TOAST$FAILED_TO_STOP_CONVERSATION)),i?.previousConversations&&t.setQueryData([`user`,`conversations`],i.previousConversations)},onSuccess:(a,o,s)=>{s?.toastId&&f.dismiss(s.toastId),f.success(e(c.TOAST$CONVERSATION_STOPPED),m),r(t,o.conversationId,{execution_status:v.PAUSED,sandbox_status:`PAUSED`}),n===o.conversationId&&i(`/conversations`)}})},F=e(t()),I=e=>(0,A.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,A.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M22.1595 5.22752L20.9895 4.95152L17.8275 8.09552L16.0365 6.27152L19.1205 3.03602L18.8505 1.84802C18.1988 1.62999 17.5172 1.51461 16.83 1.50602C16.0804 1.49449 15.3365 1.63746 14.6445 1.92602C13.9764 2.22843 13.3725 2.65616 12.8655 3.18602C12.3011 3.72063 11.8542 4.36683 11.553 5.08352C10.9732 6.50984 10.9732 8.10619 11.553 9.53252C8.42587 12.609 5.3391 15.7263 2.29351 18.8835C1.97851 19.296 1.82851 19.8105 1.86751 20.328C1.89825 20.8846 2.14856 21.4063 2.56351 21.7785C2.74951 21.981 2.97151 22.149 3.21901 22.2705C3.47401 22.383 3.74851 22.4475 4.02601 22.461C4.50001 22.452 4.95451 22.272 5.30701 21.9555C7.62901 19.77 12.078 15.2805 14.6055 12.6495C15.291 12.9405 16.0275 13.0905 16.7715 13.089C17.5204 13.0884 18.2616 12.9377 18.9513 12.6458C19.641 12.3539 20.2652 11.9267 20.787 11.3895C21.8588 10.2964 22.4575 8.82543 22.4535 7.29452C22.4708 6.59398 22.3715 5.89544 22.1595 5.22752ZM4.39951 20.892C4.34178 20.9433 4.27218 20.9794 4.19701 20.997C4.12306 21.0098 4.04746 21.0098 3.97351 20.997C3.89598 20.9852 3.82213 20.956 3.75751 20.9115C3.68817 20.8709 3.62955 20.8144 3.58651 20.7465C3.37651 20.532 3.18001 20.124 3.37651 19.8945C5.43151 17.709 9.66301 13.437 12.309 10.8255C12.459 11.0235 12.624 11.2125 12.801 11.3895C12.978 11.574 13.1685 11.745 13.371 11.901C10.812 14.526 6.63901 18.747 4.40101 20.892H4.39951ZM21.0765 7.29452C21.0795 8.44202 20.6325 9.54452 19.8285 10.3665C19.0262 11.1536 17.9472 11.5944 16.8233 11.5944C15.6994 11.5944 14.6203 11.1536 13.818 10.3665C13.23 9.75286 12.8283 8.98485 12.6597 8.15183C12.4911 7.31882 12.5624 6.45505 12.8655 5.66102C13.0673 5.12062 13.3802 4.62858 13.784 4.21671C14.1879 3.80485 14.6737 3.48233 15.21 3.27002C15.7192 3.05688 16.266 2.94774 16.818 2.94902H17.199L14.4735 5.75852V6.80252L17.316 9.63152H18.306L21.0765 6.90752V7.29452ZM4.86001 10.032H7.15651L8.21401 11.1075L9.23101 10.0965L8.23351 9.07952V9.01502L8.31901 6.54152L7.98901 5.88602L3.69901 3.06302L2.81251 3.16202L1.56601 4.43552L1.46701 5.33402L4.22401 9.71102L4.86001 10.0335V10.032ZM3.44251 4.58402L6.91351 6.87002L6.85501 8.55452H5.24101L3.00301 5.01152L3.44251 4.58402ZM14.1 15.024L15.111 14.0145L19.77 18.792C20.1624 19.2045 20.3813 19.752 20.3813 20.3213C20.3813 20.8906 20.1624 21.4381 19.77 21.8505C19.4749 22.1535 19.0955 22.3605 18.6811 22.4448C18.2667 22.5291 17.8365 22.4866 17.4465 22.323C17.1976 22.2126 16.9744 22.0517 16.791 21.8505L12.078 17.046L13.0965 16.029L17.7945 20.82C17.8577 20.8897 17.9363 20.9436 18.024 20.9775C18.1967 21.0476 18.3899 21.0476 18.5625 20.9775C18.6502 20.9436 18.7288 20.8897 18.792 20.82C18.8577 20.755 18.9088 20.6768 18.942 20.5905C18.9764 20.5025 18.9947 20.409 18.996 20.3145C18.9945 20.2202 18.9767 20.1268 18.9435 20.0385C18.9103 19.9523 18.8592 19.8741 18.7935 19.809L14.1 15.024Z`,fill:`currentColor`})}),L=e=>(0,A.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,A.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M12 13.0605L17.469 18.531L18.531 17.4705L13.0605 12L18.531 6.53099L17.4705 5.46899L12 10.9395L6.53099 5.46899L5.47049 6.53099L10.9395 12L5.47049 17.469L6.53099 18.531L12 13.0605Z`,fill:`currentColor`})}),R=e=>(0,A.jsx)(`svg`,{height:24,viewBox:`0 0 24 24`,width:24,xmlns:`http://www.w3.org/2000/svg`,...e,children:(0,A.jsx)(`path`,{fill:`currentColor`,d:`m22 18-5 4-8-3v3l-4.19-5.75 12.91 1.05v-10.96l4.28-.69zm-17.19-1.75v-7.29l12.91-2.62-7.12-4.34v2.84l-6.63 1.92-1.97 2.62v5.69z`})}),z=e=>(0,A.jsx)(`svg`,{width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,...e,children:(0,A.jsx)(`path`,{d:`M21.0004 6.00001C21.0016 5.43668 20.8441 4.88442 20.5459 4.40644C20.2478 3.92846 19.8212 3.54406 19.3148 3.29726C18.8084 3.05046 18.2428 2.95122 17.6826 3.0109C17.1224 3.07059 16.5904 3.28678 16.1474 3.63473C15.7044 3.98269 15.3683 4.44835 15.1776 4.97841C14.9869 5.50848 14.9493 6.08152 15.0691 6.63197C15.1888 7.18241 15.4612 7.688 15.8549 8.09088C16.2487 8.49375 16.7479 8.77762 17.2954 8.91001V10.5C17.2978 10.6372 17.261 10.7722 17.1892 10.8891C17.1175 11.006 17.0138 11.1 16.8904 11.16L12.7354 13.32L8.59544 11.22C8.46356 11.1544 8.35443 11.0507 8.28221 10.9223C8.21 10.7939 8.17802 10.6468 8.19044 10.5V8.91001C8.89743 8.72746 9.51358 8.29333 9.92339 7.689C10.3332 7.08467 10.5085 6.35161 10.4165 5.62725C10.3245 4.90289 9.97149 4.23695 9.42361 3.75426C8.87573 3.27157 8.17062 3.00527 7.44044 3.00527C6.71026 3.00527 6.00514 3.27157 5.45726 3.75426C4.90938 4.23695 4.55635 4.90289 4.46435 5.62725C4.37234 6.35161 4.54768 7.08467 4.95749 7.689C5.36729 8.29333 5.98344 8.72746 6.69044 8.91001V10.5C6.6913 10.9156 6.80651 11.323 7.02346 11.6776C7.24041 12.0321 7.55073 12.3201 7.92044 12.51L12.0004 14.61V16.59C11.2934 16.7726 10.6773 17.2067 10.2675 17.811C9.85768 18.4153 9.68234 19.1484 9.77435 19.8728C9.86635 20.5971 10.2194 21.2631 10.7673 21.7457C11.3151 22.2284 12.0203 22.4947 12.7504 22.4947C13.4806 22.4947 14.1857 22.2284 14.7336 21.7457C15.2815 21.2631 15.6345 20.5971 15.7265 19.8728C15.8185 19.1484 15.6432 18.4153 15.2334 17.811C14.8236 17.2067 14.2074 16.7726 13.5004 16.59V14.61L17.5504 12.57C17.9317 12.3784 18.2501 12.0816 18.468 11.7148C18.686 11.348 18.7944 10.9265 18.7804 10.5V8.88001C19.4147 8.70922 19.9755 8.33496 20.3765 7.81469C20.7776 7.29442 20.9967 6.6569 21.0004 6.00001ZM6.00044 6.00001C6.00044 5.60218 6.15847 5.22065 6.43978 4.93934C6.72108 4.65804 7.10261 4.5 7.50044 4.5C7.89826 4.5 8.27979 4.65804 8.5611 4.93934C8.8424 5.22065 9.00044 5.60218 9.00044 6.00001C9.00044 6.39783 8.8424 6.77936 8.5611 7.06067C8.27979 7.34197 7.89826 7.50001 7.50044 7.50001C7.10261 7.50001 6.72108 7.34197 6.43978 7.06067C6.15847 6.77936 6.00044 6.39783 6.00044 6.00001ZM14.2054 19.5C14.2054 19.8978 14.0474 20.2794 13.7661 20.5607C13.4848 20.842 13.1033 21 12.7054 21C12.3076 21 11.9261 20.842 11.6448 20.5607C11.3635 20.2794 11.2054 19.8978 11.2054 19.5C11.2054 19.1022 11.3635 18.7207 11.6448 18.4393C11.9261 18.158 12.3076 18 12.7054 18C13.1033 18 13.4848 18.158 13.7661 18.4393C14.0474 18.7207 14.2054 19.1022 14.2054 19.5ZM18.0004 7.50001C17.6026 7.50001 17.2211 7.34197 16.9398 7.06067C16.6585 6.77936 16.5004 6.39783 16.5004 6.00001C16.5004 5.60218 16.6585 5.22065 16.9398 4.93934C17.2211 4.65804 17.6026 4.5 18.0004 4.5C18.3983 4.5 18.7798 4.65804 19.0611 4.93934C19.3424 5.22065 19.5004 5.60218 19.5004 6.00001C19.5004 6.39783 19.3424 6.77936 19.0611 7.06067C18.7798 7.34197 18.3983 7.50001 18.0004 7.50001Z`,fill:`currentColor`})}),B=e=>(0,A.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,A.jsx)(`path`,{d:`M12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4ZM2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12ZM7.79289 7.79289C8.18342 7.40237 8.81658 7.40237 9.20711 7.79289L12 10.5858L14.7929 7.79289C15.1834 7.40237 15.8166 7.40237 16.2071 7.79289C16.5976 8.18342 16.5976 8.81658 16.2071 9.20711L13.4142 12L16.2071 14.7929C16.5976 15.1834 16.5976 15.8166 16.2071 16.2071C15.8166 16.5976 15.1834 16.5976 14.7929 16.2071L12 13.4142L9.20711 16.2071C8.81658 16.5976 8.18342 16.5976 7.79289 16.2071C7.40237 15.8166 7.40237 15.1834 7.79289 14.7929L10.5858 12L7.79289 9.20711C7.40237 8.81658 7.40237 8.18342 7.79289 7.79289Z`,fill:`currentColor`})}),V=()=>{let{trackDownloadTrajectoryButtonClicked:e}=ae(),{t}=u(`openhands`);return o({mutationKey:[`conversations`,`download`],mutationFn:async t=>{e(),g(await C.downloadConversation(t),`conversation_${t}.zip`)},onError:()=>{p(t(c.CONVERSATION$DOWNLOAD_ERROR))}})},H=e=>(0,A.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,A.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M21 15V2.25L20.25 1.5H5.60999C5.26596 1.50381 4.92547 1.56987 4.60499 1.695C4.28194 1.83856 3.99081 2.0452 3.74868 2.30278C3.50656 2.56036 3.31831 2.8637 3.19499 3.195C3.07229 3.49004 3.00614 3.80552 2.99999 4.125V18.375C2.99638 18.7197 3.06272 19.0616 3.19499 19.38C3.46049 20.0205 3.96749 20.532 4.60499 20.805C4.92547 20.9301 5.26596 20.9962 5.60999 21H5.99999V19.5H5.60999C5.46032 19.5005 5.31218 19.4698 5.17499 19.41C4.90342 19.2974 4.68763 19.0816 4.57499 18.81C4.52706 18.6699 4.50174 18.5231 4.49999 18.375V17.625C4.50174 17.4769 4.52706 17.3301 4.57499 17.19C4.68763 16.9184 4.90342 16.7026 5.17499 16.59C5.31033 16.531 5.45634 16.5004 5.60399 16.5H19.5V19.5H13.5V21H20.25L21 20.25V15ZM5.99999 15V3H19.5V15H5.99999ZM7.49999 4.5H8.99999V6H7.49999V4.5ZM7.49999 7.5H8.99999V9H7.49999V7.5ZM8.99999 10.5H7.49999V12H8.99999V10.5ZM9.74999 20.235L7.91999 22.5H7.49999V18H12V22.5H11.58L9.74999 20.235Z`,fill:`currentColor`})}),U=e=>{if(!e)return[];let t=[];for(let n of Object.keys(e))n&&t.push(n);return t},W=()=>{let{data:e,isLoading:t}=ie();return{providers:F.useMemo(()=>U(e?.provider_tokens_set),[e?.provider_tokens_set]),isLoadingSettings:t}};function G(){let e=y().backend;if(e.kind!==`cloud`)throw Error(`Cloud git call requires a cloud backend.`);return e}async function K(e){let t=G(),n=new URLSearchParams;n.set(`provider`,e.provider),n.set(`limit`,String(e.limit??100)),e.query&&n.set(`query`,e.query),e.pageId&&n.set(`page_id`,e.pageId),e.installationId&&n.set(`installation_id`,e.installationId);let r=await w({backend:t,method:`GET`,path:`/api/v1/git/repositories/search?${n.toString()}`});return{items:r?.items??[],next_page_id:r?.next_page_id??null}}async function ce(e){let t=G(),n=new URLSearchParams;n.set(`provider`,e.provider),n.set(`limit`,String(e.limit??100)),e.pageId&&n.set(`page_id`,e.pageId);let r=await w({backend:t,method:`GET`,path:`/api/v1/git/installations/search?${n.toString()}`});return{items:r?.items??[],next_page_id:r?.next_page_id??null}}async function q(e){let t=G(),n=new URLSearchParams;n.set(`provider`,e.provider),n.set(`repository`,e.repository),n.set(`limit`,String(e.limit??30)),n.set(`query`,e.query??``),e.pageId&&n.set(`page_id`,e.pageId);let r=await w({backend:t,method:`GET`,path:`/api/v1/git/branches/search?${n.toString()}`});return{items:r?.items??[],next_page_id:r?.next_page_id??null}}var J=e=>e,Y=()=>y().backend.kind===`cloud`,X=e=>!e||e===`undefined`||e===`null`,Z={items:[],next_page_id:null},Q={items:[],next_page_id:null},le={items:[],next_page_id:null},$=class{static async searchGitRepositories(e,t,n=100,r,i){return X(t)||!Y()?Z:K({provider:J(t),query:e||void 0,limit:n,pageId:r,installationId:i})}static async retrieveUserGitRepositories(e,t,n=30,r){return X(e)||!Y()?Z:K({provider:J(e),limit:n,pageId:t,installationId:r})}static async retrieveInstallationRepositories(e,t,n,r,i=30){if(X(e)||!Y())return Z;let a=n[t];return a?K({provider:J(e),installationId:a,limit:i,pageId:r}):Z}static async getRepositoryBranches(e,t,n=``,r,i=30){return X(t)||!Y()?Q:q({provider:J(t),repository:e,query:n||void 0,pageId:r,limit:i})}static async searchRepositoryBranches(e,t,n,r,i=30){return X(t)||!Y()?Q:q({provider:J(t),repository:e,query:n,pageId:r,limit:i})}static async getUserInstallations(e,t,n=100){return X(e)||!Y()?le:ce({provider:J(e),pageId:t,limit:n})}static async getGitChanges(e){let t=await C.resolveConversationWorkingDir(e);return(await new S(b({workingDir:t})).gitChanges(t,{ref:`HEAD`})).map(e=>({path:e.path,status:k(String(e.status))}))}static async getGitChangeDiff(e,t){let n=await new S(b()).gitDiff(t,{ref:`HEAD`});return{modified:n.modified??``,original:n.original??``}}},ue=e=>{let{data:t}=D(),{providers:r}=W(),i=x();return n({queryKey:[`installations`,e,i.backend.id,i.orgId],queryFn:()=>$.getUserInstallations(e),enabled:t&&!!e&&r.length>0&&h(e,i.backend.kind),staleTime:1e3*60*5,gcTime:1e3*60*15})};function de(e){let{provider:t,pageSize:n=30,enabled:r=!0}=e,{providers:a}=W(),{data:o}=ue(t),s=o?.items,c=x(),l=t?h(t,c.backend.kind):!1,u=i({queryKey:[`repositories`,t,l,n,c.backend.id,c.orgId,...l?[s||[]]:[]],queryFn:async({pageParam:e})=>{if(!t)throw Error(`Provider is required`);if(l){if(!s)throw Error(`Missing installation list`);let r=e;return await $.retrieveInstallationRepositories(t,r.installationIndex,s,r.pageId??void 0,n)}let r=e;return await $.retrieveUserGitRepositories(t,r??void 0,n)},getNextPageParam:(e,t,n)=>{if(l&&s){let t=n;if(e.next_page_id)return{installationIndex:t.installationIndex,pageId:e.next_page_id};let r=t.installationIndex+1;return r<s.length?{installationIndex:r,pageId:null}:void 0}return e.next_page_id},initialPageParam:l?{installationIndex:0,pageId:null}:null,enabled:r&&(a||[]).length>0&&!!t&&(!l||Array.isArray(s)&&s.length>0),staleTime:1e3*60*5,gcTime:1e3*60*15,refetchOnWindowFocus:!1});return{data:u.data,isLoading:u.isLoading,isError:u.isError,hasNextPage:u.hasNextPage,isFetchingNextPage:u.isFetchingNextPage,fetchNextPage:u.fetchNextPage,onLoadMore:()=>{u.hasNextPage&&!u.isFetchingNextPage&&u.fetchNextPage()}}}function fe(e,t,r,i=100){return n({queryKey:[`repositories`,`search`,e,t,i],queryFn:async()=>t?(await $.searchGitRepositories(e,t,i)).items:[],enabled:!!e&&!!t&&!r,staleTime:1e3*60*5,gcTime:1e3*60*15})}function pe(e,t){let[n,r]=(0,F.useState)(e);return(0,F.useEffect)(()=>{let n=setTimeout(()=>r(e),t);return()=>clearTimeout(n)},[e,t]),n}var me={recentRepositories:[],lastSelectedProvider:null},he=T()(ne((e,t)=>({...me,addRecentRepository:t=>e(e=>({recentRepositories:[t,...e.recentRepositories.filter(e=>e.id!==t.id)].slice(0,3)})),clearRecentRepositories:()=>e(()=>({recentRepositories:[]})),getRecentRepositories:()=>t().recentRepositories,setLastSelectedProvider:t=>e(()=>({lastSelectedProvider:t})),getLastSelectedProvider:()=>t().lastSelectedProvider}),{name:`home-store`,storage:E(()=>localStorage)}));function ge({gitProvider:e,className:t}){return(0,A.jsxs)(A.Fragment,{children:[e===`github`&&(0,A.jsx)(oe,{size:14,className:t}),e===`gitlab`&&(0,A.jsx)(se,{size:14,className:t}),e===`bitbucket`&&(0,A.jsx)(O,{size:14,className:t}),e===`bitbucket_data_center`&&(0,A.jsx)(O,{size:14,className:t}),e===`azure_devops`&&(0,A.jsx)(R,{className:_(t,`w-[14px] h-[14px]`)})]})}function _e({buttonClassName:e,handleSubmit:t,disabled:n}){return(0,A.jsx)(`button`,{type:`button`,className:_(`flex items-center justify-center rounded-full border border-white size-8`,n?`cursor-not-allowed border-[var(--oh-muted)]`:`cursor-pointer hover:bg-white/10`,e),"data-name":`arrow-up-circle-fill`,"data-testid":`submit-button`,onClick:t,disabled:n,children:(0,A.jsx)(d,{className:`w-4 h-4`,color:n?`var(--oh-muted)`:`white`})})}export{N as _,fe as a,W as c,B as d,z as f,P as g,I as h,pe as i,H as l,L as m,ge as n,de as o,R as p,he as r,$ as s,_e as t,V as u,M as v};
@@ -1 +0,0 @@
1
- import{t as e}from"./createLucideIcon-Ddu8jDOQ.js";var t=e(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]);export{t};
@@ -1 +0,0 @@
1
- import{t as e}from"./conversation-HgR_TTPE.js";export{e as default};