@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
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { PACKAGE_VERSION, init_package_version } from "../../../package-version.js";
|
|
2
2
|
import { loadConfig } from "../../../config/loader.js";
|
|
3
3
|
import "../../../config/index.js";
|
|
4
|
-
import { normalizeUpdateChannel } from "../../../infra/update-channels.js";
|
|
5
4
|
import { acquireUpdateLock } from "../../../infra/update-lock.js";
|
|
6
|
-
import {
|
|
5
|
+
import { normalizeUpdateChannel } from "../../../infra/update-channels.js";
|
|
7
6
|
import { getUpdateAvailable, runGatewayUpdateCheck } from "../../../infra/update-startup.js";
|
|
8
7
|
import { createGatewayRouteLogger } from "../lib/route-logger.js";
|
|
8
|
+
import { formatUpdateApiResult, runGatewayUpdateWithPostSteps } from "../../../infra/update-runner.js";
|
|
9
9
|
import { streamSSE } from "hono/streaming";
|
|
10
10
|
//#region src/gateway/hono/routes/update.ts
|
|
11
11
|
init_package_version();
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Hono } from 'hono';
|
|
2
|
+
import { UnderstandingRefreshService } from '../../../user-context/sources/refresh-service.js';
|
|
3
|
+
import type { AuthenticatedRouteDeps } from './deps.js';
|
|
4
|
+
export declare function createUnderstandingRefreshService(deps: AuthenticatedRouteDeps): UnderstandingRefreshService;
|
|
5
|
+
export declare function registerUserModelRefreshRoutes(app: Hono, deps: AuthenticatedRouteDeps, refresh?: UnderstandingRefreshService): void;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { listConnectorLearningJobs } from "../../../storage/sqlite/connector-learning-repository.js";
|
|
2
|
+
import { getConnectorAccount } from "../../../storage/sqlite/connector-account-repository.js";
|
|
3
|
+
import "../../../storage/sqlite/index.js";
|
|
4
|
+
import { listUnderstandingSourceRuns } from "../../../user-context/sources/repository.js";
|
|
5
|
+
import { isLocalUnderstandingSourceId } from "../../../user-context/sources/local-source-contract.js";
|
|
6
|
+
import { getWorkDiscoveryRun } from "../../../work-discovery/repository.js";
|
|
7
|
+
import { normalizeUnderstandingSourceItems } from "../../../work-discovery/service.js";
|
|
8
|
+
import { UnderstandingRefreshService } from "../../../user-context/sources/refresh-service.js";
|
|
9
|
+
import { randomUUID } from "node:crypto";
|
|
10
|
+
//#region src/gateway/hono/routes/user-model-refresh.ts
|
|
11
|
+
function createUnderstandingRefreshService(deps) {
|
|
12
|
+
const service = deps.service;
|
|
13
|
+
return new UnderstandingRefreshService({
|
|
14
|
+
enabled: () => service.currentConfig.userContext.enabled && service.currentConfig.userContext.userModel.enabled,
|
|
15
|
+
emit: (type, payload) => service.emit(type, payload),
|
|
16
|
+
async start(grant, runId) {
|
|
17
|
+
if (grant.adapterId === "local-work-folders") return {
|
|
18
|
+
discoveryRunId: (await service.workDiscovery.rescanDirectorySource({
|
|
19
|
+
id: grant.id,
|
|
20
|
+
idempotencyKey: runId
|
|
21
|
+
})).id,
|
|
22
|
+
phase: "reading"
|
|
23
|
+
};
|
|
24
|
+
if (isLocalUnderstandingSourceId(grant.adapterId)) return { phase: "waiting_desktop" };
|
|
25
|
+
if (grant.adapterId.startsWith("connector:")) {
|
|
26
|
+
const account = typeof grant.config.accountId === "string" ? getConnectorAccount(grant.config.accountId) : void 0;
|
|
27
|
+
if (!account?.enabled || !account.currentConnectionId) throw new Error("Reconnect this source before updating.");
|
|
28
|
+
const job = service.requestConnectorLearning(account.currentConnectionId, {
|
|
29
|
+
mode: "incremental",
|
|
30
|
+
reason: "manual",
|
|
31
|
+
idempotencyKey: `understanding-refresh:${randomUUID()}`
|
|
32
|
+
});
|
|
33
|
+
if (!job) throw new Error("This source cannot currently be updated.");
|
|
34
|
+
return {
|
|
35
|
+
connectorLearningJobId: job.id,
|
|
36
|
+
accountId: account.id,
|
|
37
|
+
phase: "reading"
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
throw new Error("This source does not support understanding updates.");
|
|
41
|
+
},
|
|
42
|
+
progress(run) {
|
|
43
|
+
if (typeof run.metadata.discoveryRunId === "string") {
|
|
44
|
+
const discovery = getWorkDiscoveryRun(run.metadata.discoveryRunId);
|
|
45
|
+
if (!discovery) return {
|
|
46
|
+
status: "failed",
|
|
47
|
+
phase: "completed",
|
|
48
|
+
error: "Work folder update is no longer available."
|
|
49
|
+
};
|
|
50
|
+
return {
|
|
51
|
+
status: discovery.status === "completed" ? "completed" : discovery.status === "failed" || discovery.status === "canceled" ? "failed" : "running",
|
|
52
|
+
phase: discovery.status === "analyzing" ? "analyzing" : discovery.status === "queued" || discovery.status === "probing" ? "reading" : "completed",
|
|
53
|
+
error: discovery.errorMessage
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
if (typeof run.metadata.connectorLearningJobId === "string") {
|
|
57
|
+
const job = listConnectorLearningJobs({
|
|
58
|
+
accountId: String(run.metadata.accountId),
|
|
59
|
+
limit: 100
|
|
60
|
+
}).find((item) => item.id === run.metadata.connectorLearningJobId);
|
|
61
|
+
if (!job) return {
|
|
62
|
+
status: "failed",
|
|
63
|
+
phase: "completed",
|
|
64
|
+
error: "Connector update is no longer available."
|
|
65
|
+
};
|
|
66
|
+
const sourceRun = listUnderstandingSourceRuns(run.grantId, 100).find((item) => item.id !== run.id && item.metadata.connectorLearningJobId === job.id);
|
|
67
|
+
if (job.status === "completed") return {
|
|
68
|
+
status: sourceRun?.status === "partial" ? "partial" : "completed",
|
|
69
|
+
phase: "completed",
|
|
70
|
+
added: job.candidatesCreated,
|
|
71
|
+
itemsSeen: job.itemsDiscovered,
|
|
72
|
+
error: sourceRun?.status === "partial" ? "Some source information could not be analyzed. Retry this source." : void 0
|
|
73
|
+
};
|
|
74
|
+
if (job.status === "paused" || job.status === "failed") return {
|
|
75
|
+
status: "failed",
|
|
76
|
+
phase: "completed",
|
|
77
|
+
error: job.error ?? "Connector update failed."
|
|
78
|
+
};
|
|
79
|
+
return {
|
|
80
|
+
status: "running",
|
|
81
|
+
phase: job.phase === "deriving" ? "analyzing" : "reading",
|
|
82
|
+
itemsSeen: job.itemsDiscovered
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
async analyzeDesktop(grant, items, signal) {
|
|
87
|
+
const status = (await service.workDiscovery.importUnderstandingSources(items, grant.processingPolicy, signal, void 0, void 0, { grantId: grant.id })).sourceStatuses.find((item) => item.sourceId === grant.adapterId);
|
|
88
|
+
if (status?.status !== "completed") throw new Error(status?.error ?? "Source analysis did not complete.");
|
|
89
|
+
return {};
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
function registerUserModelRefreshRoutes(app, deps, refresh = createUnderstandingRefreshService(deps)) {
|
|
94
|
+
app.post("/api/user-model/refresh", deps.strictRateLimitMiddleware, async (c) => {
|
|
95
|
+
const input = await c.req.json().catch(() => null);
|
|
96
|
+
if (!input || typeof input !== "object" || Array.isArray(input) || input.sourceIds !== void 0 && (!Array.isArray(input.sourceIds) || !input.sourceIds.length || input.sourceIds.length > 100 || input.sourceIds.some((id) => typeof id !== "string" || !id))) return c.json({ error: "Provide sourceIds or an empty object to update all authorized sources." }, 400);
|
|
97
|
+
try {
|
|
98
|
+
return c.json({ batch: refresh.start(input.sourceIds) }, 202);
|
|
99
|
+
} catch (err) {
|
|
100
|
+
return c.json({ error: err instanceof Error ? err.message : String(err) }, 400);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
app.get("/api/user-model/refresh", (c) => c.json({
|
|
104
|
+
batch: refresh.latest(),
|
|
105
|
+
sources: refresh.sources()
|
|
106
|
+
}));
|
|
107
|
+
app.get("/api/user-model/refresh/:id", (c) => {
|
|
108
|
+
const batch = refresh.get(c.req.param("id"));
|
|
109
|
+
return batch ? c.json({ batch }) : c.json({ error: "Update not found." }, 404);
|
|
110
|
+
});
|
|
111
|
+
app.post("/api/user-model/refresh/sources/:runId/collection", deps.strictRateLimitMiddleware, async (c) => {
|
|
112
|
+
const raw = await c.req.json().catch(() => null);
|
|
113
|
+
if (!raw || !Array.isArray(raw.items) || raw.items.length > 1200 || raw.error !== void 0 && typeof raw.error !== "string") return c.json({ error: "Invalid collection." }, 400);
|
|
114
|
+
const items = normalizeUnderstandingSourceItems(raw.items);
|
|
115
|
+
if (raw.items.length && !items.length) return c.json({ error: "No valid source items." }, 400);
|
|
116
|
+
try {
|
|
117
|
+
refresh.submitDesktop(c.req.param("runId"), {
|
|
118
|
+
items,
|
|
119
|
+
error: raw.error
|
|
120
|
+
});
|
|
121
|
+
return c.json({ ok: true }, 202);
|
|
122
|
+
} catch (err) {
|
|
123
|
+
return c.json({ error: err instanceof Error ? err.message : String(err) }, 409);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
//#endregion
|
|
128
|
+
export { createUnderstandingRefreshService, registerUserModelRefreshRoutes };
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { createCollaborationRule, getCollaborationRule, listCollaborationRules, setCollaborationRuleStatus } from "../../../storage/sqlite/collaboration-rule-repository.js";
|
|
2
|
-
import { KnowledgeReviewConflictError, getKnowledgeItem, listKnowledgeItems, reviewKnowledgeItem, searchKnowledgeItems } from "../../../knowledge-memory/repository.js";
|
|
2
|
+
import { KnowledgeReviewConflictError, deleteKnowledgeItem, getKnowledgeItem, listKnowledgeItems, reviewKnowledgeItem, searchKnowledgeItems } from "../../../knowledge-memory/repository.js";
|
|
3
3
|
import "../../../knowledge-memory/index.js";
|
|
4
4
|
import { createPriorityWindow, createUserGoal, listPriorityWindows, listUserGoals, setUserGoalStatus } from "../../../user-model/goals.js";
|
|
5
|
-
import { getAssertionSlot, getUserAssertion, listUserAssertionSources, listUserAssertions, reconcileAssertion, setAssertionStatus } from "../../../user-model/repository.js";
|
|
5
|
+
import { deleteUserAssertion, getAssertionSlot, getUserAssertion, listUserAssertionSources, listUserAssertions, reconcileAssertion, setAssertionStatus } from "../../../user-model/repository.js";
|
|
6
6
|
import { applyUserProfilePatch, getUserProfileSnapshot } from "../../../user-model/profile.js";
|
|
7
7
|
import { bootstrapUserModel } from "../../../user-model/bootstrap.js";
|
|
8
|
+
import { canUseAssertion } from "../../../user-model/usage-policy.js";
|
|
8
9
|
import "../../../user-model/index.js";
|
|
9
10
|
import { listMemoryMaintenanceRuns } from "../../../memory-maintenance/service.js";
|
|
10
11
|
import "../../../memory-maintenance/index.js";
|
|
@@ -117,7 +118,8 @@ function assertionView(assertion, sources = listUserAssertionSources([assertion.
|
|
|
117
118
|
predicate: slot.predicate,
|
|
118
119
|
subject: slot.subject,
|
|
119
120
|
scope: slot.scope,
|
|
120
|
-
sources
|
|
121
|
+
sources,
|
|
122
|
+
usable: canUseAssertion(assertion)
|
|
121
123
|
};
|
|
122
124
|
}
|
|
123
125
|
function registerUserModelRoutes(authenticated, deps) {
|
|
@@ -259,11 +261,14 @@ function registerUserModelRoutes(authenticated, deps) {
|
|
|
259
261
|
createdBy: "user",
|
|
260
262
|
...typeof input.correctionOfAssertionId === "string" ? { correctionOfAssertionId: input.correctionOfAssertionId } : {}
|
|
261
263
|
};
|
|
262
|
-
return c.json(reconcileAssertion(candidate), 201);
|
|
264
|
+
return c.json(reconcileAssertion(candidate, Date.now(), { restoreDeleted: true }), 201);
|
|
263
265
|
} catch (error) {
|
|
264
266
|
return c.json({ error: errorMessage(error) }, 400);
|
|
265
267
|
}
|
|
266
268
|
});
|
|
269
|
+
authenticated.delete("/api/user-model/assertions/:id", write, (c) => {
|
|
270
|
+
return deleteUserAssertion(c.req.param("id")) ? c.json({ ok: true }) : c.json({ error: "Assertion not found" }, 404);
|
|
271
|
+
});
|
|
267
272
|
authenticated.patch("/api/user-model/assertions/:id/status", write, async (c) => {
|
|
268
273
|
const input = await body(c);
|
|
269
274
|
const status = input?.status;
|
|
@@ -307,7 +312,6 @@ function registerUserModelRoutes(authenticated, deps) {
|
|
|
307
312
|
...current.validFrom === void 0 ? {} : { validFrom: current.validFrom },
|
|
308
313
|
...current.validTo === void 0 ? {} : { validTo: current.validTo },
|
|
309
314
|
observedAt: Date.now(),
|
|
310
|
-
...current.reviewAt === void 0 ? {} : { reviewAt: current.reviewAt },
|
|
311
315
|
createdBy: "user",
|
|
312
316
|
correctionOfAssertionId: current.id
|
|
313
317
|
}));
|
|
@@ -405,6 +409,9 @@ function registerUserModelRoutes(authenticated, deps) {
|
|
|
405
409
|
const item = getKnowledgeItem(c.req.param("id"));
|
|
406
410
|
return item ? c.json({ item }) : c.json({ error: "Knowledge item not found" }, 404);
|
|
407
411
|
});
|
|
412
|
+
authenticated.delete("/api/knowledge-memory/:id", write, (c) => {
|
|
413
|
+
return deleteKnowledgeItem(c.req.param("id")) ? c.json({ ok: true }) : c.json({ error: "Knowledge item not found" }, 404);
|
|
414
|
+
});
|
|
408
415
|
authenticated.post("/api/knowledge-memory/:id/review", write, async (c) => {
|
|
409
416
|
const input = await body(c);
|
|
410
417
|
const action = String(input?.action ?? "");
|
|
@@ -216,36 +216,6 @@ function registerWorkDiscoveryRoutes(authenticated, deps) {
|
|
|
216
216
|
}, 400);
|
|
217
217
|
}
|
|
218
218
|
});
|
|
219
|
-
authenticated.post("/api/work-discovery/runs/:runId/profile", limited, async (c) => {
|
|
220
|
-
const body = await c.req.json().catch(() => null);
|
|
221
|
-
const decisions = (body && typeof body === "object" && Array.isArray(body.decisions) ? body.decisions : []).flatMap((value) => {
|
|
222
|
-
if (!value || typeof value !== "object") return [];
|
|
223
|
-
const item = value;
|
|
224
|
-
const id = typeof item.id === "string" ? item.id.trim() : "";
|
|
225
|
-
const status = item.status === "accepted" || item.status === "edited" || item.status === "rejected" ? item.status : void 0;
|
|
226
|
-
if (!id || !status) return [];
|
|
227
|
-
return [{
|
|
228
|
-
id,
|
|
229
|
-
status,
|
|
230
|
-
...typeof item.statement === "string" ? { statement: item.statement } : {}
|
|
231
|
-
}];
|
|
232
|
-
}).slice(0, 10);
|
|
233
|
-
if (!decisions.length) return c.json({
|
|
234
|
-
ok: false,
|
|
235
|
-
error: "At least one valid decision is required"
|
|
236
|
-
}, 400);
|
|
237
|
-
const run = service.updateProfileCandidates({
|
|
238
|
-
runId: c.req.param("runId"),
|
|
239
|
-
decisions
|
|
240
|
-
});
|
|
241
|
-
return run ? c.json({
|
|
242
|
-
ok: true,
|
|
243
|
-
run
|
|
244
|
-
}) : c.json({
|
|
245
|
-
ok: false,
|
|
246
|
-
error: "Profile candidates not found"
|
|
247
|
-
}, 404);
|
|
248
|
-
});
|
|
249
219
|
authenticated.post("/api/work-discovery/runs/:runId/suggestions/:suggestionId/select", (c) => {
|
|
250
220
|
return service.selectSuggestion(c.req.param("runId"), c.req.param("suggestionId")) ? c.json({ ok: true }) : c.json({
|
|
251
221
|
ok: false,
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { GatewayLockError, acquireGatewayLock, init_lock } from "./lock.js";
|
|
2
2
|
import { buildDefaultCorsOrigins, isAllInterfacesHost, isLoopbackHost, resolveEffectiveGatewayPort, resolveGatewayServiceListenPort } from "./host.js";
|
|
3
3
|
import { defaultGatewayBindMode, isContainerEnvironment, resolveGatewayBindHost, resolveGatewayBindHostSync, resolveGatewayBindMode, resolveGatewayEffectiveHost } from "../config/gateway-bind.js";
|
|
4
|
-
import { checkPortAvailable, forceFreePortAndWait, listPortListeners, parseLsofOutput } from "./ports.js";
|
|
5
4
|
import { assertGatewayAuthConfigured, extractToken, resolveGatewayAuth, validateToken } from "./auth.js";
|
|
6
5
|
import { resolveGatewayListenHost, resolveGatewayListenPlan } from "./listen.js";
|
|
7
6
|
import { buckets } from "./rate-limit/buckets.js";
|
|
@@ -13,6 +12,7 @@ import { GatewayService } from "./service.js";
|
|
|
13
12
|
import { createHonoApp } from "./hono/app.js";
|
|
14
13
|
import { GatewayServer } from "./server.js";
|
|
15
14
|
import { runGatewayLoop } from "./run-loop.js";
|
|
15
|
+
import { checkPortAvailable, forceFreePortAndWait, listPortListeners, parseLsofOutput } from "./ports.js";
|
|
16
16
|
import { apiError, apiOk } from "./protocol.js";
|
|
17
17
|
import "./hono/index.js";
|
|
18
18
|
import { assertSecureGatewayHttpUrl, assertSecureWebSocketUrl, isInsecurePrivateWsAllowed, isSecureWebSocketUrl } from "./ws-security.js";
|
|
@@ -2,9 +2,9 @@ import { acquireGatewayLock, init_lock } from "./lock.js";
|
|
|
2
2
|
import { loadConfig } from "../config/loader.js";
|
|
3
3
|
import "../config/index.js";
|
|
4
4
|
import { isRestartEnabled } from "../config/commands.flags.js";
|
|
5
|
-
import { consumeGatewayRestartIntentSync, consumeGatewaySigusr1RestartAuthorization, isGatewaySigusr1RestartExternallyAllowed, resetGatewayRestartStateForInProcessRestart, scheduleGatewaySigusr1Restart, setGatewaySigusr1RestartPolicy } from "../infra/restart.js";
|
|
6
5
|
import { runBootstrapMigrationsSync } from "../migrations/runner.js";
|
|
7
6
|
import { restartGatewayProcessWithFreshPid } from "./respawn.js";
|
|
7
|
+
import { consumeGatewayRestartIntentSync, consumeGatewaySigusr1RestartAuthorization, isGatewaySigusr1RestartExternallyAllowed, resetGatewayRestartStateForInProcessRestart, scheduleGatewaySigusr1Restart, setGatewaySigusr1RestartPolicy } from "../infra/restart.js";
|
|
8
8
|
//#region src/gateway/run-loop.ts
|
|
9
9
|
/**
|
|
10
10
|
* Gateway Run Loop - Core run loop for gateway process management
|
|
@@ -66,21 +66,18 @@ import { ConnectionRecoveryService } from "../connectors/connection-recovery-ser
|
|
|
66
66
|
import { startConnectorLearningCoordinator } from "../connectors/learning-coordinator.js";
|
|
67
67
|
import { ConnectedSourceChangePublisher } from "../connectors/source-change-publisher.js";
|
|
68
68
|
import { startConnectorSupervisor } from "../connectors/supervisor.js";
|
|
69
|
-
import { EndpointToolRuntime } from "../endpoint-tools/runtime.js";
|
|
70
|
-
import "../endpoint-tools/index.js";
|
|
71
69
|
import { DiscussionService } from "../discussions/service.js";
|
|
72
70
|
import { DiscussionOrganizer } from "../discussions/organizer.js";
|
|
73
71
|
import { DiscussionLiveWorker } from "../discussions/live-worker.js";
|
|
74
72
|
import { DiscussionOrganizerWorker } from "../discussions/organizer-worker.js";
|
|
75
73
|
import { DiscussionSealer } from "../discussions/sealer.js";
|
|
76
74
|
import "../discussions/index.js";
|
|
77
|
-
import {
|
|
78
|
-
import
|
|
79
|
-
import { LocalAppService } from "../local-apps/service.js";
|
|
80
|
-
import "../local-apps/index.js";
|
|
75
|
+
import { EndpointToolRuntime } from "../endpoint-tools/runtime.js";
|
|
76
|
+
import "../endpoint-tools/index.js";
|
|
81
77
|
import { assertGatewayAuthConfigured, extractToken, resolveGatewayAuth, validateToken } from "./auth.js";
|
|
82
78
|
import { prepareAutomationAgentSession } from "./automation-agent-session.js";
|
|
83
79
|
import { stopTailscaleExposure } from "./tailscale-lifecycle.js";
|
|
80
|
+
import { createBackgroundTask } from "../infra/background-task.js";
|
|
84
81
|
import { buildTaskAgentContext } from "../agent/source-context/task-context.js";
|
|
85
82
|
import { deliverProactiveCard } from "../proactive/inbox/delivery.js";
|
|
86
83
|
import { WorkDiscoveryService } from "../work-discovery/service.js";
|
|
@@ -112,6 +109,8 @@ import { getXopcCloudCatalogCoordinator } from "../providers/xopc-cloud-catalog-
|
|
|
112
109
|
import { ModelCatalogSyncService } from "../providers/model-catalog-sync-service.js";
|
|
113
110
|
import { runBootstrapMigrationsSync } from "../migrations/runner.js";
|
|
114
111
|
import { NotificationService } from "../notifications/service.js";
|
|
112
|
+
import { LocalAppService } from "../local-apps/service.js";
|
|
113
|
+
import "../local-apps/index.js";
|
|
115
114
|
import { createRuntimeBrowserAutomationService } from "../browser/automations/runtime-service.js";
|
|
116
115
|
import "../browser/automations/index.js";
|
|
117
116
|
import { mapProductEventToProactive } from "../proactive/events/product-event-bridge.js";
|
|
@@ -121,6 +120,7 @@ import { ProactiveWorker } from "../proactive/execution/worker.js";
|
|
|
121
120
|
import { ProactiveTemporalWorker } from "../proactive/temporal/worker.js";
|
|
122
121
|
import { ProactiveInboxWorker } from "../proactive/inbox/worker.js";
|
|
123
122
|
import "../proactive/index.js";
|
|
123
|
+
import { scheduleGatewayUpdateCheck } from "../infra/update-startup.js";
|
|
124
124
|
import { resolveChannelConnectDeferSet } from "./resolve-channel-connect-defer.js";
|
|
125
125
|
import { restartGatewayProcessWithFreshPid } from "./respawn.js";
|
|
126
126
|
import { GatewaySessionsApi } from "./service/sessions-api.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { isGatewayArgv, parseProcCmdline } from "./gateway-process-argv.js";
|
|
2
1
|
import { listPortListeners } from "../gateway/ports.js";
|
|
2
|
+
import { isGatewayArgv, parseProcCmdline } from "./gateway-process-argv.js";
|
|
3
3
|
import fs from "node:fs";
|
|
4
4
|
import { spawnSync } from "node:child_process";
|
|
5
5
|
//#region src/infra/gateway-processes.ts
|
|
@@ -4,8 +4,8 @@ import { init_paths, resolveConfigPath } from "../config/paths.js";
|
|
|
4
4
|
import { init_loader, loadConfig } from "../config/loader.js";
|
|
5
5
|
import { isRestartEnabled } from "../config/commands.flags.js";
|
|
6
6
|
import { resolveGatewayService } from "../daemon/service.js";
|
|
7
|
-
import { findVerifiedGatewayListenerPidsOnPortSync, signalVerifiedGatewayPidSync } from "./gateway-processes.js";
|
|
8
7
|
import { authorizeGatewaySigusr1Restart, writeGatewayRestartIntentSync } from "./restart.js";
|
|
8
|
+
import { findVerifiedGatewayListenerPidsOnPortSync, signalVerifiedGatewayPidSync } from "./gateway-processes.js";
|
|
9
9
|
import { refreshGatewayServiceAfterUpdate } from "./update-service-refresh.js";
|
|
10
10
|
//#region src/infra/update-restart.ts
|
|
11
11
|
init_loader();
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { runPostUpdateExtensionSync } from "../extensions/update.js";
|
|
2
|
+
import "./update-channels.js";
|
|
3
|
+
import { compareSemver, resolveNpmChannelTag } from "./update-check.js";
|
|
2
4
|
import { readPackageName, readPackageVersion } from "./package-json.js";
|
|
3
5
|
import { createDefaultCommandRunner, runCommandWithTimeout } from "./run-command.js";
|
|
4
6
|
import { XOPC_PACKAGE_NAME, cleanupGlobalRenameDirs, createGlobalInstallEnv, detectGlobalInstallManagerForRoot, resolveGlobalInstallSpec, resolveGlobalInstallTarget } from "./update-global.js";
|
|
5
7
|
import { runGlobalPackageUpdateSteps } from "./package-update-steps.js";
|
|
6
8
|
import { resolveStableNodePath } from "./stable-node-path.js";
|
|
7
|
-
import "./update-channels.js";
|
|
8
|
-
import { compareSemver, resolveNpmChannelTag } from "./update-check.js";
|
|
9
9
|
import { trimLogTail } from "./update-log.js";
|
|
10
10
|
import { maybeRestartGatewayAfterUpdate } from "./update-restart.js";
|
|
11
11
|
import path from "node:path";
|
|
@@ -3,9 +3,9 @@ import { init_paths_state, resolveUpdateCheckStatePath } from "../config/paths-s
|
|
|
3
3
|
import { createLogger } from "../utils/logger/index.js";
|
|
4
4
|
import { init_logger } from "../utils/logger.js";
|
|
5
5
|
import { init_write_file_atomic, writeTextAtomic } from "./write-file-atomic.js";
|
|
6
|
+
import { acquireUpdateLock } from "./update-lock.js";
|
|
6
7
|
import { normalizeUpdateChannel } from "./update-channels.js";
|
|
7
8
|
import { compareSemver, detectInstallKind, resolveNpmChannelTag, resolvePackageRoot } from "./update-check.js";
|
|
8
|
-
import { acquireUpdateLock } from "./update-lock.js";
|
|
9
9
|
import { createHash, randomUUID } from "node:crypto";
|
|
10
10
|
import { readFile } from "node:fs/promises";
|
|
11
11
|
//#region src/infra/update-startup.ts
|
|
@@ -106,7 +106,7 @@ var ConnectedKnowledgePipeline = class {
|
|
|
106
106
|
status: "completed"
|
|
107
107
|
});
|
|
108
108
|
result.completed += 1;
|
|
109
|
-
result.recordIds.push(written.item.id);
|
|
109
|
+
if (written.item) result.recordIds.push(written.item.id);
|
|
110
110
|
} catch (error) {
|
|
111
111
|
const message = error instanceof Error ? error.message : String(error);
|
|
112
112
|
completeKnowledgeSourceItemSynthesis({
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { KnowledgeReviewConflictError, classifyKnowledgeContentSource, getKnowledgeItem, knowledgeItemAllowed, listKnowledgeItems, listKnowledgeStatusEvents, reviewKnowledgeItem, searchKnowledgeItems, transitionKnowledgeStatus, writeKnowledgeItem } from "./repository.js";
|
|
2
|
-
export { KnowledgeReviewConflictError, classifyKnowledgeContentSource, getKnowledgeItem, knowledgeItemAllowed, listKnowledgeItems, listKnowledgeStatusEvents, reviewKnowledgeItem, searchKnowledgeItems, transitionKnowledgeStatus, writeKnowledgeItem };
|
|
1
|
+
import { KnowledgeReviewConflictError, classifyKnowledgeContentSource, deleteKnowledgeItem, getKnowledgeItem, isKnowledgeCurrent, knowledgeItemAllowed, listKnowledgeItems, listKnowledgeStatusEvents, reviewKnowledgeItem, searchKnowledgeItems, transitionKnowledgeStatus, writeKnowledgeItem } from "./repository.js";
|
|
2
|
+
export { KnowledgeReviewConflictError, classifyKnowledgeContentSource, deleteKnowledgeItem, getKnowledgeItem, isKnowledgeCurrent, knowledgeItemAllowed, listKnowledgeItems, listKnowledgeStatusEvents, reviewKnowledgeItem, searchKnowledgeItems, transitionKnowledgeStatus, writeKnowledgeItem };
|
|
@@ -21,6 +21,7 @@ export interface WriteKnowledgeInput {
|
|
|
21
21
|
derivedFromRecalledContext?: boolean;
|
|
22
22
|
source?: Record<string, unknown>;
|
|
23
23
|
replaceExisting?: boolean;
|
|
24
|
+
restoreDeleted?: boolean;
|
|
24
25
|
now?: number;
|
|
25
26
|
}
|
|
26
27
|
export declare class KnowledgeReviewConflictError extends Error {
|
|
@@ -29,6 +30,10 @@ export declare class KnowledgeReviewConflictError extends Error {
|
|
|
29
30
|
export declare function writeKnowledgeItem(input: WriteKnowledgeInput): {
|
|
30
31
|
item: KnowledgeItem;
|
|
31
32
|
created: boolean;
|
|
33
|
+
} | {
|
|
34
|
+
item?: undefined;
|
|
35
|
+
created: false;
|
|
36
|
+
suppressed: true;
|
|
32
37
|
};
|
|
33
38
|
export declare function getKnowledgeItem(id: string): KnowledgeItem | undefined;
|
|
34
39
|
export declare function listKnowledgeItems(input?: {
|
|
@@ -70,3 +75,5 @@ export declare function searchKnowledgeItems(input: {
|
|
|
70
75
|
}): KnowledgeItem[];
|
|
71
76
|
export declare function classifyKnowledgeContentSource(item: KnowledgeItem): KnowledgeContentSource;
|
|
72
77
|
export declare function knowledgeItemAllowed(item: KnowledgeItem, policy: KnowledgeReadPolicy): boolean;
|
|
78
|
+
export declare function deleteKnowledgeItem(id: string, now?: number): boolean;
|
|
79
|
+
export declare function isKnowledgeCurrent(item: KnowledgeItem, asOf?: number): boolean;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { getSqliteDatabase, init_transaction, runSqliteWriteTransaction } from "../storage/sqlite/transaction.js";
|
|
2
2
|
import { validateScope } from "../user-model/domain.js";
|
|
3
3
|
import { buildFts5SearchQuery, init_fts } from "../storage/sqlite/fts.js";
|
|
4
|
+
import { clearMemoryAudit, isMemorySuppressed, memoryFingerprint, restoreMemory, suppressMemory } from "../user-context/memory-suppression.js";
|
|
4
5
|
import { randomUUID } from "node:crypto";
|
|
5
6
|
//#region src/knowledge-memory/repository.ts
|
|
6
7
|
init_fts();
|
|
@@ -60,7 +61,14 @@ function writeKnowledgeItem(input) {
|
|
|
60
61
|
if (input.validFrom !== void 0 && input.validTo !== void 0 && input.validTo < input.validFrom) throw new Error("Knowledge validTo must be greater than or equal to validFrom.");
|
|
61
62
|
const principalId = input.principalId ?? "local-owner";
|
|
62
63
|
const now = input.now ?? Date.now();
|
|
64
|
+
const admittedStatus = input.status ?? (input.originClass === "owner" || input.originClass !== "untrusted" && input.confidence >= .7 && !input.derivedFromRecalledContext ? "active" : "candidate");
|
|
63
65
|
return runSqliteWriteTransaction((db) => {
|
|
66
|
+
const keys = knowledgeFingerprints(input);
|
|
67
|
+
if (input.restoreDeleted && input.originClass === "owner") restoreMemory(db, keys);
|
|
68
|
+
if (isMemorySuppressed(db, keys)) return {
|
|
69
|
+
created: false,
|
|
70
|
+
suppressed: true
|
|
71
|
+
};
|
|
64
72
|
const existingStatuses = input.replaceExisting ? [
|
|
65
73
|
"candidate",
|
|
66
74
|
"active",
|
|
@@ -76,12 +84,12 @@ function writeKnowledgeItem(input) {
|
|
|
76
84
|
const existing = db.prepare(`SELECT * FROM knowledge_items WHERE principal_id = ?
|
|
77
85
|
AND canonical_key = ? AND scope_type = ? AND COALESCE(scope_id, '') = COALESCE(?, '')
|
|
78
86
|
AND status IN (${existingStatuses.map(() => "?").join(", ")})`).get(principalId, input.canonicalKey.trim(), input.scope.type, input.scope.id ?? null, ...existingStatuses);
|
|
79
|
-
if (existing && !input.replaceExisting) return {
|
|
87
|
+
if (existing && (!input.replaceExisting || existing.origin_class === "owner" && input.originClass !== "owner")) return {
|
|
80
88
|
item: fromRow(existing),
|
|
81
89
|
created: false
|
|
82
90
|
};
|
|
83
91
|
if (existing) {
|
|
84
|
-
const nextStatus =
|
|
92
|
+
const nextStatus = admittedStatus;
|
|
85
93
|
db.prepare(`UPDATE knowledge_items SET kind = ?, content = ?, record_class = ?, status = ?, confidence = ?,
|
|
86
94
|
importance = ?, valid_from = ?, valid_to = ?, expires_at = ?, review_at = ?,
|
|
87
95
|
origin_class = ?, source_agent_id = ?, source_conversation_id = ?, source_turn_id = ?,
|
|
@@ -102,7 +110,7 @@ function writeKnowledgeItem(input) {
|
|
|
102
110
|
};
|
|
103
111
|
}
|
|
104
112
|
const id = randomUUID();
|
|
105
|
-
const status =
|
|
113
|
+
const status = admittedStatus;
|
|
106
114
|
db.prepare(`INSERT INTO knowledge_items (
|
|
107
115
|
knowledge_id, principal_id, kind, scope_type, scope_id, content, canonical_key, record_class,
|
|
108
116
|
status, confidence, importance, valid_from, valid_to, expires_at, review_at,
|
|
@@ -154,12 +162,14 @@ function transitionKnowledgeStatus(input) {
|
|
|
154
162
|
const current = db.prepare("SELECT * FROM knowledge_items WHERE knowledge_id = ?").get(input.id);
|
|
155
163
|
if (!current) return void 0;
|
|
156
164
|
if (input.expectedStatus && current.status !== input.expectedStatus) throw new KnowledgeReviewConflictError(`Knowledge status changed from ${input.expectedStatus} to ${current.status}.`);
|
|
157
|
-
db.prepare(`UPDATE knowledge_items SET status = ?, content = COALESCE(?, content),
|
|
158
|
-
|
|
165
|
+
db.prepare(`UPDATE knowledge_items SET status = ?, content = COALESCE(?, content),
|
|
166
|
+
origin_class = CASE WHEN ? THEN 'owner' ELSE origin_class END, updated_at = ?
|
|
167
|
+
WHERE knowledge_id = ?`).run(input.status, content ?? null, input.actor === "user" && input.status === "active" ? 1 : 0, now, input.id);
|
|
159
168
|
if (content !== void 0) {
|
|
160
169
|
db.prepare("DELETE FROM knowledge_items_fts WHERE knowledge_id = ?").run(input.id);
|
|
161
170
|
db.prepare("INSERT INTO knowledge_items_fts(content, knowledge_id) VALUES (?, ?)").run(content, input.id);
|
|
162
171
|
}
|
|
172
|
+
if (input.actor === "user" && (input.status === "rejected" || input.status === "archived")) suppressMemory(db, knowledgeFingerprints(fromRow(current)), now);
|
|
163
173
|
insertStatusEvent(db, {
|
|
164
174
|
knowledgeId: input.id,
|
|
165
175
|
fromStatus: current.status,
|
|
@@ -184,7 +194,8 @@ const REVIEW_TRANSITIONS = {
|
|
|
184
194
|
from: [
|
|
185
195
|
"candidate",
|
|
186
196
|
"needs_review",
|
|
187
|
-
"stale"
|
|
197
|
+
"stale",
|
|
198
|
+
"active"
|
|
188
199
|
],
|
|
189
200
|
to: "active",
|
|
190
201
|
requiresContent: true
|
|
@@ -292,11 +303,12 @@ function searchKnowledgeItems(input) {
|
|
|
292
303
|
AND (k.valid_from IS NULL OR k.valid_from <= ?)
|
|
293
304
|
AND (k.valid_to IS NULL OR k.valid_to >= ?)
|
|
294
305
|
AND (k.expires_at IS NULL OR k.expires_at >= ?)
|
|
306
|
+
AND (k.review_at IS NULL OR k.review_at > ?)
|
|
295
307
|
${input.recordClass ? "AND k.record_class = ?" : ""}
|
|
296
308
|
${input.trustedOnly ? "AND k.origin_class != 'untrusted'" : ""}
|
|
297
309
|
AND ${contentSource}
|
|
298
310
|
AND ${visible.sql}
|
|
299
|
-
ORDER BY rank ASC, k.importance DESC, k.updated_at DESC LIMIT ?`).all(fts, principalId, asOf, asOf, asOf, ...input.recordClass ? [input.recordClass] : [], ...visible.values, limit).map(fromRow);
|
|
311
|
+
ORDER BY rank ASC, k.importance DESC, k.updated_at DESC LIMIT ?`).all(fts, principalId, asOf, asOf, asOf, asOf, ...input.recordClass ? [input.recordClass] : [], ...visible.values, limit).map(fromRow);
|
|
300
312
|
}
|
|
301
313
|
function classifyKnowledgeContentSource(item) {
|
|
302
314
|
if (item.recordClass === "memory") return "memory";
|
|
@@ -305,5 +317,43 @@ function classifyKnowledgeContentSource(item) {
|
|
|
305
317
|
function knowledgeItemAllowed(item, policy) {
|
|
306
318
|
return policy.scopes.includes(item.scope.type) && policy.contentSources.includes(classifyKnowledgeContentSource(item));
|
|
307
319
|
}
|
|
320
|
+
function knowledgeFingerprints(input) {
|
|
321
|
+
const principal = input.principalId ?? "local-owner";
|
|
322
|
+
return [memoryFingerprint([
|
|
323
|
+
"knowledge-key",
|
|
324
|
+
principal,
|
|
325
|
+
input.scope.type,
|
|
326
|
+
input.scope.id ?? "",
|
|
327
|
+
input.canonicalKey
|
|
328
|
+
]), memoryFingerprint([
|
|
329
|
+
"knowledge-content",
|
|
330
|
+
principal,
|
|
331
|
+
input.scope.type,
|
|
332
|
+
input.scope.id ?? "",
|
|
333
|
+
input.content
|
|
334
|
+
])];
|
|
335
|
+
}
|
|
336
|
+
function deleteKnowledgeItem(id, now = Date.now()) {
|
|
337
|
+
return runSqliteWriteTransaction((db) => {
|
|
338
|
+
const rows = db.prepare(`WITH RECURSIVE deleted(id) AS (
|
|
339
|
+
SELECT knowledge_id FROM knowledge_items WHERE knowledge_id = ?
|
|
340
|
+
UNION SELECT k.knowledge_id FROM knowledge_items k JOIN deleted d
|
|
341
|
+
ON json_extract(k.source_json, '$.episodeKnowledgeId') = d.id
|
|
342
|
+
OR k.knowledge_id = (SELECT json_extract(source_json, '$.episodeKnowledgeId')
|
|
343
|
+
FROM knowledge_items WHERE knowledge_id = d.id)
|
|
344
|
+
) SELECT * FROM knowledge_items WHERE knowledge_id IN (SELECT id FROM deleted)`).all(id);
|
|
345
|
+
for (const row of rows) {
|
|
346
|
+
const item = fromRow(row);
|
|
347
|
+
suppressMemory(db, knowledgeFingerprints(item), now);
|
|
348
|
+
clearMemoryAudit(db, "knowledge", item.id);
|
|
349
|
+
db.prepare("DELETE FROM knowledge_items_fts WHERE knowledge_id = ?").run(item.id);
|
|
350
|
+
db.prepare("DELETE FROM knowledge_items WHERE knowledge_id = ?").run(item.id);
|
|
351
|
+
}
|
|
352
|
+
return rows.length > 0;
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
function isKnowledgeCurrent(item, asOf = Date.now()) {
|
|
356
|
+
return item.status === "active" && (item.validFrom === void 0 || item.validFrom <= asOf) && (item.validTo === void 0 || item.validTo >= asOf) && (item.expiresAt === void 0 || item.expiresAt >= asOf) && (item.reviewAt === void 0 || item.reviewAt > asOf);
|
|
357
|
+
}
|
|
308
358
|
//#endregion
|
|
309
|
-
export { KnowledgeReviewConflictError, classifyKnowledgeContentSource, getKnowledgeItem, knowledgeItemAllowed, listKnowledgeItems, listKnowledgeStatusEvents, reviewKnowledgeItem, searchKnowledgeItems, transitionKnowledgeStatus, writeKnowledgeItem };
|
|
359
|
+
export { KnowledgeReviewConflictError, classifyKnowledgeContentSource, deleteKnowledgeItem, getKnowledgeItem, isKnowledgeCurrent, knowledgeItemAllowed, listKnowledgeItems, listKnowledgeStatusEvents, reviewKnowledgeItem, searchKnowledgeItems, transitionKnowledgeStatus, writeKnowledgeItem };
|