@xopcai/xopc 0.0.306 → 0.0.308
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-DLtim-_I.js → activity-store-wgSB2HYK.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-iQXtiilH.js → agent-avatar-dicebear-dUotwUO6.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-C6LflMXr.js +1 -0
- package/dist/gateway/static/root/assets/agents-VPDIGRSS.js +1 -0
- package/dist/gateway/static/root/assets/{api-DfSU0-lD.js → api-BKHmTb0w.js} +1 -1
- package/dist/gateway/static/root/assets/api-DFOlahZv.js +1 -0
- package/dist/gateway/static/root/assets/{app-management-settings-panel-BpYFKz7B.js → app-management-settings-panel-zPz0rOND.js} +1 -1
- package/dist/gateway/static/root/assets/appearance-settings-DhvhR43G.js +1 -0
- package/dist/gateway/static/root/assets/apps-page-Pmslbzzr.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-BxOvZ-ZX.js → archive-plugin-BQVZMreT.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-B0FzTMAJ.js → attachment-load-CPE-TMPf.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-BpXuPaPg.js → automations-page-C4IAy_zF.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-Fx5VUJRu.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-BP7wfpqy.js → binary-plugins-DgTl7diZ.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-oMLvdnOQ.js → block-editor-CcOVA-Gw.js} +3 -3
- package/dist/gateway/static/root/assets/{browser-automation-inputs-DTxSZ00u.js → browser-automation-inputs-BzkJog8e.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automations-page-IbJnwEY4.js → browser-automations-page--zKAgj1k.js} +2 -2
- package/dist/gateway/static/root/assets/browser-settings-page-DBms6d35.js +3 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-epdDWIZy.js +8 -0
- package/dist/gateway/static/root/assets/channels-settings-B0bsDtmP.js +1 -0
- package/dist/gateway/static/root/assets/{channels-status-swr-D2AmAoty.js → channels-status-swr-B2JwuTjG.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-terminal-dock-B-yI3Mi1.js → chat-terminal-dock-BfLd2rIJ.js} +1 -1
- package/dist/gateway/static/root/assets/{computer-settings-page-CWx_jnng.js → computer-settings-page-Ckgc0Py-.js} +1 -1
- package/dist/gateway/static/root/assets/connector-service-page-BlC1OXX4.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-By33-bF1.js +2 -0
- package/dist/gateway/static/root/assets/{cron-expression-DMRRL4Zg.js → cron-expression-CqNE-nf6.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-BSwL0e6E.js → date-picker-BS9ZjzYJ.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-BQTspLzC.js → dependency-picker-CF_zYzxX.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-C3lFxDF6.js → desktop-pet-CDwtLR7Z.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-Y8pjpXFE.js → desktop-pet-settings-C0djIc1J.js} +1 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-CDKj9LQj.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-CVGiGVcR.js → extension-debug-page-CX5OXxEU.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-g3JtCP_y.js → extension-page-BytR1PaY.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-CjpoKV1f.js → extension-settings-page-CkaMJA5F.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-BSvXXpKM.js → gateway-config-swr-B6wHa6ZI.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-realtime-BDCpS7U1.js → gateway-realtime-B53R0CA4.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-BLDgrJ30.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-settings-CYG9WCZn.js → gateway-settings-_YU-1p0z.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-Caf8g3sC.js → gateway-startup-retry-DRzGnEV-.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-Cl834-SS.js → heartbeat-settings-CVIvvm4x.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-COCHelcL.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-BwEWBUVC.js → image-generation-api-Ck_pyDom.js} +1 -1
- package/dist/gateway/static/root/assets/{imports-page-CoMlgSIA.js → imports-page-DrtbjL8O.js} +1 -1
- package/dist/gateway/static/root/assets/index-CDfcPiPb.js +79 -0
- package/dist/gateway/static/root/assets/index-CRu1p38D.css +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CNq5D4pe.js → keyboard-shortcuts-settings-BlZh41Xq.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-D7_Raxjw.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-DQnRA598.js → local-apps-page-DbP7wWuh.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-D16nmbaN.js → locale-store-msTfRK8P.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-C0n66FiO.js +2 -0
- package/dist/gateway/static/root/assets/{management-settings-DKcO5fQ-.js → management-settings-i6GhxpGV.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-view-DCp4BlZP.js → markdown-view-BInabSKf.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-Cy64sn_C.js → media-plugins-CnWChQ3Y.js} +1 -1
- package/dist/gateway/static/root/assets/{messages-C-9oo69N.js → messages-F74LVAiU.js} +3 -3
- package/dist/gateway/static/root/assets/note-detail-panel-C59d8vDW.js +5 -0
- package/dist/gateway/static/root/assets/notes-page-C1GBPrVI.js +8 -0
- package/dist/gateway/static/root/assets/{page-tabs-CgEoHSVT.js → page-tabs-BWitjb3e.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-Ck2uKTbf.js → preview-open-alternatives-UaCWCxZv.js} +1 -1
- package/dist/gateway/static/root/assets/{proactive-page-Dr1mCJhZ.js → proactive-page-CtSFJxoM.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-DbZvJ5GE.js → product-open-page-gmi5LLwM.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-ILTmQ1YN.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-snl4rOQZ.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-DcQdwpPu.js → registry-api-BSWtko7U.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BbaAcEN3.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-CPwdgWKo.js → runtime-tools-settings-panel-CtOjKGWg.js} +2 -2
- package/dist/gateway/static/root/assets/{schema-form-8psK4cFO.js → schema-form-DkyyDcl2.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-DrWL71O8.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-BG0kl4HT.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-D_Gsz5rl.js → settings-form-section-C0JDGN_V.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-C_Tj_mkZ.js → settings-page-DiIyMQ52.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-EPazhoZO.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-B_M_oPsT.js → share-preview-page-Bt1K657Y.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-g2MdRXSZ.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-B1DPzu98.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-Wd0uYSPG.js +2 -0
- package/dist/gateway/static/root/assets/{skills-page.utils-Cuh6s2HM.js → skills-page.utils-vq5Ujm03.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-aassGyNb.js → system-settings-panel-Cz1P-HDH.js} +1 -1
- package/dist/gateway/static/root/assets/task-detail-page-BG3A5gPZ.js +1 -0
- package/dist/gateway/static/root/assets/theme-store-1SZ-HFHX.js +1 -0
- package/dist/gateway/static/root/assets/{tunnel-api-DJYcPWIV.js → tunnel-api-DQGoFuZO.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-QGYG7oMZ.js → use-autosave-DVDlBb95.js} +1 -1
- package/dist/gateway/static/root/assets/user-model-page-qM5UiTGx.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-D1s0gIRW.js → voice-api-key-field-B2pZCcxY.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-D2goEn5e.js → voice-config-api-DgJML_uM.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-DkFW9aJ6.js → work-discovery-overlay-Bptv7bEY.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BYToUPUY.js → workflow-run-setup-panel-BijCrNc4.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-DRy1RAYH.js +6 -0
- package/dist/gateway/static/root/channel-icons/feishu.svg +6 -12
- package/dist/gateway/static/root/connector-icons/SOURCES.md +12 -0
- package/dist/gateway/static/root/connector-icons/dingtalk-mark.svg +1 -0
- package/dist/gateway/static/root/connector-icons/tencent-meeting-mark.svg +37 -0
- package/dist/gateway/static/root/connector-icons/wps-calendar.svg +14 -0
- package/dist/gateway/static/root/connector-icons/wps-docs.svg +14 -0
- package/dist/gateway/static/root/connector-icons/wps-mail.svg +7 -0
- package/dist/gateway/static/root/index.html +12 -12
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/notifications.js +1 -1
- package/dist/src/agent/background-review/prompts.js +3 -1
- package/dist/src/agent/context/execution-context.js +4 -4
- package/dist/src/agent/external-tools/composio-provider.js +83 -20
- package/dist/src/agent/external-tools/gateway-tools.js +2 -1
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
- package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +1 -1
- package/dist/src/agent/memory/compaction-promotion.d.ts +1 -1
- package/dist/src/agent/memory/compaction-promotion.js +4 -3
- package/dist/src/agent/tools/knowledge-memory-tool.d.ts +1 -1
- package/dist/src/agent/tools/knowledge-memory-tool.js +3 -3
- package/dist/src/agent/tools/user-context-tool.js +17 -7
- package/dist/src/chat-commands/builtins/understanding.js +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
- package/dist/src/cli/commands/update.js +1 -1
- package/dist/src/config/schema.d.ts +14 -4
- package/dist/src/config/schema.js +6 -4
- package/dist/src/connectors/account-access.d.ts +4 -0
- package/dist/src/connectors/account-access.js +23 -0
- package/dist/src/connectors/approval-resume.d.ts +4 -0
- package/dist/src/connectors/approval-resume.js +23 -0
- package/dist/src/connectors/auth-provider-registry.d.ts +1 -0
- package/dist/src/connectors/auth-provider-registry.js +2 -1
- package/dist/src/connectors/authorization-attempts.d.ts +21 -0
- package/dist/src/connectors/authorization-attempts.js +33 -0
- package/dist/src/connectors/builtin-catalog.js +1 -3
- package/dist/src/connectors/catalog.js +2 -1
- package/dist/src/connectors/china-catalog.d.ts +2 -0
- package/dist/src/connectors/china-catalog.js +430 -0
- package/dist/src/connectors/composio-backends.d.ts +26 -0
- package/dist/src/connectors/composio-backends.js +65 -0
- package/dist/src/connectors/composio-catalog.js +2 -1
- package/dist/src/connectors/composio-managed-client.js +3 -1
- package/dist/src/connectors/composio-managed-events.js +5 -2
- package/dist/src/connectors/composio-session-types.d.ts +2 -0
- package/dist/src/connectors/composio-sessions.d.ts +11 -2
- package/dist/src/connectors/composio-sessions.js +137 -35
- package/dist/src/connectors/composio-triggers.js +4 -2
- package/dist/src/connectors/composio.d.ts +11 -8
- package/dist/src/connectors/composio.js +68 -84
- package/dist/src/connectors/connected-source-ingestion.js +4 -3
- package/dist/src/connectors/connected-source-understanding.d.ts +1 -0
- package/dist/src/connectors/connected-source-understanding.js +1 -0
- package/dist/src/connectors/connection-recovery-service.js +25 -13
- package/dist/src/connectors/connector-identity.d.ts +2 -0
- package/dist/src/connectors/connector-identity.js +18 -5
- package/dist/src/connectors/content-enrichment.js +1 -1
- package/dist/src/connectors/instances.js +1 -7
- package/dist/src/connectors/learning-coordinator.js +35 -12
- package/dist/src/connectors/materialize.js +14 -1
- package/dist/src/connectors/policy.d.ts +1 -1
- package/dist/src/connectors/policy.js +1 -1
- package/dist/src/connectors/principal.js +24 -3
- package/dist/src/connectors/providers.d.ts +1 -0
- package/dist/src/connectors/providers.js +14 -2
- package/dist/src/connectors/runtime-adapter-registry.js +4 -9
- package/dist/src/connectors/secret-store.d.ts +4 -1
- package/dist/src/connectors/secret-store.js +7 -3
- package/dist/src/connectors/source-change-publisher.js +4 -2
- package/dist/src/connectors/types.d.ts +16 -11
- package/dist/src/connectors/workflow-preflight.d.ts +2 -1
- package/dist/src/connectors/workflow-preflight.js +20 -3
- package/dist/src/gateway/hono/lib/config-payload.d.ts +2 -2
- package/dist/src/gateway/hono/routes/connectors.js +207 -16
- package/dist/src/gateway/hono/routes/context-sources.js +1 -24
- package/dist/src/gateway/hono/routes/home.js +4 -1
- package/dist/src/gateway/hono/routes/imports.js +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- package/dist/src/gateway/hono/routes/local-apps.js +1 -1
- package/dist/src/gateway/hono/routes/mcp.js +1 -1
- package/dist/src/gateway/hono/routes/projects.js +8 -0
- package/dist/src/gateway/hono/routes/update.js +2 -2
- package/dist/src/gateway/hono/routes/user-model-refresh.d.ts +5 -0
- package/dist/src/gateway/hono/routes/user-model-refresh.js +128 -0
- package/dist/src/gateway/hono/routes/user-model.js +12 -5
- package/dist/src/gateway/hono/routes/work-discovery.js +0 -30
- package/dist/src/gateway/index.js +1 -1
- package/dist/src/gateway/run-loop.js +1 -1
- package/dist/src/gateway/service.js +6 -6
- package/dist/src/infra/gateway-processes.js +1 -1
- package/dist/src/infra/update-restart.js +1 -1
- package/dist/src/infra/update-runner.js +2 -2
- package/dist/src/infra/update-startup.js +1 -1
- package/dist/src/knowledge/connected-knowledge-pipeline.js +1 -1
- package/dist/src/knowledge-memory/index.js +2 -2
- package/dist/src/knowledge-memory/repository.d.ts +7 -0
- package/dist/src/knowledge-memory/repository.js +58 -8
- package/dist/src/memory-maintenance/service.js +61 -31
- package/dist/src/migrations/memory-config.d.ts +2 -0
- package/dist/src/migrations/memory-config.js +77 -0
- package/dist/src/migrations/runner.js +2 -2
- package/dist/src/notifications/planner.js +5 -5
- package/dist/src/notifications/service.d.ts +2 -2
- package/dist/src/notifications/service.js +1 -1
- package/dist/src/proactive/follow-ups.js +2 -1
- package/dist/src/storage/sqlite/connection-wait-repository.d.ts +3 -0
- package/dist/src/storage/sqlite/connection-wait-repository.js +63 -2
- package/dist/src/storage/sqlite/connector-account-repository.d.ts +6 -0
- package/dist/src/storage/sqlite/connector-account-repository.js +35 -7
- package/dist/src/storage/sqlite/connector-repository.js +15 -10
- package/dist/src/storage/sqlite/connector-sync-policy-repository.js +1 -1
- package/dist/src/storage/sqlite/index.js +4 -2
- package/dist/src/storage/sqlite/migrations/182_connector_account_policies.sql +92 -0
- package/dist/src/storage/sqlite/migrations/183_connector_backend_consistency.sql +20 -0
- package/dist/src/storage/sqlite/migrations/184_memory_suppressions.sql +12 -0
- package/dist/src/storage/sqlite/migrations/185_understanding_refresh_batches.sql +6 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +7 -7
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/tasks/home-query-service.js +3 -3
- package/dist/src/tui/backends/gateway-realtime-backend.js +1 -1
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/user-context/config.d.ts +4 -9
- package/dist/src/user-context/config.js +7 -27
- package/dist/src/user-context/memory-suppression.d.ts +7 -0
- package/dist/src/user-context/memory-suppression.js +23 -0
- package/dist/src/user-context/relationship-continuity.js +1 -1
- package/dist/src/user-context/sources/refresh-service.d.ts +48 -0
- package/dist/src/user-context/sources/refresh-service.js +221 -0
- package/dist/src/user-context/sources/repository.js +1 -1
- package/dist/src/user-model/bootstrap.js +27 -24
- package/dist/src/user-model/capture/executor.d.ts +1 -1
- package/dist/src/user-model/capture/executor.js +17 -11
- package/dist/src/user-model/capture/semantic.js +1 -1
- package/dist/src/user-model/domain.d.ts +6 -2
- package/dist/src/user-model/index.js +3 -3
- package/dist/src/user-model/profile.js +1 -1
- package/dist/src/user-model/repository.d.ts +4 -1
- package/dist/src/user-model/repository.js +96 -6
- package/dist/src/user-model/usage-policy.d.ts +2 -0
- package/dist/src/user-model/usage-policy.js +6 -2
- package/dist/src/work-discovery/project-understanding.js +2 -1
- package/dist/src/work-discovery/service.d.ts +8 -24
- package/dist/src/work-discovery/service.js +138 -180
- package/dist/src/workflows/domain/definition.d.ts +1 -0
- package/dist/src/workflows/domain/validation.js +1 -1
- package/dist/src/workflows/service/workflow-run-service.js +14 -0
- package/dist/src/workflows/service/workflow-session-bridge.d.ts +1 -0
- package/dist/src/workflows/service/workflow-session-bridge.js +1 -0
- package/package.json +5 -5
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CxOv4ivK.js +0 -1
- package/dist/gateway/static/root/assets/agents-DzKx7z3k.js +0 -1
- package/dist/gateway/static/root/assets/api-gpHh07OL.js +0 -1
- package/dist/gateway/static/root/assets/appearance-settings-BQfR5vrq.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-BceB7JHZ.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-Cn_p8zY_.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-CCUO3G23.js +0 -3
- package/dist/gateway/static/root/assets/capabilities-settings-panel-BjMb5H2_.js +0 -8
- package/dist/gateway/static/root/assets/channels-settings-P22-_i13.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-BLgPORmH.js +0 -2
- package/dist/gateway/static/root/assets/device-pairing-wizard-DM4_GMzo.js +0 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-BGmP1obI.js +0 -1
- package/dist/gateway/static/root/assets/home-page-CB_XVtIM.js +0 -1
- package/dist/gateway/static/root/assets/index-CI37dTAn.css +0 -1
- package/dist/gateway/static/root/assets/index-Do9MltC4.js +0 -79
- package/dist/gateway/static/root/assets/local-app-workbench-page-BxQlEje6.js +0 -2
- package/dist/gateway/static/root/assets/logs-page-CT5GrcMs.js +0 -2
- package/dist/gateway/static/root/assets/note-detail-panel-5dc3LKTL.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-AbwxgXuG.js +0 -8
- package/dist/gateway/static/root/assets/project-detail-page-DnE1zI1c.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-BD0nLYxk.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-TYuE6A3S.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-BcWDQQFX.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DzGQX6Hq.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-CE2X89qN.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-BL4H9Iym.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-WMKIgUOp.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-DYgwzl5B.js +0 -2
- package/dist/gateway/static/root/assets/task-detail-page-BjeRslap.js +0 -1
- package/dist/gateway/static/root/assets/theme-store-RUBQBsFP.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-PrRsd4go.js +0 -2
- package/dist/gateway/static/root/assets/workflows-page-Z8iZe9YP.js +0 -6
- package/dist/src/migrations/knowledge-memory-read-policy-config.d.ts +0 -2
- package/dist/src/migrations/knowledge-memory-read-policy-config.js +0 -48
|
@@ -53,7 +53,7 @@ function upsertConnectorSyncPolicy(input) {
|
|
|
53
53
|
interval_minutes = excluded.interval_minutes,
|
|
54
54
|
allowed_scenario_keys_json = excluded.allowed_scenario_keys_json,
|
|
55
55
|
revision = connector_sync_policies.revision + 1,
|
|
56
|
-
updated_at = excluded.updated_at`).run(input.accountId, input.scanEnabled ?? current?.scanEnabled ??
|
|
56
|
+
updated_at = excluded.updated_at`).run(input.accountId, input.scanEnabled ?? current?.scanEnabled ?? false ? 1 : 0, input.proactiveEnabled ?? current?.proactiveEnabled ?? false ? 1 : 0, intervalMinutes, JSON.stringify(allowedScenarioKeys), now);
|
|
57
57
|
});
|
|
58
58
|
return getConnectorSyncPolicy(input.accountId);
|
|
59
59
|
}
|
|
@@ -28,6 +28,8 @@ import { COMPOSER_INPUT_HISTORY_LIMIT, appendComposerInputHistory, clearComposer
|
|
|
28
28
|
import { bindEndpointPrincipal, createEndpointPrincipal, getEndpointPrincipal, listEndpointPrincipals, revokeEndpointPrincipal, touchEndpointPrincipal } from "./endpoint-principal-repository.js";
|
|
29
29
|
import { finishEndpointToolInvocationAudit, listEndpointToolInvocationAudits, startEndpointToolInvocationAudit } from "./endpoint-tool-invocation-repository.js";
|
|
30
30
|
import { getInteractionState, setInteractionState, updateInteractionStateFromMessage } from "./interaction-state-repository.js";
|
|
31
|
+
import { getConnectorAccount, init_connector_account_repository, listConnectorAccounts, reconcileConnectorAccount, refreshConnectorAccountCurrent } from "./connector-account-repository.js";
|
|
32
|
+
import { appendConnectorExecutionAudit, claimConnectorWebhookDelivery, completeConnectorWebhookDelivery, consumeConnectorApproval, createConnectorApproval, decideConnectorApproval, deleteConnectorConnection, deleteConnectorInstallation, getCachedConnectorCatalogEntry, getConnectorApproval, getConnectorConnection, getConnectorInstallation, init_connector_repository, listCachedConnectorCatalogEntries, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, releaseConnectorWebhookDelivery, replaceConnectorCatalogEntries, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation } from "./connector-repository.js";
|
|
31
33
|
import { deleteSessionRecord, ensureSessionRecord, findConversationIdByTranscriptId, getCurrentTranscriptId, getGlobalSessionStats, getSessionMetadata, getSessionPersistedLevels, incrementSessionStatsOnAppend, init_session_repository, listSessionMetadata, listSessionsByAgent, patchSessionMetadata, resetSessionRecord, resolveSessionAgentId, updateSessionStats } from "./session-repository.js";
|
|
32
34
|
import { getSessionTaskPlan, setSessionTaskPlan } from "./session-task-plan-repository.js";
|
|
33
35
|
import { buildRelationshipPrompt, getRelationshipSettings, isProactiveSupportAllowed, updateRelationshipSettings } from "./relationship-settings-repository.js";
|
|
@@ -37,8 +39,6 @@ import { deleteNoteAgentContextRecord, getNoteAgentContextRecord, upsertNoteAgen
|
|
|
37
39
|
import { claimKnowledgeSourceItems, completeKnowledgeSourceItemSynthesis, countKnowledgeSourceItems, deleteKnowledgeSourceItems, finishKnowledgeSyncRun, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, pruneBoundedKnowledgeSourceItems, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, startKnowledgeSyncRun, upsertKnowledgeSourceItems } from "./knowledge-repository.js";
|
|
38
40
|
import { deleteSessionConfig, getSessionConfig, hasSessionConfig, setSessionConfig, updateSessionConfig } from "./config-repository.js";
|
|
39
41
|
import { createObjectLinkRecord, deleteObjectLinkRecord, getActivityEventRecord, listActivityRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, recordActivityEvent } from "./activity-repository.js";
|
|
40
|
-
import { appendConnectorExecutionAudit, claimConnectorWebhookDelivery, completeConnectorWebhookDelivery, consumeConnectorApproval, createConnectorApproval, decideConnectorApproval, deleteConnectorConnection, deleteConnectorInstallation, getCachedConnectorCatalogEntry, getConnectorApproval, getConnectorConnection, getConnectorInstallation, listCachedConnectorCatalogEntries, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, releaseConnectorWebhookDelivery, replaceConnectorCatalogEntries, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation } from "./connector-repository.js";
|
|
41
|
-
import { getConnectorAccount, listConnectorAccounts, reconcileConnectorAccount, refreshConnectorAccountCurrent } from "./connector-account-repository.js";
|
|
42
42
|
import { getConnectorSyncPolicy, getConnectorSyncPolicyForConnection, listConnectorSyncPolicies, upsertConnectorSyncPolicy } from "./connector-sync-policy-repository.js";
|
|
43
43
|
import { getUserTrustPolicy, setUserTrustPolicy } from "./user-trust-repository.js";
|
|
44
44
|
//#region src/storage/sqlite/index.ts
|
|
@@ -53,5 +53,7 @@ init_session_input_repository();
|
|
|
53
53
|
init_session_metadata();
|
|
54
54
|
init_row_mappers();
|
|
55
55
|
init_session_repository();
|
|
56
|
+
init_connector_repository();
|
|
57
|
+
init_connector_account_repository();
|
|
56
58
|
//#endregion
|
|
57
59
|
export { COMPOSER_INPUT_HISTORY_LIMIT, DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, DatabaseSchemaTooOldError, SCHEMA_META_SCHEMA_VERSION_KEY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, acknowledgeHomeAttention, appendCompactionBoundaryIfUnchanged, appendComposerInputHistory, appendConnectorExecutionAudit, appendMediaToAssistantTranscriptEntry, appendTranscriptEntry, applyPendingMigrations, authenticateDeviceAccessToken, bindEndpointPrincipal, buildDefaultSessionMetadata, buildGlobalSessionStats, buildRefreshProofMessage, buildRelationshipPrompt, cancelQueuedSessionInput, claimConnectorWebhookDelivery, claimContextExtractionRun, claimKnowledgeSourceItems, claimNextConnectorLearningJob, claimNextSessionInput, classifyStoredRow, clearComposerInputHistory, clearGatewayIdentityForTest, closeTemporalAssertions, closeXopcDatabase, completeConnectorWebhookDelivery, completeKnowledgeSourceItemSynthesis, consumeClarificationApproval, consumeClarificationResume, consumeConnectorApproval, countKnowledgeSourceItems, createClarificationWait, createCollaborationRule, createConnectorApproval, createContextEvidence, createDevice, createDevicePairingSetup, createEndpointPrincipal, createObjectLinkRecord, createTemporalAssertion, decideConnectorApproval, deleteBrowserTabBinding, deleteBrowserTabBindingsByEndpoint, deleteBrowserTabBindingsByPrincipal, deleteConnectorConnection, deleteConnectorInstallation, deleteEndpointSessionBinding, deleteEndpointSessionBindingsByPrincipal, deleteKnowledgeSourceItems, deleteNoteAgentContextRecord, deleteNoteRecord, deleteObjectLinkRecord, deleteSessionConfig, deleteSessionRecord, discoverSqlMigrations, enqueueConnectorLearningJob, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, findConversationIdByTranscriptId, findLatestAssistantTranscriptEntryId, findSessionInput, finishContextExtractionRun, finishEndpointToolInvocationAudit, finishKnowledgeSyncRun, finishSessionInputRun, getActiveClarification, getActivityEventRecord, getBrowserTabBinding, getBrowserTabBindingById, getCachedConnectorCatalogEntry, getClarification, getClarificationResumeInput, getClarificationSnapshot, getCollaborationRule, getConnectorAccount, getConnectorApproval, getConnectorConnection, getConnectorInstallation, getConnectorSyncPolicy, getConnectorSyncPolicyForConnection, getContextExtractionRun, getCurrentTranscriptId, getDevice, getEndpointPrincipal, getEndpointSessionBinding, getGlobalSessionStats, getInteractionState, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, getNoteAgentContextRecord, getNoteRecord, getOrCreateGatewayIdentity, getRelationshipSettings, getSessionConfig, getSessionInputById, getSessionInputState, getSessionMetadata, getSessionPersistedLevels, getSessionTaskPlan, getSqliteDatabase, getUserPeopleIndexState, getUserPerson, getUserTrustPolicy, getXopcDatabase, hasIndependentExtractionOutput, hasSessionConfig, incrementSessionStatsOnAppend, insertSessionInput, inspectSchemaMigrationStatus, isClarificationSuspended, isDevicePairingSetupActive, isHomeAttentionAcknowledged, isProactiveSupportAllowed, isXopcDatabaseOpen, issueDeviceTokenPair, linkContextObjects, listActiveSessionInputRuns, listActivityRecords, listCachedConnectorCatalogEntries, listCollaborationRules, listCompactionBoundaries, listComposerInputHistory, listConnectorAccounts, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, listConnectorLearningJobs, listConnectorSyncPolicies, listContextExtractionOutputs, listContextExtractionRuns, listContextObjectRelations, listDevices, listEndpointPrincipals, listEndpointToolInvocationAudits, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listNoteRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, listTemporalAssertions, listUserPeople, loadCompactionSourceSnapshot, loadLlmMessagesForSession, loadTranscriptHistoryRowsForSession, loadTranscriptRows, loadTranscriptRowsForSession, mergeUserPeople, metadataToSessionInsert, mutateQueuedSessionInput, openXopcDatabase, paginateTranscriptMessages, patchSessionMetadata, pruneBoundedKnowledgeSourceItems, readSchemaVersion, readSchemaVersionForTest, reconcileConnectorAccount, recordActivityEvent, recoverSessionInputState, recoverStaleConnectorLearningJobs, refreshConnectorAccountCurrent, releaseConnectorWebhookDelivery, replaceConnectorCatalogEntries, replaceLatestSessionTurnAndQueueInput, replaceTranscriptRows, replaceUserPeopleIndex, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveClarification, resolveMigrationsDir, resolveSessionAgentId, resolveXopcDatabasePath, restoreBeforeCompactionBoundary, revokeDevice, revokeEndpointPrincipal, rotateDeviceRefreshToken, runSqliteWriteTransaction, searchSessionTranscript, sessionConfigRowToConfig, sessionRowToMetadata, setBrowserTabBinding, setCollaborationRuleStatus, setConnectorLearningPaused, setEndpointSessionBinding, setInteractionState, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, setSessionConfig, setSessionInputStatus, setSessionTaskPlan, setUserTrustPolicy, signGatewayPayload, startEndpointToolInvocationAudit, startKnowledgeSyncRun, summarizeUserPeople, supersedeActiveClarification, touchEndpointPrincipal, transcriptEntryRowToStoredRow, updateConnectorLearningJob, updateInteractionStateFromMessage, updateRelationshipSettings, updateSessionConfig, updateSessionStats, updateUserPerson, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, upsertConnectorSyncPolicy, upsertKnowledgeSourceItems, upsertNoteAgentContextRecord, upsertNoteRecord, validateLatestSessionTurnTarget };
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
ALTER TABLE connector_installations RENAME COLUMN selected_connection_ids_json TO selected_account_ids_json;
|
|
2
|
+
UPDATE connector_installations
|
|
3
|
+
SET selected_account_ids_json = CASE
|
|
4
|
+
WHEN json_array_length(selected_account_ids_json) = 0 THEN 'null'
|
|
5
|
+
ELSE (
|
|
6
|
+
SELECT json_group_array(DISTINCT c.account_id)
|
|
7
|
+
FROM json_each(connector_installations.selected_account_ids_json) selected
|
|
8
|
+
JOIN connector_connections c ON c.id = selected.value
|
|
9
|
+
WHERE c.principal_id = connector_installations.principal_id
|
|
10
|
+
AND c.connector_id = connector_installations.connector_id
|
|
11
|
+
AND c.account_id IS NOT NULL
|
|
12
|
+
)
|
|
13
|
+
END;
|
|
14
|
+
|
|
15
|
+
ALTER TABLE connector_accounts ADD COLUMN label TEXT;
|
|
16
|
+
ALTER TABLE connector_accounts ADD COLUMN enabled INTEGER NOT NULL DEFAULT 1;
|
|
17
|
+
ALTER TABLE connector_accounts ADD COLUMN allowed_agent_ids_json TEXT;
|
|
18
|
+
UPDATE connector_accounts SET label = (
|
|
19
|
+
SELECT alias FROM connector_connections WHERE account_id = connector_accounts.id
|
|
20
|
+
AND alias IS NOT NULL ORDER BY is_default DESC, updated_at DESC LIMIT 1
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
CREATE TABLE connector_backends (
|
|
24
|
+
id TEXT PRIMARY KEY,
|
|
25
|
+
mode TEXT NOT NULL CHECK(mode IN ('managed', 'byok')),
|
|
26
|
+
label TEXT NOT NULL,
|
|
27
|
+
credential_ref TEXT,
|
|
28
|
+
credential_source TEXT NOT NULL DEFAULT 'stored' CHECK(credential_source IN ('stored','environment')),
|
|
29
|
+
verified_at TEXT,
|
|
30
|
+
active INTEGER NOT NULL DEFAULT 0,
|
|
31
|
+
created_at TEXT NOT NULL
|
|
32
|
+
);
|
|
33
|
+
CREATE UNIQUE INDEX idx_connector_backend_active ON connector_backends(active) WHERE active = 1;
|
|
34
|
+
ALTER TABLE connector_accounts ADD COLUMN backend_id TEXT;
|
|
35
|
+
DROP INDEX idx_connector_accounts_identity;
|
|
36
|
+
CREATE UNIQUE INDEX idx_connector_accounts_identity
|
|
37
|
+
ON connector_accounts(principal_id, backend_id, connector_id, identity_key)
|
|
38
|
+
WHERE identity_key IS NOT NULL;
|
|
39
|
+
|
|
40
|
+
CREATE TABLE connector_objective_accounts (
|
|
41
|
+
conversation_id TEXT NOT NULL,
|
|
42
|
+
transcript_id TEXT NOT NULL,
|
|
43
|
+
objective_id TEXT NOT NULL,
|
|
44
|
+
connector_id TEXT NOT NULL,
|
|
45
|
+
account_id TEXT NOT NULL REFERENCES connector_accounts(id) ON DELETE CASCADE,
|
|
46
|
+
PRIMARY KEY(conversation_id, transcript_id, objective_id, connector_id, account_id)
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
-- Provider IDs are scoped to a backend, not the whole installation.
|
|
50
|
+
CREATE TABLE connector_connections_next (
|
|
51
|
+
id TEXT PRIMARY KEY,
|
|
52
|
+
installation_id TEXT REFERENCES connector_installations(id) ON DELETE SET NULL,
|
|
53
|
+
connector_id TEXT NOT NULL,
|
|
54
|
+
provider TEXT NOT NULL,
|
|
55
|
+
principal_id TEXT NOT NULL,
|
|
56
|
+
provider_connection_id TEXT NOT NULL,
|
|
57
|
+
alias TEXT,
|
|
58
|
+
identity_json TEXT NOT NULL DEFAULT '{}',
|
|
59
|
+
status TEXT NOT NULL DEFAULT 'unknown' CHECK(status IN ('pending','active','expired','failed','revoked','disabled','unknown')),
|
|
60
|
+
is_default INTEGER NOT NULL DEFAULT 0 CHECK(is_default IN (0,1)),
|
|
61
|
+
connected_at TEXT,
|
|
62
|
+
expires_at TEXT,
|
|
63
|
+
last_error TEXT,
|
|
64
|
+
metadata_json TEXT NOT NULL DEFAULT '{}',
|
|
65
|
+
created_at TEXT NOT NULL,
|
|
66
|
+
updated_at TEXT NOT NULL,
|
|
67
|
+
account_id TEXT REFERENCES connector_accounts(id) ON DELETE CASCADE
|
|
68
|
+
);
|
|
69
|
+
INSERT INTO connector_connections_next SELECT * FROM connector_connections;
|
|
70
|
+
DROP TABLE connector_connections;
|
|
71
|
+
ALTER TABLE connector_connections_next RENAME TO connector_connections;
|
|
72
|
+
CREATE INDEX idx_connector_connections_principal ON connector_connections(principal_id, connector_id, status);
|
|
73
|
+
CREATE INDEX idx_connector_connections_account ON connector_connections(account_id);
|
|
74
|
+
CREATE UNIQUE INDEX idx_connector_connections_provider_backend
|
|
75
|
+
ON connector_connections(provider, COALESCE(json_extract(metadata_json, '$.backendId'), ''), provider_connection_id);
|
|
76
|
+
|
|
77
|
+
CREATE TABLE connector_authorization_attempts (
|
|
78
|
+
id TEXT PRIMARY KEY,
|
|
79
|
+
principal_id TEXT NOT NULL,
|
|
80
|
+
connector_id TEXT NOT NULL,
|
|
81
|
+
backend_id TEXT,
|
|
82
|
+
connection_id TEXT NOT NULL REFERENCES connector_connections(id) ON DELETE CASCADE,
|
|
83
|
+
expected_account_id TEXT,
|
|
84
|
+
authorization_url TEXT,
|
|
85
|
+
status TEXT NOT NULL CHECK(status IN ('awaiting_user','succeeded','failed','expired')),
|
|
86
|
+
expires_at INTEGER NOT NULL,
|
|
87
|
+
created_at INTEGER NOT NULL
|
|
88
|
+
);
|
|
89
|
+
CREATE INDEX idx_connector_authorization_attempt_scope ON connector_authorization_attempts(principal_id,connector_id,created_at);
|
|
90
|
+
CREATE TABLE connector_runtime_identity (id INTEGER PRIMARY KEY CHECK(id = 1), installation_id TEXT NOT NULL);
|
|
91
|
+
INSERT INTO connector_runtime_identity VALUES(1, lower(hex(randomblob(16))));
|
|
92
|
+
ALTER TABLE connector_approvals ADD COLUMN wait_id TEXT;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
-- Repair only accounts whose authorizations agree on one known backend.
|
|
2
|
+
-- Identity collisions are reconciled transactionally by the next provider sync.
|
|
3
|
+
WITH candidates AS (
|
|
4
|
+
SELECT c.account_id, MIN(json_extract(c.metadata_json, '$.backendId')) AS backend_id
|
|
5
|
+
FROM connector_connections c
|
|
6
|
+
GROUP BY c.account_id
|
|
7
|
+
HAVING COUNT(DISTINCT json_extract(c.metadata_json, '$.backendId')) = 1
|
|
8
|
+
AND COUNT(json_extract(c.metadata_json, '$.backendId')) = COUNT(*)
|
|
9
|
+
)
|
|
10
|
+
UPDATE connector_accounts AS account
|
|
11
|
+
SET backend_id = (SELECT backend_id FROM candidates WHERE account_id = account.id)
|
|
12
|
+
WHERE account.backend_id IS NULL
|
|
13
|
+
AND EXISTS (SELECT 1 FROM candidates JOIN connector_backends backend ON backend.id = candidates.backend_id WHERE candidates.account_id = account.id)
|
|
14
|
+
AND NOT EXISTS (
|
|
15
|
+
SELECT 1 FROM connector_accounts other JOIN candidates ON candidates.account_id = account.id
|
|
16
|
+
WHERE other.id <> account.id
|
|
17
|
+
AND COALESCE(other.backend_id, (SELECT backend_id FROM candidates WHERE account_id = other.id)) = candidates.backend_id
|
|
18
|
+
AND other.principal_id = account.principal_id AND other.connector_id = account.connector_id
|
|
19
|
+
AND other.identity_key = account.identity_key
|
|
20
|
+
);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
CREATE TABLE memory_suppressions (
|
|
2
|
+
fingerprint TEXT PRIMARY KEY,
|
|
3
|
+
created_at INTEGER NOT NULL
|
|
4
|
+
);
|
|
5
|
+
|
|
6
|
+
UPDATE notification_events SET
|
|
7
|
+
event_type = 'work_discovery.completed',
|
|
8
|
+
dedupe_key = replace(dedupe_key, 'work_discovery.review_ready:', 'work_discovery.completed:'),
|
|
9
|
+
title_en = 'Understanding updated', title_zh = '用户理解已更新',
|
|
10
|
+
body_en = 'See what xopc learned. You can edit or delete it anytime.',
|
|
11
|
+
body_zh = '理解已自动整理,可随时查看、修改或删除。'
|
|
12
|
+
WHERE event_type = 'work_discovery.review_ready';
|
|
@@ -3,7 +3,7 @@ import type { ApplyMigrationsOptions } from './types.js';
|
|
|
3
3
|
/** Baseline schema version applied from schema.sql on first open. */
|
|
4
4
|
export declare const XOPC_DB_BASELINE_SCHEMA_VERSION = 165;
|
|
5
5
|
/** Latest schema version this release supports (increment when adding migrations). */
|
|
6
|
-
export declare const XOPC_DB_SCHEMA_VERSION =
|
|
6
|
+
export declare const XOPC_DB_SCHEMA_VERSION = 185;
|
|
7
7
|
export declare function resolveMigrationsDir(override?: string): string;
|
|
8
8
|
/**
|
|
9
9
|
* Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.
|
|
@@ -35,16 +35,16 @@ function applySingleMigration(db, migration) {
|
|
|
35
35
|
targetVersion: migration.targetVersion,
|
|
36
36
|
file: migration.filename
|
|
37
37
|
}, "Applying SQLite migration");
|
|
38
|
-
const
|
|
38
|
+
const rebuildParentTable = migration.targetVersion === 179 || migration.targetVersion === 182;
|
|
39
39
|
const foreignKeysEnabled = Number(db.prepare("PRAGMA foreign_keys").get()?.foreign_keys) === 1;
|
|
40
|
-
if (
|
|
40
|
+
if (rebuildParentTable) db.exec("PRAGMA foreign_keys = OFF");
|
|
41
41
|
let transactionStarted = false;
|
|
42
42
|
try {
|
|
43
43
|
db.exec("BEGIN IMMEDIATE");
|
|
44
44
|
transactionStarted = true;
|
|
45
45
|
db.exec(migration.sql);
|
|
46
46
|
const summary = migration.targetVersion === 178 ? migrateConversationUuids(db) : void 0;
|
|
47
|
-
if (
|
|
47
|
+
if (rebuildParentTable && db.prepare("PRAGMA foreign_key_check").all().length > 0) throw new Error("Parent table migration would violate foreign key integrity");
|
|
48
48
|
setSchemaVersion(db, migration.targetVersion);
|
|
49
49
|
db.exec("COMMIT");
|
|
50
50
|
return summary;
|
|
@@ -55,7 +55,7 @@ function applySingleMigration(db, migration) {
|
|
|
55
55
|
const em = error instanceof Error ? error.message : String(error);
|
|
56
56
|
throw new Error(`SQLite migration to v${migration.targetVersion} (${migration.filename}) failed: ${em}`, { cause: error });
|
|
57
57
|
} finally {
|
|
58
|
-
if (
|
|
58
|
+
if (rebuildParentTable && foreignKeysEnabled) db.exec("PRAGMA foreign_keys = ON");
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
@@ -63,7 +63,7 @@ function applySingleMigration(db, migration) {
|
|
|
63
63
|
* Each step runs in its own transaction and updates schema_meta on success.
|
|
64
64
|
*/
|
|
65
65
|
function applyPendingMigrations(db, options = {}) {
|
|
66
|
-
const targetVersion = options.targetVersion ??
|
|
66
|
+
const targetVersion = options.targetVersion ?? 185;
|
|
67
67
|
let currentVersion = readSchemaVersion(db);
|
|
68
68
|
if (currentVersion > targetVersion) throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);
|
|
69
69
|
if (!options.migrationsDir && currentVersion < 165) throw new DatabaseSchemaTooOldError(currentVersion, 165);
|
|
@@ -118,7 +118,7 @@ function applyPendingMigrations(db, options = {}) {
|
|
|
118
118
|
}
|
|
119
119
|
/** Inspect schema version without mutating the database. */
|
|
120
120
|
function inspectSchemaMigrationStatus(db, options = {}) {
|
|
121
|
-
const appVersion = options.targetVersion ??
|
|
121
|
+
const appVersion = options.targetVersion ?? 185;
|
|
122
122
|
const dbVersion = readSchemaVersion(db);
|
|
123
123
|
if (dbVersion > appVersion) return {
|
|
124
124
|
dbVersion,
|
|
@@ -157,7 +157,7 @@ var init_runner = __esmMin((() => {
|
|
|
157
157
|
init_errors();
|
|
158
158
|
log = createLogger("Sqlite:Migrations");
|
|
159
159
|
XOPC_DB_BASELINE_SCHEMA_VERSION = 165;
|
|
160
|
-
XOPC_DB_SCHEMA_VERSION =
|
|
160
|
+
XOPC_DB_SCHEMA_VERSION = 185;
|
|
161
161
|
MODULE_DIR = dirname(fileURLToPath(import.meta.url));
|
|
162
162
|
}));
|
|
163
163
|
//#endregion
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isHomeAttentionAcknowledged } from "../storage/sqlite/home-attention-repository.js";
|
|
2
|
-
import { getRelationshipSettings } from "../storage/sqlite/relationship-settings-repository.js";
|
|
3
2
|
import { listConnectorApprovals } from "../storage/sqlite/connector-repository.js";
|
|
3
|
+
import { getRelationshipSettings } from "../storage/sqlite/relationship-settings-repository.js";
|
|
4
4
|
import "../storage/sqlite/index.js";
|
|
5
5
|
import { TaskRepository } from "./task-repository.js";
|
|
6
6
|
import { TaskReadModelProjector } from "./task-read-model-projector.js";
|
|
@@ -362,10 +362,10 @@ var HomeQueryService = class {
|
|
|
362
362
|
id: `connector-approval:${approval.id}`,
|
|
363
363
|
kind: "connector_approval",
|
|
364
364
|
title: approval.actionId,
|
|
365
|
-
detail: `${approval.connectorId} · ${approval.scope}`,
|
|
365
|
+
detail: `${approval.connectorId} · ${approval.scope}\n${JSON.stringify(approval.argumentsPreview).slice(0, 1600)}`,
|
|
366
366
|
reason: "approval_required",
|
|
367
367
|
urgency: "now",
|
|
368
|
-
href: "/connectors",
|
|
368
|
+
href: approval.conversationId ? `/chat/${encodeURIComponent(approval.conversationId)}` : "/connectors",
|
|
369
369
|
updatedAt: Date.parse(approval.createdAt),
|
|
370
370
|
response: {
|
|
371
371
|
kind: "connector_approval",
|
|
@@ -3,8 +3,8 @@ import { init_logger } from "../../utils/logger.js";
|
|
|
3
3
|
import { transcriptRowsToClientHistory } from "../../session/client-history.js";
|
|
4
4
|
import { parseModelRef } from "../../agent/models/selection.js";
|
|
5
5
|
import { prependEnvelopeTimestamp } from "../../channels/envelope-timestamp.js";
|
|
6
|
-
import { RealtimeClient } from "../../../packages/realtime-client/src/index.js";
|
|
7
6
|
import { gatewayCredentialAuthorization } from "../../gateway/credential.js";
|
|
7
|
+
import { RealtimeClient } from "../../../packages/realtime-client/src/index.js";
|
|
8
8
|
import { buildTuiTranscriptTree, transcriptTreeEntryIdToRowNumber } from "../tui-transcript-tree.js";
|
|
9
9
|
import { computeTuiSessionStats } from "../tui-session-stats.js";
|
|
10
10
|
import { createRequire } from "node:module";
|
|
@@ -2,10 +2,10 @@ import { resolveStateDir } from "../config/paths-state.js";
|
|
|
2
2
|
import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
3
3
|
import { init_paths, resolveAgentProfileDir, resolveBundledSkillsDir } from "../config/paths.js";
|
|
4
4
|
import { resolveBootstrapFilesSync } from "../agent/bootstrap/bootstrap-files.js";
|
|
5
|
+
import { listConnectorInstances } from "../connectors/instances.js";
|
|
5
6
|
import { createSkillConfigManager, isSkillEnabled } from "../agent/skills/config.js";
|
|
6
7
|
import { loadSkills } from "../agent/skills/index.js";
|
|
7
8
|
import { createWorkflowCatalog } from "../agent/workflow/catalog.js";
|
|
8
|
-
import { listConnectorInstances } from "../connectors/instances.js";
|
|
9
9
|
import { getWorkspacePath } from "../config/workspace-path-helpers.js";
|
|
10
10
|
import "../config/index.js";
|
|
11
11
|
import { basename } from "node:path";
|
|
@@ -39,7 +39,6 @@ export declare const UserModelConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
|
39
39
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
40
40
|
writePolicy: z.ZodDefault<z.ZodEnum<{
|
|
41
41
|
allow: "allow";
|
|
42
|
-
confirm: "confirm";
|
|
43
42
|
deny: "deny";
|
|
44
43
|
}>>;
|
|
45
44
|
sensitiveWritePolicy: z.ZodDefault<z.ZodEnum<{
|
|
@@ -76,12 +75,10 @@ export declare const UserModelConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
|
76
75
|
staleRetentionDays: z.ZodDefault<z.ZodNumber>;
|
|
77
76
|
}, z.core.$strict>>;
|
|
78
77
|
}, z.core.$strict>>;
|
|
79
|
-
export declare
|
|
80
|
-
export declare const KnowledgeMemoryConfigSchema: z.ZodDefault<z.ZodPreprocess<z.ZodObject<{
|
|
78
|
+
export declare const KnowledgeMemoryConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
81
79
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
82
80
|
writePolicy: z.ZodDefault<z.ZodEnum<{
|
|
83
81
|
allow: "allow";
|
|
84
|
-
confirm: "confirm";
|
|
85
82
|
deny: "deny";
|
|
86
83
|
}>>;
|
|
87
84
|
readScopes: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
@@ -114,7 +111,7 @@ export declare const KnowledgeMemoryConfigSchema: z.ZodDefault<z.ZodPreprocess<z
|
|
|
114
111
|
allowExternalWrites: z.ZodDefault<z.ZodBoolean>;
|
|
115
112
|
allowedProviderIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
116
113
|
autoWriteKinds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
117
|
-
}, z.core.$strict
|
|
114
|
+
}, z.core.$strict>>;
|
|
118
115
|
export declare const ContextPlanningConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
119
116
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
120
117
|
maxAssertions: z.ZodDefault<z.ZodNumber>;
|
|
@@ -152,7 +149,6 @@ export declare const UserContextConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
|
152
149
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
153
150
|
writePolicy: z.ZodDefault<z.ZodEnum<{
|
|
154
151
|
allow: "allow";
|
|
155
|
-
confirm: "confirm";
|
|
156
152
|
deny: "deny";
|
|
157
153
|
}>>;
|
|
158
154
|
sensitiveWritePolicy: z.ZodDefault<z.ZodEnum<{
|
|
@@ -189,11 +185,10 @@ export declare const UserContextConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
|
189
185
|
staleRetentionDays: z.ZodDefault<z.ZodNumber>;
|
|
190
186
|
}, z.core.$strict>>;
|
|
191
187
|
}, z.core.$strict>>;
|
|
192
|
-
knowledgeMemory: z.ZodDefault<z.
|
|
188
|
+
knowledgeMemory: z.ZodDefault<z.ZodObject<{
|
|
193
189
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
194
190
|
writePolicy: z.ZodDefault<z.ZodEnum<{
|
|
195
191
|
allow: "allow";
|
|
196
|
-
confirm: "confirm";
|
|
197
192
|
deny: "deny";
|
|
198
193
|
}>>;
|
|
199
194
|
readScopes: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
@@ -226,7 +221,7 @@ export declare const UserContextConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
|
226
221
|
allowExternalWrites: z.ZodDefault<z.ZodBoolean>;
|
|
227
222
|
allowedProviderIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
228
223
|
autoWriteKinds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
229
|
-
}, z.core.$strict
|
|
224
|
+
}, z.core.$strict>>;
|
|
230
225
|
contextPlanning: z.ZodDefault<z.ZodObject<{
|
|
231
226
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
232
227
|
maxAssertions: z.ZodDefault<z.ZodNumber>;
|
|
@@ -10,26 +10,6 @@ function isValidTimeZone(value) {
|
|
|
10
10
|
return false;
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
-
function normalizeKnowledgeMemoryConfigInput(input) {
|
|
14
|
-
if (!input || typeof input !== "object" || Array.isArray(input)) return input;
|
|
15
|
-
const memory = input;
|
|
16
|
-
if (!Array.isArray(memory.sources)) return input;
|
|
17
|
-
const oldSources = memory.sources.filter((source) => typeof source === "string");
|
|
18
|
-
const visibilityScopes = new Set([
|
|
19
|
-
"session",
|
|
20
|
-
"workspace",
|
|
21
|
-
"project"
|
|
22
|
-
]);
|
|
23
|
-
const normalized = { ...memory };
|
|
24
|
-
if (!Array.isArray(normalized.readScopes)) normalized.readScopes = oldSources.filter((source) => visibilityScopes.has(source));
|
|
25
|
-
if (!Array.isArray(normalized.contentSources)) normalized.contentSources = [
|
|
26
|
-
...oldSources.some((source) => visibilityScopes.has(source)) ? ["memory"] : [],
|
|
27
|
-
...oldSources.includes("workspace") ? ["local_import"] : [],
|
|
28
|
-
...oldSources.includes("connector") ? ["connector"] : []
|
|
29
|
-
];
|
|
30
|
-
delete normalized.sources;
|
|
31
|
-
return normalized;
|
|
32
|
-
}
|
|
33
13
|
function resolveKnowledgeReadPolicy(config) {
|
|
34
14
|
return {
|
|
35
15
|
scopes: config.readScopes,
|
|
@@ -82,7 +62,7 @@ var init_config = __esmMin((() => {
|
|
|
82
62
|
MaintenanceTimeSchema = z.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/, "Expected time in HH:mm format");
|
|
83
63
|
UserModelConfigSchema = z.object({
|
|
84
64
|
enabled: z.boolean().default(true),
|
|
85
|
-
writePolicy:
|
|
65
|
+
writePolicy: z.enum(["deny", "allow"]).default("allow"),
|
|
86
66
|
sensitiveWritePolicy: WritePolicySchema.default("confirm"),
|
|
87
67
|
processingPolicy: z.enum(["local_only", "remote_allowed"]).default("remote_allowed"),
|
|
88
68
|
extraction: z.object({
|
|
@@ -124,7 +104,7 @@ var init_config = __esmMin((() => {
|
|
|
124
104
|
})
|
|
125
105
|
}).strict().default({
|
|
126
106
|
enabled: true,
|
|
127
|
-
writePolicy: "
|
|
107
|
+
writePolicy: "allow",
|
|
128
108
|
sensitiveWritePolicy: "confirm",
|
|
129
109
|
processingPolicy: "remote_allowed",
|
|
130
110
|
extraction: {
|
|
@@ -143,9 +123,9 @@ var init_config = __esmMin((() => {
|
|
|
143
123
|
staleRetentionDays: 30
|
|
144
124
|
}
|
|
145
125
|
});
|
|
146
|
-
KnowledgeMemoryConfigSchema = z.
|
|
126
|
+
KnowledgeMemoryConfigSchema = z.object({
|
|
147
127
|
enabled: z.boolean().default(true),
|
|
148
|
-
writePolicy:
|
|
128
|
+
writePolicy: z.enum(["deny", "allow"]).default("allow"),
|
|
149
129
|
readScopes: z.array(z.enum([
|
|
150
130
|
"global",
|
|
151
131
|
"agent",
|
|
@@ -182,9 +162,9 @@ var init_config = __esmMin((() => {
|
|
|
182
162
|
allowExternalWrites: z.boolean().default(false),
|
|
183
163
|
allowedProviderIds: z.array(z.string().min(1)).optional(),
|
|
184
164
|
autoWriteKinds: z.array(z.string().min(1)).optional()
|
|
185
|
-
}).strict()
|
|
165
|
+
}).strict().default({
|
|
186
166
|
enabled: true,
|
|
187
|
-
writePolicy: "
|
|
167
|
+
writePolicy: "allow",
|
|
188
168
|
readScopes: [
|
|
189
169
|
"global",
|
|
190
170
|
"agent",
|
|
@@ -227,4 +207,4 @@ var init_config = __esmMin((() => {
|
|
|
227
207
|
}));
|
|
228
208
|
//#endregion
|
|
229
209
|
init_config();
|
|
230
|
-
export { ContextCompactionPolicySchema, ContextPlanningConfigSchema, DEFAULT_CONTEXT_COMPACTION_POLICY, KnowledgeMemoryConfigSchema, UserContextConfigSchema, UserModelConfigSchema, init_config,
|
|
210
|
+
export { ContextCompactionPolicySchema, ContextPlanningConfigSchema, DEFAULT_CONTEXT_COMPACTION_POLICY, KnowledgeMemoryConfigSchema, UserContextConfigSchema, UserModelConfigSchema, init_config, resolveKnowledgeReadPolicy };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DatabaseSync } from 'node:sqlite';
|
|
2
|
+
export declare function memoryFingerprint(parts: unknown[]): string;
|
|
3
|
+
export declare function isMemorySuppressed(db: DatabaseSync, fingerprints: string[]): boolean;
|
|
4
|
+
export declare function suppressMemory(db: DatabaseSync, fingerprints: string[], now: number): void;
|
|
5
|
+
export declare function restoreMemory(db: DatabaseSync, fingerprints: string[]): void;
|
|
6
|
+
/** Remove cached decisions containing deleted content; retain only unrelated audit rows. */
|
|
7
|
+
export declare function clearMemoryAudit(db: DatabaseSync, type: 'assertion' | 'knowledge', id: string): void;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
//#region src/user-context/memory-suppression.ts
|
|
3
|
+
function memoryFingerprint(parts) {
|
|
4
|
+
const normalized = parts.map((part) => typeof part === "string" ? part.normalize("NFKC").toLowerCase().replace(/\s+/g, " ").trim() : part);
|
|
5
|
+
return createHash("sha256").update(JSON.stringify(normalized)).digest("hex");
|
|
6
|
+
}
|
|
7
|
+
function isMemorySuppressed(db, fingerprints) {
|
|
8
|
+
return fingerprints.some((key) => db.prepare("SELECT 1 FROM memory_suppressions WHERE fingerprint = ?").get(key));
|
|
9
|
+
}
|
|
10
|
+
function suppressMemory(db, fingerprints, now) {
|
|
11
|
+
const insert = db.prepare("INSERT OR IGNORE INTO memory_suppressions (fingerprint, created_at) VALUES (?, ?)");
|
|
12
|
+
for (const key of fingerprints) insert.run(key, now);
|
|
13
|
+
}
|
|
14
|
+
function restoreMemory(db, fingerprints) {
|
|
15
|
+
for (const key of fingerprints) db.prepare("DELETE FROM memory_suppressions WHERE fingerprint = ?").run(key);
|
|
16
|
+
}
|
|
17
|
+
/** Remove cached decisions containing deleted content; retain only unrelated audit rows. */
|
|
18
|
+
function clearMemoryAudit(db, type, id) {
|
|
19
|
+
db.prepare("DELETE FROM memory_maintenance_decisions WHERE object_type = ? AND object_id = ?").run(type, id);
|
|
20
|
+
db.prepare("DELETE FROM execution_context_items WHERE object_type = ? AND object_id = ?").run(type, id);
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
export { clearMemoryAudit, isMemorySuppressed, memoryFingerprint, restoreMemory, suppressMemory };
|
|
@@ -62,7 +62,7 @@ function recordExplicitRelationshipFollowUp(input) {
|
|
|
62
62
|
createdBy: "user",
|
|
63
63
|
evidenceId: evidence.id,
|
|
64
64
|
evidenceConfidence: 1
|
|
65
|
-
}, now).assertion;
|
|
65
|
+
}, now, { restoreDeleted: true }).assertion ?? null;
|
|
66
66
|
}
|
|
67
67
|
//#endregion
|
|
68
68
|
export { extractExplicitRelationshipFollowUp, recordExplicitRelationshipFollowUp };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { UnderstandingSourceGrant, UnderstandingSourceItem, UnderstandingSourceRun } from './types.js';
|
|
2
|
+
export type RefreshProgress = {
|
|
3
|
+
status: UnderstandingSourceRun['status'];
|
|
4
|
+
phase: 'queued' | 'waiting_desktop' | 'reading' | 'analyzing' | 'completed';
|
|
5
|
+
added?: number;
|
|
6
|
+
updated?: number;
|
|
7
|
+
itemsSeen?: number;
|
|
8
|
+
error?: string;
|
|
9
|
+
};
|
|
10
|
+
export type RefreshSourceRun = UnderstandingSourceRun & {
|
|
11
|
+
adapterId: string;
|
|
12
|
+
displayName: string;
|
|
13
|
+
};
|
|
14
|
+
export type RefreshBatch = {
|
|
15
|
+
id: string;
|
|
16
|
+
status: 'running' | 'completed' | 'partial' | 'failed';
|
|
17
|
+
sources: RefreshSourceRun[];
|
|
18
|
+
createdAt: number;
|
|
19
|
+
};
|
|
20
|
+
export interface UnderstandingRefreshDeps {
|
|
21
|
+
enabled(): boolean;
|
|
22
|
+
start(grant: UnderstandingSourceGrant, runId: string): Promise<Record<string, unknown>>;
|
|
23
|
+
progress(run: UnderstandingSourceRun): RefreshProgress | undefined;
|
|
24
|
+
analyzeDesktop(grant: UnderstandingSourceGrant, items: UnderstandingSourceItem[], signal: AbortSignal): Promise<{
|
|
25
|
+
added?: number;
|
|
26
|
+
updated?: number;
|
|
27
|
+
}>;
|
|
28
|
+
emit?(type: string, payload: unknown): void;
|
|
29
|
+
}
|
|
30
|
+
/** Coordinates existing source executors; the source run remains the authority for progress. */
|
|
31
|
+
export declare class UnderstandingRefreshService {
|
|
32
|
+
private readonly deps;
|
|
33
|
+
private readonly owner;
|
|
34
|
+
private readonly starting;
|
|
35
|
+
private readonly analyzing;
|
|
36
|
+
constructor(deps: UnderstandingRefreshDeps);
|
|
37
|
+
start(sourceIds?: string[]): RefreshBatch;
|
|
38
|
+
sources(): RefreshSourceRun[];
|
|
39
|
+
latest(): RefreshBatch | null;
|
|
40
|
+
get(id: string): RefreshBatch | null;
|
|
41
|
+
private update;
|
|
42
|
+
private reconcile;
|
|
43
|
+
private dispatch;
|
|
44
|
+
submitDesktop(runId: string, input: {
|
|
45
|
+
items: UnderstandingSourceItem[];
|
|
46
|
+
error?: string;
|
|
47
|
+
}): void;
|
|
48
|
+
}
|