@openhands/agent-canvas 1.15.0 → 1.16.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 +15 -1
- package/README.windows.md +2 -2
- package/build/assets/{acp-providers-BKvmTf82.js → acp-providers-CX3Lh9gj.js} +1 -1
- package/build/assets/active-backend-context-CrHTlgvN.js +2 -0
- package/build/assets/{agent-context-settings-D3PjSTU1.js → agent-context-settings-DSZlXrLj.js} +1 -1
- package/build/assets/{agent-profiles-settings-D4cY5U2T.js → agent-profiles-settings-Dzgb7G9z.js} +1 -1
- package/build/assets/agent-server-conversation-service.api-tnqNjbpE.js +86 -0
- package/build/assets/agent-settings-DLtsqaOs.js +2 -0
- package/build/assets/agent-settings-fFvR-XC2.js +1 -0
- package/build/assets/alert-banner-HP6mX-Vr.js +1 -0
- package/build/assets/{api-error-message-BJyfWp6p.js → api-error-message-B-XdSk3b.js} +1 -1
- package/build/assets/api-key-entry-screen-qTzrmJcr.js +1 -0
- package/build/assets/{app-settings-CbHqzQus.js → app-settings-dbnneVaV.js} +1 -1
- package/build/assets/automation-detail-BmwlCUAB.js +3 -0
- package/build/assets/{automation-export-BRopEHMu.js → automation-export-D3a3of4G.js} +1 -1
- package/build/assets/{automation-git-sync-CzyS4cn1.js → automation-git-sync-CprN5DcU.js} +1 -1
- package/build/assets/automation-setup-route-C40kXjMY.js +1 -0
- package/build/assets/{automation-templates-C_0FZgLG.js → automation-templates-BRppNh99.js} +1 -1
- package/build/assets/automations-list-DuNcRawl.js +1 -0
- package/build/assets/{back-nav-button-Dm9tIjVf.js → back-nav-button-Cjl_hoxq.js} +1 -1
- package/build/assets/backend-form-modal-lhGwzXFI.js +1 -0
- package/build/assets/{backend-synced-settings-badge-3fOwg6Bd.js → backend-synced-settings-badge-DPkz30BE.js} +1 -1
- package/build/assets/{badge-D4SqUCsR.js → badge-BU3S0VtE.js} +1 -1
- package/build/assets/{base-modal-C7_BDl_U.js → base-modal-D_L0oEbG.js} +1 -1
- package/build/assets/{bot-C-0Wu7vQ.js → bot-dMYHVfYM.js} +1 -1
- package/build/assets/{brand-button-Dxv6PDeN.js → brand-button-BAfk4wGP.js} +1 -1
- package/build/assets/browser-DSAo0tz1.js +46 -0
- package/build/assets/{browser-tab-BAl4ckJE.js → browser-tab-C9vy56R5.js} +1 -1
- package/build/assets/canvas-extension-page-dx1gFrfW.js +1 -0
- package/build/assets/canvas-extensions-8A-XhpgP.js +1 -0
- package/build/assets/canvas-extensions-runtime-2_x5Ezmi.js +1 -0
- package/build/assets/{chat-send-button-DWwR2cgI.js → chat-send-button-MUQqCZCS.js} +1 -1
- package/build/assets/check-CS0vmpQQ.js +1 -0
- package/build/assets/chevron-down-e1QBpjVy.js +1 -0
- package/build/assets/chevron-right-ZG4R5G4Q.js +1 -0
- package/build/assets/circle-check-DzWLNsbE.js +1 -0
- package/build/assets/{circle-plus-check-toggle-CBh_qomE.js → circle-plus-check-toggle-BO_kFZt3.js} +1 -1
- package/build/assets/{cloud-funnel-analytics-287iIERo.js → cloud-funnel-analytics-CztBCCPp.js} +1 -1
- package/build/assets/{cog-C4rrw-ZK.js → cog-D-MPQW6G.js} +1 -1
- package/build/assets/command-menu--UIlGL72.js +1 -0
- package/build/assets/{commits-tab-DZtJgaDM.js → commits-tab-AnZwLvh-.js} +1 -1
- package/build/assets/{condenser-settings-BcNmYR4s.js → condenser-settings-DmEOje-7.js} +1 -1
- package/build/assets/{confirmation-modal-Bk4JRcCM.js → confirmation-modal-Dv1ktp8K.js} +1 -1
- package/build/assets/{context-menu-list-item-lVYETtY5.js → context-menu-list-item-I86vKcmM.js} +1 -1
- package/build/assets/conversation-BbGrAO4Z.js +93 -0
- package/build/assets/conversation-mYT6NAoj.js +1 -0
- package/build/assets/conversation-panel-mYT6NAoj.js +1 -0
- package/build/assets/conversation-state-store-B0ImPLHO.js +1 -0
- package/build/assets/{conversation-tab-empty-state-HJtkmHZj.js → conversation-tab-empty-state-FIbh_lc8.js} +1 -1
- package/build/assets/{copy-to-clipboard-button-Cjkswvnj.js → copy-to-clipboard-button-Ca8iSkkA.js} +1 -1
- package/build/assets/{device-verify-EZhHhBT7.js → device-verify-Bhn2e_Ye.js} +1 -1
- package/build/assets/{dropdown-classes-DJe-E6MC.js → dropdown-classes-Bc1djN0-.js} +1 -1
- package/build/assets/{edit-automation-modal-D-urtv8n.js → edit-automation-modal-DadGbJ2u.js} +1 -1
- package/build/assets/empty-state-BoGVDecT.js +1 -0
- package/build/assets/{entry.client-C7Bi2tkU.js → entry.client-CqyPPjOq.js} +2 -2
- package/build/assets/{enum-filter-dropdown-DliX_Lo0.js → enum-filter-dropdown-Bgca129f.js} +1 -1
- package/build/assets/{environment-switch-overlay-CEKrFiMw.js → environment-switch-overlay-BmBRT7gv.js} +1 -1
- package/build/assets/{error-state-BALXiBNy.js → error-state-Body8Ngd.js} +1 -1
- package/build/assets/extensions-hub-CcDqq_vR.js +1 -0
- package/build/assets/extensions-navigation-Cr4yzYk4.js +1 -0
- package/build/assets/{external-link-DFpYunfj.js → external-link-DKUlnCQV.js} +1 -1
- package/build/assets/files-tab-D4o2VyE_.js +1 -0
- package/build/assets/{form-control-classes-CGw40z5h.js → form-control-classes-Bkh5FGrD.js} +1 -1
- package/build/assets/format-model-name-CasAP3nd.js +1 -0
- package/build/assets/get-git-path-ChKDVHZp.js +1 -0
- package/build/assets/{git-repo-dropdown-ai8qaNkD.js → git-repo-dropdown-4ROKl2cB.js} +1 -1
- package/build/assets/git-repo-dropdown-BkqzkMmM.js +1 -0
- package/build/assets/{highlighted-source-view-C3sxykQi.js → highlighted-source-view-BFRxGT_Q.js} +1 -1
- package/build/assets/home-ChpSuepX.js +1 -0
- package/build/assets/home-DIsB440S.js +1 -0
- package/build/assets/home-automation-run-tooltip-BVNDWjAH.js +1 -0
- package/build/assets/home-store-CY9Ej0ux.js +1 -0
- package/build/assets/index-home-BdlrFIif.js +1 -0
- package/build/assets/info-B6RQawoW.js +1 -0
- package/build/assets/install-server-modal-Dpy89p4g.js +1 -0
- package/build/assets/kebab-menu-item-content-D8hSNGmm.js +1 -0
- package/build/assets/{key-Cn5za3rg.js → key-BmVyxs-2.js} +1 -1
- package/build/assets/{launch-C1ieiOGe.js → launch-IrTDEFCs.js} +1 -1
- package/build/assets/list-filter-DsEK7NFC.js +1 -0
- package/build/assets/{list-todo-Cuu-STFc.js → list-todo-apgLVjMw.js} +1 -1
- package/build/assets/llm-not-configured-banner-CIFABh3K.js +27 -0
- package/build/assets/llm-settings-B9juXhIa.js +1 -0
- package/build/assets/llm-settings-De1d5dfr.js +1 -0
- package/build/assets/llm-subscription-service-BpJ0ouQo.js +1 -0
- package/build/assets/loader-circle-CC1au6hc.js +1 -0
- package/build/assets/{loading-spinner-0L3ZTToZ.js → loading-spinner-BY9N3pOe.js} +1 -1
- package/build/assets/manage-backends-modal-BrPV3oB-.js +1 -0
- package/build/assets/manifest-80fb1c29.js +1 -0
- package/build/assets/{manifest-subpage-layout-BGhiUQbA.js → manifest-subpage-layout-CAOYzrYp.js} +1 -1
- package/build/assets/{map-provider-B9LTm23I.js → map-provider-Cu3Zgumb.js} +1 -1
- package/build/assets/markdown-renderer-BzTlxI8x.js +8 -0
- package/build/assets/{mcp-CKbR4Vft.js → mcp-BTs_SXfZ.js} +1 -1
- package/build/assets/{mcp-marketplace-utils-C13fFccR.js → mcp-marketplace-utils-AIBzzHTO.js} +1 -1
- package/build/assets/{mcp-page-Bm4K2NQq.js → mcp-page-BEBYqH_K.js} +2 -2
- package/build/assets/messages-DKV9cRc2.js +41 -0
- package/build/assets/{modal-body-CMOc2tLl.js → modal-body-BxZjsju9.js} +1 -1
- package/build/assets/{modal-classes-BAb4Y_BG.js → modal-classes-C8eycCwG.js} +1 -1
- package/build/assets/{modal-close-button-CkJ0Ktjj.js → modal-close-button-DDzdRvCs.js} +1 -1
- package/build/assets/{mouse-pointer-click-CsgRs_-r.js → mouse-pointer-click-Co2uyaPA.js} +1 -1
- package/build/assets/onboarding-DV_OXoeP.js +1 -0
- package/build/assets/onboarding-modal-rkyBYkeQ.js +1 -0
- package/build/assets/{organization-service.api-C8XpQ0pM.js → organization-service.api-DrYNkEN_.js} +1 -1
- package/build/assets/{pencil-Clh1Wjvh.js → pencil-47jAZH_V.js} +1 -1
- package/build/assets/pin-By41Vl5J.js +1 -0
- package/build/assets/{planner-tab-DQvDU3ap.js → planner-tab-C9uZmhme.js} +1 -1
- package/build/assets/{plug-BuQhHSSG.js → plug-CG5HFcNG.js} +1 -1
- package/build/assets/plugins-management-service-BMJgC3Ga.js +1 -0
- package/build/assets/plus-C7Slq-0I.js +1 -0
- package/build/assets/profiles-service.api-ChoKrL0l.js +1 -0
- package/build/assets/providers-BhMcY5nv.js +1 -0
- package/build/assets/proxy-9Fe1v5na.js +1 -0
- package/build/assets/{puzzle-A9pGxxai.js → puzzle-JM_QaRm0.js} +1 -1
- package/build/assets/recommended-automations-launcher-6ABrI9Cy.js +1 -0
- package/build/assets/{refresh-cw-Bh69DyYO.js → refresh-cw-3q3Frrii.js} +1 -1
- package/build/assets/root-Dc8YmC9F.js +2 -0
- package/build/assets/root-VDaypvK4.css +1 -0
- package/build/assets/root-layout-CXkhSPYh.js +2 -0
- package/build/assets/schema-field-D-y9-LDb.js +1 -0
- package/build/assets/{sdk-section-page-HTffvm7Q.js → sdk-section-page-BlFiizlG.js} +1 -1
- package/build/assets/{secret-form-HTUbYw5o.js → secret-form-BB7the8W.js} +1 -1
- package/build/assets/secrets-service-ByZVENbp.js +1 -0
- package/build/assets/{secrets-settings-BizaTEr1.js → secrets-settings-B_GpxKW2.js} +1 -1
- package/build/assets/{settings-BlmrkwRi.js → settings-C0EWuBtA.js} +1 -1
- package/build/assets/settings-CKqk8ZnH.js +1 -0
- package/build/assets/{settings-dropdown-input-tM0A0ipy.js → settings-dropdown-input-BcwylHs2.js} +1 -1
- package/build/assets/{settings-index-CKq0b0Vg.js → settings-index-5w5UW2K3.js} +1 -1
- package/build/assets/{settings-input-C03KUoSC.js → settings-input-Db-1g8Ql.js} +1 -1
- package/build/assets/{settings-list-classes-BJ0g8rWj.js → settings-list-classes-BzeSZbF2.js} +1 -1
- package/build/assets/{settings-modal-AzEF1QPP.js → settings-modal-DfJ3tcJQ.js} +1 -1
- package/build/assets/settings-service.api-DJ1r62Zr.js +1 -0
- package/build/assets/{settings-switch-CQE0EGC-.js → settings-switch-CS-dJDmA.js} +1 -1
- package/build/assets/{settings-utils-ClYOkbbI.js → settings-utils-UYpEdPuD.js} +1 -1
- package/build/assets/shared-conversation-CA5ISEDy.js +1 -0
- package/build/assets/{shield-check-CFDViW82.js → shield-check-D2aCRd16.js} +1 -1
- package/build/assets/{sidebar-layout-D3hE08wK.js → sidebar-layout-D6fS8-Gl.js} +1 -1
- package/build/assets/{sidebar-mobile-menu-toggle-BOtyJHwE.js → sidebar-mobile-menu-toggle-C_fb0Jki.js} +1 -1
- package/build/assets/sidebar-nav-link-DQQcMf1A.js +1 -0
- package/build/assets/{sidebar-onboarding-checklist-storage-3qYflszY.js → sidebar-onboarding-checklist-storage-BBkeI6Bp.js} +1 -1
- package/build/assets/sidebar-store-DGqHkVLw.js +1 -0
- package/build/assets/{skill-card-pill-row-CFxjoqxn.js → skill-card-pill-row-B27-xyig.js} +1 -1
- package/build/assets/skill-enablement-DXeaImBz.js +1 -0
- package/build/assets/skill-filter-w__3UCEE.js +2 -0
- package/build/assets/{skill-icon-badge-CPQJ6A-I.js → skill-icon-badge-RQkq8wvl.js} +1 -1
- package/build/assets/skill-scope-B42H-XOc.js +1 -0
- package/build/assets/skills-plugins-tgF8EiXC.js +1 -0
- package/build/assets/skills-settings-BgJ9PaOe.js +1 -0
- package/build/assets/{styled-tooltip-Dl06rkpY.js → styled-tooltip-C4jf5Fv9.js} +1 -1
- package/build/assets/{task-list-tab-04GNQuii.js → task-list-tab-C5zcaktH.js} +1 -1
- package/build/assets/{terminal-Cj0iHIW7.js → terminal-CNElN42a.js} +2 -2
- package/build/assets/{toggle-switch-Fd_QGz0r.js → toggle-switch-ChOLXv2n.js} +1 -1
- package/build/assets/{trash-2-Dl8_RGz0.js → trash-2-D7K26eDO.js} +1 -1
- package/build/assets/{trash-_RMt7Ayc.js → trash-D-HYiVYM.js} +1 -1
- package/build/assets/{triangle-alert-SM-q4NU_.js → triangle-alert-CtdXWHUI.js} +1 -1
- package/build/assets/{typography-SgFy466J.js → typography-v1KN0tzi.js} +1 -1
- package/build/assets/usage-tab-CVDffLPt.js +1 -0
- package/build/assets/use-acp-credential-form-XIQmpX6M.js +1 -0
- package/build/assets/{use-activate-agent-profile-B2NS8nA5.js → use-activate-agent-profile-BLfmvDiG.js} +1 -1
- package/build/assets/use-agent-profiles-Bd9Bvvp1.js +1 -0
- package/build/assets/{use-automation-health-BxXdzZMP.js → use-automation-health-E6NZi9rb.js} +1 -1
- package/build/assets/{use-automations-zYb0dUny.js → use-automations-xijQKIl9.js} +1 -1
- package/build/assets/{use-can-manage-org-profiles-BWMahtUh.js → use-can-manage-org-profiles-CrJP5262.js} +1 -1
- package/build/assets/use-canvas-extensions-Bi693ujJ.js +1 -0
- package/build/assets/{use-cloud-current-user-id-CPHMDG-C.js → use-cloud-current-user-id-CDfAHpPX.js} +1 -1
- package/build/assets/use-config-A9QovgXO.js +1 -0
- package/build/assets/{use-create-conversation-DwN5vv2f.js → use-create-conversation-Dx3l7mFZ.js} +1 -1
- package/build/assets/use-create-secret-B9cUFWRG.js +1 -0
- package/build/assets/{use-get-secrets-BT4ihRwj.js → use-get-secrets-K3jmk-LH.js} +1 -1
- package/build/assets/use-is-authed-nTBcM7dE.js +1 -0
- package/build/assets/use-llm-configured-BV9nZ1_j.js +1 -0
- package/build/assets/use-llm-profiles-BO-P4Oyo.js +1 -0
- package/build/assets/use-manifest-capabilities-Cw_flwEz.js +1 -0
- package/build/assets/use-onboarding-completion-D8U7k4Qb.js +1 -0
- package/build/assets/use-pinned-home-route-CckOZrmb.js +1 -0
- package/build/assets/use-plugins-marketplace-7i94Zu3Z.js +1 -0
- package/build/assets/use-save-agent-profile-BUjSsDXK.js +1 -0
- package/build/assets/{use-save-settings-CUZW6yXP.js → use-save-settings-DYqkKv7T.js} +1 -1
- package/build/assets/{use-settings-C5VhGpqd.js → use-settings-DSXLbvBl.js} +1 -1
- package/build/assets/{use-settings-nav-items-DHaUu1Dg.js → use-settings-nav-items-CwRw-CmX.js} +1 -1
- package/build/assets/use-tracking-D53y3TH9.js +3 -0
- package/build/assets/{use-user-conversation-DT0_QCnL.js → use-user-conversation-B9Gebw_g.js} +1 -1
- package/build/assets/{useInfiniteQuery-CgeUQPfs.js → useInfiniteQuery-C926xzY4.js} +1 -1
- package/build/assets/{useMutation-DFnzkf6f.js → useMutation-B-qc391N.js} +1 -1
- package/build/assets/{useQueries-BhbrGEf1.js → useQueries-DlbhlH9I.js} +1 -1
- package/build/assets/{useQuery-BXWbZBZl.js → useQuery-BSTgq1rl.js} +1 -1
- package/build/assets/utils-CN5ZfZy1.js +1 -0
- package/build/assets/{vendor~conversation-panel~conversation-CTvDDiXg.js → vendor~conversation-panel~conversation-C8Fn4XOf.js} +1 -1
- package/build/assets/{vendor~entry.client-BFE7Llz9.js → vendor~entry.client-CoCfUXUF.js} +1 -1
- package/build/assets/{vendor~entry.client-BaKt_PIp.js → vendor~entry.client-DA2izTjq.js} +1 -1
- package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kepq2zme-ZixYGy6E.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~czjee3a3-DqZDXfg2.js} +1 -1
- package/build/assets/{vendor~index-home~home~conversation-panel~conversation-BTyukeM-.js → vendor~index-home~home~conversation-panel~conversation-hWywRBaR.js} +1 -1
- package/build/assets/{vendor~root-layout-BlUaZ18v.js → vendor~root-layout-C9Ju9DQg.js} +1 -1
- package/build/assets/{vendor~root-layout~conversation-panel~conversation-BYAWJwQX.js → vendor~root-layout~conversation-panel~conversation-BMbMgaGu.js} +1 -1
- package/build/assets/{vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-CHaLEBVR.js → vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-BWir3rJs.js} +1 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation-j5MFqfSy.js +1 -0
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-cDuKr-WD.js +1 -0
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iw7io29p-Dz-MAyNb.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iyia17eu-Chf7vmKB.js} +1 -1
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-Dtu7BpYk.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~nj1hli3r-DP9wmsjo.js} +2 -2
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-DonTKfQD.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-CUmIwQCN.js} +117 -13
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~jz4f6vo2-BgxDvUcf.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~jz4f6vo2-C7HiY4Ae.js} +42 -3
- package/build/assets/{verification-settings-Bj6bo097.js → verification-settings-gw_q6vkL.js} +1 -1
- package/build/assets/{wrench-hi7Q13dF.js → wrench-CUEI1krB.js} +1 -1
- package/build/assets/{x-DkgltWa0.js → x-DJdhbdmt.js} +1 -1
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +32 -16
- package/build/locales/ca/openhands.json +32 -16
- package/build/locales/de/openhands.json +32 -16
- package/build/locales/en/openhands.json +32 -16
- package/build/locales/es/openhands.json +32 -16
- package/build/locales/fr/openhands.json +32 -16
- package/build/locales/it/openhands.json +32 -16
- package/build/locales/ja/openhands.json +32 -16
- package/build/locales/ko-KR/openhands.json +32 -16
- package/build/locales/no/openhands.json +32 -16
- package/build/locales/pt/openhands.json +32 -16
- package/build/locales/tr/openhands.json +32 -16
- package/build/locales/uk/openhands.json +32 -16
- package/build/locales/zh-CN/openhands.json +32 -16
- package/build/locales/zh-TW/openhands.json +32 -16
- package/config/defaults.json +9 -5
- package/dist/api/agent-profiles-service/profile-field-support.d.ts +26 -0
- 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.js +118 -116
- package/dist/api/agent-server-adapter.js.map +1 -1
- package/dist/api/agent-server-compatibility.cjs +1 -1
- package/dist/api/agent-server-compatibility.cjs.map +1 -1
- package/dist/api/agent-server-compatibility.d.ts +21 -0
- package/dist/api/agent-server-compatibility.js +52 -38
- package/dist/api/agent-server-compatibility.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 +26 -0
- package/dist/api/agent-server-config.js +18 -5
- package/dist/api/agent-server-config.js.map +1 -1
- package/dist/api/canvas-extensions-service.cjs +1 -0
- package/dist/api/canvas-extensions-service.d.ts +22 -0
- package/dist/api/canvas-extensions-service.js +4 -0
- package/dist/api/cloud/conversation-service.api.cjs +1 -1
- package/dist/api/cloud/conversation-service.api.cjs.map +1 -1
- package/dist/api/cloud/conversation-service.api.d.ts +6 -0
- package/dist/api/cloud/conversation-service.api.js +14 -6
- package/dist/api/cloud/conversation-service.api.js.map +1 -1
- package/dist/api/conversation-file-upload.api.cjs +1 -1
- package/dist/api/conversation-file-upload.api.js +10 -10
- 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 +11 -0
- package/dist/api/conversation-service/agent-server-conversation-service.api.js +129 -118
- package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
- package/dist/api/event-service/event-service.api.cjs +1 -1
- package/dist/api/event-service/event-service.api.js +12 -12
- package/dist/api/git-service/agent-server-git-service.api.cjs +1 -1
- package/dist/api/git-service/agent-server-git-service.api.js +8 -8
- package/dist/api/runtime-service/agent-server-runtime-service.cjs +1 -1
- package/dist/api/runtime-service/agent-server-runtime-service.js +8 -8
- 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 +3 -2
- package/dist/api/settings-service/settings-service.api.js +2 -1
- package/dist/api/settings-service/settings-service.api.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/event-group.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/event-group.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/event-group.js +40 -36
- package/dist/components/conversation-events/chat/event-message-components/event-group.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 +114 -104
- package/dist/components/features/automations/automation-card.js.map +1 -1
- package/dist/components/features/automations/detail/run-phase.cjs +2 -0
- package/dist/components/features/automations/detail/run-phase.cjs.map +1 -0
- package/dist/components/features/automations/detail/run-phase.d.ts +89 -0
- package/dist/components/features/automations/detail/run-phase.js +72 -0
- package/dist/components/features/automations/detail/run-phase.js.map +1 -0
- package/dist/components/features/backends/backend-form-modal.cjs +1 -1
- package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
- package/dist/components/features/backends/backend-form-modal.js +5 -11
- package/dist/components/features/backends/backend-form-modal.js.map +1 -1
- package/dist/components/features/canvas-extensions/add-canvas-extension-modal.d.ts +6 -0
- package/dist/components/features/canvas-extensions/canvas-extension-card.d.ts +9 -0
- package/dist/components/features/canvas-extensions/canvas-extensions-runtime.cjs +2 -0
- package/dist/components/features/canvas-extensions/canvas-extensions-runtime.cjs.map +1 -0
- package/dist/components/features/canvas-extensions/canvas-extensions-runtime.d.ts +23 -0
- package/dist/components/features/canvas-extensions/canvas-extensions-runtime.js +19 -0
- package/dist/components/features/canvas-extensions/canvas-extensions-runtime.js.map +1 -0
- 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 +171 -168
- package/dist/components/features/chat/chat-interface.js.map +1 -1
- package/dist/components/features/chat/chat-markdown-path-code.cjs +3 -0
- package/dist/components/features/chat/chat-markdown-path-code.cjs.map +1 -0
- package/dist/components/features/chat/chat-markdown-path-code.d.ts +27 -0
- package/dist/components/features/chat/chat-markdown-path-code.js +72 -0
- package/dist/components/features/chat/chat-markdown-path-code.js.map +1 -0
- package/dist/components/features/chat/path-component.cjs +1 -1
- package/dist/components/features/chat/path-component.cjs.map +1 -1
- package/dist/components/features/chat/path-component.d.ts +8 -2
- package/dist/components/features/chat/path-component.js +33 -21
- package/dist/components/features/chat/path-component.js.map +1 -1
- package/dist/components/features/chat/tool-visualizers/file-editor/file-editor.cjs +1 -1
- package/dist/components/features/chat/tool-visualizers/file-editor/file-editor.cjs.map +1 -1
- package/dist/components/features/chat/tool-visualizers/file-editor/file-editor.js +38 -43
- package/dist/components/features/chat/tool-visualizers/file-editor/file-editor.js.map +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.cjs +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.cjs.map +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.d.ts +8 -5
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.js +22 -16
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.js.map +1 -1
- package/dist/components/features/chat/user-message-body.cjs +1 -1
- package/dist/components/features/chat/user-message-body.cjs.map +1 -1
- package/dist/components/features/chat/user-message-body.d.ts +4 -0
- package/dist/components/features/chat/user-message-body.js +30 -24
- package/dist/components/features/chat/user-message-body.js.map +1 -1
- package/dist/components/features/conversation/conversation-overview-skills-panel.cjs +1 -1
- package/dist/components/features/conversation/conversation-overview-skills-panel.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-overview-skills-panel.js +63 -81
- package/dist/components/features/conversation/conversation-overview-skills-panel.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 +50 -50
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.cjs +1 -1
- package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.js +3 -3
- package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.js.map +1 -1
- package/dist/components/features/conversation-panel/skills-modal.cjs +1 -1
- package/dist/components/features/conversation-panel/skills-modal.cjs.map +1 -1
- package/dist/components/features/conversation-panel/skills-modal.js +29 -28
- package/dist/components/features/conversation-panel/skills-modal.js.map +1 -1
- package/dist/components/features/files-tab/file-content-viewer.cjs +1 -1
- package/dist/components/features/files-tab/file-content-viewer.js +5 -5
- 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.js +51 -29
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js.map +1 -1
- package/dist/components/features/onboarding/onboarding-host.d.ts +3 -4
- package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +5 -9
- package/dist/components/features/settings/acp-auth-status-banner.d.ts +23 -6
- 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 +1 -0
- package/dist/components/features/settings/llm-profiles/provider-connection-modal.cjs +1 -1
- package/dist/components/features/settings/llm-profiles/provider-connection-modal.js +3 -0
- package/dist/components/features/settings/sdk-settings/field-help.cjs +1 -1
- package/dist/components/features/settings/sdk-settings/field-help.cjs.map +1 -1
- package/dist/components/features/settings/sdk-settings/field-help.d.ts +1 -1
- package/dist/components/features/settings/sdk-settings/field-help.js +1 -1
- package/dist/components/features/settings/sdk-settings/field-help.js.map +1 -1
- package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs +1 -1
- package/dist/components/features/settings/sdk-settings/sdk-section-page.js +6 -6
- package/dist/components/features/settings/sdk-settings/sdk-section-page.js.map +1 -1
- package/dist/components/features/sidebar/sidebar-nav-link.cjs +1 -1
- package/dist/components/features/sidebar/sidebar-nav-link.cjs.map +1 -1
- package/dist/components/features/sidebar/sidebar-nav-link.d.ts +10 -1
- package/dist/components/features/sidebar/sidebar-nav-link.js +54 -36
- package/dist/components/features/sidebar/sidebar-nav-link.js.map +1 -1
- 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.js +143 -120
- 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 +1 -1
- package/dist/components/features/sidebar/sidebar.js.map +1 -1
- package/dist/components/features/skills/build-skill-pills.cjs +1 -1
- package/dist/components/features/skills/build-skill-pills.cjs.map +1 -1
- package/dist/components/features/skills/build-skill-pills.js +60 -52
- package/dist/components/features/skills/build-skill-pills.js.map +1 -1
- 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 +54 -43
- package/dist/components/features/skills/extensions-navigation.js.map +1 -1
- package/dist/components/features/skills/skill-filter.cjs +1 -1
- package/dist/components/features/skills/skill-filter.cjs.map +1 -1
- package/dist/components/features/skills/skill-filter.d.ts +8 -3
- package/dist/components/features/skills/skill-filter.js +69 -52
- package/dist/components/features/skills/skill-filter.js.map +1 -1
- package/dist/components/shared/modals/settings/settings-form.cjs +1 -1
- package/dist/components/shared/modals/settings/settings-form.js +8 -8
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +9 -5
- package/dist/config/defaults.js.map +1 -1
- 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.js +5 -5
- package/dist/extensions/canvas-extension-module-loader.d.ts +11 -0
- package/dist/hooks/mutation/use-manage-canvas-extensions.d.ts +12 -0
- package/dist/hooks/query/concurrency-limiter.cjs +2 -0
- package/dist/hooks/query/concurrency-limiter.cjs.map +1 -0
- package/dist/hooks/query/concurrency-limiter.d.ts +22 -0
- package/dist/hooks/query/concurrency-limiter.js +29 -0
- package/dist/hooks/query/concurrency-limiter.js.map +1 -0
- package/dist/hooks/query/query-keys.cjs.map +1 -1
- package/dist/hooks/query/query-keys.d.ts +4 -0
- package/dist/hooks/query/query-keys.js.map +1 -1
- package/dist/hooks/query/use-active-conversation.cjs +1 -1
- package/dist/hooks/query/use-active-conversation.js +4 -4
- package/dist/hooks/query/use-automations.cjs.map +1 -1
- package/dist/hooks/query/use-automations.js.map +1 -1
- package/dist/hooks/query/use-backends-health.cjs +1 -1
- package/dist/hooks/query/use-backends-health.cjs.map +1 -1
- package/dist/hooks/query/use-backends-health.d.ts +1 -1
- package/dist/hooks/query/use-backends-health.js +50 -64
- package/dist/hooks/query/use-backends-health.js.map +1 -1
- package/dist/hooks/query/use-canvas-extensions.cjs +1 -0
- package/dist/hooks/query/use-canvas-extensions.d.ts +5 -0
- package/dist/hooks/query/use-canvas-extensions.js +3 -0
- package/dist/hooks/query/use-commit-changes.cjs +1 -1
- package/dist/hooks/query/use-commit-changes.js +4 -4
- package/dist/hooks/query/use-latest-automation-runs.cjs +1 -1
- package/dist/hooks/query/use-latest-automation-runs.js +1 -0
- package/dist/hooks/query/use-paginated-conversations.cjs +1 -1
- package/dist/hooks/query/use-paginated-conversations.cjs.map +1 -1
- package/dist/hooks/query/use-paginated-conversations.js +19 -16
- package/dist/hooks/query/use-paginated-conversations.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 +17 -10
- package/dist/hooks/query/use-search-providers.js.map +1 -1
- package/dist/hooks/query/use-unified-get-git-changes.cjs +1 -1
- package/dist/hooks/query/use-unified-get-git-changes.js +4 -4
- package/dist/hooks/query/use-unified-git-commits.cjs +1 -1
- package/dist/hooks/query/use-unified-git-commits.js +4 -4
- package/dist/hooks/query/use-unified-git-diff.cjs +1 -1
- package/dist/hooks/query/use-unified-git-diff.js +4 -4
- package/dist/hooks/query/use-unified-vscode-url.cjs +1 -1
- package/dist/hooks/query/use-unified-vscode-url.cjs.map +1 -1
- package/dist/hooks/query/use-unified-vscode-url.d.ts +1 -0
- package/dist/hooks/query/use-unified-vscode-url.js +40 -26
- package/dist/hooks/query/use-unified-vscode-url.js.map +1 -1
- package/dist/hooks/query/use-workspace-file-content.cjs +1 -1
- package/dist/hooks/query/use-workspace-file-content.js +5 -5
- package/dist/hooks/query/use-workspace-files.cjs +1 -1
- package/dist/hooks/query/use-workspace-files.js +6 -6
- package/dist/hooks/use-acp-credential-form.d.ts +6 -0
- package/dist/hooks/use-conversation-overview-git-diff-stats.cjs +1 -1
- package/dist/hooks/use-conversation-overview-git-diff-stats.js +4 -4
- package/dist/hooks/use-pinned-home-route.cjs +2 -0
- package/dist/hooks/use-pinned-home-route.cjs.map +1 -0
- package/dist/hooks/use-pinned-home-route.d.ts +33 -0
- package/dist/hooks/use-pinned-home-route.js +34 -0
- package/dist/hooks/use-pinned-home-route.js.map +1 -0
- package/dist/hooks/use-skill-enablement.cjs +2 -0
- package/dist/hooks/use-skill-enablement.cjs.map +1 -0
- package/dist/hooks/use-skill-enablement.d.ts +14 -0
- package/dist/hooks/use-skill-enablement.js +80 -0
- package/dist/hooks/use-skill-enablement.js.map +1 -0
- package/dist/i18n/declaration.cjs +1 -1
- package/dist/i18n/declaration.cjs.map +1 -1
- package/dist/i18n/declaration.d.ts +29 -13
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/translation.cjs +3 -3
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +538 -266
- package/dist/i18n/translation.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +15 -14
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.js +1 -0
- package/dist/locales/ar/openhands.json +32 -16
- package/dist/locales/ca/openhands.json +32 -16
- package/dist/locales/de/openhands.json +32 -16
- package/dist/locales/en/openhands.json +32 -16
- package/dist/locales/es/openhands.json +32 -16
- package/dist/locales/fr/openhands.json +32 -16
- package/dist/locales/it/openhands.json +32 -16
- package/dist/locales/ja/openhands.json +32 -16
- package/dist/locales/ko-KR/openhands.json +32 -16
- package/dist/locales/no/openhands.json +32 -16
- package/dist/locales/pt/openhands.json +32 -16
- package/dist/locales/tr/openhands.json +32 -16
- package/dist/locales/uk/openhands.json +32 -16
- package/dist/locales/zh-CN/openhands.json +32 -16
- package/dist/locales/zh-TW/openhands.json +32 -16
- package/dist/manifests/automation-interface.cjs +1 -1
- package/dist/manifests/automation-interface.cjs.map +1 -1
- package/dist/manifests/automation-interface.d.ts +6 -0
- package/dist/manifests/automation-interface.js +11 -8
- package/dist/manifests/automation-interface.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/bundle-index.cjs +45 -4
- package/dist/node_modules/@openhands/extensions/automations/bundle-index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/bundle-index.js +1 -1
- package/dist/node_modules/@openhands/extensions/automations/bundle-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.js +5 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.js.map +1 -1
- 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 +5 -0
- 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 +5 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js +5 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-bitbucket-pr/manifest.cjs +9 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-bitbucket-pr/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-bitbucket-pr/manifest.js +21 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-bitbucket-pr/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-gitlab-mr/manifest.cjs +9 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-gitlab-mr/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-gitlab-mr/manifest.js +21 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-gitlab-mr/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-bitbucket-pr/manifest.cjs +9 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-bitbucket-pr/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-bitbucket-pr/manifest.js +21 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-bitbucket-pr/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-github-pr/manifest.cjs +9 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-github-pr/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-github-pr/manifest.js +21 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-github-pr/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-gitlab-mr/manifest.cjs +9 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-gitlab-mr/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-gitlab-mr/manifest.js +21 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-gitlab-mr/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.js +5 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.cjs +30 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.js +65 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.js.map +1 -0
- 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 +21 -9
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.js +2 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs +2 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js +40 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.js +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js +74 -72
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.cjs +42 -3
- package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.js +22 -3
- package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-conversation.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-conversation.js +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-state.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-state.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-state.js +8 -7
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-state.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/index.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/index.js +2 -2
- package/dist/node_modules/lucide-react/dist/esm/icons/blocks.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/blocks.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/blocks.js +16 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/blocks.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.js.map +1 -0
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +3 -3
- package/dist/package.js.map +1 -1
- package/dist/routes/agent-settings.d.ts +10 -0
- package/dist/routes/app-settings.cjs +1 -1
- package/dist/routes/app-settings.cjs.map +1 -1
- package/dist/routes/app-settings.js +7 -7
- package/dist/routes/files-tab.cjs +1 -1
- package/dist/routes/files-tab.cjs.map +1 -1
- package/dist/routes/files-tab.js +14 -14
- package/dist/routes/files-tab.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.js +122 -114
- package/dist/routes/llm-settings.js.map +1 -1
- package/dist/services/canvas-ui.cjs +1 -1
- package/dist/services/canvas-ui.cjs.map +1 -1
- package/dist/services/canvas-ui.d.ts +5 -0
- package/dist/services/canvas-ui.js +24 -10
- package/dist/services/canvas-ui.js.map +1 -1
- package/dist/services/settings.cjs +1 -1
- package/dist/services/settings.cjs.map +1 -1
- package/dist/services/settings.js +3 -2
- package/dist/services/settings.js.map +1 -1
- package/dist/types/automation.cjs.map +1 -1
- package/dist/types/automation.d.ts +20 -0
- package/dist/types/automation.js.map +1 -1
- package/dist/types/canvas-extension.cjs +2 -0
- package/dist/types/canvas-extension.cjs.map +1 -0
- package/dist/types/canvas-extension.d.ts +77 -0
- package/dist/types/canvas-extension.js +6 -0
- package/dist/types/canvas-extension.js.map +1 -0
- package/dist/types/settings.d.ts +7 -0
- package/dist/ui/help-link.cjs +1 -1
- package/dist/ui/help-link.cjs.map +1 -1
- package/dist/ui/help-link.d.ts +6 -1
- package/dist/ui/help-link.js +32 -18
- package/dist/ui/help-link.js.map +1 -1
- package/dist/utils/acp-auth-display.d.ts +35 -0
- package/dist/utils/cache-utils.cjs +1 -1
- package/dist/utils/cache-utils.js +5 -5
- 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 +7 -3
- package/dist/utils/format-model-name.js +6 -11
- package/dist/utils/format-model-name.js.map +1 -1
- package/dist/utils/format-relative-time.cjs +1 -1
- package/dist/utils/format-relative-time.cjs.map +1 -1
- package/dist/utils/format-relative-time.d.ts +7 -0
- package/dist/utils/format-relative-time.js +7 -2
- package/dist/utils/format-relative-time.js.map +1 -1
- package/dist/utils/path-utils.cjs +1 -1
- package/dist/utils/path-utils.cjs.map +1 -1
- package/dist/utils/path-utils.d.ts +15 -3
- package/dist/utils/path-utils.js +29 -3
- package/dist/utils/path-utils.js.map +1 -1
- package/dist/utils/skill-enablement.cjs +2 -0
- package/dist/utils/skill-enablement.cjs.map +1 -0
- package/dist/utils/skill-enablement.d.ts +51 -0
- package/dist/utils/skill-enablement.js +31 -0
- package/dist/utils/skill-enablement.js.map +1 -0
- package/dist/utils/vscode-origin.cjs +2 -0
- package/dist/utils/vscode-origin.cjs.map +1 -0
- package/dist/utils/vscode-origin.d.ts +55 -0
- package/dist/utils/vscode-origin.js +27 -0
- package/dist/utils/vscode-origin.js.map +1 -0
- package/dist/utils/workspace-mode.d.ts +4 -0
- package/package.json +3 -3
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/check-translation-completeness.cjs +1 -0
- package/scripts/dev-extra-backend.mjs +28 -9
- package/scripts/dev-safe.mjs +81 -8
- package/scripts/dev-static.mjs +35 -37
- package/scripts/dev-with-automation.mjs +82 -1
- package/scripts/ingress.mjs +27 -1
- package/scripts/static-server.mjs +74 -1
- package/tools/canvas_ui_tool.py +19 -0
- package/build/assets/active-backend-context-DKFSMbn3.js +0 -2
- package/build/assets/agent-server-conversation-service.api-DozDKIW_.js +0 -86
- package/build/assets/agent-settings-351vXWc9.js +0 -2
- package/build/assets/agent-settings-Ce7BDZ6I.js +0 -1
- package/build/assets/alert-banner-Kyy1YWZU.js +0 -1
- package/build/assets/api-key-entry-screen-INIxqAMs.js +0 -1
- package/build/assets/automation-detail-DXDhUwPq.js +0 -3
- package/build/assets/automation-setup-route-FRr05f_g.js +0 -1
- package/build/assets/automations-list-CERuQWE6.js +0 -1
- package/build/assets/backend-form-modal-DK78-jn1.js +0 -1
- package/build/assets/browser-11etCQ04.js +0 -7
- package/build/assets/check-Cf2YoT90.js +0 -1
- package/build/assets/chevron-down-C3OQ-ehx.js +0 -1
- package/build/assets/chevron-right-CN1uUiJ1.js +0 -1
- package/build/assets/circle-check-g5yeGMd-.js +0 -1
- package/build/assets/command-menu-BZQ8S3Ke.js +0 -1
- package/build/assets/conversation-CchMzpGl.js +0 -1
- package/build/assets/conversation-Dpzftz57.js +0 -93
- package/build/assets/conversation-panel-CchMzpGl.js +0 -1
- package/build/assets/conversation-state-store-a9d2fxRc.js +0 -1
- package/build/assets/empty-state-CvaVahVr.js +0 -1
- package/build/assets/extensions-hub-CFduxBnk.js +0 -1
- package/build/assets/extensions-navigation-BeC224yX.js +0 -1
- package/build/assets/files-tab-CL3J9b3p.js +0 -1
- package/build/assets/format-model-name-BNPKVsIq.js +0 -1
- package/build/assets/get-git-path-DlAJa_i6.js +0 -1
- package/build/assets/git-repo-dropdown-DGMEhz7d.js +0 -1
- package/build/assets/home-BCGlNJCA.js +0 -1
- package/build/assets/home-DB1pRqTC.js +0 -1
- package/build/assets/home-automation-run-tooltip-CooFQRIG.js +0 -1
- package/build/assets/home-store-Dl1dPE58.js +0 -1
- package/build/assets/index-home-DB1pRqTC.js +0 -1
- package/build/assets/info-uYSVzX86.js +0 -1
- package/build/assets/install-server-modal-BbJdhzet.js +0 -1
- package/build/assets/kebab-menu-item-content-BYokkRHi.js +0 -1
- package/build/assets/list-filter-OFkpRrmi.js +0 -1
- package/build/assets/llm-not-configured-banner-BqqYnJ1t.js +0 -27
- package/build/assets/llm-settings-CnDbbmVW.js +0 -1
- package/build/assets/llm-settings-S8Yjg__1.js +0 -1
- package/build/assets/llm-subscription-service-BpPfzW4x.js +0 -1
- package/build/assets/loader-circle-nvrwthvj.js +0 -1
- package/build/assets/manage-backends-modal-BCUPswyl.js +0 -1
- package/build/assets/manifest-58597dde.js +0 -1
- package/build/assets/markdown-renderer-Cb2sBWtV.js +0 -8
- package/build/assets/messages-BTN5thLe.js +0 -40
- package/build/assets/onboarding-Cx_kaiD1.js +0 -1
- package/build/assets/onboarding-modal-vMwn7ihv.js +0 -1
- package/build/assets/plugins-management-service-BjYeF0b0.js +0 -1
- package/build/assets/plus-CEKne-Yp.js +0 -1
- package/build/assets/profiles-service.api-QB-T_u-g.js +0 -1
- package/build/assets/providers-FfSZ5TXP.js +0 -1
- package/build/assets/proxy-tcFL2yTQ.js +0 -1
- package/build/assets/recommended-automations-launcher-Bw8uC4V6.js +0 -1
- package/build/assets/root-BLeQfBEq.css +0 -1
- package/build/assets/root-ZKKYPR1Z.js +0 -2
- package/build/assets/root-layout-luJoE9IG.js +0 -2
- package/build/assets/schema-field-Csw5fhtN.js +0 -1
- package/build/assets/secrets-service-BTor9uAU.js +0 -1
- package/build/assets/settings-DcNPxz0v.js +0 -1
- package/build/assets/settings-service.api-B2agVfjL.js +0 -1
- package/build/assets/shared-conversation-B55pCyBG.js +0 -1
- package/build/assets/sidebar-nav-link-CPzhyHQg.js +0 -1
- package/build/assets/sidebar-store-DtpU7zaI.js +0 -1
- package/build/assets/skill-filter-CWZ5kjcg.js +0 -2
- package/build/assets/skill-scope-CV1dkAbW.js +0 -1
- package/build/assets/skills-plugins-DGHULTq6.js +0 -1
- package/build/assets/skills-settings-CM1lFv3e.js +0 -1
- package/build/assets/usage-tab-BcfWV6db.js +0 -1
- package/build/assets/use-acp-credential-form-BsSW5NHG.js +0 -1
- package/build/assets/use-agent-profiles-DWBPC0Si.js +0 -1
- package/build/assets/use-config-Bft35DOK.js +0 -1
- package/build/assets/use-create-secret-BSxJMxHp.js +0 -1
- package/build/assets/use-is-authed-CFGkY3-Z.js +0 -1
- package/build/assets/use-llm-configured-BI6obxsc.js +0 -1
- package/build/assets/use-llm-profiles-djGAhTWL.js +0 -1
- package/build/assets/use-manifest-capabilities-3z0-1G59.js +0 -1
- package/build/assets/use-onboarding-completion-BXpyUSsJ.js +0 -1
- package/build/assets/use-plugins-marketplace-DI4_pK56.js +0 -1
- package/build/assets/use-save-agent-profile-DdBSTdpN.js +0 -1
- package/build/assets/use-tracking-D5t9otIF.js +0 -3
- package/build/assets/utils-DaCIEEQP.js +0 -1
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~alert-banner-B3qC_oj8.js +0 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-B2OLKL7N.js +0 -1
- package/dist/components/features/tips/random-tip.d.ts +0 -2
- package/dist/utils/tips.d.ts +0 -7
- package/dist/utils/workspace-relative-path.cjs +0 -2
- package/dist/utils/workspace-relative-path.cjs.map +0 -1
- package/dist/utils/workspace-relative-path.d.ts +0 -10
- package/dist/utils/workspace-relative-path.js +0 -22
- package/dist/utils/workspace-relative-path.js.map +0 -1
- /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew3u153i-rfV8mQ9m.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew9ih1s8-rfV8mQ9m.js} +0 -0
- /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ox0jfsa0-cHFhpUBq.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~i58xkef6-cHFhpUBq.js} +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import "../api/backend-registry/active-store.js";
|
|
2
|
+
import { useActiveBackend as e } from "../contexts/active-backend-context.js";
|
|
3
|
+
import { automationListPath as t, hasAutomationInterface as n } from "../manifests/automation-interface.js";
|
|
4
|
+
import { useLocalStorage as r } from "../node_modules/@uidotdev/usehooks/index.js";
|
|
5
|
+
import { useCallback as i, useMemo as a } from "react";
|
|
6
|
+
//#region src/hooks/use-pinned-home-route.ts
|
|
7
|
+
var o = "oh:pinned-home-route", s = "/customize";
|
|
8
|
+
function c(e, t) {
|
|
9
|
+
return `${o}:${e}:${t ?? "-"}`;
|
|
10
|
+
}
|
|
11
|
+
function l(e) {
|
|
12
|
+
return e === "/customize" ? !0 : e === t() ? n() : !1;
|
|
13
|
+
}
|
|
14
|
+
function u(e) {
|
|
15
|
+
return typeof e != "string" || !e ? null : l(e) ? e : null;
|
|
16
|
+
}
|
|
17
|
+
function d() {
|
|
18
|
+
let t = e(), [n, o] = r(c(t.backend.id, t.orgId), null), s = a(() => u(n), [n]);
|
|
19
|
+
return {
|
|
20
|
+
pinnedRoute: s,
|
|
21
|
+
isPinnedRoute: i((e) => s === e, [s]),
|
|
22
|
+
togglePinnedRoute: i((e) => {
|
|
23
|
+
if (s === e) {
|
|
24
|
+
o(null);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
l(e) && o(e);
|
|
28
|
+
}, [s, o])
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
export { s as CUSTOMIZE_PATH, d as usePinnedHomeRoute };
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=use-pinned-home-route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-pinned-home-route.js","names":[],"sources":["../../src/hooks/use-pinned-home-route.ts"],"sourcesContent":["import { useLocalStorage } from \"@uidotdev/usehooks\";\nimport { useCallback, useMemo } from \"react\";\nimport {\n getActiveBackend,\n isNoBackend,\n} from \"#/api/backend-registry/active-store\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n automationListPath,\n hasAutomationInterface,\n} from \"#/manifests/automation-interface\";\n\nexport const PINNED_HOME_ROUTE_KEY = \"oh:pinned-home-route\";\n\n/** Sidebar Customize entry; also the pin target, so the two cannot drift. */\nexport const CUSTOMIZE_PATH = \"/customize\";\n\n/**\n * The pin is stored per backend + org: it may reference a surface that only\n * exists on the backend that set it (e.g. /automations requires that\n * deployment's interface manifest) — a shared key would let one backend\n * redirect `/` on another.\n */\nexport function getPinnedHomeRouteKey(\n backendId: string,\n orgId: string | null,\n): string {\n return `${PINNED_HOME_ROUTE_KEY}:${backendId}:${orgId ?? \"-\"}`;\n}\n\n/**\n * Whether `path` may serve as the home route right now. Shared by the\n * sidebar pin affordance and the `/` loader, so a stored pin that stops\n * resolving (backend switch, manifest absent) is ignored rather than an\n * error. `/` is never pinnable, which makes a redirect loop impossible.\n * Canvas Extensions pages can later add an `/extensions/…` branch here\n * without any storage or loader change.\n */\nexport function isPinnableRoute(path: string): boolean {\n if (path === CUSTOMIZE_PATH) return true;\n if (path === automationListPath()) return hasAutomationInterface();\n return false;\n}\n\nfunction sanitizePinnedRoute(value: unknown): string | null {\n if (typeof value !== \"string\" || !value) return null;\n return isPinnableRoute(value) ? value : null;\n}\n\n/**\n * Synchronous pin read for route loaders (no React context). Reads the key\n * `usePinnedHomeRoute` writes; `useLocalStorage` JSON-serializes values, so\n * parse defensively and treat anything unreadable as \"no pin\". An invalid\n * pin is ignored, not cleared — it may become valid again (e.g. the\n * automations interface returning after a backend switch back).\n */\nexport function readPinnedHomeRoute(): string | null {\n const active = getActiveBackend();\n if (isNoBackend(active.backend)) return null;\n\n let raw: string | null = null;\n try {\n raw = window.localStorage.getItem(\n getPinnedHomeRouteKey(active.backend.id, active.orgId),\n );\n } catch {\n return null;\n }\n if (raw === null) return null;\n\n try {\n return sanitizePinnedRoute(JSON.parse(raw));\n } catch {\n return null;\n }\n}\n\n/** Pin state for the home route: `/` redirects to the pinned sidebar page. */\nexport function usePinnedHomeRoute() {\n const active = useActiveBackend();\n const [rawPinnedRoute, setRawPinnedRoute] = useLocalStorage<string | null>(\n getPinnedHomeRouteKey(active.backend.id, active.orgId),\n null,\n );\n\n const pinnedRoute = useMemo(\n () => sanitizePinnedRoute(rawPinnedRoute),\n [rawPinnedRoute],\n );\n\n const isPinnedRoute = useCallback(\n (path: string) => pinnedRoute === path,\n [pinnedRoute],\n );\n\n const togglePinnedRoute = useCallback(\n (path: string) => {\n if (pinnedRoute === path) {\n setRawPinnedRoute(null);\n return;\n }\n if (!isPinnableRoute(path)) return;\n setRawPinnedRoute(path);\n },\n [pinnedRoute, setRawPinnedRoute],\n );\n\n return {\n pinnedRoute,\n isPinnedRoute,\n togglePinnedRoute,\n };\n}\n"],"mappings":";;;;;;AAYA,IAAa,IAAwB,wBAGxB,IAAiB;AAQ9B,SAAgB,EACd,GACA,GACQ;CACR,OAAO,GAAG,EAAsB,GAAG,EAAU,GAAG,KAAS;AAC3D;AAUA,SAAgB,EAAgB,GAAuB;CAGrD,OAFI,MAAA,eAAgC,KAChC,MAAS,EAAmB,IAAU,EAAuB,IAC1D;AACT;AAEA,SAAS,EAAoB,GAA+B;CAE1D,OADI,OAAO,KAAU,YAAY,CAAC,IAAc,OACzC,EAAgB,CAAK,IAAI,IAAQ;AAC1C;AA+BA,SAAgB,IAAqB;CACnC,IAAM,IAAS,EAAiB,GAC1B,CAAC,GAAgB,KAAqB,EAC1C,EAAsB,EAAO,QAAQ,IAAI,EAAO,KAAK,GACrD,IACF,GAEM,IAAc,QACZ,EAAoB,CAAc,GACxC,CAAC,CAAc,CACjB;CAmBA,OAAO;EACL;EACA,eAnBoB,GACnB,MAAiB,MAAgB,GAClC,CAAC,CAAW,CAiBZ;EACA,mBAfwB,GACvB,MAAiB;GAChB,IAAI,MAAgB,GAAM;IACxB,EAAkB,IAAI;IACtB;GACF;GACK,EAAgB,CAAI,KACzB,EAAkB,CAAI;EACxB,GACA,CAAC,GAAa,CAAiB,CAM/B;CACF;AACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../node_modules/react-i18next/dist/es/useTranslation.cjs"),n=require("../i18n/declaration.cjs"),r=require("../utils/retrieve-axios-error-message.cjs"),i=require("../utils/custom-toast-handlers.cjs"),a=require("../contexts/active-backend-context.cjs"),o=require("../utils/skill-enablement.cjs"),s=require("./query/use-settings.cjs"),c=require("./mutation/use-save-settings.cjs");let l=require("react");l=e.__toESM(l,1);function u(e,t){return{enabledSkills:t?e?.enabled_skills:[...o.CATALOG_SKILL_NAMES],disabledSkills:e?.disabled_skills??[]}}function d(){let{backend:e}=a.useActiveBackend(),{data:t}=s.useSettings(),n=e.kind!==`cloud`;return l.default.useMemo(()=>{let e=o.buildSkillEnablementFilter(u(t,n));return t=>e(t.name)},[t?.enabled_skills,t?.disabled_skills,n])}function f(e){return JSON.stringify([[...o.resolveEnabledCatalogSkills(e)].sort(),[...e.disabledSkills??[]].sort()])}function p(e,t,n){return e.includes(t)===n?e:n?[...e,t]:e.filter(e=>e!==t)}function m(){let{t:e}=t.useTranslation(`openhands`),{backend:d}=a.useActiveBackend(),m=d.kind!==`cloud`,{data:h,isLoading:g}=s.useSettings(),{mutate:_}=c.useSaveSettings(),[v,y]=l.default.useState({}),b=l.default.useRef(null);return l.default.useEffect(()=>{if(g||!h)return;let e=u(h,m);b.current=f(e),y(e)},[g,h?.enabled_skills,h?.disabled_skills,m]),l.default.useEffect(()=>{let t=f(v);if(b.current===null||b.current===t)return;b.current=t;let a=v.disabledSkills??[];_(m?{enabled_skills:o.resolveEnabledCatalogSkills(v),disabled_skills:a}:{disabled_skills:a},{onError:t=>{i.displayErrorToast(r.retrieveAxiosErrorMessage(t)||e(n.I18nKey.ERROR$GENERIC))}})},[v,m,_,e]),{isEnabled:l.default.useMemo(()=>{let e=o.buildSkillEnablementFilter(v);return t=>e(t.name)},[v]),setEnabled:l.default.useCallback((e,t)=>{y(n=>{let r=m&&o.isCatalogSkill(e);return{enabledSkills:r?p(o.resolveEnabledCatalogSkills(n),e,t):n.enabledSkills,disabledSkills:p(n.disabledSkills??[],e,!t&&!r)}})},[m])}}exports.useSkillEnabledFilter=d,exports.useSkillEnablement=m;
|
|
2
|
+
//# sourceMappingURL=use-skill-enablement.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-skill-enablement.cjs","names":[],"sources":["../../src/hooks/use-skill-enablement.ts"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useSaveSettings } from \"#/hooks/mutation/use-save-settings\";\nimport { useSettings } from \"#/hooks/query/use-settings\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport type { Settings, SkillInfo } from \"#/types/settings\";\nimport { displayErrorToast } from \"#/utils/custom-toast-handlers\";\nimport { retrieveAxiosErrorMessage } from \"#/utils/retrieve-axios-error-message\";\nimport {\n buildSkillEnablementFilter,\n CATALOG_SKILL_NAMES,\n isCatalogSkill,\n resolveEnabledCatalogSkills,\n type SkillEnablement,\n} from \"#/utils/skill-enablement\";\n\n/**\n * Settings → the two lists. Cloud creates conversations from its own\n * server-side catalog and never reads `enabled_skills`, so the catalog stays\n * deny-list governed there.\n */\nfunction readSkillEnablement(\n settings: Settings | undefined,\n usesCatalogAllowList: boolean,\n): SkillEnablement {\n return {\n enabledSkills: usesCatalogAllowList\n ? settings?.enabled_skills\n : [...CATALOG_SKILL_NAMES],\n disabledSkills: settings?.disabled_skills ?? [],\n };\n}\n\n/** Read-only view of the rule, for surfaces that list skills without toggling. */\nexport function useSkillEnabledFilter(): (skill: SkillInfo) => boolean {\n const { backend } = useActiveBackend();\n const { data: settings } = useSettings();\n const usesCatalogAllowList = backend.kind !== \"cloud\";\n\n return React.useMemo(() => {\n const isEnabled = buildSkillEnablementFilter(\n readSkillEnablement(settings, usesCatalogAllowList),\n );\n return (skill: SkillInfo) => isEnabled(skill.name);\n }, [\n settings?.enabled_skills,\n settings?.disabled_skills,\n usesCatalogAllowList,\n ]);\n}\n\nexport interface SkillEnablementController {\n isEnabled: (skill: SkillInfo) => boolean;\n setEnabled: (skillName: string, enabled: boolean) => void;\n}\n\n/** Stable form of both lists, so an unchanged set can skip the save. */\nfunction snapshot(enablement: SkillEnablement): string {\n return JSON.stringify([\n [...resolveEnabledCatalogSkills(enablement)].sort(),\n [...(enablement.disabledSkills ?? [])].sort(),\n ]);\n}\n\n/** Same array reference when the membership already matches, to skip a save. */\nfunction withMembership(\n list: string[],\n name: string,\n present: boolean,\n): string[] {\n if (list.includes(name) === present) return list;\n return present ? [...list, name] : list.filter((entry) => entry !== name);\n}\n\n/**\n * Shared toggle state for every surface that switches skills on and off.\n *\n * Which of the two lists a skill belongs to is decided here alone, so one\n * surface cannot write a preference another cannot see.\n */\nexport function useSkillEnablement(): SkillEnablementController {\n const { t } = useTranslation(\"openhands\");\n const { backend } = useActiveBackend();\n const usesCatalogAllowList = backend.kind !== \"cloud\";\n const { data: settings, isLoading: settingsLoading } = useSettings();\n const { mutate: saveSettings } = useSaveSettings();\n\n const [enablement, setEnablement] = React.useState<SkillEnablement>({});\n const savedRef = React.useRef<string | null>(null);\n\n React.useEffect(() => {\n if (settingsLoading || !settings) return;\n const hydrated = readSkillEnablement(settings, usesCatalogAllowList);\n savedRef.current = snapshot(hydrated);\n setEnablement(hydrated);\n }, [\n settingsLoading,\n settings?.enabled_skills,\n settings?.disabled_skills,\n usesCatalogAllowList,\n ]);\n\n React.useEffect(() => {\n // Writing the hydrated value straight back would race the one-shot\n // migration and could narrow a workspace it had just preserved.\n const next = snapshot(enablement);\n if (savedRef.current === null || savedRef.current === next) return;\n savedRef.current = next;\n\n const disabledSkills = enablement.disabledSkills ?? [];\n saveSettings(\n usesCatalogAllowList\n ? {\n enabled_skills: resolveEnabledCatalogSkills(enablement),\n disabled_skills: disabledSkills,\n }\n : { disabled_skills: disabledSkills },\n {\n onError: (error) => {\n displayErrorToast(\n retrieveAxiosErrorMessage(error) || t(I18nKey.ERROR$GENERIC),\n );\n },\n },\n );\n }, [enablement, usesCatalogAllowList, saveSettings, t]);\n\n const isEnabled = React.useMemo(() => {\n const enabled = buildSkillEnablementFilter(enablement);\n return (skill: SkillInfo) => enabled(skill.name);\n }, [enablement]);\n\n const setEnabled = React.useCallback(\n (skillName: string, enabled: boolean) => {\n setEnablement((previous) => {\n const allowListed = usesCatalogAllowList && isCatalogSkill(skillName);\n return {\n enabledSkills: allowListed\n ? withMembership(\n resolveEnabledCatalogSkills(previous),\n skillName,\n enabled,\n )\n : previous.enabledSkills,\n // A catalog skill switched back on also leaves the deny-list, where\n // an unmigrated workspace may still hold it.\n disabledSkills: withMembership(\n previous.disabledSkills ?? [],\n skillName,\n !enabled && !allowListed,\n ),\n };\n });\n },\n [usesCatalogAllowList],\n );\n\n return { isEnabled, setEnabled };\n}\n"],"mappings":"keAsBA,SAAS,EACP,EACA,EACiB,CACjB,MAAO,CACL,cAAe,EACX,GAAU,eACV,CAAC,GAAG,EAAA,mBAAmB,EAC3B,eAAgB,GAAU,iBAAmB,CAAC,CAChD,CACF,CAGA,SAAgB,GAAuD,CACrE,GAAM,CAAE,WAAY,EAAA,iBAAiB,EAC/B,CAAE,KAAM,GAAa,EAAA,YAAY,EACjC,EAAuB,EAAQ,OAAS,QAE9C,OAAO,EAAA,QAAM,YAAc,CACzB,IAAM,EAAY,EAAA,2BAChB,EAAoB,EAAU,CAAoB,CACpD,EACA,MAAQ,IAAqB,EAAU,EAAM,IAAI,CACnD,EAAG,CACD,GAAU,eACV,GAAU,gBACV,CACF,CAAC,CACH,CAQA,SAAS,EAAS,EAAqC,CACrD,OAAO,KAAK,UAAU,CACpB,CAAC,GAAG,EAAA,4BAA4B,CAAU,CAAC,EAAE,KAAK,EAClD,CAAC,GAAI,EAAW,gBAAkB,CAAC,CAAE,EAAE,KAAK,CAC9C,CAAC,CACH,CAGA,SAAS,EACP,EACA,EACA,EACU,CAEV,OADI,EAAK,SAAS,CAAI,IAAM,EAAgB,EACrC,EAAU,CAAC,GAAG,EAAM,CAAI,EAAI,EAAK,OAAQ,GAAU,IAAU,CAAI,CAC1E,CAQA,SAAgB,GAAgD,CAC9D,GAAM,CAAE,KAAM,EAAA,eAAe,WAAW,EAClC,CAAE,WAAY,EAAA,iBAAiB,EAC/B,EAAuB,EAAQ,OAAS,QACxC,CAAE,KAAM,EAAU,UAAW,GAAoB,EAAA,YAAY,EAC7D,CAAE,OAAQ,GAAiB,EAAA,gBAAgB,EAE3C,CAAC,EAAY,GAAiB,EAAA,QAAM,SAA0B,CAAC,CAAC,EAChE,EAAW,EAAA,QAAM,OAAsB,IAAI,EAqEjD,OAnEA,EAAA,QAAM,cAAgB,CACpB,GAAI,GAAmB,CAAC,EAAU,OAClC,IAAM,EAAW,EAAoB,EAAU,CAAoB,EACnE,EAAS,QAAU,EAAS,CAAQ,EACpC,EAAc,CAAQ,CACxB,EAAG,CACD,EACA,GAAU,eACV,GAAU,gBACV,CACF,CAAC,EAED,EAAA,QAAM,cAAgB,CAGpB,IAAM,EAAO,EAAS,CAAU,EAChC,GAAI,EAAS,UAAY,MAAQ,EAAS,UAAY,EAAM,OAC5D,EAAS,QAAU,EAEnB,IAAM,EAAiB,EAAW,gBAAkB,CAAC,EACrD,EACE,EACI,CACE,eAAgB,EAAA,4BAA4B,CAAU,EACtD,gBAAiB,CACnB,EACA,CAAE,gBAAiB,CAAe,EACtC,CACE,QAAU,GAAU,CAClB,EAAA,kBACE,EAAA,0BAA0B,CAAK,GAAK,EAAE,EAAA,QAAQ,aAAa,CAC7D,CACF,CACF,CACF,CACF,EAAG,CAAC,EAAY,EAAsB,EAAc,CAAC,CAAC,EAgC/C,CAAE,UA9BS,EAAA,QAAM,YAAc,CACpC,IAAM,EAAU,EAAA,2BAA2B,CAAU,EACrD,MAAQ,IAAqB,EAAQ,EAAM,IAAI,CACjD,EAAG,CAAC,CAAU,CA2BL,EAAW,WAzBD,EAAA,QAAM,aACtB,EAAmB,IAAqB,CACvC,EAAe,GAAa,CAC1B,IAAM,EAAc,GAAwB,EAAA,eAAe,CAAS,EACpE,MAAO,CACL,cAAe,EACX,EACE,EAAA,4BAA4B,CAAQ,EACpC,EACA,CACF,EACA,EAAS,cAGb,eAAgB,EACd,EAAS,gBAAkB,CAAC,EAC5B,EACA,CAAC,GAAW,CAAC,CACf,CACF,CACF,CAAC,CACH,EACA,CAAC,CAAoB,CAGH,CAAW,CACjC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SkillInfo } from "#/types/settings";
|
|
2
|
+
/** Read-only view of the rule, for surfaces that list skills without toggling. */
|
|
3
|
+
export declare function useSkillEnabledFilter(): (skill: SkillInfo) => boolean;
|
|
4
|
+
export interface SkillEnablementController {
|
|
5
|
+
isEnabled: (skill: SkillInfo) => boolean;
|
|
6
|
+
setEnabled: (skillName: string, enabled: boolean) => void;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Shared toggle state for every surface that switches skills on and off.
|
|
10
|
+
*
|
|
11
|
+
* Which of the two lists a skill belongs to is decided here alone, so one
|
|
12
|
+
* surface cannot write a preference another cannot see.
|
|
13
|
+
*/
|
|
14
|
+
export declare function useSkillEnablement(): SkillEnablementController;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { useTranslation as e } from "../node_modules/react-i18next/dist/es/useTranslation.js";
|
|
2
|
+
import { I18nKey as t } from "../i18n/declaration.js";
|
|
3
|
+
import { retrieveAxiosErrorMessage as n } from "../utils/retrieve-axios-error-message.js";
|
|
4
|
+
import { displayErrorToast as r } from "../utils/custom-toast-handlers.js";
|
|
5
|
+
import { useActiveBackend as i } from "../contexts/active-backend-context.js";
|
|
6
|
+
import { CATALOG_SKILL_NAMES as a, buildSkillEnablementFilter as o, isCatalogSkill as s, resolveEnabledCatalogSkills as c } from "../utils/skill-enablement.js";
|
|
7
|
+
import { useSettings as l } from "./query/use-settings.js";
|
|
8
|
+
import { useSaveSettings as u } from "./mutation/use-save-settings.js";
|
|
9
|
+
import d from "react";
|
|
10
|
+
//#region src/hooks/use-skill-enablement.ts
|
|
11
|
+
function f(e, t) {
|
|
12
|
+
return {
|
|
13
|
+
enabledSkills: t ? e?.enabled_skills : [...a],
|
|
14
|
+
disabledSkills: e?.disabled_skills ?? []
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function p() {
|
|
18
|
+
let { backend: e } = i(), { data: t } = l(), n = e.kind !== "cloud";
|
|
19
|
+
return d.useMemo(() => {
|
|
20
|
+
let e = o(f(t, n));
|
|
21
|
+
return (t) => e(t.name);
|
|
22
|
+
}, [
|
|
23
|
+
t?.enabled_skills,
|
|
24
|
+
t?.disabled_skills,
|
|
25
|
+
n
|
|
26
|
+
]);
|
|
27
|
+
}
|
|
28
|
+
function m(e) {
|
|
29
|
+
return JSON.stringify([[...c(e)].sort(), [...e.disabledSkills ?? []].sort()]);
|
|
30
|
+
}
|
|
31
|
+
function h(e, t, n) {
|
|
32
|
+
return e.includes(t) === n ? e : n ? [...e, t] : e.filter((e) => e !== t);
|
|
33
|
+
}
|
|
34
|
+
function g() {
|
|
35
|
+
let { t: a } = e("openhands"), { backend: p } = i(), g = p.kind !== "cloud", { data: _, isLoading: v } = l(), { mutate: y } = u(), [b, x] = d.useState({}), S = d.useRef(null);
|
|
36
|
+
return d.useEffect(() => {
|
|
37
|
+
if (v || !_) return;
|
|
38
|
+
let e = f(_, g);
|
|
39
|
+
S.current = m(e), x(e);
|
|
40
|
+
}, [
|
|
41
|
+
v,
|
|
42
|
+
_?.enabled_skills,
|
|
43
|
+
_?.disabled_skills,
|
|
44
|
+
g
|
|
45
|
+
]), d.useEffect(() => {
|
|
46
|
+
let e = m(b);
|
|
47
|
+
if (S.current === null || S.current === e) return;
|
|
48
|
+
S.current = e;
|
|
49
|
+
let i = b.disabledSkills ?? [];
|
|
50
|
+
y(g ? {
|
|
51
|
+
enabled_skills: c(b),
|
|
52
|
+
disabled_skills: i
|
|
53
|
+
} : { disabled_skills: i }, { onError: (e) => {
|
|
54
|
+
r(n(e) || a(t.ERROR$GENERIC));
|
|
55
|
+
} });
|
|
56
|
+
}, [
|
|
57
|
+
b,
|
|
58
|
+
g,
|
|
59
|
+
y,
|
|
60
|
+
a
|
|
61
|
+
]), {
|
|
62
|
+
isEnabled: d.useMemo(() => {
|
|
63
|
+
let e = o(b);
|
|
64
|
+
return (t) => e(t.name);
|
|
65
|
+
}, [b]),
|
|
66
|
+
setEnabled: d.useCallback((e, t) => {
|
|
67
|
+
x((n) => {
|
|
68
|
+
let r = g && s(e);
|
|
69
|
+
return {
|
|
70
|
+
enabledSkills: r ? h(c(n), e, t) : n.enabledSkills,
|
|
71
|
+
disabledSkills: h(n.disabledSkills ?? [], e, !t && !r)
|
|
72
|
+
};
|
|
73
|
+
});
|
|
74
|
+
}, [g])
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
//#endregion
|
|
78
|
+
export { p as useSkillEnabledFilter, g as useSkillEnablement };
|
|
79
|
+
|
|
80
|
+
//# sourceMappingURL=use-skill-enablement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-skill-enablement.js","names":[],"sources":["../../src/hooks/use-skill-enablement.ts"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useSaveSettings } from \"#/hooks/mutation/use-save-settings\";\nimport { useSettings } from \"#/hooks/query/use-settings\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport type { Settings, SkillInfo } from \"#/types/settings\";\nimport { displayErrorToast } from \"#/utils/custom-toast-handlers\";\nimport { retrieveAxiosErrorMessage } from \"#/utils/retrieve-axios-error-message\";\nimport {\n buildSkillEnablementFilter,\n CATALOG_SKILL_NAMES,\n isCatalogSkill,\n resolveEnabledCatalogSkills,\n type SkillEnablement,\n} from \"#/utils/skill-enablement\";\n\n/**\n * Settings → the two lists. Cloud creates conversations from its own\n * server-side catalog and never reads `enabled_skills`, so the catalog stays\n * deny-list governed there.\n */\nfunction readSkillEnablement(\n settings: Settings | undefined,\n usesCatalogAllowList: boolean,\n): SkillEnablement {\n return {\n enabledSkills: usesCatalogAllowList\n ? settings?.enabled_skills\n : [...CATALOG_SKILL_NAMES],\n disabledSkills: settings?.disabled_skills ?? [],\n };\n}\n\n/** Read-only view of the rule, for surfaces that list skills without toggling. */\nexport function useSkillEnabledFilter(): (skill: SkillInfo) => boolean {\n const { backend } = useActiveBackend();\n const { data: settings } = useSettings();\n const usesCatalogAllowList = backend.kind !== \"cloud\";\n\n return React.useMemo(() => {\n const isEnabled = buildSkillEnablementFilter(\n readSkillEnablement(settings, usesCatalogAllowList),\n );\n return (skill: SkillInfo) => isEnabled(skill.name);\n }, [\n settings?.enabled_skills,\n settings?.disabled_skills,\n usesCatalogAllowList,\n ]);\n}\n\nexport interface SkillEnablementController {\n isEnabled: (skill: SkillInfo) => boolean;\n setEnabled: (skillName: string, enabled: boolean) => void;\n}\n\n/** Stable form of both lists, so an unchanged set can skip the save. */\nfunction snapshot(enablement: SkillEnablement): string {\n return JSON.stringify([\n [...resolveEnabledCatalogSkills(enablement)].sort(),\n [...(enablement.disabledSkills ?? [])].sort(),\n ]);\n}\n\n/** Same array reference when the membership already matches, to skip a save. */\nfunction withMembership(\n list: string[],\n name: string,\n present: boolean,\n): string[] {\n if (list.includes(name) === present) return list;\n return present ? [...list, name] : list.filter((entry) => entry !== name);\n}\n\n/**\n * Shared toggle state for every surface that switches skills on and off.\n *\n * Which of the two lists a skill belongs to is decided here alone, so one\n * surface cannot write a preference another cannot see.\n */\nexport function useSkillEnablement(): SkillEnablementController {\n const { t } = useTranslation(\"openhands\");\n const { backend } = useActiveBackend();\n const usesCatalogAllowList = backend.kind !== \"cloud\";\n const { data: settings, isLoading: settingsLoading } = useSettings();\n const { mutate: saveSettings } = useSaveSettings();\n\n const [enablement, setEnablement] = React.useState<SkillEnablement>({});\n const savedRef = React.useRef<string | null>(null);\n\n React.useEffect(() => {\n if (settingsLoading || !settings) return;\n const hydrated = readSkillEnablement(settings, usesCatalogAllowList);\n savedRef.current = snapshot(hydrated);\n setEnablement(hydrated);\n }, [\n settingsLoading,\n settings?.enabled_skills,\n settings?.disabled_skills,\n usesCatalogAllowList,\n ]);\n\n React.useEffect(() => {\n // Writing the hydrated value straight back would race the one-shot\n // migration and could narrow a workspace it had just preserved.\n const next = snapshot(enablement);\n if (savedRef.current === null || savedRef.current === next) return;\n savedRef.current = next;\n\n const disabledSkills = enablement.disabledSkills ?? [];\n saveSettings(\n usesCatalogAllowList\n ? {\n enabled_skills: resolveEnabledCatalogSkills(enablement),\n disabled_skills: disabledSkills,\n }\n : { disabled_skills: disabledSkills },\n {\n onError: (error) => {\n displayErrorToast(\n retrieveAxiosErrorMessage(error) || t(I18nKey.ERROR$GENERIC),\n );\n },\n },\n );\n }, [enablement, usesCatalogAllowList, saveSettings, t]);\n\n const isEnabled = React.useMemo(() => {\n const enabled = buildSkillEnablementFilter(enablement);\n return (skill: SkillInfo) => enabled(skill.name);\n }, [enablement]);\n\n const setEnabled = React.useCallback(\n (skillName: string, enabled: boolean) => {\n setEnablement((previous) => {\n const allowListed = usesCatalogAllowList && isCatalogSkill(skillName);\n return {\n enabledSkills: allowListed\n ? withMembership(\n resolveEnabledCatalogSkills(previous),\n skillName,\n enabled,\n )\n : previous.enabledSkills,\n // A catalog skill switched back on also leaves the deny-list, where\n // an unmigrated workspace may still hold it.\n disabledSkills: withMembership(\n previous.disabledSkills ?? [],\n skillName,\n !enabled && !allowListed,\n ),\n };\n });\n },\n [usesCatalogAllowList],\n );\n\n return { isEnabled, setEnabled };\n}\n"],"mappings":";;;;;;;;;;AAsBA,SAAS,EACP,GACA,GACiB;CACjB,OAAO;EACL,eAAe,IACX,GAAU,iBACV,CAAC,GAAG,CAAmB;EAC3B,gBAAgB,GAAU,mBAAmB,CAAC;CAChD;AACF;AAGA,SAAgB,IAAuD;CACrE,IAAM,EAAE,eAAY,EAAiB,GAC/B,EAAE,MAAM,MAAa,EAAY,GACjC,IAAuB,EAAQ,SAAS;CAE9C,OAAO,EAAM,cAAc;EACzB,IAAM,IAAY,EAChB,EAAoB,GAAU,CAAoB,CACpD;EACA,QAAQ,MAAqB,EAAU,EAAM,IAAI;CACnD,GAAG;EACD,GAAU;EACV,GAAU;EACV;CACF,CAAC;AACH;AAQA,SAAS,EAAS,GAAqC;CACrD,OAAO,KAAK,UAAU,CACpB,CAAC,GAAG,EAA4B,CAAU,CAAC,EAAE,KAAK,GAClD,CAAC,GAAI,EAAW,kBAAkB,CAAC,CAAE,EAAE,KAAK,CAC9C,CAAC;AACH;AAGA,SAAS,EACP,GACA,GACA,GACU;CAEV,OADI,EAAK,SAAS,CAAI,MAAM,IAAgB,IACrC,IAAU,CAAC,GAAG,GAAM,CAAI,IAAI,EAAK,QAAQ,MAAU,MAAU,CAAI;AAC1E;AAQA,SAAgB,IAAgD;CAC9D,IAAM,EAAE,SAAM,EAAe,WAAW,GAClC,EAAE,eAAY,EAAiB,GAC/B,IAAuB,EAAQ,SAAS,SACxC,EAAE,MAAM,GAAU,WAAW,MAAoB,EAAY,GAC7D,EAAE,QAAQ,MAAiB,EAAgB,GAE3C,CAAC,GAAY,KAAiB,EAAM,SAA0B,CAAC,CAAC,GAChE,IAAW,EAAM,OAAsB,IAAI;CAqEjD,OAnEA,EAAM,gBAAgB;EACpB,IAAI,KAAmB,CAAC,GAAU;EAClC,IAAM,IAAW,EAAoB,GAAU,CAAoB;EAEnE,AADA,EAAS,UAAU,EAAS,CAAQ,GACpC,EAAc,CAAQ;CACxB,GAAG;EACD;EACA,GAAU;EACV,GAAU;EACV;CACF,CAAC,GAED,EAAM,gBAAgB;EAGpB,IAAM,IAAO,EAAS,CAAU;EAChC,IAAI,EAAS,YAAY,QAAQ,EAAS,YAAY,GAAM;EAC5D,EAAS,UAAU;EAEnB,IAAM,IAAiB,EAAW,kBAAkB,CAAC;EACrD,EACE,IACI;GACE,gBAAgB,EAA4B,CAAU;GACtD,iBAAiB;EACnB,IACA,EAAE,iBAAiB,EAAe,GACtC,EACE,UAAU,MAAU;GAClB,EACE,EAA0B,CAAK,KAAK,EAAE,EAAQ,aAAa,CAC7D;EACF,EACF,CACF;CACF,GAAG;EAAC;EAAY;EAAsB;EAAc;CAAC,CAAC,GAgC/C;EAAE,WA9BS,EAAM,cAAc;GACpC,IAAM,IAAU,EAA2B,CAAU;GACrD,QAAQ,MAAqB,EAAQ,EAAM,IAAI;EACjD,GAAG,CAAC,CAAU,CA2BL;EAAW,YAzBD,EAAM,aACtB,GAAmB,MAAqB;GACvC,GAAe,MAAa;IAC1B,IAAM,IAAc,KAAwB,EAAe,CAAS;IACpE,OAAO;KACL,eAAe,IACX,EACE,EAA4B,CAAQ,GACpC,GACA,CACF,IACA,EAAS;KAGb,gBAAgB,EACd,EAAS,kBAAkB,CAAC,GAC5B,GACA,CAAC,KAAW,CAAC,CACf;IACF;GACF,CAAC;EACH,GACA,CAAC,CAAoB,CAGH;CAAW;AACjC"}
|