@openhands/agent-canvas 1.0.0-rc.1 → 1.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (395) hide show
  1. package/README.md +2 -2
  2. package/README.windows.md +2 -2
  3. package/build/assets/{QueryClientProvider-w1cZWY41.js → QueryClientProvider-7oLZ1RtQ.js} +1 -1
  4. package/build/assets/{Trans-BJeYqz2A.js → Trans-rF21Jwln.js} +1 -1
  5. package/build/assets/{acp-providers-DJr8DlNG.js → acp-providers-DZEi8wDz.js} +1 -1
  6. package/build/assets/active-backend-context-CQTk4wD8.js +1 -0
  7. package/build/assets/add-backend-modal-CIfhseZn.js +1 -0
  8. package/build/assets/agent-server-client-options-Dvgeb3x4.js +1 -0
  9. package/build/assets/agent-server-compatibility-BANjmMTo.js +1 -0
  10. package/build/assets/agent-server-conversation-service.api-B82pNNTm.js +5 -0
  11. package/build/assets/{agent-settings-BXBaybB_.js → agent-settings-B6htMeS2.js} +1 -1
  12. package/build/assets/{alert-banner-NeUl1-PQ.js → alert-banner-D41ZKDZT.js} +1 -1
  13. package/build/assets/{analytics-consent-form-modal-DxkThW4K.js → analytics-consent-form-modal-TINgM_jV.js} +1 -1
  14. package/build/assets/api-key-entry-screen-Di1vHgIU.js +1 -0
  15. package/build/assets/{app-settings-C-U6jONZ.js → app-settings-CjCa1MOB.js} +1 -1
  16. package/build/assets/automation-detail-DPoxzTdV.js +1 -0
  17. package/build/assets/{automations-list-BLJzAd-p.js → automations-list-DwUEe2Ea.js} +1 -1
  18. package/build/assets/{back-nav-button-DgkK0Ka6.js → back-nav-button-BDM9vr_o.js} +1 -1
  19. package/build/assets/backend-form-modal-B6q897ZX.js +1 -0
  20. package/build/assets/{backend-synced-settings-badge-BktJcGgH.js → backend-synced-settings-badge-BwTawSCE.js} +1 -1
  21. package/build/assets/{base-modal-DZCNv0A4.js → base-modal-Ba5WcNb6.js} +1 -1
  22. package/build/assets/{brand-button-LBFNic99.js → brand-button-BoiPxAGm.js} +1 -1
  23. package/build/assets/{browser-D08Sp3ZY.js → browser-DTei6kki.js} +1 -1
  24. package/build/assets/browser-store-BjhV_9wS.js +1 -0
  25. package/build/assets/{browser-tab-be3QvXg9.js → browser-tab-DiRTKik8.js} +1 -1
  26. package/build/assets/chat-send-button-06dIuWXm.js +1 -0
  27. package/build/assets/check-BDAbW7je.js +1 -0
  28. package/build/assets/{checkmark-Rmpruj7q.js → checkmark-BB7QCG5T.js} +1 -1
  29. package/build/assets/{chevron-down-KhWYEjeW.js → chevron-down-DUxWwzTm.js} +1 -1
  30. package/build/assets/{chevron-left-small-6nyFCWVQ.js → chevron-left-small-CuuwpRi9.js} +1 -1
  31. package/build/assets/{circle-plus-check-toggle-DquBwJ_6.js → circle-plus-check-toggle-B3_W6-nt.js} +1 -1
  32. package/build/assets/{close-D_o3d8QM.js → close-Cz0OAgTy.js} +1 -1
  33. package/build/assets/{code-tag-DhsjDB-v.js → code-tag-Cz9AIz-X.js} +1 -1
  34. package/build/assets/{color-themes-0biOprdo.js → color-themes-B9n7pBQl.js} +1 -1
  35. package/build/assets/{combobox-caret-CO7eozIY.js → combobox-caret-DwMmhrrA.js} +1 -1
  36. package/build/assets/{command-store-UzKGSUC2.js → command-store-DAd3K0d_.js} +1 -1
  37. package/build/assets/{condenser-settings-BulzYEuW.js → condenser-settings-DczjwkIp.js} +1 -1
  38. package/build/assets/{confirmation-modal-CMAtd9R0.js → confirmation-modal-C_lds1Tb.js} +1 -1
  39. package/build/assets/{context-menu-list-item-D0swnhFt.js → context-menu-list-item-DhG1Ln5m.js} +1 -1
  40. package/build/assets/conversation-CBlJiDaV.js +19 -0
  41. package/build/assets/conversation-Dss8XCN_.js +1 -0
  42. package/build/assets/conversation-panel-B5sVpsz5.js +1 -0
  43. package/build/assets/conversation-service.api-B4s-xIOK.js +1 -0
  44. package/build/assets/conversation-state-store-BUU90dVq.js +1 -0
  45. package/build/assets/{conversation-store-CC-isCnP.js → conversation-store-kHcewy1E.js} +1 -1
  46. package/build/assets/{conversation-tab-empty-state-DYjKsg_c.js → conversation-tab-empty-state-5bW9CQke.js} +1 -1
  47. package/build/assets/conversation-websocket-context-C2yKCqvj.js +3 -0
  48. package/build/assets/{copy-BM0RpLez.js → copy-CA1Dblua.js} +1 -1
  49. package/build/assets/{custom-toast-handlers-BohXx7uh.js → custom-toast-handlers-fgD4IYsu.js} +1 -1
  50. package/build/assets/{declaration-DaUdB2Wg.js → declaration-IA661TBv.js} +1 -1
  51. package/build/assets/{device-verify-DiEJqpJb.js → device-verify-BVl4GEvt.js} +1 -1
  52. package/build/assets/{dist-xtCm0O6P.js → dist-B-SKiGDl.js} +1 -1
  53. package/build/assets/dist-CBUfAk0Z.js +1 -0
  54. package/build/assets/{dropdown-classes-Vqz86I0R.js → dropdown-classes-lT1LUsbO.js} +1 -1
  55. package/build/assets/edit-automation-modal-kc_FzbzK.js +1 -0
  56. package/build/assets/ellipsis-button-DRRmCrWi.js +1 -0
  57. package/build/assets/{entry.client-BvKgdCQ9.js → entry.client-CWkbusD1.js} +2 -2
  58. package/build/assets/{enum-filter-dropdown-DdFgk0EM.js → enum-filter-dropdown-DlY0Q3fj.js} +1 -1
  59. package/build/assets/{environment-switch-overlay-CuBuZOaa.js → environment-switch-overlay-BrHKX6_Z.js} +1 -1
  60. package/build/assets/{extensions-hub-Dayqvv0n.js → extensions-hub-NbQnt-cn.js} +1 -1
  61. package/build/assets/extensions-navigation-oOk5yl8X.js +1 -0
  62. package/build/assets/{file-DwHCkWZT.js → file-DM0ihEsO.js} +1 -1
  63. package/build/assets/files-tab-mK7Mdyuf.js +1 -0
  64. package/build/assets/files-tab-store-QlUCuW8b.js +1 -0
  65. package/build/assets/{folder-2h1hR1Qb.js → folder-UGYUKpqb.js} +1 -1
  66. package/build/assets/git-control-bar-branch-button-C1qmab0K.js +27 -0
  67. package/build/assets/{globe-qFjFNG6J.js → globe-2otpEmVh.js} +1 -1
  68. package/build/assets/home-ChuA06Hv.js +1 -0
  69. package/build/assets/{i18n-zDndR1Ne.js → i18n-CyvU1o95.js} +1 -1
  70. package/build/assets/install-server-modal--lZ1HSHB.js +1 -0
  71. package/build/assets/{launch-I00QV8YT.js → launch-BADsYeGp.js} +1 -1
  72. package/build/assets/{lesson-plan-C18uB_56.js → lesson-plan-5O2tVbD1.js} +1 -1
  73. package/build/assets/{link-external-DtcdPFbw.js → link-external-kU6aFXU6.js} +1 -1
  74. package/build/assets/llm-client-BnqeDPua.js +1 -0
  75. package/build/assets/llm-settings-D477P0Lg.js +1 -0
  76. package/build/assets/llm-settings-DtlQ7i4C.js +1 -0
  77. package/build/assets/{loading-spinner-DNwR4--Z.js → loading-spinner-CFuA0UNt.js} +1 -1
  78. package/build/assets/manage-backends-modal-sH7l5NgI.js +1 -0
  79. package/build/assets/manifest-17af0b17.js +1 -0
  80. package/build/assets/{markdown-renderer-D6B-u2nM.js → markdown-renderer-CZq_UdmE.js} +1 -1
  81. package/build/assets/mcp-DdQ72_AO.js +9 -0
  82. package/build/assets/mcp-client-xEdbDxOL.js +1 -0
  83. package/build/assets/{messages-Bz9TWjlh.js → messages-luW9zf1w.js} +1 -1
  84. package/build/assets/{modal-backdrop-BDqI1zBV.js → modal-backdrop-B1si6TUd.js} +1 -1
  85. package/build/assets/{modal-body-CCLCqX1J.js → modal-body-2Po2nl1e.js} +1 -1
  86. package/build/assets/{modal-classes-DwTdT3IK.js → modal-classes-9XTtWCtF.js} +1 -1
  87. package/build/assets/{modal-close-button-gQgKqUf-.js → modal-close-button-BCvw9IUN.js} +1 -1
  88. package/build/assets/model-selector-DzQRgNGZ.js +1 -0
  89. package/build/assets/{navigation-context-aNGUUtdq.js → navigation-context-CszaA-CJ.js} +1 -1
  90. package/build/assets/{navigation-link-CYkF2y3K.js → navigation-link-DXg4oo29.js} +1 -1
  91. package/build/assets/onboarding-DCL9stdH.js +1 -0
  92. package/build/assets/{openhands-logo-CHmtDV-t.js → openhands-logo-B-IDE1ER.js} +1 -1
  93. package/build/assets/{option-service.api-CGNANEcT.js → option-service.api-DHOGfYKh.js} +1 -1
  94. package/build/assets/organization-service.api-D79cdERN.js +1 -0
  95. package/build/assets/path-utils-CNd_jqv_.js +1 -0
  96. package/build/assets/{pencil-Dr0b2jL1.js → pencil-COslZGUC.js} +1 -1
  97. package/build/assets/{plan-components--aLlpASH.js → plan-components-BRiIX8Wn.js} +1 -1
  98. package/build/assets/{planner-tab-B-5EeCEm.js → planner-tab-QBnZgIXd.js} +1 -1
  99. package/build/assets/plus-D8aJZRkD.js +1 -0
  100. package/build/assets/profiles-client-CesbAK-7.js +1 -0
  101. package/build/assets/{providers-DknP6O2g.js → providers-Bpq3xFRA.js} +1 -1
  102. package/build/assets/proxy-wIasY2Po.js +1 -0
  103. package/build/assets/{query-client-config-CWWGQWvw.js → query-client-config-CITeuHD7.js} +1 -1
  104. package/build/assets/{recommended-automations-launcher-BIul0osB.js → recommended-automations-launcher-B01jchhe.js} +1 -1
  105. package/build/assets/root-BBV8Ew9E.js +2 -0
  106. package/build/assets/root-layout-pQASEqtQ.js +2 -0
  107. package/build/assets/{sdk-section-page-VmtJWH3A.js → sdk-section-page-BQKe3asw.js} +1 -1
  108. package/build/assets/{sdk-settings-schema-DFievvEK.js → sdk-settings-schema-DoRnefvb.js} +1 -1
  109. package/build/assets/{search-BeVRXvX7.js → search-Cbh-hHBu.js} +1 -1
  110. package/build/assets/secrets-service-DEIB-Cfk.js +1 -0
  111. package/build/assets/{secrets-settings-BLMvCkKm.js → secrets-settings-D2EfzdpC.js} +1 -1
  112. package/build/assets/server-client-Cz8PyIbN.js +1 -0
  113. package/build/assets/settings-B7jVceyu.js +1 -0
  114. package/build/assets/settings-client-BUlG0Gzq.js +1 -0
  115. package/build/assets/{settings-dropdown-input-DA_pzHWE.js → settings-dropdown-input-BD7ziSoR.js} +1 -1
  116. package/build/assets/{settings-gear-aNebYlCy.js → settings-gear-xGs_SPgZ.js} +1 -1
  117. package/build/assets/{settings-index-CycvkOoq.js → settings-index-Xj0v9Oas.js} +1 -1
  118. package/build/assets/{settings-input-8y5p4kze.js → settings-input-CPr7vX81.js} +1 -1
  119. package/build/assets/{settings-list-classes-Qk7zl0Wu.js → settings-list-classes-CYDn4jUg.js} +1 -1
  120. package/build/assets/{settings-modal-DdntdOGP.js → settings-modal-CDBy1S9S.js} +1 -1
  121. package/build/assets/{settings-section-header-context-B77tsYlx.js → settings-section-header-context-aD2iq1gD.js} +1 -1
  122. package/build/assets/settings-service.api-CTQ-LpAA.js +1 -0
  123. package/build/assets/{settings-switch-ba4DuiNO.js → settings-switch-CSHSqH99.js} +1 -1
  124. package/build/assets/{settings-utils-BxzHqLmZ.js → settings-utils-BCbzc6-u.js} +1 -1
  125. package/build/assets/shared-conversation-BHEbOdHj.js +1 -0
  126. package/build/assets/{sidebar-mobile-menu-toggle-C0mmabKj.js → sidebar-mobile-menu-toggle-YYPXGikp.js} +1 -1
  127. package/build/assets/{sidebar-nav-link-BsYdDFfb.js → sidebar-nav-link-CiXbBMQx.js} +1 -1
  128. package/build/assets/{sidebar-store-DnQAJAE5.js → sidebar-store-B76R2gP8.js} +1 -1
  129. package/build/assets/{skill-card-pill-row-BhUlGcYB.js → skill-card-pill-row-BXILn-GK.js} +1 -1
  130. package/build/assets/{skills-TYjOUQ2d.js → skills-CCaEu1KQ.js} +1 -1
  131. package/build/assets/skills-client-Cr9F5306.js +1 -0
  132. package/build/assets/{skills-plugins-D0pdqgKa.js → skills-plugins-Bs5HiF1O.js} +1 -1
  133. package/build/assets/{skills-settings-VqKTkmVl.js → skills-settings-CQYxMmWf.js} +1 -1
  134. package/build/assets/{styled-tooltip-TCp7svY3.js → styled-tooltip-DEr7oa0m.js} +1 -1
  135. package/build/assets/suspense-C9MBE_9N.js +1 -0
  136. package/build/assets/{switch-skeleton-cKrdaYGj.js → switch-skeleton-C87Tx3Tc.js} +1 -1
  137. package/build/assets/{task-list-tab-BiizRsY3.js → task-list-tab-R9N3Wd-U.js} +1 -1
  138. package/build/assets/{telemetry-fQFd-8V3.js → telemetry-DCrd7gnV.js} +2 -2
  139. package/build/assets/{terminal-CpgZx6go.js → terminal-BTM3UFcQ.js} +1 -1
  140. package/build/assets/{terminal-BSYITdM0.js → terminal-DQJ6IJUd.js} +1 -1
  141. package/build/assets/{toggle-switch-CUgOZqZu.js → toggle-switch-C-7juZ1u.js} +1 -1
  142. package/build/assets/{trash-2-CbVljPko.js → trash-2-DAKXV2Wm.js} +1 -1
  143. package/build/assets/{typography-Bvw0IxaN.js → typography-U1gkzkXo.js} +1 -1
  144. package/build/assets/{u-check-circle-half-DjpjzWu3.js → u-check-circle-half-CirnoxXG.js} +1 -1
  145. package/build/assets/{u-check-circle-u9QiS4Fr.js → u-check-circle-lbkXL2z4.js} +1 -1
  146. package/build/assets/{u-circuit-DlBlOwx9.js → u-circuit-Danff2ks.js} +1 -1
  147. package/build/assets/{u-edit-BIYzjs3v.js → u-edit-CH5nNya1.js} +1 -1
  148. package/build/assets/{use-active-conversation-q1wT8LI5.js → use-active-conversation-BY5F6A1G.js} +1 -1
  149. package/build/assets/use-agent-settings-schema-CsuMq16G.js +1 -0
  150. package/build/assets/{use-agent-state-CCHlVqvY.js → use-agent-state-DX5NKEa_.js} +1 -1
  151. package/build/assets/{use-cloud-current-user-id-BAKf91Zx.js → use-cloud-current-user-id-e1Pk7NxQ.js} +1 -1
  152. package/build/assets/use-config-DSzkljTq.js +1 -0
  153. package/build/assets/use-create-conversation-4iJytCT1.js +1 -0
  154. package/build/assets/{use-event-store-Cxqc45Sw.js → use-event-store-Rw1YbvLm.js} +1 -1
  155. package/build/assets/use-get-secrets-BMnFFBUx.js +1 -0
  156. package/build/assets/{use-handle-plan-click-Bfl0zIBr.js → use-handle-plan-click-DYd5a6zN.js} +1 -1
  157. package/build/assets/use-is-authed-DrocXcet.js +1 -0
  158. package/build/assets/{use-launch-skill-in-chat-3ydwpi_M.js → use-launch-skill-in-chat-BoqKmEHC.js} +1 -1
  159. package/build/assets/use-llm-profiles-BhZRf-NX.js +1 -0
  160. package/build/assets/use-runtime-is-ready-DP-KKHO6.js +1 -0
  161. package/build/assets/{use-save-settings-rE9aA29R.js → use-save-settings-hK6LYt0s.js} +1 -1
  162. package/build/assets/use-settings-Clf0Y_P3.js +1 -0
  163. package/build/assets/{use-settings-nav-items-C7MOWj09.js → use-settings-nav-items-oZ-BlOWX.js} +1 -1
  164. package/build/assets/use-skills-v8pQ02ze.js +1 -0
  165. package/build/assets/{use-task-list-YMkSzdDv.js → use-task-list-DydbuRFM.js} +1 -1
  166. package/build/assets/{use-tracking-DQYdZpxi.js → use-tracking-DQU60djN.js} +1 -1
  167. package/build/assets/use-unified-vscode-url-D2Buvmxj.js +1 -0
  168. package/build/assets/use-user-conversation-DwOGM1lc.js +1 -0
  169. package/build/assets/{useMutation-DDo48A8t.js → useMutation-7hG0GuPx.js} +1 -1
  170. package/build/assets/useQuery-JDs8UaWj.js +1 -0
  171. package/build/assets/{useTranslation-CEcjrme-.js → useTranslation-CbJtty1g.js} +1 -1
  172. package/build/assets/{utils-CdgBzLA7.js → utils-CVcuFUYj.js} +1 -1
  173. package/build/assets/{vendor~browser-DWk6fNtJ.js → vendor~browser-3J6WDaAB.js} +1 -1
  174. package/build/assets/{vendor~browser-tab-NZdVoI2Z.js → vendor~browser-tab-DYZ-OmbT.js} +1 -1
  175. package/build/assets/{vendor~conversation-panel~conversation-gp03cWZW.js → vendor~conversation-panel~conversation-DYHL7QoY.js} +1 -1
  176. package/build/assets/{vendor~conversation-panel~conversation~index-BZ5C6Xpz.js → vendor~conversation-panel~conversation~index-Be58Romv.js} +1 -1
  177. package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~oli4dvxu-BodGsxSf.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~oli4dvxu-CBEOG8NF.js} +1 -1
  178. package/build/assets/{vendor~files-tab-Buz36Y-q.js → vendor~files-tab-Diy4WrQz.js} +1 -1
  179. package/build/assets/{vendor~home~conversation-panel~conversation-DG0H5SkJ.js → vendor~home~conversation-panel~conversation-DZ-F7J6T.js} +1 -1
  180. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-Ceeqkj0k.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BighOCzm.js} +1 -1
  181. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-9Il_wz8U.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CWwn0K2j.js} +1 -1
  182. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CXivI4Ym.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-Cntsv2EN.js} +1 -1
  183. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-B7I1ZxCx.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-D13hiNGV.js} +1 -1
  184. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-1pTajrpX.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-dZ3D8RVL.js} +1 -1
  185. package/build/assets/{vendor~launch-DXL78kBf.js → vendor~launch-D65Vw0VZ.js} +1 -1
  186. package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-CfAc3nMS.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-BJPgfJoU.js} +1 -1
  187. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation-DkwcKRtv.js → vendor~root-layout~home~conversation-panel~conversation-Cg0nXqVs.js} +1 -1
  188. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-DSqEbr0N.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~bok0tgtf-Dr8Ly0at.js} +1 -1
  189. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-BC9XTECT.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~bok0tgtf-DveauQfg.js} +1 -1
  190. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~k776hupu-D0XUSHNN.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~jpfhx3ls-BkicN-14.js} +2 -2
  191. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~jxrvuot9-Cwz6a1DC.js +48 -0
  192. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-CcFtthyg.js → vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-C37jLHRk.js} +1 -1
  193. package/build/assets/{vendor~root-layout~home~mcp~automations-list-BnIlGhjl.js → vendor~root-layout~home~mcp~automations-list-BTTZ58Mb.js} +1 -1
  194. package/build/assets/{vendor~root-layout~home~mcp~automations-list-cNHi83v_.js → vendor~root-layout~home~mcp~automations-list-JQ-neDIa.js} +1 -1
  195. package/build/assets/{vendor~root-layout~home~mcp~llm-settings~agent-settings~condenser-settings~verification-set~o7tv66sg-BGWUbqUq.js → vendor~root-layout~home~mcp~llm-settings~agent-settings~condenser-settings~verification-set~o7tv66sg-CbuXadI-.js} +1 -1
  196. package/build/assets/{vendor~root-layout~home~mcp~llm-settings~agent-settings~condenser-settings~verification-set~o7tv66sg-BuCSnjsW.js → vendor~root-layout~home~mcp~llm-settings~agent-settings~condenser-settings~verification-set~o7tv66sg-UYEKKX0Y.js} +2 -2
  197. package/build/assets/{verification-settings-CIqtxWat.js → verification-settings-Rabe5TpK.js} +1 -1
  198. package/build/assets/{vscode-tab-DEt72yJX.js → vscode-tab-zLD5Z-PP.js} +1 -1
  199. package/build/assets/{waiting-for-runtime-message-DSjJfeoj.js → waiting-for-runtime-message-B1Dzhtj5.js} +1 -1
  200. package/build/assets/x-8AbJWTbX.js +1 -0
  201. package/build/assets/{x-mark-DsJ9tDD0.js → x-mark-CmcVOTk2.js} +1 -1
  202. package/build/index.html +4 -4
  203. package/build/locales/ar/openhands.json +1 -0
  204. package/build/locales/ca/openhands.json +1 -0
  205. package/build/locales/de/openhands.json +1 -0
  206. package/build/locales/en/openhands.json +1 -0
  207. package/build/locales/es/openhands.json +1 -0
  208. package/build/locales/fr/openhands.json +1 -0
  209. package/build/locales/it/openhands.json +1 -0
  210. package/build/locales/ja/openhands.json +1 -0
  211. package/build/locales/ko-KR/openhands.json +1 -0
  212. package/build/locales/no/openhands.json +1 -0
  213. package/build/locales/pt/openhands.json +1 -0
  214. package/build/locales/tr/openhands.json +1 -0
  215. package/build/locales/uk/openhands.json +1 -0
  216. package/build/locales/zh-CN/openhands.json +1 -0
  217. package/build/locales/zh-TW/openhands.json +1 -0
  218. package/dist/api/agent-server-adapter.cjs +2 -2
  219. package/dist/api/agent-server-adapter.cjs.map +1 -1
  220. package/dist/api/agent-server-adapter.js +6 -3
  221. package/dist/api/agent-server-adapter.js.map +1 -1
  222. package/dist/api/cloud/proxy.cjs +1 -1
  223. package/dist/api/cloud/proxy.cjs.map +1 -1
  224. package/dist/api/cloud/proxy.d.ts +18 -6
  225. package/dist/api/cloud/proxy.js +1 -1
  226. package/dist/api/cloud/proxy.js.map +1 -1
  227. package/dist/api/conversation-metadata-store.cjs.map +1 -1
  228. package/dist/api/conversation-metadata-store.d.ts +8 -0
  229. package/dist/api/conversation-metadata-store.js.map +1 -1
  230. package/dist/api/conversation-service/agent-server-conversation-service.types.d.ts +9 -0
  231. package/dist/components/features/chat/switch-profile-button.cjs +1 -1
  232. package/dist/components/features/chat/switch-profile-button.cjs.map +1 -1
  233. package/dist/components/features/chat/switch-profile-button.js +5 -5
  234. package/dist/components/features/chat/switch-profile-button.js.map +1 -1
  235. package/dist/components/features/conversation-panel/skills-modal.cjs +1 -1
  236. package/dist/components/features/conversation-panel/skills-modal.cjs.map +1 -1
  237. package/dist/components/features/conversation-panel/skills-modal.js +34 -37
  238. package/dist/components/features/conversation-panel/skills-modal.js.map +1 -1
  239. package/dist/components/features/settings/llm-profiles/profile-actions-menu.cjs +1 -1
  240. package/dist/components/features/settings/llm-profiles/profile-actions-menu.js +1 -0
  241. package/dist/components/features/skills/extensions-navigation.cjs +1 -1
  242. package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
  243. package/dist/components/features/skills/extensions-navigation.d.ts +0 -8
  244. package/dist/components/features/skills/extensions-navigation.js +34 -51
  245. package/dist/components/features/skills/extensions-navigation.js.map +1 -1
  246. package/dist/constants/acp-providers.cjs +1 -1
  247. package/dist/constants/acp-providers.js +1 -1
  248. package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
  249. package/dist/hooks/mutation/use-create-conversation.cjs.map +1 -1
  250. package/dist/hooks/mutation/use-create-conversation.js +26 -14
  251. package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
  252. package/dist/hooks/mutation/use-switch-llm-profile-and-log.cjs +1 -1
  253. package/dist/hooks/mutation/use-switch-llm-profile-and-log.cjs.map +1 -1
  254. package/dist/hooks/mutation/use-switch-llm-profile-and-log.js +26 -15
  255. package/dist/hooks/mutation/use-switch-llm-profile-and-log.js.map +1 -1
  256. package/dist/i18n/declaration.cjs +1 -1
  257. package/dist/i18n/declaration.cjs.map +1 -1
  258. package/dist/i18n/declaration.d.ts +1 -0
  259. package/dist/i18n/declaration.js +1 -1
  260. package/dist/i18n/declaration.js.map +1 -1
  261. package/dist/i18n/translation.cjs +1 -1
  262. package/dist/i18n/translation.cjs.map +1 -1
  263. package/dist/i18n/translation.js +17 -0
  264. package/dist/i18n/translation.js.map +1 -1
  265. package/dist/index.cjs +1 -1
  266. package/dist/index.js +10 -10
  267. package/dist/lib/index.cjs +1 -1
  268. package/dist/lib/index.js +1 -1
  269. package/dist/locales/ar/openhands.json +1 -0
  270. package/dist/locales/ca/openhands.json +1 -0
  271. package/dist/locales/de/openhands.json +1 -0
  272. package/dist/locales/en/openhands.json +1 -0
  273. package/dist/locales/es/openhands.json +1 -0
  274. package/dist/locales/fr/openhands.json +1 -0
  275. package/dist/locales/it/openhands.json +1 -0
  276. package/dist/locales/ja/openhands.json +1 -0
  277. package/dist/locales/ko-KR/openhands.json +1 -0
  278. package/dist/locales/no/openhands.json +1 -0
  279. package/dist/locales/pt/openhands.json +1 -0
  280. package/dist/locales/tr/openhands.json +1 -0
  281. package/dist/locales/uk/openhands.json +1 -0
  282. package/dist/locales/zh-CN/openhands.json +1 -0
  283. package/dist/locales/zh-TW/openhands.json +1 -0
  284. package/dist/package.cjs +1 -1
  285. package/dist/package.cjs.map +1 -1
  286. package/dist/package.js +1 -1
  287. package/dist/package.js.map +1 -1
  288. package/dist/routes/mcp.cjs +1 -1
  289. package/dist/routes/mcp.cjs.map +1 -1
  290. package/dist/routes/mcp.d.ts +0 -1
  291. package/dist/routes/mcp.js +0 -1
  292. package/dist/routes/mcp.js.map +1 -1
  293. package/package.json +1 -1
  294. package/scripts/dev-safe.mjs +18 -2
  295. package/build/assets/acp-route-guard-A__sWgbc.js +0 -1
  296. package/build/assets/active-backend-context-I2w666XY.js +0 -1
  297. package/build/assets/add-backend-modal-BDBDBXsJ.js +0 -1
  298. package/build/assets/agent-server-client-options-9agOSarV.js +0 -1
  299. package/build/assets/agent-server-compatibility-B7QStIcH.js +0 -1
  300. package/build/assets/agent-server-conversation-service.api-Cagoqq1V.js +0 -5
  301. package/build/assets/api-key-entry-screen-ByXA4hXH.js +0 -1
  302. package/build/assets/automation-detail-Dbmgt974.js +0 -1
  303. package/build/assets/backend-form-modal-CeB983Sj.js +0 -1
  304. package/build/assets/browser-store-JRrcGdlk.js +0 -1
  305. package/build/assets/chat-send-button-5qz0zj6R.js +0 -1
  306. package/build/assets/check-CZhEL6rP.js +0 -1
  307. package/build/assets/conversation-BrjF2-Ky.js +0 -1
  308. package/build/assets/conversation-HgR_TTPE.js +0 -19
  309. package/build/assets/conversation-panel-BlRcO5AC.js +0 -1
  310. package/build/assets/conversation-service.api-B_Pdmwsa.js +0 -1
  311. package/build/assets/conversation-state-store-D-w0uurj.js +0 -1
  312. package/build/assets/conversation-websocket-context-G95yfL81.js +0 -3
  313. package/build/assets/dist-Bl-1K5Tv.js +0 -1
  314. package/build/assets/edit-automation-modal-CNZgSSiH.js +0 -1
  315. package/build/assets/extensions-navigation-yFLAU06N.js +0 -1
  316. package/build/assets/files-tab-CMredyYX.js +0 -1
  317. package/build/assets/files-tab-store-DLU28g8C.js +0 -1
  318. package/build/assets/git-control-bar-branch-button-D8blTNXh.js +0 -27
  319. package/build/assets/home-CWw845Rz.js +0 -1
  320. package/build/assets/install-server-modal-D8Q0xZcN.js +0 -1
  321. package/build/assets/llm-client-BqyLKgUN.js +0 -1
  322. package/build/assets/llm-settings-CAnFYAEG.js +0 -1
  323. package/build/assets/llm-settings-DotqpmCF.js +0 -1
  324. package/build/assets/manage-backends-modal-Ceo_SOcf.js +0 -1
  325. package/build/assets/manifest-61ec2d68.js +0 -1
  326. package/build/assets/mcp-EvrLVTla.js +0 -9
  327. package/build/assets/model-selector-CZOi4V7r.js +0 -1
  328. package/build/assets/onboarding-CPCKYvFh.js +0 -1
  329. package/build/assets/organization-service.api-Dn74hBTH.js +0 -1
  330. package/build/assets/path-utils-BjxzIGLp.js +0 -1
  331. package/build/assets/plus-DT-M0FA1.js +0 -1
  332. package/build/assets/profiles-client-BrqNmaDV.js +0 -1
  333. package/build/assets/proxy-sRh0WKI7.js +0 -1
  334. package/build/assets/root-CklXEh3W.js +0 -2
  335. package/build/assets/root-layout-BCA_X8XL.js +0 -2
  336. package/build/assets/secrets-service-DVtlLWY8.js +0 -1
  337. package/build/assets/server-client-DYv_GHPl.js +0 -1
  338. package/build/assets/settings-CXvJUx_j.js +0 -1
  339. package/build/assets/settings-service.api-DxIEtvx6.js +0 -1
  340. package/build/assets/shared-conversation-x41nZQi7.js +0 -1
  341. package/build/assets/use-agent-settings-schema-Yxf7KGyG.js +0 -1
  342. package/build/assets/use-config-DwfigQ_Y.js +0 -1
  343. package/build/assets/use-create-conversation-BEzddjXn.js +0 -1
  344. package/build/assets/use-get-secrets-BlO1BfUo.js +0 -1
  345. package/build/assets/use-is-authed-hHndEep7.js +0 -1
  346. package/build/assets/use-llm-profiles-E-jjZMZw.js +0 -1
  347. package/build/assets/use-runtime-is-ready-DBWzvAmc.js +0 -1
  348. package/build/assets/use-settings-BPTbE7lg.js +0 -1
  349. package/build/assets/use-skills-QhoaIYGF.js +0 -1
  350. package/build/assets/use-unified-vscode-url-DFtNIC1Q.js +0 -1
  351. package/build/assets/use-user-conversation-BRAseenw.js +0 -1
  352. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~dp08i1qy-D8soyAAx.js +0 -48
  353. package/build/assets/vendor~root~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-s~jaomi49z-Cw89stA6.js +0 -1
  354. package/build/assets/x-JOBEVLW0.js +0 -1
  355. package/dist/components/features/conversation-panel/skills-runtime-waiting-state.cjs +0 -2
  356. package/dist/components/features/conversation-panel/skills-runtime-waiting-state.cjs.map +0 -1
  357. package/dist/components/features/conversation-panel/skills-runtime-waiting-state.d.ts +0 -1
  358. package/dist/components/features/conversation-panel/skills-runtime-waiting-state.js +0 -21
  359. package/dist/components/features/conversation-panel/skills-runtime-waiting-state.js.map +0 -1
  360. package/dist/utils/acp-route-guard.cjs +0 -1
  361. package/dist/utils/acp-route-guard.d.ts +0 -26
  362. package/dist/utils/acp-route-guard.js +0 -4
  363. /package/build/assets/{agent-server-ui-style-scope-BwIZYdC1.js → agent-server-ui-style-scope-Bhc5vpWO.js} +0 -0
  364. /package/build/assets/{automation-DJ_3GeXD.js → automation-LZB0MjdV.js} +0 -0
  365. /package/build/assets/{common-DqjLSBOt.js → common-Cfviy7yT.js} +0 -0
  366. /package/build/assets/{context-CEQZwATj.js → context-BBqptpXX.js} +0 -0
  367. /package/build/assets/{conversation-local-storage-YmOVXxxW.js → conversation-local-storage-D5Tre_GA.js} +0 -0
  368. /package/build/assets/{createLucideIcon-Ddu8jDOQ.js → createLucideIcon-C9OEnwvX.js} +0 -0
  369. /package/build/assets/{environment-switch-store-CiurvTtK.js → environment-switch-store-BpKxp6Xq.js} +0 -0
  370. /package/build/assets/{git-status-mapper-DnL9OC8_.js → git-status-mapper-N4-7eaeC.js} +0 -0
  371. /package/build/assets/{handle-capture-consent-3XrjZ8wi.js → handle-capture-consent-OitMkDHc.js} +0 -0
  372. /package/build/assets/{health-store-B5f0S2FY.js → health-store-d-d2ssv4.js} +0 -0
  373. /package/build/assets/{iconBase-BVhFI-0E.js → iconBase-B_5IRYeZ.js} +0 -0
  374. /package/build/assets/{map-provider-C3Z5Dx2J.js → map-provider-BHow6ugd.js} +0 -0
  375. /package/build/assets/{middleware-CfatjPYZ.js → middleware-B5rcobhi.js} +0 -0
  376. /package/build/assets/{objectWithoutPropertiesLoose-DSQKyRhw.js → objectWithoutPropertiesLoose-B-IA9dU9.js} +0 -0
  377. /package/build/assets/{query-keys-tAsQcc_9.js → query-keys-CQaji0wJ.js} +0 -0
  378. /package/build/assets/{react-Dy05vyj5.js → react-CuAHzoGi.js} +0 -0
  379. /package/build/assets/{retrieve-axios-error-message-BY-yIkIq.js → retrieve-axios-error-message-DbnSBc_1.js} +0 -0
  380. /package/build/assets/{sdk-settings-field-metadata-C6KMD-jZ.js → sdk-settings-field-metadata-CtO73dY6.js} +0 -0
  381. /package/build/assets/{settings-DGY6n4J2.js → settings-KgLvVrSm.js} +0 -0
  382. /package/build/assets/{settings-like-page-layout-classes-DNg2vKSM.js → settings-like-page-layout-classes-GknosJgv.js} +0 -0
  383. /package/build/assets/{use-breakpoint-DpxHDmuH.js → use-breakpoint-2sN462wJ.js} +0 -0
  384. /package/build/assets/{use-click-outside-element-DhxCUyWl.js → use-click-outside-element-_vianyPb.js} +0 -0
  385. /package/build/assets/{v4-khGvL7i2.js → v4-BMWDcIWQ.js} +0 -0
  386. /package/build/assets/{vendor~browser-BDNLFng6.js → vendor~browser-C3GKF4mj.js} +0 -0
  387. /package/build/assets/{vendor~conversation-panel~conversation~alert-banner-D_hRW_zc.js → vendor~conversation-panel~conversation~alert-banner-DMcFTqbt.js} +0 -0
  388. /package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~j8sdb9mk-OFpe9fX_.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~j8sdb9mk-oCzr0-9g.js} +0 -0
  389. /package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~lpdshwee-BPuuVEqr.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~lpdshwee-CTmh4bwd.js} +0 -0
  390. /package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~skills-settings~m~o9nrx3fm-D44TR8hL.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~skills-settings~m~o9nrx3fm-87v-LliW.js} +0 -0
  391. /package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-Dr3Ow7Ms.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DTosGXG7.js} +0 -0
  392. /package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~i4kjfqhl-B1TKKuuH.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~ntycl9e1-DspdqGPW.js} +0 -0
  393. /package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~e9ykmtgh-Fa-nXZ4M.js → vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~e9ykmtgh-DMH1jSwL.js} +0 -0
  394. /package/build/assets/{vendor~terminal-0ObOedYm.js → vendor~terminal-CnKZILnC.js} +0 -0
  395. /package/build/assets/{vscode-url-helper-BMq8JBhB.js → vscode-url-helper-CwQPl6QN.js} +0 -0
