@openhands/agent-canvas 1.9.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1105) hide show
  1. package/README.md +1 -1
  2. package/README.windows.md +2 -2
  3. package/build/assets/{acp-providers-C921BlYB.js → acp-providers-DLe_gVDY.js} +1 -1
  4. package/build/assets/active-backend-context-B0wI7OzM.js +2 -0
  5. package/build/assets/agent-context-settings-CaQtdNA-.js +1 -0
  6. package/build/assets/{agent-profiles-settings-BymJf3EP.js → agent-profiles-settings-CvuErjp6.js} +1 -1
  7. package/build/assets/agent-server-conversation-service.api-km_8sOVf.js +41 -0
  8. package/build/assets/{agent-settings-WzqXk6B4.js → agent-settings-UE-U4Xii.js} +2 -2
  9. package/build/assets/agent-settings-nmO-KSXr.js +1 -0
  10. package/build/assets/alert-banner-BMaOtTCG.js +1 -0
  11. package/build/assets/{api-key-entry-screen-DI0I04O3.js → api-key-entry-screen-Cy66vT4D.js} +1 -1
  12. package/build/assets/{app-settings-DGistSFV.js → app-settings-9ok42bV6.js} +1 -1
  13. package/build/assets/automation-detail-fuITm6i3.js +3 -0
  14. package/build/assets/automation-export-CRq40mux.js +2 -0
  15. package/build/assets/automation-setup-route-EXDazOHW.js +1 -0
  16. package/build/assets/automation-templates-BArZsaxP.js +1 -0
  17. package/build/assets/automations-list-CG4HKOTn.js +1 -0
  18. package/build/assets/{back-nav-button-D4ngzpSh.js → back-nav-button-BZB6H7xz.js} +1 -1
  19. package/build/assets/{backend-form-modal-B8D5hBzK.js → backend-form-modal-B_lXjOGa.js} +1 -1
  20. package/build/assets/{backend-synced-settings-badge-BnzI8Ysj.js → backend-synced-settings-badge-B_NXJ3u1.js} +1 -1
  21. package/build/assets/{badge-1Mf1iPcX.js → badge-C64c-7PO.js} +1 -1
  22. package/build/assets/{base-modal-BBuy0WQQ.js → base-modal-C0RQPug5.js} +1 -1
  23. package/build/assets/bot-DuN83i3p.js +1 -0
  24. package/build/assets/{brand-button-DGN6Y9o6.js → brand-button-DJmFCyMK.js} +1 -1
  25. package/build/assets/{browser-D_ekTlTS.js → browser-D3gd2n83.js} +2 -2
  26. package/build/assets/{browser-tab-D4a4Ou_w.js → browser-tab-BicAWuJ1.js} +1 -1
  27. package/build/assets/{chat-send-button-CgbcjD97.js → chat-send-button-CCrH1E8u.js} +1 -1
  28. package/build/assets/check-DLOKoFU9.js +1 -0
  29. package/build/assets/{checkmark-CxdXtM3b.js → checkmark-XZyokq_Y.js} +1 -1
  30. package/build/assets/chevron-down-CnIbtM6i.js +1 -0
  31. package/build/assets/circle-check-CxCYJrpZ.js +1 -0
  32. package/build/assets/{circle-plus-check-toggle-yTAS-nX3.js → circle-plus-check-toggle-CB_sNERY.js} +1 -1
  33. package/build/assets/{close-CDAVqnTn.js → close-ScPlnwyq.js} +1 -1
  34. package/build/assets/{cloud-funnel-analytics-CEOl5Gxr.js → cloud-funnel-analytics-XynamQGU.js} +1 -1
  35. package/build/assets/{combobox-caret-Bd2yySnF.js → combobox-caret-Bwiifgjs.js} +1 -1
  36. package/build/assets/command-menu-CA3IjGNc.js +1 -0
  37. package/build/assets/condenser-settings-cNGy75gq.js +1 -0
  38. package/build/assets/{confirmation-modal-NCUPr2-O.js → confirmation-modal-BATFmFyP.js} +1 -1
  39. package/build/assets/context-menu-list-item-DhJCcBA0.js +1 -0
  40. package/build/assets/conversation-B6t6EiVp.js +1 -0
  41. package/build/assets/{conversation-CUJ0Vo8g.js → conversation-Csdxh9Xt.js} +7 -7
  42. package/build/assets/conversation-panel-B6t6EiVp.js +1 -0
  43. package/build/assets/{conversation-state-store-F62HvuI1.js → conversation-state-store-C2QzhPaK.js} +1 -1
  44. package/build/assets/{conversation-store-C6hSXHw0.js → conversation-store-B8Eahyeg.js} +1 -1
  45. package/build/assets/{conversation-tab-empty-state-BCZ7rUMH.js → conversation-tab-empty-state-D3fb5xIA.js} +1 -1
  46. package/build/assets/{copy-DCmZtz6n.js → copy-DaHuDtG4.js} +1 -1
  47. package/build/assets/{copy-z7idLzWO.js → copy-Drmhc2jD.js} +1 -1
  48. package/build/assets/{copy-to-clipboard-button-D_Lp6-Fl.js → copy-to-clipboard-button-c4MQwKGj.js} +1 -1
  49. package/build/assets/{device-verify-DLmolX8Q.js → device-verify-oFpQoLgm.js} +1 -1
  50. package/build/assets/{dist-hOnv1nn2.js → dist-Bl64nBZL.js} +1 -1
  51. package/build/assets/{dropdown-classes-BB8rzqXL.js → dropdown-classes-f91ARMV1.js} +1 -1
  52. package/build/assets/entry.client-BCzY2Bf3.js +2 -0
  53. package/build/assets/enum-filter-dropdown-HG3q3rkV.js +1 -0
  54. package/build/assets/{environment-switch-overlay-BepBBX66.js → environment-switch-overlay-CquZXolz.js} +1 -1
  55. package/build/assets/{extensions-hub-R3KNv-5V.js → extensions-hub-BeweE0PW.js} +1 -1
  56. package/build/assets/{extensions-navigation-CfWFmI1I.js → extensions-navigation-Dd58NlUF.js} +1 -1
  57. package/build/assets/{external-link-BdBSg8rk.js → external-link-zWbg5KXS.js} +1 -1
  58. package/build/assets/file-text-RecuaId_.js +1 -0
  59. package/build/assets/files-tab-CLLG55-q.js +1 -0
  60. package/build/assets/{folder-C86qXV7M.js → folder-C1ou4_DT.js} +1 -1
  61. package/build/assets/{form-control-classes-DAfsCJTe.js → form-control-classes-pHtZUI6K.js} +1 -1
  62. package/build/assets/format-relative-time-6-3uvOXe.js +1 -0
  63. package/build/assets/format-time-delta-BIR5Os7T.js +1 -0
  64. package/build/assets/{git-provider-icon-BZqqUPlm.js → git-provider-icon-wg7ShB98.js} +1 -1
  65. package/build/assets/{git-repo-dropdown-DEpOwUez.js → git-repo-dropdown-CWnaUyxL.js} +1 -1
  66. package/build/assets/git-repo-dropdown-TzOuG5Ef.js +1 -0
  67. package/build/assets/{highlighted-source-view-CX9oIoVT.js → highlighted-source-view-DBtI3por.js} +1 -1
  68. package/build/assets/home-BpZQkDWM.js +1 -0
  69. package/build/assets/home-OEx0XtfP.js +1 -0
  70. package/build/assets/{home-store-Ch1ErdBc.js → home-store-DM4qw1lF.js} +1 -1
  71. package/build/assets/{iconBase-B2rQun3J.js → iconBase-C2sR-uAp.js} +1 -1
  72. package/build/assets/index-home-OEx0XtfP.js +1 -0
  73. package/build/assets/info-C9lpK5pw.js +1 -0
  74. package/build/assets/install-server-modal-DnjZrJUy.js +1 -0
  75. package/build/assets/kebab-menu-item-content-By16Tm_0.js +1 -0
  76. package/build/assets/{launch-B1POpHuP.js → launch-C9uijypN.js} +1 -1
  77. package/build/assets/{link-external-BDBCz-_z.js → link-external-BNZzCM1I.js} +1 -1
  78. package/build/assets/list-filter-C86CBRDE.js +1 -0
  79. package/build/assets/{list-todo-DtiL3lTp.js → list-todo-CheUtB7F.js} +1 -1
  80. package/build/assets/llm-not-configured-banner-DrBrhfN0.js +27 -0
  81. package/build/assets/{llm-settings-CXo8iPNW.js → llm-settings-CRsLqxgu.js} +1 -1
  82. package/build/assets/llm-settings-RBm_3kNm.js +1 -0
  83. package/build/assets/{llm-subscription-service-DBJbfd8Z.js → llm-subscription-service-DwjJ8-_X.js} +1 -1
  84. package/build/assets/loader-circle-C5AnEN8r.js +1 -0
  85. package/build/assets/{loading-spinner-DfZ_bhV7.js → loading-spinner-6Yj-YyoS.js} +1 -1
  86. package/build/assets/{manage-backends-modal-CwyWsiag.js → manage-backends-modal-DrwErS0N.js} +1 -1
  87. package/build/assets/manifest-c352d453.js +1 -0
  88. package/build/assets/manifest-subpage-layout-CtqVwIvJ.js +1 -0
  89. package/build/assets/{markdown-renderer-DgiLLhW6.js → markdown-renderer-lsvsp7jn.js} +4 -4
  90. package/build/assets/mcp-DD4hPTRE.js +9 -0
  91. package/build/assets/mcp-marketplace-utils-BMnYz0Gc.js +1 -0
  92. package/build/assets/messages-Dt77e0qi.js +40 -0
  93. package/build/assets/{modal-backdrop-X-vKo61e.js → modal-backdrop-BSzNhM4r.js} +1 -1
  94. package/build/assets/{modal-body-CMsDpalT.js → modal-body-BHGCSAtj.js} +1 -1
  95. package/build/assets/{modal-classes-B6PDrxXo.js → modal-classes-DSTLuxkA.js} +1 -1
  96. package/build/assets/{modal-close-button-DyxBZaAb.js → modal-close-button-dheWZ2ys.js} +1 -1
  97. package/build/assets/mouse-pointer-click-Px-dXWcS.js +1 -0
  98. package/build/assets/{navigation-context-BOGzIng3.js → navigation-context-CQZwH_tC.js} +1 -1
  99. package/build/assets/navigation-link-Bxo3-4vo.js +1 -0
  100. package/build/assets/onboarding-5CZvRBbh.js +1 -0
  101. package/build/assets/onboarding-modal-CD2ehuxt.js +1 -0
  102. package/build/assets/{openhands-logo-CmYvJXBa.js → openhands-logo-BS-Epajy.js} +1 -1
  103. package/build/assets/{organization-service.api-UDy63-oC.js → organization-service.api-Dsuoep0g.js} +1 -1
  104. package/build/assets/{pencil-BjgtZmWp.js → pencil-Bl3GWhgq.js} +1 -1
  105. package/build/assets/{planner-tab-BWk8885v.js → planner-tab-DeO7Thb0.js} +1 -1
  106. package/build/assets/{plugins-management-service-CjkgF2dd.js → plugins-management-service-C9f75R6X.js} +1 -1
  107. package/build/assets/plus-CtzlyAoF.js +1 -0
  108. package/build/assets/{profiles-service.api-CukSFLzz.js → profiles-service.api-Dl20_2IM.js} +1 -1
  109. package/build/assets/{providers-CqUWC85T.js → providers-CeuhK46N.js} +1 -1
  110. package/build/assets/{proxy-BBUG3sd2.js → proxy-CIGI9zQC.js} +1 -1
  111. package/build/assets/{puzzle-BoNc6zZ8.js → puzzle-B3v361yY.js} +1 -1
  112. package/build/assets/recommended-automations-launcher-6xmbf7lh.js +1 -0
  113. package/build/assets/{refresh-cw-BrM5ZAZD.js → refresh-cw-B9GhC3QC.js} +1 -1
  114. package/build/assets/root-BQPNqNvD.js +2 -0
  115. package/build/assets/root-BeuHFY2s.css +1 -0
  116. package/build/assets/root-layout-Dl_2CDoq.js +3 -0
  117. package/build/assets/{schema-field-nImDoY6-.js → schema-field-z2vSLuLo.js} +1 -1
  118. package/build/assets/{sdk-section-page-BxMrtUNV.js → sdk-section-page-BnCXAytf.js} +1 -1
  119. package/build/assets/{search-7DRiGm4Z.js → search-BatSpWed.js} +1 -1
  120. package/build/assets/search-CYaiKHRp.js +1 -0
  121. package/build/assets/{secrets-service-Dhjh3HhH.js → secrets-service-DGUNlwQd.js} +1 -1
  122. package/build/assets/{secrets-settings-CPdxceT_.js → secrets-settings-DUmML_dK.js} +1 -1
  123. package/build/assets/{segmented-toggle-Do6oyepX.js → segmented-toggle-eSofF7gn.js} +1 -1
  124. package/build/assets/settings-CWFxymAf.js +1 -0
  125. package/build/assets/{settings-BRbnfKEm.js → settings-Co-M5bK9.js} +1 -1
  126. package/build/assets/{settings-dropdown-input-DYCULKpp.js → settings-dropdown-input-Cx4g7Xfl.js} +1 -1
  127. package/build/assets/{settings-gear-TYXnELES.js → settings-gear-DaJj6Pde.js} +1 -1
  128. package/build/assets/{settings-index-C9o2NBO0.js → settings-index-BECdgecg.js} +1 -1
  129. package/build/assets/{settings-input-B-q2gkVy.js → settings-input-BQY115xH.js} +1 -1
  130. package/build/assets/settings-like-page-layout-classes-Cw4Yzv_P.js +1 -0
  131. package/build/assets/{settings-list-classes-WpQi0q1L.js → settings-list-classes-C9cLrrcc.js} +1 -1
  132. package/build/assets/{settings-modal-CEK0AIx6.js → settings-modal-ChBJNTdd.js} +1 -1
  133. package/build/assets/{settings-section-header-context-CnIIQAUn.js → settings-section-header-context-BOJ_Fbak.js} +1 -1
  134. package/build/assets/settings-service.api-Dz9cZyvx.js +1 -0
  135. package/build/assets/{settings-switch-LqKdGxHL.js → settings-switch-BIodMVz9.js} +1 -1
  136. package/build/assets/{shared-conversation-Bu-dQlgp.js → shared-conversation-CSF0aTuE.js} +1 -1
  137. package/build/assets/{sidebar-layout-oHBGQmLh.js → sidebar-layout-DEycoFd_.js} +1 -1
  138. package/build/assets/sidebar-mobile-menu-toggle-DeRvTupV.js +1 -0
  139. package/build/assets/{sidebar-nav-link-CrujNA09.js → sidebar-nav-link-BjpQ-NVc.js} +1 -1
  140. package/build/assets/{sidebar-store-Bui-WNEr.js → sidebar-store-B04sX8aP.js} +1 -1
  141. package/build/assets/{skill-card-pill-row-CZBI7OqH.js → skill-card-pill-row-BH6fPGba.js} +1 -1
  142. package/build/assets/{skill-icon-badge-BOov_phZ.js → skill-icon-badge-D4uznfjU.js} +1 -1
  143. package/build/assets/skill-scope-DH_AUUUP.js +1 -0
  144. package/build/assets/{skills-CYFLsN5U.js → skills-B0IliMxw.js} +1 -1
  145. package/build/assets/{skills-plugins-D0PiHWAD.js → skills-plugins-vfvOk34h.js} +1 -1
  146. package/build/assets/skills-settings-DnbIu2eO.js +2 -0
  147. package/build/assets/sparkles-g7y3r-Ut.js +1 -0
  148. package/build/assets/{styled-tooltip-C7grwnOX.js → styled-tooltip-CQ9JEFiO.js} +1 -1
  149. package/build/assets/{switch-skeleton-BQoOhQTB.js → switch-skeleton-DwOoCqaL.js} +1 -1
  150. package/build/assets/{syntax-highlighter-B92AFGMy.js → syntax-highlighter-BGDg_7w9.js} +1 -1
  151. package/build/assets/{task-list-tab-R3ac6m7O.js → task-list-tab-DeF_uXdw.js} +1 -1
  152. package/build/assets/{terminal-cMS3RgVE.js → terminal-BUpID2wS.js} +1 -1
  153. package/build/assets/{terminal-yqkNdEAx.js → terminal-DRc4rup7.js} +1 -1
  154. package/build/assets/{toggle-switch-BeSrbgCg.js → toggle-switch--8n8NeV_.js} +1 -1
  155. package/build/assets/{trash-2-wW5TWcdN.js → trash-2-CzDVN-Iw.js} +1 -1
  156. package/build/assets/{typography-iYhzLlHO.js → typography-BSbUhJPn.js} +1 -1
  157. package/build/assets/{u-check-circle-DBEvndTS.js → u-check-circle-BKn1spCL.js} +1 -1
  158. package/build/assets/{u-edit-809W9D9T.js → u-edit-DAkcF52u.js} +1 -1
  159. package/build/assets/{u-robot-CJtSzy5X.js → u-robot-BvAOA2ZD.js} +1 -1
  160. package/build/assets/{use-acp-credential-form-DUxbxmbq.js → use-acp-credential-form-BGKFi1VL.js} +1 -1
  161. package/build/assets/{use-activate-agent-profile-CDHA52tC.js → use-activate-agent-profile-2nvALjC-.js} +1 -1
  162. package/build/assets/{use-agent-profiles-TsOdIyw5.js → use-agent-profiles-BlQA67MW.js} +1 -1
  163. package/build/assets/{use-breakpoint-DA7JqsRN.js → use-breakpoint-DWtihr9g.js} +1 -1
  164. package/build/assets/{use-can-manage-org-profiles-Bt1M71u5.js → use-can-manage-org-profiles-Clw5Dh1s.js} +1 -1
  165. package/build/assets/{use-click-outside-element-DKqpqEEm.js → use-click-outside-element-W6Os4Nlb.js} +1 -1
  166. package/build/assets/{use-cloud-current-user-id-DWt7HCgf.js → use-cloud-current-user-id-B8AQSQFM.js} +1 -1
  167. package/build/assets/{use-config-CxlEdf_v.js → use-config-C3zGuUQI.js} +1 -1
  168. package/build/assets/{use-create-conversation-nOJ6Um5h.js → use-create-conversation-FaP0kUpg.js} +1 -1
  169. package/build/assets/{use-create-secret-Dj5ang9x.js → use-create-secret-CgQ3pXd6.js} +1 -1
  170. package/build/assets/use-is-authed-Bka89Xmm.js +1 -0
  171. package/build/assets/{use-is-creating-conversation-CAggrM75.js → use-is-creating-conversation-CVefC9Ns.js} +1 -1
  172. package/build/assets/{use-launch-skill-in-chat-DKzCTMt0.js → use-launch-skill-in-chat-BcKNjxxd.js} +1 -1
  173. package/build/assets/use-llm-profiles-C-tDO6UB.js +1 -0
  174. package/build/assets/use-manifest-capabilities-DLP5wCxp.js +1 -0
  175. package/build/assets/{use-onboarding-completion-gxQlcEy2.js → use-onboarding-completion-BiCdXvlU.js} +1 -1
  176. package/build/assets/{use-plugins-marketplace-CVO7sXYR.js → use-plugins-marketplace-DRFNLBlr.js} +1 -1
  177. package/build/assets/use-save-agent-profile-CaGVAudI.js +1 -0
  178. package/build/assets/{use-save-settings-L3aMaDeS.js → use-save-settings-C9B8Y-h3.js} +1 -1
  179. package/build/assets/{use-settings-8nt3DGxW.js → use-settings-3RcgdUuZ.js} +1 -1
  180. package/build/assets/{use-settings-nav-items-DHAAD-zk.js → use-settings-nav-items-y-Oyc93G.js} +2 -2
  181. package/build/assets/use-tracking-CTtkLAmx.js +3 -0
  182. package/build/assets/{use-user-conversation-BIIpGUgM.js → use-user-conversation-Bei82QsZ.js} +1 -1
  183. package/build/assets/{useInfiniteQuery-BLRVmVPU.js → useInfiniteQuery-DbCv0Jzd.js} +1 -1
  184. package/build/assets/{useMutation-CaSHLnX0.js → useMutation-ChpkYxI5.js} +1 -1
  185. package/build/assets/{useQueries--d_WWAzc.js → useQueries-Cjv3E8_1.js} +1 -1
  186. package/build/assets/useQuery-BCnzy4LX.js +1 -0
  187. package/build/assets/utils-BX9XJ0IE.js +1 -0
  188. package/build/assets/{vendor-markdown-BML7QbqS.js → vendor-markdown-j0kYzV48.js} +1 -1
  189. package/build/assets/{vendor-styling-Bcgpimp9.js → vendor-styling-Ck5D_A2Q.js} +6 -6
  190. package/build/assets/{vendor~browser-jaN4ilxM.js → vendor~browser-C6uXH-dw.js} +2 -2
  191. package/build/assets/vendor~browser-DJ1pl_wn.js +47 -0
  192. package/build/assets/{vendor~browser-tab-_-VCXq8n.js → vendor~browser-tab-C5uuAxZX.js} +1 -1
  193. package/build/assets/vendor~entry.client-CgNUwtQL.js +1 -0
  194. package/build/assets/{vendor~entry.client-BcYIVQvB.js → vendor~entry.client-zSIea5EO.js} +2 -2
  195. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~cy4jtuc2-rfV8mQ9m.js +1 -0
  196. package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0bpqexo-CbTboogo.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kv3pap4j-oGvLV0dO.js} +4 -4
  197. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~lq5hicxx-cHFhpUBq.js +26 -0
  198. package/build/assets/{vendor~files-tab-C7RmQJwN.js → vendor~files-tab-C87pjSpi.js} +1 -1
  199. package/build/assets/{vendor~index-home~home~conversation-panel~conversation-Bqp1ZqJM.js → vendor~index-home~home~conversation-panel~conversation-DiXf0dkj.js} +1 -1
  200. package/build/assets/{vendor~conversation-panel~conversation~alert-banner-BNzz5FuZ.js → vendor~index-home~home~conversation-panel~conversation~alert-banner-B3qC_oj8.js} +1 -1
  201. package/build/assets/{vendor~launch-ChXCOGw8.js → vendor~launch-CHwEQG6e.js} +1 -1
  202. package/build/assets/vendor~module-DyG7x7JT.js +2 -0
  203. package/build/assets/{vendor~root-layout~conversation-panel~conversation-BCn8lzeG.js → vendor~root-layout~conversation-panel~conversation-DEzjR4K7.js} +1 -1
  204. package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-DRblkyXD.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-DOuig0C0.js} +1 -1
  205. package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-U-xdsAEx.js +1 -0
  206. package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~automation-setup-route-B_L-gcOG.js → vendor~root-layout~index-home~home~conversation-panel~conversation~automation-setup-route-CjECvSl5.js} +1 -1
  207. package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-sjx0x5ac.js → vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-CQR5Sa0H.js} +1 -1
  208. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gy8zbn65-CGt6bWRT.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gxu4j2ea-Cwhh3zLe.js} +1 -1
  209. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~dfc8ddxy-tTyxnjXT.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-CuQhkiS7.js} +1 -1
  210. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~9pstowjp-BOVIFA_g.js +73 -0
  211. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~dufan6ng-Dtdw8H0q.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~ht43enc2-C0JXQb_q.js} +162 -54
  212. package/build/assets/{verification-settings-DBsnSXC3.js → verification-settings-nD61Ijph.js} +1 -1
  213. package/build/assets/wrench-DRitTfwe.js +1 -0
  214. package/build/assets/x-RYDBg-e2.js +1 -0
  215. package/build/assets/{x-mark-jcTkPiOB.js → x-mark-BopmFoBq.js} +1 -1
  216. package/build/assets/zap-tbKDzCe3.js +1 -0
  217. package/build/index.html +4 -4
  218. package/build/locales/ar/openhands.json +70 -4
  219. package/build/locales/ca/openhands.json +70 -4
  220. package/build/locales/de/openhands.json +70 -4
  221. package/build/locales/en/openhands.json +70 -4
  222. package/build/locales/es/openhands.json +70 -4
  223. package/build/locales/fr/openhands.json +70 -4
  224. package/build/locales/it/openhands.json +70 -4
  225. package/build/locales/ja/openhands.json +70 -4
  226. package/build/locales/ko-KR/openhands.json +70 -4
  227. package/build/locales/no/openhands.json +70 -4
  228. package/build/locales/pt/openhands.json +70 -4
  229. package/build/locales/tr/openhands.json +70 -4
  230. package/build/locales/uk/openhands.json +70 -4
  231. package/build/locales/zh-CN/openhands.json +70 -4
  232. package/build/locales/zh-TW/openhands.json +70 -4
  233. package/build/mockServiceWorker.js +21 -9
  234. package/config/defaults.json +3 -3
  235. package/dist/api/automation-service/automation-service.api.cjs +1 -1
  236. package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
  237. package/dist/api/automation-service/automation-service.api.d.ts +5 -0
  238. package/dist/api/automation-service/automation-service.api.js +11 -0
  239. package/dist/api/automation-service/automation-service.api.js.map +1 -1
  240. package/dist/api/backend-registry/active-store.cjs +1 -1
  241. package/dist/api/backend-registry/active-store.cjs.map +1 -1
  242. package/dist/api/backend-registry/active-store.js +36 -31
  243. package/dist/api/backend-registry/active-store.js.map +1 -1
  244. package/dist/api/backend-registry/url-selection.cjs +2 -0
  245. package/dist/api/backend-registry/url-selection.cjs.map +1 -0
  246. package/dist/api/backend-registry/url-selection.d.ts +31 -0
  247. package/dist/api/backend-registry/url-selection.js +29 -0
  248. package/dist/api/backend-registry/url-selection.js.map +1 -0
  249. package/dist/api/mcp-service/mcp-redacted-credentials.cjs +1 -1
  250. package/dist/api/mcp-service/mcp-redacted-credentials.cjs.map +1 -1
  251. package/dist/api/mcp-service/mcp-redacted-credentials.d.ts +3 -2
  252. package/dist/api/mcp-service/mcp-redacted-credentials.js +32 -27
  253. package/dist/api/mcp-service/mcp-redacted-credentials.js.map +1 -1
  254. package/dist/api/mcp-service/mcp-service.api.cjs +1 -1
  255. package/dist/api/mcp-service/mcp-service.api.cjs.map +1 -1
  256. package/dist/api/mcp-service/mcp-service.api.js +19 -19
  257. package/dist/api/mcp-service/mcp-service.api.js.map +1 -1
  258. package/dist/api/settings-service/settings-service.api.cjs +1 -1
  259. package/dist/api/settings-service/settings-service.api.cjs.map +1 -1
  260. package/dist/api/settings-service/settings-service.api.d.ts +10 -0
  261. package/dist/api/settings-service/settings-service.api.js +90 -100
  262. package/dist/api/settings-service/settings-service.api.js.map +1 -1
  263. package/dist/api/skills-service.cjs +1 -1
  264. package/dist/api/skills-service.cjs.map +1 -1
  265. package/dist/api/skills-service.js +1 -0
  266. package/dist/api/skills-service.js.map +1 -1
  267. package/dist/assets/chevron-left.d.ts +1 -1
  268. package/dist/assets/chevron-right.d.ts +1 -1
  269. package/dist/components/conversation-events/chat/event-message-components/collapsible-thinking.d.ts +2 -1
  270. package/dist/components/conversation-events/chat/event-message-components/critic-result-display.d.ts +2 -1
  271. package/dist/components/conversation-events/chat/event-message-components/error-event-message.d.ts +2 -1
  272. package/dist/components/conversation-events/chat/event-message-components/event-group.d.ts +1 -1
  273. package/dist/components/conversation-events/chat/event-message-components/finish-event-message.d.ts +1 -1
  274. package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.d.ts +1 -1
  275. package/dist/components/conversation-events/chat/event-message-components/observation-pair-event-message.d.ts +2 -1
  276. package/dist/components/conversation-events/chat/event-message-components/skill-item-expanded.d.ts +1 -1
  277. package/dist/components/conversation-events/chat/event-message-components/skill-ready-content-list.d.ts +2 -1
  278. package/dist/components/conversation-events/chat/event-message-components/thought-event-message.d.ts +1 -1
  279. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.d.ts +2 -1
  280. package/dist/components/conversation-events/chat/event-message.d.ts +2 -1
  281. package/dist/components/conversation-events/chat/task-tracking/task-item.d.ts +1 -1
  282. package/dist/components/conversation-events/chat/task-tracking/task-list-section.d.ts +1 -1
  283. package/dist/components/features/alerts/alert-banner.d.ts +1 -1
  284. package/dist/components/features/analytics/telemetry-consent-banner.d.ts +2 -1
  285. package/dist/components/features/automations/add-automation-modal.d.ts +1 -1
  286. package/dist/components/features/automations/automation-card-skeleton.d.ts +1 -1
  287. package/dist/components/features/automations/automation-card.d.ts +9 -1
  288. package/dist/components/features/automations/automation-group.d.ts +9 -1
  289. package/dist/components/features/automations/automation-health-badge.d.ts +8 -0
  290. package/dist/components/features/automations/automation-list-row.d.ts +3 -1
  291. package/dist/components/features/automations/automation-run-insights.d.ts +17 -0
  292. package/dist/components/features/automations/automation-view-toggle.d.ts +1 -1
  293. package/dist/components/features/automations/backend-not-configured.d.ts +1 -1
  294. package/dist/components/features/automations/create-instructions.d.ts +2 -2
  295. package/dist/components/features/automations/dashboard/automations-dashboard-controls.d.ts +18 -0
  296. package/dist/components/features/automations/dashboard/automations-filtered-empty-state.d.ts +9 -0
  297. package/dist/components/features/automations/dashboard/use-automation-sub-page-nav.d.ts +12 -0
  298. package/dist/components/features/automations/delete-confirmation-modal.d.ts +1 -1
  299. package/dist/components/features/automations/detail/active-status-badge.d.ts +1 -1
  300. package/dist/components/features/automations/detail/activity-log-item.d.ts +1 -1
  301. package/dist/components/features/automations/detail/activity-log-section.d.ts +3 -1
  302. package/dist/components/features/automations/detail/activity-section.d.ts +1 -1
  303. package/dist/components/features/automations/detail/back-link.d.ts +1 -1
  304. package/dist/components/features/automations/detail/branch-badge.d.ts +1 -1
  305. package/dist/components/features/automations/detail/config-field.d.ts +1 -1
  306. package/dist/components/features/automations/detail/configuration-section.d.ts +1 -1
  307. package/dist/components/features/automations/detail/debug-automation-button.d.ts +1 -1
  308. package/dist/components/features/automations/detail/detail-header.d.ts +1 -1
  309. package/dist/components/features/automations/detail/detail-skeleton.d.ts +1 -1
  310. package/dist/components/features/automations/detail/edit-automation-modal.d.ts +1 -1
  311. package/dist/components/features/automations/detail/not-found-state.d.ts +1 -1
  312. package/dist/components/features/automations/detail/plugin-chip.d.ts +1 -1
  313. package/dist/components/features/automations/detail/plugins-section.d.ts +1 -1
  314. package/dist/components/features/automations/detail/prompt-section.d.ts +2 -1
  315. package/dist/components/features/automations/detail/run-logs-modal.d.ts +1 -1
  316. package/dist/components/features/automations/detail/run-status-badge.d.ts +10 -1
  317. package/dist/components/features/automations/detail/section-card.d.ts +1 -1
  318. package/dist/components/features/automations/empty-state.d.ts +1 -1
  319. package/dist/components/features/automations/error-state.d.ts +1 -1
  320. package/dist/components/features/automations/import-automation-modal.d.ts +1 -1
  321. package/dist/components/features/automations/kebab-menu-item-content.d.ts +1 -1
  322. package/dist/components/features/automations/kebab-menu.d.ts +1 -1
  323. package/dist/components/features/automations/metadata-chip.d.ts +1 -1
  324. package/dist/components/features/automations/recommended-automations-launcher.d.ts +1 -1
  325. package/dist/components/features/automations/recommended-automations-section.d.ts +1 -1
  326. package/dist/components/features/automations/responder-deployment-modal.d.ts +1 -1
  327. package/dist/components/features/automations/search-input.d.ts +1 -1
  328. package/dist/components/features/automations/status-badge.d.ts +1 -1
  329. package/dist/components/features/automations/turn-off-confirmation-modal.d.ts +8 -0
  330. package/dist/components/features/automations/view-menu-item-content.d.ts +1 -1
  331. package/dist/components/features/backends/add-backend-modal.d.ts +1 -1
  332. package/dist/components/features/backends/api-key-entry-screen.d.ts +2 -1
  333. package/dist/components/features/backends/backend-form-modal.d.ts +3 -3
  334. package/dist/components/features/backends/backend-row.d.ts +1 -1
  335. package/dist/components/features/backends/backend-selector.d.ts +2 -1
  336. package/dist/components/features/backends/backend-status-dot.d.ts +2 -1
  337. package/dist/components/features/backends/backend-version.d.ts +1 -1
  338. package/dist/components/features/backends/device-flow-auth.d.ts +1 -1
  339. package/dist/components/features/backends/manage-backends-modal.d.ts +2 -1
  340. package/dist/components/features/browser/browser-chrome-bar.d.ts +1 -1
  341. package/dist/components/features/browser/browser-snapshot.d.ts +1 -1
  342. package/dist/components/features/browser/browser.d.ts +1 -1
  343. package/dist/components/features/browser/empty-browser-message.d.ts +1 -1
  344. package/dist/components/features/chat/btw-messages.d.ts +1 -1
  345. package/dist/components/features/chat/change-agent-button.d.ts +2 -1
  346. package/dist/components/features/chat/change-agent-context-menu.d.ts +1 -1
  347. package/dist/components/features/chat/chat-action-tooltip.d.ts +1 -1
  348. package/dist/components/features/chat/chat-add-file-button.d.ts +2 -1
  349. package/dist/components/features/chat/chat-interface.d.ts +2 -1
  350. package/dist/components/features/chat/chat-message.d.ts +1 -1
  351. package/dist/components/features/chat/chat-messages-skeleton.d.ts +2 -1
  352. package/dist/components/features/chat/chat-play-button.d.ts +1 -1
  353. package/dist/components/features/chat/chat-send-button.d.ts +1 -1
  354. package/dist/components/features/chat/chat-status-indicator.d.ts +1 -1
  355. package/dist/components/features/chat/chat-stop-button.d.ts +1 -1
  356. package/dist/components/features/chat/chat-suggestions.d.ts +1 -1
  357. package/dist/components/features/chat/components/chat-input-actions.d.ts +2 -1
  358. package/dist/components/features/chat/components/chat-input-container.d.ts +1 -1
  359. package/dist/components/features/chat/components/chat-input-field.d.ts +1 -1
  360. package/dist/components/features/chat/components/chat-input-grip.d.ts +1 -1
  361. package/dist/components/features/chat/components/chat-input-llm-profile-picker.d.ts +3 -2
  362. package/dist/components/features/chat/components/chat-input-model.d.ts +3 -2
  363. package/dist/components/features/chat/components/chat-input-profile-picker.d.ts +1 -1
  364. package/dist/components/features/chat/components/chat-input-row.d.ts +1 -1
  365. package/dist/components/features/chat/components/hidden-file-input.d.ts +1 -1
  366. package/dist/components/features/chat/components/slash-command-menu.d.ts +2 -1
  367. package/dist/components/features/chat/confirmation-mode-enabled.d.ts +1 -1
  368. package/dist/components/features/chat/custom-chat-input.d.ts +1 -1
  369. package/dist/components/features/chat/drag-over.d.ts +1 -1
  370. package/dist/components/features/chat/error-message-banner.d.ts +2 -1
  371. package/dist/components/features/chat/error-message.d.ts +2 -1
  372. package/dist/components/features/chat/generic-event-message.d.ts +1 -1
  373. package/dist/components/features/chat/git-control-bar-branch-button.d.ts +1 -1
  374. package/dist/components/features/chat/git-control-bar-pr-button.d.ts +1 -1
  375. package/dist/components/features/chat/git-control-bar-pull-button.d.ts +1 -1
  376. package/dist/components/features/chat/git-control-bar-push-button.d.ts +1 -1
  377. package/dist/components/features/chat/git-control-bar-repo-button.d.ts +1 -1
  378. package/dist/components/features/chat/git-control-bar-tooltip-wrapper.d.ts +1 -1
  379. package/dist/components/features/chat/git-control-bar.d.ts +1 -1
  380. package/dist/components/features/chat/git-external-link-icon.d.ts +1 -1
  381. package/dist/components/features/chat/goal-status-banner.d.ts +1 -1
  382. package/dist/components/features/chat/goal-status-content.d.ts +1 -1
  383. package/dist/components/features/chat/got-it-button.d.ts +1 -1
  384. package/dist/components/features/chat/interactive-chat-box.d.ts +1 -1
  385. package/dist/components/features/chat/model-messages.d.ts +2 -1
  386. package/dist/components/features/chat/mono-component.d.ts +1 -1
  387. package/dist/components/features/chat/open-repository-modal.d.ts +2 -1
  388. package/dist/components/features/chat/pasted-image-upload-as-file-button.d.ts +1 -1
  389. package/dist/components/features/chat/path-component.d.ts +1 -1
  390. package/dist/components/features/chat/pending-stop-icon.d.ts +1 -1
  391. package/dist/components/features/chat/pending-user-messages.d.ts +2 -1
  392. package/dist/components/features/chat/plan-preview.d.ts +1 -1
  393. package/dist/components/features/chat/remove-file-button.d.ts +1 -1
  394. package/dist/components/features/chat/skill-install-restart-banner.d.ts +1 -1
  395. package/dist/components/features/chat/success-indicator.d.ts +1 -1
  396. package/dist/components/features/chat/task-tracking/status-badge.d.ts +1 -1
  397. package/dist/components/features/chat/task-tracking/status-icon.d.ts +1 -1
  398. package/dist/components/features/chat/task-tracking/task-item.d.ts +1 -1
  399. package/dist/components/features/chat/task-tracking/task-list-section.d.ts +1 -1
  400. package/dist/components/features/chat/tool-visualizers/primitives/code-block.d.ts +2 -1
  401. package/dist/components/features/chat/tool-visualizers/primitives/diff-view.d.ts +2 -1
  402. package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.d.ts +2 -1
  403. package/dist/components/features/chat/tool-visualizers/primitives/key-value-grid.d.ts +1 -1
  404. package/dist/components/features/chat/tool-visualizers/primitives/output-pane.d.ts +2 -1
  405. package/dist/components/features/chat/typing-indicator.d.ts +1 -1
  406. package/dist/components/features/chat/uploaded-file.d.ts +1 -1
  407. package/dist/components/features/chat/uploaded-files.d.ts +1 -1
  408. package/dist/components/features/chat/uploaded-image.d.ts +2 -1
  409. package/dist/components/features/chat/user-message-body.d.ts +2 -2
  410. package/dist/components/features/chat/waiting-for-runtime-message.d.ts +1 -1
  411. package/dist/components/features/chat/workspace-mode-icon.d.ts +1 -1
  412. package/dist/components/features/chat/workspace-mode-selector.d.ts +1 -1
  413. package/dist/components/features/command-menu/command-menu-trigger.d.ts +2 -1
  414. package/dist/components/features/context-menu/archived-disabled-tooltip.d.ts +1 -1
  415. package/dist/components/features/context-menu/context-menu-icon-text-with-description.d.ts +1 -1
  416. package/dist/components/features/context-menu/context-menu-icon-text.d.ts +1 -1
  417. package/dist/components/features/context-menu/context-menu-list-item.cjs +1 -1
  418. package/dist/components/features/context-menu/context-menu-list-item.cjs.map +1 -1
  419. package/dist/components/features/context-menu/context-menu-list-item.d.ts +2 -1
  420. package/dist/components/features/context-menu/context-menu-list-item.js +2 -1
  421. package/dist/components/features/context-menu/context-menu-list-item.js.map +1 -1
  422. package/dist/components/features/controls/agent-loading.d.ts +1 -1
  423. package/dist/components/features/controls/agent-status.d.ts +1 -1
  424. package/dist/components/features/controls/git-tools-submenu.d.ts +1 -1
  425. package/dist/components/features/controls/macros-submenu.d.ts +1 -1
  426. package/dist/components/features/controls/server-status-context-menu-icon-text.d.ts +1 -1
  427. package/dist/components/features/controls/server-status-context-menu.d.ts +1 -1
  428. package/dist/components/features/controls/server-status.d.ts +1 -1
  429. package/dist/components/features/controls/tools-context-menu-icon-text.d.ts +1 -1
  430. package/dist/components/features/controls/tools-context-menu.d.ts +1 -1
  431. package/dist/components/features/controls/tools.d.ts +2 -1
  432. package/dist/components/features/conversation/conversation-loading.d.ts +1 -1
  433. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.d.ts +1 -1
  434. package/dist/components/features/conversation/conversation-main/conversation-main.d.ts +1 -1
  435. package/dist/components/features/conversation/conversation-main/conversation-mobile-panel-page.d.ts +2 -1
  436. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.d.ts +1 -1
  437. package/dist/components/features/conversation/conversation-name-context-menu.d.ts +1 -1
  438. package/dist/components/features/conversation/conversation-name-with-status.d.ts +2 -1
  439. package/dist/components/features/conversation/conversation-name.d.ts +2 -1
  440. package/dist/components/features/conversation/conversation-tab-empty-state.d.ts +1 -1
  441. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content-crossfade.d.ts +1 -1
  442. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.d.ts +1 -1
  443. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/suspense-pending-fallback.d.ts +1 -1
  444. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/tab-container.d.ts +1 -1
  445. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/tab-content-area.d.ts +1 -1
  446. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/tab-wrapper.d.ts +1 -1
  447. package/dist/components/features/conversation/conversation-tabs/conversation-tab-nav.d.ts +1 -1
  448. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.d.ts +1 -1
  449. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.d.ts +1 -1
  450. package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.d.ts +1 -1
  451. package/dist/components/features/conversation/metrics-modal/context-window-section.d.ts +1 -1
  452. package/dist/components/features/conversation/metrics-modal/cost-section.d.ts +1 -1
  453. package/dist/components/features/conversation/metrics-modal/empty-state.d.ts +1 -1
  454. package/dist/components/features/conversation/metrics-modal/metric-row.d.ts +1 -1
  455. package/dist/components/features/conversation/metrics-modal/metrics-modal-header.d.ts +1 -1
  456. package/dist/components/features/conversation/metrics-modal/metrics-modal.d.ts +1 -1
  457. package/dist/components/features/conversation/metrics-modal/usage-section.d.ts +1 -1
  458. package/dist/components/features/conversation/right-panel-toggle.d.ts +1 -1
  459. package/dist/components/features/conversation/transcript-export-modal.d.ts +2 -1
  460. package/dist/components/features/conversation-panel/budget-display.d.ts +2 -1
  461. package/dist/components/features/conversation-panel/budget-progress-bar.d.ts +1 -1
  462. package/dist/components/features/conversation-panel/budget-usage-text.d.ts +2 -1
  463. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.d.ts +1 -1
  464. package/dist/components/features/conversation-panel/compact-conversation-row.cjs +1 -1
  465. package/dist/components/features/conversation-panel/compact-conversation-row.cjs.map +1 -1
  466. package/dist/components/features/conversation-panel/compact-conversation-row.d.ts +2 -1
  467. package/dist/components/features/conversation-panel/compact-conversation-row.js +38 -37
  468. package/dist/components/features/conversation-panel/compact-conversation-row.js.map +1 -1
  469. package/dist/components/features/conversation-panel/confirm-delete-modal.d.ts +1 -1
  470. package/dist/components/features/conversation-panel/confirm-stop-modal.d.ts +1 -1
  471. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.d.ts +1 -1
  472. package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.d.ts +1 -1
  473. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.d.ts +1 -1
  474. package/dist/components/features/conversation-panel/conversation-card/conversation-card-header.d.ts +1 -1
  475. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.d.ts +1 -1
  476. package/dist/components/features/conversation-panel/conversation-card/conversation-card-skeleton.d.ts +1 -1
  477. package/dist/components/features/conversation-panel/conversation-card/conversation-card-title.d.ts +1 -1
  478. package/dist/components/features/conversation-panel/conversation-card/conversation-card.d.ts +2 -1
  479. package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.d.ts +1 -1
  480. package/dist/components/features/conversation-panel/conversation-card/conversation-status-badges.d.ts +1 -1
  481. package/dist/components/features/conversation-panel/conversation-card/no-repository.d.ts +1 -1
  482. package/dist/components/features/conversation-panel/conversation-group-folder-list.d.ts +1 -1
  483. package/dist/components/features/conversation-panel/conversation-group-folder-row.d.ts +1 -1
  484. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.d.ts +1 -1
  485. package/dist/components/features/conversation-panel/conversation-panel-new-thread-picker.d.ts +1 -1
  486. package/dist/components/features/conversation-panel/conversation-panel-pinned-section.d.ts +1 -1
  487. package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
  488. package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
  489. package/dist/components/features/conversation-panel/conversation-panel.d.ts +2 -1
  490. package/dist/components/features/conversation-panel/conversation-panel.js +221 -220
  491. package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
  492. package/dist/components/features/conversation-panel/conversation-status-dot.d.ts +1 -1
  493. package/dist/components/features/conversation-panel/exit-conversation-modal.d.ts +1 -1
  494. package/dist/components/features/conversation-panel/hook-event-item.d.ts +1 -1
  495. package/dist/components/features/conversation-panel/hook-matcher-content.d.ts +1 -1
  496. package/dist/components/features/conversation-panel/hooks-empty-state.d.ts +1 -1
  497. package/dist/components/features/conversation-panel/hooks-loading-state.d.ts +1 -1
  498. package/dist/components/features/conversation-panel/hooks-modal-header.d.ts +1 -1
  499. package/dist/components/features/conversation-panel/hooks-modal.d.ts +1 -1
  500. package/dist/components/features/conversation-panel/local-new-conversation-menu.d.ts +1 -1
  501. package/dist/components/features/conversation-panel/menu-heading.d.ts +1 -1
  502. package/dist/components/features/conversation-panel/menu-row.d.ts +1 -1
  503. package/dist/components/features/conversation-panel/menu-separator.d.ts +1 -1
  504. package/dist/components/features/conversation-panel/new-conversation-button.d.ts +2 -1
  505. package/dist/components/features/conversation-panel/plugins-modal.d.ts +1 -1
  506. package/dist/components/features/conversation-panel/runtime-waiting-state.d.ts +1 -1
  507. package/dist/components/features/conversation-panel/skill-content.d.ts +1 -1
  508. package/dist/components/features/conversation-panel/skill-item.d.ts +1 -1
  509. package/dist/components/features/conversation-panel/skill-triggers.d.ts +1 -1
  510. package/dist/components/features/conversation-panel/skills-empty-state.d.ts +1 -1
  511. package/dist/components/features/conversation-panel/skills-loading-state.d.ts +1 -1
  512. package/dist/components/features/conversation-panel/skills-modal-header.d.ts +1 -1
  513. package/dist/components/features/conversation-panel/skills-modal-section.d.ts +1 -1
  514. package/dist/components/features/conversation-panel/skills-modal.d.ts +1 -1
  515. package/dist/components/features/conversation-panel/start-task-card/start-task-card-footer.d.ts +1 -1
  516. package/dist/components/features/conversation-panel/start-task-card/start-task-card-header.d.ts +1 -1
  517. package/dist/components/features/conversation-panel/start-task-card/start-task-card.d.ts +1 -1
  518. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.d.ts +1 -1
  519. package/dist/components/features/conversation-panel/start-task-card/start-task-status-indicator.d.ts +1 -1
  520. package/dist/components/features/conversation-panel/system-message-modal/empty-tools-state.d.ts +1 -1
  521. package/dist/components/features/conversation-panel/system-message-modal/system-message-content.d.ts +1 -1
  522. package/dist/components/features/conversation-panel/system-message-modal/system-message-header.d.ts +1 -1
  523. package/dist/components/features/conversation-panel/system-message-modal/tab-button.d.ts +1 -1
  524. package/dist/components/features/conversation-panel/system-message-modal/tab-content.d.ts +1 -1
  525. package/dist/components/features/conversation-panel/system-message-modal/tab-navigation.d.ts +1 -1
  526. package/dist/components/features/conversation-panel/system-message-modal/toggle-button.d.ts +1 -1
  527. package/dist/components/features/conversation-panel/system-message-modal/tool-item.d.ts +1 -1
  528. package/dist/components/features/conversation-panel/system-message-modal/tool-parameters.d.ts +1 -1
  529. package/dist/components/features/conversation-panel/system-message-modal/tools-list.d.ts +1 -1
  530. package/dist/components/features/conversation-panel/system-message-modal.d.ts +1 -1
  531. package/dist/components/features/diff-viewer/commit-list.d.ts +2 -1
  532. package/dist/components/features/diff-viewer/commit-row.d.ts +2 -1
  533. package/dist/components/features/diff-viewer/diff-drawer-icon.d.ts +1 -1
  534. package/dist/components/features/diff-viewer/editor-container.d.ts +1 -1
  535. package/dist/components/features/diff-viewer/empty-changes-message.d.ts +1 -1
  536. package/dist/components/features/diff-viewer/file-diff-viewer.d.ts +2 -1
  537. package/dist/components/features/diff-viewer/loading-spinner.d.ts +1 -1
  538. package/dist/components/features/files/file-item.d.ts +1 -1
  539. package/dist/components/features/files/file-list.d.ts +2 -1
  540. package/dist/components/features/files-tab/file-content-viewer.d.ts +1 -1
  541. package/dist/components/features/files-tab/file-quick-row.d.ts +1 -1
  542. package/dist/components/features/files-tab/file-tree-view.d.ts +1 -1
  543. package/dist/components/features/files-tab/highlighted-source-view.d.ts +1 -1
  544. package/dist/components/features/files-tab/no-file-selected-message.d.ts +1 -1
  545. package/dist/components/features/files-tab/segmented-toggle.d.ts +1 -1
  546. package/dist/components/features/files-tab/tree-node.d.ts +1 -1
  547. package/dist/components/features/home/featured-automations/automation-health-indicator.d.ts +11 -0
  548. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.d.ts +18 -0
  549. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.d.ts +14 -0
  550. package/dist/components/features/home/featured-automations/automation-run-health.d.ts +25 -0
  551. package/dist/components/features/home/featured-automations/build-home-automation-menu-items.d.ts +39 -0
  552. package/dist/components/features/home/featured-automations/build-pinned-automation-menu-items.d.ts +22 -0
  553. package/dist/components/features/home/featured-automations/home-automation-activity.d.ts +23 -0
  554. package/dist/components/features/home/featured-automations/home-automation-menu.d.ts +13 -0
  555. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.d.ts +12 -0
  556. package/dist/components/features/home/featured-automations/pinned-automation-card.d.ts +21 -0
  557. package/dist/components/features/home/featured-automations/pinned-automations-dashboard.d.ts +6 -0
  558. package/dist/components/features/home/featured-automations/running-automations-list.d.ts +6 -0
  559. package/dist/components/features/home/git-branch-dropdown/branch-dropdown-menu.d.ts +1 -1
  560. package/dist/components/features/home/git-branch-dropdown/git-branch-dropdown.d.ts +2 -1
  561. package/dist/components/features/home/git-provider-dropdown/git-provider-dropdown.d.ts +2 -1
  562. package/dist/components/features/home/git-repo-dropdown/git-repo-dropdown.d.ts +2 -1
  563. package/dist/components/features/home/home-chat-launcher.d.ts +1 -1
  564. package/dist/components/features/home/home-git-control-bar-preview.d.ts +1 -1
  565. package/dist/components/features/home/home-header/guide-message.d.ts +1 -1
  566. package/dist/components/features/home/home-header/home-header-title.d.ts +1 -1
  567. package/dist/components/features/home/home-header/home-header.d.ts +1 -1
  568. package/dist/components/features/home/llm-not-configured-banner.d.ts +1 -1
  569. package/dist/components/features/home/new-conversation/create-conversation-button.d.ts +1 -1
  570. package/dist/components/features/home/new-conversation/new-conversation.d.ts +1 -1
  571. package/dist/components/features/home/new-conversation.d.ts +1 -1
  572. package/dist/components/features/home/open-launcher-button.d.ts +1 -1
  573. package/dist/components/features/home/open-repository-dialog.d.ts +1 -1
  574. package/dist/components/features/home/open-workspace-dialog.d.ts +1 -1
  575. package/dist/components/features/home/repo-selection-form.d.ts +2 -1
  576. package/dist/components/features/home/shared/clear-button.d.ts +2 -1
  577. package/dist/components/features/home/shared/dropdown-item.d.ts +1 -1
  578. package/dist/components/features/home/shared/empty-state.d.ts +2 -1
  579. package/dist/components/features/home/shared/error-message.d.ts +2 -1
  580. package/dist/components/features/home/shared/generic-dropdown-menu.d.ts +1 -1
  581. package/dist/components/features/home/shared/loading-spinner.d.ts +2 -1
  582. package/dist/components/features/home/shared/toggle-button.d.ts +1 -1
  583. package/dist/components/features/home/tasks/task-card.d.ts +1 -1
  584. package/dist/components/features/home/tasks/task-group.d.ts +1 -1
  585. package/dist/components/features/home/tasks/task-issue-number.d.ts +1 -1
  586. package/dist/components/features/home/tasks/task-item-title.d.ts +1 -1
  587. package/dist/components/features/home/tasks/task-suggestions-skeleton.d.ts +1 -1
  588. package/dist/components/features/home/tasks/task-suggestions.d.ts +1 -1
  589. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.d.ts +2 -1
  590. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.d.ts +2 -1
  591. package/dist/components/features/home/workspace-dropdown/workspace-dropdown.d.ts +2 -1
  592. package/dist/components/features/home/workspace-selection-form.d.ts +2 -1
  593. package/dist/components/features/images/image-carousel.d.ts +2 -1
  594. package/dist/components/features/images/image-preview.d.ts +1 -1
  595. package/dist/components/features/images/thumbnail.d.ts +1 -1
  596. package/dist/components/features/launch/plugin-launch-modal.d.ts +2 -1
  597. package/dist/components/features/launch/plugin-launch-parameter-input.d.ts +1 -1
  598. package/dist/components/features/launch/plugin-launch-plugin-section.d.ts +1 -1
  599. package/dist/components/features/manifest/manifest-form-field.d.ts +1 -1
  600. package/dist/components/features/manifest/manifest-icons.d.ts +13 -0
  601. package/dist/components/features/manifest/manifest-overview-tiles.d.ts +19 -0
  602. package/dist/components/features/manifest/manifest-prerequisites-step.d.ts +1 -1
  603. package/dist/components/features/manifest/manifest-review-step.d.ts +1 -1
  604. package/dist/components/features/manifest/manifest-setup-dialog.d.ts +1 -1
  605. package/dist/components/features/manifest/manifest-subpage-layout.d.ts +23 -0
  606. package/dist/components/features/markdown/anchor.d.ts +1 -1
  607. package/dist/components/features/markdown/blockquote.d.ts +1 -1
  608. package/dist/components/features/markdown/code.d.ts +1 -1
  609. package/dist/components/features/markdown/headings.d.ts +6 -6
  610. package/dist/components/features/markdown/horizontal-rule.d.ts +1 -1
  611. package/dist/components/features/markdown/list.d.ts +3 -3
  612. package/dist/components/features/markdown/markdown-renderer.d.ts +1 -1
  613. package/dist/components/features/markdown/markdown-table-scroll.d.ts +1 -1
  614. package/dist/components/features/markdown/paragraph.d.ts +1 -1
  615. package/dist/components/features/markdown/plan-components.d.ts +36 -36
  616. package/dist/components/features/markdown/table.d.ts +3 -3
  617. package/dist/components/features/mcp-logo-badge.d.ts +1 -1
  618. package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
  619. package/dist/components/features/mcp-page/custom-server-editor.cjs.map +1 -1
  620. package/dist/components/features/mcp-page/custom-server-editor.d.ts +2 -1
  621. package/dist/components/features/mcp-page/custom-server-editor.js +5 -0
  622. package/dist/components/features/mcp-page/custom-server-editor.js.map +1 -1
  623. package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
  624. package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
  625. package/dist/components/features/mcp-page/install-server-modal.d.ts +2 -1
  626. package/dist/components/features/mcp-page/install-server-modal.js +117 -118
  627. package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
  628. package/dist/components/features/mcp-page/installed-server-card.d.ts +2 -1
  629. package/dist/components/features/mcp-page/installed-servers-section.d.ts +1 -1
  630. package/dist/components/features/mcp-page/marketplace-card.d.ts +1 -1
  631. package/dist/components/features/mcp-page/marketplace-section.d.ts +1 -1
  632. package/dist/components/features/mcp-page/mcp-logo-stack-badge.d.ts +1 -1
  633. package/dist/components/features/mcp-page/mcp-section-filter-dropdown.d.ts +1 -1
  634. package/dist/components/features/mcp-page/mcp-server-health.d.ts +2 -1
  635. package/dist/components/features/mcp-page/mcp-toolbar.d.ts +1 -1
  636. package/dist/components/features/mcp-page/save-as-secret-toggle.d.ts +1 -1
  637. package/dist/components/features/onboarding/onboarding-host.d.ts +1 -1
  638. package/dist/components/features/onboarding/onboarding-modal.d.ts +2 -1
  639. package/dist/components/features/onboarding/onboarding-progress-bar.d.ts +1 -1
  640. package/dist/components/features/onboarding/steps/check-backend-step.d.ts +2 -1
  641. package/dist/components/features/onboarding/steps/choose-agent-step.d.ts +3 -2
  642. package/dist/components/features/onboarding/steps/say-hello-step.d.ts +2 -1
  643. package/dist/components/features/onboarding/steps/setup-acp-secrets-step.d.ts +2 -1
  644. package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +2 -1
  645. package/dist/components/features/plugins/add-plugin-modal.d.ts +2 -1
  646. package/dist/components/features/plugins/plugin-card.d.ts +2 -1
  647. package/dist/components/features/plugins/plugin-detail-modal.d.ts +1 -1
  648. package/dist/components/features/plugins/plugin-files-section.d.ts +2 -1
  649. package/dist/components/features/plugins/plugin-picker-card.d.ts +1 -1
  650. package/dist/components/features/plugins/plugin-picker-modal.d.ts +1 -1
  651. package/dist/components/features/plugins/plugin-picker-trigger.d.ts +1 -1
  652. package/dist/components/features/plugins/plugin-picker.d.ts +1 -1
  653. package/dist/components/features/plugins/plugins-toolbar.d.ts +1 -1
  654. package/dist/components/features/settings/acp-auth-status-banner.d.ts +1 -1
  655. package/dist/components/features/settings/acp-conflict-warnings.d.ts +2 -1
  656. package/dist/components/features/settings/acp-credentials-section.d.ts +1 -1
  657. package/dist/components/features/settings/acp-secret-field.d.ts +2 -1
  658. package/dist/components/features/settings/agent-canvas-update-card.d.ts +1 -1
  659. package/dist/components/features/settings/agent-profiles/agent-profile-actions-menu.d.ts +1 -1
  660. package/dist/components/features/settings/agent-profiles/agent-profile-row.d.ts +1 -1
  661. package/dist/components/features/settings/agent-profiles/agent-profiles-body.d.ts +1 -1
  662. package/dist/components/features/settings/agent-profiles/agent-profiles-local-view.d.ts +1 -1
  663. package/dist/components/features/settings/agent-profiles/agent-profiles-manager.d.ts +1 -1
  664. package/dist/components/features/settings/agent-profiles/delete-agent-profile-modal.d.ts +1 -1
  665. package/dist/components/features/settings/agent-server-onboarding.d.ts +2 -1
  666. package/dist/components/features/settings/api-key-modal-base.d.ts +1 -1
  667. package/dist/components/features/settings/app-settings/app-settings-inputs-skeleton.d.ts +1 -1
  668. package/dist/components/features/settings/app-settings/language-input.d.ts +1 -1
  669. package/dist/components/features/settings/app-settings/theme-input.d.ts +2 -1
  670. package/dist/components/features/settings/backend-synced-settings-badge.d.ts +1 -1
  671. package/dist/components/features/settings/banner-message.d.ts +1 -1
  672. package/dist/components/features/settings/cloud-settings-link.d.ts +1 -1
  673. package/dist/components/features/settings/input-skeleton.d.ts +1 -1
  674. package/dist/components/features/settings/integrations-settings-link.d.ts +1 -1
  675. package/dist/components/features/settings/key-status-icon.d.ts +1 -1
  676. package/dist/components/features/settings/llm-profiles/delete-profile-modal.d.ts +1 -1
  677. package/dist/components/features/settings/llm-profiles/llm-profiles-manager.d.ts +1 -1
  678. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.d.ts +2 -1
  679. package/dist/components/features/settings/llm-profiles/profile-actions-menu-item.d.ts +1 -1
  680. package/dist/components/features/settings/llm-profiles/profile-actions-menu.d.ts +1 -1
  681. package/dist/components/features/settings/llm-profiles/profile-row.d.ts +1 -1
  682. package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +1 -1
  683. package/dist/components/features/settings/llm-profiles/rename-profile-modal.d.ts +1 -1
  684. package/dist/components/features/settings/llm-settings/llm-settings-inputs-skeleton.d.ts +1 -1
  685. package/dist/components/features/settings/llm-settings/openai-subscription-auth-card.d.ts +2 -1
  686. package/dist/components/features/settings/mcp-settings/mcp-server-form.cjs +1 -1
  687. package/dist/components/features/settings/mcp-settings/mcp-server-form.cjs.map +1 -1
  688. package/dist/components/features/settings/mcp-settings/mcp-server-form.d.ts +2 -1
  689. package/dist/components/features/settings/mcp-settings/mcp-server-form.js +2 -1
  690. package/dist/components/features/settings/mcp-settings/mcp-server-form.js.map +1 -1
  691. package/dist/components/features/settings/mcp-settings/mcp-server-list-item.d.ts +1 -1
  692. package/dist/components/features/settings/mcp-settings/mcp-server-list.d.ts +1 -1
  693. package/dist/components/features/settings/mobile-header.d.ts +1 -1
  694. package/dist/components/features/settings/optional-tag.d.ts +1 -1
  695. package/dist/components/features/settings/sdk-settings/field-help.d.ts +1 -1
  696. package/dist/components/features/settings/sdk-settings/schema-field.d.ts +2 -1
  697. package/dist/components/features/settings/sdk-settings/sdk-section-page.d.ts +1 -1
  698. package/dist/components/features/settings/sdk-settings/view-toggle.d.ts +1 -1
  699. package/dist/components/features/settings/secrets-settings/secret-form.d.ts +2 -1
  700. package/dist/components/features/settings/secrets-settings/secret-list-item.d.ts +2 -2
  701. package/dist/components/features/settings/settings-desktop-sidebar.d.ts +1 -1
  702. package/dist/components/features/settings/settings-dropdown-input.d.ts +1 -1
  703. package/dist/components/features/settings/settings-layout.d.ts +1 -1
  704. package/dist/components/features/settings/settings-mobile-drawer.d.ts +1 -1
  705. package/dist/components/features/settings/settings-mobile-hub.d.ts +1 -1
  706. package/dist/components/features/settings/settings-nav-divider.d.ts +1 -1
  707. package/dist/components/features/settings/settings-nav-header.d.ts +1 -1
  708. package/dist/components/features/settings/settings-nav-link.d.ts +1 -1
  709. package/dist/components/features/settings/settings-navigation.d.ts +1 -1
  710. package/dist/components/features/settings/settings-switch.d.ts +1 -1
  711. package/dist/components/features/settings/subtext-skeleton.d.ts +1 -1
  712. package/dist/components/features/settings/switch-skeleton.d.ts +1 -1
  713. package/dist/components/features/settings/upgrade-banner.d.ts +1 -1
  714. package/dist/components/features/settings/upgrade-button.d.ts +1 -1
  715. package/dist/components/features/sidebar/avatar.d.ts +1 -1
  716. package/dist/components/features/sidebar/sidebar-collapsed-icon-slot.d.ts +1 -1
  717. package/dist/components/features/sidebar/sidebar-conversation-list.d.ts +1 -1
  718. package/dist/components/features/sidebar/sidebar-mobile-menu-bar.d.ts +1 -1
  719. package/dist/components/features/sidebar/sidebar-mobile-menu-toggle.d.ts +1 -1
  720. package/dist/components/features/sidebar/sidebar-mobile-nav-context.d.ts +1 -1
  721. package/dist/components/features/sidebar/sidebar-nav-link.d.ts +1 -1
  722. package/dist/components/features/sidebar/sidebar-rail-body.d.ts +1 -1
  723. package/dist/components/features/sidebar/sidebar.d.ts +2 -1
  724. package/dist/components/features/sidebar/user-avatar.d.ts +1 -1
  725. package/dist/components/features/skills/add-skill-modal.d.ts +2 -1
  726. package/dist/components/features/skills/extensions-mobile-hub.d.ts +1 -1
  727. package/dist/components/features/skills/extensions-navigation.d.ts +1 -1
  728. package/dist/components/features/skills/skill-card-pill-row.d.ts +1 -1
  729. package/dist/components/features/skills/skill-card.d.ts +2 -1
  730. package/dist/components/features/skills/skill-detail-modal.d.ts +2 -1
  731. package/dist/components/features/skills/skill-facet-rail.d.ts +8 -0
  732. package/dist/components/features/skills/skill-facet-row.d.ts +13 -0
  733. package/dist/components/features/skills/skill-filter.d.ts +34 -0
  734. package/dist/components/features/skills/skill-filters-modal.d.ts +10 -0
  735. package/dist/components/features/skills/skill-icon-badge.d.ts +1 -1
  736. package/dist/components/features/skills/skill-type-badge.d.ts +1 -1
  737. package/dist/components/features/skills/skills-toolbar.d.ts +3 -4
  738. package/dist/components/features/suggestions/suggestion-item.d.ts +1 -1
  739. package/dist/components/features/suggestions/suggestions.d.ts +1 -1
  740. package/dist/components/features/terminal/empty-terminal-message.d.ts +1 -1
  741. package/dist/components/features/terminal/terminal.d.ts +1 -1
  742. package/dist/components/features/tips/random-tip.d.ts +2 -1
  743. package/dist/components/providers/agent-server-ui-providers.d.ts +1 -1
  744. package/dist/components/providers/agent-server-ui-root.d.ts +1 -1
  745. package/dist/components/providers/telemetry-provider.d.ts +1 -1
  746. package/dist/components/shared/action-tooltip.d.ts +1 -1
  747. package/dist/components/shared/agent-brand-icon.d.ts +1 -1
  748. package/dist/components/shared/badge.d.ts +1 -1
  749. package/dist/components/shared/buttons/back-nav-button-content.d.ts +1 -1
  750. package/dist/components/shared/buttons/circle-plus-check-toggle.d.ts +3 -2
  751. package/dist/components/shared/buttons/conversation-confirmation-buttons.d.ts +1 -1
  752. package/dist/components/shared/buttons/copy-to-clipboard-button.d.ts +1 -1
  753. package/dist/components/shared/buttons/copyable-content-wrapper.d.ts +1 -1
  754. package/dist/components/shared/buttons/modal-button.d.ts +1 -1
  755. package/dist/components/shared/buttons/openhands-logo-button.d.ts +1 -1
  756. package/dist/components/shared/buttons/remove-button.d.ts +1 -1
  757. package/dist/components/shared/buttons/scroll-to-bottom-button.d.ts +1 -1
  758. package/dist/components/shared/buttons/styled-tooltip.d.ts +1 -1
  759. package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
  760. package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
  761. package/dist/components/shared/filters/enum-filter-dropdown.d.ts +6 -2
  762. package/dist/components/shared/filters/enum-filter-dropdown.js +13 -13
  763. package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
  764. package/dist/components/shared/git-provider-icon.d.ts +1 -1
  765. package/dist/components/shared/hook-execution-event-message.d.ts +2 -1
  766. package/dist/components/shared/loading-spinner.d.ts +1 -1
  767. package/dist/components/shared/modals/confirmation-modal.d.ts +1 -1
  768. package/dist/components/shared/modals/confirmation-modals/base-modal.d.ts +3 -3
  769. package/dist/components/shared/modals/confirmation-modals/danger-modal.d.ts +1 -1
  770. package/dist/components/shared/modals/modal-body.d.ts +1 -1
  771. package/dist/components/shared/modals/modal-close-button.d.ts +1 -1
  772. package/dist/components/shared/modals/settings/model-selector.d.ts +2 -1
  773. package/dist/components/shared/modals/settings/settings-form.d.ts +2 -1
  774. package/dist/components/shared/modals/settings/settings-modal.d.ts +1 -1
  775. package/dist/components/shared/navigation-link.cjs +1 -1
  776. package/dist/components/shared/navigation-link.cjs.map +1 -1
  777. package/dist/components/shared/navigation-link.js +11 -7
  778. package/dist/components/shared/navigation-link.js.map +1 -1
  779. package/dist/components/shared/risk-alert.d.ts +1 -1
  780. package/dist/components/shared/text-shimmer.d.ts +1 -1
  781. package/dist/components/ui/resize-handle.d.ts +1 -1
  782. package/dist/config/defaults.cjs +1 -1
  783. package/dist/config/defaults.cjs.map +1 -1
  784. package/dist/config/defaults.js +3 -3
  785. package/dist/config/defaults.js.map +1 -1
  786. package/dist/context/navigation-context.d.ts +1 -1
  787. package/dist/context/scroll-context.d.ts +1 -1
  788. package/dist/contexts/active-backend-context.d.ts +1 -1
  789. package/dist/contexts/conversation-websocket-context.d.ts +1 -1
  790. package/dist/contexts/settings-section-header-context.d.ts +1 -1
  791. package/dist/contexts/websocket-provider-wrapper.d.ts +1 -1
  792. package/dist/fixtures/home-automations-demo.d.ts +19 -0
  793. package/dist/hooks/mutation/use-add-mcp-server.cjs +1 -1
  794. package/dist/hooks/mutation/use-add-mcp-server.cjs.map +1 -1
  795. package/dist/hooks/mutation/use-add-mcp-server.js +10 -14
  796. package/dist/hooks/mutation/use-add-mcp-server.js.map +1 -1
  797. package/dist/hooks/mutation/use-delete-mcp-server.cjs +1 -1
  798. package/dist/hooks/mutation/use-delete-mcp-server.cjs.map +1 -1
  799. package/dist/hooks/mutation/use-delete-mcp-server.d.ts +2 -7
  800. package/dist/hooks/mutation/use-delete-mcp-server.js +8 -34
  801. package/dist/hooks/mutation/use-delete-mcp-server.js.map +1 -1
  802. package/dist/hooks/mutation/use-save-settings.cjs +1 -1
  803. package/dist/hooks/mutation/use-save-settings.cjs.map +1 -1
  804. package/dist/hooks/mutation/use-save-settings.js +8 -4
  805. package/dist/hooks/mutation/use-save-settings.js.map +1 -1
  806. package/dist/hooks/mutation/use-update-mcp-server.cjs +1 -1
  807. package/dist/hooks/mutation/use-update-mcp-server.cjs.map +1 -1
  808. package/dist/hooks/mutation/use-update-mcp-server.d.ts +1 -1
  809. package/dist/hooks/mutation/use-update-mcp-server.js +31 -16
  810. package/dist/hooks/mutation/use-update-mcp-server.js.map +1 -1
  811. package/dist/hooks/query/use-active-conversation.d.ts +1 -1
  812. package/dist/hooks/query/use-agent-profiles.d.ts +1 -1
  813. package/dist/hooks/query/use-app-installations.d.ts +1 -1
  814. package/dist/hooks/query/use-automation-detail.d.ts +2 -2
  815. package/dist/hooks/query/use-automation-health.d.ts +2 -0
  816. package/dist/hooks/query/use-automations.d.ts +5 -1
  817. package/dist/hooks/query/use-bash-command-logs.d.ts +1 -1
  818. package/dist/hooks/query/use-cloud-sandbox.d.ts +1 -1
  819. package/dist/hooks/query/use-commit-changes.d.ts +1 -1
  820. package/dist/hooks/query/use-config.d.ts +1 -1
  821. package/dist/hooks/query/use-conversation-history.d.ts +1 -1
  822. package/dist/hooks/query/use-conversation-hooks.d.ts +1 -1
  823. package/dist/hooks/query/use-conversation-skills.d.ts +1 -1
  824. package/dist/hooks/query/use-get-secrets.d.ts +1 -1
  825. package/dist/hooks/query/use-home-automations.d.ts +20 -0
  826. package/dist/hooks/query/use-latest-automation-runs.d.ts +19 -0
  827. package/dist/hooks/query/use-llm-profiles.d.ts +1 -1
  828. package/dist/hooks/query/use-llm-subscription-models.d.ts +1 -1
  829. package/dist/hooks/query/use-llm-subscription-status.d.ts +1 -1
  830. package/dist/hooks/query/use-local-git-info.d.ts +1 -1
  831. package/dist/hooks/query/use-local-workspaces.d.ts +1 -1
  832. package/dist/hooks/query/use-manifest-capabilities.d.ts +2 -0
  833. package/dist/hooks/query/use-plugin-file-content.d.ts +1 -1
  834. package/dist/hooks/query/use-plugins-marketplace.d.ts +1 -1
  835. package/dist/hooks/query/use-provider-models.d.ts +1 -1
  836. package/dist/hooks/query/use-search-branches.d.ts +1 -1
  837. package/dist/hooks/query/use-search-providers.d.ts +1 -1
  838. package/dist/hooks/query/use-search-repositories.d.ts +1 -1
  839. package/dist/hooks/query/use-search-subdirs.d.ts +2 -2
  840. package/dist/hooks/query/use-settings.d.ts +2 -2
  841. package/dist/hooks/query/use-skills.d.ts +1 -1
  842. package/dist/hooks/query/use-start-tasks.d.ts +1 -1
  843. package/dist/hooks/query/use-sub-conversation-task-polling.d.ts +1 -1
  844. package/dist/hooks/query/use-sub-conversations.d.ts +1 -1
  845. package/dist/hooks/query/use-suggested-tasks.d.ts +1 -1
  846. package/dist/hooks/query/use-task-polling.d.ts +2 -2
  847. package/dist/hooks/query/use-unified-get-git-changes.d.ts +1 -1
  848. package/dist/hooks/query/use-unified-git-diff.d.ts +1 -1
  849. package/dist/hooks/query/use-user-conversation.d.ts +1 -1
  850. package/dist/hooks/query/use-workspace-file-content.d.ts +1 -1
  851. package/dist/hooks/use-backend-scoped-path.cjs +2 -0
  852. package/dist/hooks/use-backend-scoped-path.cjs.map +1 -0
  853. package/dist/hooks/use-backend-scoped-path.d.ts +10 -0
  854. package/dist/hooks/use-backend-scoped-path.js +13 -0
  855. package/dist/hooks/use-backend-scoped-path.js.map +1 -0
  856. package/dist/hooks/use-home-automation-actions.d.ts +23 -0
  857. package/dist/hooks/use-home-pinned-automations.d.ts +26 -0
  858. package/dist/hooks/use-tracking.cjs +1 -1
  859. package/dist/hooks/use-tracking.cjs.map +1 -1
  860. package/dist/hooks/use-tracking.d.ts +4 -0
  861. package/dist/hooks/use-tracking.js +6 -0
  862. package/dist/hooks/use-tracking.js.map +1 -1
  863. package/dist/i18n/declaration.cjs +1 -1
  864. package/dist/i18n/declaration.cjs.map +1 -1
  865. package/dist/i18n/declaration.d.ts +68 -2
  866. package/dist/i18n/declaration.js +1 -1
  867. package/dist/i18n/declaration.js.map +1 -1
  868. package/dist/i18n/translation.cjs +2 -2
  869. package/dist/i18n/translation.cjs.map +1 -1
  870. package/dist/i18n/translation.js +1169 -47
  871. package/dist/i18n/translation.js.map +1 -1
  872. package/dist/icons/code-pill.d.ts +1 -1
  873. package/dist/locales/ar/openhands.json +70 -4
  874. package/dist/locales/ca/openhands.json +70 -4
  875. package/dist/locales/de/openhands.json +70 -4
  876. package/dist/locales/en/openhands.json +70 -4
  877. package/dist/locales/es/openhands.json +70 -4
  878. package/dist/locales/fr/openhands.json +70 -4
  879. package/dist/locales/it/openhands.json +70 -4
  880. package/dist/locales/ja/openhands.json +70 -4
  881. package/dist/locales/ko-KR/openhands.json +70 -4
  882. package/dist/locales/no/openhands.json +70 -4
  883. package/dist/locales/pt/openhands.json +70 -4
  884. package/dist/locales/tr/openhands.json +70 -4
  885. package/dist/locales/uk/openhands.json +70 -4
  886. package/dist/locales/zh-CN/openhands.json +70 -4
  887. package/dist/locales/zh-TW/openhands.json +70 -4
  888. package/dist/manifests/automation-insights.d.ts +64 -0
  889. package/dist/manifests/automation-interface.cjs +1 -1
  890. package/dist/manifests/automation-interface.cjs.map +1 -1
  891. package/dist/manifests/automation-interface.d.ts +33 -1
  892. package/dist/manifests/automation-interface.js +2 -1
  893. package/dist/manifests/automation-interface.js.map +1 -1
  894. package/dist/manifests/interface-validation.cjs +1 -1
  895. package/dist/manifests/interface-validation.cjs.map +1 -1
  896. package/dist/manifests/interface-validation.js +228 -50
  897. package/dist/manifests/interface-validation.js.map +1 -1
  898. package/dist/manifests/manifest-template.d.ts +2 -0
  899. package/dist/manifests/manifest-validation.cjs.map +1 -1
  900. package/dist/manifests/manifest-validation.js.map +1 -1
  901. package/dist/manifests/types.cjs +1 -1
  902. package/dist/manifests/types.cjs.map +1 -1
  903. package/dist/manifests/types.d.ts +128 -0
  904. package/dist/manifests/types.js +35 -2
  905. package/dist/manifests/types.js.map +1 -1
  906. package/dist/mockServiceWorker.js +21 -9
  907. package/dist/node_modules/@openhands/extensions/automations/catalog/upstream-fork-sync/manifest.cjs +9 -0
  908. package/dist/node_modules/@openhands/extensions/automations/catalog/upstream-fork-sync/manifest.cjs.map +1 -0
  909. package/dist/node_modules/@openhands/extensions/automations/catalog/upstream-fork-sync/manifest.js +74 -0
  910. package/dist/node_modules/@openhands/extensions/automations/catalog/upstream-fork-sync/manifest.js.map +1 -0
  911. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs +1 -1
  912. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -1
  913. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +6 -4
  914. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -1
  915. package/dist/node_modules/@openhands/extensions/automations/interface.cjs +1 -1
  916. package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -1
  917. package/dist/node_modules/@openhands/extensions/automations/interface.js +126 -5
  918. package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -1
  919. package/dist/node_modules/@openhands/extensions/skills/index.cjs +161 -53
  920. package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
  921. package/dist/node_modules/@openhands/extensions/skills/index.js +112 -50
  922. package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
  923. package/dist/node_modules/@tanstack/query-core/build/modern/utils.cjs +1 -1
  924. package/dist/node_modules/@tanstack/query-core/build/modern/utils.cjs.map +1 -1
  925. package/dist/node_modules/@tanstack/query-core/build/modern/utils.js +12 -1
  926. package/dist/node_modules/@tanstack/query-core/build/modern/utils.js.map +1 -1
  927. package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.cjs +1 -1
  928. package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.cjs.map +1 -1
  929. package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js +14 -12
  930. package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js.map +1 -1
  931. package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.cjs +2 -0
  932. package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.cjs.map +1 -0
  933. package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.js +177 -0
  934. package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.js.map +1 -0
  935. package/dist/node_modules/i18next/dist/esm/i18next.cjs +1 -1
  936. package/dist/node_modules/i18next/dist/esm/i18next.cjs.map +1 -1
  937. package/dist/node_modules/i18next/dist/esm/i18next.js +31 -24
  938. package/dist/node_modules/i18next/dist/esm/i18next.js.map +1 -1
  939. package/dist/node_modules/posthog-js/dist/module.cjs +2 -2
  940. package/dist/node_modules/posthog-js/dist/module.cjs.map +1 -1
  941. package/dist/node_modules/posthog-js/dist/module.js +2055 -1929
  942. package/dist/node_modules/posthog-js/dist/module.js.map +1 -1
  943. package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.cjs +1 -1
  944. package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.cjs.map +1 -1
  945. package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.js +43 -62
  946. package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.js.map +1 -1
  947. package/dist/node_modules/react-i18next/dist/es/useTranslation.cjs +1 -1
  948. package/dist/node_modules/react-i18next/dist/es/useTranslation.cjs.map +1 -1
  949. package/dist/node_modules/react-i18next/dist/es/useTranslation.js +12 -6
  950. package/dist/node_modules/react-i18next/dist/es/useTranslation.js.map +1 -1
  951. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.cjs +1 -1
  952. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.cjs.map +1 -1
  953. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +352 -310
  954. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -1
  955. package/dist/package.cjs +1 -1
  956. package/dist/package.cjs.map +1 -1
  957. package/dist/package.js +34 -33
  958. package/dist/package.js.map +1 -1
  959. package/dist/routes/agent-settings.d.ts +3 -2
  960. package/dist/routes/app-settings.d.ts +2 -1
  961. package/dist/routes/browser-tab.d.ts +1 -1
  962. package/dist/routes/changes-tab.d.ts +2 -1
  963. package/dist/routes/commits-tab.d.ts +1 -1
  964. package/dist/routes/conversation.d.ts +2 -1
  965. package/dist/routes/files-tab.d.ts +1 -1
  966. package/dist/routes/llm-settings.d.ts +3 -2
  967. package/dist/routes/mcp.cjs +1 -1
  968. package/dist/routes/mcp.cjs.map +1 -1
  969. package/dist/routes/mcp.d.ts +2 -1
  970. package/dist/routes/mcp.js +1 -1
  971. package/dist/routes/mcp.js.map +1 -1
  972. package/dist/routes/planner-tab.d.ts +2 -1
  973. package/dist/routes/secrets-settings.d.ts +2 -1
  974. package/dist/routes/task-list-tab.d.ts +1 -1
  975. package/dist/services/settings.cjs +1 -1
  976. package/dist/services/settings.cjs.map +1 -1
  977. package/dist/services/settings.js +3 -7
  978. package/dist/services/settings.js.map +1 -1
  979. package/dist/types/automation.d.ts +16 -1
  980. package/dist/types/mcp-auth.cjs.map +1 -1
  981. package/dist/types/mcp-auth.d.ts +5 -41
  982. package/dist/types/mcp-auth.js.map +1 -1
  983. package/dist/types/mcp-server.d.ts +17 -32
  984. package/dist/types/settings.d.ts +8 -28
  985. package/dist/ui/card-title.d.ts +1 -1
  986. package/dist/ui/card.d.ts +1 -1
  987. package/dist/ui/combobox-caret.d.ts +3 -3
  988. package/dist/ui/context-menu.cjs +1 -1
  989. package/dist/ui/context-menu.cjs.map +1 -1
  990. package/dist/ui/context-menu.d.ts +3 -2
  991. package/dist/ui/context-menu.js +10 -9
  992. package/dist/ui/context-menu.js.map +1 -1
  993. package/dist/ui/divider.d.ts +1 -1
  994. package/dist/ui/dropdown/clear-button.d.ts +1 -1
  995. package/dist/ui/dropdown/dropdown-input.d.ts +1 -1
  996. package/dist/ui/dropdown/dropdown-menu.d.ts +1 -1
  997. package/dist/ui/dropdown/dropdown.d.ts +1 -1
  998. package/dist/ui/dropdown/loading-spinner.d.ts +1 -1
  999. package/dist/ui/dropdown/toggle-button.d.ts +1 -1
  1000. package/dist/ui/help-link.d.ts +1 -1
  1001. package/dist/ui/pre.d.ts +1 -1
  1002. package/dist/ui/toggle-switch.d.ts +2 -2
  1003. package/dist/ui/typography.d.ts +7 -7
  1004. package/dist/utils/automation-activity-log-export.d.ts +17 -0
  1005. package/dist/utils/automation-timeout.d.ts +4 -6
  1006. package/dist/utils/custom-toast-handlers.d.ts +2 -2
  1007. package/dist/utils/format-relative-time.d.ts +3 -0
  1008. package/dist/utils/mcp-config.cjs +1 -1
  1009. package/dist/utils/mcp-config.cjs.map +1 -1
  1010. package/dist/utils/mcp-config.d.ts +12 -29
  1011. package/dist/utils/mcp-config.js +161 -143
  1012. package/dist/utils/mcp-config.js.map +1 -1
  1013. package/dist/utils/mcp-installed-servers.cjs +1 -1
  1014. package/dist/utils/mcp-installed-servers.cjs.map +1 -1
  1015. package/dist/utils/mcp-installed-servers.d.ts +2 -2
  1016. package/dist/utils/mcp-installed-servers.js +21 -32
  1017. package/dist/utils/mcp-installed-servers.js.map +1 -1
  1018. package/dist/utils/mcp-server-health-key.cjs.map +1 -1
  1019. package/dist/utils/mcp-server-health-key.d.ts +2 -4
  1020. package/dist/utils/mcp-server-health-key.js.map +1 -1
  1021. package/dist/utils/settings-like-page-layout-classes.cjs +1 -1
  1022. package/dist/utils/settings-like-page-layout-classes.cjs.map +1 -1
  1023. package/dist/utils/settings-like-page-layout-classes.d.ts +6 -2
  1024. package/dist/utils/settings-like-page-layout-classes.js +1 -1
  1025. package/dist/utils/settings-like-page-layout-classes.js.map +1 -1
  1026. package/dist/utils/skill-category.d.ts +12 -0
  1027. package/package.json +36 -33
  1028. package/scripts/check-sdk-version-sync.mjs +6 -6
  1029. package/scripts/dev-safe.mjs +2 -2
  1030. package/scripts/dev-with-automation.mjs +3 -2
  1031. package/build/assets/Trans-Bwpzk1wT.js +0 -1
  1032. package/build/assets/active-backend-context-BiwzkzDy.js +0 -2
  1033. package/build/assets/agent-context-settings-DXNT_dcw.js +0 -1
  1034. package/build/assets/agent-server-conversation-service.api-CYSWw-2g.js +0 -41
  1035. package/build/assets/agent-settings-BjgQQe-_.js +0 -1
  1036. package/build/assets/alert-banner-DR8EVyZM.js +0 -1
  1037. package/build/assets/api-error-message-e16L1kwH.js +0 -1
  1038. package/build/assets/automation-detail-DY6x2FW1.js +0 -2
  1039. package/build/assets/automation-export-C09f-Lua.js +0 -2
  1040. package/build/assets/automation-setup-route-CqKp0717.js +0 -1
  1041. package/build/assets/automations-list-CqWJ7qXW.js +0 -1
  1042. package/build/assets/check-CPLXgluF.js +0 -1
  1043. package/build/assets/chevron-down-CP4QHvyc.js +0 -1
  1044. package/build/assets/circle-check-Dpy2_xSI.js +0 -1
  1045. package/build/assets/command-menu-Bj6X4ckE.js +0 -1
  1046. package/build/assets/condenser-settings-EAXQNR2E.js +0 -1
  1047. package/build/assets/context-menu-list-item-CrCrYuPF.js +0 -1
  1048. package/build/assets/conversation-BzyIcSwr.js +0 -1
  1049. package/build/assets/conversation-panel-BzyIcSwr.js +0 -1
  1050. package/build/assets/entry.client-BbIYOsIg.js +0 -2
  1051. package/build/assets/enum-filter-dropdown-C08-srev.js +0 -1
  1052. package/build/assets/files-tab-DEq8MbHu.js +0 -1
  1053. package/build/assets/format-time-delta-CxfPJpzC.js +0 -1
  1054. package/build/assets/git-repo-dropdown-9WKINV6J.js +0 -1
  1055. package/build/assets/home-CY0JaxiY.js +0 -1
  1056. package/build/assets/home-CaNWlVvB.js +0 -1
  1057. package/build/assets/index-home-CaNWlVvB.js +0 -1
  1058. package/build/assets/info-CmWQXtRQ.js +0 -1
  1059. package/build/assets/install-server-modal-BWrudmZU.js +0 -1
  1060. package/build/assets/llm-not-configured-banner-3tMsM4K6.js +0 -27
  1061. package/build/assets/llm-settings-D0W8mJDk.js +0 -1
  1062. package/build/assets/loader-circle-B4QDBARx.js +0 -1
  1063. package/build/assets/manifest-39f4789d.js +0 -1
  1064. package/build/assets/mcp-DXG9LWrI.js +0 -9
  1065. package/build/assets/mcp-marketplace-utils-DFmhKc5s.js +0 -1
  1066. package/build/assets/messages-kBjKaAeA.js +0 -40
  1067. package/build/assets/navigation-link-Bxmn-pCs.js +0 -1
  1068. package/build/assets/onboarding-47hh2IHA.js +0 -1
  1069. package/build/assets/onboarding-modal-9BuvvROo.js +0 -1
  1070. package/build/assets/plus-DrKuuvMe.js +0 -1
  1071. package/build/assets/recommended-automations-launcher-ejxy1P27.js +0 -1
  1072. package/build/assets/root-5S-M8SYa.js +0 -2
  1073. package/build/assets/root-DZ39lS5f.css +0 -1
  1074. package/build/assets/root-layout-BPqoa0gv.js +0 -3
  1075. package/build/assets/search-Dc2qR4O2.js +0 -1
  1076. package/build/assets/settings-Chfn5xTD.js +0 -1
  1077. package/build/assets/settings-like-page-layout-classes-DyxyJ0k4.js +0 -1
  1078. package/build/assets/settings-service.api-CZiPD8__.js +0 -1
  1079. package/build/assets/sidebar-mobile-menu-toggle-ND-hgygu.js +0 -1
  1080. package/build/assets/skills-settings-B43KArIz.js +0 -2
  1081. package/build/assets/use-is-authed-BT7Iud4U.js +0 -1
  1082. package/build/assets/use-llm-profiles-2Wc2db8u.js +0 -1
  1083. package/build/assets/use-save-agent-profile-D0wC5ExW.js +0 -1
  1084. package/build/assets/use-skills-CE6miQ3r.js +0 -1
  1085. package/build/assets/use-tracking-BGboadaZ.js +0 -68
  1086. package/build/assets/useQuery-DiPh8LRJ.js +0 -1
  1087. package/build/assets/utils-BgGG1znF.js +0 -1
  1088. package/build/assets/v4-DDdyfk2q.js +0 -1
  1089. package/build/assets/vendor~browser-IVYgIgG1.js +0 -47
  1090. package/build/assets/vendor~entry.client-CXM9oiAk.js +0 -1
  1091. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~d4by102p-C2f0ZhS-.js +0 -26
  1092. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~emdr2jt4-BrmgjeOw.js +0 -1
  1093. package/build/assets/vendor~module-BZXjBMvd.js +0 -2
  1094. package/build/assets/x-omAzpXkl.js +0 -1
  1095. package/dist/components/features/skills/skill-type-filter.d.ts +0 -3
  1096. package/dist/components/features/skills/skills-type-filter-dropdown.d.ts +0 -7
  1097. package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.cjs +0 -2
  1098. package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.cjs.map +0 -1
  1099. package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.js +0 -81
  1100. package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.js.map +0 -1
  1101. package/dist/node_modules/void-elements/index.cjs +0 -2
  1102. package/dist/node_modules/void-elements/index.cjs.map +0 -1
  1103. package/dist/node_modules/void-elements/index.js +0 -25
  1104. package/dist/node_modules/void-elements/index.js.map +0 -1
  1105. /package/build/assets/{vendor~root-layout~index-home~home~mcp~automations-list~automation-setup-route~onboarding-modal-D7IDevqN.js → vendor~root-layout~index-home~home~mcp~automations-list~automation-templates~automation-set~bxsimjx0-D7IDevqN.js} +0 -0
package/README.md CHANGED
@@ -96,7 +96,7 @@ docker run -it --rm \
96
96
  -p 8000:8000 \
97
97
  -v "$HOME/.openhands:/home/openhands/.openhands" \
98
98
  -v "${PROJECTS_PATH}:/projects" \
99
- ghcr.io/openhands/agent-canvas:1.9.0 # x-release-please-version
99
+ ghcr.io/openhands/agent-canvas:1.10.0 # x-release-please-version
100
100
  ```
101
101
 
102
102
  **Windows (PowerShell / Windows Terminal):** See [README.windows.md](./README.windows.md) for the equivalent commands.
package/README.windows.md CHANGED
@@ -12,7 +12,7 @@ For the main install options and overall context, see [README.md](./README.md).
12
12
  - A host directory for `PROJECTS_PATH` containing the project folders you want the agent to access (create it before starting the container)
13
13
 
14
14
  ```powershell
15
- docker pull ghcr.io/openhands/agent-canvas:1.9.0 # x-release-please-version
15
+ docker pull ghcr.io/openhands/agent-canvas:1.10.0 # x-release-please-version
16
16
 
17
17
  $env:PROJECTS_PATH = Join-Path $HOME "projects" # directory containing your project folders
18
18
  New-Item -ItemType Directory -Force -Path $env:PROJECTS_PATH, (Join-Path $env:USERPROFILE ".openhands") | Out-Null
@@ -21,7 +21,7 @@ docker run -it --rm `
21
21
  -p 8000:8000 `
22
22
  -v "$($env:USERPROFILE)\.openhands:/home/openhands/.openhands" `
23
23
  -v "$($env:PROJECTS_PATH):/projects" `
24
- ghcr.io/openhands/agent-canvas:1.9.0 # x-release-please-version
24
+ ghcr.io/openhands/agent-canvas:1.10.0 # x-release-please-version
25
25
  ```
26
26
 
27
27
  Open [http://localhost:8000/canvas](http://localhost:8000/canvas) in your browser.
@@ -1 +1 @@
1
- import{z as e}from"./utils-BgGG1znF.js";import{n as t}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~dfc8ddxy-tTyxnjXT.js";var n=`cli-generic`;function r(e){if(typeof e!=`string`)return null;let t=e.trim();return!t||t===`acp-managed`?null:t}function i(e){for(let t of[e.runtimeName,e.runtimeId,e.configured,e.sdkLlm]){let e=r(t);if(e)return e}return e.providerDefault??null}var a={"claude-code":{icon:`claude-code`,description_key:e.ONBOARDING$AGENT_CLAUDE_CODE_DESCRIPTION},codex:{icon:`codex`,description_key:e.ONBOARDING$AGENT_CODEX_DESCRIPTION},"gemini-cli":{icon:`gemini`,description_key:e.ONBOARDING$AGENT_GEMINI_CLI_DESCRIPTION}},o=Object.entries(a).map(([e,n])=>{let r=t(e);return{key:e,display_name:r?.display_name??e,default_command:r?[...r.default_command]:[],available_models:r?.available_models?.map(e=>({id:e.id,label:e.label})),default_model:r?.default_model??void 0,description_key:n.description_key,icon:n.icon}}),s=`custom`,c={codex:[{name:`CODEX_AUTH_JSON`,secret:!0,multiline:!0,hint_key:e.ONBOARDING$ACP_SECRET_FILE_BLOB_HINT,hint_values:{file:`~/.codex/auth.json`}}],"claude-code":[{name:`CLAUDE_CODE_OAUTH_TOKEN`,secret:!0,hint_key:e.ONBOARDING$ACP_SECRET_OAUTH_TOKEN_HINT}],"gemini-cli":[{name:`GOOGLE_APPLICATION_CREDENTIALS_JSON`,secret:!0,multiline:!0,hint_key:e.ONBOARDING$ACP_SECRET_FILE_BLOB_HINT,hint_values:{file:`~/.config/gcloud/application_default_credentials.json`}},{name:`GOOGLE_CLOUD_PROJECT`,hint_key:e.ONBOARDING$ACP_SECRET_GCP_PROJECT_HINT},{name:`GOOGLE_CLOUD_LOCATION`,hint_key:e.ONBOARDING$ACP_SECRET_GCP_LOCATION_HINT},{name:`GOOGLE_GENAI_USE_VERTEXAI`,hint_key:e.ONBOARDING$ACP_SECRET_VERTEXAI_FLAG_HINT}]},l={"claude-code":[[`CLAUDE_CODE_OAUTH_TOKEN`,`ANTHROPIC_API_KEY`],[`CLAUDE_CODE_OAUTH_TOKEN`,`ANTHROPIC_BASE_URL`]]};function u(e,t){return e?(l[e]??[]).filter(([e,n])=>t(e)&&t(n)):[]}var d=`gemini-2.5-pro`;function f(e){return e===`gemini-cli`?d:m(e)?.default_model??null}function p(n){if(!n)return[];let r=t(n);if(!r)return[];let i=[...c[n]??[]];return r.api_key_env_var&&i.push({name:r.api_key_env_var,secret:!0,hint_key:e.ONBOARDING$ACP_SECRET_API_KEY_HINT}),r.base_url_env_var&&i.push({name:r.base_url_env_var,hint_key:e.ONBOARDING$ACP_SECRET_BASE_URL_HINT}),i}function m(e){if(e)return o.find(t=>t.key===e)}function h(e){let t=m(e);return t?t.display_name:null}function g(e){return m(e)?.icon??`cli-generic`}function _(e,t){return t?m(e)?.available_models?.find(e=>e.id===t)?.label??t:null}function v(e,t={}){if(e===`openhands`)return{agent_kind:`openhands`};let n=e===s,r=n?void 0:m(e);if(!n&&!r&&!t.allowUnknownServer)return null;let i=t.model===void 0?f(e):t.model;return{agent_kind:`acp`,acp_server:e,acp_command:t.command??[],acp_args:[],acp_model:i??null}}export{u as a,h as c,g as d,i as f,v as i,p as l,o as n,f as o,n as r,m as s,s as t,_ as u};
1
+ import{z as e}from"./utils-BX9XJ0IE.js";import{n as t}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-CuQhkiS7.js";var n=`cli-generic`;function r(e){if(typeof e!=`string`)return null;let t=e.trim();return!t||t===`acp-managed`?null:t}function i(e){for(let t of[e.runtimeName,e.runtimeId,e.configured,e.sdkLlm]){let e=r(t);if(e)return e}return e.providerDefault??null}var a={"claude-code":{icon:`claude-code`,description_key:e.ONBOARDING$AGENT_CLAUDE_CODE_DESCRIPTION},codex:{icon:`codex`,description_key:e.ONBOARDING$AGENT_CODEX_DESCRIPTION},"gemini-cli":{icon:`gemini`,description_key:e.ONBOARDING$AGENT_GEMINI_CLI_DESCRIPTION}},o=Object.entries(a).map(([e,n])=>{let r=t(e);return{key:e,display_name:r?.display_name??e,default_command:r?[...r.default_command]:[],available_models:r?.available_models?.map(e=>({id:e.id,label:e.label})),default_model:r?.default_model??void 0,description_key:n.description_key,icon:n.icon}}),s=`custom`,c={codex:[{name:`CODEX_AUTH_JSON`,secret:!0,multiline:!0,hint_key:e.ONBOARDING$ACP_SECRET_FILE_BLOB_HINT,hint_values:{file:`~/.codex/auth.json`}}],"claude-code":[{name:`CLAUDE_CODE_OAUTH_TOKEN`,secret:!0,hint_key:e.ONBOARDING$ACP_SECRET_OAUTH_TOKEN_HINT}],"gemini-cli":[{name:`GOOGLE_APPLICATION_CREDENTIALS_JSON`,secret:!0,multiline:!0,hint_key:e.ONBOARDING$ACP_SECRET_FILE_BLOB_HINT,hint_values:{file:`~/.config/gcloud/application_default_credentials.json`}},{name:`GOOGLE_CLOUD_PROJECT`,hint_key:e.ONBOARDING$ACP_SECRET_GCP_PROJECT_HINT},{name:`GOOGLE_CLOUD_LOCATION`,hint_key:e.ONBOARDING$ACP_SECRET_GCP_LOCATION_HINT},{name:`GOOGLE_GENAI_USE_VERTEXAI`,hint_key:e.ONBOARDING$ACP_SECRET_VERTEXAI_FLAG_HINT}]},l={"claude-code":[[`CLAUDE_CODE_OAUTH_TOKEN`,`ANTHROPIC_API_KEY`],[`CLAUDE_CODE_OAUTH_TOKEN`,`ANTHROPIC_BASE_URL`]]};function u(e,t){return e?(l[e]??[]).filter(([e,n])=>t(e)&&t(n)):[]}var d=`gemini-2.5-pro`;function f(e){return e===`gemini-cli`?d:m(e)?.default_model??null}function p(n){if(!n)return[];let r=t(n);if(!r)return[];let i=[...c[n]??[]];return r.api_key_env_var&&i.push({name:r.api_key_env_var,secret:!0,hint_key:e.ONBOARDING$ACP_SECRET_API_KEY_HINT}),r.base_url_env_var&&i.push({name:r.base_url_env_var,hint_key:e.ONBOARDING$ACP_SECRET_BASE_URL_HINT}),i}function m(e){if(e)return o.find(t=>t.key===e)}function h(e){let t=m(e);return t?t.display_name:null}function g(e){return m(e)?.icon??`cli-generic`}function _(e,t){return t?m(e)?.available_models?.find(e=>e.id===t)?.label??t:null}function v(e,t={}){if(e===`openhands`)return{agent_kind:`openhands`};let n=e===s,r=n?void 0:m(e);if(!n&&!r&&!t.allowUnknownServer)return null;let i=t.model===void 0?f(e):t.model;return{agent_kind:`acp`,acp_server:e,acp_command:t.command??[],acp_args:[],acp_model:i??null}}export{u as a,h as c,g as d,i as f,v as i,p as l,o as n,f as o,n as r,m as s,s as t,_ as u};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor~module-DyG7x7JT.js","assets/rolldown-runtime-Cyuzqnbw.js"])))=>i.map(i=>d[i]);
2
+ import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{St as t,xt as n,yt as r}from"./vendor-styling-Ck5D_A2Q.js";import{r as i}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~lq5hicxx-cHFhpUBq.js";import{D as a,F as o,I as s,M as ee,O as te,P as ne,T as re,d as ie,k as ae,w as c,y as oe}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kv3pap4j-oGvLV0dO.js";import{R as se,t as ce,z as l}from"./utils-BX9XJ0IE.js";var u=e(t(),1),le=`__AGENT_CANVAS_BASE_PATH__`;function ue(e){let t=e?.trim();return!t||t===`/`?``:(t.startsWith(`/`)?t:`/${t}`).replace(/\/+$/,``)}function de(){let e=ue(void 0);if(e)return e;if(typeof window<`u`){let e=window[le];if(typeof e==`string`)return ue(e)}return``}function fe(e){let t=de();return t?`${t}${e.startsWith(`/`)?e:`/${e}`}`:e.startsWith(`/`)?e:`/${e}`}var d=`openhands`,pe=[{label:`English`,value:`en`},{label:`日本語`,value:`ja`},{label:`简体中文`,value:`zh-CN`},{label:`繁體中文`,value:`zh-TW`},{label:`한국어`,value:`ko-KR`},{label:`Norsk`,value:`no`},{label:`Arabic`,value:`ar`},{label:`Deutsch`,value:`de`},{label:`Français`,value:`fr`},{label:`Italiano`,value:`it`},{label:`Português`,value:`pt`},{label:`Español`,value:`es`},{label:`Català`,value:`ca`},{label:`Türkçe`,value:`tr`},{label:`Українська`,value:`uk`}],me=new WeakMap,he=e=>{if(!me.has(e)){let t=e.use(te).use(a).use(i).init({fallbackLng:`en`,debug:!1,supportedLngs:pe.map(e=>e.value),nonExplicitSupportedLngs:!1,ns:[d],defaultNS:d,fallbackNS:d,backend:{loadPath:fe(`/locales/{{lng}}/{{ns}}.json`)},interpolation:{escapeValue:!1}});me.set(e,t)}return e},ge=()=>he(ee()),_e=null,ve=null,f=()=>(_e||=ge(),_e),ye=()=>ve??f(),be=e=>(ve=e??f(),ve),xe=async(e=f())=>(await me.get(e),e),Se=e=>e?typeof e==`object`&&!Array.isArray(e)?{ns:d,...e}:e:{ns:d},p=new Proxy({},{get:(e,t)=>{let n=ye();if(t===`t`)return(e,t)=>n.t(e,Se(t));if(t===`exists`)return(e,t)=>n.exists(e,Se(t));let r=Reflect.get(n,t,n);return typeof r==`function`?r.bind(n):r},set:(e,t,n)=>{let r=ye();return Reflect.set(r,t,n,r)}}),Ce=e=>typeof e.response?.data==`object`&&e.response?.data!==null&&`error`in e.response.data&&typeof e.response?.data?.error==`string`,we=e=>typeof e.response?.data==`object`&&e.response?.data!==null&&`message`in e.response.data&&typeof e.response?.data?.message==`string`,Te=`Disconnected (check URL or network). Check that the backend URL is correct and the backend server is reachable. If the backend is on another origin, check that it allows this frontend origin.`,Ee=`Disconnected (request timed out). Check that the backend URL is correct and reachable.`,De=4;function Oe(e){return typeof e==`object`&&!!e}function ke(e){let t=[],n=new Set,r=e,i=0;for(;r!=null&&i<De&&!n.has(r);){if(n.add(r),r instanceof Error)r.message&&t.push(r.message),r=r.cause;else if(typeof r==`string`){r&&t.push(r);break}else if(Oe(r)){let e=r.message;typeof e==`string`&&e&&t.push(e),r=r.cause}else break;i+=1}return t}function m(e){if(!e)return!1;let t=e.toLowerCase();return t.includes(`disconnected (check cors or network)`)||t.includes(`disconnected (check url or network)`)||t.includes(`blocked by cors`)||t.includes(`failed to fetch`)||t.includes(`network error`)||t.includes(`load failed`)||t.includes(`networkerror when attempting to fetch resource`)||t.includes(`cors`)&&t.includes(`blocked`)}function Ae(e){return ke(e).some(m)}function je(e){if(!e)return!1;let t=e.toLowerCase();return t.includes(`request timeout`)||t.includes(`timeout after`)||t.includes(`backend request timed out`)}function Me(e){let t=ke(e);return t.some(m)?Te:t.some(je)?Ee:t[0]??null}function Ne(e){return typeof e==`object`&&!!e&&`isAxiosError`in e&&e.isAxiosError===!0}var Pe=e=>{let t=null,n=!1;return Ne(e)?(n=!0,t=Ce(e)&&e.response?.data.error?e.response?.data.error:we(e)&&e.response?.data.message?e.response?.data.message:e.message):t=e instanceof Error?e.message:typeof e==`string`?e:null,Me(n?t??e:e)??t??``},h=(e,t=5e3,n=1e4)=>{if(!e)return t;let r=e.length/(1e3/60)*1e3*1.5;return Math.min(Math.max(r,t),n)},g=r(),Fe={background:`var(--oh-color-tertiary)`,border:`1px solid var(--oh-border-input)`,color:`#fff`,borderRadius:`var(--oh-radius)`,maxWidth:`400px`,wordBreak:`break-word`,overflowWrap:`anywhere`,whiteSpace:`pre-wrap`},_={position:`top-right`,style:Fe},Ie={...Fe,color:`var(--oh-muted)`};function Le({message:e}){let t=u.useRef(null),[n,r]=u.useState(!1);return u.useLayoutEffect(()=>{let e=t.current;if(!e)return;let n=()=>{let t=Number.parseFloat(getComputedStyle(e).lineHeight);if(!Number.isFinite(t)||t<=0){r(!1);return}r(e.getBoundingClientRect().height>t*1.5)};n();let i=new ResizeObserver(n);return i.observe(e),()=>i.disconnect()},[e]),(0,g.jsxs)(`div`,{className:ce(`flex min-w-0 gap-2`,n?`items-start`:`items-center`),children:[(0,g.jsx)(re,{"aria-hidden":!0,className:`h-4 w-4 shrink-0`,strokeWidth:2,style:{color:se}}),(0,g.jsx)(`span`,{ref:t,className:`min-w-0 flex-1 text-sm leading-5 [word-break:break-word] [overflow-wrap:anywhere]`,children:e})]})}var Re={..._,icon:null,style:Ie},ze=e=>{let t=e||p.t(l.STATUS$ERROR);m(t)?t=p.t(l.ERROR$CORS_OR_NETWORK):je(t)&&(t=p.t(l.ERROR$BACKEND_REQUEST_TIMEOUT));let n=h(t,4e3);c((0,g.jsx)(Le,{message:t}),{...Re,duration:n})},Be=e=>{let t=h(e,5e3);c.success((0,g.jsx)(`span`,{className:`[word-break:break-word] [overflow-wrap:anywhere]`,children:e}),{..._,duration:t})},Ve=(e,t,n)=>{let r=h(`${e} ${t}`,5e3);c.success((0,g.jsxs)(`span`,{className:`[word-break:break-word] [overflow-wrap:anywhere]`,children:[e,` `,(0,g.jsx)(`a`,{className:`underline hover:no-underline`,href:n,children:t})]}),{..._,duration:r})},He=e=>{let t=h(e,6e3);c((0,g.jsx)(`span`,{className:`[word-break:break-word] [overflow-wrap:anywhere]`,children:e}),{..._,icon:`⚠️`,duration:t})},Ue=`openhands-backend-health`,We=500;function Ge(e){if(typeof e!=`object`||!e)return!1;let t=e;return Number.isInteger(t.consecutiveFailures)&&t.consecutiveFailures>=0&&t.consecutiveFailures<=5&&(t.lastError===null||typeof t.lastError==`string`)&&(t.lastFailureAt===null||typeof t.lastFailureAt==`number`)&&typeof t.disabled==`boolean`}function Ke(){if(typeof window>`u`)return{};try{let e=window.localStorage.getItem(Ue);if(!e)return{};let t=JSON.parse(e);if(typeof t!=`object`||!t)return{};let n={};for(let[e,r]of Object.entries(t))typeof e==`string`&&e.length>0&&Ge(r)&&(n[e]=r);return n}catch{return{}}}function qe(e){if(!(typeof window>`u`))try{if(Object.keys(e).length===0){window.localStorage.removeItem(Ue);return}window.localStorage.setItem(Ue,JSON.stringify(e))}catch{}}function Je(e){let t=Me(e)??`Unknown error`;return t.length>We?`${t.slice(0,We)}…`:t}var v=Ke(),Ye=new Set;function Xe(){Ye.forEach(e=>e())}function y(e){v=e,qe(e),Xe()}function Ze(){return v}function Qe(e){return v[e]??null}function $e(e){return Ye.add(e),()=>{Ye.delete(e)}}function et(e,t){let n=v[e],r=Math.min((n?.consecutiveFailures??0)+1,5),i=n?.disabled===!0||r>=5,a={consecutiveFailures:r,lastError:Je(t),lastFailureAt:Date.now(),disabled:i};y({...v,[e]:a})}function tt(e){if(!(e in v))return;let{[e]:t,...n}=v;y(n)}function nt(e){if(!(e in v))return;let{[e]:t,...n}=v;y(n)}function rt(e){if(!(e in v))return;let{[e]:t,...n}=v;y(n)}var it=`workspace/project`,at=`__AGENT_CANVAS_LOCK_TO_CLOUD__`,ot=`all-hands.dev`,b=`openhands.dev`,st=`app.${ot}`,ct=b,lt=`app.${b}`;function ut(e){return e?.trim()||null}function dt(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 ft(e){if(!e)return null;let t=e.trim().replace(/\/+$/,``);return t?/^https?:\/\//i.test(t)?t:`https://${t}`:null}function pt(e){let t=e.toLowerCase();return t===st||t===lt?ct:t===ot?b:t.endsWith(`.${ot}`)?`${t.slice(0,-13)}${b}`:t}function mt(e){let t=ft(e);if(!t)return null;try{let e=new URL(t),n=e.port?`:${e.port}`:``;return`${e.protocol}//${pt(e.hostname)}${n}`}catch{return t.toLowerCase()}}function ht(){let e=x();return!e||typeof window>`u`||!yt(window.location.origin,e)?null:window.location.origin}function gt(){return dt(void 0)}function _t(){let e=ut(void 0);if(e)return e;if(typeof window<`u`){let e=window.__AGENT_CANVAS_SESSION_API_KEY__;if(typeof e==`string`)return ut(e)}return null}function vt(){return{baseUrl:xt()??``,sessionApiKey:S()??``}}function x(){let e=ft(void 0);if(e)return e;if(typeof window<`u`){let e=window[at];if(typeof e==`string`)return ft(e)}return null}function yt(e,t){let n=mt(e),r=mt(t);return!n||!r?!1:n===r}function bt(){return ht()?`cookie`:`api-key`}function xt(){return gt()||(typeof window<`u`?window.location.origin:null)}function S(){return _t()}function St(){return it}function Ct(e){return`${St().replace(/\/+$/,``)}/${e.replace(/-/g,``)}`}function wt(){let e=S();return e?{"X-Session-API-Key":e}:{}}function C(){return typeof window<`u`&&window.__AGENT_CANVAS_AUTH_REQUIRED__===!0}function Tt(){return C()?!S():!1}var Et=`default-local`,Dt=`Local`,Ot=`locked-cloud`,kt=`OpenHands Cloud`;function At(){if(!x())return null;let e=ht();return e?{id:Ot,name:kt,host:e,apiKey:``,kind:`cloud`,authMode:`cookie`}:null}function w(){if(x())return null;let e=xt(),t=S();return!e||!t?null:{id:Et,name:Dt,host:e,apiKey:t,kind:`local`}}var jt=`openhands-backends`,T=`openhands-active-backend`;function Mt(e){return e===`local`||e===`cloud`}function Nt(e){return e===void 0||e===`api-key`||e===`cookie`}function Pt(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`&&Mt(t.kind)&&Nt(t.authMode)&&(t.connectionRevision===void 0||typeof t.connectionRevision==`number`&&Number.isSafeInteger(t.connectionRevision)&&t.connectionRevision>=0)}function Ft(e){try{let{hostname:t}=new URL(e);return t===`localhost`||t===`127.0.0.1`||t===`::1`||t===`[::1]`}catch{return!1}}function It(e,t){return e.id!==`default-local`||e.kind!==`local`?!1:e.host===t.host||Ft(e.host)&&Ft(t.host)}function Lt(e){let t=w();if(!t)return e;let n=!1,r=e.map(e=>!It(e,t)||e.apiKey===t.apiKey?e:(n=!0,{...e,apiKey:t.apiKey}));return n?(E(r),r):e}function E(e){if(!(typeof window>`u`))try{window.localStorage.setItem(jt,JSON.stringify(e))}catch{}}function Rt(){if(typeof window>`u`)return[];try{let e=At();if(e)return E([e]),Ut()?.backendId!==e.id&&D({backendId:e.id}),[e];let t=window.localStorage.getItem(jt);if(t===null){let e=w();return e?(E([e]),[e]):[]}let n=JSON.parse(t);if(!Array.isArray(n))return[];let r=n.filter(Pt);if(r.length===0){let e=w();return e?(E([e]),[e]):[]}return Lt(r)}catch{return[]}}function zt(e){if(!e)return null;try{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 Bt(e,t){try{return e?.getItem(t)??null}catch{return null}}function Vt(e,t,n){try{e?.setItem(t,n)}catch{}}function Ht(e,t){try{e?.removeItem(t)}catch{}}function Ut(){return typeof window>`u`?null:zt(Bt(window.sessionStorage,T))||zt(Bt(window.localStorage,T))}function D(e){if(typeof window>`u`)return;if(!e){Ht(window.sessionStorage,T),Ht(window.localStorage,T);return}let t=JSON.stringify({backendId:e.backendId,orgId:e.orgId??null});Vt(window.sessionStorage,T,t),Vt(window.localStorage,T,t)}var Wt=`backend`;function Gt(e,t){let{backend:n,orgId:r}=t;if(!n.id)return e;let[i,a=``]=e.split(`?`),o=new URLSearchParams(a);return o.set(Wt,n.id),r&&o.set(`org`,r),`${i}?${o.toString()}`}function Kt(e,t){if(!t)return null;let n;try{n=new URLSearchParams(t)}catch{return null}let r=n.get(Wt);return!r||!e.some(e=>e.id===r)?null:{backendId:r,orgId:n.get(`org`)||null}}function qt(){return typeof window>`u`?``:window.location.search}var Jt=`no-backend`,Yt={id:Jt,name:`No Backend Available`,host:``,apiKey:``,kind:`local`};function Xt(e){return e.id===Jt}function Zt(e){return e.find(e=>e.kind===`local`&&Qe(e.id)?.disabled!==!0)||(e.find(e=>e.kind===`local`)??e[0]??Yt)}function Qt(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=Zt(e),r=null),{backends:e,selection:t,active:{backend:n,orgId:r}}}function $t(e){let t=Kt(e,qt());return t?(D(t),t):Ut()}var en=Rt(),O=Qt(en,$t(en)),tn=new Set;function nn(){tn.forEach(e=>e())}function rn(){return O.active}function k(){let e=O.active.backend;return e.kind===`local`&&!Xt(e)?e:null}function A(){return O.backends}function an(){return O.selection}function j(){return O}function on(e){D(e),O=Qt(O.backends,e),nn()}function sn(e){E(e);let t=O.selection;t&&!e.some(e=>e.id===t.backendId)&&(t=null,D(null)),O=Qt(e,t),nn()}function cn(e){return tn.add(e),()=>{tn.delete(e)}}var ln=(e,t)=>{(e?.response?.status===401||e?.status===401)&&t.invalidateQueries({queryKey:[`user`,`authenticated`]})},un=e=>{if(!(e instanceof ae)||e.response?.status!==401&&e.status!==401)return!1;let t=rn().backend;if(t.kind!==`cloud`)return!1;let n=e.config?.url;return!n||n.startsWith(t.host.replace(/\/+$/,``))},dn=new Set,fn=()=>{let e=new ne({queryCache:new o({onSuccess:(e,t)=>{let n=t.meta?.backendId??t.options.meta?.backendId;typeof n==`string`&&tt(n)},onError:(t,n)=>{if(n.queryKey[0]===`user`&&n.queryKey[1]===`authenticated`||ln(t,e),!(n.meta?.disableToast??n.options.meta?.disableToast)&&!un(t)){let e=Pe(t);dn.has(e||``)||(ze(e||p.t(l.ERROR$GENERIC)),dn.add(e||``),setTimeout(()=>{dn.delete(e||``)},3e3))}}}),mutationCache:new s({onError:(t,n,r,i)=>{ln(t,e),!(i?.meta?.disableToast??i?.options.meta?.disableToast)&&!un(t)&&ze(Pe(t)||p.t(l.ERROR$GENERIC))}})});return e},pn=null,mn=null,hn=()=>(pn||=fn(),pn),gn=()=>mn??hn(),_n=e=>(mn=e??hn(),mn),vn=new Proxy({},{get:(e,t)=>{let n=gn(),r=Reflect.get(n,t,n);return typeof r==`function`?r.bind(n):r},set:(e,t,n)=>{let r=gn();return Reflect.set(r,t,n,r)}});function yn(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 bn(e){if(e&&!e.startsWith(`/`))try{return(new URL(e).pathname.split(`/api/conversations`)[0]||``).replace(/\/$/,``)}catch{return``}return``}function xn(e){let t=yn(e),n=bn(e),r=window.location.protocol===`https:`,i=Sn(e)===`https:`;return`${r||i?`https:`:`http:`}//${t}${n}`}function Sn(e){if(!e||e.startsWith(`/`))return null;try{return new URL(e).protocol}catch{return null}}function Cn(e){let t=yn(e),n=bn(e),r=window.location.protocol===`https:`,i=Sn(e)===`https:`;return`${r||i?`wss:`:`ws:`}//${t}${n}/sockets/bash-events`}function wn(e,t){if(!e)return null;let n=yn(t),r=bn(t),i=window.location.protocol===`https:`,a=Sn(t)===`https:`;return`${i||a?`wss:`:`ws:`}//${n}${r}/sockets/events/${e}`}var Tn=class extends Error{constructor(){super(`No backend is configured.`),this.name=`NoBackendAvailableError`}};function En(e){return e.replace(/\/+$/,``)}function Dn(e,t){return e.host?En(e.host):e.conversationUrl?En(xn(e.conversationUrl)):En(t?.host??``)}function On(e={}){let t=k();if(!t&&!e.host&&!e.conversationUrl)throw new Tn;let n=e.sessionApiKey??e.apiKey??t?.apiKey??void 0;return{host:Dn(e,t),...n?{apiKey:n}:{},workingDir:e.workingDir??St(),...e.timeout===void 0?{}:{timeout:e.timeout}}}function kn(e){let{host:t,apiKey:n,timeout:r}=On(e);return{baseUrl:t,...n?{apiKey:n}:{},timeout:r??6e4}}var An={_comment:`Single source of truth for version pins, ports, paths, and defaults shared across the npm and Docker install paths. Read by scripts/dev-safe.mjs, scripts/dev-with-automation.mjs, docker/entrypoint.sh (via generated defaults.env), and .github/workflows/docker.yml.`,versions:{agentServer:`1.40.1`,agentCanvas:`1.10.0`,automation:`1.6.0`},compatibility:{minimumAgentServer:`1.28.0`},constraints:{_comment:`Temporary upper bound on the agent-client-protocol (acp) transitive dependency. openhands-sdk 1.35.0 requires agent-client-protocol>=0.10.1 with no upper bound, but acp 0.11.0 reordered the ACP prompt() arguments and breaks the SDK's ACP client (a PromptRequest validation error surfaces as 'ACP error: 2 validation errors for PromptRequest'). Pin acp <0.11 until a fixed openhands-sdk ships. Consumed by scripts/dev-safe.mjs (agent-server uvx install) and .github/workflows/mock-llm-e2e.yml (mock ACP server venv).`,agentClientProtocol:`agent-client-protocol<0.11`},images:{agentServer:`ghcr.io/openhands/agent-server`,agentCanvas:`ghcr.io/openhands/agent-canvas`},ports:{agentServer:18e3,automation:18001,proxy:8e3},paths:{stateSubdir:`agent-canvas`,conversations:`agent-canvas/conversations`,bashEvents:`agent-canvas/bash_events`,automationDb:`automation/automations.db`,canvasBasePath:`/canvas`},packages:{agentServer:`openhands-agent-server`,automation:`openhands-automation`,tools:`openhands-tools`,workspace:`openhands-workspace`},telemetry:{posthogApiKey:`phc_kBtz5nKmxVRRQ7HtPwr2QX9eMC5j65zE86QKocVNwb4U`,posthogHost:`https://us.i.posthog.com`}},jn=5e3,Mn=`unknown`,M=An.compatibility.minimumAgentServer,Nn=`AGENT_SERVER_UNSUPPORTED_VERSION`,Pn=`AGENT_SERVER_UNKNOWN_VERSION`,N=null,Fn=null,In=e=>Array.isArray(e?.usable_tools)?e.usable_tools:null,P=class extends Error{details;noBackendConfigured;constructor(e,t){let n=t?.noBackendConfigured??!1;super(n?`No agent server backend is configured yet. Add a backend to get started.`:`Could not connect to the configured agent server. Make sure it is running and reachable, then reload the page.`),this.name=`AgentServerUnavailableError`,this.details=e??null,this.noBackendConfigured=n}},Ln=e=>e instanceof P||typeof e==`object`&&!!e&&`name`in e&&e.name===`AgentServerUnavailableError`,Rn=class extends P{code=Nn;actualVersion;requiredVersion=M;constructor(e){let t=`Agent Canvas requires agent-server ${M} or newer; this backend is running ${e}. Please upgrade the agent-server backend.`;super(t),this.name=`AgentServerUnsupportedVersionError`,this.message=t,this.actualVersion=e}},zn=class extends P{code=Pn;actualVersion;requiredVersion=M;constructor(e){let t=`Could not determine this backend's agent-server version.${e?` It reported "${e}".`:``} Agent Canvas requires agent-server ${M} or newer, but this backend did not return a valid version from /server_info. Restart or rebuild the agent-server backend, then try again.`;super(t),this.name=`AgentServerUnknownVersionError`,this.message=t,this.actualVersion=e}},Bn=e=>C()&&I(e,401);function F(){N=null,Fn=null}function Vn(e){return e?.host&&e.host!==Fn?null:N}function Hn(e){let t=In(N);return Array.isArray(t)?t.includes(e):!0}function Un(e){return e instanceof Error&&e.name===`HttpError`&&`status`in e&&typeof e.status==`number`}function I(e,t){return Un(e)&&e.status===t}function Wn(e){return typeof e==`string`&&e.trim()||null}function Gn(e){return Wn(e.sdk_version)}function Kn(e){return Wn(e.version)??Gn(e)}function qn(e){let t=Kn(e);return!t||t.toLowerCase()===Mn?null:t}function Jn(e){let t=qn(e);return!t||!Zn(t)?null:t}function Yn(e){return!N||e&&k()?.host!==e?null:Jn(N)}function Xn(e,t){let n=Zn(e),r=Zn(t);if(!n||!r)return null;for(let e of[`major`,`minor`,`patch`]){if(n[e]>r[e])return 1;if(n[e]<r[e])return-1}return n.prerelease&&!r.prerelease?-1:!n.prerelease&&r.prerelease?1:n.prerelease&&r.prerelease?n.prerelease.localeCompare(r.prerelease):0}function Zn(e){let[t]=e.trim().replace(/^v/,``).split(`+`),[n,r]=t.split(`-`,2),i=n.split(`.`);if(i.length!==3)return null;let[a,o,s]=i.map(e=>Number(e));return[a,o,s].every(e=>Number.isInteger(e)&&e>=0)?{major:a,minor:o,patch:s,prerelease:r}:null}function Qn(e){let t=qn(e);if(!t)throw F(),new zn(Kn(e));let n=Xn(t,M);if(n===null)throw F(),new zn(t);if(n<0)throw F(),new Rn(t)}async function $n(){let e=k();if(!e){if(F(),Xt(rn().backend))throw new P(`No backend configured`,{noBackendConfigured:!0});return null}let t=On({host:e.host,sessionApiKey:e.apiKey||null,timeout:jn}),n;try{n=await new oe(t).getServerInfo()}catch(e){throw F(),I(e,401)?e:new P(e instanceof Error?e.message:null)}if(Qn(n),C())try{await new ie(t).getSettings()}catch(e){if(I(e,401))throw e;console.warn(`[agent-server] getSettings() probe failed (non-401):`,e)}return N=n,Fn=t.host,n}var er={WEB_CLIENT_CONFIG:[`web-client-config`],MAIN_APP_COOKIE_AUTH:[`main-app-cookie-auth`]},tr={all:[`settings`],byScope:e=>[`settings`,e],personal:()=>[`settings`,`personal`]},nr={all:[`llm-profiles`]},rr={all:[`agent-profiles`]},ir={retry:!1},ar={all:[`llm-subscription`],openaiStatus:[`llm-subscription`,`openai`,`status`],openaiModels:[`llm-subscription`,`openai`,`models`]},or={all:[`local-workspaces`]},sr={marketplace:[`plugins-marketplace`],installed:[`plugins-installed`],local:[`plugins-local`]},cr={capabilities:()=>[`setup-capabilities`]},lr={latestVersion:[`agent-canvas-latest-version`]},ur={staleTime:1e3*60*5,gcTime:1e3*60*15},dr={name:`@openhands/agent-canvas`,version:`1.10.0`,description:`Agent Canvas UI for OpenHands - run AI coding agents with a visual interface`,license:`MIT`,private:!1,type:`module`,repository:{type:`git`,url:`https://github.com/OpenHands/OpenHands`},homepage:`https://github.com/OpenHands/OpenHands#readme`,bugs:{url:`https://github.com/OpenHands/OpenHands/issues`},bin:{"agent-canvas":`bin/agent-canvas.mjs`},engines:{node:`>=22.12.0`},dependencies:{"@heroui/react":`2.8.10`,"@microlink/react-json-view":`1.31.20`,"@monaco-editor/react":`4.7.0`,"@openhands/extensions":`0.16.0`,"@openhands/typescript-client":`1.36.1`,"@react-router/node":`7.18.2`,"@react-router/serve":`7.18.2`,"@tailwindcss/vite":`4.3.3`,"@tanstack/react-query":`5.101.4`,"@types/shell-quote":`1.7.5`,"@uidotdev/usehooks":`2.4.1`,"@xterm/addon-fit":`0.11.0`,"@xterm/xterm":`6.0.0`,axios:`1.18.0`,"class-variance-authority":`0.7.1`,clsx:`2.1.1`,downshift:`9.3.2`,"framer-motion":`12.38.0`,httpxy:`0.5.3`,i18next:`26.3.6`,"i18next-browser-languagedetector":`8.2.1`,"i18next-http-backend":`4.0.0`,isbot:`5.1.39`,"lucide-react":`1.25.0`,"monaco-editor":`0.56.0`,"posthog-js":`1.380.0`,react:`19.2.8`,"react-dom":`19.2.8`,"react-hot-toast":`2.6.0`,"react-i18next":`17.0.11`,"react-icons":`5.6.0`,"react-markdown":`10.1.0`,"react-router":`7.18.2`,"react-syntax-highlighter":`16.1.1`,"rehype-raw":`7.0.0`,"rehype-sanitize":`6.0.0`,"remark-breaks":`4.0.0`,"remark-gfm":`4.0.1`,"shell-quote":`1.9.0`,sirv:`3.0.2`,"sirv-cli":`3.0.1`,"socket.io-client":`4.8.3`,"tailwind-merge":`3.6.0`,"tailwind-scrollbar":`4.0.2`,"unist-util-visit":`5.1.0`,uuid:`14.0.0`,vite:`8.0.16`,winston:`3.19.0`,"winston-daily-rotate-file":`5.0.0`,zustand:`5.0.12`},scripts:{dev:`node --env-file-if-exists=.env scripts/dev-with-automation.mjs`,"dev:static":`node --env-file-if-exists=.env scripts/dev-static.mjs`,"dev:extra-backend":`node --env-file-if-exists=.env scripts/dev-extra-backend.mjs`,"dev:minimal":`node --env-file-if-exists=.env scripts/dev-safe.mjs`,"dev:frontend":`npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev`,"dev:mock":`npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev`,build:`npm run build:app`,"build:mock":`npm run make-i18n && cross-env VITE_MOCK_API=true react-router build`,start:`npx sirv-cli build/ --single`,test:`npm run make-i18n && vitest run`,"test:e2e":`playwright test --pass-with-no-tests`,"test:e2e:live":`node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs`,"test:e2e:mock-llm":`playwright test --config=playwright.mock-llm.config.ts`,"test:e2e:mock-llm:docker":`playwright test --config=playwright.mock-llm-docker.config.ts`,"test:coverage":`npm run make-i18n && vitest run --coverage`,"test:mutation":`npm run make-i18n && stryker run`,"test:mutation:diff":`npm run make-i18n && node scripts/stryker-diff.mjs`,"test:mutation:incremental":`npm run make-i18n && stryker run --incremental`,dev_wsl:`VITE_WATCH_USE_POLLING=true vite`,preview:`vite preview`,"make-i18n":`node scripts/make-i18n-translations.cjs`,prelint:`npm run make-i18n`,lint:`npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}`,"lint:fix":`eslint src --fix && prettier --write src/**/*.{ts,tsx}`,prepare:`husky`,typecheck:`react-router typegen && tsc`,"typecheck:staged":`react-router typegen && npx tsc --noEmit --skipLibCheck`,"check-translation-completeness":`node scripts/check-translation-completeness.cjs`,"build:app":`npm run make-i18n && react-router build`,"build:lib":`npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true vite build && tsc -p tsconfig.lib.json`,"build:docker":`node scripts/docker-build.mjs`,"example:acp-docker:env":`node scripts/gen-acp-docker-env.mjs`,desktop:`npm run build:app && electron electron/main.mjs`,"build:desktop":`npm run build:app && node scripts/download-uv.mjs && node scripts/download-node.mjs && electron-builder --config electron-builder.config.mjs --publish never`,"build:desktop:universal":`npm run build:app && node scripts/download-uv.mjs && node scripts/download-node.mjs && cross-env ELECTRON_ARCH=universal electron-builder --config electron-builder.config.mjs --publish never`,"download-uv":`node scripts/download-uv.mjs`,"download-node":`node scripts/download-node.mjs`},"lint-staged":{"src/**/*.{ts,tsx,js}":[`eslint --fix`,`prettier --write`],"src/**/*.{ts,tsx}":[`node scripts/run-staged-typecheck.mjs`],"src/**/*":[`npm run check-translation-completeness`]},devDependencies:{"@eslint/eslintrc":`3.3.1`,"@eslint/js":`9.39.4`,"@mswjs/socket.io-binding":`0.2.0`,"@playwright/test":`1.62.0`,"@react-router/dev":`7.18.2`,"@stryker-mutator/core":`9.6.1`,"@stryker-mutator/vitest-runner":`9.6.1`,"@tailwindcss/typography":`0.5.20`,"@tanstack/eslint-plugin-query":`5.101.4`,"@testing-library/dom":`10.4.1`,"@testing-library/jest-dom":`7.0.0`,"@testing-library/react":`16.3.2`,"@testing-library/user-event":`14.6.1`,"@types/mdast":`4.0.4`,"@types/node":`26.1.2`,"@types/react":`19.2.17`,"@types/react-dom":`19.2.3`,"@types/react-syntax-highlighter":`15.5.13`,"@typescript-eslint/eslint-plugin":`8.59.2`,"@typescript-eslint/parser":`8.59.2`,"@vercel/react-router":`1.3.0`,"@vitest/coverage-v8":`4.1.10`,"cross-env":`10.1.0`,electron:`42.3.3`,"electron-builder":`26.15.3`,eslint:`9.39.4`,"eslint-config-prettier":`10.1.8`,"eslint-import-resolver-typescript":`4.4.5`,"eslint-plugin-i18next":`6.1.5`,"eslint-plugin-import-x":`4.16.2`,"eslint-plugin-jsx-a11y":`6.10.2`,"eslint-plugin-prettier":`5.5.5`,"eslint-plugin-react":`7.37.5`,"eslint-plugin-react-hooks":`7.1.1`,"eslint-plugin-unused-imports":`4.4.1`,globals:`16.5.0`,husky:`9.1.7`,jsdom:`30.0.0`,"lint-staged":`16.4.0`,msw:`2.15.0`,"postcss-prefix-selector":`2.1.1`,prettier:`3.8.3`,tailwindcss:`4.3.3`,typescript:`6.0.3`,"vite-plugin-svgr":`5.2.0`,vitest:`4.1.10`},packageManager:`npm@10.5.0`,volta:{node:`22.12.0`},msw:{workerDirectory:[`public`]},overrides:{"@vercel/static-config":{ajv:`8.20.0`},dompurify:`3.4.12`,"typed-rest-client":{qs:`6.15.3`}},main:`./dist/index.cjs`,module:`./dist/index.js`,types:`./dist/index.d.ts`,files:[`dist`,`bin`,`build`,`config`,`scripts`,`tools`],exports:{".":{types:`./dist/index.d.ts`,import:`./dist/index.js`,require:`./dist/index.cjs`},"./browser":{types:`./dist/components/browser/index.d.ts`,import:`./dist/components/browser/index.js`,require:`./dist/components/browser/index.cjs`},"./conversation":{types:`./dist/components/conversation/index.d.ts`,import:`./dist/components/conversation/index.js`,require:`./dist/components/conversation/index.cjs`},"./files":{types:`./dist/components/files/index.d.ts`,import:`./dist/components/files/index.js`,require:`./dist/components/files/index.cjs`},"./settings":{types:`./dist/components/settings/index.d.ts`,import:`./dist/components/settings/index.js`,require:`./dist/components/settings/index.cjs`},"./sidebar":{types:`./dist/components/sidebar/index.d.ts`,import:`./dist/components/sidebar/index.js`,require:`./dist/components/sidebar/index.cjs`},"./terminal":{types:`./dist/components/terminal/index.d.ts`,import:`./dist/components/terminal/index.js`,require:`./dist/components/terminal/index.cjs`},"./i18n":{types:`./dist/i18n/index.d.ts`,import:`./dist/i18n/index.js`,require:`./dist/i18n/index.cjs`},"./package.json":`./package.json`},peerDependencies:{react:`19.2.8`,"react-dom":`19.2.8`,"react-router":`7.18.2`}},fr=`agent_canvas`,pr=dr.version,mr=`X-OpenHands-Client`,hr=`X-OpenHands-Client-Version`,gr=`X-OpenHands-Telemetry-Distinct-Id`,_r={[mr]:fr,[hr]:pr};function vr(e){return e?.trim()||`unknown`}function yr(e){return e?.trim()||null}function L({backendKind:e,agentServerVersion:t,automationSdkVersion:n,backendVersion:r,connectionMethod:i}){let a=vr(t??r),o=vr(n),s=vr(r??t);return{backend_kind:e??null,agent_server_version:a,automation_sdk_version:o,backend_version:s,...i?{connection_method:i}:{}}}function br(e=null){return{cloud_user_id:yr(e?.userId),cloud_user_email:yr(e?.email),cloud_org_id:yr(e?.orgId)}}var R=`openhands-telemetry-consent`,z=`openhands-telemetry-consent-pending-cloud-sync`,B=`openhands-telemetry-consent-pending-local-revocation`,xr=`openhands-telemetry-consent-change`,Sr=`openhands-telemetry-first-use`,Cr=`openhands-telemetry-session`,wr=`agent-canvas`,Tr=`history_change`,Er=`phc_BgzfxKdgsYMLFTmJqt424ZoyVHvKFfrwttLimzdYTKFK`,Dr=`https://z.openhands.dev`,Or=`https://us.posthog.com`,V=null,H=null,kr,U={},W=!1,G,K=0,q=-1,Ar=Object.freeze({client_source:fr,client_version:pr,package_name:dr.name,package_version:dr.version}),jr=L({}),Mr=br();function Nr(e){jr=L(e)}function Pr(e){Mr=br(e)}function Fr(e){return e?{...e,properties:{...jr,...Mr,...e.properties,...Ar}}:null}function Ir(e){W||Z()!==`granted`?e.opt_out_capturing():e.opt_in_capturing()}function Lr(e,t=!1){e.reset(t),q=-1,Ir(e)}function J(e){if(G===void 0||!$())return;let t=G?.distinctId,n=e.get_property(`$user_id`);if(n!=null&&n!==t&&Lr(e),G===null){q=K;return}(e.get_property(`$user_id`)!==G.distinctId||q!==K)&&(e.identify(G.distinctId,G.properties),q=K)}function Rr(e,t){let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every(n=>e[n]===t[n])}function zr(e){if(e===!1){if(W)return;W=!0,V?.opt_out_capturing(),Q();return}let t=W;if(W=!1,!V&&!H){let t=Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0));U={...U,...t}}t&&(V&&(Ir(V),J(V)),Q())}function Br(){return W?null:{apiKey:U.apiKey||Er,apiHost:U.apiHost||Dr,uiHost:U.uiHost||Or}}function Y(){return typeof window<`u`&&typeof localStorage<`u`}async function Vr(){if(!Y())return null;if(V)return V;try{let{default:e}=await n(async()=>{let{default:e}=await import(`./vendor~module-DyG7x7JT.js`).then(e=>e.t);return{default:e}},__vite__mapDeps([0,1]));return e}catch{return null}}function Hr(){return!!(W||typeof process<`u`&&{}.DO_NOT_TRACK===`1`||typeof navigator<`u`&&(navigator.doNotTrack===`1`||typeof window<`u`&&window.doNotTrack===`1`))}function Ur(e){V||(kr=e)}async function X(e=!1){if(V)return V;if(H)return H;H=(async()=>{let t=Br();if(!t)return null;let n=await Vr();if(!n)return null;let r=n.init(t.apiKey,{api_host:t.apiHost,ui_host:t.uiHost,opt_out_capturing_by_default:!e,persistence:`localStorage`,persistence_name:wr,consent_persistence_name:`${wr}-consent`,person_profiles:`always`,capture_pageview:Tr,autocapture:!0,disable_session_recording:!0,bootstrap:kr,before_send:Fr},wr);return r?(V=r,kr=void 0,W?V.opt_out_capturing():Z()===`granted`?(V.opt_in_capturing(),J(V)):e||V.opt_out_capturing(),V):null})();try{return await H}finally{V||(H=null)}}function Z(){if(!Y())return`pending`;if(Hr())return`denied`;if(bt()===`cookie`)return`granted`;try{let e=localStorage.getItem(R);if(e===`granted`||e===`denied`)return e}catch{}return`pending`}function Wr(){if(!Y())return null;try{let e=localStorage.getItem(z);return e===`granted`||e===`denied`?e:null}catch{return null}}function Gr(){if(!Y())return null;try{return localStorage.getItem(B)}catch{return null}}function Kr(e){if(!Y())return()=>{};let t=t=>{(t.key===R||t.key===z)&&e()};return window.addEventListener(xr,e),window.addEventListener(`storage`,t),()=>{window.removeEventListener(xr,e),window.removeEventListener(`storage`,t)}}function Q(){Y()&&window.dispatchEvent(new Event(xr))}function qr(e){if(Y())try{localStorage.setItem(z,e)}catch{}}function Jr(e){if(!(!Y()||!e))try{localStorage.setItem(B,e)}catch{}}function Yr(e){if(Y())try{if(localStorage.getItem(B)!==e)return;localStorage.removeItem(B)}catch{}}function Xr(e){if(Y())try{if(e!==void 0&&localStorage.getItem(z)!==e)return;localStorage.removeItem(z),Q()}catch{}}async function Zr(e,{syncToCloud:t=!0}={}){if(Y())try{let t=Z()===e;if(localStorage.setItem(R,e),W||t)return;let n=V??await X();if(!n)return;e===`granted`?(n.opt_in_capturing(),J(n)):(Jr(n.get_distinct_id?.()??null),n.get_property?.(`$user_id`)==null?n.opt_out_capturing():Lr(n))}catch{}finally{t&&qr(e),Q()}}async function Qr(e,t={}){let n=e===null?null:{distinctId:e,properties:t};if(G===n||G!=null&&n!==null&&G.distinctId===n.distinctId&&Rr(G.properties,t)||(G=n,K+=1,q=-1,!$()))return;let r=V??await X();r&&$()&&J(r)}function $(){return Z()===`granted`}function $r(){if(!Y())return!1;try{return localStorage.getItem(Sr)===`true`}catch{return!1}}function ei(){if(Y())try{localStorage.setItem(Sr,`true`)}catch{}}async function ti(){if(Hr()||$r())return;let e=await X(!0);!e||Hr()||((e.has_opted_out_capturing?.()??!1)&&e.opt_in_capturing(),e.capture(`canvas_install`,{platform:typeof navigator<`u`?navigator.platform:`unknown`,user_agent:typeof navigator<`u`?navigator.userAgent:`unknown`,referrer:typeof document<`u`?document.referrer:``,url_origin:typeof window<`u`?window.location.origin:``,embedded:typeof window<`u`&&window.self!==window.top}),ei(),Z()!==`granted`&&e.opt_out_capturing())}function ni(){if(!Y())return!1;try{return sessionStorage.getItem(Cr)===`true`}catch{return!1}}function ri(){if(Y())try{sessionStorage.setItem(Cr,`true`)}catch{}}async function ii(){if(!$()||Z()!==`granted`)return null;let e=await X();return!e||!$()?null:(e.has_opted_out_capturing?.()&&e.opt_in_capturing(),J(e),e)}async function ai(){if(ni())return;let e=await ii();e&&(e.capture(`canvas_new_session`,{is_first_use:!$r()}),ri())}async function oi(){return(await ii())?.get_distinct_id?.()??null}async function si(){if(!Y())return null;if(Z()!==`granted`){let e=Gr();if(e)return e}return W||Hr()?null:(await X())?.get_distinct_id?.()??null}async function ci(e,t={}){let n=await ii();n&&n.capture(e,t)}async function li(e,t={}){let n=await ii();n&&n.captureException(e,t)}async function ui(){if(Y()){try{Jr(V?.get_distinct_id?.()??null),localStorage.removeItem(R),localStorage.removeItem(Sr)}catch{}Xr();try{sessionStorage.removeItem(Cr)}catch{}jr=L({}),Mr=br(),G=null,K+=1,q=-1;try{V&&Lr(V,!0)}catch{try{V?.opt_out_capturing()}catch{}}finally{Q()}}}var di=u.createContext(null);function fi(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`backend-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function pi(e,t){let n=e.backend.kind===`cloud`,r=t.backend.kind===`cloud`;!n&&!r||(Pr(null),r&&(!n||e.backend.id!==t.backend.id)&&Qr(null))}function mi({children:e}){let t=u.useSyncExternalStore(cn,j,j),n=u.useCallback(()=>{F(),vn.invalidateQueries({queryKey:er.WEB_CLIENT_CONFIG})},[]),r=u.useCallback((e,t)=>{let r=j(),i=an()?.backendId??null,a=an()?.orgId??null,o=t??null;if(e===i&&o===a)return;let s=A(),ee=s.find(t=>t.id===e),te={backend:ee??s[0]??Yt,orgId:ee?o:null};pi(r.active,te),on({backendId:e,orgId:o}),n()},[n]),i=u.useCallback(e=>{let t=j().active,r={...e,id:fi()},i=[...A(),r];return pi(t,{backend:r,orgId:null}),sn(i),on({backendId:r.id}),n(),r},[n]),a=u.useCallback((e,t)=>{let r=A().find(t=>t.id===e),i=j().active.backend.id,a=t.host!==void 0&&r!==void 0&&t.host!==r.host,o=t.apiKey!==void 0&&r!==void 0&&t.apiKey!==r.apiKey;sn(A().map(n=>n.id===e?{...n,...t,connectionRevision:a||o?(n.connectionRevision??0)+1:n.connectionRevision}:n)),(a||o)&&(nt(e),i===e&&(r?.kind===`cloud`&&(Pr(null),Qr(null)),n()))},[n]),o=u.useCallback(e=>{let t=A().find(t=>t.id===e),r=t?.kind===`cloud`&&j().active.backend.id===t.id;sn(A().filter(t=>t.id!==e)),r&&(Pr(null),Qr(null)),rt(e),n()},[n]),s=u.useMemo(()=>({backends:t.backends,active:t.active,setActive:r,addBackend:i,updateBackend:a,removeBackend:o}),[t,r,i,a,o]);return(0,g.jsx)(di.Provider,{value:s,children:e})}function hi(){let e=u.useContext(di);if(!e)throw Error(`useActiveBackendContext must be used inside <ActiveBackendProvider>`);return e}function gi(){let e=u.useContext(di);return e?e.active:{backend:w()??Yt,orgId:null}}export{On as $,ir as A,ze as At,Qn as B,d as Bt,ai as C,Tt as Ct,pr as D,tt as Dt,fr as E,et as Et,or as F,Me as Ft,Jn as G,xe as Gt,Xn as H,ye as Ht,sr as I,je as It,Ln as J,Bn as K,fe as Kt,er as L,Ae as Lt,ur as M,Ve as Mt,nr as N,He as Nt,gr as O,$e as Ot,ar as P,Pe as Pt,Tn as Q,tr as R,m as Rt,ti as S,C as St,_r as T,Ze as Tt,Vn as U,p as Ut,F as V,f as Vt,Yn as W,be as Wt,I as X,Un as Y,$n as Z,Zr as _,vt as _t,Yr as a,gn as at,ci as b,bt,zr as c,rn as ct,Z as d,Xt as dt,kn as et,oi as f,Gt as ft,Pr as g,xt as gt,Nr as h,Ct as ht,Xr as i,hn as it,lr as j,Be as jt,rr as k,_ as kt,Wr as l,k as lt,X as m,it as mt,gi as n,xn as nt,ui as o,vn as ot,si as p,Dt as pt,Hn as q,hi as r,wn as rt,Ur as s,_n as st,mi as t,Cn as tt,Gr as u,A as ut,Qr as v,wt as vt,L as w,yt as wt,li as x,x as xt,Kr as y,St as yt,cr as z,pe as zt};
@@ -0,0 +1 @@
1
+ import{yt as e}from"./vendor-styling-Ck5D_A2Q.js";import{U as t}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~lq5hicxx-cHFhpUBq.js";import{t as n}from"./sdk-section-page-BnCXAytf.js";var r=e();function i(){return(0,r.jsx)(n,{settingsSources:[{settingsSource:`agent_settings`,sectionKeys:[`agent_context`]}],testId:`agent-context-settings-screen`})}var a=t(i);export{a as default};
@@ -1 +1 @@
1
- import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{St as t,bt as n,yt as r}from"./vendor-styling-Bcgpimp9.js";import{W as i}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~d4by102p-C2f0ZhS-.js";import{n as a}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~emdr2jt4-BrmgjeOw.js";import{t as o}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gy8zbn65-CGt6bWRT.js";import{t as s}from"./useMutation-CaSHLnX0.js";import{At as c,Nt as l,k as u,kt as d}from"./active-backend-context-BiwzkzDy.js";import{t as f,z as p}from"./utils-BgGG1znF.js";import{t as m}from"./back-nav-button-D4ngzpSh.js";import{t as h}from"./loading-spinner-DfZ_bhV7.js";import{t as g}from"./brand-button-DGN6Y9o6.js";import{i as _}from"./dropdown-classes-BB8rzqXL.js";import{t as v}from"./use-llm-profiles-2Wc2db8u.js";import{n as y,t as b}from"./use-agent-profiles-TsOdIyw5.js";import{i as x,n as S,t as C}from"./use-can-manage-org-profiles-Bt1M71u5.js";import{t as w}from"./u-edit-809W9D9T.js";import{t as T}from"./settings-dropdown-input-DYCULKpp.js";import{r as E}from"./typography-iYhzLlHO.js";import{o as D}from"./extension-module-card-classes-Bo43vY5V.js";import{i as O,n as k,o as A,r as j,t as M}from"./badge-1Mf1iPcX.js";import{t as N}from"./u-check-circle-DBEvndTS.js";import{i as P,n as F,r as I,t as L}from"./settings-list-classes-WpQi0q1L.js";import{n as R}from"./settings-section-header-context-CnIIQAUn.js";import{t as z}from"./use-save-agent-profile-D0wC5ExW.js";import{n as B}from"./use-activate-agent-profile-CDHA52tC.js";import{t as V}from"./merge-agent-profile-save-input-WcFmQVKK.js";import{i as H,t as U}from"./agent-settings-WzqXk6B4.js";var W=e(t(),1),G=e(n(),1),K=r();function q({onEdit:e,onSetActive:t,onDelete:n,isActive:r,isActivating:i,onClose:a,anchorRef:s}){let{t:c}=o(`openhands`),l=(0,W.useRef)(null),u=(0,W.useRef)([]),d=s?.current??null,[m,h]=(0,W.useState)();(0,W.useLayoutEffect)(()=>{if(!d)return;let e=()=>{let e=d.getBoundingClientRect();e&&h({position:`fixed`,zIndex:9999,top:e.bottom+8,right:window.innerWidth-e.right,width:`max-content`})};return e(),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[d]),(0,W.useEffect)(()=>{u.current[0]?.focus()},[]),(0,W.useEffect)(()=>{let e=e=>{let t=e.target;l.current&&!l.current.contains(t)&&a()},t=e=>{e.key===`Escape`&&a()};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[a]);let g=e=>{e(),a()},v=(0,W.useCallback)((e,t)=>{if(e.key===`Tab`){a();return}let n=u.current.filter(Boolean).length;if(e.key===`ArrowDown`){e.preventDefault();let r=(t+1)%n;u.current[r]?.focus()}else if(e.key===`ArrowUp`){e.preventDefault();let r=(t-1+n)%n;u.current[r]?.focus()}},[a]),y=r||i,b=!!d,S=(0,K.jsxs)(`div`,{ref:l,className:f(`absolute right-0 top-full z-10 mt-2 w-[160px] rounded-md border border-[var(--oh-border-subtle)] bg-tertiary px-1 py-1 shadow-lg`,_,b&&`!static !top-auto !bottom-auto !left-auto !right-auto !mt-0`),role:`menu`,"aria-orientation":`vertical`,"data-testid":`agent-profile-actions-menu`,children:[(0,K.jsx)(k,{index:0,icon:(0,K.jsx)(w,{width:16,height:16}),label:c(p.SETTINGS$PROFILE_EDIT),onClick:()=>g(e),onKeyDown:v,menuItemsRef:u,testId:`agent-profile-edit`}),(0,K.jsx)(k,{index:1,icon:(0,K.jsx)(N,{width:16,height:16}),label:c(p.SETTINGS$PROFILE_SET_ACTIVE),onClick:()=>g(t),onKeyDown:v,menuItemsRef:u,disabled:y,testId:`agent-profile-set-active`}),(0,K.jsx)(k,{index:2,icon:(0,K.jsx)(x,{width:16,height:16}),label:c(p.BUTTON$DELETE),onClick:()=>g(n),onKeyDown:v,menuItemsRef:u,testId:`agent-profile-delete`})]});return b?typeof document>`u`||!m?null:G.createPortal((0,K.jsx)(`div`,{style:m,children:S}),document.body):S}function J({profile:e,isActive:t,canManage:n,onActivate:r,onEdit:i,onDelete:a,isActivating:s}){let{t:c}=o(`openhands`),[l,u]=(0,W.useState)(!1),d=(0,W.useRef)(null),m=e.agent_kind===`openhands`?e.llm_profile_ref:c(p.SETTINGS$AGENT_TYPE_ACP);return(0,K.jsxs)(`div`,{"data-testid":`agent-profile-row`,className:f(P,`justify-between gap-3`),children:[(0,K.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-3`,children:[(0,K.jsx)(`span`,{className:`min-w-0 max-w-full truncate text-sm font-medium text-white`,title:e.name,children:e.name}),m?(0,K.jsx)(`span`,{className:`min-w-0 max-w-full truncate text-sm text-[var(--oh-muted)]`,title:m,children:m}):null,t&&(0,K.jsx)(M,{className:`shrink-0 whitespace-nowrap px-2.5 py-1 text-xs`,"data-testid":`agent-profile-active-badge`,children:c(p.SETTINGS$PROFILE_DEFAULT)})]}),n&&(0,K.jsxs)(`div`,{className:`relative shrink-0`,children:[(0,K.jsx)(S,{ref:d,onClick:()=>u(e=>!e),ariaLabel:c(p.SETTINGS$PROFILE_MENU),testId:`agent-profile-menu-trigger`,className:I}),l&&(0,K.jsx)(q,{anchorRef:d,onEdit:()=>i(e),onSetActive:()=>r(e),onDelete:()=>a(e),isActive:t,isActivating:s,onClose:()=>u(!1)})]})]})}function Y({isLoading:e,loadError:t,profiles:n,activeId:r,canManage:i,onActivate:a,onEdit:s,onDelete:c,isActivating:l}){let{t:u}=o(`openhands`);return e?(0,K.jsx)(`div`,{className:`flex justify-center p-4`,children:(0,K.jsx)(h,{size:`large`})}):t?(0,K.jsx)(`div`,{"data-testid":`agent-profiles-load-error`,className:D,children:(0,K.jsx)(`p`,{className:`text-sm text-red-400`,children:u(p.SETTINGS$PROFILES_LOAD_ERROR)})}):n.length===0?(0,K.jsx)(`div`,{"data-testid":`agent-profiles-empty`,className:D,children:(0,K.jsx)(`p`,{className:`text-sm text-[var(--oh-muted)]`,children:u(p.SETTINGS$PROFILES_EMPTY)})}):(0,K.jsx)(`div`,{className:f(L,F),children:n.map(e=>(0,K.jsx)(J,{profile:e,isActive:!!e.id&&e.id===r,canManage:i,onActivate:a,onEdit:s,onDelete:c,isActivating:l},e.name))})}function X(){let e=a();return s({mutationFn:e=>y.deleteProfile(e),onSuccess:async()=>{await e.invalidateQueries({queryKey:u.all})},meta:{disableToast:!0}})}function Z({profile:e,onClose:t}){let{t:n}=o(`openhands`),r=X(),i=(0,W.useRef)(null);if(!e)return null;let a=async()=>{try{await r.mutateAsync(e.name),c(n(p.SETTINGS$PROFILE_DELETED,{name:e.name})),t()}catch(e){d(e instanceof Error?e.message:n(p.ERROR$GENERIC))}},s=()=>{r.isPending||t()},l=(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(g,{ref:i,type:`button`,variant:`tertiary`,onClick:s,isDisabled:r.isPending,children:n(p.BUTTON$CANCEL)}),(0,K.jsx)(g,{testId:`delete-agent-profile-confirm`,type:`button`,variant:`danger`,onClick:a,isDisabled:r.isPending,"aria-busy":r.isPending,children:r.isPending?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(h,{size:`small`}),(0,K.jsx)(`span`,{className:`sr-only`,children:n(p.BUTTON$DELETE)})]}):n(p.BUTTON$DELETE)})]});return(0,K.jsx)(j,{isOpen:!0,title:n(p.SETTINGS$PROFILE_DELETE_TITLE),footer:l,onClose:s,initialFocusRef:i,children:(0,K.jsx)(`p`,{className:`text-sm break-all`,children:n(p.SETTINGS$PROFILE_DELETE_CONFIRMATION,{name:e.name})})})}function Q({onAddProfile:e,onEditProfile:t}){let{t:n}=o(`openhands`),{data:r,isLoading:i,error:a}=b(),s=B(),l=C(),[u,d]=(0,W.useState)(null),f=r?.profiles??[],m=r?.active_agent_profile_id??null;return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,K.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,K.jsx)(`h2`,{className:`text-base font-medium text-white`,children:n(p.SETTINGS$AVAILABLE_PROFILES)}),e&&l?(0,K.jsx)(g,{testId:`add-agent-profile`,type:`button`,variant:`secondary`,className:`ml-auto`,onClick:e,children:n(p.SETTINGS$ADD_AGENT_PROFILE)}):null]}),(0,K.jsx)(Y,{isLoading:i,loadError:a??null,profiles:f,activeId:m,canManage:l,onActivate:async e=>{if(e.id)try{await s.mutateAsync(e.id),c(n(p.SETTINGS$PROFILE_ACTIVATED,{name:e.name}))}catch(e){console.error(`Failed to activate agent profile:`,e)}},onEdit:e=>t?.(e),onDelete:d,isActivating:s.isPending})]}),(0,K.jsx)(Z,{profile:u,onClose:()=>d(null)})]})}function $(){let e=a();return s({mutationFn:({name:e,newName:t})=>y.renameProfile(e,t),onSuccess:async()=>{await e.invalidateQueries({queryKey:u.all})},meta:{disableToast:!0}})}function ee(e){return e.agent_kind===`acp`?{agent_kind:`acp`,acp_server:e.acp_server,acp_command:e.acp_command?H(e.acp_command):[],acp_args:e.acp_args??[],acp_model:e.acp_model??``}:{agent_kind:`openhands`,enable_sub_agents:e.enable_sub_agents,tool_concurrency_limit:e.tool_concurrency_limit}}function te(){let{t:e}=o(`openhands`),{setHideSectionHeader:t}=R(),n=z(),r=$(),{data:i}=b(),{data:a,isLoading:s}=v(),[u,f]=(0,W.useState)(`list`),[h,_]=(0,W.useState)(``),[x,S]=(0,W.useState)(null),[C,w]=(0,W.useState)(null),[D,k]=(0,W.useState)(``),[j,M]=(0,W.useState)(null),[N,P]=(0,W.useState)(!1);(0,W.useEffect)(()=>(t(u!==`list`),()=>t(!1)),[u,t]);let F=a?.profiles??[],I=a?.active_profile??F[0]?.name??``,L=(0,W.useMemo)(()=>new Set(i?.profiles?.map(e=>e.name)??[]),[i]),B=(0,W.useMemo)(()=>!(!A(h,{isRequired:!0})||u===`create`&&L.has(h)||u===`edit`&&h!==x?.name&&L.has(h)),[h,u,L,x?.name]),H=(0,W.useCallback)(()=>{_(``),S(null),w({agent_kind:`openhands`}),k(I),M(null),f(`create`)},[I]),G=(0,W.useCallback)(async t=>{try{let e=(await y.getProfile(t.name,`encrypted`)).profile;S(e),w(ee(e)),e.agent_kind===`openhands`?k(s||F.some(t=>t.name===e.llm_profile_ref)?e.llm_profile_ref:I):k(``),_(e.name),M(null),f(`edit`)}catch(t){console.error(`Failed to fetch agent profile:`,t),d(e(p.ERROR$GENERIC))}},[e,F,s,I]),q=(0,W.useCallback)(()=>{f(`list`),S(null),_(``),w(null),M(null)},[]),J=(0,W.useCallback)(async()=>{if(!j||!B)return;let t;try{let n=j.buildAgentProfileFields();if(n.agent_kind===`openhands`){if(!D){d(e(p.SETTINGS$AGENT_PROFILE_LLM_REQUIRED));return}t={...n,llm_profile_ref:D}}else t=n}catch(t){d(t instanceof Error?t.message:e(p.ERROR$GENERIC));return}let i=h.trim(),a=x?.name,o=u===`edit`&&a&&a!==i;P(!0);try{if(j.credentials.isDirty){if(!await j.credentials.save({silent:!0}))return;j.credentials.reset()}o&&await r.mutateAsync({name:a,newName:i});let s=V(u===`edit`?x:null,t);await n.mutateAsync({name:i,profile:s}),c(e(u===`create`?p.SETTINGS$PROFILE_CREATED:p.SETTINGS$PROFILE_UPDATED,{name:i})),q()}catch(t){d(l(t)||e(p.ERROR$GENERIC))}finally{P(!1)}},[j,B,D,h,u,x,n,r,e,q]);if(u===`list`)return(0,K.jsx)(Q,{onAddProfile:H,onEditProfile:G});let Y=e(u===`edit`?p.SETTINGS$EDIT_AGENT_PROFILE:p.SETTINGS$ADD_AGENT_PROFILE),X=u===`edit`&&x?e(p.SETTINGS$PROFILE_LOADED,{name:x.name}):e(p.SETTINGS$PROFILE_SAVE_HINT),Z=j?.agentType!==`acp`;return(0,K.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,K.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,K.jsx)(m,{testId:`back-to-agent-profiles`,onClick:q,children:e(p.BUTTON$BACK)}),(0,K.jsx)(E.H2,{testId:`agent-profile-editor-title`,children:Y}),(0,K.jsx)(`p`,{"data-testid":`agent-profile-editor-description`,className:`text-sm leading-5 text-tertiary-light`,children:X})]}),(0,K.jsx)(O,{testId:`agent-profile-name-input`,value:h,onChange:_,isRequired:!0}),(0,K.jsx)(U,{embedded:!0,agentSettingsOverride:C,onSaveControlChange:M},u===`edit`?`edit-${x?.id}`:`new-profile`),Z&&(F.length>0?(0,K.jsx)(T,{testId:`agent-profile-llm-selector`,name:`agent-profile-llm`,label:e(p.SETTINGS$AGENT_PROFILE_LLM_LABEL),items:F.map(e=>({key:e.name,label:e.model?`${e.name} (${e.model})`:e.name})),selectedKey:D,onSelectionChange:e=>e&&k(String(e))}):(0,K.jsx)(`p`,{"data-testid":`agent-profile-no-llm`,className:`text-sm text-red-400`,children:e(p.SETTINGS$AGENT_PROFILE_NO_LLM)})),(0,K.jsxs)(`div`,{className:`flex justify-start gap-3 pt-4`,children:[(0,K.jsx)(g,{testId:`cancel-agent-profile-btn`,type:`button`,variant:`secondary`,onClick:q,children:e(p.BUTTON$CANCEL)}),(0,K.jsx)(g,{testId:`save-agent-profile-btn`,type:`button`,variant:`primary`,onClick:J,isDisabled:!B||N||!j?.isValid,"aria-busy":N,children:e(N?p.SETTINGS$SAVING:p.BUTTON$SAVE)})]})]})}var ne={hideTitle:!1},re=i(function(){return(0,K.jsx)(te,{})});export{re as default,ne as handle};
1
+ import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{St as t,bt as n,yt as r}from"./vendor-styling-Ck5D_A2Q.js";import{U as i}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~lq5hicxx-cHFhpUBq.js";import{n as a}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~cy4jtuc2-rfV8mQ9m.js";import{t as o}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gxu4j2ea-Cwhh3zLe.js";import{t as s}from"./useMutation-ChpkYxI5.js";import{At as c,Pt as l,jt as u,k as d}from"./active-backend-context-B0wI7OzM.js";import{t as f,z as p}from"./utils-BX9XJ0IE.js";import{t as m}from"./back-nav-button-BZB6H7xz.js";import{t as h}from"./loading-spinner-6Yj-YyoS.js";import{t as g}from"./brand-button-DJmFCyMK.js";import{i as _}from"./dropdown-classes-f91ARMV1.js";import{t as v}from"./use-llm-profiles-C-tDO6UB.js";import{n as y,t as b}from"./use-agent-profiles-BlQA67MW.js";import{i as x,n as S,t as C}from"./use-can-manage-org-profiles-Clw5Dh1s.js";import{t as w}from"./u-edit-DAkcF52u.js";import{t as T}from"./settings-dropdown-input-Cx4g7Xfl.js";import{r as E}from"./typography-BSbUhJPn.js";import{o as D}from"./extension-module-card-classes-Bo43vY5V.js";import{i as O,n as k,o as A,r as j,t as M}from"./badge-C64c-7PO.js";import{t as N}from"./u-check-circle-BKn1spCL.js";import{i as P,n as F,r as I,t as L}from"./settings-list-classes-C9cLrrcc.js";import{n as R}from"./settings-section-header-context-BOJ_Fbak.js";import{t as z}from"./use-save-agent-profile-CaGVAudI.js";import{n as B}from"./use-activate-agent-profile-2nvALjC-.js";import{t as V}from"./merge-agent-profile-save-input-WcFmQVKK.js";import{i as H,t as U}from"./agent-settings-UE-U4Xii.js";var W=e(t(),1),G=e(n(),1),K=r();function q({onEdit:e,onSetActive:t,onDelete:n,isActive:r,isActivating:i,onClose:a,anchorRef:s}){let{t:c}=o(`openhands`),l=(0,W.useRef)(null),u=(0,W.useRef)([]),d=s?.current??null,[m,h]=(0,W.useState)();(0,W.useLayoutEffect)(()=>{if(!d)return;let e=()=>{let e=d.getBoundingClientRect();e&&h({position:`fixed`,zIndex:9999,top:e.bottom+8,right:window.innerWidth-e.right,width:`max-content`})};return e(),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[d]),(0,W.useEffect)(()=>{u.current[0]?.focus()},[]),(0,W.useEffect)(()=>{let e=e=>{let t=e.target;l.current&&!l.current.contains(t)&&a()},t=e=>{e.key===`Escape`&&a()};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[a]);let g=e=>{e(),a()},v=(0,W.useCallback)((e,t)=>{if(e.key===`Tab`){a();return}let n=u.current.filter(Boolean).length;if(e.key===`ArrowDown`){e.preventDefault();let r=(t+1)%n;u.current[r]?.focus()}else if(e.key===`ArrowUp`){e.preventDefault();let r=(t-1+n)%n;u.current[r]?.focus()}},[a]),y=r||i,b=!!d,S=(0,K.jsxs)(`div`,{ref:l,className:f(`absolute right-0 top-full z-10 mt-2 w-[160px] rounded-md border border-[var(--oh-border-subtle)] bg-tertiary px-1 py-1 shadow-lg`,_,b&&`!static !top-auto !bottom-auto !left-auto !right-auto !mt-0`),role:`menu`,"aria-orientation":`vertical`,"data-testid":`agent-profile-actions-menu`,children:[(0,K.jsx)(k,{index:0,icon:(0,K.jsx)(w,{width:16,height:16}),label:c(p.SETTINGS$PROFILE_EDIT),onClick:()=>g(e),onKeyDown:v,menuItemsRef:u,testId:`agent-profile-edit`}),(0,K.jsx)(k,{index:1,icon:(0,K.jsx)(N,{width:16,height:16}),label:c(p.SETTINGS$PROFILE_SET_ACTIVE),onClick:()=>g(t),onKeyDown:v,menuItemsRef:u,disabled:y,testId:`agent-profile-set-active`}),(0,K.jsx)(k,{index:2,icon:(0,K.jsx)(x,{width:16,height:16}),label:c(p.BUTTON$DELETE),onClick:()=>g(n),onKeyDown:v,menuItemsRef:u,testId:`agent-profile-delete`})]});return b?typeof document>`u`||!m?null:G.createPortal((0,K.jsx)(`div`,{style:m,children:S}),document.body):S}function J({profile:e,isActive:t,canManage:n,onActivate:r,onEdit:i,onDelete:a,isActivating:s}){let{t:c}=o(`openhands`),[l,u]=(0,W.useState)(!1),d=(0,W.useRef)(null),m=e.agent_kind===`openhands`?e.llm_profile_ref:c(p.SETTINGS$AGENT_TYPE_ACP);return(0,K.jsxs)(`div`,{"data-testid":`agent-profile-row`,className:f(P,`justify-between gap-3`),children:[(0,K.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-3`,children:[(0,K.jsx)(`span`,{className:`min-w-0 max-w-full truncate text-sm font-medium text-white`,title:e.name,children:e.name}),m?(0,K.jsx)(`span`,{className:`min-w-0 max-w-full truncate text-sm text-[var(--oh-muted)]`,title:m,children:m}):null,t&&(0,K.jsx)(M,{className:`shrink-0 whitespace-nowrap px-2.5 py-1 text-xs`,"data-testid":`agent-profile-active-badge`,children:c(p.SETTINGS$PROFILE_DEFAULT)})]}),n&&(0,K.jsxs)(`div`,{className:`relative shrink-0`,children:[(0,K.jsx)(S,{ref:d,onClick:()=>u(e=>!e),ariaLabel:c(p.SETTINGS$PROFILE_MENU),testId:`agent-profile-menu-trigger`,className:I}),l&&(0,K.jsx)(q,{anchorRef:d,onEdit:()=>i(e),onSetActive:()=>r(e),onDelete:()=>a(e),isActive:t,isActivating:s,onClose:()=>u(!1)})]})]})}function Y({isLoading:e,loadError:t,profiles:n,activeId:r,canManage:i,onActivate:a,onEdit:s,onDelete:c,isActivating:l}){let{t:u}=o(`openhands`);return e?(0,K.jsx)(`div`,{className:`flex justify-center p-4`,children:(0,K.jsx)(h,{size:`large`})}):t?(0,K.jsx)(`div`,{"data-testid":`agent-profiles-load-error`,className:D,children:(0,K.jsx)(`p`,{className:`text-sm text-red-400`,children:u(p.SETTINGS$PROFILES_LOAD_ERROR)})}):n.length===0?(0,K.jsx)(`div`,{"data-testid":`agent-profiles-empty`,className:D,children:(0,K.jsx)(`p`,{className:`text-sm text-[var(--oh-muted)]`,children:u(p.SETTINGS$PROFILES_EMPTY)})}):(0,K.jsx)(`div`,{className:f(L,F),children:n.map(e=>(0,K.jsx)(J,{profile:e,isActive:!!e.id&&e.id===r,canManage:i,onActivate:a,onEdit:s,onDelete:c,isActivating:l},e.name))})}function X(){let e=a();return s({mutationFn:e=>y.deleteProfile(e),onSuccess:async()=>{await e.invalidateQueries({queryKey:d.all})},meta:{disableToast:!0}})}function Z({profile:e,onClose:t}){let{t:n}=o(`openhands`),r=X(),i=(0,W.useRef)(null);if(!e)return null;let a=async()=>{try{await r.mutateAsync(e.name),u(n(p.SETTINGS$PROFILE_DELETED,{name:e.name})),t()}catch(e){c(e instanceof Error?e.message:n(p.ERROR$GENERIC))}},s=()=>{r.isPending||t()},l=(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(g,{ref:i,type:`button`,variant:`tertiary`,onClick:s,isDisabled:r.isPending,children:n(p.BUTTON$CANCEL)}),(0,K.jsx)(g,{testId:`delete-agent-profile-confirm`,type:`button`,variant:`danger`,onClick:a,isDisabled:r.isPending,"aria-busy":r.isPending,children:r.isPending?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(h,{size:`small`}),(0,K.jsx)(`span`,{className:`sr-only`,children:n(p.BUTTON$DELETE)})]}):n(p.BUTTON$DELETE)})]});return(0,K.jsx)(j,{isOpen:!0,title:n(p.SETTINGS$PROFILE_DELETE_TITLE),footer:l,onClose:s,initialFocusRef:i,children:(0,K.jsx)(`p`,{className:`text-sm break-all`,children:n(p.SETTINGS$PROFILE_DELETE_CONFIRMATION,{name:e.name})})})}function Q({onAddProfile:e,onEditProfile:t}){let{t:n}=o(`openhands`),{data:r,isLoading:i,error:a}=b(),s=B(),c=C(),[l,d]=(0,W.useState)(null),f=r?.profiles??[],m=r?.active_agent_profile_id??null;return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,K.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,K.jsx)(`h2`,{className:`text-base font-medium text-white`,children:n(p.SETTINGS$AVAILABLE_PROFILES)}),e&&c?(0,K.jsx)(g,{testId:`add-agent-profile`,type:`button`,variant:`secondary`,className:`ml-auto`,onClick:e,children:n(p.SETTINGS$ADD_AGENT_PROFILE)}):null]}),(0,K.jsx)(Y,{isLoading:i,loadError:a??null,profiles:f,activeId:m,canManage:c,onActivate:async e=>{if(e.id)try{await s.mutateAsync(e.id),u(n(p.SETTINGS$PROFILE_ACTIVATED,{name:e.name}))}catch(e){console.error(`Failed to activate agent profile:`,e)}},onEdit:e=>t?.(e),onDelete:d,isActivating:s.isPending})]}),(0,K.jsx)(Z,{profile:l,onClose:()=>d(null)})]})}function $(){let e=a();return s({mutationFn:({name:e,newName:t})=>y.renameProfile(e,t),onSuccess:async()=>{await e.invalidateQueries({queryKey:d.all})},meta:{disableToast:!0}})}function ee(e){return e.agent_kind===`acp`?{agent_kind:`acp`,acp_server:e.acp_server,acp_command:e.acp_command?H(e.acp_command):[],acp_args:e.acp_args??[],acp_model:e.acp_model??``}:{agent_kind:`openhands`,enable_sub_agents:e.enable_sub_agents,tool_concurrency_limit:e.tool_concurrency_limit}}function te(){let{t:e}=o(`openhands`),{setHideSectionHeader:t}=R(),n=z(),r=$(),{data:i}=b(),{data:a,isLoading:s}=v(),[d,f]=(0,W.useState)(`list`),[h,_]=(0,W.useState)(``),[x,S]=(0,W.useState)(null),[C,w]=(0,W.useState)(null),[D,k]=(0,W.useState)(``),[j,M]=(0,W.useState)(null),[N,P]=(0,W.useState)(!1);(0,W.useEffect)(()=>(t(d!==`list`),()=>t(!1)),[d,t]);let F=a?.profiles??[],I=a?.active_profile??F[0]?.name??``,L=(0,W.useMemo)(()=>new Set(i?.profiles?.map(e=>e.name)??[]),[i]),B=(0,W.useMemo)(()=>!(!A(h,{isRequired:!0})||d===`create`&&L.has(h)||d===`edit`&&h!==x?.name&&L.has(h)),[h,d,L,x?.name]),H=(0,W.useCallback)(()=>{_(``),S(null),w({agent_kind:`openhands`}),k(I),M(null),f(`create`)},[I]),G=(0,W.useCallback)(async t=>{try{let e=(await y.getProfile(t.name,`encrypted`)).profile;S(e),w(ee(e)),e.agent_kind===`openhands`?k(s||F.some(t=>t.name===e.llm_profile_ref)?e.llm_profile_ref:I):k(``),_(e.name),M(null),f(`edit`)}catch(t){console.error(`Failed to fetch agent profile:`,t),c(e(p.ERROR$GENERIC))}},[e,F,s,I]),q=(0,W.useCallback)(()=>{f(`list`),S(null),_(``),w(null),M(null)},[]),J=(0,W.useCallback)(async()=>{if(!j||!B)return;let t;try{let n=j.buildAgentProfileFields();if(n.agent_kind===`openhands`){if(!D){c(e(p.SETTINGS$AGENT_PROFILE_LLM_REQUIRED));return}t={...n,llm_profile_ref:D}}else t=n}catch(t){c(t instanceof Error?t.message:e(p.ERROR$GENERIC));return}let i=h.trim(),a=x?.name,o=d===`edit`&&a&&a!==i;P(!0);try{if(j.credentials.isDirty){if(!await j.credentials.save({silent:!0}))return;j.credentials.reset()}o&&await r.mutateAsync({name:a,newName:i});let s=V(d===`edit`?x:null,t);await n.mutateAsync({name:i,profile:s}),u(e(d===`create`?p.SETTINGS$PROFILE_CREATED:p.SETTINGS$PROFILE_UPDATED,{name:i})),q()}catch(t){c(l(t)||e(p.ERROR$GENERIC))}finally{P(!1)}},[j,B,D,h,d,x,n,r,e,q]);if(d===`list`)return(0,K.jsx)(Q,{onAddProfile:H,onEditProfile:G});let Y=e(d===`edit`?p.SETTINGS$EDIT_AGENT_PROFILE:p.SETTINGS$ADD_AGENT_PROFILE),X=d===`edit`&&x?e(p.SETTINGS$PROFILE_LOADED,{name:x.name}):e(p.SETTINGS$PROFILE_SAVE_HINT),Z=j?.agentType!==`acp`;return(0,K.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,K.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,K.jsx)(m,{testId:`back-to-agent-profiles`,onClick:q,children:e(p.BUTTON$BACK)}),(0,K.jsx)(E.H2,{testId:`agent-profile-editor-title`,children:Y}),(0,K.jsx)(`p`,{"data-testid":`agent-profile-editor-description`,className:`text-sm leading-5 text-tertiary-light`,children:X})]}),(0,K.jsx)(O,{testId:`agent-profile-name-input`,value:h,onChange:_,isRequired:!0}),(0,K.jsx)(U,{embedded:!0,agentSettingsOverride:C,onSaveControlChange:M},d===`edit`?`edit-${x?.id}`:`new-profile`),Z&&(F.length>0?(0,K.jsx)(T,{testId:`agent-profile-llm-selector`,name:`agent-profile-llm`,label:e(p.SETTINGS$AGENT_PROFILE_LLM_LABEL),items:F.map(e=>({key:e.name,label:e.model?`${e.name} (${e.model})`:e.name})),selectedKey:D,onSelectionChange:e=>e&&k(String(e))}):(0,K.jsx)(`p`,{"data-testid":`agent-profile-no-llm`,className:`text-sm text-red-400`,children:e(p.SETTINGS$AGENT_PROFILE_NO_LLM)})),(0,K.jsxs)(`div`,{className:`flex justify-start gap-3 pt-4`,children:[(0,K.jsx)(g,{testId:`cancel-agent-profile-btn`,type:`button`,variant:`secondary`,onClick:q,children:e(p.BUTTON$CANCEL)}),(0,K.jsx)(g,{testId:`save-agent-profile-btn`,type:`button`,variant:`primary`,onClick:J,isDisabled:!B||N||!j?.isValid,"aria-busy":N,children:e(N?p.SETTINGS$SAVING:p.BUTTON$SAVE)})]})]})}var ne={hideTitle:!1},re=i(function(){return(0,K.jsx)(te,{})});export{re as default,ne as handle};
@@ -0,0 +1,41 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/secrets-service-DGUNlwQd.js","assets/rolldown-runtime-Cyuzqnbw.js","assets/active-backend-context-B0wI7OzM.js","assets/vendor-styling-Ck5D_A2Q.js","assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kv3pap4j-oGvLV0dO.js","assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~cy4jtuc2-rfV8mQ9m.js","assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~lq5hicxx-cHFhpUBq.js","assets/utils-BX9XJ0IE.js","assets/proxy-CIGI9zQC.js"])))=>i.map(i=>d[i]);
2
+ import{xt as e}from"./vendor-styling-Ck5D_A2Q.js";import{_ as t,c as n,f as r,g as i,y as a}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kv3pap4j-oGvLV0dO.js";import{$ as o,Q as s,T as c,U as l,ct as u,ht as ee,lt as d,nt as f,q as p,yt as m}from"./active-backend-context-B0wI7OzM.js";import{C as h}from"./utils-BX9XJ0IE.js";import{r as g,t as _}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-CuQhkiS7.js";import{t as v}from"./proxy-CIGI9zQC.js";import{t as y}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~ht43enc2-C0JXQb_q.js";import{t as b}from"./settings-CWFxymAf.js";import{t as te}from"./settings-service.api-Dz9cZyvx.js";import{t as ne}from"./profiles-service.api-Dl20_2IM.js";import{f as x,o as S,s as C}from"./acp-providers-DLe_gVDY.js";import{d as w,f as T,r as re}from"./llm-subscription-DTqtBCWz.js";import{t as ie}from"./llm-subscription-service-DwjJ8-_X.js";var E=[];for(let e=0;e<256;++e)E.push((e+256).toString(16).slice(1));function ae(e,t=0){return(E[e[t+0]]+E[e[t+1]]+E[e[t+2]]+E[e[t+3]]+`-`+E[e[t+4]]+E[e[t+5]]+`-`+E[e[t+6]]+E[e[t+7]]+`-`+E[e[t+8]]+E[e[t+9]]+`-`+E[e[t+10]]+E[e[t+11]]+E[e[t+12]]+E[e[t+13]]+E[e[t+14]]+E[e[t+15]]).toLowerCase()}var oe=new Uint8Array(16);function se(){return crypto.getRandomValues(oe)}function D(e,t,n){return!t&&!e&&crypto.randomUUID?crypto.randomUUID():ce(e,t,n)}function ce(e,t,n){e||={};let r=e.random??e.rng?.()??se();if(r.length<16)throw Error(`Random bytes length must be >= 16`);if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,t){if(n||=0,n<0||n+16>t.length)throw RangeError(`UUID byte range ${n}:${n+15} is out of buffer bounds`);for(let e=0;e<16;++e)t[n+e]=r[e];return t}return ae(r)}var O=new Map;function le(e){return/^([/\\]|[a-zA-Z]:[/\\])/.test(e)}function ue(e,t){return`${e.replace(/[/\\]+$/,``)}/${t.replace(/^[/\\]+/,``)}`}async function k(e={}){let t=o(e),n=t.host,r=O.get(n);if(r)return r;let a=(async()=>{let{home:e}=await new i(t).getHome();if(!e||typeof e!=`string`)throw Error(`Agent server returned an empty home directory`);return e.replace(/[/\\]+$/,``)})();O.set(n,a);try{return await a}catch(e){throw O.delete(n),e}}async function de(e,t={}){let n=e.replace(/[/\\]+$/,``);return n?le(n)?n:ue(await k(t),n):k(t)}var A=`openhands-agent-server-conversation-metadata`,fe=e=>({source:e.source,ref:e.ref??null,repo_path:e.repo_path??null}),j=()=>{if(typeof window>`u`)return{};try{let e=window.localStorage.getItem(A);if(!e)return{};let t=JSON.parse(e);return!t||typeof t!=`object`?{}:t}catch{return{}}},pe=e=>{if(!(typeof window>`u`)){if(Object.keys(e).length===0){window.localStorage.removeItem(A);return}window.localStorage.setItem(A,JSON.stringify(e))}},M=e=>j()[e]??null,N=(e,t)=>{let n=j();n[e]=t,pe(n)},P=e=>{let t=j();e in t&&(delete t[e],pe(t))};function me(e){if(!e?.id)return e;let t=M(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 F(){let e=u().backend;if(e.kind!==`cloud`)throw Error(`Cloud conversations call requires a cloud backend.`);return e}async function he(e=20,t){let n=F(),r=new URLSearchParams;r.set(`limit`,String(e)),t&&r.set(`page_id`,t),r.set(`sort_order`,`UPDATED_AT_DESC`);let i=await v({backend:n,method:`GET`,path:`/api/v1/app-conversations/search?${r.toString()}`});return{items:(i?.items??[]).map(e=>me(e)),next_page_id:i?.next_page_id??null}}async function I(e){if(e.length===0)return[];let t=F(),n=new URLSearchParams;for(let t of e)n.append(`ids`,t);return(await v({backend:t,method:`GET`,path:`/api/v1/app-conversations?${n.toString()}`})??[]).map(me)}async function ge(e){return await v({backend:F(),method:`POST`,path:`/api/v1/app-conversations`,body:e,headers:c})}async function _e(e){return v({backend:F(),method:`GET`,path:`/api/v1/app-conversations/${e}/download`,responseType:`blob`})}async function ve(e){await v({backend:F(),method:`DELETE`,path:`/api/v1/app-conversations/${e}`})}async function ye(e,t){return await v({backend:F(),method:`PATCH`,path:`/api/v1/app-conversations/${e}`,body:{public:t}})}async function be(e){await v({backend:F(),method:`POST`,path:`/api/v1/sandboxes/${e}/pause`})}async function xe(e){await v({backend:F(),method:`POST`,path:`/api/v1/sandboxes/${e}/resume`})}async function Se(e,t){let n=F(),r=new URLSearchParams;return r.append(`file_path`,t),await v({backend:n,method:`GET`,path:`/api/v1/app-conversations/${e}/file?${r.toString()}`})??``}async function Ce(e){let t=F(),n=new URLSearchParams;return n.set(`ids`,e),(await v({backend:t,method:`GET`,path:`/api/v1/app-conversations/start-tasks?${n.toString()}`}))?.[0]??null}function we(e){return e.kind===`cloud`&&e.authMode===`cookie`||!e.apiKey?{}:e.kind===`cloud`?{Authorization:`Bearer ${e.apiKey}`}:{"X-Session-API-Key":e.apiKey}}var Te=`canvas_ui`,L=`canvas_ui_control`,Ee=`ClientAction_${L}`,De={name:L,description:`The user is interacting with you inside Agent Canvas — a web UI with a chat panel on the left and a tabbed right-side panel (files, terminal, browser, vscode, planner, tasklist). This tool lets you drive that right-side panel so the user sees what you just produced.
3
+
4
+ They will NOT see the files you wrote, the terminal output, or the browser
5
+ unless you call this tool to switch the right-side panel to the relevant
6
+ tab. Call this every time you finish work that produces something the user
7
+ should look at — don't rely on them noticing on their own.
8
+
9
+ When to call (pick the most specific option that matches your last action):
10
+
11
+ * You wrote or modified a single file (ANY language, ANY size — including
12
+ small scripts like a hello-world bash file) →
13
+ command="navigate_to_file", path=<workspace-relative path of that file>
14
+
15
+ * You generated an HTML page, image, SVG, PDF, markdown report, or other
16
+ previewable artifact →
17
+ command="show_preview", path=<that file>
18
+
19
+ * You finished editing multiple files in one logical step →
20
+ command="open_tab", tab="files"
21
+ (The Files tab automatically renders a diff view when the workspace has
22
+ uncommitted git changes, which covers the "highlight changes" case.)
23
+
24
+ * You ran a long-running terminal command, or one whose output the user
25
+ should inspect →
26
+ command="open_tab", tab="terminal"
27
+
28
+ * You browsed to a URL the user should see →
29
+ First call browser_get_state(include_screenshot=true) after your final
30
+ browser interaction so Agent Canvas has a screenshot to display, then call
31
+ command="open_tab", tab="browser"
32
+ (browser_navigate alone only updates the URL; without browser_get_state,
33
+ the Browser tab will open without a screenshot.)
34
+
35
+ Call this BEFORE writing your chat-message summary of the change, so the
36
+ artifact is visible while the user reads what you did. One canvas_ui_control
37
+ call per logical step is enough — don't repeat it for the same file or tab in
38
+ the same turn.`,parameters:{type:`object`,additionalProperties:!1,properties:{command:{type:`string`,enum:[`navigate_to_file`,`open_tab`,`show_preview`],description:`UI command to dispatch.`},path:{type:`string`,description:`Workspace-relative file path. Required for navigate_to_file and show_preview; ignored otherwise.`},tab:{type:`string`,enum:[`files`,`browser`,`vscode`,`terminal`,`planner`,`tasklist`],description:`Tab to open. Required for open_tab; ignored otherwise.`}},required:[`command`]},annotations:{readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1}},Oe=[`terminal`,`file_editor`,`task_tracker`],R=`browser_tool_set`,z=`task_tool_set`;function ke(){return!0}function B(e){if(typeof e==`string`){let t=e.trim();if(!t)return null;try{return B(JSON.parse(t))}catch{return null}}if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e;return!t.services||typeof t.services!=`object`?null:t}async function Ae(){let e;try{e=o({timeout:3e3})}catch{return null}let t=B(l({host:e.host})?.runtime_services);if(t)return t;try{return B((await new a(e).getServerInfo()).runtime_services)}catch{return null}}function je(e){let t=B(e);if(!t?.services)return;let n=[];n.push(`<RUNTIME_SERVICES>`),t.mode?n.push(`You are running inside an agent-canvas dev stack started in '${t.mode}' mode.`):n.push(`You are running inside an agent-canvas dev stack.`),n.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:r,ingress:i,automation:a}=t.services,{frontend:o}=t.services;r?.url_from_agent&&n.push(`* Agent Server (you): ${r.url_from_agent}`,` ${r.description??`The agent-server hosting your tool calls.`}`),i?.url_from_agent&&n.push(`* Ingress: ${i.url_from_agent}`,` ${i.description??`Unified entry point for browser-facing traffic.`}`),o?.url_from_agent&&n.push(`* Frontend: ${o.url_from_agent}`,` ${o.description??`Frontend dev server.`}`),a?.url_from_agent?(n.push(`* Automation backend: ${a.url_from_agent}`,` ${a.description??`OpenHands Automations service.`}`),a.docs_url&&n.push(` Docs: ${a.docs_url}`),a.openapi_url&&n.push(` OpenAPI: ${a.openapi_url}`),a.auth_env_var&&n.push(` Auth: header 'X-Session-API-Key: $${a.auth_env_var}'`)):n.push(`* Automation backend: not running in this dev mode (skip /api/automation calls).`);let s=r?.url_from_agent;return n.push(``,`Trust this block over guessing: do not assume any other URLs are running.`),s&&n.push(`In particular, ${s} inside your sandbox is the Agent Server`,`you are running inside of — NOT the automation backend.`),n.push(`</RUNTIME_SERVICES>`),n.join(`
39
+ `)}function Me(e){let{host:t}=o();return`${t}/api/conversations/${e}`}function V(e){return`Conversation ${e.slice(0,5)}`}function H(e){let t=M(e.id),n=e.agent?.kind===`ACPAgent`,r=n?e.tags?.acpserver??e.agent?.acp_server??null:null;return{id:e.id,created_by_user_id:null,selected_repository:t?.selected_repository??null,selected_branch:t?.selected_branch??null,git_provider:t?.git_provider??null,selected_workspace:t?.selected_workspace??null,active_profile:t?.active_profile??null,title:e.title?.trim()?e.title:V(e.id),trigger:null,pr_number:[],agent_kind:n?`acp`:`openhands`,acp_server:r,tags:e.tags??null,launched_agent_profile:e.launched_agent_profile??null,llm_model:n?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??b.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??h.IDLE,sandbox_status:e.sandbox_status??null,conversation_url:Me(e.id),session_api_key:o().apiKey??null,sandbox_id:null,workspace:{working_dir:e.workspace?.working_dir??m()},public:!1,sub_conversation_ids:[]}}function Ne(e){return{items:e.items.map(H),next_page_id:e.next_page_id??null}}var U=`acpserver`,Pe=new Set([U]);function Fe(e){return e?Object.entries(e).filter(([e])=>!Pe.has(e)).sort(([e],[t])=>e.localeCompare(t)):[]}var Ie=`gAAAAA`,Le=new Set([`schema_version`,`agent_settings`,`workspace`,`conversation_id`,`initial_message`,`plugins`]);function W(e){return!e||typeof e!=`object`||Array.isArray(e)?{}:structuredClone(e)}function G(e){if(typeof e!=`string`)return;let t=e.trim();return t.length>0?t:void 0}function K(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function q(e){return typeof e==`string`?e.startsWith(Ie):Array.isArray(e)?e.some(q):K(e)?Object.values(e).some(q):!1}function Re(e){return K(e)?Object.values(e).some(q):!1}function ze(e){return e.confirmation_mode===!0?e.security_analyzer===`llm`?{kind:`ConfirmRisky`,threshold:`HIGH`,confirm_unknown:!0}:{kind:`AlwaysConfirm`}:{kind:`NeverConfirm`}}function Be(e){switch(e.security_analyzer){case`llm`:return{kind:`LLMSecurityAnalyzer`};case`pattern`:return{kind:`PatternSecurityAnalyzer`};case`policy_rail`:return{kind:`PolicyRailSecurityAnalyzer`};default:return}}function Ve(e){return!!e&&typeof e==`object`&&!Array.isArray(e)&&typeof e.name==`string`}function J(e,t){return e===R?ke()&&p(e):e===z?t.enable_sub_agents===!0&&p(e):!0}function He(e){let t=new Map;for(let n of Oe)J(n,e)&&t.set(n,{name:n,params:{}});for(let n of[R,z])J(n,e)&&t.set(n,{name:n,params:{}});let n=e.tools;if(Array.isArray(n)&&n.every(e=>Ve(e)))for(let r of n)J(r.name,e)&&t.set(r.name,{name:r.name,params:W(r.params)});return Array.from(t.values())}function Ue(e,t){let n=[e?.trim(),t?.trim()].filter(Boolean);return n.length===0?null:{role:`user`,content:[{type:`text`,text:n.join(`
40
+
41
+ `)}],run:!0}}function We(){return y.map(e=>{let t=e.triggers?.length>0?{type:`keyword`,keywords:e.triggers}:null,n=`/home/runner/work/OpenHands/OpenHands/node_modules/@openhands/extensions/skills/${e.name}/SKILL.md`;return{name:e.name,content:e.content,trigger:t,source:n,description:e.description??null,is_agentskills_format:!0,...e.license?{license:e.license}:{},...e.compatibility?{compatibility:e.compatibility}:{}}})}function Ge(e,t,n=[]){let r=je(t),i=W(e.agent_context),a=Array.isArray(i.skills)?i.skills:[],o=new Set(n),s=[...a,...We()].filter(e=>typeof e.name!=`string`||!o.has(e.name));return{...i,skills:s,load_public_skills:!1,load_user_skills:!0,load_project_skills:!0,...r?{system_message_suffix:r}:{}}}function Ke(e){return W(e.agent_settings).agent_kind===`acp`}function qe(e){let t=W(e.agent_settings).acp_server;return typeof t==`string`&&t.length>0?t:void 0}function Je(e){let t=e.acp_command;if(!(Array.isArray(t)&&t.length===0)&&t!==void 0)return t;let n=C(typeof e.acp_server==`string`?e.acp_server:void 0);return n?[...n.default_command]:t}function Ye(e,t){let n=W(e.agent_settings),r={agent_kind:`acp`,agent_context:Ge(n,t,e.disabled_skills)};for(let e of _){if(e===`acp_model`||e===`acp_env`)continue;let t=e===`acp_command`?Je(n):n[e];t!=null&&(r[e]=t)}let i=W(n.mcp_config);Object.keys(i).length>0&&(r.mcp_config=i);let a=typeof n.acp_server==`string`?n.acp_server:void 0,o=x({configured:n.acp_model,providerDefault:S(a)});return o&&(r.acp_model=o),r}function Xe(e,t){let n=W(e.agent_settings),r=W(n.llm);r.model=typeof r.model==`string`&&r.model.trim().length>0?r.model:b.llm_model,r.stream=!0;let i=G(r.api_key);i?r.api_key=i:delete r.api_key;let a=G(r.base_url);a?r.base_url=a:delete r.base_url,T(r)?(r.auth_type=re,r.subscription_vendor=w,delete r.api_key,delete r.base_url):(delete r.auth_type,delete r.subscription_vendor);let o=W(n.mcp_config);Object.keys(o).length===0&&delete n.mcp_config,delete n.acp_server;for(let e of _)delete n[e];return delete n.acp_env,{...n,llm:r,agent_context:Ge(n,t,e.disabled_skills),tools:He(n)}}function Ze(e,t){return Ke(e)?Ye(e,t):Xe(e,t)}function Qe(e){let{settings:t,query:n,conversationInstructions:r,plugins:i,workingDir:a}=e,o=W(t.conversation_settings),s=Ue(n,r);return Le.forEach(e=>delete o[e]),{...o,workspace:{kind:`LocalWorkspace`,working_dir:a??m()},...s?{initial_message:s}:{},...i?.length?{plugins:i.map(e=>({source:e.source,...e.ref?{ref:e.ref}:{},...e.repo_path?{repo_path:e.repo_path}:{}}))}:{}}}function $e(e){let t=e.encryptedAgentSettings?{...e.settings,agent_settings:e.encryptedAgentSettings}:e.settings,n=Ke(t),r=e.agentProfileId?e.agentProfileKind:n?`acp`:`openhands`,i=Ze(t,e.runtimeServicesInfo),a=n?qe(t):void 0,o=Qe(e.encryptedConversationSettings?{...e,settings:{...e.settings,conversation_settings:e.encryptedConversationSettings}}:e),s={...e.agentProfileId?{agent_profile_id:e.agentProfileId}:{agent_settings:i},workspace:o.workspace,client_tools:r===`openhands`?[De]:[],confirmation_policy:ze(o),max_iterations:typeof o.max_iterations==`number`?o.max_iterations:500,stuck_detection:!0,autotitle:!0,...e.titleLlmProfile?{title_llm_profile:e.titleLlmProfile}:{},worktree:e.worktree??!0};!e.agentProfileId&&a&&(s.tags={[U]:a}),!e.agentProfileId&&e.secretsEncrypted&&(!n||Re(i.mcp_config))&&(s.secrets_encrypted=!0),e.conversationId&&(s.conversation_id=e.conversationId);let c=Be(o);c&&(s.security_analyzer=c),o.initial_message&&(s.initial_message=o.initial_message),o.plugins&&(s.plugins=o.plugins),o.hook_config&&(s.hook_config=o.hook_config);let l={...o.tool_module_qualnames??{}};if(delete l[Te],delete l[L],Object.keys(l).length>0&&(s.tool_module_qualnames=l),o.agent_definitions&&(s.agent_definitions=o.agent_definitions),e.customSecrets&&e.customSecrets.length>0){let t=d(),n=t?we(t):{},r={};for(let t of e.customSecrets){let e={kind:`LookupSecret`,url:`/api/settings/secrets/${encodeURIComponent(t.name)}`,description:t.description};Object.keys(n).length>0&&(e.headers=n),r[t.name]=e}s.secrets=r}return s}var et=`Connect your ChatGPT subscription before starting a conversation with this LLM profile.`;async function tt(e){if(T(W(e.llm))&&!(await ie.getOpenAIStatus()).connected)throw Error(et)}async function nt(t){let{SecretsService:n}=await e(async()=>{let{SecretsService:e}=await import(`./secrets-service-DGUNlwQd.js`).then(e=>e.n);return{SecretsService:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8])),[r,i,a]=await Promise.all([te.getSettingsForConversation(),n.getSecrets(),Ae()]),{agentSettings:o,conversationSettings:s,secretsEncrypted:c}=r;return t.agentProfileId||await tt(o),$e({...t,encryptedAgentSettings:o,encryptedConversationSettings:s,secretsEncrypted:c,customSecrets:i,runtimeServicesInfo:a})}function rt(){return{hooks:[]}}function it(e,t){if(!t)return;let n=new Set(t.profiles.map(e=>e.name));if(e&&n.has(e))return e;if(t.active_profile&&n.has(t.active_profile))return t.active_profile}var at=`1970-01-01T00:00:00.000Z`,ot=300*1e3,st=`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 Y(){return Error(st)}function X(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ct(e){return typeof e==`number`?e:null}function Z(e){return typeof e==`number`?e:0}function Q(e){return typeof e==`string`?e:null}function lt(e,t,n){let r=e[t]??e[n];return typeof r==`string`&&r.trim()?r:at}function ut(e){return X(e)?{prompt_tokens:Z(e.prompt_tokens),completion_tokens:Z(e.completion_tokens),cache_read_tokens:Z(e.cache_read_tokens),cache_write_tokens:Z(e.cache_write_tokens),context_window:Z(e.context_window),per_turn_token:Z(e.per_turn_token)}:null}function dt(e){return X(e)?{accumulated_cost:ct(e.accumulated_cost),max_budget_per_task:ct(e.max_budget_per_task),accumulated_token_usage:ut(e.accumulated_token_usage)}:null}function ft(e){if(!X(e))return null;let t=X(e.llm)?{model:Q(e.llm.model)}:null;return{kind:Q(e.kind),acp_server:Q(e.acp_server),acp_model:Q(e.acp_model),llm:t}}function pt(e){return X(e)?{working_dir:Q(e.working_dir)}:null}function mt(e){if(!X(e))return null;let t={};for(let[n,r]of Object.entries(e))typeof r==`string`&&(t[n]=r);return t}function ht(e){if(!X(e))return null;let{agent_profile_id:t,revision:n}=e;return typeof t!=`string`||typeof n!=`number`?null:{agent_profile_id:t,revision:n}}function gt(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 _t(e,t){let n=gt(e),r=gt(t);if(!n||!r||n!==r&&!n.startsWith(`${r}/`))throw Error(`Conversation file path must stay inside the workspace`);return n}function vt(e){if(!X(e)||typeof e.id!=`string`||!e.id.trim())throw Y();return{id:e.id.trim(),title:Q(e.title),created_at:lt(e,`created_at`,`createdAt`),updated_at:lt(e,`updated_at`,`updatedAt`),execution_status:Q(e.execution_status),sandbox_status:Q(e.sandbox_status),metrics:dt(e.metrics),agent:ft(e.agent),workspace:pt(e.workspace),tags:mt(e.tags),launched_agent_profile:ht(e.launched_agent_profile),current_model_id:Q(e.current_model_id),current_model_name:Q(e.current_model_name)}}function $(e){if(!Array.isArray(e))throw Y();return e.map(vt)}function yt(e){if(Array.isArray(e))return{items:$(e),next_page_id:null};if(!X(e))throw Y();return{items:$(e.items),next_page_id:typeof e.next_page_id==`string`?e.next_page_id:null}}var bt=new Set([`idle`,`running`,`paused`,`waiting_for_confirmation`,`finished`,`error`,`stuck`]);function xt(e){let t=e??`idle`;return bt.has(t)?t:`idle`}function St(e,t){if(!e)throw Error(`Conversation ${t} was not found`);return e}var Ct=class{static async sendMessage(e,n,r){let i=u().backend,a=r?.conversationUrl??null,s=r?.sessionApiKey??null;if(i.kind===`cloud`){if(!a||!s){let[t]=await I([e]);a=t?.conversation_url?.trim()??null,s=t?.session_api_key?.trim()??null}if(!a||!s)throw Error(`Conversation sandbox is still starting. Wait for it to finish, then try again.`);return await v({backend:i,method:`POST`,hostOverride:f(a),path:`/api/conversations/${e}/events`,body:{...n,run:!0},authMode:`session-api-key`,sessionApiKey:s}),n}return await new t(o({conversationUrl:a,sessionApiKey:s})).sendEvent(e,n,{run:!0}),n}static async createConversation(e,n,r,i,a,c,l,f,p,m,h){if(u().backend.kind===`cloud`)return ge({initial_message:e?{role:`user`,content:[{type:`text`,text:e}]}:null,title:n??null,selected_repository:i?.selected_repository??null,selected_branch:i?.selected_branch??null,git_provider:i?.git_provider??null,plugins:r??null,parent_conversation_id:l??null,agent_type:f,sandbox_id:p??null,agent_profile_id:m??null});let[g,_]=await Promise.all([te.getSettings(),ne.listProfiles().catch(()=>void 0)]),v=it(g.title_llm_profile,_),y=D(),b=await de(a??ee(y)),x=c??(a?`local_repo`:`new_worktree`),S=await nt({settings:g,query:e,conversationInstructions:n,plugins:r,conversationId:y,workingDir:b,worktree:x===`new_worktree`,agentProfileId:m,agentProfileKind:h,titleLlmProfile:v}),C=await new t(o({timeout:ot})).createConversation(S),w=d();if(!w)throw new s;return(i?.selected_repository||a)&&N(C.id,{selected_repository:i?.selected_repository??null,selected_branch:i?.selected_branch??null,git_provider:i?.git_provider??null,selected_workspace:a??null,workspace_mode:x}),{id:C.id,created_by_user_id:null,status:`READY`,detail:null,app_conversation_id:C.id,agent_server_url:w.host,request:{initial_message:S.initial_message,plugins:r??null},created_at:C.created_at,updated_at:C.updated_at}}static async getStartTask(e){return u().backend.kind===`cloud`?Ce(e):null}static async getVSCodeUrl(e,t,r){let i=await this.resolveConversationWorkingDir(e);return{vscode_url:await new n(o({conversationUrl:t,sessionApiKey:r})).getUrl({baseUrl:typeof window<`u`?window.location.origin:void 0,workspaceDir:i})}}static async resolveConversationWorkingDir(e){let[t]=await this.batchGetAppConversations([e]);return t?.workspace?.working_dir??m()}static async batchGetAppConversations(e){return e.length===0?[]:u().backend.kind===`cloud`?I(e):$(await new t(o()).getConversations(e)).map(e=>H(e))}static async updateConversationPublicFlag(e,t){if(u().backend.kind!==`cloud`)throw Error(`Public sharing requires a cloud backend.`);return ye(e,t)}static async updateConversationRepository(e,t,n,r){t?N(e,{...M(e)??{},selected_repository:t,selected_branch:n??null,git_provider:r??null}):P(e);let[i]=await this.batchGetAppConversations([e]);return St(i,e)}static async readConversationFile(e,t){if(u().backend.kind===`cloud`)return Se(e,_t(t??`/workspace/project/.agents_tmp/PLAN.md`,`/workspace/project`));let n=await this.resolveConversationWorkingDir(e),r=_t(t??`${n}/.agents_tmp/PLAN.md`,n);return new i(o()).downloadTextFile(r)}static async downloadConversation(e){return u().backend.kind===`cloud`?_e(e):new i(o()).downloadTrajectory(e)}static async getHooks(e){return rt()}static async getRuntimeConversation(e,n,r){let i=u().backend,a=i.kind===`cloud`&&n?await v({backend:i,method:`GET`,hostOverride:f(n),path:`/api/conversations/${e}`,authMode:`session-api-key`,sessionApiKey:r}):await new t(o({conversationUrl:n,sessionApiKey:r})).getConversation(e),s=vt(a),c=X(a)?a.stats:null;return{id:s.id,title:s.title?.trim()?s.title:V(s.id),metrics:dt(s.metrics),created_at:s.created_at,updated_at:s.updated_at,status:xt(s.execution_status),stats:X(c)?c:{usage_to_metrics:{}}}}static async searchConversations(e=20,n){return u().backend.kind===`cloud`?he(e,n):Ne(yt(await new t(o()).searchConversations({limit:e,page_id:n,sort_order:g.UPDATED_AT_DESC})))}static async deleteConversation(e){u().backend.kind===`cloud`?await ve(e):await new t(o()).deleteConversation(e),P(e)}static async updateConversationTitle(e,n){await new t(o()).updateConversation(e,{title:n});let[r]=await this.batchGetAppConversations([e]);return St(r,e)}static async forkConversation(e,n,r){if(u().backend.kind===`cloud`)throw Error(`Branching a conversation isn't supported on the cloud backend yet.`);let i=await new t(o()).forkConversation(e,{from_event_id:n,...r?{title:r}:{}}),a=M(e);return a&&N(i.id,a),i}static async getEventParentId(e,n){return(await new t(o()).getEvent(e,n)).parent_id??void 0}static async switchProfile(e,n){let{backend:i}=u();if(i.kind===`cloud`){if(!e){await ne.activateProfile(n);return}await v({backend:i,method:`POST`,path:`/api/v1/app-conversations/${e}/switch_profile`,body:{profile_name:n}});return}if(!e){await new r(o()).activateProfile(n);return}let a=o(),s=new t(a),c=await new r(a).getProfile(n,{exposeSecrets:`encrypted`}),l=typeof c.config.model==`string`?c.config.model:``;if(!l)throw Error(`Profile '${n}' has no model.`);await tt({llm:c.config}),await s.switchLLM(e,{...c.config,model:l,stream:!0,usage_id:`profile:${n}:${D()}`})}static async switchAcpModel(e,n){let{backend:r}=u();if(r.kind===`cloud`){await v({backend:r,method:`POST`,path:`/api/v1/app-conversations/${e}/switch_acp_model`,body:{model:n}});return}await new t(o()).switchAcpModel(e,n)}};export{Te as a,Se as c,N as d,fe as f,L as i,xe as l,D as m,Fe as n,I as o,de as p,Ee as r,be as s,Ct as t,M as u};
@@ -1,2 +1,2 @@
1
- import{a as e,t}from"./rolldown-runtime-Cyuzqnbw.js";import{St as n,yt as r}from"./vendor-styling-Bcgpimp9.js";import{W as i,p as a}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~d4by102p-C2f0ZhS-.js";import{t as o}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gy8zbn65-CGt6bWRT.js";import{At as s,Nt as c,kt as l}from"./active-backend-context-BiwzkzDy.js";import{t as u,z as d}from"./utils-BgGG1znF.js";import{n as f}from"./use-settings-8nt3DGxW.js";import{t as p}from"./use-save-settings-L3aMaDeS.js";import"./form-control-classes-DAfsCJTe.js";import{t as m}from"./brand-button-DGN6Y9o6.js";import{t as h}from"./settings-input-B-q2gkVy.js";import{c as g,i as _,n as v,o as y,s as ee,t as te}from"./acp-providers-C921BlYB.js";import{_ as ne,g as re,h as ie,m as ae,n as oe,o as se}from"./schema-field-nImDoY6-.js";import{t as b}from"./settings-dropdown-input-DYCULKpp.js";import{r as x}from"./typography-iYhzLlHO.js";import{t as ce}from"./settings-switch-LqKdGxHL.js";import{a as S,i as le,n as C,r as w,t as ue}from"./use-acp-credential-form-DUxbxmbq.js";var T=e(n(),1),E=r();function de({form:e,providerKey:t}){let{t:n}=o(`openhands`),{fields:r,values:i,setValue:a,secretExists:s,conflicts:c}=e,{status:l,isChecking:u}=C(t),f=g(t)??t;return r.length===0?null:(0,E.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,E.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,E.jsx)(x.Text,{className:`text-sm font-medium text-white`,children:n(d.SETTINGS$ACP_CREDENTIALS_TITLE)}),(0,E.jsx)(x.Text,{className:`text-xs text-[#717888]`,children:n(d.SETTINGS$ACP_CREDENTIALS_DESCRIPTION)})]}),(0,E.jsx)(le,{status:l,isChecking:u,providerName:f,testIdPrefix:`settings-acp-auth`}),(0,E.jsx)(`div`,{className:`flex flex-col gap-5`,children:r.map(e=>(0,E.jsx)(w,{field:e,value:i[e.name]??``,onChange:t=>a(e.name,t),alreadySet:s(e.name),testId:`settings-acp-secret-${e.name}`,showOptionalTag:!0},e.name))}),(0,E.jsx)(S,{conflicts:c})]})}var D=t(((e,t)=>{var n=[`||`,`&&`,`;;`,`|&`,`<(`,`<<<`,`>>`,`>&`,`<&`,`&`,`;`,`(`,`)`,`|`,`<`,`>`],r=/[\n\r\u2028\u2029]/,i=/[\s#!"$&'():;<=>@\\^`|]/g;t.exports=function(e){return e.map(function(e){if(e===``)return`''`;if(e&&typeof e==`object`){if(`op`in e&&e.op===`glob`){if(typeof e.pattern!=`string`)throw TypeError("glob token requires a string `pattern`");if(r.test(e.pattern))throw TypeError("glob `pattern` must not contain line terminators");return e.pattern.replace(i,`\\$&`)}if(`op`in e&&typeof e.op==`string`){if(n.indexOf(e.op)<0)throw TypeError("invalid `op` value: "+JSON.stringify(e.op));return e.op.replace(/[\s\S]/g,`\\$&`)}if(`comment`in e&&typeof e.comment==`string`){if(r.test(e.comment))throw TypeError("`comment` must not contain line terminators");return`#`+e.comment}throw TypeError(`unrecognized object token shape`)}return/["\s\\]/.test(e)&&!/'/.test(e)?`'`+e.replace(/(['])/g,`\\$1`)+`'`:/["'\s]/.test(e)?`"`+e.replace(/(["\\$`!])/g,`\\$1`)+`"`:String(e).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}~])/g,`$1\\$2`)}).join(` `)}})),O=t(((e,t)=>{for(var n=`(?:`+[`\\|\\|`,`\\&\\&`,`;;`,`\\|\\&`,`\\<\\(`,`\\<\\<\\<`,`>>`,`>\\&`,`<\\&`,`[&;()|<>]`].join(`|`)+`)`,r=RegExp(`^`+n+`$`),i=`|&;()<> \\t`,a=`"((\\\\"|[^"])*?)"`,o=`'((\\\\'|[^'])*?)'`,s=/^#$/,c=`'`,l=`"`,u=`$`,d=``,f=4294967296,p=0;p<4;p++)d+=(f*Math.random()).toString(16);var m=RegExp(`^`+d);function h(e,t){for(var n=t.lastIndex,r=[],i;i=t.exec(e);)r[r.length]=i,t.lastIndex===i.index&&(t.lastIndex+=1);return t.lastIndex=n,r}function g(e,t,n){var r=typeof e==`function`?e(n):e[n];return r===void 0&&n!=``?r=``:r===void 0&&(r=`$`),typeof r==`object`?t+d+JSON.stringify(r)+d:t+r}function _(e,t,d){d||={};var f=d.escape||`\\`,p=`(\\`+f+`['"`+i+`]|[^\\s'"`+i+`])+`,m=h(e,new RegExp([`(`+n+`)`,`(`+p+`|`+a+`|`+o+`)+`].join(`|`),`g`));if(m.length===0)return[];t||={};var _=!1;return m.map(function(n){var i=n[0];if(!i||_)return;if(r.test(i))return{op:i};var a=!1,o=!1,d=``,p=!1,m;function h(){m+=1;var e,n,r=i.charAt(m);if(r===`{`){if(m+=1,i.charAt(m)===`}`)throw Error(`Bad substitution: `+i.slice(m-2,m+1));if(e=i.indexOf(`}`,m),e<0)throw Error(`Bad substitution: `+i.slice(m));n=i.slice(m,e),m=e}else if(/[*@#?$!_-]/.test(r))n=r,m+=1;else{var a=i.slice(m);e=a.match(/[^\w\d_]/),e?(n=a.slice(0,e.index),m+=e.index-1):(n=a,m=i.length)}return g(t,``,n)}for(m=0;m<i.length;m++){var v=i.charAt(m);if(p||=!a&&(v===`*`||v===`?`),o)d+=v,o=!1;else if(a)v===a?a=!1:a==c?d+=v:v===f?(m+=1,v=i.charAt(m),v===l||v===f||v===u?d+=v:d+=f+v):v===u?d+=h():d+=v;else if(v===l||v===c)a=v;else if(r.test(v))return{op:i};else if(s.test(v)){_=!0;var y={comment:e.slice(n.index+m+1)};return d.length?[d,y]:[y]}else v===f?o=!0:v===u?d+=h():d+=v}return p?{op:`glob`,pattern:d}:d}).reduce(function(e,t){return t===void 0||[].concat(t).forEach(function(t){e[e.length]=t}),e},[])}t.exports=function(e,t,n){var r=_(e,t,n);return typeof t==`function`?r.reduce(function(e,t){if(typeof t==`object`)return e[e.length]=t,e;var n=t.split(RegExp(`(`+d+`.*?`+d+`)`,`g`));return n.length===1?(e[e.length]=n[0],e):(n.filter(Boolean).forEach(function(t){e[e.length]=m.test(t)?JSON.parse(t.split(d)[1]):t}),e)},[]):r}})),{quote:k}=e(t((e=>{e.quote=D(),e.parse=O()}))(),1);function A(e){let t=[],n=0,r=``,i=!1;for(;n<e.length;){let a=e[n];if(a===` `||a===` `||a===`
2
- `||a===`\r`){i&&=(t.push(r),r=``,!1),n+=1;continue}if(a===`'`){for(i=!0,n+=1;n<e.length&&e[n]!==`'`;)r+=e[n],n+=1;n<e.length&&(n+=1);continue}if(a===`"`){for(i=!0,n+=1;n<e.length&&e[n]!==`"`;){if(e[n]===`\\`&&n+1<e.length){let t=e[n+1];if(t===`"`||t===`\\`){r+=t,n+=2;continue}}r+=e[n],n+=1}n<e.length&&(n+=1);continue}if(a===`\\`&&n+1<e.length){i=!0,r+=e[n+1],n+=2;continue}i=!0,r+=a,n+=1}return i&&t.push(r),t}var fe=/[\s"'\\$`&|;<>(){}*?#!~[\]]/;function j(e){return e.map(e=>fe.test(e)||e===``?k([e]):e).join(` `)}var M={hideTitle:!0},pe=`enable_sub_agents`,me=`tool_concurrency_limit`,he=`npx -y <package-name>`,N=`__custom_model__`;function ge(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function P(e,t){let n=A(e).join(` `);for(let e of t)if(n===e.default_command.join(` `))return e.key;return te}function _e(e){return e?.find(e=>e.key===pe)}function ve(e,t){return typeof e==`boolean`?e:t?.default===!0}function ye(e,t){return e?.available_models?.some(({id:e})=>e===t.trim())??!1}function be(e){let{isAcp:t,selectedPreset:n,isDefaultProviderCommand:r,commandTokens:i,acpModel:a,subAgentsEnabled:o,toolConcurrencyField:s,toolConcurrency:c}=e;if(t){let e=r&&n!==`custom`;return{agent_kind:`acp`,acp_server:n,acp_model:a.trim()||null,acp_command:e?null:j(i)||null,acp_args:null}}let l={agent_kind:`openhands`,enable_sub_agents:o};if(s){let e=se(s,c),t=typeof s.default==`number`?s.default:1;l.tool_concurrency_limit=e==null?t:Number(e)}return l}function F({embedded:e=!1,agentSettingsOverride:t=null,onSaveControlChange:n}={}){let{t:r}=o(`openhands`),{data:i,isLoading:a}=f(),g=t??i?.agent_settings??null,{mutate:S,isPending:le}=p(),{data:C}=ne(i?.agent_settings_schema),w=T.useMemo(()=>C?.sections.flatMap(e=>e.fields),[C]),D=_e(w),O=T.useMemo(()=>ve(g?.[pe],D),[D,g]),[k,fe]=(0,T.useState)(O),M=w?.find(e=>e.key===me),F=T.useMemo(()=>{if(!M)return``;let e=g?.[me];return ae(M,e)},[M,g]),[I,xe]=(0,T.useState)(F),[L,R]=(0,T.useState)(`openhands`),[z,B]=(0,T.useState)(``),[V,H]=(0,T.useState)(``),[Se,U]=(0,T.useState)(!1),[Ce,W]=(0,T.useState)(!1),G=L===`acp`?P(z,v):null,K=ue(G&&G!==`custom`?G:null),we=(0,T.useRef)(null),q=(0,T.useRef)(null),J=(0,T.useRef)(``);(0,T.useEffect)(()=>{let e=t??i?.agent_settings??null;if(!e&&!i)return;let n=t??i;if(we.current!==n){if(we.current=n,e?.agent_kind===`acp`){R(`acp`);let t=e?.acp_server,n=typeof t==`string`?t:void 0,r=ee(n),i=ge(e?.acp_command),a=[...i.length>0?i:r?.default_command??[],...ge(e?.acp_args)],o=a.length>0?j(a):``;B(o),q.current=n??null,J.current=o;let s=e?.acp_model,c=typeof s==`string`?s.trim():``;H(c||y(n)||``),U(!!c&&(!r||!ye(r,c)))}else R(`openhands`),B(``),H(``),q.current=null,J.current=``,U(!1);W(!1)}},[i,t]),(0,T.useEffect)(()=>{fe(O)},[O]),(0,T.useEffect)(()=>{xe(F)},[F]);let Te=(0,T.useRef)(()=>({agent_kind:`openhands`,enable_sub_agents:!1})),Ee=(0,T.useCallback)(()=>Te.current(),[]),Y=(0,T.useRef)(K);Y.current=K;let De=(0,T.useCallback)(e=>Y.current.save(e),[]),Oe=(0,T.useCallback)(()=>Y.current.reset(),[]),ke=L===`acp`&&A(z).length===0,Ae=K.isDirty;if((0,T.useEffect)(()=>{!e||!n||n({agentType:L,isValid:!ke,buildAgentProfileFields:Ee,credentials:{isDirty:Ae,save:De,reset:Oe}})},[e,n,L,ke,Ae,Ee,De,Oe]),a)return null;let X=L===`acp`,Z=A(z),je=X&&Z.length===0,Q=P(z,v),$=ee(Q),Me=$?.available_models??[],Ne=Me.length>0,Pe=ye($,V),Fe=Se||!Pe?N:V,Ie=!!$&&Z.join(` `)===$.default_command.join(` `),Le=j(v[0]?.default_command??[])||he;Te.current=()=>be({isAcp:X,selectedPreset:Q,isDefaultProviderCommand:Ie,commandTokens:Z,acpModel:V,subAgentsEnabled:k,toolConcurrencyField:M,toolConcurrency:I});let Re=Ce||!X&&(k!==O||I!==F),ze=K.isDirty,Be=Re||ze,Ve=le||K.isSaving,He=async()=>{if(K.isDirty){if(!await K.save({silent:Re}))return;K.reset()}if(Re)if(X){let e=!!($&&Ie),t=q.current,n=z===J.current,i=!!t&&t!==`custom`&&!v.some(e=>e.key===t),a=X&&n&&i,o=_(a?t:$&&Ie?$.key:te,{command:e?[]:Z,model:V.trim()||void 0,allowUnknownServer:a});if(!o)return;S({agent_settings_diff:o},{onError:e=>{l(c(e)||r(d.ERROR$GENERIC))},onSuccess:()=>{s(r(d.SETTINGS$SAVED)),W(!1)}})}else{let e={agent_kind:`openhands`,enable_sub_agents:k};if(M){let t;try{t=se(M,I)}catch(e){l(e instanceof Error?e.message:r(d.ERROR$GENERIC));return}t!=null&&(e[me]=t)}S({agent_settings_diff:e},{onError:e=>{l(c(e)||r(d.ERROR$GENERIC))},onSuccess:()=>{s(r(d.SETTINGS$SAVED)),W(!1)}})}},Ue=D?re(r,D.key,D.label):r(d.SCHEMA$ENABLE_SUB_AGENTS$LABEL),We=D?ie(r,D.key,D.description):r(d.SCHEMA$ENABLE_SUB_AGENTS$DESCRIPTION);return(0,E.jsxs)(`div`,{"data-testid":`agent-settings-screen`,className:`flex flex-col gap-6 pb-8 max-w-2xl`,children:[!e&&(0,E.jsxs)(`div`,{children:[(0,E.jsx)(x.H2,{className:`mb-2`,children:r(d.SETTINGS$NAV_AGENT)}),(0,E.jsx)(x.Paragraph,{className:`text-sm text-[#A3A3A3]`,children:r(d.SETTINGS$AGENT_PAGE_DESCRIPTION)})]}),(0,E.jsx)(b,{testId:`agent-type-selector`,name:`agent-type`,label:r(d.SETTINGS$NAV_AGENT),items:[{key:`openhands`,label:r(d.SETTINGS$AGENT_TYPE_OPENHANDS)},{key:`acp`,label:r(d.SETTINGS$AGENT_TYPE_ACP)}],selectedKey:L,onSelectionChange:e=>{if(!e)return;let t=e;if(R(t),t===`acp`&&!z){let e=v[0];e&&(B(j(e.default_command)),H(y(e.key)??``),U(!1))}else t===`openhands`&&U(!1);W(!0)}}),!X&&(0,E.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,E.jsx)(ce,{testId:`agent-settings-enable-sub-agents`,isToggled:k,onToggle:e=>{fe(e)},children:Ue}),We?(0,E.jsx)(x.Paragraph,{className:u(`pl-12`,`text-tertiary-alt text-xs leading-5`),children:We}):null]}),!X&&M?(0,E.jsx)(oe,{field:M,value:I,isDisabled:Ve,onChange:xe}):null,X&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(b,{testId:`agent-preset-selector`,name:`agent-preset`,label:r(d.SETTINGS$AGENT_PRESET),items:[...v.map(e=>({key:e.key,label:e.display_name})),{key:`custom`,label:r(d.SETTINGS$AGENT_PRESET_CUSTOM)}],selectedKey:Q,onSelectionChange:e=>{if(!e)return;let t=String(e),n=ee(t);n?(B(j(n.default_command)),H(y(t)??``),U(!1)):t===`custom`&&(B(``),H(``),U(!0)),W(!0)}}),(0,E.jsxs)(`div`,{className:`flex flex-col gap-2.5`,children:[(0,E.jsx)(x.Text,{className:`text-sm`,children:r(d.SETTINGS$AGENT_COMMAND)}),(0,E.jsx)(`textarea`,{"data-testid":`agent-command-input`,className:`bg-tertiary border border-[#717888] rounded-sm p-2 text-sm font-mono text-white placeholder:text-[#717888] min-h-[60px] resize-y focus:outline-none focus:border-white`,value:z,placeholder:Le,onChange:e=>{let t=e.target.value,n=P(z,v),r=P(t,v);r!==n&&(H(y(r)??``),U(!1)),B(t),W(!0)}}),(0,E.jsx)(x.Text,{className:`text-xs text-[#717888]`,children:r(d.SETTINGS$AGENT_COMMAND_HINT)})]}),(0,E.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[Ne&&(0,E.jsx)(b,{testId:`agent-model-selector`,name:`agent-model`,label:r(d.SETTINGS$AGENT_MODEL),items:[...Me.map(e=>({key:e.id,label:e.label})),{key:N,label:r(d.SETTINGS$AGENT_PRESET_CUSTOM)}],selectedKey:Fe,onSelectionChange:e=>{if(!e)return;let t=String(e);t===N?(U(!0),H(``)):(U(!1),H(t)),W(!0)}}),Fe===N&&(0,E.jsx)(h,{testId:`agent-model-input`,label:r(Ne?d.SETTINGS$AGENT_CUSTOM_MODEL:d.SETTINGS$AGENT_MODEL),type:`text`,className:`w-full`,value:V,showOptionalTag:!0,onChange:e=>{H(e),W(!0)}}),(0,E.jsx)(x.Text,{className:`text-xs text-[#717888]`,children:r(d.SETTINGS$AGENT_MODEL_HINT)})]})]}),X&&Q!==`custom`&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`hr`,{className:`border-[#3D4046]`}),(0,E.jsx)(de,{form:K,providerKey:Q})]}),!e&&(0,E.jsx)(`div`,{children:(0,E.jsx)(m,{testId:`agent-save-button`,type:`button`,variant:`primary`,isDisabled:Ve||!Be||je,onClick:He,children:r(Ve?d.SETTINGS$SAVING:d.SETTINGS$SAVE_CHANGES)})})]})}var I=i(function(){return(0,E.jsx)(a,{to:`/settings/agents`,replace:!0})});export{A as i,I as n,M as r,F as t};
1
+ import{a as e,t}from"./rolldown-runtime-Cyuzqnbw.js";import{St as n,yt as r}from"./vendor-styling-Ck5D_A2Q.js";import{U as i,f as a}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~lq5hicxx-cHFhpUBq.js";import{t as o}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gxu4j2ea-Cwhh3zLe.js";import{At as s,Pt as c,jt as l}from"./active-backend-context-B0wI7OzM.js";import{t as u,z as d}from"./utils-BX9XJ0IE.js";import{n as f}from"./use-settings-3RcgdUuZ.js";import{t as p}from"./use-save-settings-C9B8Y-h3.js";import"./form-control-classes-pHtZUI6K.js";import{t as m}from"./brand-button-DJmFCyMK.js";import{t as h}from"./settings-input-BQY115xH.js";import{c as g,i as _,n as v,o as y,s as ee,t as te}from"./acp-providers-DLe_gVDY.js";import{_ as ne,g as re,h as ie,m as ae,n as oe,o as se}from"./schema-field-z2vSLuLo.js";import{t as b}from"./settings-dropdown-input-Cx4g7Xfl.js";import{r as x}from"./typography-BSbUhJPn.js";import{t as ce}from"./settings-switch-BIodMVz9.js";import{a as S,i as le,n as C,r as w,t as ue}from"./use-acp-credential-form-BGKFi1VL.js";var T=e(n(),1),E=r();function de({form:e,providerKey:t}){let{t:n}=o(`openhands`),{fields:r,values:i,setValue:a,secretExists:s,conflicts:c}=e,{status:l,isChecking:u}=C(t),f=g(t)??t;return r.length===0?null:(0,E.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,E.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,E.jsx)(x.Text,{className:`text-sm font-medium text-white`,children:n(d.SETTINGS$ACP_CREDENTIALS_TITLE)}),(0,E.jsx)(x.Text,{className:`text-xs text-[#717888]`,children:n(d.SETTINGS$ACP_CREDENTIALS_DESCRIPTION)})]}),(0,E.jsx)(le,{status:l,isChecking:u,providerName:f,testIdPrefix:`settings-acp-auth`}),(0,E.jsx)(`div`,{className:`flex flex-col gap-5`,children:r.map(e=>(0,E.jsx)(w,{field:e,value:i[e.name]??``,onChange:t=>a(e.name,t),alreadySet:s(e.name),testId:`settings-acp-secret-${e.name}`,showOptionalTag:!0},e.name))}),(0,E.jsx)(S,{conflicts:c})]})}var D=t(((e,t)=>{var n=[`||`,`&&`,`;;`,`|&`,`<(`,`<<<`,`>>`,`>&`,`<&`,`&`,`;`,`(`,`)`,`|`,`<`,`>`],r=/[\n\r\u2028\u2029]/,i=/[\s#!"$&'():;<=>@\\^`|]/g;t.exports=function(e){return e.map(function(e){if(e===``)return`''`;if(e&&typeof e==`object`){if(`op`in e&&e.op===`glob`){if(typeof e.pattern!=`string`)throw TypeError("glob token requires a string `pattern`");if(r.test(e.pattern))throw TypeError("glob `pattern` must not contain line terminators");return e.pattern.replace(i,`\\$&`)}if(`op`in e&&typeof e.op==`string`){if(n.indexOf(e.op)<0)throw TypeError("invalid `op` value: "+JSON.stringify(e.op));return e.op.replace(/[\s\S]/g,`\\$&`)}if(`comment`in e&&typeof e.comment==`string`){if(r.test(e.comment))throw TypeError("`comment` must not contain line terminators");return`#`+e.comment}throw TypeError(`unrecognized object token shape`)}return/["\s\\]/.test(e)&&!/'/.test(e)?`'`+e.replace(/(['])/g,`\\$1`)+`'`:/["'\s]/.test(e)?`"`+e.replace(/(["\\$`!])/g,`\\$1`)+`"`:String(e).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}~])/g,`$1\\$2`)}).join(` `)}})),O=t(((e,t)=>{for(var n=`(?:`+[`\\|\\|`,`\\&\\&`,`;;`,`\\|\\&`,`\\<\\(`,`\\<\\<\\<`,`>>`,`>\\&`,`<\\&`,`[&;()|<>]`].join(`|`)+`)`,r=RegExp(`^`+n+`$`),i=`|&;()<> \\t`,a=`"((\\\\"|[^"])*?)"`,o=`'((\\\\'|[^'])*?)'`,s=/^#$/,c=`'`,l=`"`,u=`$`,d=``,f=4294967296,p=0;p<4;p++)d+=(f*Math.random()).toString(16);var m=RegExp(`^`+d);function h(e,t){for(var n=t.lastIndex,r=[],i;i=t.exec(e);)r[r.length]=i,t.lastIndex===i.index&&(t.lastIndex+=1);return t.lastIndex=n,r}function g(e,t,n){var r=typeof e==`function`?e(n):e[n];return r===void 0&&n!=``?r=``:r===void 0&&(r=`$`),typeof r==`object`?t+d+JSON.stringify(r)+d:t+r}function _(e,t,d){d||={};var f=d.escape||`\\`,p=`(\\`+f+`['"`+i+`]|[^\\s'"`+i+`])+`,m=h(e,new RegExp([`(`+n+`)`,`(`+p+`|`+a+`|`+o+`)+`].join(`|`),`g`));if(m.length===0)return[];t||={};var _=!1;return m.map(function(n){var i=n[0];if(!i||_)return;if(r.test(i))return{op:i};var a=!1,o=!1,d=``,p=!1,m;function h(){m+=1;var e,n,r=i.charAt(m);if(r===`{`){if(m+=1,i.charAt(m)===`}`)throw Error(`Bad substitution: `+i.slice(m-2,m+1));if(e=i.indexOf(`}`,m),e<0)throw Error(`Bad substitution: `+i.slice(m));n=i.slice(m,e),m=e}else if(/[*@#?$!_-]/.test(r))n=r,m+=1;else{var a=i.slice(m);e=a.match(/[^\w\d_]/),e?(n=a.slice(0,e.index),m+=e.index-1):(n=a,m=i.length)}return g(t,``,n)}for(m=0;m<i.length;m++){var v=i.charAt(m);if(p||=!a&&(v===`*`||v===`?`),o)d+=v,o=!1;else if(a)v===a?a=!1:a==c?d+=v:v===f?(m+=1,v=i.charAt(m),v===l||v===f||v===u?d+=v:d+=f+v):v===u?d+=h():d+=v;else if(v===l||v===c)a=v;else if(r.test(v))return{op:i};else if(s.test(v)){_=!0;var y={comment:e.slice(n.index+m+1)};return d.length?[d,y]:[y]}else v===f?o=!0:v===u?d+=h():d+=v}return p?{op:`glob`,pattern:d}:d}).reduce(function(e,t){return t===void 0||[].concat(t).forEach(function(t){e[e.length]=t}),e},[])}t.exports=function(e,t,n){var r=_(e,t,n);return typeof t==`function`?r.reduce(function(e,t){if(typeof t==`object`)return e[e.length]=t,e;var n=t.split(RegExp(`(`+d+`.*?`+d+`)`,`g`));return n.length===1?(e[e.length]=n[0],e):(n.filter(Boolean).forEach(function(t){e[e.length]=m.test(t)?JSON.parse(t.split(d)[1]):t}),e)},[]):r}})),{quote:k}=e(t((e=>{e.quote=D(),e.parse=O()}))(),1);function A(e){let t=[],n=0,r=``,i=!1;for(;n<e.length;){let a=e[n];if(a===` `||a===` `||a===`
2
+ `||a===`\r`){i&&=(t.push(r),r=``,!1),n+=1;continue}if(a===`'`){for(i=!0,n+=1;n<e.length&&e[n]!==`'`;)r+=e[n],n+=1;n<e.length&&(n+=1);continue}if(a===`"`){for(i=!0,n+=1;n<e.length&&e[n]!==`"`;){if(e[n]===`\\`&&n+1<e.length){let t=e[n+1];if(t===`"`||t===`\\`){r+=t,n+=2;continue}}r+=e[n],n+=1}n<e.length&&(n+=1);continue}if(a===`\\`&&n+1<e.length){i=!0,r+=e[n+1],n+=2;continue}i=!0,r+=a,n+=1}return i&&t.push(r),t}var fe=/[\s"'\\$`&|;<>(){}*?#!~[\]]/;function j(e){return e.map(e=>fe.test(e)||e===``?k([e]):e).join(` `)}var M={hideTitle:!0},pe=`enable_sub_agents`,me=`tool_concurrency_limit`,he=`npx -y <package-name>`,N=`__custom_model__`;function ge(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function P(e,t){let n=A(e).join(` `);for(let e of t)if(n===e.default_command.join(` `))return e.key;return te}function _e(e){return e?.find(e=>e.key===pe)}function ve(e,t){return typeof e==`boolean`?e:t?.default===!0}function ye(e,t){return e?.available_models?.some(({id:e})=>e===t.trim())??!1}function be(e){let{isAcp:t,selectedPreset:n,isDefaultProviderCommand:r,commandTokens:i,acpModel:a,subAgentsEnabled:o,toolConcurrencyField:s,toolConcurrency:c}=e;if(t){let e=r&&n!==`custom`;return{agent_kind:`acp`,acp_server:n,acp_model:a.trim()||null,acp_command:e?null:j(i)||null,acp_args:null}}let l={agent_kind:`openhands`,enable_sub_agents:o};if(s){let e=se(s,c),t=typeof s.default==`number`?s.default:1;l.tool_concurrency_limit=e==null?t:Number(e)}return l}function F({embedded:e=!1,agentSettingsOverride:t=null,onSaveControlChange:n}={}){let{t:r}=o(`openhands`),{data:i,isLoading:a}=f(),g=t??i?.agent_settings??null,{mutate:S,isPending:le}=p(),{data:C}=ne(i?.agent_settings_schema),w=T.useMemo(()=>C?.sections.flatMap(e=>e.fields),[C]),D=_e(w),O=T.useMemo(()=>ve(g?.[pe],D),[D,g]),[k,fe]=(0,T.useState)(O),M=w?.find(e=>e.key===me),F=T.useMemo(()=>{if(!M)return``;let e=g?.[me];return ae(M,e)},[M,g]),[I,xe]=(0,T.useState)(F),[L,R]=(0,T.useState)(`openhands`),[z,B]=(0,T.useState)(``),[V,H]=(0,T.useState)(``),[Se,U]=(0,T.useState)(!1),[Ce,W]=(0,T.useState)(!1),G=L===`acp`?P(z,v):null,K=ue(G&&G!==`custom`?G:null),we=(0,T.useRef)(null),q=(0,T.useRef)(null),J=(0,T.useRef)(``);(0,T.useEffect)(()=>{let e=t??i?.agent_settings??null;if(!e&&!i)return;let n=t??i;if(we.current!==n){if(we.current=n,e?.agent_kind===`acp`){R(`acp`);let t=e?.acp_server,n=typeof t==`string`?t:void 0,r=ee(n),i=ge(e?.acp_command),a=[...i.length>0?i:r?.default_command??[],...ge(e?.acp_args)],o=a.length>0?j(a):``;B(o),q.current=n??null,J.current=o;let s=e?.acp_model,c=typeof s==`string`?s.trim():``;H(c||y(n)||``),U(!!c&&(!r||!ye(r,c)))}else R(`openhands`),B(``),H(``),q.current=null,J.current=``,U(!1);W(!1)}},[i,t]),(0,T.useEffect)(()=>{fe(O)},[O]),(0,T.useEffect)(()=>{xe(F)},[F]);let Te=(0,T.useRef)(()=>({agent_kind:`openhands`,enable_sub_agents:!1})),Ee=(0,T.useCallback)(()=>Te.current(),[]),Y=(0,T.useRef)(K);Y.current=K;let De=(0,T.useCallback)(e=>Y.current.save(e),[]),Oe=(0,T.useCallback)(()=>Y.current.reset(),[]),ke=L===`acp`&&A(z).length===0,Ae=K.isDirty;if((0,T.useEffect)(()=>{!e||!n||n({agentType:L,isValid:!ke,buildAgentProfileFields:Ee,credentials:{isDirty:Ae,save:De,reset:Oe}})},[e,n,L,ke,Ae,Ee,De,Oe]),a)return null;let X=L===`acp`,Z=A(z),je=X&&Z.length===0,Q=P(z,v),$=ee(Q),Me=$?.available_models??[],Ne=Me.length>0,Pe=ye($,V),Fe=Se||!Pe?N:V,Ie=!!$&&Z.join(` `)===$.default_command.join(` `),Le=j(v[0]?.default_command??[])||he;Te.current=()=>be({isAcp:X,selectedPreset:Q,isDefaultProviderCommand:Ie,commandTokens:Z,acpModel:V,subAgentsEnabled:k,toolConcurrencyField:M,toolConcurrency:I});let Re=Ce||!X&&(k!==O||I!==F),ze=K.isDirty,Be=Re||ze,Ve=le||K.isSaving,He=async()=>{if(K.isDirty){if(!await K.save({silent:Re}))return;K.reset()}if(Re)if(X){let e=!!($&&Ie),t=q.current,n=z===J.current,i=!!t&&t!==`custom`&&!v.some(e=>e.key===t),a=X&&n&&i,o=_(a?t:$&&Ie?$.key:te,{command:e?[]:Z,model:V.trim()||void 0,allowUnknownServer:a});if(!o)return;S({agent_settings_diff:o},{onError:e=>{s(c(e)||r(d.ERROR$GENERIC))},onSuccess:()=>{l(r(d.SETTINGS$SAVED)),W(!1)}})}else{let e={agent_kind:`openhands`,enable_sub_agents:k};if(M){let t;try{t=se(M,I)}catch(e){s(e instanceof Error?e.message:r(d.ERROR$GENERIC));return}t!=null&&(e[me]=t)}S({agent_settings_diff:e},{onError:e=>{s(c(e)||r(d.ERROR$GENERIC))},onSuccess:()=>{l(r(d.SETTINGS$SAVED)),W(!1)}})}},Ue=D?re(r,D.key,D.label):r(d.SCHEMA$ENABLE_SUB_AGENTS$LABEL),We=D?ie(r,D.key,D.description):r(d.SCHEMA$ENABLE_SUB_AGENTS$DESCRIPTION);return(0,E.jsxs)(`div`,{"data-testid":`agent-settings-screen`,className:`flex flex-col gap-6 pb-8 max-w-2xl`,children:[!e&&(0,E.jsxs)(`div`,{children:[(0,E.jsx)(x.H2,{className:`mb-2`,children:r(d.SETTINGS$NAV_AGENT)}),(0,E.jsx)(x.Paragraph,{className:`text-sm text-[#A3A3A3]`,children:r(d.SETTINGS$AGENT_PAGE_DESCRIPTION)})]}),(0,E.jsx)(b,{testId:`agent-type-selector`,name:`agent-type`,label:r(d.SETTINGS$NAV_AGENT),items:[{key:`openhands`,label:r(d.SETTINGS$AGENT_TYPE_OPENHANDS)},{key:`acp`,label:r(d.SETTINGS$AGENT_TYPE_ACP)}],selectedKey:L,onSelectionChange:e=>{if(!e)return;let t=e;if(R(t),t===`acp`&&!z){let e=v[0];e&&(B(j(e.default_command)),H(y(e.key)??``),U(!1))}else t===`openhands`&&U(!1);W(!0)}}),!X&&(0,E.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,E.jsx)(ce,{testId:`agent-settings-enable-sub-agents`,isToggled:k,onToggle:e=>{fe(e)},children:Ue}),We?(0,E.jsx)(x.Paragraph,{className:u(`pl-12`,`text-tertiary-alt text-xs leading-5`),children:We}):null]}),!X&&M?(0,E.jsx)(oe,{field:M,value:I,isDisabled:Ve,onChange:xe}):null,X&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(b,{testId:`agent-preset-selector`,name:`agent-preset`,label:r(d.SETTINGS$AGENT_PRESET),items:[...v.map(e=>({key:e.key,label:e.display_name})),{key:`custom`,label:r(d.SETTINGS$AGENT_PRESET_CUSTOM)}],selectedKey:Q,onSelectionChange:e=>{if(!e)return;let t=String(e),n=ee(t);n?(B(j(n.default_command)),H(y(t)??``),U(!1)):t===`custom`&&(B(``),H(``),U(!0)),W(!0)}}),(0,E.jsxs)(`div`,{className:`flex flex-col gap-2.5`,children:[(0,E.jsx)(x.Text,{className:`text-sm`,children:r(d.SETTINGS$AGENT_COMMAND)}),(0,E.jsx)(`textarea`,{"data-testid":`agent-command-input`,className:`bg-tertiary border border-[#717888] rounded-sm p-2 text-sm font-mono text-white placeholder:text-[#717888] min-h-[60px] resize-y focus:outline-none focus:border-white`,value:z,placeholder:Le,onChange:e=>{let t=e.target.value,n=P(z,v),r=P(t,v);r!==n&&(H(y(r)??``),U(!1)),B(t),W(!0)}}),(0,E.jsx)(x.Text,{className:`text-xs text-[#717888]`,children:r(d.SETTINGS$AGENT_COMMAND_HINT)})]}),(0,E.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[Ne&&(0,E.jsx)(b,{testId:`agent-model-selector`,name:`agent-model`,label:r(d.SETTINGS$AGENT_MODEL),items:[...Me.map(e=>({key:e.id,label:e.label})),{key:N,label:r(d.SETTINGS$AGENT_PRESET_CUSTOM)}],selectedKey:Fe,onSelectionChange:e=>{if(!e)return;let t=String(e);t===N?(U(!0),H(``)):(U(!1),H(t)),W(!0)}}),Fe===N&&(0,E.jsx)(h,{testId:`agent-model-input`,label:r(Ne?d.SETTINGS$AGENT_CUSTOM_MODEL:d.SETTINGS$AGENT_MODEL),type:`text`,className:`w-full`,value:V,showOptionalTag:!0,onChange:e=>{H(e),W(!0)}}),(0,E.jsx)(x.Text,{className:`text-xs text-[#717888]`,children:r(d.SETTINGS$AGENT_MODEL_HINT)})]})]}),X&&Q!==`custom`&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`hr`,{className:`border-[#3D4046]`}),(0,E.jsx)(de,{form:K,providerKey:Q})]}),!e&&(0,E.jsx)(`div`,{children:(0,E.jsx)(m,{testId:`agent-save-button`,type:`button`,variant:`primary`,isDisabled:Ve||!Be||je,onClick:He,children:r(Ve?d.SETTINGS$SAVING:d.SETTINGS$SAVE_CHANGES)})})]})}var I=i(function(){return(0,E.jsx)(a,{to:`/settings/agents`,replace:!0})});export{A as i,I as n,M as r,F as t};
@@ -0,0 +1 @@
1
+ import{n as e,r as t}from"./agent-settings-UE-U4Xii.js";export{e as default,t as handle};
@@ -0,0 +1 @@
1
+ import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{St as t,yt as n}from"./vendor-styling-Ck5D_A2Q.js";import{t as r}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gxu4j2ea-Cwhh3zLe.js";import{t as i,z as a}from"./utils-BX9XJ0IE.js";import{c as o}from"./vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-CQR5Sa0H.js";import{n as s}from"./navigation-context-CQZwH_tC.js";import{t as c}from"./close-ScPlnwyq.js";import{r as l}from"./typography-BSbUhJPn.js";import{t as u}from"./vendor~index-home~home~conversation-panel~conversation~alert-banner-B3qC_oj8.js";var d=e(t(),1),f=n();function p({maintenanceStartTime:e,faultyModels:t,errorMessage:n,updatedAt:p}){let{t:m}=r(`openhands`),[h,g]=u(`alert_banner_dismissed_at`,null),{currentPath:_}=s(),v=e?(e=>new Date(e).toLocaleString(void 0,{year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,timeZoneName:`short`}))(e):null,y=!!e,b=t&&t.length>0,x=n&&n.trim().length>0,S=y||b||x,C=(0,d.useMemo)(()=>S?h!==p:!1,[h,p,S]),w=(0,d.useMemo)(()=>{if(!n)return null;let e=m(n);return e===n?n:e},[n,m]);return C?(0,f.jsxs)(`div`,{"data-testid":`alert-banner`,className:i(`bg-base border border-primary text-white p-4 rounded`,`flex flex-row items-center justify-between m-1`,_===`/`&&`mt-3 mr-3`),children:[(0,f.jsxs)(`div`,{className:`flex items-center`,children:[(0,f.jsx)(`div`,{className:`flex-shrink-0`,children:(0,f.jsx)(o,{className:`text-primary align-middle`})}),(0,f.jsx)(`div`,{className:`ml-3 flex flex-col gap-1`,children:(()=>{let e=[];return y&&v&&e.push((0,f.jsx)(l.Paragraph,{className:`text-sm font-medium`,children:m(a.MAINTENANCE$SCHEDULED_MESSAGE,{time:v})},`maintenance`)),b&&e.push((0,f.jsxs)(l.Paragraph,{className:`text-sm font-medium`,children:[m(a.ALERT$FAULTY_MODELS_MESSAGE),` `,t.join(`, `)]},`faulty-models`)),x&&w&&e.push((0,f.jsx)(l.Paragraph,{className:`text-sm font-medium`,children:w},`error-message`)),e})()})]}),(0,f.jsx)(`button`,{type:`button`,"data-testid":`dismiss-button`,onClick:()=>g(p),className:i(`bg-base rounded-full w-5 h-5 flex items-center justify-center cursor-pointer`),children:(0,f.jsx)(c,{})})]}):null}export{p as AlertBanner};
@@ -1 +1 @@
1
- import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{St as t,yt as n}from"./vendor-styling-Bcgpimp9.js";import{t as r}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gy8zbn65-CGt6bWRT.js";import{d as i}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0bpqexo-CbTboogo.js";import{$ as a,X as o,dt as s,r as c}from"./active-backend-context-BiwzkzDy.js";import{t as l,z as u}from"./utils-BgGG1znF.js";import{n as d,o as f}from"./backend-form-modal-B8D5hBzK.js";import{r as p,t as m}from"./modal-body-CMsDpalT.js";import{t as h}from"./brand-button-DGN6Y9o6.js";var g=e(t(),1),_=n();function v(){let{t:e}=r(`openhands`),{active:t,addBackend:n,updateBackend:v}=c(),y=window.location.origin,[b,x]=g.useState(!1),[S,C]=g.useState(`idle`),[w,T]=g.useState(null),E=g.useCallback(async r=>{x(!0),C(`idle`),T(null);try{await new i(a({host:r.host,sessionApiKey:r.apiKey,timeout:5e3})).getSettings(),C(`success`),s(t.backend)?n(r):v(t.backend.id,r),window.location.reload()}catch(t){if(C(`error`),o(t,401))T(e(u.AUTH$INVALID_KEY));else{let n=t instanceof Error?t.message:String(t);T(`${e(u.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:l(`relative rounded-xl border border-[var(--oh-border)] bg-base-secondary`,p(`md`),m),children:[(0,_.jsx)(`div`,{className:`px-6 pt-6 pb-2 pr-12`,children:(0,_.jsx)(`h2`,{className:`text-lg font-semibold`,children:e(u.BACKEND$ADD_TITLE)})}),(0,_.jsx)(`div`,{className:`px-6 pb-6 pt-2`,children:(0,_.jsx)(d,{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)(f,{isConnected:S===`success`}),(0,_.jsx)(`span`,{"data-testid":`${n}-status`,className:S===`error`?`text-red-400`:`text-green-400`,children:S===`error`?w:e(u.ONBOARDING$BACKEND_STATUS_CONNECTED)})]}),(0,_.jsx)(h,{type:`submit`,variant:`secondary`,isDisabled:!t||b,testId:`${n}-submit`,className:`w-full text-center`,children:e(b?u.ONBOARDING$BACKEND_STATUS_CHECKING:u.BACKEND$CONNECT)})]})})})]})})}export{v as default};
1
+ import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{St as t,yt as n}from"./vendor-styling-Ck5D_A2Q.js";import{t as r}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gxu4j2ea-Cwhh3zLe.js";import{d as i}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kv3pap4j-oGvLV0dO.js";import{$ as a,X as o,dt as s,r as c}from"./active-backend-context-B0wI7OzM.js";import{t as l,z as u}from"./utils-BX9XJ0IE.js";import{n as d,o as f}from"./backend-form-modal-B_lXjOGa.js";import{r as p,t as m}from"./modal-body-BHGCSAtj.js";import{t as h}from"./brand-button-DJmFCyMK.js";var g=e(t(),1),_=n();function v(){let{t:e}=r(`openhands`),{active:t,addBackend:n,updateBackend:v}=c(),y=window.location.origin,[b,x]=g.useState(!1),[S,C]=g.useState(`idle`),[w,T]=g.useState(null),E=g.useCallback(async r=>{x(!0),C(`idle`),T(null);try{await new i(a({host:r.host,sessionApiKey:r.apiKey,timeout:5e3})).getSettings(),C(`success`),s(t.backend)?n(r):v(t.backend.id,r),window.location.reload()}catch(t){if(C(`error`),o(t,401))T(e(u.AUTH$INVALID_KEY));else{let n=t instanceof Error?t.message:String(t);T(`${e(u.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:l(`relative rounded-xl border border-[var(--oh-border)] bg-base-secondary`,p(`md`),m),children:[(0,_.jsx)(`div`,{className:`px-6 pt-6 pb-2 pr-12`,children:(0,_.jsx)(`h2`,{className:`text-lg font-semibold`,children:e(u.BACKEND$ADD_TITLE)})}),(0,_.jsx)(`div`,{className:`px-6 pb-6 pt-2`,children:(0,_.jsx)(d,{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)(f,{isConnected:S===`success`}),(0,_.jsx)(`span`,{"data-testid":`${n}-status`,className:S===`error`?`text-red-400`:`text-green-400`,children:S===`error`?w:e(u.ONBOARDING$BACKEND_STATUS_CONNECTED)})]}),(0,_.jsx)(h,{type:`submit`,variant:`secondary`,isDisabled:!t||b,testId:`${n}-submit`,className:`w-full text-center`,children:e(b?u.ONBOARDING$BACKEND_STATUS_CHECKING:u.BACKEND$CONNECT)})]})})})]})})}export{v as default};
@@ -1 +1 @@
1
- import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{St as t,yt as n}from"./vendor-styling-Bcgpimp9.js";import{W as r}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~d4by102p-C2f0ZhS-.js";import{t as i}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gy8zbn65-CGt6bWRT.js";import{At as a,Nt as o,Rt as s,_ as c,kt as l,n as u}from"./active-backend-context-BiwzkzDy.js";import{z as d}from"./utils-BgGG1znF.js";import{t as f}from"./settings-Chfn5xTD.js";import{n as p}from"./use-settings-8nt3DGxW.js";import{t as m}from"./use-save-settings-L3aMaDeS.js";import{t as h}from"./brand-button-DGN6Y9o6.js";import{i as g,n as _,r as v,t as y}from"./color-themes-DTj5Ylbr.js";import{t as b}from"./navigation-link-Bxmn-pCs.js";import{t as x}from"./settings-input-B-q2gkVy.js";import{t as S}from"./use-llm-profiles-2Wc2db8u.js";import{t as C}from"./settings-dropdown-input-DYCULKpp.js";import{n as w,t as T}from"./switch-skeleton-BQoOhQTB.js";import{t as E}from"./settings-switch-LqKdGxHL.js";var D=e(t(),1),O=n();function k({defaultKey:e,onChange:t,name:n}){let{t:r}=i(`openhands`);return(0,O.jsx)(C,{testId:n,name:n,onInputChange:t,label:r(d.SETTINGS$LANGUAGE),items:s.map(e=>({key:e.value,label:e.label})),defaultSelectedKey:e,isClearable:!1,wrapperClassName:`w-full min-w-0`})}function A(){let{t:e}=i(`openhands`),t=D.useCallback(e=>{if(!e)return;let t=e;_(t),v(t)},[]);return(0,O.jsx)(C,{testId:`color-theme-input`,name:`color-theme-input`,label:e(d.SETTINGS$COLOR_THEME),items:y.map(e=>({key:e.key,label:e.label})),defaultSelectedKey:g(),onSelectionChange:t,isClearable:!1,wrapperClassName:`w-full min-w-0`})}function j(){return(0,O.jsxs)(`div`,{"data-testid":`app-settings-skeleton`,className:`px-11 py-9 flex flex-col gap-6`,children:[(0,O.jsx)(w,{}),(0,O.jsx)(T,{}),(0,O.jsx)(T,{})]})}var M=`__automatic__`;function N(){let{t:e}=i(`openhands`),{mutate:t,isPending:n}=m(),{data:r,isLoading:g}=p(),_=u().backend.kind===`cloud`,{data:v,isLoading:y}=S(),[w,T]=D.useState(!1),[N,P]=D.useState(!1),[F,I]=D.useState(!1),[L,R]=D.useState(!1),[z,B]=D.useState(!1),[V,H]=D.useState(void 0),U=D.useMemo(()=>{let e=r?.title_llm_profile??null;return!e||!v||v.profiles.some(t=>t.name===e)?e:null},[v,r?.title_llm_profile]),W=V===void 0?U:V,G=D.useMemo(()=>[{key:M,label:e(d.SETTINGS$TITLE_GENERATION_AUTOMATIC)},...v?.profiles.map(t=>({key:t.name,label:t.model?e(d.SETTINGS$TITLE_GENERATION_PROFILE_OPTION,{name:t.name,model:t.model}):t.name}))??[]],[v?.profiles,e]),K=n=>{let r=n.get(`language-input`)?.toString(),i=s.find(({label:e})=>e===r)?.value||f.language,u=_?!0:n.get(`enable-analytics-switch`)?.toString()===`on`,p=n.get(`enable-sound-notifications-switch`)?.toString()===`on`,m=n.get(`git-user-name-input`)?.toString()||f.git_user_name,h=n.get(`git-user-email-input`)?.toString()||f.git_user_email;t({language:i,...!_&&{user_consents_to_analytics:u},enable_sound_notifications:p,git_user_name:m,git_user_email:h,title_llm_profile:W},{onSuccess:()=>{c(u?`granted`:`denied`),a(e(d.SETTINGS$SAVED))},onError:t=>{l(o(t)||e(d.ERROR$GENERIC))},onSettled:()=>{T(!1),P(!1),I(!1),R(!1),B(!1),H(void 0)}})},q=e=>{let t=s.find(({label:t})=>t===e)?.label,n=s.find(({value:e})=>e===r?.language)?.label;T(t!==n)},J=e=>{P(e!==(r?.user_consents_to_analytics??!0))},Y=e=>{I(e!==!!r?.enable_sound_notifications)},X=e=>{let t=r?.git_user_name;R(e!==t)},Z=e=>{let t=r?.git_user_email;B(e!==t)},Q=!w&&!N&&!F&&W===U&&!L&&!z,$=!r||g||y||n;return(0,O.jsxs)(`form`,{"data-testid":`app-settings-screen`,action:K,className:`flex flex-col gap-6`,children:[$&&(0,O.jsx)(j,{}),!$&&(0,O.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,O.jsx)(k,{name:`language-input`,defaultKey:r.language,onChange:q}),(0,O.jsx)(A,{}),(0,O.jsx)(E,{testId:`enable-analytics-switch`,name:_?void 0:`enable-analytics-switch`,defaultIsToggled:_?!0:r.user_consents_to_analytics??!0,isToggled:_?!0:void 0,isDisabled:_,onToggle:_?void 0:J,children:e(d.ANALYTICS$SEND_ANONYMOUS_DATA)}),(0,O.jsx)(E,{testId:`enable-sound-notifications-switch`,name:`enable-sound-notifications-switch`,defaultIsToggled:!!r.enable_sound_notifications,onToggle:Y,children:e(d.SETTINGS$SOUND_NOTIFICATIONS)}),(0,O.jsxs)(`div`,{className:`border-t border-[var(--oh-border)] pt-6 mt-2`,children:[(0,O.jsx)(`h3`,{className:`text-lg font-medium mb-2`,children:e(d.SETTINGS$CONVERSATION_TITLES)}),(0,O.jsx)(`p`,{className:`mb-4 text-sm leading-5 text-tertiary-light`,children:e(d.SETTINGS$TITLE_GENERATION_DESCRIPTION)}),(0,O.jsx)(C,{testId:`title-llm-profile-input`,name:`title-llm-profile-input`,label:e(d.SETTINGS$TITLE_GENERATION_MODEL),items:G,selectedKey:W??M,onSelectionChange:e=>{let t=e?.toString();H(!t||t===M?null:t)}}),(0,O.jsx)(b,{to:`/settings/llm`,className:`mt-3 inline-block text-sm text-primary hover:underline`,children:e(d.SETTINGS$MANAGE_LLM_PROFILES)})]}),(0,O.jsxs)(`div`,{className:`border-t border-[var(--oh-border)] pt-6 mt-2`,children:[(0,O.jsx)(`h3`,{className:`text-lg font-medium mb-2`,children:e(d.SETTINGS$GIT_SETTINGS)}),(0,O.jsx)(`p`,{className:`mb-4 text-sm leading-5 text-tertiary-light`,children:e(d.SETTINGS$GIT_SETTINGS_DESCRIPTION)}),(0,O.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,O.jsx)(x,{testId:`git-user-name-input`,name:`git-user-name-input`,type:`text`,label:e(d.SETTINGS$GIT_USERNAME),defaultValue:r.git_user_name||``,onChange:X,placeholder:e(d.SETTINGS$GIT_USERNAME_PLACEHOLDER),className:`w-full min-w-0`}),(0,O.jsx)(x,{testId:`git-user-email-input`,name:`git-user-email-input`,type:`email`,label:e(d.SETTINGS$GIT_EMAIL),defaultValue:r.git_user_email||``,onChange:Z,placeholder:e(d.SETTINGS$GIT_EMAIL_PLACEHOLDER),className:`w-full min-w-0`})]}),(0,O.jsx)(`div`,{className:`flex justify-start pt-4`,children:(0,O.jsxs)(h,{testId:`submit-button`,variant:`primary`,type:`submit`,isDisabled:n||Q,children:[!n&&e(d.SETTINGS$SAVE_CHANGES),n&&e(d.SETTINGS$SAVING)]})})]})]})]})}var P=r(N);export{P as default};
1
+ import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{St as t,yt as n}from"./vendor-styling-Ck5D_A2Q.js";import{U as r}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~lq5hicxx-cHFhpUBq.js";import{t as i}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gxu4j2ea-Cwhh3zLe.js";import{At as a,Pt as o,_ as s,jt as c,n as l,zt as u}from"./active-backend-context-B0wI7OzM.js";import{z as d}from"./utils-BX9XJ0IE.js";import{t as f}from"./settings-CWFxymAf.js";import{n as p}from"./use-settings-3RcgdUuZ.js";import{t as m}from"./use-save-settings-C9B8Y-h3.js";import{t as h}from"./brand-button-DJmFCyMK.js";import{i as g,n as _,r as v,t as y}from"./color-themes-DTj5Ylbr.js";import{t as b}from"./navigation-link-Bxo3-4vo.js";import{t as x}from"./settings-input-BQY115xH.js";import{t as S}from"./use-llm-profiles-C-tDO6UB.js";import{t as C}from"./settings-dropdown-input-Cx4g7Xfl.js";import{n as w,t as T}from"./switch-skeleton-DwOoCqaL.js";import{t as E}from"./settings-switch-BIodMVz9.js";var D=e(t(),1),O=n();function k({defaultKey:e,onChange:t,name:n}){let{t:r}=i(`openhands`);return(0,O.jsx)(C,{testId:n,name:n,onInputChange:t,label:r(d.SETTINGS$LANGUAGE),items:u.map(e=>({key:e.value,label:e.label})),defaultSelectedKey:e,isClearable:!1,wrapperClassName:`w-full min-w-0`})}function A(){let{t:e}=i(`openhands`),t=D.useCallback(e=>{if(!e)return;let t=e;_(t),v(t)},[]);return(0,O.jsx)(C,{testId:`color-theme-input`,name:`color-theme-input`,label:e(d.SETTINGS$COLOR_THEME),items:y.map(e=>({key:e.key,label:e.label})),defaultSelectedKey:g(),onSelectionChange:t,isClearable:!1,wrapperClassName:`w-full min-w-0`})}function j(){return(0,O.jsxs)(`div`,{"data-testid":`app-settings-skeleton`,className:`px-11 py-9 flex flex-col gap-6`,children:[(0,O.jsx)(w,{}),(0,O.jsx)(T,{}),(0,O.jsx)(T,{})]})}var M=`__automatic__`;function N(){let{t:e}=i(`openhands`),{mutate:t,isPending:n}=m(),{data:r,isLoading:g}=p(),_=l().backend.kind===`cloud`,{data:v,isLoading:y}=S(),[w,T]=D.useState(!1),[N,P]=D.useState(!1),[F,I]=D.useState(!1),[L,R]=D.useState(!1),[z,B]=D.useState(!1),[V,H]=D.useState(void 0),U=D.useMemo(()=>{let e=r?.title_llm_profile??null;return!e||!v||v.profiles.some(t=>t.name===e)?e:null},[v,r?.title_llm_profile]),W=V===void 0?U:V,G=D.useMemo(()=>[{key:M,label:e(d.SETTINGS$TITLE_GENERATION_AUTOMATIC)},...v?.profiles.map(t=>({key:t.name,label:t.model?e(d.SETTINGS$TITLE_GENERATION_PROFILE_OPTION,{name:t.name,model:t.model}):t.name}))??[]],[v?.profiles,e]),K=n=>{let r=n.get(`language-input`)?.toString(),i=u.find(({label:e})=>e===r)?.value||f.language,l=_?!0:n.get(`enable-analytics-switch`)?.toString()===`on`,p=n.get(`enable-sound-notifications-switch`)?.toString()===`on`,m=n.get(`git-user-name-input`)?.toString()||f.git_user_name,h=n.get(`git-user-email-input`)?.toString()||f.git_user_email;t({language:i,...!_&&{user_consents_to_analytics:l},enable_sound_notifications:p,git_user_name:m,git_user_email:h,title_llm_profile:W},{onSuccess:()=>{s(l?`granted`:`denied`),c(e(d.SETTINGS$SAVED))},onError:t=>{a(o(t)||e(d.ERROR$GENERIC))},onSettled:()=>{T(!1),P(!1),I(!1),R(!1),B(!1),H(void 0)}})},q=e=>{let t=u.find(({label:t})=>t===e)?.label,n=u.find(({value:e})=>e===r?.language)?.label;T(t!==n)},J=e=>{P(e!==(r?.user_consents_to_analytics??!0))},Y=e=>{I(e!==!!r?.enable_sound_notifications)},X=e=>{let t=r?.git_user_name;R(e!==t)},Z=e=>{let t=r?.git_user_email;B(e!==t)},Q=!w&&!N&&!F&&W===U&&!L&&!z,$=!r||g||y||n;return(0,O.jsxs)(`form`,{"data-testid":`app-settings-screen`,action:K,className:`flex flex-col gap-6`,children:[$&&(0,O.jsx)(j,{}),!$&&(0,O.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,O.jsx)(k,{name:`language-input`,defaultKey:r.language,onChange:q}),(0,O.jsx)(A,{}),(0,O.jsx)(E,{testId:`enable-analytics-switch`,name:_?void 0:`enable-analytics-switch`,defaultIsToggled:_?!0:r.user_consents_to_analytics??!0,isToggled:_?!0:void 0,isDisabled:_,onToggle:_?void 0:J,children:e(d.ANALYTICS$SEND_ANONYMOUS_DATA)}),(0,O.jsx)(E,{testId:`enable-sound-notifications-switch`,name:`enable-sound-notifications-switch`,defaultIsToggled:!!r.enable_sound_notifications,onToggle:Y,children:e(d.SETTINGS$SOUND_NOTIFICATIONS)}),(0,O.jsxs)(`div`,{className:`border-t border-[var(--oh-border)] pt-6 mt-2`,children:[(0,O.jsx)(`h3`,{className:`text-lg font-medium mb-2`,children:e(d.SETTINGS$CONVERSATION_TITLES)}),(0,O.jsx)(`p`,{className:`mb-4 text-sm leading-5 text-tertiary-light`,children:e(d.SETTINGS$TITLE_GENERATION_DESCRIPTION)}),(0,O.jsx)(C,{testId:`title-llm-profile-input`,name:`title-llm-profile-input`,label:e(d.SETTINGS$TITLE_GENERATION_MODEL),items:G,selectedKey:W??M,onSelectionChange:e=>{let t=e?.toString();H(!t||t===M?null:t)}}),(0,O.jsx)(b,{to:`/settings/llm`,className:`mt-3 inline-block text-sm text-primary hover:underline`,children:e(d.SETTINGS$MANAGE_LLM_PROFILES)})]}),(0,O.jsxs)(`div`,{className:`border-t border-[var(--oh-border)] pt-6 mt-2`,children:[(0,O.jsx)(`h3`,{className:`text-lg font-medium mb-2`,children:e(d.SETTINGS$GIT_SETTINGS)}),(0,O.jsx)(`p`,{className:`mb-4 text-sm leading-5 text-tertiary-light`,children:e(d.SETTINGS$GIT_SETTINGS_DESCRIPTION)}),(0,O.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,O.jsx)(x,{testId:`git-user-name-input`,name:`git-user-name-input`,type:`text`,label:e(d.SETTINGS$GIT_USERNAME),defaultValue:r.git_user_name||``,onChange:X,placeholder:e(d.SETTINGS$GIT_USERNAME_PLACEHOLDER),className:`w-full min-w-0`}),(0,O.jsx)(x,{testId:`git-user-email-input`,name:`git-user-email-input`,type:`email`,label:e(d.SETTINGS$GIT_EMAIL),defaultValue:r.git_user_email||``,onChange:Z,placeholder:e(d.SETTINGS$GIT_EMAIL_PLACEHOLDER),className:`w-full min-w-0`})]}),(0,O.jsx)(`div`,{className:`flex justify-start pt-4`,children:(0,O.jsxs)(h,{testId:`submit-button`,variant:`primary`,type:`submit`,isDisabled:n||Q,children:[!n&&e(d.SETTINGS$SAVE_CHANGES),n&&e(d.SETTINGS$SAVING)]})})]})]})]})}var P=r(N);export{P as default};
@@ -0,0 +1,3 @@
1
+ import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{St as t,yt as n}from"./vendor-styling-Ck5D_A2Q.js";import{B as r,H as i,U as a}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~lq5hicxx-cHFhpUBq.js";import{t as o}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gxu4j2ea-Cwhh3zLe.js";import{j as s,v as c}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kv3pap4j-oGvLV0dO.js";import{t as l}from"./useQuery-BCnzy4LX.js";import{$ as u,At as d,Y as f,ct as p,jt as m,n as h,nt as g}from"./active-backend-context-B0wI7OzM.js";import{i as _,t as v,z as y}from"./utils-BX9XJ0IE.js";import{t as b}from"./back-nav-button-BZB6H7xz.js";import{t as x}from"./zap-tbKDzCe3.js";import{t as S}from"./proxy-CIGI9zQC.js";import{m as C,n as w,t as T,x as E}from"./use-tracking-CTtkLAmx.js";import{t as ee}from"./use-settings-3RcgdUuZ.js";import{r as D}from"./modal-classes-DSTLuxkA.js";import{t as O}from"./brand-button-DJmFCyMK.js";import{n as k}from"./navigation-context-CQZwH_tC.js";import{n as A}from"./use-create-conversation-FaP0kUpg.js";import{t as j}from"./u-edit-DAkcF52u.js";import{t as M}from"./terminal-BUpID2wS.js";import{t as N}from"./use-user-conversation-Bei82QsZ.js";import{t as P}from"./toggle-switch--8n8NeV_.js";import{t as F}from"./x-mark-BopmFoBq.js";import{n as I,t as te}from"./link-external-BNZzCM1I.js";import{_ as ne,a as re,d as ie,g as ae,h as oe,i as L,n as R,o as se,p as ce,r as z,s as le,u as ue}from"./kebab-menu-item-content-By16Tm_0.js";import{t as B}from"./automation-C_eCrGyP.js";import{i as V}from"./use-manifest-capabilities-DLP5wCxp.js";import{i as de,n as fe,r as pe,t as me}from"./format-relative-time-6-3uvOXe.js";import{a as he,c as ge,i as _e,l as ve,o as ye,r as be,s as xe,t as Se,u as Ce}from"./automation-export-CRq40mux.js";var H=e(t()),U=n();function W(){let{t:e}=o(`openhands`);return(0,U.jsx)(b,{to:C(),children:E().detailBackLabel??e(y.AUTOMATIONS$DETAIL$BACK_TO_LIST)})}var G=e=>(0,U.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2,...e,children:(0,U.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 we({active:e}){let{t}=o(`openhands`);return(0,U.jsx)(`span`,{"data-testid":e?`active-status-badge-active`:`active-status-badge-inactive`,className:v(`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?y.AUTOMATIONS$DETAIL$ACTIVE:y.AUTOMATIONS$DETAIL$INACTIVE)})}function Te({automation:e,onToggle:t,onEdit:n,onDelete:r,onExport:i,onDownloadTarball:a,onRunNow:s,isRunningNow:c=!1}){let{t:l}=o(`openhands`),u=L(`manage_automations`),d=[...n?[{label:l(y.AUTOMATIONS$EDIT),icon:(0,U.jsx)(j,{className:`size-4`}),onClick:n}]:[],{label:e.enabled?l(y.AUTOMATIONS$TURN_OFF):l(y.AUTOMATIONS$TURN_ON),icon:(0,U.jsx)(R,{className:`size-4`}),onClick:t},{label:l(y.AUTOMATIONS$EXPORT),icon:(0,U.jsx)(G,{className:`size-4`}),onClick:i},{label:l(y.AUTOMATIONS$DOWNLOAD_TARBALL),icon:(0,U.jsx)(G,{className:`size-4`}),onClick:a},{label:l(y.AUTOMATIONS$DELETE),icon:(0,U.jsx)(ge,{className:`size-4`}),onClick:r}];return(0,U.jsx)(`div`,{className:`flex flex-col gap-4`,children:(0,U.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,U.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,U.jsx)(`h1`,{className:`text-xl font-medium text-content`,children:e.name}),(0,U.jsx)(we,{active:e.enabled})]}),(0,U.jsxs)(`div`,{className:`flex items-center gap-2`,children:[u&&s&&(0,U.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:c||!e.enabled,onClick:s,children:[(0,U.jsx)(z,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),l(c?y.AUTOMATIONS$STARTING:y.AUTOMATIONS$RUN_NOW)]}),u&&(0,U.jsx)(P,{enabled:e.enabled,label:e.enabled?l(y.AUTOMATIONS$TURN_OFF):l(y.AUTOMATIONS$TURN_ON),onToggle:t}),u&&(0,U.jsx)(Ce,{items:d})]})]})})}function K({icon:e,title:t,children:n}){return(0,U.jsxs)(`div`,{className:`rounded-2xl border border-[var(--oh-border)] bg-[var(--oh-surface)]`,children:[(0,U.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-[var(--oh-border)] px-5 py-3`,children:[(0,U.jsx)(`span`,{className:`size-4 text-muted`,children:e}),(0,U.jsx)(`h3`,{className:`text-sm font-medium text-content`,children:t})]}),(0,U.jsx)(`div`,{className:`px-5 py-5`,children:n})]})}var Ee=240,De=`max-h-60`;function Oe({prompt:e}){let{t}=o(`openhands`),[n,r]=H.useState(!1),[i,a]=H.useState(!1),s=H.useRef(null),c=i&&!n;return H.useLayoutEffect(()=>{let e=s.current;if(!e)return;let t=()=>{a(e.scrollHeight>Ee)};t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[e]),(0,U.jsx)(K,{icon:(0,U.jsx)(M,{className:`size-4`}),title:t(y.AUTOMATIONS$DETAIL$PROMPT),children:(0,U.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,U.jsxs)(`div`,{className:`relative`,children:[(0,U.jsx)(`p`,{ref:s,className:v(`whitespace-pre-wrap text-sm leading-6 text-content`,c&&v(De,`overflow-hidden`)),"data-testid":`automation-prompt-content`,children:e}),c?(0,U.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,U.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?y.COMMON$VIEW_LESS:y.COMMON$VIEW_MORE)}):null]})})}var ke=e=>(0,U.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:[(0,U.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,U.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z`})]}),Ae=e=>(0,U.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:[(0,U.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,U.jsx)(`circle`,{cx:6,cy:3,r:2}),(0,U.jsx)(`circle`,{cx:18,cy:3,r:2}),(0,U.jsx)(`circle`,{cx:9,cy:18,r:2})]}),q=e=>(0,U.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,U.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`})}),je=e=>(0,U.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,U.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 J({icon:e,label:t,children:n}){return(0,U.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,U.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,U.jsx)(`span`,{className:`size-3.5 text-muted`,children:e}),(0,U.jsx)(`span`,{className:`text-xs font-medium text-muted`,children:t})]}),(0,U.jsx)(`div`,{className:`text-sm text-content`,children:n})]})}function Me({branch:e}){return(0,U.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 Y=60;function Ne({filter:e}){let{t}=o(`openhands`),[n,r]=(0,H.useState)(!1),i=e.length>Y;return(0,U.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,U.jsx)(`span`,{className:`font-mono break-all`,children:i&&!n?`${e.slice(0,Y)}…`:e}),i&&(0,U.jsx)(`button`,{type:`button`,onClick:()=>r(!n),"aria-expanded":n,className:`text-xs text-muted hover:text-content self-start`,children:t(n?y.SETTINGS$SKILLS_SHOW_LESS:y.SETTINGS$SKILLS_SHOW_MORE)})]})}function Pe({automation:e}){let{t}=o(`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?y.AUTOMATIONS$DETAIL$TRIGGER_EVENT:y.AUTOMATIONS$DETAIL$TRIGGER_SCHEDULE);return(0,U.jsx)(K,{icon:(0,U.jsx)(ke,{className:`size-4`}),title:t(y.AUTOMATIONS$DETAIL$CONFIGURATION),children:(0,U.jsxs)(`div`,{className:`grid grid-cols-2 gap-x-4 gap-y-5`,children:[e.repository&&(0,U.jsx)(J,{icon:(0,U.jsx)(Ae,{className:`size-3.5`}),label:t(y.AUTOMATIONS$DETAIL$REPOSITORIES),children:(0,U.jsxs)(`span`,{className:`flex items-center gap-1`,children:[e.repository,e.branch&&(0,U.jsx)(Me,{branch:e.branch})]})}),(0,U.jsx)(J,{icon:(0,U.jsx)(de,{className:`size-3.5`}),label:t(y.AUTOMATIONS$DETAIL$TRIGGER),children:i}),!n&&(0,U.jsx)(J,{icon:(0,U.jsx)(q,{className:`size-3.5`}),label:t(y.AUTOMATIONS$DETAIL$SCHEDULE),children:r}),n&&e.trigger.source&&(0,U.jsx)(J,{icon:(0,U.jsx)(x,{className:`size-3.5`,"aria-hidden":`true`}),label:t(y.AUTOMATIONS$DETAIL$EVENT_SOURCE),children:e.trigger.source}),n&&e.trigger.on&&(0,U.jsx)(J,{icon:(0,U.jsx)(te,{className:`size-3.5`}),label:t(y.AUTOMATIONS$DETAIL$EVENT_TYPE),children:le(e.trigger.on)}),n&&e.trigger.filter&&(0,U.jsx)(J,{icon:(0,U.jsx)(I,{className:`size-3.5`}),label:t(y.AUTOMATIONS$DETAIL$EVENT_FILTER),children:(0,U.jsx)(Ne,{filter:e.trigger.filter})}),(0,U.jsx)(J,{icon:(0,U.jsx)(ve,{className:`size-3.5`}),label:t(y.AUTOMATIONS$DETAIL$MODEL),children:e.model??t(y.COMMON$ACTIVE_PROFILE)}),e.notification&&(0,U.jsx)(J,{icon:(0,U.jsx)(je,{className:`size-3.5`}),label:t(y.AUTOMATIONS$DETAIL$NOTIFICATION),children:e.notification})]})})}var Fe=e=>(0,U.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,U.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 Ie({name:e}){return(0,U.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 Le({plugins:e}){let{t}=o(`openhands`);return(0,U.jsx)(K,{icon:(0,U.jsx)(Fe,{className:`size-4`}),title:t(y.AUTOMATIONS$DETAIL$PLUGINS),children:(0,U.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.map(e=>(0,U.jsx)(Ie,{name:e},e))})})}var X=e=>(0,U.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,U.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 Re({createdAt:e,lastRunAt:t}){let{t:n,i18n:r}=o(`openhands`),i=r.language;return(0,U.jsx)(K,{icon:(0,U.jsx)(X,{className:`size-4`}),title:n(y.AUTOMATIONS$DETAIL$ACTIVITY),children:(0,U.jsxs)(`div`,{className:`grid grid-cols-2 gap-x-4`,children:[(0,U.jsx)(J,{icon:(0,U.jsx)(q,{className:`size-3.5`}),label:n(y.AUTOMATIONS$DETAIL$CREATED),children:me(e,i)}),(0,U.jsx)(J,{icon:(0,U.jsx)(re,{className:`size-3.5`}),label:n(y.AUTOMATIONS$DETAIL$LAST_RUN),children:t?fe(t,i,n):n(y.AUTOMATIONS$DETAIL$TIME_NEVER)})]})})}var ze=100,Z=[`run_id`,`automation_id`,`automation_name`,`trigger`,`start_time`,`end_time`,`duration_seconds`,`status`,`conversation_id`,`conversation_url`,`error`];function Be(e,t){return`${e.name.trim().toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``)||e.id}.activity-log.${t}`}function Ve(e){return/[",\n\r]/.test(e)?`"${e.replace(/"/g,`""`)}"`:e}function He(e){let t=[Z.join(`,`)];for(let n of e){let e=Z.map(e=>{let t=n[e];return t==null?``:Ve(e===`trigger`?JSON.stringify(t):String(t))});t.push(e.join(`,`))}return`${t.join(`
2
+ `)}\n`}function Ue(e,t){if(!e)return null;let n=`/conversations/${e}`;return t?`${t.replace(/\/$/,``)}${n}`:n}function We(e,t,n){let r=e.started_at||null,i=e.completed_at,a=null;return r&&i&&(a=(new Date(i).getTime()-new Date(r).getTime())/1e3),{run_id:e.id,automation_id:t.id,automation_name:t.name,trigger:t.trigger,start_time:r,end_time:i,duration_seconds:a,status:e.status,conversation_id:e.conversation_id,conversation_url:Ue(e.conversation_id,n),error:e.error_detail}}async function Ge(e,t){let n=[],r=0,i=1/0;for(;r<i;){let a=await w.listAutomationRuns(e.id,{limit:ze,offset:r});for(let r of a.runs)n.push(We(r,e,t));if(i=a.total,r+=a.runs.length,a.runs.length===0)break}return n}async function Ke(e){let{automation:t,format:n,conversationBaseUrl:r}=e,i=await Ge(t,r);if(n===`json`){_(new Blob([`${JSON.stringify({runs:i,total:i.length},null,2)}\n`],{type:`application/json`}),Be(t,`json`));return}_(new Blob([He(i)],{type:`text/csv;charset=utf-8`}),Be(t,`csv`))}var qe=20;function Je(e){return e.kind===`BashOutput`}var Ye=class e{static async listOutputs(t,n,r){let i=[],a;for(let o=0;o<qe;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=>{Je(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))}),S({backend:r,method:`GET`,hostOverride:g(e),path:`/api/bash/bash_events/search?${i.toString()}`,authMode:`session-api-key`,sessionApiKey:t})}return new c(u({...e?{conversationUrl:e}:{},sessionApiKey:t})).searchEvents(n)}},Xe=[`bash-command-logs`];function Ze(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 Qe(e){let t=s.isAxiosError(e)?e.response?.status:f(e)?e.status:void 0;if(t!==void 0)return t===404||t>=500?`unreachable`:null;if(s.isAxiosError(e)||e instanceof TypeError)return`unreachable`;if(e instanceof Error){let t=e.cause instanceof Error?e.cause.name:null;if(e.name===`AbortError`||e.name===`TimeoutError`||t===`AbortError`||t===`TimeoutError`)return`unreachable`}return null}function $e(e){let{conversationId:t,bashCommandId:n,enabled:r=!0}=e,i=h(),a=N(r?t??null:null),o=a.data,s=o?.conversation_url??null,c=o?.session_api_key??null,u=i.backend.kind===`cloud`,d=a.isFetched,f=null,p=!1;u&&d&&(o?f=Ze(o.sandbox_status)??(o.conversation_url?null:`missing`):p=!0);let m=r&&!!n&&(u?!!s:!0)&&!f&&!p,g=l({queryKey:[...Xe,n,s,c,i.backend.id,i.orgId],queryFn:()=>Ye.listOutputs(s,c,n),enabled:m,staleTime:60*1e3,gcTime:300*1e3,retry:!1}),_=u?Qe(g.error):null,v=f??_;return{data:g.data,error:_?null:g.error,isFetching:g.isFetching,isPending:g.isPending,isResolvingConversation:u&&a.isPending,conversationMissing:p,sandboxIssue:v}}var et=4e3;function tt(e,t){return e.length<=t?e:`…(truncated)…\n${e.slice(e.length-t)}`}function nt({automationName:e,automationPrompt:t,errorDetail:n,stderr:r,runId:i}){let a=r?.trim()||n?.trim()||``,o=a?tt(a,et):`No error output was captured for this run.`,s=e?.trim(),c=[`${s?`The scheduled automation "${s}" failed during a run.`:`A scheduled automation failed during a run.`} Please investigate the error and fix the root cause.`],l=t?.trim();return l&&c.push(``,`What the automation was set up to do:`,l),c.push(``,`Error output from the failed run (run ${i}):`,o,``,`Please diagnose why it failed and propose or implement a fix.`),c.join(`
3
+ `)}function rt({run:e,automation:t,stderr:n}){let{t:r}=o(`openhands`),{navigate:i}=k(),a=A();return(0,U.jsx)(O,{testId:`debug-automation-button`,type:`button`,variant:`primary`,onClick:()=>{if(a.isPending)return;let r=nt({automationName:t?.name,automationPrompt:t?.prompt,errorDetail:e.error_detail,stderr:n,runId:e.id});a.mutate({query:r},{onSuccess:e=>{i(`/conversations/${e.conversation_id}`)}})},isDisabled:a.isPending,"aria-busy":a.isPending,children:r(y.AUTOMATIONS$DETAIL$DEBUG_WITH_OPENHANDS)})}var it={missing:y.AUTOMATIONS$DETAIL$LOGS_SANDBOX_MISSING,paused:y.AUTOMATIONS$DETAIL$LOGS_SANDBOX_PAUSED,starting:y.AUTOMATIONS$DETAIL$LOGS_SANDBOX_STARTING,errored:y.AUTOMATIONS$DETAIL$LOGS_SANDBOX_ERROR,unreachable:y.AUTOMATIONS$DETAIL$LOGS_SANDBOX_UNREACHABLE};function at(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 ot({conversationId:e,bashCommandId:t,isOpen:n,onClose:r,run:i,automation:a}){let{t:s}=o(`openhands`),[c,l]=(0,H.useState)(`stdout`),{data:u,isFetching:d,isResolvingConversation:f,sandboxIssue:p,conversationMissing:m,error:h}=$e({conversationId:e,bashCommandId:t,enabled:n});(0,H.useEffect)(()=>{n&&l(`stdout`)},[n,t]),(0,H.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:_}=(0,H.useMemo)(()=>u?{stdout:at(u,`stdout`),stderr:at(u,`stderr`)}:{stdout:``,stderr:``},[u]);if(!n)return null;let b=f||d&&!u,x=!t,S=c===`stdout`?g:_,C=`border-b-2 px-3 py-2 text-sm font-normal transition-colors focus:outline-none`,w=`border-[var(--oh-primary)] text-white`,T=`border-transparent text-muted hover:text-content`;return(0,U.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center p-4`,role:`dialog`,"aria-modal":`true`,"aria-label":s(y.AUTOMATIONS$DETAIL$LOGS_TITLE),children:[(0,U.jsx)(`div`,{className:`absolute inset-0 bg-black/60`,onClick:r,onKeyDown:e=>{e.key===`Escape`&&r()},role:`presentation`}),(0,U.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,U.jsx)(`button`,{type:`button`,onClick:r,className:`absolute right-4 top-4 text-muted hover:text-foreground`,"aria-label":s(y.AUTOMATIONS$CANCEL),children:(0,U.jsx)(F,{className:`size-5`})}),(0,U.jsx)(`h2`,{className:v(`pr-8`,D),children:s(y.AUTOMATIONS$DETAIL$LOGS_TITLE)}),(0,U.jsxs)(`div`,{role:`tablist`,"aria-label":s(y.AUTOMATIONS$DETAIL$LOGS_TITLE),className:`mt-4 flex gap-1 border-b border-[var(--oh-border)]`,children:[(0,U.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":c===`stdout`,"aria-controls":`run-logs-panel-stdout`,id:`run-logs-tab-stdout`,tabIndex:c===`stdout`?0:-1,onClick:()=>l(`stdout`),className:`${C} ${c===`stdout`?w:T}`,children:s(y.AUTOMATIONS$DETAIL$LOGS_TAB_OUTPUT)}),(0,U.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":c===`stderr`,"aria-controls":`run-logs-panel-stderr`,id:`run-logs-tab-stderr`,tabIndex:c===`stderr`?0:-1,onClick:()=>l(`stderr`),className:`${C} ${c===`stderr`?w:T}`,children:s(y.AUTOMATIONS$DETAIL$LOGS_TAB_ERROR)})]}),(0,U.jsxs)(`div`,{role:`tabpanel`,id:`run-logs-panel-${c}`,"aria-labelledby":`run-logs-tab-${c}`,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:[x&&(0,U.jsx)(`p`,{className:`text-muted italic`,children:s(y.AUTOMATIONS$DETAIL$LOGS_NO_COMMAND)}),!x&&m&&(0,U.jsx)(`p`,{className:`text-muted italic`,children:s(y.AUTOMATIONS$DETAIL$LOGS_CONVERSATION_MISSING)}),!x&&!m&&p&&(0,U.jsx)(`p`,{"data-testid":`run-logs-sandbox-issue-${p}`,className:`text-muted italic`,children:s(it[p])}),!x&&!m&&!p&&b&&(0,U.jsx)(`p`,{className:`text-muted italic`,children:s(y.AUTOMATIONS$DETAIL$LOGS_LOADING)}),!x&&!m&&!p&&!b&&h&&!u&&(0,U.jsxs)(`p`,{className:`text-danger`,children:[s(y.AUTOMATIONS$DETAIL$LOGS_ERROR),`: `,String(h)]}),!b&&!p&&u&&(0,U.jsx)(`pre`,{"data-testid":`run-logs-output-${c}`,className:`whitespace-pre-wrap break-words ${c===`stderr`?`text-danger`:`text-content`}`,children:S.length>0?S:(0,U.jsx)(`span`,{className:`text-muted italic`,children:s(y.AUTOMATIONS$DETAIL$LOGS_EMPTY)})})]}),i?.status===B.FAILED&&(0,U.jsx)(`div`,{className:`mt-4 flex justify-end`,children:(0,U.jsx)(rt,{run:i,automation:a,stderr:_})})]})]})}function st(e,t){return new Date(e).toLocaleDateString(t,{weekday:`long`,year:`numeric`,month:`long`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}function ct(e){if(!e)return!0;let t=new Date(e).getTime();return Number.isNaN(t)||t===0}function lt(e){return`/conversations/${e}`}function ut({run:e,automation:t}){let{t:n,i18n:r}=o(`openhands`),i=!!e.conversation_id,a=!!e.bash_command_id,s=e.status===B.COMPLETED||e.status===B.FAILED,c=!i&&s,[l,u]=(0,H.useState)(!1),[d]=(0,H.useState)(()=>new Date().toISOString()),f=st(ct(e.started_at)?d:e.started_at,r.language),p=a?(0,U.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":n(y.AUTOMATIONS$DETAIL$LOGS_VIEW,{timestamp:f}),title:n(y.AUTOMATIONS$DETAIL$LOGS_VIEW_SHORT),children:(0,U.jsx)(M,{className:`size-4`})}):null,m=(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,U.jsx)(`span`,{className:`text-sm text-content`,children:f}),c&&(0,U.jsx)(`span`,{className:`text-xs text-muted`,children:n(y.AUTOMATIONS$DETAIL$NO_CONVERSATION)})]}),(0,U.jsxs)(`div`,{className:`flex items-center gap-2`,children:[p,(0,U.jsx)(pe,{status:e.status})]})]});return(0,U.jsxs)(U.Fragment,{children:[i&&e.conversation_id?(0,U.jsx)(`a`,{href:lt(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,U.jsx)(`div`,{className:`flex items-center justify-between px-5 py-3 cursor-default`,children:m}),a&&(0,U.jsx)(ot,{conversationId:e.conversation_id,bashCommandId:e.bash_command_id,isOpen:l,onClose:()=>u(!1),run:e,automation:t})]})}var Q=20,dt=100;function ft({automation:e,highlightedRunId:t=null}){let{t:n}=o(`openhands`),r=h(),{trackAutomationActivityLogExported:i}=T(),[a,s]=(0,H.useState)(Q),c=(0,H.useRef)(null),[l,u]=(0,H.useState)(!1),{data:f,isLoading:p}=ae({id:e.id,limit:a,offset:0}),m=f?f.total>f.runs.length:!1,g=!p&&(f?.total??0)>0&&!l,_=async t=>{if(g){u(!0);try{await Ke({automation:e,format:t,conversationBaseUrl:window.location.origin}),i({backendKind:r.backend.kind,format:t})}catch(e){d(V(e,n(y.AUTOMATIONS$DETAIL$EXPORT_ACTIVITY_LOG_ERROR)))}finally{u(!1)}}};return(0,H.useEffect)(()=>{if(!(!t||!f?.runs.length)){if(f.runs.findIndex(e=>e.id===t)<0){m&&a<dt&&s(e=>e+Q);return}c.current?.scrollIntoView({behavior:`smooth`,block:`center`})}},[f?.runs,m,t,a]),(0,U.jsxs)(`div`,{"data-testid":`automation-activity-log`,className:`rounded-2xl border border-[var(--oh-border)] bg-[var(--oh-surface)]`,children:[(0,U.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-[var(--oh-border)] px-5 py-3`,children:[(0,U.jsx)(`span`,{className:`size-4 text-muted`,children:(0,U.jsx)(X,{className:`size-4`})}),(0,U.jsx)(`h3`,{className:`text-sm font-medium text-content`,children:n(y.AUTOMATIONS$DETAIL$ACTIVITY_LOG)}),(0,U.jsxs)(`div`,{className:`ml-auto flex items-center gap-3`,children:[(0,U.jsx)(`button`,{type:`button`,"data-testid":`activity-log-export-json`,disabled:!g,onClick:()=>void _(`json`),className:`text-sm text-muted hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50`,children:n(y.AUTOMATIONS$DETAIL$EXPORT_JSON)}),(0,U.jsx)(`button`,{type:`button`,"data-testid":`activity-log-export-csv`,disabled:!g,onClick:()=>void _(`csv`),className:`text-sm text-muted hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50`,children:n(y.AUTOMATIONS$DETAIL$EXPORT_CSV)})]})]}),p&&(0,U.jsx)(`div`,{className:`space-y-1 p-5`,children:Array.from({length:3}).map((e,t)=>(0,U.jsxs)(`div`,{className:`flex items-center justify-between py-3`,children:[(0,U.jsx)(`div`,{className:`h-5 w-64 animate-pulse rounded bg-surface-raised`}),(0,U.jsx)(`div`,{className:`h-6 w-24 animate-pulse rounded-full bg-surface-raised`})]},`skeleton-${t}`))}),!p&&f?.runs.length===0&&(0,U.jsx)(`p`,{className:`px-5 py-8 text-center text-sm text-muted`,children:n(y.AUTOMATIONS$DETAIL$NO_RUNS)}),!p&&f&&f.runs.length>0&&(0,U.jsxs)(`div`,{children:[f.runs.map((n,r)=>{let i=n.id===t;return(0,U.jsx)(`div`,{ref:i?c:void 0,"data-testid":i?`automation-run-highlight-${n.id}`:void 0,className:v(r>0?`border-t border-[var(--oh-border)]`:``,i&&`bg-[var(--oh-focus)]/10`),children:(0,U.jsx)(ut,{run:n,automation:e})},n.id)}),m&&(0,U.jsx)(`div`,{className:`border-t border-[var(--oh-border)] px-5 py-3`,children:(0,U.jsx)(`button`,{type:`button`,onClick:()=>s(e=>e+Q),className:`text-sm text-muted hover:text-foreground`,children:n(y.AUTOMATIONS$DETAIL$LOAD_MORE_RUNS)})})]})]})}function $({className:e}){return(0,U.jsx)(`div`,{className:v(`animate-pulse rounded bg-surface-raised`,e)})}function pt(){return(0,U.jsxs)(`div`,{className:`flex flex-col gap-4`,"data-testid":`detail-skeleton`,children:[(0,U.jsx)($,{className:`h-5 w-40`}),(0,U.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,U.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,U.jsx)($,{className:`h-6 w-48`}),(0,U.jsx)($,{className:`h-6 w-16 rounded-full`})]}),(0,U.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,U.jsx)($,{className:`h-6 w-11 rounded-full`}),(0,U.jsx)($,{className:`h-8 w-8`})]})]}),(0,U.jsx)($,{className:`h-5 w-96`}),(0,U.jsx)($,{className:`h-36 w-full rounded-2xl`}),(0,U.jsx)($,{className:`h-72 w-full rounded-2xl`}),(0,U.jsx)($,{className:`h-32 w-full rounded-2xl`}),(0,U.jsx)($,{className:`h-40 w-full rounded-2xl`})]})}function mt(){let{t:e}=o(`openhands`);return(0,U.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-20`,children:[(0,U.jsx)(xe,{className:`size-12 text-muted`}),(0,U.jsx)(`p`,{className:`mt-4 text-sm font-medium text-content`,children:e(y.AUTOMATIONS$DETAIL$NOT_FOUND_TITLE)}),(0,U.jsx)(`p`,{className:`mt-2 text-sm text-muted`,children:e(y.AUTOMATIONS$DETAIL$NOT_FOUND_MESSAGE)}),(0,U.jsx)(`div`,{className:`mt-6`,children:(0,U.jsx)(W,{})})]})}var ht=a(function(){let{t:e}=o(`openhands`),{automationId:t}=r(),[n]=i(),a=n.get(`run`),{navigate:s}=k(),[c,l]=(0,H.useState)(!1),[u,f]=(0,H.useState)(!1),{data:p,isLoading:g,refetch:v}=ne(),b=p?.status===`ok`,x=h(),S=(0,H.useRef)(x.backend.id).current!==x.backend.id,{data:E,isLoading:D,isError:O,error:A,refetch:j}=oe({id:t??``,enabled:b&&!S}),{trackPrebuiltAutomationEnabled:M,trackAutomationExported:N}=T(),P=ce(),F=ue(),I=ie(),te=O&&ee(A)===404;if(g)return(0,U.jsx)(`div`,{className:`min-h-full`,children:(0,U.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,U.jsx)(pt,{})})});if(!b)return(0,U.jsx)(`div`,{className:`min-h-full`,children:(0,U.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,U.jsx)(he,{onRetry:v})})});if(D)return(0,U.jsx)(`div`,{className:`min-h-full`,children:(0,U.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,U.jsx)(pt,{})})});if(te)return(0,U.jsx)(`div`,{className:`min-h-full`,children:(0,U.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,U.jsx)(mt,{})})});if(O||!E)return(0,U.jsx)(`div`,{className:`min-h-full`,children:(0,U.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,U.jsx)(ye,{onRetry:()=>j()})})});let re=()=>{let e=!E.enabled;P.mutate({id:E.id,enabled:e}),e&&M({automationId:E.id,automationName:E.name})},ae=()=>{F.mutate(E.id,{onSuccess:()=>{s?.(C())}})},L=()=>{I.mutate(E.id,{onSuccess:()=>{m(e(y.AUTOMATIONS$RUN_NOW_SUCCESS))},onError:t=>{d(V(t,e(y.AUTOMATIONS$RUN_NOW_ERROR)))}})},R=()=>{let e=`${JSON.stringify(be(E),null,2)}\n`;_(new Blob([e],{type:`application/json`}),Se(E)),N({backendKind:x.backend.kind})},z=x.backend.kind===`local`;return(0,U.jsx)(`div`,{className:`min-h-full`,children:(0,U.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,U.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,U.jsx)(W,{}),(0,U.jsx)(Te,{automation:E,onToggle:re,onEdit:z?()=>f(!0):void 0,onDelete:()=>l(!0),onExport:R,onDownloadTarball:()=>w.downloadTarball(E.id,E.name),onRunNow:L,isRunningNow:I.isPending}),E.prompt&&(0,U.jsx)(Oe,{prompt:E.prompt}),(0,U.jsx)(Pe,{automation:E}),E.plugins&&E.plugins.length>0&&(0,U.jsx)(Le,{plugins:E.plugins}),(0,U.jsx)(Re,{createdAt:E.created_at,lastRunAt:E.last_triggered_at}),(0,U.jsx)(ft,{automation:E,highlightedRunId:a}),(0,U.jsx)(_e,{automationName:E.name,isOpen:c,onConfirm:ae,onCancel:()=>l(!1)}),z&&(0,U.jsx)(se,{automation:E,isOpen:u,onClose:()=>f(!1)})]})})})});export{ht as default};
@@ -0,0 +1,2 @@
1
+ import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{St as t,bt as n,yt as r}from"./vendor-styling-Ck5D_A2Q.js";import{t as i}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gxu4j2ea-Cwhh3zLe.js";import{t as a,z as o}from"./utils-BX9XJ0IE.js";import{b as s}from"./use-tracking-CTtkLAmx.js";import{r as c}from"./modal-classes-DSTLuxkA.js";import{t as l}from"./brand-button-DJmFCyMK.js";import{r as u}from"./dropdown-classes-f91ARMV1.js";import{n as d,t as f}from"./context-menu-list-item-DhJCcBA0.js";import{t as p}from"./x-mark-BopmFoBq.js";import{t as m}from"./kebab-menu-item-content-By16Tm_0.js";var h=e(n(),1),g=e(t()),_=r(),v=e=>(0,_.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`currentColor`,viewBox:`0 0 20 20`,...e,children:(0,_.jsx)(`path`,{d:`M10 6a2 2 0 110-4 2 2 0 010 4zm0 6a2 2 0 110-4 2 2 0 010 4zm0 6a2 2 0 110-4 2 2 0 010 4z`})}),y=a(`inline-flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-md border-0 bg-transparent text-muted hover:bg-interactive-hover hover:text-white focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent disabled:hover:text-muted`,u),b=a(`inline-flex h-8 shrink-0 cursor-pointer items-center gap-1.5 rounded-md border-0 bg-transparent px-2 text-xs text-muted hover:bg-interactive-hover hover:text-white focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent disabled:hover:text-muted`,u);function x({items:e}){let{t}=i(`openhands`),[n,r]=(0,g.useState)(!1),[a,s]=(0,g.useState)(),c=(0,g.useRef)(null),l=(0,g.useRef)(null);(0,g.useLayoutEffect)(()=>{if(!n||!c.current)return;let e=()=>{let e=c.current?.getBoundingClientRect();e&&s({position:`fixed`,zIndex:9999,top:e.bottom+4,right:window.innerWidth-e.right})};return e(),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[n]),(0,g.useEffect)(()=>{if(!n)return;let e=e=>{let t=e.target;c.current?.contains(t)||l.current?.contains(t)||r(!1)},t=e=>{e.key===`Escape`&&r(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[n]);let u=n&&a?(0,_.jsx)(d,{ref:l,theme:`popover`,className:`min-w-[10rem]`,children:e.map(e=>(0,_.jsx)(`li`,{children:(0,_.jsx)(f,{onClick:t=>{t.stopPropagation(),e.onClick(),r(!1)},isDisabled:e.disabled,className:`group`,children:(0,_.jsx)(m,{icon:e.icon,label:e.label})})},e.label))}):null;return(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(`button`,{ref:c,type:`button`,onClick:e=>{e.stopPropagation(),r(e=>!e)},className:y,"aria-label":t(o.AUTOMATIONS$ACTIONS_MENU),"aria-expanded":n,"aria-haspopup":`menu`,children:(0,_.jsx)(v,{className:`size-4`})}),n&&a&&typeof document<`u`?h.createPortal((0,_.jsx)(`div`,{style:a,children:u}),document.body):null]})}var S=e=>(0,_.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2,...e,children:(0,_.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 00-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 003.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 003.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 00-3.09 3.09zM18.259 8.715L18 9.75l-.259-1.035a3.375 3.375 0 00-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 002.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 002.455 2.456L21.75 6l-1.036.259a3.375 3.375 0 00-2.455 2.456z`})}),C=e=>(0,_.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2,...e,children:(0,_.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16`})}),w=e=>(0,_.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:1.5,...e,children:(0,_.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z`})});function T({onRetry:e}){let{t}=i(`openhands`);return(0,_.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-20`,children:[(0,_.jsx)(w,{className:`size-12 text-danger`}),(0,_.jsx)(`p`,{className:`mt-4 text-sm text-muted`,children:t(o.AUTOMATIONS$ERROR_TITLE)}),(0,_.jsx)(`button`,{type:`button`,onClick:e,className:`mt-4 rounded-lg border border-[var(--oh-border)] px-4 py-2 text-sm text-white hover:bg-surface-raised`,children:t(o.AUTOMATIONS$ERROR_RETRY)})]})}function E({onRetry:e}){let{t}=i(`openhands`);return(0,_.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-20 px-4`,children:[(0,_.jsx)(w,{className:`size-12 text-[var(--oh-warning)]`}),(0,_.jsx)(`h2`,{className:`mt-4 text-lg font-medium text-content`,children:t(o.AUTOMATIONS$BACKEND_UNAVAILABLE_TITLE)}),(0,_.jsx)(`p`,{className:`mt-2 text-sm text-muted text-center max-w-md`,children:t(o.AUTOMATIONS$BACKEND_UNAVAILABLE_MESSAGE)}),(0,_.jsx)(l,{type:`button`,variant:`secondary`,className:`mt-6`,onClick:e,children:t(o.AUTOMATIONS$BACKEND_UNAVAILABLE_RETRY)})]})}function D({automationName:e,isOpen:t,onConfirm:n,onCancel:r}){let{t:a}=i(`openhands`);return t?(0,_.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center`,children:[(0,_.jsx)(`div`,{className:`absolute inset-0 bg-black/60`,onClick:r,onKeyDown:e=>{e.key===`Escape`&&r()},role:`presentation`}),(0,_.jsxs)(`div`,{className:`relative w-full max-w-sm rounded-xl border border-[var(--oh-border)] bg-[var(--oh-surface)] p-6`,children:[(0,_.jsx)(`button`,{type:`button`,onClick:r,className:`absolute right-4 top-4 text-muted hover:text-foreground`,"aria-label":a(o.BUTTON$CLOSE),children:(0,_.jsx)(p,{className:`size-5`})}),(0,_.jsx)(`h2`,{className:c,children:a(o.AUTOMATIONS$DELETE_CONFIRM_TITLE)}),(0,_.jsx)(`p`,{className:`mt-2 text-sm text-muted`,children:a(o.AUTOMATIONS$DELETE_CONFIRM_MESSAGE,{name:e})}),(0,_.jsxs)(`div`,{className:`mt-6 flex justify-end gap-3`,children:[(0,_.jsx)(`button`,{type:`button`,onClick:r,className:`rounded-lg border border-[var(--oh-border)] px-4 py-2 text-sm text-white hover:bg-surface-raised`,children:a(o.AUTOMATIONS$CANCEL)}),(0,_.jsx)(`button`,{type:`button`,onClick:n,className:`rounded-lg bg-danger px-4 py-2 text-sm text-white hover:bg-danger/80`,children:a(o.AUTOMATIONS$DELETE)})]})]})]}):null}var O=new Set([`cron`,`schedule`,`event`]),k=class extends Error{issues;constructor(e){super(e.join(`
2
+ `)),this.name=`AutomationFileValidationError`,this.issues=e}};function A(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function j(e,t,n,r){let i=e[t];if(typeof i!=`string`||i.trim().length===0){r.push(`${n}: expected a non-empty string`);return}return i}function M(e,t,n,r){let i=e[t];if(i!==void 0){if(typeof i!=`string`){r.push(`${n}: expected a string`);return}return i}}function N(e,t){if(!A(e)){t.push(`spec.trigger: expected an object`);return}let n=j(e,`type`,`spec.trigger.type`,t);n&&!O.has(n)&&t.push(`spec.trigger.type: expected one of "cron", "schedule", or "event"`);let r=M(e,`schedule`,`spec.trigger.schedule`,t),i=M(e,`schedule_human`,`spec.trigger.schedule_human`,t),a=M(e,`timezone`,`spec.trigger.timezone`,t),o=M(e,`source`,`spec.trigger.source`,t),s=M(e,`filter`,`spec.trigger.filter`,t),c;if(e.on!==void 0&&(typeof e.on==`string`||Array.isArray(e.on)&&e.on.length>0&&e.on.every(e=>typeof e==`string`&&e.trim().length>0)?c=e.on:t.push(`spec.trigger.on: expected a string or a non-empty array of strings`)),(n===`cron`||n===`schedule`)&&!r?.trim()&&t.push(`spec.trigger.schedule: required for a scheduled trigger`),n===`event`&&(o?.trim()||t.push(`spec.trigger.source: required for an event trigger`),(c===void 0||typeof c==`string`&&c.trim().length===0)&&t.push(`spec.trigger.on: required for an event trigger`)),!(!n||!O.has(n)))return{type:n,...r!==void 0&&{schedule:r},...i!==void 0&&{schedule_human:i},...a!==void 0&&{timezone:a},...o!==void 0&&{source:o},...c!==void 0&&{on:c},...s!==void 0&&{filter:s}}}function P(e){let t=e.timezone??e.trigger.timezone,n={name:e.name,trigger:{...e.trigger},enabled:e.enabled,prompt:e.prompt,...e.repository!==void 0&&{repository:e.repository},...e.model!==void 0&&{model:e.model},...e.timeout!=null&&{timeout:e.timeout},...e.branch!==void 0&&{branch:e.branch},...e.plugins!==void 0&&{plugins:[...e.plugins]},...e.notification!==void 0&&{notification:e.notification},...t!==void 0&&{timezone:t}},r=s();return{version:r.fileVersion,kind:r.fileKind,spec:n}}function F(e){return`${e.name.trim().toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``)||e.id}${s().filenameSuffix}`}function I(e){let t=[];if(!A(e))throw new k([`file: expected a JSON object`]);let n=s();if(e.version!==n.fileVersion&&t.push(`version: expected ${n.fileVersion}`),e.kind!==n.fileKind&&t.push(`kind: expected "${n.fileKind}"`),!A(e.spec))throw t.push(`spec: expected an object`),new k(t);let r=j(e.spec,`name`,`spec.name`,t),i=j(e.spec,`prompt`,`spec.prompt`,t),a=N(e.spec.trigger,t),o=e.spec.enabled;typeof o!=`boolean`&&t.push(`spec.enabled: expected a boolean`);let c=M(e.spec,`repository`,`spec.repository`,t),l=M(e.spec,`branch`,`spec.branch`,t),u=M(e.spec,`notification`,`spec.notification`,t),d=M(e.spec,`timezone`,`spec.timezone`,t),f;e.spec.model===null||e.spec.model===void 0||typeof e.spec.model==`string`&&e.spec.model.trim().length>0?f=e.spec.model:t.push(`spec.model: expected a non-empty string or null`);let p;e.spec.timeout===null||e.spec.timeout===void 0||typeof e.spec.timeout==`number`&&Number.isInteger(e.spec.timeout)&&e.spec.timeout>0?p=e.spec.timeout:t.push(`spec.timeout: expected a positive integer`);let m;if(e.spec.plugins!==void 0&&(Array.isArray(e.spec.plugins)&&e.spec.plugins.every(e=>typeof e==`string`&&e.trim().length>0)?m=[...e.spec.plugins]:t.push(`spec.plugins: expected an array of non-empty strings`)),t.length>0||!r||!i||!a)throw new k(t);return{name:r,prompt:i,trigger:a,enabled:o,...c!==void 0&&{repository:c},...f!==void 0&&{model:f},...p!==void 0&&{timeout:p},...l!==void 0&&{branch:l},...m!==void 0&&{plugins:m},...u!==void 0&&{notification:u},...d!==void 0&&{timezone:d}}}export{E as a,C as c,y as d,b as f,D as i,S as l,I as n,T as o,P as r,w as s,F as t,x as u};
@@ -0,0 +1 @@
1
+ import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{St as t,yt as n}from"./vendor-styling-Ck5D_A2Q.js";import{F as r,P as i,R as a,U as o}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~lq5hicxx-cHFhpUBq.js";import{t as s}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gxu4j2ea-Cwhh3zLe.js";import{j as c}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kv3pap4j-oGvLV0dO.js";import{X as l,n as u}from"./active-backend-context-B0wI7OzM.js";import{t as d,z as f}from"./utils-BX9XJ0IE.js";import{t as p}from"./loading-spinner-6Yj-YyoS.js";import{E as m,T as h,a as g,c as _,d as v,f as y,i as ee,l as te,m as ne,n as b,o as x,p as S,r as C,t as re,u as ie}from"./use-tracking-CTtkLAmx.js";import{l as w}from"./settings-service.api-Dz9cZyvx.js";import{n as T}from"./use-settings-3RcgdUuZ.js";import{t as ae}from"./modal-backdrop-BSzNhM4r.js";import{n as oe}from"./modal-classes-DSTLuxkA.js";import{l as E}from"./form-control-classes-pHtZUI6K.js";import{t as D}from"./brand-button-DJmFCyMK.js";import{t as O}from"./navigation-link-Bxo3-4vo.js";import{o as k,s as A,t as j}from"./conversation-store-B8Eahyeg.js";import{t as se}from"./modal-close-button-dheWZ2ys.js";import{t as M}from"./settings-input-BQY115xH.js";import{n as N}from"./use-create-conversation-FaP0kUpg.js";import{t as P}from"./settings-dropdown-input-Cx4g7Xfl.js";import{d as F,n as I,o as L,s as R}from"./mcp-marketplace-utils-BMnYz0Gc.js";import{t as z}from"./vendor~root-layout~index-home~home~mcp~automations-list~automation-templates~automation-set~bxsimjx0-D7IDevqN.js";import{n as ce,r as le}from"./use-manifest-capabilities-DLP5wCxp.js";import{t as B}from"./git-repo-dropdown-CWnaUyxL.js";import"./git-repo-dropdown-TzOuG5Ef.js";var V=e(t(),1);function ue(e){let t=e.requires.integrations,{data:n,isLoading:r}=T(),i=(0,V.useMemo)(()=>F(w(n?.agent_settings?.mcp_config)),[n?.agent_settings?.mcp_config]),a=(0,V.useMemo)(()=>{let e=R(z);return Object.entries(t).map(([t,n])=>({id:t,requirement:n,entry:L(t,e)??null})).filter(({entry:e})=>!e||!I(e,i))},[t,i]),o=a.filter(({requirement:e})=>e.required!==!1);return{blockingIntegrations:o,warningIntegrations:a.filter(({requirement:e})=>e.required===!1),isBlocked:o.length>0,isLoading:r}}var H={fieldErrors:{},formErrors:[]};function U(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function W(e,t){let n=e[0]===`body`?e.slice(1):e,r=[],i=t;return n.forEach(e=>{if(typeof e==`number`){Array.isArray(i)&&r.length>0&&(r[r.length-1]+=`[${e}]`,i=i[e]);return}U(i)&&e in i&&(r.push(e),i=i[e])}),r.join(`.`)}function G(e,t){if(!U(e))return[];if(Array.isArray(e.errors))return e.errors.flatMap(e=>!U(e)||typeof e.message!=`string`?[]:[{path:typeof e.field==`string`?e.field:``,message:e.message}]);let{detail:n}=e;return typeof n==`string`?[{path:``,message:n}]:Array.isArray(n)?n.flatMap(e=>!U(e)||typeof e.msg!=`string`?[]:[{path:W(Array.isArray(e.loc)?e.loc:[],t),message:e.msg}]):[]}function K(e,t){if(e.length===0)return H;let n={},r=[];return e.forEach(({path:e,message:i})=>{let a=e?t[e]:void 0;if(!a?.length){r.push(i);return}a.forEach(e=>{e in n||(n[e]=i)})}),{fieldErrors:n,formErrors:r}}var de={fieldErrors:{},formErrors:[]},q=[404,501];function J(e){return q.some(t=>l(e,t)||c.isAxiosError(e)&&e.response?.status===t)}function fe(e){let t=(0,V.useRef)(0),n=(0,V.useMemo)(()=>x(e),[e]);return(0,V.useCallback)(async r=>{let i=g(e,r);if(!i)return null;t.current+=1;let a=t.current;try{let e=await b.validateDraft(i);return a===t.current?e?.valid?de:K(G(e,i.draft),n):null}catch(e){return J(e)||console.warn(`Automation setup preflight failed:`,e),null}},[e,n])}function pe(){let e=N(),t=j(e=>e.setMessageToSend),n=(0,V.useCallback)(async n=>{let r=await e.mutateAsync({});return r.conversation_id.startsWith(`task-`)&&r.task_id?A(r.task_id,n):k(r.conversation_id,{draftMessage:n}),window.setTimeout(()=>t(n),0),{response:{...r}}},[e,t]);return(0,V.useCallback)(async(e,t,r)=>r?{response:await b.createAutomationDraft(r)}:n(C(e,t)),[n])}var Y=n();function me({name:e,field:t,value:n,error:r,options:i,repository:a,disabled:o,onChange:c,onRepositoryChange:l,onBlur:p}){let{t:m}=s(`openhands`),{backend:h}=u(),g=`setup-field-${e}`,_=(0,Y.jsx)(`p`,{className:`text-xs text-[var(--oh-muted)]`,children:t.help}),v=h.kind===`cloud`;if(t.type===`repo-picker`&&v)return(0,Y.jsxs)(`div`,{className:`flex w-full flex-col gap-2.5`,children:[(0,Y.jsx)(he,{field:t}),(0,Y.jsx)(B,{provider:t.provider??`github`,value:a?.id??null,repositoryName:a?.full_name??n??null,placeholder:t.placeholder,disabled:o,onChange:e=>{l(e??null),c(e?.full_name??``),p()}}),(0,Y.jsx)(Z,{testId:g,error:r}),_]});if(t.type===`select`||t.type===`timezone`&&i.length>0)return(0,Y.jsxs)(`div`,{className:`flex w-full flex-col gap-2.5`,children:[(0,Y.jsx)(P,{testId:g,name:e,label:(0,Y.jsx)(X,{field:t}),items:i.map(e=>({key:e.value,label:e.label})),selectedKey:n||void 0,placeholder:t.placeholder,isDisabled:o,required:t.required,onSelectionChange:e=>{c(e===null?``:String(e)),p()}}),(0,Y.jsx)(Z,{testId:g,error:r}),_]});if(t.type===`textarea`)return(0,Y.jsxs)(`label`,{className:`flex w-full flex-col gap-2.5`,children:[(0,Y.jsx)(X,{field:t}),(0,Y.jsx)(`textarea`,{"data-testid":g,name:e,rows:4,value:n,placeholder:t.placeholder,disabled:o,"aria-invalid":!!r,onChange:e=>c(e.target.value),onBlur:p,className:d(E,r&&`border-red-500`)}),(0,Y.jsx)(Z,{testId:g,error:r}),_]});let y=t.placeholder??(t.type===`repo-picker`?m(f.SETUP$REPOSITORY_PLACEHOLDER):void 0);return(0,Y.jsxs)(`div`,{className:`flex w-full flex-col gap-2.5`,children:[(0,Y.jsx)(M,{testId:g,name:e,type:`text`,label:t.label,value:n,placeholder:y,isDisabled:o,showRequiredTag:t.required,error:r,onChange:c,onBlur:p}),_]})}function X({field:e}){return(0,Y.jsxs)(`span`,{className:`flex items-center gap-2 text-sm`,children:[e.label,e.required&&(0,Y.jsx)(`span`,{className:`text-sm leading-none text-red-400`,"aria-hidden":!0,children:`*`})]})}function he({field:e}){return(0,Y.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,Y.jsx)(X,{field:e})})}function Z({testId:e,error:t}){return t?(0,Y.jsx)(`p`,{role:`alert`,"data-testid":`${e}-error`,className:`-mt-1 text-xs text-red-400`,children:t}):null}var ge=`/mcp`;function _e({prerequisites:e}){let{t}=s(`openhands`),{blockingIntegrations:n,warningIntegrations:r}=e;return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-4`,"data-testid":`setup-prerequisites`,children:[[...n,...r].map(({id:e,requirement:t,entry:n})=>(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,Y.jsx)(`span`,{className:`text-sm`,children:n?.name??e}),(0,Y.jsx)(`span`,{className:`text-xs text-[var(--oh-muted)]`,children:t.message})]},e)),(0,Y.jsx)(O,{to:ge,className:`text-sm underline`,children:t(f.SETUP$MANAGE_INTEGRATIONS)})]})}function ve({setup:e,values:t}){let{t:n}=s(`openhands`);return(0,Y.jsx)(`div`,{className:`flex flex-col gap-4`,"data-testid":`setup-review`,children:(0,Y.jsx)(`dl`,{className:`flex flex-col gap-3`,children:Object.entries(_(e)).map(([e,r])=>(0,Y.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,Y.jsx)(`dt`,{className:`text-xs text-[var(--oh-muted)]`,children:r.label}),(0,Y.jsx)(`dd`,{className:`text-sm break-words`,children:(t[e]??``).trim()||n(f.SETUP$EMPTY_VALUE)})]},e))})})}var ye=400,be={fieldErrors:{},formErrors:[]};function xe(e){return e.formErrors.length>0||Object.keys(e.fieldErrors).length>0}function Se(e){return typeof e.conversation_id==`string`?`/conversations/${e.conversation_id}`:typeof e.id==`string`?S(e.id):null}function Ce({entry:e,onClose:t}){let{t:n}=s(`openhands`),r=a(),i=ce(e),o=ue(e),c=fe(e),l=pe(),{trackAutomationSetupOpened:u,trackAutomationSetupValidated:h,trackAutomationSetupCreated:g,trackAutomationSetupFailed:ne}=re(),[b,S]=(0,V.useState)(`prerequisites`),[C,w]=(0,V.useState)(()=>ie(e.setup)),[T,E]=(0,V.useState)({}),[O,k]=(0,V.useState)({}),[A,j]=(0,V.useState)(be),[M,N]=(0,V.useState)(!1),P=(0,V.useRef)(C),F=(0,V.useRef)(null);(0,V.useEffect)(()=>()=>{F.current&&window.clearTimeout(F.current)},[]);let I=(0,V.useMemo)(()=>_(e.setup),[e]),L=(0,V.useMemo)(()=>v(e.setup,i.capabilities),[e,i.capabilities]),R=(0,V.useMemo)(()=>ee(e,C),[e,C]),z=(0,V.useMemo)(()=>x(e),[e]),B=(0,V.useRef)(!1);(0,V.useEffect)(()=>{B.current||(B.current=!0,u({automationId:e.id}))},[e.id,u]);let H=i.supported===!1,U=o.blockingIntegrations.length>0||o.warningIntegrations.length>0,W=b===`prerequisites`&&!U?`form`:b,de=(e,t)=>{P.current={...P.current,[e]:t},w(P.current),k(({[e]:t,...n})=>n),j(t=>{if(!(e in t.fieldErrors))return t;let{[e]:n,...r}=t.fieldErrors;return{...t,fieldErrors:r}})},q=()=>{F.current&&window.clearTimeout(F.current),F.current=window.setTimeout(()=>{c(P.current).then(e=>{e&&j(e)})},ye)},J=async()=>{if(W===`prerequisites`){S(`form`);return}let t=y(e.setup,C,L);if(Object.keys(t).length>0){k(t);return}k({});let n=await c(C);if(n&&xe(n)){j(n);return}j(be),h({automationId:e.id}),S(`review`)},X=async(i,a)=>{N(!0);try{let{response:n}=await l(e,C,i);g({automationId:e.id,setupMode:a});let o=Se(n);o?r(o,{replace:!0}):t()}catch(t){ne({automationId:e.id,setupMode:a});let r=K(G(le(t),i),z);j(xe(r)?r:{fieldErrors:{},formErrors:[n(f.SETUP$SUBMIT_FAILED)]}),S(`form`)}finally{N(!1)}},he=()=>X(R,e.setup.mode),Z=()=>X(null,`assisted`),ge=e.setup.mode===`direct`&&(m(e)!==null||e.setup.message!==void 0),Ce=e=>{let t=O[e];return t?we(t,n):A.fieldErrors[e]},Q=i.isLoading||o.isLoading,$=H?n(f.SETUP$UNAVAILABLE_TITLE):W===`prerequisites`?n(f.SETUP$PREREQUISITES_TITLE):W===`review`?n(f.SETUP$REVIEW_TITLE):e.name;return(0,Y.jsx)(ae,{onClose:t,"aria-label":e.name,children:(0,Y.jsxs)(`div`,{"data-testid":`setup-dialog`,className:`relative flex max-h-[85vh] w-[92vw] max-w-lg flex-col rounded-xl border border-[var(--oh-border)] bg-base-secondary`,children:[(0,Y.jsx)(se,{onClose:t,testId:`setup-dialog-close`,disabled:M}),(0,Y.jsx)(`header`,{className:`flex-shrink-0 px-6 pb-4 pt-6`,children:(0,Y.jsx)(`h2`,{className:d(`pr-6`,oe),children:$})}),(0,Y.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-6`,children:[Q&&(0,Y.jsx)(`div`,{className:`flex justify-center py-6`,children:(0,Y.jsx)(p,{size:`small`})}),!Q&&H&&(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Y.jsx)(`p`,{className:`text-sm text-[var(--oh-muted)]`,children:n(f.SETUP$UNSUPPORTED_MESSAGE)}),i.unmet.length>0&&(0,Y.jsx)(`p`,{"data-testid":`setup-unmet-requirements`,className:`text-sm text-[var(--oh-muted)]`,children:i.unmet.join(`, `)})]}),!Q&&!H&&W===`prerequisites`&&(0,Y.jsx)(_e,{prerequisites:o}),!Q&&!H&&W===`form`&&(0,Y.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,Y.jsx)(`p`,{className:`text-sm text-[var(--oh-muted)]`,children:e.description}),e.setup.form.note&&(0,Y.jsx)(`p`,{className:`text-sm text-[var(--oh-muted)]`,children:e.setup.form.note}),Object.entries(I).map(([e,t])=>(0,Y.jsx)(me,{name:e,field:t,value:C[e]??``,error:Ce(e),options:te(e,t,L),repository:T[e]??null,disabled:M,onChange:t=>de(e,t),onRepositoryChange:t=>E(n=>({...n,[e]:t})),onBlur:q},e))]}),!Q&&!H&&W===`review`&&(0,Y.jsx)(ve,{setup:e.setup,values:C}),A.formErrors.map(e=>(0,Y.jsx)(`p`,{role:`alert`,"data-testid":`setup-form-error`,className:`pt-4 text-sm text-red-400`,children:e},e))]}),(0,Y.jsxs)(`footer`,{className:`flex flex-shrink-0 justify-end gap-2 px-6 pb-6 pt-4`,children:[W===`review`&&(0,Y.jsx)(D,{testId:`setup-back-button`,type:`button`,variant:`secondary`,isDisabled:M,onClick:()=>S(`form`),children:n(f.BUTTON$BACK)}),H?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(D,{type:`button`,variant:`secondary`,isDisabled:M,onClick:t,children:n(f.BUTTON$CLOSE)}),ge&&(0,Y.jsx)(D,{testId:`setup-fallback-conversation`,type:`button`,variant:`primary`,isDisabled:M,onClick:Z,children:n(f.SETUP$FALLBACK_CONVERSATION)})]}):(0,Y.jsx)(D,{testId:`setup-continue-button`,type:`button`,variant:`primary`,isDisabled:Q||M||W===`prerequisites`&&o.isBlocked,onClick:W===`review`?he:J,children:n(W===`review`?f.SETUP$CONFIRM:f.BUTTON$CONTINUE)})]})]})})}function we(e,t){switch(e.code){case`required`:return t(f.SETUP$VALIDATION_REQUIRED);case`minLength`:return t(f.SETUP$VALIDATION_MIN_LENGTH,{length:e.length});case`maxLength`:return t(f.SETUP$VALIDATION_MAX_LENGTH,{length:e.length});case`invalidOption`:return t(f.SETUP$VALIDATION_INVALID_OPTION);case`unsafeExpressionLiteral`:return t(f.SETUP$VALIDATION_UNSAFE_VALUE);default:return e}}var Q=({params:e})=>{let t=h.findById(e.automationId??``);if(!t)throw new Response(null,{status:404,statusText:`Not Found`});return{automationId:t.id}},$=o(function(){let{automationId:e}=i(),t=r(),n=a(),o=h.findById(e);return o?(0,Y.jsx)(Ce,{entry:o,onClose:()=>{t.key==="default"?n(ne(),{replace:!0}):n(-1)}}):null});export{Q as clientLoader,$ as default};