@openhands/agent-canvas 1.16.0 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/README.windows.md +2 -2
- package/build/assets/{acp-providers-CX3Lh9gj.js → acp-providers-DcY_mKYa.js} +1 -1
- package/build/assets/active-backend-context-BnH4-L8h.js +2 -0
- package/build/assets/{agent-context-settings-DSZlXrLj.js → agent-context-settings-D3peZkjX.js} +1 -1
- package/build/assets/agent-profiles-service.api-DkeZaqIl.js +1 -0
- package/build/assets/agent-profiles-settings-7yMWYjGF.js +1 -0
- package/build/assets/agent-server-client-options-EHB23gyx.js +1 -0
- package/build/assets/agent-server-config-C_x8Otd9.js +1 -0
- package/build/assets/agent-server-conversation-service.api-jiCopc2E.js +88 -0
- package/build/assets/agent-settings-BF8hM6wb.js +2 -0
- package/build/assets/agent-settings-YPutBAeR.js +1 -0
- package/build/assets/alert-banner-eYyqvHL3.js +1 -0
- package/build/assets/{api-error-message-B-XdSk3b.js → api-error-message-BXo0lCI5.js} +1 -1
- package/build/assets/api-key-entry-screen-CCBvBD8u.js +1 -0
- package/build/assets/app-settings-BtYDs-Be.js +1 -0
- package/build/assets/automation-detail-BxXhb_m2.js +3 -0
- package/build/assets/{automation-export-D3a3of4G.js → automation-export-BJsfi7n2.js} +1 -1
- package/build/assets/automation-git-sync-B7o_Nbl-.js +1 -0
- package/build/assets/automation-setup-route-qaJ6lLCf.js +3 -0
- package/build/assets/{automation-templates-BRppNh99.js → automation-templates-Bb98r-kx.js} +1 -1
- package/build/assets/automations-list-DEPVNud3.js +1 -0
- package/build/assets/{back-nav-button-Cjl_hoxq.js → back-nav-button-B2yBiVMB.js} +1 -1
- package/build/assets/backend-form-modal-DxisQV_6.js +1 -0
- package/build/assets/backend-synced-settings-badge-DLEp6cq7.js +1 -0
- package/build/assets/badge-ehL-kgeO.js +1 -0
- package/build/assets/{base-modal-D_L0oEbG.js → base-modal-C1a0TsSx.js} +1 -1
- package/build/assets/bot-ByolqPEr.js +1 -0
- package/build/assets/{brand-button-BAfk4wGP.js → brand-button-CUMfjb99.js} +1 -1
- package/build/assets/browser-SE24Tk8g.js +46 -0
- package/build/assets/browser-tab-HjJxHA0V.js +1 -0
- package/build/assets/canvas-extension-page-BsUGBb1T.js +1 -0
- package/build/assets/canvas-extensions-C9Tm6s_E.js +1 -0
- package/build/assets/{canvas-extensions-runtime-2_x5Ezmi.js → canvas-extensions-runtime-B8kxM4rO.js} +1 -1
- package/build/assets/{chat-send-button-MUQqCZCS.js → chat-send-button-CGvc2wpE.js} +1 -1
- package/build/assets/check-Bo8s5Ylg.js +1 -0
- package/build/assets/chevron-down-Cr6Fn_wS.js +1 -0
- package/build/assets/chevron-right-CfdfRn-8.js +1 -0
- package/build/assets/circle-check-5pH3qCji.js +1 -0
- package/build/assets/circle-plus-check-toggle-BDX_ctNs.js +1 -0
- package/build/assets/{cloud-funnel-analytics-CztBCCPp.js → cloud-funnel-analytics-D5uJ_4JE.js} +1 -1
- package/build/assets/{cog-D-MPQW6G.js → cog-CAEugqtV.js} +1 -1
- package/build/assets/command-menu-CQxs4mtX.js +1 -0
- package/build/assets/commits-tab-D0xgjipP.js +1 -0
- package/build/assets/{condenser-settings-DmEOje-7.js → condenser-settings-D63NJRBT.js} +1 -1
- package/build/assets/confirmation-modal-78sd9Vny.js +1 -0
- package/build/assets/{context-menu-list-item-I86vKcmM.js → context-menu-list-item-Cm7-7Y-7.js} +1 -1
- package/build/assets/conversation-B_nweu5p.js +93 -0
- package/build/assets/conversation-edjzrv5w.js +1 -0
- package/build/assets/conversation-panel-edjzrv5w.js +1 -0
- package/build/assets/conversation-state-store-9D_3P7q4.js +1 -0
- package/build/assets/conversation-store-DC-JlJuq.js +6 -0
- package/build/assets/{conversation-tab-empty-state-FIbh_lc8.js → conversation-tab-empty-state-B3dpJXX0.js} +1 -1
- package/build/assets/copy-to-clipboard-button-B1ljgNxO.js +1 -0
- package/build/assets/device-verify-D5QRIS_x.js +1 -0
- package/build/assets/{dropdown-classes-Bc1djN0-.js → dropdown-classes-BGvOvW2_.js} +1 -1
- package/build/assets/edit-automation-modal-D_JWSmxT.js +1 -0
- package/build/assets/empty-state-FK_s1B60.js +1 -0
- package/build/assets/{entry.client-CqyPPjOq.js → entry.client-BMafTpjO.js} +2 -2
- package/build/assets/enum-filter-dropdown-UNaom12H.js +1 -0
- package/build/assets/environment-switch-overlay-COibRUA-.js +1 -0
- package/build/assets/error-state-Cf8LRuuY.js +1 -0
- package/build/assets/extensions-hub-C_6ahIua.js +1 -0
- package/build/assets/extensions-navigation-C5GfpzFe.js +1 -0
- package/build/assets/external-link-Bd7Tga-1.js +1 -0
- package/build/assets/files-tab-D5PPIWI1.js +1 -0
- package/build/assets/{form-control-classes-Bkh5FGrD.js → form-control-classes-Dbq-7YP_.js} +1 -1
- package/build/assets/format-model-name-Dfh9Udrx.js +1 -0
- package/build/assets/get-git-path-jU2zjqIB.js +1 -0
- package/build/assets/git-repo-dropdown-BoDDWXfX.js +1 -0
- package/build/assets/git-repo-dropdown-uxlFw2gn.js +1 -0
- package/build/assets/highlighted-source-view-C7pAXrT0.js +1 -0
- package/build/assets/home-BM5_Wz_R.js +1 -0
- package/build/assets/home-Ivfm7KC4.js +1 -0
- package/build/assets/home-automation-run-tooltip-B1N2uO9p.js +1 -0
- package/build/assets/home-store-DCbei3DX.js +1 -0
- package/build/assets/hooks-service-Dnmhqc0Z.js +1 -0
- package/build/assets/index-home-td9BN2T3.js +1 -0
- package/build/assets/info-BcajzHn1.js +1 -0
- package/build/assets/install-server-modal-B81I-5OE.js +1 -0
- package/build/assets/kebab-menu-item-content-SCJBwZnp.js +1 -0
- package/build/assets/{key-BmVyxs-2.js → key-O84CMFHb.js} +1 -1
- package/build/assets/launch-ZLxI4opd.js +1 -0
- package/build/assets/list-filter-B8PQk3RA.js +1 -0
- package/build/assets/{list-todo-apgLVjMw.js → list-todo-Caa8E1X_.js} +1 -1
- package/build/assets/llm-not-configured-banner-Dh_ajcM8.js +27 -0
- package/build/assets/llm-settings-CODhjQzy.js +1 -0
- package/build/assets/llm-settings-CZaXYgtw.js +1 -0
- package/build/assets/llm-subscription-service-CgIDc38n.js +1 -0
- package/build/assets/loader-circle-BxJgk73D.js +1 -0
- package/build/assets/{loading-spinner-BY9N3pOe.js → loading-spinner-BeLV0IXf.js} +1 -1
- package/build/assets/manage-backends-modal-cMXqCb-B.js +1 -0
- package/build/assets/manifest-bfeccb98.js +1 -0
- package/build/assets/manifest-subpage-layout-CVZgVKoY.js +1 -0
- package/build/assets/{map-provider-Cu3Zgumb.js → map-provider-iRs80q_6.js} +1 -1
- package/build/assets/markdown-renderer-DyFl9-mL.js +8 -0
- package/build/assets/mcp-CraxoXQv.js +1 -0
- package/build/assets/{mcp-marketplace-utils-AIBzzHTO.js → mcp-marketplace-utils-C7PYr293.js} +1 -1
- package/build/assets/mcp-page-CteH_K0N.js +9 -0
- package/build/assets/messages-Bk1xhbU2.js +41 -0
- package/build/assets/{modal-body-BxZjsju9.js → modal-body-C24WsdFb.js} +1 -1
- package/build/assets/{modal-classes-C8eycCwG.js → modal-classes-B0b9eiL8.js} +1 -1
- package/build/assets/modal-close-button-DfqfB2Nj.js +1 -0
- package/build/assets/{mouse-pointer-click-Co2uyaPA.js → mouse-pointer-click-BXlRN92t.js} +1 -1
- package/build/assets/onboarding-DXFBRqEy.js +1 -0
- package/build/assets/onboarding-modal-BT3Gx_sZ.js +1 -0
- package/build/assets/organization-service.api-B5CvmnYQ.js +1 -0
- package/build/assets/pencil-q-ihqDYv.js +1 -0
- package/build/assets/pin-BdroVQdN.js +1 -0
- package/build/assets/planner-tab-CstoOlAB.js +1 -0
- package/build/assets/plug-7ACOEbMs.js +1 -0
- package/build/assets/plugins-management-service-5rqVPEGN.js +1 -0
- package/build/assets/plus-C2e21TFC.js +1 -0
- package/build/assets/profiles-service.api-D1XKMgr0.js +1 -0
- package/build/assets/providers-XmZ9HM4Q.js +1 -0
- package/build/assets/proxy-XP6U1Dhv.js +1 -0
- package/build/assets/{puzzle-JM_QaRm0.js → puzzle-LJYnuxKe.js} +1 -1
- package/build/assets/react-BX7IV650.js +1 -0
- package/build/assets/recommended-automations-launcher-DEHRKIAg.js +1 -0
- package/build/assets/refresh-cw-BtdC3T8P.js +1 -0
- package/build/assets/root-CM6IZHlg.css +1 -0
- package/build/assets/root-DdFkodKW.js +2 -0
- package/build/assets/root-layout-DUquNZTU.js +2 -0
- package/build/assets/schema-field-Y3F8JvXd.js +1 -0
- package/build/assets/scroll-fade-state-Dt_fx2kf.js +1 -0
- package/build/assets/sdk-section-page-CNZTLwH9.js +1 -0
- package/build/assets/secret-form-9-BoGA40.js +1 -0
- package/build/assets/secrets-service-BOIsfD9j.js +1 -0
- package/build/assets/secrets-settings-CBJgFr42.js +1 -0
- package/build/assets/settings-D4hdToD4.js +1 -0
- package/build/assets/settings-dropdown-input-DBvsZ7-Q.js +1 -0
- package/build/assets/settings-index-DeQphyBK.js +1 -0
- package/build/assets/settings-input-dVuzapBA.js +1 -0
- package/build/assets/{settings-list-classes-BzeSZbF2.js → settings-list-classes-DhAPuXm6.js} +1 -1
- package/build/assets/settings-modal-tHiJ8iYV.js +1 -0
- package/build/assets/settings-nav-GAQjW1a-.js +16 -0
- package/build/assets/settings-service.api-C1vZH9Vh.js +1 -0
- package/build/assets/settings-switch-DDd1cQ8t.js +1 -0
- package/build/assets/{settings-utils-UYpEdPuD.js → settings-utils-BTaaRhLZ.js} +1 -1
- package/build/assets/shared-conversation-Cyg7m7ns.js +1 -0
- package/build/assets/shield-check-C3Rl0NF8.js +1 -0
- package/build/assets/{sidebar-layout-D6fS8-Gl.js → sidebar-layout-DH0E-5KW.js} +1 -1
- package/build/assets/sidebar-mobile-menu-toggle-CQ4iky__.js +1 -0
- package/build/assets/{sidebar-nav-link-DQQcMf1A.js → sidebar-nav-link-oLQiKUBu.js} +1 -1
- package/build/assets/{sidebar-onboarding-checklist-storage-BBkeI6Bp.js → sidebar-onboarding-checklist-storage-TfvNNnnr.js} +1 -1
- package/build/assets/sidebar-store-DAZVH-DR.js +1 -0
- package/build/assets/skill-card-pill-row-DfjIfj0K.js +1 -0
- package/build/assets/{skill-filter-w__3UCEE.js → skill-filter-DsNLmn76.js} +2 -2
- package/build/assets/{skill-icon-badge-RQkq8wvl.js → skill-icon-badge-0MK_68Nc.js} +1 -1
- package/build/assets/skill-scope-BE-H9TSZ.js +1 -0
- package/build/assets/skills-plugins-vzSdxSk_.js +1 -0
- package/build/assets/skills-settings-BiPOH9H9.js +1 -0
- package/build/assets/styled-tooltip-CejG0rqv.js +1 -0
- package/build/assets/task-list-tab-OkZSqnTp.js +1 -0
- package/build/assets/{terminal-CNElN42a.js → terminal-Dph60VFZ.js} +2 -2
- package/build/assets/toggle-switch-B2uXaAUS.js +1 -0
- package/build/assets/trash-2-Bb40zQzs.js +1 -0
- package/build/assets/trash-Ckh7yCaB.js +1 -0
- package/build/assets/triangle-alert-DEdu-b_L.js +1 -0
- package/build/assets/{typography-v1KN0tzi.js → typography-DgcLGdHk.js} +1 -1
- package/build/assets/usage-tab-MCmNRAnR.js +1 -0
- package/build/assets/use-acp-credential-form-ychoGqjC.js +1 -0
- package/build/assets/use-activate-agent-profile-8L8Xdghy.js +1 -0
- package/build/assets/use-agent-profiles-Bi8hSkze.js +1 -0
- package/build/assets/{use-automation-health-E6NZi9rb.js → use-automation-health-U99vvHxx.js} +1 -1
- package/build/assets/use-automation-permissions-Buus0R6h.js +1 -0
- package/build/assets/{use-automations-xijQKIl9.js → use-automations-Bq5hVuv0.js} +1 -1
- package/build/assets/{use-can-manage-org-profiles-CrJP5262.js → use-can-manage-org-profiles-MzIeEV8F.js} +1 -1
- package/build/assets/use-canvas-extensions-Ca9KoVEm.js +1 -0
- package/build/assets/{use-cloud-current-user-id-CDfAHpPX.js → use-cloud-current-user-id-B4ZLUZSa.js} +1 -1
- package/build/assets/use-config-l5tkDHyD.js +1 -0
- package/build/assets/use-create-conversation-i_PdFdIs.js +1 -0
- package/build/assets/use-create-secret-CjWq0J4O.js +1 -0
- package/build/assets/use-free-models-gCsJ5BV0.js +1 -0
- package/build/assets/{use-get-secrets-K3jmk-LH.js → use-get-secrets-CMTuWEp_.js} +1 -1
- package/build/assets/use-is-authed-A2Yinlt0.js +1 -0
- package/build/assets/{use-launch-skill-in-chat-BYjYihBP.js → use-launch-skill-in-chat-QbXDhiHr.js} +1 -1
- package/build/assets/use-llm-configured-Dl4zg8ht.js +1 -0
- package/build/assets/use-llm-profiles-SWsuFmFu.js +1 -0
- package/build/assets/use-manifest-capabilities-CdqYfUAC.js +1 -0
- package/build/assets/use-onboarding-completion-Xl63ZvzQ.js +1 -0
- package/build/assets/use-pinned-home-route-BXDIUaxQ.js +1 -0
- package/build/assets/use-plugins-marketplace-BIIaPiaB.js +1 -0
- package/build/assets/use-save-agent-profile-D-ZHHE94.js +1 -0
- package/build/assets/{use-save-settings-DYqkKv7T.js → use-save-settings-Dapkf4cC.js} +1 -1
- package/build/assets/use-settings-C2KKQKVC.js +1 -0
- package/build/assets/use-settings-nav-items-TOc0Rsfd.js +1 -0
- package/build/assets/use-tracking-j4uo9VEW.js +3 -0
- package/build/assets/{use-user-conversation-B9Gebw_g.js → use-user-conversation-5UFqMoO4.js} +1 -1
- package/build/assets/{useInfiniteQuery-C926xzY4.js → useInfiniteQuery-CtSRG7uW.js} +1 -1
- package/build/assets/{useMutation-B-qc391N.js → useMutation-Cszf8mKy.js} +1 -1
- package/build/assets/useQueries-pUohFMSP.js +1 -0
- package/build/assets/useQuery-DAAacS7O.js +1 -0
- package/build/assets/useTranslation-CCgUjPJF.js +1 -0
- package/build/assets/utils-BgLSZdyy.js +1 -0
- package/build/assets/{vendor~conversation-panel~conversation-C8Fn4XOf.js → vendor~conversation-panel~conversation-C22sJuWZ.js} +1 -1
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0x1wrp2-Z0lly3FE.js +2 -0
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~czjee3a3-BXXGJNDU.js +185 -0
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew9ih1s8-40UR63Gt.js +1 -0
- package/build/assets/{vendor~index-home~home~conversation-panel~conversation-hWywRBaR.js → vendor~index-home~home~conversation-panel~conversation-UTl7gUo9.js} +1 -1
- package/build/assets/vendor~root-layout-CcdIqs-C.js +1 -0
- package/build/assets/{vendor~root-layout~conversation-panel~conversation-BMbMgaGu.js → vendor~root-layout~conversation-panel~conversation-C3EBV3kp.js} +1 -1
- package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-BCe0JJVy.js +1 -0
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation-j5MFqfSy.js → vendor~root-layout~index-home~home~conversation-panel~conversation-BGGbPcYh.js} +1 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-CxhwKuAd.js +1 -0
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~nj1hli3r-DP9wmsjo.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~inibp4qe-CnsDDzeE.js} +1 -1
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-CUmIwQCN.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-3eJ4ExtV.js} +12 -6
- package/build/assets/{verification-settings-gw_q6vkL.js → verification-settings-DdBpaVPz.js} +1 -1
- package/build/assets/{wrench-CUEI1krB.js → wrench-B8Wg_nbp.js} +1 -1
- package/build/assets/x-CX8lVGwm.js +1 -0
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +79 -22
- package/build/locales/ca/openhands.json +79 -22
- package/build/locales/de/openhands.json +79 -22
- package/build/locales/en/openhands.json +79 -22
- package/build/locales/es/openhands.json +79 -22
- package/build/locales/fr/openhands.json +79 -22
- package/build/locales/it/openhands.json +79 -22
- package/build/locales/ja/openhands.json +79 -22
- package/build/locales/ko-KR/openhands.json +79 -22
- package/build/locales/no/openhands.json +79 -22
- package/build/locales/pt/openhands.json +79 -22
- package/build/locales/tr/openhands.json +79 -22
- package/build/locales/uk/openhands.json +79 -22
- package/build/locales/zh-CN/openhands.json +79 -22
- package/build/locales/zh-TW/openhands.json +79 -22
- package/config/defaults.json +3 -3
- package/dist/api/agent-server-adapter.cjs +3 -3
- package/dist/api/agent-server-adapter.cjs.map +1 -1
- package/dist/api/agent-server-adapter.d.ts +72 -12
- package/dist/api/agent-server-adapter.js +234 -132
- package/dist/api/agent-server-adapter.js.map +1 -1
- package/dist/api/agent-server-config.cjs +1 -1
- package/dist/api/agent-server-config.cjs.map +1 -1
- package/dist/api/agent-server-config.d.ts +6 -0
- package/dist/api/agent-server-config.js +6 -3
- package/dist/api/agent-server-config.js.map +1 -1
- package/dist/api/automation-service/automation-service.api.cjs +1 -1
- package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
- package/dist/api/automation-service/automation-service.api.d.ts +2 -2
- package/dist/api/automation-service/automation-service.api.js +7 -7
- package/dist/api/automation-service/automation-service.api.js.map +1 -1
- package/dist/api/cloud/organization-service.api.cjs.map +1 -1
- package/dist/api/cloud/organization-service.api.d.ts +9 -1
- package/dist/api/cloud/organization-service.api.js.map +1 -1
- package/dist/api/cloud/provider-connections-service.api.cjs +2 -0
- package/dist/api/cloud/provider-connections-service.api.cjs.map +1 -0
- package/dist/api/cloud/provider-connections-service.api.d.ts +5 -0
- package/dist/api/cloud/provider-connections-service.api.js +50 -0
- package/dist/api/cloud/provider-connections-service.api.js.map +1 -0
- package/dist/api/cloud/skills-service.api.cjs +1 -1
- package/dist/api/cloud/skills-service.api.cjs.map +1 -1
- package/dist/api/cloud/skills-service.api.d.ts +10 -0
- package/dist/api/cloud/skills-service.api.js +11 -1
- package/dist/api/cloud/skills-service.api.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.js +6 -2
- package/dist/api/config-service/config-service.api.js.map +1 -1
- package/dist/api/config-service/config-service.types.d.ts +13 -0
- package/dist/api/conversation-metadata-store.cjs +1 -1
- package/dist/api/conversation-metadata-store.cjs.map +1 -1
- package/dist/api/conversation-metadata-store.d.ts +24 -0
- package/dist/api/conversation-metadata-store.js +10 -2
- package/dist/api/conversation-metadata-store.js.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.d.ts +20 -0
- package/dist/api/conversation-service/agent-server-conversation-service.api.js +126 -77
- package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
- package/dist/api/hooks-service.cjs +2 -0
- package/dist/api/hooks-service.cjs.map +1 -0
- package/dist/api/hooks-service.d.ts +13 -0
- package/dist/api/hooks-service.js +20 -0
- package/dist/api/hooks-service.js.map +1 -0
- package/dist/api/provider-connections-service/provider-connections-service.api.cjs +1 -1
- package/dist/api/provider-connections-service/provider-connections-service.api.cjs.map +1 -1
- package/dist/api/provider-connections-service/provider-connections-service.api.js +25 -16
- package/dist/api/provider-connections-service/provider-connections-service.api.js.map +1 -1
- package/dist/api/settings-service/settings-service.api.cjs +1 -1
- package/dist/api/settings-service/settings-service.api.cjs.map +1 -1
- package/dist/api/settings-service/settings-service.api.d.ts +2 -0
- package/dist/api/settings-service/settings-service.api.js +18 -10
- package/dist/api/settings-service/settings-service.api.js.map +1 -1
- package/dist/api/skills-service.cjs +1 -1
- package/dist/api/skills-service.cjs.map +1 -1
- package/dist/api/skills-service.d.ts +7 -0
- package/dist/api/skills-service.js +11 -8
- package/dist/api/skills-service.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/critic-result-display.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/critic-result-display.js +5 -5
- package/dist/components/conversation-events/chat/event-message-components/finish-event-message.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/finish-event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/finish-event-message.js +2 -1
- package/dist/components/conversation-events/chat/event-message-components/finish-event-message.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.js +28 -28
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/thought-event-message.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/thought-event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/thought-event-message.js +2 -1
- package/dist/components/conversation-events/chat/event-message-components/thought-event-message.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.js +37 -37
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message.cjs +2 -2
- package/dist/components/conversation-events/chat/event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message.js +79 -70
- package/dist/components/conversation-events/chat/event-message.js.map +1 -1
- package/dist/components/conversation-events/chat/messages.cjs +1 -1
- package/dist/components/conversation-events/chat/messages.cjs.map +1 -1
- package/dist/components/conversation-events/chat/messages.js +28 -27
- package/dist/components/conversation-events/chat/messages.js.map +1 -1
- package/dist/components/features/automations/automation-card.cjs +1 -1
- package/dist/components/features/automations/automation-card.cjs.map +1 -1
- package/dist/components/features/automations/automation-card.js +104 -97
- package/dist/components/features/automations/automation-card.js.map +1 -1
- package/dist/components/features/automations/automation-list-row.cjs +1 -1
- package/dist/components/features/automations/automation-list-row.cjs.map +1 -1
- package/dist/components/features/automations/automation-list-row.js +89 -77
- package/dist/components/features/automations/automation-list-row.js.map +1 -1
- package/dist/components/features/automations/build-automation-menu-items.cjs +1 -1
- package/dist/components/features/automations/build-automation-menu-items.cjs.map +1 -1
- package/dist/components/features/automations/build-automation-menu-items.d.ts +3 -1
- package/dist/components/features/automations/build-automation-menu-items.js +12 -11
- package/dist/components/features/automations/build-automation-menu-items.js.map +1 -1
- package/dist/components/features/automations/detail/configuration-section.d.ts +7 -1
- package/dist/components/features/automations/detail/detail-header.d.ts +10 -5
- package/dist/components/features/automations/detail/run-status-badge.cjs +1 -1
- package/dist/components/features/automations/detail/run-status-badge.cjs.map +1 -1
- package/dist/components/features/automations/detail/run-status-badge.d.ts +2 -2
- package/dist/components/features/automations/detail/run-status-badge.js +82 -53
- package/dist/components/features/automations/detail/run-status-badge.js.map +1 -1
- package/dist/components/features/automations/kebab-menu.cjs +1 -1
- package/dist/components/features/automations/kebab-menu.cjs.map +1 -1
- package/dist/components/features/automations/kebab-menu.js +9 -5
- package/dist/components/features/automations/kebab-menu.js.map +1 -1
- package/dist/components/features/automations/recommended-automations-launcher.cjs +1 -1
- package/dist/components/features/automations/recommended-automations-launcher.cjs.map +1 -1
- package/dist/components/features/automations/recommended-automations-launcher.js +12 -12
- package/dist/components/features/automations/recommended-automations-launcher.js.map +1 -1
- package/dist/components/features/automations/recommended-automations-section.cjs +1 -1
- package/dist/components/features/automations/recommended-automations-section.js +9 -9
- package/dist/components/features/backends/backend-selector.cjs +1 -1
- package/dist/components/features/backends/backend-selector.cjs.map +1 -1
- package/dist/components/features/backends/backend-selector.js +123 -112
- package/dist/components/features/backends/backend-selector.js.map +1 -1
- package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
- package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
- package/dist/components/features/backends/manage-backends-modal.js +29 -29
- package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
- package/dist/components/features/chat/change-agent-button.cjs +1 -1
- package/dist/components/features/chat/change-agent-button.js +4 -4
- package/dist/components/features/chat/chat-interface.cjs +2 -2
- package/dist/components/features/chat/chat-interface.cjs.map +1 -1
- package/dist/components/features/chat/chat-interface.js +137 -137
- package/dist/components/features/chat/chat-interface.js.map +1 -1
- package/dist/components/features/chat/chat-message.cjs +1 -1
- package/dist/components/features/chat/chat-message.cjs.map +1 -1
- package/dist/components/features/chat/chat-message.d.ts +2 -1
- package/dist/components/features/chat/chat-message.js +88 -79
- package/dist/components/features/chat/chat-message.js.map +1 -1
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs +1 -1
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs.map +1 -1
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.js +62 -61
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.js.map +1 -1
- package/dist/components/features/chat/components/context-window-meter.cjs +1 -1
- package/dist/components/features/chat/components/context-window-meter.js +4 -4
- package/dist/components/features/chat/confirmation-mode-enabled.cjs +1 -1
- package/dist/components/features/chat/confirmation-mode-enabled.js +4 -4
- package/dist/components/features/chat/generic-event-message.cjs +1 -1
- package/dist/components/features/chat/generic-event-message.cjs.map +1 -1
- package/dist/components/features/chat/generic-event-message.d.ts +2 -1
- package/dist/components/features/chat/generic-event-message.js +41 -22
- package/dist/components/features/chat/generic-event-message.js.map +1 -1
- package/dist/components/features/chat/interactive-chat-box.cjs +1 -1
- package/dist/components/features/chat/interactive-chat-box.cjs.map +1 -1
- package/dist/components/features/chat/interactive-chat-box.js +20 -19
- package/dist/components/features/chat/interactive-chat-box.js.map +1 -1
- package/dist/components/features/chat/model-messages.cjs +1 -1
- package/dist/components/features/chat/model-messages.cjs.map +1 -1
- package/dist/components/features/chat/model-messages.js +27 -26
- package/dist/components/features/chat/model-messages.js.map +1 -1
- package/dist/components/features/conversation/conversation-overview-git-section.cjs +1 -1
- package/dist/components/features/conversation/conversation-overview-git-section.js +4 -4
- package/dist/components/features/conversation/conversation-overview-skills-panel.cjs +1 -1
- package/dist/components/features/conversation/conversation-overview-skills-panel.js +4 -4
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js +77 -78
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js +88 -88
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js.map +1 -1
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.cjs +2 -0
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.cjs.map +1 -0
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.d.ts +21 -0
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.js +239 -0
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.js.map +1 -0
- package/dist/components/features/conversation-panel/budget-display.cjs +1 -1
- package/dist/components/features/conversation-panel/budget-display.cjs.map +1 -1
- package/dist/components/features/conversation-panel/budget-display.d.ts +1 -2
- package/dist/components/features/conversation-panel/budget-display.js +12 -19
- package/dist/components/features/conversation-panel/budget-display.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.cjs +2 -0
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.cjs.map +1 -0
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.d.ts +28 -0
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.js +69 -0
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.js.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js +19 -18
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.js +91 -80
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js +45 -44
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.d.ts +7 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.js +87 -81
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-layouts-menu.cjs +2 -0
- package/dist/components/features/conversation-panel/conversation-layouts-menu.cjs.map +1 -0
- package/dist/components/features/conversation-panel/conversation-layouts-menu.d.ts +29 -0
- package/dist/components/features/conversation-panel/conversation-layouts-menu.js +177 -0
- package/dist/components/features/conversation-panel/conversation-layouts-menu.js.map +1 -0
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.d.ts +37 -0
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +85 -45
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.js +296 -290
- package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.cjs +2 -0
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.cjs.map +1 -0
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.d.ts +22 -0
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.js +153 -0
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.js.map +1 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.cjs +2 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.cjs.map +1 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.d.ts +6 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.js +65 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.js.map +1 -0
- package/dist/components/features/conversation-panel/menu-row.cjs +1 -1
- package/dist/components/features/conversation-panel/menu-row.cjs.map +1 -1
- package/dist/components/features/conversation-panel/menu-row.d.ts +11 -1
- package/dist/components/features/conversation-panel/menu-row.js +27 -16
- package/dist/components/features/conversation-panel/menu-row.js.map +1 -1
- package/dist/components/features/home/featured-automations/automation-health-indicator.cjs +1 -1
- package/dist/components/features/home/featured-automations/automation-health-indicator.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/automation-health-indicator.js +1 -1
- package/dist/components/features/home/featured-automations/automation-health-indicator.js.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.d.ts +4 -3
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js +22 -25
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.d.ts +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js +15 -15
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-health.cjs +1 -1
- package/dist/components/features/home/featured-automations/automation-run-health.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-health.d.ts +5 -3
- package/dist/components/features/home/featured-automations/automation-run-health.js +30 -23
- package/dist/components/features/home/featured-automations/automation-run-health.js.map +1 -1
- package/dist/components/features/home/featured-automations/build-home-automation-menu-items.d.ts +1 -2
- package/dist/components/features/home/featured-automations/build-pinned-automation-menu-items.d.ts +0 -1
- package/dist/components/features/home/featured-automations/home-automation-activity.d.ts +3 -2
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs +1 -1
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.d.ts +1 -1
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js +42 -42
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js.map +1 -1
- package/dist/components/features/images/image-lightbox.cjs +2 -0
- package/dist/components/features/images/image-lightbox.cjs.map +1 -0
- package/dist/components/features/images/image-lightbox.d.ts +11 -0
- package/dist/components/features/images/image-lightbox.js +37 -0
- package/dist/components/features/images/image-lightbox.js.map +1 -0
- package/dist/components/features/images/image-preview.cjs +1 -1
- package/dist/components/features/images/image-preview.cjs.map +1 -1
- package/dist/components/features/images/image-preview.d.ts +2 -1
- package/dist/components/features/images/image-preview.js +33 -13
- package/dist/components/features/images/image-preview.js.map +1 -1
- package/dist/components/features/manifest/manifest-form-field.d.ts +3 -1
- package/dist/components/features/manifest/manifest-review-step.d.ts +3 -1
- package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +3 -4
- package/dist/components/features/settings/cloud-settings-link.cjs +1 -1
- package/dist/components/features/settings/cloud-settings-link.cjs.map +1 -1
- package/dist/components/features/settings/cloud-settings-link.d.ts +3 -1
- package/dist/components/features/settings/cloud-settings-link.js +22 -19
- package/dist/components/features/settings/cloud-settings-link.js.map +1 -1
- package/dist/components/features/settings/integrations-settings-link.cjs +1 -1
- package/dist/components/features/settings/integrations-settings-link.cjs.map +1 -1
- package/dist/components/features/settings/integrations-settings-link.d.ts +3 -1
- package/dist/components/features/settings/integrations-settings-link.js +20 -17
- package/dist/components/features/settings/integrations-settings-link.js.map +1 -1
- package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
- package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +3 -2
- package/dist/components/features/settings/llm-profiles/profile-row.cjs +1 -1
- package/dist/components/features/settings/llm-profiles/profile-row.js +1 -1
- package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +2 -2
- package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs +1 -1
- package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs.map +1 -1
- package/dist/components/features/settings/sdk-settings/sdk-section-page.d.ts +8 -7
- package/dist/components/features/settings/sdk-settings/sdk-section-page.js +172 -142
- package/dist/components/features/settings/sdk-settings/sdk-section-page.js.map +1 -1
- package/dist/components/features/settings/secrets-settings/secret-form.cjs +1 -1
- package/dist/components/features/settings/secrets-settings/secret-form.cjs.map +1 -1
- package/dist/components/features/settings/secrets-settings/secret-form.js +38 -25
- package/dist/components/features/settings/secrets-settings/secret-form.js.map +1 -1
- package/dist/components/features/settings/settings-dropdown-input.cjs +1 -1
- package/dist/components/features/settings/settings-dropdown-input.js +6 -6
- package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
- package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
- package/dist/components/features/sidebar/sidebar-rail-body.d.ts +4 -1
- package/dist/components/features/sidebar/sidebar-rail-body.js +157 -139
- package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
- package/dist/components/features/sidebar/sidebar.cjs +1 -1
- package/dist/components/features/sidebar/sidebar.cjs.map +1 -1
- package/dist/components/features/sidebar/sidebar.js +28 -26
- package/dist/components/features/sidebar/sidebar.js.map +1 -1
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs +1 -1
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js +3 -3
- 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.js +3 -3
- package/dist/components/features/skills/extensions-navigation.js.map +1 -1
- package/dist/components/providers/agent-server-ui-providers.cjs +1 -1
- package/dist/components/providers/agent-server-ui-providers.cjs.map +1 -1
- package/dist/components/providers/agent-server-ui-providers.js +33 -29
- package/dist/components/providers/agent-server-ui-providers.js.map +1 -1
- package/dist/components/shared/buttons/remove-button.cjs +1 -1
- package/dist/components/shared/buttons/remove-button.cjs.map +1 -1
- package/dist/components/shared/buttons/remove-button.d.ts +2 -1
- package/dist/components/shared/buttons/remove-button.js +2 -1
- package/dist/components/shared/buttons/remove-button.js.map +1 -1
- package/dist/components/shared/buttons/styled-tooltip.cjs +1 -1
- package/dist/components/shared/buttons/styled-tooltip.cjs.map +1 -1
- package/dist/components/shared/buttons/styled-tooltip.d.ts +2 -1
- package/dist/components/shared/buttons/styled-tooltip.js +2 -1
- package/dist/components/shared/buttons/styled-tooltip.js.map +1 -1
- package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
- package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
- package/dist/components/shared/filters/enum-filter-dropdown.d.ts +5 -1
- package/dist/components/shared/filters/enum-filter-dropdown.js +14 -14
- package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
- package/dist/components/shared/free-models-note.cjs +2 -0
- package/dist/components/shared/free-models-note.cjs.map +1 -0
- package/dist/components/shared/free-models-note.d.ts +3 -0
- package/dist/components/shared/free-models-note.js +20 -0
- package/dist/components/shared/free-models-note.js.map +1 -0
- package/dist/components/shared/modals/confirmation-modal.cjs +1 -1
- package/dist/components/shared/modals/confirmation-modal.cjs.map +1 -1
- package/dist/components/shared/modals/confirmation-modal.d.ts +2 -1
- package/dist/components/shared/modals/confirmation-modal.js +8 -8
- package/dist/components/shared/modals/confirmation-modal.js.map +1 -1
- package/dist/components/shared/modals/settings/model-selector.cjs +1 -1
- package/dist/components/shared/modals/settings/model-selector.cjs.map +1 -1
- package/dist/components/shared/modals/settings/model-selector.js +102 -112
- package/dist/components/shared/modals/settings/model-selector.js.map +1 -1
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +3 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/constants/acp-providers.cjs.map +1 -1
- package/dist/constants/acp-providers.d.ts +12 -0
- package/dist/constants/acp-providers.js.map +1 -1
- package/dist/constants/settings-nav.d.ts +8 -0
- package/dist/contexts/conversation-websocket-context.cjs +3 -3
- package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
- package/dist/contexts/conversation-websocket-context.d.ts +5 -0
- package/dist/contexts/conversation-websocket-context.js +194 -198
- package/dist/contexts/conversation-websocket-context.js.map +1 -1
- package/dist/contexts/websocket-provider-wrapper.cjs +1 -1
- package/dist/contexts/websocket-provider-wrapper.cjs.map +1 -1
- package/dist/contexts/websocket-provider-wrapper.js +31 -15
- package/dist/contexts/websocket-provider-wrapper.js.map +1 -1
- package/dist/hooks/chat/record-model-switch-message.cjs +1 -1
- package/dist/hooks/chat/record-model-switch-message.cjs.map +1 -1
- package/dist/hooks/chat/record-model-switch-message.d.ts +31 -0
- package/dist/hooks/chat/record-model-switch-message.js +25 -12
- package/dist/hooks/chat/record-model-switch-message.js.map +1 -1
- package/dist/hooks/chat/use-plan-mode-interceptor.cjs +2 -0
- package/dist/hooks/chat/use-plan-mode-interceptor.cjs.map +1 -0
- package/dist/hooks/chat/use-plan-mode-interceptor.d.ts +16 -0
- package/dist/hooks/chat/use-plan-mode-interceptor.js +43 -0
- package/dist/hooks/chat/use-plan-mode-interceptor.js.map +1 -0
- package/dist/hooks/chat/use-slash-command.cjs +1 -1
- package/dist/hooks/chat/use-slash-command.cjs.map +1 -1
- package/dist/hooks/chat/use-slash-command.js +63 -62
- package/dist/hooks/chat/use-slash-command.js.map +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 +5 -1
- package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
- package/dist/hooks/mutation/use-read-conversation-file.cjs +1 -1
- package/dist/hooks/mutation/use-read-conversation-file.cjs.map +1 -1
- package/dist/hooks/mutation/use-read-conversation-file.js +11 -4
- package/dist/hooks/mutation/use-read-conversation-file.js.map +1 -1
- package/dist/hooks/mutation/use-save-settings.cjs +1 -1
- package/dist/hooks/mutation/use-save-settings.js +3 -3
- package/dist/hooks/mutation/use-switch-llm-profile.cjs +1 -1
- package/dist/hooks/mutation/use-switch-llm-profile.cjs.map +1 -1
- package/dist/hooks/mutation/use-switch-llm-profile.js +13 -25
- package/dist/hooks/mutation/use-switch-llm-profile.js.map +1 -1
- package/dist/hooks/mutation/use-update-conversation-tags.cjs +2 -0
- package/dist/hooks/mutation/use-update-conversation-tags.cjs.map +1 -0
- package/dist/hooks/mutation/use-update-conversation-tags.d.ts +8 -0
- package/dist/hooks/mutation/use-update-conversation-tags.js +45 -0
- package/dist/hooks/mutation/use-update-conversation-tags.js.map +1 -0
- package/dist/hooks/query/query-keys.cjs +1 -1
- package/dist/hooks/query/query-keys.cjs.map +1 -1
- package/dist/hooks/query/query-keys.d.ts +6 -0
- package/dist/hooks/query/query-keys.js +2 -2
- package/dist/hooks/query/query-keys.js.map +1 -1
- package/dist/hooks/query/use-automation-sdk-version.cjs +1 -1
- package/dist/hooks/query/use-automation-sdk-version.cjs.map +1 -1
- package/dist/hooks/query/use-automation-sdk-version.d.ts +0 -1
- package/dist/hooks/query/use-automation-sdk-version.js +30 -55
- package/dist/hooks/query/use-automation-sdk-version.js.map +1 -1
- package/dist/hooks/query/use-conversation-skills.cjs +1 -1
- package/dist/hooks/query/use-conversation-skills.cjs.map +1 -1
- package/dist/hooks/query/use-conversation-skills.d.ts +14 -5
- package/dist/hooks/query/use-conversation-skills.js +20 -4
- package/dist/hooks/query/use-conversation-skills.js.map +1 -1
- package/dist/hooks/query/use-free-models.cjs +2 -0
- package/dist/hooks/query/use-free-models.cjs.map +1 -0
- package/dist/hooks/query/use-free-models.d.ts +23 -0
- package/dist/hooks/query/use-free-models.js +67 -0
- package/dist/hooks/query/use-free-models.js.map +1 -0
- package/dist/hooks/query/use-local-git-info.cjs.map +1 -1
- package/dist/hooks/query/use-local-git-info.js.map +1 -1
- package/dist/hooks/query/use-provider-connections.cjs +1 -1
- package/dist/hooks/query/use-provider-connections.cjs.map +1 -1
- package/dist/hooks/query/use-provider-connections.d.ts +6 -3
- package/dist/hooks/query/use-provider-connections.js +7 -3
- package/dist/hooks/query/use-provider-connections.js.map +1 -1
- package/dist/hooks/query/use-provider-models.cjs +1 -1
- package/dist/hooks/query/use-provider-models.cjs.map +1 -1
- package/dist/hooks/query/use-provider-models.js +34 -25
- package/dist/hooks/query/use-provider-models.js.map +1 -1
- package/dist/hooks/query/use-search-providers.cjs +1 -1
- package/dist/hooks/query/use-search-providers.cjs.map +1 -1
- package/dist/hooks/query/use-search-providers.js +31 -19
- package/dist/hooks/query/use-search-providers.js.map +1 -1
- package/dist/hooks/query/use-sub-conversations.cjs +1 -1
- package/dist/hooks/query/use-sub-conversations.cjs.map +1 -1
- package/dist/hooks/query/use-sub-conversations.js +16 -16
- package/dist/hooks/query/use-sub-conversations.js.map +1 -1
- package/dist/hooks/use-acp-model-context.cjs +1 -1
- package/dist/hooks/use-acp-model-context.js +3 -3
- package/dist/hooks/use-agent-state.cjs +1 -1
- package/dist/hooks/use-agent-state.cjs.map +1 -1
- package/dist/hooks/use-agent-state.d.ts +17 -1
- package/dist/hooks/use-agent-state.js +19 -9
- package/dist/hooks/use-agent-state.js.map +1 -1
- package/dist/hooks/use-automation-permissions.cjs +2 -0
- package/dist/hooks/use-automation-permissions.cjs.map +1 -0
- package/dist/hooks/use-automation-permissions.d.ts +43 -0
- package/dist/hooks/use-automation-permissions.js +52 -0
- package/dist/hooks/use-automation-permissions.js.map +1 -0
- package/dist/hooks/use-chat-input-model-state.cjs +1 -1
- package/dist/hooks/use-chat-input-model-state.js +3 -3
- package/dist/hooks/use-handle-plan-click.cjs +1 -1
- package/dist/hooks/use-handle-plan-click.cjs.map +1 -1
- package/dist/hooks/use-handle-plan-click.d.ts +3 -1
- package/dist/hooks/use-handle-plan-click.js +85 -26
- package/dist/hooks/use-handle-plan-click.js.map +1 -1
- package/dist/hooks/use-home-automation-actions.cjs +1 -1
- package/dist/hooks/use-home-automation-actions.cjs.map +1 -1
- package/dist/hooks/use-home-automation-actions.d.ts +1 -2
- package/dist/hooks/use-home-automation-actions.js +1 -1
- package/dist/hooks/use-home-automation-actions.js.map +1 -1
- package/dist/hooks/use-llm-configured.cjs +1 -1
- package/dist/hooks/use-llm-configured.js +3 -3
- package/dist/hooks/use-manifest-preflight.d.ts +1 -1
- package/dist/hooks/use-unified-websocket-status.cjs +1 -1
- package/dist/hooks/use-unified-websocket-status.cjs.map +1 -1
- package/dist/hooks/use-unified-websocket-status.d.ts +7 -0
- package/dist/hooks/use-unified-websocket-status.js +5 -1
- package/dist/hooks/use-unified-websocket-status.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 +71 -14
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/translation.cjs +2 -2
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +1281 -312
- package/dist/i18n/translation.js.map +1 -1
- package/dist/locales/ar/openhands.json +79 -22
- package/dist/locales/ca/openhands.json +79 -22
- package/dist/locales/de/openhands.json +79 -22
- package/dist/locales/en/openhands.json +79 -22
- package/dist/locales/es/openhands.json +79 -22
- package/dist/locales/fr/openhands.json +79 -22
- package/dist/locales/it/openhands.json +79 -22
- package/dist/locales/ja/openhands.json +79 -22
- package/dist/locales/ko-KR/openhands.json +79 -22
- package/dist/locales/no/openhands.json +79 -22
- package/dist/locales/pt/openhands.json +79 -22
- package/dist/locales/tr/openhands.json +79 -22
- package/dist/locales/uk/openhands.json +79 -22
- package/dist/locales/zh-CN/openhands.json +79 -22
- package/dist/locales/zh-TW/openhands.json +79 -22
- package/dist/manifests/automation-insights.cjs.map +1 -1
- package/dist/manifests/automation-insights.d.ts +10 -2
- package/dist/manifests/automation-insights.js.map +1 -1
- package/dist/manifests/automation-setup.cjs +1 -1
- package/dist/manifests/automation-setup.cjs.map +1 -1
- package/dist/manifests/automation-setup.d.ts +9 -16
- package/dist/manifests/automation-setup.js +17 -7
- package/dist/manifests/automation-setup.js.map +1 -1
- package/dist/manifests/manifest-actions.d.ts +1 -1
- package/dist/manifests/manifest-capabilities.d.ts +3 -1
- package/dist/manifests/manifest-local-validation.cjs +2 -0
- package/dist/manifests/manifest-local-validation.cjs.map +1 -0
- package/dist/manifests/manifest-local-validation.d.ts +15 -11
- package/dist/manifests/manifest-local-validation.js +8 -0
- package/dist/manifests/manifest-local-validation.js.map +1 -0
- package/dist/manifests/manifest-template.cjs +2 -0
- package/dist/manifests/manifest-template.cjs.map +1 -0
- package/dist/manifests/manifest-template.d.ts +4 -4
- package/dist/manifests/manifest-template.js +12 -0
- package/dist/manifests/manifest-template.js.map +1 -0
- package/dist/manifests/manifest-validation.cjs +1 -1
- package/dist/manifests/manifest-validation.cjs.map +1 -1
- package/dist/manifests/manifest-validation.js +106 -28
- package/dist/manifests/manifest-validation.js.map +1 -1
- package/dist/manifests/types.cjs.map +1 -1
- package/dist/manifests/types.d.ts +39 -4
- package/dist/manifests/types.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.cjs +8 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.js +221 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.js +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +22 -20
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.js +2 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js +24 -5
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js.map +1 -1
- package/dist/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs +1 -1
- package/dist/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js +1 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js +21 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shrink.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shrink.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shrink.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shrink.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.js +43 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/tags.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/tags.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/tags.js +22 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/tags.js.map +1 -0
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +4 -4
- package/dist/package.js.map +1 -1
- package/dist/routes/agent-settings.d.ts +2 -0
- package/dist/routes/app-settings.cjs +1 -1
- package/dist/routes/app-settings.cjs.map +1 -1
- package/dist/routes/app-settings.js +53 -48
- package/dist/routes/app-settings.js.map +1 -1
- package/dist/routes/llm-settings.cjs +1 -1
- package/dist/routes/llm-settings.cjs.map +1 -1
- package/dist/routes/llm-settings.d.ts +3 -1
- package/dist/routes/llm-settings.js +120 -127
- package/dist/routes/llm-settings.js.map +1 -1
- package/dist/routes/planner-tab.cjs +1 -1
- package/dist/routes/planner-tab.cjs.map +1 -1
- package/dist/routes/planner-tab.js +44 -28
- package/dist/routes/planner-tab.js.map +1 -1
- package/dist/services/telemetry.cjs +1 -1
- package/dist/services/telemetry.cjs.map +1 -1
- package/dist/services/telemetry.d.ts +5 -0
- package/dist/services/telemetry.js +122 -115
- package/dist/services/telemetry.js.map +1 -1
- package/dist/stores/conversation-panel-preferences-store.cjs +1 -1
- package/dist/stores/conversation-panel-preferences-store.cjs.map +1 -1
- package/dist/stores/conversation-panel-preferences-store.d.ts +32 -5
- package/dist/stores/conversation-panel-preferences-store.js +29 -12
- package/dist/stores/conversation-panel-preferences-store.js.map +1 -1
- package/dist/stores/conversation-state-store.cjs +1 -1
- package/dist/stores/conversation-state-store.cjs.map +1 -1
- package/dist/stores/conversation-state-store.d.ts +9 -3
- package/dist/stores/conversation-state-store.js +6 -3
- package/dist/stores/conversation-state-store.js.map +1 -1
- package/dist/stores/conversation-store.cjs +1 -1
- package/dist/stores/conversation-store.cjs.map +1 -1
- package/dist/stores/conversation-store.d.ts +2 -0
- package/dist/stores/conversation-store.js +3 -0
- package/dist/stores/conversation-store.js.map +1 -1
- package/dist/stores/free-models-store.cjs +2 -0
- package/dist/stores/free-models-store.cjs.map +1 -0
- package/dist/stores/free-models-store.d.ts +30 -0
- package/dist/stores/free-models-store.js +22 -0
- package/dist/stores/free-models-store.js.map +1 -0
- package/dist/stores/model-store.cjs +1 -1
- package/dist/stores/model-store.cjs.map +1 -1
- package/dist/stores/model-store.d.ts +7 -0
- package/dist/stores/model-store.js +4 -0
- package/dist/stores/model-store.js.map +1 -1
- package/dist/types/automation.cjs.map +1 -1
- package/dist/types/automation.d.ts +46 -1
- package/dist/types/automation.js.map +1 -1
- package/dist/ui/context-menu.d.ts +1 -1
- package/dist/ui/toggle-switch.cjs +1 -1
- package/dist/ui/toggle-switch.cjs.map +1 -1
- package/dist/ui/toggle-switch.d.ts +4 -1
- package/dist/ui/toggle-switch.js +4 -3
- package/dist/ui/toggle-switch.js.map +1 -1
- package/dist/utils/automation-catalog.cjs +1 -1
- package/dist/utils/automation-catalog.cjs.map +1 -1
- package/dist/utils/automation-catalog.d.ts +12 -1
- package/dist/utils/automation-catalog.js +42 -12
- package/dist/utils/automation-catalog.js.map +1 -1
- package/dist/utils/automation-run-display.cjs +2 -0
- package/dist/utils/automation-run-display.cjs.map +1 -0
- package/dist/utils/automation-run-display.d.ts +20 -0
- package/dist/utils/automation-run-display.js +85 -0
- package/dist/utils/automation-run-display.js.map +1 -0
- package/dist/utils/automation-schedule.cjs +1 -1
- package/dist/utils/automation-schedule.cjs.map +1 -1
- package/dist/utils/automation-schedule.d.ts +16 -0
- package/dist/utils/automation-schedule.js +2 -0
- package/dist/utils/automation-schedule.js.map +1 -1
- package/dist/utils/constants.cjs +1 -1
- package/dist/utils/constants.cjs.map +1 -1
- package/dist/utils/constants.d.ts +4 -0
- package/dist/utils/constants.js +23 -3
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/format-event-timestamp.cjs +2 -0
- package/dist/utils/format-event-timestamp.cjs.map +1 -0
- package/dist/utils/format-event-timestamp.d.ts +1 -0
- package/dist/utils/format-event-timestamp.js +13 -0
- package/dist/utils/format-event-timestamp.js.map +1 -0
- package/dist/utils/format-model-name.cjs +1 -1
- package/dist/utils/format-model-name.cjs.map +1 -1
- package/dist/utils/format-model-name.d.ts +27 -6
- package/dist/utils/format-model-name.js +14 -6
- package/dist/utils/format-model-name.js.map +1 -1
- package/dist/utils/git-diff-stats.cjs +2 -2
- package/dist/utils/git-diff-stats.cjs.map +1 -1
- package/dist/utils/git-diff-stats.d.ts +4 -0
- package/dist/utils/git-diff-stats.js +12 -2
- package/dist/utils/git-diff-stats.js.map +1 -1
- package/dist/utils/plan-file.cjs +4 -0
- package/dist/utils/plan-file.cjs.map +1 -0
- package/dist/utils/plan-file.d.ts +18 -0
- package/dist/utils/plan-file.js +58 -0
- package/dist/utils/plan-file.js.map +1 -0
- package/dist/utils/recommended-automation-rail.cjs +1 -1
- package/dist/utils/recommended-automation-rail.cjs.map +1 -1
- package/dist/utils/recommended-automation-rail.js +1 -0
- package/dist/utils/recommended-automation-rail.js.map +1 -1
- package/dist/utils/scroll-fade-state.cjs +1 -1
- package/dist/utils/scroll-fade-state.cjs.map +1 -1
- package/dist/utils/scroll-fade-state.d.ts +6 -0
- package/dist/utils/scroll-fade-state.js +8 -1
- package/dist/utils/scroll-fade-state.js.map +1 -1
- package/dist/utils/sdk-settings-schema.cjs +1 -1
- package/dist/utils/sdk-settings-schema.cjs.map +1 -1
- package/dist/utils/sdk-settings-schema.d.ts +1 -0
- package/dist/utils/sdk-settings-schema.js +25 -22
- package/dist/utils/sdk-settings-schema.js.map +1 -1
- package/dist/utils/utils.cjs +1 -1
- package/dist/utils/utils.cjs.map +1 -1
- package/dist/utils/utils.js +11 -11
- package/dist/utils/utils.js.map +1 -1
- package/package.json +4 -4
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/dev-safe.mjs +1 -1
- package/scripts/dev-with-automation.mjs +1 -1
- package/scripts/static-server.mjs +33 -1
- package/build/assets/active-backend-context-CrHTlgvN.js +0 -2
- package/build/assets/agent-profiles-settings-Dzgb7G9z.js +0 -1
- package/build/assets/agent-server-conversation-service.api-tnqNjbpE.js +0 -86
- package/build/assets/agent-settings-DLtsqaOs.js +0 -2
- package/build/assets/agent-settings-fFvR-XC2.js +0 -1
- package/build/assets/alert-banner-HP6mX-Vr.js +0 -1
- package/build/assets/api-key-entry-screen-qTzrmJcr.js +0 -1
- package/build/assets/app-settings-dbnneVaV.js +0 -1
- package/build/assets/automation-detail-BmwlCUAB.js +0 -3
- package/build/assets/automation-git-sync-CprN5DcU.js +0 -1
- package/build/assets/automation-setup-route-C40kXjMY.js +0 -1
- package/build/assets/automations-list-DuNcRawl.js +0 -1
- package/build/assets/backend-form-modal-lhGwzXFI.js +0 -1
- package/build/assets/backend-synced-settings-badge-DPkz30BE.js +0 -1
- package/build/assets/badge-BU3S0VtE.js +0 -1
- package/build/assets/bot-dMYHVfYM.js +0 -1
- package/build/assets/browser-DSAo0tz1.js +0 -46
- package/build/assets/browser-tab-C9vy56R5.js +0 -1
- package/build/assets/canvas-extension-page-dx1gFrfW.js +0 -1
- package/build/assets/canvas-extensions-8A-XhpgP.js +0 -1
- package/build/assets/check-CS0vmpQQ.js +0 -1
- package/build/assets/chevron-down-e1QBpjVy.js +0 -1
- package/build/assets/chevron-right-ZG4R5G4Q.js +0 -1
- package/build/assets/circle-check-DzWLNsbE.js +0 -1
- package/build/assets/circle-plus-check-toggle-BO_kFZt3.js +0 -1
- package/build/assets/command-menu--UIlGL72.js +0 -1
- package/build/assets/commits-tab-AnZwLvh-.js +0 -1
- package/build/assets/confirmation-modal-Dv1ktp8K.js +0 -1
- package/build/assets/conversation-BbGrAO4Z.js +0 -93
- package/build/assets/conversation-mYT6NAoj.js +0 -1
- package/build/assets/conversation-panel-mYT6NAoj.js +0 -1
- package/build/assets/conversation-state-store-B0ImPLHO.js +0 -1
- package/build/assets/conversation-store-Ca3ghXap.js +0 -6
- package/build/assets/copy-to-clipboard-button-Ca8iSkkA.js +0 -1
- package/build/assets/device-verify-Bhn2e_Ye.js +0 -1
- package/build/assets/edit-automation-modal-DadGbJ2u.js +0 -1
- package/build/assets/empty-state-BoGVDecT.js +0 -1
- package/build/assets/enum-filter-dropdown-Bgca129f.js +0 -1
- package/build/assets/environment-switch-overlay-BmBRT7gv.js +0 -1
- package/build/assets/error-state-Body8Ngd.js +0 -1
- package/build/assets/extensions-hub-CcDqq_vR.js +0 -1
- package/build/assets/extensions-navigation-Cr4yzYk4.js +0 -1
- package/build/assets/external-link-DKUlnCQV.js +0 -1
- package/build/assets/files-tab-D4o2VyE_.js +0 -1
- package/build/assets/format-model-name-CasAP3nd.js +0 -1
- package/build/assets/get-git-path-ChKDVHZp.js +0 -1
- package/build/assets/git-repo-dropdown-4ROKl2cB.js +0 -1
- package/build/assets/git-repo-dropdown-BkqzkMmM.js +0 -1
- package/build/assets/highlighted-source-view-BFRxGT_Q.js +0 -1
- package/build/assets/home-ChpSuepX.js +0 -1
- package/build/assets/home-DIsB440S.js +0 -1
- package/build/assets/home-automation-run-tooltip-BVNDWjAH.js +0 -1
- package/build/assets/home-store-CY9Ej0ux.js +0 -1
- package/build/assets/index-home-BdlrFIif.js +0 -1
- package/build/assets/info-B6RQawoW.js +0 -1
- package/build/assets/install-server-modal-Dpy89p4g.js +0 -1
- package/build/assets/kebab-menu-item-content-D8hSNGmm.js +0 -1
- package/build/assets/launch-IrTDEFCs.js +0 -1
- package/build/assets/list-filter-DsEK7NFC.js +0 -1
- package/build/assets/llm-not-configured-banner-CIFABh3K.js +0 -27
- package/build/assets/llm-settings-B9juXhIa.js +0 -1
- package/build/assets/llm-settings-De1d5dfr.js +0 -1
- package/build/assets/llm-subscription-service-BpJ0ouQo.js +0 -1
- package/build/assets/loader-circle-CC1au6hc.js +0 -1
- package/build/assets/manage-backends-modal-BrPV3oB-.js +0 -1
- package/build/assets/manifest-80fb1c29.js +0 -1
- package/build/assets/manifest-subpage-layout-CAOYzrYp.js +0 -1
- package/build/assets/markdown-renderer-BzTlxI8x.js +0 -8
- package/build/assets/mcp-BTs_SXfZ.js +0 -1
- package/build/assets/mcp-page-BEBYqH_K.js +0 -9
- package/build/assets/messages-DKV9cRc2.js +0 -41
- package/build/assets/modal-close-button-DDzdRvCs.js +0 -1
- package/build/assets/onboarding-DV_OXoeP.js +0 -1
- package/build/assets/onboarding-modal-rkyBYkeQ.js +0 -1
- package/build/assets/organization-service.api-DrYNkEN_.js +0 -1
- package/build/assets/pencil-47jAZH_V.js +0 -1
- package/build/assets/pin-By41Vl5J.js +0 -1
- package/build/assets/planner-tab-C9uZmhme.js +0 -1
- package/build/assets/plug-CG5HFcNG.js +0 -1
- package/build/assets/plugins-management-service-BMJgC3Ga.js +0 -1
- package/build/assets/plus-C7Slq-0I.js +0 -1
- package/build/assets/profiles-service.api-ChoKrL0l.js +0 -1
- package/build/assets/providers-BhMcY5nv.js +0 -1
- package/build/assets/proxy-9Fe1v5na.js +0 -1
- package/build/assets/recommended-automations-launcher-6ABrI9Cy.js +0 -1
- package/build/assets/refresh-cw-3q3Frrii.js +0 -1
- package/build/assets/root-Dc8YmC9F.js +0 -2
- package/build/assets/root-VDaypvK4.css +0 -1
- package/build/assets/root-layout-CXkhSPYh.js +0 -2
- package/build/assets/schema-field-D-y9-LDb.js +0 -1
- package/build/assets/scroll-fade-state-Dw-i4SGq.js +0 -1
- package/build/assets/sdk-section-page-BlFiizlG.js +0 -1
- package/build/assets/secret-form-BB7the8W.js +0 -1
- package/build/assets/secrets-service-ByZVENbp.js +0 -1
- package/build/assets/secrets-settings-B_GpxKW2.js +0 -1
- package/build/assets/settings-C0EWuBtA.js +0 -1
- package/build/assets/settings-dropdown-input-BcwylHs2.js +0 -1
- package/build/assets/settings-index-5w5UW2K3.js +0 -1
- package/build/assets/settings-input-Db-1g8Ql.js +0 -1
- package/build/assets/settings-modal-DfJ3tcJQ.js +0 -1
- package/build/assets/settings-service.api-DJ1r62Zr.js +0 -1
- package/build/assets/settings-switch-CS-dJDmA.js +0 -1
- package/build/assets/shared-conversation-CA5ISEDy.js +0 -1
- package/build/assets/shield-check-D2aCRd16.js +0 -1
- package/build/assets/sidebar-mobile-menu-toggle-C_fb0Jki.js +0 -1
- package/build/assets/sidebar-store-DGqHkVLw.js +0 -1
- package/build/assets/skill-card-pill-row-B27-xyig.js +0 -1
- package/build/assets/skill-scope-B42H-XOc.js +0 -1
- package/build/assets/skills-plugins-tgF8EiXC.js +0 -1
- package/build/assets/skills-settings-BgJ9PaOe.js +0 -1
- package/build/assets/styled-tooltip-C4jf5Fv9.js +0 -1
- package/build/assets/task-list-tab-C5zcaktH.js +0 -1
- package/build/assets/toggle-switch-ChOLXv2n.js +0 -1
- package/build/assets/trash-2-D7K26eDO.js +0 -1
- package/build/assets/trash-D-HYiVYM.js +0 -1
- package/build/assets/triangle-alert-CtdXWHUI.js +0 -1
- package/build/assets/usage-tab-CVDffLPt.js +0 -1
- package/build/assets/use-acp-credential-form-XIQmpX6M.js +0 -1
- package/build/assets/use-activate-agent-profile-BLfmvDiG.js +0 -1
- package/build/assets/use-agent-profiles-Bd9Bvvp1.js +0 -1
- package/build/assets/use-canvas-extensions-Bi693ujJ.js +0 -1
- package/build/assets/use-config-A9QovgXO.js +0 -1
- package/build/assets/use-create-conversation-Dx3l7mFZ.js +0 -1
- package/build/assets/use-create-secret-B9cUFWRG.js +0 -1
- package/build/assets/use-has-permission-B3C8rQmR.js +0 -1
- package/build/assets/use-is-authed-nTBcM7dE.js +0 -1
- package/build/assets/use-llm-configured-BV9nZ1_j.js +0 -1
- package/build/assets/use-llm-profiles-BO-P4Oyo.js +0 -1
- package/build/assets/use-manifest-capabilities-Cw_flwEz.js +0 -1
- package/build/assets/use-onboarding-completion-D8U7k4Qb.js +0 -1
- package/build/assets/use-pinned-home-route-CckOZrmb.js +0 -1
- package/build/assets/use-plugins-marketplace-7i94Zu3Z.js +0 -1
- package/build/assets/use-save-agent-profile-BUjSsDXK.js +0 -1
- package/build/assets/use-settings-DSXLbvBl.js +0 -1
- package/build/assets/use-settings-nav-items-CwRw-CmX.js +0 -16
- package/build/assets/use-tracking-D53y3TH9.js +0 -3
- package/build/assets/useQueries-DlbhlH9I.js +0 -1
- package/build/assets/useQuery-BSTgq1rl.js +0 -1
- package/build/assets/utils-CN5ZfZy1.js +0 -1
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~czjee3a3-DqZDXfg2.js +0 -186
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew9ih1s8-rfV8mQ9m.js +0 -1
- package/build/assets/vendor~root-layout-C9Ju9DQg.js +0 -1
- package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-BWir3rJs.js +0 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-cDuKr-WD.js +0 -1
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iyia17eu-Chf7vmKB.js +0 -1
- package/build/assets/x-DJdhbdmt.js +0 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs +0 -2
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs.map +0 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.d.ts +0 -35
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js +0 -247
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js.map +0 -1
- package/dist/hooks/query/use-skills.cjs +0 -2
- package/dist/hooks/query/use-skills.cjs.map +0 -1
- package/dist/hooks/query/use-skills.d.ts +0 -7
- package/dist/hooks/query/use-skills.js +0 -13
- package/dist/hooks/query/use-skills.js.map +0 -1
- package/dist/hooks/use-has-permission.cjs +0 -2
- package/dist/hooks/use-has-permission.cjs.map +0 -1
- package/dist/hooks/use-has-permission.d.ts +0 -1
- package/dist/hooks/use-has-permission.js +0 -8
- package/dist/hooks/use-has-permission.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.cjs +0 -2
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.cjs.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.js +0 -14
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.js.map +0 -1
|
@@ -1,63 +1,38 @@
|
|
|
1
1
|
import { isNoBackend as e } from "../../api/backend-registry/active-store.js";
|
|
2
|
-
import {
|
|
3
|
-
import n from "../../
|
|
4
|
-
import r from "
|
|
2
|
+
import { QueryClientContext as t } from "../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js";
|
|
3
|
+
import { useQuery as n } from "../../node_modules/@tanstack/react-query/build/modern/useQuery.js";
|
|
4
|
+
import { getQueryClient as r } from "../../query-client-config.js";
|
|
5
|
+
import { useActiveBackend as i } from "../../contexts/active-backend-context.js";
|
|
6
|
+
import a from "../../api/automation-service/automation-service.api.js";
|
|
7
|
+
import o from "react";
|
|
5
8
|
//#region src/hooks/query/use-automation-sdk-version.ts
|
|
6
|
-
var
|
|
7
|
-
function l(
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
return t.version;
|
|
9
|
+
var s = "automation-sdk-version", c = 3600 * 1e3;
|
|
10
|
+
async function l() {
|
|
11
|
+
if (typeof a.getSdkVersion != "function") return null;
|
|
12
|
+
try {
|
|
13
|
+
return await a.getSdkVersion();
|
|
14
|
+
} catch {
|
|
15
|
+
return null;
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
|
-
function u(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
c
|
|
31
|
-
});
|
|
32
|
-
return
|
|
33
|
-
}
|
|
34
|
-
function f() {
|
|
35
|
-
let n = t(), { backend: a } = n, s = [
|
|
36
|
-
i,
|
|
37
|
-
a.id,
|
|
38
|
-
a.kind,
|
|
39
|
-
a.host,
|
|
40
|
-
n.orgId ?? ""
|
|
41
|
-
].join(o), [c, u] = r.useState(() => l(s) ?? null);
|
|
42
|
-
return r.useEffect(() => {
|
|
43
|
-
if (e(a)) {
|
|
44
|
-
u(null);
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
let t = l(s);
|
|
48
|
-
if (t !== void 0) {
|
|
49
|
-
u(t);
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
let n = !0;
|
|
53
|
-
return u(null), d(s).then((e) => {
|
|
54
|
-
n && u(e);
|
|
55
|
-
}), () => {
|
|
56
|
-
n = !1;
|
|
57
|
-
};
|
|
58
|
-
}, [a, s]), c;
|
|
18
|
+
function u() {
|
|
19
|
+
let u = i(), { backend: d } = u, f = o.useContext(t), p = !e(d) && typeof a.getSdkVersion == "function", { data: m } = n({
|
|
20
|
+
queryKey: [
|
|
21
|
+
s,
|
|
22
|
+
d.id,
|
|
23
|
+
d.kind,
|
|
24
|
+
d.host,
|
|
25
|
+
u.orgId ?? ""
|
|
26
|
+
],
|
|
27
|
+
queryFn: l,
|
|
28
|
+
enabled: p,
|
|
29
|
+
initialData: p ? void 0 : null,
|
|
30
|
+
staleTime: c,
|
|
31
|
+
gcTime: c
|
|
32
|
+
}, f ?? r());
|
|
33
|
+
return m ?? null;
|
|
59
34
|
}
|
|
60
35
|
//#endregion
|
|
61
|
-
export {
|
|
36
|
+
export { u as useAutomationSdkVersion };
|
|
62
37
|
|
|
63
38
|
//# sourceMappingURL=use-automation-sdk-version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-automation-sdk-version.js","names":[],"sources":["../../../src/hooks/query/use-automation-sdk-version.ts"],"sourcesContent":["import React from \"react\";\nimport AutomationService from \"#/api/automation-service/automation-service.api\";\nimport { isNoBackend } from \"#/api/backend-registry/active-store\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\n\nexport const AUTOMATION_SDK_VERSION_CACHE_NAMESPACE = \"automation-sdk-version\";\n\nconst AUTOMATION_SDK_VERSION_CACHE_TIME_MS = 60 * 60 * 1000;\
|
|
1
|
+
{"version":3,"file":"use-automation-sdk-version.js","names":[],"sources":["../../../src/hooks/query/use-automation-sdk-version.ts"],"sourcesContent":["import React from \"react\";\nimport { QueryClientContext, useQuery } from \"@tanstack/react-query\";\nimport AutomationService from \"#/api/automation-service/automation-service.api\";\nimport { isNoBackend } from \"#/api/backend-registry/active-store\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { getQueryClient } from \"#/query-client-config\";\n\nexport const AUTOMATION_SDK_VERSION_CACHE_NAMESPACE = \"automation-sdk-version\";\n\nconst AUTOMATION_SDK_VERSION_CACHE_TIME_MS = 60 * 60 * 1000;\nasync function fetchAutomationSdkVersion(): Promise<string | null> {\n if (typeof AutomationService.getSdkVersion !== \"function\") {\n return null;\n }\n\n try {\n return await AutomationService.getSdkVersion();\n } catch {\n return null;\n }\n}\n\nexport function useAutomationSdkVersion() {\n const active = useActiveBackend();\n const { backend } = active;\n const providerQueryClient = React.useContext(QueryClientContext);\n const canFetchSdkVersion =\n !isNoBackend(backend) &&\n typeof AutomationService.getSdkVersion === \"function\";\n const { data } = useQuery(\n {\n queryKey: [\n AUTOMATION_SDK_VERSION_CACHE_NAMESPACE,\n backend.id,\n backend.kind,\n backend.host,\n active.orgId ?? \"\",\n ],\n queryFn: fetchAutomationSdkVersion,\n enabled: canFetchSdkVersion,\n initialData: canFetchSdkVersion ? undefined : null,\n staleTime: AUTOMATION_SDK_VERSION_CACHE_TIME_MS,\n gcTime: AUTOMATION_SDK_VERSION_CACHE_TIME_MS,\n },\n providerQueryClient ?? getQueryClient(),\n );\n\n return data ?? null;\n}\n"],"mappings":";;;;;;;;AAOA,IAAa,IAAyC,0BAEhD,IAAuC,OAAU;AACvD,eAAe,IAAoD;CACjE,IAAI,OAAO,EAAkB,iBAAkB,YAC7C,OAAO;CAGT,IAAI;EACF,OAAO,MAAM,EAAkB,cAAc;CAC/C,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,IAA0B;CACxC,IAAM,IAAS,EAAiB,GAC1B,EAAE,eAAY,GACd,IAAsB,EAAM,WAAW,CAAkB,GACzD,IACJ,CAAC,EAAY,CAAO,KACpB,OAAO,EAAkB,iBAAkB,YACvC,EAAE,YAAS,EACf;EACE,UAAU;GACR;GACA,EAAQ;GACR,EAAQ;GACR,EAAQ;GACR,EAAO,SAAS;EAClB;EACA,SAAS;EACT,SAAS;EACT,aAAa,IAAqB,KAAA,IAAY;EAC9C,WAAW;EACX,QAAQ;CACV,GACA,KAAuB,EAAe,CACxC;CAEA,OAAO,KAAQ;AACjB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../../_virtual/_rolldown/runtime.cjs");const e=require("
|
|
1
|
+
require("../../_virtual/_rolldown/runtime.cjs");const e=require("../use-conversation-id.cjs"),t=require("../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs"),n=require("../../contexts/active-backend-context.cjs"),r=require("./use-active-conversation.cjs"),i=require("../../api/skills-service.cjs");var a=()=>{let a=n.useActiveBackend().backend.kind===`cloud`,{conversationId:o}=e.useOptionalConversationId(),{data:s}=r.useActiveConversation(),c=s?.selected_workspace??void 0,l=a?o:null;return t.useQuery({queryKey:l?[`conversation`,l,`skills`]:[`skills`,c??null],queryFn:()=>l?i.default.getConversationSkills(l):i.default.getSkills(c),enabled:!l||s?.sandbox_status===`RUNNING`,staleTime:1e3*60*10,refetchOnWindowFocus:!1})};exports.useConversationSkills=a;
|
|
2
2
|
//# sourceMappingURL=use-conversation-skills.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-conversation-skills.cjs","names":[],"sources":["../../../src/hooks/query/use-conversation-skills.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"use-conversation-skills.cjs","names":[],"sources":["../../../src/hooks/query/use-conversation-skills.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport SkillsService from \"#/api/skills-service\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useOptionalConversationId } from \"#/hooks/use-conversation-id\";\nimport { SkillInfo } from \"#/types/settings\";\nimport { useActiveConversation } from \"./use-active-conversation\";\n\n/**\n * Skills catalog scoped to the active conversation, so the slash-command menu\n * and skills modal list the same skills that were loaded into it.\n *\n * Cloud: the per-conversation route reports what the conversation's\n * agent-server actually loaded (public catalog, user/org repos, project\n * skills, auto-loaded marketplace plugins); the global `/api/v1/skills/search`\n * catalog only scans the API host's built-in skills directory. The route needs\n * a running sandbox, which `useActiveConversation` polls for.\n *\n * Local (and cloud with no conversation route, e.g. the home page): the\n * workspace-scoped catalog, falling back to the global workspace dir for\n * \"No workspace\" conversations (`selected_workspace` is null).\n */\nexport const useConversationSkills = () => {\n const isCloud = useActiveBackend().backend.kind === \"cloud\";\n const { conversationId } = useOptionalConversationId();\n const { data: conversation } = useActiveConversation();\n const projectDir = conversation?.selected_workspace ?? undefined;\n // Keyed on the route id so a still-loading cloud conversation does not fall\n // back to the global catalog; only a missing route does.\n const cloudConversationId = isCloud ? conversationId : null;\n\n return useQuery<SkillInfo[]>({\n queryKey: cloudConversationId\n ? [\"conversation\", cloudConversationId, \"skills\"]\n : [\"skills\", projectDir ?? null],\n queryFn: () =>\n cloudConversationId\n ? SkillsService.getConversationSkills(cloudConversationId)\n : SkillsService.getSkills(projectDir),\n // The cloud route 404s until the sandbox runs.\n enabled: !cloudConversationId || conversation?.sandbox_status === \"RUNNING\",\n staleTime: 1000 * 60 * 10, // 10 minutes – skill list rarely changes\n refetchOnWindowFocus: false,\n });\n};\n"],"mappings":"0TAqBA,IAAa,MAA8B,CACzC,IAAM,EAAU,EAAA,iBAAiB,EAAE,QAAQ,OAAS,QAC9C,CAAE,kBAAmB,EAAA,0BAA0B,EAC/C,CAAE,KAAM,GAAiB,EAAA,sBAAsB,EAC/C,EAAa,GAAc,oBAAsB,IAAA,GAGjD,EAAsB,EAAU,EAAiB,KAEvD,OAAO,EAAA,SAAsB,CAC3B,SAAU,EACN,CAAC,eAAgB,EAAqB,QAAQ,EAC9C,CAAC,SAAU,GAAc,IAAI,EACjC,YACE,EACI,EAAA,QAAc,sBAAsB,CAAmB,EACvD,EAAA,QAAc,UAAU,CAAU,EAExC,QAAS,CAAC,GAAuB,GAAc,iBAAmB,UAClE,UAAW,IAAO,GAAK,GACvB,qBAAsB,EACxB,CAAC,CACH"}
|
|
@@ -1,7 +1,16 @@
|
|
|
1
|
+
import { SkillInfo } from "#/types/settings";
|
|
1
2
|
/**
|
|
2
|
-
* Skills catalog scoped to the active conversation
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Skills catalog scoped to the active conversation, so the slash-command menu
|
|
4
|
+
* and skills modal list the same skills that were loaded into it.
|
|
5
|
+
*
|
|
6
|
+
* Cloud: the per-conversation route reports what the conversation's
|
|
7
|
+
* agent-server actually loaded (public catalog, user/org repos, project
|
|
8
|
+
* skills, auto-loaded marketplace plugins); the global `/api/v1/skills/search`
|
|
9
|
+
* catalog only scans the API host's built-in skills directory. The route needs
|
|
10
|
+
* a running sandbox, which `useActiveConversation` polls for.
|
|
11
|
+
*
|
|
12
|
+
* Local (and cloud with no conversation route, e.g. the home page): the
|
|
13
|
+
* workspace-scoped catalog, falling back to the global workspace dir for
|
|
14
|
+
* "No workspace" conversations (`selected_workspace` is null).
|
|
6
15
|
*/
|
|
7
|
-
export declare const useConversationSkills: () => import("@tanstack/react-query").UseQueryResult<NoInfer<
|
|
16
|
+
export declare const useConversationSkills: () => import("@tanstack/react-query").UseQueryResult<NoInfer<SkillInfo[]>, import("axios").AxiosError<unknown, any>>;
|
|
@@ -1,8 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { useOptionalConversationId as e } from "../use-conversation-id.js";
|
|
2
|
+
import { useQuery as t } from "../../node_modules/@tanstack/react-query/build/modern/useQuery.js";
|
|
3
|
+
import { useActiveBackend as n } from "../../contexts/active-backend-context.js";
|
|
4
|
+
import { useActiveConversation as r } from "./use-active-conversation.js";
|
|
5
|
+
import i from "../../api/skills-service.js";
|
|
3
6
|
//#region src/hooks/query/use-conversation-skills.ts
|
|
4
|
-
var
|
|
7
|
+
var a = () => {
|
|
8
|
+
let a = n().backend.kind === "cloud", { conversationId: o } = e(), { data: s } = r(), c = s?.selected_workspace ?? void 0, l = a ? o : null;
|
|
9
|
+
return t({
|
|
10
|
+
queryKey: l ? [
|
|
11
|
+
"conversation",
|
|
12
|
+
l,
|
|
13
|
+
"skills"
|
|
14
|
+
] : ["skills", c ?? null],
|
|
15
|
+
queryFn: () => l ? i.getConversationSkills(l) : i.getSkills(c),
|
|
16
|
+
enabled: !l || s?.sandbox_status === "RUNNING",
|
|
17
|
+
staleTime: 1e3 * 60 * 10,
|
|
18
|
+
refetchOnWindowFocus: !1
|
|
19
|
+
});
|
|
20
|
+
};
|
|
5
21
|
//#endregion
|
|
6
|
-
export {
|
|
22
|
+
export { a as useConversationSkills };
|
|
7
23
|
|
|
8
24
|
//# sourceMappingURL=use-conversation-skills.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-conversation-skills.js","names":[],"sources":["../../../src/hooks/query/use-conversation-skills.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"use-conversation-skills.js","names":[],"sources":["../../../src/hooks/query/use-conversation-skills.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport SkillsService from \"#/api/skills-service\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useOptionalConversationId } from \"#/hooks/use-conversation-id\";\nimport { SkillInfo } from \"#/types/settings\";\nimport { useActiveConversation } from \"./use-active-conversation\";\n\n/**\n * Skills catalog scoped to the active conversation, so the slash-command menu\n * and skills modal list the same skills that were loaded into it.\n *\n * Cloud: the per-conversation route reports what the conversation's\n * agent-server actually loaded (public catalog, user/org repos, project\n * skills, auto-loaded marketplace plugins); the global `/api/v1/skills/search`\n * catalog only scans the API host's built-in skills directory. The route needs\n * a running sandbox, which `useActiveConversation` polls for.\n *\n * Local (and cloud with no conversation route, e.g. the home page): the\n * workspace-scoped catalog, falling back to the global workspace dir for\n * \"No workspace\" conversations (`selected_workspace` is null).\n */\nexport const useConversationSkills = () => {\n const isCloud = useActiveBackend().backend.kind === \"cloud\";\n const { conversationId } = useOptionalConversationId();\n const { data: conversation } = useActiveConversation();\n const projectDir = conversation?.selected_workspace ?? undefined;\n // Keyed on the route id so a still-loading cloud conversation does not fall\n // back to the global catalog; only a missing route does.\n const cloudConversationId = isCloud ? conversationId : null;\n\n return useQuery<SkillInfo[]>({\n queryKey: cloudConversationId\n ? [\"conversation\", cloudConversationId, \"skills\"]\n : [\"skills\", projectDir ?? null],\n queryFn: () =>\n cloudConversationId\n ? SkillsService.getConversationSkills(cloudConversationId)\n : SkillsService.getSkills(projectDir),\n // The cloud route 404s until the sandbox runs.\n enabled: !cloudConversationId || conversation?.sandbox_status === \"RUNNING\",\n staleTime: 1000 * 60 * 10, // 10 minutes – skill list rarely changes\n refetchOnWindowFocus: false,\n });\n};\n"],"mappings":";;;;;;AAqBA,IAAa,UAA8B;CACzC,IAAM,IAAU,EAAiB,EAAE,QAAQ,SAAS,SAC9C,EAAE,sBAAmB,EAA0B,GAC/C,EAAE,MAAM,MAAiB,EAAsB,GAC/C,IAAa,GAAc,sBAAsB,KAAA,GAGjD,IAAsB,IAAU,IAAiB;CAEvD,OAAO,EAAsB;EAC3B,UAAU,IACN;GAAC;GAAgB;GAAqB;EAAQ,IAC9C,CAAC,UAAU,KAAc,IAAI;EACjC,eACE,IACI,EAAc,sBAAsB,CAAmB,IACvD,EAAc,UAAU,CAAU;EAExC,SAAS,CAAC,KAAuB,GAAc,mBAAmB;EAClE,WAAW,MAAO,KAAK;EACvB,sBAAsB;CACxB,CAAC;AACH"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs"),n=require("../../contexts/active-backend-context.cjs"),r=require("../../api/config-service/config-service.api.cjs"),i=require("../../stores/free-models-store.cjs"),a=require("./use-verified-models.cjs");let o=require("react");o=e.__toESM(o,1);var s=`openhands`,c=100,l=10;async function u(e,t,n,i){if(i>=l)throw Error(`Too many pagination requests while fetching OpenHands models (depth=${i})`);let a=await r.default.searchModels({provider__eq:s,limit:c,...t?{page_id:t}:{}},e);if(!a.next_page_id)return a.items;if(n.has(a.next_page_id))throw Error(`Repeated page id while fetching OpenHands models: ${a.next_page_id}`);n.add(a.next_page_id);let o=await u(e,a.next_page_id,n,i+1);return[...a.items,...o]}var d=()=>{let{backend:e,orgId:r}=n.useActiveBackend(),i=[e.id,e.connectionRevision??0,r];return t.useQuery({queryKey:[`config`,`models`,s,`flags`,...i],queryFn:async({client:e})=>u(await e.fetchQuery({queryKey:[...a.VERIFIED_MODELS_QUERY_KEY,...i],queryFn:a.fetchVerifiedModelsByProvider,staleTime:a.VERIFIED_MODELS_STALE_TIME}),null,new Set,0),staleTime:a.VERIFIED_MODELS_STALE_TIME,gcTime:a.VERIFIED_MODELS_GC_TIME})},f=()=>{let{backend:e,orgId:t}=n.useActiveBackend(),{data:r,isError:a}=d(),c=i.useFreeModelsStore(e=>e.setFlags),l=i.useFreeModelsStore(e=>e.markDefaultModelReady),u=i.useFreeModelsStore(e=>e.resetFlags);o.default.useEffect(()=>{u()},[e.id,e.connectionRevision,t,u]),o.default.useEffect(()=>{if(!r)return;let e=new Set(r.filter(e=>e.free).map(e=>`${s}/${e.name}`)),t=r.find(e=>e.default);c({freeModels:e,defaultModel:t?`${s}/${t.name}`:null})},[r,c]),o.default.useEffect(()=>{a&&l()},[a,l])},p=()=>i.useFreeModelsStore(e=>e.freeModels),m=()=>i.useFreeModelsStore(e=>e.defaultModel);exports.useDefaultModel=m,exports.useFreeModels=p,exports.useHydrateFreeModels=f;
|
|
2
|
+
//# sourceMappingURL=use-free-models.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-free-models.cjs","names":[],"sources":["../../../src/hooks/query/use-free-models.ts"],"sourcesContent":["import React from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport ConfigService from \"#/api/config-service/config-service.api\";\nimport type { LLMModel } from \"#/api/config-service/config-service.types\";\nimport type { FreeModelSet } from \"#/utils/format-model-name\";\nimport { useFreeModelsStore } from \"#/stores/free-models-store\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n VERIFIED_MODELS_GC_TIME,\n VERIFIED_MODELS_QUERY_KEY,\n VERIFIED_MODELS_STALE_TIME,\n fetchVerifiedModelsByProvider,\n} from \"./use-verified-models\";\n\n/**\n * Provider whose models carry free / default metadata. Both are\n * OpenHands-managed concepts, so they are scoped to the `openhands` provider.\n */\nconst OPENHANDS_PROVIDER = \"openhands\";\nconst CLOUD_MODEL_SEARCH_PAGE_LIMIT = 100;\nconst MAX_PAGINATION_DEPTH = 10;\n\nasync function fetchAllOpenHandsModels(\n verifiedByProvider: Record<string, string[]>,\n pageId: string | null | undefined,\n seenPageIds: Set<string>,\n depth: number,\n): Promise<LLMModel[]> {\n if (depth >= MAX_PAGINATION_DEPTH) {\n throw new Error(\n `Too many pagination requests while fetching OpenHands models (depth=${depth})`,\n );\n }\n\n const page = await ConfigService.searchModels(\n {\n provider__eq: OPENHANDS_PROVIDER,\n limit: CLOUD_MODEL_SEARCH_PAGE_LIMIT,\n ...(pageId ? { page_id: pageId } : {}),\n },\n verifiedByProvider,\n );\n\n if (!page.next_page_id) {\n return page.items;\n }\n\n if (seenPageIds.has(page.next_page_id)) {\n throw new Error(\n `Repeated page id while fetching OpenHands models: ${page.next_page_id}`,\n );\n }\n seenPageIds.add(page.next_page_id);\n\n const rest = await fetchAllOpenHandsModels(\n verifiedByProvider,\n page.next_page_id,\n seenPageIds,\n depth + 1,\n );\n return [...page.items, ...rest];\n}\n\n/**\n * Fetches the `openhands` provider's models with their DB-driven `free` /\n * `default` flags (the same channel that carries `verified`).\n */\nconst useOpenHandsModels = () => {\n const { backend, orgId } = useActiveBackend();\n const backendScope = [\n backend.id,\n backend.connectionRevision ?? 0,\n orgId,\n ] as const;\n\n return useQuery({\n queryKey: [\n \"config\",\n \"models\",\n OPENHANDS_PROVIDER,\n \"flags\",\n ...backendScope,\n ],\n queryFn: async ({ client }): Promise<LLMModel[]> => {\n const verifiedByProvider = await client.fetchQuery({\n queryKey: [...VERIFIED_MODELS_QUERY_KEY, ...backendScope],\n queryFn: fetchVerifiedModelsByProvider,\n staleTime: VERIFIED_MODELS_STALE_TIME,\n });\n return fetchAllOpenHandsModels(verifiedByProvider, null, new Set(), 0);\n },\n staleTime: VERIFIED_MODELS_STALE_TIME,\n gcTime: VERIFIED_MODELS_GC_TIME,\n });\n};\n\n/**\n * Fetches the DB-driven free / default flags once and mirrors them into the\n * {@link useFreeModelsStore}. Mount this high in the tree (inside the query\n * provider). Leaf display components then read the flags synchronously via the\n * {@link useFreeModels} / {@link useDefaultModel} zustand selectors, so they\n * stay renderable in isolation without a QueryClientProvider in scope.\n */\nexport const useHydrateFreeModels = (): void => {\n const { backend, orgId } = useActiveBackend();\n const { data, isError } = useOpenHandsModels();\n const setFlags = useFreeModelsStore((state) => state.setFlags);\n const markDefaultModelReady = useFreeModelsStore(\n (state) => state.markDefaultModelReady,\n );\n const resetFlags = useFreeModelsStore((state) => state.resetFlags);\n\n React.useEffect(() => {\n resetFlags();\n }, [backend.id, backend.connectionRevision, orgId, resetFlags]);\n\n React.useEffect(() => {\n if (!data) return;\n const freeModels = new Set(\n data\n .filter((model) => model.free)\n .map((model) => `${OPENHANDS_PROVIDER}/${model.name}`),\n );\n const defaultEntry = data.find((model) => model.default);\n setFlags({\n freeModels,\n defaultModel: defaultEntry\n ? `${OPENHANDS_PROVIDER}/${defaultEntry.name}`\n : null,\n });\n }, [data, setFlags]);\n\n React.useEffect(() => {\n if (isError) markDefaultModelReady();\n }, [isError, markDefaultModelReady]);\n};\n\n/**\n * Set of free ``openhands/<model>`` ids, sourced from the backend model list\n * (DB-driven on cloud via the `free` flag). Returns an empty set on backends\n * without free metadata (e.g. the local agent-server), so callers uniformly\n * treat \"not in set\" as paid and the frontend keeps no hardcoded free list.\n */\nexport const useFreeModels = (): FreeModelSet =>\n useFreeModelsStore((state) => state.freeModels);\n\n/**\n * DB-driven default OpenHands model id (``openhands/<model>``), used to\n * preselect a model on onboarding and when creating a new OpenHands model.\n * Returns `null` on backends without default metadata.\n */\nexport const useDefaultModel = (): string | null =>\n useFreeModelsStore((state) => state.defaultModel);\n\nexport const useDefaultModelReady = (): boolean =>\n useFreeModelsStore((state) => state.defaultModelReady);\n"],"mappings":"2XAkBA,IAAM,EAAqB,YACrB,EAAgC,IAChC,EAAuB,GAE7B,eAAe,EACb,EACA,EACA,EACA,EACqB,CACrB,GAAI,GAAS,EACX,MAAU,MACR,uEAAuE,EAAM,EAC/E,EAGF,IAAM,EAAO,MAAM,EAAA,QAAc,aAC/B,CACE,aAAc,EACd,MAAO,EACP,GAAI,EAAS,CAAE,QAAS,CAAO,EAAI,CAAC,CACtC,EACA,CACF,EAEA,GAAI,CAAC,EAAK,aACR,OAAO,EAAK,MAGd,GAAI,EAAY,IAAI,EAAK,YAAY,EACnC,MAAU,MACR,qDAAqD,EAAK,cAC5D,EAEF,EAAY,IAAI,EAAK,YAAY,EAEjC,IAAM,EAAO,MAAM,EACjB,EACA,EAAK,aACL,EACA,EAAQ,CACV,EACA,MAAO,CAAC,GAAG,EAAK,MAAO,GAAG,CAAI,CAChC,CAMA,IAAM,MAA2B,CAC/B,GAAM,CAAE,UAAS,SAAU,EAAA,iBAAiB,EACtC,EAAe,CACnB,EAAQ,GACR,EAAQ,oBAAsB,EAC9B,CACF,EAEA,OAAO,EAAA,SAAS,CACd,SAAU,CACR,SACA,SACA,EACA,QACA,GAAG,CACL,EACA,QAAS,MAAO,CAAE,YAMT,EAAwB,MALE,EAAO,WAAW,CACjD,SAAU,CAAC,GAAG,EAAA,0BAA2B,GAAG,CAAY,EACxD,QAAS,EAAA,8BACT,UAAW,EAAA,0BACb,CAAC,EACkD,KAAM,IAAI,IAAO,CAAC,EAEvE,UAAW,EAAA,2BACX,OAAQ,EAAA,uBACV,CAAC,CACH,EASa,MAAmC,CAC9C,GAAM,CAAE,UAAS,SAAU,EAAA,iBAAiB,EACtC,CAAE,OAAM,WAAY,EAAmB,EACvC,EAAW,EAAA,mBAAoB,GAAU,EAAM,QAAQ,EACvD,EAAwB,EAAA,mBAC3B,GAAU,EAAM,qBACnB,EACM,EAAa,EAAA,mBAAoB,GAAU,EAAM,UAAU,EAEjE,EAAA,QAAM,cAAgB,CACpB,EAAW,CACb,EAAG,CAAC,EAAQ,GAAI,EAAQ,mBAAoB,EAAO,CAAU,CAAC,EAE9D,EAAA,QAAM,cAAgB,CACpB,GAAI,CAAC,EAAM,OACX,IAAM,EAAa,IAAI,IACrB,EACG,OAAQ,GAAU,EAAM,IAAI,EAC5B,IAAK,GAAU,GAAG,EAAmB,GAAG,EAAM,MAAM,CACzD,EACM,EAAe,EAAK,KAAM,GAAU,EAAM,OAAO,EACvD,EAAS,CACP,aACA,aAAc,EACV,GAAG,EAAmB,GAAG,EAAa,OACtC,IACN,CAAC,CACH,EAAG,CAAC,EAAM,CAAQ,CAAC,EAEnB,EAAA,QAAM,cAAgB,CAChB,GAAS,EAAsB,CACrC,EAAG,CAAC,EAAS,CAAqB,CAAC,CACrC,EAQa,MACX,EAAA,mBAAoB,GAAU,EAAM,UAAU,EAOnC,MACX,EAAA,mBAAoB,GAAU,EAAM,YAAY"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { FreeModelSet } from "#/utils/format-model-name";
|
|
2
|
+
/**
|
|
3
|
+
* Fetches the DB-driven free / default flags once and mirrors them into the
|
|
4
|
+
* {@link useFreeModelsStore}. Mount this high in the tree (inside the query
|
|
5
|
+
* provider). Leaf display components then read the flags synchronously via the
|
|
6
|
+
* {@link useFreeModels} / {@link useDefaultModel} zustand selectors, so they
|
|
7
|
+
* stay renderable in isolation without a QueryClientProvider in scope.
|
|
8
|
+
*/
|
|
9
|
+
export declare const useHydrateFreeModels: () => void;
|
|
10
|
+
/**
|
|
11
|
+
* Set of free ``openhands/<model>`` ids, sourced from the backend model list
|
|
12
|
+
* (DB-driven on cloud via the `free` flag). Returns an empty set on backends
|
|
13
|
+
* without free metadata (e.g. the local agent-server), so callers uniformly
|
|
14
|
+
* treat "not in set" as paid and the frontend keeps no hardcoded free list.
|
|
15
|
+
*/
|
|
16
|
+
export declare const useFreeModels: () => FreeModelSet;
|
|
17
|
+
/**
|
|
18
|
+
* DB-driven default OpenHands model id (``openhands/<model>``), used to
|
|
19
|
+
* preselect a model on onboarding and when creating a new OpenHands model.
|
|
20
|
+
* Returns `null` on backends without default metadata.
|
|
21
|
+
*/
|
|
22
|
+
export declare const useDefaultModel: () => string | null;
|
|
23
|
+
export declare const useDefaultModelReady: () => boolean;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { useQuery as e } from "../../node_modules/@tanstack/react-query/build/modern/useQuery.js";
|
|
2
|
+
import { useActiveBackend as t } from "../../contexts/active-backend-context.js";
|
|
3
|
+
import n from "../../api/config-service/config-service.api.js";
|
|
4
|
+
import { useFreeModelsStore as r } from "../../stores/free-models-store.js";
|
|
5
|
+
import { VERIFIED_MODELS_GC_TIME as i, VERIFIED_MODELS_QUERY_KEY as a, VERIFIED_MODELS_STALE_TIME as o, fetchVerifiedModelsByProvider as s } from "./use-verified-models.js";
|
|
6
|
+
import c from "react";
|
|
7
|
+
//#region src/hooks/query/use-free-models.ts
|
|
8
|
+
var l = "openhands", u = 100, d = 10;
|
|
9
|
+
async function f(e, t, r, i) {
|
|
10
|
+
if (i >= d) throw Error(`Too many pagination requests while fetching OpenHands models (depth=${i})`);
|
|
11
|
+
let a = await n.searchModels({
|
|
12
|
+
provider__eq: l,
|
|
13
|
+
limit: u,
|
|
14
|
+
...t ? { page_id: t } : {}
|
|
15
|
+
}, e);
|
|
16
|
+
if (!a.next_page_id) return a.items;
|
|
17
|
+
if (r.has(a.next_page_id)) throw Error(`Repeated page id while fetching OpenHands models: ${a.next_page_id}`);
|
|
18
|
+
r.add(a.next_page_id);
|
|
19
|
+
let o = await f(e, a.next_page_id, r, i + 1);
|
|
20
|
+
return [...a.items, ...o];
|
|
21
|
+
}
|
|
22
|
+
var p = () => {
|
|
23
|
+
let { backend: n, orgId: r } = t(), c = [
|
|
24
|
+
n.id,
|
|
25
|
+
n.connectionRevision ?? 0,
|
|
26
|
+
r
|
|
27
|
+
];
|
|
28
|
+
return e({
|
|
29
|
+
queryKey: [
|
|
30
|
+
"config",
|
|
31
|
+
"models",
|
|
32
|
+
l,
|
|
33
|
+
"flags",
|
|
34
|
+
...c
|
|
35
|
+
],
|
|
36
|
+
queryFn: async ({ client: e }) => f(await e.fetchQuery({
|
|
37
|
+
queryKey: [...a, ...c],
|
|
38
|
+
queryFn: s,
|
|
39
|
+
staleTime: o
|
|
40
|
+
}), null, /* @__PURE__ */ new Set(), 0),
|
|
41
|
+
staleTime: o,
|
|
42
|
+
gcTime: i
|
|
43
|
+
});
|
|
44
|
+
}, m = () => {
|
|
45
|
+
let { backend: e, orgId: n } = t(), { data: i, isError: a } = p(), o = r((e) => e.setFlags), s = r((e) => e.markDefaultModelReady), u = r((e) => e.resetFlags);
|
|
46
|
+
c.useEffect(() => {
|
|
47
|
+
u();
|
|
48
|
+
}, [
|
|
49
|
+
e.id,
|
|
50
|
+
e.connectionRevision,
|
|
51
|
+
n,
|
|
52
|
+
u
|
|
53
|
+
]), c.useEffect(() => {
|
|
54
|
+
if (!i) return;
|
|
55
|
+
let e = new Set(i.filter((e) => e.free).map((e) => `${l}/${e.name}`)), t = i.find((e) => e.default);
|
|
56
|
+
o({
|
|
57
|
+
freeModels: e,
|
|
58
|
+
defaultModel: t ? `${l}/${t.name}` : null
|
|
59
|
+
});
|
|
60
|
+
}, [i, o]), c.useEffect(() => {
|
|
61
|
+
a && s();
|
|
62
|
+
}, [a, s]);
|
|
63
|
+
}, h = () => r((e) => e.freeModels), g = () => r((e) => e.defaultModel);
|
|
64
|
+
//#endregion
|
|
65
|
+
export { g as useDefaultModel, h as useFreeModels, m as useHydrateFreeModels };
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=use-free-models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-free-models.js","names":[],"sources":["../../../src/hooks/query/use-free-models.ts"],"sourcesContent":["import React from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport ConfigService from \"#/api/config-service/config-service.api\";\nimport type { LLMModel } from \"#/api/config-service/config-service.types\";\nimport type { FreeModelSet } from \"#/utils/format-model-name\";\nimport { useFreeModelsStore } from \"#/stores/free-models-store\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n VERIFIED_MODELS_GC_TIME,\n VERIFIED_MODELS_QUERY_KEY,\n VERIFIED_MODELS_STALE_TIME,\n fetchVerifiedModelsByProvider,\n} from \"./use-verified-models\";\n\n/**\n * Provider whose models carry free / default metadata. Both are\n * OpenHands-managed concepts, so they are scoped to the `openhands` provider.\n */\nconst OPENHANDS_PROVIDER = \"openhands\";\nconst CLOUD_MODEL_SEARCH_PAGE_LIMIT = 100;\nconst MAX_PAGINATION_DEPTH = 10;\n\nasync function fetchAllOpenHandsModels(\n verifiedByProvider: Record<string, string[]>,\n pageId: string | null | undefined,\n seenPageIds: Set<string>,\n depth: number,\n): Promise<LLMModel[]> {\n if (depth >= MAX_PAGINATION_DEPTH) {\n throw new Error(\n `Too many pagination requests while fetching OpenHands models (depth=${depth})`,\n );\n }\n\n const page = await ConfigService.searchModels(\n {\n provider__eq: OPENHANDS_PROVIDER,\n limit: CLOUD_MODEL_SEARCH_PAGE_LIMIT,\n ...(pageId ? { page_id: pageId } : {}),\n },\n verifiedByProvider,\n );\n\n if (!page.next_page_id) {\n return page.items;\n }\n\n if (seenPageIds.has(page.next_page_id)) {\n throw new Error(\n `Repeated page id while fetching OpenHands models: ${page.next_page_id}`,\n );\n }\n seenPageIds.add(page.next_page_id);\n\n const rest = await fetchAllOpenHandsModels(\n verifiedByProvider,\n page.next_page_id,\n seenPageIds,\n depth + 1,\n );\n return [...page.items, ...rest];\n}\n\n/**\n * Fetches the `openhands` provider's models with their DB-driven `free` /\n * `default` flags (the same channel that carries `verified`).\n */\nconst useOpenHandsModels = () => {\n const { backend, orgId } = useActiveBackend();\n const backendScope = [\n backend.id,\n backend.connectionRevision ?? 0,\n orgId,\n ] as const;\n\n return useQuery({\n queryKey: [\n \"config\",\n \"models\",\n OPENHANDS_PROVIDER,\n \"flags\",\n ...backendScope,\n ],\n queryFn: async ({ client }): Promise<LLMModel[]> => {\n const verifiedByProvider = await client.fetchQuery({\n queryKey: [...VERIFIED_MODELS_QUERY_KEY, ...backendScope],\n queryFn: fetchVerifiedModelsByProvider,\n staleTime: VERIFIED_MODELS_STALE_TIME,\n });\n return fetchAllOpenHandsModels(verifiedByProvider, null, new Set(), 0);\n },\n staleTime: VERIFIED_MODELS_STALE_TIME,\n gcTime: VERIFIED_MODELS_GC_TIME,\n });\n};\n\n/**\n * Fetches the DB-driven free / default flags once and mirrors them into the\n * {@link useFreeModelsStore}. Mount this high in the tree (inside the query\n * provider). Leaf display components then read the flags synchronously via the\n * {@link useFreeModels} / {@link useDefaultModel} zustand selectors, so they\n * stay renderable in isolation without a QueryClientProvider in scope.\n */\nexport const useHydrateFreeModels = (): void => {\n const { backend, orgId } = useActiveBackend();\n const { data, isError } = useOpenHandsModels();\n const setFlags = useFreeModelsStore((state) => state.setFlags);\n const markDefaultModelReady = useFreeModelsStore(\n (state) => state.markDefaultModelReady,\n );\n const resetFlags = useFreeModelsStore((state) => state.resetFlags);\n\n React.useEffect(() => {\n resetFlags();\n }, [backend.id, backend.connectionRevision, orgId, resetFlags]);\n\n React.useEffect(() => {\n if (!data) return;\n const freeModels = new Set(\n data\n .filter((model) => model.free)\n .map((model) => `${OPENHANDS_PROVIDER}/${model.name}`),\n );\n const defaultEntry = data.find((model) => model.default);\n setFlags({\n freeModels,\n defaultModel: defaultEntry\n ? `${OPENHANDS_PROVIDER}/${defaultEntry.name}`\n : null,\n });\n }, [data, setFlags]);\n\n React.useEffect(() => {\n if (isError) markDefaultModelReady();\n }, [isError, markDefaultModelReady]);\n};\n\n/**\n * Set of free ``openhands/<model>`` ids, sourced from the backend model list\n * (DB-driven on cloud via the `free` flag). Returns an empty set on backends\n * without free metadata (e.g. the local agent-server), so callers uniformly\n * treat \"not in set\" as paid and the frontend keeps no hardcoded free list.\n */\nexport const useFreeModels = (): FreeModelSet =>\n useFreeModelsStore((state) => state.freeModels);\n\n/**\n * DB-driven default OpenHands model id (``openhands/<model>``), used to\n * preselect a model on onboarding and when creating a new OpenHands model.\n * Returns `null` on backends without default metadata.\n */\nexport const useDefaultModel = (): string | null =>\n useFreeModelsStore((state) => state.defaultModel);\n\nexport const useDefaultModelReady = (): boolean =>\n useFreeModelsStore((state) => state.defaultModelReady);\n"],"mappings":";;;;;;;AAkBA,IAAM,IAAqB,aACrB,IAAgC,KAChC,IAAuB;AAE7B,eAAe,EACb,GACA,GACA,GACA,GACqB;CACrB,IAAI,KAAS,GACX,MAAU,MACR,uEAAuE,EAAM,EAC/E;CAGF,IAAM,IAAO,MAAM,EAAc,aAC/B;EACE,cAAc;EACd,OAAO;EACP,GAAI,IAAS,EAAE,SAAS,EAAO,IAAI,CAAC;CACtC,GACA,CACF;CAEA,IAAI,CAAC,EAAK,cACR,OAAO,EAAK;CAGd,IAAI,EAAY,IAAI,EAAK,YAAY,GACnC,MAAU,MACR,qDAAqD,EAAK,cAC5D;CAEF,EAAY,IAAI,EAAK,YAAY;CAEjC,IAAM,IAAO,MAAM,EACjB,GACA,EAAK,cACL,GACA,IAAQ,CACV;CACA,OAAO,CAAC,GAAG,EAAK,OAAO,GAAG,CAAI;AAChC;AAMA,IAAM,UAA2B;CAC/B,IAAM,EAAE,YAAS,aAAU,EAAiB,GACtC,IAAe;EACnB,EAAQ;EACR,EAAQ,sBAAsB;EAC9B;CACF;CAEA,OAAO,EAAS;EACd,UAAU;GACR;GACA;GACA;GACA;GACA,GAAG;EACL;EACA,SAAS,OAAO,EAAE,gBAMT,EAAwB,MALE,EAAO,WAAW;GACjD,UAAU,CAAC,GAAG,GAA2B,GAAG,CAAY;GACxD,SAAS;GACT,WAAW;EACb,CAAC,GACkD,sBAAM,IAAI,IAAI,GAAG,CAAC;EAEvE,WAAW;EACX,QAAQ;CACV,CAAC;AACH,GASa,UAAmC;CAC9C,IAAM,EAAE,YAAS,aAAU,EAAiB,GACtC,EAAE,SAAM,eAAY,EAAmB,GACvC,IAAW,GAAoB,MAAU,EAAM,QAAQ,GACvD,IAAwB,GAC3B,MAAU,EAAM,qBACnB,GACM,IAAa,GAAoB,MAAU,EAAM,UAAU;CAsBjE,AApBA,EAAM,gBAAgB;EACpB,EAAW;CACb,GAAG;EAAC,EAAQ;EAAI,EAAQ;EAAoB;EAAO;CAAU,CAAC,GAE9D,EAAM,gBAAgB;EACpB,IAAI,CAAC,GAAM;EACX,IAAM,IAAa,IAAI,IACrB,EACG,QAAQ,MAAU,EAAM,IAAI,EAC5B,KAAK,MAAU,GAAG,EAAmB,GAAG,EAAM,MAAM,CACzD,GACM,IAAe,EAAK,MAAM,MAAU,EAAM,OAAO;EACvD,EAAS;GACP;GACA,cAAc,IACV,GAAG,EAAmB,GAAG,EAAa,SACtC;EACN,CAAC;CACH,GAAG,CAAC,GAAM,CAAQ,CAAC,GAEnB,EAAM,gBAAgB;EACpB,AAAI,KAAS,EAAsB;CACrC,GAAG,CAAC,GAAS,CAAqB,CAAC;AACrC,GAQa,UACX,GAAoB,MAAU,EAAM,UAAU,GAOnC,UACX,GAAoB,MAAU,EAAM,YAAY"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-local-git-info.cjs","names":[],"sources":["../../../src/hooks/query/use-local-git-info.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useRef } from \"react\";\n\nimport type { CommandResult } from \"#/api/runtime-service/agent-server-runtime-service\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useActiveConversation } from \"#/hooks/query/use-active-conversation\";\nimport { useRuntimeIsReady } from \"#/hooks/use-runtime-is-ready\";\nimport { useBashCommandRunner } from \"#/hooks/use-bash-command-runner\";\nimport { Provider } from \"#/types/settings\";\nimport { parseGitRemoteUrl } from \"#/utils/parse-git-remote-url\";\n\nexport interface LocalGitInfo {\n repository: string | null;\n branch: string | null;\n provider: Provider | null;\n remoteUrl: string | null;\n}\n\nconst EMPTY_LOCAL_GIT_INFO: LocalGitInfo = {\n repository: null,\n branch: null,\n provider: null,\n remoteUrl: null,\n};\n\ntype RunCommand = (\n command: string,\n cwd: string,\n timeout: number,\n) => Promise<CommandResult>;\n\n// Single shell script that replaces the former probeGitInfoAtDir +\n// probeNestedRepoInDir pair. It runs as one bash WebSocket round-trip:\n// 1. Read the origin remote URL and current branch at the workspace root.\n// 2. If neither is set, search for exactly one nested git repo up to 4\n// levels deep and repeat the probe there.\n// Output: two lines — <remote-url>\\n<branch> — either may be empty.\nconst GIT_INFO_COMMAND = [\n \"r=$(git remote get-url origin 2>/dev/null)\",\n \"b=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)\",\n 'if [ -z \"$r$b\" ]; then',\n \"n=$(find . -mindepth 2 -maxdepth 4 -name .git 2>/dev/null | cut -c3- | sed 's|/.git$||' | sort -u)\",\n \"c=$(printf '%s\\\\n' \\\"$n\\\" | grep -c '[^[:space:]]')\",\n 'if [ \"$c\" = \"1\" ] && [ -n \"$n\" ]; then',\n 'r=$(git -C \"$n\" remote get-url origin 2>/dev/null)',\n 'b=$(git -C \"$n\" rev-parse --abbrev-ref HEAD 2>/dev/null)',\n \"fi\",\n \"fi\",\n 'printf \\'%s\\\\n%s\\' \"$r\" \"$b\"',\n].join(\"\\n\");\n\nasync function probeGitInfo(\n run: RunCommand,\n directory: string,\n): Promise<LocalGitInfo> {\n const result = await run(GIT_INFO_COMMAND, directory, 10);\n if (result.exit_code !== 0) return EMPTY_LOCAL_GIT_INFO;\n\n const nl = result.stdout.indexOf(\"\\n\");\n const remoteUrl = (\n nl >= 0 ? result.stdout.slice(0, nl) : result.stdout\n ).trim();\n const rawBranch = (nl >= 0 ? result.stdout.slice(nl + 1) : \"\").trim();\n const branch = rawBranch && rawBranch !== \"HEAD\" ? rawBranch : null;\n\n if (!remoteUrl && !branch) return EMPTY_LOCAL_GIT_INFO;\n\n const parsedRemote = parseGitRemoteUrl(remoteUrl);\n return {\n repository: parsedRemote?.repository ?? null,\n provider: parsedRemote?.provider ?? null,\n remoteUrl: remoteUrl || null,\n branch,\n };\n}\n\n/**\n * Probe git metadata for a **local** backend's workspace checkout by\n * shelling out via the agent server using a single consolidated bash\n * script (see `GIT_INFO_COMMAND`).\n *\n * Local-only by design. On cloud backends the conversation metadata\n * (`selected_repository`, `git_provider`, `selected_branch`) is the\n * source of truth, and probing via `/api/bash/execute_bash_command`\n * would (a) leak the user's local `getAgentServerWorkingDir()` path to\n * the cloud runtime when `workspace.working_dir` is missing, and\n * (b) hit a bash endpoint we don't want the frontend driving on cloud.\n *\n * On local, we keep the probe enabled until the active conversation\n * has a complete repo tuple so the control bar can recover from\n * partial metadata hydration after connect/clone flows.\n *\n * Returns `null` fields when the working dir is not a git checkout —\n * callers should treat that the same as \"no repo detected\".\n */\nexport const useLocalGitInfo = () => {\n const { data: conversation } = useActiveConversation();\n const runtimeIsReady = useRuntimeIsReady();\n const { backend } = useActiveBackend();\n const isLocalBackend = backend.kind === \"local\";\n\n const conversationId = conversation?.id;\n const conversationUrl = conversation?.conversation_url;\n const sessionApiKey = conversation?.session_api_key;\n const workingDir = conversation?.workspace?.working_dir?.trim();\n const hasConversationRepo = !!conversation?.selected_repository;\n const hasConversationProvider = !!conversation?.git_provider;\n const hasConversationBranch = !!conversation?.selected_branch;\n\n const queryEnabled =\n isLocalBackend &&\n runtimeIsReady &&\n !!conversationId &&\n !!workingDir &&\n (!hasConversationRepo ||\n !hasConversationProvider ||\n !hasConversationBranch);\n\n // Persistent WebSocket connection to the bash-events endpoint. The\n // connection is opened when the query is enabled and closed on unmount or\n // when the conversation changes.\n const runCommand = useBashCommandRunner(\n conversationUrl,\n sessionApiKey,\n queryEnabled,\n );\n\n // Keep a ref so queryFn can call the latest runner without capturing it\n // as a queryKey dependency (runCommand is stable but the linter can't\n // infer that).\n const runCommandRef = useRef(runCommand);\n runCommandRef.current = runCommand;\n\n // runCommandRef is a ref (always stable); the linter cannot infer this so\n // we disable the exhaustive-deps check here.\n
|
|
1
|
+
{"version":3,"file":"use-local-git-info.cjs","names":[],"sources":["../../../src/hooks/query/use-local-git-info.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useRef } from \"react\";\n\nimport type { CommandResult } from \"#/api/runtime-service/agent-server-runtime-service\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useActiveConversation } from \"#/hooks/query/use-active-conversation\";\nimport { useRuntimeIsReady } from \"#/hooks/use-runtime-is-ready\";\nimport { useBashCommandRunner } from \"#/hooks/use-bash-command-runner\";\nimport { Provider } from \"#/types/settings\";\nimport { parseGitRemoteUrl } from \"#/utils/parse-git-remote-url\";\n\nexport interface LocalGitInfo {\n repository: string | null;\n branch: string | null;\n provider: Provider | null;\n remoteUrl: string | null;\n}\n\nconst EMPTY_LOCAL_GIT_INFO: LocalGitInfo = {\n repository: null,\n branch: null,\n provider: null,\n remoteUrl: null,\n};\n\ntype RunCommand = (\n command: string,\n cwd: string,\n timeout: number,\n) => Promise<CommandResult>;\n\n// Single shell script that replaces the former probeGitInfoAtDir +\n// probeNestedRepoInDir pair. It runs as one bash WebSocket round-trip:\n// 1. Read the origin remote URL and current branch at the workspace root.\n// 2. If neither is set, search for exactly one nested git repo up to 4\n// levels deep and repeat the probe there.\n// Output: two lines — <remote-url>\\n<branch> — either may be empty.\nconst GIT_INFO_COMMAND = [\n \"r=$(git remote get-url origin 2>/dev/null)\",\n \"b=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)\",\n 'if [ -z \"$r$b\" ]; then',\n \"n=$(find . -mindepth 2 -maxdepth 4 -name .git 2>/dev/null | cut -c3- | sed 's|/.git$||' | sort -u)\",\n \"c=$(printf '%s\\\\n' \\\"$n\\\" | grep -c '[^[:space:]]')\",\n 'if [ \"$c\" = \"1\" ] && [ -n \"$n\" ]; then',\n 'r=$(git -C \"$n\" remote get-url origin 2>/dev/null)',\n 'b=$(git -C \"$n\" rev-parse --abbrev-ref HEAD 2>/dev/null)',\n \"fi\",\n \"fi\",\n 'printf \\'%s\\\\n%s\\' \"$r\" \"$b\"',\n].join(\"\\n\");\n\nasync function probeGitInfo(\n run: RunCommand,\n directory: string,\n): Promise<LocalGitInfo> {\n const result = await run(GIT_INFO_COMMAND, directory, 10);\n if (result.exit_code !== 0) return EMPTY_LOCAL_GIT_INFO;\n\n const nl = result.stdout.indexOf(\"\\n\");\n const remoteUrl = (\n nl >= 0 ? result.stdout.slice(0, nl) : result.stdout\n ).trim();\n const rawBranch = (nl >= 0 ? result.stdout.slice(nl + 1) : \"\").trim();\n const branch = rawBranch && rawBranch !== \"HEAD\" ? rawBranch : null;\n\n if (!remoteUrl && !branch) return EMPTY_LOCAL_GIT_INFO;\n\n const parsedRemote = parseGitRemoteUrl(remoteUrl);\n return {\n repository: parsedRemote?.repository ?? null,\n provider: parsedRemote?.provider ?? null,\n remoteUrl: remoteUrl || null,\n branch,\n };\n}\n\n/**\n * Probe git metadata for a **local** backend's workspace checkout by\n * shelling out via the agent server using a single consolidated bash\n * script (see `GIT_INFO_COMMAND`).\n *\n * Local-only by design. On cloud backends the conversation metadata\n * (`selected_repository`, `git_provider`, `selected_branch`) is the\n * source of truth, and probing via `/api/bash/execute_bash_command`\n * would (a) leak the user's local `getAgentServerWorkingDir()` path to\n * the cloud runtime when `workspace.working_dir` is missing, and\n * (b) hit a bash endpoint we don't want the frontend driving on cloud.\n *\n * On local, we keep the probe enabled until the active conversation\n * has a complete repo tuple so the control bar can recover from\n * partial metadata hydration after connect/clone flows.\n *\n * Returns `null` fields when the working dir is not a git checkout —\n * callers should treat that the same as \"no repo detected\".\n */\nexport const useLocalGitInfo = () => {\n const { data: conversation } = useActiveConversation();\n const runtimeIsReady = useRuntimeIsReady();\n const { backend } = useActiveBackend();\n const isLocalBackend = backend.kind === \"local\";\n\n const conversationId = conversation?.id;\n const conversationUrl = conversation?.conversation_url;\n const sessionApiKey = conversation?.session_api_key;\n const workingDir = conversation?.workspace?.working_dir?.trim();\n const hasConversationRepo = !!conversation?.selected_repository;\n const hasConversationProvider = !!conversation?.git_provider;\n const hasConversationBranch = !!conversation?.selected_branch;\n\n const queryEnabled =\n isLocalBackend &&\n runtimeIsReady &&\n !!conversationId &&\n !!workingDir &&\n (!hasConversationRepo ||\n !hasConversationProvider ||\n !hasConversationBranch);\n\n // Persistent WebSocket connection to the bash-events endpoint. The\n // connection is opened when the query is enabled and closed on unmount or\n // when the conversation changes.\n const runCommand = useBashCommandRunner(\n conversationUrl,\n sessionApiKey,\n queryEnabled,\n );\n\n // Keep a ref so queryFn can call the latest runner without capturing it\n // as a queryKey dependency (runCommand is stable but the linter can't\n // infer that).\n const runCommandRef = useRef(runCommand);\n runCommandRef.current = runCommand;\n\n // runCommandRef is a ref (always stable); the linter cannot infer this so\n // we disable the exhaustive-deps check here.\n\n return useQuery<LocalGitInfo>({\n queryKey: [\n \"local-git-info\",\n conversationId,\n conversationUrl,\n sessionApiKey,\n workingDir,\n ],\n queryFn: async () => {\n const run: RunCommand = (command, cwd, timeout) =>\n runCommandRef.current(command, cwd, timeout);\n // workingDir is guaranteed non-empty by the queryEnabled guard above.\n return probeGitInfo(run, workingDir!);\n },\n enabled: queryEnabled,\n retry: false,\n // Re-probe the workspace every 10s so the UI reflects branch/repo\n // changes (e.g. `git checkout`, adding a remote) without requiring a\n // manual refresh when there is no `selected_repository` recorded on\n // the conversation. Commands now run over the persistent WebSocket\n // connection rather than individual REST calls.\n staleTime: 10_000,\n refetchInterval: 10_000,\n gcTime: 1000 * 60 * 5,\n meta: { disableToast: true },\n });\n};\n"],"mappings":"sYAkBA,IAAM,EAAqC,CACzC,WAAY,KACZ,OAAQ,KACR,SAAU,KACV,UAAW,IACb,EAcM,EAAmB,CACvB,6CACA,mDACA,yBACA,qGACA,oDACA,yCACA,qDACA,2DACA,KACA,KACA,4BACF,EAAE,KAAK;CAAI,EAEX,eAAe,EACb,EACA,EACuB,CACvB,IAAM,EAAS,MAAM,EAAI,EAAkB,EAAW,EAAE,EACxD,GAAI,EAAO,YAAc,EAAG,OAAO,EAEnC,IAAM,EAAK,EAAO,OAAO,QAAQ;CAAI,EAC/B,GACJ,GAAM,EAAI,EAAO,OAAO,MAAM,EAAG,CAAE,EAAI,EAAO,QAC9C,KAAK,EACD,GAAa,GAAM,EAAI,EAAO,OAAO,MAAM,EAAK,CAAC,EAAI,IAAI,KAAK,EAC9D,EAAS,GAAa,IAAc,OAAS,EAAY,KAE/D,GAAI,CAAC,GAAa,CAAC,EAAQ,OAAO,EAElC,IAAM,EAAe,EAAA,kBAAkB,CAAS,EAChD,MAAO,CACL,WAAY,GAAc,YAAc,KACxC,SAAU,GAAc,UAAY,KACpC,UAAW,GAAa,KACxB,QACF,CACF,CAqBA,IAAa,MAAwB,CACnC,GAAM,CAAE,KAAM,GAAiB,EAAA,sBAAsB,EAC/C,EAAiB,EAAA,kBAAkB,EACnC,CAAE,WAAY,EAAA,iBAAiB,EAC/B,EAAiB,EAAQ,OAAS,QAElC,EAAiB,GAAc,GAC/B,EAAkB,GAAc,iBAChC,EAAgB,GAAc,gBAC9B,EAAa,GAAc,WAAW,aAAa,KAAK,EACxD,EAAsB,CAAC,CAAC,GAAc,oBACtC,EAA0B,CAAC,CAAC,GAAc,aAC1C,EAAwB,CAAC,CAAC,GAAc,gBAExC,EACJ,GACA,GACA,CAAC,CAAC,GACF,CAAC,CAAC,IACD,CAAC,GACA,CAAC,GACD,CAAC,GAKC,EAAa,EAAA,qBACjB,EACA,EACA,CACF,EAKM,GAAA,EAAA,EAAA,QAAuB,CAAU,EAMvC,MALA,GAAc,QAAU,EAKjB,EAAA,SAAuB,CAC5B,SAAU,CACR,iBACA,EACA,EACA,EACA,CACF,EACA,QAAS,SAIA,GAHkB,EAAS,EAAK,IACrC,EAAc,QAAQ,EAAS,EAAK,CAAO,EAEpB,CAAW,EAEtC,QAAS,EACT,MAAO,GAMP,UAAW,IACX,gBAAiB,IACjB,OAAQ,IAAO,GAAK,EACpB,KAAM,CAAE,aAAc,EAAK,CAC7B,CAAC,CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-local-git-info.js","names":[],"sources":["../../../src/hooks/query/use-local-git-info.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useRef } from \"react\";\n\nimport type { CommandResult } from \"#/api/runtime-service/agent-server-runtime-service\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useActiveConversation } from \"#/hooks/query/use-active-conversation\";\nimport { useRuntimeIsReady } from \"#/hooks/use-runtime-is-ready\";\nimport { useBashCommandRunner } from \"#/hooks/use-bash-command-runner\";\nimport { Provider } from \"#/types/settings\";\nimport { parseGitRemoteUrl } from \"#/utils/parse-git-remote-url\";\n\nexport interface LocalGitInfo {\n repository: string | null;\n branch: string | null;\n provider: Provider | null;\n remoteUrl: string | null;\n}\n\nconst EMPTY_LOCAL_GIT_INFO: LocalGitInfo = {\n repository: null,\n branch: null,\n provider: null,\n remoteUrl: null,\n};\n\ntype RunCommand = (\n command: string,\n cwd: string,\n timeout: number,\n) => Promise<CommandResult>;\n\n// Single shell script that replaces the former probeGitInfoAtDir +\n// probeNestedRepoInDir pair. It runs as one bash WebSocket round-trip:\n// 1. Read the origin remote URL and current branch at the workspace root.\n// 2. If neither is set, search for exactly one nested git repo up to 4\n// levels deep and repeat the probe there.\n// Output: two lines — <remote-url>\\n<branch> — either may be empty.\nconst GIT_INFO_COMMAND = [\n \"r=$(git remote get-url origin 2>/dev/null)\",\n \"b=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)\",\n 'if [ -z \"$r$b\" ]; then',\n \"n=$(find . -mindepth 2 -maxdepth 4 -name .git 2>/dev/null | cut -c3- | sed 's|/.git$||' | sort -u)\",\n \"c=$(printf '%s\\\\n' \\\"$n\\\" | grep -c '[^[:space:]]')\",\n 'if [ \"$c\" = \"1\" ] && [ -n \"$n\" ]; then',\n 'r=$(git -C \"$n\" remote get-url origin 2>/dev/null)',\n 'b=$(git -C \"$n\" rev-parse --abbrev-ref HEAD 2>/dev/null)',\n \"fi\",\n \"fi\",\n 'printf \\'%s\\\\n%s\\' \"$r\" \"$b\"',\n].join(\"\\n\");\n\nasync function probeGitInfo(\n run: RunCommand,\n directory: string,\n): Promise<LocalGitInfo> {\n const result = await run(GIT_INFO_COMMAND, directory, 10);\n if (result.exit_code !== 0) return EMPTY_LOCAL_GIT_INFO;\n\n const nl = result.stdout.indexOf(\"\\n\");\n const remoteUrl = (\n nl >= 0 ? result.stdout.slice(0, nl) : result.stdout\n ).trim();\n const rawBranch = (nl >= 0 ? result.stdout.slice(nl + 1) : \"\").trim();\n const branch = rawBranch && rawBranch !== \"HEAD\" ? rawBranch : null;\n\n if (!remoteUrl && !branch) return EMPTY_LOCAL_GIT_INFO;\n\n const parsedRemote = parseGitRemoteUrl(remoteUrl);\n return {\n repository: parsedRemote?.repository ?? null,\n provider: parsedRemote?.provider ?? null,\n remoteUrl: remoteUrl || null,\n branch,\n };\n}\n\n/**\n * Probe git metadata for a **local** backend's workspace checkout by\n * shelling out via the agent server using a single consolidated bash\n * script (see `GIT_INFO_COMMAND`).\n *\n * Local-only by design. On cloud backends the conversation metadata\n * (`selected_repository`, `git_provider`, `selected_branch`) is the\n * source of truth, and probing via `/api/bash/execute_bash_command`\n * would (a) leak the user's local `getAgentServerWorkingDir()` path to\n * the cloud runtime when `workspace.working_dir` is missing, and\n * (b) hit a bash endpoint we don't want the frontend driving on cloud.\n *\n * On local, we keep the probe enabled until the active conversation\n * has a complete repo tuple so the control bar can recover from\n * partial metadata hydration after connect/clone flows.\n *\n * Returns `null` fields when the working dir is not a git checkout —\n * callers should treat that the same as \"no repo detected\".\n */\nexport const useLocalGitInfo = () => {\n const { data: conversation } = useActiveConversation();\n const runtimeIsReady = useRuntimeIsReady();\n const { backend } = useActiveBackend();\n const isLocalBackend = backend.kind === \"local\";\n\n const conversationId = conversation?.id;\n const conversationUrl = conversation?.conversation_url;\n const sessionApiKey = conversation?.session_api_key;\n const workingDir = conversation?.workspace?.working_dir?.trim();\n const hasConversationRepo = !!conversation?.selected_repository;\n const hasConversationProvider = !!conversation?.git_provider;\n const hasConversationBranch = !!conversation?.selected_branch;\n\n const queryEnabled =\n isLocalBackend &&\n runtimeIsReady &&\n !!conversationId &&\n !!workingDir &&\n (!hasConversationRepo ||\n !hasConversationProvider ||\n !hasConversationBranch);\n\n // Persistent WebSocket connection to the bash-events endpoint. The\n // connection is opened when the query is enabled and closed on unmount or\n // when the conversation changes.\n const runCommand = useBashCommandRunner(\n conversationUrl,\n sessionApiKey,\n queryEnabled,\n );\n\n // Keep a ref so queryFn can call the latest runner without capturing it\n // as a queryKey dependency (runCommand is stable but the linter can't\n // infer that).\n const runCommandRef = useRef(runCommand);\n runCommandRef.current = runCommand;\n\n // runCommandRef is a ref (always stable); the linter cannot infer this so\n // we disable the exhaustive-deps check here.\n
|
|
1
|
+
{"version":3,"file":"use-local-git-info.js","names":[],"sources":["../../../src/hooks/query/use-local-git-info.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useRef } from \"react\";\n\nimport type { CommandResult } from \"#/api/runtime-service/agent-server-runtime-service\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useActiveConversation } from \"#/hooks/query/use-active-conversation\";\nimport { useRuntimeIsReady } from \"#/hooks/use-runtime-is-ready\";\nimport { useBashCommandRunner } from \"#/hooks/use-bash-command-runner\";\nimport { Provider } from \"#/types/settings\";\nimport { parseGitRemoteUrl } from \"#/utils/parse-git-remote-url\";\n\nexport interface LocalGitInfo {\n repository: string | null;\n branch: string | null;\n provider: Provider | null;\n remoteUrl: string | null;\n}\n\nconst EMPTY_LOCAL_GIT_INFO: LocalGitInfo = {\n repository: null,\n branch: null,\n provider: null,\n remoteUrl: null,\n};\n\ntype RunCommand = (\n command: string,\n cwd: string,\n timeout: number,\n) => Promise<CommandResult>;\n\n// Single shell script that replaces the former probeGitInfoAtDir +\n// probeNestedRepoInDir pair. It runs as one bash WebSocket round-trip:\n// 1. Read the origin remote URL and current branch at the workspace root.\n// 2. If neither is set, search for exactly one nested git repo up to 4\n// levels deep and repeat the probe there.\n// Output: two lines — <remote-url>\\n<branch> — either may be empty.\nconst GIT_INFO_COMMAND = [\n \"r=$(git remote get-url origin 2>/dev/null)\",\n \"b=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)\",\n 'if [ -z \"$r$b\" ]; then',\n \"n=$(find . -mindepth 2 -maxdepth 4 -name .git 2>/dev/null | cut -c3- | sed 's|/.git$||' | sort -u)\",\n \"c=$(printf '%s\\\\n' \\\"$n\\\" | grep -c '[^[:space:]]')\",\n 'if [ \"$c\" = \"1\" ] && [ -n \"$n\" ]; then',\n 'r=$(git -C \"$n\" remote get-url origin 2>/dev/null)',\n 'b=$(git -C \"$n\" rev-parse --abbrev-ref HEAD 2>/dev/null)',\n \"fi\",\n \"fi\",\n 'printf \\'%s\\\\n%s\\' \"$r\" \"$b\"',\n].join(\"\\n\");\n\nasync function probeGitInfo(\n run: RunCommand,\n directory: string,\n): Promise<LocalGitInfo> {\n const result = await run(GIT_INFO_COMMAND, directory, 10);\n if (result.exit_code !== 0) return EMPTY_LOCAL_GIT_INFO;\n\n const nl = result.stdout.indexOf(\"\\n\");\n const remoteUrl = (\n nl >= 0 ? result.stdout.slice(0, nl) : result.stdout\n ).trim();\n const rawBranch = (nl >= 0 ? result.stdout.slice(nl + 1) : \"\").trim();\n const branch = rawBranch && rawBranch !== \"HEAD\" ? rawBranch : null;\n\n if (!remoteUrl && !branch) return EMPTY_LOCAL_GIT_INFO;\n\n const parsedRemote = parseGitRemoteUrl(remoteUrl);\n return {\n repository: parsedRemote?.repository ?? null,\n provider: parsedRemote?.provider ?? null,\n remoteUrl: remoteUrl || null,\n branch,\n };\n}\n\n/**\n * Probe git metadata for a **local** backend's workspace checkout by\n * shelling out via the agent server using a single consolidated bash\n * script (see `GIT_INFO_COMMAND`).\n *\n * Local-only by design. On cloud backends the conversation metadata\n * (`selected_repository`, `git_provider`, `selected_branch`) is the\n * source of truth, and probing via `/api/bash/execute_bash_command`\n * would (a) leak the user's local `getAgentServerWorkingDir()` path to\n * the cloud runtime when `workspace.working_dir` is missing, and\n * (b) hit a bash endpoint we don't want the frontend driving on cloud.\n *\n * On local, we keep the probe enabled until the active conversation\n * has a complete repo tuple so the control bar can recover from\n * partial metadata hydration after connect/clone flows.\n *\n * Returns `null` fields when the working dir is not a git checkout —\n * callers should treat that the same as \"no repo detected\".\n */\nexport const useLocalGitInfo = () => {\n const { data: conversation } = useActiveConversation();\n const runtimeIsReady = useRuntimeIsReady();\n const { backend } = useActiveBackend();\n const isLocalBackend = backend.kind === \"local\";\n\n const conversationId = conversation?.id;\n const conversationUrl = conversation?.conversation_url;\n const sessionApiKey = conversation?.session_api_key;\n const workingDir = conversation?.workspace?.working_dir?.trim();\n const hasConversationRepo = !!conversation?.selected_repository;\n const hasConversationProvider = !!conversation?.git_provider;\n const hasConversationBranch = !!conversation?.selected_branch;\n\n const queryEnabled =\n isLocalBackend &&\n runtimeIsReady &&\n !!conversationId &&\n !!workingDir &&\n (!hasConversationRepo ||\n !hasConversationProvider ||\n !hasConversationBranch);\n\n // Persistent WebSocket connection to the bash-events endpoint. The\n // connection is opened when the query is enabled and closed on unmount or\n // when the conversation changes.\n const runCommand = useBashCommandRunner(\n conversationUrl,\n sessionApiKey,\n queryEnabled,\n );\n\n // Keep a ref so queryFn can call the latest runner without capturing it\n // as a queryKey dependency (runCommand is stable but the linter can't\n // infer that).\n const runCommandRef = useRef(runCommand);\n runCommandRef.current = runCommand;\n\n // runCommandRef is a ref (always stable); the linter cannot infer this so\n // we disable the exhaustive-deps check here.\n\n return useQuery<LocalGitInfo>({\n queryKey: [\n \"local-git-info\",\n conversationId,\n conversationUrl,\n sessionApiKey,\n workingDir,\n ],\n queryFn: async () => {\n const run: RunCommand = (command, cwd, timeout) =>\n runCommandRef.current(command, cwd, timeout);\n // workingDir is guaranteed non-empty by the queryEnabled guard above.\n return probeGitInfo(run, workingDir!);\n },\n enabled: queryEnabled,\n retry: false,\n // Re-probe the workspace every 10s so the UI reflects branch/repo\n // changes (e.g. `git checkout`, adding a remote) without requiring a\n // manual refresh when there is no `selected_repository` recorded on\n // the conversation. Commands now run over the persistent WebSocket\n // connection rather than individual REST calls.\n staleTime: 10_000,\n refetchInterval: 10_000,\n gcTime: 1000 * 60 * 5,\n meta: { disableToast: true },\n });\n};\n"],"mappings":";;;;;;;;AAkBA,IAAM,IAAqC;CACzC,YAAY;CACZ,QAAQ;CACR,UAAU;CACV,WAAW;AACb,GAcM,IAAmB;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,EAAE,KAAK,IAAI;AAEX,eAAe,EACb,GACA,GACuB;CACvB,IAAM,IAAS,MAAM,EAAI,GAAkB,GAAW,EAAE;CACxD,IAAI,EAAO,cAAc,GAAG,OAAO;CAEnC,IAAM,IAAK,EAAO,OAAO,QAAQ,IAAI,GAC/B,KACJ,KAAM,IAAI,EAAO,OAAO,MAAM,GAAG,CAAE,IAAI,EAAO,QAC9C,KAAK,GACD,KAAa,KAAM,IAAI,EAAO,OAAO,MAAM,IAAK,CAAC,IAAI,IAAI,KAAK,GAC9D,IAAS,KAAa,MAAc,SAAS,IAAY;CAE/D,IAAI,CAAC,KAAa,CAAC,GAAQ,OAAO;CAElC,IAAM,IAAe,EAAkB,CAAS;CAChD,OAAO;EACL,YAAY,GAAc,cAAc;EACxC,UAAU,GAAc,YAAY;EACpC,WAAW,KAAa;EACxB;CACF;AACF;AAqBA,IAAa,UAAwB;CACnC,IAAM,EAAE,MAAM,MAAiB,EAAsB,GAC/C,IAAiB,EAAkB,GACnC,EAAE,eAAY,EAAiB,GAC/B,IAAiB,EAAQ,SAAS,SAElC,IAAiB,GAAc,IAC/B,IAAkB,GAAc,kBAChC,IAAgB,GAAc,iBAC9B,IAAa,GAAc,WAAW,aAAa,KAAK,GACxD,IAAsB,CAAC,CAAC,GAAc,qBACtC,IAA0B,CAAC,CAAC,GAAc,cAC1C,IAAwB,CAAC,CAAC,GAAc,iBAExC,IACJ,KACA,KACA,CAAC,CAAC,KACF,CAAC,CAAC,MACD,CAAC,KACA,CAAC,KACD,CAAC,IAKC,IAAa,EACjB,GACA,GACA,CACF,GAKM,IAAgB,EAAO,CAAU;CAMvC,OALA,EAAc,UAAU,GAKjB,EAAuB;EAC5B,UAAU;GACR;GACA;GACA;GACA;GACA;EACF;EACA,SAAS,YAIA,GAHkB,GAAS,GAAK,MACrC,EAAc,QAAQ,GAAS,GAAK,CAAO,GAEpB,CAAW;EAEtC,SAAS;EACT,OAAO;EAMP,WAAW;EACX,iBAAiB;EACjB,QAAQ,MAAO,KAAK;EACpB,MAAM,EAAE,cAAc,GAAK;CAC7B,CAAC;AACH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../../_virtual/_rolldown/runtime.cjs");const e=require("./query-keys.cjs"),t=require("../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs"),n=require("../../contexts/active-backend-context.cjs"),r=require("../../api/provider-connections-service/provider-connections-service.api.cjs");function i(){let{backend:i}=n.useActiveBackend(),
|
|
1
|
+
require("../../_virtual/_rolldown/runtime.cjs");const e=require("./query-keys.cjs"),t=require("../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs"),n=require("../../contexts/active-backend-context.cjs"),r=require("../../api/provider-connections-service/provider-connections-service.api.cjs");function i(){let{backend:i,orgId:a}=n.useActiveBackend(),o=i.kind===`local`,s=i.kind===`cloud`&&!!a,c=o||s;return t.useQuery({queryKey:[...e.PROVIDER_CONNECTIONS_QUERY_KEYS.all,i.id,a],queryFn:r.default.list,...e.CONFIG_CACHE_OPTIONS,enabled:c,meta:{disableToast:!0}})}exports.useProviderConnections=i;
|
|
2
2
|
//# sourceMappingURL=use-provider-connections.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-provider-connections.cjs","names":[],"sources":["../../../src/hooks/query/use-provider-connections.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport ProviderConnectionsService from \"#/api/provider-connections-service/provider-connections-service.api\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n CONFIG_CACHE_OPTIONS,\n PROVIDER_CONNECTIONS_QUERY_KEYS,\n} from \"./query-keys\";\n\nexport { PROVIDER_CONNECTIONS_QUERY_KEYS };\n\n/**\n * Provider connections
|
|
1
|
+
{"version":3,"file":"use-provider-connections.cjs","names":[],"sources":["../../../src/hooks/query/use-provider-connections.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport ProviderConnectionsService from \"#/api/provider-connections-service/provider-connections-service.api\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n CONFIG_CACHE_OPTIONS,\n PROVIDER_CONNECTIONS_QUERY_KEYS,\n} from \"./query-keys\";\n\nexport { PROVIDER_CONNECTIONS_QUERY_KEYS };\n\n/**\n * Provider connections are available on the local agent-server\n * (`/api/llm/provider-connections`) and on cloud when an org is bound\n * (`/api/organizations/{orgId}/provider-connections`). The query is disabled\n * only for a cloud backend without an org (legacy API keys), where the\n * org-scoped route cannot be addressed — there it returns no data so the\n * connections UI hides itself rather than firing an unaddressable request.\n */\nexport function useProviderConnections() {\n const { backend, orgId } = useActiveBackend();\n const isLocal = backend.kind === \"local\";\n const isCloudWithOrg = backend.kind === \"cloud\" && !!orgId;\n const enabled = isLocal || isCloudWithOrg;\n\n return useQuery({\n queryKey: [...PROVIDER_CONNECTIONS_QUERY_KEYS.all, backend.id, orgId],\n queryFn: ProviderConnectionsService.list,\n ...CONFIG_CACHE_OPTIONS,\n enabled,\n meta: { disableToast: true },\n });\n}\n"],"mappings":"oTAkBA,SAAgB,GAAyB,CACvC,GAAM,CAAE,UAAS,SAAU,EAAA,iBAAiB,EACtC,EAAU,EAAQ,OAAS,QAC3B,EAAiB,EAAQ,OAAS,SAAW,CAAC,CAAC,EAC/C,EAAU,GAAW,EAE3B,OAAO,EAAA,SAAS,CACd,SAAU,CAAC,GAAG,EAAA,gCAAgC,IAAK,EAAQ,GAAI,CAAK,EACpE,QAAS,EAAA,QAA2B,KACpC,GAAG,EAAA,qBACH,UACA,KAAM,CAAE,aAAc,EAAK,CAC7B,CAAC,CACH"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { PROVIDER_CONNECTIONS_QUERY_KEYS } from "./query-keys";
|
|
2
2
|
export { PROVIDER_CONNECTIONS_QUERY_KEYS };
|
|
3
3
|
/**
|
|
4
|
-
* Provider connections
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Provider connections are available on the local agent-server
|
|
5
|
+
* (`/api/llm/provider-connections`) and on cloud when an org is bound
|
|
6
|
+
* (`/api/organizations/{orgId}/provider-connections`). The query is disabled
|
|
7
|
+
* only for a cloud backend without an org (legacy API keys), where the
|
|
8
|
+
* org-scoped route cannot be addressed — there it returns no data so the
|
|
9
|
+
* connections UI hides itself rather than firing an unaddressable request.
|
|
7
10
|
*/
|
|
8
11
|
export declare function useProviderConnections(): import("@tanstack/react-query").UseQueryResult<NoInfer<import("#/api/provider-connections-service/provider-connections-service.api").ProviderConnection[]>, import("axios").AxiosError<unknown, any>>;
|
|
@@ -4,12 +4,16 @@ import { useActiveBackend as r } from "../../contexts/active-backend-context.js"
|
|
|
4
4
|
import i from "../../api/provider-connections-service/provider-connections-service.api.js";
|
|
5
5
|
//#region src/hooks/query/use-provider-connections.ts
|
|
6
6
|
function a() {
|
|
7
|
-
let { backend: a } = r(),
|
|
7
|
+
let { backend: a, orgId: o } = r(), s = a.kind === "local", c = a.kind === "cloud" && !!o, l = s || c;
|
|
8
8
|
return n({
|
|
9
|
-
queryKey: [
|
|
9
|
+
queryKey: [
|
|
10
|
+
...t.all,
|
|
11
|
+
a.id,
|
|
12
|
+
o
|
|
13
|
+
],
|
|
10
14
|
queryFn: i.list,
|
|
11
15
|
...e,
|
|
12
|
-
enabled:
|
|
16
|
+
enabled: l,
|
|
13
17
|
meta: { disableToast: !0 }
|
|
14
18
|
});
|
|
15
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-provider-connections.js","names":[],"sources":["../../../src/hooks/query/use-provider-connections.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport ProviderConnectionsService from \"#/api/provider-connections-service/provider-connections-service.api\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n CONFIG_CACHE_OPTIONS,\n PROVIDER_CONNECTIONS_QUERY_KEYS,\n} from \"./query-keys\";\n\nexport { PROVIDER_CONNECTIONS_QUERY_KEYS };\n\n/**\n * Provider connections
|
|
1
|
+
{"version":3,"file":"use-provider-connections.js","names":[],"sources":["../../../src/hooks/query/use-provider-connections.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport ProviderConnectionsService from \"#/api/provider-connections-service/provider-connections-service.api\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n CONFIG_CACHE_OPTIONS,\n PROVIDER_CONNECTIONS_QUERY_KEYS,\n} from \"./query-keys\";\n\nexport { PROVIDER_CONNECTIONS_QUERY_KEYS };\n\n/**\n * Provider connections are available on the local agent-server\n * (`/api/llm/provider-connections`) and on cloud when an org is bound\n * (`/api/organizations/{orgId}/provider-connections`). The query is disabled\n * only for a cloud backend without an org (legacy API keys), where the\n * org-scoped route cannot be addressed — there it returns no data so the\n * connections UI hides itself rather than firing an unaddressable request.\n */\nexport function useProviderConnections() {\n const { backend, orgId } = useActiveBackend();\n const isLocal = backend.kind === \"local\";\n const isCloudWithOrg = backend.kind === \"cloud\" && !!orgId;\n const enabled = isLocal || isCloudWithOrg;\n\n return useQuery({\n queryKey: [...PROVIDER_CONNECTIONS_QUERY_KEYS.all, backend.id, orgId],\n queryFn: ProviderConnectionsService.list,\n ...CONFIG_CACHE_OPTIONS,\n enabled,\n meta: { disableToast: true },\n });\n}\n"],"mappings":";;;;;AAkBA,SAAgB,IAAyB;CACvC,IAAM,EAAE,YAAS,aAAU,EAAiB,GACtC,IAAU,EAAQ,SAAS,SAC3B,IAAiB,EAAQ,SAAS,WAAW,CAAC,CAAC,GAC/C,IAAU,KAAW;CAE3B,OAAO,EAAS;EACd,UAAU;GAAC,GAAG,EAAgC;GAAK,EAAQ;GAAI;EAAK;EACpE,SAAS,EAA2B;EACpC,GAAG;EACH;EACA,MAAM,EAAE,cAAc,GAAK;CAC7B,CAAC;AACH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../../_virtual/_rolldown/runtime.cjs");const e=require("../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs"),t=require("../../api/config-service/config-service.api.cjs"),
|
|
1
|
+
require("../../_virtual/_rolldown/runtime.cjs");const e=require("../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs"),t=require("../../contexts/active-backend-context.cjs"),n=require("../../api/config-service/config-service.api.cjs"),r=require("./use-verified-models.cjs");var i=10;async function a(e,t,r,o=0){if(o>=i)throw Error(`Too many pagination requests for provider ${e}`);let s=await n.default.searchModels({provider__eq:e,limit:100,page_id:r},t);if(s.next_page_id){let n=await a(e,t,s.next_page_id,o+1);return[...s.items,...n]}return s.items}var o=n=>{let{backend:i,orgId:o}=t.useActiveBackend(),s=[i.id,i.connectionRevision??0,o];return e.useQuery({queryKey:[`config`,`models`,n,...s],queryFn:async({client:e})=>a(n,await e.fetchQuery({queryKey:[...r.VERIFIED_MODELS_QUERY_KEY,...s],queryFn:r.fetchVerifiedModelsByProvider,staleTime:r.VERIFIED_MODELS_STALE_TIME})),enabled:!!n,staleTime:r.VERIFIED_MODELS_STALE_TIME,gcTime:r.VERIFIED_MODELS_GC_TIME})};exports.useProviderModels=o;
|
|
2
2
|
//# sourceMappingURL=use-provider-models.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-provider-models.cjs","names":[],"sources":["../../../src/hooks/query/use-provider-models.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport ConfigService from \"#/api/config-service/config-service.api\";\nimport type { LLMModel } from \"#/api/config-service/config-service.types\";\nimport {\n VERIFIED_MODELS_GC_TIME,\n VERIFIED_MODELS_QUERY_KEY,\n VERIFIED_MODELS_STALE_TIME,\n fetchVerifiedModelsByProvider,\n} from \"./use-verified-models\";\n\nconst MAX_PAGINATION_DEPTH = 10;\n\nasync function fetchPage(\n provider: string,\n verifiedByProvider: Record<string, string[]>,\n pageId?: string,\n depth = 0,\n): Promise<LLMModel[]> {\n if (depth >= MAX_PAGINATION_DEPTH) {\n throw new Error(`Too many pagination requests for provider ${provider}`);\n }\n\n const page = await ConfigService.searchModels(\n {\n provider__eq: provider,\n limit: 100,\n page_id: pageId,\n },\n verifiedByProvider,\n );\n\n if (page.next_page_id) {\n const rest = await fetchPage(\n provider,\n verifiedByProvider,\n page.next_page_id,\n depth + 1,\n );\n return [...page.items, ...rest];\n }\n return page.items;\n}\n\nexport const useProviderModels = (provider: string | null)
|
|
1
|
+
{"version":3,"file":"use-provider-models.cjs","names":[],"sources":["../../../src/hooks/query/use-provider-models.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport ConfigService from \"#/api/config-service/config-service.api\";\nimport type { LLMModel } from \"#/api/config-service/config-service.types\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n VERIFIED_MODELS_GC_TIME,\n VERIFIED_MODELS_QUERY_KEY,\n VERIFIED_MODELS_STALE_TIME,\n fetchVerifiedModelsByProvider,\n} from \"./use-verified-models\";\n\nconst MAX_PAGINATION_DEPTH = 10;\n\nasync function fetchPage(\n provider: string,\n verifiedByProvider: Record<string, string[]>,\n pageId?: string,\n depth = 0,\n): Promise<LLMModel[]> {\n if (depth >= MAX_PAGINATION_DEPTH) {\n throw new Error(`Too many pagination requests for provider ${provider}`);\n }\n\n const page = await ConfigService.searchModels(\n {\n provider__eq: provider,\n limit: 100,\n page_id: pageId,\n },\n verifiedByProvider,\n );\n\n if (page.next_page_id) {\n const rest = await fetchPage(\n provider,\n verifiedByProvider,\n page.next_page_id,\n depth + 1,\n );\n return [...page.items, ...rest];\n }\n return page.items;\n}\n\nexport const useProviderModels = (provider: string | null) => {\n // `ActiveBackendProvider` deliberately does not blanket-invalidate on\n // backend/org switches, so the query key must carry the active backend\n // identity (id, connection revision, org id). Otherwise React Query serves\n // the previous backend/org's cached page — including DB-driven `free`/\n // `default`/`verified` flags — for the full stale window after a switch.\n const { backend, orgId } = useActiveBackend();\n const backendScope = [\n backend.id,\n backend.connectionRevision ?? 0,\n orgId,\n ] as const;\n\n return useQuery({\n queryKey: [\"config\", \"models\", provider, ...backendScope],\n queryFn: async ({ client }) => {\n const verifiedByProvider = await client.fetchQuery({\n queryKey: [...VERIFIED_MODELS_QUERY_KEY, ...backendScope],\n queryFn: fetchVerifiedModelsByProvider,\n staleTime: VERIFIED_MODELS_STALE_TIME,\n });\n return fetchPage(provider!, verifiedByProvider);\n },\n enabled: !!provider,\n staleTime: VERIFIED_MODELS_STALE_TIME,\n gcTime: VERIFIED_MODELS_GC_TIME,\n });\n};\n"],"mappings":"iSAWA,IAAM,EAAuB,GAE7B,eAAe,EACb,EACA,EACA,EACA,EAAQ,EACa,CACrB,GAAI,GAAS,EACX,MAAU,MAAM,6CAA6C,GAAU,EAGzE,IAAM,EAAO,MAAM,EAAA,QAAc,aAC/B,CACE,aAAc,EACd,MAAO,IACP,QAAS,CACX,EACA,CACF,EAEA,GAAI,EAAK,aAAc,CACrB,IAAM,EAAO,MAAM,EACjB,EACA,EACA,EAAK,aACL,EAAQ,CACV,EACA,MAAO,CAAC,GAAG,EAAK,MAAO,GAAG,CAAI,CAChC,CACA,OAAO,EAAK,KACd,CAEA,IAAa,EAAqB,GAA4B,CAM5D,GAAM,CAAE,UAAS,SAAU,EAAA,iBAAiB,EACtC,EAAe,CACnB,EAAQ,GACR,EAAQ,oBAAsB,EAC9B,CACF,EAEA,OAAO,EAAA,SAAS,CACd,SAAU,CAAC,SAAU,SAAU,EAAU,GAAG,CAAY,EACxD,QAAS,MAAO,CAAE,YAMT,EAAU,EAAW,MALK,EAAO,WAAW,CACjD,SAAU,CAAC,GAAG,EAAA,0BAA2B,GAAG,CAAY,EACxD,QAAS,EAAA,8BACT,UAAW,EAAA,0BACb,CAAC,CAC6C,EAEhD,QAAS,CAAC,CAAC,EACX,UAAW,EAAA,2BACX,OAAQ,EAAA,uBACV,CAAC,CACH"}
|
|
@@ -1,37 +1,46 @@
|
|
|
1
1
|
import { useQuery as e } from "../../node_modules/@tanstack/react-query/build/modern/useQuery.js";
|
|
2
|
-
import t from "../../
|
|
3
|
-
import
|
|
2
|
+
import { useActiveBackend as t } from "../../contexts/active-backend-context.js";
|
|
3
|
+
import n from "../../api/config-service/config-service.api.js";
|
|
4
|
+
import { VERIFIED_MODELS_GC_TIME as r, VERIFIED_MODELS_QUERY_KEY as i, VERIFIED_MODELS_STALE_TIME as a, fetchVerifiedModelsByProvider as o } from "./use-verified-models.js";
|
|
4
5
|
//#region src/hooks/query/use-provider-models.ts
|
|
5
|
-
var
|
|
6
|
-
async function
|
|
7
|
-
if (i >=
|
|
8
|
-
let a = await
|
|
6
|
+
var s = 10;
|
|
7
|
+
async function c(e, t, r, i = 0) {
|
|
8
|
+
if (i >= s) throw Error(`Too many pagination requests for provider ${e}`);
|
|
9
|
+
let a = await n.searchModels({
|
|
9
10
|
provider__eq: e,
|
|
10
11
|
limit: 100,
|
|
11
12
|
page_id: r
|
|
12
|
-
},
|
|
13
|
+
}, t);
|
|
13
14
|
if (a.next_page_id) {
|
|
14
|
-
let
|
|
15
|
-
return [...a.items, ...
|
|
15
|
+
let n = await c(e, t, a.next_page_id, i + 1);
|
|
16
|
+
return [...a.items, ...n];
|
|
16
17
|
}
|
|
17
18
|
return a.items;
|
|
18
19
|
}
|
|
19
|
-
var
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
]
|
|
25
|
-
|
|
26
|
-
queryKey:
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
20
|
+
var l = (n) => {
|
|
21
|
+
let { backend: s, orgId: l } = t(), u = [
|
|
22
|
+
s.id,
|
|
23
|
+
s.connectionRevision ?? 0,
|
|
24
|
+
l
|
|
25
|
+
];
|
|
26
|
+
return e({
|
|
27
|
+
queryKey: [
|
|
28
|
+
"config",
|
|
29
|
+
"models",
|
|
30
|
+
n,
|
|
31
|
+
...u
|
|
32
|
+
],
|
|
33
|
+
queryFn: async ({ client: e }) => c(n, await e.fetchQuery({
|
|
34
|
+
queryKey: [...i, ...u],
|
|
35
|
+
queryFn: o,
|
|
36
|
+
staleTime: a
|
|
37
|
+
})),
|
|
38
|
+
enabled: !!n,
|
|
39
|
+
staleTime: a,
|
|
40
|
+
gcTime: r
|
|
41
|
+
});
|
|
42
|
+
};
|
|
34
43
|
//#endregion
|
|
35
|
-
export {
|
|
44
|
+
export { l as useProviderModels };
|
|
36
45
|
|
|
37
46
|
//# sourceMappingURL=use-provider-models.js.map
|