@xopcai/xopc 0.0.248 → 0.0.250
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-etpmyV7S.js → activity-store-DfBjTSo9.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BmKxSM1k.js → agent-avatar-dicebear-BN6FJXkJ.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-C7rZH1A2.js +1 -0
- package/dist/gateway/static/root/assets/agents-CgGaoo4z.js +1 -0
- package/dist/gateway/static/root/assets/{api-B0-hLuZ1.js → api-zxpcJfgj.js} +1 -1
- package/dist/gateway/static/root/assets/app-management-settings-panel-D2gMshuS.js +1 -0
- package/dist/gateway/static/root/assets/appearance-settings-wMu0jSKx.js +1 -0
- package/dist/gateway/static/root/assets/apps-page-KF1Gnv36.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-BnMSgZvR.js → archive-plugin-u6EE3JV8.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-CejsQMev.js → attachment-load-DbJurnv-.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-RC8EyoAf.js → automations-page-Ew_e5HDn.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-Ch-ldu35.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-DGjppLSG.js → binary-plugins-DtDFNfPM.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-CWdP4bUc.js → block-editor-CnAwmabq.js} +44 -44
- package/dist/gateway/static/root/assets/browser-settings-page-DtVhsHJW.js +8 -0
- package/dist/gateway/static/root/assets/{browser-workflow-inputs-BQ1Ilw_o.js → browser-workflow-inputs-BX1-uM9L.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-workflows-page-CJh4NyxT.js → browser-workflows-page-CcbUOWDF.js} +2 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel--sXeylhe.js +7 -0
- package/dist/gateway/static/root/assets/channels-settings-AXSBDujZ.js +1 -0
- package/dist/gateway/static/root/assets/{channels-status-swr-Ohhee4vm.js → channels-status-swr-CX-yWwLD.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-terminal-dock-BOtoKTK3.js → chat-terminal-dock-CryTDNdD.js} +2 -2
- package/dist/gateway/static/root/assets/connectors-page-HBHUWohz.js +2 -0
- package/dist/gateway/static/root/assets/{cron-expression-DTj1V3Sw.js → cron-expression-ji5aWrjG.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-Yr6OCvGL.js → date-picker-Dro_w3eX.js} +1 -1
- package/dist/gateway/static/root/assets/dependency-picker-Ce19KKnX.js +1 -0
- package/dist/gateway/static/root/assets/{desktop-pet-DbGzggPF.js → desktop-pet-DsSi-3uZ.js} +1 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-8WQ4woJy.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-DgTtk4KC.js → extension-debug-page-CgvEBfLZ.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-DtQeiP6f.js → extension-page-DkznBbMj.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-BOjhchK2.js +1 -0
- package/dist/gateway/static/root/assets/files-BArWTfr7.js +1 -0
- package/dist/gateway/static/root/assets/gateway-config-api-OEruhhX3.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-config-swr-DXuXtU1w.js → gateway-config-swr-CMNbl0FZ.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-BgH3A0LO.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-CzBzglzQ.js → gateway-startup-retry-CR7Xg8As.js} +1 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-C97naDkO.js +1 -0
- package/dist/gateway/static/root/assets/home-page-BBKKme4G.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-TIgsn04n.js → image-generation-api-C5mn73ca.js} +1 -1
- package/dist/gateway/static/root/assets/index-BcaF-dgQ.js +72 -0
- package/dist/gateway/static/root/assets/index-DAryGvZ7.css +2 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-wsWuoa8p.js → keyboard-shortcuts-settings-BYhfzsqe.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-DNncc2tn.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-CXrbrGo8.js → local-apps-page-vBlknU7C.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-BJFLQY8O.js → locale-store-CF4erhjB.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-CizZInrT.js +2 -0
- package/dist/gateway/static/root/assets/{management-settings-BdJZFR7U.js → management-settings-Dnx6mSNe.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-split-NK3ACVG2.js → markdown-split-DtBtcHWi.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-view-DTF9v1gg.js → markdown-view-CQvzsE24.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-F0jcUxyl.js → media-plugins-DrMYeHe7.js} +1 -1
- package/dist/gateway/static/root/assets/messages-Cf5hpZE6.js +3 -0
- package/dist/gateway/static/root/assets/mobile-pairing-wizard-AKgGy3Kx.js +1 -0
- package/dist/gateway/static/root/assets/note-detail-panel-Bw3jD9Jf.js +5 -0
- package/dist/gateway/static/root/assets/notes-page-Dpqq7Z-J.js +8 -0
- package/dist/gateway/static/root/assets/page-tabs-CX9T71by.js +1 -0
- package/dist/gateway/static/root/assets/preview-open-alternatives-DvEHoimN.js +1 -0
- package/dist/gateway/static/root/assets/{product-open-page-CxGGlWA8.js → product-open-page-COcr_NUJ.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-BuT6MCTs.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-DXWMxOjf.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-CIsNlSBi.js → registry-api-BsRBlji7.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-7rBCUWzZ.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-YkjhiQfA.js → runtime-tools-settings-panel-CQ13P-mS.js} +2 -2
- package/dist/gateway/static/root/assets/{schema-form-oFGf3G3s.js → schema-form-BUVyTpZj.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-gmEOYNb4.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-DYYoJcl7.js +1 -0
- package/dist/gateway/static/root/assets/settings-form-section-DVY-8_B9.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-C7VWs0IT.js → settings-page-CdiVYyTl.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BhenBnUj.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-t5oz18rh.js → share-preview-page-C88YLKm4.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-Dq7xIj0_.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-MDI9Lz6z.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-DLir1nM0.js +2 -0
- package/dist/gateway/static/root/assets/{skills-page.utils-DEDTYs2W.js → skills-page.utils-BMZAfS3G.js} +1 -1
- package/dist/gateway/static/root/assets/system-settings-panel-BM8ivYan.js +1 -0
- package/dist/gateway/static/root/assets/task-detail-page-P0_RldWv.js +1 -0
- package/dist/gateway/static/root/assets/{theme-store-O597U8q_.js → theme-store-BOgkc_9D.js} +1 -1
- package/dist/gateway/static/root/assets/tunnel-api-DemxChjo.js +1 -0
- package/dist/gateway/static/root/assets/{use-autosave-B5eUJ6Zq.js → use-autosave-CV3Ui5hu.js} +1 -1
- package/dist/gateway/static/root/assets/user-model-page-CxfnoRVn.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-CMKSwz4C.js → voice-api-key-field-CUoCi4Sq.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-q7B6fOFB.js → voice-config-api-C-ryeIxj.js} +1 -1
- package/dist/gateway/static/root/assets/work-discovery-overlay-BhDlkCMB.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DZmvLZjb.js → workflow-run-setup-panel-D8CcPc_C.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-Bxn2Dc16.js +5 -0
- package/dist/gateway/static/root/index.html +11 -27
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/user-message-display.js +18 -0
- package/dist/src/agent/agent-instance-gateway.d.ts +3 -3
- package/dist/src/agent/agent-manager.d.ts +13 -13
- package/dist/src/agent/agent-manager.js +76 -42
- package/dist/src/agent/background-review/coordinator.d.ts +2 -4
- package/dist/src/agent/background-review/coordinator.js +5 -30
- package/dist/src/agent/background-review/prompts.d.ts +4 -2
- package/dist/src/agent/background-review/prompts.js +33 -19
- package/dist/src/agent/background-review/run-background-review.d.ts +6 -7
- package/dist/src/agent/background-review/run-background-review.js +47 -41
- package/dist/src/agent/background-review/settings.d.ts +0 -1
- package/dist/src/agent/background-review/settings.js +6 -7
- package/dist/src/agent/context/audit.d.ts +38 -0
- package/dist/src/agent/context/audit.js +123 -0
- package/dist/src/agent/context/coordinator.d.ts +31 -0
- package/dist/src/agent/context/coordinator.js +73 -0
- package/dist/src/agent/context/execution-context.d.ts +13 -0
- package/dist/src/agent/context/execution-context.js +211 -0
- package/dist/src/agent/context/execution-context.types.d.ts +50 -0
- package/dist/src/agent/context/execution-scope.d.ts +5 -1
- package/dist/src/agent/context/execution-scope.js +6 -2
- package/dist/src/agent/context/prepend.d.ts +2 -0
- package/dist/src/agent/context/prepend.js +28 -0
- package/dist/src/agent/context/project-context.d.ts +6 -3
- package/dist/src/agent/context/project-context.js +28 -23
- package/dist/src/agent/embedded/index.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js +1 -0
- package/dist/src/agent/embedded/run-turn.js +22 -2
- package/dist/src/agent/embedded/types.d.ts +1 -25
- package/dist/src/agent/external-tools/composio-provider.js +87 -92
- package/dist/src/agent/external-tools/gateway-tools.d.ts +4 -1
- package/dist/src/agent/external-tools/gateway-tools.js +153 -41
- package/dist/src/agent/external-tools/index.d.ts +1 -0
- package/dist/src/agent/external-tools/index.js +2 -1
- package/dist/src/agent/external-tools/memory-provider.d.ts +1 -0
- package/dist/src/agent/external-tools/memory-provider.js +1 -0
- package/dist/src/agent/external-tools/search-error.d.ts +12 -0
- package/dist/src/agent/external-tools/search-error.js +29 -0
- package/dist/src/agent/external-tools/service.d.ts +4 -0
- package/dist/src/agent/external-tools/service.js +22 -2
- package/dist/src/agent/inbound/attachment-pipeline.js +5 -1
- package/dist/src/agent/memory/compaction-policy.js +1 -1
- package/dist/src/agent/memory/compaction-promotion.d.ts +1 -0
- package/dist/src/agent/memory/compaction-promotion.js +52 -79
- package/dist/src/agent/memory/create-memory-manager.js +1 -3
- package/dist/src/agent/memory/index.d.ts +1 -6
- package/dist/src/agent/memory/index.js +3 -6
- package/dist/src/agent/memory/manager.d.ts +0 -16
- package/dist/src/agent/memory/manager.js +11 -40
- package/dist/src/agent/memory/memory-config.d.ts +0 -5
- package/dist/src/agent/memory/memory-config.js +2 -9
- package/dist/src/agent/memory/runtime.d.ts +2 -2
- package/dist/src/agent/memory/runtime.js +9 -19
- package/dist/src/agent/memory/types.d.ts +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js +13 -21
- package/dist/src/agent/orchestration/context-overflow.js +1 -0
- package/dist/src/agent/prompt/sections/memory-skills.js +25 -36
- package/dist/src/agent/prompt/sections/tooling.js +10 -4
- package/dist/src/agent/prompt/service-prompt-builder.js +4 -3
- package/dist/src/agent/service/direct-turn-helpers.d.ts +2 -2
- package/dist/src/agent/service/direct-turn-helpers.js +8 -25
- package/dist/src/agent/service/process-direct-streaming.js +8 -7
- package/dist/src/agent/service.js +4 -3
- package/dist/src/agent/tasks/task-judge-service.js +1 -1
- package/dist/src/agent/tools/clarify-tool.d.ts +1 -0
- package/dist/src/agent/tools/delegate-tool.js +5 -2
- package/dist/src/agent/tools/factory.d.ts +1 -0
- package/dist/src/agent/tools/factory.js +68 -21
- package/dist/src/agent/tools/index.d.ts +3 -2
- package/dist/src/agent/tools/index.js +4 -3
- package/dist/src/agent/tools/knowledge-memory-tool.d.ts +15 -0
- package/dist/src/agent/tools/knowledge-memory-tool.js +184 -0
- package/dist/src/agent/tools/{dreaming-tool.d.ts → memory-maintenance-tool.d.ts} +2 -2
- package/dist/src/agent/tools/memory-maintenance-tool.js +31 -0
- package/dist/src/agent/tools/session-search-tool.d.ts +1 -0
- package/dist/src/agent/tools/session-search-tool.js +7 -0
- package/dist/src/agent/tools/user-context-tool.d.ts +10 -0
- package/dist/src/agent/tools/user-context-tool.js +98 -0
- package/dist/src/agent/tools/xopc-use-tool.js +2 -2
- package/dist/src/automations/service/automation-service.d.ts +2 -1
- package/dist/src/automations/service/automation-service.js +6 -2
- package/dist/src/chat-commands/builtins/understanding.js +24 -6
- package/dist/src/cli/commands/connectors.js +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/config/schema.d.ts +68 -75
- package/dist/src/config/schema.js +29 -18
- package/dist/src/config/web-patch.d.ts +1 -1
- package/dist/src/connectors/auth-provider-registry.js +1 -1
- package/dist/src/connectors/composio-managed-client.js +6 -2
- package/dist/src/connectors/connected-source-ingestion.js +1 -1
- package/dist/src/connectors/connected-source-understanding.d.ts +1 -3
- package/dist/src/connectors/connected-source-understanding.js +86 -99
- package/dist/src/connectors/connection-candidates.d.ts +11 -0
- package/dist/src/connectors/connection-candidates.js +58 -0
- package/dist/src/connectors/connection-capabilities.d.ts +4 -0
- package/dist/src/connectors/connection-capabilities.js +37 -0
- package/dist/src/connectors/connection-recovery-service.d.ts +43 -0
- package/dist/src/connectors/connection-recovery-service.js +420 -0
- package/dist/src/connectors/health.js +1 -1
- package/dist/src/connectors/learning-coordinator.d.ts +0 -2
- package/dist/src/connectors/learning-coordinator.js +6 -7
- package/dist/src/connectors/principal.d.ts +5 -0
- package/dist/src/connectors/principal.js +18 -0
- package/dist/src/files/file-service.js +4 -1
- package/dist/src/gateway/agent-builtin-tools.d.ts +28 -10
- package/dist/src/gateway/agent-builtin-tools.js +30 -9
- package/dist/src/gateway/chat-stream/mapper.js +1 -28
- package/dist/src/gateway/chat-stream/protocol.d.ts +2 -24
- package/dist/src/gateway/clarify-bridge.d.ts +4 -0
- package/dist/src/gateway/clarify-bridge.js +9 -4
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +52 -30
- package/dist/src/gateway/hono/lib/config-payload.js +4 -4
- package/dist/src/gateway/hono/middleware/auth.js +1 -2
- package/dist/src/gateway/hono/routes/capabilities.js +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.d.ts +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +72 -28
- package/dist/src/gateway/hono/routes/connection-waits.d.ts +3 -0
- package/dist/src/gateway/hono/routes/connection-waits.js +58 -0
- package/dist/src/gateway/hono/routes/connectors.js +24 -18
- package/dist/src/gateway/hono/routes/context-sources.d.ts +4 -0
- package/dist/src/gateway/hono/routes/context-sources.js +159 -0
- package/dist/src/gateway/hono/routes/files.js +23 -2
- package/dist/src/gateway/hono/routes/index.js +4 -2
- package/dist/src/gateway/hono/routes/lazy-bundles.js +9 -4
- package/dist/src/gateway/hono/routes/mcp.js +1 -1
- package/dist/src/gateway/hono/routes/notes.js +22 -7
- package/dist/src/gateway/hono/routes/projects.js +36 -44
- package/dist/src/gateway/hono/routes/session-input-handler.d.ts +15 -1
- package/dist/src/gateway/hono/routes/side-chats.js +13 -2
- package/dist/src/gateway/hono/routes/tasks.js +3 -3
- package/dist/src/gateway/hono/routes/user-model.d.ts +3 -0
- package/dist/src/gateway/hono/routes/user-model.js +480 -0
- package/dist/src/gateway/memory-maintenance-automation-reconciler.d.ts +11 -0
- package/dist/src/gateway/memory-maintenance-automation-reconciler.js +72 -0
- package/dist/src/gateway/security/gateway-scopes.js +2 -0
- package/dist/src/gateway/service/agent-runner.d.ts +9 -1
- package/dist/src/gateway/service/agent-runner.js +25 -1
- package/dist/src/gateway/service/config-coordinator.d.ts +2 -2
- package/dist/src/gateway/service/config-coordinator.js +4 -4
- package/dist/src/gateway/service/run-gateway-agent.d.ts +1 -0
- package/dist/src/gateway/service/run-gateway-agent.js +18 -14
- package/dist/src/gateway/service/session-input-coordinator.d.ts +3 -0
- package/dist/src/gateway/service/session-input-coordinator.js +12 -2
- package/dist/src/gateway/service.d.ts +3 -1
- package/dist/src/gateway/service.js +52 -17
- package/dist/src/gateway/side-chat/manager.d.ts +16 -3
- package/dist/src/gateway/side-chat/manager.js +117 -28
- package/dist/src/gateway/side-chat/run-service.d.ts +2 -0
- package/dist/src/gateway/side-chat/run-service.js +28 -5
- package/dist/src/gateway/side-chat/types.d.ts +9 -1
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/knowledge/connected-knowledge-pipeline.d.ts +0 -2
- package/dist/src/knowledge/connected-knowledge-pipeline.js +46 -217
- package/dist/src/knowledge-memory/domain.d.ts +36 -0
- package/dist/src/knowledge-memory/index.d.ts +2 -0
- package/dist/src/knowledge-memory/index.js +2 -0
- package/dist/src/knowledge-memory/repository.d.ts +48 -0
- package/dist/src/knowledge-memory/repository.js +168 -0
- package/dist/src/memory-maintenance/index.d.ts +2 -0
- package/dist/src/memory-maintenance/index.js +3 -0
- package/dist/src/memory-maintenance/schedule.d.ts +13 -0
- package/dist/src/memory-maintenance/schedule.js +51 -0
- package/dist/src/memory-maintenance/service.d.ts +28 -0
- package/dist/src/memory-maintenance/service.js +216 -0
- package/dist/src/notes/service.d.ts +1 -0
- package/dist/src/notes/service.js +7 -1
- package/dist/src/notes/types.d.ts +16 -0
- package/dist/src/notifications/planner.js +7 -3
- package/dist/src/proactive/actions/service.d.ts +0 -1
- package/dist/src/proactive/actions/service.js +1 -10
- package/dist/src/proactive/execution/context.d.ts +8 -10
- package/dist/src/proactive/execution/context.js +93 -42
- package/dist/src/proactive/execution/insight.d.ts +4 -1
- package/dist/src/proactive/execution/insight.js +5 -2
- package/dist/src/proactive/execution/repository.d.ts +1 -0
- package/dist/src/proactive/execution/repository.js +9 -1
- package/dist/src/proactive/execution/types.d.ts +0 -1
- package/dist/src/proactive/execution/worker.js +7 -5
- package/dist/src/proactive/inbox/repository.js +8 -2
- package/dist/src/proactive/inbox/service.js +2 -2
- package/dist/src/proactive/inbox/types.d.ts +1 -0
- package/dist/src/proactive/inbox/worker.d.ts +1 -0
- package/dist/src/proactive/inbox/worker.js +7 -0
- package/dist/src/proactive/index.d.ts +2 -1
- package/dist/src/proactive/index.js +3 -2
- package/dist/src/proactive/maintenance.d.ts +4 -0
- package/dist/src/proactive/maintenance.js +21 -0
- package/dist/src/proactive/scenarios/repository.d.ts +1 -1
- package/dist/src/proactive/scenarios/repository.js +10 -3
- package/dist/src/proactive/scenarios/types.d.ts +7 -0
- package/dist/src/proactive/service.d.ts +7 -0
- package/dist/src/proactive/service.js +17 -1
- package/dist/src/projects/index.d.ts +1 -1
- package/dist/src/projects/index.js +2 -2
- package/dist/src/projects/knowledge-bind.d.ts +1 -0
- package/dist/src/projects/knowledge-bind.js +15 -0
- package/dist/src/projects/project-loop.d.ts +3 -3
- package/dist/src/projects/project-loop.js +4 -4
- package/dist/src/projects/project-service.d.ts +2 -1
- package/dist/src/projects/project-service.js +3 -2
- package/dist/src/projects/project-store.js +2 -1
- package/dist/src/realtime/runtime.js +1 -0
- package/dist/src/runtime-tools/manager.js +1 -1
- package/dist/src/session/index.js +1 -1
- package/dist/src/session/store.js +5 -2
- package/dist/src/storage/sqlite/collaboration-rule-repository.d.ts +19 -0
- package/dist/src/storage/sqlite/collaboration-rule-repository.js +54 -0
- package/dist/src/storage/sqlite/config-repository.js +1 -1
- package/dist/src/storage/sqlite/connection-wait-repository.d.ts +30 -0
- package/dist/src/storage/sqlite/connection-wait-repository.js +338 -0
- package/dist/src/storage/sqlite/connector-account-repository.js +1 -1
- package/dist/src/storage/sqlite/context-evidence-repository.d.ts +24 -0
- package/dist/src/storage/sqlite/context-evidence-repository.js +52 -0
- package/dist/src/storage/sqlite/index.d.ts +3 -5
- package/dist/src/storage/sqlite/index.js +6 -8
- package/dist/src/storage/sqlite/knowledge-repository.d.ts +0 -19
- package/dist/src/storage/sqlite/knowledge-repository.js +1 -90
- package/dist/src/storage/sqlite/migrations/148_user_model_foundation.sql +554 -0
- package/dist/src/storage/sqlite/migrations/149_separate_source_index_from_memory.sql +18 -0
- package/dist/src/storage/sqlite/migrations/150_session_connection_waits.sql +47 -0
- package/dist/src/storage/sqlite/migrations/151_proactive_scope_cleanup.sql +6 -0
- package/dist/src/storage/sqlite/migrations/152_proactive_scenario_contract.sql +140 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/notes-repository.d.ts +2 -1
- package/dist/src/storage/sqlite/notes-repository.js +37 -3
- package/dist/src/storage/sqlite/row-mappers.js +2 -2
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/session-input-repository.d.ts +14 -2
- package/dist/src/storage/sqlite/session-input-repository.js +17 -14
- package/dist/src/storage/sqlite/session-instance-repository.d.ts +2 -0
- package/dist/src/storage/sqlite/session-instance-repository.js +6 -0
- package/dist/src/storage/sqlite/session-repository.d.ts +1 -1
- package/dist/src/storage/sqlite/session-repository.js +7 -6
- package/dist/src/storage/sqlite/transcript-repository.js +3 -2
- package/dist/src/tasks/home-query-service.js +35 -13
- package/dist/src/tasks/index.js +2 -2
- package/dist/src/tasks/project-monitoring-service.d.ts +2 -0
- package/dist/src/tasks/project-monitoring-service.js +4 -1
- package/dist/src/tasks/project-operating-view-service.js +1 -1
- package/dist/src/tasks/task-application-service.js +6 -1
- package/dist/src/tasks/task-context-assembler.js +1 -1
- package/dist/src/tasks/task-context-repository.d.ts +0 -1
- package/dist/src/tasks/task-context-repository.js +1 -1
- package/dist/src/tasks/task-deletion-service.js +1 -1
- package/dist/src/tasks/task-handoff-service.js +1 -1
- package/dist/src/tasks/task-read-model-projector.js +1 -1
- package/dist/src/tasks/task-run-coordinator.js +1 -1
- package/dist/src/tasks/task-run-dispatcher.js +1 -1
- package/dist/src/tasks/task-run-repository.js +1 -0
- package/dist/src/tasks/task-signal-service.js +1 -1
- package/dist/src/tui/backends/embedded-backend.js +1 -1
- package/dist/src/tui/tool-summary.js +2 -1
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/user-context/access-policy.d.ts +11 -0
- package/dist/src/user-context/access-policy.js +26 -0
- package/dist/src/user-context/changes.d.ts +1 -1
- package/dist/src/user-context/config.d.ts +135 -153
- package/dist/src/user-context/config.js +94 -99
- package/dist/src/user-context/relationship-continuity.d.ts +2 -2
- package/dist/src/user-context/relationship-continuity.js +34 -24
- package/dist/src/user-context/sources/activity-clustering.d.ts +9 -3
- package/dist/src/user-context/sources/index.js +2 -2
- package/dist/src/user-context/sources/repository.d.ts +1 -21
- package/dist/src/user-context/sources/repository.js +1 -183
- package/dist/src/user-context/sources/types.d.ts +0 -23
- package/dist/src/user-model/capture/executor.d.ts +50 -0
- package/dist/src/user-model/capture/executor.js +230 -0
- package/dist/src/user-model/capture/index.d.ts +2 -0
- package/dist/src/user-model/capture/index.js +3 -0
- package/dist/src/user-model/capture/semantic.d.ts +39 -0
- package/dist/src/user-model/capture/semantic.js +263 -0
- package/dist/src/user-model/domain.d.ts +93 -0
- package/dist/src/user-model/domain.js +33 -0
- package/dist/src/user-model/goals.d.ts +62 -0
- package/dist/src/user-model/goals.js +91 -0
- package/dist/src/user-model/importance.d.ts +11 -0
- package/dist/src/user-model/importance.js +17 -0
- package/dist/src/user-model/index.d.ts +5 -0
- package/dist/src/user-model/index.js +6 -0
- package/dist/src/user-model/repository.d.ts +23 -0
- package/dist/src/user-model/repository.js +268 -0
- package/dist/src/user-model/temporal.d.ts +10 -0
- package/dist/src/user-model/temporal.js +44 -0
- package/dist/src/voice/realtime/memory-context.d.ts +7 -2
- package/dist/src/voice/realtime/memory-context.js +39 -51
- package/dist/src/work-discovery/service.d.ts +3 -14
- package/dist/src/work-discovery/service.js +138 -99
- package/dist/src/work-discovery/types.d.ts +3 -3
- package/dist/src/workflows/service/workflow-run-service.js +1 -1
- package/dist/src/workflows/service/workflow-session-bridge.js +12 -20
- package/package.json +3 -3
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CUXApfcE.js +0 -1
- package/dist/gateway/static/root/assets/agents-DNq_GKuc.js +0 -1
- package/dist/gateway/static/root/assets/app-management-settings-panel-qfwAgyhQ.js +0 -1
- package/dist/gateway/static/root/assets/appearance-settings-DqQVUpCC.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-dwIqYmXk.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-SkdcSZ0i.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-CKCa6TvG.js +0 -8
- package/dist/gateway/static/root/assets/capabilities-settings-panel-DSp--zIZ.js +0 -7
- package/dist/gateway/static/root/assets/channels-settings-CMd2dDrI.js +0 -1
- package/dist/gateway/static/root/assets/cloud-C4-yfnnk.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-udWs5Kdm.js +0 -2
- package/dist/gateway/static/root/assets/dependency-picker-DpN3XZg9.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-DinCToZh.js +0 -1
- package/dist/gateway/static/root/assets/ellipsis-0k4rZLoy.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-DcguCgsH.js +0 -1
- package/dist/gateway/static/root/assets/eye-CABVeTq0.js +0 -1
- package/dist/gateway/static/root/assets/eye-off-DEAzt3g1.js +0 -1
- package/dist/gateway/static/root/assets/files-D6vf3S30.js +0 -1
- package/dist/gateway/static/root/assets/folder-open-CyzJ19I9.js +0 -1
- package/dist/gateway/static/root/assets/form-field-width-DJw_jULe.js +0 -1
- package/dist/gateway/static/root/assets/gateway-config-api-Br7lSf6H.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-CdPoDMuj.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-DHk1hawP.js +0 -1
- package/dist/gateway/static/root/assets/home-page-YGipe_W6.js +0 -1
- package/dist/gateway/static/root/assets/index-D5TQQpeb.js +0 -71
- package/dist/gateway/static/root/assets/index-DReBaaTX.css +0 -2
- package/dist/gateway/static/root/assets/interaction-BmQogeqz.js +0 -1
- package/dist/gateway/static/root/assets/is-masked-secret-DOkL5b_X.js +0 -1
- package/dist/gateway/static/root/assets/link-2-D_ZKYUW7.js +0 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-CpyvYyrb.js +0 -2
- package/dist/gateway/static/root/assets/local-context-graph-BjUf7fQ9.js +0 -1
- package/dist/gateway/static/root/assets/logs-page-CXKy6E_l.js +0 -2
- package/dist/gateway/static/root/assets/message-square-plus-XP0tGdlV.js +0 -1
- package/dist/gateway/static/root/assets/messages-CHNYp8EQ.js +0 -3
- package/dist/gateway/static/root/assets/minimize-2-DtOGrlpo.js +0 -1
- package/dist/gateway/static/root/assets/mobile-pairing-wizard-3NKCniSp.js +0 -1
- package/dist/gateway/static/root/assets/models-hub-cache-nCfkBN8M.js +0 -1
- package/dist/gateway/static/root/assets/notes-page-DuqLahi6.js +0 -1
- package/dist/gateway/static/root/assets/notes-workbench-C7j9EdQk.js +0 -5
- package/dist/gateway/static/root/assets/oauth-api-8lP_qJpq.js +0 -1
- package/dist/gateway/static/root/assets/oauth-authorization-window-Cdolr2wE.js +0 -1
- package/dist/gateway/static/root/assets/page-tabs-BaEQMYm_.js +0 -1
- package/dist/gateway/static/root/assets/pencil-DmIY3Oa-.js +0 -1
- package/dist/gateway/static/root/assets/preview-open-alternatives-CsNVTKC0.js +0 -1
- package/dist/gateway/static/root/assets/project-detail-page-CfebYVX0.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-48GvzSVa.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-64xj_s2m.js +0 -1
- package/dist/gateway/static/root/assets/rotate-cw-LIg3Am9S.js +0 -1
- package/dist/gateway/static/root/assets/search-DA7gz22f.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-CcwcdRN8.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-BaN84CyW.js +0 -1
- package/dist/gateway/static/root/assets/settings-form-section-DjWzRk4z.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-DVVOCNbr.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-DUYbYLi7.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-BGyD0gB9.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-CjF8DTsN.js +0 -2
- package/dist/gateway/static/root/assets/system-settings-panel-BSYuRgFI.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-YZYSTJH7.js +0 -1
- package/dist/gateway/static/root/assets/tunnel-api-FKUi9wDL.js +0 -1
- package/dist/gateway/static/root/assets/user-context-page-BCyiduKd.js +0 -2
- package/dist/gateway/static/root/assets/work-discovery-overlay-jhT2EzeH.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-DQC0TpMa.js +0 -5
- package/dist/src/agent/memory/builtin-provider.d.ts +0 -37
- package/dist/src/agent/memory/builtin-provider.js +0 -225
- package/dist/src/agent/memory/context/types.d.ts +0 -40
- package/dist/src/agent/memory/understanding/quality.d.ts +0 -8
- package/dist/src/agent/memory/understanding/quality.js +0 -18
- package/dist/src/agent/memory/understanding/service.d.ts +0 -19
- package/dist/src/agent/memory/understanding/service.js +0 -209
- package/dist/src/agent/memory/understanding/types.d.ts +0 -34
- package/dist/src/agent/memory/user-context-coordinator.d.ts +0 -23
- package/dist/src/agent/memory/user-context-coordinator.js +0 -113
- package/dist/src/agent/tools/dreaming-tool.js +0 -37
- package/dist/src/agent/tools/memory-tool.d.ts +0 -9
- package/dist/src/agent/tools/memory-tool.js +0 -119
- package/dist/src/gateway/dreaming-automation-reconciler.d.ts +0 -11
- package/dist/src/gateway/dreaming-automation-reconciler.js +0 -63
- package/dist/src/gateway/hono/routes/understanding-sources.d.ts +0 -21
- package/dist/src/gateway/hono/routes/understanding-sources.js +0 -387
- package/dist/src/gateway/hono/routes/you.d.ts +0 -3
- package/dist/src/gateway/hono/routes/you.js +0 -457
- package/dist/src/projects/memory-bind.d.ts +0 -1
- package/dist/src/projects/memory-bind.js +0 -14
- package/dist/src/storage/sqlite/context-consolidation-repository.d.ts +0 -37
- package/dist/src/storage/sqlite/context-consolidation-repository.js +0 -64
- package/dist/src/storage/sqlite/memory-records-repository.d.ts +0 -217
- package/dist/src/storage/sqlite/memory-records-repository.js +0 -715
- package/dist/src/storage/sqlite/remote-context-repository.d.ts +0 -3
- package/dist/src/storage/sqlite/remote-context-repository.js +0 -40
- package/dist/src/storage/sqlite/understanding-focus-exclusions.d.ts +0 -2
- package/dist/src/storage/sqlite/understanding-focus-exclusions.js +0 -24
- package/dist/src/storage/sqlite/user-context-quality-repository.d.ts +0 -49
- package/dist/src/storage/sqlite/user-context-quality-repository.js +0 -118
- package/dist/src/storage/sqlite/user-context-repository.d.ts +0 -85
- package/dist/src/storage/sqlite/user-context-repository.js +0 -535
- package/dist/src/user-context/automatic-context.d.ts +0 -17
- package/dist/src/user-context/automatic-context.js +0 -85
- package/dist/src/user-context/consolidation.d.ts +0 -27
- package/dist/src/user-context/consolidation.js +0 -187
- package/dist/src/user-context/context-objects.d.ts +0 -17
- package/dist/src/user-context/context-objects.js +0 -99
- package/dist/src/user-context/evaluation/harness.d.ts +0 -13
- package/dist/src/user-context/evaluation/harness.js +0 -31
- package/dist/src/user-context/extraction/executor.d.ts +0 -22
- package/dist/src/user-context/extraction/executor.js +0 -142
- package/dist/src/user-context/extraction/repair.d.ts +0 -19
- package/dist/src/user-context/extraction/repair.js +0 -71
- package/dist/src/user-context/extraction/semantic.d.ts +0 -18
- package/dist/src/user-context/extraction/semantic.js +0 -148
- package/dist/src/user-context/focus-lifecycle.d.ts +0 -2
- package/dist/src/user-context/focus-lifecycle.js +0 -26
- package/dist/src/user-context/manual-understanding.d.ts +0 -12
- package/dist/src/user-context/manual-understanding.js +0 -37
- package/dist/src/user-context/planner.d.ts +0 -17
- package/dist/src/user-context/planner.js +0 -465
- package/dist/src/user-context/relationships/indexer.d.ts +0 -13
- package/dist/src/user-context/relationships/indexer.js +0 -185
- package/dist/src/user-context/relationships/service.d.ts +0 -22
- package/dist/src/user-context/relationships/service.js +0 -50
- package/dist/src/user-context/retriever.d.ts +0 -15
- package/dist/src/user-context/retriever.js +0 -124
- package/dist/src/user-context/scope.d.ts +0 -7
- package/dist/src/user-context/scope.js +0 -9
- package/dist/src/user-context/selection-policy.d.ts +0 -20
- package/dist/src/user-context/selection-policy.js +0 -33
- package/dist/src/user-context/understanding.d.ts +0 -15
- package/dist/src/user-context/understanding.js +0 -24
- package/dist/src/user-context/understandingQuality.d.ts +0 -5
- package/dist/src/user-context/understandingQuality.js +0 -48
- /package/dist/src/agent/{memory/context/types.js → context/execution-context.types.js} +0 -0
- /package/dist/src/{agent/memory/understanding/types.js → knowledge-memory/domain.js} +0 -0
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { getSqliteDatabase } from "../../storage/sqlite/transaction.js";
|
|
2
|
-
import { listUnderstandings } from "../../storage/sqlite/user-context-repository.js";
|
|
3
2
|
import { getKnowledgeSourceItem } from "../../storage/sqlite/knowledge-repository.js";
|
|
4
3
|
import { getConnectorSyncPolicyForConnection } from "../../storage/sqlite/connector-sync-policy-repository.js";
|
|
4
|
+
import { getAssertionSlot, listUserAssertions } from "../../user-model/repository.js";
|
|
5
|
+
import "../../user-model/index.js";
|
|
6
|
+
import { getDiscussionCapture, getLatestDiscussionOrganization } from "../../discussions/repository.js";
|
|
5
7
|
import { wrapExternalContent } from "../../gateway/security/external-content.js";
|
|
6
8
|
//#region src/proactive/execution/context.ts
|
|
7
9
|
const MAX_EVENT_COUNT = 50;
|
|
@@ -38,9 +40,6 @@ function authorizedConnectedSourceItem(event, scenarioKey) {
|
|
|
38
40
|
}
|
|
39
41
|
var EventBatchContextProvider = class {
|
|
40
42
|
id = "event_batch";
|
|
41
|
-
supports() {
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
43
|
async collect(input) {
|
|
45
44
|
const rows = eventRows(input.eventIds).filter((row) => !row.type.startsWith("connected_source.") || Boolean(authorizedConnectedSourceItem(row, input.scenarioKey)));
|
|
46
45
|
return {
|
|
@@ -60,9 +59,6 @@ var EventBatchContextProvider = class {
|
|
|
60
59
|
};
|
|
61
60
|
var ConnectedSourceContextProvider = class {
|
|
62
61
|
id = "connected_source";
|
|
63
|
-
supports() {
|
|
64
|
-
return true;
|
|
65
|
-
}
|
|
66
62
|
async collect(input) {
|
|
67
63
|
const items = [];
|
|
68
64
|
const snapshotItems = [];
|
|
@@ -103,9 +99,6 @@ var ConnectedSourceContextProvider = class {
|
|
|
103
99
|
};
|
|
104
100
|
var InternalObjectContextProvider = class {
|
|
105
101
|
id = "internal_objects";
|
|
106
|
-
supports() {
|
|
107
|
-
return true;
|
|
108
|
-
}
|
|
109
102
|
async collect(input) {
|
|
110
103
|
const db = getSqliteDatabase();
|
|
111
104
|
const objects = [];
|
|
@@ -154,36 +147,34 @@ var InternalObjectContextProvider = class {
|
|
|
154
147
|
};
|
|
155
148
|
}
|
|
156
149
|
};
|
|
157
|
-
var
|
|
158
|
-
id = "
|
|
159
|
-
supports() {
|
|
160
|
-
return true;
|
|
161
|
-
}
|
|
150
|
+
var UserModelContextProvider = class {
|
|
151
|
+
id = "user_model";
|
|
162
152
|
async collect(input) {
|
|
163
153
|
const scope = eventRows(input.eventIds).at(-1);
|
|
164
154
|
if (!scope) return emptyContext();
|
|
165
|
-
const records =
|
|
155
|
+
const records = listUserAssertions({
|
|
156
|
+
statuses: ["active"],
|
|
157
|
+
limit: 500
|
|
158
|
+
}).filter((record) => {
|
|
166
159
|
const now = Date.now();
|
|
167
|
-
const
|
|
168
|
-
|
|
160
|
+
const assertionScope = getAssertionSlot(record.slotId)?.scope;
|
|
161
|
+
const scopeMatches = assertionScope?.type === "global" || assertionScope?.type === "workspace" && assertionScope.id === scope.workspace_id || assertionScope?.type === "project" && assertionScope.id === scope.project_id || assertionScope?.type === "agent" && assertionScope.id === scope.agent_id;
|
|
162
|
+
return record.disclosurePolicy === "referenceable" && record.sensitivity !== "secret" && record.sensitivity !== "regulated" && scopeMatches && (!record.validFrom || record.validFrom <= now) && (!record.validTo || record.validTo >= now) && (record.authority === "user_explicit" || record.confidence >= .7);
|
|
169
163
|
}).slice(0, 20);
|
|
170
164
|
return {
|
|
171
165
|
content: { records: records.map((record) => ({
|
|
172
|
-
evidenceId: `
|
|
166
|
+
evidenceId: `assertion:${record.id}`,
|
|
173
167
|
kind: record.kind,
|
|
174
168
|
content: boundedText(record.statement, 1e3),
|
|
175
169
|
confidence: record.confidence,
|
|
176
|
-
|
|
170
|
+
recordedAt: record.recordedAt
|
|
177
171
|
})) },
|
|
178
|
-
evidenceIds: records.map((record) => `
|
|
172
|
+
evidenceIds: records.map((record) => `assertion:${record.id}`)
|
|
179
173
|
};
|
|
180
174
|
}
|
|
181
175
|
};
|
|
182
176
|
var MeetingWorkspaceContextProvider = class {
|
|
183
177
|
id = "meeting_workspace";
|
|
184
|
-
supports(scenarioKey) {
|
|
185
|
-
return scenarioKey === "meeting_preparation";
|
|
186
|
-
}
|
|
187
178
|
async collect(input) {
|
|
188
179
|
const scope = eventRows(input.eventIds).at(-1);
|
|
189
180
|
if (!scope) return emptyContext();
|
|
@@ -232,16 +223,27 @@ var MeetingWorkspaceContextProvider = class {
|
|
|
232
223
|
};
|
|
233
224
|
var ProjectStateContextProvider = class {
|
|
234
225
|
id = "project_state";
|
|
235
|
-
supports(scenarioKey) {
|
|
236
|
-
return scenarioKey === "project_delivery_risk" || scenarioKey === "blocked_work";
|
|
237
|
-
}
|
|
238
226
|
async collect(input) {
|
|
239
227
|
if (!input.eventIds.length) return emptyContext();
|
|
240
228
|
const project = getSqliteDatabase().prepare(`SELECT p.* FROM proactive_events e JOIN projects p ON p.project_id = e.project_id
|
|
241
229
|
WHERE e.event_id IN (${input.eventIds.map(() => "?").join(",")}) AND e.project_id IS NOT NULL ORDER BY e.occurred_at DESC LIMIT 1`).get(...input.eventIds);
|
|
242
230
|
if (!project) return emptyContext();
|
|
243
231
|
const tasks = getSqliteDatabase().prepare(`SELECT task.task_id, task.title, task.body,
|
|
244
|
-
task.phase, task.resolution, task.priority, task.due_at, task.updated_at
|
|
232
|
+
task.phase, task.resolution, task.priority, task.due_at, task.updated_at,
|
|
233
|
+
(SELECT wait.kind FROM task_waits wait
|
|
234
|
+
WHERE wait.task_id = task.task_id AND wait.status = 'active'
|
|
235
|
+
ORDER BY wait.created_at DESC LIMIT 1) AS wait_kind,
|
|
236
|
+
(SELECT wait.reason FROM task_waits wait
|
|
237
|
+
WHERE wait.task_id = task.task_id AND wait.status = 'active'
|
|
238
|
+
ORDER BY wait.created_at DESC LIMIT 1) AS wait_reason,
|
|
239
|
+
(SELECT json_group_array(json_object(
|
|
240
|
+
'taskId', dependency.depends_on_task_id,
|
|
241
|
+
'title', upstream.title,
|
|
242
|
+
'phase', upstream.phase,
|
|
243
|
+
'resolution', upstream.resolution
|
|
244
|
+
)) FROM task_dependencies dependency
|
|
245
|
+
JOIN tasks upstream ON upstream.task_id = dependency.depends_on_task_id
|
|
246
|
+
WHERE dependency.task_id = task.task_id) AS dependencies_json
|
|
245
247
|
FROM tasks task
|
|
246
248
|
WHERE task.project_id = ? AND task.phase <> 'closed'
|
|
247
249
|
ORDER BY CASE WHEN EXISTS (
|
|
@@ -256,10 +258,14 @@ var ProjectStateContextProvider = class {
|
|
|
256
258
|
evidenceId: projectEvidenceId,
|
|
257
259
|
...project
|
|
258
260
|
},
|
|
259
|
-
activeTasks: tasks.map((task, index) =>
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
261
|
+
activeTasks: tasks.map((task, index) => {
|
|
262
|
+
const { dependencies_json: dependenciesJson, ...fields } = task;
|
|
263
|
+
return {
|
|
264
|
+
evidenceId: taskEvidenceIds[index],
|
|
265
|
+
...fields,
|
|
266
|
+
dependencies: dependenciesJson ? JSON.parse(String(dependenciesJson)) : []
|
|
267
|
+
};
|
|
268
|
+
})
|
|
263
269
|
},
|
|
264
270
|
evidenceIds: [projectEvidenceId, ...taskEvidenceIds]
|
|
265
271
|
};
|
|
@@ -267,9 +273,6 @@ var ProjectStateContextProvider = class {
|
|
|
267
273
|
};
|
|
268
274
|
var AutomationStateContextProvider = class {
|
|
269
275
|
id = "automation_state";
|
|
270
|
-
supports(scenarioKey) {
|
|
271
|
-
return scenarioKey === "automation_failure_impact";
|
|
272
|
-
}
|
|
273
276
|
async collect(input) {
|
|
274
277
|
if (!input.eventIds.length) return emptyContext();
|
|
275
278
|
const run = getSqliteDatabase().prepare(`SELECT r.* FROM proactive_events e JOIN automation_runs r ON r.run_id = e.subject_id
|
|
@@ -277,6 +280,9 @@ var AutomationStateContextProvider = class {
|
|
|
277
280
|
if (!run) return emptyContext();
|
|
278
281
|
const automation = getSqliteDatabase().prepare(`SELECT automation_id, name, description, enabled, reliability_json, state_json, project_id
|
|
279
282
|
FROM automations WHERE automation_id = ?`).get(String(run.automation_id));
|
|
283
|
+
const recentRuns = getSqliteDatabase().prepare(`SELECT run_id, status, summary, error, duration_ms, started_at, ended_at
|
|
284
|
+
FROM automation_runs WHERE automation_id = ? AND run_id <> ?
|
|
285
|
+
ORDER BY started_at DESC LIMIT 5`).all(String(run.automation_id), String(run.run_id));
|
|
280
286
|
const runEvidenceId = `automation-run:${String(run.run_id)}`;
|
|
281
287
|
return {
|
|
282
288
|
content: {
|
|
@@ -284,28 +290,73 @@ var AutomationStateContextProvider = class {
|
|
|
284
290
|
failedRun: {
|
|
285
291
|
evidenceId: runEvidenceId,
|
|
286
292
|
...run
|
|
287
|
-
}
|
|
293
|
+
},
|
|
294
|
+
recentRuns
|
|
288
295
|
},
|
|
289
296
|
evidenceIds: [runEvidenceId]
|
|
290
297
|
};
|
|
291
298
|
}
|
|
292
299
|
};
|
|
300
|
+
var DiscussionContextProvider = class {
|
|
301
|
+
id = "discussion";
|
|
302
|
+
async collect(input) {
|
|
303
|
+
const event = eventRows(input.eventIds).findLast((row) => row.subject_kind === "discussion");
|
|
304
|
+
if (!event) return emptyContext();
|
|
305
|
+
const discussion = getDiscussionCapture(event.subject_id);
|
|
306
|
+
if (!discussion || discussion.status !== "completed") return emptyContext();
|
|
307
|
+
const organization = getLatestDiscussionOrganization(discussion.id);
|
|
308
|
+
const discussionEvidenceId = `discussion:${discussion.id}`;
|
|
309
|
+
const noteEvidenceId = `note:${discussion.noteId}`;
|
|
310
|
+
return {
|
|
311
|
+
content: { discussion: {
|
|
312
|
+
evidenceId: discussionEvidenceId,
|
|
313
|
+
id: discussion.id,
|
|
314
|
+
noteId: discussion.noteId,
|
|
315
|
+
noteEvidenceId,
|
|
316
|
+
projectId: discussion.projectId,
|
|
317
|
+
title: discussion.generatedTitle,
|
|
318
|
+
transcript: boundedText(discussion.canonicalTranscript, 6e3),
|
|
319
|
+
organization: organization?.organization,
|
|
320
|
+
completedAt: discussion.completedAt
|
|
321
|
+
} },
|
|
322
|
+
snapshotContent: { discussion: {
|
|
323
|
+
evidenceId: discussionEvidenceId,
|
|
324
|
+
id: discussion.id,
|
|
325
|
+
noteId: discussion.noteId,
|
|
326
|
+
noteEvidenceId,
|
|
327
|
+
projectId: discussion.projectId,
|
|
328
|
+
transcriptSha256: discussion.canonicalTranscriptSha256,
|
|
329
|
+
organizationRevision: organization?.revision,
|
|
330
|
+
organization: organization?.organization,
|
|
331
|
+
completedAt: discussion.completedAt
|
|
332
|
+
} },
|
|
333
|
+
evidenceIds: [discussionEvidenceId, noteEvidenceId]
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
};
|
|
293
337
|
var ContextProviderRegistry = class {
|
|
294
338
|
constructor(providers = [
|
|
295
339
|
new EventBatchContextProvider(),
|
|
296
340
|
new ConnectedSourceContextProvider(),
|
|
297
341
|
new InternalObjectContextProvider(),
|
|
298
|
-
new
|
|
342
|
+
new UserModelContextProvider(),
|
|
299
343
|
new MeetingWorkspaceContextProvider(),
|
|
300
344
|
new ProjectStateContextProvider(),
|
|
301
|
-
new AutomationStateContextProvider()
|
|
345
|
+
new AutomationStateContextProvider(),
|
|
346
|
+
new DiscussionContextProvider()
|
|
302
347
|
]) {
|
|
303
348
|
this.providers = providers;
|
|
304
349
|
}
|
|
305
|
-
async collect(
|
|
306
|
-
const
|
|
350
|
+
async collect(scenario, input) {
|
|
351
|
+
const providers = new Map(this.providers.map((provider) => [provider.id, provider]));
|
|
352
|
+
const selected = scenario.contextProviderIds.map((id) => {
|
|
353
|
+
const provider = providers.get(id);
|
|
354
|
+
if (!provider) throw new Error(`Unknown context provider: ${id}`);
|
|
355
|
+
return provider;
|
|
356
|
+
});
|
|
357
|
+
const entries = await Promise.all(selected.map(async (provider) => [provider.id, await provider.collect({
|
|
307
358
|
...input,
|
|
308
|
-
scenarioKey
|
|
359
|
+
scenarioKey: scenario.key
|
|
309
360
|
})]));
|
|
310
361
|
return {
|
|
311
362
|
content: Object.fromEntries(entries.map(([id, result]) => [id, result.content])),
|
|
@@ -315,4 +366,4 @@ var ContextProviderRegistry = class {
|
|
|
315
366
|
}
|
|
316
367
|
};
|
|
317
368
|
//#endregion
|
|
318
|
-
export { AutomationStateContextProvider, ConnectedSourceContextProvider, ContextProviderRegistry, EventBatchContextProvider, InternalObjectContextProvider, MeetingWorkspaceContextProvider, ProjectStateContextProvider,
|
|
369
|
+
export { AutomationStateContextProvider, ConnectedSourceContextProvider, ContextProviderRegistry, DiscussionContextProvider, EventBatchContextProvider, InternalObjectContextProvider, MeetingWorkspaceContextProvider, ProjectStateContextProvider, UserModelContextProvider };
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { InsightCandidate } from './types.js';
|
|
2
2
|
export declare function parseInsightCandidate(raw: string, allowedEvidenceIds: Set<string>): InsightCandidate;
|
|
3
3
|
export declare function scoreInsight(candidate: InsightCandidate): number;
|
|
4
|
-
export declare function isValuableInsight(candidate: InsightCandidate
|
|
4
|
+
export declare function isValuableInsight(candidate: InsightCandidate, policy?: {
|
|
5
|
+
minConfidence: number;
|
|
6
|
+
minScore: number;
|
|
7
|
+
}): boolean;
|
|
@@ -87,8 +87,11 @@ function scoreInsight(candidate) {
|
|
|
87
87
|
}[candidate.urgency];
|
|
88
88
|
return Math.round((candidate.confidence * .7 + urgencyWeight * .3) * 1e3) / 1e3;
|
|
89
89
|
}
|
|
90
|
-
function isValuableInsight(candidate
|
|
91
|
-
|
|
90
|
+
function isValuableInsight(candidate, policy = {
|
|
91
|
+
minConfidence: .65,
|
|
92
|
+
minScore: .6
|
|
93
|
+
}) {
|
|
94
|
+
return candidate.confidence >= policy.minConfidence && candidate.urgency !== "low" && scoreInsight(candidate) >= policy.minScore;
|
|
92
95
|
}
|
|
93
96
|
//#endregion
|
|
94
97
|
export { isValuableInsight, parseInsightCandidate, scoreInsight };
|
|
@@ -5,8 +5,16 @@ const str = (row, key) => String(row[key]);
|
|
|
5
5
|
function claimNextRun(owner, now = /* @__PURE__ */ new Date(), leaseSeconds = 120) {
|
|
6
6
|
return runSqliteWriteTransaction((db) => {
|
|
7
7
|
const nowIso = now.toISOString();
|
|
8
|
+
const dayStart = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate())).toISOString();
|
|
8
9
|
db.prepare(`UPDATE proactive_signal_batches SET status = 'ignored', updated_at = ? WHERE status = 'ready'
|
|
9
10
|
AND subscription_id IN (SELECT subscription_id FROM proactive_scenario_subscriptions WHERE enabled = 0)`).run(nowIso);
|
|
11
|
+
db.prepare(`UPDATE proactive_signal_batches AS batch SET status = 'ignored', updated_at = ?
|
|
12
|
+
WHERE batch.status = 'ready' AND EXISTS (
|
|
13
|
+
SELECT 1 FROM proactive_scenario_versions scenario
|
|
14
|
+
WHERE scenario.scenario_key = batch.scenario_key AND scenario.version = batch.scenario_version
|
|
15
|
+
AND (SELECT COUNT(*) FROM proactive_runs run
|
|
16
|
+
WHERE run.scenario_key = batch.scenario_key AND run.started_at >= ?) >= scenario.max_runs_per_day
|
|
17
|
+
)`).run(nowIso, dayStart);
|
|
10
18
|
db.prepare(`UPDATE proactive_signal_batches SET status = 'failed_permanent', updated_at = ?
|
|
11
19
|
WHERE status = 'processing' AND batch_id IN (
|
|
12
20
|
SELECT batch_id FROM proactive_runs WHERE status = 'running' AND lease_expires_at <= ? AND attempt >= 3
|
|
@@ -80,7 +88,7 @@ function finishRun(input, now = /* @__PURE__ */ new Date()) {
|
|
|
80
88
|
input.candidate.recommendation
|
|
81
89
|
].map((value) => value.trim().toLowerCase().replace(/\s+/g, " "))].join("\n")).digest("hex") : void 0;
|
|
82
90
|
const duplicate = fingerprint ? db.prepare(`SELECT 1 FROM proactive_insights
|
|
83
|
-
WHERE subscription_id = ? AND scenario_key = ? AND content_fingerprint = ? AND created_at >= ? LIMIT 1`).get(input.run.subscriptionId, input.run.scenarioKey, fingerprint, (/* @__PURE__ */ new Date(now.getTime() - 10080 *
|
|
91
|
+
WHERE subscription_id = ? AND scenario_key = ? AND content_fingerprint = ? AND created_at >= ? LIMIT 1`).get(input.run.subscriptionId, input.run.scenarioKey, fingerprint, (/* @__PURE__ */ new Date(now.getTime() - (input.cooldownSeconds ?? 10080 * 60) * 1e3)).toISOString()) : void 0;
|
|
84
92
|
const valuable = Boolean(input.candidate) && !duplicate;
|
|
85
93
|
db.prepare(`UPDATE proactive_runs SET status = ?, raw_output = ?, model_ref = ?, lease_owner = NULL,
|
|
86
94
|
lease_expires_at = NULL, completed_at = ?, updated_at = ? WHERE run_id = ?`).run(valuable ? "completed" : "discarded", input.rawOutput.slice(0, 2e4), input.modelRef ?? null, nowIso, nowIso, input.run.id);
|
|
@@ -40,11 +40,11 @@ var ProactiveWorker = class {
|
|
|
40
40
|
const run = claimNextRun(this.owner);
|
|
41
41
|
if (!run) return;
|
|
42
42
|
try {
|
|
43
|
-
const scenario = getScenario(run.scenarioKey);
|
|
44
|
-
if (!scenario
|
|
43
|
+
const scenario = getScenario(run.scenarioKey, run.scenarioVersion);
|
|
44
|
+
if (!scenario) throw new Error("Pinned scenario version is unavailable");
|
|
45
45
|
const revision = run.promptRevisionId ? getPromptRevision(run.promptRevisionId) ?? void 0 : void 0;
|
|
46
46
|
const eventIds = eventIdsForBatch(run.batchId);
|
|
47
|
-
const context = await this.contexts.collect(
|
|
47
|
+
const context = await this.contexts.collect(scenario, {
|
|
48
48
|
batchId: run.batchId,
|
|
49
49
|
eventIds,
|
|
50
50
|
subscriptionId: run.subscriptionId
|
|
@@ -62,13 +62,15 @@ var ProactiveWorker = class {
|
|
|
62
62
|
authorizedContext: context.content
|
|
63
63
|
});
|
|
64
64
|
const candidate = parseInsightCandidate(output.text, new Set(context.evidenceIds));
|
|
65
|
-
const
|
|
65
|
+
const valueScore = scoreInsight(candidate);
|
|
66
|
+
const valuable = isValuableInsight(candidate, scenario.valuePolicy);
|
|
66
67
|
const insight = finishRun({
|
|
67
68
|
run,
|
|
68
69
|
...valuable ? {
|
|
69
70
|
candidate,
|
|
70
|
-
valueScore
|
|
71
|
+
valueScore
|
|
71
72
|
} : {},
|
|
73
|
+
cooldownSeconds: scenario.valuePolicy.cooldownSeconds,
|
|
72
74
|
rawOutput: output.text,
|
|
73
75
|
modelRef: output.modelRef
|
|
74
76
|
});
|
|
@@ -4,6 +4,7 @@ import { randomUUID } from "node:crypto";
|
|
|
4
4
|
//#region src/proactive/inbox/repository.ts
|
|
5
5
|
const s = (row, key) => String(row[key]);
|
|
6
6
|
function itemFromRow(row) {
|
|
7
|
+
const attentionKind = row.action_status === "completed" ? "receipt" : row.decision_json || row.action_status === "approval_required" ? "decision" : "information";
|
|
7
8
|
return {
|
|
8
9
|
id: s(row, "inbox_item_id"),
|
|
9
10
|
insightId: s(row, "insight_id"),
|
|
@@ -30,7 +31,8 @@ function itemFromRow(row) {
|
|
|
30
31
|
urgency: s(row, "urgency"),
|
|
31
32
|
confidence: Number(row.confidence),
|
|
32
33
|
valueScore: Number(row.value_score),
|
|
33
|
-
evidenceIds: JSON.parse(s(row, "evidence_ids_json"))
|
|
34
|
+
evidenceIds: JSON.parse(s(row, "evidence_ids_json")),
|
|
35
|
+
attentionKind
|
|
34
36
|
}
|
|
35
37
|
};
|
|
36
38
|
}
|
|
@@ -124,13 +126,17 @@ function transitionInboxItem(id, input, now = /* @__PURE__ */ new Date()) {
|
|
|
124
126
|
function recordDecision(id, choice, note = "", now = /* @__PURE__ */ new Date()) {
|
|
125
127
|
if (!choice.trim()) throw new Error("choice is required");
|
|
126
128
|
runSqliteWriteTransaction((db) => {
|
|
127
|
-
const row = db.prepare(`SELECT x.decision_json FROM proactive_inbox_items i
|
|
129
|
+
const row = db.prepare(`SELECT i.status, x.decision_json, x.action_status FROM proactive_inbox_items i
|
|
128
130
|
JOIN proactive_insights x ON x.insight_id = i.insight_id WHERE i.inbox_item_id = ?`).get(id);
|
|
129
131
|
if (!row) throw new Error("Inbox item not found");
|
|
132
|
+
if (row.status === "resolved") throw new Error("Inbox item is already resolved");
|
|
130
133
|
if (!row.decision_json) throw new Error("Inbox item does not require a decision");
|
|
131
134
|
if (!JSON.parse(row.decision_json).options.some((option) => option.id === choice.trim())) throw new Error("choice is not a valid decision option");
|
|
132
135
|
db.prepare("INSERT INTO proactive_decisions (decision_id, inbox_item_id, choice, note, created_at) VALUES (?, ?, ?, ?, ?)").run(randomUUID(), id, choice.trim().slice(0, 200), note.trim().slice(0, 2e3), now.toISOString());
|
|
133
136
|
db.prepare("UPDATE proactive_inbox_items SET status = 'resolved', resolution = ?, updated_at = ? WHERE inbox_item_id = ?").run(choice.trim().slice(0, 200), now.toISOString(), id);
|
|
137
|
+
if (row.action_status === "approval_required") db.prepare(`UPDATE proactive_insights SET action_status = ?, action_updated_at = ?
|
|
138
|
+
WHERE insight_id = (SELECT insight_id FROM proactive_inbox_items WHERE inbox_item_id = ?)
|
|
139
|
+
AND action_status = 'approval_required'`).run(choice === "approve" ? "pending" : "rejected", now.toISOString(), id);
|
|
134
140
|
});
|
|
135
141
|
return getInboxItem(id);
|
|
136
142
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { publishInstructionFeedback } from "../scenarios/repository.js";
|
|
2
|
-
import {
|
|
2
|
+
import { executePendingProactiveActions } from "../actions/service.js";
|
|
3
3
|
import { getInboxItem, getInboxSubscriptionId, listInbox, projectInsightsToInbox, recordDecision, recordFeedback, transitionInboxItem, wakeSnoozedItems } from "./repository.js";
|
|
4
4
|
//#region src/proactive/inbox/service.ts
|
|
5
5
|
var ProactiveInboxService = class {
|
|
@@ -9,7 +9,7 @@ var ProactiveInboxService = class {
|
|
|
9
9
|
feedback = recordFeedback;
|
|
10
10
|
decide(id, choice, note = "") {
|
|
11
11
|
const item = recordDecision(id, choice, note);
|
|
12
|
-
|
|
12
|
+
if (choice === "approve") executePendingProactiveActions();
|
|
13
13
|
return getInboxItem(id) ?? item;
|
|
14
14
|
}
|
|
15
15
|
instruct(id, instruction) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
+
import { pruneProactiveHistory } from "../maintenance.js";
|
|
3
4
|
import { executePendingProactiveActions } from "../actions/service.js";
|
|
4
5
|
import { claimDelivery, finishDelivery, projectInsightsToInbox, recoverExpiredDeliveries, wakeSnoozedItems } from "./repository.js";
|
|
5
6
|
//#region src/proactive/inbox/worker.ts
|
|
@@ -9,6 +10,7 @@ var ProactiveInboxWorker = class {
|
|
|
9
10
|
timer;
|
|
10
11
|
running = false;
|
|
11
12
|
waiters = [];
|
|
13
|
+
lastMaintenanceAt = 0;
|
|
12
14
|
constructor(delivery, intervalMs = 3e3) {
|
|
13
15
|
this.delivery = delivery;
|
|
14
16
|
this.intervalMs = intervalMs;
|
|
@@ -28,6 +30,11 @@ var ProactiveInboxWorker = class {
|
|
|
28
30
|
if (this.running) return;
|
|
29
31
|
this.running = true;
|
|
30
32
|
try {
|
|
33
|
+
const now = Date.now();
|
|
34
|
+
if (now - this.lastMaintenanceAt >= 60 * 6e4) {
|
|
35
|
+
pruneProactiveHistory(new Date(now));
|
|
36
|
+
this.lastMaintenanceAt = now;
|
|
37
|
+
}
|
|
31
38
|
projectInsightsToInbox();
|
|
32
39
|
executePendingProactiveActions();
|
|
33
40
|
wakeSnoozedItems();
|
|
@@ -6,9 +6,10 @@ export { matchesCondition, matchScenario } from './routing/matcher.js';
|
|
|
6
6
|
export type { EventCondition, ScenarioRoute } from './routing/types.js';
|
|
7
7
|
export type { SignalBatch } from './routing/batch-repository.js';
|
|
8
8
|
export { ProactiveEventService } from './service.js';
|
|
9
|
+
export { pruneProactiveHistory } from './maintenance.js';
|
|
9
10
|
export { ProactiveScenarioService } from './scenarios/service.js';
|
|
10
11
|
export type { PromptRevision, ScenarioDefinition, ScenarioSubscription } from './scenarios/types.js';
|
|
11
|
-
export { AutomationStateContextProvider, ConnectedSourceContextProvider, ContextProviderRegistry, EventBatchContextProvider, InternalObjectContextProvider, MeetingWorkspaceContextProvider, ProjectStateContextProvider,
|
|
12
|
+
export { AutomationStateContextProvider, ConnectedSourceContextProvider, ContextProviderRegistry, EventBatchContextProvider, InternalObjectContextProvider, MeetingWorkspaceContextProvider, ProjectStateContextProvider, UserModelContextProvider, } from './execution/context.js';
|
|
12
13
|
export { ReadonlyProactiveAgentExecutor } from './execution/agent-executor.js';
|
|
13
14
|
export { listInsights } from './execution/repository.js';
|
|
14
15
|
export { ProactiveWorker } from './execution/worker.js';
|
|
@@ -3,11 +3,12 @@ import { normalizeEventEnvelope } from "./events/envelope.js";
|
|
|
3
3
|
import { mapProductEventToProactive } from "./events/product-event-bridge.js";
|
|
4
4
|
import { matchScenario, matchesCondition } from "./routing/matcher.js";
|
|
5
5
|
import { ProactiveEventService } from "./service.js";
|
|
6
|
-
import {
|
|
6
|
+
import { pruneProactiveHistory } from "./maintenance.js";
|
|
7
|
+
import { AutomationStateContextProvider, ConnectedSourceContextProvider, ContextProviderRegistry, EventBatchContextProvider, InternalObjectContextProvider, MeetingWorkspaceContextProvider, ProjectStateContextProvider, UserModelContextProvider } from "./execution/context.js";
|
|
7
8
|
import { ReadonlyProactiveAgentExecutor } from "./execution/agent-executor.js";
|
|
8
9
|
import { listInsights } from "./execution/repository.js";
|
|
9
10
|
import { ProactiveWorker } from "./execution/worker.js";
|
|
10
11
|
import { ProactiveTemporalWorker } from "./temporal/worker.js";
|
|
11
12
|
import { ProactiveInboxService } from "./inbox/service.js";
|
|
12
13
|
import { ProactiveInboxWorker } from "./inbox/worker.js";
|
|
13
|
-
export { AutomationStateContextProvider, ConnectedSourceContextProvider, ContextProviderRegistry, EventBatchContextProvider, InternalObjectContextProvider, MeetingWorkspaceContextProvider, ProactiveEventService, ProactiveInboxService, ProactiveInboxWorker, ProactiveScenarioService, ProactiveTemporalWorker, ProactiveWorker, ProjectStateContextProvider, ReadonlyProactiveAgentExecutor,
|
|
14
|
+
export { AutomationStateContextProvider, ConnectedSourceContextProvider, ContextProviderRegistry, EventBatchContextProvider, InternalObjectContextProvider, MeetingWorkspaceContextProvider, ProactiveEventService, ProactiveInboxService, ProactiveInboxWorker, ProactiveScenarioService, ProactiveTemporalWorker, ProactiveWorker, ProjectStateContextProvider, ReadonlyProactiveAgentExecutor, UserModelContextProvider, listInsights, mapProductEventToProactive, matchScenario, matchesCondition, normalizeEventEnvelope, pruneProactiveHistory };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { runSqliteWriteTransaction } from "../storage/sqlite/transaction.js";
|
|
2
|
+
//#region src/proactive/maintenance.ts
|
|
3
|
+
const RETENTION_DAYS = 90;
|
|
4
|
+
function pruneProactiveHistory(now = /* @__PURE__ */ new Date()) {
|
|
5
|
+
const cutoff = (/* @__PURE__ */ new Date(now.getTime() - RETENTION_DAYS * 24 * 60 * 6e4)).toISOString();
|
|
6
|
+
return runSqliteWriteTransaction((db) => {
|
|
7
|
+
const batches = db.prepare(`DELETE FROM proactive_signal_batches
|
|
8
|
+
WHERE updated_at < ? AND status IN ('processed', 'ignored', 'failed_permanent', 'expired')`).run(cutoff).changes;
|
|
9
|
+
const events = db.prepare(`DELETE FROM proactive_events
|
|
10
|
+
WHERE observed_at < ? AND NOT EXISTS (
|
|
11
|
+
SELECT 1 FROM proactive_batch_events batch_event
|
|
12
|
+
WHERE batch_event.event_id = proactive_events.event_id
|
|
13
|
+
)`).run(cutoff).changes;
|
|
14
|
+
return {
|
|
15
|
+
batches: Number(batches),
|
|
16
|
+
events: Number(events)
|
|
17
|
+
};
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { pruneProactiveHistory };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ScenarioRoute } from '../routing/types.js';
|
|
2
2
|
import type { PromptRevision, ScenarioDefinition, ScenarioSubscription } from './types.js';
|
|
3
3
|
export declare function listScenarios(): ScenarioDefinition[];
|
|
4
|
-
export declare function getScenario(key: string): ScenarioDefinition | null;
|
|
4
|
+
export declare function getScenario(key: string, version?: number): ScenarioDefinition | null;
|
|
5
5
|
export declare function upsertSubscription(input: {
|
|
6
6
|
scenarioKey: string;
|
|
7
7
|
workspaceId: string;
|
|
@@ -15,7 +15,14 @@ function scenarioFromRow(row) {
|
|
|
15
15
|
...condition ? { condition } : {},
|
|
16
16
|
aggregation: text(row, "aggregation"),
|
|
17
17
|
debounceSeconds: Number(row.debounce_seconds),
|
|
18
|
-
maxWindowSeconds: Number(row.max_window_seconds)
|
|
18
|
+
maxWindowSeconds: Number(row.max_window_seconds),
|
|
19
|
+
contextProviderIds: JSON.parse(text(row, "context_provider_ids_json")),
|
|
20
|
+
valuePolicy: {
|
|
21
|
+
minConfidence: Number(row.min_confidence),
|
|
22
|
+
minScore: Number(row.min_value_score),
|
|
23
|
+
cooldownSeconds: Number(row.cooldown_seconds),
|
|
24
|
+
maxRunsPerDay: Number(row.max_runs_per_day)
|
|
25
|
+
}
|
|
19
26
|
};
|
|
20
27
|
}
|
|
21
28
|
function subscriptionFromRow(row) {
|
|
@@ -47,8 +54,8 @@ function revisionFromRow(row) {
|
|
|
47
54
|
function listScenarios() {
|
|
48
55
|
return getSqliteDatabase().prepare("SELECT * FROM proactive_scenarios ORDER BY scenario_key").all().map(scenarioFromRow);
|
|
49
56
|
}
|
|
50
|
-
function getScenario(key) {
|
|
51
|
-
const row = getSqliteDatabase().prepare("SELECT * FROM proactive_scenarios WHERE scenario_key = ?").get(key);
|
|
57
|
+
function getScenario(key, version) {
|
|
58
|
+
const row = version === void 0 ? getSqliteDatabase().prepare("SELECT * FROM proactive_scenarios WHERE scenario_key = ?").get(key) : getSqliteDatabase().prepare("SELECT * FROM proactive_scenario_versions WHERE scenario_key = ? AND version = ?").get(key, version);
|
|
52
59
|
return row ? scenarioFromRow(row) : null;
|
|
53
60
|
}
|
|
54
61
|
function upsertSubscription(input, now = /* @__PURE__ */ new Date()) {
|
|
@@ -11,6 +11,13 @@ export interface ScenarioDefinition {
|
|
|
11
11
|
aggregation: ScenarioRoute['aggregation'];
|
|
12
12
|
debounceSeconds: number;
|
|
13
13
|
maxWindowSeconds: number;
|
|
14
|
+
contextProviderIds: string[];
|
|
15
|
+
valuePolicy: {
|
|
16
|
+
minConfidence: number;
|
|
17
|
+
minScore: number;
|
|
18
|
+
cooldownSeconds: number;
|
|
19
|
+
maxRunsPerDay: number;
|
|
20
|
+
};
|
|
14
21
|
}
|
|
15
22
|
export interface ScenarioSubscription {
|
|
16
23
|
id: string;
|
|
@@ -14,5 +14,12 @@ export declare class ProactiveEventService {
|
|
|
14
14
|
collecting: number;
|
|
15
15
|
ready: number;
|
|
16
16
|
oldestReadyAt: string | null;
|
|
17
|
+
last24Hours: {
|
|
18
|
+
runs: number;
|
|
19
|
+
insights: number;
|
|
20
|
+
discarded: number;
|
|
21
|
+
useful: number;
|
|
22
|
+
notUseful: number;
|
|
23
|
+
};
|
|
17
24
|
};
|
|
18
25
|
}
|
|
@@ -49,11 +49,27 @@ var ProactiveEventService = class {
|
|
|
49
49
|
SUM(CASE WHEN status = 'ready' THEN 1 ELSE 0 END) AS ready,
|
|
50
50
|
MIN(CASE WHEN status = 'ready' THEN ready_at END) AS oldest_ready_at
|
|
51
51
|
FROM proactive_signal_batches`).get();
|
|
52
|
+
const since = (/* @__PURE__ */ new Date(Date.now() - 1440 * 6e4)).toISOString();
|
|
53
|
+
const runs = db.prepare(`SELECT COUNT(*) AS runs,
|
|
54
|
+
SUM(CASE WHEN status = 'discarded' THEN 1 ELSE 0 END) AS discarded
|
|
55
|
+
FROM proactive_runs WHERE started_at >= ?`).get(since);
|
|
56
|
+
const insights = db.prepare("SELECT COUNT(*) AS count FROM proactive_insights WHERE created_at >= ?").get(since);
|
|
57
|
+
const feedback = db.prepare(`SELECT
|
|
58
|
+
SUM(CASE WHEN rating = 'useful' THEN 1 ELSE 0 END) AS useful,
|
|
59
|
+
SUM(CASE WHEN rating = 'not_useful' THEN 1 ELSE 0 END) AS not_useful
|
|
60
|
+
FROM proactive_feedback WHERE created_at >= ?`).get(since);
|
|
52
61
|
return {
|
|
53
62
|
events: events.count,
|
|
54
63
|
collecting: batches.collecting ?? 0,
|
|
55
64
|
ready: batches.ready ?? 0,
|
|
56
|
-
oldestReadyAt: batches.oldest_ready_at
|
|
65
|
+
oldestReadyAt: batches.oldest_ready_at,
|
|
66
|
+
last24Hours: {
|
|
67
|
+
runs: runs.runs,
|
|
68
|
+
insights: insights.count,
|
|
69
|
+
discarded: runs.discarded ?? 0,
|
|
70
|
+
useful: feedback.useful ?? 0,
|
|
71
|
+
notUseful: feedback.not_useful ?? 0
|
|
72
|
+
}
|
|
57
73
|
};
|
|
58
74
|
}
|
|
59
75
|
};
|
|
@@ -9,6 +9,6 @@ export * from './project-loop.js';
|
|
|
9
9
|
export * from './session-bind.js';
|
|
10
10
|
export * from './workflow-bind.js';
|
|
11
11
|
export * from './automation-bind.js';
|
|
12
|
-
export * from './
|
|
12
|
+
export * from './knowledge-bind.js';
|
|
13
13
|
export * from './workspace.js';
|
|
14
14
|
export * from './workspace-project.js';
|
|
@@ -10,5 +10,5 @@ import { CODING_PROJECT_AGENT_ID, inferSuggestedProjectDefaultAgentId, suggestPr
|
|
|
10
10
|
import { buildProjectLoopOverview } from "./project-loop.js";
|
|
11
11
|
import { bindWorkflowRunToProject } from "./workflow-bind.js";
|
|
12
12
|
import { bindAutomationToProject } from "./automation-bind.js";
|
|
13
|
-
import {
|
|
14
|
-
export { CODING_PROJECT_AGENT_ID, ProjectService, ProjectSkillError, ProjectSkillService, ProjectStore, ProjectWorkspaceConflictError, ProjectWorkspaceMissingError, bindAutomationToProject,
|
|
13
|
+
import { bindKnowledgeItemToProject } from "./knowledge-bind.js";
|
|
14
|
+
export { CODING_PROJECT_AGENT_ID, ProjectService, ProjectSkillError, ProjectSkillService, ProjectStore, ProjectWorkspaceConflictError, ProjectWorkspaceMissingError, bindAutomationToProject, bindKnowledgeItemToProject, bindSessionToProject, bindSessionsToProject, bindWorkflowRunToProject, buildProjectLoopOverview, canonicalWorkspacePath, ensureWorkspaceDirectory, getProjectForSession, getProjectWorkspacePathForSession, inferProjectExecutionMode, inferProjectKind, inferProjectNameFromWorkspaceRoot, inferSuggestedProjectDefaultAgentId, isPathSameOrInsideWorkspace, isSafeAutoCreateWorkspaceRoot, isValidProjectAgentId, listProjectSessionKeys, moveSessionToProject, normalizeProjectAgentId, resolveProjectAgentId, resolveProjectWorkspacePath, resolveWorkspaceProjectRoot, slugifyProjectName, suggestProjectDefaultAgentId, unbindSessionFromProject, workspaceDirectoryExists };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function bindKnowledgeItemToProject(knowledgeId: string, projectId: string): void;
|