@openhands/agent-canvas 1.14.0 → 1.15.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-BKvmTf82.js +1 -0
- package/build/assets/active-backend-context-DKFSMbn3.js +2 -0
- package/build/assets/agent-context-settings-D3PjSTU1.js +1 -0
- package/build/assets/agent-profiles-settings-D4cY5U2T.js +1 -0
- package/build/assets/agent-server-conversation-service.api-DozDKIW_.js +86 -0
- package/build/assets/agent-settings-351vXWc9.js +2 -0
- package/build/assets/agent-settings-Ce7BDZ6I.js +1 -0
- package/build/assets/alert-banner-Kyy1YWZU.js +1 -0
- package/build/assets/api-error-message-BJyfWp6p.js +1 -0
- package/build/assets/api-key-entry-screen-INIxqAMs.js +1 -0
- package/build/assets/app-settings-CbHqzQus.js +1 -0
- package/build/assets/automation-detail-DXDhUwPq.js +3 -0
- package/build/assets/automation-export-BRopEHMu.js +2 -0
- package/build/assets/automation-git-sync-CzyS4cn1.js +1 -0
- package/build/assets/automation-setup-route-FRr05f_g.js +1 -0
- package/build/assets/automation-templates-C_0FZgLG.js +1 -0
- package/build/assets/automations-list-CERuQWE6.js +1 -0
- package/build/assets/back-nav-button-Dm9tIjVf.js +1 -0
- package/build/assets/backend-form-modal-DK78-jn1.js +1 -0
- package/build/assets/backend-synced-settings-badge-3fOwg6Bd.js +1 -0
- package/build/assets/badge-D4SqUCsR.js +1 -0
- package/build/assets/base-modal-C7_BDl_U.js +1 -0
- package/build/assets/bot-C-0Wu7vQ.js +1 -0
- package/build/assets/brand-button-Dxv6PDeN.js +1 -0
- package/build/assets/browser-11etCQ04.js +7 -0
- package/build/assets/browser-tab-BAl4ckJE.js +1 -0
- package/build/assets/chat-send-button-DWwR2cgI.js +1 -0
- package/build/assets/check-Cf2YoT90.js +1 -0
- package/build/assets/chevron-down-C3OQ-ehx.js +1 -0
- package/build/assets/chevron-right-CN1uUiJ1.js +1 -0
- package/build/assets/circle-check-g5yeGMd-.js +1 -0
- package/build/assets/circle-plus-check-toggle-CBh_qomE.js +1 -0
- package/build/assets/cloud-funnel-analytics-287iIERo.js +1 -0
- package/build/assets/cog-C4rrw-ZK.js +1 -0
- package/build/assets/command-menu-BZQ8S3Ke.js +1 -0
- package/build/assets/commits-tab-DZtJgaDM.js +1 -0
- package/build/assets/condenser-settings-BcNmYR4s.js +1 -0
- package/build/assets/confirmation-modal-Bk4JRcCM.js +1 -0
- package/build/assets/context-menu-list-item-lVYETtY5.js +1 -0
- package/build/assets/conversation-CchMzpGl.js +1 -0
- package/build/assets/conversation-Dpzftz57.js +93 -0
- package/build/assets/conversation-panel-CchMzpGl.js +1 -0
- package/build/assets/conversation-state-store-a9d2fxRc.js +1 -0
- package/build/assets/conversation-store-Ca3ghXap.js +6 -0
- package/build/assets/conversation-tab-empty-state-HJtkmHZj.js +1 -0
- package/build/assets/copy-to-clipboard-button-Cjkswvnj.js +1 -0
- package/build/assets/device-verify-EZhHhBT7.js +1 -0
- package/build/assets/dropdown-classes-DJe-E6MC.js +1 -0
- package/build/assets/edit-automation-modal-D-urtv8n.js +1 -0
- package/build/assets/empty-state-CvaVahVr.js +1 -0
- package/build/assets/entry.client-C7Bi2tkU.js +2 -0
- package/build/assets/enum-filter-dropdown-DliX_Lo0.js +1 -0
- package/build/assets/environment-switch-overlay-CEKrFiMw.js +1 -0
- package/build/assets/error-state-BALXiBNy.js +1 -0
- package/build/assets/extension-module-card-classes-DpeaYhYo.js +1 -0
- package/build/assets/extensions-hub-CFduxBnk.js +1 -0
- package/build/assets/extensions-navigation-BeC224yX.js +1 -0
- package/build/assets/external-link-DFpYunfj.js +1 -0
- package/build/assets/files-tab-CL3J9b3p.js +1 -0
- package/build/assets/form-control-classes-CGw40z5h.js +1 -0
- package/build/assets/get-git-path-DlAJa_i6.js +1 -0
- package/build/assets/git-repo-dropdown-DGMEhz7d.js +1 -0
- package/build/assets/git-repo-dropdown-ai8qaNkD.js +1 -0
- package/build/assets/highlighted-source-view-C3sxykQi.js +1 -0
- package/build/assets/home-BCGlNJCA.js +1 -0
- package/build/assets/home-DB1pRqTC.js +1 -0
- package/build/assets/home-automation-run-tooltip-CooFQRIG.js +1 -0
- package/build/assets/home-store-Dl1dPE58.js +1 -0
- package/build/assets/index-home-DB1pRqTC.js +1 -0
- package/build/assets/info-uYSVzX86.js +1 -0
- package/build/assets/install-server-modal-BbJdhzet.js +1 -0
- package/build/assets/kebab-menu-item-content-BYokkRHi.js +1 -0
- package/build/assets/key-Cn5za3rg.js +1 -0
- package/build/assets/launch-C1ieiOGe.js +1 -0
- package/build/assets/list-filter-OFkpRrmi.js +1 -0
- package/build/assets/list-todo-Cuu-STFc.js +1 -0
- package/build/assets/llm-not-configured-banner-BqqYnJ1t.js +27 -0
- package/build/assets/llm-settings-CnDbbmVW.js +1 -0
- package/build/assets/llm-settings-S8Yjg__1.js +1 -0
- package/build/assets/llm-subscription-service-BpPfzW4x.js +1 -0
- package/build/assets/loader-circle-nvrwthvj.js +1 -0
- package/build/assets/loading-spinner-0L3ZTToZ.js +1 -0
- package/build/assets/manage-backends-modal-BCUPswyl.js +1 -0
- package/build/assets/manifest-58597dde.js +1 -0
- package/build/assets/manifest-subpage-layout-BGhiUQbA.js +1 -0
- package/build/assets/map-provider-B9LTm23I.js +1 -0
- package/build/assets/markdown-renderer-Cb2sBWtV.js +8 -0
- package/build/assets/mcp-CKbR4Vft.js +1 -0
- package/build/assets/mcp-marketplace-utils-C13fFccR.js +1 -0
- package/build/assets/mcp-page-Bm4K2NQq.js +9 -0
- package/build/assets/messages-BTN5thLe.js +40 -0
- package/build/assets/modal-body-CMOc2tLl.js +1 -0
- package/build/assets/modal-classes-BAb4Y_BG.js +1 -0
- package/build/assets/modal-close-button-CkJ0Ktjj.js +1 -0
- package/build/assets/mouse-pointer-click-CsgRs_-r.js +1 -0
- package/build/assets/onboarding-Cx_kaiD1.js +1 -0
- package/build/assets/onboarding-modal-vMwn7ihv.js +1 -0
- package/build/assets/organization-service.api-C8XpQ0pM.js +1 -0
- package/build/assets/parse-git-remote-url-DpDM9bK6.js +1 -0
- package/build/assets/pencil-Clh1Wjvh.js +1 -0
- package/build/assets/planner-tab-DQvDU3ap.js +1 -0
- package/build/assets/plug-BuQhHSSG.js +1 -0
- package/build/assets/plugins-management-service-BjYeF0b0.js +1 -0
- package/build/assets/plus-CEKne-Yp.js +1 -0
- package/build/assets/profiles-service.api-QB-T_u-g.js +1 -0
- package/build/assets/providers-FfSZ5TXP.js +1 -0
- package/build/assets/proxy-tcFL2yTQ.js +1 -0
- package/build/assets/puzzle-A9pGxxai.js +1 -0
- package/build/assets/recommended-automations-launcher-Bw8uC4V6.js +1 -0
- package/build/assets/refresh-cw-Bh69DyYO.js +1 -0
- package/build/assets/root-BLeQfBEq.css +1 -0
- package/build/assets/root-ZKKYPR1Z.js +2 -0
- package/build/assets/root-layout-luJoE9IG.js +2 -0
- package/build/assets/schema-field-Csw5fhtN.js +1 -0
- package/build/assets/scroll-fade-state-Dw-i4SGq.js +1 -0
- package/build/assets/sdk-section-page-HTffvm7Q.js +1 -0
- package/build/assets/secret-form-HTUbYw5o.js +1 -0
- package/build/assets/secrets-service-BTor9uAU.js +1 -0
- package/build/assets/secrets-settings-BizaTEr1.js +1 -0
- package/build/assets/server-process-C9RKzd1x.js +1 -0
- package/build/assets/settings-BlmrkwRi.js +1 -0
- package/build/assets/settings-dropdown-input-tM0A0ipy.js +1 -0
- package/build/assets/settings-index-CKq0b0Vg.js +1 -0
- package/build/assets/settings-input-C03KUoSC.js +1 -0
- package/build/assets/settings-list-classes-BJ0g8rWj.js +1 -0
- package/build/assets/settings-modal-AzEF1QPP.js +1 -0
- package/build/assets/settings-service.api-B2agVfjL.js +1 -0
- package/build/assets/settings-switch-CQE0EGC-.js +1 -0
- package/build/assets/settings-utils-ClYOkbbI.js +1 -0
- package/build/assets/shared-conversation-B55pCyBG.js +1 -0
- package/build/assets/shield-check-CFDViW82.js +1 -0
- package/build/assets/sidebar-layout-D3hE08wK.js +1 -0
- package/build/assets/sidebar-mobile-menu-toggle-BOtyJHwE.js +1 -0
- package/build/assets/sidebar-nav-link-CPzhyHQg.js +1 -0
- package/build/assets/sidebar-onboarding-checklist-storage-3qYflszY.js +1 -0
- package/build/assets/sidebar-store-DtpU7zaI.js +1 -0
- package/build/assets/skill-card-pill-row-CFxjoqxn.js +1 -0
- package/build/assets/skill-filter-CWZ5kjcg.js +2 -0
- package/build/assets/skill-icon-badge-CPQJ6A-I.js +1 -0
- package/build/assets/skill-scope-CV1dkAbW.js +1 -0
- package/build/assets/skills-plugins-DGHULTq6.js +1 -0
- package/build/assets/skills-settings-CM1lFv3e.js +1 -0
- package/build/assets/styled-tooltip-Dl06rkpY.js +1 -0
- package/build/assets/task-list-tab-04GNQuii.js +1 -0
- package/build/assets/terminal-Cj0iHIW7.js +3 -0
- package/build/assets/toggle-switch-Fd_QGz0r.js +1 -0
- package/build/assets/trash-2-Dl8_RGz0.js +1 -0
- package/build/assets/trash-_RMt7Ayc.js +1 -0
- package/build/assets/triangle-alert-SM-q4NU_.js +1 -0
- package/build/assets/typography-SgFy466J.js +1 -0
- package/build/assets/usage-tab-BcfWV6db.js +1 -0
- package/build/assets/use-acp-credential-form-BsSW5NHG.js +1 -0
- package/build/assets/use-activate-agent-profile-B2NS8nA5.js +1 -0
- package/build/assets/use-agent-profiles-DWBPC0Si.js +1 -0
- package/build/assets/use-automation-health-BxXdzZMP.js +1 -0
- package/build/assets/use-automations-zYb0dUny.js +1 -0
- package/build/assets/use-can-manage-org-profiles-BWMahtUh.js +1 -0
- package/build/assets/use-cloud-current-user-id-CPHMDG-C.js +1 -0
- package/build/assets/use-config-Bft35DOK.js +1 -0
- package/build/assets/use-create-conversation-DwN5vv2f.js +1 -0
- package/build/assets/use-create-secret-BSxJMxHp.js +1 -0
- package/build/assets/use-get-secrets-BT4ihRwj.js +1 -0
- package/build/assets/use-has-permission-B3C8rQmR.js +1 -0
- package/build/assets/use-is-authed-CFGkY3-Z.js +1 -0
- package/build/assets/use-launch-skill-in-chat-BYjYihBP.js +1 -0
- package/build/assets/use-llm-configured-BI6obxsc.js +1 -0
- package/build/assets/use-llm-profiles-djGAhTWL.js +1 -0
- package/build/assets/use-manifest-capabilities-3z0-1G59.js +1 -0
- package/build/assets/use-onboarding-completion-BXpyUSsJ.js +1 -0
- package/build/assets/use-plugins-marketplace-DI4_pK56.js +1 -0
- package/build/assets/use-save-agent-profile-DdBSTdpN.js +1 -0
- package/build/assets/use-save-settings-CUZW6yXP.js +1 -0
- package/build/assets/use-settings-C5VhGpqd.js +1 -0
- package/build/assets/use-settings-nav-items-DHaUu1Dg.js +16 -0
- package/build/assets/use-tracking-D5t9otIF.js +3 -0
- package/build/assets/use-user-conversation-DT0_QCnL.js +1 -0
- package/build/assets/useInfiniteQuery-CgeUQPfs.js +1 -0
- package/build/assets/useMutation-DFnzkf6f.js +1 -0
- package/build/assets/useQueries-BhbrGEf1.js +1 -0
- package/build/assets/useQuery-BXWbZBZl.js +1 -0
- package/build/assets/utils-DaCIEEQP.js +1 -0
- package/build/assets/vendor~browser-hbU4u2Ag.js +47 -0
- package/build/assets/vendor~commits-tab-BaO2Ce3e.js +11 -0
- package/build/assets/vendor~conversation-panel~conversation-CTvDDiXg.js +1 -0
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kepq2zme-ZixYGy6E.js +186 -0
- package/build/assets/vendor~index-home~home~conversation-panel~conversation-BTyukeM-.js +13 -0
- package/build/assets/vendor~root-layout-BlUaZ18v.js +1 -0
- package/build/assets/vendor~root-layout~conversation-panel~conversation-BYAWJwQX.js +1 -0
- package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-CHaLEBVR.js +1 -0
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-B2OLKL7N.js +1 -0
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-DXqM7vqB.js +1 -0
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-Dtu7BpYk.js +48 -0
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iw7io29p-Dz-MAyNb.js +1 -0
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-DonTKfQD.js +4949 -0
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~jz4f6vo2-BgxDvUcf.js +8420 -0
- package/build/assets/verification-settings-Bj6bo097.js +1 -0
- package/build/assets/wrench-hi7Q13dF.js +1 -0
- package/build/assets/x-DkgltWa0.js +1 -0
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +124 -43
- package/build/locales/ca/openhands.json +124 -43
- package/build/locales/de/openhands.json +124 -43
- package/build/locales/en/openhands.json +124 -43
- package/build/locales/es/openhands.json +124 -43
- package/build/locales/fr/openhands.json +124 -43
- package/build/locales/it/openhands.json +124 -43
- package/build/locales/ja/openhands.json +124 -43
- package/build/locales/ko-KR/openhands.json +124 -43
- package/build/locales/no/openhands.json +124 -43
- package/build/locales/pt/openhands.json +124 -43
- package/build/locales/tr/openhands.json +124 -43
- package/build/locales/uk/openhands.json +124 -43
- package/build/locales/zh-CN/openhands.json +124 -43
- package/build/locales/zh-TW/openhands.json +124 -43
- package/config/defaults.json +2 -2
- 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 +10 -1
- package/dist/api/agent-server-adapter.js +115 -110
- package/dist/api/agent-server-adapter.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 +13 -2
- package/dist/api/automation-service/automation-service.api.js +99 -84
- package/dist/api/automation-service/automation-service.api.js.map +1 -1
- package/dist/api/backend-registry/url-selection.cjs +1 -1
- package/dist/api/backend-registry/url-selection.cjs.map +1 -1
- package/dist/api/backend-registry/url-selection.d.ts +2 -1
- package/dist/api/backend-registry/url-selection.js +2 -2
- package/dist/api/backend-registry/url-selection.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.js +29 -24
- package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
- package/dist/api/git-provider-items-service.cjs +2 -0
- package/dist/api/git-provider-items-service.cjs.map +1 -0
- package/dist/api/git-provider-items-service.d.ts +25 -0
- package/dist/api/git-provider-items-service.js +127 -0
- package/dist/api/git-provider-items-service.js.map +1 -0
- package/dist/api/mcp-health/probe-mcp-server-health.cjs +1 -1
- package/dist/api/mcp-health/probe-mcp-server-health.js +31 -31
- package/dist/api/open-hands.types.d.ts +0 -19
- package/dist/api/profiles-service/profiles-service.api.cjs.map +1 -1
- package/dist/api/profiles-service/profiles-service.api.d.ts +16 -2
- package/dist/api/profiles-service/profiles-service.api.js.map +1 -1
- package/dist/api/provider-connections-service/provider-connections-service.api.cjs +2 -0
- package/dist/api/provider-connections-service/provider-connections-service.api.cjs.map +1 -0
- package/dist/api/provider-connections-service/provider-connections-service.api.d.ts +34 -0
- package/dist/api/provider-connections-service/provider-connections-service.api.js +50 -0
- package/dist/api/provider-connections-service/provider-connections-service.api.js.map +1 -0
- package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.cjs +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.js +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message.js +1 -1
- package/dist/components/conversation-events/chat/event-message.js.map +1 -1
- package/dist/components/conversation-events/chat/messages.cjs.map +1 -1
- package/dist/components/conversation-events/chat/messages.js.map +1 -1
- package/dist/components/features/automations/add-automation-menu.d.ts +7 -0
- package/dist/components/features/automations/add-automation-modal.cjs +2 -0
- package/dist/components/features/automations/add-automation-modal.cjs.map +1 -0
- package/dist/components/features/automations/add-automation-modal.js +42 -0
- package/dist/components/features/automations/add-automation-modal.js.map +1 -0
- package/dist/components/features/automations/automation-action-button-classes.cjs +2 -0
- package/dist/components/features/automations/automation-action-button-classes.cjs.map +1 -0
- package/dist/components/features/automations/automation-action-button-classes.d.ts +0 -2
- package/dist/components/features/automations/automation-action-button-classes.js +8 -0
- package/dist/components/features/automations/automation-action-button-classes.js.map +1 -0
- package/dist/components/features/automations/automation-card-skeleton.cjs +2 -0
- package/dist/components/features/automations/automation-card-skeleton.cjs.map +1 -0
- package/dist/components/features/automations/automation-card-skeleton.js +33 -0
- package/dist/components/features/automations/automation-card-skeleton.js.map +1 -0
- package/dist/components/features/automations/automation-card.cjs +2 -0
- package/dist/components/features/automations/automation-card.cjs.map +1 -0
- package/dist/components/features/automations/automation-card.d.ts +1 -1
- package/dist/components/features/automations/automation-card.js +160 -0
- package/dist/components/features/automations/automation-card.js.map +1 -0
- package/dist/components/features/automations/automation-group.cjs +2 -0
- package/dist/components/features/automations/automation-group.cjs.map +1 -0
- package/dist/components/features/automations/automation-group.js +54 -0
- package/dist/components/features/automations/automation-group.js.map +1 -0
- package/dist/components/features/automations/automation-list-row.cjs +2 -0
- package/dist/components/features/automations/automation-list-row.cjs.map +1 -0
- package/dist/components/features/automations/automation-list-row.js +152 -0
- package/dist/components/features/automations/automation-list-row.js.map +1 -0
- package/dist/components/features/automations/automation-run-insights.cjs +2 -0
- package/dist/components/features/automations/automation-run-insights.cjs.map +1 -0
- package/dist/components/features/automations/automation-run-insights.js +46 -0
- package/dist/components/features/automations/automation-run-insights.js.map +1 -0
- package/dist/components/features/automations/automation-view-mode.cjs +2 -0
- package/dist/components/features/automations/automation-view-mode.cjs.map +1 -0
- package/dist/components/features/automations/automation-view-mode.d.ts +5 -1
- package/dist/components/features/automations/automation-view-mode.js +6 -0
- package/dist/components/features/automations/automation-view-mode.js.map +1 -0
- package/dist/components/features/automations/backend-not-configured.cjs +2 -0
- package/dist/components/features/automations/backend-not-configured.cjs.map +1 -0
- package/dist/components/features/automations/backend-not-configured.js +34 -0
- package/dist/components/features/automations/backend-not-configured.js.map +1 -0
- package/dist/components/features/automations/build-automation-menu-items.cjs +2 -0
- package/dist/components/features/automations/build-automation-menu-items.cjs.map +1 -0
- package/dist/components/features/automations/build-automation-menu-items.js +53 -0
- package/dist/components/features/automations/build-automation-menu-items.js.map +1 -0
- package/dist/components/features/automations/build-automation-pills.cjs +2 -0
- package/dist/components/features/automations/build-automation-pills.cjs.map +1 -0
- package/dist/components/features/automations/build-automation-pills.js +71 -0
- package/dist/components/features/automations/build-automation-pills.js.map +1 -0
- package/dist/components/features/automations/create-instructions.cjs +2 -0
- package/dist/components/features/automations/create-instructions.cjs.map +1 -0
- package/dist/components/features/automations/create-instructions.js +102 -0
- package/dist/components/features/automations/create-instructions.js.map +1 -0
- package/dist/components/features/automations/dashboard/automations-dashboard-controls.d.ts +4 -3
- package/dist/components/features/automations/detail/run-status-badge.cjs +2 -0
- package/dist/components/features/automations/detail/run-status-badge.cjs.map +1 -0
- package/dist/components/features/automations/detail/run-status-badge.js +102 -0
- package/dist/components/features/automations/detail/run-status-badge.js.map +1 -0
- package/dist/components/features/automations/empty-state.cjs +2 -0
- package/dist/components/features/automations/empty-state.cjs.map +1 -0
- package/dist/components/features/automations/empty-state.js +35 -0
- package/dist/components/features/automations/empty-state.js.map +1 -0
- package/dist/components/features/automations/error-state.cjs +2 -0
- package/dist/components/features/automations/error-state.cjs.map +1 -0
- package/dist/components/features/automations/error-state.js +28 -0
- package/dist/components/features/automations/error-state.js.map +1 -0
- package/dist/components/features/automations/import-automation-modal.d.ts +2 -1
- package/dist/components/features/automations/kebab-menu-item-content.cjs +2 -0
- package/dist/components/features/automations/kebab-menu-item-content.cjs.map +1 -0
- package/dist/components/features/automations/kebab-menu-item-content.js +21 -0
- package/dist/components/features/automations/kebab-menu-item-content.js.map +1 -0
- package/dist/components/features/automations/kebab-menu.cjs +2 -0
- package/dist/components/features/automations/kebab-menu.cjs.map +1 -0
- package/dist/components/features/automations/kebab-menu.d.ts +2 -1
- package/dist/components/features/automations/kebab-menu.js +76 -0
- package/dist/components/features/automations/kebab-menu.js.map +1 -0
- package/dist/components/features/automations/recommended-automations-launcher.cjs +2 -0
- package/dist/components/features/automations/recommended-automations-launcher.cjs.map +1 -0
- package/dist/components/features/automations/recommended-automations-launcher.d.ts +7 -1
- package/dist/components/features/automations/recommended-automations-launcher.js +134 -0
- package/dist/components/features/automations/recommended-automations-launcher.js.map +1 -0
- package/dist/components/features/automations/recommended-automations-rail.cjs +2 -0
- package/dist/components/features/automations/recommended-automations-rail.cjs.map +1 -0
- package/dist/components/features/automations/recommended-automations-rail.d.ts +9 -0
- package/dist/components/features/automations/recommended-automations-rail.js +127 -0
- package/dist/components/features/automations/recommended-automations-rail.js.map +1 -0
- package/dist/components/features/automations/recommended-automations-section.cjs +2 -0
- package/dist/components/features/automations/recommended-automations-section.cjs.map +1 -0
- package/dist/components/features/automations/recommended-automations-section.d.ts +2 -2
- package/dist/components/features/automations/recommended-automations-section.js +198 -0
- package/dist/components/features/automations/recommended-automations-section.js.map +1 -0
- package/dist/components/features/automations/responder-deployment-modal.cjs +2 -0
- package/dist/components/features/automations/responder-deployment-modal.cjs.map +1 -0
- package/dist/components/features/automations/responder-deployment-modal.js +75 -0
- package/dist/components/features/automations/responder-deployment-modal.js.map +1 -0
- package/dist/components/features/automations/status-badge.cjs +2 -0
- package/dist/components/features/automations/status-badge.cjs.map +1 -0
- package/dist/components/features/automations/status-badge.js +12 -0
- package/dist/components/features/automations/status-badge.js.map +1 -0
- package/dist/components/features/automations/to-latest-run-state.cjs +2 -0
- package/dist/components/features/automations/to-latest-run-state.cjs.map +1 -0
- package/dist/components/features/automations/to-latest-run-state.d.ts +6 -0
- package/dist/components/features/automations/to-latest-run-state.js +21 -0
- package/dist/components/features/automations/to-latest-run-state.js.map +1 -0
- package/dist/components/features/backends/backend-form-modal.cjs +1 -1
- package/dist/components/features/backends/backend-form-modal.js +10 -10
- package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
- package/dist/components/features/backends/manage-backends-modal.js +5 -5
- 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 +179 -177
- package/dist/components/features/chat/chat-interface.js.map +1 -1
- package/dist/components/features/command-menu/command-menu-items.d.ts +10 -4
- package/dist/components/features/conversation/conversation-git-actions-menu.cjs +2 -0
- package/dist/components/features/conversation/conversation-git-actions-menu.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-git-actions-menu.d.ts +15 -0
- package/dist/components/features/conversation/conversation-git-actions-menu.js +123 -0
- package/dist/components/features/conversation/conversation-git-actions-menu.js.map +1 -0
- package/dist/components/features/conversation/conversation-git-actions-toggle.cjs +2 -0
- package/dist/components/features/conversation/conversation-git-actions-toggle.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-git-actions-toggle.d.ts +10 -0
- package/dist/components/features/conversation/conversation-git-actions-toggle.js +60 -0
- package/dist/components/features/conversation/conversation-git-actions-toggle.js.map +1 -0
- package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.cjs +1 -1
- package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.js +46 -10
- package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.js.map +1 -1
- package/dist/components/features/conversation/conversation-main/conversation-main.cjs +1 -1
- package/dist/components/features/conversation/conversation-main/conversation-main.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-main/conversation-main.js +49 -43
- package/dist/components/features/conversation/conversation-main/conversation-main.js.map +1 -1
- package/dist/components/features/conversation/conversation-name-with-status.cjs +1 -1
- package/dist/components/features/conversation/conversation-name-with-status.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-name-with-status.js +49 -40
- package/dist/components/features/conversation/conversation-name-with-status.js.map +1 -1
- package/dist/components/features/conversation/conversation-name.cjs +1 -1
- package/dist/components/features/conversation/conversation-name.js +4 -4
- package/dist/components/features/conversation/conversation-overview-automations-panel.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-automations-panel.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-automations-panel.d.ts +6 -0
- package/dist/components/features/conversation/conversation-overview-automations-panel.js +48 -0
- package/dist/components/features/conversation/conversation-overview-automations-panel.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-context-menu.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-context-menu.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-context-menu.d.ts +10 -0
- package/dist/components/features/conversation/conversation-overview-context-menu.js +221 -0
- package/dist/components/features/conversation/conversation-overview-context-menu.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-diffs-row.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-diffs-row.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-diffs-row.d.ts +2 -0
- package/dist/components/features/conversation/conversation-overview-diffs-row.js +88 -0
- package/dist/components/features/conversation/conversation-overview-diffs-row.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer-content.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-drawer-content.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer-content.d.ts +6 -0
- package/dist/components/features/conversation/conversation-overview-drawer-content.js +138 -0
- package/dist/components/features/conversation/conversation-overview-drawer-content.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer-context.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-drawer-context.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer-context.d.ts +17 -0
- package/dist/components/features/conversation/conversation-overview-drawer-context.js +43 -0
- package/dist/components/features/conversation/conversation-overview-drawer-context.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-drawer.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer.constants.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-drawer.constants.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer.constants.d.ts +6 -0
- package/dist/components/features/conversation/conversation-overview-drawer.constants.js +6 -0
- package/dist/components/features/conversation/conversation-overview-drawer.constants.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer.d.ts +7 -0
- package/dist/components/features/conversation/conversation-overview-drawer.js +45 -0
- package/dist/components/features/conversation/conversation-overview-drawer.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer.types.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-drawer.types.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer.types.d.ts +12 -0
- package/dist/components/features/conversation/conversation-overview-drawer.types.js +13 -0
- package/dist/components/features/conversation/conversation-overview-drawer.types.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-git-items-panel.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-git-items-panel.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-git-items-panel.d.ts +7 -0
- package/dist/components/features/conversation/conversation-overview-git-items-panel.js +81 -0
- package/dist/components/features/conversation/conversation-overview-git-items-panel.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-git-section.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-git-section.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-git-section.d.ts +6 -0
- package/dist/components/features/conversation/conversation-overview-git-section.js +143 -0
- package/dist/components/features/conversation/conversation-overview-git-section.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-mcp-panel.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-mcp-panel.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-mcp-panel.d.ts +6 -0
- package/dist/components/features/conversation/conversation-overview-mcp-panel.js +108 -0
- package/dist/components/features/conversation/conversation-overview-mcp-panel.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-panel.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-panel.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-panel.constants.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-panel.constants.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-panel.constants.d.ts +24 -0
- package/dist/components/features/conversation/conversation-overview-panel.constants.js +12 -0
- package/dist/components/features/conversation/conversation-overview-panel.constants.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-panel.d.ts +2 -0
- package/dist/components/features/conversation/conversation-overview-panel.js +102 -0
- package/dist/components/features/conversation/conversation-overview-panel.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-project-scope-toggle.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-project-scope-toggle.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-project-scope-toggle.d.ts +8 -0
- package/dist/components/features/conversation/conversation-overview-project-scope-toggle.js +29 -0
- package/dist/components/features/conversation/conversation-overview-project-scope-toggle.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-secrets-panel.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-secrets-panel.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-secrets-panel.d.ts +6 -0
- package/dist/components/features/conversation/conversation-overview-secrets-panel.js +89 -0
- package/dist/components/features/conversation/conversation-overview-secrets-panel.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-sections.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-sections.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-sections.d.ts +43 -0
- package/dist/components/features/conversation/conversation-overview-sections.js +27 -0
- package/dist/components/features/conversation/conversation-overview-sections.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-skills-panel.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-skills-panel.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-skills-panel.d.ts +6 -0
- package/dist/components/features/conversation/conversation-overview-skills-panel.js +138 -0
- package/dist/components/features/conversation/conversation-overview-skills-panel.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-toggle.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-toggle.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-toggle.d.ts +11 -0
- package/dist/components/features/conversation/conversation-overview-toggle.js +99 -0
- package/dist/components/features/conversation/conversation-overview-toggle.js.map +1 -0
- package/dist/components/features/conversation/conversation-secondary-drawer.classes.cjs +2 -0
- package/dist/components/features/conversation/conversation-secondary-drawer.classes.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-secondary-drawer.classes.d.ts +4 -0
- package/dist/components/features/conversation/conversation-secondary-drawer.classes.js +7 -0
- package/dist/components/features/conversation/conversation-secondary-drawer.classes.js.map +1 -0
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.cjs +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.js +10 -9
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.js.map +1 -1
- 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 +68 -62
- 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 +98 -88
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js.map +1 -1
- package/dist/components/features/conversation/right-panel-toggle.cjs +1 -1
- package/dist/components/features/conversation/right-panel-toggle.cjs.map +1 -1
- package/dist/components/features/conversation/right-panel-toggle.d.ts +3 -2
- package/dist/components/features/conversation/right-panel-toggle.js +34 -33
- package/dist/components/features/conversation/right-panel-toggle.js.map +1 -1
- 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 +2 -1
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +14 -7
- 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 +252 -225
- package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
- package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs +1 -1
- package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs.map +1 -1
- package/dist/components/features/conversation-panel/local-new-conversation-menu.js +4 -4
- package/dist/components/features/conversation-panel/local-new-conversation-menu.js.map +1 -1
- package/dist/components/features/diff-viewer/accordion-panel.cjs +2 -0
- package/dist/components/features/diff-viewer/accordion-panel.cjs.map +1 -0
- package/dist/components/features/diff-viewer/accordion-panel.d.ts +13 -0
- package/dist/components/features/diff-viewer/accordion-panel.js +41 -0
- package/dist/components/features/diff-viewer/accordion-panel.js.map +1 -0
- package/dist/components/features/diff-viewer/commit-list.cjs +1 -1
- package/dist/components/features/diff-viewer/commit-list.cjs.map +1 -1
- package/dist/components/features/diff-viewer/commit-list.d.ts +5 -1
- package/dist/components/features/diff-viewer/commit-list.js +30 -16
- package/dist/components/features/diff-viewer/commit-list.js.map +1 -1
- package/dist/components/features/diff-viewer/commit-row.cjs +1 -1
- package/dist/components/features/diff-viewer/commit-row.cjs.map +1 -1
- package/dist/components/features/diff-viewer/commit-row.d.ts +1 -2
- package/dist/components/features/diff-viewer/commit-row.js +38 -34
- package/dist/components/features/diff-viewer/commit-row.js.map +1 -1
- package/dist/components/features/diff-viewer/diff-change-list.cjs +2 -0
- package/dist/components/features/diff-viewer/diff-change-list.cjs.map +1 -0
- package/dist/components/features/diff-viewer/diff-change-list.d.ts +18 -0
- package/dist/components/features/diff-viewer/diff-change-list.js +22 -0
- package/dist/components/features/diff-viewer/diff-change-list.js.map +1 -0
- package/dist/components/features/diff-viewer/editor-container.cjs +1 -1
- package/dist/components/features/diff-viewer/editor-container.cjs.map +1 -1
- package/dist/components/features/diff-viewer/editor-container.d.ts +2 -1
- package/dist/components/features/diff-viewer/editor-container.js +8 -7
- package/dist/components/features/diff-viewer/editor-container.js.map +1 -1
- package/dist/components/features/diff-viewer/file-diff-viewer.cjs +1 -1
- package/dist/components/features/diff-viewer/file-diff-viewer.cjs.map +1 -1
- package/dist/components/features/diff-viewer/file-diff-viewer.d.ts +10 -1
- package/dist/components/features/diff-viewer/file-diff-viewer.js +138 -112
- package/dist/components/features/diff-viewer/file-diff-viewer.js.map +1 -1
- package/dist/components/features/diff-viewer/uncommitted-changes-row.cjs +2 -0
- package/dist/components/features/diff-viewer/uncommitted-changes-row.cjs.map +1 -0
- package/dist/components/features/diff-viewer/uncommitted-changes-row.d.ts +12 -0
- package/dist/components/features/diff-viewer/uncommitted-changes-row.js +51 -0
- package/dist/components/features/diff-viewer/uncommitted-changes-row.js.map +1 -0
- package/dist/components/features/files-tab/file-content-viewer.cjs +1 -1
- package/dist/components/features/files-tab/file-content-viewer.cjs.map +1 -1
- package/dist/components/features/files-tab/file-content-viewer.js +0 -1
- package/dist/components/features/files-tab/file-content-viewer.js.map +1 -1
- package/dist/components/features/files-tab/file-quick-row.cjs +1 -1
- package/dist/components/features/files-tab/file-quick-row.cjs.map +1 -1
- package/dist/components/features/files-tab/file-quick-row.d.ts +9 -7
- package/dist/components/features/files-tab/file-quick-row.js +63 -34
- package/dist/components/features/files-tab/file-quick-row.js.map +1 -1
- package/dist/components/features/files-tab/files-tab-tree.constants.cjs +2 -0
- package/dist/components/features/files-tab/files-tab-tree.constants.cjs.map +1 -0
- package/dist/components/features/files-tab/files-tab-tree.constants.d.ts +7 -0
- package/dist/components/features/files-tab/files-tab-tree.constants.js +6 -0
- package/dist/components/features/files-tab/files-tab-tree.constants.js.map +1 -0
- package/dist/components/features/files-tab/segmented-toggle.cjs +1 -1
- package/dist/components/features/files-tab/segmented-toggle.cjs.map +1 -1
- package/dist/components/features/files-tab/segmented-toggle.d.ts +5 -3
- package/dist/components/features/files-tab/segmented-toggle.js +10 -13
- package/dist/components/features/files-tab/segmented-toggle.js.map +1 -1
- package/dist/components/features/files-tab/tree-node.cjs +1 -1
- package/dist/components/features/files-tab/tree-node.cjs.map +1 -1
- package/dist/components/features/files-tab/tree-node.js +34 -32
- package/dist/components/features/files-tab/tree-node.js.map +1 -1
- package/dist/components/features/files-tab/workspace-path.cjs +2 -0
- package/dist/components/features/files-tab/workspace-path.cjs.map +1 -0
- package/dist/components/features/files-tab/workspace-path.d.ts +6 -0
- package/dist/components/features/files-tab/workspace-path.js +41 -0
- package/dist/components/features/files-tab/workspace-path.js.map +1 -0
- package/dist/components/features/home/featured-automations/automation-health-indicator.cjs +2 -0
- package/dist/components/features/home/featured-automations/automation-health-indicator.cjs.map +1 -0
- package/dist/components/features/home/featured-automations/automation-health-indicator.js +22 -0
- package/dist/components/features/home/featured-automations/automation-health-indicator.js.map +1 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs +2 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs.map +1 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js +45 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js.map +1 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs +2 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs.map +1 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js +108 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js.map +1 -0
- package/dist/components/features/home/featured-automations/automation-run-health.cjs +2 -0
- package/dist/components/features/home/featured-automations/automation-run-health.cjs.map +1 -0
- package/dist/components/features/home/featured-automations/automation-run-health.js +75 -0
- package/dist/components/features/home/featured-automations/automation-run-health.js.map +1 -0
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs +2 -0
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs.map +1 -0
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js +74 -0
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js.map +1 -0
- package/dist/components/features/home/featured-automations/pinned-automation-card.d.ts +3 -3
- package/dist/components/features/home/git-repo-dropdown/use-url-search.cjs +1 -1
- package/dist/components/features/home/git-repo-dropdown/use-url-search.cjs.map +1 -1
- package/dist/components/features/home/git-repo-dropdown/use-url-search.js +1 -1
- package/dist/components/features/home/git-repo-dropdown/use-url-search.js.map +1 -1
- package/dist/components/features/home/workspace-dropdown/folder-browser-modal.cjs +1 -1
- package/dist/components/features/home/workspace-dropdown/folder-browser-modal.js +6 -6
- package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.cjs +1 -1
- package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.js +6 -6
- package/dist/components/features/manifest/manifest-form-field.d.ts +4 -3
- package/dist/components/features/manifest/manifest-icons.cjs +2 -0
- package/dist/components/features/manifest/manifest-icons.cjs.map +1 -0
- package/dist/components/features/manifest/manifest-icons.d.ts +1 -0
- package/dist/components/features/manifest/manifest-icons.js +21 -0
- package/dist/components/features/manifest/manifest-icons.js.map +1 -0
- package/dist/components/features/manifest/manifest-repository-list.d.ts +25 -0
- package/dist/components/features/markdown/markdown-table-scroll.cjs +1 -1
- package/dist/components/features/markdown/markdown-table-scroll.cjs.map +1 -1
- package/dist/components/features/markdown/markdown-table-scroll.d.ts +2 -6
- package/dist/components/features/markdown/markdown-table-scroll.js +15 -21
- package/dist/components/features/markdown/markdown-table-scroll.js.map +1 -1
- package/dist/components/features/mcp-logo-badge.cjs +1 -1
- package/dist/components/features/mcp-logo-badge.cjs.map +1 -1
- package/dist/components/features/mcp-logo-badge.d.ts +1 -1
- package/dist/components/features/mcp-logo-badge.js +1 -0
- package/dist/components/features/mcp-logo-badge.js.map +1 -1
- package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
- package/dist/components/features/mcp-page/custom-server-editor.js +16 -16
- package/dist/components/features/mcp-page/index.cjs +1 -1
- package/dist/components/features/mcp-page/index.js +2 -2
- package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
- package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
- package/dist/components/features/mcp-page/install-server-modal.js +25 -25
- package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
- package/dist/components/features/mcp-page/installed-server-card.cjs +1 -1
- package/dist/components/features/mcp-page/installed-server-card.js +5 -5
- package/dist/components/features/mcp-page/marketplace-card.cjs +1 -1
- package/dist/components/features/mcp-page/marketplace-card.js +4 -4
- package/dist/components/features/mcp-page/marketplace-section.cjs +1 -1
- package/dist/components/features/mcp-page/marketplace-section.js +3 -3
- package/dist/components/features/mcp-page/mcp-logo-stack-badge.cjs +2 -0
- package/dist/components/features/mcp-page/mcp-logo-stack-badge.cjs.map +1 -0
- package/dist/components/features/mcp-page/mcp-logo-stack-badge.js +60 -0
- package/dist/components/features/mcp-page/mcp-logo-stack-badge.js.map +1 -0
- package/dist/components/features/mcp-page/mcp-server-health.cjs +1 -1
- package/dist/components/features/mcp-page/mcp-server-health.js +18 -18
- package/dist/components/features/onboarding/use-onboarding-completion.cjs +2 -0
- package/dist/components/features/onboarding/use-onboarding-completion.cjs.map +1 -0
- package/dist/components/features/onboarding/use-onboarding-completion.js +32 -0
- package/dist/components/features/onboarding/use-onboarding-completion.js.map +1 -0
- package/dist/components/features/settings/app-settings/getting-started-checklist-switch.cjs +2 -0
- package/dist/components/features/settings/app-settings/getting-started-checklist-switch.cjs.map +1 -0
- package/dist/components/features/settings/app-settings/getting-started-checklist-switch.d.ts +1 -0
- package/dist/components/features/settings/app-settings/getting-started-checklist-switch.js +22 -0
- package/dist/components/features/settings/app-settings/getting-started-checklist-switch.js.map +1 -0
- package/dist/components/features/settings/brand-button.cjs +1 -1
- package/dist/components/features/settings/brand-button.cjs.map +1 -1
- package/dist/components/features/settings/brand-button.d.ts +2 -0
- package/dist/components/features/settings/brand-button.js +4 -2
- package/dist/components/features/settings/brand-button.js.map +1 -1
- package/dist/components/features/settings/llm-profiles/delete-provider-connection-modal.cjs +1 -0
- package/dist/components/features/settings/llm-profiles/delete-provider-connection-modal.d.ts +7 -0
- package/dist/components/features/settings/llm-profiles/delete-provider-connection-modal.js +7 -0
- package/dist/components/features/settings/llm-profiles/llm-profiles-manager.cjs +1 -1
- package/dist/components/features/settings/llm-profiles/llm-profiles-manager.js +3 -0
- 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/profiles-body.d.ts +20 -1
- package/dist/components/features/settings/llm-profiles/provider-connection-modal.cjs +1 -0
- package/dist/components/features/settings/llm-profiles/provider-connection-modal.d.ts +19 -0
- package/dist/components/features/settings/llm-profiles/provider-connection-modal.js +10 -0
- package/dist/components/features/settings/llm-profiles/provider-connection-row.cjs +1 -0
- package/dist/components/features/settings/llm-profiles/provider-connection-row.d.ts +10 -0
- package/dist/components/features/settings/llm-profiles/provider-connection-row.js +6 -0
- package/dist/components/features/settings/llm-profiles/provider-connections-manager.cjs +1 -0
- package/dist/components/features/settings/llm-profiles/provider-connections-manager.d.ts +15 -0
- package/dist/components/features/settings/llm-profiles/provider-connections-manager.js +8 -0
- package/dist/components/features/settings/sdk-settings/schema-field.cjs +1 -1
- package/dist/components/features/settings/sdk-settings/schema-field.js +6 -6
- package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs +1 -1
- package/dist/components/features/settings/sdk-settings/sdk-section-page.js +7 -7
- 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.js +7 -7
- package/dist/components/features/settings/settings-input.cjs +1 -1
- package/dist/components/features/settings/settings-input.cjs.map +1 -1
- package/dist/components/features/settings/settings-input.d.ts +6 -0
- package/dist/components/features/settings/settings-input.js +14 -13
- package/dist/components/features/settings/settings-input.js.map +1 -1
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.cjs +2 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.cjs.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.d.ts +7 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.js +102 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.js.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.cjs +2 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.cjs.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.d.ts +8 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.js +66 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.js.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.cjs +2 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.cjs.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.d.ts +3 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.js +15 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.js.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.cjs +2 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.cjs.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.d.ts +10 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.js +39 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.js.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.cjs +2 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.cjs.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.cjs +2 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.cjs.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.d.ts +26 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.js +78 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.js.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.d.ts +5 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.js +127 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.js.map +1 -0
- 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 +115 -111
- package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.cjs +2 -0
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.cjs.map +1 -0
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.d.ts +1 -0
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.js +10 -0
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.js.map +1 -0
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs +2 -0
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs.map +1 -0
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.d.ts +15 -0
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js +75 -0
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js.map +1 -0
- package/dist/components/features/skills/add-skill-modal.cjs +2 -0
- package/dist/components/features/skills/add-skill-modal.cjs.map +1 -0
- package/dist/components/features/skills/add-skill-modal.js +164 -0
- package/dist/components/features/skills/add-skill-modal.js.map +1 -0
- package/dist/components/features/skills/build-skill-pills.cjs +2 -0
- package/dist/components/features/skills/build-skill-pills.cjs.map +1 -0
- package/dist/components/features/skills/build-skill-pills.js +88 -0
- package/dist/components/features/skills/build-skill-pills.js.map +1 -0
- package/dist/components/features/skills/get-skill-card-description.cjs +2 -0
- package/dist/components/features/skills/get-skill-card-description.cjs.map +1 -0
- package/dist/components/features/skills/get-skill-card-description.js +34 -0
- package/dist/components/features/skills/get-skill-card-description.js.map +1 -0
- package/dist/components/features/skills/get-skill-chat-launch-message.cjs +2 -0
- package/dist/components/features/skills/get-skill-chat-launch-message.cjs.map +1 -0
- package/dist/components/features/skills/get-skill-chat-launch-message.js +9 -0
- package/dist/components/features/skills/get-skill-chat-launch-message.js.map +1 -0
- package/dist/components/features/skills/is-copyable-skill-source.cjs +2 -0
- package/dist/components/features/skills/is-copyable-skill-source.cjs.map +1 -0
- package/dist/components/features/skills/is-copyable-skill-source.js +9 -0
- package/dist/components/features/skills/is-copyable-skill-source.js.map +1 -0
- package/dist/components/features/skills/skill-card-pill-row.cjs +2 -0
- package/dist/components/features/skills/skill-card-pill-row.cjs.map +1 -0
- package/dist/components/features/skills/skill-card-pill-row.d.ts +1 -1
- package/dist/components/features/skills/skill-card-pill-row.js +137 -0
- package/dist/components/features/skills/skill-card-pill-row.js.map +1 -0
- package/dist/components/features/skills/skill-card.cjs +2 -0
- package/dist/components/features/skills/skill-card.cjs.map +1 -0
- package/dist/components/features/skills/skill-card.js +93 -0
- package/dist/components/features/skills/skill-card.js.map +1 -0
- package/dist/components/features/skills/skill-detail-modal.cjs +3 -0
- package/dist/components/features/skills/skill-detail-modal.cjs.map +1 -0
- package/dist/components/features/skills/skill-detail-modal.js +150 -0
- package/dist/components/features/skills/skill-detail-modal.js.map +1 -0
- package/dist/components/features/skills/skill-facet-rail.cjs +2 -0
- package/dist/components/features/skills/skill-facet-rail.cjs.map +1 -0
- package/dist/components/features/skills/skill-facet-rail.js +42 -0
- package/dist/components/features/skills/skill-facet-rail.js.map +1 -0
- package/dist/components/features/skills/skill-facet-row.cjs +2 -0
- package/dist/components/features/skills/skill-facet-row.cjs.map +1 -0
- package/dist/components/features/skills/skill-facet-row.js +44 -0
- package/dist/components/features/skills/skill-facet-row.js.map +1 -0
- package/dist/components/features/skills/skill-filter.cjs +2 -0
- package/dist/components/features/skills/skill-filter.cjs.map +1 -0
- package/dist/components/features/skills/skill-filter.js +166 -0
- package/dist/components/features/skills/skill-filter.js.map +1 -0
- package/dist/components/features/skills/skill-filters-modal.cjs +2 -0
- package/dist/components/features/skills/skill-filters-modal.cjs.map +1 -0
- package/dist/components/features/skills/skill-filters-modal.js +53 -0
- package/dist/components/features/skills/skill-filters-modal.js.map +1 -0
- package/dist/components/features/skills/skill-icon-badge.cjs +2 -0
- package/dist/components/features/skills/skill-icon-badge.cjs.map +1 -0
- package/dist/components/features/skills/skill-icon-badge.js +17 -0
- package/dist/components/features/skills/skill-icon-badge.js.map +1 -0
- package/dist/components/features/skills/skill-type-badge.cjs +2 -0
- package/dist/components/features/skills/skill-type-badge.cjs.map +1 -0
- package/dist/components/features/skills/skill-type-badge.js +21 -0
- package/dist/components/features/skills/skill-type-badge.js.map +1 -0
- package/dist/components/features/skills/skills-toolbar.cjs +2 -0
- package/dist/components/features/skills/skills-toolbar.cjs.map +1 -0
- package/dist/components/features/skills/skills-toolbar.js +63 -0
- package/dist/components/features/skills/skills-toolbar.js.map +1 -0
- package/dist/components/shared/buttons/circle-plus-check-toggle.cjs +1 -1
- package/dist/components/shared/buttons/circle-plus-check-toggle.cjs.map +1 -1
- package/dist/components/shared/buttons/circle-plus-check-toggle.js +19 -6
- package/dist/components/shared/buttons/circle-plus-check-toggle.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 +4 -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/modals/settings/settings-form.cjs +1 -1
- package/dist/components/shared/modals/settings/settings-form.js +4 -4
- package/dist/components/ui/resize-handle.cjs +1 -1
- package/dist/components/ui/resize-handle.cjs.map +1 -1
- package/dist/components/ui/resize-handle.d.ts +2 -1
- package/dist/components/ui/resize-handle.js +6 -5
- package/dist/components/ui/resize-handle.js.map +1 -1
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +2 -2
- package/dist/config/defaults.js.map +1 -1
- package/dist/constants/skills-docs.cjs +2 -0
- package/dist/constants/skills-docs.cjs.map +1 -0
- package/dist/constants/skills-docs.js +6 -0
- package/dist/constants/skills-docs.js.map +1 -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.js +174 -149
- package/dist/contexts/conversation-websocket-context.js.map +1 -1
- package/dist/fixtures/home-automations-demo.cjs +2 -0
- package/dist/fixtures/home-automations-demo.cjs.map +1 -0
- package/dist/fixtures/home-automations-demo.d.ts +1 -3
- package/dist/fixtures/home-automations-demo.js +384 -0
- package/dist/fixtures/home-automations-demo.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.d.ts +1 -2
- package/dist/hooks/chat/use-slash-command.js +1 -0
- 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 +27 -30
- package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
- package/dist/hooks/mutation/use-create-provider-connection.cjs +1 -0
- package/dist/hooks/mutation/use-create-provider-connection.d.ts +2 -0
- package/dist/hooks/mutation/use-create-provider-connection.js +1 -0
- package/dist/hooks/mutation/use-delete-mcp-server.cjs +1 -1
- package/dist/hooks/mutation/use-delete-mcp-server.js +3 -3
- package/dist/hooks/mutation/use-delete-provider-connection.cjs +1 -0
- package/dist/hooks/mutation/use-delete-provider-connection.d.ts +1 -0
- package/dist/hooks/mutation/use-delete-provider-connection.js +1 -0
- package/dist/hooks/mutation/use-switch-acp-model.cjs +1 -1
- package/dist/hooks/mutation/use-switch-acp-model.cjs.map +1 -1
- package/dist/hooks/mutation/use-switch-acp-model.d.ts +5 -3
- package/dist/hooks/mutation/use-switch-acp-model.js +9 -13
- package/dist/hooks/mutation/use-switch-acp-model.js.map +1 -1
- package/dist/hooks/mutation/use-update-mcp-server.cjs +1 -1
- package/dist/hooks/mutation/use-update-mcp-server.js +6 -6
- package/dist/hooks/mutation/use-update-provider-connection.cjs +1 -0
- package/dist/hooks/mutation/use-update-provider-connection.d.ts +7 -0
- package/dist/hooks/mutation/use-update-provider-connection.js +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 +3 -0
- package/dist/hooks/query/query-keys.js +4 -4
- package/dist/hooks/query/query-keys.js.map +1 -1
- package/dist/hooks/query/use-automation-detail.cjs +1 -0
- package/dist/hooks/query/use-automation-detail.js +2 -0
- package/dist/hooks/query/use-automation-health.cjs +2 -0
- package/dist/hooks/query/use-automation-health.cjs.map +1 -0
- package/dist/hooks/query/use-automation-health.js +22 -0
- package/dist/hooks/query/use-automation-health.js.map +1 -0
- package/dist/hooks/query/use-automations.cjs +2 -0
- package/dist/hooks/query/use-automations.cjs.map +1 -0
- package/dist/hooks/query/use-automations.js +28 -0
- package/dist/hooks/query/use-automations.js.map +1 -0
- 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.js +1 -1
- package/dist/hooks/query/use-backends-health.js.map +1 -1
- 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-conversation-history.cjs +1 -1
- package/dist/hooks/query/use-conversation-history.cjs.map +1 -1
- package/dist/hooks/query/use-conversation-history.js +3 -1
- package/dist/hooks/query/use-conversation-history.js.map +1 -1
- package/dist/hooks/query/use-conversation-metrics.cjs +1 -1
- package/dist/hooks/query/use-conversation-metrics.js +3 -3
- package/dist/hooks/query/use-latest-automation-runs.cjs +1 -0
- package/dist/hooks/query/use-latest-automation-runs.d.ts +2 -0
- package/dist/hooks/query/use-latest-automation-runs.js +3 -0
- package/dist/hooks/query/use-llm-profiles.d.ts +1 -1
- 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 +1 -1
- package/dist/hooks/query/use-paginated-conversations.js.map +1 -1
- package/dist/hooks/query/use-provider-connections.cjs +2 -0
- package/dist/hooks/query/use-provider-connections.cjs.map +1 -0
- package/dist/hooks/query/use-provider-connections.d.ts +8 -0
- package/dist/hooks/query/use-provider-connections.js +19 -0
- package/dist/hooks/query/use-provider-connections.js.map +1 -0
- package/dist/hooks/query/use-repository-git-items.cjs +2 -0
- package/dist/hooks/query/use-repository-git-items.cjs.map +1 -0
- package/dist/hooks/query/use-repository-git-items.d.ts +3 -0
- package/dist/hooks/query/use-repository-git-items.js +33 -0
- package/dist/hooks/query/use-repository-git-items.js.map +1 -0
- 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-workspace-files.cjs +1 -1
- package/dist/hooks/query/use-workspace-files.js +6 -6
- package/dist/hooks/use-bash-command-runner.cjs +1 -1
- package/dist/hooks/use-bash-command-runner.cjs.map +1 -1
- package/dist/hooks/use-bash-command-runner.js +45 -42
- package/dist/hooks/use-bash-command-runner.js.map +1 -1
- package/dist/hooks/use-conversation-overview-column-space.cjs +2 -0
- package/dist/hooks/use-conversation-overview-column-space.cjs.map +1 -0
- package/dist/hooks/use-conversation-overview-column-space.d.ts +2 -0
- package/dist/hooks/use-conversation-overview-column-space.js +25 -0
- package/dist/hooks/use-conversation-overview-column-space.js.map +1 -0
- package/dist/hooks/use-conversation-overview-git-diff-stats.cjs +2 -0
- package/dist/hooks/use-conversation-overview-git-diff-stats.cjs.map +1 -0
- package/dist/hooks/use-conversation-overview-git-diff-stats.d.ts +7 -0
- package/dist/hooks/use-conversation-overview-git-diff-stats.js +37 -0
- package/dist/hooks/use-conversation-overview-git-diff-stats.js.map +1 -0
- package/dist/hooks/use-conversation-overview-panel-peek.cjs +2 -0
- package/dist/hooks/use-conversation-overview-panel-peek.cjs.map +1 -0
- package/dist/hooks/use-conversation-overview-panel-peek.d.ts +9 -0
- package/dist/hooks/use-conversation-overview-panel-peek.js +32 -0
- package/dist/hooks/use-conversation-overview-panel-peek.js.map +1 -0
- package/dist/hooks/use-conversation-overview-stats.cjs +2 -0
- package/dist/hooks/use-conversation-overview-stats.cjs.map +1 -0
- package/dist/hooks/use-conversation-overview-stats.d.ts +4 -0
- package/dist/hooks/use-conversation-overview-stats.js +15 -0
- package/dist/hooks/use-conversation-overview-stats.js.map +1 -0
- package/dist/hooks/use-conversation-primary-repository.cjs +2 -0
- package/dist/hooks/use-conversation-primary-repository.cjs.map +1 -0
- package/dist/hooks/use-conversation-primary-repository.d.ts +11 -0
- package/dist/hooks/use-conversation-primary-repository.js +17 -0
- package/dist/hooks/use-conversation-primary-repository.js.map +1 -0
- package/dist/hooks/use-drag-scroll.cjs +2 -0
- package/dist/hooks/use-drag-scroll.cjs.map +1 -0
- package/dist/hooks/use-drag-scroll.d.ts +12 -0
- package/dist/hooks/use-drag-scroll.js +41 -0
- package/dist/hooks/use-drag-scroll.js.map +1 -0
- package/dist/hooks/use-has-permission.cjs +2 -0
- package/dist/hooks/use-has-permission.cjs.map +1 -0
- package/dist/hooks/use-has-permission.js +8 -0
- package/dist/hooks/use-has-permission.js.map +1 -0
- package/dist/hooks/use-home-automation-actions.cjs +2 -0
- package/dist/hooks/use-home-automation-actions.cjs.map +1 -0
- package/dist/hooks/use-home-automation-actions.js +15 -0
- package/dist/hooks/use-home-automation-actions.js.map +1 -0
- package/dist/hooks/use-launch-skill-in-chat.cjs +2 -0
- package/dist/hooks/use-launch-skill-in-chat.cjs.map +1 -0
- package/dist/hooks/use-launch-skill-in-chat.js +16 -0
- package/dist/hooks/use-launch-skill-in-chat.js.map +1 -0
- package/dist/hooks/use-mcp-server-health.cjs +1 -1
- package/dist/hooks/use-mcp-server-health.js +3 -3
- package/dist/hooks/use-resizable-drawer-width.cjs +2 -0
- package/dist/hooks/use-resizable-drawer-width.cjs.map +1 -0
- package/dist/hooks/use-resizable-drawer-width.d.ts +22 -0
- package/dist/hooks/use-resizable-drawer-width.js +46 -0
- package/dist/hooks/use-resizable-drawer-width.js.map +1 -0
- package/dist/hooks/use-responder-url-secret.cjs +2 -0
- package/dist/hooks/use-responder-url-secret.cjs.map +1 -0
- package/dist/hooks/use-responder-url-secret.js +51 -0
- package/dist/hooks/use-responder-url-secret.js.map +1 -0
- package/dist/hooks/use-select-conversation-tab.cjs +1 -1
- package/dist/hooks/use-select-conversation-tab.cjs.map +1 -1
- package/dist/hooks/use-select-conversation-tab.d.ts +2 -0
- package/dist/hooks/use-select-conversation-tab.js +15 -7
- package/dist/hooks/use-select-conversation-tab.js.map +1 -1
- package/dist/hooks/use-tracking.cjs +1 -1
- package/dist/hooks/use-tracking.cjs.map +1 -1
- package/dist/hooks/use-tracking.d.ts +17 -0
- package/dist/hooks/use-tracking.js +10 -0
- package/dist/hooks/use-tracking.js.map +1 -1
- package/dist/hooks/use-websocket.cjs +1 -1
- package/dist/hooks/use-websocket.cjs.map +1 -1
- package/dist/hooks/use-websocket.d.ts +1 -2
- package/dist/hooks/use-websocket.js +58 -51
- package/dist/hooks/use-websocket.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 +124 -43
- 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 +2091 -714
- package/dist/i18n/translation.js.map +1 -1
- package/dist/icons/check-circle.cjs +2 -0
- package/dist/icons/check-circle.cjs.map +1 -0
- package/dist/icons/check-circle.js +20 -0
- package/dist/icons/check-circle.js.map +1 -0
- package/dist/icons/chevron-down.cjs +2 -0
- package/dist/icons/chevron-down.cjs.map +1 -0
- package/dist/icons/chevron-down.js +20 -0
- package/dist/icons/chevron-down.js.map +1 -0
- package/dist/icons/clock.cjs +2 -0
- package/dist/icons/clock.cjs.map +1 -0
- package/dist/icons/clock.js +20 -0
- package/dist/icons/clock.js.map +1 -0
- package/dist/icons/exclamation-circle.cjs +2 -0
- package/dist/icons/exclamation-circle.cjs.map +1 -0
- package/dist/icons/exclamation-circle.js +20 -0
- package/dist/icons/exclamation-circle.js.map +1 -0
- package/dist/icons/kebab-vertical.cjs +2 -0
- package/dist/icons/kebab-vertical.cjs.map +1 -0
- package/dist/icons/kebab-vertical.js +14 -0
- package/dist/icons/kebab-vertical.js.map +1 -0
- package/dist/icons/key.cjs +2 -0
- package/dist/icons/key.cjs.map +1 -0
- package/dist/icons/key.js +21 -0
- package/dist/icons/key.js.map +1 -0
- package/dist/icons/message-square-share.cjs +2 -0
- package/dist/icons/message-square-share.cjs.map +1 -0
- package/dist/icons/message-square-share.js +22 -0
- package/dist/icons/message-square-share.js.map +1 -0
- package/dist/icons/play.cjs +2 -0
- package/dist/icons/play.cjs.map +1 -0
- package/dist/icons/play.js +19 -0
- package/dist/icons/play.js.map +1 -0
- package/dist/icons/power.cjs +2 -0
- package/dist/icons/power.cjs.map +1 -0
- package/dist/icons/power.js +20 -0
- package/dist/icons/power.js.map +1 -0
- package/dist/icons/sparkle.cjs +2 -0
- package/dist/icons/sparkle.cjs.map +1 -0
- package/dist/icons/sparkle.js +20 -0
- package/dist/icons/sparkle.js.map +1 -0
- package/dist/icons/trash.cjs +2 -0
- package/dist/icons/trash.cjs.map +1 -0
- package/dist/icons/trash.js +20 -0
- package/dist/icons/trash.js.map +1 -0
- package/dist/icons/x-circle.cjs +2 -0
- package/dist/icons/x-circle.cjs.map +1 -0
- package/dist/icons/x-circle.js +20 -0
- package/dist/icons/x-circle.js.map +1 -0
- package/dist/locales/ar/openhands.json +124 -43
- package/dist/locales/ca/openhands.json +124 -43
- package/dist/locales/de/openhands.json +124 -43
- package/dist/locales/en/openhands.json +124 -43
- package/dist/locales/es/openhands.json +124 -43
- package/dist/locales/fr/openhands.json +124 -43
- package/dist/locales/it/openhands.json +124 -43
- package/dist/locales/ja/openhands.json +124 -43
- package/dist/locales/ko-KR/openhands.json +124 -43
- package/dist/locales/no/openhands.json +124 -43
- package/dist/locales/pt/openhands.json +124 -43
- package/dist/locales/tr/openhands.json +124 -43
- package/dist/locales/uk/openhands.json +124 -43
- package/dist/locales/zh-CN/openhands.json +124 -43
- package/dist/locales/zh-TW/openhands.json +124 -43
- package/dist/manifests/automation-insights.cjs +2 -0
- package/dist/manifests/automation-insights.cjs.map +1 -0
- package/dist/manifests/automation-insights.d.ts +2 -0
- package/dist/manifests/automation-insights.js +9 -0
- package/dist/manifests/automation-insights.js.map +1 -0
- package/dist/manifests/automation-interface.cjs +1 -1
- package/dist/manifests/automation-interface.cjs.map +1 -1
- package/dist/manifests/automation-interface.d.ts +47 -31
- package/dist/manifests/automation-interface.js +48 -54
- package/dist/manifests/automation-interface.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 +37 -3
- package/dist/manifests/automation-setup.js +16 -2
- package/dist/manifests/automation-setup.js.map +1 -1
- package/dist/manifests/interface-validation.cjs +1 -1
- package/dist/manifests/interface-validation.cjs.map +1 -1
- package/dist/manifests/interface-validation.js +56 -52
- package/dist/manifests/interface-validation.js.map +1 -1
- package/dist/manifests/manifest-actions.d.ts +5 -0
- package/dist/manifests/manifest-bundle.d.ts +30 -0
- package/dist/manifests/manifest-local-validation.d.ts +10 -1
- package/dist/manifests/manifest-sources.cjs +1 -1
- package/dist/manifests/manifest-sources.cjs.map +1 -1
- package/dist/manifests/manifest-sources.js +3 -3
- package/dist/manifests/manifest-sources.js.map +1 -1
- package/dist/manifests/manifest-template.d.ts +14 -0
- package/dist/manifests/manifest-validation.cjs +1 -1
- package/dist/manifests/manifest-validation.cjs.map +1 -1
- package/dist/manifests/manifest-validation.js +78 -45
- package/dist/manifests/manifest-validation.js.map +1 -1
- package/dist/manifests/types.cjs +1 -1
- package/dist/manifests/types.cjs.map +1 -1
- package/dist/manifests/types.d.ts +64 -3
- package/dist/manifests/types.js +7 -6
- package/dist/manifests/types.js.map +1 -1
- package/dist/node_modules/@heroui/popover/dist/chunk-NW7HJLND.cjs +1 -1
- package/dist/node_modules/@heroui/popover/dist/chunk-NW7HJLND.js +10 -10
- package/dist/node_modules/@heroui/ripple/dist/chunk-UIQI3AYJ.cjs +1 -1
- package/dist/node_modules/@heroui/ripple/dist/chunk-UIQI3AYJ.js +8 -8
- package/dist/node_modules/@heroui/tooltip/dist/chunk-AUA5GDXN.cjs +1 -1
- package/dist/node_modules/@heroui/tooltip/dist/chunk-AUA5GDXN.js +9 -9
- package/dist/node_modules/@openhands/extensions/automations/bundle-index.cjs +4843 -0
- package/dist/node_modules/@openhands/extensions/automations/bundle-index.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/bundle-index.js +11 -0
- package/dist/node_modules/@openhands/extensions/automations/bundle-index.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.cjs +13 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.js +87 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs +12 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js +98 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs +9 -7
- 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 +32 -13
- 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 +2 -2
- 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 +29 -34
- 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-pr/manifest.cjs +3 -3
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js +2 -2
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.cjs +14 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.js +72 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/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 +16 -10
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/index.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/index.js +18 -13
- package/dist/node_modules/@openhands/extensions/automations/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 +6 -2
- package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.js +36 -3
- package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.cjs +2 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.js +75 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.js.map +1 -0
- 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 +68 -66
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.cjs +1002 -47
- package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.js +59 -17
- package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/activity.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/activity.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/activity.js +9 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/activity.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/book-open.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/book-open.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/book-open.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/book-open.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/download.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/download.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/download.js +19 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/download.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/file-text.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/file-text.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js +27 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js +27 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/laptop.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/laptop.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/laptop.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/laptop.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.js +39 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/library.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/library.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/library.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/library.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/package.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/package.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/package.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/package.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/palette.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/palette.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/palette.js +39 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/palette.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.js +25 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/timer.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/timer.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/timer.js +27 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/timer.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/app-settings.cjs +1 -1
- package/dist/routes/app-settings.cjs.map +1 -1
- package/dist/routes/app-settings.js +87 -85
- package/dist/routes/app-settings.js.map +1 -1
- package/dist/routes/commits-tab.cjs +1 -1
- package/dist/routes/commits-tab.cjs.map +1 -1
- package/dist/routes/commits-tab.js +27 -21
- package/dist/routes/commits-tab.js.map +1 -1
- package/dist/routes/conversation.cjs +1 -1
- package/dist/routes/conversation.cjs.map +1 -1
- package/dist/routes/conversation.js +56 -55
- package/dist/routes/conversation.js.map +1 -1
- package/dist/routes/files-tab.cjs +1 -1
- package/dist/routes/files-tab.cjs.map +1 -1
- package/dist/routes/files-tab.d.ts +4 -0
- package/dist/routes/files-tab.js +121 -151
- 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.d.ts +9 -1
- package/dist/routes/llm-settings.js +137 -107
- package/dist/routes/llm-settings.js.map +1 -1
- package/dist/routes/mcp.cjs +1 -1
- package/dist/routes/mcp.cjs.map +1 -1
- package/dist/routes/mcp.js +20 -20
- package/dist/routes/secrets-settings.cjs +1 -1
- package/dist/routes/secrets-settings.js +15 -15
- package/dist/stores/conversation-store.cjs +1 -1
- package/dist/stores/conversation-store.cjs.map +1 -1
- package/dist/stores/conversation-store.d.ts +8 -1
- package/dist/stores/conversation-store.js +9 -0
- package/dist/stores/conversation-store.js.map +1 -1
- package/dist/stores/files-tab-store.cjs +1 -1
- package/dist/stores/files-tab-store.cjs.map +1 -1
- package/dist/stores/files-tab-store.d.ts +13 -0
- package/dist/stores/files-tab-store.js +49 -5
- package/dist/stores/files-tab-store.js.map +1 -1
- package/dist/stores/use-event-store.cjs +1 -1
- package/dist/stores/use-event-store.cjs.map +1 -1
- package/dist/stores/use-event-store.js +11 -11
- package/dist/stores/use-event-store.js.map +1 -1
- package/dist/types/agent-server/core/events/message-event.d.ts +2 -2
- package/dist/types/automation.cjs +2 -0
- package/dist/types/automation.cjs.map +1 -0
- package/dist/types/automation.js +8 -0
- package/dist/types/automation.js.map +1 -0
- 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 -0
- package/dist/utils/automation-catalog.js +20 -1
- package/dist/utils/automation-catalog.js.map +1 -1
- package/dist/utils/automation-schedule.cjs +2 -0
- package/dist/utils/automation-schedule.cjs.map +1 -0
- package/dist/utils/automation-schedule.js +8 -0
- package/dist/utils/automation-schedule.js.map +1 -0
- package/dist/utils/automation-stack-section.cjs +2 -0
- package/dist/utils/automation-stack-section.cjs.map +1 -0
- package/dist/utils/automation-stack-section.d.ts +2 -0
- package/dist/utils/automation-stack-section.js +6 -0
- package/dist/utils/automation-stack-section.js.map +1 -0
- package/dist/utils/constants.cjs +1 -1
- package/dist/utils/constants.cjs.map +1 -1
- package/dist/utils/constants.js +4 -0
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/conversation-local-storage.cjs +1 -1
- package/dist/utils/conversation-local-storage.cjs.map +1 -1
- package/dist/utils/conversation-local-storage.d.ts +17 -4
- package/dist/utils/conversation-local-storage.js +111 -63
- package/dist/utils/conversation-local-storage.js.map +1 -1
- package/dist/utils/conversation-metrics.cjs +1 -1
- package/dist/utils/conversation-metrics.cjs.map +1 -1
- package/dist/utils/conversation-metrics.d.ts +3 -2
- package/dist/utils/conversation-metrics.js +16 -14
- package/dist/utils/conversation-metrics.js.map +1 -1
- package/dist/utils/conversation-overview-project-scope.cjs +2 -0
- package/dist/utils/conversation-overview-project-scope.cjs.map +1 -0
- package/dist/utils/conversation-overview-project-scope.d.ts +16 -0
- package/dist/utils/conversation-overview-project-scope.js +22 -0
- package/dist/utils/conversation-overview-project-scope.js.map +1 -0
- package/dist/utils/extension-module-card-classes.cjs +1 -1
- package/dist/utils/extension-module-card-classes.cjs.map +1 -1
- package/dist/utils/extension-module-card-classes.d.ts +1 -1
- package/dist/utils/extension-module-card-classes.js +2 -2
- package/dist/utils/extension-module-card-classes.js.map +1 -1
- package/dist/utils/format-relative-time.cjs +2 -0
- package/dist/utils/format-relative-time.cjs.map +1 -0
- package/dist/utils/format-relative-time.js +17 -0
- package/dist/utils/format-relative-time.js.map +1 -0
- package/dist/utils/git-diff-stats.cjs +5 -0
- package/dist/utils/git-diff-stats.cjs.map +1 -0
- package/dist/utils/git-diff-stats.d.ts +9 -0
- package/dist/utils/git-diff-stats.js +53 -0
- package/dist/utils/git-diff-stats.js.map +1 -0
- package/dist/utils/handle-event-for-ui.cjs +1 -1
- package/dist/utils/handle-event-for-ui.cjs.map +1 -1
- package/dist/utils/handle-event-for-ui.js +13 -11
- package/dist/utils/handle-event-for-ui.js.map +1 -1
- package/dist/utils/mcp-credential-validation.cjs +1 -1
- package/dist/utils/mcp-credential-validation.js +3 -3
- package/dist/utils/mcp-marketplace-utils.cjs +1 -1
- package/dist/utils/mcp-marketplace-utils.cjs.map +1 -1
- package/dist/utils/mcp-marketplace-utils.js +22 -9
- package/dist/utils/mcp-marketplace-utils.js.map +1 -1
- package/dist/utils/parse-git-remote-url.cjs +1 -1
- package/dist/utils/parse-git-remote-url.cjs.map +1 -1
- package/dist/utils/parse-git-remote-url.js +6 -7
- package/dist/utils/parse-git-remote-url.js.map +1 -1
- package/dist/utils/recommended-automation-rail.cjs +2 -0
- package/dist/utils/recommended-automation-rail.cjs.map +1 -0
- package/dist/utils/recommended-automation-rail.d.ts +22 -0
- package/dist/utils/recommended-automation-rail.js +44 -0
- package/dist/utils/recommended-automation-rail.js.map +1 -0
- package/dist/utils/responder-deployment.cjs +2 -0
- package/dist/utils/responder-deployment.cjs.map +1 -0
- package/dist/utils/responder-deployment.js +42 -0
- package/dist/utils/responder-deployment.js.map +1 -0
- package/dist/utils/scroll-fade-state.cjs +2 -0
- package/dist/utils/scroll-fade-state.cjs.map +1 -0
- package/dist/utils/scroll-fade-state.d.ts +6 -0
- package/dist/utils/scroll-fade-state.js +13 -0
- package/dist/utils/scroll-fade-state.js.map +1 -0
- package/dist/utils/skill-category.cjs +2 -0
- package/dist/utils/skill-category.cjs.map +1 -0
- package/dist/utils/skill-category.js +51 -0
- package/dist/utils/skill-category.js.map +1 -0
- package/dist/utils/skill-scope.cjs +1 -1
- package/dist/utils/skill-scope.cjs.map +1 -1
- package/dist/utils/skill-scope.js +1 -1
- package/dist/utils/skill-scope.js.map +1 -1
- package/dist/utils/streaming-delta-batcher.cjs +2 -0
- package/dist/utils/streaming-delta-batcher.cjs.map +1 -0
- package/dist/utils/streaming-delta-batcher.d.ts +21 -0
- package/dist/utils/streaming-delta-batcher.js +31 -0
- package/dist/utils/streaming-delta-batcher.js.map +1 -0
- package/dist/utils/tar-gzip.d.ts +26 -0
- package/dist/utils/utils.cjs +1 -1
- package/dist/utils/utils.cjs.map +1 -1
- package/dist/utils/utils.d.ts +1 -41
- package/dist/utils/utils.js +27 -6
- package/dist/utils/utils.js.map +1 -1
- package/dist/utils/websocket-handshake.cjs +2 -0
- package/dist/utils/websocket-handshake.cjs.map +1 -0
- package/dist/utils/websocket-handshake.d.ts +11 -0
- package/dist/utils/websocket-handshake.js +12 -0
- package/dist/utils/websocket-handshake.js.map +1 -0
- package/package.json +3 -3
- package/scripts/check-translation-completeness.cjs +4 -0
- package/scripts/dev-static.mjs +49 -43
- package/scripts/dev-with-automation.mjs +13 -5
- package/scripts/seed-automation-ux-data.mjs +810 -0
- package/build/assets/acp-providers-CYy8qA2z.js +0 -1
- package/build/assets/active-backend-context-BZDG15C0.js +0 -2
- package/build/assets/agent-context-settings-DGWBBbcp.js +0 -1
- package/build/assets/agent-profiles-settings-DrkGdf4_.js +0 -1
- package/build/assets/agent-server-conversation-service.api-DK56YPTs.js +0 -86
- package/build/assets/agent-settings-DfcSgkLD.js +0 -2
- package/build/assets/agent-settings-Lrc5-twS.js +0 -1
- package/build/assets/alert-banner-BgDHhL7b.js +0 -1
- package/build/assets/api-error-message-BEIE_yD1.js +0 -1
- package/build/assets/api-key-entry-screen-DaZnOlVo.js +0 -1
- package/build/assets/app-settings-BG5NAUbC.js +0 -1
- package/build/assets/automation-detail-D4Hs831Z.js +0 -3
- package/build/assets/automation-export-n0X6FB0C.js +0 -2
- package/build/assets/automation-git-sync-CDrm8WV7.js +0 -1
- package/build/assets/automation-setup-route-CZCl4ONs.js +0 -1
- package/build/assets/automation-templates-DFF96AdL.js +0 -1
- package/build/assets/automations-list-Bl-oGOrV.js +0 -1
- package/build/assets/back-nav-button-H_ThtDA0.js +0 -1
- package/build/assets/backend-form-modal-CbCemvHt.js +0 -1
- package/build/assets/backend-not-configured-DP8KLNq_.js +0 -1
- package/build/assets/backend-synced-settings-badge-BBASWqsb.js +0 -1
- package/build/assets/badge-B-51h-SW.js +0 -1
- package/build/assets/base-modal-BbjycA8X.js +0 -1
- package/build/assets/bot-CGPCg03p.js +0 -1
- package/build/assets/brand-button-Blxv5nww.js +0 -1
- package/build/assets/browser-CuW0nWvh.js +0 -7
- package/build/assets/browser-tab-D5G0ORwt.js +0 -1
- package/build/assets/chat-send-button-BD2tii1r.js +0 -1
- package/build/assets/check-DSuS-lyr.js +0 -1
- package/build/assets/chevron-down-CgGcmtE2.js +0 -1
- package/build/assets/circle-check-CG5-NPw7.js +0 -1
- package/build/assets/circle-plus-check-toggle-ASbpB8vN.js +0 -1
- package/build/assets/cloud-funnel-analytics-GlCUG0gk.js +0 -1
- package/build/assets/cog-CZiR80uT.js +0 -1
- package/build/assets/combobox-caret-DvpEsh2O.js +0 -1
- package/build/assets/command-menu-DwUQzjYP.js +0 -1
- package/build/assets/condenser-settings-BptcoiLA.js +0 -1
- package/build/assets/confirmation-modal-CiEwxZAA.js +0 -1
- package/build/assets/context-menu-list-item-CdcamfM1.js +0 -1
- package/build/assets/conversation-DREHj4nT.js +0 -1
- package/build/assets/conversation-DotRfiDz.js +0 -90
- package/build/assets/conversation-panel-DREHj4nT.js +0 -1
- package/build/assets/conversation-state-store-DMLtlHbE.js +0 -1
- package/build/assets/conversation-store-Blc5xysY.js +0 -6
- package/build/assets/conversation-tab-empty-state-D-puECpY.js +0 -1
- package/build/assets/copy-to-clipboard-button-BGxcUbgy.js +0 -1
- package/build/assets/device-verify-CZJfWaJf.js +0 -1
- package/build/assets/dropdown-classes-tLhpwtxS.js +0 -1
- package/build/assets/entry.client-D8GnI6GZ.js +0 -2
- package/build/assets/enum-filter-dropdown-Fk8k60nk.js +0 -1
- package/build/assets/environment-switch-overlay-DeztVYuL.js +0 -1
- package/build/assets/extension-module-card-classes-Bo43vY5V.js +0 -1
- package/build/assets/extensions-hub-Cd6GCYzq.js +0 -1
- package/build/assets/extensions-navigation-C4sgZg-y.js +0 -1
- package/build/assets/external-link-C0UpBgsE.js +0 -1
- package/build/assets/file-text-C6WYtNdV.js +0 -1
- package/build/assets/files-tab-BW_qzyAm.js +0 -1
- package/build/assets/form-control-classes-CGXBLcn1.js +0 -1
- package/build/assets/format-relative-time-ZhQD4rsl.js +0 -1
- package/build/assets/git-provider-icon-CaQ1yLPi.js +0 -1
- package/build/assets/git-repo-dropdown-CgXR6M_E.js +0 -1
- package/build/assets/git-repo-dropdown-D2Uei3CO.js +0 -1
- package/build/assets/highlighted-source-view-C_YOp8Fo.js +0 -1
- package/build/assets/home-DNzzJcMP.js +0 -1
- package/build/assets/home-aCos-5vc.js +0 -1
- package/build/assets/home-store-DgzViC3f.js +0 -1
- package/build/assets/index-home-DNzzJcMP.js +0 -1
- package/build/assets/info-CLoC1LRo.js +0 -1
- package/build/assets/install-server-modal-D7zIqNKz.js +0 -1
- package/build/assets/kebab-menu-item-content-DERMdnDv.js +0 -1
- package/build/assets/launch-5PjKeLak.js +0 -1
- package/build/assets/list-todo-BF049YaY.js +0 -1
- package/build/assets/llm-not-configured-banner-BK9z5eS0.js +0 -27
- package/build/assets/llm-settings-BLAMK2tR.js +0 -1
- package/build/assets/llm-settings-BWsbarGM.js +0 -1
- package/build/assets/llm-subscription-service-SfnEV9Uc.js +0 -1
- package/build/assets/loader-circle-D7IagAyF.js +0 -1
- package/build/assets/loading-spinner-DBgXgra0.js +0 -1
- package/build/assets/manage-backends-modal-BTqNPhzc.js +0 -1
- package/build/assets/manifest-abebca3c.js +0 -1
- package/build/assets/manifest-subpage-layout-Rn-glaxV.js +0 -1
- package/build/assets/map-provider-BK4HnqYz.js +0 -1
- package/build/assets/markdown-renderer-Cp6DlHQN.js +0 -8
- package/build/assets/mcp-BC-Ixn4T.js +0 -9
- package/build/assets/mcp-marketplace-utils-BJWJgbB6.js +0 -1
- package/build/assets/messages-CzFKrzPG.js +0 -40
- package/build/assets/modal-body-BdKfD3Hl.js +0 -1
- package/build/assets/modal-classes-D5_b5vMi.js +0 -1
- package/build/assets/modal-close-button-objukxk_.js +0 -1
- package/build/assets/mouse-pointer-click-C_gXyLyD.js +0 -1
- package/build/assets/npm-CHVHV1MC.js +0 -1
- package/build/assets/onboarding-Diw0V51A.js +0 -1
- package/build/assets/onboarding-modal-Da4yHzsA.js +0 -1
- package/build/assets/organization-service.api-BztSy69u.js +0 -1
- package/build/assets/parse-git-remote-url-BkXN9jzl.js +0 -1
- package/build/assets/pencil-49avMHlD.js +0 -1
- package/build/assets/planner-tab-CJiSpNax.js +0 -1
- package/build/assets/plugins-management-service-lHdNKWNU.js +0 -1
- package/build/assets/plus-C0BagBpV.js +0 -1
- package/build/assets/profiles-service.api-BLr7FXec.js +0 -1
- package/build/assets/providers-CWXnb7S3.js +0 -1
- package/build/assets/proxy-DYDXxtje.js +0 -1
- package/build/assets/puzzle-Bt2B1rzf.js +0 -1
- package/build/assets/recommended-automations-launcher-CcFMfJRR.js +0 -1
- package/build/assets/refresh-cw-nmcesifB.js +0 -1
- package/build/assets/root-CT4t7apy.css +0 -1
- package/build/assets/root-DnRgLKpU.js +0 -2
- package/build/assets/root-layout-2L9tr-BN.js +0 -2
- package/build/assets/schema-field-C59lVZTA.js +0 -1
- package/build/assets/sdk-section-page-BbBEQQjq.js +0 -1
- package/build/assets/search-CYSDBczG.js +0 -1
- package/build/assets/secrets-service-BtsgYSlj.js +0 -1
- package/build/assets/secrets-settings-DJ0OKa4_.js +0 -1
- package/build/assets/segmented-toggle-DiVfTZuN.js +0 -1
- package/build/assets/settings-CDqL_Uqh.js +0 -1
- package/build/assets/settings-dropdown-input-Ba1UN5Du.js +0 -1
- package/build/assets/settings-index-Cz2cKt2K.js +0 -1
- package/build/assets/settings-input-CWUEHHvS.js +0 -1
- package/build/assets/settings-list-classes-DdcLXDGn.js +0 -1
- package/build/assets/settings-modal-nEEK1Kh1.js +0 -1
- package/build/assets/settings-service.api-3yAUFcaP.js +0 -1
- package/build/assets/settings-switch-Dk9hChx1.js +0 -1
- package/build/assets/settings-utils-CxjtCSB3.js +0 -1
- package/build/assets/shared-conversation-DbAcrx3s.js +0 -1
- package/build/assets/shield-check-CiOTXxV2.js +0 -1
- package/build/assets/sidebar-layout-lrfPooIB.js +0 -1
- package/build/assets/sidebar-mobile-menu-toggle-KERXfNu1.js +0 -1
- package/build/assets/sidebar-nav-link-B8lFD6Cb.js +0 -1
- package/build/assets/sidebar-store-u6pUpxJ7.js +0 -1
- package/build/assets/skill-card-pill-row-dGIUzr_b.js +0 -1
- package/build/assets/skill-icon-badge-kkOWZ89w.js +0 -1
- package/build/assets/skill-scope-DWN1PBPH.js +0 -1
- package/build/assets/skills-plugins-DFjH2Nq6.js +0 -1
- package/build/assets/skills-settings-DIHpl3ol.js +0 -2
- package/build/assets/sparkles-ntyMLnbj.js +0 -1
- package/build/assets/styled-tooltip-B6JXcsmL.js +0 -1
- package/build/assets/task-list-tab-aEJzEcHD.js +0 -1
- package/build/assets/terminal-Dch7Ty5K.js +0 -3
- package/build/assets/toggle-switch-B2MLKsgt.js +0 -1
- package/build/assets/trash-2-yZnDM4Ji.js +0 -1
- package/build/assets/typography-DB5HoCk0.js +0 -1
- package/build/assets/usage-tab-DrEtBmBT.js +0 -1
- package/build/assets/use-acp-credential-form-c8KXAa8A.js +0 -1
- package/build/assets/use-activate-agent-profile-B0p34N3q.js +0 -1
- package/build/assets/use-agent-profiles-CPIc6wLH.js +0 -1
- package/build/assets/use-can-manage-org-profiles-Dz_8Eqkv.js +0 -1
- package/build/assets/use-cloud-current-user-id-DvUVqCle.js +0 -1
- package/build/assets/use-config-C3PO4TBw.js +0 -1
- package/build/assets/use-create-conversation-DVrA_uLD.js +0 -1
- package/build/assets/use-create-secret-DbBIpaCR.js +0 -1
- package/build/assets/use-get-secrets-6PBitf54.js +0 -1
- package/build/assets/use-has-permission-CQ31Cl8j.js +0 -1
- package/build/assets/use-is-authed-2UrDIziV.js +0 -1
- package/build/assets/use-is-creating-conversation-BvYpmb3v.js +0 -1
- package/build/assets/use-launch-skill-in-chat-COnDpxCQ.js +0 -1
- package/build/assets/use-llm-profiles-diZS4FiN.js +0 -1
- package/build/assets/use-manifest-capabilities-HIWCtIUm.js +0 -1
- package/build/assets/use-onboarding-completion-Bs8PcXik.js +0 -1
- package/build/assets/use-plugins-marketplace-BCuNLFsr.js +0 -1
- package/build/assets/use-save-agent-profile-BaMNSpBV.js +0 -1
- package/build/assets/use-save-settings-BahvC2Gw.js +0 -1
- package/build/assets/use-settings-C6ZxpBDX.js +0 -1
- package/build/assets/use-settings-nav-items-Bqn69Ggw.js +0 -16
- package/build/assets/use-tracking-Bhu7gk2y.js +0 -3
- package/build/assets/use-user-conversation-BkNXpXrd.js +0 -1
- package/build/assets/useInfiniteQuery-c_OmS3lK.js +0 -1
- package/build/assets/useMutation-6ZsQCqAn.js +0 -1
- package/build/assets/useQueries-xDrGlTO_.js +0 -1
- package/build/assets/useQuery-Bs5NFz2s.js +0 -1
- package/build/assets/utils-DUD5ScdA.js +0 -1
- package/build/assets/vendor~browser-B-fae1JU.js +0 -47
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kepq2zme-D87mAf6K.js +0 -186
- package/build/assets/vendor~files-tab-B6POTS66.js +0 -11
- package/build/assets/vendor~index-home~home~conversation-panel~conversation-53Q_U6uP.js +0 -13
- package/build/assets/vendor~root-layout-DeQACFVA.js +0 -1
- package/build/assets/vendor~root-layout~conversation-panel~conversation-bv7ooVgH.js +0 -1
- package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-e8pX05xf.js +0 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-BvS6PCK2.js +0 -1
- package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~automation-templates~automation-set~bxsimjx0-D7IDevqN.js +0 -1
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-DOPLJMH9.js +0 -48
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iw7io29p-Dz8NQve5.js +0 -1
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-BOVIFA_g.js +0 -73
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~jz4f6vo2-C0JXQb_q.js +0 -7465
- package/build/assets/verification-settings-COueVXmM.js +0 -1
- package/build/assets/wrench-C95ujnYo.js +0 -1
- package/build/assets/x-86ZCfxKY.js +0 -1
- package/build/assets/zap-DRa-r-Tf.js +0 -1
- package/dist/components/features/diff-viewer/empty-changes-message.cjs +0 -2
- package/dist/components/features/diff-viewer/empty-changes-message.cjs.map +0 -1
- package/dist/components/features/diff-viewer/empty-changes-message.js +0 -17
- package/dist/components/features/diff-viewer/empty-changes-message.js.map +0 -1
- package/dist/components/features/tips/random-tip.cjs +0 -2
- package/dist/components/features/tips/random-tip.cjs.map +0 -1
- package/dist/components/features/tips/random-tip.js +0 -41
- package/dist/components/features/tips/random-tip.js.map +0 -1
- package/dist/hooks/query/use-has-git-commits.cjs +0 -2
- package/dist/hooks/query/use-has-git-commits.cjs.map +0 -1
- package/dist/hooks/query/use-has-git-commits.d.ts +0 -25
- package/dist/hooks/query/use-has-git-commits.js +0 -31
- package/dist/hooks/query/use-has-git-commits.js.map +0 -1
- package/dist/hooks/use-has-attached-source.cjs +0 -2
- package/dist/hooks/use-has-attached-source.cjs.map +0 -1
- package/dist/hooks/use-has-attached-source.d.ts +0 -18
- package/dist/hooks/use-has-attached-source.js +0 -14
- package/dist/hooks/use-has-attached-source.js.map +0 -1
- package/dist/icons/chveron-up.cjs +0 -2
- package/dist/icons/chveron-up.cjs.map +0 -1
- package/dist/icons/chveron-up.js +0 -21
- package/dist/icons/chveron-up.js.map +0 -1
- package/dist/routes/changes-tab.cjs +0 -2
- package/dist/routes/changes-tab.cjs.map +0 -1
- package/dist/routes/changes-tab.d.ts +0 -3
- package/dist/routes/changes-tab.js +0 -64
- package/dist/routes/changes-tab.js.map +0 -1
- package/dist/utils/file-priority.cjs +0 -2
- package/dist/utils/file-priority.cjs.map +0 -1
- package/dist/utils/file-priority.d.ts +0 -27
- package/dist/utils/file-priority.js +0 -61
- package/dist/utils/file-priority.js.map +0 -1
- package/dist/utils/table-row-classes.d.ts +0 -9
- package/dist/utils/tips.cjs +0 -2
- package/dist/utils/tips.cjs.map +0 -1
- package/dist/utils/tips.js +0 -45
- package/dist/utils/tips.js.map +0 -1
- /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dcc51rps-rfV8mQ9m.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew3u153i-rfV8mQ9m.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface-validation.cjs","names":[],"sources":["../../src/manifests/interface-validation.ts"],"sourcesContent":["/**\n * Admission policy for the extension-published Automation interface manifest.\n *\n * Like a setup entry, the interface manifest is data authored in a different\n * repository that instructs this host to render copy, build links, and address\n * requests, so the host decides what it is *permitted* to state. Admission is\n * all-or-nothing: one bad field rejects the whole manifest, and the host falls\n * back to its own defaults rather than rendering a partially-trusted mix.\n */\n\nimport type {\n AutomationAttributeName,\n InterfaceAttributeType,\n InterfaceRoutes,\n OverviewMetric,\n} from \"./types\";\nimport {\n DASHBOARD_FILTER_IDS,\n DASHBOARD_FILTER_VALUES,\n DASHBOARD_SORT_VALUES,\n INTERFACE_ICON_SLUGS,\n INTERFACE_SUB_PAGE_IDS,\n INTERFACE_VERSION,\n OVERVIEW_METRICS,\n OVERVIEW_TILE_PLACEHOLDERS,\n} from \"./types\";\n\n/** Copy must never be able to inject markup into the host. */\nconst MARKUP_PATTERN = /<[A-Za-z/!]/;\nconst SLUG_PATTERN = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n/** The one URL the manifest may state, pinned to the product documentation. */\nconst DOCS_URL_PREFIX = \"https://docs.openhands.dev/\";\nconst FILE_KIND_PATTERN = /^[a-z][a-z-]*$/;\nconst FILENAME_SUFFIX_PATTERN = /^\\.[a-z][a-z.]*json$/;\nconst EVENT_SOURCE_PATTERN = /^[a-z0-9][a-z0-9.-]*$/;\n/** Service-relative only: rooted, no traversal, no query, no fragment. */\nconst ENDPOINT_PATTERN = /^\\/[A-Za-z0-9/{}_-]*$/;\n/** Exactly one `{id}` substitution and no other braces. */\nconst ID_ENDPOINT_PATTERN = /^[^{}]*\\{id\\}[^{}]*$/;\n\nconst GIT_PROVIDERS = [\"github\", \"gitlab\", \"bitbucket\"] as const;\n/**\n * The attribute semantics this host's edit dialog implements: the control it\n * renders per property and the requiredness it enforces. Admission pins a\n * declared attribute to exactly these, so an admitted manifest can never\n * promise a control, a requiredness, or (below) a minimum the form would\n * silently ignore.\n */\nconst HOST_ATTRIBUTES: Record<\n AutomationAttributeName,\n { type: InterfaceAttributeType; required: boolean }\n> = {\n name: { type: \"text\", required: true },\n prompt: { type: \"textarea\", required: false },\n model: { type: \"llm-profile\", required: false },\n timeout: { type: \"number\", required: false },\n schedule: { type: \"schedule\", required: false },\n};\nconst ATTRIBUTE_NAMES = Object.keys(HOST_ATTRIBUTES);\nconst PLAIN_ENDPOINT_NAMES = [\n \"list\",\n \"health\",\n \"capabilities\",\n \"validate\",\n \"createPrompt\",\n \"createPlugin\",\n] as const;\nconst ID_ENDPOINT_NAMES = [\"detail\", \"dispatch\", \"runs\", \"tarball\"] as const;\n\nexport interface InterfaceValidationContext {\n /** Ids of the published automation catalog, for the featured-list check. */\n catalogIds: ReadonlySet<string>;\n /** The routes this host has registrations for. A manifest must match them. */\n mountedRoutes: InterfaceRoutes;\n}\n\nexport interface InterfaceValidationResult {\n valid: boolean;\n errors: string[];\n}\n\ntype Rec = Record<string, unknown>;\n\nfunction isRecord(value: unknown): value is Rec {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isOneOf<T extends readonly string[]>(\n value: unknown,\n values: T,\n): value is T[number] {\n return (\n typeof value === \"string\" && (values as readonly string[]).includes(value)\n );\n}\n\nclass InterfaceChecker {\n readonly errors: string[] = [];\n\n fail(path: string, reason: string): false {\n this.errors.push(`${path}: ${reason}`);\n return false;\n }\n\n /** Literal user-visible copy. Carries no markup. */\n copy(value: unknown, path: string): boolean {\n if (typeof value !== \"string\" || value.length === 0) {\n return this.fail(path, \"must be a non-empty string\");\n }\n if (MARKUP_PATTERN.test(value)) {\n return this.fail(path, \"must not contain markup\");\n }\n return true;\n }\n\n /** A closed object: every present key must be an expected one. */\n closed(container: Rec, allowed: readonly string[], path: string): void {\n Object.keys(container)\n .filter((key) => !allowed.includes(key))\n .forEach((key) => this.fail(`${path}.${key}`, \"is not allowed\"));\n }\n\n record(value: unknown, path: string): value is Rec {\n if (isRecord(value)) return true;\n this.fail(path, \"must be an object\");\n return false;\n }\n}\n\nfunction checkRoutes(\n check: InterfaceChecker,\n routes: unknown,\n mounted: InterfaceRoutes,\n): void {\n if (!check.record(routes, \"routes\")) return;\n check.closed(routes, [\"list\", \"setup\", \"detail\", \"templates\"], \"routes\");\n\n // The host serves what it has registrations for, so a declared route must be\n // exactly the mounted shape — the manifest owns link construction, not the\n // router table.\n ([\"list\", \"setup\", \"detail\"] as const).forEach((name) => {\n if (routes[name] !== mounted[name]) {\n check.fail(`routes.${name}`, `must be \"${mounted[name]}\"`);\n }\n });\n if (\n routes.templates !== undefined &&\n routes.templates !== mounted.templates\n ) {\n check.fail(\n \"routes.templates\",\n mounted.templates === undefined\n ? \"is not a route this host mounts\"\n : `must be \"${mounted.templates}\"`,\n );\n }\n}\n\nfunction checkSubPages(check: InterfaceChecker, subPages: unknown): void {\n if (!Array.isArray(subPages) || subPages.length === 0) {\n check.fail(\"navigation.subPages\", \"must be a non-empty array\");\n return;\n }\n const seen = new Set<string>();\n subPages.forEach((item: unknown, index) => {\n const path = `navigation.subPages[${index}]`;\n if (!check.record(item, path)) return;\n check.closed(item, [\"page\", \"label\", \"icon\"], path);\n\n const { page, label, icon } = item;\n if (!isOneOf(page, INTERFACE_SUB_PAGE_IDS)) {\n check.fail(`${path}.page`, \"is not a sub-page this host serves\");\n } else if (seen.has(page)) {\n check.fail(`${path}.page`, \"repeats a page\");\n } else {\n seen.add(page);\n }\n check.copy(label, `${path}.label`);\n checkIconSlug(check, icon, `${path}.icon`);\n });\n}\n\nfunction checkIconSlug(\n check: InterfaceChecker,\n icon: unknown,\n path: string,\n): void {\n if (!isOneOf(icon, INTERFACE_ICON_SLUGS)) {\n check.fail(path, \"is not an icon this host ships\");\n }\n}\n\nfunction checkNavigation(check: InterfaceChecker, navigation: unknown): void {\n if (!check.record(navigation, \"navigation\")) return;\n check.closed(\n navigation,\n [\"sidebar\", \"commandMenu\", \"subPages\"],\n \"navigation\",\n );\n\n if (check.record(navigation.sidebar, \"navigation.sidebar\")) {\n check.closed(navigation.sidebar, [\"label\"], \"navigation.sidebar\");\n check.copy(navigation.sidebar.label, \"navigation.sidebar.label\");\n }\n if (check.record(navigation.commandMenu, \"navigation.commandMenu\")) {\n const menu = navigation.commandMenu;\n check.closed(\n menu,\n [\"title\", \"description\", \"keywords\"],\n \"navigation.commandMenu\",\n );\n check.copy(menu.title, \"navigation.commandMenu.title\");\n check.copy(menu.description, \"navigation.commandMenu.description\");\n check.copy(menu.keywords, \"navigation.commandMenu.keywords\");\n }\n if (navigation.subPages !== undefined) {\n checkSubPages(check, navigation.subPages);\n }\n}\n\nfunction checkPages(check: InterfaceChecker, pages: unknown): void {\n if (!check.record(pages, \"pages\")) return;\n check.closed(pages, [\"list\", \"detail\", \"edit\", \"templates\"], \"pages\");\n\n if (check.record(pages.list, \"pages.list\")) {\n check.closed(\n pages.list,\n [\"title\", \"subtitle\", \"overview\", \"filters\", \"sort\", \"insights\"],\n \"pages.list\",\n );\n check.copy(pages.list.title, \"pages.list.title\");\n check.copy(pages.list.subtitle, \"pages.list.subtitle\");\n if (pages.list.overview !== undefined) {\n checkOverview(check, pages.list.overview);\n }\n if (pages.list.filters !== undefined) {\n checkFilters(check, pages.list.filters);\n }\n if (pages.list.sort !== undefined) {\n checkSort(check, pages.list.sort);\n }\n if (pages.list.insights !== undefined) {\n checkInsights(check, pages.list.insights);\n }\n }\n if (check.record(pages.detail, \"pages.detail\")) {\n check.closed(pages.detail, [\"backLabel\"], \"pages.detail\");\n check.copy(pages.detail.backLabel, \"pages.detail.backLabel\");\n }\n if (check.record(pages.edit, \"pages.edit\")) {\n check.closed(pages.edit, [\"title\"], \"pages.edit\");\n check.copy(pages.edit.title, \"pages.edit.title\");\n }\n if (pages.templates !== undefined) {\n checkTemplatesPage(check, pages.templates);\n }\n}\n\nfunction checkOverview(check: InterfaceChecker, overview: unknown): void {\n const path = \"pages.list.overview\";\n if (!check.record(overview, path)) return;\n check.closed(overview, [\"label\", \"tiles\"], path);\n check.copy(overview.label, `${path}.label`);\n\n const { tiles } = overview;\n if (!Array.isArray(tiles) || tiles.length === 0) {\n check.fail(`${path}.tiles`, \"must be a non-empty array\");\n return;\n }\n const seen = new Set<string>();\n tiles.forEach((tile: unknown, index) => {\n checkOverviewTile(check, tile, seen, `${path}.tiles[${index}]`);\n });\n}\n\nfunction checkOverviewTile(\n check: InterfaceChecker,\n tile: unknown,\n seen: Set<string>,\n path: string,\n): void {\n if (!check.record(tile, path)) return;\n check.closed(tile, [\"metric\", \"label\", \"detail\", \"zeroDetail\", \"icon\"], path);\n\n const { metric, label, detail, zeroDetail, icon } = tile;\n check.copy(label, `${path}.label`);\n checkIconSlug(check, icon, `${path}.icon`);\n if (!isOneOf(metric, OVERVIEW_METRICS)) {\n check.fail(`${path}.metric`, \"is not a metric this host computes\");\n check.copy(detail, `${path}.detail`);\n if (zeroDetail !== undefined) check.copy(zeroDetail, `${path}.zeroDetail`);\n return;\n }\n if (seen.has(metric)) {\n check.fail(`${path}.metric`, \"repeats a metric\");\n } else {\n seen.add(metric);\n }\n checkTileCopy(check, detail, metric, `${path}.detail`);\n if (zeroDetail !== undefined) {\n checkTileCopy(check, zeroDetail, metric, `${path}.zeroDetail`);\n }\n}\n\n/**\n * Tile copy may embed `{{name}}` placeholders, but only the names the metric\n * exposes — plain substitution, never an expression.\n */\nfunction checkTileCopy(\n check: InterfaceChecker,\n value: unknown,\n metric: OverviewMetric,\n path: string,\n): void {\n if (!check.copy(value, path)) return;\n const exposed = OVERVIEW_TILE_PLACEHOLDERS[metric];\n const unknownPlaceholder =\n exposed.length === 0\n ? /\\{\\{/\n : new RegExp(`\\\\{\\\\{(?!(?:${exposed.join(\"|\")})\\\\}\\\\})`);\n if (unknownPlaceholder.test(value as string)) {\n check.fail(path, \"uses a placeholder this metric does not expose\");\n }\n}\n\nfunction checkFilters(check: InterfaceChecker, filters: unknown): void {\n const path = \"pages.list.filters\";\n if (!Array.isArray(filters) || filters.length === 0) {\n check.fail(path, \"must be a non-empty array\");\n return;\n }\n const seen = new Set<string>();\n filters.forEach((filter: unknown, index) => {\n checkFilter(check, filter, seen, `${path}[${index}]`);\n });\n}\n\nfunction checkFilter(\n check: InterfaceChecker,\n filter: unknown,\n seen: Set<string>,\n path: string,\n): void {\n if (!check.record(filter, path)) return;\n check.closed(filter, [\"id\", \"label\", \"options\"], path);\n\n const { id, label, options } = filter;\n check.copy(label, `${path}.label`);\n if (!isOneOf(id, DASHBOARD_FILTER_IDS)) {\n check.fail(`${path}.id`, \"is not a filter this host implements\");\n return;\n }\n if (seen.has(id)) {\n check.fail(`${path}.id`, \"repeats a filter\");\n } else {\n seen.add(id);\n }\n checkFilterOptions(\n check,\n options,\n DASHBOARD_FILTER_VALUES[id],\n `${path}.options`,\n );\n}\n\nfunction checkFilterOptions(\n check: InterfaceChecker,\n options: unknown,\n values: readonly string[],\n path: string,\n): void {\n if (!Array.isArray(options) || options.length < 2) {\n check.fail(path, \"must offer at least two options\");\n return;\n }\n const seen = new Set<string>();\n options.forEach((option: unknown, index) => {\n const optionPath = `${path}[${index}]`;\n if (!check.record(option, optionPath)) return;\n check.closed(option, [\"value\", \"label\"], optionPath);\n\n const { value, label } = option;\n if (!isOneOf(value, values)) {\n check.fail(`${optionPath}.value`, \"is not a value this host implements\");\n } else if (seen.has(value)) {\n check.fail(`${optionPath}.value`, \"repeats a value\");\n } else {\n seen.add(value);\n }\n check.copy(label, `${optionPath}.label`);\n });\n // \"all\" is the host's initial selection and what Clear filters resets to,\n // so a filter that does not offer it could never be neutral.\n if (!seen.has(\"all\")) {\n check.fail(path, 'must offer the \"all\" option');\n }\n}\n\nfunction checkSort(check: InterfaceChecker, sort: unknown): void {\n const path = \"pages.list.sort\";\n if (!check.record(sort, path)) return;\n check.closed(sort, [\"label\", \"options\", \"default\"], path);\n\n const { label, options, default: defaultValue } = sort;\n check.copy(label, `${path}.label`);\n const declared = new Set<string>();\n if (!Array.isArray(options) || options.length === 0) {\n check.fail(`${path}.options`, \"must be a non-empty array\");\n } else {\n options.forEach((option: unknown, index) => {\n const optionPath = `${path}.options[${index}]`;\n if (!check.record(option, optionPath)) return;\n check.closed(option, [\"value\", \"label\"], optionPath);\n\n if (!isOneOf(option.value, DASHBOARD_SORT_VALUES)) {\n check.fail(`${optionPath}.value`, \"is not a sort this host implements\");\n } else if (declared.has(option.value)) {\n check.fail(`${optionPath}.value`, \"repeats a value\");\n } else {\n declared.add(option.value);\n }\n check.copy(option.label, `${optionPath}.label`);\n });\n }\n if (typeof defaultValue !== \"string\" || !declared.has(defaultValue)) {\n check.fail(`${path}.default`, \"must be one of the declared option values\");\n }\n}\n\n/** Every insight state and stat the host renders must have a caption. */\nconst INSIGHTS_SHAPE = {\n health: [\"healthy\", \"failing\", \"running\", \"disabled\", \"neverRun\", \"checking\"],\n lastRun: [\"label\", \"never\", \"justNow\"],\n stats: [\"runs\", \"recentSuccess\", \"averageDuration\"],\n} as const;\n\nfunction checkInsights(check: InterfaceChecker, insights: unknown): void {\n const path = \"pages.list.insights\";\n if (!check.record(insights, path)) return;\n check.closed(insights, Object.keys(INSIGHTS_SHAPE), path);\n\n (Object.keys(INSIGHTS_SHAPE) as (keyof typeof INSIGHTS_SHAPE)[]).forEach(\n (section) => {\n const sectionPath = `${path}.${section}`;\n const value = insights[section];\n if (!check.record(value, sectionPath)) return;\n const keys = INSIGHTS_SHAPE[section];\n check.closed(value, keys, sectionPath);\n keys.forEach((key) => {\n check.copy(value[key], `${sectionPath}.${key}`);\n });\n },\n );\n}\n\nfunction checkTemplatesPage(check: InterfaceChecker, templates: unknown): void {\n const path = \"pages.templates\";\n if (!check.record(templates, path)) return;\n check.closed(templates, [\"title\", \"description\"], path);\n check.copy(templates.title, `${path}.title`);\n check.copy(templates.description, `${path}.description`);\n}\n\n/**\n * The sub-page surface is declared whole or not at all. Navigation that points\n * at an unrouted page, or a dashboard with filters but no insight captions,\n * would be a partially-trusted mix, and the host refuses those wholesale.\n */\nfunction checkSubPageGroup(check: InterfaceChecker, candidate: Rec): void {\n const routes = isRecord(candidate.routes) ? candidate.routes : {};\n const navigation = isRecord(candidate.navigation) ? candidate.navigation : {};\n const pages = isRecord(candidate.pages) ? candidate.pages : {};\n const list = isRecord(pages.list) ? pages.list : {};\n\n const pieces: [string, unknown][] = [\n [\"routes.templates\", routes.templates],\n [\"navigation.subPages\", navigation.subPages],\n [\"pages.templates\", pages.templates],\n [\"pages.list.overview\", list.overview],\n [\"pages.list.filters\", list.filters],\n [\"pages.list.sort\", list.sort],\n [\"pages.list.insights\", list.insights],\n ];\n const missing = pieces\n .filter(([, value]) => value === undefined)\n .map(([name]) => name);\n if (missing.length === 0 || missing.length === pieces.length) return;\n check.fail(\n \"interface\",\n `the sub-page surface must be declared whole; missing ${missing.join(\", \")}`,\n );\n}\n\nfunction checkAttribute(\n check: InterfaceChecker,\n host: { type: InterfaceAttributeType; required: boolean },\n attribute: unknown,\n path: string,\n): void {\n if (!check.record(attribute, path)) return;\n check.closed(\n attribute,\n [\"type\", \"label\", \"help\", \"required\", \"constraints\"],\n path,\n );\n\n const { type, label, help, required, constraints } = attribute;\n if (type !== host.type) {\n check.fail(\n `${path}.type`,\n `must be \"${host.type}\", the control this host renders`,\n );\n }\n check.copy(label, `${path}.label`);\n if (help !== undefined) check.copy(help, `${path}.help`);\n if (required !== host.required) {\n check.fail(\n `${path}.required`,\n `must be ${host.required}, what this host enforces`,\n );\n }\n\n if (constraints !== undefined) {\n if (host.type !== \"number\") {\n check.fail(\n `${path}.constraints`,\n \"is only allowed on a number attribute\",\n );\n } else if (check.record(constraints, `${path}.constraints`)) {\n check.closed(constraints, [\"min\", \"max\"], `${path}.constraints`);\n const { min, max } = constraints;\n // The form validates a positive integer, i.e. an effective minimum of 1;\n // any other declared minimum would be a promise it does not keep.\n if (min !== undefined && min !== 1) {\n check.fail(\n `${path}.constraints.min`,\n \"must be the 1 this host enforces\",\n );\n }\n if (\n max !== undefined &&\n (!Number.isInteger(max) || (max as number) < 1)\n ) {\n check.fail(`${path}.constraints.max`, \"must be a positive integer\");\n }\n }\n }\n}\n\nfunction checkAttributes(check: InterfaceChecker, attributes: unknown): void {\n if (!check.record(attributes, \"attributes\")) return;\n const names = Object.keys(attributes);\n if (names.length === 0) {\n check.fail(\"attributes\", \"must declare at least one attribute\");\n }\n names.forEach((name) => {\n if (!ATTRIBUTE_NAMES.includes(name)) {\n check.fail(`attributes.${name}`, \"is not a settable attribute\");\n return;\n }\n checkAttribute(\n check,\n HOST_ATTRIBUTES[name as AutomationAttributeName],\n attributes[name],\n `attributes.${name}`,\n );\n });\n}\n\nfunction checkImportExport(\n check: InterfaceChecker,\n importExport: unknown,\n): void {\n if (!check.record(importExport, \"importExport\")) return;\n check.closed(\n importExport,\n [\"fileKind\", \"fileVersion\", \"filenameSuffix\", \"importDefaults\"],\n \"importExport\",\n );\n\n const { fileKind, fileVersion, filenameSuffix, importDefaults } =\n importExport;\n if (typeof fileKind !== \"string\" || !FILE_KIND_PATTERN.test(fileKind)) {\n check.fail(\"importExport.fileKind\", \"must be a lowercase slug\");\n }\n if (fileVersion !== 1) {\n check.fail(\"importExport.fileVersion\", \"must be 1\");\n }\n if (\n typeof filenameSuffix !== \"string\" ||\n !FILENAME_SUFFIX_PATTERN.test(filenameSuffix)\n ) {\n check.fail(\"importExport.filenameSuffix\", \"must be a .json suffix\");\n }\n if (check.record(importDefaults, \"importExport.importDefaults\")) {\n check.closed(\n importDefaults,\n [\"repoProvider\", \"placeholderEventSource\"],\n \"importExport.importDefaults\",\n );\n if (\n typeof importDefaults.repoProvider !== \"string\" ||\n !(GIT_PROVIDERS as readonly string[]).includes(\n importDefaults.repoProvider,\n )\n ) {\n check.fail(\n \"importExport.importDefaults.repoProvider\",\n \"is not a supported provider\",\n );\n }\n if (\n typeof importDefaults.placeholderEventSource !== \"string\" ||\n !EVENT_SOURCE_PATTERN.test(importDefaults.placeholderEventSource)\n ) {\n check.fail(\n \"importExport.importDefaults.placeholderEventSource\",\n \"must be a lowercase event source\",\n );\n }\n }\n}\n\nfunction checkEndpoints(check: InterfaceChecker, endpoints: unknown): void {\n if (!check.record(endpoints, \"endpoints\")) return;\n const allowed = [...PLAIN_ENDPOINT_NAMES, ...ID_ENDPOINT_NAMES];\n check.closed(endpoints, allowed, \"endpoints\");\n\n const endpointAt = (name: string): string | null => {\n const value = endpoints[name];\n if (\n typeof value !== \"string\" ||\n !ENDPOINT_PATTERN.test(value) ||\n value.includes(\"//\")\n ) {\n check.fail(`endpoints.${name}`, \"must be a rooted service-relative path\");\n return null;\n }\n return value;\n };\n\n PLAIN_ENDPOINT_NAMES.forEach((name) => {\n const value = endpointAt(name);\n if (value !== null && /[{}]/.test(value)) {\n check.fail(`endpoints.${name}`, \"must not carry a substitution\");\n }\n });\n ID_ENDPOINT_NAMES.forEach((name) => {\n const value = endpointAt(name);\n if (value !== null && !ID_ENDPOINT_PATTERN.test(value)) {\n check.fail(`endpoints.${name}`, \"must carry exactly one {id}\");\n }\n });\n}\n\nfunction checkSlugList(\n check: InterfaceChecker,\n value: unknown,\n path: string,\n): string[] {\n if (!Array.isArray(value) || value.length === 0) {\n check.fail(path, \"must be a non-empty array\");\n return [];\n }\n const slugs = value.filter((item): item is string => {\n if (typeof item === \"string\" && SLUG_PATTERN.test(item)) return true;\n check.fail(path, \"must contain only lowercase slugs\");\n return false;\n });\n if (new Set(slugs).size !== slugs.length) {\n check.fail(path, \"must not repeat an id\");\n }\n return slugs;\n}\n\nconst TOP_LEVEL_KEYS = [\n \"version\",\n \"routes\",\n \"navigation\",\n \"pages\",\n \"docsUrl\",\n \"attributes\",\n \"importExport\",\n \"endpoints\",\n \"featuredAutomationIds\",\n \"responderIntegrationIds\",\n];\n\n/**\n * Decide whether this host will act on a published interface manifest.\n *\n * The version is checked first and fails closed: a format this host does not\n * recognise is refused rather than interpreted with today's rules.\n */\nexport function validateInterfaceManifest(\n candidate: unknown,\n context: InterfaceValidationContext,\n): InterfaceValidationResult {\n if (!isRecord(candidate)) {\n return { valid: false, errors: [\"interface: must be an object\"] };\n }\n if (candidate.version !== INTERFACE_VERSION) {\n return {\n valid: false,\n errors: [`interface.version: must be \"${INTERFACE_VERSION}\"`],\n };\n }\n\n const check = new InterfaceChecker();\n check.closed(candidate, TOP_LEVEL_KEYS, \"interface\");\n\n checkRoutes(check, candidate.routes, context.mountedRoutes);\n checkNavigation(check, candidate.navigation);\n checkPages(check, candidate.pages);\n if (\n typeof candidate.docsUrl !== \"string\" ||\n !candidate.docsUrl.startsWith(DOCS_URL_PREFIX)\n ) {\n check.fail(\"docsUrl\", `must start with ${DOCS_URL_PREFIX}`);\n }\n checkAttributes(check, candidate.attributes);\n checkImportExport(check, candidate.importExport);\n checkEndpoints(check, candidate.endpoints);\n\n checkSlugList(\n check,\n candidate.featuredAutomationIds,\n \"featuredAutomationIds\",\n ).forEach((id) => {\n if (!context.catalogIds.has(id)) {\n check.fail(\"featuredAutomationIds\", `${id} is not a catalog entry`);\n }\n });\n checkSlugList(\n check,\n candidate.responderIntegrationIds,\n \"responderIntegrationIds\",\n );\n\n checkSubPageGroup(check, candidate);\n\n return { valid: check.errors.length === 0, errors: check.errors };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"interface-validation.cjs","names":[],"sources":["../../src/manifests/interface-validation.ts"],"sourcesContent":["/**\n * Admission policy for the extension-published Automation interface manifest.\n *\n * Like a setup entry, the interface manifest is data authored in a different\n * repository that instructs this host to render copy, build links, and address\n * requests, so the host decides what it is *permitted* to state. Admission is\n * all-or-nothing: one bad field rejects the whole manifest, and the host falls\n * back to its own defaults rather than rendering a partially-trusted mix.\n */\n\nimport type {\n AutomationAttributeName,\n InterfaceAttributeType,\n InterfaceRoutes,\n OverviewMetric,\n} from \"./types\";\nimport {\n DASHBOARD_FILTER_IDS,\n DASHBOARD_FILTER_VALUES,\n DASHBOARD_SORT_VALUES,\n INTERFACE_ICON_SLUGS,\n INTERFACE_SUB_PAGE_IDS,\n INTERFACE_VERSION,\n OVERVIEW_METRICS,\n OVERVIEW_TILE_PLACEHOLDERS,\n} from \"./types\";\n\n/** Copy must never be able to inject markup into the host. */\nconst MARKUP_PATTERN = /<[A-Za-z/!]/;\nconst SLUG_PATTERN = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n/** The one URL the manifest may state, pinned to the product documentation. */\nconst DOCS_URL_PREFIX = \"https://docs.openhands.dev/\";\nconst FILE_KIND_PATTERN = /^[a-z][a-z-]*$/;\nconst FILENAME_SUFFIX_PATTERN = /^\\.[a-z][a-z.]*json$/;\nconst EVENT_SOURCE_PATTERN = /^[a-z0-9][a-z0-9.-]*$/;\n/** Service-relative only: rooted, no traversal, no query, no fragment. */\nconst ENDPOINT_PATTERN = /^\\/[A-Za-z0-9/{}_-]*$/;\n/** Exactly one `{id}` substitution and no other braces. */\nconst ID_ENDPOINT_PATTERN = /^[^{}]*\\{id\\}[^{}]*$/;\n\nconst GIT_PROVIDERS = [\"github\", \"gitlab\", \"bitbucket\"] as const;\n/**\n * The attribute semantics this host's edit dialog implements: the control it\n * renders per property and the requiredness it enforces. Admission pins a\n * declared attribute to exactly these, so an admitted manifest can never\n * promise a control, a requiredness, or (below) a minimum the form would\n * silently ignore.\n */\nconst HOST_ATTRIBUTES: Record<\n AutomationAttributeName,\n { type: InterfaceAttributeType; required: boolean }\n> = {\n name: { type: \"text\", required: true },\n prompt: { type: \"textarea\", required: false },\n model: { type: \"llm-profile\", required: false },\n timeout: { type: \"number\", required: false },\n schedule: { type: \"schedule\", required: false },\n};\nconst ATTRIBUTE_NAMES = Object.keys(HOST_ATTRIBUTES);\nconst PLAIN_ENDPOINT_NAMES = [\n \"list\",\n \"health\",\n \"capabilities\",\n \"validate\",\n \"createPrompt\",\n \"createPlugin\",\n] as const;\n// Endpoints added after the block shipped. A manifest published before them is\n// still admitted - requiring them would 404 the whole surface for anyone\n// pinning an older package - so they are checked only when present, and a\n// bundle entry, which is the only thing that needs them, fails on its own if\n// its manifest predates them.\nconst OPTIONAL_PLAIN_ENDPOINT_NAMES = [\"createBundle\", \"uploads\"] as const;\nconst ID_ENDPOINT_NAMES = [\"detail\", \"dispatch\", \"runs\", \"tarball\"] as const;\n\nexport interface InterfaceValidationContext {\n /** Ids of the published automation catalog, for the featured-list check. */\n catalogIds: ReadonlySet<string>;\n /** The routes this host has registrations for. A manifest must match them. */\n mountedRoutes: InterfaceRoutes;\n}\n\nexport interface InterfaceValidationResult {\n valid: boolean;\n errors: string[];\n}\n\ntype Rec = Record<string, unknown>;\n\nfunction isRecord(value: unknown): value is Rec {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isOneOf<T extends readonly string[]>(\n value: unknown,\n values: T,\n): value is T[number] {\n return (\n typeof value === \"string\" && (values as readonly string[]).includes(value)\n );\n}\n\nclass InterfaceChecker {\n readonly errors: string[] = [];\n\n fail(path: string, reason: string): false {\n this.errors.push(`${path}: ${reason}`);\n return false;\n }\n\n /** Literal user-visible copy. Carries no markup. */\n copy(value: unknown, path: string): boolean {\n if (typeof value !== \"string\" || value.length === 0) {\n return this.fail(path, \"must be a non-empty string\");\n }\n if (MARKUP_PATTERN.test(value)) {\n return this.fail(path, \"must not contain markup\");\n }\n return true;\n }\n\n /** A closed object: every present key must be an expected one. */\n closed(container: Rec, allowed: readonly string[], path: string): void {\n Object.keys(container)\n .filter((key) => !allowed.includes(key))\n .forEach((key) => this.fail(`${path}.${key}`, \"is not allowed\"));\n }\n\n record(value: unknown, path: string): value is Rec {\n if (isRecord(value)) return true;\n this.fail(path, \"must be an object\");\n return false;\n }\n}\n\nfunction checkRoutes(\n check: InterfaceChecker,\n routes: unknown,\n mounted: InterfaceRoutes,\n): void {\n if (!check.record(routes, \"routes\")) return;\n check.closed(routes, [\"list\", \"setup\", \"detail\", \"templates\"], \"routes\");\n\n // The host serves what it has registrations for, so a declared route must be\n // exactly the mounted shape — the manifest owns link construction, not the\n // router table.\n ([\"list\", \"setup\", \"detail\"] as const).forEach((name) => {\n if (routes[name] !== mounted[name]) {\n check.fail(`routes.${name}`, `must be \"${mounted[name]}\"`);\n }\n });\n if (\n routes.templates !== undefined &&\n routes.templates !== mounted.templates\n ) {\n check.fail(\n \"routes.templates\",\n mounted.templates === undefined\n ? \"is not a route this host mounts\"\n : `must be \"${mounted.templates}\"`,\n );\n }\n}\n\nfunction checkSubPages(check: InterfaceChecker, subPages: unknown): void {\n if (!Array.isArray(subPages) || subPages.length === 0) {\n check.fail(\"navigation.subPages\", \"must be a non-empty array\");\n return;\n }\n const seen = new Set<string>();\n subPages.forEach((item: unknown, index) => {\n const path = `navigation.subPages[${index}]`;\n if (!check.record(item, path)) return;\n check.closed(item, [\"page\", \"label\", \"icon\"], path);\n\n const { page, label, icon } = item;\n if (!isOneOf(page, INTERFACE_SUB_PAGE_IDS)) {\n check.fail(`${path}.page`, \"is not a sub-page this host serves\");\n } else if (seen.has(page)) {\n check.fail(`${path}.page`, \"repeats a page\");\n } else {\n seen.add(page);\n }\n check.copy(label, `${path}.label`);\n checkIconSlug(check, icon, `${path}.icon`);\n });\n}\n\nfunction checkIconSlug(\n check: InterfaceChecker,\n icon: unknown,\n path: string,\n): void {\n if (!isOneOf(icon, INTERFACE_ICON_SLUGS)) {\n check.fail(path, \"is not an icon this host ships\");\n }\n}\n\nfunction checkNavigation(check: InterfaceChecker, navigation: unknown): void {\n if (!check.record(navigation, \"navigation\")) return;\n check.closed(\n navigation,\n [\"sidebar\", \"commandMenu\", \"subPages\"],\n \"navigation\",\n );\n\n if (check.record(navigation.sidebar, \"navigation.sidebar\")) {\n check.closed(navigation.sidebar, [\"label\"], \"navigation.sidebar\");\n check.copy(navigation.sidebar.label, \"navigation.sidebar.label\");\n }\n if (check.record(navigation.commandMenu, \"navigation.commandMenu\")) {\n const menu = navigation.commandMenu;\n check.closed(\n menu,\n [\"title\", \"description\", \"keywords\"],\n \"navigation.commandMenu\",\n );\n check.copy(menu.title, \"navigation.commandMenu.title\");\n check.copy(menu.description, \"navigation.commandMenu.description\");\n check.copy(menu.keywords, \"navigation.commandMenu.keywords\");\n }\n if (navigation.subPages !== undefined) {\n checkSubPages(check, navigation.subPages);\n }\n}\n\nfunction checkPages(check: InterfaceChecker, pages: unknown): void {\n if (!check.record(pages, \"pages\")) return;\n check.closed(pages, [\"list\", \"detail\", \"edit\", \"templates\"], \"pages\");\n\n if (check.record(pages.list, \"pages.list\")) {\n check.closed(\n pages.list,\n [\"title\", \"subtitle\", \"overview\", \"filters\", \"sort\", \"insights\"],\n \"pages.list\",\n );\n check.copy(pages.list.title, \"pages.list.title\");\n check.copy(pages.list.subtitle, \"pages.list.subtitle\");\n if (pages.list.overview !== undefined) {\n checkOverview(check, pages.list.overview);\n }\n if (pages.list.filters !== undefined) {\n checkFilters(check, pages.list.filters);\n }\n if (pages.list.sort !== undefined) {\n checkSort(check, pages.list.sort);\n }\n if (pages.list.insights !== undefined) {\n checkInsights(check, pages.list.insights);\n }\n }\n if (check.record(pages.detail, \"pages.detail\")) {\n check.closed(pages.detail, [\"backLabel\"], \"pages.detail\");\n check.copy(pages.detail.backLabel, \"pages.detail.backLabel\");\n }\n if (check.record(pages.edit, \"pages.edit\")) {\n check.closed(pages.edit, [\"title\"], \"pages.edit\");\n check.copy(pages.edit.title, \"pages.edit.title\");\n }\n if (pages.templates !== undefined) {\n checkTemplatesPage(check, pages.templates);\n }\n}\n\nfunction checkOverview(check: InterfaceChecker, overview: unknown): void {\n const path = \"pages.list.overview\";\n if (!check.record(overview, path)) return;\n check.closed(overview, [\"label\", \"tiles\"], path);\n check.copy(overview.label, `${path}.label`);\n\n const { tiles } = overview;\n if (!Array.isArray(tiles) || tiles.length === 0) {\n check.fail(`${path}.tiles`, \"must be a non-empty array\");\n return;\n }\n const seen = new Set<string>();\n tiles.forEach((tile: unknown, index) => {\n checkOverviewTile(check, tile, seen, `${path}.tiles[${index}]`);\n });\n}\n\nfunction checkOverviewTile(\n check: InterfaceChecker,\n tile: unknown,\n seen: Set<string>,\n path: string,\n): void {\n if (!check.record(tile, path)) return;\n check.closed(tile, [\"metric\", \"label\", \"detail\", \"zeroDetail\", \"icon\"], path);\n\n const { metric, label, detail, zeroDetail, icon } = tile;\n check.copy(label, `${path}.label`);\n checkIconSlug(check, icon, `${path}.icon`);\n if (!isOneOf(metric, OVERVIEW_METRICS)) {\n check.fail(`${path}.metric`, \"is not a metric this host computes\");\n check.copy(detail, `${path}.detail`);\n if (zeroDetail !== undefined) check.copy(zeroDetail, `${path}.zeroDetail`);\n return;\n }\n if (seen.has(metric)) {\n check.fail(`${path}.metric`, \"repeats a metric\");\n } else {\n seen.add(metric);\n }\n checkTileCopy(check, detail, metric, `${path}.detail`);\n if (zeroDetail !== undefined) {\n checkTileCopy(check, zeroDetail, metric, `${path}.zeroDetail`);\n }\n}\n\n/**\n * Tile copy may embed `{{name}}` placeholders, but only the names the metric\n * exposes — plain substitution, never an expression.\n */\nfunction checkTileCopy(\n check: InterfaceChecker,\n value: unknown,\n metric: OverviewMetric,\n path: string,\n): void {\n if (!check.copy(value, path)) return;\n const exposed = OVERVIEW_TILE_PLACEHOLDERS[metric];\n const unknownPlaceholder =\n exposed.length === 0\n ? /\\{\\{/\n : new RegExp(`\\\\{\\\\{(?!(?:${exposed.join(\"|\")})\\\\}\\\\})`);\n if (unknownPlaceholder.test(value as string)) {\n check.fail(path, \"uses a placeholder this metric does not expose\");\n }\n}\n\nfunction checkFilters(check: InterfaceChecker, filters: unknown): void {\n const path = \"pages.list.filters\";\n if (!Array.isArray(filters) || filters.length === 0) {\n check.fail(path, \"must be a non-empty array\");\n return;\n }\n const seen = new Set<string>();\n filters.forEach((filter: unknown, index) => {\n checkFilter(check, filter, seen, `${path}[${index}]`);\n });\n}\n\nfunction checkFilter(\n check: InterfaceChecker,\n filter: unknown,\n seen: Set<string>,\n path: string,\n): void {\n if (!check.record(filter, path)) return;\n check.closed(filter, [\"id\", \"label\", \"options\"], path);\n\n const { id, label, options } = filter;\n check.copy(label, `${path}.label`);\n if (!isOneOf(id, DASHBOARD_FILTER_IDS)) {\n check.fail(`${path}.id`, \"is not a filter this host implements\");\n return;\n }\n if (seen.has(id)) {\n check.fail(`${path}.id`, \"repeats a filter\");\n } else {\n seen.add(id);\n }\n checkFilterOptions(\n check,\n options,\n DASHBOARD_FILTER_VALUES[id],\n `${path}.options`,\n );\n}\n\nfunction checkFilterOptions(\n check: InterfaceChecker,\n options: unknown,\n values: readonly string[],\n path: string,\n): void {\n if (!Array.isArray(options) || options.length < 2) {\n check.fail(path, \"must offer at least two options\");\n return;\n }\n const seen = new Set<string>();\n options.forEach((option: unknown, index) => {\n const optionPath = `${path}[${index}]`;\n if (!check.record(option, optionPath)) return;\n check.closed(option, [\"value\", \"label\"], optionPath);\n\n const { value, label } = option;\n if (!isOneOf(value, values)) {\n check.fail(`${optionPath}.value`, \"is not a value this host implements\");\n } else if (seen.has(value)) {\n check.fail(`${optionPath}.value`, \"repeats a value\");\n } else {\n seen.add(value);\n }\n check.copy(label, `${optionPath}.label`);\n });\n // \"all\" is the host's initial selection and what Clear filters resets to,\n // so a filter that does not offer it could never be neutral.\n if (!seen.has(\"all\")) {\n check.fail(path, 'must offer the \"all\" option');\n }\n}\n\nfunction checkSort(check: InterfaceChecker, sort: unknown): void {\n const path = \"pages.list.sort\";\n if (!check.record(sort, path)) return;\n check.closed(sort, [\"label\", \"options\", \"default\"], path);\n\n const { label, options, default: defaultValue } = sort;\n check.copy(label, `${path}.label`);\n const declared = new Set<string>();\n if (!Array.isArray(options) || options.length === 0) {\n check.fail(`${path}.options`, \"must be a non-empty array\");\n } else {\n options.forEach((option: unknown, index) => {\n const optionPath = `${path}.options[${index}]`;\n if (!check.record(option, optionPath)) return;\n check.closed(option, [\"value\", \"label\"], optionPath);\n\n if (!isOneOf(option.value, DASHBOARD_SORT_VALUES)) {\n check.fail(`${optionPath}.value`, \"is not a sort this host implements\");\n } else if (declared.has(option.value)) {\n check.fail(`${optionPath}.value`, \"repeats a value\");\n } else {\n declared.add(option.value);\n }\n check.copy(option.label, `${optionPath}.label`);\n });\n }\n if (typeof defaultValue !== \"string\" || !declared.has(defaultValue)) {\n check.fail(`${path}.default`, \"must be one of the declared option values\");\n }\n}\n\n/** Every insight state and stat the host renders must have a caption. */\nconst INSIGHTS_SHAPE = {\n health: [\"healthy\", \"failing\", \"running\", \"disabled\", \"neverRun\", \"checking\"],\n lastRun: [\"label\", \"never\", \"justNow\"],\n stats: [\"runs\", \"recentSuccess\", \"averageDuration\"],\n} as const;\n\nfunction checkInsights(check: InterfaceChecker, insights: unknown): void {\n const path = \"pages.list.insights\";\n if (!check.record(insights, path)) return;\n check.closed(insights, Object.keys(INSIGHTS_SHAPE), path);\n\n (Object.keys(INSIGHTS_SHAPE) as (keyof typeof INSIGHTS_SHAPE)[]).forEach(\n (section) => {\n const sectionPath = `${path}.${section}`;\n const value = insights[section];\n if (!check.record(value, sectionPath)) return;\n const keys = INSIGHTS_SHAPE[section];\n check.closed(value, keys, sectionPath);\n keys.forEach((key) => {\n check.copy(value[key], `${sectionPath}.${key}`);\n });\n },\n );\n}\n\nfunction checkTemplatesPage(check: InterfaceChecker, templates: unknown): void {\n const path = \"pages.templates\";\n if (!check.record(templates, path)) return;\n check.closed(templates, [\"title\", \"description\"], path);\n check.copy(templates.title, `${path}.title`);\n check.copy(templates.description, `${path}.description`);\n}\n\n/**\n * The sub-page surface is declared whole or not at all. Navigation that points\n * at an unrouted page, or a dashboard with filters but no insight captions,\n * would be a partially-trusted mix, and the host refuses those wholesale.\n */\nfunction checkSubPageGroup(check: InterfaceChecker, candidate: Rec): void {\n const routes = isRecord(candidate.routes) ? candidate.routes : {};\n const navigation = isRecord(candidate.navigation) ? candidate.navigation : {};\n const pages = isRecord(candidate.pages) ? candidate.pages : {};\n const list = isRecord(pages.list) ? pages.list : {};\n\n const pieces: [string, unknown][] = [\n [\"routes.templates\", routes.templates],\n [\"navigation.subPages\", navigation.subPages],\n [\"pages.templates\", pages.templates],\n [\"pages.list.overview\", list.overview],\n [\"pages.list.filters\", list.filters],\n [\"pages.list.sort\", list.sort],\n [\"pages.list.insights\", list.insights],\n ];\n const missing = pieces\n .filter(([, value]) => value === undefined)\n .map(([name]) => name);\n if (missing.length === 0 || missing.length === pieces.length) return;\n check.fail(\n \"interface\",\n `the sub-page surface must be declared whole; missing ${missing.join(\", \")}`,\n );\n}\n\nfunction checkAttribute(\n check: InterfaceChecker,\n host: { type: InterfaceAttributeType; required: boolean },\n attribute: unknown,\n path: string,\n): void {\n if (!check.record(attribute, path)) return;\n check.closed(\n attribute,\n [\"type\", \"label\", \"help\", \"required\", \"constraints\"],\n path,\n );\n\n const { type, label, help, required, constraints } = attribute;\n if (type !== host.type) {\n check.fail(\n `${path}.type`,\n `must be \"${host.type}\", the control this host renders`,\n );\n }\n check.copy(label, `${path}.label`);\n if (help !== undefined) check.copy(help, `${path}.help`);\n if (required !== host.required) {\n check.fail(\n `${path}.required`,\n `must be ${host.required}, what this host enforces`,\n );\n }\n\n if (constraints !== undefined) {\n if (host.type !== \"number\") {\n check.fail(\n `${path}.constraints`,\n \"is only allowed on a number attribute\",\n );\n } else if (check.record(constraints, `${path}.constraints`)) {\n check.closed(constraints, [\"min\", \"max\"], `${path}.constraints`);\n const { min, max } = constraints;\n // The form validates a positive integer, i.e. an effective minimum of 1;\n // any other declared minimum would be a promise it does not keep.\n if (min !== undefined && min !== 1) {\n check.fail(\n `${path}.constraints.min`,\n \"must be the 1 this host enforces\",\n );\n }\n if (\n max !== undefined &&\n (!Number.isInteger(max) || (max as number) < 1)\n ) {\n check.fail(`${path}.constraints.max`, \"must be a positive integer\");\n }\n }\n }\n}\n\nfunction checkAttributes(check: InterfaceChecker, attributes: unknown): void {\n if (!check.record(attributes, \"attributes\")) return;\n const names = Object.keys(attributes);\n if (names.length === 0) {\n check.fail(\"attributes\", \"must declare at least one attribute\");\n }\n names.forEach((name) => {\n if (!ATTRIBUTE_NAMES.includes(name)) {\n check.fail(`attributes.${name}`, \"is not a settable attribute\");\n return;\n }\n checkAttribute(\n check,\n HOST_ATTRIBUTES[name as AutomationAttributeName],\n attributes[name],\n `attributes.${name}`,\n );\n });\n}\n\nfunction checkImportExport(\n check: InterfaceChecker,\n importExport: unknown,\n): void {\n if (!check.record(importExport, \"importExport\")) return;\n check.closed(\n importExport,\n [\"fileKind\", \"fileVersion\", \"filenameSuffix\", \"importDefaults\"],\n \"importExport\",\n );\n\n const { fileKind, fileVersion, filenameSuffix, importDefaults } =\n importExport;\n if (typeof fileKind !== \"string\" || !FILE_KIND_PATTERN.test(fileKind)) {\n check.fail(\"importExport.fileKind\", \"must be a lowercase slug\");\n }\n if (fileVersion !== 1) {\n check.fail(\"importExport.fileVersion\", \"must be 1\");\n }\n if (\n typeof filenameSuffix !== \"string\" ||\n !FILENAME_SUFFIX_PATTERN.test(filenameSuffix)\n ) {\n check.fail(\"importExport.filenameSuffix\", \"must be a .json suffix\");\n }\n if (check.record(importDefaults, \"importExport.importDefaults\")) {\n check.closed(\n importDefaults,\n [\"repoProvider\", \"placeholderEventSource\"],\n \"importExport.importDefaults\",\n );\n if (\n typeof importDefaults.repoProvider !== \"string\" ||\n !(GIT_PROVIDERS as readonly string[]).includes(\n importDefaults.repoProvider,\n )\n ) {\n check.fail(\n \"importExport.importDefaults.repoProvider\",\n \"is not a supported provider\",\n );\n }\n if (\n typeof importDefaults.placeholderEventSource !== \"string\" ||\n !EVENT_SOURCE_PATTERN.test(importDefaults.placeholderEventSource)\n ) {\n check.fail(\n \"importExport.importDefaults.placeholderEventSource\",\n \"must be a lowercase event source\",\n );\n }\n }\n}\n\nfunction checkEndpoints(check: InterfaceChecker, endpoints: unknown): void {\n if (!check.record(endpoints, \"endpoints\")) return;\n const allowed = [\n ...PLAIN_ENDPOINT_NAMES,\n ...OPTIONAL_PLAIN_ENDPOINT_NAMES,\n ...ID_ENDPOINT_NAMES,\n ];\n check.closed(endpoints, allowed, \"endpoints\");\n\n const endpointAt = (name: string): string | null => {\n const value = endpoints[name];\n if (\n typeof value !== \"string\" ||\n !ENDPOINT_PATTERN.test(value) ||\n value.includes(\"//\")\n ) {\n check.fail(`endpoints.${name}`, \"must be a rooted service-relative path\");\n return null;\n }\n return value;\n };\n\n const plainNames = [\n ...PLAIN_ENDPOINT_NAMES,\n ...OPTIONAL_PLAIN_ENDPOINT_NAMES.filter((name) => name in endpoints),\n ];\n plainNames.forEach((name) => {\n const value = endpointAt(name);\n if (value !== null && /[{}]/.test(value)) {\n check.fail(`endpoints.${name}`, \"must not carry a substitution\");\n }\n });\n ID_ENDPOINT_NAMES.forEach((name) => {\n const value = endpointAt(name);\n if (value !== null && !ID_ENDPOINT_PATTERN.test(value)) {\n check.fail(`endpoints.${name}`, \"must carry exactly one {id}\");\n }\n });\n}\n\nfunction checkSlugList(\n check: InterfaceChecker,\n value: unknown,\n path: string,\n): string[] {\n if (!Array.isArray(value) || value.length === 0) {\n check.fail(path, \"must be a non-empty array\");\n return [];\n }\n const slugs = value.filter((item): item is string => {\n if (typeof item === \"string\" && SLUG_PATTERN.test(item)) return true;\n check.fail(path, \"must contain only lowercase slugs\");\n return false;\n });\n if (new Set(slugs).size !== slugs.length) {\n check.fail(path, \"must not repeat an id\");\n }\n return slugs;\n}\n\nconst TOP_LEVEL_KEYS = [\n \"version\",\n \"routes\",\n \"navigation\",\n \"pages\",\n \"docsUrl\",\n \"attributes\",\n \"importExport\",\n \"endpoints\",\n \"featuredAutomationIds\",\n \"responderIntegrationIds\",\n];\n\n/**\n * Decide whether this host will act on a published interface manifest.\n *\n * The version is checked first and fails closed: a format this host does not\n * recognise is refused rather than interpreted with today's rules.\n */\nexport function validateInterfaceManifest(\n candidate: unknown,\n context: InterfaceValidationContext,\n): InterfaceValidationResult {\n if (!isRecord(candidate)) {\n return { valid: false, errors: [\"interface: must be an object\"] };\n }\n if (candidate.version !== INTERFACE_VERSION) {\n return {\n valid: false,\n errors: [`interface.version: must be \"${INTERFACE_VERSION}\"`],\n };\n }\n\n const check = new InterfaceChecker();\n check.closed(candidate, TOP_LEVEL_KEYS, \"interface\");\n\n checkRoutes(check, candidate.routes, context.mountedRoutes);\n checkNavigation(check, candidate.navigation);\n checkPages(check, candidate.pages);\n if (\n typeof candidate.docsUrl !== \"string\" ||\n !candidate.docsUrl.startsWith(DOCS_URL_PREFIX)\n ) {\n check.fail(\"docsUrl\", `must start with ${DOCS_URL_PREFIX}`);\n }\n checkAttributes(check, candidate.attributes);\n checkImportExport(check, candidate.importExport);\n checkEndpoints(check, candidate.endpoints);\n\n checkSlugList(\n check,\n candidate.featuredAutomationIds,\n \"featuredAutomationIds\",\n ).forEach((id) => {\n if (!context.catalogIds.has(id)) {\n check.fail(\"featuredAutomationIds\", `${id} is not a catalog entry`);\n }\n });\n checkSlugList(\n check,\n candidate.responderIntegrationIds,\n \"responderIntegrationIds\",\n );\n\n checkSubPageGroup(check, candidate);\n\n return { valid: check.errors.length === 0, errors: check.errors };\n}\n"],"mappings":"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"}
|
|
@@ -32,19 +32,19 @@ var s = /<[A-Za-z/!]/, c = /^[a-z0-9]+(-[a-z0-9]+)*$/, l = "https://docs.openhan
|
|
|
32
32
|
"validate",
|
|
33
33
|
"createPrompt",
|
|
34
34
|
"createPlugin"
|
|
35
|
-
], y = [
|
|
35
|
+
], y = ["createBundle", "uploads"], b = [
|
|
36
36
|
"detail",
|
|
37
37
|
"dispatch",
|
|
38
38
|
"runs",
|
|
39
39
|
"tarball"
|
|
40
40
|
];
|
|
41
|
-
function
|
|
41
|
+
function x(e) {
|
|
42
42
|
return typeof e == "object" && !!e && !Array.isArray(e);
|
|
43
43
|
}
|
|
44
|
-
function
|
|
44
|
+
function S(e, t) {
|
|
45
45
|
return typeof e == "string" && t.includes(e);
|
|
46
46
|
}
|
|
47
|
-
var
|
|
47
|
+
var C = class {
|
|
48
48
|
errors = [];
|
|
49
49
|
fail(e, t) {
|
|
50
50
|
return this.errors.push(`${e}: ${t}`), !1;
|
|
@@ -56,10 +56,10 @@ var S = class {
|
|
|
56
56
|
Object.keys(e).filter((e) => !t.includes(e)).forEach((e) => this.fail(`${n}.${e}`, "is not allowed"));
|
|
57
57
|
}
|
|
58
58
|
record(e, t) {
|
|
59
|
-
return
|
|
59
|
+
return x(e) ? !0 : (this.fail(t, "must be an object"), !1);
|
|
60
60
|
}
|
|
61
61
|
};
|
|
62
|
-
function
|
|
62
|
+
function w(e, t, n) {
|
|
63
63
|
e.record(t, "routes") && (e.closed(t, [
|
|
64
64
|
"list",
|
|
65
65
|
"setup",
|
|
@@ -73,7 +73,7 @@ function C(e, t, n) {
|
|
|
73
73
|
t[r] !== n[r] && e.fail(`routes.${r}`, `must be "${n[r]}"`);
|
|
74
74
|
}), t.templates !== void 0 && t.templates !== n.templates && e.fail("routes.templates", n.templates === void 0 ? "is not a route this host mounts" : `must be "${n.templates}"`));
|
|
75
75
|
}
|
|
76
|
-
function
|
|
76
|
+
function T(e, t) {
|
|
77
77
|
if (!Array.isArray(t) || t.length === 0) {
|
|
78
78
|
e.fail("navigation.subPages", "must be a non-empty array");
|
|
79
79
|
return;
|
|
@@ -88,13 +88,13 @@ function w(e, t) {
|
|
|
88
88
|
"icon"
|
|
89
89
|
], a);
|
|
90
90
|
let { page: o, label: s, icon: c } = t;
|
|
91
|
-
|
|
91
|
+
S(o, i) ? n.has(o) ? e.fail(`${a}.page`, "repeats a page") : n.add(o) : e.fail(`${a}.page`, "is not a sub-page this host serves"), e.copy(s, `${a}.label`), E(e, c, `${a}.icon`);
|
|
92
92
|
});
|
|
93
93
|
}
|
|
94
|
-
function
|
|
95
|
-
|
|
94
|
+
function E(e, t, n) {
|
|
95
|
+
S(t, r) || e.fail(n, "is not an icon this host ships");
|
|
96
96
|
}
|
|
97
|
-
function
|
|
97
|
+
function D(e, t) {
|
|
98
98
|
if (e.record(t, "navigation")) {
|
|
99
99
|
if (e.closed(t, [
|
|
100
100
|
"sidebar",
|
|
@@ -108,10 +108,10 @@ function E(e, t) {
|
|
|
108
108
|
"keywords"
|
|
109
109
|
], "navigation.commandMenu"), e.copy(n.title, "navigation.commandMenu.title"), e.copy(n.description, "navigation.commandMenu.description"), e.copy(n.keywords, "navigation.commandMenu.keywords");
|
|
110
110
|
}
|
|
111
|
-
t.subPages !== void 0 &&
|
|
111
|
+
t.subPages !== void 0 && T(e, t.subPages);
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
|
-
function
|
|
114
|
+
function O(e, t) {
|
|
115
115
|
e.record(t, "pages") && (e.closed(t, [
|
|
116
116
|
"list",
|
|
117
117
|
"detail",
|
|
@@ -124,9 +124,9 @@ function D(e, t) {
|
|
|
124
124
|
"filters",
|
|
125
125
|
"sort",
|
|
126
126
|
"insights"
|
|
127
|
-
], "pages.list"), e.copy(t.list.title, "pages.list.title"), e.copy(t.list.subtitle, "pages.list.subtitle"), t.list.overview !== void 0 &&
|
|
127
|
+
], "pages.list"), e.copy(t.list.title, "pages.list.title"), e.copy(t.list.subtitle, "pages.list.subtitle"), t.list.overview !== void 0 && k(e, t.list.overview), t.list.filters !== void 0 && M(e, t.list.filters), t.list.sort !== void 0 && F(e, t.list.sort), t.list.insights !== void 0 && L(e, t.list.insights)), e.record(t.detail, "pages.detail") && (e.closed(t.detail, ["backLabel"], "pages.detail"), e.copy(t.detail.backLabel, "pages.detail.backLabel")), e.record(t.edit, "pages.edit") && (e.closed(t.edit, ["title"], "pages.edit"), e.copy(t.edit.title, "pages.edit.title")), t.templates !== void 0 && R(e, t.templates));
|
|
128
128
|
}
|
|
129
|
-
function
|
|
129
|
+
function k(e, t) {
|
|
130
130
|
let n = "pages.list.overview";
|
|
131
131
|
if (!e.record(t, n)) return;
|
|
132
132
|
e.closed(t, ["label", "tiles"], n), e.copy(t.label, `${n}.label`);
|
|
@@ -137,10 +137,10 @@ function O(e, t) {
|
|
|
137
137
|
}
|
|
138
138
|
let i = /* @__PURE__ */ new Set();
|
|
139
139
|
r.forEach((t, r) => {
|
|
140
|
-
|
|
140
|
+
A(e, t, i, `${n}.tiles[${r}]`);
|
|
141
141
|
});
|
|
142
142
|
}
|
|
143
|
-
function
|
|
143
|
+
function A(e, t, n, r) {
|
|
144
144
|
if (!e.record(t, r)) return;
|
|
145
145
|
e.closed(t, [
|
|
146
146
|
"metric",
|
|
@@ -150,18 +150,18 @@ function k(e, t, n, r) {
|
|
|
150
150
|
"icon"
|
|
151
151
|
], r);
|
|
152
152
|
let { metric: i, label: o, detail: s, zeroDetail: c, icon: l } = t;
|
|
153
|
-
if (e.copy(o, `${r}.label`),
|
|
153
|
+
if (e.copy(o, `${r}.label`), E(e, l, `${r}.icon`), !S(i, a)) {
|
|
154
154
|
e.fail(`${r}.metric`, "is not a metric this host computes"), e.copy(s, `${r}.detail`), c !== void 0 && e.copy(c, `${r}.zeroDetail`);
|
|
155
155
|
return;
|
|
156
156
|
}
|
|
157
|
-
n.has(i) ? e.fail(`${r}.metric`, "repeats a metric") : n.add(i),
|
|
157
|
+
n.has(i) ? e.fail(`${r}.metric`, "repeats a metric") : n.add(i), j(e, s, i, `${r}.detail`), c !== void 0 && j(e, c, i, `${r}.zeroDetail`);
|
|
158
158
|
}
|
|
159
|
-
function
|
|
159
|
+
function j(e, t, n, r) {
|
|
160
160
|
if (!e.copy(t, r)) return;
|
|
161
161
|
let i = o[n];
|
|
162
162
|
(i.length === 0 ? /\{\{/ : RegExp(`\\{\\{(?!(?:${i.join("|")})\\}\\})`)).test(t) && e.fail(r, "uses a placeholder this metric does not expose");
|
|
163
163
|
}
|
|
164
|
-
function
|
|
164
|
+
function M(e, t) {
|
|
165
165
|
let n = "pages.list.filters";
|
|
166
166
|
if (!Array.isArray(t) || t.length === 0) {
|
|
167
167
|
e.fail(n, "must be a non-empty array");
|
|
@@ -169,10 +169,10 @@ function j(e, t) {
|
|
|
169
169
|
}
|
|
170
170
|
let r = /* @__PURE__ */ new Set();
|
|
171
171
|
t.forEach((t, i) => {
|
|
172
|
-
|
|
172
|
+
N(e, t, r, `${n}[${i}]`);
|
|
173
173
|
});
|
|
174
174
|
}
|
|
175
|
-
function
|
|
175
|
+
function N(n, r, i, a) {
|
|
176
176
|
if (!n.record(r, a)) return;
|
|
177
177
|
n.closed(r, [
|
|
178
178
|
"id",
|
|
@@ -180,13 +180,13 @@ function M(n, r, i, a) {
|
|
|
180
180
|
"options"
|
|
181
181
|
], a);
|
|
182
182
|
let { id: o, label: s, options: c } = r;
|
|
183
|
-
if (n.copy(s, `${a}.label`), !
|
|
183
|
+
if (n.copy(s, `${a}.label`), !S(o, e)) {
|
|
184
184
|
n.fail(`${a}.id`, "is not a filter this host implements");
|
|
185
185
|
return;
|
|
186
186
|
}
|
|
187
|
-
i.has(o) ? n.fail(`${a}.id`, "repeats a filter") : i.add(o),
|
|
187
|
+
i.has(o) ? n.fail(`${a}.id`, "repeats a filter") : i.add(o), P(n, c, t[o], `${a}.options`);
|
|
188
188
|
}
|
|
189
|
-
function
|
|
189
|
+
function P(e, t, n, r) {
|
|
190
190
|
if (!Array.isArray(t) || t.length < 2) {
|
|
191
191
|
e.fail(r, "must offer at least two options");
|
|
192
192
|
return;
|
|
@@ -197,10 +197,10 @@ function N(e, t, n, r) {
|
|
|
197
197
|
if (!e.record(t, o)) return;
|
|
198
198
|
e.closed(t, ["value", "label"], o);
|
|
199
199
|
let { value: s, label: c } = t;
|
|
200
|
-
|
|
200
|
+
S(s, n) ? i.has(s) ? e.fail(`${o}.value`, "repeats a value") : i.add(s) : e.fail(`${o}.value`, "is not a value this host implements"), e.copy(c, `${o}.label`);
|
|
201
201
|
}), i.has("all") || e.fail(r, "must offer the \"all\" option");
|
|
202
202
|
}
|
|
203
|
-
function
|
|
203
|
+
function F(e, t) {
|
|
204
204
|
let r = "pages.list.sort";
|
|
205
205
|
if (!e.record(t, r)) return;
|
|
206
206
|
e.closed(t, [
|
|
@@ -213,10 +213,10 @@ function P(e, t) {
|
|
|
213
213
|
let s = /* @__PURE__ */ new Set();
|
|
214
214
|
!Array.isArray(a) || a.length === 0 ? e.fail(`${r}.options`, "must be a non-empty array") : a.forEach((t, i) => {
|
|
215
215
|
let a = `${r}.options[${i}]`;
|
|
216
|
-
e.record(t, a) && (e.closed(t, ["value", "label"], a),
|
|
216
|
+
e.record(t, a) && (e.closed(t, ["value", "label"], a), S(t.value, n) ? s.has(t.value) ? e.fail(`${a}.value`, "repeats a value") : s.add(t.value) : e.fail(`${a}.value`, "is not a sort this host implements"), e.copy(t.label, `${a}.label`));
|
|
217
217
|
}), (typeof o != "string" || !s.has(o)) && e.fail(`${r}.default`, "must be one of the declared option values");
|
|
218
218
|
}
|
|
219
|
-
var
|
|
219
|
+
var I = {
|
|
220
220
|
health: [
|
|
221
221
|
"healthy",
|
|
222
222
|
"failing",
|
|
@@ -236,23 +236,23 @@ var F = {
|
|
|
236
236
|
"averageDuration"
|
|
237
237
|
]
|
|
238
238
|
};
|
|
239
|
-
function
|
|
239
|
+
function L(e, t) {
|
|
240
240
|
let n = "pages.list.insights";
|
|
241
|
-
e.record(t, n) && (e.closed(t, Object.keys(
|
|
241
|
+
e.record(t, n) && (e.closed(t, Object.keys(I), n), Object.keys(I).forEach((r) => {
|
|
242
242
|
let i = `${n}.${r}`, a = t[r];
|
|
243
243
|
if (!e.record(a, i)) return;
|
|
244
|
-
let o =
|
|
244
|
+
let o = I[r];
|
|
245
245
|
e.closed(a, o, i), o.forEach((t) => {
|
|
246
246
|
e.copy(a[t], `${i}.${t}`);
|
|
247
247
|
});
|
|
248
248
|
}));
|
|
249
249
|
}
|
|
250
|
-
function
|
|
250
|
+
function R(e, t) {
|
|
251
251
|
let n = "pages.templates";
|
|
252
252
|
e.record(t, n) && (e.closed(t, ["title", "description"], n), e.copy(t.title, `${n}.title`), e.copy(t.description, `${n}.description`));
|
|
253
253
|
}
|
|
254
|
-
function
|
|
255
|
-
let n =
|
|
254
|
+
function z(e, t) {
|
|
255
|
+
let n = x(t.routes) ? t.routes : {}, r = x(t.navigation) ? t.navigation : {}, i = x(t.pages) ? t.pages : {}, a = x(i.list) ? i.list : {}, o = [
|
|
256
256
|
["routes.templates", n.templates],
|
|
257
257
|
["navigation.subPages", r.subPages],
|
|
258
258
|
["pages.templates", i.templates],
|
|
@@ -263,7 +263,7 @@ function R(e, t) {
|
|
|
263
263
|
], s = o.filter(([, e]) => e === void 0).map(([e]) => e);
|
|
264
264
|
s.length === 0 || s.length === o.length || e.fail("interface", `the sub-page surface must be declared whole; missing ${s.join(", ")}`);
|
|
265
265
|
}
|
|
266
|
-
function
|
|
266
|
+
function B(e, t, n, r) {
|
|
267
267
|
if (!e.record(n, r)) return;
|
|
268
268
|
e.closed(n, [
|
|
269
269
|
"type",
|
|
@@ -282,7 +282,7 @@ function z(e, t, n, r) {
|
|
|
282
282
|
}
|
|
283
283
|
}
|
|
284
284
|
}
|
|
285
|
-
function
|
|
285
|
+
function V(e, t) {
|
|
286
286
|
if (!e.record(t, "attributes")) return;
|
|
287
287
|
let n = Object.keys(t);
|
|
288
288
|
n.length === 0 && e.fail("attributes", "must declare at least one attribute"), n.forEach((n) => {
|
|
@@ -290,10 +290,10 @@ function B(e, t) {
|
|
|
290
290
|
e.fail(`attributes.${n}`, "is not a settable attribute");
|
|
291
291
|
return;
|
|
292
292
|
}
|
|
293
|
-
|
|
293
|
+
B(e, g[n], t[n], `attributes.${n}`);
|
|
294
294
|
});
|
|
295
295
|
}
|
|
296
|
-
function
|
|
296
|
+
function H(e, t) {
|
|
297
297
|
if (!e.record(t, "importExport")) return;
|
|
298
298
|
e.closed(t, [
|
|
299
299
|
"fileKind",
|
|
@@ -304,28 +304,32 @@ function V(e, t) {
|
|
|
304
304
|
let { fileKind: n, fileVersion: r, filenameSuffix: i, importDefaults: a } = t;
|
|
305
305
|
(typeof n != "string" || !u.test(n)) && e.fail("importExport.fileKind", "must be a lowercase slug"), r !== 1 && e.fail("importExport.fileVersion", "must be 1"), (typeof i != "string" || !d.test(i)) && e.fail("importExport.filenameSuffix", "must be a .json suffix"), e.record(a, "importExport.importDefaults") && (e.closed(a, ["repoProvider", "placeholderEventSource"], "importExport.importDefaults"), (typeof a.repoProvider != "string" || !h.includes(a.repoProvider)) && e.fail("importExport.importDefaults.repoProvider", "is not a supported provider"), (typeof a.placeholderEventSource != "string" || !f.test(a.placeholderEventSource)) && e.fail("importExport.importDefaults.placeholderEventSource", "must be a lowercase event source"));
|
|
306
306
|
}
|
|
307
|
-
function
|
|
307
|
+
function U(e, t) {
|
|
308
308
|
if (!e.record(t, "endpoints")) return;
|
|
309
|
-
let n = [
|
|
309
|
+
let n = [
|
|
310
|
+
...v,
|
|
311
|
+
...y,
|
|
312
|
+
...b
|
|
313
|
+
];
|
|
310
314
|
e.closed(t, n, "endpoints");
|
|
311
315
|
let r = (n) => {
|
|
312
316
|
let r = t[n];
|
|
313
317
|
return typeof r != "string" || !p.test(r) || r.includes("//") ? (e.fail(`endpoints.${n}`, "must be a rooted service-relative path"), null) : r;
|
|
314
318
|
};
|
|
315
|
-
v.forEach((t) => {
|
|
319
|
+
[...v, ...y.filter((e) => e in t)].forEach((t) => {
|
|
316
320
|
let n = r(t);
|
|
317
321
|
n !== null && /[{}]/.test(n) && e.fail(`endpoints.${t}`, "must not carry a substitution");
|
|
318
|
-
}),
|
|
322
|
+
}), b.forEach((t) => {
|
|
319
323
|
let n = r(t);
|
|
320
324
|
n !== null && !m.test(n) && e.fail(`endpoints.${t}`, "must carry exactly one {id}");
|
|
321
325
|
});
|
|
322
326
|
}
|
|
323
|
-
function
|
|
327
|
+
function W(e, t, n) {
|
|
324
328
|
if (!Array.isArray(t) || t.length === 0) return e.fail(n, "must be a non-empty array"), [];
|
|
325
329
|
let r = t.filter((t) => typeof t == "string" && c.test(t) ? !0 : (e.fail(n, "must contain only lowercase slugs"), !1));
|
|
326
330
|
return new Set(r).size !== r.length && e.fail(n, "must not repeat an id"), r;
|
|
327
331
|
}
|
|
328
|
-
var
|
|
332
|
+
var G = [
|
|
329
333
|
"version",
|
|
330
334
|
"routes",
|
|
331
335
|
"navigation",
|
|
@@ -337,8 +341,8 @@ var W = [
|
|
|
337
341
|
"featuredAutomationIds",
|
|
338
342
|
"responderIntegrationIds"
|
|
339
343
|
];
|
|
340
|
-
function
|
|
341
|
-
if (!
|
|
344
|
+
function K(e, t) {
|
|
345
|
+
if (!x(e)) return {
|
|
342
346
|
valid: !1,
|
|
343
347
|
errors: ["interface: must be an object"]
|
|
344
348
|
};
|
|
@@ -346,15 +350,15 @@ function G(e, t) {
|
|
|
346
350
|
valid: !1,
|
|
347
351
|
errors: ["interface.version: must be \"1.0\""]
|
|
348
352
|
};
|
|
349
|
-
let n = new
|
|
350
|
-
return n.closed(e,
|
|
353
|
+
let n = new C();
|
|
354
|
+
return n.closed(e, G, "interface"), w(n, e.routes, t.mountedRoutes), D(n, e.navigation), O(n, e.pages), (typeof e.docsUrl != "string" || !e.docsUrl.startsWith(l)) && n.fail("docsUrl", `must start with ${l}`), V(n, e.attributes), H(n, e.importExport), U(n, e.endpoints), W(n, e.featuredAutomationIds, "featuredAutomationIds").forEach((e) => {
|
|
351
355
|
t.catalogIds.has(e) || n.fail("featuredAutomationIds", `${e} is not a catalog entry`);
|
|
352
|
-
}),
|
|
356
|
+
}), W(n, e.responderIntegrationIds, "responderIntegrationIds"), z(n, e), {
|
|
353
357
|
valid: n.errors.length === 0,
|
|
354
358
|
errors: n.errors
|
|
355
359
|
};
|
|
356
360
|
}
|
|
357
361
|
//#endregion
|
|
358
|
-
export {
|
|
362
|
+
export { K as validateInterfaceManifest };
|
|
359
363
|
|
|
360
364
|
//# sourceMappingURL=interface-validation.js.map
|