@openhands/agent-canvas 1.0.0-beta.9 → 1.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/README.windows.md +2 -2
- package/build/assets/{QueryClientProvider-w1cZWY41.js → QueryClientProvider-7oLZ1RtQ.js} +1 -1
- package/build/assets/{Trans-BJeYqz2A.js → Trans-rF21Jwln.js} +1 -1
- package/build/assets/{acp-providers-DJr8DlNG.js → acp-providers-DZEi8wDz.js} +1 -1
- package/build/assets/active-backend-context-CQTk4wD8.js +1 -0
- package/build/assets/add-backend-modal-CIfhseZn.js +1 -0
- package/build/assets/agent-server-client-options-Dvgeb3x4.js +1 -0
- package/build/assets/agent-server-compatibility-BANjmMTo.js +1 -0
- package/build/assets/agent-server-conversation-service.api-B82pNNTm.js +5 -0
- package/build/assets/{agent-settings-BXBaybB_.js → agent-settings-B6htMeS2.js} +1 -1
- package/build/assets/{alert-banner-NeUl1-PQ.js → alert-banner-D41ZKDZT.js} +1 -1
- package/build/assets/{analytics-consent-form-modal-CmWcFlc6.js → analytics-consent-form-modal-TINgM_jV.js} +1 -1
- package/build/assets/api-key-entry-screen-Di1vHgIU.js +1 -0
- package/build/assets/{app-settings-C-U6jONZ.js → app-settings-CjCa1MOB.js} +1 -1
- package/build/assets/automation-detail-DPoxzTdV.js +1 -0
- package/build/assets/{automations-list-BLJzAd-p.js → automations-list-DwUEe2Ea.js} +1 -1
- package/build/assets/{back-nav-button-DgkK0Ka6.js → back-nav-button-BDM9vr_o.js} +1 -1
- package/build/assets/backend-form-modal-B6q897ZX.js +1 -0
- package/build/assets/{backend-synced-settings-badge-BktJcGgH.js → backend-synced-settings-badge-BwTawSCE.js} +1 -1
- package/build/assets/{base-modal-DZCNv0A4.js → base-modal-Ba5WcNb6.js} +1 -1
- package/build/assets/{brand-button-LBFNic99.js → brand-button-BoiPxAGm.js} +1 -1
- package/build/assets/{browser-D08Sp3ZY.js → browser-DTei6kki.js} +1 -1
- package/build/assets/browser-store-BjhV_9wS.js +1 -0
- package/build/assets/{browser-tab-be3QvXg9.js → browser-tab-DiRTKik8.js} +1 -1
- package/build/assets/chat-send-button-06dIuWXm.js +1 -0
- package/build/assets/check-BDAbW7je.js +1 -0
- package/build/assets/{checkmark-Rmpruj7q.js → checkmark-BB7QCG5T.js} +1 -1
- package/build/assets/{chevron-down-KhWYEjeW.js → chevron-down-DUxWwzTm.js} +1 -1
- package/build/assets/{chevron-left-small-6nyFCWVQ.js → chevron-left-small-CuuwpRi9.js} +1 -1
- package/build/assets/{circle-plus-check-toggle-DquBwJ_6.js → circle-plus-check-toggle-B3_W6-nt.js} +1 -1
- package/build/assets/{close-D_o3d8QM.js → close-Cz0OAgTy.js} +1 -1
- package/build/assets/{code-tag-DhsjDB-v.js → code-tag-Cz9AIz-X.js} +1 -1
- package/build/assets/{color-themes-0biOprdo.js → color-themes-B9n7pBQl.js} +1 -1
- package/build/assets/{combobox-caret-CO7eozIY.js → combobox-caret-DwMmhrrA.js} +1 -1
- package/build/assets/{command-store-UzKGSUC2.js → command-store-DAd3K0d_.js} +1 -1
- package/build/assets/{condenser-settings-BulzYEuW.js → condenser-settings-DczjwkIp.js} +1 -1
- package/build/assets/{confirmation-modal-CMAtd9R0.js → confirmation-modal-C_lds1Tb.js} +1 -1
- package/build/assets/{context-menu-list-item-D0swnhFt.js → context-menu-list-item-DhG1Ln5m.js} +1 -1
- package/build/assets/conversation-CBlJiDaV.js +19 -0
- package/build/assets/conversation-Dss8XCN_.js +1 -0
- package/build/assets/conversation-panel-B5sVpsz5.js +1 -0
- package/build/assets/conversation-service.api-B4s-xIOK.js +1 -0
- package/build/assets/conversation-state-store-BUU90dVq.js +1 -0
- package/build/assets/{conversation-store-CC-isCnP.js → conversation-store-kHcewy1E.js} +1 -1
- package/build/assets/{conversation-tab-empty-state-DYjKsg_c.js → conversation-tab-empty-state-5bW9CQke.js} +1 -1
- package/build/assets/conversation-websocket-context-C2yKCqvj.js +3 -0
- package/build/assets/{copy-BM0RpLez.js → copy-CA1Dblua.js} +1 -1
- package/build/assets/{custom-toast-handlers-BohXx7uh.js → custom-toast-handlers-fgD4IYsu.js} +1 -1
- package/build/assets/{declaration-DaUdB2Wg.js → declaration-IA661TBv.js} +1 -1
- package/build/assets/{device-verify-DiEJqpJb.js → device-verify-BVl4GEvt.js} +1 -1
- package/build/assets/{dist-xtCm0O6P.js → dist-B-SKiGDl.js} +1 -1
- package/build/assets/dist-CBUfAk0Z.js +1 -0
- package/build/assets/{dropdown-classes-Vqz86I0R.js → dropdown-classes-lT1LUsbO.js} +1 -1
- package/build/assets/edit-automation-modal-kc_FzbzK.js +1 -0
- package/build/assets/ellipsis-button-DRRmCrWi.js +1 -0
- package/build/assets/{entry.client-BvKgdCQ9.js → entry.client-CWkbusD1.js} +2 -2
- package/build/assets/{enum-filter-dropdown-DdFgk0EM.js → enum-filter-dropdown-DlY0Q3fj.js} +1 -1
- package/build/assets/{environment-switch-overlay-CuBuZOaa.js → environment-switch-overlay-BrHKX6_Z.js} +1 -1
- package/build/assets/{extensions-hub-Dayqvv0n.js → extensions-hub-NbQnt-cn.js} +1 -1
- package/build/assets/extensions-navigation-oOk5yl8X.js +1 -0
- package/build/assets/{file-DwHCkWZT.js → file-DM0ihEsO.js} +1 -1
- package/build/assets/files-tab-mK7Mdyuf.js +1 -0
- package/build/assets/files-tab-store-QlUCuW8b.js +1 -0
- package/build/assets/{folder-2h1hR1Qb.js → folder-UGYUKpqb.js} +1 -1
- package/build/assets/git-control-bar-branch-button-C1qmab0K.js +27 -0
- package/build/assets/{globe-qFjFNG6J.js → globe-2otpEmVh.js} +1 -1
- package/build/assets/home-ChuA06Hv.js +1 -0
- package/build/assets/{i18n-zDndR1Ne.js → i18n-CyvU1o95.js} +1 -1
- package/build/assets/install-server-modal--lZ1HSHB.js +1 -0
- package/build/assets/{launch-I00QV8YT.js → launch-BADsYeGp.js} +1 -1
- package/build/assets/{lesson-plan-C18uB_56.js → lesson-plan-5O2tVbD1.js} +1 -1
- package/build/assets/{link-external-DtcdPFbw.js → link-external-kU6aFXU6.js} +1 -1
- package/build/assets/llm-client-BnqeDPua.js +1 -0
- package/build/assets/llm-settings-D477P0Lg.js +1 -0
- package/build/assets/llm-settings-DtlQ7i4C.js +1 -0
- package/build/assets/{loading-spinner-DNwR4--Z.js → loading-spinner-CFuA0UNt.js} +1 -1
- package/build/assets/manage-backends-modal-sH7l5NgI.js +1 -0
- package/build/assets/manifest-17af0b17.js +1 -0
- package/build/assets/{markdown-renderer-D6B-u2nM.js → markdown-renderer-CZq_UdmE.js} +1 -1
- package/build/assets/mcp-DdQ72_AO.js +9 -0
- package/build/assets/mcp-client-xEdbDxOL.js +1 -0
- package/build/assets/{messages-Bz9TWjlh.js → messages-luW9zf1w.js} +1 -1
- package/build/assets/{modal-backdrop-BDqI1zBV.js → modal-backdrop-B1si6TUd.js} +1 -1
- package/build/assets/{modal-body-CCLCqX1J.js → modal-body-2Po2nl1e.js} +1 -1
- package/build/assets/{modal-classes-DwTdT3IK.js → modal-classes-9XTtWCtF.js} +1 -1
- package/build/assets/{modal-close-button-gQgKqUf-.js → modal-close-button-BCvw9IUN.js} +1 -1
- package/build/assets/model-selector-DzQRgNGZ.js +1 -0
- package/build/assets/{navigation-context-aNGUUtdq.js → navigation-context-CszaA-CJ.js} +1 -1
- package/build/assets/{navigation-link-CYkF2y3K.js → navigation-link-DXg4oo29.js} +1 -1
- package/build/assets/onboarding-DCL9stdH.js +1 -0
- package/build/assets/{openhands-logo-CHmtDV-t.js → openhands-logo-B-IDE1ER.js} +1 -1
- package/build/assets/{option-service.api-CGNANEcT.js → option-service.api-DHOGfYKh.js} +1 -1
- package/build/assets/organization-service.api-D79cdERN.js +1 -0
- package/build/assets/path-utils-CNd_jqv_.js +1 -0
- package/build/assets/{pencil-Dr0b2jL1.js → pencil-COslZGUC.js} +1 -1
- package/build/assets/{plan-components--aLlpASH.js → plan-components-BRiIX8Wn.js} +1 -1
- package/build/assets/{planner-tab-B-5EeCEm.js → planner-tab-QBnZgIXd.js} +1 -1
- package/build/assets/plus-D8aJZRkD.js +1 -0
- package/build/assets/profiles-client-CesbAK-7.js +1 -0
- package/build/assets/{providers-DknP6O2g.js → providers-Bpq3xFRA.js} +1 -1
- package/build/assets/proxy-wIasY2Po.js +1 -0
- package/build/assets/{query-client-config-CWWGQWvw.js → query-client-config-CITeuHD7.js} +1 -1
- package/build/assets/{recommended-automations-launcher-BIul0osB.js → recommended-automations-launcher-B01jchhe.js} +1 -1
- package/build/assets/root-BBV8Ew9E.js +2 -0
- package/build/assets/root-layout-pQASEqtQ.js +2 -0
- package/build/assets/{sdk-section-page-VmtJWH3A.js → sdk-section-page-BQKe3asw.js} +1 -1
- package/build/assets/{sdk-settings-schema-DFievvEK.js → sdk-settings-schema-DoRnefvb.js} +1 -1
- package/build/assets/{search-BeVRXvX7.js → search-Cbh-hHBu.js} +1 -1
- package/build/assets/secrets-service-DEIB-Cfk.js +1 -0
- package/build/assets/{secrets-settings-BLMvCkKm.js → secrets-settings-D2EfzdpC.js} +1 -1
- package/build/assets/server-client-Cz8PyIbN.js +1 -0
- package/build/assets/settings-B7jVceyu.js +1 -0
- package/build/assets/settings-client-BUlG0Gzq.js +1 -0
- package/build/assets/{settings-dropdown-input-DA_pzHWE.js → settings-dropdown-input-BD7ziSoR.js} +1 -1
- package/build/assets/{settings-gear-aNebYlCy.js → settings-gear-xGs_SPgZ.js} +1 -1
- package/build/assets/{settings-index-CycvkOoq.js → settings-index-Xj0v9Oas.js} +1 -1
- package/build/assets/{settings-input-8y5p4kze.js → settings-input-CPr7vX81.js} +1 -1
- package/build/assets/{settings-list-classes-Qk7zl0Wu.js → settings-list-classes-CYDn4jUg.js} +1 -1
- package/build/assets/{settings-modal-nJYxCsyp.js → settings-modal-CDBy1S9S.js} +1 -1
- package/build/assets/{settings-section-header-context-B77tsYlx.js → settings-section-header-context-aD2iq1gD.js} +1 -1
- package/build/assets/settings-service.api-CTQ-LpAA.js +1 -0
- package/build/assets/{settings-switch-ba4DuiNO.js → settings-switch-CSHSqH99.js} +1 -1
- package/build/assets/{settings-utils-BxzHqLmZ.js → settings-utils-BCbzc6-u.js} +1 -1
- package/build/assets/shared-conversation-BHEbOdHj.js +1 -0
- package/build/assets/{sidebar-mobile-menu-toggle-C0mmabKj.js → sidebar-mobile-menu-toggle-YYPXGikp.js} +1 -1
- package/build/assets/{sidebar-nav-link-BsYdDFfb.js → sidebar-nav-link-CiXbBMQx.js} +1 -1
- package/build/assets/{sidebar-store-DnQAJAE5.js → sidebar-store-B76R2gP8.js} +1 -1
- package/build/assets/{skill-card-pill-row-BhUlGcYB.js → skill-card-pill-row-BXILn-GK.js} +1 -1
- package/build/assets/{skills-TYjOUQ2d.js → skills-CCaEu1KQ.js} +1 -1
- package/build/assets/skills-client-Cr9F5306.js +1 -0
- package/build/assets/{skills-plugins-D0pdqgKa.js → skills-plugins-Bs5HiF1O.js} +1 -1
- package/build/assets/{skills-settings-VqKTkmVl.js → skills-settings-CQYxMmWf.js} +1 -1
- package/build/assets/{styled-tooltip-TCp7svY3.js → styled-tooltip-DEr7oa0m.js} +1 -1
- package/build/assets/suspense-C9MBE_9N.js +1 -0
- package/build/assets/{switch-skeleton-cKrdaYGj.js → switch-skeleton-C87Tx3Tc.js} +1 -1
- package/build/assets/{task-list-tab-BiizRsY3.js → task-list-tab-R9N3Wd-U.js} +1 -1
- package/build/assets/telemetry-DCrd7gnV.js +2 -0
- package/build/assets/{terminal-CpgZx6go.js → terminal-BTM3UFcQ.js} +1 -1
- package/build/assets/{terminal-BSYITdM0.js → terminal-DQJ6IJUd.js} +1 -1
- package/build/assets/{toggle-switch-CUgOZqZu.js → toggle-switch-C-7juZ1u.js} +1 -1
- package/build/assets/{trash-2-CbVljPko.js → trash-2-DAKXV2Wm.js} +1 -1
- package/build/assets/{typography-Bvw0IxaN.js → typography-U1gkzkXo.js} +1 -1
- package/build/assets/{u-check-circle-half-DjpjzWu3.js → u-check-circle-half-CirnoxXG.js} +1 -1
- package/build/assets/{u-check-circle-u9QiS4Fr.js → u-check-circle-lbkXL2z4.js} +1 -1
- package/build/assets/{u-circuit-DlBlOwx9.js → u-circuit-Danff2ks.js} +1 -1
- package/build/assets/{u-edit-BIYzjs3v.js → u-edit-CH5nNya1.js} +1 -1
- package/build/assets/{use-active-conversation-q1wT8LI5.js → use-active-conversation-BY5F6A1G.js} +1 -1
- package/build/assets/use-agent-settings-schema-CsuMq16G.js +1 -0
- package/build/assets/{use-agent-state-CCHlVqvY.js → use-agent-state-DX5NKEa_.js} +1 -1
- package/build/assets/{use-cloud-current-user-id-BAKf91Zx.js → use-cloud-current-user-id-e1Pk7NxQ.js} +1 -1
- package/build/assets/use-config-DSzkljTq.js +1 -0
- package/build/assets/use-create-conversation-4iJytCT1.js +1 -0
- package/build/assets/{use-event-store-Cxqc45Sw.js → use-event-store-Rw1YbvLm.js} +1 -1
- package/build/assets/use-get-secrets-BMnFFBUx.js +1 -0
- package/build/assets/{use-handle-plan-click-Bfl0zIBr.js → use-handle-plan-click-DYd5a6zN.js} +1 -1
- package/build/assets/use-is-authed-DrocXcet.js +1 -0
- package/build/assets/{use-launch-skill-in-chat-3ydwpi_M.js → use-launch-skill-in-chat-BoqKmEHC.js} +1 -1
- package/build/assets/use-llm-profiles-BhZRf-NX.js +1 -0
- package/build/assets/use-runtime-is-ready-DP-KKHO6.js +1 -0
- package/build/assets/{use-save-settings-rE9aA29R.js → use-save-settings-hK6LYt0s.js} +1 -1
- package/build/assets/use-settings-Clf0Y_P3.js +1 -0
- package/build/assets/{use-settings-nav-items-C7MOWj09.js → use-settings-nav-items-oZ-BlOWX.js} +1 -1
- package/build/assets/use-skills-v8pQ02ze.js +1 -0
- package/build/assets/{use-task-list-YMkSzdDv.js → use-task-list-DydbuRFM.js} +1 -1
- package/build/assets/{use-tracking-DQYdZpxi.js → use-tracking-DQU60djN.js} +1 -1
- package/build/assets/use-unified-vscode-url-D2Buvmxj.js +1 -0
- package/build/assets/use-user-conversation-DwOGM1lc.js +1 -0
- package/build/assets/{useMutation-DDo48A8t.js → useMutation-7hG0GuPx.js} +1 -1
- package/build/assets/useQuery-JDs8UaWj.js +1 -0
- package/build/assets/{useTranslation-CEcjrme-.js → useTranslation-CbJtty1g.js} +1 -1
- package/build/assets/{utils-CdgBzLA7.js → utils-CVcuFUYj.js} +1 -1
- package/build/assets/{vendor~browser-DWk6fNtJ.js → vendor~browser-3J6WDaAB.js} +1 -1
- package/build/assets/{vendor~browser-tab-NZdVoI2Z.js → vendor~browser-tab-DYZ-OmbT.js} +1 -1
- package/build/assets/{vendor~conversation-panel~conversation-gp03cWZW.js → vendor~conversation-panel~conversation-DYHL7QoY.js} +1 -1
- package/build/assets/{vendor~conversation-panel~conversation~index-BZ5C6Xpz.js → vendor~conversation-panel~conversation~index-Be58Romv.js} +1 -1
- 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
- package/build/assets/{vendor~files-tab-Buz36Y-q.js → vendor~files-tab-Diy4WrQz.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation-DG0H5SkJ.js → vendor~home~conversation-panel~conversation-DZ-F7J6T.js} +1 -1
- 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
- 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
- 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
- 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
- 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
- package/build/assets/{vendor~launch-DXL78kBf.js → vendor~launch-D65Vw0VZ.js} +1 -1
- 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
- package/build/assets/{vendor~root-layout~home~conversation-panel~conversation-DkwcKRtv.js → vendor~root-layout~home~conversation-panel~conversation-Cg0nXqVs.js} +1 -1
- 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
- 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
- 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
- package/build/assets/vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~jxrvuot9-Cwz6a1DC.js +48 -0
- 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
- package/build/assets/{vendor~root-layout~home~mcp~automations-list-BnIlGhjl.js → vendor~root-layout~home~mcp~automations-list-BTTZ58Mb.js} +1 -1
- package/build/assets/{vendor~root-layout~home~mcp~automations-list-cNHi83v_.js → vendor~root-layout~home~mcp~automations-list-JQ-neDIa.js} +1 -1
- 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
- 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
- package/build/assets/{verification-settings-CIqtxWat.js → verification-settings-Rabe5TpK.js} +1 -1
- package/build/assets/{vscode-tab-DEt72yJX.js → vscode-tab-zLD5Z-PP.js} +1 -1
- package/build/assets/{waiting-for-runtime-message-DSjJfeoj.js → waiting-for-runtime-message-B1Dzhtj5.js} +1 -1
- package/build/assets/x-8AbJWTbX.js +1 -0
- package/build/assets/{x-mark-DsJ9tDD0.js → x-mark-CmcVOTk2.js} +1 -1
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +1 -0
- package/build/locales/ca/openhands.json +1 -0
- package/build/locales/de/openhands.json +1 -0
- package/build/locales/en/openhands.json +1 -0
- package/build/locales/es/openhands.json +1 -0
- package/build/locales/fr/openhands.json +1 -0
- package/build/locales/it/openhands.json +1 -0
- package/build/locales/ja/openhands.json +1 -0
- package/build/locales/ko-KR/openhands.json +1 -0
- package/build/locales/no/openhands.json +1 -0
- package/build/locales/pt/openhands.json +1 -0
- package/build/locales/tr/openhands.json +1 -0
- package/build/locales/uk/openhands.json +1 -0
- package/build/locales/zh-CN/openhands.json +1 -0
- package/build/locales/zh-TW/openhands.json +1 -0
- package/dist/api/agent-server-adapter.cjs +2 -2
- package/dist/api/agent-server-adapter.cjs.map +1 -1
- package/dist/api/agent-server-adapter.js +6 -3
- package/dist/api/agent-server-adapter.js.map +1 -1
- package/dist/api/cloud/proxy.cjs +1 -1
- package/dist/api/cloud/proxy.cjs.map +1 -1
- package/dist/api/cloud/proxy.d.ts +18 -6
- package/dist/api/cloud/proxy.js +1 -1
- package/dist/api/cloud/proxy.js.map +1 -1
- package/dist/api/config-service/config-service.api.cjs +1 -1
- package/dist/api/config-service/config-service.api.cjs.map +1 -1
- package/dist/api/config-service/config-service.api.d.ts +12 -0
- package/dist/api/config-service/config-service.api.js +55 -18
- package/dist/api/config-service/config-service.api.js.map +1 -1
- package/dist/api/conversation-metadata-store.cjs.map +1 -1
- package/dist/api/conversation-metadata-store.d.ts +8 -0
- package/dist/api/conversation-metadata-store.js.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.types.d.ts +9 -0
- package/dist/components/features/chat/switch-profile-button.cjs +1 -1
- package/dist/components/features/chat/switch-profile-button.cjs.map +1 -1
- package/dist/components/features/chat/switch-profile-button.js +5 -5
- package/dist/components/features/chat/switch-profile-button.js.map +1 -1
- package/dist/components/features/conversation-panel/skills-modal.cjs +1 -1
- package/dist/components/features/conversation-panel/skills-modal.cjs.map +1 -1
- package/dist/components/features/conversation-panel/skills-modal.js +34 -37
- package/dist/components/features/conversation-panel/skills-modal.js.map +1 -1
- package/dist/components/features/settings/llm-profiles/profile-actions-menu.cjs +1 -1
- package/dist/components/features/settings/llm-profiles/profile-actions-menu.js +1 -0
- package/dist/components/features/skills/extensions-navigation.cjs +1 -1
- package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
- package/dist/components/features/skills/extensions-navigation.d.ts +0 -8
- package/dist/components/features/skills/extensions-navigation.js +34 -51
- package/dist/components/features/skills/extensions-navigation.js.map +1 -1
- package/dist/constants/acp-providers.cjs +1 -1
- package/dist/constants/acp-providers.js +1 -1
- package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
- package/dist/hooks/mutation/use-create-conversation.cjs.map +1 -1
- package/dist/hooks/mutation/use-create-conversation.js +26 -14
- package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
- package/dist/hooks/mutation/use-switch-llm-profile-and-log.cjs +1 -1
- package/dist/hooks/mutation/use-switch-llm-profile-and-log.cjs.map +1 -1
- package/dist/hooks/mutation/use-switch-llm-profile-and-log.js +26 -15
- package/dist/hooks/mutation/use-switch-llm-profile-and-log.js.map +1 -1
- package/dist/hooks/query/use-verified-models.cjs +1 -1
- package/dist/hooks/query/use-verified-models.cjs.map +1 -1
- package/dist/hooks/query/use-verified-models.js +7 -6
- package/dist/hooks/query/use-verified-models.js.map +1 -1
- package/dist/i18n/declaration.cjs +1 -1
- package/dist/i18n/declaration.cjs.map +1 -1
- package/dist/i18n/declaration.d.ts +1 -0
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/translation.cjs +1 -1
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +17 -0
- package/dist/i18n/translation.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +10 -10
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.js +1 -1
- package/dist/locales/ar/openhands.json +1 -0
- package/dist/locales/ca/openhands.json +1 -0
- package/dist/locales/de/openhands.json +1 -0
- package/dist/locales/en/openhands.json +1 -0
- package/dist/locales/es/openhands.json +1 -0
- package/dist/locales/fr/openhands.json +1 -0
- package/dist/locales/it/openhands.json +1 -0
- package/dist/locales/ja/openhands.json +1 -0
- package/dist/locales/ko-KR/openhands.json +1 -0
- package/dist/locales/no/openhands.json +1 -0
- package/dist/locales/pt/openhands.json +1 -0
- package/dist/locales/tr/openhands.json +1 -0
- package/dist/locales/uk/openhands.json +1 -0
- package/dist/locales/zh-CN/openhands.json +1 -0
- package/dist/locales/zh-TW/openhands.json +1 -0
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +1 -1
- package/dist/package.js.map +1 -1
- package/dist/routes/mcp.cjs +1 -1
- package/dist/routes/mcp.cjs.map +1 -1
- package/dist/routes/mcp.d.ts +0 -1
- package/dist/routes/mcp.js +0 -1
- package/dist/routes/mcp.js.map +1 -1
- package/package.json +1 -1
- package/scripts/dev-safe.mjs +18 -2
- package/build/assets/acp-route-guard-A__sWgbc.js +0 -1
- package/build/assets/active-backend-context-I2w666XY.js +0 -1
- package/build/assets/add-backend-modal-BDBDBXsJ.js +0 -1
- package/build/assets/agent-server-client-options-9agOSarV.js +0 -1
- package/build/assets/agent-server-compatibility-B7QStIcH.js +0 -1
- package/build/assets/agent-server-conversation-service.api-Cagoqq1V.js +0 -5
- package/build/assets/api-key-entry-screen-ByXA4hXH.js +0 -1
- package/build/assets/automation-detail-Dbmgt974.js +0 -1
- package/build/assets/backend-form-modal-CeB983Sj.js +0 -1
- package/build/assets/browser-store-JRrcGdlk.js +0 -1
- package/build/assets/chat-send-button-5qz0zj6R.js +0 -1
- package/build/assets/check-CZhEL6rP.js +0 -1
- package/build/assets/conversation-BrjF2-Ky.js +0 -1
- package/build/assets/conversation-HgR_TTPE.js +0 -19
- package/build/assets/conversation-panel-BlRcO5AC.js +0 -1
- package/build/assets/conversation-service.api-B_Pdmwsa.js +0 -1
- package/build/assets/conversation-state-store-D-w0uurj.js +0 -1
- package/build/assets/conversation-websocket-context-G95yfL81.js +0 -3
- package/build/assets/dist-Bl-1K5Tv.js +0 -1
- package/build/assets/edit-automation-modal-CNZgSSiH.js +0 -1
- package/build/assets/extensions-navigation-yFLAU06N.js +0 -1
- package/build/assets/files-tab-CMredyYX.js +0 -1
- package/build/assets/files-tab-store-DLU28g8C.js +0 -1
- package/build/assets/git-control-bar-branch-button-D8blTNXh.js +0 -27
- package/build/assets/home-TrU0fLgG.js +0 -1
- package/build/assets/install-server-modal-D8Q0xZcN.js +0 -1
- package/build/assets/llm-client-BqyLKgUN.js +0 -1
- package/build/assets/llm-settings-C4R4HMUO.js +0 -1
- package/build/assets/llm-settings-Dq3w2cob.js +0 -1
- package/build/assets/manage-backends-modal-Ceo_SOcf.js +0 -1
- package/build/assets/manifest-8c2efa8a.js +0 -1
- package/build/assets/mcp-EvrLVTla.js +0 -9
- package/build/assets/model-selector-DoL0CL0_.js +0 -1
- package/build/assets/onboarding-DLr9jbKH.js +0 -1
- package/build/assets/organization-service.api-Dn74hBTH.js +0 -1
- package/build/assets/path-utils-BjxzIGLp.js +0 -1
- package/build/assets/plus-DT-M0FA1.js +0 -1
- package/build/assets/profiles-client-BrqNmaDV.js +0 -1
- package/build/assets/proxy-sRh0WKI7.js +0 -1
- package/build/assets/root-BietmyRa.js +0 -2
- package/build/assets/root-layout-BgPi-t57.js +0 -2
- package/build/assets/secrets-service-DVtlLWY8.js +0 -1
- package/build/assets/server-client-DYv_GHPl.js +0 -1
- package/build/assets/settings-CXvJUx_j.js +0 -1
- package/build/assets/settings-service.api-DxIEtvx6.js +0 -1
- package/build/assets/shared-conversation-x41nZQi7.js +0 -1
- package/build/assets/telemetry-3piyXm5H.js +0 -2
- package/build/assets/use-agent-settings-schema-Yxf7KGyG.js +0 -1
- package/build/assets/use-config-DwfigQ_Y.js +0 -1
- package/build/assets/use-create-conversation-BEzddjXn.js +0 -1
- package/build/assets/use-get-secrets-BlO1BfUo.js +0 -1
- package/build/assets/use-is-authed-hHndEep7.js +0 -1
- package/build/assets/use-llm-profiles-E-jjZMZw.js +0 -1
- package/build/assets/use-runtime-is-ready-DBWzvAmc.js +0 -1
- package/build/assets/use-settings-BPTbE7lg.js +0 -1
- package/build/assets/use-skills-QhoaIYGF.js +0 -1
- package/build/assets/use-unified-vscode-url-DFtNIC1Q.js +0 -1
- package/build/assets/use-user-conversation-BRAseenw.js +0 -1
- package/build/assets/vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~dp08i1qy-D8soyAAx.js +0 -48
- package/build/assets/vendor~root~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-s~jaomi49z-Cw89stA6.js +0 -1
- package/build/assets/x-JOBEVLW0.js +0 -1
- package/dist/components/features/conversation-panel/skills-runtime-waiting-state.cjs +0 -2
- package/dist/components/features/conversation-panel/skills-runtime-waiting-state.cjs.map +0 -1
- package/dist/components/features/conversation-panel/skills-runtime-waiting-state.d.ts +0 -1
- package/dist/components/features/conversation-panel/skills-runtime-waiting-state.js +0 -21
- package/dist/components/features/conversation-panel/skills-runtime-waiting-state.js.map +0 -1
- package/dist/utils/acp-route-guard.cjs +0 -1
- package/dist/utils/acp-route-guard.d.ts +0 -26
- package/dist/utils/acp-route-guard.js +0 -4
- /package/build/assets/{agent-server-ui-style-scope-BwIZYdC1.js → agent-server-ui-style-scope-Bhc5vpWO.js} +0 -0
- /package/build/assets/{automation-DJ_3GeXD.js → automation-LZB0MjdV.js} +0 -0
- /package/build/assets/{common-DqjLSBOt.js → common-Cfviy7yT.js} +0 -0
- /package/build/assets/{context-CEQZwATj.js → context-BBqptpXX.js} +0 -0
- /package/build/assets/{conversation-local-storage-YmOVXxxW.js → conversation-local-storage-D5Tre_GA.js} +0 -0
- /package/build/assets/{createLucideIcon-Ddu8jDOQ.js → createLucideIcon-C9OEnwvX.js} +0 -0
- /package/build/assets/{environment-switch-store-CiurvTtK.js → environment-switch-store-BpKxp6Xq.js} +0 -0
- /package/build/assets/{git-status-mapper-DnL9OC8_.js → git-status-mapper-N4-7eaeC.js} +0 -0
- /package/build/assets/{handle-capture-consent-3XrjZ8wi.js → handle-capture-consent-OitMkDHc.js} +0 -0
- /package/build/assets/{health-store-B5f0S2FY.js → health-store-d-d2ssv4.js} +0 -0
- /package/build/assets/{iconBase-BVhFI-0E.js → iconBase-B_5IRYeZ.js} +0 -0
- /package/build/assets/{map-provider-C3Z5Dx2J.js → map-provider-BHow6ugd.js} +0 -0
- /package/build/assets/{middleware-CfatjPYZ.js → middleware-B5rcobhi.js} +0 -0
- /package/build/assets/{objectWithoutPropertiesLoose-DSQKyRhw.js → objectWithoutPropertiesLoose-B-IA9dU9.js} +0 -0
- /package/build/assets/{query-keys-tAsQcc_9.js → query-keys-CQaji0wJ.js} +0 -0
- /package/build/assets/{react-Dy05vyj5.js → react-CuAHzoGi.js} +0 -0
- /package/build/assets/{retrieve-axios-error-message-BY-yIkIq.js → retrieve-axios-error-message-DbnSBc_1.js} +0 -0
- /package/build/assets/{sdk-settings-field-metadata-C6KMD-jZ.js → sdk-settings-field-metadata-CtO73dY6.js} +0 -0
- /package/build/assets/{settings-DGY6n4J2.js → settings-KgLvVrSm.js} +0 -0
- /package/build/assets/{settings-like-page-layout-classes-DNg2vKSM.js → settings-like-page-layout-classes-GknosJgv.js} +0 -0
- /package/build/assets/{use-breakpoint-DpxHDmuH.js → use-breakpoint-2sN462wJ.js} +0 -0
- /package/build/assets/{use-click-outside-element-DhxCUyWl.js → use-click-outside-element-_vianyPb.js} +0 -0
- /package/build/assets/{v4-khGvL7i2.js → v4-BMWDcIWQ.js} +0 -0
- /package/build/assets/{vendor~browser-BDNLFng6.js → vendor~browser-C3GKF4mj.js} +0 -0
- /package/build/assets/{vendor~conversation-panel~conversation~alert-banner-D_hRW_zc.js → vendor~conversation-panel~conversation~alert-banner-DMcFTqbt.js} +0 -0
- /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
- /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
- /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
- /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
- /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
- /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
- /package/build/assets/{vendor~terminal-0ObOedYm.js → vendor~terminal-CnKZILnC.js} +0 -0
- /package/build/assets/{vscode-url-helper-BMq8JBhB.js → vscode-url-helper-CwQPl6QN.js} +0 -0
|
@@ -1,66 +1,63 @@
|
|
|
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
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { SkillItem as h } from "./skill-item.js";
|
|
16
|
-
import { useMemo as g, useState as _ } from "react";
|
|
17
|
-
import { jsx as v, jsxs as y } from "react/jsx-runtime";
|
|
3
|
+
import { getAgentServerWorkingDir as n } from "../../../api/agent-server-config.js";
|
|
4
|
+
import { useConversationSkills as r } from "../../../hooks/query/use-conversation-skills.js";
|
|
5
|
+
import { ModalBackdrop as i } from "../../shared/modals/modal-backdrop.js";
|
|
6
|
+
import { ModalBody as a } from "../../shared/modals/modal-body.js";
|
|
7
|
+
import { SKILL_SCOPE_ORDER as o, groupSkillsByScope as s } from "../../../utils/skill-scope.js";
|
|
8
|
+
import { SkillsModalHeader as c } from "./skills-modal-header.js";
|
|
9
|
+
import { SkillsModalSection as l } from "./skills-modal-section.js";
|
|
10
|
+
import { SkillsLoadingState as u } from "./skills-loading-state.js";
|
|
11
|
+
import { SkillsEmptyState as d } from "./skills-empty-state.js";
|
|
12
|
+
import { SkillItem as f } from "./skill-item.js";
|
|
13
|
+
import { useMemo as p, useState as m } from "react";
|
|
14
|
+
import { jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
18
15
|
//#region src/components/features/conversation-panel/skills-modal.tsx
|
|
19
|
-
var
|
|
16
|
+
var _ = {
|
|
20
17
|
project: t.SKILLS_MODAL$SECTION_PROJECT,
|
|
21
18
|
personal: t.SKILLS_MODAL$SECTION_USER,
|
|
22
19
|
public: t.SKILLS_MODAL$SECTION_PUBLIC
|
|
23
20
|
};
|
|
24
|
-
function
|
|
25
|
-
let { t:
|
|
26
|
-
|
|
21
|
+
function v({ onClose: t }) {
|
|
22
|
+
let { t: v } = e("openhands"), y = n(), [b, x] = m({}), { data: S, isLoading: C, isError: w, refetch: T, isRefetching: E } = r(), D = p(() => S ? s(S, y) : null, [S, y]), O = (e) => {
|
|
23
|
+
x((t) => ({
|
|
27
24
|
...t,
|
|
28
25
|
[e]: !t[e]
|
|
29
26
|
}));
|
|
30
|
-
}
|
|
31
|
-
return /* @__PURE__ */
|
|
27
|
+
};
|
|
28
|
+
return /* @__PURE__ */ h(i, {
|
|
32
29
|
onClose: t,
|
|
33
|
-
children: /* @__PURE__ */
|
|
30
|
+
children: /* @__PURE__ */ g(a, {
|
|
34
31
|
width: "lg",
|
|
35
32
|
className: "relative max-h-[80vh] flex flex-col items-start border border-[var(--oh-border)]",
|
|
36
33
|
testID: "skills-modal",
|
|
37
|
-
children: [/* @__PURE__ */
|
|
38
|
-
isLoading:
|
|
39
|
-
isRefetching:
|
|
40
|
-
onRefresh:
|
|
34
|
+
children: [/* @__PURE__ */ h(c, {
|
|
35
|
+
isLoading: C,
|
|
36
|
+
isRefetching: E,
|
|
37
|
+
onRefresh: T,
|
|
41
38
|
onClose: t
|
|
42
|
-
}), /* @__PURE__ */
|
|
39
|
+
}), /* @__PURE__ */ h("div", {
|
|
43
40
|
className: "w-full h-[60vh] overflow-auto rounded-md border border-[var(--oh-border)] bg-surface-raised custom-scrollbar-always",
|
|
44
|
-
children:
|
|
41
|
+
children: C ? /* @__PURE__ */ h(u, {}) : w || !S || S.length === 0 ? /* @__PURE__ */ h(d, { isError: w }) : D && /* @__PURE__ */ h("div", {
|
|
45
42
|
className: "divide-y divide-[var(--oh-border)]",
|
|
46
|
-
children:
|
|
47
|
-
let t =
|
|
48
|
-
return t.length === 0 ? null : /* @__PURE__ */
|
|
49
|
-
title:
|
|
43
|
+
children: o.map((e) => {
|
|
44
|
+
let t = D[e];
|
|
45
|
+
return t.length === 0 ? null : /* @__PURE__ */ h(l, {
|
|
46
|
+
title: v(_[e]),
|
|
50
47
|
count: t.length,
|
|
51
|
-
children: t.map((t) => /* @__PURE__ */
|
|
48
|
+
children: t.map((t) => /* @__PURE__ */ h(f, {
|
|
52
49
|
skill: t,
|
|
53
|
-
isExpanded:
|
|
54
|
-
onToggle:
|
|
50
|
+
isExpanded: b[t.name] || !1,
|
|
51
|
+
onToggle: O
|
|
55
52
|
}, `${e}-${t.name}`))
|
|
56
53
|
}, e);
|
|
57
54
|
})
|
|
58
|
-
})
|
|
55
|
+
})
|
|
59
56
|
})]
|
|
60
57
|
})
|
|
61
58
|
});
|
|
62
59
|
}
|
|
63
60
|
//#endregion
|
|
64
|
-
export {
|
|
61
|
+
export { v as SkillsModal };
|
|
65
62
|
|
|
66
63
|
//# sourceMappingURL=skills-modal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-modal.js","names":[],"sources":["../../../../src/components/features/conversation-panel/skills-modal.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { ModalBackdrop } from \"#/components/shared/modals/modal-backdrop\";\nimport { ModalBody } from \"#/components/shared/modals/modal-body\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { getAgentServerWorkingDir } from \"#/api/agent-server-config\";\nimport { useConversationSkills } from \"#/hooks/query/use-conversation-skills\";\nimport {
|
|
1
|
+
{"version":3,"file":"skills-modal.js","names":[],"sources":["../../../../src/components/features/conversation-panel/skills-modal.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { ModalBackdrop } from \"#/components/shared/modals/modal-backdrop\";\nimport { ModalBody } from \"#/components/shared/modals/modal-body\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { getAgentServerWorkingDir } from \"#/api/agent-server-config\";\nimport { useConversationSkills } from \"#/hooks/query/use-conversation-skills\";\nimport {\n groupSkillsByScope,\n SKILL_SCOPE_ORDER,\n type SkillScope,\n} from \"#/utils/skill-scope\";\nimport { SkillsModalHeader } from \"./skills-modal-header\";\nimport { SkillsModalSection } from \"./skills-modal-section\";\nimport { SkillsLoadingState } from \"./skills-loading-state\";\nimport { SkillsEmptyState } from \"./skills-empty-state\";\nimport { SkillItem } from \"./skill-item\";\n\ninterface SkillsModalProps {\n onClose: () => void;\n}\n\nconst SECTION_TITLE_KEY: Record<SkillScope, I18nKey> = {\n project: I18nKey.SKILLS_MODAL$SECTION_PROJECT,\n personal: I18nKey.SKILLS_MODAL$SECTION_USER,\n public: I18nKey.SKILLS_MODAL$SECTION_PUBLIC,\n};\n\nexport function SkillsModal({ onClose }: SkillsModalProps) {\n const { t } = useTranslation(\"openhands\");\n const projectDir = getAgentServerWorkingDir();\n const [expandedAgents, setExpandedAgents] = useState<Record<string, boolean>>(\n {},\n );\n // Scope the catalog to this conversation's attached workspace so the listed\n // skills match the project skills actually loaded into the conversation.\n const {\n data: skills,\n isLoading,\n isError,\n refetch,\n isRefetching,\n } = useConversationSkills();\n\n const groupedSkills = useMemo(\n () => (skills ? groupSkillsByScope(skills, projectDir) : null),\n [skills, projectDir],\n );\n\n const toggleAgent = (agentName: string) => {\n setExpandedAgents((prev) => ({\n ...prev,\n [agentName]: !prev[agentName],\n }));\n };\n\n return (\n <ModalBackdrop onClose={onClose}>\n <ModalBody\n width=\"lg\"\n className=\"relative max-h-[80vh] flex flex-col items-start border border-[var(--oh-border)]\"\n testID=\"skills-modal\"\n >\n <SkillsModalHeader\n isLoading={isLoading}\n isRefetching={isRefetching}\n onRefresh={refetch}\n onClose={onClose}\n />\n\n <div className=\"w-full h-[60vh] overflow-auto rounded-md border border-[var(--oh-border)] bg-surface-raised custom-scrollbar-always\">\n {isLoading ? (\n <SkillsLoadingState />\n ) : isError || !skills || skills.length === 0 ? (\n <SkillsEmptyState isError={isError} />\n ) : (\n groupedSkills && (\n <div className=\"divide-y divide-[var(--oh-border)]\">\n {SKILL_SCOPE_ORDER.map((scope) => {\n const scopedSkills = groupedSkills[scope];\n if (scopedSkills.length === 0) {\n return null;\n }\n\n return (\n <SkillsModalSection\n key={scope}\n title={t(SECTION_TITLE_KEY[scope])}\n count={scopedSkills.length}\n >\n {scopedSkills.map((skill) => {\n const isExpanded = expandedAgents[skill.name] || false;\n\n return (\n <SkillItem\n key={`${scope}-${skill.name}`}\n skill={skill}\n isExpanded={isExpanded}\n onToggle={toggleAgent}\n />\n );\n })}\n </SkillsModalSection>\n );\n })}\n </div>\n )\n )}\n </div>\n </ModalBody>\n </ModalBackdrop>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAsBA,IAAM,IAAiD;CACrD,SAAS,EAAQ;CACjB,UAAU,EAAQ;CAClB,QAAQ,EAAQ;CACjB;AAED,SAAgB,EAAY,EAAE,cAA6B;CACzD,IAAM,EAAE,SAAM,EAAe,YAAY,EACnC,IAAa,GAA0B,EACvC,CAAC,GAAgB,KAAqB,EAC1C,EAAE,CACH,EAGK,EACJ,MAAM,GACN,cACA,YACA,YACA,oBACE,GAAuB,EAErB,IAAgB,QACb,IAAS,EAAmB,GAAQ,EAAW,GAAG,MACzD,CAAC,GAAQ,EAAW,CACrB,EAEK,KAAe,MAAsB;AACzC,KAAmB,OAAU;GAC3B,GAAG;IACF,IAAY,CAAC,EAAK;GACpB,EAAE;;AAGL,QACE,kBAAC,GAAD;EAAwB;YACtB,kBAAC,GAAD;GACE,OAAM;GACN,WAAU;GACV,QAAO;aAHT,CAKE,kBAAC,GAAD;IACa;IACG;IACd,WAAW;IACF;IACT,CAAA,EAEF,kBAAC,OAAD;IAAK,WAAU;cACZ,IACC,kBAAC,GAAD,EAAsB,CAAA,GACpB,KAAW,CAAC,KAAU,EAAO,WAAW,IAC1C,kBAAC,GAAD,EAA2B,YAAW,CAAA,GAEtC,KACE,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAkB,KAAK,MAAU;MAChC,IAAM,IAAe,EAAc;AAKnC,aAJI,EAAa,WAAW,IACnB,OAIP,kBAAC,GAAD;OAEE,OAAO,EAAE,EAAkB,GAAO;OAClC,OAAO,EAAa;iBAEnB,EAAa,KAAK,MAIf,kBAAC,GAAD;QAES;QACK,YANG,EAAe,EAAM,SAAS;QAO7C,UAAU;QACV,EAJK,GAAG,EAAM,GAAG,EAAM,OAIvB,CAEJ;OACiB,EAhBd,EAgBc;OAEvB;KACE,CAAA;IAGN,CAAA,CACI;;EACE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../../../_virtual/_rolldown/runtime.cjs`);require(`../../../../utils/utils.cjs`),require(`../../../../utils/dropdown-classes.cjs`),require(`../../../../icons/u-check-circle.cjs`),require(`../../../../icons/u-edit.cjs`),require(`../../../../icons/u-delete.cjs`),require(`../../conversation/conversation-name-context-menu-icon-text.cjs`),require(`react`),require(`react/jsx-runtime`);let t=require(`react-dom`);t=e.__toESM(t,1);
|
|
1
|
+
const e=require(`../../../../_virtual/_rolldown/runtime.cjs`);require(`../../../../utils/utils.cjs`),require(`../../../shared/buttons/styled-tooltip.cjs`),require(`../../../../utils/dropdown-classes.cjs`),require(`../../../../icons/u-check-circle.cjs`),require(`../../../../icons/u-edit.cjs`),require(`../../../../icons/u-delete.cjs`),require(`../../conversation/conversation-name-context-menu-icon-text.cjs`),require(`react`),require(`react/jsx-runtime`);let t=require(`react-dom`);t=e.__toESM(t,1);
|
|
@@ -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/utils.cjs`),r=require(
|
|
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/utils.cjs`),r=require(`../../shared/navigation-link.cjs`),i=require(`../../../icons/skills.cjs`),a=require(`../../../hooks/use-breakpoint.cjs`),o=require(`../sidebar/sidebar-layout.cjs`),s=require(`../settings/backend-synced-settings-badge.cjs`),c=require(`../../../icons/server-process.cjs`),l=require(`../../../stores/sidebar-store.cjs`);let u=require(`react/jsx-runtime`);var d=[{to:`/skills`,label:`Skills`,icon:(0,u.jsx)(i.default,{width:16,height:16,"aria-hidden":`true`}),end:!0},{to:`/mcp`,label:`MCP Servers`,icon:(0,u.jsx)(c.default,{width:16,height:16}),end:!0},{to:`/plugins`,label:`Plugins`,icon:(0,u.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,width:16,height:16,"aria-hidden":`true`,children:[(0,u.jsx)(`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`}),(0,u.jsx)(`path`,{d:`m3.3 7 8.7 5 8.7-5`}),(0,u.jsx)(`path`,{d:`M12 22V12`})]}),end:!0,comingSoon:!0}];function f(){let{t:i}=e.useTranslation(`openhands`),c=l.useSidebarStore(e=>e.collapsed),f=a.useBreakpoint(1023),p=a.useBreakpoint(767);return!c&&f&&!p?null:(0,u.jsxs)(`aside`,{"data-testid":`extensions-navbar-desktop`,className:`hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2 md:sticky md:top-8 md:self-start`,children:[(0,u.jsx)(`span`,{className:`px-2 text-sm font-normal text-white`,children:i(t.I18nKey.NAV$CUSTOMIZE)}),(0,u.jsx)(`div`,{className:`flex flex-col gap-0.5 pt-0.5`,children:d.map(e=>{let a=(0,u.jsx)(`span`,{className:`shrink-0 flex items-center justify-center`,children:e.icon}),s=(0,u.jsx)(`span`,{className:`truncate`,children:e.label}),c=e.comingSoon&&(0,u.jsx)(`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)]`,children:i(t.I18nKey.NAV$COMING_SOON)});return(0,u.jsxs)(r.NavigationLink,{to:e.to,end:e.end,"data-testid":`sidebar-extensions-${e.to}`,className:({isActive:e})=>n.cn(o.sidebarNavRowClassName(),`truncate`,e?o.SIDEBAR_ROW_INTERACTIVE_CLASS.active:o.SIDEBAR_ROW_INTERACTIVE_CLASS.idle),children:[a,s,c]},e.to)})}),(0,u.jsx)(`div`,{className:`px-2 pt-3`,children:(0,u.jsx)(s.BackendSyncedSettingsBadge,{})})]})}exports.ExtensionsNavigation=f;
|
|
2
2
|
//# sourceMappingURL=extensions-navigation.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extensions-navigation.cjs","names":[],"sources":["../../../../src/components/features/skills/extensions-navigation.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport {
|
|
1
|
+
{"version":3,"file":"extensions-navigation.cjs","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":"ikBAsBA,IAAa,EAA2C,CACtD,CACE,GAAI,UACJ,MAAO,SACP,MAAM,EAAA,EAAA,KAAC,EAAA,QAAD,CAAY,MAAO,GAAI,OAAQ,GAAI,cAAY,OAAS,CAAA,CAC9D,IAAK,GACN,CACD,CACE,GAAI,OACJ,MAAO,cACP,MAAM,EAAA,EAAA,KAAC,EAAA,QAAD,CAAmB,MAAO,GAAI,OAAQ,GAAM,CAAA,CAClD,IAAK,GACN,CACD,CACE,GAAI,WACJ,MAAO,UACP,MACE,EAAA,EAAA,MAAC,MAAD,CACE,MAAM,6BACN,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,QACf,MAAO,GACP,OAAQ,GACR,cAAY,gBAVd,EAYE,EAAA,EAAA,KAAC,OAAD,CAAM,EAAE,yHAA2H,CAAA,EACnI,EAAA,EAAA,KAAC,OAAD,CAAM,EAAE,qBAAuB,CAAA,EAC/B,EAAA,EAAA,KAAC,OAAD,CAAM,EAAE,YAAc,CAAA,CAClB,GAER,IAAK,GACL,WAAY,GACb,CACF,CAED,SAAgB,GAAuB,CACrC,GAAM,CAAE,KAAM,EAAA,eAAe,YAAY,CACnC,EAAmB,EAAA,gBAAiB,GAAU,EAAM,UAAU,CAI9D,EAAU,EAAA,cAAc,KAAK,CAC7B,EAAU,EAAA,cAAc,IAAI,CAKlC,MAJ+B,CAAC,GAAoB,GAAW,CAAC,EAE7B,MAGjC,EAAA,EAAA,MAAC,QAAD,CACE,cAAY,4BACZ,UAAU,yGAFZ,EAIE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,+CACb,EAAE,EAAA,QAAQ,cAAc,CACpB,CAAA,EACP,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wCACZ,EAAqB,IAAK,GAAS,CAClC,IAAM,GACJ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,qDACb,EAAK,KACD,CAAA,CAEH,GAAQ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oBAAY,EAAK,MAAa,CAAA,CACtD,EAAkB,EAAK,aAC3B,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,2IACb,EAAE,EAAA,QAAQ,gBAAgB,CACtB,CAAA,CAGT,OACE,EAAA,EAAA,MAAC,EAAA,eAAD,CAEE,GAAI,EAAK,GACT,IAAK,EAAK,IACV,cAAa,sBAAsB,EAAK,KACxC,WAAY,CAAE,cACZ,EAAA,GACE,EAAA,wBAAwB,CACxB,WACA,EACI,EAAA,8BAA8B,OAC9B,EAAA,8BAA8B,KACnC,UAZL,CAeG,EACA,EACA,EACc,EAjBV,EAAK,GAiBK,EAEnB,CACE,CAAA,EACN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sBACb,EAAA,EAAA,KAAC,EAAA,2BAAD,EAA8B,CAAA,CAC1B,CAAA,CACA"}
|
|
@@ -4,14 +4,6 @@ interface ExtensionNavItem {
|
|
|
4
4
|
icon: React.ReactElement;
|
|
5
5
|
end?: boolean;
|
|
6
6
|
comingSoon?: boolean;
|
|
7
|
-
/**
|
|
8
|
-
* When true, this item greys out (and the /route's ``clientLoader``
|
|
9
|
-
* bounces to ``/settings/agent``) while an ACP agent is active.
|
|
10
|
-
* The ACP sub-agent manages its own MCP servers; the SDK rejects
|
|
11
|
-
* ``mcp_config`` on ``ACPAgent`` init outright, so the OpenHands-
|
|
12
|
-
* side editor would silently no-op against the running subprocess.
|
|
13
|
-
*/
|
|
14
|
-
disabledByAcp?: boolean;
|
|
15
7
|
}
|
|
16
8
|
export declare const EXTENSIONS_NAV_ITEMS: ExtensionNavItem[];
|
|
17
9
|
export declare function ExtensionsNavigation(): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -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 {
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
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
|
|
13
|
+
var p = [
|
|
17
14
|
{
|
|
18
15
|
to: "/skills",
|
|
19
16
|
label: "Skills",
|
|
20
|
-
icon: /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
53
|
-
/* @__PURE__ */
|
|
54
|
-
/* @__PURE__ */
|
|
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:
|
|
63
|
-
return
|
|
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__ */
|
|
63
|
+
/* @__PURE__ */ d("span", {
|
|
68
64
|
className: "px-2 text-sm font-normal text-white",
|
|
69
|
-
children:
|
|
65
|
+
children: i(t.NAV$CUSTOMIZE)
|
|
70
66
|
}),
|
|
71
|
-
/* @__PURE__ */
|
|
67
|
+
/* @__PURE__ */ d("div", {
|
|
72
68
|
className: "flex flex-col gap-0.5 pt-0.5",
|
|
73
|
-
children:
|
|
74
|
-
let
|
|
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__ */
|
|
73
|
+
}), c = /* @__PURE__ */ d("span", {
|
|
78
74
|
className: "truncate",
|
|
79
75
|
children: e.label
|
|
80
|
-
}),
|
|
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:
|
|
78
|
+
children: i(t.NAV$COMING_SOON)
|
|
83
79
|
});
|
|
84
|
-
return
|
|
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(
|
|
84
|
+
className: ({ isActive: e }) => n(s(), "truncate", e ? o.active : o.idle),
|
|
102
85
|
children: [
|
|
103
|
-
|
|
86
|
+
a,
|
|
104
87
|
c,
|
|
105
|
-
|
|
88
|
+
l
|
|
106
89
|
]
|
|
107
90
|
}, e.to);
|
|
108
91
|
})
|
|
109
92
|
}),
|
|
110
|
-
/* @__PURE__ */
|
|
93
|
+
/* @__PURE__ */ d("div", {
|
|
111
94
|
className: "px-2 pt-3",
|
|
112
|
-
children: /* @__PURE__ */
|
|
95
|
+
children: /* @__PURE__ */ d(c, {})
|
|
113
96
|
})
|
|
114
97
|
]
|
|
115
98
|
});
|
|
116
99
|
}
|
|
117
100
|
//#endregion
|
|
118
|
-
export {
|
|
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 {
|
|
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.
|
|
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 {
|
|
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`),
|
|
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":"
|
|
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-
|
|
4
|
-
import
|
|
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
|
|
7
|
-
let
|
|
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:
|
|
12
|
-
selected_repository:
|
|
13
|
-
selected_branch:
|
|
14
|
-
git_provider:
|
|
15
|
-
} : null,
|
|
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:
|
|
29
|
+
conversation_id: f.app_conversation_id ? f.app_conversation_id : `task-${f.id}`,
|
|
18
30
|
session_api_key: null,
|
|
19
|
-
url:
|
|
20
|
-
task_id:
|
|
31
|
+
url: f.agent_server_url,
|
|
32
|
+
task_id: f.id
|
|
21
33
|
};
|
|
22
34
|
},
|
|
23
35
|
onSuccess: async (e, { repository: t }) => {
|
|
24
|
-
|
|
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 {
|
|
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":"
|
|
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`),
|
|
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":"
|
|
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"}
|