@openhands/agent-canvas 1.1.0 → 1.2.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 (1373) hide show
  1. package/README.md +1 -1
  2. package/README.windows.md +2 -2
  3. package/build/assets/Trans-De9RwQhA.js +1 -0
  4. package/build/assets/__vite-browser-external-4xJsU2-u.js +1 -0
  5. package/build/assets/{acp-providers-B_ZxlEbx.js → acp-providers-D_D8VUpP.js} +1 -1
  6. package/build/assets/active-backend-context-DRFevVIj.js +1 -0
  7. package/build/assets/add-backend-modal-DzuB9zlG.js +1 -0
  8. package/build/assets/agent-profiles-settings-BfAwTshW.js +1 -0
  9. package/build/assets/{agent-server-client-options-CxnCYyIW.js → agent-server-client-options-DVLRd9sw.js} +1 -1
  10. package/build/assets/agent-server-conversation-service.api-DfH2k6Sx.js +5 -0
  11. package/build/assets/agent-settings-CMMms-0q.js +1 -0
  12. package/build/assets/agent-settings-DjVlKgaP.js +2 -0
  13. package/build/assets/alert-banner-BW0wRYw6.js +1 -0
  14. package/build/assets/api-key-entry-screen-O8gS-fnF.js +1 -0
  15. package/build/assets/app-settings-SlZvaXlk.js +1 -0
  16. package/build/assets/automation-detail-CwsNJ9AM.js +2 -0
  17. package/build/assets/automations-list-B9cPtugh.js +1 -0
  18. package/build/assets/back-nav-button-BYmxFxGt.js +1 -0
  19. package/build/assets/backend-form-modal-D2EDGVAc.js +1 -0
  20. package/build/assets/backend-synced-settings-badge-6OCwIuLY.js +1 -0
  21. package/build/assets/base-modal-CC5Pp8CF.js +1 -0
  22. package/build/assets/bot-D7eUAuSB.js +1 -0
  23. package/build/assets/brand-button-DKPMEKcW.js +1 -0
  24. package/build/assets/{browser-CCwPzPsD.js → browser-B39N74jU.js} +2 -2
  25. package/build/assets/browser-store-BI6uklCG.js +1 -0
  26. package/build/assets/browser-tab-aiDg7aEn.js +1 -0
  27. package/build/assets/chat-send-button-DxuZIoW8.js +1 -0
  28. package/build/assets/check-Bvi71siz.js +1 -0
  29. package/build/assets/checkmark-h7udgXMM.js +1 -0
  30. package/build/assets/{chevron-down-BxZEAIv4.js → chevron-down-CI8A6tet.js} +1 -1
  31. package/build/assets/circle-plus-check-toggle-T3eAIuPQ.js +1 -0
  32. package/build/assets/close-p3Op5lxI.js +1 -0
  33. package/build/assets/code-tag-DYlAhEQY.js +1 -0
  34. package/build/assets/{color-themes-CTNRQd1a.js → color-themes-Dd1sO5U6.js} +1 -1
  35. package/build/assets/combobox-caret-CLGvOs32.js +1 -0
  36. package/build/assets/command-menu-DKrLCRla.js +1 -0
  37. package/build/assets/{command-store-C-57Heey.js → command-store-D8J5LMW1.js} +1 -1
  38. package/build/assets/condenser-settings-BhxvlfoY.js +1 -0
  39. package/build/assets/confirmation-modal-BK1F0A68.js +1 -0
  40. package/build/assets/context-menu-list-item-DBFzplWW.js +1 -0
  41. package/build/assets/conversation-B8prFAZF.js +19 -0
  42. package/build/assets/conversation-DGVDwGn8.js +1 -0
  43. package/build/assets/conversation-local-storage-F6zVMM--.js +1 -0
  44. package/build/assets/conversation-panel-C7DC4Cxx.js +1 -0
  45. package/build/assets/conversation-service.api-Ch9kR9aE.js +1 -0
  46. package/build/assets/conversation-state-store-B2Bp32XI.js +1 -0
  47. package/build/assets/conversation-store-LptbOvKa.js +1 -0
  48. package/build/assets/conversation-tab-empty-state-m8IUkfMj.js +1 -0
  49. package/build/assets/copy-3JCw_XFB.js +1 -0
  50. package/build/assets/copy-BLmGeJcd.js +1 -0
  51. package/build/assets/copy-to-clipboard-button-Aj9wFmt2.js +1 -0
  52. package/build/assets/createLucideIcon-CVAsW2Yo.js +1 -0
  53. package/build/assets/declaration-B9kpCaYl.js +1 -0
  54. package/build/assets/device-verify-B5YCrvSu.js +1 -0
  55. package/build/assets/dist-CodhvuAP.js +1 -0
  56. package/build/assets/dropdown-classes-CgQ45JmQ.js +1 -0
  57. package/build/assets/edit-automation-modal-BoibW8cd.js +1 -0
  58. package/build/assets/ellipsis-button-1BV9Sga8.js +1 -0
  59. package/build/assets/entry.client-BgWj9jL_.js +2 -0
  60. package/build/assets/enum-filter-dropdown-DCITiYVi.js +1 -0
  61. package/build/assets/environment-switch-overlay-DUnKILNH.js +1 -0
  62. package/build/assets/extensions-hub-MtC8lK3A.js +1 -0
  63. package/build/assets/{extensions-navigation-DfLHdTUC.js → extensions-navigation-BtV14oQL.js} +1 -1
  64. package/build/assets/{external-link-D8njjDTk.js → external-link-D2zJjE9G.js} +1 -1
  65. package/build/assets/files-tab-DHqtsKLy.js +1 -0
  66. package/build/assets/files-tab-store-DJsPxYdg.js +1 -0
  67. package/build/assets/folder-mMWFvaw0.js +1 -0
  68. package/build/assets/form-control-classes-9rkU4usZ.js +1 -0
  69. package/build/assets/get-language-from-path-CPNnuVhI.js +1 -0
  70. package/build/assets/git-provider-icon-CGU7_KiU.js +1 -0
  71. package/build/assets/home-BgjWP_UN.js +1 -0
  72. package/build/assets/iconBase-DaTRRUjy.js +1 -0
  73. package/build/assets/index-redirect-CUUJiNki.js +1 -0
  74. package/build/assets/install-server-modal-J_eQ6lhG.js +1 -0
  75. package/build/assets/launch-DamfAY5L.js +1 -0
  76. package/build/assets/lesson-plan-HD886V64.js +4 -0
  77. package/build/assets/link-external-DfKQroKX.js +1 -0
  78. package/build/assets/{list-todo-B_Ts2JmZ.js → list-todo-BfH6yYUK.js} +1 -1
  79. package/build/assets/llm-not-configured-banner-DTrLsVr_.js +27 -0
  80. package/build/assets/llm-settings-BgSFkbHC.js +1 -0
  81. package/build/assets/llm-settings-Bkc8C5Bi.js +1 -0
  82. package/build/assets/{llm-subscription-service-BX_AtNlO.js → llm-subscription-service-CKyaV24y.js} +1 -1
  83. package/build/assets/loader-circle-BEykUKYG.js +1 -0
  84. package/build/assets/loading-spinner-DHAIPZkP.js +1 -0
  85. package/build/assets/manage-backends-modal-BUzj5_Lq.js +1 -0
  86. package/build/assets/manifest-4d6a1552.js +1 -0
  87. package/build/assets/{markdown-renderer-DWy7Np7u.js → markdown-renderer-D8mayGjI.js} +1 -1
  88. package/build/assets/mcp-DvqJYDbz.js +9 -0
  89. package/build/assets/messages-C4KEFkPk.js +40 -0
  90. package/build/assets/middleware-DYHYNAnP.js +6 -0
  91. package/build/assets/modal-backdrop-zVwfOJZr.js +1 -0
  92. package/build/assets/modal-body-Dcu5McCa.js +1 -0
  93. package/build/assets/{modal-classes-C4kS6ib_.js → modal-classes-DPqxSyuP.js} +1 -1
  94. package/build/assets/modal-close-button-CTCX4nCH.js +1 -0
  95. package/build/assets/model-selector-VDHBytb6.js +1 -0
  96. package/build/assets/{mouse-pointer-click-CXAx4FyM.js → mouse-pointer-click-PdEQPL6v.js} +1 -1
  97. package/build/assets/navigation-context-DPs2G0X8.js +1 -0
  98. package/build/assets/navigation-link-D8hfwvxI.js +1 -0
  99. package/build/assets/onboarding-gGIqoxvA.js +1 -0
  100. package/build/assets/onboarding-modal-CGHPoMp7.js +1 -0
  101. package/build/assets/openhands-logo-bcNw5bkY.js +1 -0
  102. package/build/assets/option-service.api-Dz7Eomnx.js +1 -0
  103. package/build/assets/organization-service.api-CnynNoT-.js +1 -0
  104. package/build/assets/path-utils-CBaRYg35.js +1 -0
  105. package/build/assets/{pencil-CsL0ns9y.js → pencil-Dj2XjKmI.js} +1 -1
  106. package/build/assets/plan-components-j9X4AxYM.js +1 -0
  107. package/build/assets/planner-tab-G4j36bJk.js +1 -0
  108. package/build/assets/plugins-management-service-BAp70KN7.js +1 -0
  109. package/build/assets/profiles-service.api-CeYEmSM3.js +1 -0
  110. package/build/assets/providers-CPoq0VXm.js +1 -0
  111. package/build/assets/{proxy-TeteRRW5.js → proxy-CHmFkV16.js} +1 -1
  112. package/build/assets/react-DPDgL6du.js +1 -0
  113. package/build/assets/recommended-automations-launcher-CXaEK1rW.js +50 -0
  114. package/build/assets/{refresh-cw-GkGYXsU-.js → refresh-cw-DM82EIyx.js} +1 -1
  115. package/build/assets/root-CxWZUXTQ.css +1 -0
  116. package/build/assets/root-S6CfVoNm.js +2 -0
  117. package/build/assets/root-layout-CvxdHJ6j.js +2 -0
  118. package/build/assets/runtime-waiting-state-DkzLgvMn.js +1 -0
  119. package/build/assets/schema-field-DwUzlw6b.js +1 -0
  120. package/build/assets/sdk-section-page-BUXONTx6.js +1 -0
  121. package/build/assets/sdk-settings-schema-BjBkMHzZ.js +1 -0
  122. package/build/assets/search-4DHskuhE.js +1 -0
  123. package/build/assets/search-BsjCEFNf.js +1 -0
  124. package/build/assets/secrets-service-CZYjNxFw.js +1 -0
  125. package/build/assets/secrets-settings-ZxyfRBgx.js +1 -0
  126. package/build/assets/segmented-toggle-Cen5AMUc.js +1 -0
  127. package/build/assets/settings-Bx6vn-g8.js +1 -0
  128. package/build/assets/settings-dropdown-input-xzoZwgUe.js +1 -0
  129. package/build/assets/settings-gear-MXCyZW0x.js +1 -0
  130. package/build/assets/settings-index-D4SM26d5.js +1 -0
  131. package/build/assets/settings-input-DYs7t3oK.js +1 -0
  132. package/build/assets/settings-list-classes-DvQr5jVS.js +1 -0
  133. package/build/assets/{settings-CN_HaPjH.js → settings-mQUckT0g.js} +1 -1
  134. package/build/assets/settings-modal-BoC8oMlg.js +1 -0
  135. package/build/assets/settings-section-header-context-COMOIaxV.js +1 -0
  136. package/build/assets/settings-service.api-DldkFI1x.js +1 -0
  137. package/build/assets/settings-switch-C2N2xqEb.js +1 -0
  138. package/build/assets/{settings-utils-9-_6iVIn.js → settings-utils-BMdG65By.js} +1 -1
  139. package/build/assets/shared-conversation-DMiaQFsj.js +1 -0
  140. package/build/assets/sidebar-layout-BtpUSN3j.js +1 -0
  141. package/build/assets/sidebar-mobile-menu-toggle-CaV3tQFF.js +1 -0
  142. package/build/assets/sidebar-nav-link-CIB3NBRW.js +1 -0
  143. package/build/assets/sidebar-store-CZuE8AH5.js +1 -0
  144. package/build/assets/skill-card-pill-row-D2bUe2kB.js +1 -0
  145. package/build/assets/skills-9cDZONKh.js +1 -0
  146. package/build/assets/skills-plugins-D2WkrXkr.js +1 -0
  147. package/build/assets/skills-settings-CZGVOp_t.js +2 -0
  148. package/build/assets/{square-chevron-right-Cfi-SUY0.js → square-chevron-right-Czw3FFWc.js} +1 -1
  149. package/build/assets/styled-tooltip-DsKsFjuq.js +1 -0
  150. package/build/assets/suspense-X5dBsJzn.js +1 -0
  151. package/build/assets/switch-skeleton-DqQwalyu.js +1 -0
  152. package/build/assets/task-list-tab-BAThr9Ex.js +1 -0
  153. package/build/assets/{terminal-HakoMrQX.js → terminal-B0aL_iDZ.js} +2 -2
  154. package/build/assets/terminal-BuLtIrb9.js +1 -0
  155. package/build/assets/toggle-switch-DBlOOzBr.js +1 -0
  156. package/build/assets/{trash-2-Bq4hqiRH.js → trash-2-Be_7y3Mn.js} +1 -1
  157. package/build/assets/typography-YGPBGzOG.js +1 -0
  158. package/build/assets/u-check-circle-BqoIxNz_.js +1 -0
  159. package/build/assets/u-check-circle-half-LiwZkuFe.js +1 -0
  160. package/build/assets/u-edit-DJ90xc8Z.js +1 -0
  161. package/build/assets/use-acp-credential-form-rzaqkJ1n.js +1 -0
  162. package/build/assets/use-activate-agent-profile-DY0txItX.js +1 -0
  163. package/build/assets/use-active-agent-profile-Cp5AFONR.js +1 -0
  164. package/build/assets/use-active-conversation-DvcFBqFe.js +1 -0
  165. package/build/assets/use-agent-profiles-DnH16_Vm.js +1 -0
  166. package/build/assets/use-agent-state-BvRcEzY4.js +1 -0
  167. package/build/assets/use-backends-health-e-Ull4wz.js +1 -0
  168. package/build/assets/use-breakpoint-B-O0lQ84.js +1 -0
  169. package/build/assets/use-can-manage-org-profiles-OIhplvQ0.js +1 -0
  170. package/build/assets/use-click-outside-element-Bf4Omzot.js +1 -0
  171. package/build/assets/use-cloud-current-user-id-ekU7UXDT.js +1 -0
  172. package/build/assets/use-config-Dwf5gla-.js +1 -0
  173. package/build/assets/use-create-conversation-CvAXfA3T.js +1 -0
  174. package/build/assets/use-create-secret-BKeXCo__.js +1 -0
  175. package/build/assets/use-event-store-YSOxy9FC.js +4 -0
  176. package/build/assets/use-handle-plan-click-cAXS-Hft.js +1 -0
  177. package/build/assets/use-is-authed-_dhQ2Xuj.js +1 -0
  178. package/build/assets/use-launch-skill-in-chat-BnoDgvAy.js +1 -0
  179. package/build/assets/use-llm-profiles-BcLibtGb.js +1 -0
  180. package/build/assets/use-onboarding-completion-C_Swglzp.js +1 -0
  181. package/build/assets/use-plugins-marketplace-BGb-KgfD.js +1 -0
  182. package/build/assets/use-runtime-is-ready-CBFe69Ew.js +1 -0
  183. package/build/assets/use-save-agent-profile-DFjxHhNx.js +1 -0
  184. package/build/assets/{use-save-settings-DErJDIDL.js → use-save-settings-5xPYpSQM.js} +1 -1
  185. package/build/assets/use-settings-B07msZ2Z.js +1 -0
  186. package/build/assets/use-settings-nav-items-CswsOEyw.js +16 -0
  187. package/build/assets/use-skills-Aoaoq_ei.js +1 -0
  188. package/build/assets/use-task-list-CmWGElgb.js +1 -0
  189. package/build/assets/use-tracking-CqODdfO4.js +1 -0
  190. package/build/assets/use-user-conversation-BPHQ-dm-.js +1 -0
  191. package/build/assets/useMutation-DCE9RcgK.js +1 -0
  192. package/build/assets/useMutationState-BUab8Kxr.js +1 -0
  193. package/build/assets/useQueries-CRzaAqzH.js +1 -0
  194. package/build/assets/useQuery-CpjHYtZc.js +1 -0
  195. package/build/assets/useTranslation-Cgy4JA_g.js +1 -0
  196. package/build/assets/utils-CE0lDWtb.js +1 -0
  197. package/build/assets/vendor-styling-CI0PQ3ab.js +22 -0
  198. package/build/assets/{vendor~browser-BQU4C3CQ.js → vendor~browser-Cvg7jXCP.js} +1 -1
  199. package/build/assets/{vendor~browser-tab-Cim6xN2k.js → vendor~browser-tab-Di0kh5Zw.js} +1 -1
  200. package/build/assets/vendor~conversation-panel~conversation~alert-banner-DHDkknt5.js +1 -0
  201. package/build/assets/vendor~entry.client-9tWQ_Ugw.js +1 -0
  202. package/build/assets/{vendor~entry.client-lAMyAlBD.js → vendor~entry.client-D6BtSOtn.js} +1 -1
  203. package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~d1e18dtv-5Q6lQJdE.js +177 -0
  204. package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~i3v2mlbw-BrJQ3XZH.js +1 -0
  205. package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~ncdxw0bh-ClHnt5lR.js +10 -0
  206. package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~t35o0b0f-Bss49YXv.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~k6tszsdc-Bb-xMtbv.js} +1 -1
  207. package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~nn5zty47-Zl0G1QCy.js +1 -0
  208. package/build/assets/{vendor~entry.client~root~root-layout~index-redirect~home~conversation-panel~conversation~la~fpbtwbmk-DDSPtjxR.js → vendor~entry.client~root~root-layout~index-redirect~home~conversation-panel~conversation~la~byh8a1g4-XNPdpuO8.js} +1 -1
  209. package/build/assets/{vendor~files-tab-BvQLon-P.js → vendor~files-tab-B02k3xvx.js} +1 -1
  210. package/build/assets/{vendor~home~conversation-panel~conversation-DBPRU26Z.js → vendor~home~conversation-panel~conversation-CYMF9JYB.js} +1 -1
  211. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DnEBAp2W.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-9UMeuPV6.js} +1 -1
  212. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CzI-A-Gz.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BD0GaRGa.js} +1 -1
  213. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-ByET2Quf.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CqXiHwjU.js} +1 -1
  214. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DCYBrned.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-D7EUmQ8Y.js} +1 -1
  215. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DnctfFZL.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DTzw2x50.js} +1 -1
  216. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-pSG7lnvH.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-d8aETPbZ.js} +1 -1
  217. package/build/assets/{vendor~launch-DqoOsAhA.js → vendor~launch-CHXA9cJu.js} +1 -1
  218. package/build/assets/vendor~root-layout~conversation-panel~conversation-CpiTHpHl.js +1 -0
  219. package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-BJl81v7J.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-_TdZcNMD.js} +1 -1
  220. package/build/assets/vendor~root-layout~home~conversation-panel~conversation-Cn2jwSga.js +1 -0
  221. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~enjl5xdm-mMKDm94D.js +48 -0
  222. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~skills-settings~automations-~ki5qnp0d-DRld6s9c.js → vendor~root-layout~home~conversation-panel~conversation~launch~skills-settings~automations-~ki5qnp0d-DJHl5b-B.js} +236 -17
  223. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-9d2kA26V.js → vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-CZM4hwUT.js} +1 -1
  224. package/build/assets/vendor~root-layout~home~mcp~automations-list~onboarding-modal-L2sdihTY.js +1 -0
  225. package/build/assets/verification-settings-DZQ-JvKH.js +1 -0
  226. package/build/assets/x-Cb0WAtak.js +1 -0
  227. package/build/assets/x-mark-Batp6gXa.js +1 -0
  228. package/build/index.html +4 -4
  229. package/build/locales/ar/openhands.json +138 -1
  230. package/build/locales/ca/openhands.json +138 -1
  231. package/build/locales/de/openhands.json +138 -1
  232. package/build/locales/en/openhands.json +138 -1
  233. package/build/locales/es/openhands.json +138 -1
  234. package/build/locales/fr/openhands.json +138 -1
  235. package/build/locales/it/openhands.json +138 -1
  236. package/build/locales/ja/openhands.json +138 -1
  237. package/build/locales/ko-KR/openhands.json +138 -1
  238. package/build/locales/no/openhands.json +138 -1
  239. package/build/locales/pt/openhands.json +138 -1
  240. package/build/locales/tr/openhands.json +138 -1
  241. package/build/locales/uk/openhands.json +138 -1
  242. package/build/locales/zh-CN/openhands.json +138 -1
  243. package/build/locales/zh-TW/openhands.json +138 -1
  244. package/config/defaults.json +7 -9
  245. package/dist/_virtual/__vite-browser-external.cjs +2 -0
  246. package/dist/_virtual/__vite-browser-external.cjs.map +1 -0
  247. package/dist/_virtual/__vite-browser-external.js +9 -0
  248. package/dist/_virtual/__vite-browser-external.js.map +1 -0
  249. package/dist/api/agent-profiles-service/agent-profiles-service.api.cjs +2 -0
  250. package/dist/api/agent-profiles-service/agent-profiles-service.api.cjs.map +1 -0
  251. package/dist/api/agent-profiles-service/agent-profiles-service.api.d.ts +22 -0
  252. package/dist/api/agent-profiles-service/agent-profiles-service.api.js +35 -0
  253. package/dist/api/agent-profiles-service/agent-profiles-service.api.js.map +1 -0
  254. package/dist/api/agent-server-adapter.cjs +2 -2
  255. package/dist/api/agent-server-adapter.cjs.map +1 -1
  256. package/dist/api/agent-server-adapter.d.ts +11 -1
  257. package/dist/api/agent-server-adapter.js +60 -60
  258. package/dist/api/agent-server-adapter.js.map +1 -1
  259. package/dist/api/agent-server-compatibility.cjs +1 -1
  260. package/dist/api/agent-server-compatibility.cjs.map +1 -1
  261. package/dist/api/agent-server-compatibility.js +1 -0
  262. package/dist/api/agent-server-compatibility.js.map +1 -1
  263. package/dist/api/agent-server-home.cjs +1 -1
  264. package/dist/api/agent-server-home.cjs.map +1 -1
  265. package/dist/api/agent-server-home.js +1 -0
  266. package/dist/api/agent-server-home.js.map +1 -1
  267. package/dist/api/cloud/agent-profiles-service.api.cjs +2 -0
  268. package/dist/api/cloud/agent-profiles-service.api.cjs.map +1 -0
  269. package/dist/api/cloud/agent-profiles-service.api.d.ts +7 -0
  270. package/dist/api/cloud/agent-profiles-service.api.js +58 -0
  271. package/dist/api/cloud/agent-profiles-service.api.js.map +1 -0
  272. package/dist/api/cloud/organization-service.api.cjs +1 -1
  273. package/dist/api/cloud/organization-service.api.cjs.map +1 -1
  274. package/dist/api/cloud/organization-service.api.d.ts +8 -0
  275. package/dist/api/cloud/organization-service.api.js +3 -1
  276. package/dist/api/cloud/organization-service.api.js.map +1 -1
  277. package/dist/api/cloud/profiles-service.api.cjs +2 -0
  278. package/dist/api/cloud/profiles-service.api.cjs.map +1 -0
  279. package/dist/api/cloud/profiles-service.api.d.ts +7 -0
  280. package/dist/api/cloud/profiles-service.api.js +75 -0
  281. package/dist/api/cloud/profiles-service.api.js.map +1 -0
  282. package/dist/api/cloud/settings-service.api.cjs +1 -1
  283. package/dist/api/cloud/settings-service.api.cjs.map +1 -1
  284. package/dist/api/cloud/settings-service.api.js +1 -1
  285. package/dist/api/cloud/settings-service.api.js.map +1 -1
  286. package/dist/api/config-service/config-service.api.cjs +1 -1
  287. package/dist/api/config-service/config-service.api.cjs.map +1 -1
  288. package/dist/api/config-service/config-service.api.js +1 -0
  289. package/dist/api/config-service/config-service.api.js.map +1 -1
  290. package/dist/api/conversation-metadata-store.cjs.map +1 -1
  291. package/dist/api/conversation-metadata-store.d.ts +11 -0
  292. package/dist/api/conversation-metadata-store.js.map +1 -1
  293. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
  294. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
  295. package/dist/api/conversation-service/agent-server-conversation-service.api.d.ts +20 -1
  296. package/dist/api/conversation-service/agent-server-conversation-service.api.js +134 -105
  297. package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
  298. package/dist/api/conversation-service/agent-server-conversation-service.types.d.ts +2 -0
  299. package/dist/api/conversation-service/conversation-service.api.cjs +1 -1
  300. package/dist/api/conversation-service/conversation-service.api.cjs.map +1 -1
  301. package/dist/api/conversation-service/conversation-service.api.d.ts +1 -0
  302. package/dist/api/conversation-service/conversation-service.api.js +4 -0
  303. package/dist/api/conversation-service/conversation-service.api.js.map +1 -1
  304. package/dist/api/device-flow-client.cjs +1 -1
  305. package/dist/api/device-flow-client.cjs.map +1 -1
  306. package/dist/api/device-flow-client.js +33 -25
  307. package/dist/api/device-flow-client.js.map +1 -1
  308. package/dist/api/event-service/event-service.api.cjs +1 -1
  309. package/dist/api/event-service/event-service.api.cjs.map +1 -1
  310. package/dist/api/event-service/event-service.api.js +1 -0
  311. package/dist/api/event-service/event-service.api.js.map +1 -1
  312. package/dist/api/mcp-service/mcp-redacted-credentials.cjs +1 -1
  313. package/dist/api/mcp-service/mcp-redacted-credentials.cjs.map +1 -1
  314. package/dist/api/mcp-service/mcp-redacted-credentials.d.ts +3 -3
  315. package/dist/api/mcp-service/mcp-redacted-credentials.js +29 -30
  316. package/dist/api/mcp-service/mcp-redacted-credentials.js.map +1 -1
  317. package/dist/api/mcp-service/mcp-service.api.cjs +1 -1
  318. package/dist/api/mcp-service/mcp-service.api.cjs.map +1 -1
  319. package/dist/api/mcp-service/mcp-service.api.d.ts +8 -1
  320. package/dist/api/mcp-service/mcp-service.api.js +129 -23
  321. package/dist/api/mcp-service/mcp-service.api.js.map +1 -1
  322. package/dist/api/option-service/option-service.api.cjs +1 -1
  323. package/dist/api/option-service/option-service.api.cjs.map +1 -1
  324. package/dist/api/option-service/option-service.api.js +1 -0
  325. package/dist/api/option-service/option-service.api.js.map +1 -1
  326. package/dist/api/plugins-management-service.cjs +2 -0
  327. package/dist/api/plugins-management-service.cjs.map +1 -0
  328. package/dist/api/plugins-management-service.d.ts +50 -0
  329. package/dist/api/plugins-management-service.js +41 -0
  330. package/dist/api/plugins-management-service.js.map +1 -0
  331. package/dist/api/plugins-service.d.ts +49 -0
  332. package/dist/api/profiles-service/profiles-service.api.cjs +1 -1
  333. package/dist/api/profiles-service/profiles-service.api.cjs.map +1 -1
  334. package/dist/api/profiles-service/profiles-service.api.js +21 -14
  335. package/dist/api/profiles-service/profiles-service.api.js.map +1 -1
  336. package/dist/api/runtime-service/agent-server-runtime-service.cjs +1 -1
  337. package/dist/api/runtime-service/agent-server-runtime-service.cjs.map +1 -1
  338. package/dist/api/runtime-service/agent-server-runtime-service.js +1 -0
  339. package/dist/api/runtime-service/agent-server-runtime-service.js.map +1 -1
  340. package/dist/api/secrets-service.cjs +1 -1
  341. package/dist/api/secrets-service.cjs.map +1 -1
  342. package/dist/api/secrets-service.js +1 -0
  343. package/dist/api/secrets-service.js.map +1 -1
  344. package/dist/api/settings-service/settings-service.api.cjs +1 -1
  345. package/dist/api/settings-service/settings-service.api.cjs.map +1 -1
  346. package/dist/api/settings-service/settings-service.api.js +92 -50
  347. package/dist/api/settings-service/settings-service.api.js.map +1 -1
  348. package/dist/api/skills-service.cjs +1 -1
  349. package/dist/api/skills-service.cjs.map +1 -1
  350. package/dist/api/skills-service.js +1 -0
  351. package/dist/api/skills-service.js.map +1 -1
  352. package/dist/api/workspaces-service/workspaces-service.api.cjs +1 -1
  353. package/dist/api/workspaces-service/workspaces-service.api.cjs.map +1 -1
  354. package/dist/api/workspaces-service/workspaces-service.api.js +1 -0
  355. package/dist/api/workspaces-service/workspaces-service.api.js.map +1 -1
  356. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs +1 -1
  357. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs.map +1 -1
  358. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js +57 -38
  359. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js.map +1 -1
  360. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs +2 -1
  361. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs.map +1 -1
  362. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js +13 -9
  363. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js.map +1 -1
  364. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.cjs +1 -1
  365. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.cjs.map +1 -1
  366. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.js +65 -26
  367. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.js.map +1 -1
  368. package/dist/components/conversation-events/chat/event-message.cjs +2 -2
  369. package/dist/components/conversation-events/chat/event-message.cjs.map +1 -1
  370. package/dist/components/conversation-events/chat/event-message.js +78 -76
  371. package/dist/components/conversation-events/chat/event-message.js.map +1 -1
  372. package/dist/components/features/analytics/telemetry-consent-banner.cjs +1 -1
  373. package/dist/components/features/analytics/telemetry-consent-banner.cjs.map +1 -1
  374. package/dist/components/features/analytics/telemetry-consent-banner.js +1 -0
  375. package/dist/components/features/analytics/telemetry-consent-banner.js.map +1 -1
  376. package/dist/components/features/automations/detail/activity-log-item.d.ts +3 -2
  377. package/dist/components/features/automations/detail/activity-log-section.d.ts +3 -2
  378. package/dist/components/features/automations/detail/debug-automation-button.d.ts +17 -0
  379. package/dist/components/features/automations/detail/run-logs-modal.d.ts +6 -1
  380. package/dist/components/features/backends/backend-form-modal.cjs +1 -1
  381. package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
  382. package/dist/components/features/backends/backend-form-modal.d.ts +6 -2
  383. package/dist/components/features/backends/backend-form-modal.js +198 -161
  384. package/dist/components/features/backends/backend-form-modal.js.map +1 -1
  385. package/dist/components/features/backends/backend-row.cjs +1 -1
  386. package/dist/components/features/backends/backend-row.cjs.map +1 -1
  387. package/dist/components/features/backends/backend-row.d.ts +2 -1
  388. package/dist/components/features/backends/backend-row.js +60 -54
  389. package/dist/components/features/backends/backend-row.js.map +1 -1
  390. package/dist/components/features/backends/backend-selector.cjs +1 -1
  391. package/dist/components/features/backends/backend-selector.cjs.map +1 -1
  392. package/dist/components/features/backends/backend-selector.js +4 -4
  393. package/dist/components/features/backends/backend-version.cjs +1 -1
  394. package/dist/components/features/backends/backend-version.cjs.map +1 -1
  395. package/dist/components/features/backends/backend-version.js +1 -0
  396. package/dist/components/features/backends/backend-version.js.map +1 -1
  397. package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
  398. package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
  399. package/dist/components/features/backends/manage-backends-modal.js +72 -61
  400. package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
  401. package/dist/components/features/chat/change-agent-button.cjs +1 -1
  402. package/dist/components/features/chat/change-agent-button.js +9 -9
  403. package/dist/components/features/chat/chat-add-file-button.cjs +1 -1
  404. package/dist/components/features/chat/chat-add-file-button.cjs.map +1 -1
  405. package/dist/components/features/chat/chat-add-file-button.js +38 -34
  406. package/dist/components/features/chat/chat-add-file-button.js.map +1 -1
  407. package/dist/components/features/chat/chat-interface.cjs +2 -2
  408. package/dist/components/features/chat/chat-interface.cjs.map +1 -1
  409. package/dist/components/features/chat/chat-interface.js +136 -129
  410. package/dist/components/features/chat/chat-interface.js.map +1 -1
  411. package/dist/components/features/chat/components/chat-input-actions.cjs +1 -1
  412. package/dist/components/features/chat/components/chat-input-actions.cjs.map +1 -1
  413. package/dist/components/features/chat/components/chat-input-actions.js +100 -87
  414. package/dist/components/features/chat/components/chat-input-actions.js.map +1 -1
  415. package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs +2 -0
  416. package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs.map +1 -0
  417. package/dist/components/features/chat/components/chat-input-llm-profile-picker.d.ts +15 -0
  418. package/dist/components/features/chat/components/chat-input-llm-profile-picker.js +118 -0
  419. package/dist/components/features/chat/components/chat-input-llm-profile-picker.js.map +1 -0
  420. package/dist/components/features/chat/components/chat-input-model.cjs +1 -1
  421. package/dist/components/features/chat/components/chat-input-model.js +17 -17
  422. package/dist/components/features/chat/components/chat-input-profile-picker.cjs +2 -0
  423. package/dist/components/features/chat/components/chat-input-profile-picker.cjs.map +1 -0
  424. package/dist/components/features/chat/components/chat-input-profile-picker.d.ts +9 -0
  425. package/dist/components/features/chat/components/chat-input-profile-picker.js +112 -0
  426. package/dist/components/features/chat/components/chat-input-profile-picker.js.map +1 -0
  427. package/dist/components/features/chat/components/resolve-picker-kind.cjs +2 -0
  428. package/dist/components/features/chat/components/resolve-picker-kind.cjs.map +1 -0
  429. package/dist/components/features/chat/components/resolve-picker-kind.d.ts +29 -0
  430. package/dist/components/features/chat/components/resolve-picker-kind.js +8 -0
  431. package/dist/components/features/chat/components/resolve-picker-kind.js.map +1 -0
  432. package/dist/components/features/chat/goal-status-banner.cjs +2 -0
  433. package/dist/components/features/chat/goal-status-banner.cjs.map +1 -0
  434. package/dist/components/features/chat/goal-status-banner.d.ts +11 -0
  435. package/dist/components/features/chat/goal-status-banner.js +12 -0
  436. package/dist/components/features/chat/goal-status-banner.js.map +1 -0
  437. package/dist/components/features/chat/goal-status-content.cjs +2 -0
  438. package/dist/components/features/chat/goal-status-content.cjs.map +1 -0
  439. package/dist/components/features/chat/goal-status-content.d.ts +21 -0
  440. package/dist/components/features/chat/goal-status-content.js +98 -0
  441. package/dist/components/features/chat/goal-status-content.js.map +1 -0
  442. package/dist/components/features/chat/interactive-chat-box.cjs +1 -1
  443. package/dist/components/features/chat/interactive-chat-box.cjs.map +1 -1
  444. package/dist/components/features/chat/interactive-chat-box.js +20 -19
  445. package/dist/components/features/chat/interactive-chat-box.js.map +1 -1
  446. package/dist/components/features/chat/tool-visualizers/primitives/code-block.cjs +1 -1
  447. package/dist/components/features/chat/tool-visualizers/primitives/code-block.cjs.map +1 -1
  448. package/dist/components/features/chat/tool-visualizers/primitives/code-block.d.ts +10 -3
  449. package/dist/components/features/chat/tool-visualizers/primitives/code-block.js +29 -16
  450. package/dist/components/features/chat/tool-visualizers/primitives/code-block.js.map +1 -1
  451. package/dist/components/features/chat/tool-visualizers/primitives/output-pane.cjs +1 -1
  452. package/dist/components/features/chat/tool-visualizers/primitives/output-pane.cjs.map +1 -1
  453. package/dist/components/features/chat/tool-visualizers/primitives/output-pane.d.ts +2 -2
  454. package/dist/components/features/chat/tool-visualizers/primitives/output-pane.js +16 -16
  455. package/dist/components/features/chat/tool-visualizers/primitives/output-pane.js.map +1 -1
  456. package/dist/components/features/chat/user-message-body.cjs +1 -1
  457. package/dist/components/features/chat/user-message-body.cjs.map +1 -1
  458. package/dist/components/features/chat/user-message-body.js +20 -20
  459. package/dist/components/features/chat/user-message-body.js.map +1 -1
  460. package/dist/components/features/command-menu/command-menu-items.d.ts +32 -0
  461. package/dist/components/features/command-menu/command-menu-trigger.cjs +2 -0
  462. package/dist/components/features/command-menu/command-menu-trigger.cjs.map +1 -0
  463. package/dist/components/features/command-menu/command-menu-trigger.d.ts +5 -0
  464. package/dist/components/features/command-menu/command-menu-trigger.js +53 -0
  465. package/dist/components/features/command-menu/command-menu-trigger.js.map +1 -0
  466. package/dist/components/features/command-menu/command-menu.d.ts +2 -0
  467. package/dist/components/features/command-menu/index.d.ts +2 -0
  468. package/dist/components/features/controls/tools-context-menu.cjs +1 -1
  469. package/dist/components/features/controls/tools-context-menu.cjs.map +1 -1
  470. package/dist/components/features/controls/tools-context-menu.d.ts +3 -1
  471. package/dist/components/features/controls/tools-context-menu.js +94 -77
  472. package/dist/components/features/controls/tools-context-menu.js.map +1 -1
  473. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.cjs +1 -1
  474. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.cjs.map +1 -1
  475. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.js +8 -5
  476. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.js.map +1 -1
  477. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs.map +1 -1
  478. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.d.ts +1 -1
  479. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js.map +1 -1
  480. package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
  481. package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
  482. package/dist/components/features/conversation-panel/conversation-panel.js +2 -1
  483. package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
  484. package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs +1 -1
  485. package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs.map +1 -1
  486. package/dist/components/features/conversation-panel/local-new-conversation-menu.js +4 -1
  487. package/dist/components/features/conversation-panel/local-new-conversation-menu.js.map +1 -1
  488. package/dist/components/features/conversation-panel/plugins-modal.cjs +2 -0
  489. package/dist/components/features/conversation-panel/plugins-modal.cjs.map +1 -0
  490. package/dist/components/features/conversation-panel/plugins-modal.d.ts +12 -0
  491. package/dist/components/features/conversation-panel/plugins-modal.js +62 -0
  492. package/dist/components/features/conversation-panel/plugins-modal.js.map +1 -0
  493. package/dist/components/features/home/git-repo-dropdown/git-repo-dropdown.cjs +1 -1
  494. package/dist/components/features/home/git-repo-dropdown/git-repo-dropdown.cjs.map +1 -1
  495. package/dist/components/features/home/git-repo-dropdown/git-repo-dropdown.js +4 -4
  496. package/dist/components/features/mcp-logo-badge.cjs +1 -1
  497. package/dist/components/features/mcp-logo-badge.cjs.map +1 -1
  498. package/dist/components/features/mcp-logo-badge.js +17 -15
  499. package/dist/components/features/mcp-logo-badge.js.map +1 -1
  500. package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
  501. package/dist/components/features/mcp-page/custom-server-editor.cjs.map +1 -1
  502. package/dist/components/features/mcp-page/custom-server-editor.js +102 -59
  503. package/dist/components/features/mcp-page/custom-server-editor.js.map +1 -1
  504. package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
  505. package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
  506. package/dist/components/features/mcp-page/install-server-modal.js +284 -169
  507. package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
  508. package/dist/components/features/mcp-page/installed-server-card.cjs +1 -1
  509. package/dist/components/features/mcp-page/installed-server-card.cjs.map +1 -1
  510. package/dist/components/features/mcp-page/installed-server-card.js +16 -18
  511. package/dist/components/features/mcp-page/installed-server-card.js.map +1 -1
  512. package/dist/components/features/onboarding/onboarding-host.d.ts +3 -13
  513. package/dist/components/features/plugins/add-plugin-modal.d.ts +6 -0
  514. package/dist/components/features/plugins/build-plugins-view-model.d.ts +39 -0
  515. package/dist/components/features/plugins/plugin-card.d.ts +13 -0
  516. package/dist/components/features/plugins/plugin-detail-modal.d.ts +13 -0
  517. package/dist/components/features/plugins/plugin-picker-card.d.ts +10 -0
  518. package/dist/components/features/plugins/plugin-picker-modal.d.ts +9 -0
  519. package/dist/components/features/plugins/plugin-picker-trigger.d.ts +9 -0
  520. package/dist/components/features/plugins/plugin-picker.d.ts +18 -0
  521. package/dist/components/features/plugins/plugin-spec-identity.d.ts +28 -0
  522. package/dist/components/features/plugins/plugins-toolbar.d.ts +9 -0
  523. package/dist/components/features/settings/agent-profiles/agent-profile-actions-menu.d.ts +16 -0
  524. package/dist/components/features/settings/agent-profiles/agent-profile-row.d.ts +13 -0
  525. package/dist/components/features/settings/agent-profiles/agent-profiles-body.d.ts +15 -0
  526. package/dist/components/features/settings/agent-profiles/agent-profiles-local-view.d.ts +7 -0
  527. package/dist/components/features/settings/agent-profiles/agent-profiles-manager.d.ts +7 -0
  528. package/dist/components/features/settings/agent-profiles/delete-agent-profile-modal.d.ts +7 -0
  529. package/dist/components/features/settings/agent-profiles/index.d.ts +6 -0
  530. package/dist/components/features/settings/agent-profiles/merge-agent-profile-save-input.d.ts +18 -0
  531. package/dist/components/features/settings/llm-profiles/llm-profiles-manager.cjs +1 -1
  532. package/dist/components/features/settings/llm-profiles/llm-profiles-manager.js +1 -0
  533. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
  534. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +1 -1
  535. package/dist/components/features/settings/llm-profiles/profile-row.d.ts +3 -1
  536. package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +3 -1
  537. package/dist/components/features/settings/llm-settings/openai-subscription-auth-card.cjs +1 -1
  538. package/dist/components/features/settings/llm-settings/openai-subscription-auth-card.cjs.map +1 -1
  539. package/dist/components/features/settings/llm-settings/openai-subscription-auth-card.js +3 -2
  540. package/dist/components/features/settings/llm-settings/openai-subscription-auth-card.js.map +1 -1
  541. package/dist/components/features/settings/mcp-settings/mcp-server-form.cjs +7 -7
  542. package/dist/components/features/settings/mcp-settings/mcp-server-form.cjs.map +1 -1
  543. package/dist/components/features/settings/mcp-settings/mcp-server-form.js +279 -130
  544. package/dist/components/features/settings/mcp-settings/mcp-server-form.js.map +1 -1
  545. package/dist/components/features/settings/mcp-settings/mcp-server-list-item.d.ts +1 -12
  546. package/dist/components/features/settings/mcp-settings/mcp-server-list.d.ts +1 -11
  547. package/dist/components/features/settings/settings-dropdown-input.cjs +1 -1
  548. package/dist/components/features/settings/settings-dropdown-input.js +6 -6
  549. package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
  550. package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
  551. package/dist/components/features/sidebar/sidebar-rail-body.d.ts +1 -2
  552. package/dist/components/features/sidebar/sidebar-rail-body.js +81 -82
  553. package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
  554. package/dist/components/features/sidebar/sidebar.cjs +1 -1
  555. package/dist/components/features/sidebar/sidebar.cjs.map +1 -1
  556. package/dist/components/features/sidebar/sidebar.js +45 -46
  557. package/dist/components/features/sidebar/sidebar.js.map +1 -1
  558. package/dist/components/features/skills/extensions-navigation.cjs +1 -1
  559. package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
  560. package/dist/components/features/skills/extensions-navigation.js +1 -2
  561. package/dist/components/features/skills/extensions-navigation.js.map +1 -1
  562. package/dist/components/shared/modals/modal-backdrop.cjs +1 -1
  563. package/dist/components/shared/modals/modal-backdrop.cjs.map +1 -1
  564. package/dist/components/shared/modals/modal-backdrop.d.ts +5 -1
  565. package/dist/components/shared/modals/modal-backdrop.js +3 -3
  566. package/dist/components/shared/modals/modal-backdrop.js.map +1 -1
  567. package/dist/components/shared/modals/settings/model-selector.cjs +1 -1
  568. package/dist/components/shared/modals/settings/model-selector.js +16 -16
  569. package/dist/config/defaults.cjs +1 -1
  570. package/dist/config/defaults.cjs.map +1 -1
  571. package/dist/config/defaults.js +7 -3
  572. package/dist/config/defaults.js.map +1 -1
  573. package/dist/contexts/conversation-websocket-context.cjs +3 -3
  574. package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
  575. package/dist/contexts/conversation-websocket-context.js +200 -197
  576. package/dist/contexts/conversation-websocket-context.js.map +1 -1
  577. package/dist/hooks/chat/use-goal-interceptor.cjs +2 -0
  578. package/dist/hooks/chat/use-goal-interceptor.cjs.map +1 -0
  579. package/dist/hooks/chat/use-goal-interceptor.d.ts +8 -0
  580. package/dist/hooks/chat/use-goal-interceptor.js +37 -0
  581. package/dist/hooks/chat/use-goal-interceptor.js.map +1 -0
  582. package/dist/hooks/chat/use-grip-resize.cjs +1 -1
  583. package/dist/hooks/chat/use-grip-resize.cjs.map +1 -1
  584. package/dist/hooks/chat/use-grip-resize.js +17 -16
  585. package/dist/hooks/chat/use-grip-resize.js.map +1 -1
  586. package/dist/hooks/chat/use-model-interceptor.cjs +1 -1
  587. package/dist/hooks/chat/use-model-interceptor.cjs.map +1 -1
  588. package/dist/hooks/chat/use-model-interceptor.d.ts +3 -3
  589. package/dist/hooks/chat/use-model-interceptor.js +8 -9
  590. package/dist/hooks/chat/use-model-interceptor.js.map +1 -1
  591. package/dist/hooks/chat/use-slash-command.cjs +1 -1
  592. package/dist/hooks/chat/use-slash-command.cjs.map +1 -1
  593. package/dist/hooks/chat/use-slash-command.js +4 -4
  594. package/dist/hooks/chat/use-slash-command.js.map +1 -1
  595. package/dist/hooks/mutation/conversation-mutation-utils.cjs +1 -1
  596. package/dist/hooks/mutation/conversation-mutation-utils.cjs.map +1 -1
  597. package/dist/hooks/mutation/conversation-mutation-utils.d.ts +17 -0
  598. package/dist/hooks/mutation/conversation-mutation-utils.js +23 -4
  599. package/dist/hooks/mutation/conversation-mutation-utils.js.map +1 -1
  600. package/dist/hooks/mutation/use-activate-agent-profile.cjs +2 -0
  601. package/dist/hooks/mutation/use-activate-agent-profile.cjs.map +1 -0
  602. package/dist/hooks/mutation/use-activate-agent-profile.d.ts +23 -0
  603. package/dist/hooks/mutation/use-activate-agent-profile.js +34 -0
  604. package/dist/hooks/mutation/use-activate-agent-profile.js.map +1 -0
  605. package/dist/hooks/mutation/use-activate-llm-profile.cjs +1 -1
  606. package/dist/hooks/mutation/use-activate-llm-profile.js +1 -1
  607. package/dist/hooks/mutation/use-add-mcp-server.cjs +1 -1
  608. package/dist/hooks/mutation/use-add-mcp-server.cjs.map +1 -1
  609. package/dist/hooks/mutation/use-add-mcp-server.d.ts +1 -12
  610. package/dist/hooks/mutation/use-add-mcp-server.js +10 -34
  611. package/dist/hooks/mutation/use-add-mcp-server.js.map +1 -1
  612. package/dist/hooks/mutation/use-apply-onboarding-agent-profile.d.ts +20 -0
  613. package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
  614. package/dist/hooks/mutation/use-create-conversation.cjs.map +1 -1
  615. package/dist/hooks/mutation/use-create-conversation.d.ts +2 -0
  616. package/dist/hooks/mutation/use-create-conversation.js +94 -25
  617. package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
  618. package/dist/hooks/mutation/use-delete-agent-profile.d.ts +1 -0
  619. package/dist/hooks/mutation/use-delete-llm-profile.cjs +1 -1
  620. package/dist/hooks/mutation/use-delete-llm-profile.js +1 -1
  621. package/dist/hooks/mutation/use-delete-mcp-server.cjs +1 -1
  622. package/dist/hooks/mutation/use-delete-mcp-server.js +4 -4
  623. package/dist/hooks/mutation/use-fork-conversation.cjs +2 -0
  624. package/dist/hooks/mutation/use-fork-conversation.cjs.map +1 -0
  625. package/dist/hooks/mutation/use-fork-conversation.d.ts +24 -0
  626. package/dist/hooks/mutation/use-fork-conversation.js +29 -0
  627. package/dist/hooks/mutation/use-fork-conversation.js.map +1 -0
  628. package/dist/hooks/mutation/use-install-plugin.d.ts +7 -0
  629. package/dist/hooks/mutation/use-new-conversation-command.cjs +1 -1
  630. package/dist/hooks/mutation/use-new-conversation-command.cjs.map +1 -1
  631. package/dist/hooks/mutation/use-new-conversation-command.d.ts +1 -0
  632. package/dist/hooks/mutation/use-new-conversation-command.js +20 -10
  633. package/dist/hooks/mutation/use-new-conversation-command.js.map +1 -1
  634. package/dist/hooks/mutation/use-rename-agent-profile.d.ts +6 -0
  635. package/dist/hooks/mutation/use-rename-llm-profile.cjs +1 -1
  636. package/dist/hooks/mutation/use-rename-llm-profile.js +1 -1
  637. package/dist/hooks/mutation/use-save-agent-profile.d.ts +5 -0
  638. package/dist/hooks/mutation/use-save-llm-profile.cjs +1 -1
  639. package/dist/hooks/mutation/use-save-llm-profile.js +1 -1
  640. package/dist/hooks/mutation/use-switch-acp-model.cjs.map +1 -1
  641. package/dist/hooks/mutation/use-switch-acp-model.js.map +1 -1
  642. package/dist/hooks/mutation/use-switch-llm-profile-and-log.cjs +1 -1
  643. package/dist/hooks/mutation/use-switch-llm-profile-and-log.cjs.map +1 -1
  644. package/dist/hooks/mutation/use-switch-llm-profile-and-log.d.ts +3 -4
  645. package/dist/hooks/mutation/use-switch-llm-profile-and-log.js +10 -35
  646. package/dist/hooks/mutation/use-switch-llm-profile-and-log.js.map +1 -1
  647. package/dist/hooks/mutation/use-switch-llm-profile.cjs +1 -1
  648. package/dist/hooks/mutation/use-switch-llm-profile.cjs.map +1 -1
  649. package/dist/hooks/mutation/use-switch-llm-profile.d.ts +20 -5
  650. package/dist/hooks/mutation/use-switch-llm-profile.js +38 -14
  651. package/dist/hooks/mutation/use-switch-llm-profile.js.map +1 -1
  652. package/dist/hooks/mutation/use-update-mcp-server.cjs +1 -1
  653. package/dist/hooks/mutation/use-update-mcp-server.cjs.map +1 -1
  654. package/dist/hooks/mutation/use-update-mcp-server.js +11 -37
  655. package/dist/hooks/mutation/use-update-mcp-server.js.map +1 -1
  656. package/dist/hooks/query/query-keys.cjs +1 -1
  657. package/dist/hooks/query/query-keys.cjs.map +1 -1
  658. package/dist/hooks/query/query-keys.d.ts +21 -0
  659. package/dist/hooks/query/query-keys.js +7 -3
  660. package/dist/hooks/query/query-keys.js.map +1 -1
  661. package/dist/hooks/query/use-active-conversation.cjs +1 -1
  662. package/dist/hooks/query/use-active-conversation.cjs.map +1 -1
  663. package/dist/hooks/query/use-active-conversation.js +17 -16
  664. package/dist/hooks/query/use-active-conversation.js.map +1 -1
  665. package/dist/hooks/query/use-agent-profiles.cjs +2 -0
  666. package/dist/hooks/query/use-agent-profiles.cjs.map +1 -0
  667. package/dist/hooks/query/use-agent-profiles.d.ts +13 -0
  668. package/dist/hooks/query/use-agent-profiles.js +24 -0
  669. package/dist/hooks/query/use-agent-profiles.js.map +1 -0
  670. package/dist/hooks/query/use-backends-health.cjs +1 -1
  671. package/dist/hooks/query/use-backends-health.cjs.map +1 -1
  672. package/dist/hooks/query/use-backends-health.js +18 -3
  673. package/dist/hooks/query/use-backends-health.js.map +1 -1
  674. package/dist/hooks/query/use-conversation-history.cjs +1 -1
  675. package/dist/hooks/query/use-conversation-history.cjs.map +1 -1
  676. package/dist/hooks/query/use-conversation-history.js +4 -2
  677. package/dist/hooks/query/use-conversation-history.js.map +1 -1
  678. package/dist/hooks/query/use-local-workspaces.cjs +1 -1
  679. package/dist/hooks/query/use-local-workspaces.cjs.map +1 -1
  680. package/dist/hooks/query/use-local-workspaces.js +1 -0
  681. package/dist/hooks/query/use-local-workspaces.js.map +1 -1
  682. package/dist/hooks/query/use-plugins-marketplace.d.ts +7 -0
  683. package/dist/hooks/query/use-resolved-workspaces.cjs +1 -1
  684. package/dist/hooks/query/use-resolved-workspaces.cjs.map +1 -1
  685. package/dist/hooks/query/use-resolved-workspaces.js +7 -6
  686. package/dist/hooks/query/use-resolved-workspaces.js.map +1 -1
  687. package/dist/hooks/query/use-search-subdirs.cjs +1 -1
  688. package/dist/hooks/query/use-search-subdirs.cjs.map +1 -1
  689. package/dist/hooks/query/use-search-subdirs.js +1 -0
  690. package/dist/hooks/query/use-search-subdirs.js.map +1 -1
  691. package/dist/hooks/query/use-settings.cjs +1 -1
  692. package/dist/hooks/query/use-settings.cjs.map +1 -1
  693. package/dist/hooks/query/use-settings.js +11 -11
  694. package/dist/hooks/query/use-settings.js.map +1 -1
  695. package/dist/hooks/query/use-verified-models.cjs +1 -1
  696. package/dist/hooks/query/use-verified-models.cjs.map +1 -1
  697. package/dist/hooks/query/use-verified-models.js +1 -0
  698. package/dist/hooks/query/use-verified-models.js.map +1 -1
  699. package/dist/hooks/use-acp-model-context.cjs +1 -1
  700. package/dist/hooks/use-acp-model-context.cjs.map +1 -1
  701. package/dist/hooks/use-acp-model-context.d.ts +1 -1
  702. package/dist/hooks/use-acp-model-context.js +9 -8
  703. package/dist/hooks/use-acp-model-context.js.map +1 -1
  704. package/dist/hooks/use-active-agent-profile.cjs +2 -0
  705. package/dist/hooks/use-active-agent-profile.cjs.map +1 -0
  706. package/dist/hooks/use-active-agent-profile.d.ts +20 -0
  707. package/dist/hooks/use-active-agent-profile.js +17 -0
  708. package/dist/hooks/use-active-agent-profile.js.map +1 -0
  709. package/dist/hooks/use-auto-resize.cjs +1 -1
  710. package/dist/hooks/use-auto-resize.cjs.map +1 -1
  711. package/dist/hooks/use-auto-resize.d.ts +2 -0
  712. package/dist/hooks/use-auto-resize.js +49 -45
  713. package/dist/hooks/use-auto-resize.js.map +1 -1
  714. package/dist/hooks/use-can-manage-org-profiles.cjs +1 -0
  715. package/dist/hooks/use-can-manage-org-profiles.d.ts +18 -0
  716. package/dist/hooks/use-can-manage-org-profiles.js +2 -0
  717. package/dist/hooks/use-chat-input-llm-profile-state.cjs +2 -0
  718. package/dist/hooks/use-chat-input-llm-profile-state.cjs.map +1 -0
  719. package/dist/hooks/use-chat-input-llm-profile-state.d.ts +23 -0
  720. package/dist/hooks/use-chat-input-llm-profile-state.js +30 -0
  721. package/dist/hooks/use-chat-input-llm-profile-state.js.map +1 -0
  722. package/dist/hooks/use-chat-input-model-state.cjs.map +1 -1
  723. package/dist/hooks/use-chat-input-model-state.d.ts +1 -1
  724. package/dist/hooks/use-chat-input-model-state.js.map +1 -1
  725. package/dist/hooks/use-chat-input-profile-state.cjs +2 -0
  726. package/dist/hooks/use-chat-input-profile-state.cjs.map +1 -0
  727. package/dist/hooks/use-chat-input-profile-state.d.ts +20 -0
  728. package/dist/hooks/use-chat-input-profile-state.js +22 -0
  729. package/dist/hooks/use-chat-input-profile-state.js.map +1 -0
  730. package/dist/hooks/use-conversation-name-context-menu.cjs +1 -1
  731. package/dist/hooks/use-conversation-name-context-menu.cjs.map +1 -1
  732. package/dist/hooks/use-conversation-name-context-menu.d.ts +4 -0
  733. package/dist/hooks/use-conversation-name-context-menu.js +44 -37
  734. package/dist/hooks/use-conversation-name-context-menu.js.map +1 -1
  735. package/dist/hooks/use-conversation-plugins.cjs +2 -0
  736. package/dist/hooks/use-conversation-plugins.cjs.map +1 -0
  737. package/dist/hooks/use-conversation-plugins.d.ts +9 -0
  738. package/dist/hooks/use-conversation-plugins.js +12 -0
  739. package/dist/hooks/use-conversation-plugins.js.map +1 -0
  740. package/dist/hooks/use-handle-plan-click.cjs +1 -1
  741. package/dist/hooks/use-handle-plan-click.cjs.map +1 -1
  742. package/dist/hooks/use-handle-plan-click.js +2 -1
  743. package/dist/hooks/use-handle-plan-click.js.map +1 -1
  744. package/dist/hooks/use-llm-configured.cjs +1 -1
  745. package/dist/hooks/use-llm-configured.cjs.map +1 -1
  746. package/dist/hooks/use-llm-configured.js +17 -16
  747. package/dist/hooks/use-llm-configured.js.map +1 -1
  748. package/dist/hooks/use-tracking.cjs +1 -1
  749. package/dist/hooks/use-tracking.cjs.map +1 -1
  750. package/dist/hooks/use-tracking.d.ts +51 -1
  751. package/dist/hooks/use-tracking.js +61 -2
  752. package/dist/hooks/use-tracking.js.map +1 -1
  753. package/dist/i18n/declaration.cjs +1 -1
  754. package/dist/i18n/declaration.cjs.map +1 -1
  755. package/dist/i18n/declaration.d.ts +138 -1
  756. package/dist/i18n/declaration.js +1 -1
  757. package/dist/i18n/declaration.js.map +1 -1
  758. package/dist/i18n/translation.cjs +18 -3
  759. package/dist/i18n/translation.cjs.map +1 -1
  760. package/dist/i18n/translation.js +2329 -0
  761. package/dist/i18n/translation.js.map +1 -1
  762. package/dist/icons/slack.cjs +2 -0
  763. package/dist/icons/slack.cjs.map +1 -0
  764. package/dist/icons/slack.js +19 -0
  765. package/dist/icons/slack.js.map +1 -0
  766. package/dist/icons/u-puzzle-piece.cjs +2 -0
  767. package/dist/icons/u-puzzle-piece.cjs.map +1 -0
  768. package/dist/icons/u-puzzle-piece.js +19 -0
  769. package/dist/icons/u-puzzle-piece.js.map +1 -0
  770. package/dist/icons/x-circle-solid.cjs +2 -0
  771. package/dist/icons/x-circle-solid.cjs.map +1 -0
  772. package/dist/icons/x-circle-solid.js +13 -0
  773. package/dist/icons/x-circle-solid.js.map +1 -0
  774. package/dist/locales/ar/openhands.json +138 -1
  775. package/dist/locales/ca/openhands.json +138 -1
  776. package/dist/locales/de/openhands.json +138 -1
  777. package/dist/locales/en/openhands.json +138 -1
  778. package/dist/locales/es/openhands.json +138 -1
  779. package/dist/locales/fr/openhands.json +138 -1
  780. package/dist/locales/it/openhands.json +138 -1
  781. package/dist/locales/ja/openhands.json +138 -1
  782. package/dist/locales/ko-KR/openhands.json +138 -1
  783. package/dist/locales/no/openhands.json +138 -1
  784. package/dist/locales/pt/openhands.json +138 -1
  785. package/dist/locales/tr/openhands.json +138 -1
  786. package/dist/locales/uk/openhands.json +138 -1
  787. package/dist/locales/zh-CN/openhands.json +138 -1
  788. package/dist/locales/zh-TW/openhands.json +138 -1
  789. package/dist/node_modules/@openhands/extensions/integrations/catalog/airtable.cjs +1 -1
  790. package/dist/node_modules/@openhands/extensions/integrations/catalog/airtable.cjs.map +1 -1
  791. package/dist/node_modules/@openhands/extensions/integrations/catalog/airtable.js +0 -20
  792. package/dist/node_modules/@openhands/extensions/integrations/catalog/airtable.js.map +1 -1
  793. package/dist/node_modules/@openhands/extensions/integrations/catalog/asana.cjs +1 -1
  794. package/dist/node_modules/@openhands/extensions/integrations/catalog/asana.cjs.map +1 -1
  795. package/dist/node_modules/@openhands/extensions/integrations/catalog/asana.js +1 -6
  796. package/dist/node_modules/@openhands/extensions/integrations/catalog/asana.js.map +1 -1
  797. package/dist/node_modules/@openhands/extensions/integrations/catalog/bitbucket.cjs +1 -1
  798. package/dist/node_modules/@openhands/extensions/integrations/catalog/bitbucket.cjs.map +1 -1
  799. package/dist/node_modules/@openhands/extensions/integrations/catalog/bitbucket.js +1 -6
  800. package/dist/node_modules/@openhands/extensions/integrations/catalog/bitbucket.js.map +1 -1
  801. package/dist/node_modules/@openhands/extensions/integrations/catalog/box.cjs +1 -1
  802. package/dist/node_modules/@openhands/extensions/integrations/catalog/box.cjs.map +1 -1
  803. package/dist/node_modules/@openhands/extensions/integrations/catalog/box.js +1 -6
  804. package/dist/node_modules/@openhands/extensions/integrations/catalog/box.js.map +1 -1
  805. package/dist/node_modules/@openhands/extensions/integrations/catalog/canva.cjs +1 -1
  806. package/dist/node_modules/@openhands/extensions/integrations/catalog/canva.cjs.map +1 -1
  807. package/dist/node_modules/@openhands/extensions/integrations/catalog/canva.js +3 -7
  808. package/dist/node_modules/@openhands/extensions/integrations/catalog/canva.js.map +1 -1
  809. package/dist/node_modules/@openhands/extensions/integrations/catalog/confluence.cjs +1 -1
  810. package/dist/node_modules/@openhands/extensions/integrations/catalog/confluence.cjs.map +1 -1
  811. package/dist/node_modules/@openhands/extensions/integrations/catalog/confluence.js +1 -6
  812. package/dist/node_modules/@openhands/extensions/integrations/catalog/confluence.js.map +1 -1
  813. package/dist/node_modules/@openhands/extensions/integrations/catalog/discord.cjs +1 -1
  814. package/dist/node_modules/@openhands/extensions/integrations/catalog/discord.cjs.map +1 -1
  815. package/dist/node_modules/@openhands/extensions/integrations/catalog/discord.js +1 -6
  816. package/dist/node_modules/@openhands/extensions/integrations/catalog/discord.js.map +1 -1
  817. package/dist/node_modules/@openhands/extensions/integrations/catalog/figma.cjs +1 -1
  818. package/dist/node_modules/@openhands/extensions/integrations/catalog/figma.cjs.map +1 -1
  819. package/dist/node_modules/@openhands/extensions/integrations/catalog/figma.js +20 -26
  820. package/dist/node_modules/@openhands/extensions/integrations/catalog/figma.js.map +1 -1
  821. package/dist/node_modules/@openhands/extensions/integrations/catalog/github.cjs +1 -1
  822. package/dist/node_modules/@openhands/extensions/integrations/catalog/github.cjs.map +1 -1
  823. package/dist/node_modules/@openhands/extensions/integrations/catalog/github.js +0 -9
  824. package/dist/node_modules/@openhands/extensions/integrations/catalog/github.js.map +1 -1
  825. package/dist/node_modules/@openhands/extensions/integrations/catalog/gmail.cjs +1 -1
  826. package/dist/node_modules/@openhands/extensions/integrations/catalog/gmail.cjs.map +1 -1
  827. package/dist/node_modules/@openhands/extensions/integrations/catalog/gmail.js +1 -6
  828. package/dist/node_modules/@openhands/extensions/integrations/catalog/gmail.js.map +1 -1
  829. package/dist/node_modules/@openhands/extensions/integrations/catalog/google-calendar.cjs +1 -1
  830. package/dist/node_modules/@openhands/extensions/integrations/catalog/google-calendar.cjs.map +1 -1
  831. package/dist/node_modules/@openhands/extensions/integrations/catalog/google-calendar.js +1 -6
  832. package/dist/node_modules/@openhands/extensions/integrations/catalog/google-calendar.js.map +1 -1
  833. package/dist/node_modules/@openhands/extensions/integrations/catalog/google-docs.cjs +1 -1
  834. package/dist/node_modules/@openhands/extensions/integrations/catalog/google-docs.cjs.map +1 -1
  835. package/dist/node_modules/@openhands/extensions/integrations/catalog/google-docs.js +1 -6
  836. package/dist/node_modules/@openhands/extensions/integrations/catalog/google-docs.js.map +1 -1
  837. package/dist/node_modules/@openhands/extensions/integrations/catalog/google-drive.cjs +1 -1
  838. package/dist/node_modules/@openhands/extensions/integrations/catalog/google-drive.cjs.map +1 -1
  839. package/dist/node_modules/@openhands/extensions/integrations/catalog/google-drive.js +1 -6
  840. package/dist/node_modules/@openhands/extensions/integrations/catalog/google-drive.js.map +1 -1
  841. package/dist/node_modules/@openhands/extensions/integrations/catalog/google-sheets.cjs +1 -1
  842. package/dist/node_modules/@openhands/extensions/integrations/catalog/google-sheets.cjs.map +1 -1
  843. package/dist/node_modules/@openhands/extensions/integrations/catalog/google-sheets.js +1 -6
  844. package/dist/node_modules/@openhands/extensions/integrations/catalog/google-sheets.js.map +1 -1
  845. package/dist/node_modules/@openhands/extensions/integrations/catalog/intercom.cjs +1 -1
  846. package/dist/node_modules/@openhands/extensions/integrations/catalog/intercom.cjs.map +1 -1
  847. package/dist/node_modules/@openhands/extensions/integrations/catalog/intercom.js +1 -6
  848. package/dist/node_modules/@openhands/extensions/integrations/catalog/intercom.js.map +1 -1
  849. package/dist/node_modules/@openhands/extensions/integrations/catalog/jira.cjs +1 -1
  850. package/dist/node_modules/@openhands/extensions/integrations/catalog/jira.cjs.map +1 -1
  851. package/dist/node_modules/@openhands/extensions/integrations/catalog/jira.js +1 -6
  852. package/dist/node_modules/@openhands/extensions/integrations/catalog/jira.js.map +1 -1
  853. package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.cjs +1 -1
  854. package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.cjs.map +1 -1
  855. package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.js +13 -13
  856. package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.js.map +1 -1
  857. package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.cjs +1 -1
  858. package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.cjs.map +1 -1
  859. package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.js +1 -6
  860. package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.js.map +1 -1
  861. package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.cjs +1 -1
  862. package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.cjs.map +1 -1
  863. package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.js +1 -6
  864. package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.js.map +1 -1
  865. package/dist/node_modules/@openhands/extensions/integrations/catalog/miro.cjs +1 -1
  866. package/dist/node_modules/@openhands/extensions/integrations/catalog/miro.cjs.map +1 -1
  867. package/dist/node_modules/@openhands/extensions/integrations/catalog/miro.js +14 -10
  868. package/dist/node_modules/@openhands/extensions/integrations/catalog/miro.js.map +1 -1
  869. package/dist/node_modules/@openhands/extensions/integrations/catalog/monday.cjs +1 -1
  870. package/dist/node_modules/@openhands/extensions/integrations/catalog/monday.cjs.map +1 -1
  871. package/dist/node_modules/@openhands/extensions/integrations/catalog/monday.js +13 -10
  872. package/dist/node_modules/@openhands/extensions/integrations/catalog/monday.js.map +1 -1
  873. package/dist/node_modules/@openhands/extensions/integrations/catalog/netlify.cjs +1 -1
  874. package/dist/node_modules/@openhands/extensions/integrations/catalog/netlify.cjs.map +1 -1
  875. package/dist/node_modules/@openhands/extensions/integrations/catalog/netlify.js +1 -6
  876. package/dist/node_modules/@openhands/extensions/integrations/catalog/netlify.js.map +1 -1
  877. package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.cjs +1 -1
  878. package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.cjs.map +1 -1
  879. package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.js +1 -8
  880. package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.js.map +1 -1
  881. package/dist/node_modules/@openhands/extensions/integrations/catalog/okta.cjs +1 -1
  882. package/dist/node_modules/@openhands/extensions/integrations/catalog/okta.cjs.map +1 -1
  883. package/dist/node_modules/@openhands/extensions/integrations/catalog/okta.js +1 -6
  884. package/dist/node_modules/@openhands/extensions/integrations/catalog/okta.js.map +1 -1
  885. package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.cjs +1 -1
  886. package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.cjs.map +1 -1
  887. package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.js +1 -6
  888. package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.js.map +1 -1
  889. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.cjs +1 -1
  890. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.cjs.map +1 -1
  891. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.js +20 -18
  892. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.js.map +1 -1
  893. package/dist/node_modules/@openhands/extensions/integrations/catalog/quickbooks.cjs +1 -1
  894. package/dist/node_modules/@openhands/extensions/integrations/catalog/quickbooks.cjs.map +1 -1
  895. package/dist/node_modules/@openhands/extensions/integrations/catalog/quickbooks.js +66 -21
  896. package/dist/node_modules/@openhands/extensions/integrations/catalog/quickbooks.js.map +1 -1
  897. package/dist/node_modules/@openhands/extensions/integrations/catalog/salesforce.cjs +1 -1
  898. package/dist/node_modules/@openhands/extensions/integrations/catalog/salesforce.cjs.map +1 -1
  899. package/dist/node_modules/@openhands/extensions/integrations/catalog/salesforce.js +17 -11
  900. package/dist/node_modules/@openhands/extensions/integrations/catalog/salesforce.js.map +1 -1
  901. package/dist/node_modules/@openhands/extensions/integrations/catalog/sentry.cjs +1 -1
  902. package/dist/node_modules/@openhands/extensions/integrations/catalog/sentry.cjs.map +1 -1
  903. package/dist/node_modules/@openhands/extensions/integrations/catalog/sentry.js +12 -17
  904. package/dist/node_modules/@openhands/extensions/integrations/catalog/sentry.js.map +1 -1
  905. package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.cjs +1 -1
  906. package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.cjs.map +1 -1
  907. package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.js +1 -6
  908. package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.js.map +1 -1
  909. package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.cjs +1 -1
  910. package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.cjs.map +1 -1
  911. package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.js +1 -1
  912. package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.js.map +1 -1
  913. package/dist/node_modules/@openhands/extensions/integrations/catalog/stripe.cjs +1 -1
  914. package/dist/node_modules/@openhands/extensions/integrations/catalog/stripe.cjs.map +1 -1
  915. package/dist/node_modules/@openhands/extensions/integrations/catalog/stripe.js +14 -19
  916. package/dist/node_modules/@openhands/extensions/integrations/catalog/stripe.js.map +1 -1
  917. package/dist/node_modules/@openhands/extensions/integrations/catalog/supabase.cjs +1 -1
  918. package/dist/node_modules/@openhands/extensions/integrations/catalog/supabase.cjs.map +1 -1
  919. package/dist/node_modules/@openhands/extensions/integrations/catalog/supabase.js +15 -20
  920. package/dist/node_modules/@openhands/extensions/integrations/catalog/supabase.js.map +1 -1
  921. package/dist/node_modules/@openhands/extensions/integrations/catalog/trello.cjs +1 -1
  922. package/dist/node_modules/@openhands/extensions/integrations/catalog/trello.cjs.map +1 -1
  923. package/dist/node_modules/@openhands/extensions/integrations/catalog/trello.js +10 -8
  924. package/dist/node_modules/@openhands/extensions/integrations/catalog/trello.js.map +1 -1
  925. package/dist/node_modules/@openhands/extensions/integrations/catalog/vercel.cjs +1 -1
  926. package/dist/node_modules/@openhands/extensions/integrations/catalog/vercel.cjs.map +1 -1
  927. package/dist/node_modules/@openhands/extensions/integrations/catalog/vercel.js +1 -6
  928. package/dist/node_modules/@openhands/extensions/integrations/catalog/vercel.js.map +1 -1
  929. package/dist/node_modules/@openhands/extensions/integrations/catalog/xero.cjs +1 -1
  930. package/dist/node_modules/@openhands/extensions/integrations/catalog/xero.cjs.map +1 -1
  931. package/dist/node_modules/@openhands/extensions/integrations/catalog/xero.js +1 -6
  932. package/dist/node_modules/@openhands/extensions/integrations/catalog/xero.js.map +1 -1
  933. package/dist/node_modules/@openhands/extensions/integrations/catalog/zoom.cjs +1 -1
  934. package/dist/node_modules/@openhands/extensions/integrations/catalog/zoom.cjs.map +1 -1
  935. package/dist/node_modules/@openhands/extensions/integrations/catalog/zoom.js +1 -6
  936. package/dist/node_modules/@openhands/extensions/integrations/catalog/zoom.js.map +1 -1
  937. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs +1 -1
  938. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs.map +1 -1
  939. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js +67 -87
  940. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js.map +1 -1
  941. package/dist/node_modules/@openhands/extensions/integrations/index.cjs +1 -1
  942. package/dist/node_modules/@openhands/extensions/integrations/index.cjs.map +1 -1
  943. package/dist/node_modules/@openhands/extensions/integrations/index.js +4 -4
  944. package/dist/node_modules/@openhands/extensions/integrations/index.js.map +1 -1
  945. package/dist/node_modules/@openhands/extensions/skills/index.cjs +236 -17
  946. package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
  947. package/dist/node_modules/@openhands/extensions/skills/index.js +24 -5
  948. package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
  949. package/dist/node_modules/@openhands/typescript-client/dist/client/agent-profiles-client.cjs +2 -0
  950. package/dist/node_modules/@openhands/typescript-client/dist/client/agent-profiles-client.cjs.map +1 -0
  951. package/dist/node_modules/@openhands/typescript-client/dist/client/agent-profiles-client.js +40 -0
  952. package/dist/node_modules/@openhands/typescript-client/dist/client/agent-profiles-client.js.map +1 -0
  953. package/dist/node_modules/@openhands/typescript-client/dist/client/agent-server-compatibility.cjs +1 -1
  954. package/dist/node_modules/@openhands/typescript-client/dist/client/agent-server-compatibility.cjs.map +1 -1
  955. package/dist/node_modules/@openhands/typescript-client/dist/client/agent-server-compatibility.js +4 -4
  956. package/dist/node_modules/@openhands/typescript-client/dist/client/agent-server-compatibility.js.map +1 -1
  957. package/dist/node_modules/@openhands/typescript-client/dist/client/bash-client.cjs +1 -1
  958. package/dist/node_modules/@openhands/typescript-client/dist/client/bash-client.cjs.map +1 -1
  959. package/dist/node_modules/@openhands/typescript-client/dist/client/bash-client.js +3 -0
  960. package/dist/node_modules/@openhands/typescript-client/dist/client/bash-client.js.map +1 -1
  961. package/dist/node_modules/@openhands/typescript-client/dist/client/conversation-client.cjs +1 -1
  962. package/dist/node_modules/@openhands/typescript-client/dist/client/conversation-client.cjs.map +1 -1
  963. package/dist/node_modules/@openhands/typescript-client/dist/client/conversation-client.js +3 -0
  964. package/dist/node_modules/@openhands/typescript-client/dist/client/conversation-client.js.map +1 -1
  965. package/dist/node_modules/@openhands/typescript-client/dist/client/desktop-client.cjs +1 -0
  966. package/dist/node_modules/@openhands/typescript-client/dist/client/desktop-client.js +1 -0
  967. package/dist/node_modules/@openhands/typescript-client/dist/client/hooks-client.cjs +1 -0
  968. package/dist/node_modules/@openhands/typescript-client/dist/client/hooks-client.js +1 -0
  969. package/dist/node_modules/@openhands/typescript-client/dist/client/http-client.cjs +1 -1
  970. package/dist/node_modules/@openhands/typescript-client/dist/client/http-client.cjs.map +1 -1
  971. package/dist/node_modules/@openhands/typescript-client/dist/client/http-client.js +84 -27
  972. package/dist/node_modules/@openhands/typescript-client/dist/client/http-client.js.map +1 -1
  973. package/dist/node_modules/@openhands/typescript-client/dist/client/mcp-client.cjs +1 -1
  974. package/dist/node_modules/@openhands/typescript-client/dist/client/mcp-client.cjs.map +1 -1
  975. package/dist/node_modules/@openhands/typescript-client/dist/client/mcp-client.js +9 -0
  976. package/dist/node_modules/@openhands/typescript-client/dist/client/mcp-client.js.map +1 -1
  977. package/dist/node_modules/@openhands/typescript-client/dist/client/meta-profiles-client.cjs +1 -0
  978. package/dist/node_modules/@openhands/typescript-client/dist/client/meta-profiles-client.js +1 -0
  979. package/dist/node_modules/@openhands/typescript-client/dist/client/plugins-client.cjs +2 -0
  980. package/dist/node_modules/@openhands/typescript-client/dist/client/plugins-client.cjs.map +1 -0
  981. package/dist/node_modules/@openhands/typescript-client/dist/client/plugins-client.js +42 -0
  982. package/dist/node_modules/@openhands/typescript-client/dist/client/plugins-client.js.map +1 -0
  983. package/dist/node_modules/@openhands/typescript-client/dist/client/shared-client.cjs +1 -0
  984. package/dist/node_modules/@openhands/typescript-client/dist/client/shared-client.js +1 -0
  985. package/dist/node_modules/@openhands/typescript-client/dist/client/skills-client.cjs +1 -1
  986. package/dist/node_modules/@openhands/typescript-client/dist/client/skills-client.cjs.map +1 -1
  987. package/dist/node_modules/@openhands/typescript-client/dist/client/skills-client.js +1 -1
  988. package/dist/node_modules/@openhands/typescript-client/dist/client/skills-client.js.map +1 -1
  989. package/dist/node_modules/@openhands/typescript-client/dist/client/sub-agents-client.cjs +1 -0
  990. package/dist/node_modules/@openhands/typescript-client/dist/client/sub-agents-client.js +1 -0
  991. package/dist/node_modules/@openhands/typescript-client/dist/client/tool-client.cjs +1 -0
  992. package/dist/node_modules/@openhands/typescript-client/dist/client/tool-client.js +1 -0
  993. package/dist/node_modules/@openhands/typescript-client/dist/clients.cjs +1 -0
  994. package/dist/node_modules/@openhands/typescript-client/dist/clients.js +20 -0
  995. package/dist/node_modules/@openhands/typescript-client/dist/conversation/conversation-manager.cjs +1 -1
  996. package/dist/node_modules/@openhands/typescript-client/dist/conversation/conversation-manager.js +18 -0
  997. package/dist/node_modules/@openhands/typescript-client/dist/conversation/conversation.cjs +1 -1
  998. package/dist/node_modules/@openhands/typescript-client/dist/conversation/conversation.js +1 -0
  999. package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-conversation.cjs +1 -1
  1000. package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-conversation.js +2 -0
  1001. package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-state.cjs +1 -1
  1002. package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-state.cjs.map +1 -1
  1003. package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-state.js +15 -17
  1004. package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-state.js.map +1 -1
  1005. package/dist/node_modules/@openhands/typescript-client/dist/index.cjs +1 -1
  1006. package/dist/node_modules/@openhands/typescript-client/dist/index.js +3 -0
  1007. package/dist/node_modules/@openhands/typescript-client/dist/workspace/workspace.cjs +1 -0
  1008. package/dist/node_modules/@openhands/typescript-client/dist/workspace/workspace.js +1 -0
  1009. package/dist/package.cjs +1 -1
  1010. package/dist/package.cjs.map +1 -1
  1011. package/dist/package.js +7 -4
  1012. package/dist/package.js.map +1 -1
  1013. package/dist/routes/agent-settings.d.ts +106 -0
  1014. package/dist/routes/files-tab.cjs +1 -1
  1015. package/dist/routes/files-tab.js +23 -23
  1016. package/dist/routes/llm-settings.cjs +1 -1
  1017. package/dist/routes/llm-settings.cjs.map +1 -1
  1018. package/dist/routes/llm-settings.d.ts +6 -4
  1019. package/dist/routes/llm-settings.js +0 -1
  1020. package/dist/routes/llm-settings.js.map +1 -1
  1021. package/dist/routes/mcp.cjs.map +1 -1
  1022. package/dist/routes/mcp.js.map +1 -1
  1023. package/dist/services/settings.cjs +1 -1
  1024. package/dist/services/settings.cjs.map +1 -1
  1025. package/dist/services/settings.js +2 -6
  1026. package/dist/services/settings.js.map +1 -1
  1027. package/dist/stores/command-menu-store.cjs +2 -0
  1028. package/dist/stores/command-menu-store.cjs.map +1 -0
  1029. package/dist/stores/command-menu-store.d.ts +8 -0
  1030. package/dist/stores/command-menu-store.js +12 -0
  1031. package/dist/stores/command-menu-store.js.map +1 -0
  1032. package/dist/stores/conversation-panel-preferences-store.cjs +1 -1
  1033. package/dist/stores/conversation-panel-preferences-store.cjs.map +1 -1
  1034. package/dist/stores/conversation-panel-preferences-store.js +1 -1
  1035. package/dist/stores/conversation-panel-preferences-store.js.map +1 -1
  1036. package/dist/stores/conversation-store.cjs +1 -1
  1037. package/dist/stores/conversation-store.cjs.map +1 -1
  1038. package/dist/stores/conversation-store.d.ts +1 -0
  1039. package/dist/stores/conversation-store.js +1 -0
  1040. package/dist/stores/conversation-store.js.map +1 -1
  1041. package/dist/stores/goal-store.cjs +2 -0
  1042. package/dist/stores/goal-store.cjs.map +1 -0
  1043. package/dist/stores/goal-store.d.ts +28 -0
  1044. package/dist/stores/goal-store.js +14 -0
  1045. package/dist/stores/goal-store.js.map +1 -0
  1046. package/dist/types/agent-server/core/events/conversation-state-event.d.ts +39 -3
  1047. package/dist/types/agent-server/type-guards.cjs +1 -1
  1048. package/dist/types/agent-server/type-guards.cjs.map +1 -1
  1049. package/dist/types/agent-server/type-guards.d.ts +2 -1
  1050. package/dist/types/agent-server/type-guards.js +3 -3
  1051. package/dist/types/agent-server/type-guards.js.map +1 -1
  1052. package/dist/types/mcp-auth.cjs +2 -0
  1053. package/dist/types/mcp-auth.cjs.map +1 -0
  1054. package/dist/types/mcp-auth.d.ts +43 -0
  1055. package/dist/types/mcp-auth.js +13 -0
  1056. package/dist/types/mcp-auth.js.map +1 -0
  1057. package/dist/types/mcp-server.d.ts +22 -1
  1058. package/dist/types/settings.d.ts +6 -4
  1059. package/dist/ui/context-menu.d.ts +1 -1
  1060. package/dist/utils/acp-command.d.ts +64 -0
  1061. package/dist/utils/automation-debug-prompt.d.ts +18 -0
  1062. package/dist/utils/constants.cjs +1 -1
  1063. package/dist/utils/constants.cjs.map +1 -1
  1064. package/dist/utils/constants.d.ts +2 -0
  1065. package/dist/utils/constants.js +12 -3
  1066. package/dist/utils/constants.js.map +1 -1
  1067. package/dist/utils/dropdown-classes.cjs +1 -1
  1068. package/dist/utils/dropdown-classes.cjs.map +1 -1
  1069. package/dist/utils/dropdown-classes.js +4 -2
  1070. package/dist/utils/dropdown-classes.js.map +1 -1
  1071. package/dist/utils/form-control-classes.cjs +1 -1
  1072. package/dist/utils/form-control-classes.js +1 -1
  1073. package/dist/utils/handle-event-for-ui.cjs +1 -1
  1074. package/dist/utils/handle-event-for-ui.cjs.map +1 -1
  1075. package/dist/utils/handle-event-for-ui.js +72 -37
  1076. package/dist/utils/handle-event-for-ui.js.map +1 -1
  1077. package/dist/utils/mcp-config.cjs +1 -1
  1078. package/dist/utils/mcp-config.cjs.map +1 -1
  1079. package/dist/utils/mcp-config.d.ts +15 -9
  1080. package/dist/utils/mcp-config.js +124 -53
  1081. package/dist/utils/mcp-config.js.map +1 -1
  1082. package/dist/utils/mcp-installed-server-display.cjs +2 -0
  1083. package/dist/utils/mcp-installed-server-display.cjs.map +1 -0
  1084. package/dist/utils/mcp-installed-server-display.d.ts +8 -0
  1085. package/dist/utils/mcp-installed-server-display.js +12 -0
  1086. package/dist/utils/mcp-installed-server-display.js.map +1 -0
  1087. package/dist/utils/mcp-installed-servers.cjs +1 -1
  1088. package/dist/utils/mcp-installed-servers.cjs.map +1 -1
  1089. package/dist/utils/mcp-installed-servers.js +4 -4
  1090. package/dist/utils/mcp-installed-servers.js.map +1 -1
  1091. package/dist/utils/mcp-marketplace-utils.cjs +1 -1
  1092. package/dist/utils/mcp-marketplace-utils.cjs.map +1 -1
  1093. package/dist/utils/mcp-marketplace-utils.d.ts +2 -0
  1094. package/dist/utils/mcp-marketplace-utils.js +31 -16
  1095. package/dist/utils/mcp-marketplace-utils.js.map +1 -1
  1096. package/dist/utils/mcp-server-name.cjs +2 -0
  1097. package/dist/utils/mcp-server-name.cjs.map +1 -0
  1098. package/dist/utils/mcp-server-name.d.ts +3 -0
  1099. package/dist/utils/mcp-server-name.js +12 -0
  1100. package/dist/utils/mcp-server-name.js.map +1 -0
  1101. package/dist/utils/plugin-display.cjs +2 -0
  1102. package/dist/utils/plugin-display.cjs.map +1 -0
  1103. package/dist/utils/plugin-display.d.ts +20 -0
  1104. package/dist/utils/plugin-display.js +29 -0
  1105. package/dist/utils/plugin-display.js.map +1 -0
  1106. package/dist/utils/settings-utils.cjs.map +1 -1
  1107. package/dist/utils/settings-utils.js.map +1 -1
  1108. package/dist/utils/workspaces-compatibility.cjs +1 -1
  1109. package/dist/utils/workspaces-compatibility.cjs.map +1 -1
  1110. package/dist/utils/workspaces-compatibility.js +1 -0
  1111. package/dist/utils/workspaces-compatibility.js.map +1 -1
  1112. package/package.json +7 -4
  1113. package/scripts/check-sdk-version-sync.mjs +6 -6
  1114. package/scripts/check-translation-completeness.cjs +6 -0
  1115. package/scripts/dev-safe.mjs +14 -3
  1116. package/scripts/dev-with-automation.mjs +4 -0
  1117. package/scripts/gen-acp-docker-env.mjs +107 -0
  1118. package/scripts/ingress.mjs +66 -226
  1119. package/scripts/proxy-utils.mjs +171 -0
  1120. package/scripts/static-server.mjs +127 -283
  1121. package/build/assets/Trans-CiZR6eVI.js +0 -1
  1122. package/build/assets/active-backend-context-CEuva6ZJ.js +0 -1
  1123. package/build/assets/add-backend-modal-b_eiVk3A.js +0 -1
  1124. package/build/assets/agent-server-conversation-service.api-D_uJ7BKc.js +0 -5
  1125. package/build/assets/agent-settings-DyfziYyM.js +0 -2
  1126. package/build/assets/alert-banner-BFayS5vM.js +0 -1
  1127. package/build/assets/analytics-consent-form-modal-CQ22qlFF.js +0 -1
  1128. package/build/assets/api-key-entry-screen-KnIwP0vN.js +0 -1
  1129. package/build/assets/app-settings-CBaHJ5vJ.js +0 -1
  1130. package/build/assets/automation-detail-DgQswnXg.js +0 -1
  1131. package/build/assets/automations-list-D99p6CoQ.js +0 -1
  1132. package/build/assets/back-nav-button-Cp9z-wsG.js +0 -1
  1133. package/build/assets/backend-form-modal-BABAz-zH.js +0 -1
  1134. package/build/assets/backend-synced-settings-badge-DzwWQC4T.js +0 -1
  1135. package/build/assets/base-modal-1bHiB5Wf.js +0 -1
  1136. package/build/assets/brand-button-FHWgEb4Q.js +0 -1
  1137. package/build/assets/browser-store-B9h0eW79.js +0 -1
  1138. package/build/assets/browser-tab-JiCXo0Nc.js +0 -1
  1139. package/build/assets/chat-send-button-QtyofqFt.js +0 -1
  1140. package/build/assets/check-6ieIiPhW.js +0 -1
  1141. package/build/assets/checkmark-BfgRVMHK.js +0 -1
  1142. package/build/assets/circle-plus-check-toggle-CmINKfZj.js +0 -1
  1143. package/build/assets/close-DhH0uMa7.js +0 -1
  1144. package/build/assets/code-tag-CnORXDJj.js +0 -1
  1145. package/build/assets/combobox-caret-BB15S7zY.js +0 -1
  1146. package/build/assets/condenser-settings-BOKNShD9.js +0 -1
  1147. package/build/assets/confirmation-modal-CofmThy4.js +0 -1
  1148. package/build/assets/context-menu-list-item-DO12IEaK.js +0 -1
  1149. package/build/assets/conversation-DIzv-jq8.js +0 -1
  1150. package/build/assets/conversation-DV3odvMe.js +0 -19
  1151. package/build/assets/conversation-local-storage-DK7yJr5N.js +0 -1
  1152. package/build/assets/conversation-panel-CgCarTAn.js +0 -1
  1153. package/build/assets/conversation-service.api-RV_bOKNz.js +0 -1
  1154. package/build/assets/conversation-state-store-4obo4ZMf.js +0 -1
  1155. package/build/assets/conversation-store-CXrL0v-X.js +0 -6
  1156. package/build/assets/conversation-tab-empty-state-CqT5ur_H.js +0 -1
  1157. package/build/assets/copy-C5tBqfWu.js +0 -1
  1158. package/build/assets/copy-to-clipboard-button-BVFYcsg_.js +0 -1
  1159. package/build/assets/createLucideIcon-D3nkdIAN.js +0 -1
  1160. package/build/assets/declaration-B0yY_dkQ.js +0 -1
  1161. package/build/assets/device-verify-DRupI_hz.js +0 -1
  1162. package/build/assets/dist-D5d5zm8o.js +0 -1
  1163. package/build/assets/dist-fV7trlfb.js +0 -1
  1164. package/build/assets/dropdown-classes-5IsMjYYw.js +0 -1
  1165. package/build/assets/edit-automation-modal-BG-gd82b.js +0 -1
  1166. package/build/assets/ellipsis-button-DWvVZO_r.js +0 -1
  1167. package/build/assets/entry.client-uhbVfCtd.js +0 -2
  1168. package/build/assets/enum-filter-dropdown-CB2fqz_e.js +0 -1
  1169. package/build/assets/environment-switch-overlay-Oeal5TVq.js +0 -1
  1170. package/build/assets/extensions-hub-DxiE0AZR.js +0 -1
  1171. package/build/assets/files-tab-1F2OlNeH.js +0 -1
  1172. package/build/assets/files-tab-store-C1q5Rbx3.js +0 -1
  1173. package/build/assets/folder-C5tr7xyN.js +0 -1
  1174. package/build/assets/get-language-from-path-E1JKsbeE.js +0 -1
  1175. package/build/assets/git-provider-icon-CKs-22Ts.js +0 -1
  1176. package/build/assets/home-B3E0le0g.js +0 -1
  1177. package/build/assets/iconBase-DMoh3FEg.js +0 -1
  1178. package/build/assets/index-redirect-DhuK5mhS.js +0 -1
  1179. package/build/assets/install-server-modal-DjintV14.js +0 -1
  1180. package/build/assets/is-backend-llm-ready-Bj44pekN.js +0 -1
  1181. package/build/assets/launch-DCU3S84p.js +0 -1
  1182. package/build/assets/lesson-plan-BUUPKVsa.js +0 -3
  1183. package/build/assets/link-external-CF4KHxx-.js +0 -1
  1184. package/build/assets/llm-client-BakM_czF.js +0 -1
  1185. package/build/assets/llm-not-configured-banner-BV-NIjfR.js +0 -27
  1186. package/build/assets/llm-settings-B5d7PHzz.js +0 -1
  1187. package/build/assets/llm-settings-C5whb-0p.js +0 -1
  1188. package/build/assets/loader-circle-DyX8DmLg.js +0 -1
  1189. package/build/assets/loading-spinner-BvOAco8a.js +0 -1
  1190. package/build/assets/manage-backends-modal-D9ClxVpM.js +0 -1
  1191. package/build/assets/manifest-38a873aa.js +0 -1
  1192. package/build/assets/mcp-7rk44GRS.js +0 -9
  1193. package/build/assets/mcp-client-DxHXYNOw.js +0 -1
  1194. package/build/assets/messages-DgBEaXil.js +0 -43
  1195. package/build/assets/modal-backdrop-DjAC2zOZ.js +0 -1
  1196. package/build/assets/modal-body-OJdIUJ68.js +0 -1
  1197. package/build/assets/modal-close-button-BNjGesHc.js +0 -1
  1198. package/build/assets/model-selector-w2uGPM5y.js +0 -1
  1199. package/build/assets/navigation-context-CUJ60pLI.js +0 -1
  1200. package/build/assets/navigation-link-BiPKTOHF.js +0 -1
  1201. package/build/assets/onboarding-Cit87z8g.js +0 -1
  1202. package/build/assets/onboarding-modal-JPrzvr8W.js +0 -1
  1203. package/build/assets/openhands-logo-uNs9g6LY.js +0 -1
  1204. package/build/assets/option-service.api-BLYUhnCF.js +0 -1
  1205. package/build/assets/organization-service.api-DpSSwlZu.js +0 -1
  1206. package/build/assets/path-utils-B4WAVqvK.js +0 -1
  1207. package/build/assets/plan-components-DSOTFW2D.js +0 -1
  1208. package/build/assets/planner-tab-LmoxgKKe.js +0 -1
  1209. package/build/assets/preload-helper-D_sPnjeL.js +0 -1
  1210. package/build/assets/profiles-client-B4SJ4ZAf.js +0 -1
  1211. package/build/assets/providers-BGUAB8kf.js +0 -1
  1212. package/build/assets/react-Dn-iWFF5.js +0 -1
  1213. package/build/assets/react-dom-BBXlXOZX.js +0 -1
  1214. package/build/assets/react-uQK8du1l.js +0 -1
  1215. package/build/assets/recommended-automations-launcher-Df9MXUpX.js +0 -50
  1216. package/build/assets/root-BShAdYGY.css +0 -1
  1217. package/build/assets/root-C99reK-P.js +0 -2
  1218. package/build/assets/root-layout-BtH64XeC.js +0 -2
  1219. package/build/assets/runtime-waiting-state-C7MjXDeW.js +0 -1
  1220. package/build/assets/schema-field-BCDuEMrl.js +0 -1
  1221. package/build/assets/sdk-section-page-XJN9mGju.js +0 -1
  1222. package/build/assets/sdk-settings-schema-B15AE1GH.js +0 -1
  1223. package/build/assets/search-rob4u9f8.js +0 -1
  1224. package/build/assets/secrets-service-CrPyCR8u.js +0 -1
  1225. package/build/assets/secrets-settings-UJn15N7E.js +0 -1
  1226. package/build/assets/settings-C5aUD_sQ.js +0 -1
  1227. package/build/assets/settings-dropdown-input-DQRt2_RA.js +0 -1
  1228. package/build/assets/settings-gear-B7bZDo_8.js +0 -1
  1229. package/build/assets/settings-index-zP_rYIW1.js +0 -1
  1230. package/build/assets/settings-input-n8FzVso3.js +0 -1
  1231. package/build/assets/settings-list-classes-DquY3fwm.js +0 -1
  1232. package/build/assets/settings-modal-szlQ6LpE.js +0 -1
  1233. package/build/assets/settings-section-header-context-DrXgyNC-.js +0 -1
  1234. package/build/assets/settings-service.api-B4G8NzCM.js +0 -1
  1235. package/build/assets/settings-switch-DsbEm3ie.js +0 -1
  1236. package/build/assets/shared-conversation-BrAvqeaI.js +0 -1
  1237. package/build/assets/sidebar-mobile-menu-toggle-BRZGCe-l.js +0 -1
  1238. package/build/assets/sidebar-nav-link-B_EygIce.js +0 -1
  1239. package/build/assets/skill-card-pill-row-Bq9Imkdh.js +0 -1
  1240. package/build/assets/skills-Wg6i0kbu.js +0 -1
  1241. package/build/assets/skills-client-DNd444Bm.js +0 -1
  1242. package/build/assets/skills-plugins-DaGkVI7-.js +0 -1
  1243. package/build/assets/skills-settings-Dlp0WFaT.js +0 -2
  1244. package/build/assets/styled-tooltip-ulgpZDga.js +0 -1
  1245. package/build/assets/suspense-BqBQEuKs.js +0 -1
  1246. package/build/assets/switch-skeleton-C49gVWOQ.js +0 -1
  1247. package/build/assets/task-list-tab-Bz-UlCm2.js +0 -1
  1248. package/build/assets/telemetry-DD3HKMgf.js +0 -2
  1249. package/build/assets/terminal-BwLvVzyJ.js +0 -1
  1250. package/build/assets/toggle-switch-CxW8-lBI.js +0 -1
  1251. package/build/assets/typography-BLf_mRKH.js +0 -1
  1252. package/build/assets/u-check-circle-CxTAJuY9.js +0 -1
  1253. package/build/assets/u-check-circle-half-Bj73jfUG.js +0 -1
  1254. package/build/assets/u-circuit-C-6V9H9C.js +0 -1
  1255. package/build/assets/u-edit-C7OnK2sa.js +0 -1
  1256. package/build/assets/use-acp-credential-form-oehc057O.js +0 -1
  1257. package/build/assets/use-active-conversation-CFXVX2on.js +0 -1
  1258. package/build/assets/use-agent-state-D6xfZA4-.js +0 -1
  1259. package/build/assets/use-backends-health-93yRIOWs.js +0 -1
  1260. package/build/assets/use-breakpoint-Xdy_aZHE.js +0 -1
  1261. package/build/assets/use-click-outside-element-CADb_gCP.js +0 -1
  1262. package/build/assets/use-cloud-current-user-id-CzOXsy04.js +0 -1
  1263. package/build/assets/use-config-oXjEWyb6.js +0 -1
  1264. package/build/assets/use-create-conversation-D-YkgrxS.js +0 -1
  1265. package/build/assets/use-create-secret-CX7Ij7W4.js +0 -1
  1266. package/build/assets/use-event-store-DMRAQQi8.js +0 -1
  1267. package/build/assets/use-handle-plan-click-CwW2Ijc2.js +0 -1
  1268. package/build/assets/use-is-authed-CNbX1KMm.js +0 -1
  1269. package/build/assets/use-launch-skill-in-chat-xI9byRUw.js +0 -1
  1270. package/build/assets/use-llm-profiles-BXRZ2rBh.js +0 -1
  1271. package/build/assets/use-runtime-is-ready-Dwzs9_vp.js +0 -1
  1272. package/build/assets/use-settings-_usWr_qn.js +0 -1
  1273. package/build/assets/use-settings-nav-items-DoB5iH-7.js +0 -16
  1274. package/build/assets/use-skills-BtorhoCN.js +0 -1
  1275. package/build/assets/use-task-list-u46BhYBC.js +0 -1
  1276. package/build/assets/use-tracking-Ca7p71hH.js +0 -1
  1277. package/build/assets/use-user-conversation-U-16WF6G.js +0 -1
  1278. package/build/assets/useMutation-CseCrRRO.js +0 -1
  1279. package/build/assets/useQuery-bowvACed.js +0 -1
  1280. package/build/assets/useTranslation-KhTtKmnv.js +0 -1
  1281. package/build/assets/utils-cRyMoFbz.js +0 -1
  1282. package/build/assets/vendor~conversation-panel~conversation~alert-banner-CjfR7T3x.js +0 -1
  1283. package/build/assets/vendor~entry.client-_zl82x5T.js +0 -1
  1284. package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~dj9x5fm9-CgCGB-3J.js +0 -177
  1285. package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~jfvr34cq-BJdsUTJG.js +0 -1
  1286. package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~m3df9r20-BynFAJ_S.js +0 -1
  1287. package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~nk00xiud-MfCRtPrK.js +0 -9
  1288. package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~ghtfhmuy-BHDILMe2.js +0 -1
  1289. package/build/assets/vendor~root-layout~conversation-panel~conversation-BFZmbXpq.js +0 -1
  1290. package/build/assets/vendor~root-layout~conversation-panel~conversation~index-BPY-kNjK.js +0 -1
  1291. package/build/assets/vendor~root-layout~home~conversation-panel~conversation-BhWqQNmF.js +0 -1
  1292. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~cfyi58ut-CnnEa0dP.js +0 -1
  1293. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~clac83qc-DMX6XUwI.js +0 -2
  1294. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~ldu51w4e-Cqp6k3RG.js +0 -1
  1295. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~ldu51w4e-DS4GWhCz.js +0 -9
  1296. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~ji28rqgb-DVffa9Ks.js +0 -48
  1297. package/build/assets/vendor~root-layout~home~mcp~automations-list~onboarding-modal-BzR6ypP3.js +0 -1
  1298. package/build/assets/vendor~root-layout~home~mcp~llm-settings~agent-settings~condenser-settings~verification-set~hzfcl1q6-BcvHZmEZ.js +0 -2
  1299. package/build/assets/vendor~root-layout~home~mcp~llm-settings~agent-settings~condenser-settings~verification-set~hzfcl1q6-Cuvp6wqR.js +0 -14
  1300. package/build/assets/verification-settings-DKZnUHD6.js +0 -1
  1301. package/build/assets/x-DpnGZyVW.js +0 -1
  1302. package/build/assets/x-mark-x3tvCZzc.js +0 -1
  1303. package/dist/components/features/analytics/analytics-consent-form-modal.d.ts +0 -5
  1304. package/dist/components/features/chat/switch-profile-button.cjs +0 -2
  1305. package/dist/components/features/chat/switch-profile-button.cjs.map +0 -1
  1306. package/dist/components/features/chat/switch-profile-button.d.ts +0 -1
  1307. package/dist/components/features/chat/switch-profile-button.js +0 -48
  1308. package/dist/components/features/chat/switch-profile-button.js.map +0 -1
  1309. package/dist/components/features/chat/switch-profile-context-menu.cjs +0 -2
  1310. package/dist/components/features/chat/switch-profile-context-menu.cjs.map +0 -1
  1311. package/dist/components/features/chat/switch-profile-context-menu.d.ts +0 -9
  1312. package/dist/components/features/chat/switch-profile-context-menu.js +0 -106
  1313. package/dist/components/features/chat/switch-profile-context-menu.js.map +0 -1
  1314. package/dist/components/features/onboarding/is-backend-llm-ready.d.ts +0 -30
  1315. package/dist/icons/u-circuit.cjs +0 -2
  1316. package/dist/icons/u-circuit.cjs.map +0 -1
  1317. package/dist/icons/u-circuit.js +0 -19
  1318. package/dist/icons/u-circuit.js.map +0 -1
  1319. package/dist/node_modules/@openhands/extensions/integrations/catalog/clickup.cjs +0 -2
  1320. package/dist/node_modules/@openhands/extensions/integrations/catalog/clickup.cjs.map +0 -1
  1321. package/dist/node_modules/@openhands/extensions/integrations/catalog/clickup.js +0 -35
  1322. package/dist/node_modules/@openhands/extensions/integrations/catalog/clickup.js.map +0 -1
  1323. package/dist/node_modules/@openhands/extensions/integrations/catalog/dropbox.cjs +0 -2
  1324. package/dist/node_modules/@openhands/extensions/integrations/catalog/dropbox.cjs.map +0 -1
  1325. package/dist/node_modules/@openhands/extensions/integrations/catalog/dropbox.js +0 -35
  1326. package/dist/node_modules/@openhands/extensions/integrations/catalog/dropbox.js.map +0 -1
  1327. package/dist/node_modules/@openhands/extensions/integrations/catalog/freshdesk.cjs +0 -2
  1328. package/dist/node_modules/@openhands/extensions/integrations/catalog/freshdesk.cjs.map +0 -1
  1329. package/dist/node_modules/@openhands/extensions/integrations/catalog/freshdesk.js +0 -35
  1330. package/dist/node_modules/@openhands/extensions/integrations/catalog/freshdesk.js.map +0 -1
  1331. package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs +0 -2
  1332. package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs.map +0 -1
  1333. package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js +0 -35
  1334. package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js.map +0 -1
  1335. package/dist/node_modules/@openhands/extensions/integrations/catalog/mailchimp.cjs +0 -2
  1336. package/dist/node_modules/@openhands/extensions/integrations/catalog/mailchimp.cjs.map +0 -1
  1337. package/dist/node_modules/@openhands/extensions/integrations/catalog/mailchimp.js +0 -35
  1338. package/dist/node_modules/@openhands/extensions/integrations/catalog/mailchimp.js.map +0 -1
  1339. package/dist/node_modules/@openhands/extensions/integrations/catalog/pipedrive.cjs +0 -2
  1340. package/dist/node_modules/@openhands/extensions/integrations/catalog/pipedrive.cjs.map +0 -1
  1341. package/dist/node_modules/@openhands/extensions/integrations/catalog/pipedrive.js +0 -35
  1342. package/dist/node_modules/@openhands/extensions/integrations/catalog/pipedrive.js.map +0 -1
  1343. package/dist/node_modules/@openhands/extensions/integrations/catalog/plaid.cjs +0 -2
  1344. package/dist/node_modules/@openhands/extensions/integrations/catalog/plaid.cjs.map +0 -1
  1345. package/dist/node_modules/@openhands/extensions/integrations/catalog/plaid.js +0 -28
  1346. package/dist/node_modules/@openhands/extensions/integrations/catalog/plaid.js.map +0 -1
  1347. package/dist/node_modules/@openhands/extensions/integrations/catalog/servicenow.cjs +0 -2
  1348. package/dist/node_modules/@openhands/extensions/integrations/catalog/servicenow.cjs.map +0 -1
  1349. package/dist/node_modules/@openhands/extensions/integrations/catalog/servicenow.js +0 -35
  1350. package/dist/node_modules/@openhands/extensions/integrations/catalog/servicenow.js.map +0 -1
  1351. package/dist/node_modules/@openhands/extensions/integrations/catalog/shopify.cjs +0 -2
  1352. package/dist/node_modules/@openhands/extensions/integrations/catalog/shopify.cjs.map +0 -1
  1353. package/dist/node_modules/@openhands/extensions/integrations/catalog/shopify.js +0 -35
  1354. package/dist/node_modules/@openhands/extensions/integrations/catalog/shopify.js.map +0 -1
  1355. package/dist/node_modules/@openhands/extensions/integrations/catalog/zendesk.cjs +0 -2
  1356. package/dist/node_modules/@openhands/extensions/integrations/catalog/zendesk.cjs.map +0 -1
  1357. package/dist/node_modules/@openhands/extensions/integrations/catalog/zendesk.js +0 -35
  1358. package/dist/node_modules/@openhands/extensions/integrations/catalog/zendesk.js.map +0 -1
  1359. /package/build/assets/{agent-server-ui-style-scope-CIDFDeQb.js → agent-server-ui-style-scope-COnDHTm5.js} +0 -0
  1360. /package/build/assets/{automation-DNgDxqtq.js → automation-BU8zu-FP.js} +0 -0
  1361. /package/build/assets/{common-KeiA2Rod.js → common-Dh7OqABE.js} +0 -0
  1362. /package/build/assets/{environment-switch-store-BpKxp6Xq.js → environment-switch-store-DkjlKWzN.js} +0 -0
  1363. /package/build/assets/{extension-module-card-classes-DvvyImGv.js → extension-module-card-classes-9V3J9J_b.js} +0 -0
  1364. /package/build/assets/{git-status-mapper-B3_HbzUT.js → git-status-mapper-BI8FyUVp.js} +0 -0
  1365. /package/build/assets/{handle-capture-consent-BChvj6mt.js → handle-capture-consent-CPMXU29K.js} +0 -0
  1366. /package/build/assets/{llm-subscription-C1xDoa3K.js → llm-subscription-DtsX5Lhg.js} +0 -0
  1367. /package/build/assets/{map-provider-MonJL5SS.js → map-provider-BM2SJarp.js} +0 -0
  1368. /package/build/assets/{objectWithoutPropertiesLoose-BRYudkUn.js → objectWithoutPropertiesLoose-BgYIAs2y.js} +0 -0
  1369. /package/build/assets/{rolldown-runtime-wFmyQBCi.js → rolldown-runtime-BFRubm34.js} +0 -0
  1370. /package/build/assets/{settings-like-page-layout-classes-DNg2vKSM.js → settings-like-page-layout-classes-DENKlZpD.js} +0 -0
  1371. /package/build/assets/{v4-BMWDcIWQ.js → v4-DbCkTSoU.js} +0 -0
  1372. /package/build/assets/{vendor~browser-yZEspfT9.js → vendor~browser-Dqd33JyP.js} +0 -0
  1373. /package/build/assets/{vendor~terminal-CcUoOdAH.js → vendor~terminal-aeP3PnKf.js} +0 -0
