@xopcai/xopc 0.0.303 → 0.0.307
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 +4 -4
- package/README.zh-CN.md +4 -4
- package/dist/browser-ext/dist/assets/{auth-B_9ZuGDx.js → auth-C3yV1y_l.js} +67 -22
- package/dist/browser-ext/dist/background.js +4 -4
- package/dist/browser-ext/dist/sidepanel.html +1 -1
- package/dist/browser-ext/dist/sidepanel.js +3 -3
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/feishu/xopc.extension.json +0 -3
- package/dist/extensions/telegram/xopc.extension.json +1 -4
- package/dist/extensions/weixin/xopc.extension.json +0 -3
- package/dist/gateway/static/root/assets/{activity-store-DCi5rh4e.js → activity-store-wgSB2HYK.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Ch3DzUvP.js → agent-avatar-dicebear-CZeQo09T.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-BPsRb9Ck.js +1 -0
- package/dist/gateway/static/root/assets/{agents-DXHD-ST3.js → agents-BlrHMbRx.js} +1 -1
- package/dist/gateway/static/root/assets/{api-CAV9PN9i.js → api-BKHmTb0w.js} +1 -1
- package/dist/gateway/static/root/assets/api-DFOlahZv.js +1 -0
- package/dist/gateway/static/root/assets/app-management-settings-panel-Bzw4fQP8.js +1 -0
- package/dist/gateway/static/root/assets/appearance-settings-8GZpUXva.js +1 -0
- package/dist/gateway/static/root/assets/apps-page-BkQQtIxH.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-BKGzaVvM.js → archive-plugin-CQ2NaoHb.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-8bARdLnp.js → attachment-load-BFi1H7yJ.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-BAEenyzx.js → automations-page-CDBXcii_.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-CUpiTTiY.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-Cv3GS9Eo.js → binary-plugins-D07eWmOx.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-D4ZIVQbk.css → block-editor-BdOTO0Yo.css} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-DUeb92LG.js → block-editor-CtVnjyYU.js} +3 -3
- package/dist/gateway/static/root/assets/{browser-automation-inputs-BGT0xoTv.js → browser-automation-inputs-BzkJog8e.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automations-page-D1O22WIf.js → browser-automations-page-DyrSbDdG.js} +2 -2
- package/dist/gateway/static/root/assets/browser-settings-page-CqTxLpil.js +3 -0
- package/dist/gateway/static/root/assets/button-CS04eWY9.js +1 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-BZ_-pnS6.js +8 -0
- package/dist/gateway/static/root/assets/channels-settings-DAD9qE3J.js +1 -0
- package/dist/gateway/static/root/assets/{channels-status-swr-C_icwbWj.js → channels-status-swr-B2JwuTjG.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-terminal-dock-D-JYPVYl.js → chat-terminal-dock-B62SZdAo.js} +2 -2
- package/dist/gateway/static/root/assets/{computer-settings-page-Bcfp948A.js → computer-settings-page-ClSresNq.js} +1 -1
- package/dist/gateway/static/root/assets/connector-service-page-CPqVmNvx.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-BUQyg3CW.js +2 -0
- package/dist/gateway/static/root/assets/cron-expression-CTMi_tql.js +2 -0
- package/dist/gateway/static/root/assets/date-picker-B71AJK50.js +1 -0
- package/dist/gateway/static/root/assets/{dependency-picker-UtoUm57Q.js → dependency-picker-DlyGK-kA.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-Bryx7gRM.js → desktop-pet-DGkbTE8_.js} +1 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-BY8r9j66.js +1 -0
- package/dist/gateway/static/root/assets/device-pairing-wizard-DzRrgd59.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-DQlFTVBx.js → extension-debug-page-L8Mm1n3A.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-BSsqRDXh.js → extension-page-CFc4vSNU.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DbVZv9ve.js → extension-settings-page-B5zWyHr3.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-D5AM8cyQ.js → gateway-config-swr-B6wHa6ZI.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-B53R0CA4.js +1 -0
- package/dist/gateway/static/root/assets/gateway-realtime-store-BLDgrJ30.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-D7qmTH4R.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-CSJWdnFs.js → gateway-startup-retry-DRzGnEV-.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-Cxowc29b.js → heartbeat-settings-Glsl3X5b.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-s9hDQ8Hc.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-BNh604hw.js → image-generation-api-Ck_pyDom.js} +1 -1
- package/dist/gateway/static/root/assets/imports-page-ByBX7ome.js +1 -0
- package/dist/gateway/static/root/assets/index-RBCkv8a_.js +79 -0
- package/dist/gateway/static/root/assets/index-cFU4S35z.css +1 -0
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-C45RlO8a.js +1 -0
- package/dist/gateway/static/root/assets/local-app-workbench-page-DP0x2jpR.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-CXPaPDGm.js → local-apps-page-C_AQc2bI.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-DLK05Y1a.js → locale-store-msTfRK8P.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-DvM8Pyok.js +2 -0
- package/dist/gateway/static/root/assets/management-settings-D1uwSutV.js +1 -0
- package/dist/gateway/static/root/assets/{markdown-view-B8maDRWh.js → markdown-view-BInabSKf.js} +2 -2
- package/dist/gateway/static/root/assets/{media-plugins-tSJ0CvcX.js → media-plugins-C4mhf13f.js} +1 -1
- package/dist/gateway/static/root/assets/messages-F74LVAiU.js +3 -0
- package/dist/gateway/static/root/assets/note-detail-panel-D35sErp2.js +5 -0
- package/dist/gateway/static/root/assets/notes-page-8jCDklDn.js +8 -0
- package/dist/gateway/static/root/assets/{page-tabs-CQx6H-GS.js → page-tabs-1go_BtX1.js} +1 -1
- package/dist/gateway/static/root/assets/{popover-select-DldSX8GX.js → popover-select-9i-ZtHXL.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-A3-bVtdy.js → preview-open-alternatives-DmoSC0j1.js} +1 -1
- package/dist/gateway/static/root/assets/{proactive-page-D46cR3sf.js → proactive-page-xAjKTIID.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-CujZXOea.js → product-open-page-gmi5LLwM.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-BUMQHy_N.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-DT-Mt7XR.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-BMFL4vis.js → registry-api-BSWtko7U.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-Clz3byir.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-CR0qvq9C.js → runtime-tools-settings-panel-ClkOoxDl.js} +2 -2
- package/dist/gateway/static/root/assets/{schema-form-BUD9lLEE.js → schema-form-BuEmLiaU.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-tQRwktKm.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-DqWg9XS5.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-BZPCUH6a.js → settings-form-section-Dor39QON.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-XoHmqIdm.js → settings-page-Xj-yvIc8.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BB_sMB7P.js +1 -0
- package/dist/gateway/static/root/assets/share-preview-page-BFWZoXdm.js +2 -0
- package/dist/gateway/static/root/assets/shares-settings-oDALm4b6.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-DmwelnfK.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-BE9JXz4U.js +2 -0
- package/dist/gateway/static/root/assets/{skills-page.utils-CH-quGxZ.js → skills-page.utils-Ii8qeXhs.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-CGC7eBso.js → system-settings-panel-Di6OSO-0.js} +1 -1
- package/dist/gateway/static/root/assets/task-detail-page-D1AWszc7.js +1 -0
- package/dist/gateway/static/root/assets/theme-store-1SZ-HFHX.js +1 -0
- package/dist/gateway/static/root/assets/tunnel-api-DDOlOYlj.js +1 -0
- package/dist/gateway/static/root/assets/{use-autosave-BydB6x2K.js → use-autosave-CQ8uWNnB.js} +1 -1
- package/dist/gateway/static/root/assets/user-model-page-C00i4ea0.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-CPUDBcag.js → voice-api-key-field-COTzshjL.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-bZqN8-UF.js → voice-config-api-DgJML_uM.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-D_FmJbGH.js → work-discovery-overlay-_URrXbi4.js} +1 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-CALs-1nd.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-BUiBjz6m.js +6 -0
- package/dist/gateway/static/root/channel-icons/feishu.svg +6 -12
- package/dist/gateway/static/root/connector-icons/SOURCES.md +12 -0
- package/dist/gateway/static/root/connector-icons/dingtalk-mark.svg +1 -0
- package/dist/gateway/static/root/connector-icons/tencent-meeting-mark.svg +37 -0
- package/dist/gateway/static/root/connector-icons/wps-calendar.svg +14 -0
- package/dist/gateway/static/root/connector-icons/wps-docs.svg +14 -0
- package/dist/gateway/static/root/connector-icons/wps-mail.svg +7 -0
- package/dist/gateway/static/root/index.html +14 -12
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/device-pairing.js +100 -7
- package/dist/packages/gateway-contract/src/gateway-scopes.js +53 -0
- package/dist/packages/gateway-contract/src/index.js +2 -0
- package/dist/packages/realtime-client/src/index.js +14 -2
- package/dist/packages/realtime-protocol/src/index.js +18 -14
- package/dist/src/agent/agent-instance-gateway.d.ts +2 -0
- package/dist/src/agent/agent-manager.d.ts +2 -0
- package/dist/src/agent/agent-manager.js +40 -12
- package/dist/src/agent/agent-scope.d.ts +4 -1
- package/dist/src/agent/agent-scope.js +19 -3
- package/dist/src/agent/commands/command-isolation.js +11 -9
- package/dist/src/agent/commands/command-registry.js +18 -33
- package/dist/src/agent/context/audit.js +12 -2
- package/dist/src/agent/context/coordinator.d.ts +13 -3
- package/dist/src/agent/context/coordinator.js +27 -11
- package/dist/src/agent/context/execution-context.js +42 -22
- package/dist/src/agent/context/execution-context.types.d.ts +4 -2
- package/dist/src/agent/context/execution-scope.d.ts +2 -2
- package/dist/src/agent/context/execution-scope.js +1 -1
- package/dist/src/agent/context/project-context.d.ts +2 -2
- package/dist/src/agent/context/project-context.js +3 -3
- package/dist/src/agent/embedded/run-for-session.d.ts +1 -0
- package/dist/src/agent/embedded/run-for-session.js +7 -1
- package/dist/src/agent/external-tools/composio-provider.js +83 -20
- package/dist/src/agent/external-tools/gateway-tools.js +2 -1
- package/dist/src/agent/inbound/attachment-pipeline.d.ts +2 -0
- package/dist/src/agent/inbound/attachment-pipeline.js +3 -3
- package/dist/src/agent/inbound/inbound-loop.js +1 -0
- package/dist/src/agent/inbound/turn-dispatcher.js +3 -3
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
- package/dist/src/agent/mcp/mcp-stdio-transport.js +5 -2
- package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +1 -1
- package/dist/src/agent/memory/compaction-promotion.js +7 -2
- package/dist/src/agent/memory/create-memory-manager.js +1 -0
- package/dist/src/agent/memory/manager.d.ts +6 -0
- package/dist/src/agent/memory/manager.js +74 -39
- package/dist/src/agent/memory/runtime.d.ts +3 -3
- package/dist/src/agent/memory/runtime.js +11 -4
- package/dist/src/agent/orchestration/agent-orchestrator.js +4 -1
- package/dist/src/agent/prompt/cache-boundary.d.ts +2 -0
- package/dist/src/agent/prompt/cache-boundary.js +10 -1
- package/dist/src/agent/service/build-direct-message-content.d.ts +1 -0
- package/dist/src/agent/service/build-direct-message-content.js +2 -1
- package/dist/src/agent/service/direct-turn-helpers.js +3 -2
- package/dist/src/agent/service/process-direct-streaming.d.ts +3 -1
- package/dist/src/agent/service/process-direct-streaming.js +3 -2
- package/dist/src/agent/service/webchat-tts.d.ts +0 -4
- package/dist/src/agent/service/webchat-tts.js +20 -19
- package/dist/src/agent/tools/factory.js +3 -3
- package/dist/src/agent/tools/knowledge-memory-tool.d.ts +2 -2
- package/dist/src/agent/tools/knowledge-memory-tool.js +7 -7
- package/dist/src/browser/native-messaging-host.js +2 -2
- package/dist/src/channels/attachments/voice-stt-webchat.d.ts +3 -0
- package/dist/src/channels/attachments/voice-stt-webchat.js +22 -9
- package/dist/src/cli/commands/agent.js +2 -0
- package/dist/src/cli/commands/config.js +8 -9
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/extension-marketplace.js +69 -44
- package/dist/src/cli/commands/extension-pack.js +0 -2
- package/dist/src/cli/commands/extension.js +4 -25
- package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
- package/dist/src/cli/commands/onboard/gateway.js +2 -1
- package/dist/src/cli/utils/init-workspace-core.js +5 -2
- package/dist/src/config/index.js +2 -2
- package/dist/src/config/loader.d.ts +1 -0
- package/dist/src/config/loader.js +14 -1
- package/dist/src/config/schema.d.ts +22 -3
- package/dist/src/config/schema.js +13 -3
- package/dist/src/connectors/account-access.d.ts +4 -0
- package/dist/src/connectors/account-access.js +23 -0
- package/dist/src/connectors/approval-resume.d.ts +4 -0
- package/dist/src/connectors/approval-resume.js +23 -0
- package/dist/src/connectors/auth-provider-registry.d.ts +1 -0
- package/dist/src/connectors/auth-provider-registry.js +2 -1
- package/dist/src/connectors/authorization-attempts.d.ts +21 -0
- package/dist/src/connectors/authorization-attempts.js +33 -0
- package/dist/src/connectors/builtin-catalog.js +1 -3
- package/dist/src/connectors/catalog.js +2 -1
- package/dist/src/connectors/china-catalog.d.ts +2 -0
- package/dist/src/connectors/china-catalog.js +430 -0
- package/dist/src/connectors/composio-backends.d.ts +26 -0
- package/dist/src/connectors/composio-backends.js +65 -0
- package/dist/src/connectors/composio-catalog.js +2 -1
- package/dist/src/connectors/composio-managed-client.js +3 -1
- package/dist/src/connectors/composio-managed-events.js +5 -2
- package/dist/src/connectors/composio-session-types.d.ts +2 -0
- package/dist/src/connectors/composio-sessions.d.ts +11 -2
- package/dist/src/connectors/composio-sessions.js +137 -35
- package/dist/src/connectors/composio-triggers.js +4 -2
- package/dist/src/connectors/composio.d.ts +11 -8
- package/dist/src/connectors/composio.js +68 -84
- package/dist/src/connectors/connected-source-ingestion.js +4 -3
- package/dist/src/connectors/connection-recovery-service.js +25 -13
- package/dist/src/connectors/connector-identity.d.ts +2 -0
- package/dist/src/connectors/connector-identity.js +18 -5
- package/dist/src/connectors/content-enrichment.js +1 -1
- package/dist/src/connectors/instances.js +1 -7
- package/dist/src/connectors/learning-coordinator.js +4 -3
- package/dist/src/connectors/materialize.js +14 -1
- package/dist/src/connectors/policy.d.ts +1 -1
- package/dist/src/connectors/policy.js +1 -1
- package/dist/src/connectors/principal.js +24 -3
- package/dist/src/connectors/providers.d.ts +1 -0
- package/dist/src/connectors/providers.js +14 -2
- package/dist/src/connectors/runtime-adapter-registry.js +4 -9
- package/dist/src/connectors/secret-store.d.ts +4 -1
- package/dist/src/connectors/secret-store.js +7 -3
- package/dist/src/connectors/source-change-publisher.js +4 -2
- package/dist/src/connectors/types.d.ts +16 -11
- package/dist/src/connectors/workflow-preflight.d.ts +2 -1
- package/dist/src/connectors/workflow-preflight.js +20 -3
- package/dist/src/execution-environments/local-worktree-manager.js +17 -15
- package/dist/src/execution-environments/store.js +4 -2
- package/dist/src/execution-environments/types.d.ts +3 -0
- package/dist/src/execution-environments/types.js +2 -1
- package/dist/src/execution-environments/worktree-safety.d.ts +8 -0
- package/dist/src/execution-environments/worktree-safety.js +43 -0
- package/dist/src/extensions/activation-planner.d.ts +1 -1
- package/dist/src/extensions/activation-planner.js +1 -1
- package/dist/src/extensions/api-version.d.ts +4 -0
- package/dist/src/extensions/api-version.js +15 -0
- package/dist/src/extensions/api.d.ts +3 -9
- package/dist/src/extensions/api.js +26 -32
- package/dist/src/extensions/config-validation.d.ts +8 -0
- package/dist/src/extensions/config-validation.js +25 -0
- package/dist/src/extensions/extension-registry-impl.d.ts +20 -9
- package/dist/src/extensions/extension-registry-impl.js +79 -11
- package/dist/src/extensions/hooks.d.ts +1 -1
- package/dist/src/extensions/index.d.ts +2 -1
- package/dist/src/extensions/install-transaction.d.ts +2 -0
- package/dist/src/extensions/install-transaction.js +32 -21
- package/dist/src/extensions/install.js +18 -1
- package/dist/src/extensions/loader.d.ts +5 -5
- package/dist/src/extensions/loader.js +109 -47
- package/dist/src/extensions/lockfile.d.ts +3 -5
- package/dist/src/extensions/lockfile.js +41 -14
- package/dist/src/extensions/normalize-manifest.js +6 -60
- package/dist/src/extensions/sdk/index.d.ts +3 -2
- package/dist/src/extensions/sdk/index.js +2 -2
- package/dist/src/extensions/sdk/testing.js +0 -4
- package/dist/src/extensions/security.js +5 -7
- package/dist/src/extensions/types/core.d.ts +0 -5
- package/dist/src/extensions/types/index.d.ts +1 -1
- package/dist/src/extensions/types/manifest.d.ts +1 -25
- package/dist/src/extensions/types/providers.d.ts +1 -1
- package/dist/src/extensions/types/registration.d.ts +0 -12
- package/dist/src/extensions/update.js +71 -30
- package/dist/src/gateway/heartbeat/service.js +2 -2
- package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -1
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +47 -10
- package/dist/src/gateway/hono/routes/connectors.js +208 -17
- package/dist/src/gateway/hono/routes/context-sources.js +1 -1
- package/dist/src/gateway/hono/routes/devices.js +10 -7
- package/dist/src/gateway/hono/routes/endpoint-compatibility.js +6 -0
- package/dist/src/gateway/hono/routes/extension-gateway.js +0 -33
- package/dist/src/gateway/hono/routes/home.js +4 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +0 -1
- package/dist/src/gateway/hono/routes/mcp.js +1 -1
- package/dist/src/gateway/hono/routes/realtime.js +30 -8
- package/dist/src/gateway/hono/routes/user-model.js +25 -6
- package/dist/src/gateway/index.js +4 -1
- package/dist/src/gateway/lock.d.ts +2 -0
- package/dist/src/gateway/lock.js +31 -14
- package/dist/src/gateway/run-loop.js +2 -1
- package/dist/src/gateway/security/gateway-scopes.d.ts +2 -5
- package/dist/src/gateway/security/gateway-scopes.js +3 -45
- package/dist/src/gateway/security/index.js +2 -1
- package/dist/src/gateway/service.js +11 -7
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/imports/importService.d.ts +1 -1
- package/dist/src/imports/inventory.js +16 -2
- package/dist/src/imports/productImport.js +5 -5
- package/dist/src/imports/types.d.ts +3 -3
- package/dist/src/infra/exec.d.ts +2 -2
- package/dist/src/infra/exec.js +32 -27
- package/dist/src/infra/run-command.js +15 -50
- package/dist/src/infra/update-restart.js +1 -1
- package/dist/src/knowledge/connected-knowledge-pipeline.js +13 -3
- package/dist/src/knowledge-memory/domain.d.ts +17 -1
- package/dist/src/knowledge-memory/index.js +2 -2
- package/dist/src/knowledge-memory/repository.d.ts +26 -4
- package/dist/src/knowledge-memory/repository.js +171 -36
- package/dist/src/mcp/channel-bridge.js +7 -3
- package/dist/src/media-understanding/registry.js +6 -1
- package/dist/src/migrations/knowledge-memory-read-policy-config.d.ts +2 -0
- package/dist/src/migrations/knowledge-memory-read-policy-config.js +48 -0
- package/dist/src/migrations/runner.js +2 -1
- package/dist/src/proactive/follow-ups.js +2 -1
- package/dist/src/process/bounded-output.d.ts +10 -0
- package/dist/src/process/bounded-output.js +41 -0
- package/dist/src/process/kill-tree.d.ts +6 -17
- package/dist/src/process/kill-tree.js +43 -75
- package/dist/src/process/process-spec.d.ts +39 -0
- package/dist/src/process/process-spec.js +13 -0
- package/dist/src/process/run-process.d.ts +4 -0
- package/dist/src/process/run-process.js +97 -0
- package/dist/src/providers/plugin-registry.d.ts +1 -1
- package/dist/src/providers/plugin-registry.js +6 -0
- package/dist/src/realtime/runtime.js +3 -1
- package/dist/src/session/store.js +1 -1
- package/dist/src/storage/sqlite/connection-wait-repository.d.ts +3 -0
- package/dist/src/storage/sqlite/connection-wait-repository.js +63 -2
- package/dist/src/storage/sqlite/connector-account-repository.d.ts +6 -0
- package/dist/src/storage/sqlite/connector-account-repository.js +35 -7
- package/dist/src/storage/sqlite/connector-repository.js +15 -10
- package/dist/src/storage/sqlite/connector-sync-policy-repository.js +1 -1
- package/dist/src/storage/sqlite/device-pairing-approval.js +1 -1
- package/dist/src/storage/sqlite/index.d.ts +1 -1
- package/dist/src/storage/sqlite/index.js +6 -4
- package/dist/src/storage/sqlite/migrations/180_execution_environment_ownership.sql +7 -0
- package/dist/src/storage/sqlite/migrations/181_knowledge_item_status_events.sql +12 -0
- package/dist/src/storage/sqlite/migrations/182_connector_account_policies.sql +92 -0
- package/dist/src/storage/sqlite/migrations/183_connector_backend_consistency.sql +20 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +7 -7
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/schema.sql +13 -0
- package/dist/src/storage/sqlite/transcript-repository.d.ts +4 -0
- package/dist/src/storage/sqlite/transcript-repository.js +36 -1
- package/dist/src/tasks/home-query-service.js +3 -3
- package/dist/src/tui/backends/embedded-backend.d.ts +24 -8
- package/dist/src/tui/backends/embedded-backend.js +114 -10
- package/dist/src/tui/backends/gateway-realtime-backend.d.ts +18 -0
- package/dist/src/tui/backends/gateway-realtime-backend.js +31 -4
- package/dist/src/tui/components/assistant-message.d.ts +4 -1
- package/dist/src/tui/components/assistant-message.js +10 -2
- package/dist/src/tui/components/cell-render-mode.d.ts +4 -0
- package/dist/src/tui/components/cell-render-mode.js +1 -0
- package/dist/src/tui/components/chat-log.d.ts +17 -4
- package/dist/src/tui/components/chat-log.js +68 -50
- package/dist/src/tui/components/custom-editor.d.ts +2 -2
- package/dist/src/tui/components/custom-editor.js +5 -1
- package/dist/src/tui/components/pending-input-preview.d.ts +9 -0
- package/dist/src/tui/components/pending-input-preview.js +33 -0
- package/dist/src/tui/components/semantic-cell.d.ts +17 -0
- package/dist/src/tui/components/semantic-cell.js +29 -0
- package/dist/src/tui/components/tool-execution.d.ts +5 -1
- package/dist/src/tui/components/tool-execution.js +33 -10
- package/dist/src/tui/components/transcript-overlay.d.ts +29 -0
- package/dist/src/tui/components/transcript-overlay.js +114 -0
- package/dist/src/tui/components/tui-bottom-bar.js +3 -1
- package/dist/src/tui/components/user-message.d.ts +5 -1
- package/dist/src/tui/components/user-message.js +12 -1
- package/dist/src/tui/extension-host/load-extensions.d.ts +1 -1
- package/dist/src/tui/extension-host/runtime-context.js +2 -1
- package/dist/src/tui/extension-host/runtime.d.ts +1 -1
- package/dist/src/tui/format-tui-hotkeys.js +8 -1
- package/dist/src/tui/tui-agent-events.js +31 -0
- package/dist/src/tui/tui-backend.d.ts +23 -11
- package/dist/src/tui/tui-backend.js +1 -9
- package/dist/src/tui/tui-chat-input-state.d.ts +25 -0
- package/dist/src/tui/tui-chat-input-state.js +36 -0
- package/dist/src/tui/tui-command-formatters.js +2 -1
- package/dist/src/tui/tui-commands.js +1 -1
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/tui/tui-types.d.ts +2 -1
- package/dist/src/tui/tui-types.js +2 -1
- package/dist/src/tui/tui.js +122 -30
- package/dist/src/tui/xopc-tui-keybindings.d.ts +23 -3
- package/dist/src/tui/xopc-tui-keybindings.js +22 -2
- package/dist/src/user-context/access-policy.d.ts +2 -2
- package/dist/src/user-context/access-policy.js +10 -2
- package/dist/src/user-context/config.d.ts +23 -6
- package/dist/src/user-context/config.js +54 -7
- package/dist/src/voice/platform-streams.js +11 -1
- package/dist/src/voice/realtime/omniEngine.js +13 -1
- package/dist/src/voice/realtime/runtime.js +2 -1
- package/dist/src/voice/tts/audio.js +1 -1
- package/dist/src/voice/tts/speech-registry.js +6 -1
- package/dist/src/workflows/domain/definition.d.ts +1 -0
- package/dist/src/workflows/domain/validation.js +1 -1
- package/dist/src/workflows/service/workflow-run-service.js +14 -0
- package/dist/src/workflows/service/workflow-session-bridge.d.ts +1 -0
- package/dist/src/workflows/service/workflow-session-bridge.js +1 -0
- package/package.json +5 -3
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-4oGrNj3m.js +0 -1
- package/dist/gateway/static/root/assets/api-fPapljyb.js +0 -1
- package/dist/gateway/static/root/assets/app-management-settings-panel-CdXnNtTg.js +0 -1
- package/dist/gateway/static/root/assets/appearance-settings-izNAyDhW.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-BQb3RCga.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-5vTl4x0h.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-CH9prS-f.js +0 -3
- package/dist/gateway/static/root/assets/button-CGlRPNzi.js +0 -1
- package/dist/gateway/static/root/assets/capabilities-settings-panel-DMURlZbj.js +0 -8
- package/dist/gateway/static/root/assets/channels-settings-CFBS3Yqy.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-DI1c3BMz.js +0 -2
- package/dist/gateway/static/root/assets/cron-expression-BJMBFKCh.js +0 -2
- package/dist/gateway/static/root/assets/date-picker-BFRIn5y9.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-DFsyEJUr.js +0 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-C3TQVPRy.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-DUqVsB3X.js +0 -1
- package/dist/gateway/static/root/assets/home-page-CLkumXdN.js +0 -1
- package/dist/gateway/static/root/assets/imports-page-DXNfRmk9.js +0 -1
- package/dist/gateway/static/root/assets/index-BLRIcVQa.css +0 -1
- package/dist/gateway/static/root/assets/index-gheM453N.js +0 -79
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-5Hcec8Xf.js +0 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-BDg1-fcw.js +0 -2
- package/dist/gateway/static/root/assets/logs-page-BWZc5jwO.js +0 -2
- package/dist/gateway/static/root/assets/management-settings-COa3PhMs.js +0 -1
- package/dist/gateway/static/root/assets/messages-C9h8SImu.js +0 -3
- package/dist/gateway/static/root/assets/note-detail-panel-D_YGzNcR.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-D1f2oI2-.js +0 -8
- package/dist/gateway/static/root/assets/project-detail-page-CRlD_Rwv.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-mmX0SavY.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-Cqr3K6T5.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-CPkvbdJP.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-Cu0DAbeH.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-D8fQF1jZ.js +0 -1
- package/dist/gateway/static/root/assets/share-preview-page-BgHqwTuT.js +0 -2
- package/dist/gateway/static/root/assets/shares-settings-Id4vRHzI.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-BB2Fj_di.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-BAwF4LpS.js +0 -2
- package/dist/gateway/static/root/assets/task-detail-page-BVjw812D.js +0 -1
- package/dist/gateway/static/root/assets/theme-store-KfFEGMlp.js +0 -1
- package/dist/gateway/static/root/assets/tunnel-api-Do98Xk05.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-Nv68a4ak.js +0 -2
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-1lZ_btki.js +0 -3
- package/dist/gateway/static/root/assets/workflows-page-DFOhccm3.js +0 -6
- package/dist/src/extensions/when-context.d.ts +0 -6
- package/dist/src/extensions/when-context.js +0 -26
- package/dist/src/extensions/when-expression.d.ts +0 -11
- package/dist/src/extensions/when-expression.js +0 -213
|
@@ -12,6 +12,7 @@ export type ComposioToolkitCatalogItem = {
|
|
|
12
12
|
providerConnectionId?: string;
|
|
13
13
|
};
|
|
14
14
|
export type ComposioAuthorizeResult = {
|
|
15
|
+
attemptId: string;
|
|
15
16
|
toolkit: string;
|
|
16
17
|
connectionId: string;
|
|
17
18
|
connectUrl?: string;
|
|
@@ -19,6 +20,7 @@ export type ComposioAuthorizeResult = {
|
|
|
19
20
|
};
|
|
20
21
|
export type { ComposioAuthConfigOption, ComposioSessionLike, ComposioSessionsClient, ComposioToolkitAuthState, } from './composio-session-types.js';
|
|
21
22
|
export type ComposioSessionContext = {
|
|
23
|
+
backendId?: string;
|
|
22
24
|
principalId: string;
|
|
23
25
|
installationScope?: string;
|
|
24
26
|
providerPrincipalId?: string;
|
|
@@ -27,15 +29,18 @@ export type ComposioSessionContext = {
|
|
|
27
29
|
connectedAccounts?: Record<string, string[]>;
|
|
28
30
|
callbackUrl?: string;
|
|
29
31
|
};
|
|
30
|
-
type ClientFactory = () => Promise<ComposioSessionsClient>;
|
|
32
|
+
type ClientFactory = (backendId?: string) => Promise<ComposioSessionsClient>;
|
|
31
33
|
/** Convert local identities to stable opaque Composio user IDs without disclosing user data. */
|
|
32
34
|
export declare function createComposioPrincipalId(principalId: string, installationScope?: string): string;
|
|
33
35
|
export declare class ComposioSessionsAdapter {
|
|
34
36
|
private readonly createClient;
|
|
37
|
+
private readonly injectedClient;
|
|
38
|
+
private readonly resolver;
|
|
35
39
|
constructor(options?: {
|
|
36
40
|
resolver?: CredentialResolver;
|
|
37
41
|
clientFactory?: ClientFactory;
|
|
38
42
|
fileDownloadDir?: string;
|
|
43
|
+
apiKey?: string;
|
|
39
44
|
});
|
|
40
45
|
createSession(context: ComposioSessionContext): Promise<ComposioSessionLike>;
|
|
41
46
|
getToolkitAuthState(toolkit: string): Promise<ComposioToolkitAuthState>;
|
|
@@ -45,8 +50,12 @@ export declare class ComposioSessionsAdapter {
|
|
|
45
50
|
authConfigId?: string;
|
|
46
51
|
installationId?: string;
|
|
47
52
|
alias?: string;
|
|
53
|
+
expectedAccountId?: string;
|
|
48
54
|
}): Promise<ComposioAuthorizeResult>;
|
|
49
|
-
|
|
55
|
+
/** Verify a replacement credential without changing local authorizations. */
|
|
56
|
+
verifyConnections(connections: ConnectorConnection[]): Promise<void>;
|
|
57
|
+
private listAllAccounts;
|
|
58
|
+
syncConnections(context: Pick<ComposioSessionContext, 'principalId' | 'installationScope' | 'backendId'>): Promise<ConnectorConnection[]>;
|
|
50
59
|
revokeConnection(connection: ConnectorConnection): Promise<void>;
|
|
51
60
|
refreshConnection(connection: ConnectorConnection): Promise<ConnectorConnection>;
|
|
52
61
|
executeWithPolicy(input: {
|
|
@@ -1,32 +1,39 @@
|
|
|
1
|
-
import { init_paths_state, resolveStateDir } from "../config/paths-state.js";
|
|
2
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
3
2
|
import { init_logger } from "../utils/logger.js";
|
|
4
|
-
import {
|
|
5
|
-
import { reconcileConnectorAccount } from "../storage/sqlite/connector-account-repository.js";
|
|
3
|
+
import { getSqliteDatabase, init_transaction } from "../storage/sqlite/transaction.js";
|
|
4
|
+
import { getConnectorAccount, init_connector_account_repository, reconcileConnectorAccount } from "../storage/sqlite/connector-account-repository.js";
|
|
5
|
+
import { appendConnectorExecutionAudit, getConnectorConnection, getConnectorInstallation, init_connector_repository, listConnectorConnections, upsertConnectorConnection } from "../storage/sqlite/connector-repository.js";
|
|
6
6
|
import { CredentialResolver, init_credentials } from "../auth/credentials.js";
|
|
7
|
+
import { ensureComposioBackend, getComposioBackend, listComposioBackends, resolveBackendKey } from "./composio-backends.js";
|
|
8
|
+
import { saveAuthorizationAttempt } from "./authorization-attempts.js";
|
|
7
9
|
import { connectorIdentityKey, mergeConnectorIdentity } from "./connector-identity.js";
|
|
8
10
|
import { evaluateConnectorExecutionPolicy } from "./policy.js";
|
|
9
|
-
import {
|
|
11
|
+
import { canAccessConnectorAccount } from "./account-access.js";
|
|
10
12
|
import { createHash } from "node:crypto";
|
|
11
13
|
//#region src/connectors/composio-sessions.ts
|
|
12
14
|
init_credentials();
|
|
13
|
-
|
|
15
|
+
init_transaction();
|
|
16
|
+
init_connector_account_repository();
|
|
17
|
+
init_connector_repository();
|
|
14
18
|
init_logger();
|
|
15
19
|
const log = createLogger("Connectors:ComposioSessions");
|
|
16
|
-
const COMPOSIO_API_KEY_PROVIDER = "connector-composio-api-key";
|
|
17
20
|
async function resolveComposioApiKey(resolver = new CredentialResolver()) {
|
|
18
|
-
return (await resolver
|
|
21
|
+
return resolveBackendKey(await ensureComposioBackend(resolver), resolver);
|
|
19
22
|
}
|
|
20
23
|
async function assertComposioAccessConfigured(resolver = new CredentialResolver()) {
|
|
21
|
-
|
|
24
|
+
const backend = await ensureComposioBackend(resolver);
|
|
25
|
+
if (backend.mode === "byok") {
|
|
26
|
+
if (await resolveBackendKey(backend, resolver)) return "byok";
|
|
27
|
+
throw new Error("This Composio project needs its API key. Open connection service settings.");
|
|
28
|
+
}
|
|
22
29
|
if ((await resolver.resolveApiKey("xopc-cloud").catch(() => null))?.trim()) return "managed";
|
|
23
|
-
throw new Error("Composio API key is not configured and XOPC Cloud is not signed in.
|
|
30
|
+
throw new Error("Composio API key is not configured and XOPC Cloud is not signed in. Open connection service settings or sign in to XOPC Cloud.");
|
|
24
31
|
}
|
|
25
32
|
function stableHash(value) {
|
|
26
33
|
return createHash("sha256").update(value).digest("hex").slice(0, 24);
|
|
27
34
|
}
|
|
28
35
|
function defaultInstallationScope() {
|
|
29
|
-
return
|
|
36
|
+
return getSqliteDatabase().prepare("SELECT installation_id FROM connector_runtime_identity WHERE id = 1").get().installation_id;
|
|
30
37
|
}
|
|
31
38
|
/** Convert local identities to stable opaque Composio user IDs without disclosing user data. */
|
|
32
39
|
function createComposioPrincipalId(principalId, installationScope = defaultInstallationScope()) {
|
|
@@ -84,17 +91,26 @@ function missingAuthConfigMessage(error, toolkit, authConfigId) {
|
|
|
84
91
|
}
|
|
85
92
|
var ComposioSessionsAdapter = class {
|
|
86
93
|
createClient;
|
|
94
|
+
injectedClient;
|
|
95
|
+
resolver;
|
|
87
96
|
constructor(options = {}) {
|
|
97
|
+
this.resolver = options.resolver ?? new CredentialResolver();
|
|
98
|
+
this.injectedClient = Boolean(options.clientFactory || options.apiKey);
|
|
88
99
|
if (options.clientFactory) {
|
|
89
100
|
this.createClient = options.clientFactory;
|
|
90
101
|
return;
|
|
91
102
|
}
|
|
92
|
-
const resolver =
|
|
93
|
-
this.createClient = async () => {
|
|
94
|
-
const
|
|
95
|
-
if (!
|
|
103
|
+
const resolver = this.resolver;
|
|
104
|
+
this.createClient = async (backendId) => {
|
|
105
|
+
const backend = options.apiKey ? void 0 : backendId ? getComposioBackend(backendId) : await ensureComposioBackend(resolver);
|
|
106
|
+
if (backendId && !backend) throw new Error("Connection service is unavailable.");
|
|
107
|
+
const apiKey = options.apiKey ?? (backend ? await resolveBackendKey(backend, resolver) : null);
|
|
108
|
+
if (backend?.mode === "byok" && !apiKey) throw new Error("This Composio project needs its API key.");
|
|
109
|
+
if (backend?.mode === "managed") {
|
|
96
110
|
const { ManagedComposioClient } = await import("./composio-managed-client.js");
|
|
97
|
-
|
|
111
|
+
const client = new ManagedComposioClient();
|
|
112
|
+
client.backendId = backend.id;
|
|
113
|
+
return client;
|
|
98
114
|
}
|
|
99
115
|
let Composio;
|
|
100
116
|
try {
|
|
@@ -112,11 +128,12 @@ var ComposioSessionsAdapter = class {
|
|
|
112
128
|
host: "xopc"
|
|
113
129
|
});
|
|
114
130
|
client.mode = "byok";
|
|
131
|
+
client.backendId = backend?.id;
|
|
115
132
|
return client;
|
|
116
133
|
};
|
|
117
134
|
}
|
|
118
135
|
async createSession(context) {
|
|
119
|
-
const client = await this.createClient();
|
|
136
|
+
const client = await this.createClient(context.backendId);
|
|
120
137
|
const config = {
|
|
121
138
|
manageConnections: {
|
|
122
139
|
enable: true,
|
|
@@ -183,11 +200,13 @@ var ComposioSessionsAdapter = class {
|
|
|
183
200
|
return items;
|
|
184
201
|
}
|
|
185
202
|
async authorize(context) {
|
|
203
|
+
const backendId = (await this.createClient(context.backendId)).backendId;
|
|
186
204
|
const providerPrincipalId = createComposioPrincipalId(context.principalId, context.installationScope);
|
|
187
205
|
let session;
|
|
188
206
|
try {
|
|
189
207
|
session = await this.createSession({
|
|
190
208
|
...context,
|
|
209
|
+
backendId,
|
|
191
210
|
providerPrincipalId,
|
|
192
211
|
toolkits: [context.toolkit],
|
|
193
212
|
...context.authConfigId ? { authConfigs: { [context.toolkit]: context.authConfigId } } : {}
|
|
@@ -202,8 +221,8 @@ var ComposioSessionsAdapter = class {
|
|
|
202
221
|
alias: context.alias
|
|
203
222
|
});
|
|
204
223
|
const connectorId = `composio-${context.toolkit}`;
|
|
205
|
-
upsertConnectorConnection({
|
|
206
|
-
id: `composio-${request.id}`,
|
|
224
|
+
const pending = upsertConnectorConnection({
|
|
225
|
+
id: `composio-${backendId ? `${backendId}-` : ""}${request.id}`,
|
|
207
226
|
installationId: context.installationId && getConnectorInstallation(context.installationId) ? context.installationId : void 0,
|
|
208
227
|
connectorId,
|
|
209
228
|
provider: "composio",
|
|
@@ -212,29 +231,74 @@ var ComposioSessionsAdapter = class {
|
|
|
212
231
|
alias: context.alias,
|
|
213
232
|
identity: {},
|
|
214
233
|
status: connectionStatus(request.status),
|
|
215
|
-
isDefault:
|
|
216
|
-
principalId: context.principalId,
|
|
217
|
-
connectorId
|
|
218
|
-
}).length === 0,
|
|
234
|
+
isDefault: false,
|
|
219
235
|
metadata: {
|
|
220
236
|
toolkit: context.toolkit,
|
|
221
237
|
providerPrincipalId,
|
|
222
|
-
...context.authConfigId ? { authConfigId: context.authConfigId } : {}
|
|
238
|
+
...context.authConfigId ? { authConfigId: context.authConfigId } : {},
|
|
239
|
+
...backendId ? { backendId } : {}
|
|
223
240
|
}
|
|
224
241
|
});
|
|
242
|
+
if (backendId && pending.accountId) getSqliteDatabase().prepare("UPDATE connector_accounts SET backend_id = ? WHERE id = ?").run(backendId, pending.accountId);
|
|
225
243
|
return {
|
|
244
|
+
attemptId: saveAuthorizationAttempt({
|
|
245
|
+
connectionId: pending.id,
|
|
246
|
+
principalId: context.principalId,
|
|
247
|
+
connectorId,
|
|
248
|
+
backendId,
|
|
249
|
+
expectedAccountId: context.expectedAccountId,
|
|
250
|
+
url: request.redirectUrl ?? void 0
|
|
251
|
+
}),
|
|
226
252
|
toolkit: context.toolkit,
|
|
227
253
|
connectionId: request.id,
|
|
228
254
|
connectUrl: request.redirectUrl ?? void 0,
|
|
229
255
|
status: request.status
|
|
230
256
|
};
|
|
231
257
|
}
|
|
232
|
-
|
|
258
|
+
/** Verify a replacement credential without changing local authorizations. */
|
|
259
|
+
async verifyConnections(connections) {
|
|
233
260
|
const client = await this.createClient();
|
|
261
|
+
const users = [...new Set(connections.map((connection) => connection.metadata.providerPrincipalId))];
|
|
262
|
+
for (const userId of users) {
|
|
263
|
+
if (typeof userId !== "string" || !userId) throw new Error("Refresh existing account identities before replacing this key.");
|
|
264
|
+
const rows = await this.listAllAccounts(client, [userId]);
|
|
265
|
+
const ids = new Set(rows.flatMap((row) => row && typeof row === "object" ? [readString(row, ["id", "connected_account_id"])] : []));
|
|
266
|
+
if (connections.some((connection) => connection.metadata.providerPrincipalId === userId && !ids.has(connection.providerConnectionId))) throw new Error("This key cannot access the existing accounts. Add it as a new project instead.");
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
async listAllAccounts(client, userIds) {
|
|
270
|
+
const rows = [];
|
|
271
|
+
const cursors = /* @__PURE__ */ new Set();
|
|
272
|
+
let cursor;
|
|
273
|
+
do {
|
|
274
|
+
const payload = await client.connectedAccounts.list({
|
|
275
|
+
userIds,
|
|
276
|
+
...cursor ? { cursor } : {}
|
|
277
|
+
});
|
|
278
|
+
rows.push(...readArray(payload));
|
|
279
|
+
cursor = payload && typeof payload === "object" ? readString(payload, ["nextCursor", "next_cursor"]) : void 0;
|
|
280
|
+
if (cursor && (cursors.has(cursor) || cursors.size >= 100)) throw new Error("Unable to retrieve the complete connected account list. Retry syncing.");
|
|
281
|
+
if (cursor) cursors.add(cursor);
|
|
282
|
+
} while (cursor);
|
|
283
|
+
return rows;
|
|
284
|
+
}
|
|
285
|
+
async syncConnections(context) {
|
|
286
|
+
if (!this.injectedClient && !context.backendId) {
|
|
287
|
+
await ensureComposioBackend(this.resolver);
|
|
288
|
+
const results = await Promise.allSettled(listComposioBackends().map((backend) => this.syncConnections({
|
|
289
|
+
...context,
|
|
290
|
+
backendId: backend.id
|
|
291
|
+
})));
|
|
292
|
+
if (results.every((result) => result.status === "rejected")) throw results[0].reason;
|
|
293
|
+
return results.flatMap((result) => result.status === "fulfilled" ? result.value : []);
|
|
294
|
+
}
|
|
295
|
+
const client = await this.createClient(context.backendId);
|
|
234
296
|
const providerPrincipalId = createComposioPrincipalId(context.principalId, context.installationScope);
|
|
235
|
-
const
|
|
297
|
+
const stored = listConnectorConnections({ principalId: context.principalId }).filter((connection) => (connection.metadata.backendId ?? getConnectorAccount(connection.accountId)?.backendId) === client.backendId);
|
|
298
|
+
const userIds = [...new Set([providerPrincipalId, ...stored.flatMap((connection) => typeof connection.metadata.providerPrincipalId === "string" ? [connection.metadata.providerPrincipalId] : [])])];
|
|
299
|
+
const rows = await this.listAllAccounts(client, userIds);
|
|
236
300
|
const synced = [];
|
|
237
|
-
for (const item of
|
|
301
|
+
for (const item of rows) {
|
|
238
302
|
if (!item || typeof item !== "object" || Array.isArray(item)) continue;
|
|
239
303
|
const row = item;
|
|
240
304
|
const toolkitRecord = row.toolkit && typeof row.toolkit === "object" && !Array.isArray(row.toolkit) ? row.toolkit : {};
|
|
@@ -250,10 +314,10 @@ var ComposioSessionsAdapter = class {
|
|
|
250
314
|
const existing = listConnectorConnections({
|
|
251
315
|
principalId: context.principalId,
|
|
252
316
|
connectorId
|
|
253
|
-
}).find((connection) => connection.providerConnectionId === providerConnectionId);
|
|
317
|
+
}).find((connection) => connection.providerConnectionId === providerConnectionId && (connection.metadata.backendId ?? getConnectorAccount(connection.accountId)?.backendId) === client.backendId);
|
|
254
318
|
const identity = row.connectionData && typeof row.connectionData === "object" && !Array.isArray(row.connectionData) ? row.connectionData : {};
|
|
255
319
|
const connection = upsertConnectorConnection({
|
|
256
|
-
id: existing?.id ?? `composio-${providerConnectionId}`,
|
|
320
|
+
id: existing?.id ?? `composio-${client.backendId ? `${client.backendId}-` : ""}${providerConnectionId}`,
|
|
257
321
|
accountId: existing?.accountId,
|
|
258
322
|
installationId: existing?.installationId,
|
|
259
323
|
connectorId,
|
|
@@ -269,12 +333,37 @@ var ComposioSessionsAdapter = class {
|
|
|
269
333
|
metadata: {
|
|
270
334
|
...existing?.metadata,
|
|
271
335
|
toolkit,
|
|
272
|
-
providerPrincipalId
|
|
336
|
+
providerPrincipalId: existing?.metadata.providerPrincipalId ?? readString(row, ["userId", "user_id"]) ?? providerPrincipalId,
|
|
337
|
+
...client.backendId ? { backendId: client.backendId } : {}
|
|
273
338
|
}
|
|
274
339
|
});
|
|
275
|
-
|
|
340
|
+
if (client.backendId && connection.accountId && !connectorIdentityKey(toolkit, connection.identity)) getSqliteDatabase().prepare("UPDATE connector_accounts SET backend_id = ? WHERE id = ?").run(client.backendId, connection.accountId);
|
|
341
|
+
let identityKey = connectorIdentityKey(toolkit, connection.identity);
|
|
342
|
+
const probe = {
|
|
343
|
+
gmail: "GMAIL_GET_PROFILE",
|
|
344
|
+
googledrive: "GOOGLEDRIVE_GET_ABOUT",
|
|
345
|
+
github: "GITHUB_GET_THE_AUTHENTICATED_USER",
|
|
346
|
+
slack: "SLACK_TEST_AUTH"
|
|
347
|
+
}[toolkit];
|
|
348
|
+
if (!identityKey && probe && connection.status === "active" && Date.now() - Number(connection.metadata.identityCheckedAt ?? 0) > 3e5) {
|
|
349
|
+
try {
|
|
350
|
+
const profile = await (await this.createSession({
|
|
351
|
+
...context,
|
|
352
|
+
backendId: client.backendId,
|
|
353
|
+
toolkits: [toolkit],
|
|
354
|
+
authConfigs: typeof connection.metadata.authConfigId === "string" ? { [toolkit]: connection.metadata.authConfigId } : void 0,
|
|
355
|
+
providerPrincipalId: String(connection.metadata.providerPrincipalId),
|
|
356
|
+
connectedAccounts: { [toolkit]: [providerConnectionId] }
|
|
357
|
+
})).execute(probe, {}, { account: providerConnectionId });
|
|
358
|
+
connection.identity = mergeConnectorIdentity(toolkit, connection.identity, profile && typeof profile === "object" ? profile : {});
|
|
359
|
+
identityKey = connectorIdentityKey(toolkit, connection.identity);
|
|
360
|
+
} catch {}
|
|
361
|
+
connection.metadata.identityCheckedAt = Date.now();
|
|
362
|
+
upsertConnectorConnection(connection);
|
|
363
|
+
}
|
|
276
364
|
if (identityKey) reconcileConnectorAccount({
|
|
277
365
|
connectionId: connection.id,
|
|
366
|
+
backendId: client.backendId,
|
|
278
367
|
identityKey,
|
|
279
368
|
identity: connection.identity
|
|
280
369
|
});
|
|
@@ -283,7 +372,9 @@ var ComposioSessionsAdapter = class {
|
|
|
283
372
|
return synced;
|
|
284
373
|
}
|
|
285
374
|
async revokeConnection(connection) {
|
|
286
|
-
|
|
375
|
+
const backendId = getConnectorAccount(connection.accountId)?.backendId;
|
|
376
|
+
if (!this.injectedClient && !backendId) throw new Error("Refresh account status to verify its connection service first.");
|
|
377
|
+
await (await this.createClient(backendId)).connectedAccounts.delete(connection.providerConnectionId);
|
|
287
378
|
upsertConnectorConnection({
|
|
288
379
|
...connection,
|
|
289
380
|
status: "revoked",
|
|
@@ -292,16 +383,25 @@ var ComposioSessionsAdapter = class {
|
|
|
292
383
|
});
|
|
293
384
|
}
|
|
294
385
|
async refreshConnection(connection) {
|
|
295
|
-
|
|
296
|
-
|
|
386
|
+
const backendId = getConnectorAccount(connection.accountId)?.backendId;
|
|
387
|
+
if (!this.injectedClient && !backendId) throw new Error("Refresh account status to verify its connection service first.");
|
|
388
|
+
await (await this.createClient(backendId)).connectedAccounts.refresh(connection.providerConnectionId);
|
|
389
|
+
const synced = await this.syncConnections({
|
|
390
|
+
principalId: connection.principalId,
|
|
391
|
+
backendId
|
|
392
|
+
});
|
|
297
393
|
return synced.find((candidate) => candidate.id === connection.id) ?? synced.find((candidate) => candidate.providerConnectionId === connection.providerConnectionId) ?? connection;
|
|
298
394
|
}
|
|
299
395
|
async executeWithPolicy(input) {
|
|
396
|
+
if (!input.connection || input.connection.status !== "active" || !canAccessConnectorAccount(input.connection, input.installation, input.agentId)) return {
|
|
397
|
+
decision: "denied",
|
|
398
|
+
reason: "Account is unavailable to this agent."
|
|
399
|
+
};
|
|
300
400
|
const evaluation = evaluateConnectorExecutionPolicy({
|
|
301
401
|
installation: input.installation,
|
|
302
402
|
action: input.action,
|
|
303
403
|
agentId: input.agentId,
|
|
304
|
-
|
|
404
|
+
accountId: input.connection?.accountId,
|
|
305
405
|
confirmed: input.confirmed
|
|
306
406
|
});
|
|
307
407
|
if (evaluation.decision !== "allowed") {
|
|
@@ -324,6 +424,7 @@ var ComposioSessionsAdapter = class {
|
|
|
324
424
|
}
|
|
325
425
|
const startedAt = Date.now();
|
|
326
426
|
try {
|
|
427
|
+
if (!this.injectedClient && input.connection && !getConnectorAccount(input.connection.accountId)?.backendId) throw new Error("The account connection service has not been verified. Refresh account status first.");
|
|
327
428
|
const toolkit = input.action.toolkit;
|
|
328
429
|
const connectedAccounts = toolkit && input.connection ? { [toolkit]: [input.connection.providerConnectionId] } : input.context.connectedAccounts;
|
|
329
430
|
const providerPrincipalId = input.connection?.metadata.providerPrincipalId;
|
|
@@ -331,8 +432,9 @@ var ComposioSessionsAdapter = class {
|
|
|
331
432
|
if (input.connection && (typeof providerPrincipalId !== "string" || !providerPrincipalId.trim())) throw new Error("Connected account is missing its provider identity. Reconnect the account and try again.");
|
|
332
433
|
const result = await (await this.createSession({
|
|
333
434
|
...input.context,
|
|
435
|
+
backendId: input.connection?.accountId ? getConnectorAccount(input.connection.accountId)?.backendId : input.context.backendId,
|
|
334
436
|
connectedAccounts,
|
|
335
|
-
...toolkit && typeof connectionAuthConfigId === "string" && connectionAuthConfigId.trim() ? { authConfigs: { [toolkit]: connectionAuthConfigId.trim() } } : {},
|
|
437
|
+
...toolkit && typeof connectionAuthConfigId === "string" && connectionAuthConfigId.trim() ? { authConfigs: { [toolkit]: connectionAuthConfigId.trim() } } : { authConfigs: void 0 },
|
|
336
438
|
...typeof providerPrincipalId === "string" ? { providerPrincipalId } : {}
|
|
337
439
|
})).execute(input.action.actionId, input.args ?? {}, input.connection ? { account: input.connection.providerConnectionId } : void 0);
|
|
338
440
|
appendConnectorExecutionAudit({
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { listConnectorConnections, upsertConnectorConnection } from "../storage/sqlite/connector-repository.js";
|
|
1
|
+
import { init_connector_repository, listConnectorConnections, upsertConnectorConnection } from "../storage/sqlite/connector-repository.js";
|
|
2
2
|
import { DurableState } from "../storage/sqlite/durable-state.js";
|
|
3
3
|
import crypto, { createHmac, timingSafeEqual } from "node:crypto";
|
|
4
4
|
//#region src/connectors/composio-triggers.ts
|
|
5
|
+
init_connector_repository();
|
|
5
6
|
function readString(value) {
|
|
6
7
|
return typeof value === "string" && value.trim() ? value.trim() : void 0;
|
|
7
8
|
}
|
|
@@ -35,7 +36,8 @@ function applyComposioConnectionLifecycleEvent(payload) {
|
|
|
35
36
|
if (normalized.type !== "composio.connected_account.expired" && normalized.type !== "composio.connected_account.deleted") return void 0;
|
|
36
37
|
const providerConnectionId = readString(normalized.data.id ?? normalized.data.nanoid ?? normalized.data.connected_account_id);
|
|
37
38
|
if (!providerConnectionId) return void 0;
|
|
38
|
-
const
|
|
39
|
+
const candidates = listConnectorConnections().filter((candidate) => candidate.provider === "composio" && candidate.providerConnectionId === providerConnectionId);
|
|
40
|
+
const connection = candidates.length === 1 ? candidates[0] : void 0;
|
|
39
41
|
if (!connection) return void 0;
|
|
40
42
|
upsertConnectorConnection({
|
|
41
43
|
...connection,
|
|
@@ -3,13 +3,16 @@ import type { Config } from '../config/schema.js';
|
|
|
3
3
|
import { type ComposioToolkitAuthState } from './composio-sessions.js';
|
|
4
4
|
import type { ConnectorConfirmationPolicy, ConnectorDefinition, ConnectorInstallationPolicy } from './types.js';
|
|
5
5
|
export type ComposioConnection = {
|
|
6
|
+
supportsLearning: boolean;
|
|
7
|
+
backendLabel?: string;
|
|
6
8
|
id: string;
|
|
7
9
|
accountId?: string;
|
|
10
|
+
accountEnabled: boolean;
|
|
11
|
+
allowedAgentIds: string[] | null;
|
|
8
12
|
providerConnectionId: string;
|
|
9
13
|
toolkit: string;
|
|
10
14
|
status: string;
|
|
11
15
|
alias?: string;
|
|
12
|
-
isDefault: boolean;
|
|
13
16
|
isCurrentAuthorization: boolean;
|
|
14
17
|
accountEmail?: string;
|
|
15
18
|
workspace?: string;
|
|
@@ -60,22 +63,20 @@ export declare function canUseComposioAction(config: Config | undefined, slug: s
|
|
|
60
63
|
scope: ComposioScope;
|
|
61
64
|
};
|
|
62
65
|
export declare const COMPOSIO_CONNECTORS: readonly ConnectorDefinition[];
|
|
63
|
-
export declare function
|
|
64
|
-
secrets?: Record<string, unknown>;
|
|
65
|
-
}, resolver?: CredentialResolver): Promise<void>;
|
|
66
|
-
export declare function configureComposioApiKey(apiKey: string, resolver?: CredentialResolver): Promise<void>;
|
|
66
|
+
export declare function configureComposioApiKey(apiKey: string, resolver?: CredentialResolver, replaceBackendId?: string): Promise<void>;
|
|
67
67
|
export declare function listComposioConnections(resolver?: CredentialResolver): Promise<ComposioConnection[]>;
|
|
68
68
|
export declare function inspectComposioConnectorHealth(toolkit: string, resolver?: CredentialResolver): Promise<ComposioConnectorHealth>;
|
|
69
|
-
export declare function getComposioToolkitAuthState(toolkit: string, resolver?: CredentialResolver): Promise<ComposioToolkitAuthState
|
|
69
|
+
export declare function getComposioToolkitAuthState(toolkit: string, resolver?: CredentialResolver): Promise<ComposioToolkitAuthState & {
|
|
70
|
+
mode: 'managed' | 'byok';
|
|
71
|
+
}>;
|
|
70
72
|
export declare function getComposioInstallationPolicy(config: Config | undefined, toolkit: string): ConnectorInstallationPolicy;
|
|
71
73
|
export declare function updateComposioInstallationPolicy(config: Config | undefined, toolkit: string, patch: {
|
|
72
74
|
allowedAgentIds?: string[];
|
|
73
75
|
confirmationPolicy?: ConnectorConfirmationPolicy;
|
|
74
|
-
|
|
76
|
+
selectedAccountIds?: string[] | null;
|
|
75
77
|
}): ConnectorInstallationPolicy;
|
|
76
78
|
export declare function updateComposioConnection(id: string, patch: {
|
|
77
79
|
alias?: string;
|
|
78
|
-
isDefault?: boolean;
|
|
79
80
|
}): ComposioConnection;
|
|
80
81
|
export declare function refreshComposioConnection(id: string, resolver?: CredentialResolver): Promise<void>;
|
|
81
82
|
export declare function revokeComposioConnection(id: string, resolver?: CredentialResolver): Promise<void>;
|
|
@@ -83,10 +84,12 @@ export declare function startComposioAuthorize(connectorId: string, toolkit: str
|
|
|
83
84
|
toolkit: string;
|
|
84
85
|
connectUrl: string;
|
|
85
86
|
connectionId?: string;
|
|
87
|
+
attemptId: string;
|
|
86
88
|
}>;
|
|
87
89
|
export declare function listComposioTools(toolkit: string, config?: Config, resolver?: CredentialResolver): Promise<ComposioTool[]>;
|
|
88
90
|
export declare function executeComposioTool(params: {
|
|
89
91
|
slug: string;
|
|
92
|
+
accountId?: string;
|
|
90
93
|
arguments?: unknown;
|
|
91
94
|
config?: Config;
|
|
92
95
|
}, resolver?: CredentialResolver): Promise<unknown>;
|