@xopcai/xopc 0.0.309 → 0.0.311
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-XKNYlFUI.js → activity-store-DVUTs1fk.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-1S2TFECE.js → agent-avatar-dicebear-zKINl7UH.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-D2ePZKdY.js +1 -0
- package/dist/gateway/static/root/assets/{agents-CPqUMtCL.js → agents-BiD9STyv.js} +1 -1
- package/dist/gateway/static/root/assets/{api-BEUEE4f2.js → api-_aHQA8bd.js} +1 -1
- package/dist/gateway/static/root/assets/{app-link-BiBXVEvp.js → app-link-wamYbNUl.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-CgVBSqzu.js → app-management-settings-panel-C94LAxyt.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-CoWdCokb.js → appearance-settings-CP01zHvC.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-B7DmSJQj.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-C3ZA6LRS.js → archive-plugin-SwWFt5MT.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-CdgS6_zy.js → attachment-load-DdTFml9l.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-BtHL2hpg.js → automations-page-Kmr5WVFp.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-bkijiu-Y.js +7 -0
- package/dist/gateway/static/root/assets/{binary-plugins-CiDhtq_H.js → binary-plugins-47UTtDNq.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-Br00T83w.js → block-editor-DvzZkMG8.js} +3 -3
- package/dist/gateway/static/root/assets/{browser-automation-inputs-D2tILykA.js → browser-automation-inputs-C611KRBx.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automations-page-BVuEmryB.js → browser-automations-page-DrUKNL9X.js} +2 -2
- package/dist/gateway/static/root/assets/browser-settings-page-Dhf_MWCf.js +3 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-BCubrDf8.js +8 -0
- package/dist/gateway/static/root/assets/channels-settings-e4T1DEfN.js +1 -0
- package/dist/gateway/static/root/assets/{chat-terminal-dock-JsMtzDao.js → chat-terminal-dock-Bg_m7HUE.js} +2 -2
- package/dist/gateway/static/root/assets/{chunk-KS7C4IRE-Cq1tE_3b.js → chunk-KS7C4IRE-BMYIfy9x.js} +2 -2
- package/dist/gateway/static/root/assets/computer-settings-page-CosCmVsT.js +1 -0
- package/dist/gateway/static/root/assets/{connector-service-page-DZFNUTiN.js → connector-service-page-BL-hSR7_.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-C0WWxnxJ.js +2 -0
- package/dist/gateway/static/root/assets/date-picker-DqYFVasF.js +1 -0
- package/dist/gateway/static/root/assets/{dependency-picker-B-BcuG1y.js → dependency-picker-DCyyFLKp.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-CdBBhhdY.js → desktop-pet-CFnnpRA_.js} +1 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-U5wWRH4c.js +1 -0
- package/dist/gateway/static/root/assets/device-pairing-wizard-BhHxvFO1.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-BFp5eKtY.js → extension-debug-page-DA8WJ3-E.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-DL3vyyH6.js → extension-page-C2BIB88m.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-BXtvdAsY.js → extension-settings-page-kpYo979N.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-xAOGtenO.js → gateway-config-swr-DUDX42qY.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-realtime-BuaTsMSi.js → gateway-realtime-CGOW0-b4.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-D4um_sV7.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-CE9t1yTa.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-BwDxKHd4.js → gateway-startup-retry-Cf8OxlvY.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-C7Ezx8Du.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-wGMeI_yW.js → image-generation-api-D2YorS--.js} +1 -1
- package/dist/gateway/static/root/assets/{imports-page-zexFT5Rq.js → imports-page-NPk698vI.js} +1 -1
- package/dist/gateway/static/root/assets/index-1wIKA-kM.css +1 -0
- package/dist/gateway/static/root/assets/index-DxYitLp8.js +79 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CutG9zLh.js → keyboard-shortcuts-settings-BhreF0_O.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-CPmynb3x.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-CJy6I7Dt.js → local-apps-page-DOZZBdqj.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-DPZ79W1-.js → locale-store-DA0Z5jM_.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-egGcPHNi.js → logs-page-M8kz26yo.js} +2 -2
- package/dist/gateway/static/root/assets/{management-settings-BQhIOELc.js → management-settings-JLqHYQvY.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-view-p2P5hP1U.js → markdown-view-BDpcjR_Z.js} +1 -1
- package/dist/gateway/static/root/assets/markdown-view-DSjfHfaW.css +1 -0
- package/dist/gateway/static/root/assets/{media-plugins-CsBylqlN.js → media-plugins-B75SWUJd.js} +1 -1
- package/dist/gateway/static/root/assets/messages-4BtQKYlM.js +3 -0
- package/dist/gateway/static/root/assets/note-detail-panel-B_Ft0M32.js +5 -0
- package/dist/gateway/static/root/assets/notes-page-C32mxSD-.js +8 -0
- package/dist/gateway/static/root/assets/{page-tabs-ChQ4jJFs.js → page-tabs-CMlQUzT6.js} +1 -1
- package/dist/gateway/static/root/assets/{popover-select-9i-ZtHXL.js → popover-select-B-GDnZO9.js} +1 -1
- package/dist/gateway/static/root/assets/preview-open-alternatives-cZ2hszQT.js +1 -0
- package/dist/gateway/static/root/assets/{product-open-page-BADxWEdP.js → product-open-page-CPoSbglF.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-DYttWua0.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-D46drWbl.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-B_e_nZSN.js → registry-api-C0DCx3wv.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-C9n9Nuhi.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-D-pwiIyp.js → runtime-tools-settings-panel-bMLWRApp.js} +2 -2
- package/dist/gateway/static/root/assets/scenes-page-Dw3hmHAr.js +1 -0
- package/dist/gateway/static/root/assets/{schema-form-IWmb05DX.js → schema-form-UVJV_7AS.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-C8P6ff91.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-whpUsAy3.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-B0veRBZs.js → settings-form-section-BqzOqonM.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-DQ9RJ8-b.js +1 -0
- package/dist/gateway/static/root/assets/settings-page-layout-D3Spald3.js +1 -0
- package/dist/gateway/static/root/assets/{settings-shell-layer-context-DCp6ykjQ.js → settings-shell-layer-context-BTQUDoJ2.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-C8u601m8.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-CirpgkfD.js → share-preview-page-BcgYzA7y.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-Bv-2rZ8e.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-LM-cgWUS.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-ggmb7rCW.js +2 -0
- package/dist/gateway/static/root/assets/{skills-page.utils-B42mpWKV.js → skills-page.utils-ADABzrtk.js} +1 -1
- package/dist/gateway/static/root/assets/system-settings-panel-DfkcW_Za.js +1 -0
- package/dist/gateway/static/root/assets/task-detail-page-DC4yqDFd.js +1 -0
- package/dist/gateway/static/root/assets/{theme-store-BFbj_2Tu.js → theme-store-CegIlB8d.js} +1 -1
- package/dist/gateway/static/root/assets/tunnel-api-CTuwTdMm.js +1 -0
- package/dist/gateway/static/root/assets/use-autosave-5ZDd9XKh.js +1 -0
- package/dist/gateway/static/root/assets/user-model-page-BFKFhdZ0.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-BZbKQ8HT.js → voice-api-key-field-D3urfd-n.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-SKCeQLrH.js → voice-config-api-DTyMdGOR.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-BRVTTXNG.js → work-discovery-overlay-JzM3Ylbs.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-D2kuwv5e.js → workflow-run-setup-panel-Bn2CtRdB.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-BiCmt98A.js +6 -0
- package/dist/gateway/static/root/connector-icons/SOURCES.md +0 -2
- package/dist/gateway/static/root/index.html +17 -20
- package/dist/gateway/static/root/notification-sw.js +1 -1
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/notifications.js +12 -11
- package/dist/packages/gateway-contract/src/proactive.js +6 -6
- package/dist/packages/gateway-contract/src/project-monitoring.js +4 -4
- package/dist/packages/gateway-contract/src/project-operating.js +1 -4
- package/dist/src/agent/agent-manager.d.ts +2 -6
- package/dist/src/agent/agent-manager.js +2 -1
- package/dist/src/agent/background-review/run-background-review.js +1 -1
- package/dist/src/agent/commands/command-registry.js +1 -1
- package/dist/src/agent/context/execution-scope.js +1 -1
- package/dist/src/agent/external-tools/cliProvider.d.ts +47 -0
- package/dist/src/agent/external-tools/cliProvider.js +317 -0
- package/dist/src/agent/external-tools/composio-provider.js +3 -3
- package/dist/src/agent/external-tools/gateway-tools.js +8 -2
- package/dist/src/agent/external-tools/index.js +6 -0
- package/dist/src/agent/external-tools/service.js +1 -1
- package/dist/src/agent/external-tools/types.d.ts +1 -1
- package/dist/src/agent/external-tools/types.js +1 -0
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
- package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +1 -1
- package/dist/src/agent/memory/turn-provenance.js +2 -1
- package/dist/src/agent/service/parse-outbound-session-key.js +1 -1
- package/dist/src/agent/service.js +1 -0
- package/dist/src/agent/service.types.d.ts +2 -0
- package/dist/src/agent/tools/factory.d.ts +2 -0
- package/dist/src/agent/tools/factory.js +3 -2
- package/dist/src/agent/tools/search/providers/xopc-cloud.d.ts +20 -0
- package/dist/src/agent/tools/search/providers/xopc-cloud.js +56 -0
- package/dist/src/agent/tools/search/registry.d.ts +4 -2
- package/dist/src/agent/tools/search/registry.js +5 -3
- package/dist/src/agent/tools/xopc-use-tool.d.ts +4 -2
- package/dist/src/agent/tools/xopc-use-tool.js +46 -43
- package/dist/src/automations/service/automation-service.d.ts +0 -4
- package/dist/src/automations/service/automation-service.js +0 -31
- package/dist/src/capabilities/store-connector.js +46 -0
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/project.js +1 -1
- package/dist/src/config/schema.d.ts +4 -4
- package/dist/src/config/schema.js +2 -12
- package/dist/src/config/web-patch.js +0 -5
- package/dist/src/connectors/account-selection.d.ts +14 -0
- package/dist/src/connectors/account-selection.js +26 -0
- package/dist/src/connectors/china-catalog.js +93 -226
- package/dist/src/connectors/cli/adapterRegistry.d.ts +4 -0
- package/dist/src/connectors/cli/adapterRegistry.js +26 -0
- package/dist/src/connectors/cli/adapters/lark.d.ts +2 -0
- package/dist/src/connectors/cli/adapters/lark.js +143 -0
- package/dist/src/connectors/cli/adapters/larkShortcuts.d.ts +3 -0
- package/dist/src/connectors/cli/adapters/larkShortcuts.js +64 -0
- package/dist/src/connectors/cli/adapters/wecom.d.ts +2 -0
- package/dist/src/connectors/cli/adapters/wecom.js +97 -0
- package/dist/src/connectors/cli/adapters/wps365/bundle.js +575 -0
- package/dist/src/connectors/cli/adapters/wps365.d.ts +2 -0
- package/dist/src/connectors/cli/adapters/wps365.js +115 -0
- package/dist/src/connectors/cli/assets.d.ts +3 -0
- package/dist/src/connectors/cli/assets.js +44 -0
- package/dist/src/connectors/cli/authorization.d.ts +16 -0
- package/dist/src/connectors/cli/authorization.js +184 -0
- package/dist/src/connectors/cli/distributions.d.ts +4 -0
- package/dist/src/connectors/cli/distributions.js +69 -0
- package/dist/src/connectors/cli/installer.d.ts +5 -0
- package/dist/src/connectors/cli/installer.js +102 -0
- package/dist/src/connectors/cli/lifecycle.d.ts +1 -0
- package/dist/src/connectors/cli/lifecycle.js +19 -0
- package/dist/src/connectors/cli/process.d.ts +18 -0
- package/dist/src/connectors/cli/process.js +100 -0
- package/dist/src/connectors/cli/protocol.d.ts +10 -0
- package/dist/src/connectors/cli/protocol.js +63 -0
- package/dist/src/connectors/cli/runtime.d.ts +10 -0
- package/dist/src/connectors/cli/runtime.js +93 -0
- package/dist/src/connectors/cli/store.d.ts +35 -0
- package/dist/src/connectors/cli/store.js +121 -0
- package/dist/src/connectors/cli/types.d.ts +73 -0
- package/dist/src/connectors/composio-backends.js +1 -1
- package/dist/src/connectors/composio-sessions.d.ts +1 -0
- package/dist/src/connectors/composio-sessions.js +8 -3
- package/dist/src/connectors/composio.js +1 -1
- package/dist/src/connectors/connection-candidates.js +22 -3
- package/dist/src/connectors/connection-recovery-service.d.ts +1 -0
- package/dist/src/connectors/connection-recovery-service.js +53 -8
- package/dist/src/connectors/health.js +52 -0
- package/dist/src/connectors/instances.js +5 -1
- package/dist/src/connectors/lifecycle.js +2 -0
- package/dist/src/connectors/principal.js +2 -1
- package/dist/src/connectors/runtime-adapter-registry.js +31 -0
- package/dist/src/connectors/types.d.ts +13 -1
- package/dist/src/connectors/usage.js +1 -1
- package/dist/src/connectors/workflow-preflight.js +8 -4
- package/dist/src/extensions/install.js +1 -1
- package/dist/src/gateway/hono/app.d.ts +2 -0
- package/dist/src/gateway/hono/app.js +4 -2
- package/dist/src/gateway/hono/lib/config-payload.d.ts +0 -15
- package/dist/src/gateway/hono/lib/config-payload.js +0 -11
- package/dist/src/gateway/hono/routes/cli-connectors.d.ts +3 -0
- package/dist/src/gateway/hono/routes/cli-connectors.js +219 -0
- package/dist/src/gateway/hono/routes/config-patch/gateway.d.ts +2 -2
- package/dist/src/gateway/hono/routes/config-patch/gateway.js +0 -59
- package/dist/src/gateway/hono/routes/config.js +0 -16
- package/dist/src/gateway/hono/routes/connectors.js +21 -22
- package/dist/src/gateway/hono/routes/deps.d.ts +2 -0
- package/dist/src/gateway/hono/routes/lazy-bundles.js +4 -17
- package/dist/src/gateway/hono/routes/projects.js +1 -1
- package/dist/src/gateway/hono/routes/public-gateway.js +0 -1
- package/dist/src/gateway/hono/routes/scenes.d.ts +3 -0
- package/dist/src/gateway/hono/routes/scenes.js +142 -0
- package/dist/src/gateway/hono/routes/tasks.js +0 -46
- package/dist/src/gateway/hono/routes/user-model.js +54 -1
- package/dist/src/gateway/scenes/browserNotifications.d.ts +4 -0
- package/dist/src/gateway/scenes/browserNotifications.js +54 -0
- package/dist/src/gateway/scenes/host.d.ts +34 -0
- package/dist/src/gateway/scenes/host.js +129 -0
- package/dist/src/gateway/scenes/mailContext.d.ts +32 -0
- package/dist/src/gateway/scenes/mailContext.js +235 -0
- package/dist/src/gateway/security/gateway-scopes.js +0 -4
- package/dist/src/gateway/security/index.js +1 -1
- package/dist/src/gateway/service/config-coordinator.d.ts +1 -10
- package/dist/src/gateway/service/config-coordinator.js +0 -16
- package/dist/src/gateway/service/run-gateway-agent.js +1 -1
- package/dist/src/gateway/service.d.ts +4 -25
- package/dist/src/gateway/service.js +44 -99
- package/dist/src/gateway/session-context-summary.js +2 -1
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/infra/unhandled-rejections.js +1 -1
- package/dist/src/migrations/runner.js +1 -4
- package/dist/src/notifications/browser-endpoint.d.ts +2 -0
- package/dist/src/notifications/browser-endpoint.js +13 -0
- package/dist/src/notifications/browserSubscriptions.d.ts +20 -0
- package/dist/src/notifications/browserSubscriptions.js +59 -0
- package/dist/src/notifications/browserTransport.d.ts +9 -0
- package/dist/src/notifications/browserTransport.js +64 -0
- package/dist/src/notifications/dispatch.d.ts +46 -0
- package/dist/src/notifications/dispatch.js +109 -0
- package/dist/src/notifications/domain-delivery.d.ts +21 -0
- package/dist/src/notifications/planner.js +0 -36
- package/dist/src/notifications/quietHours.d.ts +6 -0
- package/dist/src/notifications/quietHours.js +23 -0
- package/dist/src/notifications/resultOutbox.d.ts +23 -0
- package/dist/src/notifications/resultOutbox.js +49 -0
- package/dist/src/notifications/service.d.ts +18 -4
- package/dist/src/notifications/service.js +42 -61
- package/dist/src/notifications/store.d.ts +2 -1
- package/dist/src/notifications/store.js +7 -8
- package/dist/src/projects/project-service.d.ts +1 -4
- package/dist/src/projects/project-service.js +2 -30
- package/dist/src/projects/workspace.js +1 -1
- package/dist/src/providers/model-catalog-persistence.js +19 -1
- package/dist/src/providers/model-catalog-store.js +1 -0
- package/dist/src/providers/model-catalog-types.d.ts +17 -0
- package/dist/src/providers/xopc-cloud-model-source.js +27 -0
- package/dist/src/scenes/agentExecutor.d.ts +8 -0
- package/dist/src/scenes/agentExecutor.js +63 -0
- package/dist/src/scenes/contracts.d.ts +118 -0
- package/dist/src/scenes/contracts.js +145 -0
- package/dist/src/scenes/execution.d.ts +56 -0
- package/dist/src/scenes/execution.js +168 -0
- package/dist/src/scenes/httpServices.d.ts +34 -0
- package/dist/src/scenes/inbox.d.ts +16 -0
- package/dist/src/scenes/inbox.js +68 -0
- package/dist/src/scenes/mailContext.d.ts +20 -0
- package/dist/src/scenes/mailContext.js +106 -0
- package/dist/src/scenes/mailObservations.d.ts +20 -0
- package/dist/src/scenes/mailObservations.js +107 -0
- package/dist/src/scenes/maintenance.d.ts +3 -0
- package/dist/src/scenes/maintenance.js +24 -0
- package/dist/src/scenes/metrics.d.ts +35 -0
- package/dist/src/scenes/metrics.js +94 -0
- package/dist/src/scenes/notificationEligibility.d.ts +17 -0
- package/dist/src/scenes/notificationEligibility.js +72 -0
- package/dist/src/scenes/notificationPublication.d.ts +7 -0
- package/dist/src/scenes/notificationPublication.js +43 -0
- package/dist/src/scenes/preferences.d.ts +40 -0
- package/dist/src/scenes/preferences.js +108 -0
- package/dist/src/scenes/readiness.d.ts +7 -0
- package/dist/src/scenes/readiness.js +20 -0
- package/dist/src/scenes/repository.d.ts +174 -0
- package/dist/src/scenes/repository.js +740 -0
- package/dist/src/scenes/resultNotifications.d.ts +17 -0
- package/dist/src/scenes/resultNotifications.js +204 -0
- package/dist/src/scenes/runtime.d.ts +25 -0
- package/dist/src/scenes/runtime.js +101 -0
- package/dist/src/scenes/schedule.d.ts +9 -0
- package/dist/src/scenes/schedule.js +45 -0
- package/dist/src/scenes/service.d.ts +29 -0
- package/dist/src/scenes/service.js +116 -0
- package/dist/src/scenes/templates.d.ts +64 -0
- package/dist/src/scenes/templates.js +76 -0
- package/dist/src/scenes/userNotes.d.ts +10 -0
- package/dist/src/scenes/userNotes.js +34 -0
- package/dist/src/session/resolve-session.js +2 -1
- package/dist/src/session/store.js +2 -1
- package/dist/src/share/share-config.js +0 -5
- package/dist/src/share/site-share-config.js +0 -5
- package/dist/src/storage/sqlite/connection-wait-repository.js +20 -7
- package/dist/src/storage/sqlite/connection.js +1 -1
- package/dist/src/storage/sqlite/connector-account-repository.js +1 -0
- package/dist/src/storage/sqlite/connector-sync-policy-repository.d.ts +0 -4
- package/dist/src/storage/sqlite/connector-sync-policy-repository.js +3 -17
- package/dist/src/storage/sqlite/conversation-repository.js +2 -1
- package/dist/src/storage/sqlite/index.js +2 -1
- package/dist/src/storage/sqlite/migrations/187_cli_connectors.sql +34 -0
- package/dist/src/storage/sqlite/migrations/188_scene_storage.sql +2 -0
- package/dist/src/storage/sqlite/migrations/189_scene_source_health.sql +8 -0
- package/dist/src/storage/sqlite/migrations/conversation-backup.d.ts +2 -0
- package/dist/src/storage/sqlite/migrations/conversation-backup.js +7 -3
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +20 -44
- package/dist/src/storage/sqlite/migrations/scene-reset.d.ts +5 -0
- package/dist/src/storage/sqlite/migrations/scene-reset.js +40 -0
- package/dist/src/storage/sqlite/scenes-schema.d.ts +8 -0
- package/dist/src/storage/sqlite/scenes-schema.js +61 -0
- package/dist/src/storage/sqlite/schema.js +4 -10
- package/dist/src/storage/sqlite/schemas/notifications.sql +65 -0
- package/dist/src/storage/sqlite/schemas/scenes.sql +212 -0
- package/dist/src/storage/sqlite/session-read-repository.d.ts +8 -0
- package/dist/src/storage/sqlite/session-read-repository.js +35 -0
- package/dist/src/storage/sqlite/session-repository.d.ts +1 -1
- package/dist/src/storage/sqlite/session-repository.js +2 -25
- package/dist/src/storage/sqlite/sql-assets.d.ts +2 -0
- package/dist/src/storage/sqlite/sql-assets.js +18 -0
- package/dist/src/storage/sqlite/transaction.d.ts +2 -0
- package/dist/src/storage/sqlite/transaction.js +20 -1
- package/dist/src/tasks/home-query-service.d.ts +0 -2
- package/dist/src/tasks/home-query-service.js +13 -43
- package/dist/src/tasks/index.d.ts +0 -1
- package/dist/src/tasks/index.js +4 -5
- package/dist/src/tasks/project-operating-view-service.js +1 -4
- package/dist/src/tui/backends/embedded-backend.js +1 -1
- package/dist/src/tui/tui-commands.js +1 -1
- package/dist/src/user-model/goals.d.ts +10 -0
- package/dist/src/user-model/goals.js +29 -1
- package/dist/src/user-model/index.js +2 -2
- package/dist/src/voice/realtime/memory-context.js +2 -1
- package/dist/src/workflows/service/workflow-run-service.js +1 -1
- package/package.json +4 -2
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-f0-YFMUz.js +0 -1
- package/dist/gateway/static/root/assets/api-CN4id43t.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-CexHOcWg.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-onJPfmO6.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-BgVTyPFY.js +0 -3
- package/dist/gateway/static/root/assets/capabilities-settings-panel-Dra8wj1S.js +0 -8
- package/dist/gateway/static/root/assets/channels-settings-CkxiMDJ4.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-Dtder4G_.js +0 -1
- package/dist/gateway/static/root/assets/computer-settings-page-DHerePwo.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-cl9ZrV4D.js +0 -2
- package/dist/gateway/static/root/assets/cron-expression-DAhdv_Xv.js +0 -2
- package/dist/gateway/static/root/assets/date-picker-PacO1m3a.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-Gy03NgMI.js +0 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-aV25nKag.js +0 -1
- package/dist/gateway/static/root/assets/external-link-DjqjBmc3.js +0 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-BG95uGVW.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-Dcr2Ikeh.js +0 -1
- package/dist/gateway/static/root/assets/globe-DSSGFWFn.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-DOy3alvT.js +0 -1
- package/dist/gateway/static/root/assets/home-page-CDm3dGVy.js +0 -1
- package/dist/gateway/static/root/assets/index-D-vczw_0.css +0 -1
- package/dist/gateway/static/root/assets/index-DJo4DimT.js +0 -79
- package/dist/gateway/static/root/assets/loader-circle-CifKLtgG.js +0 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-CwLvTwjn.js +0 -2
- package/dist/gateway/static/root/assets/markdown-view-Y68dCxuc.css +0 -1
- package/dist/gateway/static/root/assets/messages-BiYTyLJr.js +0 -3
- package/dist/gateway/static/root/assets/note-detail-panel-c2k5Uz6X.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-BLQWJMhf.js +0 -8
- package/dist/gateway/static/root/assets/preview-open-alternatives-9B5W7nVE.js +0 -1
- package/dist/gateway/static/root/assets/proactive-page-iOjI0d_e.js +0 -1
- package/dist/gateway/static/root/assets/project-detail-page-BcxbQn2M.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-BuSvld0O.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CFS8LQKW.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-DZjc__ok.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-C1SM5B93.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-CxRWyWYe.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-layout-X1x-2Cp9.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-D9Rl7Tec.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-CwCThBs0.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-DG6VGbOX.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-BdRJ2vnL.js +0 -2
- package/dist/gateway/static/root/assets/system-settings-panel-DXIZpAvU.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-QXo9LJly.js +0 -1
- package/dist/gateway/static/root/assets/tunnel-api-Db2guRdW.js +0 -1
- package/dist/gateway/static/root/assets/use-autosave-DDY9qoXZ.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-CzPmMkaO.js +0 -2
- package/dist/gateway/static/root/assets/workflows-page-CQXtiYtq.js +0 -6
- package/dist/gateway/static/root/connector-icons/wps-calendar.svg +0 -14
- package/dist/gateway/static/root/connector-icons/wps-mail.svg +0 -7
- package/dist/src/connectors/source-change-publisher.d.ts +0 -17
- package/dist/src/connectors/source-change-publisher.js +0 -151
- package/dist/src/gateway/heartbeat/check-store.d.ts +0 -18
- package/dist/src/gateway/heartbeat/check-store.js +0 -74
- package/dist/src/gateway/heartbeat/index.d.ts +0 -1
- package/dist/src/gateway/heartbeat/index.js +0 -2
- package/dist/src/gateway/heartbeat/service.d.ts +0 -55
- package/dist/src/gateway/heartbeat/service.js +0 -228
- package/dist/src/gateway/hono/routes/proactive-control.d.ts +0 -3
- package/dist/src/gateway/hono/routes/proactive-control.js +0 -135
- package/dist/src/gateway/hono/routes/proactive.d.ts +0 -4
- package/dist/src/gateway/hono/routes/proactive.js +0 -164
- package/dist/src/gateway/hono/routes/workspace.d.ts +0 -3
- package/dist/src/gateway/hono/routes/workspace.js +0 -62
- package/dist/src/gateway/workspace-heartbeat-path.d.ts +0 -3
- package/dist/src/gateway/workspace-heartbeat-path.js +0 -14
- package/dist/src/migrations/conversation-routing-config.d.ts +0 -2
- package/dist/src/migrations/conversation-routing-config.js +0 -42
- package/dist/src/notifications/proactive-channel.d.ts +0 -8
- package/dist/src/notifications/proactive-channel.js +0 -60
- package/dist/src/notifications/proactive-policy.d.ts +0 -3
- package/dist/src/notifications/proactive-policy.js +0 -35
- package/dist/src/notifications/web-push.d.ts +0 -19
- package/dist/src/notifications/web-push.js +0 -185
- package/dist/src/proactive/actions/service.d.ts +0 -1
- package/dist/src/proactive/actions/service.js +0 -82
- package/dist/src/proactive/events/envelope.d.ts +0 -2
- package/dist/src/proactive/events/envelope.js +0 -54
- package/dist/src/proactive/events/product-event-bridge.d.ts +0 -7
- package/dist/src/proactive/events/product-event-bridge.js +0 -87
- package/dist/src/proactive/events/publisher.d.ts +0 -4
- package/dist/src/proactive/events/repository.d.ts +0 -9
- package/dist/src/proactive/events/repository.js +0 -63
- package/dist/src/proactive/events/types.d.ts +0 -44
- package/dist/src/proactive/events/types.js +0 -15
- package/dist/src/proactive/execution/agent-executor.d.ts +0 -21
- package/dist/src/proactive/execution/agent-executor.js +0 -125
- package/dist/src/proactive/execution/authorization.d.ts +0 -7
- package/dist/src/proactive/execution/authorization.js +0 -71
- package/dist/src/proactive/execution/context.d.ts +0 -49
- package/dist/src/proactive/execution/context.js +0 -408
- package/dist/src/proactive/execution/insight.d.ts +0 -14
- package/dist/src/proactive/execution/insight.js +0 -132
- package/dist/src/proactive/execution/repository.d.ts +0 -28
- package/dist/src/proactive/execution/repository.js +0 -211
- package/dist/src/proactive/execution/types.d.ts +0 -80
- package/dist/src/proactive/execution/worker.d.ts +0 -15
- package/dist/src/proactive/execution/worker.js +0 -146
- package/dist/src/proactive/experience.d.ts +0 -89
- package/dist/src/proactive/experience.js +0 -195
- package/dist/src/proactive/follow-ups.d.ts +0 -128
- package/dist/src/proactive/follow-ups.js +0 -182
- package/dist/src/proactive/inbox/cards.d.ts +0 -21
- package/dist/src/proactive/inbox/cards.js +0 -276
- package/dist/src/proactive/inbox/delivery.d.ts +0 -6
- package/dist/src/proactive/inbox/delivery.js +0 -54
- package/dist/src/proactive/inbox/digest.d.ts +0 -8
- package/dist/src/proactive/inbox/digest.js +0 -123
- package/dist/src/proactive/inbox/lifecycle.d.ts +0 -4
- package/dist/src/proactive/inbox/lifecycle.js +0 -62
- package/dist/src/proactive/inbox/notification-policy.d.ts +0 -1
- package/dist/src/proactive/inbox/notification-policy.js +0 -25
- package/dist/src/proactive/inbox/repository.d.ts +0 -25
- package/dist/src/proactive/inbox/repository.js +0 -244
- package/dist/src/proactive/inbox/service.d.ts +0 -23
- package/dist/src/proactive/inbox/service.js +0 -46
- package/dist/src/proactive/inbox/types.d.ts +0 -64
- package/dist/src/proactive/inbox/worker.d.ts +0 -13
- package/dist/src/proactive/inbox/worker.js +0 -71
- package/dist/src/proactive/index.d.ts +0 -20
- package/dist/src/proactive/index.js +0 -14
- package/dist/src/proactive/mail-thread.d.ts +0 -13
- package/dist/src/proactive/mail-thread.js +0 -55
- package/dist/src/proactive/maintenance.d.ts +0 -4
- package/dist/src/proactive/maintenance.js +0 -28
- package/dist/src/proactive/metrics.d.ts +0 -10
- package/dist/src/proactive/metrics.js +0 -28
- package/dist/src/proactive/policy/presence.d.ts +0 -2
- package/dist/src/proactive/policy/presence.js +0 -30
- package/dist/src/proactive/policy/service.d.ts +0 -54
- package/dist/src/proactive/policy/service.js +0 -123
- package/dist/src/proactive/routing/batch-repository.d.ts +0 -27
- package/dist/src/proactive/routing/batch-repository.js +0 -57
- package/dist/src/proactive/routing/matcher.d.ts +0 -5
- package/dist/src/proactive/routing/matcher.js +0 -57
- package/dist/src/proactive/routing/types.d.ts +0 -44
- package/dist/src/proactive/routing/types.js +0 -1
- package/dist/src/proactive/scenarios/control.d.ts +0 -52
- package/dist/src/proactive/scenarios/control.js +0 -75
- package/dist/src/proactive/scenarios/prompt-composer.d.ts +0 -14
- package/dist/src/proactive/scenarios/prompt-composer.js +0 -26
- package/dist/src/proactive/scenarios/repository.d.ts +0 -23
- package/dist/src/proactive/scenarios/repository.js +0 -174
- package/dist/src/proactive/scenarios/service.d.ts +0 -15
- package/dist/src/proactive/scenarios/service.js +0 -26
- package/dist/src/proactive/scenarios/types.d.ts +0 -43
- package/dist/src/proactive/scenarios/types.js +0 -1
- package/dist/src/proactive/service.d.ts +0 -25
- package/dist/src/proactive/service.js +0 -78
- package/dist/src/proactive/source-freshness.d.ts +0 -8
- package/dist/src/proactive/source-freshness.js +0 -28
- package/dist/src/proactive/status.d.ts +0 -2
- package/dist/src/proactive/status.js +0 -22
- package/dist/src/proactive/temporal/schedule.d.ts +0 -3
- package/dist/src/proactive/temporal/schedule.js +0 -68
- package/dist/src/proactive/temporal/worker.d.ts +0 -17
- package/dist/src/proactive/temporal/worker.js +0 -129
- package/dist/src/tasks/project-monitoring-service.d.ts +0 -32
- package/dist/src/tasks/project-monitoring-service.js +0 -118
- /package/dist/src/{proactive/execution → connectors/cli}/types.js +0 -0
- /package/dist/src/{proactive/events/publisher.js → notifications/domain-delivery.js} +0 -0
- /package/dist/src/{proactive/inbox/types.js → scenes/httpServices.js} +0 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { getConnectorConnection, getConnectorInstallation, init_connector_repository } from "../../storage/sqlite/connector-repository.js";
|
|
2
|
+
import { ComposioSessionsAdapter } from "../../connectors/composio-sessions.js";
|
|
3
|
+
import { getConnectorDefinition } from "../../connectors/catalog.js";
|
|
4
|
+
import { normalizeConnectedSourceResult } from "../../connectors/connected-source-normalizers.js";
|
|
5
|
+
import { sanitizeConnectedSourceValue } from "../../connectors/connected-source-sanitization.js";
|
|
6
|
+
import { sceneContentHash } from "../../scenes/contracts.js";
|
|
7
|
+
import { SceneSourceNotReady, sceneSourceFailureReason } from "../../scenes/readiness.js";
|
|
8
|
+
import { SceneMailContextProvider } from "../../scenes/mailContext.js";
|
|
9
|
+
import { createHash } from "node:crypto";
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
//#region src/gateway/scenes/mailContext.ts
|
|
12
|
+
init_connector_repository();
|
|
13
|
+
const ACTION = "GMAIL_FETCH_MESSAGE_BY_THREAD_ID";
|
|
14
|
+
function record(value) {
|
|
15
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
16
|
+
}
|
|
17
|
+
/** Reads only the delegated thread; never starts mailbox learning or persists raw mail. */
|
|
18
|
+
var GatewaySceneMailContext = class extends SceneMailContextProvider {
|
|
19
|
+
constructor(connectionDb, now = Date.now, adapter = new ComposioSessionsAdapter()) {
|
|
20
|
+
super(connectionDb, now);
|
|
21
|
+
this.connectionDb = connectionDb;
|
|
22
|
+
this.now = now;
|
|
23
|
+
this.adapter = adapter;
|
|
24
|
+
}
|
|
25
|
+
recordRequest(principal, accountId) {
|
|
26
|
+
this.connectionDb.prepare(`INSERT INTO scene_connector_usage VALUES (?, ?, ?, ?, 1)
|
|
27
|
+
ON CONFLICT(owner_id, workspace_id, account_id, utc_day) DO UPDATE SET request_count = request_count + 1`).run(principal.ownerId, principal.workspaceId, accountId, Math.floor(this.now() / 864e5));
|
|
28
|
+
}
|
|
29
|
+
listAccounts(principal) {
|
|
30
|
+
return this.connectionDb.prepare(`SELECT a.id, a.label, a.identity_json, c.connector_id FROM connector_accounts a
|
|
31
|
+
JOIN connector_connections c ON c.id = a.current_connection_id AND c.account_id = a.id
|
|
32
|
+
AND c.principal_id = a.principal_id AND c.connector_id = a.connector_id
|
|
33
|
+
JOIN connector_installations i ON i.id = c.installation_id AND i.principal_id = a.principal_id AND i.connector_id = a.connector_id
|
|
34
|
+
WHERE a.principal_id = ? AND a.enabled = 1 AND c.status = 'active' AND c.provider = 'composio'
|
|
35
|
+
AND i.enabled = 1 AND i.confirmation_policy <> 'always'
|
|
36
|
+
AND json_array_length(i.allowed_agent_ids_json) = 0 AND a.allowed_agent_ids_json IS NULL
|
|
37
|
+
AND (i.selected_account_ids_json = 'null' OR EXISTS (SELECT 1 FROM json_each(i.selected_account_ids_json) WHERE value = a.id))
|
|
38
|
+
AND (c.expires_at IS NULL OR julianday(c.expires_at) > julianday(?, 'unixepoch')) ORDER BY a.id LIMIT 100`).all(principal.ownerId, this.now() / 1e3).filter((row) => {
|
|
39
|
+
const definition = getConnectorDefinition(String(row.connector_id));
|
|
40
|
+
return definition?.runtime.type === "composio" && definition.runtime.toolkit === "gmail";
|
|
41
|
+
}).map((row) => {
|
|
42
|
+
const identity = record(JSON.parse(String(row.identity_json)));
|
|
43
|
+
return {
|
|
44
|
+
id: String(row.id),
|
|
45
|
+
label: String(row.label || identity.email || identity.name || row.id).slice(0, 300)
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
authorizedAccounts(activation) {
|
|
50
|
+
if (activation.scope.kind !== "objects" || activation.scope.ids.length !== 1) return [];
|
|
51
|
+
const source = this.connectionDb.prepare("SELECT account_id FROM scene_mail_sources WHERE id = ? AND owner_id = ? AND workspace_id = ?").get(activation.scope.ids[0], activation.ownerId, activation.workspaceId);
|
|
52
|
+
return source && activation.permissions.accountIds.includes(String(source.account_id)) && this.listAccounts(activation).some((account) => account.id === source.account_id) ? [String(source.account_id)] : [];
|
|
53
|
+
}
|
|
54
|
+
listSources(principal, limit = 50, afterId = "") {
|
|
55
|
+
const accounts = new Set(this.listAccounts(principal).map((account) => account.id));
|
|
56
|
+
return this.connectionDb.prepare("SELECT id, account_id, subject, sender FROM scene_mail_sources WHERE owner_id = ? AND workspace_id = ? AND id > ? ORDER BY id LIMIT ?").all(principal.ownerId, principal.workspaceId, afterId, limit).filter((row) => accounts.has(String(row.account_id))).map((row) => ({
|
|
57
|
+
id: String(row.id),
|
|
58
|
+
accountId: String(row.account_id),
|
|
59
|
+
subject: String(row.subject),
|
|
60
|
+
sender: String(row.sender)
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
async searchSources(principal, value, signal) {
|
|
64
|
+
const { accountId, query } = z.strictObject({
|
|
65
|
+
accountId: z.string().min(1).max(200),
|
|
66
|
+
query: z.string().trim().min(1).max(500)
|
|
67
|
+
}).parse(value);
|
|
68
|
+
if (!this.listAccounts(principal).some((account) => account.id === accountId)) throw new Error("Mail account is not available for scene reads");
|
|
69
|
+
const account = this.connectionDb.prepare("SELECT current_connection_id FROM connector_accounts WHERE id = ?").get(accountId);
|
|
70
|
+
const connection = getConnectorConnection(String(account.current_connection_id));
|
|
71
|
+
const installation = getConnectorInstallation(connection.installationId);
|
|
72
|
+
signal.throwIfAborted();
|
|
73
|
+
this.recordRequest(principal, accountId);
|
|
74
|
+
const response = await this.adapter.executeWithPolicy({
|
|
75
|
+
context: {
|
|
76
|
+
principalId: principal.ownerId,
|
|
77
|
+
toolkits: ["gmail"]
|
|
78
|
+
},
|
|
79
|
+
connection,
|
|
80
|
+
installation,
|
|
81
|
+
signal,
|
|
82
|
+
action: {
|
|
83
|
+
connectorId: connection.connectorId,
|
|
84
|
+
toolkit: "gmail",
|
|
85
|
+
actionId: "GMAIL_FETCH_EMAILS",
|
|
86
|
+
scope: "read",
|
|
87
|
+
curated: true,
|
|
88
|
+
cachedAt: new Date(this.now()).toISOString()
|
|
89
|
+
},
|
|
90
|
+
args: {
|
|
91
|
+
query: `(${query}) -in:spam -in:trash -in:drafts`,
|
|
92
|
+
max_results: 30,
|
|
93
|
+
include_payload: true,
|
|
94
|
+
verbose: false
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
signal.throwIfAborted();
|
|
98
|
+
if (response.decision !== "allowed") throw new Error("Mail search permission is required");
|
|
99
|
+
const envelope = record(response.result);
|
|
100
|
+
if (envelope.successful === false || envelope.error || !Array.isArray(record(envelope.data).messages)) throw new SceneSourceNotReady();
|
|
101
|
+
if (!this.listAccounts(principal).some((account) => account.id === accountId) || this.connectionDb.prepare("SELECT current_connection_id FROM connector_accounts WHERE id = ?").get(accountId)?.current_connection_id !== connection.id) throw new Error("Mail authorization changed");
|
|
102
|
+
const normalized = normalizeConnectedSourceResult({
|
|
103
|
+
toolkit: "gmail",
|
|
104
|
+
actionId: "GMAIL_FETCH_EMAILS",
|
|
105
|
+
result: envelope.data
|
|
106
|
+
});
|
|
107
|
+
const sources = /* @__PURE__ */ new Map();
|
|
108
|
+
for (const mail of normalized.slice(0, 30)) {
|
|
109
|
+
const threadId = mail.value.threadId;
|
|
110
|
+
if (typeof threadId !== "string" || !threadId.trim() || threadId.length > 200) continue;
|
|
111
|
+
if (Array.isArray(mail.value.labels) && mail.value.labels.some((label) => [
|
|
112
|
+
"DRAFT",
|
|
113
|
+
"TRASH",
|
|
114
|
+
"SPAM"
|
|
115
|
+
].includes(String(label)))) continue;
|
|
116
|
+
const id = createHash("sha256").update(JSON.stringify([
|
|
117
|
+
principal.ownerId,
|
|
118
|
+
principal.workspaceId,
|
|
119
|
+
accountId,
|
|
120
|
+
threadId
|
|
121
|
+
])).digest("hex");
|
|
122
|
+
const subject = String(mail.value.subject ?? "").slice(0, 300);
|
|
123
|
+
const sender = String(mail.value.sender ?? "").slice(0, 300);
|
|
124
|
+
this.connectionDb.prepare(`INSERT INTO scene_mail_sources VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
125
|
+
ON CONFLICT(id) DO UPDATE SET subject = excluded.subject, sender = excluded.sender, selected_at = excluded.selected_at`).run(id, principal.ownerId, principal.workspaceId, accountId, threadId, subject, sender, this.now());
|
|
126
|
+
sources.set(id, {
|
|
127
|
+
id,
|
|
128
|
+
accountId,
|
|
129
|
+
subject,
|
|
130
|
+
sender
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return [...sources.values()];
|
|
134
|
+
}
|
|
135
|
+
source(subjectId) {
|
|
136
|
+
const row = this.connectionDb.prepare(`SELECT a.current_connection_id, s.thread_id FROM scene_mail_sources s
|
|
137
|
+
JOIN connector_accounts a ON a.id = s.account_id WHERE s.id = ?`).get(subjectId);
|
|
138
|
+
if (!row) throw new Error("Mail source unavailable");
|
|
139
|
+
return {
|
|
140
|
+
connectionId: String(row.current_connection_id),
|
|
141
|
+
threadId: String(row.thread_id)
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
async read(input) {
|
|
145
|
+
input.signal.throwIfAborted();
|
|
146
|
+
const accounts = this.authorizedAccounts(input.activation);
|
|
147
|
+
if (!input.permissions.contextProviders.includes("mail") || accounts.length !== 1 || !input.permissions.accountIds.includes(accounts[0]) || input.activation.scope.kind !== "objects" || input.activation.scope.ids[0] !== input.subjectId) throw new Error("Mail permission is required");
|
|
148
|
+
const origin = this.source(input.subjectId);
|
|
149
|
+
const startedAt = this.now();
|
|
150
|
+
if (input.notBefore !== void 0 && startedAt < input.notBefore) throw new SceneSourceNotReady();
|
|
151
|
+
const connection = getConnectorConnection(origin.connectionId);
|
|
152
|
+
const installation = getConnectorInstallation(connection.installationId);
|
|
153
|
+
const messages = [];
|
|
154
|
+
const tokens = /* @__PURE__ */ new Set();
|
|
155
|
+
let pageToken;
|
|
156
|
+
do {
|
|
157
|
+
input.signal.throwIfAborted();
|
|
158
|
+
if (!this.authorizedAccounts(input.activation).includes(accounts[0]) || sceneContentHash(this.source(input.subjectId)) !== sceneContentHash(origin)) throw new Error("Mail permission changed");
|
|
159
|
+
let response;
|
|
160
|
+
try {
|
|
161
|
+
this.recordRequest(input.activation, accounts[0]);
|
|
162
|
+
response = await this.adapter.executeWithPolicy({
|
|
163
|
+
context: {
|
|
164
|
+
principalId: input.activation.ownerId,
|
|
165
|
+
toolkits: ["gmail"]
|
|
166
|
+
},
|
|
167
|
+
connection,
|
|
168
|
+
installation,
|
|
169
|
+
signal: input.signal,
|
|
170
|
+
action: {
|
|
171
|
+
connectorId: connection.connectorId,
|
|
172
|
+
toolkit: "gmail",
|
|
173
|
+
actionId: ACTION,
|
|
174
|
+
scope: "read",
|
|
175
|
+
curated: true,
|
|
176
|
+
cachedAt: new Date(startedAt).toISOString()
|
|
177
|
+
},
|
|
178
|
+
args: {
|
|
179
|
+
user_id: "me",
|
|
180
|
+
thread_id: origin.threadId,
|
|
181
|
+
...pageToken ? { page_token: pageToken } : {}
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
} catch (error) {
|
|
185
|
+
input.signal.throwIfAborted();
|
|
186
|
+
throw new SceneSourceNotReady(sceneSourceFailureReason(error));
|
|
187
|
+
}
|
|
188
|
+
input.signal.throwIfAborted();
|
|
189
|
+
if (response.decision !== "allowed") throw new Error("Mail connector permission is required");
|
|
190
|
+
const envelope = record(response.result);
|
|
191
|
+
const data = record(envelope.data);
|
|
192
|
+
if (envelope.successful === false || envelope.error || !Array.isArray(data.messages) || data.messages.some((message) => !message || typeof message !== "object")) throw new SceneSourceNotReady(sceneSourceFailureReason(envelope.error));
|
|
193
|
+
messages.push(...data.messages.map(record));
|
|
194
|
+
if (messages.length > 30 || JSON.stringify(messages).length > 5e5) throw new Error("Mail thread exceeds its context budget");
|
|
195
|
+
if (data.nextPageToken != null && typeof data.nextPageToken !== "string") throw new SceneSourceNotReady();
|
|
196
|
+
pageToken = typeof data.nextPageToken === "string" && data.nextPageToken ? data.nextPageToken : void 0;
|
|
197
|
+
if (pageToken) {
|
|
198
|
+
if (!data.messages.length || tokens.has(pageToken) || tokens.size >= 29) throw new SceneSourceNotReady();
|
|
199
|
+
tokens.add(pageToken);
|
|
200
|
+
}
|
|
201
|
+
} while (pageToken);
|
|
202
|
+
if (!this.authorizedAccounts(input.activation).includes(accounts[0]) || sceneContentHash(this.source(input.subjectId)) !== sceneContentHash(origin)) throw new Error("Mail permission changed");
|
|
203
|
+
if (messages.some((message) => message.threadId !== origin.threadId || !Array.isArray(message.labelIds))) throw new SceneSourceNotReady();
|
|
204
|
+
const normalized = normalizeConnectedSourceResult({
|
|
205
|
+
toolkit: "gmail",
|
|
206
|
+
actionId: ACTION,
|
|
207
|
+
result: { messages }
|
|
208
|
+
});
|
|
209
|
+
if (normalized.length !== messages.length || new Set(normalized.map((message) => message.externalId)).size !== messages.length) throw new SceneSourceNotReady();
|
|
210
|
+
const active = normalized.filter((message) => !message.value.labels.some((label) => [
|
|
211
|
+
"DRAFT",
|
|
212
|
+
"TRASH",
|
|
213
|
+
"SPAM"
|
|
214
|
+
].includes(String(label))));
|
|
215
|
+
if (!active.length || active.some((message) => typeof message.value.content !== "string" || !message.value.content.trim())) throw new SceneSourceNotReady();
|
|
216
|
+
const evidence = active.map((message) => {
|
|
217
|
+
const content = JSON.stringify(sanitizeConnectedSourceValue(message.value));
|
|
218
|
+
return {
|
|
219
|
+
id: `mail:${accounts[0]}:${message.externalId}`,
|
|
220
|
+
subjectId: input.subjectId,
|
|
221
|
+
ownerId: input.activation.ownerId,
|
|
222
|
+
workspaceId: input.activation.workspaceId,
|
|
223
|
+
accountId: accounts[0],
|
|
224
|
+
content,
|
|
225
|
+
revision: sceneContentHash(content),
|
|
226
|
+
freshUntil: startedAt + 30 * 6e4,
|
|
227
|
+
...message.occurredAt ? { occurredAt: Date.parse(message.occurredAt) } : {}
|
|
228
|
+
};
|
|
229
|
+
});
|
|
230
|
+
if (evidence.reduce((size, message) => size + message.content.length, 0) > 12e4) throw new Error("Mail thread exceeds its context budget");
|
|
231
|
+
return evidence;
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
//#endregion
|
|
235
|
+
export { GatewaySceneMailContext };
|
|
@@ -23,10 +23,6 @@ function requiredGatewayScope(method, path) {
|
|
|
23
23
|
if (path.startsWith("/api/agents") || path.startsWith("/api/models")) return methodScope(method, "agents.read", "gateway.admin");
|
|
24
24
|
if (path.startsWith("/api/sessions") || path.startsWith("/api/side-chats")) return methodScope(method, "sessions.read", "sessions.write");
|
|
25
25
|
if (path.startsWith("/api/tasks")) return methodScope(method, "tasks.read", "tasks.write");
|
|
26
|
-
if (/^\/api\/inbox\/judgments\/[^/]+\/workflow$/.test(path)) return methodScope(method, "automations.read", "automations.write");
|
|
27
|
-
if (method === "POST" && /^\/api\/inbox\/judgments\/[^/]+\/prepare$/.test(path)) return "automations.write";
|
|
28
|
-
if (path.startsWith("/api/proactive/web-push")) return "notifications.self";
|
|
29
|
-
if (path === "/api/proactive" || path.startsWith("/api/proactive/")) return methodScope(method, "tasks.read", "tasks.write");
|
|
30
26
|
if (path.startsWith("/api/home") || path.startsWith("/api/inbox")) return methodScope(method, "tasks.read", "tasks.write");
|
|
31
27
|
if (path.startsWith("/api/automations") || path.startsWith("/api/automation-runs")) return methodScope(method, "automations.read", "automations.write");
|
|
32
28
|
if (path.startsWith("/api/workflows")) return methodScope(method, "automations.read", "automations.write");
|
|
@@ -3,10 +3,10 @@ import { hasGatewayScope, parseGatewayScopes, requiredGatewayScope } from "./gat
|
|
|
3
3
|
import { safeEqualSecret } from "./secret-equal.js";
|
|
4
4
|
import { KNOWN_WEAK_GATEWAY_TOKEN_PLACEHOLDERS, assertGatewayAuthNotKnownWeak } from "./known-weak-secrets.js";
|
|
5
5
|
import { auditGatewayConfig, collectGatewayConfigFindings, collectGatewaySecurityFindings, collectGatewayStartupGuardFindings } from "./audit.js";
|
|
6
|
-
import { detectSuspiciousPatterns, wrapExternalContent, wrapWebContent } from "./external-content.js";
|
|
7
6
|
import { createPreauthConnectionBudget, getMaxPreauthConnectionsPerIp } from "./preauth-connection-budget.js";
|
|
8
7
|
import { buildGatewayConsoleCspHeader, computeInlineScriptHashes } from "./csp.js";
|
|
9
8
|
import { checkBrowserOrigin } from "./origin-check.js";
|
|
10
9
|
import { getGatewayPrincipal, setGatewayPrincipal } from "./gateway-principal.js";
|
|
11
10
|
import { DEFAULT_GATEWAY_HTTP_TOOL_DENY, filterDangerousHttpTools, isDangerousHttpTool } from "./dangerous-tools.js";
|
|
11
|
+
import { detectSuspiciousPatterns, wrapExternalContent, wrapWebContent } from "./external-content.js";
|
|
12
12
|
export { DEFAULT_GATEWAY_HTTP_TOOL_DENY, DEFAULT_MOBILE_SCOPES, GATEWAY_SCOPES, KNOWN_WEAK_GATEWAY_TOKEN_PLACEHOLDERS, assertGatewayAuthNotKnownWeak, auditGatewayConfig, buildGatewayConsoleCspHeader, checkBrowserOrigin, collectGatewayConfigFindings, collectGatewaySecurityFindings, collectGatewayStartupGuardFindings, computeInlineScriptHashes, createPreauthConnectionBudget, detectSuspiciousPatterns, filterDangerousHttpTools, getGatewayPrincipal, getMaxPreauthConnectionsPerIp, hasGatewayScope, isDangerousHttpTool, isGatewayScope, parseGatewayScopes, requiredGatewayScope, safeEqualSecret, setGatewayPrincipal, wrapExternalContent, wrapWebContent };
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* (QR-login follow-ups that bypass the watcher)
|
|
11
11
|
* - `ConfigHotReloader` (fs.watch → debounced per-section dispatch)
|
|
12
12
|
* - Section reload handlers (models / agents / channels /
|
|
13
|
-
*
|
|
13
|
+
* tools / mcp / extensions)
|
|
14
14
|
* - `scheduleChannelPluginsAfterPersist` (coalesces rapid saves so
|
|
15
15
|
* Telegram/Weixin do not stop/start repeatedly)
|
|
16
16
|
*
|
|
@@ -26,7 +26,6 @@
|
|
|
26
26
|
import type { Config } from '../../config/schema.js';
|
|
27
27
|
import type { AgentService } from '../../agent/service.js';
|
|
28
28
|
import type { ChannelManager } from '../../channels/manager.js';
|
|
29
|
-
import type { HeartbeatService } from '../heartbeat/index.js';
|
|
30
29
|
import type { ExtensionLoader } from '../../extensions/loader.js';
|
|
31
30
|
import type { MessageBus } from '../../infra/bus/index.js';
|
|
32
31
|
export interface GatewayConfigCoordinatorOptions {
|
|
@@ -39,7 +38,6 @@ export interface GatewayConfigCoordinatorOptions {
|
|
|
39
38
|
setConfig: (next: Config) => void;
|
|
40
39
|
getAgentService: () => AgentService;
|
|
41
40
|
getChannelManager: () => ChannelManager;
|
|
42
|
-
getHeartbeatService: () => HeartbeatService | null;
|
|
43
41
|
getExtensionLoader: () => ExtensionLoader | null;
|
|
44
42
|
/** Sync deterministic user-model maintenance automations after config changes. */
|
|
45
43
|
reconcileMemoryMaintenanceAutomations: () => Promise<void>;
|
|
@@ -88,12 +86,6 @@ export declare class GatewayConfigCoordinator {
|
|
|
88
86
|
* saves, and Weixin QR follow-up.
|
|
89
87
|
*/
|
|
90
88
|
handleChannelsReload(newConfig: Config): Promise<void>;
|
|
91
|
-
/**
|
|
92
|
-
* Apply `gateway.heartbeat` from current config after PATCH /api/config (and
|
|
93
|
-
* when hot reload is off). File watcher uses `handleHeartbeatReload` with
|
|
94
|
-
* the same effect when paths match.
|
|
95
|
-
*/
|
|
96
|
-
reloadHeartbeatFromCurrentConfig(): void;
|
|
97
89
|
private handleModelsReload;
|
|
98
90
|
private handleAgentDefaultsReload;
|
|
99
91
|
/**
|
|
@@ -103,7 +95,6 @@ export declare class GatewayConfigCoordinator {
|
|
|
103
95
|
*/
|
|
104
96
|
private scheduleChannelPluginsAfterPersist;
|
|
105
97
|
private handleAutomationReload;
|
|
106
|
-
private handleHeartbeatReload;
|
|
107
98
|
private handleToolsReload;
|
|
108
99
|
private handleMcpReload;
|
|
109
100
|
/** Dispatch config hot reload to extensions that registered `registerReload`. */
|
|
@@ -31,7 +31,6 @@ var GatewayConfigCoordinator = class {
|
|
|
31
31
|
onAgentDefaultsReload: (newConfig) => this.handleAgentDefaultsReload(newConfig),
|
|
32
32
|
onChannelsReload: (newConfig) => this.handleChannelsReload(newConfig),
|
|
33
33
|
onCronReload: (newConfig) => this.handleAutomationReload(newConfig),
|
|
34
|
-
onHeartbeatReload: (newConfig) => this.handleHeartbeatReload(newConfig),
|
|
35
34
|
onToolsReload: (newConfig) => this.handleToolsReload(newConfig),
|
|
36
35
|
onMcpReload: (newConfig) => this.handleMcpReload(newConfig),
|
|
37
36
|
onExtensionsReload: async (newConfig, changedPaths) => {
|
|
@@ -206,14 +205,6 @@ var GatewayConfigCoordinator = class {
|
|
|
206
205
|
this.opts.emit("channels.status", { channels: this.opts.getChannelsStatus() });
|
|
207
206
|
log.debug("Channels config reloaded");
|
|
208
207
|
}
|
|
209
|
-
/**
|
|
210
|
-
* Apply `gateway.heartbeat` from current config after PATCH /api/config (and
|
|
211
|
-
* when hot reload is off). File watcher uses `handleHeartbeatReload` with
|
|
212
|
-
* the same effect when paths match.
|
|
213
|
-
*/
|
|
214
|
-
reloadHeartbeatFromCurrentConfig() {
|
|
215
|
-
this.handleHeartbeatReload(this.opts.getConfig());
|
|
216
|
-
}
|
|
217
208
|
handleModelsReload(newConfig) {
|
|
218
209
|
log.debug("Reloading models config...");
|
|
219
210
|
this.opts.setConfig(newConfig);
|
|
@@ -268,13 +259,6 @@ var GatewayConfigCoordinator = class {
|
|
|
268
259
|
this.opts.emit("config.reload", { section: "automations" });
|
|
269
260
|
log.debug("Automation-related config reloaded");
|
|
270
261
|
}
|
|
271
|
-
handleHeartbeatReload(newConfig) {
|
|
272
|
-
log.debug("Reloading heartbeat config...");
|
|
273
|
-
this.opts.setConfig(newConfig);
|
|
274
|
-
this.opts.getHeartbeatService()?.updateConfig(newConfig);
|
|
275
|
-
this.opts.emit("config.reload", { section: "heartbeat" });
|
|
276
|
-
log.debug("Heartbeat config reloaded");
|
|
277
|
-
}
|
|
278
262
|
handleToolsReload(newConfig) {
|
|
279
263
|
log.debug("Reloading tools config...");
|
|
280
264
|
this.opts.setConfig(newConfig);
|
|
@@ -12,8 +12,8 @@ import { TaskRunCoordinator } from "../../tasks/task-run-coordinator.js";
|
|
|
12
12
|
import { formatAgentRunErrorForClient } from "../../agent/client-error-format.js";
|
|
13
13
|
import "../chat-limits.js";
|
|
14
14
|
import { prependEnvelopeTimestamp } from "../../channels/envelope-timestamp.js";
|
|
15
|
-
import { markdownNotificationPreview } from "../../notifications/plain-text.js";
|
|
16
15
|
import { ChatStreamMapper } from "../chat-stream/mapper.js";
|
|
16
|
+
import { markdownNotificationPreview } from "../../notifications/plain-text.js";
|
|
17
17
|
import { resolveWebchatConversationId } from "../resolve-webchat-session-key.js";
|
|
18
18
|
import { recordExplicitRelationshipFollowUp } from "../../user-context/relationship-continuity.js";
|
|
19
19
|
import { coalesceThinkingDeltas } from "../chat-stream/thinking-delta-coalescer.js";
|
|
@@ -16,7 +16,6 @@ import { ProjectService } from '../projects/index.js';
|
|
|
16
16
|
import { LocalAppService } from '../local-apps/index.js';
|
|
17
17
|
import { TaskConversationRepository } from '../tasks/task-conversation-repository.js';
|
|
18
18
|
import { type BrowserAutomationService } from '../browser/automations/index.js';
|
|
19
|
-
import { listInsights, ProactiveEventService, ProactiveInboxService, ProactiveInboxWorker, ProactiveScenarioService, ProactiveTemporalWorker, ProactiveWorker } from '../proactive/index.js';
|
|
20
19
|
import { GatewaySessionsApi } from './service/sessions-api.js';
|
|
21
20
|
import { GatewayMarketplaceService } from './service/marketplace-service.js';
|
|
22
21
|
import { GatewayAgentRunner } from './service/agent-runner.js';
|
|
@@ -25,6 +24,7 @@ import { VoiceRealtimeRuntime } from '../voice/realtime/runtime.js';
|
|
|
25
24
|
import type { GatewayServiceConfig } from './service/types.js';
|
|
26
25
|
import { type GatewayReadinessSnapshot } from './startup-readiness.js';
|
|
27
26
|
import { type ConnectorLearningCoordinator } from '../connectors/learning-coordinator.js';
|
|
27
|
+
import type { SceneAccess } from '../scenes/httpServices.js';
|
|
28
28
|
import { type ProductLanguage } from '../voice/language-profile.js';
|
|
29
29
|
import { EndpointToolRuntime } from '../endpoint-tools/index.js';
|
|
30
30
|
export type { GatewayChannelStartupPhase1Metrics, GatewayChannelStartupPhase2Metrics, GatewayServiceConfig, } from './service/types.js';
|
|
@@ -40,7 +40,7 @@ export declare class GatewayService {
|
|
|
40
40
|
private notesService;
|
|
41
41
|
private extensionLoader;
|
|
42
42
|
private extensionMetadataSnapshot;
|
|
43
|
-
private
|
|
43
|
+
private sceneHost;
|
|
44
44
|
private sessionIndex;
|
|
45
45
|
private running;
|
|
46
46
|
private startTime;
|
|
@@ -72,7 +72,6 @@ export declare class GatewayService {
|
|
|
72
72
|
private notificationService;
|
|
73
73
|
private connectorSupervisor;
|
|
74
74
|
private connectorLearningCoordinator;
|
|
75
|
-
private connectedSourceChangePublisher;
|
|
76
75
|
private connectedKnowledgeCoordinator;
|
|
77
76
|
private stopAutomationProductEventBridge;
|
|
78
77
|
private stopSessionTranscriptAutomationEvents;
|
|
@@ -107,21 +106,13 @@ export declare class GatewayService {
|
|
|
107
106
|
readonly discussionSealer: DiscussionSealer;
|
|
108
107
|
/** Local user-created apps, their coder projects, previews, and installs. */
|
|
109
108
|
readonly localApps: LocalAppService;
|
|
110
|
-
|
|
111
|
-
readonly proactiveScenarios: ProactiveScenarioService;
|
|
112
|
-
readonly proactive: ProactiveEventService;
|
|
113
|
-
readonly proactiveInbox: ProactiveInboxService;
|
|
114
|
-
readonly proactiveInsights: typeof listInsights;
|
|
115
|
-
readonly proactiveWorker: ProactiveWorker;
|
|
116
|
-
readonly proactiveTemporalWorker: ProactiveTemporalWorker;
|
|
117
|
-
readonly proactiveInboxWorker: ProactiveInboxWorker;
|
|
109
|
+
get sceneAccess(): SceneAccess | undefined;
|
|
118
110
|
constructor(serviceConfig?: GatewayServiceConfig);
|
|
119
111
|
/** Lazy AgentService — constructed on first use or during `start()`. */
|
|
120
112
|
get agentService(): AgentService;
|
|
121
113
|
refreshActionTrustPolicy(): void;
|
|
122
114
|
refreshUserProfileContext(): void;
|
|
123
115
|
private ensureAgentService;
|
|
124
|
-
private ensureHeartbeatService;
|
|
125
116
|
private createTaskRunDispatcher;
|
|
126
117
|
private createNotificationService;
|
|
127
118
|
private readonly taskRunDispatch;
|
|
@@ -184,6 +175,7 @@ export declare class GatewayService {
|
|
|
184
175
|
private schedulePostReadySidecars;
|
|
185
176
|
private runPostReadySidecars;
|
|
186
177
|
start(): Promise<void>;
|
|
178
|
+
private startRuntime;
|
|
187
179
|
/** Called when the HTTP listener is bound (before deferred channel work). */
|
|
188
180
|
markHttpListening(): void;
|
|
189
181
|
isGatewayReady(): boolean;
|
|
@@ -202,7 +194,6 @@ export declare class GatewayService {
|
|
|
202
194
|
* Start processing outbound messages and send through channels
|
|
203
195
|
*/
|
|
204
196
|
private startOutboundProcessor;
|
|
205
|
-
reloadHeartbeatFromCurrentConfig(): void;
|
|
206
197
|
reloadConfig(): Promise<{
|
|
207
198
|
reloaded: boolean;
|
|
208
199
|
error?: string;
|
|
@@ -256,18 +247,6 @@ export declare class GatewayService {
|
|
|
256
247
|
manageable: boolean;
|
|
257
248
|
order: number;
|
|
258
249
|
}>;
|
|
259
|
-
heartbeatStatus(): {
|
|
260
|
-
enabled: boolean;
|
|
261
|
-
checksAllowed: boolean;
|
|
262
|
-
nextCheckAt: string;
|
|
263
|
-
recent: import("./heartbeat/check-store.js").HeartbeatCheck[];
|
|
264
|
-
};
|
|
265
|
-
/**
|
|
266
|
-
* Request an immediate heartbeat run (coalesced like interval/cron wakes).
|
|
267
|
-
*/
|
|
268
|
-
requestHeartbeatNow(opts?: {
|
|
269
|
-
reason?: string;
|
|
270
|
-
}): void;
|
|
271
250
|
requestConnectorLearning(connectionId: string, request?: Parameters<ConnectorLearningCoordinator['enqueueConnection']>[1]): ReturnType<ConnectorLearningCoordinator['enqueueConnection']>;
|
|
272
251
|
requestConnectorLearningForToolkit(toolkit: string): ReturnType<ConnectorLearningCoordinator['enqueueToolkit']>;
|
|
273
252
|
setConnectorLearningPaused(connectionId: string, paused: boolean): number;
|