@@ -1,23 +1,20 @@
1
1
  import { useTranslation as e } from "../../../node_modules/react-i18next/dist/es/useTranslation.js";
2
2
  import { I18nKey as t } from "../../../i18n/declaration.js";
3
3
  import { cn as n } from "../../../utils/utils.js";
4
- import { ACP_PROVIDERS as r } from "../../../constants/acp-providers.js";
5
- import { useSettings as i } from "../../../hooks/query/use-settings.js";
6
- import { StyledTooltip as a } from "../../shared/buttons/styled-tooltip.js";
7
- import { NavigationLink as o } from "../../shared/navigation-link.js";
8
- import s from "../../../icons/skills.js";
9
- import { useBreakpoint as c } from "../../../hooks/use-breakpoint.js";
10
- import { SIDEBAR_ROW_INTERACTIVE_CLASS as l, sidebarNavRowClassName as u } from "../sidebar/sidebar-layout.js";
11
- import { BackendSyncedSettingsBadge as d } from "../settings/backend-synced-settings-badge.js";
12
- import f from "../../../icons/server-process.js";
13
- import { useSidebarStore as p } from "../../../stores/sidebar-store.js";
14
- import { jsx as m, jsxs as h } from "react/jsx-runtime";
4
+ import { NavigationLink as r } from "../../shared/navigation-link.js";
5
+ import i from "../../../icons/skills.js";
6
+ import { useBreakpoint as a } from "../../../hooks/use-breakpoint.js";
7
+ import { SIDEBAR_ROW_INTERACTIVE_CLASS as o, sidebarNavRowClassName as s } from "../sidebar/sidebar-layout.js";
8
+ import { BackendSyncedSettingsBadge as c } from "../settings/backend-synced-settings-badge.js";
9
+ import l from "../../../icons/server-process.js";
10
+ import { useSidebarStore as u } from "../../../stores/sidebar-store.js";
11
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
15
12
  //#region src/components/features/skills/extensions-navigation.tsx
