@xopcai/xopc 0.0.142 → 0.0.143
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/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/activity-center-store-jITiX2vJ.js +1 -0
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BawPxiu5.js → agent-avatar-dicebear-DiME9u_P.js} +1 -1
- package/dist/gateway/static/root/assets/agents-DzBXhZXO.js +2 -0
- package/dist/gateway/static/root/assets/{app-management-settings-panel-81xd1p9R.js → app-management-settings-panel-Cuo7SbUP.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-DYeQsYU8.js → appearance-settings-DUfdNQqk.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-CKuKK5AU.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-D_oa7oti.js → archive-plugin-B-Qk6cGr.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-Cd-bwI2N.js → attachment-load-Di6EEbQX.js} +1 -1
- package/dist/gateway/static/root/assets/automation-suggestion-card-DGxvRxtO.js +1 -0
- package/dist/gateway/static/root/assets/automations-page-D-FF_WKV.js +4 -0
- package/dist/gateway/static/root/assets/{binary-plugins-O8svLKWw.js → binary-plugins-ZaOZDH2I.js} +1 -1
- package/dist/gateway/static/root/assets/block-editor-BTFhjWfg.js +184 -0
- package/dist/gateway/static/root/assets/browser-settings-page-BvKLdEQt.js +8 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-dJy1Eqgx.js → capability-presets-api-BU-pVZiZ.js} +1 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-DgyeEwzh.js +2 -0
- package/dist/gateway/static/root/assets/{channel-recipient-api-Bfuhp2ty.js → channel-recipient-api-DuulnhIj.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-BbVsdD_I.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-B5lVrUsN.js +1 -0
- package/dist/gateway/static/root/assets/check-BODqo66o.js +1 -0
- package/dist/gateway/static/root/assets/chunk-QUQL4437-DXsxWP7r.js +4 -0
- package/dist/gateway/static/root/assets/circle-alert-RzVebuX2.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-B8QqVy3I.js +2 -0
- package/dist/gateway/static/root/assets/{desktop-pet-DFMfIb5F.js → desktop-pet---yzVxVR.js} +1 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-Dc3gqBJE.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-BrYt1gAr.js → directory-picker-path-field-DCmOGLtK.js} +1 -1
- package/dist/gateway/static/root/assets/dreaming-settings-BgT5KZVe.js +3 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-Bh630pLD.js → extension-debug-page-ByaKTTq4.js} +1 -1
- package/dist/gateway/static/root/assets/extension-page-BmRzHAZr.js +1 -0
- package/dist/gateway/static/root/assets/extension-settings-page-JUtwIhbF.js +1 -0
- package/dist/gateway/static/root/assets/{fetch-B1WtuprY.js → fetch-8QNN25Sh.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-De2N821l.js → gateway-config-api-CxicF50_.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-Bz2I_EO5.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-nEujFSDj.js → gateway-startup-retry-5YBnS9Fj.js} +1 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-VcoyuZGN.js +1 -0
- package/dist/gateway/static/root/assets/goal-detail-page-Cilkap2G.js +4 -0
- package/dist/gateway/static/root/assets/{goals-config-api-DUy3eEse.js → goals-config-api-CwcHRdC0.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-C6eoni4z.js +2 -0
- package/dist/gateway/static/root/assets/goals-settings-o4i-qAOS.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-settings-DQQkETX8.js +1 -0
- package/dist/gateway/static/root/assets/index-BKRqeRHm.js +257 -0
- package/dist/gateway/static/root/assets/index-CphxClbs.css +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CVIwwM15.js → keyboard-shortcuts-settings-LT6qB-ua.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-Dli2e3fS.js +7 -0
- package/dist/gateway/static/root/assets/{markdown-split-B_6us9j7.js → markdown-split-Dw-yE2-y.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-D_fryIyj.js → media-plugins-D9NNNUgE.js} +1 -1
- package/dist/gateway/static/root/assets/messages-CzKxM6I4.js +5 -0
- package/dist/gateway/static/root/assets/models-hub-panel-DVn2Q1Ik.js +2 -0
- package/dist/gateway/static/root/assets/notes-page-CRgbJGgk.js +1 -0
- package/dist/gateway/static/root/assets/notes-workbench-BxZRHLWx.js +2 -0
- package/dist/gateway/static/root/assets/{page-tabs-D_8jGlqx.js → page-tabs-D4hkWVt_.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-BBLMK8Mp.js → preview-open-alternatives-CIckv0uy.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-Doz53xLn.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-DoMtcRLg.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-BeHVEgrm.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-DVS3FR5r.js → save-bar-controls-B0b42kB2.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-D6vKd6-T.js → schedule-field-BtjEkczK.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-BPy4lbIh.js → schema-form-Bf0bk3i6.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-Bk4bQsBe.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-DdFyaRMm.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-WzdikxPt.js → settings-collapsible-section-BTKTdTNX.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-CvfzhBV-.js → settings-form-section-DL4P0sAj.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-BxR-Ulhi.js → settings-loading-skeleton-BV6KFNj4.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-B_4DsX5W.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-layout-CKefvbYi.js → settings-page-layout-CyGlrInB.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-DJ1_MLgX.js +1 -0
- package/dist/gateway/static/root/assets/share-preview-page-BQBV7YrV.js +2 -0
- package/dist/gateway/static/root/assets/shares-settings-0VuFLBeU.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-DO87Ckeo.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-D3VdtxAn.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-BokgAgf7.js → system-settings-panel-D85fBBuI.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-BwHlNL3L.js → typed-models-lib-CwEuYrHX.js} +1 -1
- package/dist/gateway/static/root/assets/{use-channel-catalog-DR11ap3A.js → use-channel-catalog-COXIfXcl.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-m9JVQ73F.js +1 -0
- package/dist/gateway/static/root/assets/user-profile-fields-editor-DtQiuY7E.js +1 -0
- package/dist/gateway/static/root/assets/user-profile-settings-panel-CWM0fEpb.js +1 -0
- package/dist/gateway/static/root/assets/{utils-BKUWB-TT.js → utils--BO6xT3u.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-LoT3wgZ9.js +1 -0
- package/dist/gateway/static/root/assets/with-selector-aYPsXwdl.js +1 -0
- package/dist/gateway/static/root/assets/work-item-detail-page-DSTMz_mO.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CL_rnAUB.js → workflow-run-setup-panel-B35lJzvm.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-BfSm9oR8.js +11 -0
- package/dist/gateway/static/root/assets/workflows-page-DLioOiRN.css +1 -0
- package/dist/gateway/static/root/connector-icons/README.md +11 -0
- package/dist/gateway/static/root/connector-icons/airtable.svg +13 -0
- package/dist/gateway/static/root/connector-icons/asana.svg +15 -0
- package/dist/gateway/static/root/connector-icons/brave-search.svg +1 -0
- package/dist/gateway/static/root/connector-icons/clickup.svg +19 -0
- package/dist/gateway/static/root/connector-icons/composio.svg +266 -0
- package/dist/gateway/static/root/connector-icons/discord.svg +15 -0
- package/dist/gateway/static/root/connector-icons/dropbox.svg +152 -0
- package/dist/gateway/static/root/connector-icons/excel.svg +56 -0
- package/dist/gateway/static/root/connector-icons/fetch.svg +6 -0
- package/dist/gateway/static/root/connector-icons/figma.svg +178 -0
- package/dist/gateway/static/root/connector-icons/filesystem.svg +6 -0
- package/dist/gateway/static/root/connector-icons/github.svg +10 -0
- package/dist/gateway/static/root/connector-icons/gmail.svg +3 -0
- package/dist/gateway/static/root/connector-icons/google-calendar.svg +3 -0
- package/dist/gateway/static/root/connector-icons/google-docs.svg +25 -0
- package/dist/gateway/static/root/connector-icons/google-drive.svg +25 -0
- package/dist/gateway/static/root/connector-icons/google-sheets.svg +1 -0
- package/dist/gateway/static/root/connector-icons/hubspot.svg +142 -0
- package/dist/gateway/static/root/connector-icons/jira.svg +15 -0
- package/dist/gateway/static/root/connector-icons/linear.svg +5 -0
- package/dist/gateway/static/root/connector-icons/memory.svg +5 -0
- package/dist/gateway/static/root/connector-icons/microsoft-teams.svg +33 -0
- package/dist/gateway/static/root/connector-icons/notion.svg +5 -0
- package/dist/gateway/static/root/connector-icons/one-drive.svg +13 -0
- package/dist/gateway/static/root/connector-icons/outlook.svg +76 -0
- package/dist/gateway/static/root/connector-icons/playwright.svg +9 -0
- package/dist/gateway/static/root/connector-icons/salesforce.svg +17 -0
- package/dist/gateway/static/root/connector-icons/sequential-thinking.svg +8 -0
- package/dist/gateway/static/root/connector-icons/shopify.svg +5 -0
- package/dist/gateway/static/root/connector-icons/slack.svg +9 -0
- package/dist/gateway/static/root/connector-icons/spotify.svg +43 -0
- package/dist/gateway/static/root/connector-icons/stripe.svg +11 -0
- package/dist/gateway/static/root/connector-icons/telegram.svg +130 -0
- package/dist/gateway/static/root/connector-icons/time.svg +6 -0
- package/dist/gateway/static/root/connector-icons/todoist.svg +277 -0
- package/dist/gateway/static/root/connector-icons/trello.svg +19 -0
- package/dist/gateway/static/root/connector-icons/twitter.svg +128 -0
- package/dist/gateway/static/root/connector-icons/whatsapp.svg +61 -0
- package/dist/gateway/static/root/connector-icons/youtube.svg +11 -0
- package/dist/gateway/static/root/index.html +9 -6
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +2 -0
- package/dist/src/agent/agent-manager.js +8 -0
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/background-review/prompts.d.ts +1 -1
- package/dist/src/agent/background-review/prompts.js +3 -2
- package/dist/src/agent/background-review/prompts.js.map +1 -1
- package/dist/src/agent/embedded/session-tool-result-guard.js +1 -1
- package/dist/src/agent/embedded/xopc-tools-bridge.d.ts +9 -0
- package/dist/src/agent/embedded/xopc-tools-bridge.js +71 -3
- package/dist/src/agent/embedded/xopc-tools-bridge.js.map +1 -1
- package/dist/src/agent/goals/post-turn.js +5 -4
- package/dist/src/agent/goals/post-turn.js.map +1 -1
- package/dist/src/agent/mcp/mcp-transport.js +4 -1
- package/dist/src/agent/mcp/mcp-transport.js.map +1 -1
- package/dist/src/agent/memory/context/planner.d.ts +1 -0
- package/dist/src/agent/memory/context/planner.js +60 -14
- package/dist/src/agent/memory/context/planner.js.map +1 -1
- package/dist/src/agent/memory/context/types.d.ts +3 -1
- package/dist/src/agent/memory/lifecycle.d.ts +11 -0
- package/dist/src/agent/memory/lifecycle.js +50 -0
- package/dist/src/agent/memory/lifecycle.js.map +1 -0
- package/dist/src/agent/memory/source-origin.d.ts +3 -0
- package/dist/src/agent/memory/source-origin.js +19 -0
- package/dist/src/agent/memory/source-origin.js.map +1 -0
- package/dist/src/agent/memory/understanding/service.js +5 -0
- package/dist/src/agent/memory/understanding/service.js.map +1 -1
- package/dist/src/agent/memory/user-context-coordinator.js +7 -2
- package/dist/src/agent/memory/user-context-coordinator.js.map +1 -1
- package/dist/src/agent/prompt/sections/behavior.d.ts +2 -0
- package/dist/src/agent/prompt/sections/behavior.js +30 -1
- package/dist/src/agent/prompt/sections/behavior.js.map +1 -1
- package/dist/src/agent/prompt/sections/tooling.js +1 -1
- package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +8 -1
- package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
- package/dist/src/agent/prompt/system-prompt.d.ts +2 -0
- package/dist/src/agent/prompt/system-prompt.js +6 -3
- package/dist/src/agent/prompt/system-prompt.js.map +1 -1
- package/dist/src/agent/service/process-direct-streaming.js +22 -0
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service.d.ts +2 -0
- package/dist/src/agent/service.js +9 -3
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/starter-agents.js +1 -1
- package/dist/src/agent/starter-agents.js.map +1 -1
- package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
- package/dist/src/agent/tool-manuals/xopc-use.js +1 -1
- package/dist/src/agent/tool-manuals/xopc-use.js.map +1 -1
- package/dist/src/agent/tools/composio-tool.d.ts +18 -5
- package/dist/src/agent/tools/composio-tool.js +252 -35
- package/dist/src/agent/tools/composio-tool.js.map +1 -1
- package/dist/src/agent/tools/factory.js +7 -3
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/index.d.ts +1 -1
- package/dist/src/agent/tools/index.js +2 -2
- package/dist/src/agent/tools/workflow-tool.d.ts +0 -1
- package/dist/src/agent/tools/workflow-tool.js +3 -16
- package/dist/src/agent/tools/workflow-tool.js.map +1 -1
- package/dist/src/agent/workflow/builtins/index.d.ts +2 -28
- package/dist/src/agent/workflow/builtins/index.js +226 -41
- package/dist/src/agent/workflow/builtins/index.js.map +1 -1
- package/dist/src/agent/workflow/catalog.d.ts +32 -34
- package/dist/src/agent/workflow/catalog.js +158 -154
- package/dist/src/agent/workflow/catalog.js.map +1 -1
- package/dist/src/agent/workflow/index.d.ts +4 -6
- package/dist/src/agent/workflow/index.js +2 -5
- package/dist/src/agent/workflow/snapshot.d.ts +2 -2
- package/dist/src/agent/workflow/snapshot.js +2 -2
- package/dist/src/agent/workflow/snapshot.js.map +1 -1
- package/dist/src/agent/workflow/structured-output-tool.d.ts +2 -2
- package/dist/src/agent/workflow/structured-output-tool.js +2 -2
- package/dist/src/agent/workflow/structured-output-tool.js.map +1 -1
- package/dist/src/agent/workflow/subagent-runner.js +1 -1
- package/dist/src/agent/workflow/types.d.ts +31 -26
- package/dist/src/agent-manifest/index.d.ts +1 -0
- package/dist/src/agent-manifest/index.js +3 -1
- package/dist/src/agent-manifest/index.js.map +1 -1
- package/dist/src/agent-manifest/preset-chain.d.ts +10 -0
- package/dist/src/agent-manifest/preset-chain.js +32 -0
- package/dist/src/agent-manifest/preset-chain.js.map +1 -0
- package/dist/src/agent-manifest/resolver.js +3 -10
- package/dist/src/agent-manifest/resolver.js.map +1 -1
- package/dist/src/agent-manifest/schema.d.ts +4 -4
- package/dist/src/automations/api/routes.js +13 -1
- package/dist/src/automations/api/routes.js.map +1 -1
- package/dist/src/automations/domain/validation.d.ts +14 -14
- package/dist/src/automations/draft/automation-draft-validator.d.ts +3 -3
- package/dist/src/browser/providers/browser-ext-install.d.ts +11 -1
- package/dist/src/browser/providers/browser-ext-install.js +39 -14
- package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
- package/dist/src/capabilities/store-connector.d.ts +0 -1
- package/dist/src/capabilities/store-connector.js +3 -5
- package/dist/src/capabilities/store-connector.js.map +1 -1
- package/dist/src/chat-commands/builtins/review.js +72 -73
- package/dist/src/chat-commands/builtins/review.js.map +1 -1
- package/dist/src/chat-commands/builtins/workflow.js +9 -54
- package/dist/src/chat-commands/builtins/workflow.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/extension-create.js +2 -2
- package/dist/src/cli/commands/extension-create.js.map +1 -1
- package/dist/src/cli/commands/extension-marketplace.js +42 -36
- package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
- package/dist/src/cli/commands/extension-pack.d.ts +6 -0
- package/dist/src/cli/commands/extension-pack.js +3 -2
- package/dist/src/cli/commands/extension-pack.js.map +1 -1
- package/dist/src/commands/agents.config.d.ts +1 -0
- package/dist/src/commands/agents.config.js +1 -0
- package/dist/src/commands/agents.config.js.map +1 -1
- package/dist/src/config/schema.d.ts +6 -6
- package/dist/src/config/schema.js +6 -22
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/web-patch.d.ts +1 -1
- package/dist/src/connectors/approval.d.ts +2 -0
- package/dist/src/connectors/approval.js +33 -0
- package/dist/src/connectors/approval.js.map +1 -0
- package/dist/src/connectors/auth-provider-registry.d.ts +9 -0
- package/dist/src/connectors/auth-provider-registry.js +17 -0
- package/dist/src/connectors/auth-provider-registry.js.map +1 -0
- package/dist/src/connectors/builtin-catalog.js +55 -116
- package/dist/src/connectors/builtin-catalog.js.map +1 -1
- package/dist/src/connectors/catalog.js +7 -2
- package/dist/src/connectors/catalog.js.map +1 -1
- package/dist/src/connectors/composio-catalog.d.ts +19 -0
- package/dist/src/connectors/composio-catalog.js +237 -0
- package/dist/src/connectors/composio-catalog.js.map +1 -0
- package/dist/src/connectors/composio-logo.d.ts +1 -0
- package/dist/src/connectors/composio-logo.js +51 -0
- package/dist/src/connectors/composio-logo.js.map +1 -0
- package/dist/src/connectors/composio-sessions.d.ts +116 -0
- package/dist/src/connectors/composio-sessions.js +296 -0
- package/dist/src/connectors/composio-sessions.js.map +1 -0
- package/dist/src/connectors/composio-triggers.d.ts +17 -0
- package/dist/src/connectors/composio-triggers.js +48 -5
- package/dist/src/connectors/composio-triggers.js.map +1 -1
- package/dist/src/connectors/composio.d.ts +31 -2
- package/dist/src/connectors/composio.js +374 -151
- package/dist/src/connectors/composio.js.map +1 -1
- package/dist/src/connectors/connector-memory-sync.d.ts +15 -0
- package/dist/src/connectors/connector-memory-sync.js +90 -0
- package/dist/src/connectors/connector-memory-sync.js.map +1 -0
- package/dist/src/connectors/install.js +35 -92
- package/dist/src/connectors/install.js.map +1 -1
- package/dist/src/connectors/instances.js +6 -2
- package/dist/src/connectors/instances.js.map +1 -1
- package/dist/src/connectors/integration-strategy.d.ts +3 -0
- package/dist/src/connectors/integration-strategy.js +29 -0
- package/dist/src/connectors/integration-strategy.js.map +1 -0
- package/dist/src/connectors/policy.d.ts +13 -0
- package/dist/src/connectors/policy.js +48 -0
- package/dist/src/connectors/policy.js.map +1 -0
- package/dist/src/connectors/providers.js +1 -1
- package/dist/src/connectors/runtime-adapter-registry.d.ts +25 -0
- package/dist/src/connectors/runtime-adapter-registry.js +154 -0
- package/dist/src/connectors/runtime-adapter-registry.js.map +1 -0
- package/dist/src/connectors/types.d.ts +113 -4
- package/dist/src/connectors/workflow-preflight.d.ts +20 -0
- package/dist/src/connectors/workflow-preflight.js +70 -0
- package/dist/src/connectors/workflow-preflight.js.map +1 -0
- package/dist/src/extensions/install-transaction.d.ts +16 -0
- package/dist/src/extensions/install-transaction.js +76 -0
- package/dist/src/extensions/install-transaction.js.map +1 -0
- package/dist/src/extensions/install.d.ts +2 -0
- package/dist/src/extensions/install.js +23 -1
- package/dist/src/extensions/install.js.map +1 -1
- package/dist/src/gateway/agents-admin.d.ts +2 -0
- package/dist/src/gateway/agents-admin.js +7 -0
- package/dist/src/gateway/agents-admin.js.map +1 -1
- package/dist/src/gateway/capability-presets-admin.d.ts +11 -0
- package/dist/src/gateway/capability-presets-admin.js +11 -4
- package/dist/src/gateway/capability-presets-admin.js.map +1 -1
- package/dist/src/gateway/chat-stream/mapper.js +17 -0
- package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
- package/dist/src/gateway/chat-stream/protocol.d.ts +18 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -3
- package/dist/src/gateway/hono/routes/agents.js +3 -0
- package/dist/src/gateway/hono/routes/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/capability-presets.js +19 -1
- package/dist/src/gateway/hono/routes/capability-presets.js.map +1 -1
- package/dist/src/gateway/hono/routes/connectors.js +188 -25
- package/dist/src/gateway/hono/routes/connectors.js.map +1 -1
- package/dist/src/gateway/hono/routes/goals.js +22 -3
- package/dist/src/gateway/hono/routes/goals.js.map +1 -1
- package/dist/src/gateway/hono/routes/home.d.ts +60 -1
- package/dist/src/gateway/hono/routes/home.js +244 -18
- package/dist/src/gateway/hono/routes/home.js.map +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/memory.js +14 -1
- package/dist/src/gateway/hono/routes/memory.js.map +1 -1
- package/dist/src/gateway/hono/routes/projects.js +103 -2
- package/dist/src/gateway/hono/routes/projects.js.map +1 -1
- package/dist/src/gateway/hono/routes/public-gateway.js +93 -0
- package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
- package/dist/src/gateway/hono/routes/workflows.js +137 -22
- package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
- package/dist/src/gateway/hono/routes/you.d.ts +23 -0
- package/dist/src/gateway/hono/routes/you.js +538 -0
- package/dist/src/gateway/hono/routes/you.js.map +1 -0
- package/dist/src/gateway/hono/sse.d.ts +2 -1
- package/dist/src/gateway/hono/sse.js +2 -1
- package/dist/src/gateway/hono/sse.js.map +1 -1
- package/dist/src/gateway/service/marketplace-service.d.ts +13 -1
- package/dist/src/gateway/service/marketplace-service.js +96 -40
- package/dist/src/gateway/service/marketplace-service.js.map +1 -1
- package/dist/src/gateway/service.d.ts +2 -0
- package/dist/src/gateway/service.js +7 -1
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/goals/goal-service.d.ts +7 -5
- package/dist/src/goals/goal-service.js +25 -13
- package/dist/src/goals/goal-service.js.map +1 -1
- package/dist/src/goals/goal-store.js +46 -7
- package/dist/src/goals/goal-store.js.map +1 -1
- package/dist/src/goals/types.d.ts +24 -0
- package/dist/src/storage/sqlite/connector-repository.d.ts +49 -0
- package/dist/src/storage/sqlite/connector-repository.js +385 -0
- package/dist/src/storage/sqlite/connector-repository.js.map +1 -0
- package/dist/src/storage/sqlite/index.d.ts +3 -0
- package/dist/src/storage/sqlite/index.js +4 -1
- package/dist/src/storage/sqlite/migrations/030_connectors.sql +94 -0
- package/dist/src/storage/sqlite/migrations/031_connector_approvals.sql +24 -0
- package/dist/src/storage/sqlite/migrations/032_connector_webhook_deliveries.sql +15 -0
- package/dist/src/storage/sqlite/migrations/033_user_trust_policies.sql +6 -0
- package/dist/src/storage/sqlite/migrations/034_allow_global_auto_trust.sql +14 -0
- package/dist/src/storage/sqlite/migrations/035_user_profile_prompt_state.sql +7 -0
- package/dist/src/storage/sqlite/migrations/036_goal_outcome_metric.sql +12 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/user-profile-setup-repository.d.ts +3 -0
- package/dist/src/storage/sqlite/user-profile-setup-repository.js +34 -0
- package/dist/src/storage/sqlite/user-profile-setup-repository.js.map +1 -0
- package/dist/src/storage/sqlite/user-trust-repository.d.ts +3 -0
- package/dist/src/storage/sqlite/user-trust-repository.js +34 -0
- package/dist/src/storage/sqlite/user-trust-repository.js.map +1 -0
- package/dist/src/tui/components/assistant-message.js +15 -0
- package/dist/src/tui/components/assistant-message.js.map +1 -1
- package/dist/src/tui/tui-agent-events.js +85 -1
- package/dist/src/tui/tui-agent-events.js.map +1 -1
- package/dist/src/tui/tui-command-formatters.js +7 -7
- package/dist/src/tui/tui-command-formatters.js.map +1 -1
- package/dist/src/tui/tui-commands.js +1 -1
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/user-context/import.d.ts +12 -0
- package/dist/src/user-context/import.js +48 -0
- package/dist/src/user-context/import.js.map +1 -0
- package/dist/src/user-context/profile.d.ts +37 -0
- package/dist/src/user-context/profile.js +165 -0
- package/dist/src/user-context/profile.js.map +1 -0
- package/dist/src/user-context/projection.d.ts +54 -0
- package/dist/src/user-context/projection.js +121 -0
- package/dist/src/user-context/projection.js.map +1 -0
- package/dist/src/user-context/source-recommendations.d.ts +13 -0
- package/dist/src/user-context/source-recommendations.js +86 -0
- package/dist/src/user-context/source-recommendations.js.map +1 -0
- package/dist/src/user-context/trust-policy.d.ts +11 -0
- package/dist/src/user-context/trust-policy.js +31 -0
- package/dist/src/user-context/trust-policy.js.map +1 -0
- package/dist/src/workflows/authoring/index.d.ts +1 -0
- package/dist/src/workflows/authoring/index.js +2 -0
- package/dist/src/workflows/authoring/workflow-draft-store.d.ts +33 -0
- package/dist/src/workflows/authoring/workflow-draft-store.js +74 -0
- package/dist/src/workflows/authoring/workflow-draft-store.js.map +1 -0
- package/dist/src/workflows/domain/definition-utils.d.ts +6 -4
- package/dist/src/workflows/domain/definition-utils.js +28 -26
- package/dist/src/workflows/domain/definition-utils.js.map +1 -1
- package/dist/src/workflows/domain/definition.d.ts +79 -6
- package/dist/src/workflows/domain/event.d.ts +18 -2
- package/dist/src/workflows/domain/index.js +3 -3
- package/dist/src/workflows/domain/run.d.ts +16 -2
- package/dist/src/workflows/domain/run.js.map +1 -1
- package/dist/src/workflows/domain/validation.d.ts +9 -5
- package/dist/src/workflows/domain/validation.js +183 -40
- package/dist/src/workflows/domain/validation.js.map +1 -1
- package/dist/src/workflows/draft/workflow-draft-prompt.d.ts +2 -3
- package/dist/src/workflows/draft/workflow-draft-prompt.js +31 -73
- package/dist/src/workflows/draft/workflow-draft-prompt.js.map +1 -1
- package/dist/src/workflows/draft/workflow-draft-service.js +4 -8
- package/dist/src/workflows/draft/workflow-draft-service.js.map +1 -1
- package/dist/src/workflows/draft/workflow-draft-validator.js +29 -37
- package/dist/src/workflows/draft/workflow-draft-validator.js.map +1 -1
- package/dist/src/workflows/draft/workflow-draft.types.d.ts +4 -4
- package/dist/src/workflows/engine/projector.js +43 -1
- package/dist/src/workflows/engine/projector.js.map +1 -1
- package/dist/src/workflows/engine/workflow-engine.d.ts +2 -3
- package/dist/src/workflows/engine/workflow-engine.js +24 -4
- package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
- package/dist/src/workflows/index.js +4 -7
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +1 -9
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +1 -1
- package/dist/src/workflows/runtime/graph-workflow-runtime.d.ts +10 -0
- package/dist/src/workflows/runtime/graph-workflow-runtime.js +295 -0
- package/dist/src/workflows/runtime/graph-workflow-runtime.js.map +1 -0
- package/dist/src/workflows/runtime/index.d.ts +1 -2
- package/dist/src/workflows/runtime/index.js +2 -5
- package/dist/src/workflows/runtime/workflow-runtime-port.d.ts +5 -8
- package/dist/src/workflows/service/workflow-run-service.js +15 -1
- package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
- package/dist/src/workflows/service/workflow-run-service.types.d.ts +2 -1
- package/package.json +4 -3
- package/dist/gateway/static/root/assets/agents-CyvCIHnB.js +0 -2
- package/dist/gateway/static/root/assets/apps-page-DK_Vx6nl.js +0 -1
- package/dist/gateway/static/root/assets/automation-suggestion-card-B1LV3YYv.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-fzrovqhv.js +0 -4
- package/dist/gateway/static/root/assets/block-editor-Dhj5f4Bx.js +0 -184
- package/dist/gateway/static/root/assets/browser-settings-page-BDn-n-UB.js +0 -8
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-Co5ipo_Q.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-BWlpaxg9.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-D_jkIZLV.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-BcekbW4q.js +0 -2
- package/dist/gateway/static/root/assets/desktop-pet-settings-BJCUuL8Y.js +0 -1
- package/dist/gateway/static/root/assets/dreaming-settings-BN1Z2mIo.js +0 -3
- package/dist/gateway/static/root/assets/extension-page-B-1KxvVy.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-BF9NACI3.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-DN9sNREz.js +0 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-BpoQW8cD.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-CBRSPd0b.js +0 -4
- package/dist/gateway/static/root/assets/goals-page-BCcBi407.js +0 -2
- package/dist/gateway/static/root/assets/goals-settings-pkTXzXkh.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-ezsufgLQ.js +0 -1
- package/dist/gateway/static/root/assets/index-B8s8Pq5U.css +0 -1
- package/dist/gateway/static/root/assets/index-DcUaXYeb.js +0 -262
- package/dist/gateway/static/root/assets/logs-page-DQtTRXtj.js +0 -7
- package/dist/gateway/static/root/assets/messages-BXNELNBa.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-panel-BP2M9n6Q.js +0 -2
- package/dist/gateway/static/root/assets/notes-page-CspveYaO.js +0 -1
- package/dist/gateway/static/root/assets/notes-workbench-BHwzJ0OC.js +0 -2
- package/dist/gateway/static/root/assets/project-detail-page-Dy3rsobs.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-CWKpPE0L.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CqNRyXEo.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-MEME7ivF.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-JVd0qaSF.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-DYEbB1EV.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-dWN8BJ3z.js +0 -1
- package/dist/gateway/static/root/assets/share-preview-page-D8foINzP.js +0 -2
- package/dist/gateway/static/root/assets/shares-settings-Tgbv1s7G.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-D_YK0b_Z.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-DGytfoZK.js +0 -2
- package/dist/gateway/static/root/assets/toast-z0toXu32.js +0 -1
- package/dist/gateway/static/root/assets/user-profile-settings-panel-8YtygcJp.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-BVH71EFf.js +0 -1
- package/dist/gateway/static/root/assets/work-item-detail-page-JeTE7XNM.js +0 -1
- package/dist/gateway/static/root/assets/workflow-start-dialog-_u8Uc1ze.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-ixgk_y1l.js +0 -18
- package/dist/src/agent/workflow/builtins/audit-repo.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/audit-repo.js +0 -183
- package/dist/src/agent/workflow/builtins/audit-repo.js.map +0 -1
- package/dist/src/agent/workflow/builtins/client-proposal.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/client-proposal.js +0 -164
- package/dist/src/agent/workflow/builtins/client-proposal.js.map +0 -1
- package/dist/src/agent/workflow/builtins/competitor-scan.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/competitor-scan.js +0 -164
- package/dist/src/agent/workflow/builtins/competitor-scan.js.map +0 -1
- package/dist/src/agent/workflow/builtins/content-draft.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/content-draft.js +0 -159
- package/dist/src/agent/workflow/builtins/content-draft.js.map +0 -1
- package/dist/src/agent/workflow/builtins/content-repurpose.d.ts +0 -11
- package/dist/src/agent/workflow/builtins/content-repurpose.js +0 -146
- package/dist/src/agent/workflow/builtins/content-repurpose.js.map +0 -1
- package/dist/src/agent/workflow/builtins/debug-incident.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/debug-incident.js +0 -177
- package/dist/src/agent/workflow/builtins/debug-incident.js.map +0 -1
- package/dist/src/agent/workflow/builtins/decision-compare.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/decision-compare.js +0 -187
- package/dist/src/agent/workflow/builtins/decision-compare.js.map +0 -1
- package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/implementation-plan.js +0 -185
- package/dist/src/agent/workflow/builtins/implementation-plan.js.map +0 -1
- package/dist/src/agent/workflow/builtins/inbox-triage.d.ts +0 -11
- package/dist/src/agent/workflow/builtins/inbox-triage.js +0 -158
- package/dist/src/agent/workflow/builtins/inbox-triage.js.map +0 -1
- package/dist/src/agent/workflow/builtins/meeting-prep.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/meeting-prep.js +0 -152
- package/dist/src/agent/workflow/builtins/meeting-prep.js.map +0 -1
- package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +0 -14
- package/dist/src/agent/workflow/builtins/multi-perspective-review.js +0 -171
- package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +0 -1
- package/dist/src/agent/workflow/builtins/offer-design.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/offer-design.js +0 -170
- package/dist/src/agent/workflow/builtins/offer-design.js.map +0 -1
- package/dist/src/agent/workflow/builtins/pr-review.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/pr-review.js +0 -178
- package/dist/src/agent/workflow/builtins/pr-review.js.map +0 -1
- package/dist/src/agent/workflow/builtins/release-check.d.ts +0 -11
- package/dist/src/agent/workflow/builtins/release-check.js +0 -174
- package/dist/src/agent/workflow/builtins/release-check.js.map +0 -1
- package/dist/src/agent/workflow/builtins/research.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/research.js +0 -188
- package/dist/src/agent/workflow/builtins/research.js.map +0 -1
- package/dist/src/agent/workflow/builtins/weekly-review.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/weekly-review.js +0 -139
- package/dist/src/agent/workflow/builtins/weekly-review.js.map +0 -1
- package/dist/src/agent/workflow/last-run-memory.d.ts +0 -42
- package/dist/src/agent/workflow/last-run-memory.js +0 -60
- package/dist/src/agent/workflow/last-run-memory.js.map +0 -1
- package/dist/src/agent/workflow/lint.d.ts +0 -38
- package/dist/src/agent/workflow/lint.js +0 -74
- package/dist/src/agent/workflow/lint.js.map +0 -1
- package/dist/src/agent/workflow/meta-locale.d.ts +0 -12
- package/dist/src/agent/workflow/meta-locale.js +0 -62
- package/dist/src/agent/workflow/meta-locale.js.map +0 -1
- package/dist/src/agent/workflow/parser.d.ts +0 -20
- package/dist/src/agent/workflow/parser.js +0 -152
- package/dist/src/agent/workflow/parser.js.map +0 -1
- package/dist/src/agent/workflow/runtime.d.ts +0 -34
- package/dist/src/agent/workflow/runtime.js +0 -402
- package/dist/src/agent/workflow/runtime.js.map +0 -1
- package/dist/src/connectors/oauth.d.ts +0 -22
- package/dist/src/connectors/oauth.js +0 -99
- package/dist/src/connectors/oauth.js.map +0 -1
- package/dist/src/workflows/runtime/script-runtime.d.ts +0 -3
- package/dist/src/workflows/runtime/script-runtime.js +0 -3
- package/dist/src/workflows/runtime/script-workflow-runtime.d.ts +0 -5
- package/dist/src/workflows/runtime/script-workflow-runtime.js +0 -15
- package/dist/src/workflows/runtime/script-workflow-runtime.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composio.js","names":[],"sources":["../../../src/connectors/composio.ts"],"sourcesContent":["import { CredentialResolver } from '../auth/credentials.js';\nimport type { Config } from '../config/schema.js';\nimport { consumeConnectorSetupSecretRef } from './setup-secrets.js';\nimport type { ConnectorDefinition } from './types.js';\n\nexport type ComposioConnection = {\n id: string;\n toolkit: string;\n status: string;\n accountEmail?: string;\n workspace?: string;\n username?: string;\n};\n\nexport type ComposioScope = 'read' | 'write' | 'admin';\n\nexport type ComposioTool = {\n slug: string;\n name?: string;\n description?: string;\n inputSchema?: unknown;\n scope: ComposioScope;\n curated: boolean;\n};\n\nconst COMPOSIO_TOOLKITS = [\n ['gmail', 'Gmail', 'Read and send Gmail messages through Composio.'],\n ['googlecalendar', 'Google Calendar', 'Read and manage Google Calendar events through Composio.'],\n ['googledrive', 'Google Drive', 'Search and manage Google Drive files through Composio.'],\n ['notion', 'Notion', 'Search and update Notion pages and databases through Composio.'],\n ['slack', 'Slack', 'Read and send Slack workspace messages through Composio.'],\n ['github', 'GitHub via Composio', 'Work with GitHub repositories, issues, and pull requests through Composio.'],\n ['linear', 'Linear via Composio', 'Manage Linear issues and projects through Composio.'],\n] as const;\n\nconst COMPOSIO_API_KEY_PROVIDER = 'connector-composio-api-key';\nconst COMPOSIO_SCOPE_ORDER: Record<ComposioScope, number> = { read: 1, write: 2, admin: 3 };\n\nconst COMPOSIO_CURATED_ACTIONS: Record<string, Record<string, ComposioScope>> = {\n gmail: {\n GMAIL_FETCH_EMAILS: 'read',\n GMAIL_GET_EMAIL: 'read',\n GMAIL_LIST_LABELS: 'read',\n GMAIL_SEND_EMAIL: 'write',\n GMAIL_CREATE_EMAIL_DRAFT: 'write',\n GMAIL_REPLY_TO_THREAD: 'write',\n GMAIL_TRASH_EMAIL: 'admin',\n },\n googlecalendar: {\n GOOGLECALENDAR_FIND_EVENT: 'read',\n GOOGLECALENDAR_LIST_EVENTS: 'read',\n GOOGLECALENDAR_CREATE_EVENT: 'write',\n GOOGLECALENDAR_UPDATE_EVENT: 'write',\n GOOGLECALENDAR_DELETE_EVENT: 'admin',\n },\n googledrive: {\n GOOGLEDRIVE_SEARCH_FILES: 'read',\n GOOGLEDRIVE_GET_FILE: 'read',\n GOOGLEDRIVE_CREATE_FILE: 'write',\n GOOGLEDRIVE_UPDATE_FILE: 'write',\n GOOGLEDRIVE_DELETE_FILE: 'admin',\n },\n notion: {\n NOTION_SEARCH: 'read',\n NOTION_FETCH_PAGE: 'read',\n NOTION_CREATE_PAGE: 'write',\n NOTION_UPDATE_PAGE: 'write',\n },\n slack: {\n SLACK_LIST_CHANNELS: 'read',\n SLACK_FETCH_CONVERSATION_HISTORY: 'read',\n SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL: 'write',\n SLACK_SEND_DIRECT_MESSAGE: 'write',\n },\n github: {\n GITHUB_GET_REPOSITORY: 'read',\n GITHUB_LIST_REPOSITORY_ISSUES: 'read',\n GITHUB_CREATE_AN_ISSUE: 'write',\n GITHUB_CREATE_PULL_REQUEST: 'write',\n },\n linear: {\n LINEAR_LIST_ISSUES: 'read',\n LINEAR_GET_ISSUE: 'read',\n LINEAR_CREATE_ISSUE: 'write',\n LINEAR_UPDATE_ISSUE: 'write',\n },\n};\n\nfunction composioBaseUrl(): string {\n return process.env.XOPC_COMPOSIO_BASE_URL?.trim().replace(/\\/+$/, '') || 'https://backend.composio.dev/api/v3';\n}\n\nasync function composioApiKey(resolver = new CredentialResolver()): Promise<string> {\n const stored = await resolver.resolveApiKey(COMPOSIO_API_KEY_PROVIDER).catch(() => undefined);\n const key = stored?.trim() || process.env.XOPC_COMPOSIO_API_KEY?.trim() || process.env.COMPOSIO_API_KEY?.trim();\n if (!key) {\n throw new Error('Composio API key is not configured. Set XOPC_COMPOSIO_API_KEY or connect the Composio API Key connector.');\n }\n return key;\n}\n\nasync function composioFetch(path: string, init: RequestInit = {}, resolver = new CredentialResolver()): Promise<unknown> {\n const apiKey = await composioApiKey(resolver);\n const response = await fetch(`${composioBaseUrl()}${path}`, {\n ...init,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n Authorization: `Bearer ${apiKey}`,\n ...(init.headers ?? {}),\n },\n });\n const data = await response.json().catch(async () => ({ error: await response.text().catch(() => response.statusText) }));\n if (!response.ok) {\n const record = data && typeof data === 'object' && !Array.isArray(data) ? data as Record<string, unknown> : {};\n throw new Error(String(record.error ?? record.message ?? response.statusText));\n }\n return data;\n}\n\nfunction arrayAt(payload: unknown, keys: string[]): unknown[] {\n if (Array.isArray(payload)) return payload;\n if (!payload || typeof payload !== 'object' || Array.isArray(payload)) return [];\n const record = payload as Record<string, unknown>;\n for (const key of keys) {\n if (Array.isArray(record[key])) return record[key] as unknown[];\n }\n return [];\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nfunction normalizeToolkit(toolkit: string): string {\n return toolkit.trim().toLowerCase().replace(/[^a-z0-9_]+/g, '');\n}\n\nexport function toolkitFromComposioSlug(slug: string): string | undefined {\n const upper = slug.trim().toUpperCase();\n if (!upper) return undefined;\n if (upper.startsWith('GOOGLECALENDAR_')) return 'googlecalendar';\n if (upper.startsWith('GOOGLEDRIVE_')) return 'googledrive';\n const prefix = upper.split('_')[0]?.toLowerCase();\n return prefix || undefined;\n}\n\nexport function scopeForComposioAction(slug: string): { toolkit?: string; scope: ComposioScope; curated: boolean } {\n const toolkit = toolkitFromComposioSlug(slug);\n if (!toolkit) return { scope: 'write', curated: false };\n const scope = COMPOSIO_CURATED_ACTIONS[toolkit]?.[slug.trim().toUpperCase()];\n if (scope) return { toolkit, scope, curated: true };\n return { toolkit, scope: 'write', curated: false };\n}\n\nexport function getComposioToolkitScope(config: Config | undefined, toolkit: string): ComposioScope {\n const record = config?.connectors?.instances?.[`composio-${normalizeToolkit(toolkit)}`];\n const raw = record && typeof record === 'object' && !Array.isArray(record)\n ? (record as Record<string, unknown>).scope\n : undefined;\n return raw === 'admin' || raw === 'write' || raw === 'read' ? raw : 'read';\n}\n\nexport function setComposioToolkitScope(config: Config, toolkit: string, scope: ComposioScope): void {\n const instanceId = `composio-${normalizeToolkit(toolkit)}`;\n const record = config.connectors?.instances?.[instanceId];\n if (!record || typeof record !== 'object' || Array.isArray(record)) {\n throw new Error(`Composio connector is not installed: ${toolkit}`);\n }\n (record as Record<string, unknown>).scope = scope;\n}\n\nexport function canUseComposioAction(config: Config | undefined, slug: string): { ok: true; toolkit?: string; scope: ComposioScope } | { ok: false; reason: string; toolkit?: string; scope: ComposioScope } {\n const action = scopeForComposioAction(slug);\n if (!action.toolkit) return { ok: false, reason: `Unknown Composio toolkit for action: ${slug}`, scope: action.scope };\n const installed = config?.connectors?.instances?.[`composio-${action.toolkit}`];\n if (!installed) return { ok: false, reason: `Composio connector is not installed: ${action.toolkit}`, toolkit: action.toolkit, scope: action.scope };\n const allowedScope = getComposioToolkitScope(config, action.toolkit);\n if (COMPOSIO_SCOPE_ORDER[allowedScope] < COMPOSIO_SCOPE_ORDER[action.scope]) {\n return { ok: false, reason: `Composio action ${slug} requires ${action.scope} scope; connector allows ${allowedScope}.`, toolkit: action.toolkit, scope: action.scope };\n }\n if (!action.curated && allowedScope !== 'admin') {\n return { ok: false, reason: `Composio action ${slug} is not in the curated allowlist. Set connector scope to admin to allow uncurated actions.`, toolkit: action.toolkit, scope: action.scope };\n }\n return { ok: true, toolkit: action.toolkit, scope: action.scope };\n}\n\nexport const COMPOSIO_CONNECTORS: readonly ConnectorDefinition[] = [\n {\n id: 'composio-api-key',\n version: '1.0.0',\n displayName: 'Composio API Key',\n description: 'Store a Composio API key for direct-mode toolkit connectors.',\n category: 'automation',\n kind: 'composio',\n source: 'builtin',\n capabilities: ['auth.apiKey', 'tools', 'events', 'workflows'],\n tags: ['composio', 'oauth', 'integrations'],\n auth: { mode: 'apiKey' },\n setup: {\n secrets: [{ key: 'COMPOSIO_API_KEY', label: 'Composio API key', required: true }],\n },\n runtime: { type: 'composio', toolkit: 'composio' },\n },\n ...COMPOSIO_TOOLKITS.map(([toolkit, displayName, description]) => ({\n id: `composio-${toolkit}`,\n version: '1.0.0',\n displayName,\n description,\n category: 'automation' as const,\n kind: 'composio' as const,\n source: 'builtin' as const,\n capabilities: ['tools', 'auth.oauth', 'events', 'workflows'] as ConnectorDefinition['capabilities'],\n tags: ['composio', toolkit],\n auth: { mode: 'none' as const },\n setup: {},\n runtime: { type: 'composio' as const, toolkit },\n })),\n];\n\nexport async function saveComposioApiKey(input: { secrets?: Record<string, unknown> }, resolver = new CredentialResolver()): Promise<void> {\n const raw = input.secrets?.COMPOSIO_API_KEY;\n const resolved = typeof raw === 'string' && raw.trim().startsWith('secret://')\n ? consumeConnectorSetupSecretRef(raw)\n : raw;\n if (typeof resolved === 'string' && resolved.trim()) {\n await resolver.saveApiKey(COMPOSIO_API_KEY_PROVIDER, resolved.trim(), { profileName: 'default' });\n }\n}\n\nexport async function listComposioConnections(resolver = new CredentialResolver()): Promise<ComposioConnection[]> {\n const payload = await composioFetch('/connected_accounts', {}, resolver);\n return arrayAt(payload, ['items', 'connected_accounts', 'connections', 'data']).flatMap((item) => {\n if (!item || typeof item !== 'object' || Array.isArray(item)) return [];\n const row = item as Record<string, unknown>;\n const toolkit = readString(row.toolkit_slug ?? row.toolkit ?? row.appName ?? row.app_name);\n const id = readString(row.id ?? row.uuid ?? row.connectedAccountId ?? row.connected_account_id);\n if (!toolkit || !id) return [];\n return [{\n id,\n toolkit,\n status: readString(row.status) ?? 'unknown',\n accountEmail: readString(row.accountEmail ?? row.account_email ?? row.email),\n workspace: readString(row.workspace ?? row.teamName ?? row.team_name),\n username: readString(row.username ?? row.name),\n }];\n });\n}\n\nexport async function startComposioAuthorize(toolkit: string, resolver = new CredentialResolver()): Promise<{ toolkit: string; connectUrl: string; connectionId?: string }> {\n const payload = await composioFetch('/connected_accounts', {\n method: 'POST',\n body: JSON.stringify({ toolkit_slug: toolkit, toolkit, auth_config: {} }),\n }, resolver);\n const record = payload && typeof payload === 'object' && !Array.isArray(payload) ? payload as Record<string, unknown> : {};\n const connectUrl = readString(record.redirect_url ?? record.redirectUrl ?? record.connect_url ?? record.connectUrl);\n if (!connectUrl) {\n throw new Error('Composio authorize did not return a connect URL.');\n }\n return { toolkit, connectUrl, connectionId: readString(record.id ?? record.connectionId ?? record.connected_account_id) };\n}\n\nexport async function listComposioTools(toolkit: string, config?: Config, resolver = new CredentialResolver()): Promise<ComposioTool[]> {\n const path = `/tools?toolkit_slug=${encodeURIComponent(toolkit)}`;\n const payload = await composioFetch(path, {}, resolver);\n return arrayAt(payload, ['items', 'tools', 'data']).flatMap((item) => {\n if (!item || typeof item !== 'object' || Array.isArray(item)) return [];\n const row = item as Record<string, unknown>;\n const slug = readString(row.slug ?? row.name);\n if (!slug) return [];\n const action = scopeForComposioAction(slug);\n const allowed = config ? canUseComposioAction(config, slug).ok : true;\n if (!allowed) return [];\n return [{\n slug,\n name: readString(row.name),\n description: readString(row.description),\n inputSchema: row.inputSchema ?? row.input_schema ?? row.parameters,\n scope: action.scope,\n curated: action.curated,\n }];\n });\n}\n\nexport async function executeComposioTool(params: { slug: string; arguments?: unknown; config?: Config }, resolver = new CredentialResolver()): Promise<unknown> {\n const allowed = canUseComposioAction(params.config, params.slug);\n if (allowed.ok === false) {\n throw new Error(allowed.reason);\n }\n return composioFetch(`/tools/${encodeURIComponent(params.slug)}/execute`, {\n method: 'POST',\n body: JSON.stringify({ arguments: params.arguments ?? {} }),\n }, resolver);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"composio.js","names":["listStoredConnectorConnections"],"sources":["../../../src/connectors/composio.ts"],"sourcesContent":["import { CredentialResolver } from '../auth/credentials.js';\nimport type { Config } from '../config/schema.js';\nimport {\n getConnectorConnection,\n getConnectorInstallation,\n listConnectorConnections as listStoredConnectorConnections,\n upsertConnectorConnection,\n upsertConnectorActionMetadata,\n upsertConnectorInstallation,\n} from '../storage/sqlite/connector-repository.js';\nimport {\n COMPOSIO_AGENT_READY_TOOLKITS,\n COMPOSIO_TOOLKIT_DISPLAY_NAMES,\n connectorDefinitionFromComposioToolkit,\n} from './composio-catalog.js';\nimport { ComposioSessionsAdapter } from './composio-sessions.js';\nimport { consumeConnectorSetupSecretRef } from './setup-secrets.js';\nimport type { ConnectorConfirmationPolicy, ConnectorDefinition, ConnectorInstallationPolicy } from './types.js';\n\nexport type ComposioConnection = {\n id: string;\n providerConnectionId: string;\n toolkit: string;\n status: string;\n alias?: string;\n isDefault: boolean;\n accountEmail?: string;\n workspace?: string;\n username?: string;\n connectedAt?: string;\n lastError?: string;\n};\n\nexport type ComposioScope = 'read' | 'write' | 'admin';\n\nexport type ComposioTool = {\n slug: string;\n name?: string;\n description?: string;\n inputSchema?: unknown;\n scope: ComposioScope;\n curated: boolean;\n};\n\nexport type ComposioConnectorHealth = {\n toolkit: string;\n status: 'connected' | 'disconnected' | 'reauthorization_required' | 'degraded';\n activeConnections: number;\n affectedConnections: number;\n checkedAt: string;\n message: string;\n recovery: 'none' | 'connect' | 'reconnect' | 'retry';\n errorCode?: 'missing_credential' | 'unauthorized' | 'forbidden' | 'network' | 'timeout' | 'provider_error';\n};\n\nconst COMPOSIO_API_KEY_PROVIDER = 'connector-composio-api-key';\nconst COMPOSIO_SCOPE_ORDER: Record<ComposioScope, number> = { read: 1, write: 2, admin: 3 };\nconst COMPOSIO_AGENT_READY = new Set<string>(COMPOSIO_AGENT_READY_TOOLKITS);\nconst STRICT_CURATED_TOOLKITS = new Set<string>(['github']);\nconst READ_ACTION_TOKENS = ['GET', 'LIST', 'SEARCH', 'FETCH', 'FIND', 'LOOKUP', 'RETRIEVE', 'READ', 'QUERY', 'CHECK', 'DESCRIBE', 'DOWNLOAD'];\nconst WRITE_ACTION_TOKENS = ['CREATE', 'UPDATE', 'SEND', 'POST', 'ADD', 'UPLOAD', 'REPLY', 'DRAFT', 'INVITE', 'ASSIGN', 'MOVE', 'COPY', 'EDIT', 'WRITE', 'PUBLISH', 'SCHEDULE'];\nconst ADMIN_ACTION_TOKENS = ['DELETE', 'REMOVE', 'REVOKE', 'TRASH', 'ARCHIVE', 'CANCEL', 'DISCONNECT', 'DEACTIVATE'];\n\nconst COMPOSIO_CURATED_ACTIONS: Record<string, Record<string, ComposioScope>> = {\n gmail: {\n GMAIL_FETCH_EMAILS: 'read',\n GMAIL_GET_EMAIL: 'read',\n GMAIL_LIST_LABELS: 'read',\n GMAIL_SEND_EMAIL: 'write',\n GMAIL_CREATE_EMAIL_DRAFT: 'write',\n GMAIL_REPLY_TO_THREAD: 'write',\n GMAIL_TRASH_EMAIL: 'admin',\n },\n googlecalendar: {\n GOOGLECALENDAR_FIND_EVENT: 'read',\n GOOGLECALENDAR_LIST_EVENTS: 'read',\n GOOGLECALENDAR_CREATE_EVENT: 'write',\n GOOGLECALENDAR_UPDATE_EVENT: 'write',\n GOOGLECALENDAR_DELETE_EVENT: 'admin',\n },\n googledrive: {\n GOOGLEDRIVE_SEARCH_FILES: 'read',\n GOOGLEDRIVE_GET_FILE: 'read',\n GOOGLEDRIVE_CREATE_FILE: 'write',\n GOOGLEDRIVE_UPDATE_FILE: 'write',\n GOOGLEDRIVE_DELETE_FILE: 'admin',\n },\n notion: {\n NOTION_SEARCH: 'read',\n NOTION_FETCH_PAGE: 'read',\n NOTION_CREATE_PAGE: 'write',\n NOTION_UPDATE_PAGE: 'write',\n },\n slack: {\n SLACK_LIST_CHANNELS: 'read',\n SLACK_FETCH_CONVERSATION_HISTORY: 'read',\n SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL: 'write',\n SLACK_SEND_DIRECT_MESSAGE: 'write',\n },\n github: {\n GITHUB_GET_THE_AUTHENTICATED_USER: 'read',\n GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER: 'read',\n GITHUB_GET_A_REPOSITORY: 'read',\n GITHUB_GET_REPOSITORY: 'read',\n GITHUB_LIST_REPOSITORY_COLLABORATORS: 'read',\n GITHUB_SEARCH_REPOSITORIES: 'read',\n GITHUB_SEARCH_CODE: 'read',\n GITHUB_SEARCH_ISSUES_AND_PULL_REQUESTS: 'read',\n GITHUB_SEARCH_USERS: 'read',\n GITHUB_LIST_REPOSITORY_ISSUES: 'read',\n GITHUB_GET_AN_ISSUE: 'read',\n GITHUB_LIST_ISSUE_COMMENTS: 'read',\n GITHUB_LIST_PULL_REQUESTS: 'read',\n GITHUB_GET_A_PULL_REQUEST: 'read',\n GITHUB_LIST_BRANCHES: 'read',\n GITHUB_GET_A_BRANCH: 'read',\n GITHUB_LIST_COMMITS: 'read',\n GITHUB_GET_A_COMMIT: 'read',\n GITHUB_CREATE_A_REPOSITORY_FOR_THE_AUTHENTICATED_USER: 'write',\n GITHUB_CREATE_OR_UPDATE_FILE_CONTENTS: 'write',\n GITHUB_CREATE_A_COMMIT: 'write',\n GITHUB_CREATE_A_COMMIT_COMMENT: 'write',\n GITHUB_CREATE_AN_ISSUE: 'write',\n GITHUB_UPDATE_AN_ISSUE: 'write',\n GITHUB_CREATE_AN_ISSUE_COMMENT: 'write',\n GITHUB_ADD_LABELS_TO_AN_ISSUE: 'write',\n GITHUB_ADD_ASSIGNEES_TO_AN_ISSUE: 'write',\n GITHUB_CREATE_A_PULL_REQUEST: 'write',\n GITHUB_CREATE_PULL_REQUEST: 'write',\n GITHUB_UPDATE_A_PULL_REQUEST: 'write',\n GITHUB_MERGE_A_PULL_REQUEST: 'write',\n GITHUB_CREATE_A_REVIEW_FOR_A_PULL_REQUEST: 'write',\n GITHUB_CREATE_A_REVIEW_COMMENT_FOR_A_PULL_REQUEST: 'write',\n GITHUB_CREATE_A_GIST: 'write',\n GITHUB_DELETE_A_REPOSITORY: 'admin',\n GITHUB_DELETE_A_REFERENCE: 'admin',\n GITHUB_DELETE_A_FILE: 'admin',\n GITHUB_ADD_A_REPOSITORY_COLLABORATOR: 'admin',\n GITHUB_CANCEL_A_WORKFLOW_RUN: 'admin',\n },\n linear: {\n LINEAR_LIST_ISSUES: 'read',\n LINEAR_GET_ISSUE: 'read',\n LINEAR_CREATE_ISSUE: 'write',\n LINEAR_UPDATE_ISSUE: 'write',\n },\n};\n\nconst LOCAL_OWNER_PRINCIPAL = 'local-owner';\n\nfunction toolkitFromConnectionMetadata(connection: { id: string; metadata: Record<string, unknown> }): string {\n const toolkit = connection.metadata.toolkit;\n if (typeof toolkit !== 'string' || !toolkit.trim()) {\n throw new Error(`Composio connection \"${connection.id}\" does not contain toolkit metadata.`);\n }\n return toolkit;\n}\n\nfunction normalizeToolkit(toolkit: string): string {\n return toolkit.trim().toLowerCase().replace(/[^a-z0-9_]+/g, '');\n}\n\nexport function toolkitFromComposioSlug(slug: string): string | undefined {\n const upper = slug.trim().toUpperCase();\n if (!upper) return undefined;\n const known = [...COMPOSIO_AGENT_READY].sort((left, right) => right.length - left.length)\n .find((toolkit) => upper === toolkit.toUpperCase() || upper.startsWith(`${toolkit.toUpperCase()}_`));\n if (known) return known;\n const prefix = upper.split('_')[0]?.toLowerCase();\n return prefix || undefined;\n}\n\nexport function scopeForComposioAction(slug: string): { toolkit?: string; scope: ComposioScope; curated: boolean } {\n const toolkit = toolkitFromComposioSlug(slug);\n if (!toolkit) return { scope: 'write', curated: false };\n const scope = COMPOSIO_CURATED_ACTIONS[toolkit]?.[slug.trim().toUpperCase()];\n if (scope) return { toolkit, scope, curated: true };\n if (STRICT_CURATED_TOOLKITS.has(toolkit)) {\n return { toolkit, scope: 'write', curated: false };\n }\n if (COMPOSIO_AGENT_READY.has(toolkit)) {\n const tokens = slug.trim().toUpperCase().split('_');\n if (tokens.some((token) => ADMIN_ACTION_TOKENS.some((verb) => token.startsWith(verb)))) {\n return { toolkit, scope: 'admin', curated: true };\n }\n if (tokens.some((token) => READ_ACTION_TOKENS.some((verb) => token.startsWith(verb)))) {\n return { toolkit, scope: 'read', curated: true };\n }\n if (tokens.some((token) => WRITE_ACTION_TOKENS.some((verb) => token.startsWith(verb)))) {\n return { toolkit, scope: 'write', curated: true };\n }\n }\n return { toolkit, scope: 'write', curated: false };\n}\n\nexport function isComposioActionAllowedByCatalog(slug: string): boolean {\n const action = scopeForComposioAction(slug);\n return Boolean(action.toolkit && (action.curated || !STRICT_CURATED_TOOLKITS.has(action.toolkit)));\n}\n\nexport function getComposioToolkitScope(config: Config | undefined, toolkit: string): ComposioScope {\n const record = config?.connectors?.instances?.[`composio-${normalizeToolkit(toolkit)}`];\n const raw = record && typeof record === 'object' && !Array.isArray(record)\n ? (record as Record<string, unknown>).scope\n : undefined;\n return raw === 'admin' || raw === 'write' || raw === 'read' ? raw : 'read';\n}\n\nexport function setComposioToolkitScope(config: Config, toolkit: string, scope: ComposioScope): void {\n const instanceId = `composio-${normalizeToolkit(toolkit)}`;\n const record = config.connectors?.instances?.[instanceId];\n if (!record || typeof record !== 'object' || Array.isArray(record)) {\n throw new Error(`Composio connector is not installed: ${toolkit}`);\n }\n (record as Record<string, unknown>).scope = scope;\n}\n\nexport function canUseComposioAction(config: Config | undefined, slug: string): { ok: true; toolkit?: string; scope: ComposioScope } | { ok: false; reason: string; toolkit?: string; scope: ComposioScope } {\n const action = scopeForComposioAction(slug);\n if (!action.toolkit) return { ok: false, reason: `Unknown Composio toolkit for action: ${slug}`, scope: action.scope };\n if (!isComposioActionAllowedByCatalog(slug)) {\n return {\n ok: false,\n reason: `Composio action ${slug} is not in the curated ${action.toolkit} action catalog.`,\n toolkit: action.toolkit,\n scope: action.scope,\n };\n }\n const installed = config?.connectors?.instances?.[`composio-${action.toolkit}`];\n if (!installed) return { ok: false, reason: `Composio connector is not installed: ${action.toolkit}`, toolkit: action.toolkit, scope: action.scope };\n const allowedScope = getComposioToolkitScope(config, action.toolkit);\n if (COMPOSIO_SCOPE_ORDER[allowedScope] < COMPOSIO_SCOPE_ORDER[action.scope]) {\n return { ok: false, reason: `Composio action ${slug} requires ${action.scope} scope; connector allows ${allowedScope}.`, toolkit: action.toolkit, scope: action.scope };\n }\n if (!action.curated && allowedScope !== 'admin') {\n return { ok: false, reason: `Composio action ${slug} is not in the curated allowlist. Set connector scope to admin to allow uncurated actions.`, toolkit: action.toolkit, scope: action.scope };\n }\n return { ok: true, toolkit: action.toolkit, scope: action.scope };\n}\n\nexport const COMPOSIO_CONNECTORS: readonly ConnectorDefinition[] = [\n {\n id: 'composio-api-key',\n version: '1.0.0',\n displayName: 'Composio API Key',\n description: 'Store a Composio API key for direct-mode toolkit connectors.',\n category: 'automation',\n kind: 'composio',\n source: 'builtin',\n branding: {\n logoUrl: '/connector-icons/composio.svg',\n source: 'composio-catalog',\n },\n verificationLevel: 'verified',\n capabilities: ['auth.apiKey', 'tools', 'events', 'workflows'],\n tags: ['composio', 'oauth', 'integrations'],\n auth: { mode: 'apiKey' },\n setup: {\n secrets: [{ key: 'COMPOSIO_API_KEY', label: 'Composio API key', required: true }],\n },\n runtime: { type: 'composio', toolkit: 'composio', role: 'credential' },\n integrationStrategy: { lane: 'composio', workload: 'long_tail', preferred: true },\n },\n ...COMPOSIO_AGENT_READY_TOOLKITS.map((toolkit) => {\n const definition = connectorDefinitionFromComposioToolkit({\n slug: toolkit,\n name: COMPOSIO_TOOLKIT_DISPLAY_NAMES[toolkit],\n isNoAuth: false,\n connected: false,\n });\n return { ...definition, version: '1.0.0' };\n }),\n];\n\nexport async function saveComposioApiKey(input: { secrets?: Record<string, unknown> }, resolver = new CredentialResolver()): Promise<void> {\n const raw = input.secrets?.COMPOSIO_API_KEY;\n const resolved = typeof raw === 'string' && raw.trim().startsWith('secret://')\n ? consumeConnectorSetupSecretRef(raw)\n : raw;\n if (typeof resolved !== 'string' || !resolved.trim()) {\n throw new Error('Composio API key is required.');\n }\n await resolver.saveApiKey(COMPOSIO_API_KEY_PROVIDER, resolved.trim(), { profileName: 'default' });\n}\n\nexport async function listComposioConnections(resolver = new CredentialResolver()): Promise<ComposioConnection[]> {\n const adapter = new ComposioSessionsAdapter({ resolver });\n await adapter.syncConnections({ principalId: LOCAL_OWNER_PRINCIPAL });\n return listStoredConnectorConnections({ principalId: LOCAL_OWNER_PRINCIPAL })\n .filter((connection) => connection.provider === 'composio')\n .map((connection) => ({\n id: connection.id,\n providerConnectionId: connection.providerConnectionId,\n toolkit: toolkitFromConnectionMetadata(connection),\n status: connection.status,\n alias: connection.alias,\n isDefault: connection.isDefault,\n accountEmail: typeof connection.identity.email === 'string' ? connection.identity.email : undefined,\n workspace: typeof connection.identity.workspace === 'string' ? connection.identity.workspace : undefined,\n username: typeof connection.identity.username === 'string' ? connection.identity.username : undefined,\n connectedAt: connection.connectedAt,\n lastError: connection.lastError,\n }));\n}\n\nexport async function inspectComposioConnectorHealth(toolkit: string, resolver = new CredentialResolver()): Promise<ComposioConnectorHealth> {\n const normalizedToolkit = normalizeToolkit(toolkit);\n try {\n const all = await listComposioConnections(resolver);\n const connections = all.filter((connection) => connection.toolkit.toLowerCase() === normalizedToolkit);\n const activeConnections = connections.filter((connection) => connection.status === 'active').length;\n const affectedConnections = connections.filter((connection) => connection.status === 'expired' || connection.status === 'failed').length;\n if (activeConnections > 0) {\n return {\n toolkit: normalizedToolkit,\n status: 'connected',\n activeConnections,\n affectedConnections,\n checkedAt: new Date().toISOString(),\n message: `${activeConnections} active account connection${activeConnections === 1 ? '' : 's'}.`,\n recovery: 'none',\n };\n }\n if (affectedConnections > 0) {\n return {\n toolkit: normalizedToolkit,\n status: 'reauthorization_required',\n activeConnections: 0,\n affectedConnections,\n checkedAt: new Date().toISOString(),\n message: 'The account connection expired or failed and must be authorized again.',\n recovery: 'reconnect',\n };\n }\n return {\n toolkit: normalizedToolkit,\n status: 'disconnected',\n activeConnections: 0,\n affectedConnections: 0,\n checkedAt: new Date().toISOString(),\n message: 'No active account is connected.',\n recovery: 'connect',\n };\n } catch (error) {\n const failure = classifyComposioHealthError(error);\n return {\n toolkit: normalizedToolkit,\n status: 'degraded',\n activeConnections: 0,\n affectedConnections: 0,\n checkedAt: new Date().toISOString(),\n message: failure.message,\n recovery: 'retry',\n errorCode: failure.code,\n };\n }\n}\n\nfunction classifyComposioHealthError(error: unknown): {\n code: NonNullable<ComposioConnectorHealth['errorCode']>;\n message: string;\n} {\n const message = error instanceof Error ? error.message : String(error);\n if (/api key is not configured|missing.*api key/i.test(message)) {\n return { code: 'missing_credential', message };\n }\n if (/\\b401\\b|unauthori[sz]ed|invalid api key|authentication failed/i.test(message)) {\n return { code: 'unauthorized', message: 'Composio rejected the configured project API key.' };\n }\n if (/\\b403\\b|forbidden|insufficient permission|permission denied/i.test(message)) {\n return { code: 'forbidden', message: 'The Composio project API key does not have the required permissions.' };\n }\n if (/timed?\\s*out|timeout|aborterror/i.test(message)) {\n return { code: 'timeout', message: 'The Composio health request timed out.' };\n }\n if (/fetch failed|network|econn|enotfound|eai_again|socket|tls/i.test(message)) {\n return { code: 'network', message: 'The gateway could not reach the Composio API.' };\n }\n return { code: 'provider_error', message };\n}\n\nexport function getComposioInstallationPolicy(config: Config | undefined, toolkit: string): ConnectorInstallationPolicy {\n const normalizedToolkit = normalizeToolkit(toolkit);\n const connectorId = `composio-${normalizedToolkit}`;\n const id = `${connectorId}-${LOCAL_OWNER_PRINCIPAL}`;\n const existing = getConnectorInstallation(id);\n return upsertConnectorInstallation({\n id,\n connectorId,\n principalId: LOCAL_OWNER_PRINCIPAL,\n enabled: existing?.enabled ?? true,\n allowedAgentIds: existing?.allowedAgentIds ?? [],\n maxScope: getComposioToolkitScope(config, normalizedToolkit),\n confirmationPolicy: existing?.confirmationPolicy ?? 'writes',\n selectedConnectionIds: existing?.selectedConnectionIds ?? [],\n createdAt: existing?.createdAt,\n });\n}\n\nexport function updateComposioInstallationPolicy(\n config: Config | undefined,\n toolkit: string,\n patch: { allowedAgentIds?: string[]; confirmationPolicy?: ConnectorConfirmationPolicy; selectedConnectionIds?: string[] },\n): ConnectorInstallationPolicy {\n const current = getComposioInstallationPolicy(config, toolkit);\n return upsertConnectorInstallation({\n ...current,\n allowedAgentIds: patch.allowedAgentIds ?? current.allowedAgentIds,\n confirmationPolicy: patch.confirmationPolicy ?? current.confirmationPolicy,\n selectedConnectionIds: patch.selectedConnectionIds ?? current.selectedConnectionIds,\n });\n}\n\nexport function updateComposioConnection(\n id: string,\n patch: { alias?: string; isDefault?: boolean },\n): ComposioConnection {\n const connection = getConnectorConnection(id);\n if (!connection || connection.provider !== 'composio' || connection.principalId !== LOCAL_OWNER_PRINCIPAL) {\n throw new Error('Composio connection not found.');\n }\n upsertConnectorConnection({\n ...connection,\n alias: patch.alias === undefined ? connection.alias : patch.alias.trim() || undefined,\n isDefault: patch.isDefault ?? connection.isDefault,\n });\n const updated = getConnectorConnection(id)!;\n return {\n id: updated.id,\n providerConnectionId: updated.providerConnectionId,\n toolkit: toolkitFromConnectionMetadata(updated),\n status: updated.status,\n alias: updated.alias,\n isDefault: updated.isDefault,\n accountEmail: typeof updated.identity.email === 'string' ? updated.identity.email : undefined,\n workspace: typeof updated.identity.workspace === 'string' ? updated.identity.workspace : undefined,\n username: typeof updated.identity.username === 'string' ? updated.identity.username : undefined,\n connectedAt: updated.connectedAt,\n lastError: updated.lastError,\n };\n}\n\nexport async function refreshComposioConnection(id: string, resolver = new CredentialResolver()): Promise<void> {\n const connection = getConnectorConnection(id);\n if (!connection || connection.provider !== 'composio' || connection.principalId !== LOCAL_OWNER_PRINCIPAL) {\n throw new Error('Composio connection not found.');\n }\n await new ComposioSessionsAdapter({ resolver }).refreshConnection(connection);\n}\n\nexport async function revokeComposioConnection(id: string, resolver = new CredentialResolver()): Promise<void> {\n const connection = getConnectorConnection(id);\n if (!connection || connection.provider !== 'composio' || connection.principalId !== LOCAL_OWNER_PRINCIPAL) {\n throw new Error('Composio connection not found.');\n }\n await new ComposioSessionsAdapter({ resolver }).revokeConnection(connection);\n}\n\nexport async function startComposioAuthorize(connectorId: string, toolkit: string, resolver = new CredentialResolver()): Promise<{ toolkit: string; connectUrl: string; connectionId?: string }> {\n const normalizedToolkit = normalizeToolkit(toolkit);\n const authorization = await new ComposioSessionsAdapter({ resolver }).authorize({\n principalId: LOCAL_OWNER_PRINCIPAL,\n toolkit: normalizedToolkit,\n installationId: getConnectorInstallation(`${connectorId}-${LOCAL_OWNER_PRINCIPAL}`)?.id,\n });\n if (!authorization.connectUrl) {\n throw new Error('Composio authorize did not return a connect URL.');\n }\n return {\n toolkit: authorization.toolkit,\n connectUrl: authorization.connectUrl,\n connectionId: authorization.connectionId,\n };\n}\n\nexport async function listComposioTools(toolkit: string, config?: Config, resolver = new CredentialResolver()): Promise<ComposioTool[]> {\n const normalizedToolkit = normalizeToolkit(toolkit);\n const session = await new ComposioSessionsAdapter({ resolver }).createSession({\n principalId: LOCAL_OWNER_PRINCIPAL,\n toolkits: [normalizedToolkit],\n });\n const payload = await session.search({\n query: `List the available ${normalizedToolkit} actions and their exact input contracts.`,\n toolkits: [normalizedToolkit],\n });\n if (!payload || typeof payload !== 'object' || Array.isArray(payload)) return [];\n const schemas = (payload as Record<string, unknown>).toolSchemas;\n if (!schemas || typeof schemas !== 'object' || Array.isArray(schemas)) return [];\n return Object.values(schemas).flatMap((value) => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return [];\n const row = value as Record<string, unknown>;\n const slug = typeof row.toolSlug === 'string' ? row.toolSlug : undefined;\n if (!slug) return [];\n const action = scopeForComposioAction(slug);\n if (config && !canUseComposioAction(config, slug).ok) return [];\n const inputSchema = row.inputSchema;\n upsertConnectorActionMetadata({\n connectorId: `composio-${normalizedToolkit}`,\n actionId: slug,\n toolkit: normalizedToolkit,\n scope: action.scope,\n curated: action.curated,\n inputSchema,\n cachedAt: new Date().toISOString(),\n });\n return [{\n slug,\n name: slug,\n description: typeof row.description === 'string' ? row.description : undefined,\n inputSchema,\n scope: action.scope,\n curated: action.curated,\n }];\n });\n}\n\nexport async function executeComposioTool(params: { slug: string; arguments?: unknown; config?: Config }, resolver = new CredentialResolver()): Promise<unknown> {\n const allowed = canUseComposioAction(params.config, params.slug);\n if (allowed.ok === false) {\n throw new Error(allowed.reason);\n }\n if (!allowed.toolkit) throw new Error(`Unknown Composio toolkit for action: ${params.slug}`);\n const connectorId = `composio-${allowed.toolkit}`;\n const installation = upsertConnectorInstallation({\n id: `${connectorId}-${LOCAL_OWNER_PRINCIPAL}`,\n connectorId,\n principalId: LOCAL_OWNER_PRINCIPAL,\n enabled: true,\n allowedAgentIds: [],\n maxScope: getComposioToolkitScope(params.config, allowed.toolkit),\n confirmationPolicy: 'writes',\n selectedConnectionIds: [],\n });\n const connection = listStoredConnectorConnections({\n principalId: LOCAL_OWNER_PRINCIPAL,\n connectorId,\n }).find((candidate) => candidate.status === 'active' && candidate.isDefault)\n ?? listStoredConnectorConnections({ principalId: LOCAL_OWNER_PRINCIPAL, connectorId })\n .find((candidate) => candidate.status === 'active');\n const result = await new ComposioSessionsAdapter({ resolver }).executeWithPolicy({\n context: { principalId: LOCAL_OWNER_PRINCIPAL, toolkits: [allowed.toolkit] },\n installation,\n connection,\n action: {\n connectorId,\n actionId: params.slug,\n toolkit: allowed.toolkit,\n scope: allowed.scope,\n curated: scopeForComposioAction(params.slug).curated,\n cachedAt: new Date().toISOString(),\n },\n args: params.arguments && typeof params.arguments === 'object' && !Array.isArray(params.arguments)\n ? params.arguments as Record<string, unknown>\n : {},\n confirmed: true,\n });\n if (result.decision !== 'allowed') throw new Error(result.reason);\n return result.result;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Config } from '../config/schema.js';
|
|
2
|
+
import { ComposioSessionsAdapter } from './composio-sessions.js';
|
|
3
|
+
export declare function syncComposioResultToMemory(input: {
|
|
4
|
+
config: Config;
|
|
5
|
+
connectorId: string;
|
|
6
|
+
actionId: string;
|
|
7
|
+
arguments?: Record<string, unknown>;
|
|
8
|
+
agentId: string;
|
|
9
|
+
connectionId?: string;
|
|
10
|
+
adapter?: ComposioSessionsAdapter;
|
|
11
|
+
}): Promise<{
|
|
12
|
+
recordId: string;
|
|
13
|
+
connectorId: string;
|
|
14
|
+
actionId: string;
|
|
15
|
+
}>;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { upsertMemoryRecord } from "../storage/sqlite/memory-records-repository.js";
|
|
2
|
+
import { getConnectorInstallation, listConnectorConnections } from "../storage/sqlite/connector-repository.js";
|
|
3
|
+
import "../storage/sqlite/index.js";
|
|
4
|
+
import { ComposioSessionsAdapter } from "./composio-sessions.js";
|
|
5
|
+
import { scopeForComposioAction } from "./composio.js";
|
|
6
|
+
import { getConnectorDefinition } from "./catalog.js";
|
|
7
|
+
import { getWorkspacePath } from "../config/workspace-path-helpers.js";
|
|
8
|
+
import { createHash } from "node:crypto";
|
|
9
|
+
//#region src/connectors/connector-memory-sync.ts
|
|
10
|
+
const MEMORY_SOURCE_TOOLKITS = new Set([
|
|
11
|
+
"gmail",
|
|
12
|
+
"googledrive",
|
|
13
|
+
"notion",
|
|
14
|
+
"slack"
|
|
15
|
+
]);
|
|
16
|
+
async function syncComposioResultToMemory(input) {
|
|
17
|
+
const definition = getConnectorDefinition(input.connectorId);
|
|
18
|
+
if (definition?.runtime.type !== "composio" || definition.runtime.role !== "toolkit") throw new Error("Memory sync requires a Composio toolkit connector.");
|
|
19
|
+
const toolkit = definition.runtime.toolkit;
|
|
20
|
+
if (!MEMORY_SOURCE_TOOLKITS.has(toolkit)) throw new Error("Memory sync is supported for Gmail, Google Drive, Notion, and Slack.");
|
|
21
|
+
const risk = scopeForComposioAction(input.actionId);
|
|
22
|
+
if (risk.toolkit !== toolkit || risk.scope !== "read" || !risk.curated) throw new Error("Memory sync only accepts a verified read action for the selected connector.");
|
|
23
|
+
const connectorId = definition.id;
|
|
24
|
+
const installation = getConnectorInstallation(`${connectorId}-local-owner`);
|
|
25
|
+
if (!installation?.enabled) throw new Error("Connector installation is not enabled.");
|
|
26
|
+
if (installation.allowedAgentIds.length && !installation.allowedAgentIds.includes(input.agentId)) throw new Error("This agent is not allowed to sync from the connector.");
|
|
27
|
+
const activeConnections = listConnectorConnections({
|
|
28
|
+
principalId: "local-owner",
|
|
29
|
+
connectorId
|
|
30
|
+
}).filter((connection) => connection.status === "active");
|
|
31
|
+
const connection = input.connectionId ? activeConnections.find((candidate) => candidate.id === input.connectionId) : activeConnections.find((candidate) => candidate.isDefault) ?? activeConnections[0];
|
|
32
|
+
if (!connection) throw new Error("No active connector account is available for memory sync.");
|
|
33
|
+
const execution = await (input.adapter ?? new ComposioSessionsAdapter()).executeWithPolicy({
|
|
34
|
+
context: {
|
|
35
|
+
principalId: "local-owner",
|
|
36
|
+
toolkits: [toolkit]
|
|
37
|
+
},
|
|
38
|
+
installation: {
|
|
39
|
+
...installation,
|
|
40
|
+
maxScope: "read",
|
|
41
|
+
confirmationPolicy: "never"
|
|
42
|
+
},
|
|
43
|
+
connection,
|
|
44
|
+
agentId: input.agentId,
|
|
45
|
+
action: {
|
|
46
|
+
connectorId,
|
|
47
|
+
actionId: input.actionId,
|
|
48
|
+
toolkit,
|
|
49
|
+
scope: "read",
|
|
50
|
+
curated: true,
|
|
51
|
+
cachedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
52
|
+
},
|
|
53
|
+
args: input.arguments ?? {},
|
|
54
|
+
confirmed: true
|
|
55
|
+
});
|
|
56
|
+
if (execution.decision !== "allowed") throw new Error(execution.reason);
|
|
57
|
+
const serialized = JSON.stringify(execution.result, null, 2);
|
|
58
|
+
const content = serialized.length > 2e4 ? `${serialized.slice(0, 2e4)}\n…` : serialized;
|
|
59
|
+
const canonicalKey = `connector:${connectorId}:${connection.id}:${input.actionId}:${createHash("sha256").update(JSON.stringify(input.arguments ?? {})).digest("hex").slice(0, 16)}`;
|
|
60
|
+
return {
|
|
61
|
+
recordId: upsertMemoryRecord({
|
|
62
|
+
providerId: "connector-composio",
|
|
63
|
+
kind: "workspace_fact",
|
|
64
|
+
agentId: input.agentId,
|
|
65
|
+
workspaceId: getWorkspacePath(input.config),
|
|
66
|
+
content,
|
|
67
|
+
canonicalKey,
|
|
68
|
+
source: { provider: connectorId },
|
|
69
|
+
confidence: .75,
|
|
70
|
+
tags: [
|
|
71
|
+
"connector",
|
|
72
|
+
"external",
|
|
73
|
+
toolkit,
|
|
74
|
+
"needs-review"
|
|
75
|
+
],
|
|
76
|
+
status: "needs_review",
|
|
77
|
+
sensitivity: "normal",
|
|
78
|
+
explicitness: "observed",
|
|
79
|
+
durability: "recurring",
|
|
80
|
+
importance: .5,
|
|
81
|
+
disclosurePolicy: "referenceable"
|
|
82
|
+
}).id,
|
|
83
|
+
connectorId,
|
|
84
|
+
actionId: input.actionId
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//#endregion
|
|
88
|
+
export { syncComposioResultToMemory };
|
|
89
|
+
|
|
90
|
+
//# sourceMappingURL=connector-memory-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector-memory-sync.js","names":[],"sources":["../../../src/connectors/connector-memory-sync.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\n\nimport type { Config } from '../config/schema.js';\nimport { getWorkspacePath } from '../config/workspace-path-helpers.js';\nimport {\n getConnectorInstallation,\n listConnectorConnections,\n upsertMemoryRecord,\n} from '../storage/sqlite/index.js';\nimport { ComposioSessionsAdapter } from './composio-sessions.js';\nimport { scopeForComposioAction } from './composio.js';\nimport { getConnectorDefinition } from './catalog.js';\n\nconst MEMORY_SOURCE_TOOLKITS = new Set(['gmail', 'googledrive', 'notion', 'slack']);\n\nexport async function syncComposioResultToMemory(input: {\n config: Config;\n connectorId: string;\n actionId: string;\n arguments?: Record<string, unknown>;\n agentId: string;\n connectionId?: string;\n adapter?: ComposioSessionsAdapter;\n}): Promise<{ recordId: string; connectorId: string; actionId: string }> {\n const definition = getConnectorDefinition(input.connectorId);\n if (definition?.runtime.type !== 'composio' || definition.runtime.role !== 'toolkit') {\n throw new Error('Memory sync requires a Composio toolkit connector.');\n }\n const toolkit = definition.runtime.toolkit;\n if (!MEMORY_SOURCE_TOOLKITS.has(toolkit)) {\n throw new Error('Memory sync is supported for Gmail, Google Drive, Notion, and Slack.');\n }\n const risk = scopeForComposioAction(input.actionId);\n if (risk.toolkit !== toolkit || risk.scope !== 'read' || !risk.curated) {\n throw new Error('Memory sync only accepts a verified read action for the selected connector.');\n }\n const connectorId = definition.id;\n const installation = getConnectorInstallation(`${connectorId}-local-owner`);\n if (!installation?.enabled) throw new Error('Connector installation is not enabled.');\n if (installation.allowedAgentIds.length && !installation.allowedAgentIds.includes(input.agentId)) {\n throw new Error('This agent is not allowed to sync from the connector.');\n }\n const activeConnections = listConnectorConnections({ principalId: 'local-owner', connectorId })\n .filter((connection) => connection.status === 'active');\n const connection = input.connectionId\n ? activeConnections.find((candidate) => candidate.id === input.connectionId)\n : activeConnections.find((candidate) => candidate.isDefault) ?? activeConnections[0];\n if (!connection) throw new Error('No active connector account is available for memory sync.');\n const adapter = input.adapter ?? new ComposioSessionsAdapter();\n const execution = await adapter.executeWithPolicy({\n context: { principalId: 'local-owner', toolkits: [toolkit] },\n installation: { ...installation, maxScope: 'read', confirmationPolicy: 'never' },\n connection,\n agentId: input.agentId,\n action: {\n connectorId,\n actionId: input.actionId,\n toolkit,\n scope: 'read',\n curated: true,\n cachedAt: new Date().toISOString(),\n },\n args: input.arguments ?? {},\n confirmed: true,\n });\n if (execution.decision !== 'allowed') throw new Error(execution.reason);\n const serialized = JSON.stringify(execution.result, null, 2);\n const content = serialized.length > 20_000 ? `${serialized.slice(0, 20_000)}\\n…` : serialized;\n const canonicalKey = `connector:${connectorId}:${connection.id}:${input.actionId}:${createHash('sha256').update(JSON.stringify(input.arguments ?? {})).digest('hex').slice(0, 16)}`;\n const record = upsertMemoryRecord({\n providerId: 'connector-composio',\n kind: 'workspace_fact',\n agentId: input.agentId,\n workspaceId: getWorkspacePath(input.config),\n content,\n canonicalKey,\n source: { provider: connectorId },\n confidence: 0.75,\n tags: ['connector', 'external', toolkit, 'needs-review'],\n status: 'needs_review',\n sensitivity: 'normal',\n explicitness: 'observed',\n durability: 'recurring',\n importance: 0.5,\n disclosurePolicy: 'referenceable',\n });\n return { recordId: record.id, connectorId, actionId: input.actionId };\n}\n"],"mappings":";;;;;;;;;AAaA,MAAM,yBAAyB,IAAI,IAAI;CAAC;CAAS;CAAe;CAAU;CAAQ,CAAC;AAEnF,eAAsB,2BAA2B,OAQwB;CACvE,MAAM,aAAa,uBAAuB,MAAM,YAAY;AAC5D,KAAI,YAAY,QAAQ,SAAS,cAAc,WAAW,QAAQ,SAAS,UACzE,OAAM,IAAI,MAAM,qDAAqD;CAEvE,MAAM,UAAU,WAAW,QAAQ;AACnC,KAAI,CAAC,uBAAuB,IAAI,QAAQ,CACtC,OAAM,IAAI,MAAM,uEAAuE;CAEzF,MAAM,OAAO,uBAAuB,MAAM,SAAS;AACnD,KAAI,KAAK,YAAY,WAAW,KAAK,UAAU,UAAU,CAAC,KAAK,QAC7D,OAAM,IAAI,MAAM,8EAA8E;CAEhG,MAAM,cAAc,WAAW;CAC/B,MAAM,eAAe,yBAAyB,GAAG,YAAY,cAAc;AAC3E,KAAI,CAAC,cAAc,QAAS,OAAM,IAAI,MAAM,yCAAyC;AACrF,KAAI,aAAa,gBAAgB,UAAU,CAAC,aAAa,gBAAgB,SAAS,MAAM,QAAQ,CAC9F,OAAM,IAAI,MAAM,wDAAwD;CAE1E,MAAM,oBAAoB,yBAAyB;EAAE,aAAa;EAAe;EAAa,CAAC,CAC5F,QAAQ,eAAe,WAAW,WAAW,SAAS;CACzD,MAAM,aAAa,MAAM,eACrB,kBAAkB,MAAM,cAAc,UAAU,OAAO,MAAM,aAAa,GAC1E,kBAAkB,MAAM,cAAc,UAAU,UAAU,IAAI,kBAAkB;AACpF,KAAI,CAAC,WAAY,OAAM,IAAI,MAAM,4DAA4D;CAE7F,MAAM,YAAY,OADF,MAAM,WAAW,IAAI,yBAAyB,EAC9B,kBAAkB;EAChD,SAAS;GAAE,aAAa;GAAe,UAAU,CAAC,QAAQ;GAAE;EAC5D,cAAc;GAAE,GAAG;GAAc,UAAU;GAAQ,oBAAoB;GAAS;EAChF;EACA,SAAS,MAAM;EACf,QAAQ;GACN;GACA,UAAU,MAAM;GAChB;GACA,OAAO;GACP,SAAS;GACT,2BAAU,IAAI,MAAM,EAAC,aAAa;GACnC;EACD,MAAM,MAAM,aAAa,EAAE;EAC3B,WAAW;EACZ,CAAC;AACF,KAAI,UAAU,aAAa,UAAW,OAAM,IAAI,MAAM,UAAU,OAAO;CACvE,MAAM,aAAa,KAAK,UAAU,UAAU,QAAQ,MAAM,EAAE;CAC5D,MAAM,UAAU,WAAW,SAAS,MAAS,GAAG,WAAW,MAAM,GAAG,IAAO,CAAC,OAAO;CACnF,MAAM,eAAe,aAAa,YAAY,GAAG,WAAW,GAAG,GAAG,MAAM,SAAS,GAAG,WAAW,SAAS,CAAC,OAAO,KAAK,UAAU,MAAM,aAAa,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,MAAM,GAAG,GAAG;AAkBjL,QAAO;EAAE,UAjBM,mBAAmB;GAChC,YAAY;GACZ,MAAM;GACN,SAAS,MAAM;GACf,aAAa,iBAAiB,MAAM,OAAO;GAC3C;GACA;GACA,QAAQ,EAAE,UAAU,aAAa;GACjC,YAAY;GACZ,MAAM;IAAC;IAAa;IAAY;IAAS;IAAe;GACxD,QAAQ;GACR,aAAa;GACb,cAAc;GACd,YAAY;GACZ,YAAY;GACZ,kBAAkB;GACnB,CACwB,CAAC;EAAI;EAAa,UAAU,MAAM;EAAU"}
|
|
@@ -1,109 +1,52 @@
|
|
|
1
1
|
import { CredentialResolver, init_credentials } from "../auth/credentials.js";
|
|
2
|
-
import {
|
|
3
|
-
import { saveConnectorSecrets } from "./secret-store.js";
|
|
2
|
+
import { assertPreferredConnectorStrategy } from "./integration-strategy.js";
|
|
4
3
|
import { getConnectorDefinition } from "./catalog.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { listConnectorInstances } from "./instances.js";
|
|
8
|
-
import { assertConnectorOAuthReady } from "./oauth.js";
|
|
4
|
+
import { getConnectorInstance } from "./instances.js";
|
|
5
|
+
import { getConnectorRuntimeAdapter } from "./runtime-adapter-registry.js";
|
|
9
6
|
//#region src/connectors/install.ts
|
|
10
7
|
init_credentials();
|
|
11
8
|
async function installConnectorDefinition(config, definition, input, resolver = new CredentialResolver()) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
xopcConnector: {
|
|
20
|
-
managed: true,
|
|
21
|
-
connectorId: definition.id,
|
|
22
|
-
version: definition.version,
|
|
23
|
-
enabled: true,
|
|
24
|
-
displayName: definition.displayName,
|
|
25
|
-
source: definition.source,
|
|
26
|
-
artifactSha256: definition.provenance?.sha256
|
|
27
|
-
},
|
|
28
|
-
runtime: definition.runtime,
|
|
29
|
-
...definition.runtime.type === "composio" && definition.runtime.toolkit !== "composio" ? { scope: "read" } : {}
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
const instance = listConnectorInstances(config).find((candidate) => candidate.instanceId === instanceId);
|
|
33
|
-
if (!instance) throw new Error(`Connector "${definition.id}" was installed but could not be resolved.`);
|
|
34
|
-
return instance;
|
|
35
|
-
}
|
|
36
|
-
const { serverId, server } = materializeConnectorMcpServer(definition, input);
|
|
37
|
-
const existingServer = config.mcp?.servers?.[serverId];
|
|
38
|
-
if (existingServer && !isManagedConnectorServer(existingServer)) throw new Error(`MCP server "${serverId}" already exists and is not managed by Connectors.`);
|
|
39
|
-
await assertConnectorOAuthReady(definition, resolver);
|
|
40
|
-
await saveConnectorSecrets(definition, input, resolver);
|
|
41
|
-
config.mcp = config.mcp ?? {};
|
|
42
|
-
config.mcp.servers = {
|
|
43
|
-
...config.mcp.servers ?? {},
|
|
44
|
-
[serverId]: server
|
|
45
|
-
};
|
|
46
|
-
const instance = listConnectorInstances(config).find((candidate) => candidate.instanceId === serverId);
|
|
47
|
-
if (!instance) throw new Error(`Connector "${definition.id}" was installed but could not be resolved.`);
|
|
48
|
-
appendConnectorAuditRecord(config, serverId, { action: "installed" });
|
|
49
|
-
return instance;
|
|
9
|
+
assertPreferredConnectorStrategy(definition);
|
|
10
|
+
return await getConnectorRuntimeAdapter(definition.runtime.type).install({
|
|
11
|
+
config,
|
|
12
|
+
definition,
|
|
13
|
+
input,
|
|
14
|
+
resolver
|
|
15
|
+
});
|
|
50
16
|
}
|
|
51
17
|
async function installConnector(config, connectorId, input, resolver = new CredentialResolver()) {
|
|
52
18
|
const definition = getConnectorDefinition(connectorId);
|
|
53
19
|
if (!definition) throw new Error(`Unknown connector: ${connectorId}`);
|
|
54
|
-
return installConnectorDefinition(config, definition, input, resolver);
|
|
20
|
+
return await installConnectorDefinition(config, definition, input, resolver);
|
|
55
21
|
}
|
|
56
22
|
function updateConnectorConfig(config, instanceId, input) {
|
|
57
|
-
const
|
|
58
|
-
if (!
|
|
59
|
-
const definition = getConnectorDefinition(
|
|
60
|
-
if (!definition) throw new Error(`Unknown connector: ${
|
|
61
|
-
|
|
62
|
-
if (
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
xopcConnector: {
|
|
71
|
-
...existingServer.xopcConnector,
|
|
72
|
-
...server.xopcConnector,
|
|
73
|
-
enabled: existingServer.xopcConnector.enabled,
|
|
74
|
-
lastConnectedAt: existingServer.xopcConnector.lastConnectedAt,
|
|
75
|
-
lastError: existingServer.xopcConnector.lastError
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
const instance = listConnectorInstances(config).find((candidate) => candidate.instanceId === serverId);
|
|
80
|
-
if (!instance) throw new Error(`Connector "${definition.id}" was updated but could not be resolved.`);
|
|
81
|
-
return instance;
|
|
23
|
+
const instance = getConnectorInstance(config, instanceId);
|
|
24
|
+
if (!instance) throw new Error(`Connector instance not found: ${instanceId}`);
|
|
25
|
+
const definition = getConnectorDefinition(instance.connectorId);
|
|
26
|
+
if (!definition) throw new Error(`Unknown connector: ${instance.connectorId}`);
|
|
27
|
+
const adapter = getConnectorRuntimeAdapter(definition.runtime.type);
|
|
28
|
+
if (!adapter.update) throw new Error(`Connector type "${definition.runtime.type}" does not support config updates.`);
|
|
29
|
+
return adapter.update({
|
|
30
|
+
config,
|
|
31
|
+
definition,
|
|
32
|
+
input,
|
|
33
|
+
resolver: new CredentialResolver(),
|
|
34
|
+
instanceId
|
|
35
|
+
});
|
|
82
36
|
}
|
|
83
37
|
function uninstallConnector(config, instanceId) {
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
const instance = listConnectorInstances(config).find((candidate) => candidate.instanceId === instanceId);
|
|
89
|
-
if (!instance) throw new Error(`Connector instance not found: ${instanceId}`);
|
|
90
|
-
appendConnectorAuditRecord(config, instanceId, { action: "removed" });
|
|
91
|
-
if (server) {
|
|
92
|
-
const nextServers = { ...config.mcp?.servers ?? {} };
|
|
93
|
-
delete nextServers[instanceId];
|
|
94
|
-
config.mcp = {
|
|
95
|
-
...config.mcp ?? {},
|
|
96
|
-
servers: nextServers
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
if (connectorRecord) {
|
|
100
|
-
const nextInstances = { ...config.connectors?.instances ?? {} };
|
|
101
|
-
delete nextInstances[instanceId];
|
|
102
|
-
config.connectors = {
|
|
103
|
-
...config.connectors ?? {},
|
|
104
|
-
instances: nextInstances
|
|
105
|
-
};
|
|
38
|
+
const instance = getConnectorInstance(config, instanceId);
|
|
39
|
+
if (!instance) {
|
|
40
|
+
if (config.mcp?.servers?.[instanceId] || config.connectors?.instances?.[instanceId]) throw new Error(`Connector instance "${instanceId}" is not managed by Connectors.`);
|
|
41
|
+
throw new Error(`Connector instance not found: ${instanceId}`);
|
|
106
42
|
}
|
|
43
|
+
const definition = getConnectorDefinition(instance.connectorId);
|
|
44
|
+
if (!definition) throw new Error(`Unknown connector: ${instance.connectorId}`);
|
|
45
|
+
getConnectorRuntimeAdapter(definition.runtime.type).uninstall({
|
|
46
|
+
config,
|
|
47
|
+
definition,
|
|
48
|
+
instance
|
|
49
|
+
});
|
|
107
50
|
return instance;
|
|
108
51
|
}
|
|
109
52
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","names":[],"sources":["../../../src/connectors/install.ts"],"sourcesContent":["import { CredentialResolver } from '../auth/credentials.js';\nimport type { Config } from '../config/schema.js';\nimport { getConnectorDefinition } from './catalog.js';\nimport {
|
|
1
|
+
{"version":3,"file":"install.js","names":[],"sources":["../../../src/connectors/install.ts"],"sourcesContent":["import { CredentialResolver } from '../auth/credentials.js';\nimport type { Config } from '../config/schema.js';\nimport { getConnectorDefinition } from './catalog.js';\nimport { assertPreferredConnectorStrategy } from './integration-strategy.js';\nimport { getConnectorInstance } from './instances.js';\nimport { getConnectorRuntimeAdapter } from './runtime-adapter-registry.js';\nimport type { ConnectorDefinition, ConnectorInstallInput, ConnectorInstance } from './types.js';\n\nexport async function installConnectorDefinition(\n config: Config,\n definition: ConnectorDefinition,\n input: ConnectorInstallInput,\n resolver = new CredentialResolver(),\n): Promise<ConnectorInstance> {\n assertPreferredConnectorStrategy(definition);\n return await getConnectorRuntimeAdapter(definition.runtime.type).install({ config, definition, input, resolver });\n}\n\nexport async function installConnector(\n config: Config,\n connectorId: string,\n input: ConnectorInstallInput,\n resolver = new CredentialResolver(),\n): Promise<ConnectorInstance> {\n const definition = getConnectorDefinition(connectorId);\n if (!definition) throw new Error(`Unknown connector: ${connectorId}`);\n return await installConnectorDefinition(config, definition, input, resolver);\n}\n\nexport function updateConnectorConfig(\n config: Config,\n instanceId: string,\n input: ConnectorInstallInput,\n): ConnectorInstance {\n const instance = getConnectorInstance(config, instanceId);\n if (!instance) throw new Error(`Connector instance not found: ${instanceId}`);\n const definition = getConnectorDefinition(instance.connectorId);\n if (!definition) throw new Error(`Unknown connector: ${instance.connectorId}`);\n const adapter = getConnectorRuntimeAdapter(definition.runtime.type);\n if (!adapter.update) throw new Error(`Connector type \"${definition.runtime.type}\" does not support config updates.`);\n return adapter.update({ config, definition, input, resolver: new CredentialResolver(), instanceId });\n}\n\nexport function uninstallConnector(config: Config, instanceId: string): ConnectorInstance {\n const instance = getConnectorInstance(config, instanceId);\n if (!instance) {\n if (config.mcp?.servers?.[instanceId] || config.connectors?.instances?.[instanceId]) {\n throw new Error(`Connector instance \"${instanceId}\" is not managed by Connectors.`);\n }\n throw new Error(`Connector instance not found: ${instanceId}`);\n }\n const definition = getConnectorDefinition(instance.connectorId);\n if (!definition) throw new Error(`Unknown connector: ${instance.connectorId}`);\n getConnectorRuntimeAdapter(definition.runtime.type).uninstall({ config, definition, instance });\n return instance;\n}\n"],"mappings":";;;;;;kBAA4D;AAQ5D,eAAsB,2BACpB,QACA,YACA,OACA,WAAW,IAAI,oBAAoB,EACP;AAC5B,kCAAiC,WAAW;AAC5C,QAAO,MAAM,2BAA2B,WAAW,QAAQ,KAAK,CAAC,QAAQ;EAAE;EAAQ;EAAY;EAAO;EAAU,CAAC;;AAGnH,eAAsB,iBACpB,QACA,aACA,OACA,WAAW,IAAI,oBAAoB,EACP;CAC5B,MAAM,aAAa,uBAAuB,YAAY;AACtD,KAAI,CAAC,WAAY,OAAM,IAAI,MAAM,sBAAsB,cAAc;AACrE,QAAO,MAAM,2BAA2B,QAAQ,YAAY,OAAO,SAAS;;AAG9E,SAAgB,sBACd,QACA,YACA,OACmB;CACnB,MAAM,WAAW,qBAAqB,QAAQ,WAAW;AACzD,KAAI,CAAC,SAAU,OAAM,IAAI,MAAM,iCAAiC,aAAa;CAC7E,MAAM,aAAa,uBAAuB,SAAS,YAAY;AAC/D,KAAI,CAAC,WAAY,OAAM,IAAI,MAAM,sBAAsB,SAAS,cAAc;CAC9E,MAAM,UAAU,2BAA2B,WAAW,QAAQ,KAAK;AACnE,KAAI,CAAC,QAAQ,OAAQ,OAAM,IAAI,MAAM,mBAAmB,WAAW,QAAQ,KAAK,oCAAoC;AACpH,QAAO,QAAQ,OAAO;EAAE;EAAQ;EAAY;EAAO,UAAU,IAAI,oBAAoB;EAAE;EAAY,CAAC;;AAGtG,SAAgB,mBAAmB,QAAgB,YAAuC;CACxF,MAAM,WAAW,qBAAqB,QAAQ,WAAW;AACzD,KAAI,CAAC,UAAU;AACb,MAAI,OAAO,KAAK,UAAU,eAAe,OAAO,YAAY,YAAY,YACtE,OAAM,IAAI,MAAM,uBAAuB,WAAW,iCAAiC;AAErF,QAAM,IAAI,MAAM,iCAAiC,aAAa;;CAEhE,MAAM,aAAa,uBAAuB,SAAS,YAAY;AAC/D,KAAI,CAAC,WAAY,OAAM,IAAI,MAAM,sBAAsB,SAAS,cAAc;AAC9E,4BAA2B,WAAW,QAAQ,KAAK,CAAC,UAAU;EAAE;EAAQ;EAAY;EAAU,CAAC;AAC/F,QAAO"}
|
|
@@ -26,7 +26,9 @@ function connectorInstanceFromRecord(instanceId, record) {
|
|
|
26
26
|
const connectorId = markerRecord.connectorId;
|
|
27
27
|
const definition = getConnectorDefinition(connectorId);
|
|
28
28
|
const runtime = record.runtime && typeof record.runtime === "object" && !Array.isArray(record.runtime) ? record.runtime : {};
|
|
29
|
-
const runtimeType =
|
|
29
|
+
const runtimeType = runtime.type;
|
|
30
|
+
if (runtimeType !== "composio" && runtimeType !== "channel" && runtimeType !== "nativeTool" && runtimeType !== "memorySource") return [];
|
|
31
|
+
if (runtimeType === "composio" && (typeof runtime.toolkit !== "string" || runtime.role !== "credential" && runtime.role !== "toolkit")) return [];
|
|
30
32
|
const enabled = markerRecord.enabled !== false;
|
|
31
33
|
return [{
|
|
32
34
|
instanceId,
|
|
@@ -42,7 +44,9 @@ function connectorInstanceFromRecord(instanceId, record) {
|
|
|
42
44
|
config: readMarkerConfig(markerRecord),
|
|
43
45
|
materialized: runtimeType === "composio" ? {
|
|
44
46
|
type: "composio",
|
|
45
|
-
id: instanceId
|
|
47
|
+
id: instanceId,
|
|
48
|
+
toolkit: runtime.toolkit,
|
|
49
|
+
role: runtime.role
|
|
46
50
|
} : runtimeType === "channel" ? {
|
|
47
51
|
type: "channel",
|
|
48
52
|
id: instanceId
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instances.js","names":[],"sources":["../../../src/connectors/instances.ts"],"sourcesContent":["import type { Config } from '../config/schema.js';\nimport { getConnectorDefinition } from './catalog.js';\nimport { isManagedConnectorServer } from './materialize.js';\nimport { getConnectorAuditFromMarker, getConnectorUsageFromMarker } from './usage.js';\nimport type { ConnectorInstance } from './types.js';\n\nfunction readMarkerConfig(marker: unknown): Record<string, unknown> | undefined {\n if (!marker || typeof marker !== 'object' || Array.isArray(marker)) return undefined;\n const config = (marker as Record<string, unknown>).config;\n return config && typeof config === 'object' && !Array.isArray(config)\n ? config as Record<string, unknown>\n : undefined;\n}\n\nfunction secretStatusForServer(server: Record<string, unknown>): Record<string, boolean> {\n const marker = server.xopcConnector as { connectorId?: string } | undefined;\n const definition = marker?.connectorId ? getConnectorDefinition(marker.connectorId) : undefined;\n const env = server.env && typeof server.env === 'object' && !Array.isArray(server.env)\n ? (server.env as Record<string, unknown>)\n : {};\n const status: Record<string, boolean> = {};\n for (const secret of definition?.setup.secrets ?? []) {\n const value = env[secret.key];\n status[secret.key] = Boolean(\n value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n 'xopcSecretRef' in value,\n );\n }\n return status;\n}\n\nfunction connectorInstanceFromRecord(instanceId: string, record: Record<string, unknown>): ConnectorInstance[] {\n const marker = record.xopcConnector;\n if (!marker || typeof marker !== 'object' || Array.isArray(marker)) return [];\n const markerRecord = marker as Record<string, unknown>;\n if (markerRecord.managed !== true || typeof markerRecord.connectorId !== 'string') return [];\n const connectorId = markerRecord.connectorId;\n const definition = getConnectorDefinition(connectorId);\n const runtime = record.runtime && typeof record.runtime === 'object' && !Array.isArray(record.runtime)\n ? record.runtime as Record<string, unknown>\n : {};\n const runtimeType =
|
|
1
|
+
{"version":3,"file":"instances.js","names":[],"sources":["../../../src/connectors/instances.ts"],"sourcesContent":["import type { Config } from '../config/schema.js';\nimport { getConnectorDefinition } from './catalog.js';\nimport { isManagedConnectorServer } from './materialize.js';\nimport { getConnectorAuditFromMarker, getConnectorUsageFromMarker } from './usage.js';\nimport type { ConnectorInstance } from './types.js';\n\nfunction readMarkerConfig(marker: unknown): Record<string, unknown> | undefined {\n if (!marker || typeof marker !== 'object' || Array.isArray(marker)) return undefined;\n const config = (marker as Record<string, unknown>).config;\n return config && typeof config === 'object' && !Array.isArray(config)\n ? config as Record<string, unknown>\n : undefined;\n}\n\nfunction secretStatusForServer(server: Record<string, unknown>): Record<string, boolean> {\n const marker = server.xopcConnector as { connectorId?: string } | undefined;\n const definition = marker?.connectorId ? getConnectorDefinition(marker.connectorId) : undefined;\n const env = server.env && typeof server.env === 'object' && !Array.isArray(server.env)\n ? (server.env as Record<string, unknown>)\n : {};\n const status: Record<string, boolean> = {};\n for (const secret of definition?.setup.secrets ?? []) {\n const value = env[secret.key];\n status[secret.key] = Boolean(\n value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n 'xopcSecretRef' in value,\n );\n }\n return status;\n}\n\nfunction connectorInstanceFromRecord(instanceId: string, record: Record<string, unknown>): ConnectorInstance[] {\n const marker = record.xopcConnector;\n if (!marker || typeof marker !== 'object' || Array.isArray(marker)) return [];\n const markerRecord = marker as Record<string, unknown>;\n if (markerRecord.managed !== true || typeof markerRecord.connectorId !== 'string') return [];\n const connectorId = markerRecord.connectorId;\n const definition = getConnectorDefinition(connectorId);\n const runtime = record.runtime && typeof record.runtime === 'object' && !Array.isArray(record.runtime)\n ? record.runtime as Record<string, unknown>\n : {};\n const runtimeType = runtime.type;\n if (\n runtimeType !== 'composio' &&\n runtimeType !== 'channel' &&\n runtimeType !== 'nativeTool' &&\n runtimeType !== 'memorySource'\n ) return [];\n if (\n runtimeType === 'composio' &&\n (typeof runtime.toolkit !== 'string' || (runtime.role !== 'credential' && runtime.role !== 'toolkit'))\n ) return [];\n const enabled = markerRecord.enabled !== false;\n return [{\n instanceId,\n connectorId,\n displayName: definition?.displayName ?? (typeof markerRecord.displayName === 'string' ? markerRecord.displayName : connectorId),\n enabled,\n status: enabled ? 'installed' : 'disabled',\n connectionStatus: enabled ? 'unknown' : 'disabled',\n authStatus: definition?.auth.mode === 'none' ? 'none' : 'unknown',\n lastConnectedAt: typeof markerRecord.lastConnectedAt === 'string' ? markerRecord.lastConnectedAt : undefined,\n lastError: typeof markerRecord.lastError === 'string' ? markerRecord.lastError : undefined,\n secretStatus: {},\n config: readMarkerConfig(markerRecord),\n materialized: runtimeType === 'composio'\n ? {\n type: 'composio',\n id: instanceId,\n toolkit: runtime.toolkit as string,\n role: runtime.role as 'credential' | 'toolkit',\n }\n : runtimeType === 'channel'\n ? { type: 'channel', id: instanceId }\n : runtimeType === 'nativeTool'\n ? { type: 'nativeTool', id: instanceId }\n : { type: 'memorySource', id: instanceId },\n usage: getConnectorUsageFromMarker(marker),\n audit: getConnectorAuditFromMarker(marker),\n }];\n}\n\nexport function listConnectorInstances(config: Config): ConnectorInstance[] {\n const servers = config.mcp?.servers ?? {};\n const mcpInstances = Object.entries(servers)\n .flatMap(([serverId, server]) => {\n if (!isManagedConnectorServer(server)) {\n return [];\n }\n const connectorId = server.xopcConnector.connectorId;\n const definition = getConnectorDefinition(connectorId);\n const enabled = server.xopcConnector.enabled !== false;\n const usage = getConnectorUsageFromMarker(server.xopcConnector);\n const lastHealthStatus = usage.lastHealthStatus;\n const connectionStatus: ConnectorInstance['connectionStatus'] = !enabled\n ? 'disabled'\n : lastHealthStatus === 'ok'\n ? 'connected'\n : lastHealthStatus === 'unauthorized'\n ? 'unauthorized'\n : lastHealthStatus\n ? 'error'\n : 'unknown';\n const authStatus: ConnectorInstance['authStatus'] = definition?.auth.mode === 'none'\n ? 'none'\n : lastHealthStatus === 'missing_secret'\n ? 'missing'\n : lastHealthStatus === 'unauthorized'\n ? 'unauthorized'\n : 'unknown';\n const status: ConnectorInstance['status'] = enabled ? (lastHealthStatus === 'ok' ? 'connected' : 'installed') : 'disabled';\n return [\n {\n instanceId: serverId,\n connectorId,\n displayName: definition?.displayName ?? server.xopcConnector.displayName ?? connectorId,\n enabled,\n status,\n connectionStatus,\n authStatus,\n lastConnectedAt: server.xopcConnector.lastConnectedAt,\n lastError: server.xopcConnector.lastError,\n secretStatus: secretStatusForServer(server),\n config: readMarkerConfig(server.xopcConnector),\n materialized: {\n type: 'mcp' as const,\n serverId,\n },\n usage,\n audit: getConnectorAuditFromMarker(server.xopcConnector),\n },\n ];\n });\n const genericInstances = Object.entries(config.connectors?.instances ?? {})\n .flatMap(([instanceId, record]) => (\n record && typeof record === 'object' && !Array.isArray(record)\n ? connectorInstanceFromRecord(instanceId, record as Record<string, unknown>)\n : []\n ));\n return [...mcpInstances, ...genericInstances]\n .sort((left, right) => left.displayName.localeCompare(right.displayName));\n}\n\nexport function getConnectorInstance(config: Config, instanceId: string): ConnectorInstance | undefined {\n return listConnectorInstances(config).find((instance) => instance.instanceId === instanceId);\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ConnectorDefinition, ConnectorIntegrationStrategy } from './types.js';
|
|
2
|
+
export declare function composioIntegrationStrategy(toolkit: string): ConnectorIntegrationStrategy;
|
|
3
|
+
export declare function assertPreferredConnectorStrategy(definition: ConnectorDefinition): void;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region src/connectors/integration-strategy.ts
|
|
2
|
+
const COMPOSIO_STRATEGY_OVERRIDES = { telegram: {
|
|
3
|
+
lane: "native",
|
|
4
|
+
workload: "core",
|
|
5
|
+
preferred: false,
|
|
6
|
+
alternative: {
|
|
7
|
+
kind: "channel",
|
|
8
|
+
id: "telegram"
|
|
9
|
+
}
|
|
10
|
+
} };
|
|
11
|
+
function composioIntegrationStrategy(toolkit) {
|
|
12
|
+
return COMPOSIO_STRATEGY_OVERRIDES[toolkit.trim().toLowerCase()] ?? {
|
|
13
|
+
lane: "composio",
|
|
14
|
+
workload: "long_tail",
|
|
15
|
+
preferred: true
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function assertPreferredConnectorStrategy(definition) {
|
|
19
|
+
const strategy = definition.integrationStrategy;
|
|
20
|
+
if (!strategy || strategy.preferred) return;
|
|
21
|
+
const alternative = strategy.alternative;
|
|
22
|
+
if (alternative?.kind === "channel") throw new Error(`Connector "${definition.displayName}" is reserved for the native ${alternative.id} channel. Configure it under Channels instead.`);
|
|
23
|
+
if (alternative?.kind === "connector") throw new Error(`Connector "${definition.displayName}" is a fallback integration. Install the preferred MCP connector "${alternative.id}" instead.`);
|
|
24
|
+
throw new Error(`Connector "${definition.displayName}" is not available in the preferred integration lane.`);
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { assertPreferredConnectorStrategy, composioIntegrationStrategy };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=integration-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration-strategy.js","names":[],"sources":["../../../src/connectors/integration-strategy.ts"],"sourcesContent":["import type { ConnectorDefinition, ConnectorIntegrationStrategy } from './types.js';\n\nconst COMPOSIO_STRATEGY_OVERRIDES: Readonly<Record<string, ConnectorIntegrationStrategy>> = {\n telegram: {\n lane: 'native',\n workload: 'core',\n preferred: false,\n alternative: { kind: 'channel', id: 'telegram' },\n },\n};\n\nexport function composioIntegrationStrategy(toolkit: string): ConnectorIntegrationStrategy {\n return COMPOSIO_STRATEGY_OVERRIDES[toolkit.trim().toLowerCase()] ?? {\n lane: 'composio',\n workload: 'long_tail',\n preferred: true,\n };\n}\n\nexport function assertPreferredConnectorStrategy(definition: ConnectorDefinition): void {\n const strategy = definition.integrationStrategy;\n if (!strategy || strategy.preferred) return;\n const alternative = strategy.alternative;\n if (alternative?.kind === 'channel') {\n throw new Error(\n `Connector \"${definition.displayName}\" is reserved for the native ${alternative.id} channel. Configure it under Channels instead.`,\n );\n }\n if (alternative?.kind === 'connector') {\n throw new Error(\n `Connector \"${definition.displayName}\" is a fallback integration. Install the preferred MCP connector \"${alternative.id}\" instead.`,\n );\n }\n throw new Error(`Connector \"${definition.displayName}\" is not available in the preferred integration lane.`);\n}\n"],"mappings":";AAEA,MAAM,8BAAsF,EAC1F,UAAU;CACR,MAAM;CACN,UAAU;CACV,WAAW;CACX,aAAa;EAAE,MAAM;EAAW,IAAI;EAAY;CACjD,EACF;AAED,SAAgB,4BAA4B,SAA+C;AACzF,QAAO,4BAA4B,QAAQ,MAAM,CAAC,aAAa,KAAK;EAClE,MAAM;EACN,UAAU;EACV,WAAW;EACZ;;AAGH,SAAgB,iCAAiC,YAAuC;CACtF,MAAM,WAAW,WAAW;AAC5B,KAAI,CAAC,YAAY,SAAS,UAAW;CACrC,MAAM,cAAc,SAAS;AAC7B,KAAI,aAAa,SAAS,UACxB,OAAM,IAAI,MACR,cAAc,WAAW,YAAY,+BAA+B,YAAY,GAAG,gDACpF;AAEH,KAAI,aAAa,SAAS,YACxB,OAAM,IAAI,MACR,cAAc,WAAW,YAAY,oEAAoE,YAAY,GAAG,YACzH;AAEH,OAAM,IAAI,MAAM,cAAc,WAAW,YAAY,uDAAuD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ConnectorActionMetadata, ConnectorExecutionDecision, ConnectorInstallationPolicy } from './types.js';
|
|
2
|
+
export type ConnectorPolicyEvaluation = {
|
|
3
|
+
decision: ConnectorExecutionDecision;
|
|
4
|
+
reason: string;
|
|
5
|
+
};
|
|
6
|
+
/** Evaluate every local policy layer before an external connector action is called. */
|
|
7
|
+
export declare function evaluateConnectorExecutionPolicy(input: {
|
|
8
|
+
installation: ConnectorInstallationPolicy;
|
|
9
|
+
action: Pick<ConnectorActionMetadata, 'scope' | 'curated'>;
|
|
10
|
+
agentId?: string;
|
|
11
|
+
connectionId?: string;
|
|
12
|
+
confirmed?: boolean;
|
|
13
|
+
}): ConnectorPolicyEvaluation;
|