@@ -6,147 +6,164 @@ import { ContextMenu as i } from "../../../ui/context-menu.js";
6
6
  import { ContextMenuListItem as a } from "../context-menu/context-menu-list-item.js";
7
7
  import { useClickOutsideElement as o } from "../../../hooks/use-click-outside-element.js";
8
8
  import { Divider as s } from "../../../ui/divider.js";
9
- import c from "../../../icons/settings.js";
10
- import { useUserProviders as l } from "../../../hooks/use-user-providers.js";
11
- import u from "../../../icons/u-code-branch.js";
12
- import d from "../../../icons/skills.js";
9
+ import { useUserProviders as c } from "../../../hooks/use-user-providers.js";
10
+ import l from "../../../icons/u-code-branch.js";
11
+ import u from "../../../icons/skills.js";
12
+ import d from "../../../icons/u-puzzle-piece.js";
13
13
  import f from "../../../icons/fishing-hook.js";
14
14
  import p from "../../../icons/u-tools.js";
15
- import m from "../../../icons/carret-right-fill.js";
16
- import { ToolsContextMenuIconText as h } from "./tools-context-menu-icon-text.js";
17
- import { GitToolsSubmenu as g } from "./git-tools-submenu.js";
18
- import { MacrosSubmenu as _ } from "./macros-submenu.js";
19
- import { ArchivedDisabledTooltip as v } from "../context-menu/archived-disabled-tooltip.js";
20
- import { useIsArchivedConversation as y } from "../../../hooks/use-is-archived-conversation.js";
21
- import { useState as b } from "react";
22
- import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
15
+ import m from "../../../icons/settings.js";
16
+ import h from "../../../icons/carret-right-fill.js";
17
+ import { ToolsContextMenuIconText as g } from "./tools-context-menu-icon-text.js";
18
+ import { GitToolsSubmenu as _ } from "./git-tools-submenu.js";
19
+ import { MacrosSubmenu as v } from "./macros-submenu.js";
20
+ import { ArchivedDisabledTooltip as y } from "../context-menu/archived-disabled-tooltip.js";
21
+ import { useIsArchivedConversation as b } from "../../../hooks/use-is-archived-conversation.js";
22
+ import { useState as x } from "react";
23
+ import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
23
24
  //#region src/components/features/controls/tools-context-menu.tsx