16
- var g = [
13
+ var p = [
17
14
  {
18
15
  to: "/skills",
19
16
  label: "Skills",
20
- icon: /* @__PURE__ */ m(s, {
17
+ icon: /* @__PURE__ */ d(i, {
21
18
  width: 16,
22
19
  height: 16,
23
20
  "aria-hidden": "true"
@@ -27,17 +24,16 @@ var g = [
27
24
  {
28
25
  to: "/mcp",
29
26
  label: "MCP Servers",
30
- icon: /* @__PURE__ */ m(f, {
27
+ icon: /* @__PURE__ */ d(l, {
31
28
  width: 16,
32
29
  height: 16
33
30
  }),
34
- end: !0,
35
- disabledByAcp: !0
31
+ end: !0
36
32
  },
37
33
  {
38
34
  to: "/plugins",
39
35
  label: "Plugins",
40
- icon: /* @__PURE__ */ h("svg", {
36
+ icon: /* @__PURE__ */ f("svg", {
41
37
  xmlns: "http://www.w3.org/2000/svg",
42
38
  viewBox: "0 0 24 24",
43
39
  fill: "none",
@@ -49,72 +45,59 @@ var g = [
49
45
  height: 16,
50
46
  "aria-hidden": "true",
51
47
  children: [
52
- /* @__PURE__ */ m("path", { d: "M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z" }),
53
- /* @__PURE__ */ m("path", { d: "m3.3 7 8.7 5 8.7-5" }),
54
- /* @__PURE__ */ m("path", { d: "M12 22V12" })
48
+ /* @__PURE__ */ d("path", { d: "M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z" }),
49
+ /* @__PURE__ */ d("path", { d: "m3.3 7 8.7 5 8.7-5" }),
50
+ /* @__PURE__ */ d("path", { d: "M12 22V12" })
55
51
  ]
56
52
  }),
57
53
  end: !0,
58
54
  comingSoon: !0
59
55
  }
60
56
  ];
61
- function _() {
62
- let { t: s } = e("openhands"), { data: f } = i(), _ = p((e) => e.collapsed), v = c(1023), y = c(767), b = !_ && v && !y, x = f?.agent_settings?.agent_kind === "acp", S = typeof f?.agent_settings?.acp_server == "string" ? f.agent_settings.acp_server : void 0, C = x ? r.find(({ key: e }) => e === S)?.display_name ?? "ACP Agent" : void 0;
63
- return b ? null : /* @__PURE__ */ h("aside", {
57
+ function m() {
58
+ let { t: i } = e("openhands"), l = u((e) => e.collapsed), m = a(1023), h = a(767);
59
+ return !l && m && !h ? null : /* @__PURE__ */ f("aside", {
64
60
  "data-testid": "extensions-navbar-desktop",
65
61
  className: "hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2 md:sticky md:top-8 md:self-start",
66
62
  children: [
67
- /* @__PURE__ */ m("span", {
63
+ /* @__PURE__ */ d("span", {
68
64
  className: "px-2 text-sm font-normal text-white",
69
- children: s(t.NAV$CUSTOMIZE)
65
+ children: i(t.NAV$CUSTOMIZE)
70
66
  }),
71
- /* @__PURE__ */ m("div", {
67
+ /* @__PURE__ */ d("div", {
72
68
  className: "flex flex-col gap-0.5 pt-0.5",
73
- children: g.map((e) => {
74
- let r = !!(x && e.disabledByAcp), i = /* @__PURE__ */ m("span", {
69
+ children: p.map((e) => {
70
+ let a = /* @__PURE__ */ d("span", {
75
71
  className: "shrink-0 flex items-center justify-center",
76
72
  children: e.icon
77
- }), c = /* @__PURE__ */ m("span", {
73
+ }), c = /* @__PURE__ */ d("span", {
78
74
  className: "truncate",
79
75
  children: e.label
80
- }), d = e.comingSoon && /* @__PURE__ */ m("span", {
76
+ }), l = e.comingSoon && /* @__PURE__ */ d("span", {
81
77
  className: "ml-auto shrink-0 rounded-full border border-white/20 bg-white/5 px-1.5 py-0.5 text-[10px] font-medium text-[var(--oh-text-dim)]",
82
- children: s(t.NAV$COMING_SOON)
78
+ children: i(t.NAV$COMING_SOON)
83
79
  });
84
- return r ? /* @__PURE__ */ m(a, {
85
- content: s(t.SETTINGS$AGENT_DISABLED_TOOLTIP, { agentName: C }),
86
- placement: "right",
87
- children: /* @__PURE__ */ h("span", {
88
- "aria-disabled": "true",
89
- "data-testid": `sidebar-extensions-${e.to}`,
90
- className: n(u(), "truncate text-[var(--oh-muted)] opacity-50 cursor-not-allowed"),
91
- children: [
92
- i,
93
- c,
94
- d
95
- ]
96
- })
97
- }, e.to) : /* @__PURE__ */ h(o, {
80
+ return /* @__PURE__ */ f(r, {
98
81
  to: e.to,
99
82
  end: e.end,
100
83
  "data-testid": `sidebar-extensions-${e.to}`,
101
- className: ({ isActive: e }) => n(u(), "truncate", e ? l.active : l.idle),
84
+ className: ({ isActive: e }) => n(s(), "truncate", e ? o.active : o.idle),
102
85
  children: [
103
- i,
86
+ a,
104
87
  c,
105
- d
88
+ l
106
89
  ]
107
90
  }, e.to);
108
91
  })
109
92
  }),
110
- /* @__PURE__ */ m("div", {
93
+ /* @__PURE__ */ d("div", {
111
94
  className: "px-2 pt-3",
112
- children: /* @__PURE__ */ m(d, {})
95
+ children: /* @__PURE__ */ d(c, {})
113
96
  })
114
97
  ]
115
98
  });
116
99
  }
117
100
  //#endregion
118
- export { _ as ExtensionsNavigation };
101
+ export { m as ExtensionsNavigation };
119
102
 
120
103
  //# sourceMappingURL=extensions-navigation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extensions-navigation.js","names":[],"sources":["../../../../src/components/features/skills/extensions-navigation.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport { StyledTooltip } from \"#/components/shared/buttons/styled-tooltip\";\nimport { useSettings } from \"#/hooks/query/use-settings\";\nimport { ACP_PROVIDERS } from \"#/constants/acp-providers\";\nimport { cn } from \"#/utils/utils\";\nimport SkillsIcon from \"#/icons/skills.svg?react\";\nimport ServerProcessIcon from \"#/icons/server-process.svg?react\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport {\n SIDEBAR_ROW_INTERACTIVE_CLASS,\n sidebarNavRowClassName,\n} from \"#/components/features/sidebar/sidebar-layout\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useSidebarStore } from \"#/stores/sidebar-store\";\nimport { useBreakpoint } from \"#/hooks/use-breakpoint\";\n\ninterface ExtensionNavItem {\n to: string;\n label: string;\n icon: React.ReactElement;\n end?: boolean;\n comingSoon?: boolean;\n /**\n * When true, this item greys out (and the /route's ``clientLoader``\n * bounces to ``/settings/agent``) while an ACP agent is active.\n * The ACP sub-agent manages its own MCP servers; the SDK rejects\n * ``mcp_config`` on ``ACPAgent`` init outright, so the OpenHands-\n * side editor would silently no-op against the running subprocess.\n */\n disabledByAcp?: boolean;\n}\n\nexport const EXTENSIONS_NAV_ITEMS: ExtensionNavItem[] = [\n {\n to: \"/skills\",\n label: \"Skills\",\n icon: <SkillsIcon width={16} height={16} aria-hidden=\"true\" />,\n end: true,\n },\n {\n to: \"/mcp\",\n label: \"MCP Servers\",\n icon: <ServerProcessIcon width={16} height={16} />,\n end: true,\n disabledByAcp: true,\n },\n {\n to: \"/plugins\",\n label: \"Plugins\",\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width={16}\n height={16}\n aria-hidden=\"true\"\n >\n <path d=\"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\" />\n <path d=\"m3.3 7 8.7 5 8.7-5\" />\n <path d=\"M12 22V12\" />\n </svg>\n ),\n end: true,\n comingSoon: true,\n },\n];\n\nexport function ExtensionsNavigation() {\n const { t } = useTranslation(\"openhands\");\n const { data: settings } = useSettings();\n const sidebarCollapsed = useSidebarStore((state) => state.collapsed);\n // At iPad portrait widths (md to <lg) an expanded primary Sidebar (300px)\n // plus this nav (260px) leaves the main content unreadable. Hide ourselves\n // until the user collapses the Sidebar or the viewport reaches `lg`.\n const belowLg = useBreakpoint(1023);\n const belowMd = useBreakpoint(767);\n const hideForExpandedSidebar = !sidebarCollapsed && belowLg && !belowMd;\n const isAcpAgent = settings?.agent_settings?.agent_kind === \"acp\";\n const acpServerKey =\n typeof settings?.agent_settings?.acp_server === \"string\"\n ? settings.agent_settings.acp_server\n : undefined;\n const acpServerName = isAcpAgent\n ? (ACP_PROVIDERS.find(({ key }) => key === acpServerKey)?.display_name ??\n \"ACP Agent\")\n : undefined;\n\n if (hideForExpandedSidebar) return null;\n\n return (\n <aside\n data-testid=\"extensions-navbar-desktop\"\n className=\"hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2 md:sticky md:top-8 md:self-start\"\n >\n <span className=\"px-2 text-sm font-normal text-white\">\n {t(I18nKey.NAV$CUSTOMIZE)}\n </span>\n <div className=\"flex flex-col gap-0.5 pt-0.5\">\n {EXTENSIONS_NAV_ITEMS.map((item) => {\n const disabled = !!(isAcpAgent && item.disabledByAcp);\n const baseRow = (\n <span className=\"shrink-0 flex items-center justify-center\">\n {item.icon}\n </span>\n );\n const label = <span className=\"truncate\">{item.label}</span>;\n const comingSoonBadge = item.comingSoon && (\n <span className=\"ml-auto shrink-0 rounded-full border border-white/20 bg-white/5 px-1.5 py-0.5 text-[10px] font-medium text-[var(--oh-text-dim)]\">\n {t(I18nKey.NAV$COMING_SOON)}\n </span>\n );\n\n if (disabled) {\n // Render a non-clickable surrogate so the URL and a11y tree\n // both communicate \"you can't go here right now,\" then wrap\n // in StyledTooltip for the why. Mirrors the SettingsNavLink\n // disabled rendering — same flag (``disabledByAcp``), same\n // explanatory tooltip (\"Disabled while {agentName} is the\n // active agent\"), same greyed styles.\n return (\n <StyledTooltip\n key={item.to}\n content={t(I18nKey.SETTINGS$AGENT_DISABLED_TOOLTIP, {\n agentName: acpServerName,\n })}\n placement=\"right\"\n >\n <span\n aria-disabled=\"true\"\n data-testid={`sidebar-extensions-${item.to}`}\n className={cn(\n sidebarNavRowClassName(),\n \"truncate text-[var(--oh-muted)] opacity-50 cursor-not-allowed\",\n )}\n >\n {baseRow}\n {label}\n {comingSoonBadge}\n </span>\n </StyledTooltip>\n );\n }\n\n return (\n <NavigationLink\n key={item.to}\n to={item.to}\n end={item.end}\n data-testid={`sidebar-extensions-${item.to}`}\n className={({ isActive }) =>\n cn(\n sidebarNavRowClassName(),\n \"truncate\",\n isActive\n ? SIDEBAR_ROW_INTERACTIVE_CLASS.active\n : SIDEBAR_ROW_INTERACTIVE_CLASS.idle,\n )\n }\n >\n {baseRow}\n {label}\n {comingSoonBadge}\n </NavigationLink>\n );\n })}\n </div>\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </aside>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAiCA,IAAa,IAA2C;CACtD;EACE,IAAI;EACJ,OAAO;EACP,MAAM,kBAAC,GAAD;GAAY,OAAO;GAAI,QAAQ;GAAI,eAAY;GAAS,CAAA;EAC9D,KAAK;EACN;CACD;EACE,IAAI;EACJ,OAAO;EACP,MAAM,kBAAC,GAAD;GAAmB,OAAO;GAAI,QAAQ;GAAM,CAAA;EAClD,KAAK;EACL,eAAe;EAChB;CACD;EACE,IAAI;EACJ,OAAO;EACP,MACE,kBAAC,OAAD;GACE,OAAM;GACN,SAAQ;GACR,MAAK;GACL,QAAO;GACP,aAAY;GACZ,eAAc;GACd,gBAAe;GACf,OAAO;GACP,QAAQ;GACR,eAAY;aAVd;IAYE,kBAAC,QAAD,EAAM,GAAE,0HAA2H,CAAA;IACnI,kBAAC,QAAD,EAAM,GAAE,sBAAuB,CAAA;IAC/B,kBAAC,QAAD,EAAM,GAAE,aAAc,CAAA;IAClB;;EAER,KAAK;EACL,YAAY;EACb;CACF;AAED,SAAgB,IAAuB;CACrC,IAAM,EAAE,SAAM,EAAe,YAAY,EACnC,EAAE,MAAM,MAAa,GAAa,EAClC,IAAmB,GAAiB,MAAU,EAAM,UAAU,EAI9D,IAAU,EAAc,KAAK,EAC7B,IAAU,EAAc,IAAI,EAC5B,IAAyB,CAAC,KAAoB,KAAW,CAAC,GAC1D,IAAa,GAAU,gBAAgB,eAAe,OACtD,IACJ,OAAO,GAAU,gBAAgB,cAAe,WAC5C,EAAS,eAAe,aACxB,KAAA,GACA,IAAgB,IACjB,EAAc,MAAM,EAAE,aAAU,MAAQ,EAAa,EAAE,gBACxD,cACA,KAAA;AAIJ,QAFI,IAA+B,OAGjC,kBAAC,SAAD;EACE,eAAY;EACZ,WAAU;YAFZ;GAIE,kBAAC,QAAD;IAAM,WAAU;cACb,EAAE,EAAQ,cAAc;IACpB,CAAA;GACP,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAqB,KAAK,MAAS;KAClC,IAAM,IAAW,CAAC,EAAE,KAAc,EAAK,gBACjC,IACJ,kBAAC,QAAD;MAAM,WAAU;gBACb,EAAK;MACD,CAAA,EAEH,IAAQ,kBAAC,QAAD;MAAM,WAAU;gBAAY,EAAK;MAAa,CAAA,EACtD,IAAkB,EAAK,cAC3B,kBAAC,QAAD;MAAM,WAAU;gBACb,EAAE,EAAQ,gBAAgB;MACtB,CAAA;AAkCT,YA/BI,IAQA,kBAAC,GAAD;MAEE,SAAS,EAAE,EAAQ,iCAAiC,EAClD,WAAW,GACZ,CAAC;MACF,WAAU;gBAEV,kBAAC,QAAD;OACE,iBAAc;OACd,eAAa,sBAAsB,EAAK;OACxC,WAAW,EACT,GAAwB,EACxB,gEACD;iBANH;QAQG;QACA;QACA;QACI;;MACO,EAlBT,EAAK,GAkBI,GAKlB,kBAAC,GAAD;MAEE,IAAI,EAAK;MACT,KAAK,EAAK;MACV,eAAa,sBAAsB,EAAK;MACxC,YAAY,EAAE,kBACZ,EACE,GAAwB,EACxB,YACA,IACI,EAA8B,SAC9B,EAA8B,KACnC;gBAZL;OAeG;OACA;OACA;OACc;QAjBV,EAAK,GAiBK;MAEnB;IACE,CAAA;GACN,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,EAA8B,CAAA;IAC1B,CAAA;GACA"}
1
+ {"version":3,"file":"extensions-navigation.js","names":[],"sources":["../../../../src/components/features/skills/extensions-navigation.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport { cn } from \"#/utils/utils\";\nimport SkillsIcon from \"#/icons/skills.svg?react\";\nimport ServerProcessIcon from \"#/icons/server-process.svg?react\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport {\n SIDEBAR_ROW_INTERACTIVE_CLASS,\n sidebarNavRowClassName,\n} from \"#/components/features/sidebar/sidebar-layout\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useSidebarStore } from \"#/stores/sidebar-store\";\nimport { useBreakpoint } from \"#/hooks/use-breakpoint\";\n\ninterface ExtensionNavItem {\n to: string;\n label: string;\n icon: React.ReactElement;\n end?: boolean;\n comingSoon?: boolean;\n}\n\nexport const EXTENSIONS_NAV_ITEMS: ExtensionNavItem[] = [\n {\n to: \"/skills\",\n label: \"Skills\",\n icon: <SkillsIcon width={16} height={16} aria-hidden=\"true\" />,\n end: true,\n },\n {\n to: \"/mcp\",\n label: \"MCP Servers\",\n icon: <ServerProcessIcon width={16} height={16} />,\n end: true,\n },\n {\n to: \"/plugins\",\n label: \"Plugins\",\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width={16}\n height={16}\n aria-hidden=\"true\"\n >\n <path d=\"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\" />\n <path d=\"m3.3 7 8.7 5 8.7-5\" />\n <path d=\"M12 22V12\" />\n </svg>\n ),\n end: true,\n comingSoon: true,\n },\n];\n\nexport function ExtensionsNavigation() {\n const { t } = useTranslation(\"openhands\");\n const sidebarCollapsed = useSidebarStore((state) => state.collapsed);\n // At iPad portrait widths (md to <lg) an expanded primary Sidebar (300px)\n // plus this nav (260px) leaves the main content unreadable. Hide ourselves\n // until the user collapses the Sidebar or the viewport reaches `lg`.\n const belowLg = useBreakpoint(1023);\n const belowMd = useBreakpoint(767);\n const hideForExpandedSidebar = !sidebarCollapsed && belowLg && !belowMd;\n\n if (hideForExpandedSidebar) return null;\n\n return (\n <aside\n data-testid=\"extensions-navbar-desktop\"\n className=\"hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2 md:sticky md:top-8 md:self-start\"\n >\n <span className=\"px-2 text-sm font-normal text-white\">\n {t(I18nKey.NAV$CUSTOMIZE)}\n </span>\n <div className=\"flex flex-col gap-0.5 pt-0.5\">\n {EXTENSIONS_NAV_ITEMS.map((item) => {\n const baseRow = (\n <span className=\"shrink-0 flex items-center justify-center\">\n {item.icon}\n </span>\n );\n const label = <span className=\"truncate\">{item.label}</span>;\n const comingSoonBadge = item.comingSoon && (\n <span className=\"ml-auto shrink-0 rounded-full border border-white/20 bg-white/5 px-1.5 py-0.5 text-[10px] font-medium text-[var(--oh-text-dim)]\">\n {t(I18nKey.NAV$COMING_SOON)}\n </span>\n );\n\n return (\n <NavigationLink\n key={item.to}\n to={item.to}\n end={item.end}\n data-testid={`sidebar-extensions-${item.to}`}\n className={({ isActive }) =>\n cn(\n sidebarNavRowClassName(),\n \"truncate\",\n isActive\n ? SIDEBAR_ROW_INTERACTIVE_CLASS.active\n : SIDEBAR_ROW_INTERACTIVE_CLASS.idle,\n )\n }\n >\n {baseRow}\n {label}\n {comingSoonBadge}\n </NavigationLink>\n );\n })}\n </div>\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </aside>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAsBA,IAAa,IAA2C;CACtD;EACE,IAAI;EACJ,OAAO;EACP,MAAM,kBAAC,GAAD;GAAY,OAAO;GAAI,QAAQ;GAAI,eAAY;GAAS,CAAA;EAC9D,KAAK;EACN;CACD;EACE,IAAI;EACJ,OAAO;EACP,MAAM,kBAAC,GAAD;GAAmB,OAAO;GAAI,QAAQ;GAAM,CAAA;EAClD,KAAK;EACN;CACD;EACE,IAAI;EACJ,OAAO;EACP,MACE,kBAAC,OAAD;GACE,OAAM;GACN,SAAQ;GACR,MAAK;GACL,QAAO;GACP,aAAY;GACZ,eAAc;GACd,gBAAe;GACf,OAAO;GACP,QAAQ;GACR,eAAY;aAVd;IAYE,kBAAC,QAAD,EAAM,GAAE,0HAA2H,CAAA;IACnI,kBAAC,QAAD,EAAM,GAAE,sBAAuB,CAAA;IAC/B,kBAAC,QAAD,EAAM,GAAE,aAAc,CAAA;IAClB;;EAER,KAAK;EACL,YAAY;EACb;CACF;AAED,SAAgB,IAAuB;CACrC,IAAM,EAAE,SAAM,EAAe,YAAY,EACnC,IAAmB,GAAiB,MAAU,EAAM,UAAU,EAI9D,IAAU,EAAc,KAAK,EAC7B,IAAU,EAAc,IAAI;AAKlC,QAJ+B,CAAC,KAAoB,KAAW,CAAC,IAE7B,OAGjC,kBAAC,SAAD;EACE,eAAY;EACZ,WAAU;YAFZ;GAIE,kBAAC,QAAD;IAAM,WAAU;cACb,EAAE,EAAQ,cAAc;IACpB,CAAA;GACP,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAqB,KAAK,MAAS;KAClC,IAAM,IACJ,kBAAC,QAAD;MAAM,WAAU;gBACb,EAAK;MACD,CAAA,EAEH,IAAQ,kBAAC,QAAD;MAAM,WAAU;gBAAY,EAAK;MAAa,CAAA,EACtD,IAAkB,EAAK,cAC3B,kBAAC,QAAD;MAAM,WAAU;gBACb,EAAE,EAAQ,gBAAgB;MACtB,CAAA;AAGT,YACE,kBAAC,GAAD;MAEE,IAAI,EAAK;MACT,KAAK,EAAK;MACV,eAAa,sBAAsB,EAAK;MACxC,YAAY,EAAE,kBACZ,EACE,GAAwB,EACxB,YACA,IACI,EAA8B,SAC9B,EAA8B,KACnC;gBAZL;OAeG;OACA;OACA;OACc;QAjBV,EAAK,GAiBK;MAEnB;IACE,CAAA;GACN,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,EAA8B,CAAA;IAC1B,CAAA;GACA"}
@@ -1,2 +1,2 @@
1
- require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../i18n/declaration.cjs`),t=require(`../node_modules/@openhands/typescript-client/dist/models/acp.cjs`);require(`../node_modules/@openhands/typescript-client/dist/index.cjs`);var n=new Set([`default`,`default (recommended)`]);function r(e){if(typeof e!=`string`)return null;let t=e.trim();return!t||n.has(t.toLowerCase())||t===`acp-managed`?null:t}function i(e){for(let t of[e.runtimeName,e.runtimeId,e.configured,e.sdkLlm]){let e=r(t);if(e)return e}return e.providerDefault??null}var a={"claude-code":{icon:`claude-code`,description_key:e.I18nKey.ONBOARDING$AGENT_CLAUDE_CODE_DESCRIPTION},codex:{icon:`codex`,description_key:e.I18nKey.ONBOARDING$AGENT_CODEX_DESCRIPTION},"gemini-cli":{icon:`gemini`,description_key:e.I18nKey.ONBOARDING$AGENT_GEMINI_CLI_DESCRIPTION}},o=Object.entries(a).map(([e,n])=>{let r=t.getAcpProvider(e);return{key:e,display_name:r?.display_name??e,default_command:r?[...r.default_command]:[],available_models:r?.available_models?.map(e=>({id:e.id,label:e.label})),default_model:r?.default_model??void 0,description_key:n.description_key,icon:n.icon}});function s(e){if(e)return o.find(t=>t.key===e)}function c(e){let t=s(e);return t?t.display_name:null}function l(e){return s(e)?.icon??`cli-generic`}function u(e,t){return t?s(e)?.available_models?.find(e=>e.id===t)?.label??t:null}exports.ACP_PROVIDERS=o,exports.getAcpProvider=s,exports.getAcpProviderDisplayName=c,exports.labelForAcpModel=u,exports.resolveAcpProviderIcon=l,exports.resolveEffectiveAcpModel=i;
1
+ require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../i18n/declaration.cjs`),t=require(`../node_modules/@openhands/typescript-client/dist/models/acp.cjs`);require(`../node_modules/@openhands/typescript-client/dist/index.cjs`);var n=new Set([`default`,`default (recommended)`]);function r(e){if(typeof e!=`string`)return null;let t=e.trim();return!t||n.has(t.toLowerCase())||t===`acp-managed`?null:t}function i(e){for(let t of[e.runtimeName,e.runtimeId,e.configured,e.sdkLlm]){let e=r(t);if(e)return e}return e.providerDefault??null}var a={"claude-code":{icon:`claude-code`,description_key:e.I18nKey.ONBOARDING$AGENT_CLAUDE_CODE_DESCRIPTION},codex:{icon:`codex`,description_key:e.I18nKey.ONBOARDING$AGENT_CODEX_DESCRIPTION},"gemini-cli":{icon:`gemini`,description_key:e.I18nKey.ONBOARDING$AGENT_GEMINI_CLI_DESCRIPTION}},o=Object.entries(a).map(([e,n])=>{let r=t.getAcpProvider(e);return{key:e,display_name:r?.display_name??e,default_command:r?[...r.default_command]:[],available_models:r?.available_models?.map(e=>({id:e.id,label:e.label})),default_model:r?.default_model??void 0,description_key:n.description_key,icon:n.icon}});function s(e){if(e)return o.find(t=>t.key===e)}function c(e){let t=s(e);return t?t.display_name:null}function l(e){return s(e)?.icon??`cli-generic`}function u(e,t){return t?s(e)?.available_models?.find(e=>e.id===t)?.label??t:null}exports.getAcpProvider=s,exports.getAcpProviderDisplayName=c,exports.labelForAcpModel=u,exports.resolveAcpProviderIcon=l,exports.resolveEffectiveAcpModel=i;
2
2
  //# sourceMappingURL=acp-providers.cjs.map
@@ -61,6 +61,6 @@ function u(e, t) {
61
61
  return t ? s(e)?.available_models?.find((e) => e.id === t)?.label ?? t : null;
62
62
  }
63
63
  //#endregion
64
- export { o as ACP_PROVIDERS, s as getAcpProvider, c as getAcpProviderDisplayName, u as labelForAcpModel, l as resolveAcpProviderIcon, i as resolveEffectiveAcpModel };
64
+ export { s as getAcpProvider, c as getAcpProviderDisplayName, u as labelForAcpModel, l as resolveAcpProviderIcon, i as resolveEffectiveAcpModel };
65
65
 
66
66
  //# sourceMappingURL=acp-providers.js.map
@@ -1,2 +1,2 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs`),t=require(`../../node_modules/@tanstack/react-query/build/modern/useMutation.cjs`),n=require(`../../api/conversation-service/agent-server-conversation-service.api.cjs`),r=require(`../use-tracking.cjs`);var i=()=>{let i=e.useQueryClient(),{trackConversationCreated:a}=r.useTracking();return t.useMutation({mutationKey:[`create-conversation`],mutationFn:async e=>{let{query:t,conversationInstructions:r,plugins:i,repository:a,workingDir:o,parentConversationId:s,agentType:c}=e,l=await n.default.createConversation(t,r,i,a?{selected_repository:a.name,selected_branch:a.branch??null,git_provider:a.gitProvider}:null,o,s,c);return{conversation_id:l.app_conversation_id?l.app_conversation_id:`task-${l.id}`,session_api_key:null,url:l.agent_server_url,task_id:l.id}},onSuccess:async(e,{repository:t})=>{a({hasRepository:!!t}),i.invalidateQueries({queryKey:[`user`,`conversations`]}),i.invalidateQueries({queryKey:[`start-tasks`]})}})};exports.useCreateConversation=i;
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs`),t=require(`../../node_modules/@tanstack/react-query/build/modern/useMutation.cjs`),n=require(`../../api/conversation-metadata-store.cjs`),r=require(`../../api/conversation-service/agent-server-conversation-service.api.cjs`),i=require(`../use-tracking.cjs`),a=require(`../query/use-llm-profiles.cjs`);var o=()=>{let o=e.useQueryClient(),{trackConversationCreated:s}=i.useTracking(),{data:c}=a.useLlmProfiles();return t.useMutation({mutationKey:[`create-conversation`],mutationFn:async e=>{let{query:t,conversationInstructions:i,plugins:a,repository:o,workingDir:s,parentConversationId:l,agentType:u}=e,d=await r.default.createConversation(t,i,a,o?{selected_repository:o.name,selected_branch:o.branch??null,git_provider:o.gitProvider}:null,s,l,u),f=d.app_conversation_id;if(f&&c?.active_profile){let e=n.getStoredConversationMetadata(f);n.setStoredConversationMetadata(f,{selected_repository:e?.selected_repository??null,selected_branch:e?.selected_branch??null,git_provider:e?.git_provider??null,selected_workspace:e?.selected_workspace??null,active_profile:c.active_profile})}return{conversation_id:d.app_conversation_id?d.app_conversation_id:`task-${d.id}`,session_api_key:null,url:d.agent_server_url,task_id:d.id}},onSuccess:async(e,{repository:t})=>{s({hasRepository:!!t}),o.invalidateQueries({queryKey:[`user`,`conversations`]}),o.invalidateQueries({queryKey:[`start-tasks`]})}})};exports.useCreateConversation=o;
2
2
  //# sourceMappingURL=use-create-conversation.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-create-conversation.cjs","names":[],"sources":["../../../src/hooks/mutation/use-create-conversation.ts"],"sourcesContent":["import { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport AgentServerConversationService from \"#/api/conversation-service/agent-server-conversation-service.api\";\nimport { PluginSpec } from \"#/api/conversation-service/agent-server-conversation-service.types\";\nimport { SuggestedTask } from \"#/utils/types\";\nimport { Provider } from \"#/types/settings\";\nimport { useTracking } from \"#/hooks/use-tracking\";\n\ninterface CreateConversationVariables {\n query?: string;\n repository?: {\n name: string;\n gitProvider: Provider;\n branch?: string;\n };\n suggestedTask?: SuggestedTask;\n conversationInstructions?: string;\n parentConversationId?: string;\n agentType?: \"default\" | \"plan\";\n plugins?: PluginSpec[];\n workingDir?: string;\n}\n\ninterface CreateConversationResponse {\n conversation_id: string;\n session_api_key: string | null;\n url: string | null;\n task_id?: string;\n}\n\nexport const useCreateConversation = () => {\n const queryClient = useQueryClient();\n const { trackConversationCreated } = useTracking();\n\n return useMutation({\n mutationKey: [\"create-conversation\"],\n mutationFn: async (\n variables: CreateConversationVariables,\n ): Promise<CreateConversationResponse> => {\n const {\n query,\n conversationInstructions,\n plugins,\n repository,\n workingDir,\n parentConversationId,\n agentType,\n } = variables;\n\n const conversation =\n await AgentServerConversationService.createConversation(\n query,\n conversationInstructions,\n plugins,\n repository\n ? {\n selected_repository: repository.name,\n selected_branch: repository.branch ?? null,\n git_provider: repository.gitProvider,\n }\n : null,\n workingDir,\n parentConversationId,\n agentType,\n );\n\n // OpenHands cloud pattern: when the start task isn't immediately\n // READY (cloud sandbox is still provisioning),\n // app_conversation_id is null. We return a `task-{id}` URL so the\n // conversation route's useTaskPolling can drive it to READY and\n // then redirect to the real `/conversations/{app_conversation_id}`.\n const conversationId = conversation.app_conversation_id\n ? conversation.app_conversation_id\n : `task-${conversation.id}`;\n\n return {\n conversation_id: conversationId,\n session_api_key: null,\n url: conversation.agent_server_url,\n task_id: conversation.id,\n };\n },\n onSuccess: async (_, { repository }) => {\n trackConversationCreated({\n hasRepository: !!repository,\n });\n\n // Invalidate (rather than remove) so the existing paginated list stays\n // rendered while a background refetch picks up the new conversation.\n // `removeQueries` would wipe the cache and force the panel back to its\n // initial loading state, dropping loaded pages and scroll position.\n queryClient.invalidateQueries({\n queryKey: [\"user\", \"conversations\"],\n });\n // The cloud path returns a start task (no app_conversation_id\n // yet); the sidebar surfaces those via `useStartTasks` which doesn't\n // poll, so invalidate it explicitly so the in-flight task shows up\n // in the conversation list immediately.\n queryClient.invalidateQueries({\n queryKey: [\"start-tasks\"],\n });\n },\n });\n};\n"],"mappings":"2VA6BA,IAAa,MAA8B,CACzC,IAAM,EAAc,EAAA,gBAAgB,CAC9B,CAAE,4BAA6B,EAAA,aAAa,CAElD,OAAO,EAAA,YAAY,CACjB,YAAa,CAAC,sBAAsB,CACpC,WAAY,KACV,IACwC,CACxC,GAAM,CACJ,QACA,2BACA,UACA,aACA,aACA,uBACA,aACE,EAEE,EACJ,MAAM,EAAA,QAA+B,mBACnC,EACA,EACA,EACA,EACI,CACE,oBAAqB,EAAW,KAChC,gBAAiB,EAAW,QAAU,KACtC,aAAc,EAAW,YAC1B,CACD,KACJ,EACA,EACA,EACD,CAWH,MAAO,CACL,gBALqB,EAAa,oBAChC,EAAa,oBACb,QAAQ,EAAa,KAIvB,gBAAiB,KACjB,IAAK,EAAa,iBAClB,QAAS,EAAa,GACvB,EAEH,UAAW,MAAO,EAAG,CAAE,gBAAiB,CACtC,EAAyB,CACvB,cAAe,CAAC,CAAC,EAClB,CAAC,CAMF,EAAY,kBAAkB,CAC5B,SAAU,CAAC,OAAQ,gBAAgB,CACpC,CAAC,CAKF,EAAY,kBAAkB,CAC5B,SAAU,CAAC,cAAc,CAC1B,CAAC,EAEL,CAAC"}
1
+ {"version":3,"file":"use-create-conversation.cjs","names":[],"sources":["../../../src/hooks/mutation/use-create-conversation.ts"],"sourcesContent":["import { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport AgentServerConversationService from \"#/api/conversation-service/agent-server-conversation-service.api\";\nimport { PluginSpec } from \"#/api/conversation-service/agent-server-conversation-service.types\";\nimport { SuggestedTask } from \"#/utils/types\";\nimport { Provider } from \"#/types/settings\";\nimport { useTracking } from \"#/hooks/use-tracking\";\nimport { useLlmProfiles } from \"#/hooks/query/use-llm-profiles\";\nimport {\n getStoredConversationMetadata,\n setStoredConversationMetadata,\n} from \"#/api/conversation-metadata-store\";\n\ninterface CreateConversationVariables {\n query?: string;\n repository?: {\n name: string;\n gitProvider: Provider;\n branch?: string;\n };\n suggestedTask?: SuggestedTask;\n conversationInstructions?: string;\n parentConversationId?: string;\n agentType?: \"default\" | \"plan\";\n plugins?: PluginSpec[];\n workingDir?: string;\n}\n\ninterface CreateConversationResponse {\n conversation_id: string;\n session_api_key: string | null;\n url: string | null;\n task_id?: string;\n}\n\nexport const useCreateConversation = () => {\n const queryClient = useQueryClient();\n const { trackConversationCreated } = useTracking();\n // Cache-warm on the home page (the profile picker reads the same query).\n // Stamped onto the conversation at creation so the switcher can show the\n // exact profile even when several profiles share a model (#1082).\n const { data: llmProfiles } = useLlmProfiles();\n\n return useMutation({\n mutationKey: [\"create-conversation\"],\n mutationFn: async (\n variables: CreateConversationVariables,\n ): Promise<CreateConversationResponse> => {\n const {\n query,\n conversationInstructions,\n plugins,\n repository,\n workingDir,\n parentConversationId,\n agentType,\n } = variables;\n\n const conversation =\n await AgentServerConversationService.createConversation(\n query,\n conversationInstructions,\n plugins,\n repository\n ? {\n selected_repository: repository.name,\n selected_branch: repository.branch ?? null,\n git_provider: repository.gitProvider,\n }\n : null,\n workingDir,\n parentConversationId,\n agentType,\n );\n\n // Stamp the active LLM profile onto the (local) conversation so the\n // chat switcher shows the exact profile even when several profiles\n // share a model (#1082). Cloud conversations don't use local profiles\n // (app_conversation_id stays null until the sandbox is READY). Merge so\n // the repo/workspace metadata the service just persisted is preserved.\n const localConversationId = conversation.app_conversation_id;\n if (localConversationId && llmProfiles?.active_profile) {\n const prev = getStoredConversationMetadata(localConversationId);\n setStoredConversationMetadata(localConversationId, {\n selected_repository: prev?.selected_repository ?? null,\n selected_branch: prev?.selected_branch ?? null,\n git_provider: prev?.git_provider ?? null,\n selected_workspace: prev?.selected_workspace ?? null,\n active_profile: llmProfiles.active_profile,\n });\n }\n\n // OpenHands cloud pattern: when the start task isn't immediately\n // READY (cloud sandbox is still provisioning),\n // app_conversation_id is null. We return a `task-{id}` URL so the\n // conversation route's useTaskPolling can drive it to READY and\n // then redirect to the real `/conversations/{app_conversation_id}`.\n const conversationId = conversation.app_conversation_id\n ? conversation.app_conversation_id\n : `task-${conversation.id}`;\n\n return {\n conversation_id: conversationId,\n session_api_key: null,\n url: conversation.agent_server_url,\n task_id: conversation.id,\n };\n },\n onSuccess: async (_, { repository }) => {\n trackConversationCreated({\n hasRepository: !!repository,\n });\n\n // Invalidate (rather than remove) so the existing paginated list stays\n // rendered while a background refetch picks up the new conversation.\n // `removeQueries` would wipe the cache and force the panel back to its\n // initial loading state, dropping loaded pages and scroll position.\n queryClient.invalidateQueries({\n queryKey: [\"user\", \"conversations\"],\n });\n // The cloud path returns a start task (no app_conversation_id\n // yet); the sidebar surfaces those via `useStartTasks` which doesn't\n // poll, so invalidate it explicitly so the in-flight task shows up\n // in the conversation list immediately.\n queryClient.invalidateQueries({\n queryKey: [\"start-tasks\"],\n });\n },\n });\n};\n"],"mappings":"6bAkCA,IAAa,MAA8B,CACzC,IAAM,EAAc,EAAA,gBAAgB,CAC9B,CAAE,4BAA6B,EAAA,aAAa,CAI5C,CAAE,KAAM,GAAgB,EAAA,gBAAgB,CAE9C,OAAO,EAAA,YAAY,CACjB,YAAa,CAAC,sBAAsB,CACpC,WAAY,KACV,IACwC,CACxC,GAAM,CACJ,QACA,2BACA,UACA,aACA,aACA,uBACA,aACE,EAEE,EACJ,MAAM,EAAA,QAA+B,mBACnC,EACA,EACA,EACA,EACI,CACE,oBAAqB,EAAW,KAChC,gBAAiB,EAAW,QAAU,KACtC,aAAc,EAAW,YAC1B,CACD,KACJ,EACA,EACA,EACD,CAOG,EAAsB,EAAa,oBACzC,GAAI,GAAuB,GAAa,eAAgB,CACtD,IAAM,EAAO,EAAA,8BAA8B,EAAoB,CAC/D,EAAA,8BAA8B,EAAqB,CACjD,oBAAqB,GAAM,qBAAuB,KAClD,gBAAiB,GAAM,iBAAmB,KAC1C,aAAc,GAAM,cAAgB,KACpC,mBAAoB,GAAM,oBAAsB,KAChD,eAAgB,EAAY,eAC7B,CAAC,CAYJ,MAAO,CACL,gBALqB,EAAa,oBAChC,EAAa,oBACb,QAAQ,EAAa,KAIvB,gBAAiB,KACjB,IAAK,EAAa,iBAClB,QAAS,EAAa,GACvB,EAEH,UAAW,MAAO,EAAG,CAAE,gBAAiB,CACtC,EAAyB,CACvB,cAAe,CAAC,CAAC,EAClB,CAAC,CAMF,EAAY,kBAAkB,CAC5B,SAAU,CAAC,OAAQ,gBAAgB,CACpC,CAAC,CAKF,EAAY,kBAAkB,CAC5B,SAAU,CAAC,cAAc,CAC1B,CAAC,EAEL,CAAC"}
@@ -1,31 +1,43 @@
1
1
  import { useQueryClient as e } from "../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js";
2
2
  import { useMutation as t } from "../../node_modules/@tanstack/react-query/build/modern/useMutation.js";
3
- import n from "../../api/conversation-service/agent-server-conversation-service.api.js";
4
- import { useTracking as r } from "../use-tracking.js";
3
+ import { getStoredConversationMetadata as n, setStoredConversationMetadata as r } from "../../api/conversation-metadata-store.js";
4
+ import i from "../../api/conversation-service/agent-server-conversation-service.api.js";
5
+ import { useTracking as a } from "../use-tracking.js";
6
+ import { useLlmProfiles as o } from "../query/use-llm-profiles.js";
5
7
  //#region src/hooks/mutation/use-create-conversation.ts
6
- var i = () => {
7
- let i = e(), { trackConversationCreated: a } = r();
8
+ var s = () => {
9
+ let s = e(), { trackConversationCreated: c } = a(), { data: l } = o();
8
10
  return t({
9
11
  mutationKey: ["create-conversation"],
10
12
  mutationFn: async (e) => {
11
- let { query: t, conversationInstructions: r, plugins: i, repository: a, workingDir: o, parentConversationId: s, agentType: c } = e, l = await n.createConversation(t, r, i, a ? {
12
- selected_repository: a.name,
13
- selected_branch: a.branch ?? null,
14
- git_provider: a.gitProvider
15
- } : null, o, s, c);
13
+ let { query: t, conversationInstructions: a, plugins: o, repository: s, workingDir: c, parentConversationId: u, agentType: d } = e, f = await i.createConversation(t, a, o, s ? {
14
+ selected_repository: s.name,
15
+ selected_branch: s.branch ?? null,
16
+ git_provider: s.gitProvider
17
+ } : null, c, u, d), p = f.app_conversation_id;
18
+ if (p && l?.active_profile) {
19
+ let e = n(p);
20
+ r(p, {
21
+ selected_repository: e?.selected_repository ?? null,
22
+ selected_branch: e?.selected_branch ?? null,
23
+ git_provider: e?.git_provider ?? null,
24
+ selected_workspace: e?.selected_workspace ?? null,
25
+ active_profile: l.active_profile
26
+ });
27
+ }
16
28
  return {
17
- conversation_id: l.app_conversation_id ? l.app_conversation_id : `task-${l.id}`,
29
+ conversation_id: f.app_conversation_id ? f.app_conversation_id : `task-${f.id}`,
18
30
  session_api_key: null,
19
- url: l.agent_server_url,
20
- task_id: l.id
31
+ url: f.agent_server_url,
32
+ task_id: f.id
21
33
  };
22
34
  },
23
35
  onSuccess: async (e, { repository: t }) => {
24
- a({ hasRepository: !!t }), i.invalidateQueries({ queryKey: ["user", "conversations"] }), i.invalidateQueries({ queryKey: ["start-tasks"] });
36
+ c({ hasRepository: !!t }), s.invalidateQueries({ queryKey: ["user", "conversations"] }), s.invalidateQueries({ queryKey: ["start-tasks"] });
25
37
  }
26
38
  });
27
39
  };
28
40
  //#endregion
29
- export { i as useCreateConversation };
41
+ export { s as useCreateConversation };
30
42
 
31
43
  //# sourceMappingURL=use-create-conversation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-create-conversation.js","names":[],"sources":["../../../src/hooks/mutation/use-create-conversation.ts"],"sourcesContent":["import { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport AgentServerConversationService from \"#/api/conversation-service/agent-server-conversation-service.api\";\nimport { PluginSpec } from \"#/api/conversation-service/agent-server-conversation-service.types\";\nimport { SuggestedTask } from \"#/utils/types\";\nimport { Provider } from \"#/types/settings\";\nimport { useTracking } from \"#/hooks/use-tracking\";\n\ninterface CreateConversationVariables {\n query?: string;\n repository?: {\n name: string;\n gitProvider: Provider;\n branch?: string;\n };\n suggestedTask?: SuggestedTask;\n conversationInstructions?: string;\n parentConversationId?: string;\n agentType?: \"default\" | \"plan\";\n plugins?: PluginSpec[];\n workingDir?: string;\n}\n\ninterface CreateConversationResponse {\n conversation_id: string;\n session_api_key: string | null;\n url: string | null;\n task_id?: string;\n}\n\nexport const useCreateConversation = () => {\n const queryClient = useQueryClient();\n const { trackConversationCreated } = useTracking();\n\n return useMutation({\n mutationKey: [\"create-conversation\"],\n mutationFn: async (\n variables: CreateConversationVariables,\n ): Promise<CreateConversationResponse> => {\n const {\n query,\n conversationInstructions,\n plugins,\n repository,\n workingDir,\n parentConversationId,\n agentType,\n } = variables;\n\n const conversation =\n await AgentServerConversationService.createConversation(\n query,\n conversationInstructions,\n plugins,\n repository\n ? {\n selected_repository: repository.name,\n selected_branch: repository.branch ?? null,\n git_provider: repository.gitProvider,\n }\n : null,\n workingDir,\n parentConversationId,\n agentType,\n );\n\n // OpenHands cloud pattern: when the start task isn't immediately\n // READY (cloud sandbox is still provisioning),\n // app_conversation_id is null. We return a `task-{id}` URL so the\n // conversation route's useTaskPolling can drive it to READY and\n // then redirect to the real `/conversations/{app_conversation_id}`.\n const conversationId = conversation.app_conversation_id\n ? conversation.app_conversation_id\n : `task-${conversation.id}`;\n\n return {\n conversation_id: conversationId,\n session_api_key: null,\n url: conversation.agent_server_url,\n task_id: conversation.id,\n };\n },\n onSuccess: async (_, { repository }) => {\n trackConversationCreated({\n hasRepository: !!repository,\n });\n\n // Invalidate (rather than remove) so the existing paginated list stays\n // rendered while a background refetch picks up the new conversation.\n // `removeQueries` would wipe the cache and force the panel back to its\n // initial loading state, dropping loaded pages and scroll position.\n queryClient.invalidateQueries({\n queryKey: [\"user\", \"conversations\"],\n });\n // The cloud path returns a start task (no app_conversation_id\n // yet); the sidebar surfaces those via `useStartTasks` which doesn't\n // poll, so invalidate it explicitly so the in-flight task shows up\n // in the conversation list immediately.\n queryClient.invalidateQueries({\n queryKey: [\"start-tasks\"],\n });\n },\n });\n};\n"],"mappings":";;;;;AA6BA,IAAa,UAA8B;CACzC,IAAM,IAAc,GAAgB,EAC9B,EAAE,gCAA6B,GAAa;AAElD,QAAO,EAAY;EACjB,aAAa,CAAC,sBAAsB;EACpC,YAAY,OACV,MACwC;GACxC,IAAM,EACJ,UACA,6BACA,YACA,eACA,eACA,yBACA,iBACE,GAEE,IACJ,MAAM,EAA+B,mBACnC,GACA,GACA,GACA,IACI;IACE,qBAAqB,EAAW;IAChC,iBAAiB,EAAW,UAAU;IACtC,cAAc,EAAW;IAC1B,GACD,MACJ,GACA,GACA,EACD;AAWH,UAAO;IACL,iBALqB,EAAa,sBAChC,EAAa,sBACb,QAAQ,EAAa;IAIvB,iBAAiB;IACjB,KAAK,EAAa;IAClB,SAAS,EAAa;IACvB;;EAEH,WAAW,OAAO,GAAG,EAAE,oBAAiB;AAgBtC,GAfA,EAAyB,EACvB,eAAe,CAAC,CAAC,GAClB,CAAC,EAMF,EAAY,kBAAkB,EAC5B,UAAU,CAAC,QAAQ,gBAAgB,EACpC,CAAC,EAKF,EAAY,kBAAkB,EAC5B,UAAU,CAAC,cAAc,EAC1B,CAAC;;EAEL,CAAC"}
1
+ {"version":3,"file":"use-create-conversation.js","names":[],"sources":["../../../src/hooks/mutation/use-create-conversation.ts"],"sourcesContent":["import { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport AgentServerConversationService from \"#/api/conversation-service/agent-server-conversation-service.api\";\nimport { PluginSpec } from \"#/api/conversation-service/agent-server-conversation-service.types\";\nimport { SuggestedTask } from \"#/utils/types\";\nimport { Provider } from \"#/types/settings\";\nimport { useTracking } from \"#/hooks/use-tracking\";\nimport { useLlmProfiles } from \"#/hooks/query/use-llm-profiles\";\nimport {\n getStoredConversationMetadata,\n setStoredConversationMetadata,\n} from \"#/api/conversation-metadata-store\";\n\ninterface CreateConversationVariables {\n query?: string;\n repository?: {\n name: string;\n gitProvider: Provider;\n branch?: string;\n };\n suggestedTask?: SuggestedTask;\n conversationInstructions?: string;\n parentConversationId?: string;\n agentType?: \"default\" | \"plan\";\n plugins?: PluginSpec[];\n workingDir?: string;\n}\n\ninterface CreateConversationResponse {\n conversation_id: string;\n session_api_key: string | null;\n url: string | null;\n task_id?: string;\n}\n\nexport const useCreateConversation = () => {\n const queryClient = useQueryClient();\n const { trackConversationCreated } = useTracking();\n // Cache-warm on the home page (the profile picker reads the same query).\n // Stamped onto the conversation at creation so the switcher can show the\n // exact profile even when several profiles share a model (#1082).\n const { data: llmProfiles } = useLlmProfiles();\n\n return useMutation({\n mutationKey: [\"create-conversation\"],\n mutationFn: async (\n variables: CreateConversationVariables,\n ): Promise<CreateConversationResponse> => {\n const {\n query,\n conversationInstructions,\n plugins,\n repository,\n workingDir,\n parentConversationId,\n agentType,\n } = variables;\n\n const conversation =\n await AgentServerConversationService.createConversation(\n query,\n conversationInstructions,\n plugins,\n repository\n ? {\n selected_repository: repository.name,\n selected_branch: repository.branch ?? null,\n git_provider: repository.gitProvider,\n }\n : null,\n workingDir,\n parentConversationId,\n agentType,\n );\n\n // Stamp the active LLM profile onto the (local) conversation so the\n // chat switcher shows the exact profile even when several profiles\n // share a model (#1082). Cloud conversations don't use local profiles\n // (app_conversation_id stays null until the sandbox is READY). Merge so\n // the repo/workspace metadata the service just persisted is preserved.\n const localConversationId = conversation.app_conversation_id;\n if (localConversationId && llmProfiles?.active_profile) {\n const prev = getStoredConversationMetadata(localConversationId);\n setStoredConversationMetadata(localConversationId, {\n selected_repository: prev?.selected_repository ?? null,\n selected_branch: prev?.selected_branch ?? null,\n git_provider: prev?.git_provider ?? null,\n selected_workspace: prev?.selected_workspace ?? null,\n active_profile: llmProfiles.active_profile,\n });\n }\n\n // OpenHands cloud pattern: when the start task isn't immediately\n // READY (cloud sandbox is still provisioning),\n // app_conversation_id is null. We return a `task-{id}` URL so the\n // conversation route's useTaskPolling can drive it to READY and\n // then redirect to the real `/conversations/{app_conversation_id}`.\n const conversationId = conversation.app_conversation_id\n ? conversation.app_conversation_id\n : `task-${conversation.id}`;\n\n return {\n conversation_id: conversationId,\n session_api_key: null,\n url: conversation.agent_server_url,\n task_id: conversation.id,\n };\n },\n onSuccess: async (_, { repository }) => {\n trackConversationCreated({\n hasRepository: !!repository,\n });\n\n // Invalidate (rather than remove) so the existing paginated list stays\n // rendered while a background refetch picks up the new conversation.\n // `removeQueries` would wipe the cache and force the panel back to its\n // initial loading state, dropping loaded pages and scroll position.\n queryClient.invalidateQueries({\n queryKey: [\"user\", \"conversations\"],\n });\n // The cloud path returns a start task (no app_conversation_id\n // yet); the sidebar surfaces those via `useStartTasks` which doesn't\n // poll, so invalidate it explicitly so the in-flight task shows up\n // in the conversation list immediately.\n queryClient.invalidateQueries({\n queryKey: [\"start-tasks\"],\n });\n },\n });\n};\n"],"mappings":";;;;;;;AAkCA,IAAa,UAA8B;CACzC,IAAM,IAAc,GAAgB,EAC9B,EAAE,gCAA6B,GAAa,EAI5C,EAAE,MAAM,MAAgB,GAAgB;AAE9C,QAAO,EAAY;EACjB,aAAa,CAAC,sBAAsB;EACpC,YAAY,OACV,MACwC;GACxC,IAAM,EACJ,UACA,6BACA,YACA,eACA,eACA,yBACA,iBACE,GAEE,IACJ,MAAM,EAA+B,mBACnC,GACA,GACA,GACA,IACI;IACE,qBAAqB,EAAW;IAChC,iBAAiB,EAAW,UAAU;IACtC,cAAc,EAAW;IAC1B,GACD,MACJ,GACA,GACA,EACD,EAOG,IAAsB,EAAa;AACzC,OAAI,KAAuB,GAAa,gBAAgB;IACtD,IAAM,IAAO,EAA8B,EAAoB;AAC/D,MAA8B,GAAqB;KACjD,qBAAqB,GAAM,uBAAuB;KAClD,iBAAiB,GAAM,mBAAmB;KAC1C,cAAc,GAAM,gBAAgB;KACpC,oBAAoB,GAAM,sBAAsB;KAChD,gBAAgB,EAAY;KAC7B,CAAC;;AAYJ,UAAO;IACL,iBALqB,EAAa,sBAChC,EAAa,sBACb,QAAQ,EAAa;IAIvB,iBAAiB;IACjB,KAAK,EAAa;IAClB,SAAS,EAAa;IACvB;;EAEH,WAAW,OAAO,GAAG,EAAE,oBAAiB;AAgBtC,GAfA,EAAyB,EACvB,eAAe,CAAC,CAAC,GAClB,CAAC,EAMF,EAAY,kBAAkB,EAC5B,UAAU,CAAC,QAAQ,gBAAgB,EACpC,CAAC,EAKF,EAAY,kBAAkB,EAC5B,UAAU,CAAC,cAAc,EAC1B,CAAC;;EAEL,CAAC"}
@@ -1,2 +1,2 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../node_modules/react-i18next/dist/es/useTranslation.cjs`),t=require(`../../i18n/declaration.cjs`),n=require(`../../utils/custom-toast-handlers.cjs`),r=require(`../chat/model-command-event-anchor.cjs`),i=require(`../chat/record-model-switch-message.cjs`),a=require(`./use-switch-llm-profile.cjs`);let o=require(`react`);function s(){let{mutate:s,isPending:c}=a.useSwitchLlmProfile(),{t:l}=e.useTranslation();return{switchAndLog:(0,o.useCallback)((e,a)=>{let o=r.getLastRenderableEventId();s({conversationId:e,profileName:a},{onSuccess:()=>{e&&i.recordModelSwitchMessage(e,a,o)},onError:e=>{let r=l(t.I18nKey.MODEL$SWITCH_FAILED,{name:a});n.displayErrorToast(e instanceof Error&&e.message?e.message:r)}})},[s,l]),isPending:c}}exports.useSwitchLlmProfileAndLog=s;
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../node_modules/react-i18next/dist/es/useTranslation.cjs`),t=require(`../../i18n/declaration.cjs`),n=require(`../../utils/custom-toast-handlers.cjs`),r=require(`../../api/conversation-metadata-store.cjs`),i=require(`../chat/model-command-event-anchor.cjs`),a=require(`../chat/record-model-switch-message.cjs`),o=require(`./use-switch-llm-profile.cjs`);let s=require(`react`);function c(){let{mutate:c,isPending:l}=o.useSwitchLlmProfile(),{t:u}=e.useTranslation();return{switchAndLog:(0,s.useCallback)((e,o)=>{let s=i.getLastRenderableEventId();c({conversationId:e,profileName:o},{onSuccess:()=>{if(e){a.recordModelSwitchMessage(e,o,s);let t=r.getStoredConversationMetadata(e);r.setStoredConversationMetadata(e,{selected_repository:t?.selected_repository??null,selected_branch:t?.selected_branch??null,git_provider:t?.git_provider??null,selected_workspace:t?.selected_workspace??null,active_profile:o})}},onError:e=>{let r=u(t.I18nKey.MODEL$SWITCH_FAILED,{name:o});n.displayErrorToast(e instanceof Error&&e.message?e.message:r)}})},[c,u]),isPending:l}}exports.useSwitchLlmProfileAndLog=c;
2
2
  //# sourceMappingURL=use-switch-llm-profile-and-log.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-switch-llm-profile-and-log.cjs","names":[],"sources":["../../../src/hooks/mutation/use-switch-llm-profile-and-log.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { getLastRenderableEventId } from \"#/hooks/chat/model-command-event-anchor\";\nimport { recordModelSwitchMessage } from \"#/hooks/chat/record-model-switch-message\";\nimport { useSwitchLlmProfile } from \"#/hooks/mutation/use-switch-llm-profile\";\nimport { displayErrorToast } from \"#/utils/custom-toast-handlers\";\nimport { I18nKey } from \"#/i18n/declaration\";\n\n/**\n * Switch the conversation's LLM profile and render the result inline (same\n * UX as `/model <name>`). On success the switch is recorded against the\n * last rendered event so the confirmation lines up with where the user\n * issued the command.\n */\nexport function useSwitchLlmProfileAndLog() {\n const { mutate, isPending } = useSwitchLlmProfile();\n const { t } = useTranslation();\n\n const switchAndLog = useCallback(\n (conversationId: string | null, profileName: string) => {\n const anchorEventId = getLastRenderableEventId();\n\n mutate(\n { conversationId, profileName },\n {\n onSuccess: () => {\n // The inline \"Switched to\" message is scoped to a conversation;\n // skip it when activating from the home page (no convo yet).\n if (conversationId) {\n recordModelSwitchMessage(\n conversationId,\n profileName,\n anchorEventId,\n );\n }\n },\n onError: (err: unknown) => {\n const fallback = t(I18nKey.MODEL$SWITCH_FAILED, {\n name: profileName,\n });\n const message =\n err instanceof Error && err.message ? err.message : fallback;\n displayErrorToast(message);\n },\n },\n );\n },\n [mutate, t],\n );\n\n return { switchAndLog, isPending };\n}\n"],"mappings":"oYAcA,SAAgB,GAA4B,CAC1C,GAAM,CAAE,SAAQ,aAAc,EAAA,qBAAqB,CAC7C,CAAE,KAAM,EAAA,gBAAgB,CAkC9B,MAAO,CAAE,cAAA,EAAA,EAAA,cA/BN,EAA+B,IAAwB,CACtD,IAAM,EAAgB,EAAA,0BAA0B,CAEhD,EACE,CAAE,iBAAgB,cAAa,CAC/B,CACE,cAAiB,CAGX,GACF,EAAA,yBACE,EACA,EACA,EACD,EAGL,QAAU,GAAiB,CACzB,IAAM,EAAW,EAAE,EAAA,QAAQ,oBAAqB,CAC9C,KAAM,EACP,CAAC,CAGF,EAAA,kBADE,aAAe,OAAS,EAAI,QAAU,EAAI,QAAU,EAC5B,EAE7B,CACF,EAEH,CAAC,EAAQ,EAAE,CAGJ,CAAc,YAAW"}
1
+ {"version":3,"file":"use-switch-llm-profile-and-log.cjs","names":[],"sources":["../../../src/hooks/mutation/use-switch-llm-profile-and-log.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { getLastRenderableEventId } from \"#/hooks/chat/model-command-event-anchor\";\nimport { recordModelSwitchMessage } from \"#/hooks/chat/record-model-switch-message\";\nimport { useSwitchLlmProfile } from \"#/hooks/mutation/use-switch-llm-profile\";\nimport {\n getStoredConversationMetadata,\n setStoredConversationMetadata,\n} from \"#/api/conversation-metadata-store\";\nimport { displayErrorToast } from \"#/utils/custom-toast-handlers\";\nimport { I18nKey } from \"#/i18n/declaration\";\n\n/**\n * Switch the conversation's LLM profile and render the result inline (same\n * UX as `/model <name>`). On success the switch is recorded against the\n * last rendered event so the confirmation lines up with where the user\n * issued the command.\n */\nexport function useSwitchLlmProfileAndLog() {\n const { mutate, isPending } = useSwitchLlmProfile();\n const { t } = useTranslation();\n\n const switchAndLog = useCallback(\n (conversationId: string | null, profileName: string) => {\n const anchorEventId = getLastRenderableEventId();\n\n mutate(\n { conversationId, profileName },\n {\n onSuccess: () => {\n // The inline \"Switched to\" message is scoped to a conversation;\n // skip it when activating from the home page (no convo yet).\n if (conversationId) {\n recordModelSwitchMessage(\n conversationId,\n profileName,\n anchorEventId,\n );\n // Keep the per-conversation profile identity fresh so the\n // chat-header switcher shows the right name after a reload\n // (the agent-server only round-trips the model string). #1082\n const prev = getStoredConversationMetadata(conversationId);\n setStoredConversationMetadata(conversationId, {\n selected_repository: prev?.selected_repository ?? null,\n selected_branch: prev?.selected_branch ?? null,\n git_provider: prev?.git_provider ?? null,\n selected_workspace: prev?.selected_workspace ?? null,\n active_profile: profileName,\n });\n }\n },\n onError: (err: unknown) => {\n const fallback = t(I18nKey.MODEL$SWITCH_FAILED, {\n name: profileName,\n });\n const message =\n err instanceof Error && err.message ? err.message : fallback;\n displayErrorToast(message);\n },\n },\n );\n },\n [mutate, t],\n );\n\n return { switchAndLog, isPending };\n}\n"],"mappings":"2bAkBA,SAAgB,GAA4B,CAC1C,GAAM,CAAE,SAAQ,aAAc,EAAA,qBAAqB,CAC7C,CAAE,KAAM,EAAA,gBAAgB,CA6C9B,MAAO,CAAE,cAAA,EAAA,EAAA,cA1CN,EAA+B,IAAwB,CACtD,IAAM,EAAgB,EAAA,0BAA0B,CAEhD,EACE,CAAE,iBAAgB,cAAa,CAC/B,CACE,cAAiB,CAGf,GAAI,EAAgB,CAClB,EAAA,yBACE,EACA,EACA,EACD,CAID,IAAM,EAAO,EAAA,8BAA8B,EAAe,CAC1D,EAAA,8BAA8B,EAAgB,CAC5C,oBAAqB,GAAM,qBAAuB,KAClD,gBAAiB,GAAM,iBAAmB,KAC1C,aAAc,GAAM,cAAgB,KACpC,mBAAoB,GAAM,oBAAsB,KAChD,eAAgB,EACjB,CAAC,GAGN,QAAU,GAAiB,CACzB,IAAM,EAAW,EAAE,EAAA,QAAQ,oBAAqB,CAC9C,KAAM,EACP,CAAC,CAGF,EAAA,kBADE,aAAe,OAAS,EAAI,QAAU,EAAI,QAAU,EAC5B,EAE7B,CACF,EAEH,CAAC,EAAQ,EAAE,CAGJ,CAAc,YAAW"}
@@ -1,33 +1,44 @@
1
1
  import { useTranslation as e } from "../../node_modules/react-i18next/dist/es/useTranslation.js";
2
2
  import { I18nKey as t } from "../../i18n/declaration.js";
3
3
  import { displayErrorToast as n } from "../../utils/custom-toast-handlers.js";
4
- import { getLastRenderableEventId as r } from "../chat/model-command-event-anchor.js";
5
- import { recordModelSwitchMessage as i } from "../chat/record-model-switch-message.js";
6
- import { useSwitchLlmProfile as a } from "./use-switch-llm-profile.js";
7
- import { useCallback as o } from "react";
4
+ import { getStoredConversationMetadata as r, setStoredConversationMetadata as i } from "../../api/conversation-metadata-store.js";
5
+ import { getLastRenderableEventId as a } from "../chat/model-command-event-anchor.js";
6
+ import { recordModelSwitchMessage as o } from "../chat/record-model-switch-message.js";
7
+ import { useSwitchLlmProfile as s } from "./use-switch-llm-profile.js";
8
+ import { useCallback as c } from "react";
8
9
  //#region src/hooks/mutation/use-switch-llm-profile-and-log.ts
9
- function s() {
10
- let { mutate: s, isPending: c } = a(), { t: l } = e();
10
+ function l() {
11
+ let { mutate: l, isPending: u } = s(), { t: d } = e();
11
12
  return {
12
- switchAndLog: o((e, a) => {
13
- let o = r();
14
- s({
13
+ switchAndLog: c((e, s) => {
14
+ let c = a();
15
+ l({
15
16
  conversationId: e,
16
- profileName: a
17
+ profileName: s
17
18
  }, {
18
19
  onSuccess: () => {
19
- e && i(e, a, o);
20
+ if (e) {
21
+ o(e, s, c);
22
+ let t = r(e);
23
+ i(e, {
24
+ selected_repository: t?.selected_repository ?? null,
25
+ selected_branch: t?.selected_branch ?? null,
26
+ git_provider: t?.git_provider ?? null,
27
+ selected_workspace: t?.selected_workspace ?? null,
28
+ active_profile: s
29
+ });
30
+ }
20
31
  },
21
32
  onError: (e) => {
22
- let r = l(t.MODEL$SWITCH_FAILED, { name: a });
33
+ let r = d(t.MODEL$SWITCH_FAILED, { name: s });
23
34
  n(e instanceof Error && e.message ? e.message : r);
24
35
  }
25
36
  });
26
- }, [s, l]),
27
- isPending: c
37
+ }, [l, d]),
38
+ isPending: u
28
39
  };
29
40
  }
30
41
  //#endregion
31
- export { s as useSwitchLlmProfileAndLog };
42
+ export { l as useSwitchLlmProfileAndLog };
32
43
 
33
44
  //# sourceMappingURL=use-switch-llm-profile-and-log.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-switch-llm-profile-and-log.js","names":[],"sources":["../../../src/hooks/mutation/use-switch-llm-profile-and-log.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { getLastRenderableEventId } from \"#/hooks/chat/model-command-event-anchor\";\nimport { recordModelSwitchMessage } from \"#/hooks/chat/record-model-switch-message\";\nimport { useSwitchLlmProfile } from \"#/hooks/mutation/use-switch-llm-profile\";\nimport { displayErrorToast } from \"#/utils/custom-toast-handlers\";\nimport { I18nKey } from \"#/i18n/declaration\";\n\n/**\n * Switch the conversation's LLM profile and render the result inline (same\n * UX as `/model <name>`). On success the switch is recorded against the\n * last rendered event so the confirmation lines up with where the user\n * issued the command.\n */\nexport function useSwitchLlmProfileAndLog() {\n const { mutate, isPending } = useSwitchLlmProfile();\n const { t } = useTranslation();\n\n const switchAndLog = useCallback(\n (conversationId: string | null, profileName: string) => {\n const anchorEventId = getLastRenderableEventId();\n\n mutate(\n { conversationId, profileName },\n {\n onSuccess: () => {\n // The inline \"Switched to\" message is scoped to a conversation;\n // skip it when activating from the home page (no convo yet).\n if (conversationId) {\n recordModelSwitchMessage(\n conversationId,\n profileName,\n anchorEventId,\n );\n }\n },\n onError: (err: unknown) => {\n const fallback = t(I18nKey.MODEL$SWITCH_FAILED, {\n name: profileName,\n });\n const message =\n err instanceof Error && err.message ? err.message : fallback;\n displayErrorToast(message);\n },\n },\n );\n },\n [mutate, t],\n );\n\n return { switchAndLog, isPending };\n}\n"],"mappings":";;;;;;;;AAcA,SAAgB,IAA4B;CAC1C,IAAM,EAAE,WAAQ,iBAAc,GAAqB,EAC7C,EAAE,SAAM,GAAgB;AAkC9B,QAAO;EAAE,cAhCY,GAClB,GAA+B,MAAwB;GACtD,IAAM,IAAgB,GAA0B;AAEhD,KACE;IAAE;IAAgB;IAAa,EAC/B;IACE,iBAAiB;AAGf,KAAI,KACF,EACE,GACA,GACA,EACD;;IAGL,UAAU,MAAiB;KACzB,IAAM,IAAW,EAAE,EAAQ,qBAAqB,EAC9C,MAAM,GACP,CAAC;AAGF,OADE,aAAe,SAAS,EAAI,UAAU,EAAI,UAAU,EAC5B;;IAE7B,CACF;KAEH,CAAC,GAAQ,EAAE,CAGJ;EAAc;EAAW"}
1
+ {"version":3,"file":"use-switch-llm-profile-and-log.js","names":[],"sources":["../../../src/hooks/mutation/use-switch-llm-profile-and-log.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { getLastRenderableEventId } from \"#/hooks/chat/model-command-event-anchor\";\nimport { recordModelSwitchMessage } from \"#/hooks/chat/record-model-switch-message\";\nimport { useSwitchLlmProfile } from \"#/hooks/mutation/use-switch-llm-profile\";\nimport {\n getStoredConversationMetadata,\n setStoredConversationMetadata,\n} from \"#/api/conversation-metadata-store\";\nimport { displayErrorToast } from \"#/utils/custom-toast-handlers\";\nimport { I18nKey } from \"#/i18n/declaration\";\n\n/**\n * Switch the conversation's LLM profile and render the result inline (same\n * UX as `/model <name>`). On success the switch is recorded against the\n * last rendered event so the confirmation lines up with where the user\n * issued the command.\n */\nexport function useSwitchLlmProfileAndLog() {\n const { mutate, isPending } = useSwitchLlmProfile();\n const { t } = useTranslation();\n\n const switchAndLog = useCallback(\n (conversationId: string | null, profileName: string) => {\n const anchorEventId = getLastRenderableEventId();\n\n mutate(\n { conversationId, profileName },\n {\n onSuccess: () => {\n // The inline \"Switched to\" message is scoped to a conversation;\n // skip it when activating from the home page (no convo yet).\n if (conversationId) {\n recordModelSwitchMessage(\n conversationId,\n profileName,\n anchorEventId,\n );\n // Keep the per-conversation profile identity fresh so the\n // chat-header switcher shows the right name after a reload\n // (the agent-server only round-trips the model string). #1082\n const prev = getStoredConversationMetadata(conversationId);\n setStoredConversationMetadata(conversationId, {\n selected_repository: prev?.selected_repository ?? null,\n selected_branch: prev?.selected_branch ?? null,\n git_provider: prev?.git_provider ?? null,\n selected_workspace: prev?.selected_workspace ?? null,\n active_profile: profileName,\n });\n }\n },\n onError: (err: unknown) => {\n const fallback = t(I18nKey.MODEL$SWITCH_FAILED, {\n name: profileName,\n });\n const message =\n err instanceof Error && err.message ? err.message : fallback;\n displayErrorToast(message);\n },\n },\n );\n },\n [mutate, t],\n );\n\n return { switchAndLog, isPending };\n}\n"],"mappings":";;;;;;;;;AAkBA,SAAgB,IAA4B;CAC1C,IAAM,EAAE,WAAQ,iBAAc,GAAqB,EAC7C,EAAE,SAAM,GAAgB;AA6C9B,QAAO;EAAE,cA3CY,GAClB,GAA+B,MAAwB;GACtD,IAAM,IAAgB,GAA0B;AAEhD,KACE;IAAE;IAAgB;IAAa,EAC/B;IACE,iBAAiB;AAGf,SAAI,GAAgB;AAClB,QACE,GACA,GACA,EACD;MAID,IAAM,IAAO,EAA8B,EAAe;AAC1D,QAA8B,GAAgB;OAC5C,qBAAqB,GAAM,uBAAuB;OAClD,iBAAiB,GAAM,mBAAmB;OAC1C,cAAc,GAAM,gBAAgB;OACpC,oBAAoB,GAAM,sBAAsB;OAChD,gBAAgB;OACjB,CAAC;;;IAGN,UAAU,MAAiB;KACzB,IAAM,IAAW,EAAE,EAAQ,qBAAqB,EAC9C,MAAM,GACP,CAAC;AAGF,OADE,aAAe,SAAS,EAAI,UAAU,EAAI,UAAU,EAC5B;;IAE7B,CACF;KAEH,CAAC,GAAQ,EAAE,CAGJ;EAAc;EAAW"}