@xopcai/xopc 0.0.208 → 0.0.211
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/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-D0mYZqhc.js → activity-store-BzjFoSr0.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-MWLQWL_i.js → agent-avatar-dicebear-DTfjhfVE.js} +1 -1
- package/dist/gateway/static/root/assets/agents-CjhgfuVJ.js +68 -0
- package/dist/gateway/static/root/assets/{api-DZA1yVzM.js → api-D269PnU9.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-B2X6quAF.js → app-management-settings-panel-BFpfQDWc.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-BZW-c38q.js → appearance-settings-DLxFdqhY.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-CjmlGB5V.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-CK-gsjsJ.js → archive-plugin-DPlH4dnc.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-EJGP4rCw.js → attachment-load-xqfLLd0I.js} +1 -1
- package/dist/gateway/static/root/assets/automations-page-4m6Ey6wG.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-Tbss_4P-.js → binary-plugins-C0tuoPXk.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-C-dOWigw.js → block-editor-Deyphj1o.js} +6 -6
- package/dist/gateway/static/root/assets/browser-settings-page-CAGCYx8U.js +8 -0
- package/dist/gateway/static/root/assets/{browser-workflow-inputs-DW06Zo1N.js → browser-workflow-inputs-CYEbXyRF.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-workflows-page-B6RnRGwm.js → browser-workflows-page-Bf0tPbGi.js} +2 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-CKfLsxTI.js +7 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-Cc3BtQar.js → capability-presets-api-DPkFA_-R.js} +1 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-CpipKNqX.js +3 -0
- package/dist/gateway/static/root/assets/{channel-recipient-api-BvZO5FaO.js → channel-recipient-api-DqKaAcnZ.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-Bvq-O4pt.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-CrMld2l7.js +1 -0
- package/dist/gateway/static/root/assets/chat-terminal-dock-CTDRZa7e.js +36 -0
- package/dist/gateway/static/root/assets/{connectors-api-CUl6_EQJ.js → connectors-api-Buu8fif8.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-CSQRzaVn.js +2 -0
- package/dist/gateway/static/root/assets/{cron-expression-BD9MgoE_.js → cron-expression-DTLR82NB.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-ChqNmoxw.js → date-picker-DyNogHQH.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-CDUmFs6H.js → dependency-picker-BpnCuo7B.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-D61gqxaD.js → desktop-pet-CDKI4gVB.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-QvuJvIX_.js → desktop-pet-settings-DjT5C2a3.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-DvXMvDNY.js → directory-picker-path-field-DlJY90TM.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-DMdVTAQ3.js → extension-debug-page-DWf2z7q5.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-BNzxZtaK.js → extension-page-Dorx0kf9.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DoEfyizU.js → extension-settings-page-B1wU9ZOB.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-o7AKvthC.js → gateway-config-api-B1lG4dNr.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-BQbkUP5X.js → gateway-config-swr-BIxuwPQi.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-TO5YYZ9a.js → gateway-settings-DqIOqJjM.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-DIgdpHgk.js → gateway-startup-retry-BpZgd4U-.js} +1 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-DG4Kmgkc.js +1 -0
- package/dist/gateway/static/root/assets/home-page-BhqItS_s.js +1 -0
- package/dist/gateway/static/root/assets/image-generation-api-PkhYohDa.js +1 -0
- package/dist/gateway/static/root/assets/index-DLhvsU9B.css +2 -0
- package/dist/gateway/static/root/assets/index-_cuTcWjB.js +107 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-4xaM3jjU.js → keyboard-shortcuts-settings-6OQT3gQF.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-DWjTmzxw.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-C1xDicdr.js → local-apps-page-DfruRAmE.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-pByvK12G.js → locale-store-C5MK9WcP.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-BA5efZ8B.js +2 -0
- package/dist/gateway/static/root/assets/{management-settings-D1XdHm7v.js → management-settings-L1VYkywO.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-split-B_Ijq1Fr.js → markdown-split-oqgHbqt-.js} +1 -1
- package/dist/gateway/static/root/assets/markdown-view-DD_PgVue.css +1 -0
- package/dist/gateway/static/root/assets/{markdown-view-CyJlGUxB.js → markdown-view-V4rcPPH0.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-CXXNRROJ.js → media-plugins-Bb6gSX2o.js} +1 -1
- package/dist/gateway/static/root/assets/messages-ctG2e-ix.js +3 -0
- package/dist/gateway/static/root/assets/{notes-page-rkePB4CB.js → notes-page-B1rOXjpT.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-CkHXVmKP.js +4 -0
- package/dist/gateway/static/root/assets/{page-tabs-gw-RMQCV.js → page-tabs-CBuCKeyy.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-B8aMScJ2.js → preview-open-alternatives-BQ0tLfPO.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-CjcpkWAz.js → product-open-page-DPeFn7Hu.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-DCqet9-L.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-D0t_AjzG.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-BUWPoBvw.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-Ch5qq86o.js → runtime-tools-settings-panel-BCfQNzjG.js} +2 -2
- package/dist/gateway/static/root/assets/{schema-form-DHYWYUFt.js → schema-form-Bo7YbHYN.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-vLhrrM3m.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-OP1y0Y8M.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-DlzZx0-i.js → settings-form-section-B9dnKr3M.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-BVLhreQi.js → settings-loading-skeleton-CYDV2JtY.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-BJU-kUnN.js → settings-page-DbrIYfS9.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-Cxc-Ejl5.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-hvIuZXMe.js → share-preview-page-olgr7LLN.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-ZOqC6-aA.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-DwvC3Iuf.js +1 -0
- package/dist/gateway/static/root/assets/{skills-page-Dlvuh7D-.js → skills-page-PE16CNw5.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page.utils-B6ddOpnf.js → skills-page.utils-nXmBcBxt.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-BdbCAyoA.js → system-settings-panel-C3qPwAdY.js} +1 -1
- package/dist/gateway/static/root/assets/task-detail-page-DCRB-5q-.js +1 -0
- package/dist/gateway/static/root/assets/{theme-store-BtdGacMI.js → theme-store-KR5Otp5w.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-CL6qHYJA.js → typed-models-lib-lMZodtDF.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-DysNnqCS.js → use-autosave-CKpatP3S.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-CoiedRuA.js +1 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-UEsO9Jr-.js → voice-api-key-field-CDcv0Wbh.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-B9disASf.js → work-discovery-overlay-CGdT22un.js} +1 -1
- package/dist/gateway/static/root/assets/work-discovery-page-BwaU1RqI.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-A0zTQHFQ.js → workflow-run-setup-panel-BAHYNlQt.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-DHYmh9G7.js +5 -0
- package/dist/gateway/static/root/index.html +10 -10
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.js +1 -1
- package/dist/src/agent/background-review/coordinator.d.ts +1 -1
- package/dist/src/agent/background-review/coordinator.js +4 -5
- package/dist/src/agent/background-review/run-background-review.js +0 -1
- package/dist/src/agent/background-review/settings.d.ts +1 -2
- package/dist/src/agent/background-review/settings.js +3 -4
- package/dist/src/agent/external-tools/composio-provider.js +8 -4
- package/dist/src/agent/image/generation/providers/xopc-cloud.js +2 -1
- package/dist/src/agent/image/tool-model-config.js +15 -9
- package/dist/src/agent/memory/builtin-provider.js +1 -2
- package/dist/src/agent/memory/manager.js +2 -0
- package/dist/src/agent/memory/sensitivity.js +1 -1
- package/dist/src/agent/memory/understanding/service.js +43 -19
- package/dist/src/agent/memory/user-context-coordinator.js +1 -1
- package/dist/src/agent/tools/image-generate-tool.js +23 -7
- package/dist/src/automations/domain/validation.d.ts +7 -7
- package/dist/src/automations/draft/automation-draft-validator.d.ts +2 -2
- package/dist/src/capabilities/readiness/from-config.d.ts +10 -0
- package/dist/src/capabilities/readiness/from-config.js +128 -0
- package/dist/src/capabilities/readiness/index.d.ts +3 -0
- package/dist/src/capabilities/readiness/index.js +3 -0
- package/dist/src/capabilities/readiness/planner.d.ts +3 -0
- package/dist/src/capabilities/readiness/planner.js +56 -0
- package/dist/src/capabilities/readiness/types.d.ts +35 -0
- package/dist/src/capabilities/readiness/types.js +1 -0
- package/dist/src/cli/commands/agent.js +9 -0
- package/dist/src/cli/commands/auth.js +4 -3
- package/dist/src/cli/commands/connectors.js +1 -1
- package/dist/src/cli/commands/models.js +2 -1
- package/dist/src/cli/commands/onboard/model.d.ts +3 -21
- package/dist/src/cli/commands/onboard/model.js +10 -86
- package/dist/src/cli/utils/oauth-login.d.ts +2 -0
- package/dist/src/cli/utils/oauth-login.js +9 -1
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/config/index.js +2 -2
- package/dist/src/config/paths-state.d.ts +2 -0
- package/dist/src/config/paths-state.js +5 -1
- package/dist/src/config/paths.d.ts +1 -1
- package/dist/src/config/paths.js +2 -2
- package/dist/src/config/schema.js +1 -1
- package/dist/src/connectors/auth-provider-registry.d.ts +2 -1
- package/dist/src/connectors/auth-provider-registry.js +5 -2
- package/dist/src/connectors/composio-sessions.d.ts +39 -0
- package/dist/src/connectors/composio-sessions.js +66 -7
- package/dist/src/connectors/composio.d.ts +4 -1
- package/dist/src/connectors/composio.js +34 -7
- package/dist/src/connectors/connected-source-cursor.d.ts +9 -0
- package/dist/src/connectors/connected-source-cursor.js +30 -0
- package/dist/src/connectors/connected-source-ingestion.js +67 -46
- package/dist/src/connectors/connected-source-normalizers.d.ts +1 -0
- package/dist/src/connectors/connected-source-normalizers.js +33 -2
- package/dist/src/connectors/connected-source-sanitization.d.ts +1 -0
- package/dist/src/connectors/connected-source-sanitization.js +21 -0
- package/dist/src/connectors/connector-identity.js +10 -2
- package/dist/src/connectors/content-enrichment.d.ts +29 -0
- package/dist/src/connectors/content-enrichment.js +273 -0
- package/dist/src/connectors/health.js +1 -1
- package/dist/src/connectors/learning-coordinator.js +1 -2
- package/dist/src/connectors/learning-recipes.js +28 -33
- package/dist/src/connectors/runtime-adapter-registry.js +14 -1
- package/dist/src/discussions/live-worker.d.ts +1 -0
- package/dist/src/discussions/live-worker.js +7 -1
- package/dist/src/discussions/repository.js +11 -1
- package/dist/src/discussions/sealer.d.ts +1 -1
- package/dist/src/discussions/sealer.js +16 -7
- package/dist/src/discussions/transcript.js +27 -1
- package/dist/src/discussions/types.d.ts +4 -0
- package/dist/src/gateway/agents-admin.js +1 -1
- package/dist/src/gateway/hono/app.js +8 -3
- package/dist/src/gateway/hono/middleware/strict-rate-limit.d.ts +4 -0
- package/dist/src/gateway/hono/middleware/strict-rate-limit.js +8 -1
- package/dist/src/gateway/hono/oauth-async.d.ts +11 -5
- package/dist/src/gateway/hono/oauth-async.js +29 -16
- package/dist/src/gateway/hono/oauth.d.ts +1 -3
- package/dist/src/gateway/hono/oauth.js +22 -22
- package/dist/src/gateway/hono/routes/agent-stream.js +4 -1
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
- package/dist/src/gateway/hono/routes/connectors.js +16 -3
- package/dist/src/gateway/hono/routes/deps.d.ts +1 -0
- package/dist/src/gateway/hono/routes/discussions.js +2 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +2 -1
- package/dist/src/gateway/hono/routes/mcp.js +1 -1
- package/dist/src/gateway/hono/routes/models.js +59 -5
- package/dist/src/gateway/hono/routes/session-input-handler.d.ts +60 -0
- package/dist/src/gateway/hono/routes/session-input-handler.js +75 -1
- package/dist/src/gateway/hono/routes/understanding-sources.js +29 -0
- package/dist/src/gateway/hono/routes/voice.d.ts +1 -2
- package/dist/src/gateway/hono/routes/voice.js +16 -35
- package/dist/src/gateway/rate-limit/buckets.d.ts +3 -0
- package/dist/src/gateway/rate-limit/buckets.js +12 -0
- package/dist/src/gateway/service/agent-runner.d.ts +9 -1
- package/dist/src/gateway/service/agent-runner.js +9 -0
- package/dist/src/gateway/service/session-input-coordinator.d.ts +12 -0
- package/dist/src/gateway/service/session-input-coordinator.js +63 -6
- package/dist/src/gateway/service.d.ts +8 -0
- package/dist/src/gateway/service.js +18 -0
- package/dist/src/knowledge/connected-understanding-pipeline.d.ts +1 -1
- package/dist/src/knowledge/connected-understanding-pipeline.js +74 -25
- package/dist/src/knowledge/ingestion-service.js +33 -15
- package/dist/src/knowledge/types.d.ts +2 -0
- package/dist/src/media-understanding/audio-transcription-runner.d.ts +2 -0
- package/dist/src/media-understanding/audio-transcription-runner.js +3 -1
- package/dist/src/media-understanding/runner.js +3 -1
- package/dist/src/media-understanding/types.d.ts +2 -0
- package/dist/src/providers/model-catalog-persistence.d.ts +9 -0
- package/dist/src/providers/model-catalog-persistence.js +172 -0
- package/dist/src/providers/model-catalog-ranking.d.ts +2 -0
- package/dist/src/providers/model-catalog-ranking.js +17 -0
- package/dist/src/providers/model-catalog-store.d.ts +13 -3
- package/dist/src/providers/model-catalog-store.js +24 -5
- package/dist/src/providers/model-catalog-sync-service.d.ts +3 -3
- package/dist/src/providers/model-catalog-sync-service.js +12 -7
- package/dist/src/providers/provider-auth-service.d.ts +1 -0
- package/dist/src/providers/provider-auth-service.js +3 -0
- package/dist/src/providers/provider-disconnect.d.ts +11 -0
- package/dist/src/providers/provider-disconnect.js +33 -0
- package/dist/src/providers/xopc-cloud-catalog-coordinator.d.ts +56 -0
- package/dist/src/providers/xopc-cloud-catalog-coordinator.js +182 -0
- package/dist/src/providers/xopc-cloud-model-source.d.ts +6 -10
- package/dist/src/providers/xopc-cloud-model-source.js +49 -27
- package/dist/src/retrieval/audit.d.ts +1 -0
- package/dist/src/retrieval/audit.js +8 -0
- package/dist/src/retrieval/candidateFusion.d.ts +5 -0
- package/dist/src/retrieval/candidateFusion.js +20 -0
- package/dist/src/retrieval/queryProfile.d.ts +16 -0
- package/dist/src/retrieval/queryProfile.js +66 -0
- package/dist/src/retrieval/textFeatures.d.ts +5 -0
- package/dist/src/retrieval/textFeatures.js +71 -0
- package/dist/src/session/client-history.d.ts +1 -0
- package/dist/src/session/client-history.js +4 -0
- package/dist/src/session/index.js +1 -1
- package/dist/src/session/store.js +1 -1
- package/dist/src/storage/sqlite/fts.d.ts +0 -4
- package/dist/src/storage/sqlite/fts.js +2 -49
- package/dist/src/storage/sqlite/index.d.ts +3 -2
- package/dist/src/storage/sqlite/index.js +6 -5
- package/dist/src/storage/sqlite/knowledge-repository.d.ts +1 -0
- package/dist/src/storage/sqlite/knowledge-repository.js +4 -0
- package/dist/src/storage/sqlite/memory-records-repository.js +60 -38
- package/dist/src/storage/sqlite/row-mappers.js +2 -2
- package/dist/src/storage/sqlite/session-repository.js +2 -2
- package/dist/src/storage/sqlite/session-turn-replace-repository.d.ts +34 -0
- package/dist/src/storage/sqlite/session-turn-replace-repository.js +110 -0
- package/dist/src/storage/sqlite/transcript-repository.js +1 -1
- package/dist/src/storage/sqlite/user-context-quality-repository.d.ts +15 -0
- package/dist/src/storage/sqlite/user-context-quality-repository.js +46 -2
- package/dist/src/storage/sqlite/user-context-repository.d.ts +4 -0
- package/dist/src/storage/sqlite/user-context-repository.js +29 -3
- package/dist/src/tasks/home-query-service.d.ts +3 -1
- package/dist/src/tasks/home-query-service.js +73 -70
- package/dist/src/tui/backends/embedded-backend.js +12 -4
- package/dist/src/tui/tui-oauth-login.js +5 -0
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/user-context/planner.d.ts +1 -0
- package/dist/src/user-context/planner.js +16 -29
- package/dist/src/user-context/retriever.d.ts +15 -0
- package/dist/src/user-context/retriever.js +65 -0
- package/dist/src/user-context/scope.d.ts +7 -0
- package/dist/src/user-context/scope.js +9 -0
- package/dist/src/user-context/sources/activity-clustering.js +30 -117
- package/dist/src/user-context/sources/index.d.ts +1 -0
- package/dist/src/user-context/sources/index.js +2 -1
- package/dist/src/user-context/sources/signal-clustering.d.ts +18 -0
- package/dist/src/user-context/sources/signal-clustering.js +131 -0
- package/dist/src/voice/audio/normalize.d.ts +17 -0
- package/dist/src/voice/audio/normalize.js +155 -0
- package/dist/src/voice/language-profile.d.ts +1 -4
- package/dist/src/voice/language-profile.js +2 -25
- package/dist/src/voice/local/runtime-client.d.ts +2 -0
- package/dist/src/voice/local/runtime-client.js +20 -1
- package/dist/src/voice/local/runtime-worker.js +7 -13
- package/dist/src/voice/local/wav.js +1 -1
- package/dist/src/voice/stt/availability.d.ts +1 -4
- package/dist/src/voice/stt/availability.js +3 -15
- package/dist/src/voice/stt/config.js +1 -0
- package/dist/src/voice/stt/factory.js +23 -0
- package/dist/src/voice/stt/index.d.ts +1 -0
- package/dist/src/voice/stt/index.js +2 -2
- package/dist/src/voice/stt/list-providers.js +1 -1
- package/dist/src/voice/stt/providers/local-transcription.js +7 -3
- package/dist/src/voice/stt/providers/xopc-cloud-transcription.js +3 -1
- package/dist/src/voice/stt/transcribe-core.d.ts +5 -1
- package/dist/src/voice/stt/transcribe-core.js +13 -5
- package/dist/src/voice/stt/types.d.ts +2 -0
- package/dist/src/voice/tts/factory.d.ts +1 -1
- package/dist/src/voice/tts/factory.js +23 -1
- package/dist/src/voice/tts/merge-config.js +5 -3
- package/dist/src/voice/tts/providers/xopc-cloud-speech.js +3 -1
- package/dist/src/voice/tts/types.d.ts +2 -0
- package/dist/src/voice/tts/types.js +4 -2
- package/dist/src/work-discovery/evaluation.d.ts +23 -0
- package/dist/src/work-discovery/evaluation.js +18 -1
- package/dist/src/work-discovery/index.js +2 -2
- package/package.json +4 -3
- package/dist/gateway/static/root/assets/agents-Bl8FQZxW.js +0 -68
- package/dist/gateway/static/root/assets/apps-page-CRUgTO10.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-DrSwolhG.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-NlvDyMwD.js +0 -8
- package/dist/gateway/static/root/assets/capabilities-settings-panel-BWXUznw5.js +0 -7
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-D0loEbzq.js +0 -3
- package/dist/gateway/static/root/assets/channels-settings-CcivCw8U.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-DkHAD2Zn.js +0 -1
- package/dist/gateway/static/root/assets/chat-terminal-dock-DVedGAeX.js +0 -36
- package/dist/gateway/static/root/assets/connectors-page-DlBSlfkv.js +0 -2
- package/dist/gateway/static/root/assets/heartbeat-settings-UZAn1aAQ.js +0 -1
- package/dist/gateway/static/root/assets/home-page-CRJDpy5E.js +0 -3
- package/dist/gateway/static/root/assets/index-BSjP0Wsx.css +0 -2
- package/dist/gateway/static/root/assets/index-C2ZYFBGL.js +0 -85
- package/dist/gateway/static/root/assets/local-app-workbench-page-D9bguWRo.js +0 -2
- package/dist/gateway/static/root/assets/logs-page-Gr-nE4nW.js +0 -2
- package/dist/gateway/static/root/assets/markdown-view-B12xeflb.css +0 -1
- package/dist/gateway/static/root/assets/messages-yG5P43Q9.js +0 -3
- package/dist/gateway/static/root/assets/notes-workbench-CpbD4XG2.js +0 -4
- package/dist/gateway/static/root/assets/project-detail-page-GvSYDbjR.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-DPRxKGbs.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-WIzeu-gB.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-2XEJM0YE.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-g1GThZ0O.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-C6qj2L-q.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-BBpE1bep.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-DXORBJNk.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-DC0hc8hp.js +0 -1
- package/dist/gateway/static/root/assets/user-context-page-Bwg4KV8B.js +0 -1
- package/dist/gateway/static/root/assets/work-discovery-page-CmPfOfHl.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-DhQNh7W6.js +0 -5
- package/dist/src/voice/local/runtime-dispatcher.d.ts +0 -9
- package/dist/src/voice/local/runtime-dispatcher.js +0 -20
|
@@ -834,7 +834,7 @@ activityDetailDefault: z.enum([
|
|
|
834
834
|
"always",
|
|
835
835
|
"inbound",
|
|
836
836
|
"tagged"
|
|
837
|
-
]).default("
|
|
837
|
+
]).default("off"),
|
|
838
838
|
fallback: TTSFallbackConfigSchema.optional(),
|
|
839
839
|
maxTextLength: z.number().int().min(1).default(512),
|
|
840
840
|
timeoutMs: z.number().int().min(1e3).max(18e4).default(6e4),
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Config } from '../config/schema.js';
|
|
1
2
|
import type { ConnectorDefinition } from './types.js';
|
|
2
3
|
export type ConnectorAuthStartResult = {
|
|
3
4
|
connectorId: string;
|
|
@@ -6,4 +7,4 @@ export type ConnectorAuthStartResult = {
|
|
|
6
7
|
authorizationUrl?: string;
|
|
7
8
|
connectionId?: string;
|
|
8
9
|
};
|
|
9
|
-
export declare function startConnectorAuthorization(definition: ConnectorDefinition): Promise<ConnectorAuthStartResult>;
|
|
10
|
+
export declare function startConnectorAuthorization(definition: ConnectorDefinition, config?: Config): Promise<ConnectorAuthStartResult>;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { startComposioAuthorize } from "./composio.js";
|
|
2
|
+
import { getConnectorInstance } from "./instances.js";
|
|
2
3
|
//#region src/connectors/auth-provider-registry.ts
|
|
3
|
-
async function startConnectorAuthorization(definition) {
|
|
4
|
+
async function startConnectorAuthorization(definition, config) {
|
|
4
5
|
if (definition.auth.mode !== "oauth" || definition.auth.provider !== "composio" || definition.runtime.type !== "composio" || definition.runtime.role !== "toolkit") throw new Error(`Connector "${definition.id}" does not support Composio authorization.`);
|
|
5
|
-
const
|
|
6
|
+
const configuredAuthConfigId = config ? getConnectorInstance(config, definition.id)?.config?.authConfigId : void 0;
|
|
7
|
+
const authConfigId = typeof configuredAuthConfigId === "string" && configuredAuthConfigId.trim() ? configuredAuthConfigId.trim() : void 0;
|
|
8
|
+
const authorization = await startComposioAuthorize(definition.id, definition.runtime.toolkit, void 0, authConfigId);
|
|
6
9
|
return {
|
|
7
10
|
connectorId: definition.id,
|
|
8
11
|
provider: "composio",
|
|
@@ -17,6 +17,20 @@ export type ComposioAuthorizeResult = {
|
|
|
17
17
|
connectUrl?: string;
|
|
18
18
|
status: string;
|
|
19
19
|
};
|
|
20
|
+
export type ComposioAuthConfigOption = {
|
|
21
|
+
id: string;
|
|
22
|
+
name: string;
|
|
23
|
+
status: 'ENABLED' | 'DISABLED';
|
|
24
|
+
authScheme?: string;
|
|
25
|
+
isComposioManaged: boolean;
|
|
26
|
+
isEnabledForToolRouter: boolean;
|
|
27
|
+
};
|
|
28
|
+
export type ComposioToolkitAuthState = {
|
|
29
|
+
toolkit: string;
|
|
30
|
+
managedAuthAvailable: boolean;
|
|
31
|
+
requiresCustomAuthConfig: boolean;
|
|
32
|
+
authConfigs: ComposioAuthConfigOption[];
|
|
33
|
+
};
|
|
20
34
|
type SessionToolkitResponse = {
|
|
21
35
|
items: Array<{
|
|
22
36
|
slug: string;
|
|
@@ -69,12 +83,34 @@ export type ComposioSessionsClient = {
|
|
|
69
83
|
delete(id: string): Promise<unknown>;
|
|
70
84
|
refresh(id: string): Promise<unknown>;
|
|
71
85
|
};
|
|
86
|
+
authConfigs?: {
|
|
87
|
+
list(query?: {
|
|
88
|
+
toolkit?: string;
|
|
89
|
+
showDisabled?: boolean;
|
|
90
|
+
}): Promise<{
|
|
91
|
+
items: Array<{
|
|
92
|
+
id: string;
|
|
93
|
+
name: string;
|
|
94
|
+
status: 'ENABLED' | 'DISABLED';
|
|
95
|
+
authScheme?: string;
|
|
96
|
+
isComposioManaged?: boolean;
|
|
97
|
+
isEnabledForToolRouter?: boolean;
|
|
98
|
+
}>;
|
|
99
|
+
}>;
|
|
100
|
+
};
|
|
101
|
+
toolkits?: {
|
|
102
|
+
get(slug: string): Promise<{
|
|
103
|
+
composioManagedAuthSchemes?: string[];
|
|
104
|
+
authConfigDetails?: unknown[];
|
|
105
|
+
}>;
|
|
106
|
+
};
|
|
72
107
|
};
|
|
73
108
|
export type ComposioSessionContext = {
|
|
74
109
|
principalId: string;
|
|
75
110
|
installationScope?: string;
|
|
76
111
|
providerPrincipalId?: string;
|
|
77
112
|
toolkits?: string[];
|
|
113
|
+
authConfigs?: Record<string, string>;
|
|
78
114
|
connectedAccounts?: Record<string, string[]>;
|
|
79
115
|
callbackUrl?: string;
|
|
80
116
|
};
|
|
@@ -86,11 +122,14 @@ export declare class ComposioSessionsAdapter {
|
|
|
86
122
|
constructor(options?: {
|
|
87
123
|
resolver?: CredentialResolver;
|
|
88
124
|
clientFactory?: ClientFactory;
|
|
125
|
+
fileDownloadDir?: string;
|
|
89
126
|
});
|
|
90
127
|
createSession(context: ComposioSessionContext): Promise<ComposioSessionLike>;
|
|
128
|
+
getToolkitAuthState(toolkit: string): Promise<ComposioToolkitAuthState>;
|
|
91
129
|
listToolkitCatalog(context: Omit<ComposioSessionContext, 'toolkits'>): Promise<ComposioToolkitCatalogItem[]>;
|
|
92
130
|
authorize(context: ComposioSessionContext & {
|
|
93
131
|
toolkit: string;
|
|
132
|
+
authConfigId?: string;
|
|
94
133
|
installationId?: string;
|
|
95
134
|
alias?: string;
|
|
96
135
|
}): Promise<ComposioAuthorizeResult>;
|
|
@@ -63,6 +63,25 @@ function connectionStatus(value) {
|
|
|
63
63
|
default: return "unknown";
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
|
+
function errorChainMessage(error) {
|
|
67
|
+
const messages = [];
|
|
68
|
+
const visited = /* @__PURE__ */ new Set();
|
|
69
|
+
let current = error;
|
|
70
|
+
while (current && !visited.has(current)) {
|
|
71
|
+
visited.add(current);
|
|
72
|
+
if (current instanceof Error) messages.push(current.message);
|
|
73
|
+
else if (typeof current === "string") messages.push(current);
|
|
74
|
+
if (!current || typeof current !== "object" || !("cause" in current)) break;
|
|
75
|
+
current = current.cause;
|
|
76
|
+
}
|
|
77
|
+
return messages.join(" ");
|
|
78
|
+
}
|
|
79
|
+
function missingAuthConfigMessage(error, toolkit, authConfigId) {
|
|
80
|
+
const message = errorChainMessage(error);
|
|
81
|
+
if (!message.includes("require auth configs") && !message.includes("cannot be auto-created")) return null;
|
|
82
|
+
if (authConfigId) return `The Composio auth config "${authConfigId}" is not available for toolkit "${toolkit}". Make sure it is enabled for Tool Router and belongs to the same Composio project as the configured API key.`;
|
|
83
|
+
return `The Composio toolkit "${toolkit}" requires a custom auth config. Create one in the Composio dashboard, enable it for Tool Router, then select it in the connector settings.`;
|
|
84
|
+
}
|
|
66
85
|
var ComposioSessionsAdapter = class {
|
|
67
86
|
createClient;
|
|
68
87
|
constructor(options = {}) {
|
|
@@ -84,8 +103,9 @@ var ComposioSessionsAdapter = class {
|
|
|
84
103
|
apiKey,
|
|
85
104
|
baseURL: process.env.XOPC_COMPOSIO_BASE_URL?.trim() || void 0,
|
|
86
105
|
allowTracking: false,
|
|
87
|
-
dangerouslyAllowAutoUploadDownloadFiles:
|
|
106
|
+
dangerouslyAllowAutoUploadDownloadFiles: Boolean(options.fileDownloadDir),
|
|
88
107
|
fileUploadDirs: false,
|
|
108
|
+
...options.fileDownloadDir ? { fileDownloadDir: options.fileDownloadDir } : {},
|
|
89
109
|
provider: new PiProvider(),
|
|
90
110
|
host: "xopc"
|
|
91
111
|
});
|
|
@@ -106,10 +126,36 @@ var ComposioSessionsAdapter = class {
|
|
|
106
126
|
requireExplicitSelection: true
|
|
107
127
|
},
|
|
108
128
|
...context.toolkits?.length ? { toolkits: { enable: context.toolkits } } : {},
|
|
129
|
+
...context.authConfigs && Object.keys(context.authConfigs).length > 0 ? { authConfigs: context.authConfigs } : {},
|
|
109
130
|
...context.connectedAccounts && Object.keys(context.connectedAccounts).length > 0 ? { connectedAccounts: context.connectedAccounts } : {}
|
|
110
131
|
};
|
|
111
132
|
return client.sessions.create(context.providerPrincipalId ?? createComposioPrincipalId(context.principalId, context.installationScope), config);
|
|
112
133
|
}
|
|
134
|
+
async getToolkitAuthState(toolkit) {
|
|
135
|
+
const normalizedToolkit = toolkit.trim().toLowerCase();
|
|
136
|
+
if (!normalizedToolkit) throw new Error("Composio toolkit is required.");
|
|
137
|
+
const client = await this.createClient();
|
|
138
|
+
if (!client.authConfigs || !client.toolkits) throw new Error("The installed Composio runtime does not support auth config discovery.");
|
|
139
|
+
const [toolkitDetails, authConfigList] = await Promise.all([client.toolkits.get(normalizedToolkit), client.authConfigs.list({
|
|
140
|
+
toolkit: normalizedToolkit,
|
|
141
|
+
showDisabled: true
|
|
142
|
+
})]);
|
|
143
|
+
const managedAuthAvailable = (toolkitDetails.composioManagedAuthSchemes?.length ?? 0) > 0;
|
|
144
|
+
const authConfigs = authConfigList.items.map((item) => ({
|
|
145
|
+
id: item.id,
|
|
146
|
+
name: item.name,
|
|
147
|
+
status: item.status,
|
|
148
|
+
authScheme: item.authScheme,
|
|
149
|
+
isComposioManaged: item.isComposioManaged === true,
|
|
150
|
+
isEnabledForToolRouter: item.isEnabledForToolRouter !== false
|
|
151
|
+
}));
|
|
152
|
+
return {
|
|
153
|
+
toolkit: normalizedToolkit,
|
|
154
|
+
managedAuthAvailable,
|
|
155
|
+
requiresCustomAuthConfig: !managedAuthAvailable && (toolkitDetails.authConfigDetails?.length ?? 0) > 0,
|
|
156
|
+
authConfigs
|
|
157
|
+
};
|
|
158
|
+
}
|
|
113
159
|
async listToolkitCatalog(context) {
|
|
114
160
|
const session = await this.createSession(context);
|
|
115
161
|
const items = [];
|
|
@@ -134,11 +180,20 @@ var ComposioSessionsAdapter = class {
|
|
|
134
180
|
}
|
|
135
181
|
async authorize(context) {
|
|
136
182
|
const providerPrincipalId = createComposioPrincipalId(context.principalId, context.installationScope);
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
183
|
+
let session;
|
|
184
|
+
try {
|
|
185
|
+
session = await this.createSession({
|
|
186
|
+
...context,
|
|
187
|
+
providerPrincipalId,
|
|
188
|
+
toolkits: [context.toolkit],
|
|
189
|
+
...context.authConfigId ? { authConfigs: { [context.toolkit]: context.authConfigId } } : {}
|
|
190
|
+
});
|
|
191
|
+
} catch (error) {
|
|
192
|
+
const actionableMessage = missingAuthConfigMessage(error, context.toolkit, context.authConfigId);
|
|
193
|
+
if (actionableMessage) throw new Error(actionableMessage, { cause: error });
|
|
194
|
+
throw error;
|
|
195
|
+
}
|
|
196
|
+
const request = await session.authorize(context.toolkit, {
|
|
142
197
|
callbackUrl: context.callbackUrl,
|
|
143
198
|
alias: context.alias
|
|
144
199
|
});
|
|
@@ -159,7 +214,8 @@ var ComposioSessionsAdapter = class {
|
|
|
159
214
|
}).length === 0,
|
|
160
215
|
metadata: {
|
|
161
216
|
toolkit: context.toolkit,
|
|
162
|
-
providerPrincipalId
|
|
217
|
+
providerPrincipalId,
|
|
218
|
+
...context.authConfigId ? { authConfigId: context.authConfigId } : {}
|
|
163
219
|
}
|
|
164
220
|
});
|
|
165
221
|
return {
|
|
@@ -207,6 +263,7 @@ var ComposioSessionsAdapter = class {
|
|
|
207
263
|
connectedAt: readString(row, ["createdAt", "created_at"]),
|
|
208
264
|
lastError: readString(row, ["lastError", "last_error"]),
|
|
209
265
|
metadata: {
|
|
266
|
+
...existing?.metadata,
|
|
210
267
|
toolkit,
|
|
211
268
|
providerPrincipalId
|
|
212
269
|
}
|
|
@@ -266,10 +323,12 @@ var ComposioSessionsAdapter = class {
|
|
|
266
323
|
const toolkit = input.action.toolkit;
|
|
267
324
|
const connectedAccounts = toolkit && input.connection ? { [toolkit]: [input.connection.providerConnectionId] } : input.context.connectedAccounts;
|
|
268
325
|
const providerPrincipalId = input.connection?.metadata.providerPrincipalId;
|
|
326
|
+
const connectionAuthConfigId = input.connection?.metadata.authConfigId;
|
|
269
327
|
if (input.connection && (typeof providerPrincipalId !== "string" || !providerPrincipalId.trim())) throw new Error("Connected account is missing its provider identity. Reconnect the account and try again.");
|
|
270
328
|
const result = await (await this.createSession({
|
|
271
329
|
...input.context,
|
|
272
330
|
connectedAccounts,
|
|
331
|
+
...toolkit && typeof connectionAuthConfigId === "string" && connectionAuthConfigId.trim() ? { authConfigs: { [toolkit]: connectionAuthConfigId.trim() } } : {},
|
|
273
332
|
...typeof providerPrincipalId === "string" ? { providerPrincipalId } : {}
|
|
274
333
|
})).execute(input.action.actionId, input.args ?? {}, input.connection ? { account: input.connection.providerConnectionId } : void 0);
|
|
275
334
|
appendConnectorExecutionAudit({
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CredentialResolver } from '../auth/credentials.js';
|
|
2
2
|
import type { Config } from '../config/schema.js';
|
|
3
|
+
import { type ComposioToolkitAuthState } from './composio-sessions.js';
|
|
3
4
|
import type { ConnectorConfirmationPolicy, ConnectorDefinition, ConnectorInstallationPolicy } from './types.js';
|
|
4
5
|
export type ComposioConnection = {
|
|
5
6
|
id: string;
|
|
@@ -38,6 +39,7 @@ export type ComposioConnectorHealth = {
|
|
|
38
39
|
recovery: 'none' | 'connect' | 'reconnect' | 'retry';
|
|
39
40
|
errorCode?: 'missing_credential' | 'unauthorized' | 'forbidden' | 'network' | 'timeout' | 'provider_error';
|
|
40
41
|
};
|
|
42
|
+
export declare function getConfiguredComposioAuthConfigs(config: Config | undefined, toolkits: string[]): Record<string, string>;
|
|
41
43
|
export declare function toolkitFromComposioSlug(slug: string): string | undefined;
|
|
42
44
|
export declare function scopeForComposioAction(slug: string): {
|
|
43
45
|
toolkit?: string;
|
|
@@ -64,6 +66,7 @@ export declare function saveComposioApiKey(input: {
|
|
|
64
66
|
export declare function configureComposioApiKey(apiKey: string, resolver?: CredentialResolver): Promise<void>;
|
|
65
67
|
export declare function listComposioConnections(resolver?: CredentialResolver): Promise<ComposioConnection[]>;
|
|
66
68
|
export declare function inspectComposioConnectorHealth(toolkit: string, resolver?: CredentialResolver): Promise<ComposioConnectorHealth>;
|
|
69
|
+
export declare function getComposioToolkitAuthState(toolkit: string, resolver?: CredentialResolver): Promise<ComposioToolkitAuthState>;
|
|
67
70
|
export declare function getComposioInstallationPolicy(config: Config | undefined, toolkit: string): ConnectorInstallationPolicy;
|
|
68
71
|
export declare function updateComposioInstallationPolicy(config: Config | undefined, toolkit: string, patch: {
|
|
69
72
|
allowedAgentIds?: string[];
|
|
@@ -76,7 +79,7 @@ export declare function updateComposioConnection(id: string, patch: {
|
|
|
76
79
|
}): ComposioConnection;
|
|
77
80
|
export declare function refreshComposioConnection(id: string, resolver?: CredentialResolver): Promise<void>;
|
|
78
81
|
export declare function revokeComposioConnection(id: string, resolver?: CredentialResolver): Promise<void>;
|
|
79
|
-
export declare function startComposioAuthorize(connectorId: string, toolkit: string, resolver?: CredentialResolver): Promise<{
|
|
82
|
+
export declare function startComposioAuthorize(connectorId: string, toolkit: string, resolver?: CredentialResolver, authConfigId?: string): Promise<{
|
|
80
83
|
toolkit: string;
|
|
81
84
|
connectUrl: string;
|
|
82
85
|
connectionId?: string;
|
|
@@ -92,14 +92,19 @@ const COMPOSIO_CURATED_ACTIONS = {
|
|
|
92
92
|
},
|
|
93
93
|
googlecalendar: {
|
|
94
94
|
GOOGLECALENDAR_FIND_EVENT: "read",
|
|
95
|
-
|
|
95
|
+
GOOGLECALENDAR_SYNC_EVENTS: "read",
|
|
96
96
|
GOOGLECALENDAR_CREATE_EVENT: "write",
|
|
97
97
|
GOOGLECALENDAR_UPDATE_EVENT: "write",
|
|
98
98
|
GOOGLECALENDAR_DELETE_EVENT: "admin"
|
|
99
99
|
},
|
|
100
100
|
googledrive: {
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
GOOGLEDRIVE_FIND_FILE: "read",
|
|
102
|
+
GOOGLEDRIVE_GET_ABOUT: "read",
|
|
103
|
+
GOOGLEDRIVE_GET_FILE_METADATA: "read",
|
|
104
|
+
GOOGLEDRIVE_DOWNLOAD_FILE: "read",
|
|
105
|
+
GOOGLEDRIVE_EXPORT_GOOGLE_WORKSPACE_FILE: "read",
|
|
106
|
+
GOOGLEDRIVE_GET_CHANGES_START_PAGE_TOKEN: "read",
|
|
107
|
+
GOOGLEDRIVE_LIST_CHANGES: "read",
|
|
103
108
|
GOOGLEDRIVE_CREATE_FILE: "write",
|
|
104
109
|
GOOGLEDRIVE_UPDATE_FILE: "write",
|
|
105
110
|
GOOGLEDRIVE_DELETE_FILE: "admin"
|
|
@@ -174,6 +179,22 @@ function toolkitFromConnectionMetadata(connection) {
|
|
|
174
179
|
function normalizeToolkit(toolkit) {
|
|
175
180
|
return toolkit.trim().toLowerCase().replace(/[^a-z0-9_]+/g, "");
|
|
176
181
|
}
|
|
182
|
+
function getConfiguredComposioAuthConfigs(config, toolkits) {
|
|
183
|
+
const requested = new Set(toolkits.map(normalizeToolkit));
|
|
184
|
+
return Object.values(config?.connectors?.instances ?? {}).reduce((result, record) => {
|
|
185
|
+
if (!record || typeof record !== "object" || Array.isArray(record)) return result;
|
|
186
|
+
const row = record;
|
|
187
|
+
const runtime = row.runtime;
|
|
188
|
+
const marker = row.xopcConnector;
|
|
189
|
+
if (!runtime || typeof runtime !== "object" || Array.isArray(runtime) || runtime.type !== "composio" || runtime.role !== "toolkit" || typeof runtime.toolkit !== "string" || !marker || typeof marker !== "object" || Array.isArray(marker)) return result;
|
|
190
|
+
const toolkit = normalizeToolkit(runtime.toolkit);
|
|
191
|
+
if (!requested.has(toolkit)) return result;
|
|
192
|
+
const configValue = marker.config;
|
|
193
|
+
const authConfigId = configValue && typeof configValue === "object" && !Array.isArray(configValue) ? configValue.authConfigId : void 0;
|
|
194
|
+
if (typeof authConfigId === "string" && authConfigId.trim()) result[toolkit] = authConfigId.trim();
|
|
195
|
+
return result;
|
|
196
|
+
}, {});
|
|
197
|
+
}
|
|
177
198
|
function toolkitFromComposioSlug(slug) {
|
|
178
199
|
const upper = slug.trim().toUpperCase();
|
|
179
200
|
if (!upper) return void 0;
|
|
@@ -399,6 +420,9 @@ async function inspectComposioConnectorHealth(toolkit, resolver = new Credential
|
|
|
399
420
|
};
|
|
400
421
|
}
|
|
401
422
|
}
|
|
423
|
+
async function getComposioToolkitAuthState(toolkit, resolver = new CredentialResolver()) {
|
|
424
|
+
return new ComposioSessionsAdapter({ resolver }).getToolkitAuthState(normalizeToolkit(toolkit));
|
|
425
|
+
}
|
|
402
426
|
function classifyComposioHealthError(error) {
|
|
403
427
|
const message = error instanceof Error ? error.message : String(error);
|
|
404
428
|
if (/api key is not configured|missing.*api key/i.test(message)) return {
|
|
@@ -473,11 +497,12 @@ async function revokeComposioConnection(id, resolver = new CredentialResolver())
|
|
|
473
497
|
await new ComposioSessionsAdapter({ resolver }).revokeConnection(connection);
|
|
474
498
|
if (connection.accountId) refreshConnectorAccountCurrent(connection.accountId);
|
|
475
499
|
}
|
|
476
|
-
async function startComposioAuthorize(connectorId, toolkit, resolver = new CredentialResolver()) {
|
|
500
|
+
async function startComposioAuthorize(connectorId, toolkit, resolver = new CredentialResolver(), authConfigId) {
|
|
477
501
|
const normalizedToolkit = normalizeToolkit(toolkit);
|
|
478
502
|
const authorization = await new ComposioSessionsAdapter({ resolver }).authorize({
|
|
479
503
|
principalId: LOCAL_OWNER_PRINCIPAL,
|
|
480
504
|
toolkit: normalizedToolkit,
|
|
505
|
+
authConfigId,
|
|
481
506
|
installationId: getConnectorInstallation(`${connectorId}-${LOCAL_OWNER_PRINCIPAL}`)?.id
|
|
482
507
|
});
|
|
483
508
|
if (!authorization.connectUrl) throw new Error("Composio authorize did not return a connect URL.");
|
|
@@ -491,7 +516,8 @@ async function listComposioTools(toolkit, config, resolver = new CredentialResol
|
|
|
491
516
|
const normalizedToolkit = normalizeToolkit(toolkit);
|
|
492
517
|
const payload = await (await new ComposioSessionsAdapter({ resolver }).createSession({
|
|
493
518
|
principalId: LOCAL_OWNER_PRINCIPAL,
|
|
494
|
-
toolkits: [normalizedToolkit]
|
|
519
|
+
toolkits: [normalizedToolkit],
|
|
520
|
+
authConfigs: getConfiguredComposioAuthConfigs(config, [normalizedToolkit])
|
|
495
521
|
})).search({
|
|
496
522
|
query: `List the available ${normalizedToolkit} actions and their exact input contracts.`,
|
|
497
523
|
toolkits: [normalizedToolkit]
|
|
@@ -551,7 +577,8 @@ async function executeComposioTool(params, resolver = new CredentialResolver())
|
|
|
551
577
|
const result = await new ComposioSessionsAdapter({ resolver }).executeWithPolicy({
|
|
552
578
|
context: {
|
|
553
579
|
principalId: LOCAL_OWNER_PRINCIPAL,
|
|
554
|
-
toolkits: [allowed.toolkit]
|
|
580
|
+
toolkits: [allowed.toolkit],
|
|
581
|
+
authConfigs: getConfiguredComposioAuthConfigs(params.config, [allowed.toolkit])
|
|
555
582
|
},
|
|
556
583
|
installation,
|
|
557
584
|
connection,
|
|
@@ -570,4 +597,4 @@ async function executeComposioTool(params, resolver = new CredentialResolver())
|
|
|
570
597
|
return result.result;
|
|
571
598
|
}
|
|
572
599
|
//#endregion
|
|
573
|
-
export { COMPOSIO_CONNECTORS, canUseComposioAction, configureComposioApiKey, executeComposioTool, getComposioInstallationPolicy, getComposioToolkitScope, inspectComposioConnectorHealth, isComposioActionAllowedByCatalog, listComposioConnections, listComposioTools, refreshComposioConnection, revokeComposioConnection, saveComposioApiKey, scopeForComposioAction, setComposioToolkitScope, startComposioAuthorize, toolkitFromComposioSlug, updateComposioConnection, updateComposioInstallationPolicy };
|
|
600
|
+
export { COMPOSIO_CONNECTORS, canUseComposioAction, configureComposioApiKey, executeComposioTool, getComposioInstallationPolicy, getComposioToolkitAuthState, getComposioToolkitScope, getConfiguredComposioAuthConfigs, inspectComposioConnectorHealth, isComposioActionAllowedByCatalog, listComposioConnections, listComposioTools, refreshComposioConnection, revokeComposioConnection, saveComposioApiKey, scopeForComposioAction, setComposioToolkitScope, startComposioAuthorize, toolkitFromComposioSlug, updateComposioConnection, updateComposioInstallationPolicy };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type ConnectedSourceCursor = {
|
|
2
|
+
version: 1;
|
|
3
|
+
checkpoint?: string;
|
|
4
|
+
scanStartedAt?: string;
|
|
5
|
+
pageToken?: string;
|
|
6
|
+
syncToken?: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function decodeConnectedSourceCursor(value: string | undefined): ConnectedSourceCursor | undefined;
|
|
9
|
+
export declare function encodeConnectedSourceCursor(cursor: Omit<ConnectedSourceCursor, 'version'>): string;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
//#region src/connectors/connected-source-cursor.ts
|
|
2
|
+
function optionalText(value) {
|
|
3
|
+
return typeof value === "string" && value.trim() ? value.trim() : void 0;
|
|
4
|
+
}
|
|
5
|
+
function decodeConnectedSourceCursor(value) {
|
|
6
|
+
if (!value) return void 0;
|
|
7
|
+
try {
|
|
8
|
+
const parsed = JSON.parse(value);
|
|
9
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return void 0;
|
|
10
|
+
const row = parsed;
|
|
11
|
+
if (row.version !== 1) return void 0;
|
|
12
|
+
return {
|
|
13
|
+
version: 1,
|
|
14
|
+
...optionalText(row.checkpoint) ? { checkpoint: optionalText(row.checkpoint) } : {},
|
|
15
|
+
...optionalText(row.scanStartedAt) ? { scanStartedAt: optionalText(row.scanStartedAt) } : {},
|
|
16
|
+
...optionalText(row.pageToken) ? { pageToken: optionalText(row.pageToken) } : {},
|
|
17
|
+
...optionalText(row.syncToken) ? { syncToken: optionalText(row.syncToken) } : {}
|
|
18
|
+
};
|
|
19
|
+
} catch {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function encodeConnectedSourceCursor(cursor) {
|
|
24
|
+
return JSON.stringify({
|
|
25
|
+
version: 1,
|
|
26
|
+
...cursor
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
export { decodeConnectedSourceCursor, encodeConnectedSourceCursor };
|
|
@@ -1,51 +1,29 @@
|
|
|
1
1
|
import { getConnectorInstallation, listConnectorConnections } from "../storage/sqlite/connector-repository.js";
|
|
2
2
|
import "../storage/sqlite/index.js";
|
|
3
3
|
import { ComposioSessionsAdapter } from "./composio-sessions.js";
|
|
4
|
+
import { decodeConnectedSourceCursor, encodeConnectedSourceCursor } from "./connected-source-cursor.js";
|
|
4
5
|
import { scopeForComposioAction } from "./composio.js";
|
|
5
6
|
import { getConnectorDefinition } from "./catalog.js";
|
|
6
|
-
import { getConnectorInstance } from "./instances.js";
|
|
7
7
|
import { getWorkspacePath } from "../config/workspace-path-helpers.js";
|
|
8
|
+
import { getConnectorInstance } from "./instances.js";
|
|
8
9
|
import { KnowledgeIngestionService } from "../knowledge/ingestion-service.js";
|
|
9
10
|
import { ConnectedKnowledgePipeline } from "../knowledge/connected-knowledge-pipeline.js";
|
|
10
11
|
import { LocalFolderKnowledgeSourceAdapter } from "../knowledge/local-folder-adapter.js";
|
|
11
12
|
import "../knowledge/index.js";
|
|
12
13
|
import { normalizeConnectedSourceResult } from "./connected-source-normalizers.js";
|
|
14
|
+
import { sanitizeConnectedSourceValue } from "./connected-source-sanitization.js";
|
|
13
15
|
import { createHash } from "node:crypto";
|
|
14
16
|
//#region src/connectors/connected-source-ingestion.ts
|
|
15
17
|
const COMPOSIO_CONNECTED_SOURCE_TOOLKITS = new Set([
|
|
16
18
|
"gmail",
|
|
17
19
|
"googlecalendar",
|
|
18
20
|
"googledrive",
|
|
19
|
-
"googledocs",
|
|
20
|
-
"googlesheets",
|
|
21
|
-
"notion",
|
|
22
|
-
"slack",
|
|
23
21
|
"github",
|
|
24
|
-
"linear"
|
|
25
|
-
"jira",
|
|
26
|
-
"outlook",
|
|
27
|
-
"microsoft_teams",
|
|
28
|
-
"one_drive",
|
|
29
|
-
"excel"
|
|
22
|
+
"linear"
|
|
30
23
|
]);
|
|
31
|
-
const SENSITIVE_KEY_RE = /(?:^|_)(?:api_?key|token|secret|password|passwd|authorization|credential|private_?key)(?:$|_)/i;
|
|
32
|
-
const INLINE_SECRET_PATTERNS = [
|
|
33
|
-
/\bsk-[A-Za-z0-9_-]{8,}\b/g,
|
|
34
|
-
/\bghp_[A-Za-z0-9]{20,}\b/g,
|
|
35
|
-
/\bxox[baprs]-[A-Za-z0-9-]{20,}\b/g,
|
|
36
|
-
/-----BEGIN [^-]*PRIVATE KEY-----[\s\S]*?-----END [^-]*PRIVATE KEY-----/g
|
|
37
|
-
];
|
|
38
24
|
function asRecord(value) {
|
|
39
25
|
return value && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
40
26
|
}
|
|
41
|
-
function sanitizeSourceValue(value, depth = 0) {
|
|
42
|
-
if (depth > 12) return "[MaxDepth]";
|
|
43
|
-
if (typeof value === "string") return INLINE_SECRET_PATTERNS.reduce((text, pattern) => text.replace(pattern, "[REDACTED]"), value);
|
|
44
|
-
if (Array.isArray(value)) return value.map((item) => sanitizeSourceValue(item, depth + 1));
|
|
45
|
-
const record = asRecord(value);
|
|
46
|
-
if (!record) return value;
|
|
47
|
-
return Object.fromEntries(Object.entries(record).map(([key, nested]) => [key, SENSITIVE_KEY_RE.test(key) ? "[REDACTED]" : sanitizeSourceValue(nested, depth + 1)]));
|
|
48
|
-
}
|
|
49
27
|
function boundedPersonValue(value, maxLength = 320) {
|
|
50
28
|
return typeof value === "string" ? value.trim().slice(0, maxLength) : "";
|
|
51
29
|
}
|
|
@@ -66,7 +44,7 @@ function personEntities(record) {
|
|
|
66
44
|
const nested = asRecord(value);
|
|
67
45
|
if (!nested) return [];
|
|
68
46
|
const name = boundedPersonValue(nested.name, 160) || boundedPersonValue(nested.displayName, 160);
|
|
69
|
-
const email = boundedPersonValue(nested.email);
|
|
47
|
+
const email = boundedPersonValue(nested.email) || boundedPersonValue(nested.emailAddress);
|
|
70
48
|
const username = boundedPersonValue(nested.username, 160);
|
|
71
49
|
return name || email || username ? [{
|
|
72
50
|
role,
|
|
@@ -83,6 +61,7 @@ function personEntities(record) {
|
|
|
83
61
|
"user",
|
|
84
62
|
"username",
|
|
85
63
|
"owner",
|
|
64
|
+
"owners",
|
|
86
65
|
"assignee",
|
|
87
66
|
"attendees",
|
|
88
67
|
"participants"
|
|
@@ -108,14 +87,26 @@ function peopleSignals(entities) {
|
|
|
108
87
|
function connectionIdentities(identity) {
|
|
109
88
|
return [...new Set(Object.values(identity).filter((value) => typeof value === "string").map((value) => value.trim().toLowerCase()).filter(Boolean))];
|
|
110
89
|
}
|
|
90
|
+
function resultPayload(value) {
|
|
91
|
+
const root = asRecord(value) ?? {};
|
|
92
|
+
return asRecord(root.data) ?? root;
|
|
93
|
+
}
|
|
94
|
+
function paginationValue(result, ...keys) {
|
|
95
|
+
const payload = resultPayload(result);
|
|
96
|
+
const pagination = asRecord(payload.pagination) ?? asRecord(payload.pageInfo) ?? {};
|
|
97
|
+
for (const key of keys) {
|
|
98
|
+
const value = payload[key] ?? pagination[key];
|
|
99
|
+
if (typeof value === "string" && value.trim()) return value.trim();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
111
102
|
function resultToSourceItems(input) {
|
|
112
103
|
return normalizeConnectedSourceResult(input).slice(0, 200).map((entity) => {
|
|
113
104
|
const record = entity.value;
|
|
114
105
|
const people = personEntities(record);
|
|
115
106
|
const ownerIdentities = connectionIdentities(input.connectionIdentity);
|
|
116
107
|
const observedIdentities = peopleSignals(people).map((value) => value.toLowerCase());
|
|
117
|
-
const actorAttributed = entity.metadata.actorAttributed === true || input.toolkit === "gmail" || input.toolkit === "googlecalendar" || input.toolkit
|
|
118
|
-
const serialized = JSON.stringify(
|
|
108
|
+
const actorAttributed = entity.metadata.actorAttributed === true || input.toolkit === "gmail" || input.toolkit === "googlecalendar" || ["github", "googledrive"].includes(input.toolkit) && observedIdentities.some((value) => ownerIdentities.includes(value));
|
|
109
|
+
const serialized = JSON.stringify(sanitizeConnectedSourceValue(entity.value), null, 2);
|
|
119
110
|
const normalizedText = serialized.length > 8e3 ? `${serialized.slice(0, 8e3)}\n…` : serialized;
|
|
120
111
|
const contentHash = createHash("sha256").update(serialized).digest("hex");
|
|
121
112
|
return {
|
|
@@ -144,7 +135,8 @@ function resultToSourceItems(input) {
|
|
|
144
135
|
sensitivity: "personal",
|
|
145
136
|
retentionClass: "bounded",
|
|
146
137
|
synthesisPipeline: "connected_knowledge",
|
|
147
|
-
synthesisStatus: input.streamKind === "inventory" ? "ignored" : entity.synthesisStatus
|
|
138
|
+
synthesisStatus: input.streamKind === "inventory" ? "ignored" : entity.synthesisStatus,
|
|
139
|
+
deletedAt: entity.deletedAt
|
|
148
140
|
};
|
|
149
141
|
});
|
|
150
142
|
}
|
|
@@ -154,7 +146,10 @@ var ComposioKnowledgeSourceAdapter = class {
|
|
|
154
146
|
this.input = input;
|
|
155
147
|
}
|
|
156
148
|
async pull(pull) {
|
|
157
|
-
const
|
|
149
|
+
const cursor = decodeConnectedSourceCursor(pull.cursor);
|
|
150
|
+
const scanStartedAt = cursor?.scanStartedAt ?? (/* @__PURE__ */ new Date()).toISOString();
|
|
151
|
+
const warnings = pull.cursor && !cursor ? ["Stored connected-source cursor was invalid and was replaced."] : [];
|
|
152
|
+
const execute = (cursorValue) => this.input.adapter.executeWithPolicy({
|
|
158
153
|
context: {
|
|
159
154
|
principalId: "local-owner",
|
|
160
155
|
toolkits: [this.input.toolkit]
|
|
@@ -174,26 +169,52 @@ var ComposioKnowledgeSourceAdapter = class {
|
|
|
174
169
|
curated: true,
|
|
175
170
|
cachedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
176
171
|
},
|
|
177
|
-
args: this.input.buildArguments?.(
|
|
172
|
+
args: this.input.buildArguments?.({
|
|
173
|
+
...pull,
|
|
174
|
+
cursor: cursorValue
|
|
175
|
+
}) ?? this.input.arguments,
|
|
178
176
|
confirmed: true
|
|
179
177
|
});
|
|
178
|
+
let execution;
|
|
179
|
+
try {
|
|
180
|
+
execution = await execute(pull.cursor);
|
|
181
|
+
} catch (error) {
|
|
182
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
183
|
+
if (this.input.toolkit !== "googlecalendar" || !cursor?.syncToken || !/\b410\b|sync.?token/i.test(message)) throw error;
|
|
184
|
+
warnings.push("Expired Google Calendar sync token was replaced with a full sync.");
|
|
185
|
+
execution = await execute(void 0);
|
|
186
|
+
}
|
|
180
187
|
if (execution.decision !== "allowed") throw new Error(execution.reason);
|
|
188
|
+
const items = resultToSourceItems({
|
|
189
|
+
result: execution.result,
|
|
190
|
+
sourceInstanceId: pull.instanceId,
|
|
191
|
+
collectionScope: pull.collectionScope,
|
|
192
|
+
streamKind: this.input.streamKind,
|
|
193
|
+
connectorId: this.input.connectorId,
|
|
194
|
+
connectionId: this.input.connection.id,
|
|
195
|
+
actionId: this.input.actionId,
|
|
196
|
+
toolkit: this.input.toolkit,
|
|
197
|
+
agentId: this.input.agentId,
|
|
198
|
+
workspaceId: this.input.workspaceId,
|
|
199
|
+
connectionIdentity: this.input.connection.identity
|
|
200
|
+
});
|
|
201
|
+
const nextPageToken = paginationValue(execution.result, "nextPageToken", "next_page_token");
|
|
202
|
+
const nextSyncToken = paginationValue(execution.result, "nextSyncToken", "next_sync_token");
|
|
203
|
+
const completeSnapshot = this.input.streamKind === "inventory" && (this.input.toolkit === "github" || !cursor?.checkpoint);
|
|
181
204
|
return {
|
|
182
|
-
items
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
agentId: this.input.agentId,
|
|
192
|
-
workspaceId: this.input.workspaceId,
|
|
193
|
-
connectionIdentity: this.input.connection.identity
|
|
205
|
+
items,
|
|
206
|
+
nextCursor: nextPageToken ? encodeConnectedSourceCursor({
|
|
207
|
+
checkpoint: cursor?.checkpoint,
|
|
208
|
+
scanStartedAt,
|
|
209
|
+
pageToken: nextPageToken,
|
|
210
|
+
syncToken: cursor?.syncToken
|
|
211
|
+
}) : encodeConnectedSourceCursor({
|
|
212
|
+
checkpoint: scanStartedAt,
|
|
213
|
+
...nextSyncToken ? { syncToken: nextSyncToken } : {}
|
|
194
214
|
}),
|
|
195
|
-
|
|
196
|
-
warnings
|
|
215
|
+
hasMore: Boolean(nextPageToken),
|
|
216
|
+
warnings,
|
|
217
|
+
...completeSnapshot ? { snapshotExternalIds: items.map((item) => item.externalId) } : {}
|
|
197
218
|
};
|
|
198
219
|
}
|
|
199
220
|
};
|