24
- function w({ onClose: w, onShowSkills: T, onShowHooks: E, onShowAgentTools: D, shouldShowAgentTools: O = !0, shouldShowHooks: k = !1, footerAction: A }) {
25
- let { t: j } = e("openhands"), { data: M } = r(), { providers: N } = l(), P = y(), [F, I] = b(null), L = !!M?.selected_repository, R = N.length > 0, z = L && R, B = (e) => {
26
- P || I(F === e ? null : e);
27
- }, V = () => {
28
- I(null), w();
25
+ function T({ onClose: T, onShowSkills: E, onShowPlugins: D, onShowHooks: O, onShowAgentTools: k, shouldShowAgentTools: A = !0, shouldShowHooks: j = !1, shouldShowPlugins: M = !1, footerAction: N }) {
26
+ let { t: P } = e("openhands"), { data: F } = r(), { providers: I } = c(), L = b(), [R, z] = x(null), B = !!F?.selected_repository, V = I.length > 0, H = B && V, U = (e) => {
27
+ L || z(R === e ? null : e);
28
+ }, W = () => {
29
+ z(null), T();
29
30
  };
30
- return /* @__PURE__ */ C(i, {
31
- ref: o(V),
31
+ return /* @__PURE__ */ w(i, {
32
+ ref: o(W),
32
33
  testId: "tools-context-menu",
33
34
  position: "top",
34
35
  alignment: "left",
35
36
  className: "left-[-16px] mb-2 bottom-full overflow-visible min-w-[200px]",
36
37
  children: [
37
- z && /* @__PURE__ */ C("div", {
38
+ H && /* @__PURE__ */ w("div", {
38
39
  className: "relative group/git",
39
- children: [/* @__PURE__ */ S(v, {
40
- isDisabled: P,
41
- children: /* @__PURE__ */ S(a, {
40
+ children: [/* @__PURE__ */ C(y, {
41
+ isDisabled: L,
42
+ children: /* @__PURE__ */ C(a, {
42
43
  testId: "git-tools-button",
43
- onClick: () => B("git"),
44
- isDisabled: P,
45
- children: /* @__PURE__ */ S(h, {
46
- icon: /* @__PURE__ */ S(u, {
44
+ onClick: () => U("git"),
45
+ isDisabled: L,
46
+ children: /* @__PURE__ */ C(g, {
47
+ icon: /* @__PURE__ */ C(l, {
47
48
  width: 16,
48
49
  height: 16
49
50
  }),
50
- text: j(t.COMMON$GIT_TOOLS),
51
- rightIcon: /* @__PURE__ */ S(m, {
51
+ text: P(t.COMMON$GIT_TOOLS),
52
+ rightIcon: /* @__PURE__ */ C(h, {
52
53
  width: 10,
53
54
  height: 10
54
55
  })
55
56
  })
56
57
  })
57
- }), !P && /* @__PURE__ */ S("div", {
58
- className: n("absolute left-full top-[-6px] z-60 opacity-0 invisible pointer-events-none transition-all duration-200 ml-[1px]", "group-hover/git:opacity-100 group-hover/git:visible group-hover/git:pointer-events-auto", "hover:opacity-100 hover:visible hover:pointer-events-auto", F === "git" && "opacity-100 visible pointer-events-auto"),
59
- children: /* @__PURE__ */ S(g, { onClose: V })
58
+ }), !L && /* @__PURE__ */ C("div", {
59
+ className: n("absolute left-full top-[-6px] z-60 opacity-0 invisible pointer-events-none transition-all duration-200 ml-[1px]", "group-hover/git:opacity-100 group-hover/git:visible group-hover/git:pointer-events-auto", "hover:opacity-100 hover:visible hover:pointer-events-auto", R === "git" && "opacity-100 visible pointer-events-auto"),
60
+ children: /* @__PURE__ */ C(_, { onClose: W })
60
61
  })]
61
62
  }),
62
- /* @__PURE__ */ C("div", {
63
+ /* @__PURE__ */ w("div", {
63
64
  className: "relative group/macros",
64
- children: [/* @__PURE__ */ S(v, {
65
- isDisabled: P,
66
- children: /* @__PURE__ */ S(a, {
65
+ children: [/* @__PURE__ */ C(y, {
66
+ isDisabled: L,
67
+ children: /* @__PURE__ */ C(a, {
67
68
  testId: "macros-button",
68
- onClick: () => B("macros"),
69
- isDisabled: P,
70
- children: /* @__PURE__ */ S(h, {
71
- icon: /* @__PURE__ */ S(c, {
69
+ onClick: () => U("macros"),
70
+ isDisabled: L,
71
+ children: /* @__PURE__ */ C(g, {
72
+ icon: /* @__PURE__ */ C(m, {
72
73
  width: 16,
73
74
  height: 16
74
75
  }),
75
- text: j(t.COMMON$MACROS),
76
- rightIcon: /* @__PURE__ */ S(m, {
76
+ text: P(t.COMMON$MACROS),
77
+ rightIcon: /* @__PURE__ */ C(h, {
77
78
  width: 10,
78
79
  height: 10
79
80
  })
80
81
  })
81
82
  })
82
- }), !P && /* @__PURE__ */ S("div", {
83
- className: n("absolute left-full top-[-4px] z-60 opacity-0 invisible pointer-events-none transition-all duration-200 ml-[1px]", "group-hover/macros:opacity-100 group-hover/macros:visible group-hover/macros:pointer-events-auto", "hover:opacity-100 hover:visible hover:pointer-events-auto", F === "macros" && "opacity-100 visible pointer-events-auto"),
84
- children: /* @__PURE__ */ S(_, { onClose: V })
83
+ }), !L && /* @__PURE__ */ C("div", {
84
+ className: n("absolute left-full top-[-4px] z-60 opacity-0 invisible pointer-events-none transition-all duration-200 ml-[1px]", "group-hover/macros:opacity-100 group-hover/macros:visible group-hover/macros:pointer-events-auto", "hover:opacity-100 hover:visible hover:pointer-events-auto", R === "macros" && "opacity-100 visible pointer-events-auto"),
85
+ children: /* @__PURE__ */ C(v, { onClose: W })
85
86
  })]
86
87
  }),
87
- O && /* @__PURE__ */ S(s, { inset: "menu" }),
88
- /* @__PURE__ */ S(v, {
89
- isDisabled: P,
90
- children: /* @__PURE__ */ S(a, {
88
+ A && /* @__PURE__ */ C(s, { inset: "menu" }),
89
+ /* @__PURE__ */ C(y, {
90
+ isDisabled: L,
91
+ children: /* @__PURE__ */ C(a, {
91
92
  testId: "show-skills-button",
92
- onClick: T,
93
- isDisabled: P,
94
- children: /* @__PURE__ */ S(h, {
95
- icon: /* @__PURE__ */ S(d, {
93
+ onClick: E,
94
+ isDisabled: L,
95
+ children: /* @__PURE__ */ C(g, {
96
+ icon: /* @__PURE__ */ C(u, {
96
97
  width: 16,
97
98
  height: 16,
98
99
  className: "stroke-[1.75]",
99
100
  "aria-hidden": !0
100
101
  }),
101
- text: j(t.CONVERSATION$SHOW_SKILLS)
102
+ text: P(t.CONVERSATION$SHOW_SKILLS)
102
103
  })
103
104
  })
104
105
  }),
105
- k && /* @__PURE__ */ S(v, {
106
- isDisabled: P,
107
- children: /* @__PURE__ */ S(a, {
106
+ M && /* @__PURE__ */ C(y, {
107
+ isDisabled: L,
108
+ children: /* @__PURE__ */ C(a, {
109
+ testId: "show-plugins-button",
110
+ onClick: D,
111
+ isDisabled: L,
112
+ children: /* @__PURE__ */ C(g, {
113
+ icon: /* @__PURE__ */ C(d, {
114
+ width: 16,
115
+ height: 16,
116
+ "aria-hidden": !0
117
+ }),
118
+ text: P(t.CONVERSATION$SHOW_PLUGINS)
119
+ })
120
+ })
121
+ }),
122
+ j && /* @__PURE__ */ C(y, {
123
+ isDisabled: L,
124
+ children: /* @__PURE__ */ C(a, {
108
125
  testId: "show-hooks-button",
109
- onClick: E,
110
- isDisabled: P,
111
- children: /* @__PURE__ */ S(h, {
112
- icon: /* @__PURE__ */ S(f, {
126
+ onClick: O,
127
+ isDisabled: L,
128
+ children: /* @__PURE__ */ C(g, {
129
+ icon: /* @__PURE__ */ C(f, {
113
130
  width: 16,
114
131
  height: 16,
115
132
  "aria-hidden": !0
116
133
  }),
117
- text: j(t.CONVERSATION$SHOW_HOOKS)
134
+ text: P(t.CONVERSATION$SHOW_HOOKS)
118
135
  })
119
136
  })
120
137
  }),
121
- O && /* @__PURE__ */ S(v, {
122
- isDisabled: P,
123
- children: /* @__PURE__ */ S(a, {
138
+ A && /* @__PURE__ */ C(y, {
139
+ isDisabled: L,
140
+ children: /* @__PURE__ */ C(a, {
124
141
  testId: "show-agent-tools-button",
125
- onClick: D,
126
- isDisabled: P,
127
- children: /* @__PURE__ */ S(h, {
128
- icon: /* @__PURE__ */ S(p, {
142
+ onClick: k,
143
+ isDisabled: L,
144
+ children: /* @__PURE__ */ C(g, {
145
+ icon: /* @__PURE__ */ C(p, {
129
146
  width: 16,
130
147
  height: 16
131
148
  }),
132
- text: j(t.BUTTON$SHOW_AGENT_TOOLS_AND_METADATA)
149
+ text: P(t.BUTTON$SHOW_AGENT_TOOLS_AND_METADATA)
133
150
  })
134
151
  })
135
152
  }),
136
- A && /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S(s, {}), /* @__PURE__ */ S(a, {
137
- testId: A.testId,
153
+ N && /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ C(s, {}), /* @__PURE__ */ C(a, {
154
+ testId: N.testId,
138
155
  onClick: (e) => {
139
- e.preventDefault(), e.stopPropagation(), A.onClick(), V();
156
+ e.preventDefault(), e.stopPropagation(), N.onClick(), W();
140
157
  },
141
- children: /* @__PURE__ */ S(h, {
142
- icon: A.icon,
143
- text: A.label
158
+ children: /* @__PURE__ */ C(g, {
159
+ icon: N.icon,
160
+ text: N.label
144
161
  })
145
162
  })] })
146
163
  ]
147
164
  });
148
165
  }
149
166
  //#endregion
150
- export { w as ToolsContextMenu };
167
+ export { T as ToolsContextMenu };
151
168
 
152
169
  //# sourceMappingURL=tools-context-menu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools-context-menu.js","names":[],"sources":["../../../../src/components/features/controls/tools-context-menu.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useClickOutsideElement } from \"#/hooks/use-click-outside-element\";\nimport { useActiveConversation } from \"#/hooks/query/use-active-conversation\";\nimport { useUserProviders } from \"#/hooks/use-user-providers\";\nimport { cn } from \"#/utils/utils\";\nimport { ContextMenu } from \"#/ui/context-menu\";\nimport { ContextMenuListItem } from \"../context-menu/context-menu-list-item\";\nimport { Divider } from \"#/ui/divider\";\nimport { I18nKey } from \"#/i18n/declaration\";\n\nimport CodeBranchIcon from \"#/icons/u-code-branch.svg?react\";\nimport SkillsIcon from \"#/icons/skills.svg?react\";\nimport FishingHookIcon from \"#/icons/fishing-hook.svg?react\";\nimport ToolsIcon from \"#/icons/u-tools.svg?react\";\nimport SettingsIcon from \"#/icons/settings.svg?react\";\nimport CarretRightFillIcon from \"#/icons/carret-right-fill.svg?react\";\nimport { ToolsContextMenuIconText } from \"./tools-context-menu-icon-text\";\nimport { GitToolsSubmenu } from \"./git-tools-submenu\";\nimport { MacrosSubmenu } from \"./macros-submenu\";\nimport { ArchivedDisabledTooltip } from \"../context-menu/archived-disabled-tooltip\";\nimport { useIsArchivedConversation } from \"#/hooks/use-is-archived-conversation\";\n\ninterface ToolsContextMenuProps {\n onClose: () => void;\n onShowSkills: (event: React.MouseEvent<HTMLButtonElement>) => void;\n onShowHooks: (event: React.MouseEvent<HTMLButtonElement>) => void;\n onShowAgentTools: (event: React.MouseEvent<HTMLButtonElement>) => void;\n shouldShowAgentTools?: boolean;\n shouldShowHooks?: boolean;\n /** When set, renders a divider and this action as the last menu item. */\n footerAction?: {\n testId: string;\n icon: React.ReactNode;\n label: string;\n onClick: () => void;\n };\n}\n\nexport function ToolsContextMenu({\n onClose,\n onShowSkills,\n onShowHooks,\n onShowAgentTools,\n shouldShowAgentTools = true,\n shouldShowHooks = false,\n footerAction,\n}: ToolsContextMenuProps) {\n const { t } = useTranslation(\"openhands\");\n const { data: conversation } = useActiveConversation();\n const { providers } = useUserProviders();\n const isArchivedConversation = useIsArchivedConversation();\n\n const [activeSubmenu, setActiveSubmenu] = useState<\"git\" | \"macros\" | null>(\n null,\n );\n\n const hasRepository = !!conversation?.selected_repository;\n const providersAreSet = providers.length > 0;\n const showGitTools = hasRepository && providersAreSet;\n\n const handleSubmenuClick = (submenu: \"git\" | \"macros\") => {\n if (isArchivedConversation) {\n return;\n }\n setActiveSubmenu(activeSubmenu === submenu ? null : submenu);\n };\n\n const handleClose = () => {\n setActiveSubmenu(null);\n onClose();\n };\n\n const ref = useClickOutsideElement<HTMLUListElement>(handleClose);\n\n return (\n <ContextMenu\n ref={ref}\n testId=\"tools-context-menu\"\n position=\"top\"\n alignment=\"left\"\n className=\"left-[-16px] mb-2 bottom-full overflow-visible min-w-[200px]\"\n >\n {/* Git Tools */}\n {showGitTools && (\n <div className=\"relative group/git\">\n <ArchivedDisabledTooltip isDisabled={isArchivedConversation}>\n <ContextMenuListItem\n testId=\"git-tools-button\"\n onClick={() => handleSubmenuClick(\"git\")}\n isDisabled={isArchivedConversation}\n >\n <ToolsContextMenuIconText\n icon={<CodeBranchIcon width={16} height={16} />}\n text={t(I18nKey.COMMON$GIT_TOOLS)}\n rightIcon={<CarretRightFillIcon width={10} height={10} />}\n />\n </ContextMenuListItem>\n </ArchivedDisabledTooltip>\n {!isArchivedConversation && (\n <div\n className={cn(\n \"absolute left-full top-[-6px] z-60 opacity-0 invisible pointer-events-none transition-all duration-200 ml-[1px]\",\n \"group-hover/git:opacity-100 group-hover/git:visible group-hover/git:pointer-events-auto\",\n \"hover:opacity-100 hover:visible hover:pointer-events-auto\",\n activeSubmenu === \"git\" &&\n \"opacity-100 visible pointer-events-auto\",\n )}\n >\n <GitToolsSubmenu onClose={handleClose} />\n </div>\n )}\n </div>\n )}\n\n {/* Macros */}\n <div className=\"relative group/macros\">\n <ArchivedDisabledTooltip isDisabled={isArchivedConversation}>\n <ContextMenuListItem\n testId=\"macros-button\"\n onClick={() => handleSubmenuClick(\"macros\")}\n isDisabled={isArchivedConversation}\n >\n <ToolsContextMenuIconText\n icon={<SettingsIcon width={16} height={16} />}\n text={t(I18nKey.COMMON$MACROS)}\n rightIcon={<CarretRightFillIcon width={10} height={10} />}\n />\n </ContextMenuListItem>\n </ArchivedDisabledTooltip>\n {!isArchivedConversation && (\n <div\n className={cn(\n \"absolute left-full top-[-4px] z-60 opacity-0 invisible pointer-events-none transition-all duration-200 ml-[1px]\",\n \"group-hover/macros:opacity-100 group-hover/macros:visible group-hover/macros:pointer-events-auto\",\n \"hover:opacity-100 hover:visible hover:pointer-events-auto\",\n activeSubmenu === \"macros\" &&\n \"opacity-100 visible pointer-events-auto\",\n )}\n >\n <MacrosSubmenu onClose={handleClose} />\n </div>\n )}\n </div>\n\n {shouldShowAgentTools && <Divider inset=\"menu\" />}\n\n <ArchivedDisabledTooltip isDisabled={isArchivedConversation}>\n <ContextMenuListItem\n testId=\"show-skills-button\"\n onClick={onShowSkills}\n isDisabled={isArchivedConversation}\n >\n <ToolsContextMenuIconText\n icon={\n <SkillsIcon\n width={16}\n height={16}\n className=\"stroke-[1.75]\"\n aria-hidden\n />\n }\n text={t(I18nKey.CONVERSATION$SHOW_SKILLS)}\n />\n </ContextMenuListItem>\n </ArchivedDisabledTooltip>\n\n {/* Show Hooks - Only show for V1 conversations */}\n {shouldShowHooks && (\n <ArchivedDisabledTooltip isDisabled={isArchivedConversation}>\n <ContextMenuListItem\n testId=\"show-hooks-button\"\n onClick={onShowHooks}\n isDisabled={isArchivedConversation}\n >\n <ToolsContextMenuIconText\n icon={<FishingHookIcon width={16} height={16} aria-hidden />}\n text={t(I18nKey.CONVERSATION$SHOW_HOOKS)}\n />\n </ContextMenuListItem>\n </ArchivedDisabledTooltip>\n )}\n\n {/* Show Agent Tools and Metadata - Only show if system message is available */}\n {shouldShowAgentTools && (\n <ArchivedDisabledTooltip isDisabled={isArchivedConversation}>\n <ContextMenuListItem\n testId=\"show-agent-tools-button\"\n onClick={onShowAgentTools}\n isDisabled={isArchivedConversation}\n >\n <ToolsContextMenuIconText\n icon={<ToolsIcon width={16} height={16} />}\n text={t(I18nKey.BUTTON$SHOW_AGENT_TOOLS_AND_METADATA)}\n />\n </ContextMenuListItem>\n </ArchivedDisabledTooltip>\n )}\n\n {footerAction && (\n <>\n <Divider />\n <ContextMenuListItem\n testId={footerAction.testId}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n footerAction.onClick();\n handleClose();\n }}\n >\n <ToolsContextMenuIconText\n icon={footerAction.icon}\n text={footerAction.label}\n />\n </ContextMenuListItem>\n </>\n )}\n </ContextMenu>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAuCA,SAAgB,EAAiB,EAC/B,YACA,iBACA,gBACA,qBACA,0BAAuB,IACvB,qBAAkB,IAClB,mBACwB;CACxB,IAAM,EAAE,SAAM,EAAe,YAAY,EACnC,EAAE,MAAM,MAAiB,GAAuB,EAChD,EAAE,iBAAc,GAAkB,EAClC,IAAyB,GAA2B,EAEpD,CAAC,GAAe,KAAoB,EACxC,KACD,EAEK,IAAgB,CAAC,CAAC,GAAc,qBAChC,IAAkB,EAAU,SAAS,GACrC,IAAe,KAAiB,GAEhC,KAAsB,MAA8B;AACpD,OAGJ,EAAiB,MAAkB,IAAU,OAAO,EAAQ;IAGxD,UAAoB;AAExB,EADA,EAAiB,KAAK,EACtB,GAAS;;AAKX,QACE,kBAAC,GAAD;EACO,KAJG,EAAyC,EAI5C;EACL,QAAO;EACP,UAAS;EACT,WAAU;EACV,WAAU;YALZ;GAQG,KACC,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD;KAAyB,YAAY;eACnC,kBAAC,GAAD;MACE,QAAO;MACP,eAAe,EAAmB,MAAM;MACxC,YAAY;gBAEZ,kBAAC,GAAD;OACE,MAAM,kBAAC,GAAD;QAAgB,OAAO;QAAI,QAAQ;QAAM,CAAA;OAC/C,MAAM,EAAE,EAAQ,iBAAiB;OACjC,WAAW,kBAAC,GAAD;QAAqB,OAAO;QAAI,QAAQ;QAAM,CAAA;OACzD,CAAA;MACkB,CAAA;KACE,CAAA,EACzB,CAAC,KACA,kBAAC,OAAD;KACE,WAAW,EACT,mHACA,2FACA,6DACA,MAAkB,SAChB,0CACH;eAED,kBAAC,GAAD,EAAiB,SAAS,GAAe,CAAA;KACrC,CAAA,CAEJ;;GAIR,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD;KAAyB,YAAY;eACnC,kBAAC,GAAD;MACE,QAAO;MACP,eAAe,EAAmB,SAAS;MAC3C,YAAY;gBAEZ,kBAAC,GAAD;OACE,MAAM,kBAAC,GAAD;QAAc,OAAO;QAAI,QAAQ;QAAM,CAAA;OAC7C,MAAM,EAAE,EAAQ,cAAc;OAC9B,WAAW,kBAAC,GAAD;QAAqB,OAAO;QAAI,QAAQ;QAAM,CAAA;OACzD,CAAA;MACkB,CAAA;KACE,CAAA,EACzB,CAAC,KACA,kBAAC,OAAD;KACE,WAAW,EACT,mHACA,oGACA,6DACA,MAAkB,YAChB,0CACH;eAED,kBAAC,GAAD,EAAe,SAAS,GAAe,CAAA;KACnC,CAAA,CAEJ;;GAEL,KAAwB,kBAAC,GAAD,EAAS,OAAM,QAAS,CAAA;GAEjD,kBAAC,GAAD;IAAyB,YAAY;cACnC,kBAAC,GAAD;KACE,QAAO;KACP,SAAS;KACT,YAAY;eAEZ,kBAAC,GAAD;MACE,MACE,kBAAC,GAAD;OACE,OAAO;OACP,QAAQ;OACR,WAAU;OACV,eAAA;OACA,CAAA;MAEJ,MAAM,EAAE,EAAQ,yBAAyB;MACzC,CAAA;KACkB,CAAA;IACE,CAAA;GAGzB,KACC,kBAAC,GAAD;IAAyB,YAAY;cACnC,kBAAC,GAAD;KACE,QAAO;KACP,SAAS;KACT,YAAY;eAEZ,kBAAC,GAAD;MACE,MAAM,kBAAC,GAAD;OAAiB,OAAO;OAAI,QAAQ;OAAI,eAAA;OAAc,CAAA;MAC5D,MAAM,EAAE,EAAQ,wBAAwB;MACxC,CAAA;KACkB,CAAA;IACE,CAAA;GAI3B,KACC,kBAAC,GAAD;IAAyB,YAAY;cACnC,kBAAC,GAAD;KACE,QAAO;KACP,SAAS;KACT,YAAY;eAEZ,kBAAC,GAAD;MACE,MAAM,kBAAC,GAAD;OAAW,OAAO;OAAI,QAAQ;OAAM,CAAA;MAC1C,MAAM,EAAE,EAAQ,qCAAqC;MACrD,CAAA;KACkB,CAAA;IACE,CAAA;GAG3B,KACC,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD,EAAW,CAAA,EACX,kBAAC,GAAD;IACE,QAAQ,EAAa;IACrB,UAAU,MAAU;AAIlB,KAHA,EAAM,gBAAgB,EACtB,EAAM,iBAAiB,EACvB,EAAa,SAAS,EACtB,GAAa;;cAGf,kBAAC,GAAD;KACE,MAAM,EAAa;KACnB,MAAM,EAAa;KACnB,CAAA;IACkB,CAAA,CACrB,EAAA,CAAA;GAEO"}
1
+ {"version":3,"file":"tools-context-menu.js","names":[],"sources":["../../../../src/components/features/controls/tools-context-menu.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useClickOutsideElement } from \"#/hooks/use-click-outside-element\";\nimport { useActiveConversation } from \"#/hooks/query/use-active-conversation\";\nimport { useUserProviders } from \"#/hooks/use-user-providers\";\nimport { cn } from \"#/utils/utils\";\nimport { ContextMenu } from \"#/ui/context-menu\";\nimport { ContextMenuListItem } from \"../context-menu/context-menu-list-item\";\nimport { Divider } from \"#/ui/divider\";\nimport { I18nKey } from \"#/i18n/declaration\";\n\nimport CodeBranchIcon from \"#/icons/u-code-branch.svg?react\";\nimport SkillsIcon from \"#/icons/skills.svg?react\";\nimport PuzzleIcon from \"#/icons/u-puzzle-piece.svg?react\";\nimport FishingHookIcon from \"#/icons/fishing-hook.svg?react\";\nimport ToolsIcon from \"#/icons/u-tools.svg?react\";\nimport SettingsIcon from \"#/icons/settings.svg?react\";\nimport CarretRightFillIcon from \"#/icons/carret-right-fill.svg?react\";\nimport { ToolsContextMenuIconText } from \"./tools-context-menu-icon-text\";\nimport { GitToolsSubmenu } from \"./git-tools-submenu\";\nimport { MacrosSubmenu } from \"./macros-submenu\";\nimport { ArchivedDisabledTooltip } from \"../context-menu/archived-disabled-tooltip\";\nimport { useIsArchivedConversation } from \"#/hooks/use-is-archived-conversation\";\n\ninterface ToolsContextMenuProps {\n onClose: () => void;\n onShowSkills: (event: React.MouseEvent<HTMLButtonElement>) => void;\n onShowPlugins: (event: React.MouseEvent<HTMLButtonElement>) => void;\n onShowHooks: (event: React.MouseEvent<HTMLButtonElement>) => void;\n onShowAgentTools: (event: React.MouseEvent<HTMLButtonElement>) => void;\n shouldShowAgentTools?: boolean;\n shouldShowHooks?: boolean;\n shouldShowPlugins?: boolean;\n /** When set, renders a divider and this action as the last menu item. */\n footerAction?: {\n testId: string;\n icon: React.ReactNode;\n label: string;\n onClick: () => void;\n };\n}\n\nexport function ToolsContextMenu({\n onClose,\n onShowSkills,\n onShowPlugins,\n onShowHooks,\n onShowAgentTools,\n shouldShowAgentTools = true,\n shouldShowHooks = false,\n shouldShowPlugins = false,\n footerAction,\n}: ToolsContextMenuProps) {\n const { t } = useTranslation(\"openhands\");\n const { data: conversation } = useActiveConversation();\n const { providers } = useUserProviders();\n const isArchivedConversation = useIsArchivedConversation();\n\n const [activeSubmenu, setActiveSubmenu] = useState<\"git\" | \"macros\" | null>(\n null,\n );\n\n const hasRepository = !!conversation?.selected_repository;\n const providersAreSet = providers.length > 0;\n const showGitTools = hasRepository && providersAreSet;\n\n const handleSubmenuClick = (submenu: \"git\" | \"macros\") => {\n if (isArchivedConversation) {\n return;\n }\n setActiveSubmenu(activeSubmenu === submenu ? null : submenu);\n };\n\n const handleClose = () => {\n setActiveSubmenu(null);\n onClose();\n };\n\n const ref = useClickOutsideElement<HTMLUListElement>(handleClose);\n\n return (\n <ContextMenu\n ref={ref}\n testId=\"tools-context-menu\"\n position=\"top\"\n alignment=\"left\"\n className=\"left-[-16px] mb-2 bottom-full overflow-visible min-w-[200px]\"\n >\n {/* Git Tools */}\n {showGitTools && (\n <div className=\"relative group/git\">\n <ArchivedDisabledTooltip isDisabled={isArchivedConversation}>\n <ContextMenuListItem\n testId=\"git-tools-button\"\n onClick={() => handleSubmenuClick(\"git\")}\n isDisabled={isArchivedConversation}\n >\n <ToolsContextMenuIconText\n icon={<CodeBranchIcon width={16} height={16} />}\n text={t(I18nKey.COMMON$GIT_TOOLS)}\n rightIcon={<CarretRightFillIcon width={10} height={10} />}\n />\n </ContextMenuListItem>\n </ArchivedDisabledTooltip>\n {!isArchivedConversation && (\n <div\n className={cn(\n \"absolute left-full top-[-6px] z-60 opacity-0 invisible pointer-events-none transition-all duration-200 ml-[1px]\",\n \"group-hover/git:opacity-100 group-hover/git:visible group-hover/git:pointer-events-auto\",\n \"hover:opacity-100 hover:visible hover:pointer-events-auto\",\n activeSubmenu === \"git\" &&\n \"opacity-100 visible pointer-events-auto\",\n )}\n >\n <GitToolsSubmenu onClose={handleClose} />\n </div>\n )}\n </div>\n )}\n\n {/* Macros */}\n <div className=\"relative group/macros\">\n <ArchivedDisabledTooltip isDisabled={isArchivedConversation}>\n <ContextMenuListItem\n testId=\"macros-button\"\n onClick={() => handleSubmenuClick(\"macros\")}\n isDisabled={isArchivedConversation}\n >\n <ToolsContextMenuIconText\n icon={<SettingsIcon width={16} height={16} />}\n text={t(I18nKey.COMMON$MACROS)}\n rightIcon={<CarretRightFillIcon width={10} height={10} />}\n />\n </ContextMenuListItem>\n </ArchivedDisabledTooltip>\n {!isArchivedConversation && (\n <div\n className={cn(\n \"absolute left-full top-[-4px] z-60 opacity-0 invisible pointer-events-none transition-all duration-200 ml-[1px]\",\n \"group-hover/macros:opacity-100 group-hover/macros:visible group-hover/macros:pointer-events-auto\",\n \"hover:opacity-100 hover:visible hover:pointer-events-auto\",\n activeSubmenu === \"macros\" &&\n \"opacity-100 visible pointer-events-auto\",\n )}\n >\n <MacrosSubmenu onClose={handleClose} />\n </div>\n )}\n </div>\n\n {shouldShowAgentTools && <Divider inset=\"menu\" />}\n\n <ArchivedDisabledTooltip isDisabled={isArchivedConversation}>\n <ContextMenuListItem\n testId=\"show-skills-button\"\n onClick={onShowSkills}\n isDisabled={isArchivedConversation}\n >\n <ToolsContextMenuIconText\n icon={\n <SkillsIcon\n width={16}\n height={16}\n className=\"stroke-[1.75]\"\n aria-hidden\n />\n }\n text={t(I18nKey.CONVERSATION$SHOW_SKILLS)}\n />\n </ContextMenuListItem>\n </ArchivedDisabledTooltip>\n\n {/* Show Plugins - only when this conversation has attached plugins */}\n {shouldShowPlugins && (\n <ArchivedDisabledTooltip isDisabled={isArchivedConversation}>\n <ContextMenuListItem\n testId=\"show-plugins-button\"\n onClick={onShowPlugins}\n isDisabled={isArchivedConversation}\n >\n <ToolsContextMenuIconText\n icon={<PuzzleIcon width={16} height={16} aria-hidden />}\n text={t(I18nKey.CONVERSATION$SHOW_PLUGINS)}\n />\n </ContextMenuListItem>\n </ArchivedDisabledTooltip>\n )}\n\n {/* Show Hooks - Only show for V1 conversations */}\n {shouldShowHooks && (\n <ArchivedDisabledTooltip isDisabled={isArchivedConversation}>\n <ContextMenuListItem\n testId=\"show-hooks-button\"\n onClick={onShowHooks}\n isDisabled={isArchivedConversation}\n >\n <ToolsContextMenuIconText\n icon={<FishingHookIcon width={16} height={16} aria-hidden />}\n text={t(I18nKey.CONVERSATION$SHOW_HOOKS)}\n />\n </ContextMenuListItem>\n </ArchivedDisabledTooltip>\n )}\n\n {/* Show Agent Tools and Metadata - Only show if system message is available */}\n {shouldShowAgentTools && (\n <ArchivedDisabledTooltip isDisabled={isArchivedConversation}>\n <ContextMenuListItem\n testId=\"show-agent-tools-button\"\n onClick={onShowAgentTools}\n isDisabled={isArchivedConversation}\n >\n <ToolsContextMenuIconText\n icon={<ToolsIcon width={16} height={16} />}\n text={t(I18nKey.BUTTON$SHOW_AGENT_TOOLS_AND_METADATA)}\n />\n </ContextMenuListItem>\n </ArchivedDisabledTooltip>\n )}\n\n {footerAction && (\n <>\n <Divider />\n <ContextMenuListItem\n testId={footerAction.testId}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n footerAction.onClick();\n handleClose();\n }}\n >\n <ToolsContextMenuIconText\n icon={footerAction.icon}\n text={footerAction.label}\n />\n </ContextMenuListItem>\n </>\n )}\n </ContextMenu>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),n=require(`../../../i18n/declaration.cjs`),r=require(`../../../utils/utils.cjs`),i=require(`../../../context/navigation-context.cjs`),a=require(`../../../utils/dropdown-classes.cjs`),o=require(`../../../hooks/mutation/use-create-conversation.cjs`),s=require(`../../../ui/divider.cjs`),ee=require(`../../../hooks/use-user-providers.cjs`),c=require(`../../shared/git-provider-icon.cjs`),l=require(`../../../hooks/use-debounce.cjs`),u=require(`../../../hooks/query/use-git-repositories.cjs`),d=require(`../../../hooks/query/use-search-repositories.cjs`),f=require(`../../../icons/repo.cjs`),p=require(`../../../stores/home-store.cjs`),te=require(`../../../hooks/use-is-creating-conversation.cjs`),m=require(`./new-conversation-dropdown-styles.cjs`),h=require(`../../../hooks/use-popover-fixed-placement.cjs`),g=require(`../../../icons/search.cjs`);let _=require(`react`);_=e.__toESM(_,1);let v=require(`react/jsx-runtime`);function y({repo:e,disabled:t,onSelect:n,itemClass:r}){return(0,v.jsx)(`li`,{children:(0,v.jsxs)(`button`,{type:`button`,disabled:t,"data-testid":`launch-repository`,"data-repo-name":e.full_name,onClick:()=>n(e),className:r,children:[(0,v.jsx)(`span`,{className:a.dropdownMenuRowIconWrapperClassName,"aria-hidden":!0,children:(0,v.jsx)(f.default,{width:14,height:14})}),(0,v.jsx)(`span`,{className:`truncate`,children:e.full_name})]})})}function b({trigger:e,className:f,popoverClassName:b,popoverTestId:x=`new-conversation-popover`,useFixedPlacement:S=!1}){let{t:C}=t.useTranslation(`openhands`),{navigate:w}=i.useNavigation(),{providers:T}=ee.useUserProviders(),{lastSelectedProvider:E,setLastSelectedProvider:D}=p.useHomeStore(),[O,k]=_.default.useState(!1),A=_.default.useRef(null),j=_.default.useRef(null),M=h.usePopoverFixedPlacement(j,{open:O,enabled:S}),[N,P]=_.default.useState(E??null),[F,I]=_.default.useState(``),L=l.useDebounce(F,300);_.default.useEffect(()=>{if(T.length===0){N!==null&&P(null);return}N&&T.includes(N)||P(E&&T.includes(E)?E:T[0])},[T,N,E]);let{data:R,isLoading:z,isError:B,hasNextPage:V,isFetchingNextPage:H,fetchNextPage:U}=u.useGitRepositories({provider:N}),{data:W,isLoading:G}=d.useSearchRepositories(L,N),K=_.default.useMemo(()=>R?.pages.flatMap(e=>e.items)??[],[R]),q=L?W??[]:K,{mutate:J,isPending:Y}=o.useCreateConversation(),X=te.useIsCreatingConversation(),Z=Y||X;_.default.useEffect(()=>{if(!O)return;let e=e=>{A.current&&!A.current.contains(e.target)&&k(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[O]),_.default.useEffect(()=>{if(!O)return;let e=e=>{e.key===`Escape`&&k(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[O]);let ne=e=>{Z||J({repository:{name:e.full_name,gitProvider:e.git_provider,branch:e.main_branch??`main`}},{onSuccess:e=>{k(!1),w(`/conversations/${e.conversation_id}`)}})},re=e=>{P(e),D(e),I(``)},Q=a.dropdownMenuRowClassName;_.default.useEffect(()=>{O&&(L||!V||H||z||q.length===0||q.length>=10||U())},[O,L,V,H,z,q.length,U]);let $=L?G:z,ie=!L&&V&&q.length>0,ae=_.default.useCallback(()=>{k(e=>!e)},[]),oe=O&&(!S||M!==null),se=S&&M?{position:`fixed`,top:M.top,left:M.left,width:M.width}:void 0;return(0,v.jsxs)(`div`,{className:r.cn(!S&&`relative`,f),ref:A,children:[(0,v.jsx)(`span`,{ref:j,className:`inline-flex`,children:e({onClick:ae,"aria-expanded":O,"aria-haspopup":`menu`,disabled:Z})}),oe&&(0,v.jsxs)(`div`,{"data-testid":x,className:r.cn(m.NEW_CONVERSATION_DROPDOWN_SURFACE,!S&&r.cn(`absolute top-full mt-0`,b)),style:se,children:[T.length>1&&(0,v.jsx)(`div`,{className:`flex items-center gap-1 px-1 py-1`,"data-testid":`cloud-provider-tabs`,children:T.map(e=>{let t=e===N;return(0,v.jsxs)(`button`,{type:`button`,"data-testid":`cloud-provider-tab-${e}`,onClick:()=>re(e),className:r.cn(`flex items-center gap-1 rounded border px-2 py-1 text-xs`,`transition-none`,t?`border-[var(--oh-border-subtle)] bg-[var(--oh-interactive-hover)] text-white`:`border-transparent text-[var(--oh-text-secondary)] hover:text-white`),children:[(0,v.jsx)(c.GitProviderIcon,{gitProvider:e}),(0,v.jsx)(`span`,{className:`capitalize`,children:e})]},e)})}),(0,v.jsx)(`div`,{className:`px-2`,children:(0,v.jsxs)(`div`,{className:`relative`,children:[(0,v.jsx)(g.default,{width:16,height:16,"aria-hidden":!0,className:`pointer-events-none absolute left-0 top-1/2 -translate-y-1/2 text-[var(--oh-muted)]`}),(0,v.jsx)(`input`,{type:`text`,"data-testid":`cloud-repo-search-input`,value:F,onChange:e=>I(e.target.value),placeholder:C(n.I18nKey.COMMON$SEARCH_REPOSITORIES),disabled:!N,className:r.cn(`w-full border-0 bg-transparent py-1.5 pl-6 pr-0 text-sm text-white`,`outline-none placeholder:text-[var(--oh-muted)]`,`focus:outline-none focus:ring-0`,`disabled:cursor-not-allowed disabled:opacity-60`)})]})}),(0,v.jsx)(s.Divider,{inset:`menu`}),(0,v.jsxs)(`ul`,{className:r.cn(`max-h-[40vh] overflow-y-auto custom-scrollbar-always sm:max-h-[280px]`,a.dropdownMenuListClassName),children:[$&&q.length===0&&(0,v.jsx)(`li`,{className:`px-2 py-2 text-sm text-[var(--oh-muted)] italic`,"data-testid":`cloud-repo-loading`,children:C(n.I18nKey.HOME$LOADING_REPOSITORIES)}),B&&(0,v.jsx)(`li`,{className:`px-2 py-2 text-sm text-[#F87171]`,"data-testid":`cloud-repo-error`,children:C(n.I18nKey.HOME$FAILED_TO_LOAD_REPOSITORIES)}),!$&&!B&&q.length===0&&!!N&&(0,v.jsx)(`li`,{className:`px-2 py-2 text-sm text-[var(--oh-muted)] italic`,"data-testid":`cloud-repo-empty`,children:C(n.I18nKey.GITHUB$NO_RESULTS)}),q.map(e=>(0,v.jsx)(y,{repo:e,disabled:Z,onSelect:ne,itemClass:Q},`${e.git_provider}:${e.id}`)),ie&&(0,v.jsx)(`li`,{children:(0,v.jsx)(`button`,{type:`button`,"data-testid":`cloud-repo-load-more`,disabled:H,onClick:()=>U(),className:Q,children:(0,v.jsx)(`span`,{className:`text-[var(--oh-text-secondary)]`,children:C(H?n.I18nKey.HOME$LOADING_MORE_REPOSITORIES:n.I18nKey.CONVERSATION$LOAD_MORE)})})})]})]})]})}exports.CloudNewConversationMenu=b;
1
+ const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),n=require(`../../../i18n/declaration.cjs`),r=require(`../../../utils/utils.cjs`),i=require(`../../../context/navigation-context.cjs`),a=require(`../../../utils/dropdown-classes.cjs`),o=require(`../../../hooks/mutation/use-create-conversation.cjs`),s=require(`../../../ui/divider.cjs`),ee=require(`../../../hooks/use-user-providers.cjs`),c=require(`../../shared/git-provider-icon.cjs`),l=require(`../../../hooks/use-debounce.cjs`),u=require(`../../../hooks/query/use-git-repositories.cjs`),d=require(`../../../hooks/query/use-search-repositories.cjs`),f=require(`../../../icons/repo.cjs`),p=require(`../../../stores/home-store.cjs`),te=require(`../../../hooks/use-is-creating-conversation.cjs`),m=require(`./new-conversation-dropdown-styles.cjs`),h=require(`../../../hooks/use-popover-fixed-placement.cjs`),g=require(`../../../icons/search.cjs`);let _=require(`react`);_=e.__toESM(_,1);let v=require(`react/jsx-runtime`);function y({repo:e,disabled:t,onSelect:n,itemClass:r}){return(0,v.jsx)(`li`,{children:(0,v.jsxs)(`button`,{type:`button`,disabled:t,"data-testid":`launch-repository`,"data-repo-name":e.full_name,onClick:()=>n(e),className:r,children:[(0,v.jsx)(`span`,{className:a.dropdownMenuRowIconWrapperClassName,"aria-hidden":!0,children:(0,v.jsx)(f.default,{width:14,height:14})}),(0,v.jsx)(`span`,{className:`truncate`,children:e.full_name})]})})}function b({trigger:e,className:f,popoverClassName:b,popoverTestId:x=`new-conversation-popover`,useFixedPlacement:S=!1}){let{t:C}=t.useTranslation(`openhands`),{navigate:w}=i.useNavigation(),{providers:T}=ee.useUserProviders(),{lastSelectedProvider:E,setLastSelectedProvider:D}=p.useHomeStore(),[O,k]=_.default.useState(!1),A=_.default.useRef(null),j=_.default.useRef(null),M=h.usePopoverFixedPlacement(j,{open:O,enabled:S}),[N,P]=_.default.useState(E??null),[F,I]=_.default.useState(``),L=l.useDebounce(F,300);_.default.useEffect(()=>{if(T.length===0){N!==null&&P(null);return}N&&T.includes(N)||P(E&&T.includes(E)?E:T[0])},[T,N,E]);let{data:R,isLoading:z,isError:B,hasNextPage:V,isFetchingNextPage:H,fetchNextPage:U}=u.useGitRepositories({provider:N}),{data:W,isLoading:G}=d.useSearchRepositories(L,N),K=_.default.useMemo(()=>R?.pages.flatMap(e=>e.items)??[],[R]),q=L?W??[]:K,{mutate:J,isPending:Y}=o.useCreateConversation(),X=te.useIsCreatingConversation(),Z=Y||X;_.default.useEffect(()=>{if(!O)return;let e=e=>{A.current&&!A.current.contains(e.target)&&k(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[O]),_.default.useEffect(()=>{if(!O)return;let e=e=>{e.key===`Escape`&&k(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[O]);let ne=e=>{Z||J({repository:{name:e.full_name,gitProvider:e.git_provider,branch:e.main_branch??`main`},entryPoint:`sidebar_cloud_menu`},{onSuccess:e=>{k(!1),w(`/conversations/${e.conversation_id}`)}})},re=e=>{P(e),D(e),I(``)},Q=a.dropdownMenuRowClassName;_.default.useEffect(()=>{O&&(L||!V||H||z||q.length===0||q.length>=10||U())},[O,L,V,H,z,q.length,U]);let $=L?G:z,ie=!L&&V&&q.length>0,ae=_.default.useCallback(()=>{k(e=>!e)},[]),oe=O&&(!S||M!==null),se=S&&M?{position:`fixed`,top:M.top,left:M.left,width:M.width}:void 0;return(0,v.jsxs)(`div`,{className:r.cn(!S&&`relative`,f),ref:A,children:[(0,v.jsx)(`span`,{ref:j,className:`inline-flex`,children:e({onClick:ae,"aria-expanded":O,"aria-haspopup":`menu`,disabled:Z})}),oe&&(0,v.jsxs)(`div`,{"data-testid":x,className:r.cn(m.NEW_CONVERSATION_DROPDOWN_SURFACE,!S&&r.cn(`absolute top-full mt-0`,b)),style:se,children:[T.length>1&&(0,v.jsx)(`div`,{className:`flex items-center gap-1 px-1 py-1`,"data-testid":`cloud-provider-tabs`,children:T.map(e=>{let t=e===N;return(0,v.jsxs)(`button`,{type:`button`,"data-testid":`cloud-provider-tab-${e}`,onClick:()=>re(e),className:r.cn(`flex items-center gap-1 rounded border px-2 py-1 text-xs`,`transition-none`,t?`border-[var(--oh-border-subtle)] bg-[var(--oh-interactive-hover)] text-white`:`border-transparent text-[var(--oh-text-secondary)] hover:text-white`),children:[(0,v.jsx)(c.GitProviderIcon,{gitProvider:e}),(0,v.jsx)(`span`,{className:`capitalize`,children:e})]},e)})}),(0,v.jsx)(`div`,{className:`px-2`,children:(0,v.jsxs)(`div`,{className:`relative`,children:[(0,v.jsx)(g.default,{width:16,height:16,"aria-hidden":!0,className:`pointer-events-none absolute left-0 top-1/2 -translate-y-1/2 text-[var(--oh-muted)]`}),(0,v.jsx)(`input`,{type:`text`,"data-testid":`cloud-repo-search-input`,value:F,onChange:e=>I(e.target.value),placeholder:C(n.I18nKey.COMMON$SEARCH_REPOSITORIES),disabled:!N,className:r.cn(`w-full border-0 bg-transparent py-1.5 pl-6 pr-0 text-sm text-white`,`outline-none placeholder:text-[var(--oh-muted)]`,`focus:outline-none focus:ring-0`,`disabled:cursor-not-allowed disabled:opacity-60`)})]})}),(0,v.jsx)(s.Divider,{inset:`menu`}),(0,v.jsxs)(`ul`,{className:r.cn(`max-h-[40vh] overflow-y-auto custom-scrollbar-always sm:max-h-[280px]`,a.dropdownMenuListClassName),children:[$&&q.length===0&&(0,v.jsx)(`li`,{className:`px-2 py-2 text-sm text-[var(--oh-muted)] italic`,"data-testid":`cloud-repo-loading`,children:C(n.I18nKey.HOME$LOADING_REPOSITORIES)}),B&&(0,v.jsx)(`li`,{className:`px-2 py-2 text-sm text-[#F87171]`,"data-testid":`cloud-repo-error`,children:C(n.I18nKey.HOME$FAILED_TO_LOAD_REPOSITORIES)}),!$&&!B&&q.length===0&&!!N&&(0,v.jsx)(`li`,{className:`px-2 py-2 text-sm text-[var(--oh-muted)] italic`,"data-testid":`cloud-repo-empty`,children:C(n.I18nKey.GITHUB$NO_RESULTS)}),q.map(e=>(0,v.jsx)(y,{repo:e,disabled:Z,onSelect:ne,itemClass:Q},`${e.git_provider}:${e.id}`)),ie&&(0,v.jsx)(`li`,{children:(0,v.jsx)(`button`,{type:`button`,"data-testid":`cloud-repo-load-more`,disabled:H,onClick:()=>U(),className:Q,children:(0,v.jsx)(`span`,{className:`text-[var(--oh-text-secondary)]`,children:C(H?n.I18nKey.HOME$LOADING_MORE_REPOSITORIES:n.I18nKey.CONVERSATION$LOAD_MORE)})})})]})]})]})}exports.CloudNewConversationMenu=b;
2
2
  //# sourceMappingURL=cloud-new-conversation-menu.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-new-conversation-menu.cjs","names":[],"sources":["../../../../src/components/features/conversation-panel/cloud-new-conversation-menu.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { useCreateConversation } from \"#/hooks/mutation/use-create-conversation\";\nimport { useNavigation } from \"#/context/navigation-context\";\nimport { useIsCreatingConversation } from \"#/hooks/use-is-creating-conversation\";\nimport { useGitRepositories } from \"#/hooks/query/use-git-repositories\";\nimport { useSearchRepositories } from \"#/hooks/query/use-search-repositories\";\nimport { useUserProviders } from \"#/hooks/use-user-providers\";\nimport { useDebounce } from \"#/hooks/use-debounce\";\nimport { useHomeStore } from \"#/stores/home-store\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\nimport {\n dropdownMenuRowClassName,\n dropdownInstantColorClassName,\n dropdownMenuListClassName,\n dropdownMenuRowIconWrapperClassName,\n} from \"#/utils/dropdown-classes\";\nimport { GitRepository } from \"#/types/git\";\nimport { Provider } from \"#/types/settings\";\nimport RepoIcon from \"#/icons/repo.svg?react\";\nimport SearchIcon from \"#/icons/search.svg?react\";\nimport { GitProviderIcon } from \"#/components/shared/git-provider-icon\";\nimport { Divider } from \"#/ui/divider\";\nimport { NEW_CONVERSATION_DROPDOWN_SURFACE } from \"./new-conversation-dropdown-styles\";\nimport { usePopoverFixedPlacement } from \"#/hooks/use-popover-fixed-placement\";\n\nexport type CloudNewConversationMenuTriggerProps = {\n onClick: () => void;\n \"aria-expanded\": boolean;\n \"aria-haspopup\": \"menu\";\n disabled?: boolean;\n};\n\nexport interface CloudNewConversationMenuProps {\n trigger: (props: CloudNewConversationMenuTriggerProps) => React.ReactNode;\n className?: string;\n popoverClassName: string;\n popoverTestId?: string;\n useFixedPlacement?: boolean;\n}\n\ninterface RepoListItemProps {\n repo: GitRepository;\n disabled: boolean;\n onSelect: (repo: GitRepository) => void;\n itemClass: string;\n}\n\nfunction RepoListItem({\n repo,\n disabled,\n onSelect,\n itemClass,\n}: RepoListItemProps) {\n return (\n <li>\n <button\n type=\"button\"\n disabled={disabled}\n data-testid=\"launch-repository\"\n data-repo-name={repo.full_name}\n onClick={() => onSelect(repo)}\n className={itemClass}\n >\n <span className={dropdownMenuRowIconWrapperClassName} aria-hidden>\n <RepoIcon width={14} height={14} />\n </span>\n <span className=\"truncate\">{repo.full_name}</span>\n </button>\n </li>\n );\n}\n\n/**\n * Repository search + launch flow for cloud backends.\n * Shared by the sidebar \"+ New conversation\" control and the conversation\n * panel \"new thread folder\" opener.\n */\nexport function CloudNewConversationMenu({\n trigger,\n className,\n popoverClassName,\n popoverTestId = \"new-conversation-popover\",\n useFixedPlacement = false,\n}: CloudNewConversationMenuProps) {\n const { t } = useTranslation(\"openhands\");\n const { navigate } = useNavigation();\n\n const { providers } = useUserProviders();\n const { lastSelectedProvider, setLastSelectedProvider } = useHomeStore();\n\n const [open, setOpen] = React.useState(false);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const triggerWrapRef = React.useRef<HTMLSpanElement>(null);\n const fixedBox = usePopoverFixedPlacement(triggerWrapRef, {\n open,\n enabled: useFixedPlacement,\n });\n const [selectedProvider, setSelectedProvider] =\n React.useState<Provider | null>(lastSelectedProvider ?? null);\n const [query, setQuery] = React.useState(\"\");\n const debouncedQuery = useDebounce(query, 300);\n\n React.useEffect(() => {\n if (providers.length === 0) {\n if (selectedProvider !== null) setSelectedProvider(null);\n return;\n }\n if (selectedProvider && providers.includes(selectedProvider)) return;\n const fallback =\n lastSelectedProvider && providers.includes(lastSelectedProvider)\n ? lastSelectedProvider\n : providers[0];\n setSelectedProvider(fallback);\n }, [providers, selectedProvider, lastSelectedProvider]);\n\n const {\n data: repoPages,\n isLoading,\n isError,\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n } = useGitRepositories({ provider: selectedProvider });\n\n const { data: searchResults, isLoading: isSearchLoading } =\n useSearchRepositories(debouncedQuery, selectedProvider);\n\n const allRepositories = React.useMemo(\n () => repoPages?.pages.flatMap((page) => page.items) ?? [],\n [repoPages],\n );\n\n const repositories = debouncedQuery ? (searchResults ?? []) : allRepositories;\n\n const { mutate: createConversation, isPending } = useCreateConversation();\n const isCreatingElsewhere = useIsCreatingConversation();\n const isCreating = isPending || isCreatingElsewhere;\n\n React.useEffect(() => {\n if (!open) return undefined;\n const onDown = (e: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", onDown);\n return () => document.removeEventListener(\"mousedown\", onDown);\n }, [open]);\n\n React.useEffect(() => {\n if (!open) return undefined;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setOpen(false);\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [open]);\n\n const launchRepository = (repo: GitRepository) => {\n if (isCreating) return;\n createConversation(\n {\n repository: {\n name: repo.full_name,\n gitProvider: repo.git_provider,\n branch: repo.main_branch ?? \"main\",\n },\n },\n {\n onSuccess: (data) => {\n setOpen(false);\n navigate(`/conversations/${data.conversation_id}`);\n },\n },\n );\n };\n\n const handleProviderChange = (provider: Provider) => {\n setSelectedProvider(provider);\n setLastSelectedProvider(provider);\n setQuery(\"\");\n };\n\n const itemClass = dropdownMenuRowClassName;\n\n React.useEffect(() => {\n if (!open) return;\n if (debouncedQuery) return;\n if (!hasNextPage || isFetchingNextPage || isLoading) return;\n if (repositories.length === 0 || repositories.length >= 10) return;\n fetchNextPage();\n }, [\n open,\n debouncedQuery,\n hasNextPage,\n isFetchingNextPage,\n isLoading,\n repositories.length,\n fetchNextPage,\n ]);\n\n const isListLoading = debouncedQuery ? isSearchLoading : isLoading;\n const showLoadMore =\n !debouncedQuery && hasNextPage && repositories.length > 0;\n\n const toggleOpen = React.useCallback(() => {\n setOpen((o) => !o);\n }, []);\n\n const showPopover = open && (!useFixedPlacement || fixedBox !== null);\n\n const fixedStyle: React.CSSProperties | undefined =\n useFixedPlacement && fixedBox\n ? {\n position: \"fixed\",\n top: fixedBox.top,\n left: fixedBox.left,\n width: fixedBox.width,\n }\n : undefined;\n\n return (\n <div\n className={cn(!useFixedPlacement && \"relative\", className)}\n ref={popoverRef}\n >\n <span ref={triggerWrapRef} className=\"inline-flex\">\n {trigger({\n onClick: toggleOpen,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n disabled: isCreating,\n })}\n </span>\n\n {showPopover && (\n <div\n data-testid={popoverTestId}\n className={cn(\n NEW_CONVERSATION_DROPDOWN_SURFACE,\n !useFixedPlacement &&\n cn(\"absolute top-full mt-0\", popoverClassName),\n )}\n style={fixedStyle}\n >\n {providers.length > 1 && (\n <div\n className=\"flex items-center gap-1 px-1 py-1\"\n data-testid=\"cloud-provider-tabs\"\n >\n {providers.map((provider) => {\n const isActive = provider === selectedProvider;\n return (\n <button\n key={provider}\n type=\"button\"\n data-testid={`cloud-provider-tab-${provider}`}\n onClick={() => handleProviderChange(provider)}\n className={cn(\n \"flex items-center gap-1 rounded border px-2 py-1 text-xs\",\n dropdownInstantColorClassName,\n isActive\n ? \"border-[var(--oh-border-subtle)] bg-[var(--oh-interactive-hover)] text-white\"\n : \"border-transparent text-[var(--oh-text-secondary)] hover:text-white\",\n )}\n >\n <GitProviderIcon gitProvider={provider} />\n <span className=\"capitalize\">{provider}</span>\n </button>\n );\n })}\n </div>\n )}\n\n <div className=\"px-2\">\n <div className=\"relative\">\n <SearchIcon\n width={16}\n height={16}\n aria-hidden\n className=\"pointer-events-none absolute left-0 top-1/2 -translate-y-1/2 text-[var(--oh-muted)]\"\n />\n <input\n type=\"text\"\n data-testid=\"cloud-repo-search-input\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={t(I18nKey.COMMON$SEARCH_REPOSITORIES)}\n disabled={!selectedProvider}\n className={cn(\n \"w-full border-0 bg-transparent py-1.5 pl-6 pr-0 text-sm text-white\",\n \"outline-none placeholder:text-[var(--oh-muted)]\",\n \"focus:outline-none focus:ring-0\",\n \"disabled:cursor-not-allowed disabled:opacity-60\",\n )}\n />\n </div>\n </div>\n\n <Divider inset=\"menu\" />\n\n <ul\n className={cn(\n \"max-h-[40vh] overflow-y-auto custom-scrollbar-always sm:max-h-[280px]\",\n dropdownMenuListClassName,\n )}\n >\n {isListLoading && repositories.length === 0 && (\n <li\n className=\"px-2 py-2 text-sm text-[var(--oh-muted)] italic\"\n data-testid=\"cloud-repo-loading\"\n >\n {t(I18nKey.HOME$LOADING_REPOSITORIES)}\n </li>\n )}\n {isError && (\n <li\n className=\"px-2 py-2 text-sm text-[#F87171]\"\n data-testid=\"cloud-repo-error\"\n >\n {t(I18nKey.HOME$FAILED_TO_LOAD_REPOSITORIES)}\n </li>\n )}\n {!isListLoading &&\n !isError &&\n repositories.length === 0 &&\n !!selectedProvider && (\n <li\n className=\"px-2 py-2 text-sm text-[var(--oh-muted)] italic\"\n data-testid=\"cloud-repo-empty\"\n >\n {t(I18nKey.GITHUB$NO_RESULTS)}\n </li>\n )}\n {repositories.map((repo) => (\n <RepoListItem\n key={`${repo.git_provider}:${repo.id}`}\n repo={repo}\n disabled={isCreating}\n onSelect={launchRepository}\n itemClass={itemClass}\n />\n ))}\n {showLoadMore && (\n <li>\n <button\n type=\"button\"\n data-testid=\"cloud-repo-load-more\"\n disabled={isFetchingNextPage}\n onClick={() => fetchNextPage()}\n className={itemClass}\n >\n <span className=\"text-[var(--oh-text-secondary)]\">\n {isFetchingNextPage\n ? t(I18nKey.HOME$LOADING_MORE_REPOSITORIES)\n : t(I18nKey.CONVERSATION$LOAD_MORE)}\n </span>\n </button>\n </li>\n )}\n </ul>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"cloud-new-conversation-menu.cjs","names":[],"sources":["../../../../src/components/features/conversation-panel/cloud-new-conversation-menu.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { useCreateConversation } from \"#/hooks/mutation/use-create-conversation\";\nimport { useNavigation } from \"#/context/navigation-context\";\nimport { useIsCreatingConversation } from \"#/hooks/use-is-creating-conversation\";\nimport { useGitRepositories } from \"#/hooks/query/use-git-repositories\";\nimport { useSearchRepositories } from \"#/hooks/query/use-search-repositories\";\nimport { useUserProviders } from \"#/hooks/use-user-providers\";\nimport { useDebounce } from \"#/hooks/use-debounce\";\nimport { useHomeStore } from \"#/stores/home-store\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\nimport {\n dropdownMenuRowClassName,\n dropdownInstantColorClassName,\n dropdownMenuListClassName,\n dropdownMenuRowIconWrapperClassName,\n} from \"#/utils/dropdown-classes\";\nimport { GitRepository } from \"#/types/git\";\nimport { Provider } from \"#/types/settings\";\nimport RepoIcon from \"#/icons/repo.svg?react\";\nimport SearchIcon from \"#/icons/search.svg?react\";\nimport { GitProviderIcon } from \"#/components/shared/git-provider-icon\";\nimport { Divider } from \"#/ui/divider\";\nimport { NEW_CONVERSATION_DROPDOWN_SURFACE } from \"./new-conversation-dropdown-styles\";\nimport { usePopoverFixedPlacement } from \"#/hooks/use-popover-fixed-placement\";\n\nexport type CloudNewConversationMenuTriggerProps = {\n onClick: () => void;\n \"aria-expanded\": boolean;\n \"aria-haspopup\": \"menu\";\n disabled?: boolean;\n};\n\nexport interface CloudNewConversationMenuProps {\n trigger: (props: CloudNewConversationMenuTriggerProps) => React.ReactNode;\n className?: string;\n popoverClassName: string;\n popoverTestId?: string;\n useFixedPlacement?: boolean;\n}\n\ninterface RepoListItemProps {\n repo: GitRepository;\n disabled: boolean;\n onSelect: (repo: GitRepository) => void;\n itemClass: string;\n}\n\nfunction RepoListItem({\n repo,\n disabled,\n onSelect,\n itemClass,\n}: RepoListItemProps) {\n return (\n <li>\n <button\n type=\"button\"\n disabled={disabled}\n data-testid=\"launch-repository\"\n data-repo-name={repo.full_name}\n onClick={() => onSelect(repo)}\n className={itemClass}\n >\n <span className={dropdownMenuRowIconWrapperClassName} aria-hidden>\n <RepoIcon width={14} height={14} />\n </span>\n <span className=\"truncate\">{repo.full_name}</span>\n </button>\n </li>\n );\n}\n\n/**\n * Repository search + launch flow for cloud backends.\n * Shared by the sidebar \"+ New conversation\" control and the conversation\n * panel \"new thread folder\" opener.\n */\nexport function CloudNewConversationMenu({\n trigger,\n className,\n popoverClassName,\n popoverTestId = \"new-conversation-popover\",\n useFixedPlacement = false,\n}: CloudNewConversationMenuProps) {\n const { t } = useTranslation(\"openhands\");\n const { navigate } = useNavigation();\n\n const { providers } = useUserProviders();\n const { lastSelectedProvider, setLastSelectedProvider } = useHomeStore();\n\n const [open, setOpen] = React.useState(false);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const triggerWrapRef = React.useRef<HTMLSpanElement>(null);\n const fixedBox = usePopoverFixedPlacement(triggerWrapRef, {\n open,\n enabled: useFixedPlacement,\n });\n const [selectedProvider, setSelectedProvider] =\n React.useState<Provider | null>(lastSelectedProvider ?? null);\n const [query, setQuery] = React.useState(\"\");\n const debouncedQuery = useDebounce(query, 300);\n\n React.useEffect(() => {\n if (providers.length === 0) {\n if (selectedProvider !== null) setSelectedProvider(null);\n return;\n }\n if (selectedProvider && providers.includes(selectedProvider)) return;\n const fallback =\n lastSelectedProvider && providers.includes(lastSelectedProvider)\n ? lastSelectedProvider\n : providers[0];\n setSelectedProvider(fallback);\n }, [providers, selectedProvider, lastSelectedProvider]);\n\n const {\n data: repoPages,\n isLoading,\n isError,\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n } = useGitRepositories({ provider: selectedProvider });\n\n const { data: searchResults, isLoading: isSearchLoading } =\n useSearchRepositories(debouncedQuery, selectedProvider);\n\n const allRepositories = React.useMemo(\n () => repoPages?.pages.flatMap((page) => page.items) ?? [],\n [repoPages],\n );\n\n const repositories = debouncedQuery ? (searchResults ?? []) : allRepositories;\n\n const { mutate: createConversation, isPending } = useCreateConversation();\n const isCreatingElsewhere = useIsCreatingConversation();\n const isCreating = isPending || isCreatingElsewhere;\n\n React.useEffect(() => {\n if (!open) return undefined;\n const onDown = (e: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", onDown);\n return () => document.removeEventListener(\"mousedown\", onDown);\n }, [open]);\n\n React.useEffect(() => {\n if (!open) return undefined;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setOpen(false);\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [open]);\n\n const launchRepository = (repo: GitRepository) => {\n if (isCreating) return;\n createConversation(\n {\n repository: {\n name: repo.full_name,\n gitProvider: repo.git_provider,\n branch: repo.main_branch ?? \"main\",\n },\n entryPoint: \"sidebar_cloud_menu\",\n },\n {\n onSuccess: (data) => {\n setOpen(false);\n navigate(`/conversations/${data.conversation_id}`);\n },\n },\n );\n };\n\n const handleProviderChange = (provider: Provider) => {\n setSelectedProvider(provider);\n setLastSelectedProvider(provider);\n setQuery(\"\");\n };\n\n const itemClass = dropdownMenuRowClassName;\n\n React.useEffect(() => {\n if (!open) return;\n if (debouncedQuery) return;\n if (!hasNextPage || isFetchingNextPage || isLoading) return;\n if (repositories.length === 0 || repositories.length >= 10) return;\n fetchNextPage();\n }, [\n open,\n debouncedQuery,\n hasNextPage,\n isFetchingNextPage,\n isLoading,\n repositories.length,\n fetchNextPage,\n ]);\n\n const isListLoading = debouncedQuery ? isSearchLoading : isLoading;\n const showLoadMore =\n !debouncedQuery && hasNextPage && repositories.length > 0;\n\n const toggleOpen = React.useCallback(() => {\n setOpen((o) => !o);\n }, []);\n\n const showPopover = open && (!useFixedPlacement || fixedBox !== null);\n\n const fixedStyle: React.CSSProperties | undefined =\n useFixedPlacement && fixedBox\n ? {\n position: \"fixed\",\n top: fixedBox.top,\n left: fixedBox.left,\n width: fixedBox.width,\n }\n : undefined;\n\n return (\n <div\n className={cn(!useFixedPlacement && \"relative\", className)}\n ref={popoverRef}\n >\n <span ref={triggerWrapRef} className=\"inline-flex\">\n {trigger({\n onClick: toggleOpen,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n disabled: isCreating,\n })}\n </span>\n\n {showPopover && (\n <div\n data-testid={popoverTestId}\n className={cn(\n NEW_CONVERSATION_DROPDOWN_SURFACE,\n !useFixedPlacement &&\n cn(\"absolute top-full mt-0\", popoverClassName),\n )}\n style={fixedStyle}\n >\n {providers.length > 1 && (\n <div\n className=\"flex items-center gap-1 px-1 py-1\"\n data-testid=\"cloud-provider-tabs\"\n >\n {providers.map((provider) => {\n const isActive = provider === selectedProvider;\n return (\n <button\n key={provider}\n type=\"button\"\n data-testid={`cloud-provider-tab-${provider}`}\n onClick={() => handleProviderChange(provider)}\n className={cn(\n \"flex items-center gap-1 rounded border px-2 py-1 text-xs\",\n dropdownInstantColorClassName,\n isActive\n ? \"border-[var(--oh-border-subtle)] bg-[var(--oh-interactive-hover)] text-white\"\n : \"border-transparent text-[var(--oh-text-secondary)] hover:text-white\",\n )}\n >\n <GitProviderIcon gitProvider={provider} />\n <span className=\"capitalize\">{provider}</span>\n </button>\n );\n })}\n </div>\n )}\n\n <div className=\"px-2\">\n <div className=\"relative\">\n <SearchIcon\n width={16}\n height={16}\n aria-hidden\n className=\"pointer-events-none absolute left-0 top-1/2 -translate-y-1/2 text-[var(--oh-muted)]\"\n />\n <input\n type=\"text\"\n data-testid=\"cloud-repo-search-input\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={t(I18nKey.COMMON$SEARCH_REPOSITORIES)}\n disabled={!selectedProvider}\n className={cn(\n \"w-full border-0 bg-transparent py-1.5 pl-6 pr-0 text-sm text-white\",\n \"outline-none placeholder:text-[var(--oh-muted)]\",\n \"focus:outline-none focus:ring-0\",\n \"disabled:cursor-not-allowed disabled:opacity-60\",\n )}\n />\n </div>\n </div>\n\n <Divider inset=\"menu\" />\n\n <ul\n className={cn(\n \"max-h-[40vh] overflow-y-auto custom-scrollbar-always sm:max-h-[280px]\",\n dropdownMenuListClassName,\n )}\n >\n {isListLoading && repositories.length === 0 && (\n <li\n className=\"px-2 py-2 text-sm text-[var(--oh-muted)] italic\"\n data-testid=\"cloud-repo-loading\"\n >\n {t(I18nKey.HOME$LOADING_REPOSITORIES)}\n </li>\n )}\n {isError && (\n <li\n className=\"px-2 py-2 text-sm text-[#F87171]\"\n data-testid=\"cloud-repo-error\"\n >\n {t(I18nKey.HOME$FAILED_TO_LOAD_REPOSITORIES)}\n </li>\n )}\n {!isListLoading &&\n !isError &&\n repositories.length === 0 &&\n !!selectedProvider && (\n <li\n className=\"px-2 py-2 text-sm text-[var(--oh-muted)] italic\"\n data-testid=\"cloud-repo-empty\"\n >\n {t(I18nKey.GITHUB$NO_RESULTS)}\n </li>\n )}\n {repositories.map((repo) => (\n <RepoListItem\n key={`${repo.git_provider}:${repo.id}`}\n repo={repo}\n disabled={isCreating}\n onSelect={launchRepository}\n itemClass={itemClass}\n />\n ))}\n {showLoadMore && (\n <li>\n <button\n type=\"button\"\n data-testid=\"cloud-repo-load-more\"\n disabled={isFetchingNextPage}\n onClick={() => fetchNextPage()}\n className={itemClass}\n >\n <span className=\"text-[var(--oh-text-secondary)]\">\n {isFetchingNextPage\n ? t(I18nKey.HOME$LOADING_MORE_REPOSITORIES)\n : t(I18nKey.CONVERSATION$LOAD_MORE)}\n </span>\n </button>\n </li>\n )}\n </ul>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -71,11 +71,14 @@ function x({ trigger: a, className: p, popoverClassName: x, popoverTestId: S = "
71
71
  return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
72
72
  }, [O]);
73
73
  let ae = (e) => {
74
- X || J({ repository: {
75
- name: e.full_name,
76
- gitProvider: e.git_provider,
77
- branch: e.main_branch ?? "main"
78
- } }, { onSuccess: (e) => {
74
+ X || J({
75
+ repository: {
76
+ name: e.full_name,
77
+ gitProvider: e.git_provider,
78
+ branch: e.main_branch ?? "main"
79
+ },
80
+ entryPoint: "sidebar_cloud_menu"
81
+ }, { onSuccess: (e) => {
79
82
  k(!1), T(`/conversations/${e.conversation_id}`);
80
83
  } });
81
84
  }, oe = (e) => {
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-new-conversation-menu.js","names":[],"sources":["../../../../src/components/features/conversation-panel/cloud-new-conversation-menu.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { useCreateConversation } from \"#/hooks/mutation/use-create-conversation\";\nimport { useNavigation } from \"#/context/navigation-context\";\nimport { useIsCreatingConversation } from \"#/hooks/use-is-creating-conversation\";\nimport { useGitRepositories } from \"#/hooks/query/use-git-repositories\";\nimport { useSearchRepositories } from \"#/hooks/query/use-search-repositories\";\nimport { useUserProviders } from \"#/hooks/use-user-providers\";\nimport { useDebounce } from \"#/hooks/use-debounce\";\nimport { useHomeStore } from \"#/stores/home-store\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\nimport {\n dropdownMenuRowClassName,\n dropdownInstantColorClassName,\n dropdownMenuListClassName,\n dropdownMenuRowIconWrapperClassName,\n} from \"#/utils/dropdown-classes\";\nimport { GitRepository } from \"#/types/git\";\nimport { Provider } from \"#/types/settings\";\nimport RepoIcon from \"#/icons/repo.svg?react\";\nimport SearchIcon from \"#/icons/search.svg?react\";\nimport { GitProviderIcon } from \"#/components/shared/git-provider-icon\";\nimport { Divider } from \"#/ui/divider\";\nimport { NEW_CONVERSATION_DROPDOWN_SURFACE } from \"./new-conversation-dropdown-styles\";\nimport { usePopoverFixedPlacement } from \"#/hooks/use-popover-fixed-placement\";\n\nexport type CloudNewConversationMenuTriggerProps = {\n onClick: () => void;\n \"aria-expanded\": boolean;\n \"aria-haspopup\": \"menu\";\n disabled?: boolean;\n};\n\nexport interface CloudNewConversationMenuProps {\n trigger: (props: CloudNewConversationMenuTriggerProps) => React.ReactNode;\n className?: string;\n popoverClassName: string;\n popoverTestId?: string;\n useFixedPlacement?: boolean;\n}\n\ninterface RepoListItemProps {\n repo: GitRepository;\n disabled: boolean;\n onSelect: (repo: GitRepository) => void;\n itemClass: string;\n}\n\nfunction RepoListItem({\n repo,\n disabled,\n onSelect,\n itemClass,\n}: RepoListItemProps) {\n return (\n <li>\n <button\n type=\"button\"\n disabled={disabled}\n data-testid=\"launch-repository\"\n data-repo-name={repo.full_name}\n onClick={() => onSelect(repo)}\n className={itemClass}\n >\n <span className={dropdownMenuRowIconWrapperClassName} aria-hidden>\n <RepoIcon width={14} height={14} />\n </span>\n <span className=\"truncate\">{repo.full_name}</span>\n </button>\n </li>\n );\n}\n\n/**\n * Repository search + launch flow for cloud backends.\n * Shared by the sidebar \"+ New conversation\" control and the conversation\n * panel \"new thread folder\" opener.\n */\nexport function CloudNewConversationMenu({\n trigger,\n className,\n popoverClassName,\n popoverTestId = \"new-conversation-popover\",\n useFixedPlacement = false,\n}: CloudNewConversationMenuProps) {\n const { t } = useTranslation(\"openhands\");\n const { navigate } = useNavigation();\n\n const { providers } = useUserProviders();\n const { lastSelectedProvider, setLastSelectedProvider } = useHomeStore();\n\n const [open, setOpen] = React.useState(false);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const triggerWrapRef = React.useRef<HTMLSpanElement>(null);\n const fixedBox = usePopoverFixedPlacement(triggerWrapRef, {\n open,\n enabled: useFixedPlacement,\n });\n const [selectedProvider, setSelectedProvider] =\n React.useState<Provider | null>(lastSelectedProvider ?? null);\n const [query, setQuery] = React.useState(\"\");\n const debouncedQuery = useDebounce(query, 300);\n\n React.useEffect(() => {\n if (providers.length === 0) {\n if (selectedProvider !== null) setSelectedProvider(null);\n return;\n }\n if (selectedProvider && providers.includes(selectedProvider)) return;\n const fallback =\n lastSelectedProvider && providers.includes(lastSelectedProvider)\n ? lastSelectedProvider\n : providers[0];\n setSelectedProvider(fallback);\n }, [providers, selectedProvider, lastSelectedProvider]);\n\n const {\n data: repoPages,\n isLoading,\n isError,\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n } = useGitRepositories({ provider: selectedProvider });\n\n const { data: searchResults, isLoading: isSearchLoading } =\n useSearchRepositories(debouncedQuery, selectedProvider);\n\n const allRepositories = React.useMemo(\n () => repoPages?.pages.flatMap((page) => page.items) ?? [],\n [repoPages],\n );\n\n const repositories = debouncedQuery ? (searchResults ?? []) : allRepositories;\n\n const { mutate: createConversation, isPending } = useCreateConversation();\n const isCreatingElsewhere = useIsCreatingConversation();\n const isCreating = isPending || isCreatingElsewhere;\n\n React.useEffect(() => {\n if (!open) return undefined;\n const onDown = (e: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", onDown);\n return () => document.removeEventListener(\"mousedown\", onDown);\n }, [open]);\n\n React.useEffect(() => {\n if (!open) return undefined;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setOpen(false);\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [open]);\n\n const launchRepository = (repo: GitRepository) => {\n if (isCreating) return;\n createConversation(\n {\n repository: {\n name: repo.full_name,\n gitProvider: repo.git_provider,\n branch: repo.main_branch ?? \"main\",\n },\n },\n {\n onSuccess: (data) => {\n setOpen(false);\n navigate(`/conversations/${data.conversation_id}`);\n },\n },\n );\n };\n\n const handleProviderChange = (provider: Provider) => {\n setSelectedProvider(provider);\n setLastSelectedProvider(provider);\n setQuery(\"\");\n };\n\n const itemClass = dropdownMenuRowClassName;\n\n React.useEffect(() => {\n if (!open) return;\n if (debouncedQuery) return;\n if (!hasNextPage || isFetchingNextPage || isLoading) return;\n if (repositories.length === 0 || repositories.length >= 10) return;\n fetchNextPage();\n }, [\n open,\n debouncedQuery,\n hasNextPage,\n isFetchingNextPage,\n isLoading,\n repositories.length,\n fetchNextPage,\n ]);\n\n const isListLoading = debouncedQuery ? isSearchLoading : isLoading;\n const showLoadMore =\n !debouncedQuery && hasNextPage && repositories.length > 0;\n\n const toggleOpen = React.useCallback(() => {\n setOpen((o) => !o);\n }, []);\n\n const showPopover = open && (!useFixedPlacement || fixedBox !== null);\n\n const fixedStyle: React.CSSProperties | undefined =\n useFixedPlacement && fixedBox\n ? {\n position: \"fixed\",\n top: fixedBox.top,\n left: fixedBox.left,\n width: fixedBox.width,\n }\n : undefined;\n\n return (\n <div\n className={cn(!useFixedPlacement && \"relative\", className)}\n ref={popoverRef}\n >\n <span ref={triggerWrapRef} className=\"inline-flex\">\n {trigger({\n onClick: toggleOpen,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n disabled: isCreating,\n })}\n </span>\n\n {showPopover && (\n <div\n data-testid={popoverTestId}\n className={cn(\n NEW_CONVERSATION_DROPDOWN_SURFACE,\n !useFixedPlacement &&\n cn(\"absolute top-full mt-0\", popoverClassName),\n )}\n style={fixedStyle}\n >\n {providers.length > 1 && (\n <div\n className=\"flex items-center gap-1 px-1 py-1\"\n data-testid=\"cloud-provider-tabs\"\n >\n {providers.map((provider) => {\n const isActive = provider === selectedProvider;\n return (\n <button\n key={provider}\n type=\"button\"\n data-testid={`cloud-provider-tab-${provider}`}\n onClick={() => handleProviderChange(provider)}\n className={cn(\n \"flex items-center gap-1 rounded border px-2 py-1 text-xs\",\n dropdownInstantColorClassName,\n isActive\n ? \"border-[var(--oh-border-subtle)] bg-[var(--oh-interactive-hover)] text-white\"\n : \"border-transparent text-[var(--oh-text-secondary)] hover:text-white\",\n )}\n >\n <GitProviderIcon gitProvider={provider} />\n <span className=\"capitalize\">{provider}</span>\n </button>\n );\n })}\n </div>\n )}\n\n <div className=\"px-2\">\n <div className=\"relative\">\n <SearchIcon\n width={16}\n height={16}\n aria-hidden\n className=\"pointer-events-none absolute left-0 top-1/2 -translate-y-1/2 text-[var(--oh-muted)]\"\n />\n <input\n type=\"text\"\n data-testid=\"cloud-repo-search-input\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={t(I18nKey.COMMON$SEARCH_REPOSITORIES)}\n disabled={!selectedProvider}\n className={cn(\n \"w-full border-0 bg-transparent py-1.5 pl-6 pr-0 text-sm text-white\",\n \"outline-none placeholder:text-[var(--oh-muted)]\",\n \"focus:outline-none focus:ring-0\",\n \"disabled:cursor-not-allowed disabled:opacity-60\",\n )}\n />\n </div>\n </div>\n\n <Divider inset=\"menu\" />\n\n <ul\n className={cn(\n \"max-h-[40vh] overflow-y-auto custom-scrollbar-always sm:max-h-[280px]\",\n dropdownMenuListClassName,\n )}\n >\n {isListLoading && repositories.length === 0 && (\n <li\n className=\"px-2 py-2 text-sm text-[var(--oh-muted)] italic\"\n data-testid=\"cloud-repo-loading\"\n >\n {t(I18nKey.HOME$LOADING_REPOSITORIES)}\n </li>\n )}\n {isError && (\n <li\n className=\"px-2 py-2 text-sm text-[#F87171]\"\n data-testid=\"cloud-repo-error\"\n >\n {t(I18nKey.HOME$FAILED_TO_LOAD_REPOSITORIES)}\n </li>\n )}\n {!isListLoading &&\n !isError &&\n repositories.length === 0 &&\n !!selectedProvider && (\n <li\n className=\"px-2 py-2 text-sm text-[var(--oh-muted)] italic\"\n data-testid=\"cloud-repo-empty\"\n >\n {t(I18nKey.GITHUB$NO_RESULTS)}\n </li>\n )}\n {repositories.map((repo) => (\n <RepoListItem\n key={`${repo.git_provider}:${repo.id}`}\n repo={repo}\n disabled={isCreating}\n onSelect={launchRepository}\n itemClass={itemClass}\n />\n ))}\n {showLoadMore && (\n <li>\n <button\n type=\"button\"\n data-testid=\"cloud-repo-load-more\"\n disabled={isFetchingNextPage}\n onClick={() => fetchNextPage()}\n className={itemClass}\n >\n <span className=\"text-[var(--oh-text-secondary)]\">\n {isFetchingNextPage\n ? t(I18nKey.HOME$LOADING_MORE_REPOSITORIES)\n : t(I18nKey.CONVERSATION$LOAD_MORE)}\n </span>\n </button>\n </li>\n )}\n </ul>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"cloud-new-conversation-menu.js","names":[],"sources":["../../../../src/components/features/conversation-panel/cloud-new-conversation-menu.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { useCreateConversation } from \"#/hooks/mutation/use-create-conversation\";\nimport { useNavigation } from \"#/context/navigation-context\";\nimport { useIsCreatingConversation } from \"#/hooks/use-is-creating-conversation\";\nimport { useGitRepositories } from \"#/hooks/query/use-git-repositories\";\nimport { useSearchRepositories } from \"#/hooks/query/use-search-repositories\";\nimport { useUserProviders } from \"#/hooks/use-user-providers\";\nimport { useDebounce } from \"#/hooks/use-debounce\";\nimport { useHomeStore } from \"#/stores/home-store\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\nimport {\n dropdownMenuRowClassName,\n dropdownInstantColorClassName,\n dropdownMenuListClassName,\n dropdownMenuRowIconWrapperClassName,\n} from \"#/utils/dropdown-classes\";\nimport { GitRepository } from \"#/types/git\";\nimport { Provider } from \"#/types/settings\";\nimport RepoIcon from \"#/icons/repo.svg?react\";\nimport SearchIcon from \"#/icons/search.svg?react\";\nimport { GitProviderIcon } from \"#/components/shared/git-provider-icon\";\nimport { Divider } from \"#/ui/divider\";\nimport { NEW_CONVERSATION_DROPDOWN_SURFACE } from \"./new-conversation-dropdown-styles\";\nimport { usePopoverFixedPlacement } from \"#/hooks/use-popover-fixed-placement\";\n\nexport type CloudNewConversationMenuTriggerProps = {\n onClick: () => void;\n \"aria-expanded\": boolean;\n \"aria-haspopup\": \"menu\";\n disabled?: boolean;\n};\n\nexport interface CloudNewConversationMenuProps {\n trigger: (props: CloudNewConversationMenuTriggerProps) => React.ReactNode;\n className?: string;\n popoverClassName: string;\n popoverTestId?: string;\n useFixedPlacement?: boolean;\n}\n\ninterface RepoListItemProps {\n repo: GitRepository;\n disabled: boolean;\n onSelect: (repo: GitRepository) => void;\n itemClass: string;\n}\n\nfunction RepoListItem({\n repo,\n disabled,\n onSelect,\n itemClass,\n}: RepoListItemProps) {\n return (\n <li>\n <button\n type=\"button\"\n disabled={disabled}\n data-testid=\"launch-repository\"\n data-repo-name={repo.full_name}\n onClick={() => onSelect(repo)}\n className={itemClass}\n >\n <span className={dropdownMenuRowIconWrapperClassName} aria-hidden>\n <RepoIcon width={14} height={14} />\n </span>\n <span className=\"truncate\">{repo.full_name}</span>\n </button>\n </li>\n );\n}\n\n/**\n * Repository search + launch flow for cloud backends.\n * Shared by the sidebar \"+ New conversation\" control and the conversation\n * panel \"new thread folder\" opener.\n */\nexport function CloudNewConversationMenu({\n trigger,\n className,\n popoverClassName,\n popoverTestId = \"new-conversation-popover\",\n useFixedPlacement = false,\n}: CloudNewConversationMenuProps) {\n const { t } = useTranslation(\"openhands\");\n const { navigate } = useNavigation();\n\n const { providers } = useUserProviders();\n const { lastSelectedProvider, setLastSelectedProvider } = useHomeStore();\n\n const [open, setOpen] = React.useState(false);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const triggerWrapRef = React.useRef<HTMLSpanElement>(null);\n const fixedBox = usePopoverFixedPlacement(triggerWrapRef, {\n open,\n enabled: useFixedPlacement,\n });\n const [selectedProvider, setSelectedProvider] =\n React.useState<Provider | null>(lastSelectedProvider ?? null);\n const [query, setQuery] = React.useState(\"\");\n const debouncedQuery = useDebounce(query, 300);\n\n React.useEffect(() => {\n if (providers.length === 0) {\n if (selectedProvider !== null) setSelectedProvider(null);\n return;\n }\n if (selectedProvider && providers.includes(selectedProvider)) return;\n const fallback =\n lastSelectedProvider && providers.includes(lastSelectedProvider)\n ? lastSelectedProvider\n : providers[0];\n setSelectedProvider(fallback);\n }, [providers, selectedProvider, lastSelectedProvider]);\n\n const {\n data: repoPages,\n isLoading,\n isError,\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n } = useGitRepositories({ provider: selectedProvider });\n\n const { data: searchResults, isLoading: isSearchLoading } =\n useSearchRepositories(debouncedQuery, selectedProvider);\n\n const allRepositories = React.useMemo(\n () => repoPages?.pages.flatMap((page) => page.items) ?? [],\n [repoPages],\n );\n\n const repositories = debouncedQuery ? (searchResults ?? []) : allRepositories;\n\n const { mutate: createConversation, isPending } = useCreateConversation();\n const isCreatingElsewhere = useIsCreatingConversation();\n const isCreating = isPending || isCreatingElsewhere;\n\n React.useEffect(() => {\n if (!open) return undefined;\n const onDown = (e: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", onDown);\n return () => document.removeEventListener(\"mousedown\", onDown);\n }, [open]);\n\n React.useEffect(() => {\n if (!open) return undefined;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setOpen(false);\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [open]);\n\n const launchRepository = (repo: GitRepository) => {\n if (isCreating) return;\n createConversation(\n {\n repository: {\n name: repo.full_name,\n gitProvider: repo.git_provider,\n branch: repo.main_branch ?? \"main\",\n },\n entryPoint: \"sidebar_cloud_menu\",\n },\n {\n onSuccess: (data) => {\n setOpen(false);\n navigate(`/conversations/${data.conversation_id}`);\n },\n },\n );\n };\n\n const handleProviderChange = (provider: Provider) => {\n setSelectedProvider(provider);\n setLastSelectedProvider(provider);\n setQuery(\"\");\n };\n\n const itemClass = dropdownMenuRowClassName;\n\n React.useEffect(() => {\n if (!open) return;\n if (debouncedQuery) return;\n if (!hasNextPage || isFetchingNextPage || isLoading) return;\n if (repositories.length === 0 || repositories.length >= 10) return;\n fetchNextPage();\n }, [\n open,\n debouncedQuery,\n hasNextPage,\n isFetchingNextPage,\n isLoading,\n repositories.length,\n fetchNextPage,\n ]);\n\n const isListLoading = debouncedQuery ? isSearchLoading : isLoading;\n const showLoadMore =\n !debouncedQuery && hasNextPage && repositories.length > 0;\n\n const toggleOpen = React.useCallback(() => {\n setOpen((o) => !o);\n }, []);\n\n const showPopover = open && (!useFixedPlacement || fixedBox !== null);\n\n const fixedStyle: React.CSSProperties | undefined =\n useFixedPlacement && fixedBox\n ? {\n position: \"fixed\",\n top: fixedBox.top,\n left: fixedBox.left,\n width: fixedBox.width,\n }\n : undefined;\n\n return (\n <div\n className={cn(!useFixedPlacement && \"relative\", className)}\n ref={popoverRef}\n >\n <span ref={triggerWrapRef} className=\"inline-flex\">\n {trigger({\n onClick: toggleOpen,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n disabled: isCreating,\n })}\n </span>\n\n {showPopover && (\n <div\n data-testid={popoverTestId}\n className={cn(\n NEW_CONVERSATION_DROPDOWN_SURFACE,\n !useFixedPlacement &&\n cn(\"absolute top-full mt-0\", popoverClassName),\n )}\n style={fixedStyle}\n >\n {providers.length > 1 && (\n <div\n className=\"flex items-center gap-1 px-1 py-1\"\n data-testid=\"cloud-provider-tabs\"\n >\n {providers.map((provider) => {\n const isActive = provider === selectedProvider;\n return (\n <button\n key={provider}\n type=\"button\"\n data-testid={`cloud-provider-tab-${provider}`}\n onClick={() => handleProviderChange(provider)}\n className={cn(\n \"flex items-center gap-1 rounded border px-2 py-1 text-xs\",\n dropdownInstantColorClassName,\n isActive\n ? \"border-[var(--oh-border-subtle)] bg-[var(--oh-interactive-hover)] text-white\"\n : \"border-transparent text-[var(--oh-text-secondary)] hover:text-white\",\n )}\n >\n <GitProviderIcon gitProvider={provider} />\n <span className=\"capitalize\">{provider}</span>\n </button>\n );\n })}\n </div>\n )}\n\n <div className=\"px-2\">\n <div className=\"relative\">\n <SearchIcon\n width={16}\n height={16}\n aria-hidden\n className=\"pointer-events-none absolute left-0 top-1/2 -translate-y-1/2 text-[var(--oh-muted)]\"\n />\n <input\n type=\"text\"\n data-testid=\"cloud-repo-search-input\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={t(I18nKey.COMMON$SEARCH_REPOSITORIES)}\n disabled={!selectedProvider}\n className={cn(\n \"w-full border-0 bg-transparent py-1.5 pl-6 pr-0 text-sm text-white\",\n \"outline-none placeholder:text-[var(--oh-muted)]\",\n \"focus:outline-none focus:ring-0\",\n \"disabled:cursor-not-allowed disabled:opacity-60\",\n )}\n />\n </div>\n </div>\n\n <Divider inset=\"menu\" />\n\n <ul\n className={cn(\n \"max-h-[40vh] overflow-y-auto custom-scrollbar-always sm:max-h-[280px]\",\n dropdownMenuListClassName,\n )}\n >\n {isListLoading && repositories.length === 0 && (\n <li\n className=\"px-2 py-2 text-sm text-[var(--oh-muted)] italic\"\n data-testid=\"cloud-repo-loading\"\n >\n {t(I18nKey.HOME$LOADING_REPOSITORIES)}\n </li>\n )}\n {isError && (\n <li\n className=\"px-2 py-2 text-sm text-[#F87171]\"\n data-testid=\"cloud-repo-error\"\n >\n {t(I18nKey.HOME$FAILED_TO_LOAD_REPOSITORIES)}\n </li>\n )}\n {!isListLoading &&\n !isError &&\n repositories.length === 0 &&\n !!selectedProvider && (\n <li\n className=\"px-2 py-2 text-sm text-[var(--oh-muted)] italic\"\n data-testid=\"cloud-repo-empty\"\n >\n {t(I18nKey.GITHUB$NO_RESULTS)}\n </li>\n )}\n {repositories.map((repo) => (\n <RepoListItem\n key={`${repo.git_provider}:${repo.id}`}\n repo={repo}\n disabled={isCreating}\n onSelect={launchRepository}\n itemClass={itemClass}\n />\n ))}\n {showLoadMore && (\n <li>\n <button\n type=\"button\"\n data-testid=\"cloud-repo-load-more\"\n disabled={isFetchingNextPage}\n onClick={() => fetchNextPage()}\n className={itemClass}\n >\n <span className=\"text-[var(--oh-text-secondary)]\">\n {isFetchingNextPage\n ? t(I18nKey.HOME$LOADING_MORE_REPOSITORIES)\n : t(I18nKey.CONVERSATION$LOAD_MORE)}\n </span>\n </button>\n </li>\n )}\n </ul>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-card-footer.cjs","names":[],"sources":["../../../../../src/components/features/conversation-panel/conversation-card/conversation-card-footer.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { formatTimeDelta } from \"#/utils/format-time-delta\";\nimport { cn } from \"#/utils/utils\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { RepositorySelection } from \"#/api/open-hands.types\";\nimport { ExecutionStatus } from \"#/types/agent-server/core/base/common\";\nimport { isExecutionPaused } from \"#/utils/status\";\nimport {\n getAcpProviderDisplayName,\n labelForAcpModel,\n resolveAcpProviderIcon,\n} from \"#/constants/acp-providers\";\nimport { formatNativeModelName } from \"#/utils/format-model-name\";\nimport {\n AgentBrandIcon,\n type AgentBrandIconKind,\n} from \"#/components/shared/agent-brand-icon\";\nimport { ConversationRepoLink } from \"./conversation-repo-link\";\nimport { NoRepository } from \"./no-repository\";\n\ninterface ConversationCardFooterProps {\n selectedRepository: RepositorySelection | null;\n lastUpdatedAt: string;\n createdAt?: string;\n executionStatus?: ExecutionStatus | null;\n workspaceWorkingDir?: string | null;\n showRepositoryMetadata?: boolean;\n showTimestamp?: boolean;\n llmModel?: string | null;\n /**\n * Whether to render the agent/model chip. Wired to the conversation\n * panel's \"LLM model\" toggle (off by default); gates the chip uniformly\n * for both ACP and OpenHands cards.\n */\n showAgentChip?: boolean;\n /**\n * High-level kind of the conversation's agent. Drives the chip's icon:\n * the OpenHands logo for native conversations and the resolved ACP brand\n * mark for ACP conversations. Defensive against stray ``acpServer``\n * values reaching an OpenHands card.\n */\n agentKind?: \"openhands\" | \"acp\" | null;\n /**\n * Registry key of the ACP CLI server (``\"claude-code\"`` / ``\"codex\"`` /\n * ``\"gemini-cli\"`` / unknown / null). Resolved to a human display name\n * via {@link getAcpProviderDisplayName}; unknown / null falls back to\n * a generic \"ACP\" label so a Custom-command preset still produces a\n * useful chip.\n */\n acpServer?: string | null;\n}\n\nexport function ConversationCardFooter({\n selectedRepository,\n lastUpdatedAt,\n createdAt,\n executionStatus,\n workspaceWorkingDir,\n showRepositoryMetadata = true,\n showTimestamp = true,\n llmModel,\n showAgentChip = false,\n agentKind = null,\n acpServer = null,\n}: ConversationCardFooterProps) {\n const { t } = useTranslation(\"openhands\");\n\n const isPaused = isExecutionPaused(executionStatus);\n\n // Single inline chip per conversation: [brand mark] {model text}. Gated by\n // the conversation panel's \"LLM model\" toggle (off by default) and applied\n // uniformly to both kinds — OpenHands shows the logo + ``agent.llm.model``;\n // ACP shows the provider brand mark + model resolved through PR 730's\n // adapter chain, falling back to the provider display name when no model is\n // available so the chip never collapses to icon-only.\n let chip: {\n kind: AgentBrandIconKind;\n text: string;\n tooltip: string;\n } | null = null;\n if (showAgentChip) {\n if (agentKind === \"acp\") {\n const providerName =\n getAcpProviderDisplayName(acpServer) ??\n t(I18nKey.CONVERSATION$ACP_AGENT_GENERIC);\n // Prefer the provider's picker label (e.g. \"Claude Opus 4.7\") over the\n // raw ``acp_model`` ID; falls back to the raw ID for custom overrides\n // and to the provider name when there's no model at all.\n const modelLabel = labelForAcpModel(acpServer, llmModel);\n const text = modelLabel ?? providerName;\n chip = {\n kind: resolveAcpProviderIcon(acpServer),\n text,\n tooltip: modelLabel ? `${providerName} · ${modelLabel}` : providerName,\n };\n } else if (llmModel) {\n // Strip the routing prefix (e.g. \"anthropic/claude-…\" → \"claude-…\") for\n // the chip text; keep the full routing string in the tooltip.\n chip = {\n kind: \"openhands\",\n text: formatNativeModelName(llmModel) ?? llmModel,\n tooltip: llmModel,\n };\n }\n }\n\n // Match title text start: 18px status column + gap-2 (8px).\n const metadataIndentClass =\n executionStatus !== undefined ? \"pl-[26px]\" : undefined;\n\n return (\n <div\n className={cn(\n \"flex flex-col gap-0.5 mt-0.5 w-full min-w-0\",\n isPaused && \"opacity-60\",\n )}\n >\n {chip ? (\n <div className={metadataIndentClass}>\n <span\n data-testid=\"conversation-card-agent-chip\"\n className=\"inline-flex items-center gap-1 text-xs text-[var(--oh-muted)] max-w-full min-w-0\"\n title={chip.tooltip}\n >\n <AgentBrandIcon kind={chip.kind} />\n <span className=\"truncate\">{chip.text}</span>\n </span>\n </div>\n ) : null}\n <div\n className={cn(\n \"flex flex-row items-center gap-2 w-full min-w-0\",\n showRepositoryMetadata && metadataIndentClass,\n )}\n >\n {showRepositoryMetadata &&\n (selectedRepository?.selected_repository ? (\n <ConversationRepoLink selectedRepository={selectedRepository} />\n ) : (\n <NoRepository workspaceWorkingDir={workspaceWorkingDir} />\n ))}\n <div className=\"flex items-center gap-2 shrink-0 ml-auto\">\n {showTimestamp && (createdAt ?? lastUpdatedAt) && (\n <p className=\"text-xs text-[var(--oh-muted)] text-right\">\n <time>\n {`${formatTimeDelta(lastUpdatedAt ?? createdAt)} ${t(I18nKey.CONVERSATION$AGO)}`}\n </time>\n </p>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"2kBAoDA,SAAgB,EAAuB,CACrC,qBACA,gBACA,YACA,kBACA,sBACA,yBAAyB,GACzB,gBAAgB,GAChB,WACA,gBAAgB,GAChB,YAAY,KACZ,YAAY,MACkB,CAC9B,GAAM,CAAE,KAAM,EAAA,eAAe,YAAY,CAEnC,EAAW,EAAA,kBAAkB,EAAgB,CAQ/C,EAIO,KACX,GAAI,KACE,IAAc,MAAO,CACvB,IAAM,EACJ,EAAA,0BAA0B,EAAU,EACpC,EAAE,EAAA,QAAQ,+BAA+B,CAIrC,EAAa,EAAA,iBAAiB,EAAW,EAAS,CAClD,EAAO,GAAc,EAC3B,EAAO,CACL,KAAM,EAAA,uBAAuB,EAAU,CACvC,OACA,QAAS,EAAa,GAAG,EAAa,KAAK,IAAe,EAC3D,MACQ,IAGT,EAAO,CACL,KAAM,YACN,KAAM,EAAA,sBAAsB,EAAS,EAAI,EACzC,QAAS,EACV,EAKL,IAAM,EACJ,IAAoB,IAAA,GAA0B,IAAA,GAAd,YAElC,OACE,EAAA,EAAA,MAAC,MAAD,CACE,UAAW,EAAA,GACT,8CACA,GAAY,aACb,UAJH,CAMG,GACC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,YACd,EAAA,EAAA,MAAC,OAAD,CACE,cAAY,+BACZ,UAAU,mFACV,MAAO,EAAK,iBAHd,EAKE,EAAA,EAAA,KAAC,EAAA,eAAD,CAAgB,KAAM,EAAK,KAAQ,CAAA,EACnC,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oBAAY,EAAK,KAAY,CAAA,CACxC,GACH,CAAA,CACJ,MACJ,EAAA,EAAA,MAAC,MAAD,CACE,UAAW,EAAA,GACT,kDACA,GAA0B,EAC3B,UAJH,CAMG,IACE,GAAoB,qBACnB,EAAA,EAAA,KAAC,EAAA,qBAAD,CAA0C,qBAAsB,CAAA,EAEhE,EAAA,EAAA,KAAC,EAAA,aAAD,CAAmC,sBAAuB,CAAA,GAE9D,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,oDACZ,IAAkB,GAAa,KAC9B,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,sDACX,EAAA,EAAA,KAAC,OAAD,CAAA,SACG,GAAG,EAAA,gBAAgB,GAAiB,EAAU,CAAC,GAAG,EAAE,EAAA,QAAQ,iBAAiB,GACzE,CAAA,CACL,CAAA,CAEF,CAAA,CACF,GACF"}
1
+ {"version":3,"file":"conversation-card-footer.cjs","names":[],"sources":["../../../../../src/components/features/conversation-panel/conversation-card/conversation-card-footer.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { formatTimeDelta } from \"#/utils/format-time-delta\";\nimport { cn } from \"#/utils/utils\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { RepositorySelection } from \"#/api/open-hands.types\";\nimport { ExecutionStatus } from \"#/types/agent-server/core/base/common\";\nimport { isExecutionPaused } from \"#/utils/status\";\nimport {\n getAcpProviderDisplayName,\n labelForAcpModel,\n resolveAcpProviderIcon,\n} from \"#/constants/acp-providers\";\nimport { formatNativeModelName } from \"#/utils/format-model-name\";\nimport {\n AgentBrandIcon,\n type AgentBrandIconKind,\n} from \"#/components/shared/agent-brand-icon\";\nimport { ConversationRepoLink } from \"./conversation-repo-link\";\nimport { NoRepository } from \"./no-repository\";\n\ninterface ConversationCardFooterProps {\n selectedRepository: RepositorySelection | null;\n lastUpdatedAt: string;\n createdAt?: string;\n executionStatus?: ExecutionStatus | null;\n workspaceWorkingDir?: string | null;\n showRepositoryMetadata?: boolean;\n showTimestamp?: boolean;\n llmModel?: string | null;\n /**\n * Whether to render the agent/model chip. Wired to the conversation\n * panel's \"LLM model\" toggle; gates the chip uniformly\n * for both ACP and OpenHands cards.\n */\n showAgentChip?: boolean;\n /**\n * High-level kind of the conversation's agent. Drives the chip's icon:\n * the OpenHands logo for native conversations and the resolved ACP brand\n * mark for ACP conversations. Defensive against stray ``acpServer``\n * values reaching an OpenHands card.\n */\n agentKind?: \"openhands\" | \"acp\" | null;\n /**\n * Registry key of the ACP CLI server (``\"claude-code\"`` / ``\"codex\"`` /\n * ``\"gemini-cli\"`` / unknown / null). Resolved to a human display name\n * via {@link getAcpProviderDisplayName}; unknown / null falls back to\n * a generic \"ACP\" label so a Custom-command preset still produces a\n * useful chip.\n */\n acpServer?: string | null;\n}\n\nexport function ConversationCardFooter({\n selectedRepository,\n lastUpdatedAt,\n createdAt,\n executionStatus,\n workspaceWorkingDir,\n showRepositoryMetadata = true,\n showTimestamp = true,\n llmModel,\n showAgentChip = false,\n agentKind = null,\n acpServer = null,\n}: ConversationCardFooterProps) {\n const { t } = useTranslation(\"openhands\");\n\n const isPaused = isExecutionPaused(executionStatus);\n\n // Single inline chip per conversation: [brand mark] {model text}. Gated by\n // the conversation panel's \"LLM model\" toggle and applied\n // uniformly to both kinds — OpenHands shows the logo + ``agent.llm.model``;\n // ACP shows the provider brand mark + model resolved through PR 730's\n // adapter chain, falling back to the provider display name when no model is\n // available so the chip never collapses to icon-only.\n let chip: {\n kind: AgentBrandIconKind;\n text: string;\n tooltip: string;\n } | null = null;\n if (showAgentChip) {\n if (agentKind === \"acp\") {\n const providerName =\n getAcpProviderDisplayName(acpServer) ??\n t(I18nKey.CONVERSATION$ACP_AGENT_GENERIC);\n // Prefer the provider's picker label (e.g. \"Claude Opus 4.7\") over the\n // raw ``acp_model`` ID; falls back to the raw ID for custom overrides\n // and to the provider name when there's no model at all.\n const modelLabel = labelForAcpModel(acpServer, llmModel);\n const text = modelLabel ?? providerName;\n chip = {\n kind: resolveAcpProviderIcon(acpServer),\n text,\n tooltip: modelLabel ? `${providerName} · ${modelLabel}` : providerName,\n };\n } else if (llmModel) {\n // Strip the routing prefix (e.g. \"anthropic/claude-…\" → \"claude-…\") for\n // the chip text; keep the full routing string in the tooltip.\n chip = {\n kind: \"openhands\",\n text: formatNativeModelName(llmModel) ?? llmModel,\n tooltip: llmModel,\n };\n }\n }\n\n // Match title text start: 18px status column + gap-2 (8px).\n const metadataIndentClass =\n executionStatus !== undefined ? \"pl-[26px]\" : undefined;\n\n return (\n <div\n className={cn(\n \"flex flex-col gap-0.5 mt-0.5 w-full min-w-0\",\n isPaused && \"opacity-60\",\n )}\n >\n {chip ? (\n <div className={metadataIndentClass}>\n <span\n data-testid=\"conversation-card-agent-chip\"\n className=\"inline-flex items-center gap-1 text-xs text-[var(--oh-muted)] max-w-full min-w-0\"\n title={chip.tooltip}\n >\n <AgentBrandIcon kind={chip.kind} />\n <span className=\"truncate\">{chip.text}</span>\n </span>\n </div>\n ) : null}\n <div\n className={cn(\n \"flex flex-row items-center gap-2 w-full min-w-0\",\n showRepositoryMetadata && metadataIndentClass,\n )}\n >\n {showRepositoryMetadata &&\n (selectedRepository?.selected_repository ? (\n <ConversationRepoLink selectedRepository={selectedRepository} />\n ) : (\n <NoRepository workspaceWorkingDir={workspaceWorkingDir} />\n ))}\n <div className=\"flex items-center gap-2 shrink-0 ml-auto\">\n {showTimestamp && (createdAt ?? lastUpdatedAt) && (\n <p className=\"text-xs text-[var(--oh-muted)] text-right\">\n <time>\n {`${formatTimeDelta(lastUpdatedAt ?? createdAt)} ${t(I18nKey.CONVERSATION$AGO)}`}\n </time>\n </p>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"2kBAoDA,SAAgB,EAAuB,CACrC,qBACA,gBACA,YACA,kBACA,sBACA,yBAAyB,GACzB,gBAAgB,GAChB,WACA,gBAAgB,GAChB,YAAY,KACZ,YAAY,MACkB,CAC9B,GAAM,CAAE,KAAM,EAAA,eAAe,YAAY,CAEnC,EAAW,EAAA,kBAAkB,EAAgB,CAQ/C,EAIO,KACX,GAAI,KACE,IAAc,MAAO,CACvB,IAAM,EACJ,EAAA,0BAA0B,EAAU,EACpC,EAAE,EAAA,QAAQ,+BAA+B,CAIrC,EAAa,EAAA,iBAAiB,EAAW,EAAS,CAClD,EAAO,GAAc,EAC3B,EAAO,CACL,KAAM,EAAA,uBAAuB,EAAU,CACvC,OACA,QAAS,EAAa,GAAG,EAAa,KAAK,IAAe,EAC3D,MACQ,IAGT,EAAO,CACL,KAAM,YACN,KAAM,EAAA,sBAAsB,EAAS,EAAI,EACzC,QAAS,EACV,EAKL,IAAM,EACJ,IAAoB,IAAA,GAA0B,IAAA,GAAd,YAElC,OACE,EAAA,EAAA,MAAC,MAAD,CACE,UAAW,EAAA,GACT,8CACA,GAAY,aACb,UAJH,CAMG,GACC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,YACd,EAAA,EAAA,MAAC,OAAD,CACE,cAAY,+BACZ,UAAU,mFACV,MAAO,EAAK,iBAHd,EAKE,EAAA,EAAA,KAAC,EAAA,eAAD,CAAgB,KAAM,EAAK,KAAQ,CAAA,EACnC,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oBAAY,EAAK,KAAY,CAAA,CACxC,GACH,CAAA,CACJ,MACJ,EAAA,EAAA,MAAC,MAAD,CACE,UAAW,EAAA,GACT,kDACA,GAA0B,EAC3B,UAJH,CAMG,IACE,GAAoB,qBACnB,EAAA,EAAA,KAAC,EAAA,qBAAD,CAA0C,qBAAsB,CAAA,EAEhE,EAAA,EAAA,KAAC,EAAA,aAAD,CAAmC,sBAAuB,CAAA,GAE9D,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,oDACZ,IAAkB,GAAa,KAC9B,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,sDACX,EAAA,EAAA,KAAC,OAAD,CAAA,SACG,GAAG,EAAA,gBAAgB,GAAiB,EAAU,CAAC,GAAG,EAAE,EAAA,QAAQ,iBAAiB,GACzE,CAAA,CACL,CAAA,CAEF,CAAA,CACF,GACF"}
@@ -11,7 +11,7 @@ interface ConversationCardFooterProps {
11
11
  llmModel?: string | null;
12
12
  /**
13
13
  * Whether to render the agent/model chip. Wired to the conversation
14
- * panel's "LLM model" toggle (off by default); gates the chip uniformly
14
+ * panel's "LLM model" toggle; gates the chip uniformly
15
15
  * for both ACP and OpenHands cards.
16
16
  */
17
17
  showAgentChip?: boolean;