@xopcai/xopc 0.0.391 → 0.0.393
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/dist/sidepanel.js +1 -1
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CzS0TUv9.js → agent-avatar-dicebear-1AF2KGju.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CPJr7NRR.js +1 -0
- package/dist/gateway/static/root/assets/agent-plugin-dialog-cjJXJj_3.js +1 -0
- package/dist/gateway/static/root/assets/agents-DW3TlnIg.js +77 -0
- package/dist/gateway/static/root/assets/{agents-admin-api-Bb3Kvz3X.js → agents-admin-api-B5aykqg_.js} +1 -1
- package/dist/gateway/static/root/assets/app-link-BV_eGr7l.js +1 -0
- package/dist/gateway/static/root/assets/app-management-settings-panel-B_MFhXXU.js +1 -0
- package/dist/gateway/static/root/assets/appearance-settings-TYGidVnd.js +1 -0
- package/dist/gateway/static/root/assets/apps-page-DOkyvOF0.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-DFnHPNie.js → archive-plugin-BrFfEp0u.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-CnBLPVNh.js → automations-page-B7OofUPF.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-DIod-bfm.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-BQC0Tzoi.js → binary-plugins-BfAWnYG8.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-DSh5019z.js → block-editor-_Y-QwZ-3.js} +5 -5
- package/dist/gateway/static/root/assets/browser-automation-inputs-DH9QHI9m.js +1 -0
- package/dist/gateway/static/root/assets/browser-automations-page-B_SnD9B0.js +3 -0
- package/dist/gateway/static/root/assets/browser-settings-page-BPlqYpMM.js +3 -0
- package/dist/gateway/static/root/assets/capabilities-page-BtzZvMIK.js +2 -0
- package/dist/gateway/static/root/assets/capabilities-pt2M56-E.js +1 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-WzoG3oBb.js +8 -0
- package/dist/gateway/static/root/assets/capability-header-actions-CFVx3iaZ.js +1 -0
- package/dist/gateway/static/root/assets/channels-BXA55GY2.js +1 -0
- package/dist/gateway/static/root/assets/chat-terminal-dock-D3GuiG3N.js +36 -0
- package/dist/gateway/static/root/assets/{chunk-KS7C4IRE--EKdQGRF.js → chunk-KS7C4IRE-B2HK1psj.js} +2 -2
- package/dist/gateway/static/root/assets/computer-settings-page-CIbHDlp8.js +1 -0
- package/dist/gateway/static/root/assets/connector-service-page-CDyCHkpK.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-DA2b6cJu.js +1 -0
- package/dist/gateway/static/root/assets/date-picker-C424c_g9.js +1 -0
- package/dist/gateway/static/root/assets/dependency-picker-BVJh9sYc.js +1 -0
- package/dist/gateway/static/root/assets/desktop-pet-Q52A8vjp.js +1 -0
- package/dist/gateway/static/root/assets/desktop-pet-settings-CZr1CXxu.js +1 -0
- package/dist/gateway/static/root/assets/desktop-pet-sprite-Bd-aOI7N.js +30 -0
- package/dist/gateway/static/root/assets/desktop-pet-sprite-BuB0g8zv.css +1 -0
- package/dist/gateway/static/root/assets/device-pairing-wizard-D_WWTsze.js +1 -0
- package/dist/gateway/static/root/assets/directory-picker-path-field-C6cUgrvg.js +1 -0
- package/dist/gateway/static/root/assets/echarts-runtime-tcHc9TOS.js +18 -0
- package/dist/gateway/static/root/assets/extension-debug-page-DyyfC4gA.js +1 -0
- package/dist/gateway/static/root/assets/extension-page-Dho9o3ZZ.js +1 -0
- package/dist/gateway/static/root/assets/extension-settings-page-CdnIGyCH.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-config-swr-Dv_A5FMu.js → gateway-config-swr-BEePO3Wl.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-realtime-DghCGfY_.js → gateway-realtime-Dng_VOvI.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-DtlBf7oH.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-D0KSQRNZ.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-CkTVSESs.js → gateway-startup-retry-CDCiy7Cd.js} +1 -1
- package/dist/gateway/static/root/assets/{highlighted-body-KQOG7T2V-DV2wNqBn.js → highlighted-body-KQOG7T2V-BNpj_mIM.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-CH_A0W29.js +2 -0
- package/dist/gateway/static/root/assets/image-generation-api-DwkO2y46.js +1 -0
- package/dist/gateway/static/root/assets/imports-page-BrYvomnU.js +1 -0
- package/dist/gateway/static/root/assets/index-CKdOZoVu.js +260 -0
- package/dist/gateway/static/root/assets/index-Rxjt-jc3.css +1 -0
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-BveDYfYk.js +1 -0
- package/dist/gateway/static/root/assets/local-app-workbench-page-CcIi1BhT.js +1 -0
- package/dist/gateway/static/root/assets/local-apps-page-B1a69mlV.js +1 -0
- package/dist/gateway/static/root/assets/local-session-drafts-CYEDUPH7.js +1 -0
- package/dist/gateway/static/root/assets/{locale-store-BpK9AiDq.js → locale-store-CE7L6MlS.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-Us1jv3C4.js +2 -0
- package/dist/gateway/static/root/assets/management-settings-C9RAM7-s.js +1 -0
- package/dist/gateway/static/root/assets/markdown-view-PrKvVpRh.js +324 -0
- package/dist/gateway/static/root/assets/{media-plugins-oSChWbcP.js → media-plugins-CR1fp6IL.js} +1 -1
- package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-DQdcaMiu.js +1 -0
- package/dist/gateway/static/root/assets/messages-CaeL_miw.js +3 -0
- package/dist/gateway/static/root/assets/note-detail-panel-Q4yRx9iZ.js +5 -0
- package/dist/gateway/static/root/assets/notes-page-C9qu16IN.js +8 -0
- package/dist/gateway/static/root/assets/page-context-capture-button-Cn_WK68Y.js +1 -0
- package/dist/gateway/static/root/assets/personal-page-DrP6hEcg.js +1 -0
- package/dist/gateway/static/root/assets/preview-open-alternatives-3NbiWGRG.js +1 -0
- package/dist/gateway/static/root/assets/product-delivery-DwmnNJvk.js +1 -0
- package/dist/gateway/static/root/assets/product-open-page-KKE5-V8k.js +1 -0
- package/dist/gateway/static/root/assets/product-preview-content-BM0oqNxi.js +1 -0
- package/dist/gateway/static/root/assets/project-detail-page-CPZrwf8n.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-Besfx_07.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-Dsa2LvRt.js → registry-api-BO2Ck3aA.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CTDghL5L.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-api-C2Uw89eY.js → runtime-tools-api-B1sb8nlw.js} +1 -1
- package/dist/gateway/static/root/assets/runtime-tools-settings-panel-W0X_Fy7b.js +1 -0
- package/dist/gateway/static/root/assets/schema-form-DNM2Zdyr.js +1 -0
- package/dist/gateway/static/root/assets/{session-api-ga-SUOq_.js → session-api-CaAUJvu1.js} +1 -1
- package/dist/gateway/static/root/assets/session-manager-DoFTlgNz.js +16 -0
- package/dist/gateway/static/root/assets/sessions-page-Dxtablvd.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-C7zklouD.js +1 -0
- package/dist/gateway/static/root/assets/settings-form-section-DCSHPFAN.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-DPCgrICd.js → settings-page-B18UbbaJ.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-JoSfluza.js +1 -0
- package/dist/gateway/static/root/assets/share-preview-page-BLnS3hoH.js +2 -0
- package/dist/gateway/static/root/assets/shares-settings-DcIuPJK3.js +1 -0
- package/dist/gateway/static/root/assets/skill-api-CcYGkRPL.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-PnUZjoPK.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-D3JAw62U.js +2 -0
- package/dist/gateway/static/root/assets/style-BQqU-1pP.js +7 -0
- package/dist/gateway/static/root/assets/system-settings-panel-C974myUM.js +1 -0
- package/dist/gateway/static/root/assets/tab-completion-input-CxtEp0aP.js +1 -0
- package/dist/gateway/static/root/assets/task-detail-page-CiljFekC.js +2 -0
- package/dist/gateway/static/root/assets/{task-expandable-content-DAZGz5YC.js → task-expandable-content-DTEVoNrM.js} +1 -1
- package/dist/gateway/static/root/assets/tracing-settings-page-DEE75MUn.js +1 -0
- package/dist/gateway/static/root/assets/tunnel-api-DWyI3uA3.js +1 -0
- package/dist/gateway/static/root/assets/usage-page-DJYvbxk7.js +1 -0
- package/dist/gateway/static/root/assets/use-autosave-CY0YuljR.js +1 -0
- package/dist/gateway/static/root/assets/user-model-page-eHZJD6Fw.js +2 -0
- package/dist/gateway/static/root/assets/voice-api-key-field-BNG4ixJE.js +1 -0
- package/dist/gateway/static/root/assets/{voice-config-api-Dl39b27p.js → voice-config-api-D0Wscn9W.js} +1 -1
- package/dist/gateway/static/root/assets/work-discovery-overlay-CohIoAre.js +1 -0
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-BXI8eyYh.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-CVti0u-l.js +6 -0
- package/dist/gateway/static/root/assets/xopc-cloud-account-card-C_COnY_B.js +1 -0
- package/dist/gateway/static/root/index.html +22 -72
- package/dist/gateway/static/root/notification-sw.js +0 -15
- package/dist/package.js +1 -1
- package/dist/packages/computer-control-contract/src/index.js +8 -0
- package/dist/packages/gateway-contract/src/app-context.js +0 -1
- package/dist/packages/gateway-contract/src/capabilities.js +2 -249
- package/dist/packages/gateway-contract/src/home.js +0 -5
- package/dist/packages/gateway-contract/src/index.js +0 -4
- package/dist/packages/gateway-contract/src/notifications.js +0 -11
- package/dist/packages/gateway-contract/src/product-delivery.js +0 -2
- package/dist/src/agent/agent-instance-gateway.d.ts +2 -0
- package/dist/src/agent/agent-manager.d.ts +1 -3
- package/dist/src/agent/agent-manager.js +8 -18
- package/dist/src/agent/child-agent-factory.d.ts +2 -1
- package/dist/src/agent/child-agent-factory.js +2 -1
- package/dist/src/agent/coding/projectEvidence.d.ts +9 -0
- package/dist/src/agent/coding/projectEvidence.js +177 -0
- package/dist/src/agent/coding/repository-instructions.d.ts +8 -1
- package/dist/src/agent/coding/repository-instructions.js +9 -4
- package/dist/src/agent/coding/run-verification.d.ts +17 -2
- package/dist/src/agent/coding/run-verification.js +82 -12
- package/dist/src/agent/coding/workspace-revision.js +1 -1
- package/dist/src/agent/embedded/codemode-extension.js +1 -1
- package/dist/src/agent/embedded/execution-context.d.ts +1 -0
- package/dist/src/agent/embedded/execution-context.js +4 -1
- package/dist/src/agent/embedded/external-tool-discovery.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js +1 -0
- package/dist/src/agent/embedded/run-turn.js +41 -5
- package/dist/src/agent/embedded/session-runner.js +1 -1
- package/dist/src/agent/embedded/session-tool-result-guard.js +5 -0
- package/dist/src/agent/embedded/types.d.ts +2 -0
- package/dist/src/agent/embedded/xopc-tools-bridge.js +2 -1
- package/dist/src/agent/external-tools/extension-provider.js +1 -1
- package/dist/src/agent/external-tools/gateway-tools.js +1 -1
- package/dist/src/agent/external-tools/memory-provider.js +1 -1
- package/dist/src/agent/independent-execution.d.ts +2 -0
- package/dist/src/agent/independent-execution.js +12 -0
- package/dist/src/agent/mcp/connection-drafts.js +15 -10
- package/dist/src/agent/memory/compaction.js +1 -1
- package/dist/src/agent/orchestration/delegation-scope.d.ts +1 -0
- package/dist/src/agent/orchestration/delegation-scope.js +4 -1
- package/dist/src/agent/orchestration/loop-guard.js +6 -2
- package/dist/src/agent/prompt/sections/agent-identity.js +3 -2
- package/dist/src/agent/prompt/sections/behavior.d.ts +3 -2
- package/dist/src/agent/prompt/sections/behavior.js +35 -25
- package/dist/src/agent/prompt/sections/memory-skills.d.ts +1 -1
- package/dist/src/agent/prompt/sections/memory-skills.js +10 -11
- package/dist/src/agent/prompt/sections/messaging-runtime.d.ts +3 -2
- package/dist/src/agent/prompt/sections/messaging-runtime.js +21 -24
- package/dist/src/agent/prompt/sections/response-language.js +7 -5
- package/dist/src/agent/prompt/sections/tooling.js +11 -10
- package/dist/src/agent/prompt/service-prompt-builder.js +3 -1
- package/dist/src/agent/prompt/system-prompt-params.d.ts +2 -1
- package/dist/src/agent/prompt/system-prompt-params.js +2 -0
- package/dist/src/agent/prompt/system-prompt.d.ts +2 -1
- package/dist/src/agent/prompt/system-prompt.js +21 -18
- package/dist/src/agent/prompt/types.d.ts +2 -0
- package/dist/src/agent/service.js +1 -1
- package/dist/src/agent/service.types.d.ts +0 -2
- package/dist/src/agent/skills/format-skills-prompt.js +5 -2
- package/dist/src/agent/tool-manuals/computer.d.ts +1 -1
- package/dist/src/agent/tool-manuals/computer.js +9 -1
- package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
- package/dist/src/agent/tool-manuals/xopc-use.js +6 -48
- package/dist/src/agent/tools/computer-use-tool.js +17 -3
- package/dist/src/agent/tools/dataBatch.d.ts +1 -0
- package/dist/src/agent/tools/dataBatch.js +4 -1
- package/dist/src/agent/tools/delegate-tool.d.ts +1 -0
- package/dist/src/agent/tools/delegate-tool.js +1 -0
- package/dist/src/agent/tools/error-tracker.js +4 -2
- package/dist/src/agent/tools/exec-command.js +4 -3
- package/dist/src/agent/tools/factory.d.ts +1 -2
- package/dist/src/agent/tools/factory.js +20 -22
- package/dist/src/agent/tools/{delegation-parent-policy.d.ts → noninteractive-tool-policy.d.ts} +1 -1
- package/dist/src/agent/tools/{delegation-parent-policy.js → noninteractive-tool-policy.js} +4 -4
- package/dist/src/agent/tools/personal-task-tool.js +1 -1
- package/dist/src/agent/tools/publish-artifacts.js +1 -1
- package/dist/src/agent/tools/search/cache.d.ts +3 -1
- package/dist/src/agent/tools/search/cache.js +4 -1
- package/dist/src/agent/tools/search/providers/deepseek-protocol.d.ts +9 -0
- package/dist/src/agent/tools/search/providers/deepseek-protocol.js +84 -0
- package/dist/src/agent/tools/search/providers/deepseek.d.ts +9 -0
- package/dist/src/agent/tools/search/providers/deepseek.js +55 -0
- package/dist/src/agent/tools/search/providers/xopc-cloud.d.ts +2 -1
- package/dist/src/agent/tools/search/providers/xopc-cloud.js +36 -1
- package/dist/src/agent/tools/search/registry.d.ts +1 -0
- package/dist/src/agent/tools/search/registry.js +32 -6
- package/dist/src/agent/tools/search/request-gate.d.ts +13 -0
- package/dist/src/agent/tools/search/request-gate.js +41 -0
- package/dist/src/agent/tools/search/resolve-config.js +1 -1
- package/dist/src/agent/tools/search/search-info.d.ts +8 -0
- package/dist/src/agent/tools/search/search-info.js +34 -0
- package/dist/src/agent/tools/search/types.d.ts +19 -1
- package/dist/src/agent/tools/toolExposure.d.ts +3 -0
- package/dist/src/agent/tools/toolExposure.js +25 -0
- package/dist/src/agent/tools/web.js +8 -1
- package/dist/src/agent/tools/xopc-use-tool.d.ts +2 -4
- package/dist/src/agent/tools/xopc-use-tool.js +11 -135
- package/dist/src/agent/workflow/builtins/index.js +98 -0
- package/dist/src/agent/workflow/subagent-runner.d.ts +1 -0
- package/dist/src/agent/workflow/subagent-runner.js +3 -3
- package/dist/src/agent/workflow/types.d.ts +3 -2
- package/dist/src/agent/workflow/workflow-child-tools.js +13 -8
- package/dist/src/agent-catalog/migrations/legacy-config-cutover.js +1 -2
- package/dist/src/automations/domain/validation.d.ts +8 -8
- package/dist/src/automations/draft/automation-draft-validator.d.ts +1 -1
- package/dist/src/automations/events/event-catalog.js +0 -18
- package/dist/src/backup/archive.js +1 -2
- package/dist/src/capabilities/runtime/app-context.js +2 -6
- package/dist/src/capabilities/runtime/product.d.ts +1 -3
- package/dist/src/capabilities/runtime/product.js +0 -6
- package/dist/src/cli/command-manifest.js +1 -1
- package/dist/src/cli/commands/search.d.ts +2 -2
- package/dist/src/cli/commands/search.js +8 -6
- package/dist/src/computer/config.d.ts +1 -0
- package/dist/src/computer/config.js +1 -0
- package/dist/src/computer/diagnostics.d.ts +223 -0
- package/dist/src/computer/diagnostics.js +360 -0
- package/dist/src/computer/errors.d.ts +1 -1
- package/dist/src/computer/errors.js +8 -1
- package/dist/src/computer/evaluation-comparison.d.ts +125 -0
- package/dist/src/computer/evaluation-comparison.js +65 -0
- package/dist/src/computer/evaluation-harness.d.ts +2 -1
- package/dist/src/computer/evaluation-harness.js +59 -8
- package/dist/src/computer/evaluation.d.ts +102 -7
- package/dist/src/computer/evaluation.js +64 -15
- package/dist/src/computer/flows.d.ts +62 -0
- package/dist/src/computer/flows.js +158 -0
- package/dist/src/computer/model-adapter.d.ts +11 -0
- package/dist/src/computer/model-adapter.js +156 -11
- package/dist/src/computer/model-policy.d.ts +1 -1
- package/dist/src/computer/model-policy.js +13 -6
- package/dist/src/computer/release-gate.d.ts +11 -0
- package/dist/src/computer/runtime.d.ts +27 -2
- package/dist/src/computer/runtime.js +261 -44
- package/dist/src/computer/semantic-actions.d.ts +3 -0
- package/dist/src/computer/semantic-actions.js +29 -0
- package/dist/src/config/index.js +2 -2
- package/dist/src/config/models-json.d.ts +14 -8
- package/dist/src/config/models-json.js +2 -0
- package/dist/src/config/outbound-proxy.d.ts +11 -0
- package/dist/src/config/outbound-proxy.js +30 -0
- package/dist/src/config/rules.js +5 -0
- package/dist/src/config/schema.d.ts +25 -10
- package/dist/src/config/schema.js +21 -10
- package/dist/src/connectors/cli/authorization.d.ts +1 -1
- package/dist/src/connectors/cli/store.d.ts +1 -1
- package/dist/src/endpoint-tools/invocation-service.js +5 -0
- package/dist/src/gateway/config-tools-web.js +15 -4
- package/dist/src/gateway/gateway-workflow-host.types.d.ts +3 -0
- package/dist/src/gateway/hono/app.d.ts +0 -2
- package/dist/src/gateway/hono/app.js +1 -2
- package/dist/src/gateway/hono/lib/config-payload.d.ts +6 -3
- package/dist/src/gateway/hono/lib/config-payload.js +5 -1
- package/dist/src/gateway/hono/routes/capability-operations.js +0 -7
- package/dist/src/gateway/hono/routes/config-patch/gateway.js +7 -0
- package/dist/src/gateway/hono/routes/deps.d.ts +0 -2
- package/dist/src/gateway/hono/routes/lazy-bundles.js +0 -8
- package/dist/src/gateway/hono/routes/models.js +5 -2
- package/dist/src/gateway/hono/routes/session-input-handler.d.ts +2 -2
- package/dist/src/gateway/service/config-coordinator.d.ts +8 -5
- package/dist/src/gateway/service/session-input-coordinator.js +1 -1
- package/dist/src/gateway/service.d.ts +0 -3
- package/dist/src/gateway/service.js +10 -44
- package/dist/src/home-intelligence/generator.js +1 -1
- package/dist/src/home-intelligence/policy.js +0 -5
- package/dist/src/home-intelligence/repository.d.ts +1 -1
- package/dist/src/infra/domain-outbox-dispatcher.js +1 -1
- package/dist/src/infra/http-proxy-env.d.ts +3 -0
- package/dist/src/infra/http-proxy-env.js +22 -2
- package/dist/src/notifications/service.d.ts +2 -18
- package/dist/src/notifications/service.js +8 -39
- package/dist/src/notifications/store.d.ts +0 -1
- package/dist/src/notifications/store.js +1 -4
- package/dist/src/personal-agent/communication.d.ts +2 -1
- package/dist/src/personal-agent/communication.js +11 -2
- package/dist/src/personal-agent/persona.d.ts +2 -1
- package/dist/src/personal-agent/persona.js +3 -2
- package/dist/src/personal-agent/prompts.d.ts +2 -0
- package/dist/src/personal-agent/prompts.js +69 -7
- package/dist/src/personal-agent/reply-composer.js +2 -2
- package/dist/src/personal-agent/reply-style.d.ts +4 -2
- package/dist/src/personal-agent/reply-style.js +19 -3
- package/dist/src/personal-agent/request-service.js +14 -9
- package/dist/src/pets/loopi-artwork.d.ts +2 -0
- package/dist/src/pets/loopi-artwork.js +36 -0
- package/dist/src/pets/pointer.d.ts +6 -0
- package/dist/src/pets/pointer.js +16 -0
- package/dist/src/platform/contracts.d.ts +3 -3
- package/dist/src/project-trust/trust-store.d.ts +5 -0
- package/dist/src/project-trust/trust-store.js +7 -1
- package/dist/src/providers/index.js +3 -3
- package/dist/src/providers/model-registry.js +2 -0
- package/dist/src/providers/model-supplements.d.ts +0 -2
- package/dist/src/providers/model-supplements.js +2 -18
- package/dist/src/providers/xopc-cloud-credit-budget.d.ts +1 -0
- package/dist/src/providers/xopc-cloud-credit-budget.js +4 -1
- package/dist/src/realtime/compact-run-event.js +17 -2
- package/dist/src/realtime/runtime.js +1 -1
- package/dist/src/routing/agent-session-key.js +1 -1
- package/dist/src/routing/resolve-route.js +1 -1
- package/dist/src/routing/session-key.js +1 -1
- package/dist/src/session/compact-history.js +16 -6
- package/dist/src/storage/sqlite/connection.js +2 -2
- package/dist/src/storage/sqlite/conversation-repository.js +1 -1
- package/dist/src/storage/sqlite/migrations/conversation-backup.d.ts +0 -2
- package/dist/src/storage/sqlite/migrations/conversation-backup.js +8 -18
- package/dist/src/storage/sqlite/migrations/conversation-windows-owners.js +28 -33
- package/dist/src/storage/sqlite/migrations/errors.js +1 -1
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +5 -40
- package/dist/src/storage/sqlite/migrations/types.d.ts +0 -2
- package/dist/src/storage/sqlite/schema.d.ts +1 -3
- package/dist/src/storage/sqlite/schema.js +4 -8
- package/dist/src/storage/sqlite/schema.sql +1356 -1282
- package/dist/src/tasks/capabilities/management.d.ts +2 -2
- package/dist/src/tasks/capabilities/relations.d.ts +4 -4
- package/dist/src/tasks/capabilities/write.d.ts +4 -4
- package/dist/src/tasks/task-allocation-service.js +51 -40
- package/dist/src/tasks/task-application-service.js +5 -1
- package/dist/src/tasks/task-contract-planner.js +21 -6
- package/dist/src/tasks/task-language.d.ts +2 -0
- package/dist/src/tasks/task-language.js +13 -2
- package/dist/src/tasks/task-research-result.d.ts +2 -2
- package/dist/src/tasks/task-run-coordinator.js +5 -1
- package/dist/src/tasks/task-run-dispatcher.js +2 -1
- package/dist/src/tui/tui.js +1 -1
- package/dist/src/usage/scenario-registry.js +0 -5
- package/dist/src/usage/types.d.ts +1 -1
- package/dist/src/work-discovery/probe.js +1 -1
- package/dist/src/workflows/domain/definition.d.ts +1 -0
- package/dist/src/workflows/service/workflow-run-service.js +2 -1
- package/package.json +10 -6
- package/skills/THIRD_PARTY_NOTICES.md +0 -6
- package/skills/creative/chat-charts/SKILL.md +26 -0
- package/skills/creative/chat-charts/references/bar-example.json +10 -0
- package/skills/creative/chat-charts/references/chart-spec.md +25 -0
- package/skills/creative/chat-charts/references/line-example.json +13 -0
- package/dist/gateway/static/root/assets/activity-YogQEteU.js +0 -1
- package/dist/gateway/static/root/assets/activity-store-DWQCDi8M.js +0 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DE910MyU.js +0 -1
- package/dist/gateway/static/root/assets/agent-plugin-dialog-0SlvsYl7.js +0 -1
- package/dist/gateway/static/root/assets/agents-BZh28Qn1.js +0 -77
- package/dist/gateway/static/root/assets/app-chrome-BeB4KgOf.js +0 -1
- package/dist/gateway/static/root/assets/app-link-4gpFbdsr.js +0 -1
- package/dist/gateway/static/root/assets/app-management-settings-panel-9A7JN5V5.js +0 -1
- package/dist/gateway/static/root/assets/appearance-settings-BPdLEo6L.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-Cz7LypV9.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-BBjS-sk-.js +0 -6
- package/dist/gateway/static/root/assets/browser-automation-inputs-C5tIrIRL.js +0 -1
- package/dist/gateway/static/root/assets/browser-automations-page-CFCMNfJN.js +0 -3
- package/dist/gateway/static/root/assets/browser-settings-page-C__tyPwu.js +0 -3
- package/dist/gateway/static/root/assets/button-aIC072nz.js +0 -1
- package/dist/gateway/static/root/assets/capabilities-D6RJG4QY.js +0 -1
- package/dist/gateway/static/root/assets/capabilities-DGEmBQnF.js +0 -1
- package/dist/gateway/static/root/assets/capabilities-page-B5AZa7ir.js +0 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-Dskz2_bh.js +0 -8
- package/dist/gateway/static/root/assets/capability-header-actions-xzjWZVbg.js +0 -1
- package/dist/gateway/static/root/assets/channels-DRse_dD3.js +0 -1
- package/dist/gateway/static/root/assets/chat-terminal-dock-CQF0M4kE.js +0 -36
- package/dist/gateway/static/root/assets/chevron-left-DqFhpbvK.js +0 -1
- package/dist/gateway/static/root/assets/chevron-right-BweFrslA.js +0 -1
- package/dist/gateway/static/root/assets/circle-alert-BEjgurr2.js +0 -1
- package/dist/gateway/static/root/assets/circle-dashed-8qMD7gHf.js +0 -1
- package/dist/gateway/static/root/assets/circle-dot-BAseJTrF.js +0 -1
- package/dist/gateway/static/root/assets/cloud-C4-yfnnk.js +0 -1
- package/dist/gateway/static/root/assets/computer-settings-page-ZfzCTS0N.js +0 -1
- package/dist/gateway/static/root/assets/connector-service-page-CwAeWVLK.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-CanakKaj.js +0 -1
- package/dist/gateway/static/root/assets/copy-text-row-C7egVuKr.js +0 -1
- package/dist/gateway/static/root/assets/date-formatters-CUZAyDEg.js +0 -1
- package/dist/gateway/static/root/assets/date-picker-hmJlEAQZ.js +0 -1
- package/dist/gateway/static/root/assets/dependency-picker-Us_Juz6I.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-CvOTI4uw.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-DYg-Gb8t.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-sprite-BP6iMVw1.js +0 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-B1FbZ8C1.js +0 -1
- package/dist/gateway/static/root/assets/directory-picker-path-field-DZN9EDvM.js +0 -1
- package/dist/gateway/static/root/assets/dist-C3DSFZCi.js +0 -1
- package/dist/gateway/static/root/assets/electron-env-Dit0bHgy.js +0 -1
- package/dist/gateway/static/root/assets/extension-debug-page-YIibp6Kk.js +0 -1
- package/dist/gateway/static/root/assets/extension-page-DkcGyb28.js +0 -1
- package/dist/gateway/static/root/assets/extension-provider-B1PQGTtY.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-C_rJiSKo.js +0 -1
- package/dist/gateway/static/root/assets/form-field-width-DJw_jULe.js +0 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-CMJVSnvi.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-CjCWPHNJ.js +0 -1
- package/dist/gateway/static/root/assets/globe-DSSGFWFn.js +0 -1
- package/dist/gateway/static/root/assets/home-page-fAYsd7kG.js +0 -2
- package/dist/gateway/static/root/assets/image-generation-api-B98iXt6A.js +0 -1
- package/dist/gateway/static/root/assets/imports-page-DoBCBN8G.js +0 -1
- package/dist/gateway/static/root/assets/index-DFgXwLsv.js +0 -260
- package/dist/gateway/static/root/assets/index-a6ZvhclR.css +0 -1
- package/dist/gateway/static/root/assets/index.module-Cd9ENXfk.js +0 -1
- package/dist/gateway/static/root/assets/interaction-BdhHBbYa.js +0 -1
- package/dist/gateway/static/root/assets/is-masked-secret-DOkL5b_X.js +0 -1
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-DXVu4lqV.js +0 -1
- package/dist/gateway/static/root/assets/loader-circle-CifKLtgG.js +0 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-B3fz6uRi.js +0 -1
- package/dist/gateway/static/root/assets/local-apps-page-BC6xhmUh.js +0 -1
- package/dist/gateway/static/root/assets/local-session-drafts-DFnZQu9A.js +0 -1
- package/dist/gateway/static/root/assets/logs-page-CSqSFDRU.js +0 -2
- package/dist/gateway/static/root/assets/loopi-C09I2mNj.css +0 -1
- package/dist/gateway/static/root/assets/loopi-Djb8XU3l.js +0 -1
- package/dist/gateway/static/root/assets/management-settings-gq5L0THs.js +0 -1
- package/dist/gateway/static/root/assets/markdown-view-IsYTotu6.js +0 -324
- package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-C_QKwqDN.js +0 -1
- package/dist/gateway/static/root/assets/message-square-plus-XP0tGdlV.js +0 -1
- package/dist/gateway/static/root/assets/messages-CKTo_sIF.js +0 -3
- package/dist/gateway/static/root/assets/mic-CuUb7zc-.js +0 -1
- package/dist/gateway/static/root/assets/minimize-2-DtOGrlpo.js +0 -1
- package/dist/gateway/static/root/assets/models-hub-cache-TjpL7hZ5.js +0 -1
- package/dist/gateway/static/root/assets/note-detail-panel-CdpNXre-.js +0 -5
- package/dist/gateway/static/root/assets/notes-api-CBb944yw.js +0 -1
- package/dist/gateway/static/root/assets/notes-page-EGvGw8MN.js +0 -8
- package/dist/gateway/static/root/assets/page-context-capture-button-CoWb7BYP.js +0 -1
- package/dist/gateway/static/root/assets/page-tabs-HLrKIjXH.js +0 -1
- package/dist/gateway/static/root/assets/pencil-DmIY3Oa-.js +0 -1
- package/dist/gateway/static/root/assets/personal-page-DYzbNTyN.js +0 -1
- package/dist/gateway/static/root/assets/popover-select-DHC7J4lG.js +0 -1
- package/dist/gateway/static/root/assets/preview-open-alternatives-BJU2fmPn.js +0 -1
- package/dist/gateway/static/root/assets/product-delivery-BAks11S4.js +0 -1
- package/dist/gateway/static/root/assets/product-open-page-CTyy7H7-.js +0 -1
- package/dist/gateway/static/root/assets/product-preview-content-D4xqTaEy.js +0 -1
- package/dist/gateway/static/root/assets/project-detail-page-DIVCw0QQ.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-B4L9VnBN.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-B8PvgLVz.js +0 -1
- package/dist/gateway/static/root/assets/rotate-ccw-JM1TBLpp.js +0 -1
- package/dist/gateway/static/root/assets/rotate-cw-LIg3Am9S.js +0 -1
- package/dist/gateway/static/root/assets/runtime-tools-settings-panel-Bqnp3tyt.js +0 -1
- package/dist/gateway/static/root/assets/scenes-page-D50g4GM2.js +0 -2
- package/dist/gateway/static/root/assets/schema-form-h_RCNfiO.js +0 -1
- package/dist/gateway/static/root/assets/search-DA7gz22f.js +0 -1
- package/dist/gateway/static/root/assets/secret-input-BxWHx6J6.js +0 -1
- package/dist/gateway/static/root/assets/send-session-input-DypbVTT7.js +0 -1
- package/dist/gateway/static/root/assets/session-manager-C_OiKblh.js +0 -16
- package/dist/gateway/static/root/assets/sessions-page-BsqDIbIr.js +0 -1
- package/dist/gateway/static/root/assets/settings-2-D-csvaET.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-D3zJAW4p.js +0 -1
- package/dist/gateway/static/root/assets/settings-form-draft-Dy10ldo8.js +0 -1
- package/dist/gateway/static/root/assets/settings-form-section-num14vSv.js +0 -1
- package/dist/gateway/static/root/assets/settings-shell-dialog-layer-BU3UuiJr.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-jjSYJpDd.js +0 -1
- package/dist/gateway/static/root/assets/share-link-dialog-BGicglAS.js +0 -1
- package/dist/gateway/static/root/assets/share-preview-page-BORe9rLB.js +0 -2
- package/dist/gateway/static/root/assets/shares-api-Dbx3z6-1.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-C13FgfWk.js +0 -1
- package/dist/gateway/static/root/assets/skeleton-BI5TyibZ.js +0 -1
- package/dist/gateway/static/root/assets/skill-api-Cq6O1DZK.js +0 -1
- package/dist/gateway/static/root/assets/skill-api-utils-C7V4JVXM.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-Cq7QDjMA.js +0 -1
- package/dist/gateway/static/root/assets/skill-wire-pattern-BPpeIcCi.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-BM1ShEjx.js +0 -2
- package/dist/gateway/static/root/assets/style-TIDOdKy0.js +0 -7
- package/dist/gateway/static/root/assets/system-settings-panel-BNCGFO1e.js +0 -1
- package/dist/gateway/static/root/assets/tab-completion-input-D64VNmiA.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-4VG82wcF.js +0 -2
- package/dist/gateway/static/root/assets/theme-store-Db7hDESt.js +0 -1
- package/dist/gateway/static/root/assets/tracing-settings-page-C6p2Mu92.js +0 -1
- package/dist/gateway/static/root/assets/tunnel-api-Dw15EJp0.js +0 -1
- package/dist/gateway/static/root/assets/usage-page-DDrIqgGe.js +0 -1
- package/dist/gateway/static/root/assets/use-async-resource-GrnWNwMZ.js +0 -1
- package/dist/gateway/static/root/assets/use-autosave-DDjIdW4U.js +0 -1
- package/dist/gateway/static/root/assets/use-composer-attachments-DNl7O3Vb.js +0 -2
- package/dist/gateway/static/root/assets/use-file-preview-expanded-DMHehhwG.js +0 -2
- package/dist/gateway/static/root/assets/user-model-page-CaS9dOIr.js +0 -2
- package/dist/gateway/static/root/assets/voice-api-key-field-ByAxHE4P.js +0 -1
- package/dist/gateway/static/root/assets/voice-transcribe-api-CVaU83Jc.js +0 -1
- package/dist/gateway/static/root/assets/work-discovery-overlay-BvVvPA1T.js +0 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-BcFm9QcC.js +0 -3
- package/dist/gateway/static/root/assets/workflows-page-DMec_XZB.js +0 -6
- package/dist/gateway/static/root/assets/workspace-api-BpfKsrtP.js +0 -2
- package/dist/gateway/static/root/assets/xopc-cloud-account-card-CU5lzzE9.js +0 -1
- package/dist/packages/gateway-contract/src/project-monitoring.js +0 -36
- package/dist/packages/gateway-contract/src/scenes.js +0 -200
- package/dist/src/agent/bootstrap/project-agents-context.d.ts +0 -2
- package/dist/src/agent/bootstrap/project-agents-context.js +0 -30
- package/dist/src/gateway/hono/routes/scenes.d.ts +0 -3
- package/dist/src/gateway/hono/routes/scenes.js +0 -271
- package/dist/src/gateway/scenes/browserNotifications.d.ts +0 -4
- package/dist/src/gateway/scenes/browserNotifications.js +0 -54
- package/dist/src/gateway/scenes/host.d.ts +0 -34
- package/dist/src/gateway/scenes/host.js +0 -154
- package/dist/src/gateway/scenes/mailContext.d.ts +0 -32
- package/dist/src/gateway/scenes/mailContext.js +0 -235
- package/dist/src/gateway/scenes/slackThreadSource.d.ts +0 -41
- package/dist/src/gateway/scenes/slackThreadSource.js +0 -168
- package/dist/src/notifications/browser-endpoint.d.ts +0 -2
- package/dist/src/notifications/browser-endpoint.js +0 -13
- package/dist/src/notifications/browserSubscriptions.d.ts +0 -20
- package/dist/src/notifications/browserSubscriptions.js +0 -59
- package/dist/src/notifications/browserTransport.d.ts +0 -9
- package/dist/src/notifications/browserTransport.js +0 -64
- package/dist/src/notifications/dispatch.d.ts +0 -46
- package/dist/src/notifications/dispatch.js +0 -109
- package/dist/src/notifications/domain-delivery.d.ts +0 -21
- package/dist/src/notifications/domain-delivery.js +0 -1
- package/dist/src/notifications/quietHours.d.ts +0 -6
- package/dist/src/notifications/quietHours.js +0 -23
- package/dist/src/notifications/resultOutbox.d.ts +0 -23
- package/dist/src/notifications/resultOutbox.js +0 -49
- package/dist/src/scenes/activationAdapter.d.ts +0 -19
- package/dist/src/scenes/activationAdapter.js +0 -1
- package/dist/src/scenes/agentExecutor.d.ts +0 -9
- package/dist/src/scenes/agentExecutor.js +0 -61
- package/dist/src/scenes/capabilities/read.d.ts +0 -3
- package/dist/src/scenes/capabilities/read.js +0 -187
- package/dist/src/scenes/capabilities/write.d.ts +0 -3
- package/dist/src/scenes/capabilities/write.js +0 -151
- package/dist/src/scenes/contracts.d.ts +0 -9
- package/dist/src/scenes/contracts.js +0 -61
- package/dist/src/scenes/execution.d.ts +0 -62
- package/dist/src/scenes/execution.js +0 -169
- package/dist/src/scenes/httpServices.d.ts +0 -39
- package/dist/src/scenes/httpServices.js +0 -1
- package/dist/src/scenes/inbox.d.ts +0 -17
- package/dist/src/scenes/inbox.js +0 -68
- package/dist/src/scenes/mailContext.d.ts +0 -24
- package/dist/src/scenes/mailContext.js +0 -115
- package/dist/src/scenes/mailObservations.d.ts +0 -20
- package/dist/src/scenes/mailObservations.js +0 -107
- package/dist/src/scenes/maintenance.d.ts +0 -3
- package/dist/src/scenes/maintenance.js +0 -20
- package/dist/src/scenes/metrics.d.ts +0 -31
- package/dist/src/scenes/metrics.js +0 -89
- package/dist/src/scenes/model.d.ts +0 -3
- package/dist/src/scenes/model.js +0 -10
- package/dist/src/scenes/notificationEligibility.d.ts +0 -17
- package/dist/src/scenes/notificationEligibility.js +0 -72
- package/dist/src/scenes/notificationPublication.d.ts +0 -7
- package/dist/src/scenes/notificationPublication.js +0 -43
- package/dist/src/scenes/preferences.d.ts +0 -19
- package/dist/src/scenes/preferences.js +0 -86
- package/dist/src/scenes/readiness.d.ts +0 -7
- package/dist/src/scenes/readiness.js +0 -20
- package/dist/src/scenes/registry.d.ts +0 -11
- package/dist/src/scenes/registry.js +0 -28
- package/dist/src/scenes/repository.d.ts +0 -178
- package/dist/src/scenes/repository.js +0 -782
- package/dist/src/scenes/resultNotifications.d.ts +0 -17
- package/dist/src/scenes/resultNotifications.js +0 -204
- package/dist/src/scenes/runtime.d.ts +0 -25
- package/dist/src/scenes/runtime.js +0 -101
- package/dist/src/scenes/schedule.d.ts +0 -2
- package/dist/src/scenes/schedule.js +0 -33
- package/dist/src/scenes/service.d.ts +0 -36
- package/dist/src/scenes/service.js +0 -122
- package/dist/src/scenes/taskFollowUp/agentExecutor.d.ts +0 -36
- package/dist/src/scenes/taskFollowUp/agentExecutor.js +0 -149
- package/dist/src/scenes/taskFollowUp/branchInventory.d.ts +0 -38
- package/dist/src/scenes/taskFollowUp/branchInventory.js +0 -70
- package/dist/src/scenes/taskFollowUp/contracts.d.ts +0 -121
- package/dist/src/scenes/taskFollowUp/contracts.js +0 -119
- package/dist/src/scenes/taskFollowUp/resources.d.ts +0 -19
- package/dist/src/scenes/taskFollowUp/resources.js +0 -97
- package/dist/src/scenes/taskFollowUp/service.d.ts +0 -848
- package/dist/src/scenes/taskFollowUp/service.js +0 -770
- package/dist/src/scenes/taskFollowUp/workspaceFingerprint.d.ts +0 -2
- package/dist/src/scenes/taskFollowUp/workspaceFingerprint.js +0 -46
- package/dist/src/scenes/templates.d.ts +0 -64
- package/dist/src/scenes/templates.js +0 -76
- package/dist/src/scenes/userNotes.d.ts +0 -13
- package/dist/src/scenes/userNotes.js +0 -40
- package/dist/src/storage/sqlite/migrations/166_remove_proactive_previews.sql +0 -1
- package/dist/src/storage/sqlite/migrations/167_discussion_recording_chunks.sql +0 -7
- package/dist/src/storage/sqlite/migrations/168_discussion_evidence.sql +0 -16
- package/dist/src/storage/sqlite/migrations/169_discussion_action_tasks.sql +0 -8
- package/dist/src/storage/sqlite/migrations/170_discussion_edits.sql +0 -8
- package/dist/src/storage/sqlite/migrations/171_discussion_recording_jobs.sql +0 -14
- package/dist/src/storage/sqlite/migrations/172_project_understanding.sql +0 -3
- package/dist/src/storage/sqlite/migrations/173_mobile_discussion_source.sql +0 -5
- package/dist/src/storage/sqlite/migrations/174_capability_imports.sql +0 -11
- package/dist/src/storage/sqlite/migrations/175_import_selections.sql +0 -8
- package/dist/src/storage/sqlite/migrations/176_proactive_quality.sql +0 -5
- package/dist/src/storage/sqlite/migrations/177_proactive_check_controls.sql +0 -25
- package/dist/src/storage/sqlite/migrations/178_conversation_uuid.sql +0 -2
- package/dist/src/storage/sqlite/migrations/179_harmonyos_devices.sql +0 -41
- package/dist/src/storage/sqlite/migrations/180_execution_environment_ownership.sql +0 -7
- package/dist/src/storage/sqlite/migrations/181_knowledge_item_status_events.sql +0 -12
- package/dist/src/storage/sqlite/migrations/182_connector_account_policies.sql +0 -92
- package/dist/src/storage/sqlite/migrations/183_connector_backend_consistency.sql +0 -20
- package/dist/src/storage/sqlite/migrations/184_memory_suppressions.sql +0 -12
- package/dist/src/storage/sqlite/migrations/185_understanding_refresh_batches.sql +0 -6
- package/dist/src/storage/sqlite/migrations/186_sidebar_layout.sql +0 -16
- package/dist/src/storage/sqlite/migrations/187_cli_connectors.sql +0 -34
- package/dist/src/storage/sqlite/migrations/188_scene_storage.sql +0 -2
- package/dist/src/storage/sqlite/migrations/189_scene_source_health.sql +0 -8
- package/dist/src/storage/sqlite/migrations/190_scene_development.sql +0 -37
- package/dist/src/storage/sqlite/migrations/191_scene_task_follow_up.sql +0 -27
- package/dist/src/storage/sqlite/migrations/192_capability_operations.sql +0 -20
- package/dist/src/storage/sqlite/migrations/193_note_file_cleanup.sql +0 -8
- package/dist/src/storage/sqlite/migrations/194_capability_external_outcomes.sql +0 -11
- package/dist/src/storage/sqlite/migrations/195_automation_deleted_revisions.sql +0 -4
- package/dist/src/storage/sqlite/migrations/196_automation_run_requests.sql +0 -23
- package/dist/src/storage/sqlite/migrations/197_note_deletion_cleanup.sql +0 -8
- package/dist/src/storage/sqlite/migrations/198_project_workspace_creation.sql +0 -7
- package/dist/src/storage/sqlite/migrations/199_scene_resource_events.sql +0 -488
- package/dist/src/storage/sqlite/migrations/200_connected_work_threads.sql +0 -92
- package/dist/src/storage/sqlite/migrations/201_connector_extraction_audit.sql +0 -127
- package/dist/src/storage/sqlite/migrations/202_chat_previews.sql +0 -26
- package/dist/src/storage/sqlite/migrations/203_remove_retired_proactive_contracts.sql +0 -70
- package/dist/src/storage/sqlite/migrations/204_home_intelligence.sql +0 -78
- package/dist/src/storage/sqlite/migrations/205_agent_catalog.sql +0 -66
- package/dist/src/storage/sqlite/migrations/206_home_advice_strategy_version.sql +0 -3
- package/dist/src/storage/sqlite/migrations/207_user_model_policy_contract.sql +0 -121
- package/dist/src/storage/sqlite/migrations/208_automation_management.sql +0 -2
- package/dist/src/storage/sqlite/migrations/209_automation_event_hub.sql +0 -48
- package/dist/src/storage/sqlite/migrations/210_remove_legacy_automation_timeout.sql +0 -14
- package/dist/src/storage/sqlite/migrations/211_automation_result_deliveries.sql +0 -16
- package/dist/src/storage/sqlite/migrations/212_automation_delivery_policy.sql +0 -30
- package/dist/src/storage/sqlite/migrations/213_automation_reliability_contract.sql +0 -188
- package/dist/src/storage/sqlite/migrations/214_ai_usage_ledger.sql +0 -41
- package/dist/src/storage/sqlite/migrations/215_scene_execution_adapters.sql +0 -6
- package/dist/src/storage/sqlite/migrations/216_remove_scene_model_usage.sql +0 -1
- package/dist/src/storage/sqlite/migrations/217_remove_legacy_memory_tables.sql +0 -4
- package/dist/src/storage/sqlite/migrations/conversation-key-decoder.d.ts +0 -8
- package/dist/src/storage/sqlite/migrations/conversation-key-decoder.js +0 -87
- package/dist/src/storage/sqlite/migrations/conversation-uuid.d.ts +0 -8
- package/dist/src/storage/sqlite/migrations/conversation-uuid.js +0 -366
- package/dist/src/storage/sqlite/migrations/scene-reset.d.ts +0 -5
- package/dist/src/storage/sqlite/migrations/scene-reset.js +0 -40
- package/dist/src/storage/sqlite/scenes-schema.d.ts +0 -8
- package/dist/src/storage/sqlite/scenes-schema.js +0 -60
- package/dist/src/storage/sqlite/schemas/notifications.sql +0 -65
- package/dist/src/storage/sqlite/schemas/scenes.sql +0 -205
- package/skills/engineering/design-recurring-work/SKILL.md +0 -75
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import type { BrowserSubscriptionService } from '../notifications/browserSubscriptions.js';
|
|
2
|
-
import type { ScenePrincipal } from './contracts.js';
|
|
3
|
-
import type { SceneInboxService } from './inbox.js';
|
|
4
|
-
import type { SceneRepository } from './repository.js';
|
|
5
|
-
import type { SceneApplicationService } from './service.js';
|
|
6
|
-
import type { SceneMailContextProvider } from './mailContext.js';
|
|
7
|
-
import type { ScenePreferenceService } from './preferences.js';
|
|
8
|
-
import type { SceneMetrics } from './metrics.js';
|
|
9
|
-
import type { SceneActivationAdapter } from './activationAdapter.js';
|
|
10
|
-
import type { SceneCapabilityRegistry } from './registry.js';
|
|
11
|
-
import type { SceneSourceRegistry } from './taskFollowUp/contracts.js';
|
|
12
|
-
/** An explicitly installed scene domain; never resolves to the old runtime. */
|
|
13
|
-
export interface SceneHttpServices {
|
|
14
|
-
activationAdapters: SceneCapabilityRegistry<SceneActivationAdapter>;
|
|
15
|
-
sourceProviders: SceneSourceRegistry;
|
|
16
|
-
repository: SceneRepository;
|
|
17
|
-
application: SceneApplicationService;
|
|
18
|
-
inbox: SceneInboxService;
|
|
19
|
-
mail: SceneMailContextProvider;
|
|
20
|
-
mailDiscovery?: {
|
|
21
|
-
listAccounts(principal: ScenePrincipal): Array<{
|
|
22
|
-
id: string;
|
|
23
|
-
label: string;
|
|
24
|
-
}>;
|
|
25
|
-
searchSources(principal: ScenePrincipal, value: unknown, signal: AbortSignal): Promise<Array<{
|
|
26
|
-
id: string;
|
|
27
|
-
accountId: string;
|
|
28
|
-
subject: string;
|
|
29
|
-
sender: string;
|
|
30
|
-
}>>;
|
|
31
|
-
};
|
|
32
|
-
metrics: SceneMetrics;
|
|
33
|
-
preferences: ScenePreferenceService;
|
|
34
|
-
browser: BrowserSubscriptionService;
|
|
35
|
-
}
|
|
36
|
-
export interface SceneAccess {
|
|
37
|
-
principal: ScenePrincipal;
|
|
38
|
-
services: SceneHttpServices;
|
|
39
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { DatabaseSync } from 'node:sqlite';
|
|
2
|
-
import type { ScenePrincipal } from './contracts.js';
|
|
3
|
-
/** Feedback records a user's judgment, never an inferred successful action. */
|
|
4
|
-
export declare class SceneInboxService {
|
|
5
|
-
private readonly db;
|
|
6
|
-
private readonly clock;
|
|
7
|
-
constructor(db: DatabaseSync, clock?: () => number);
|
|
8
|
-
get database(): DatabaseSync;
|
|
9
|
-
setRead(principal: ScenePrincipal, id: string, read: boolean): void;
|
|
10
|
-
feedback(principal: ScenePrincipal, id: string, value: unknown): number;
|
|
11
|
-
getFeedback(principal: ScenePrincipal, id: string): {
|
|
12
|
-
rating: string;
|
|
13
|
-
note: string;
|
|
14
|
-
revision: number;
|
|
15
|
-
} | null;
|
|
16
|
-
private assertVisible;
|
|
17
|
-
}
|
package/dist/src/scenes/inbox.js
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { SceneFeedbackSchema } from "../../packages/gateway-contract/src/scenes.js";
|
|
2
|
-
import { init_src } from "../../packages/gateway-contract/src/index.js";
|
|
3
|
-
import { SceneConflictError, SceneNotFoundError } from "./repository.js";
|
|
4
|
-
import { randomUUID } from "node:crypto";
|
|
5
|
-
//#region src/scenes/inbox.ts
|
|
6
|
-
init_src();
|
|
7
|
-
const actionable = `withdrawn_at IS NULL AND (expires_at IS NULL OR expires_at > ?)
|
|
8
|
-
AND (status IN ('unread', 'read') OR (status = 'snoozed' AND snoozed_until <= ?))`;
|
|
9
|
-
/** Feedback records a user's judgment, never an inferred successful action. */
|
|
10
|
-
var SceneInboxService = class {
|
|
11
|
-
constructor(db, clock = Date.now) {
|
|
12
|
-
this.db = db;
|
|
13
|
-
this.clock = clock;
|
|
14
|
-
}
|
|
15
|
-
get database() {
|
|
16
|
-
return this.db;
|
|
17
|
-
}
|
|
18
|
-
setRead(principal, id, read) {
|
|
19
|
-
if (typeof read !== "boolean") throw new Error("Read state must be a boolean");
|
|
20
|
-
this.assertVisible(principal, id);
|
|
21
|
-
const now = this.clock();
|
|
22
|
-
if (this.db.prepare(`UPDATE scene_presentations SET status = ?, revision = revision + 1, updated_at = ? WHERE id = ? AND ${actionable}`).run(read ? "read" : "unread", now, id, now, now).changes !== 1) throw new SceneConflictError("Scene presentation was withdrawn");
|
|
23
|
-
}
|
|
24
|
-
feedback(principal, id, value) {
|
|
25
|
-
const input = SceneFeedbackSchema.parse(value);
|
|
26
|
-
this.assertVisible(principal, id);
|
|
27
|
-
this.db.exec("SAVEPOINT scene_feedback_write");
|
|
28
|
-
try {
|
|
29
|
-
const now = this.clock();
|
|
30
|
-
const note = input.note ?? String(this.db.prepare("SELECT note FROM scene_feedback WHERE presentation_id = ?").get(id)?.note ?? "");
|
|
31
|
-
if ((input.expectedRevision === 0 ? this.db.prepare(`INSERT INTO scene_feedback (presentation_id, rating, note, revision, updated_at)
|
|
32
|
-
SELECT ?, ?, ?, 1, ? WHERE EXISTS (SELECT 1 FROM scene_presentations WHERE id = ? AND ${actionable})
|
|
33
|
-
ON CONFLICT(presentation_id) DO NOTHING`).run(id, input.rating, note, now, id, now, now) : this.db.prepare(`UPDATE scene_feedback SET rating = ?, note = ?, revision = revision + 1, updated_at = ?
|
|
34
|
-
WHERE presentation_id = ? AND revision = ?
|
|
35
|
-
AND EXISTS (SELECT 1 FROM scene_presentations WHERE id = ? AND ${actionable})`).run(input.rating, note, now, id, input.expectedRevision, id, now, now)).changes !== 1) throw new SceneConflictError("Scene feedback changed");
|
|
36
|
-
this.db.prepare(`INSERT INTO scene_feedback_history(id, presentation_id, rating, note, revision, recorded_at)
|
|
37
|
-
VALUES (?, ?, ?, ?, ?, ?)`).run(randomUUID(), id, input.rating, note, input.expectedRevision + 1, now);
|
|
38
|
-
this.db.exec("RELEASE scene_feedback_write");
|
|
39
|
-
return input.expectedRevision + 1;
|
|
40
|
-
} catch (error) {
|
|
41
|
-
this.db.exec("ROLLBACK TO scene_feedback_write");
|
|
42
|
-
this.db.exec("RELEASE scene_feedback_write");
|
|
43
|
-
throw error;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
getFeedback(principal, id) {
|
|
47
|
-
this.assertVisible(principal, id);
|
|
48
|
-
const row = this.db.prepare("SELECT rating, note, revision FROM scene_feedback WHERE presentation_id = ?").get(id);
|
|
49
|
-
return row ? {
|
|
50
|
-
rating: String(row.rating),
|
|
51
|
-
note: String(row.note),
|
|
52
|
-
revision: Number(row.revision)
|
|
53
|
-
} : null;
|
|
54
|
-
}
|
|
55
|
-
assertVisible(principal, id) {
|
|
56
|
-
if (!principal.ownerId?.trim() || !principal.workspaceId?.trim()) throw new Error("Scene principal is required");
|
|
57
|
-
const row = this.db.prepare(`SELECT p.status, p.withdrawn_at, p.expires_at, p.snoozed_until FROM scene_presentations p
|
|
58
|
-
JOIN scene_outcomes o ON o.id = p.outcome_id JOIN scene_runs r ON r.id = o.run_id
|
|
59
|
-
JOIN scene_activations a ON a.id = r.activation_id
|
|
60
|
-
WHERE p.id = ? AND a.owner_id = ? AND a.workspace_id = ?`).get(id, principal.ownerId, principal.workspaceId);
|
|
61
|
-
if (!row) throw new SceneNotFoundError("Scene presentation not found");
|
|
62
|
-
const now = this.clock();
|
|
63
|
-
if (row.status === "withdrawn" || row.withdrawn_at !== null) throw new SceneConflictError("Scene presentation was withdrawn");
|
|
64
|
-
if (row.status === "resolved" || row.expires_at !== null && Number(row.expires_at) <= now || row.status === "snoozed" && (row.snoozed_until === null || Number(row.snoozed_until) > now)) throw new SceneConflictError("Scene presentation is not currently actionable");
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
//#endregion
|
|
68
|
-
export { SceneInboxService };
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { DatabaseSync } from 'node:sqlite';
|
|
2
|
-
import type { SceneContextProvider, SceneEvidence } from './execution.js';
|
|
3
|
-
import type { SceneActivation, ScenePrincipal } from './contracts.js';
|
|
4
|
-
/** Reads a bounded, account-scoped thread from synchronized connector knowledge. */
|
|
5
|
-
export declare class SceneMailContextProvider implements SceneContextProvider {
|
|
6
|
-
private readonly db;
|
|
7
|
-
private readonly clock;
|
|
8
|
-
readonly id = "mail";
|
|
9
|
-
readonly tracksHealth = true;
|
|
10
|
-
readonly requiresAccountIdentity = true;
|
|
11
|
-
constructor(db: DatabaseSync, clock?: () => number);
|
|
12
|
-
setupIssues(activation: SceneActivation): string[];
|
|
13
|
-
authorization(activation: SceneActivation): string[] | null;
|
|
14
|
-
/** Resolve current account grants for the exact delegated source, including reconnects and revocation. */
|
|
15
|
-
authorizedAccounts(activation: SceneActivation): string[];
|
|
16
|
-
/** Picker metadata only; choosing an item still requires explicit activation consent. */
|
|
17
|
-
listSources(principal: ScenePrincipal, limit?: number, afterId?: string): {
|
|
18
|
-
id: string;
|
|
19
|
-
accountId: string;
|
|
20
|
-
subject: string;
|
|
21
|
-
sender: string;
|
|
22
|
-
}[];
|
|
23
|
-
read(input: Parameters<SceneContextProvider['read']>[0]): Promise<SceneEvidence[]>;
|
|
24
|
-
}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { SceneSourceNotReady } from "./readiness.js";
|
|
2
|
-
//#region src/scenes/mailContext.ts
|
|
3
|
-
const accountJoin = `JOIN connector_accounts a ON a.id = c.account_id AND a.current_connection_id = c.id
|
|
4
|
-
AND a.principal_id = c.principal_id AND a.connector_id = c.connector_id
|
|
5
|
-
JOIN connector_installations installation ON installation.id = c.installation_id
|
|
6
|
-
AND installation.principal_id = c.principal_id AND installation.connector_id = c.connector_id`;
|
|
7
|
-
const accountPolicy = `a.enabled = 1 AND installation.enabled = 1 AND c.status = 'active'
|
|
8
|
-
AND json_array_length(installation.allowed_agent_ids_json) = 0 AND a.allowed_agent_ids_json IS NULL
|
|
9
|
-
AND (installation.selected_account_ids_json = 'null' OR EXISTS
|
|
10
|
-
(SELECT 1 FROM json_each(installation.selected_account_ids_json) WHERE value = a.id))`;
|
|
11
|
-
/** Reads a bounded, account-scoped thread from synchronized connector knowledge. */
|
|
12
|
-
var SceneMailContextProvider = class {
|
|
13
|
-
id = "mail";
|
|
14
|
-
tracksHealth = true;
|
|
15
|
-
requiresAccountIdentity = true;
|
|
16
|
-
constructor(db, clock = Date.now) {
|
|
17
|
-
this.db = db;
|
|
18
|
-
this.clock = clock;
|
|
19
|
-
}
|
|
20
|
-
setupIssues(activation) {
|
|
21
|
-
return activation.scope.kind === "objects" && activation.scope.ids.length === 1 && activation.permissions.accountIds.length === 1 ? [] : ["one_mail_thread_and_account"];
|
|
22
|
-
}
|
|
23
|
-
authorization(activation) {
|
|
24
|
-
const accounts = this.authorizedAccounts(activation);
|
|
25
|
-
return accounts.length ? accounts : null;
|
|
26
|
-
}
|
|
27
|
-
/** Resolve current account grants for the exact delegated source, including reconnects and revocation. */
|
|
28
|
-
authorizedAccounts(activation) {
|
|
29
|
-
if (activation.scope.kind !== "objects" || activation.scope.ids.length !== 1) return [];
|
|
30
|
-
const row = this.db.prepare(`SELECT a.id FROM knowledge_source_items k
|
|
31
|
-
JOIN connector_connections c ON c.id = json_extract(CASE WHEN json_valid(k.metadata_json) THEN k.metadata_json ELSE '{}' END, '$.connectionId')
|
|
32
|
-
${accountJoin}
|
|
33
|
-
WHERE k.item_id = ? AND k.item_type = 'email' AND k.deleted_at IS NULL
|
|
34
|
-
AND k.sensitivity NOT IN ('secret', 'regulated')
|
|
35
|
-
AND json_valid(k.metadata_json) AND json_valid(k.normalized_text)
|
|
36
|
-
AND json_type(k.normalized_text, '$.threadId') = 'text'
|
|
37
|
-
AND length(trim(json_extract(k.normalized_text, '$.threadId'))) > 0
|
|
38
|
-
AND NOT EXISTS (SELECT 1 FROM json_each(k.normalized_text, '$.labels') WHERE value IN ('DRAFT', 'TRASH', 'SPAM'))
|
|
39
|
-
AND json_extract(k.metadata_json, '$.workspaceId') = ? AND c.principal_id = ?
|
|
40
|
-
AND ${accountPolicy}
|
|
41
|
-
AND (c.expires_at IS NULL OR julianday(c.expires_at) > julianday(?, 'unixepoch'))`).get(activation.scope.ids[0], activation.workspaceId, activation.ownerId, this.clock() / 1e3);
|
|
42
|
-
return row && activation.permissions.accountIds.includes(String(row.id)) ? [String(row.id)] : [];
|
|
43
|
-
}
|
|
44
|
-
/** Picker metadata only; choosing an item still requires explicit activation consent. */
|
|
45
|
-
listSources(principal, limit = 50, afterId = "") {
|
|
46
|
-
if (!principal.ownerId.trim() || !principal.workspaceId.trim()) throw new Error("Scene principal is required");
|
|
47
|
-
if (!Number.isInteger(limit) || limit < 1 || limit > 100) throw new Error("Invalid source list limit");
|
|
48
|
-
return this.db.prepare(`SELECT k.item_id AS id, a.id AS accountId,
|
|
49
|
-
substr(json_extract(k.normalized_text, '$.subject'), 1, 300) AS subject,
|
|
50
|
-
substr(json_extract(k.normalized_text, '$.sender'), 1, 300) AS sender
|
|
51
|
-
FROM knowledge_source_items k
|
|
52
|
-
JOIN connector_connections c ON c.id = json_extract(CASE WHEN json_valid(k.metadata_json) THEN k.metadata_json ELSE '{}' END, '$.connectionId')
|
|
53
|
-
${accountJoin}
|
|
54
|
-
WHERE k.item_type = 'email' AND k.deleted_at IS NULL AND k.sensitivity NOT IN ('secret', 'regulated')
|
|
55
|
-
AND json_valid(k.normalized_text) AND json_valid(k.metadata_json)
|
|
56
|
-
AND json_extract(k.metadata_json, '$.workspaceId') = ? AND c.principal_id = ?
|
|
57
|
-
AND ${accountPolicy}
|
|
58
|
-
AND (c.expires_at IS NULL OR julianday(c.expires_at) > julianday(?, 'unixepoch'))
|
|
59
|
-
AND json_type(k.normalized_text, '$.threadId') = 'text' AND length(trim(json_extract(k.normalized_text, '$.threadId'))) > 0
|
|
60
|
-
AND NOT EXISTS (SELECT 1 FROM json_each(k.normalized_text, '$.labels') WHERE value IN ('DRAFT', 'TRASH', 'SPAM'))
|
|
61
|
-
AND k.item_id > ? ORDER BY k.item_id LIMIT ?`).all(principal.workspaceId, principal.ownerId, this.clock() / 1e3, afterId, limit).map((row) => ({
|
|
62
|
-
id: String(row.id),
|
|
63
|
-
accountId: String(row.accountId),
|
|
64
|
-
subject: typeof row.subject === "string" ? row.subject : "",
|
|
65
|
-
sender: typeof row.sender === "string" ? row.sender : ""
|
|
66
|
-
}));
|
|
67
|
-
}
|
|
68
|
-
async read(input) {
|
|
69
|
-
input.signal.throwIfAborted();
|
|
70
|
-
if (!input.permissions.contextProviders.includes(this.id)) throw new Error("Mail context permission is required");
|
|
71
|
-
const origin = this.db.prepare(`SELECT * FROM knowledge_source_items WHERE item_id = ? AND item_type = 'email' AND deleted_at IS NULL`).get(input.subjectId);
|
|
72
|
-
if (!origin) throw new Error("Mail source unavailable");
|
|
73
|
-
const metadata = JSON.parse(origin.metadata_json);
|
|
74
|
-
if (metadata.workspaceId !== input.activation.workspaceId || typeof metadata.connectionId !== "string") throw new Error("Mail source workspace mismatch");
|
|
75
|
-
const connection = this.db.prepare(`SELECT c.account_id, c.expires_at FROM connector_connections c
|
|
76
|
-
${accountJoin} WHERE c.id = ? AND c.principal_id = ? AND ${accountPolicy}`).get(metadata.connectionId, input.activation.ownerId);
|
|
77
|
-
if (!connection || !input.permissions.accountIds.includes(connection.account_id)) throw new Error("Mail account permission is required");
|
|
78
|
-
if (connection.expires_at !== null && !(Date.parse(connection.expires_at) > this.clock())) throw new Error("Mail connection is expired");
|
|
79
|
-
const fields = JSON.parse(origin.normalized_text);
|
|
80
|
-
if (typeof fields.threadId !== "string" || !fields.threadId.trim()) throw new Error("Mail thread identity unavailable");
|
|
81
|
-
if (Array.isArray(fields.labels) && fields.labels.some((label) => [
|
|
82
|
-
"DRAFT",
|
|
83
|
-
"TRASH",
|
|
84
|
-
"SPAM"
|
|
85
|
-
].includes(label))) throw new Error("Mail origin is not an active message");
|
|
86
|
-
const sync = this.db.prepare(`SELECT status, started_at, finished_at FROM knowledge_sync_runs
|
|
87
|
-
WHERE source_instance_id = ? AND collection_scope = ? ORDER BY started_at DESC, rowid DESC LIMIT 1`).get(origin.source_instance_id, origin.collection_scope);
|
|
88
|
-
const now = this.clock();
|
|
89
|
-
if (!sync || sync.status !== "succeeded" || sync.finished_at === null || sync.finished_at < sync.started_at || sync.started_at > now || sync.finished_at > now || sync.started_at + 30 * 6e4 <= now || input.notBefore !== void 0 && sync.started_at < input.notBefore) throw new SceneSourceNotReady();
|
|
90
|
-
const messages = this.db.prepare(`SELECT * FROM knowledge_source_items
|
|
91
|
-
WHERE source_instance_id = ? AND collection_scope = ? AND item_type = 'email' AND deleted_at IS NULL
|
|
92
|
-
AND json_valid(normalized_text) AND json_valid(metadata_json)
|
|
93
|
-
AND json_extract(normalized_text, '$.threadId') = ?
|
|
94
|
-
AND json_extract(metadata_json, '$.connectionId') = ?
|
|
95
|
-
AND json_extract(metadata_json, '$.workspaceId') = ?
|
|
96
|
-
AND NOT EXISTS (SELECT 1 FROM json_each(normalized_text, '$.labels') WHERE value IN ('DRAFT', 'TRASH', 'SPAM'))
|
|
97
|
-
ORDER BY occurred_at, item_id LIMIT 31`).all(origin.source_instance_id, origin.collection_scope, fields.threadId, metadata.connectionId, input.activation.workspaceId);
|
|
98
|
-
if (!messages.length || messages.length > 30) throw new Error("Mail thread cannot be read completely within its budget");
|
|
99
|
-
if (messages.some((item) => ["secret", "regulated"].includes(item.sensitivity))) throw new Error("Mail thread contains restricted evidence");
|
|
100
|
-
input.signal.throwIfAborted();
|
|
101
|
-
return messages.map((item) => ({
|
|
102
|
-
id: item.item_id,
|
|
103
|
-
subjectId: input.subjectId,
|
|
104
|
-
ownerId: input.activation.ownerId,
|
|
105
|
-
workspaceId: input.activation.workspaceId,
|
|
106
|
-
accountId: connection.account_id,
|
|
107
|
-
revision: item.content_hash,
|
|
108
|
-
freshUntil: sync.started_at + 30 * 6e4,
|
|
109
|
-
...item.occurred_at !== null ? { occurredAt: item.occurred_at } : {},
|
|
110
|
-
content: item.normalized_text
|
|
111
|
-
}));
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
//#endregion
|
|
115
|
-
export { SceneMailContextProvider };
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { type SceneActivation, type ScenePermission } from './contracts.js';
|
|
2
|
-
import type { SceneContextProvider } from './execution.js';
|
|
3
|
-
import { SceneRepository } from './repository.js';
|
|
4
|
-
/** Observes only explicitly delegated threads; the host owns scan scheduling. */
|
|
5
|
-
export declare class SceneMailObservationService {
|
|
6
|
-
private readonly repository;
|
|
7
|
-
private readonly provider;
|
|
8
|
-
private readonly authorize;
|
|
9
|
-
private readonly clock;
|
|
10
|
-
private readonly intervalMs;
|
|
11
|
-
private readonly itemTimeoutMs;
|
|
12
|
-
private nextScanAt;
|
|
13
|
-
private readonly failures;
|
|
14
|
-
constructor(repository: SceneRepository, provider: SceneContextProvider, authorize: (activation: SceneActivation) => Promise<ScenePermission>, clock?: () => number, intervalMs?: number, itemTimeoutMs?: number);
|
|
15
|
-
scan(signal: AbortSignal, afterId?: string, progress?: (id: string) => void): Promise<{
|
|
16
|
-
changed: number;
|
|
17
|
-
unavailable: number;
|
|
18
|
-
nextCursor: string | null;
|
|
19
|
-
}>;
|
|
20
|
-
}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { intersectPermissions, sceneContentHash } from "./contracts.js";
|
|
2
|
-
import { sceneSourceFailureReason } from "./readiness.js";
|
|
3
|
-
//#region src/scenes/mailObservations.ts
|
|
4
|
-
/** Observes only explicitly delegated threads; the host owns scan scheduling. */
|
|
5
|
-
var SceneMailObservationService = class {
|
|
6
|
-
nextScanAt = 0;
|
|
7
|
-
failures = /* @__PURE__ */ new Map();
|
|
8
|
-
constructor(repository, provider, authorize, clock = Date.now, intervalMs = 0, itemTimeoutMs = 5e3) {
|
|
9
|
-
this.repository = repository;
|
|
10
|
-
this.provider = provider;
|
|
11
|
-
this.authorize = authorize;
|
|
12
|
-
this.clock = clock;
|
|
13
|
-
this.intervalMs = intervalMs;
|
|
14
|
-
this.itemTimeoutMs = itemTimeoutMs;
|
|
15
|
-
if (provider.id !== "mail") throw new Error("Mail observation requires the mail context provider");
|
|
16
|
-
}
|
|
17
|
-
async scan(signal, afterId = "", progress) {
|
|
18
|
-
signal.throwIfAborted();
|
|
19
|
-
if (!afterId && this.clock() < this.nextScanAt) return {
|
|
20
|
-
changed: 0,
|
|
21
|
-
unavailable: 0,
|
|
22
|
-
nextCursor: null
|
|
23
|
-
};
|
|
24
|
-
const items = this.repository.listMailObservationItems(afterId, this.clock());
|
|
25
|
-
const started = Date.now();
|
|
26
|
-
let lastId = afterId;
|
|
27
|
-
let processed = 0;
|
|
28
|
-
let changed = 0;
|
|
29
|
-
let unavailable = 0;
|
|
30
|
-
for (const { principal, item } of items) {
|
|
31
|
-
signal.throwIfAborted();
|
|
32
|
-
if (Date.now() - started >= 2e4) break;
|
|
33
|
-
lastId = item.id;
|
|
34
|
-
processed += 1;
|
|
35
|
-
const backoff = this.failures.get(item.accountId);
|
|
36
|
-
if (this.intervalMs > 0 && backoff && backoff.until > this.clock()) {
|
|
37
|
-
progress?.(lastId);
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
const controller = new AbortController();
|
|
41
|
-
const abort = () => controller.abort(signal.reason);
|
|
42
|
-
signal.addEventListener("abort", abort, { once: true });
|
|
43
|
-
const timeout = setTimeout(() => controller.abort(/* @__PURE__ */ new Error("Mail item timed out")), this.itemTimeoutMs);
|
|
44
|
-
let rejectAbort = () => {};
|
|
45
|
-
const aborted = new Promise((_, reject) => {
|
|
46
|
-
rejectAbort = () => reject(controller.signal.reason);
|
|
47
|
-
controller.signal.addEventListener("abort", rejectAbort, { once: true });
|
|
48
|
-
});
|
|
49
|
-
let activation;
|
|
50
|
-
try {
|
|
51
|
-
activation = this.repository.getActivation(principal, item.activationId);
|
|
52
|
-
const template = this.repository.getTemplate(activation.templateKey, activation.templateVersion);
|
|
53
|
-
if (!template.contextProviders.includes("mail") || !template.triggers.some((trigger) => trigger.type === "event" && trigger.eventType === "mail.thread.changed") || activation.scope.kind !== "objects" || !activation.scope.ids.includes(item.subjectId)) throw new Error("Mail observation is outside the template or delegated scope");
|
|
54
|
-
const permissions = intersectPermissions(activation.permissions, await Promise.race([this.authorize(activation), aborted]), {
|
|
55
|
-
accountIds: [item.accountId],
|
|
56
|
-
contextProviders: ["mail"],
|
|
57
|
-
effectHandlers: []
|
|
58
|
-
});
|
|
59
|
-
signal.throwIfAborted();
|
|
60
|
-
if (!this.repository.isMailObservationCurrent(activation, item, this.clock())) throw new Error("Mail delegation changed during authorization");
|
|
61
|
-
if (!permissions.accountIds.includes(item.accountId) || !permissions.contextProviders.includes("mail")) throw new Error("Mail observation permission is required");
|
|
62
|
-
const evidence = await Promise.race([this.provider.read({
|
|
63
|
-
activation,
|
|
64
|
-
permissions,
|
|
65
|
-
subjectId: item.subjectId,
|
|
66
|
-
signal: controller.signal
|
|
67
|
-
}), aborted]);
|
|
68
|
-
signal.throwIfAborted();
|
|
69
|
-
if (!evidence.length || evidence.length > 100 || new Set(evidence.map((entry) => entry.id)).size !== evidence.length || evidence.reduce((size, entry) => size + entry.content.length, 0) > 12e4 || evidence.some((entry) => !entry.id || !entry.revision || entry.ownerId !== principal.ownerId || entry.workspaceId !== principal.workspaceId || entry.accountId !== item.accountId || entry.subjectId !== item.subjectId || !Number.isFinite(entry.freshUntil) || entry.freshUntil <= this.clock())) throw new Error("Mail observation is incomplete or unauthorized");
|
|
70
|
-
const currentPermissions = intersectPermissions(permissions, await Promise.race([this.authorize(activation), aborted]));
|
|
71
|
-
signal.throwIfAborted();
|
|
72
|
-
if (!this.repository.isMailObservationCurrent(activation, item, this.clock())) throw new Error("Mail delegation changed during observation");
|
|
73
|
-
if (sceneContentHash(currentPermissions) !== sceneContentHash(permissions)) throw new Error("Mail observation permission changed");
|
|
74
|
-
this.repository.recordSourceHealth(activation, null, this.clock());
|
|
75
|
-
this.failures.delete(item.accountId);
|
|
76
|
-
const fingerprint = sceneContentHash(evidence.map(({ freshUntil: _freshUntil, ...entry }) => entry).sort((a, b) => a.id.localeCompare(b.id)));
|
|
77
|
-
if (this.repository.observeMailWorkItem(principal, item, fingerprint, this.clock())) changed += 1;
|
|
78
|
-
} catch (error) {
|
|
79
|
-
signal.throwIfAborted();
|
|
80
|
-
unavailable += 1;
|
|
81
|
-
const retryDelay = Math.max(this.intervalMs, Math.min(3e5, 1e4 * 2 ** Math.min((backoff?.count ?? 0) + 1, 5)));
|
|
82
|
-
if (activation && this.repository.isMailObservationCurrent(activation, item, this.clock())) this.repository.recordSourceHealth(activation, sceneSourceFailureReason(error), this.clock(), this.clock() + Math.max(retryDelay, 6e4));
|
|
83
|
-
if (this.intervalMs > 0) {
|
|
84
|
-
const count = Math.min((backoff?.count ?? 0) + 1, 5);
|
|
85
|
-
this.failures.set(item.accountId, {
|
|
86
|
-
count,
|
|
87
|
-
until: this.clock() + Math.min(3e5, 1e4 * 2 ** count)
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
} finally {
|
|
91
|
-
clearTimeout(timeout);
|
|
92
|
-
signal.removeEventListener("abort", abort);
|
|
93
|
-
controller.signal.removeEventListener("abort", rejectAbort);
|
|
94
|
-
if (!signal.aborted) progress?.(lastId);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
const nextCursor = processed < items.length || items.length === 100 ? lastId : null;
|
|
98
|
-
if (nextCursor === null) this.nextScanAt = this.clock() + this.intervalMs;
|
|
99
|
-
return {
|
|
100
|
-
changed,
|
|
101
|
-
unavailable,
|
|
102
|
-
nextCursor
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
//#endregion
|
|
107
|
-
export { SceneMailObservationService };
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { init_transaction, runSqliteSavepoint } from "../storage/sqlite/transaction.js";
|
|
2
|
-
//#region src/scenes/maintenance.ts
|
|
3
|
-
init_transaction();
|
|
4
|
-
/** Keeps identity/deduplication rows; removes bounded old payloads only after their work is terminal. */
|
|
5
|
-
function maintainSceneStorage(db, now = Date.now()) {
|
|
6
|
-
const cutoff = now - 90 * 864e5;
|
|
7
|
-
runSqliteSavepoint(db, () => {
|
|
8
|
-
db.prepare("DELETE FROM scene_connector_usage WHERE utc_day < ?").run(Math.floor(cutoff / 864e5));
|
|
9
|
-
db.prepare("DELETE FROM notification_presence WHERE expires_at <= ?").run(now);
|
|
10
|
-
db.prepare("DELETE FROM notification_browser_subscriptions WHERE expires_at <= ?").run(now);
|
|
11
|
-
db.prepare(`DELETE FROM scene_mail_sources WHERE id IN (SELECT s.id FROM scene_mail_sources s
|
|
12
|
-
WHERE s.selected_at < ? AND NOT EXISTS (SELECT 1 FROM scene_activations a, json_each(a.scope_json, '$.ids') ids WHERE ids.value = s.id)
|
|
13
|
-
ORDER BY selected_at LIMIT 100)`).run(now - 30 * 864e5);
|
|
14
|
-
for (const table of ["scene_context_snapshots", "scene_model_reservations"]) db.prepare(`DELETE FROM ${table} WHERE run_id IN (SELECT DISTINCT r.id FROM scene_runs r JOIN ${table} t ON t.run_id = r.id
|
|
15
|
-
WHERE r.status NOT IN ('running', 'retry_wait') AND r.created_at < ? ORDER BY r.created_at LIMIT 100)`).run(cutoff);
|
|
16
|
-
db.prepare("DELETE FROM notification_attention_budget WHERE dedupe_key IN (SELECT dedupe_key FROM notification_attention_budget WHERE created_at < ? LIMIT 100)").run(cutoff);
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
//#endregion
|
|
20
|
-
export { maintainSceneStorage };
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { DatabaseSync } from 'node:sqlite';
|
|
2
|
-
import type { ScenePrincipal } from './contracts.js';
|
|
3
|
-
/** Explicit feedback is a usefulness signal, not proof of adoption or saved time. */
|
|
4
|
-
export declare class SceneMetrics {
|
|
5
|
-
private readonly db;
|
|
6
|
-
private readonly clock;
|
|
7
|
-
private readonly modelRef;
|
|
8
|
-
constructor(db: DatabaseSync, clock?: () => number, modelRef?: () => string | null);
|
|
9
|
-
diagnostics(principal: ScenePrincipal): {
|
|
10
|
-
checksPaused: boolean;
|
|
11
|
-
currentModel: string;
|
|
12
|
-
pendingChecks: number;
|
|
13
|
-
oldestDueWaitMs: number;
|
|
14
|
-
notifications: Record<string, import("node:sqlite").SQLOutputValue>[];
|
|
15
|
-
activations: Record<string, import("node:sqlite").SQLOutputValue>[];
|
|
16
|
-
};
|
|
17
|
-
forUser(principal: ScenePrincipal, days?: number): {
|
|
18
|
-
window: {
|
|
19
|
-
since: number;
|
|
20
|
-
until: number;
|
|
21
|
-
days: number;
|
|
22
|
-
};
|
|
23
|
-
ratedOutcomes: number;
|
|
24
|
-
usefulOutcomes: number;
|
|
25
|
-
unhelpfulOutcomes: number;
|
|
26
|
-
scenesWithUsefulOutcomes: number;
|
|
27
|
-
checks: number;
|
|
28
|
-
failedChecks: number;
|
|
29
|
-
skippedChecks: number;
|
|
30
|
-
};
|
|
31
|
-
}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
//#region src/scenes/metrics.ts
|
|
2
|
-
/** Explicit feedback is a usefulness signal, not proof of adoption or saved time. */
|
|
3
|
-
var SceneMetrics = class {
|
|
4
|
-
constructor(db, clock = Date.now, modelRef = () => null) {
|
|
5
|
-
this.db = db;
|
|
6
|
-
this.clock = clock;
|
|
7
|
-
this.modelRef = modelRef;
|
|
8
|
-
}
|
|
9
|
-
diagnostics(principal) {
|
|
10
|
-
if (!principal.ownerId.trim() || !principal.workspaceId.trim()) throw new Error("Scene principal is required");
|
|
11
|
-
const now = this.clock();
|
|
12
|
-
const queue = this.db.prepare(`SELECT COUNT(*) AS depth, MIN(i.due_at) AS oldest
|
|
13
|
-
FROM scene_trigger_intents i JOIN scene_activations a ON a.id = i.activation_id
|
|
14
|
-
WHERE a.owner_id = ? AND a.workspace_id = ? AND i.status = 'pending'`).get(principal.ownerId, principal.workspaceId);
|
|
15
|
-
const notifications = this.db.prepare(`SELECT status, COUNT(*) AS count FROM notification_dispatches
|
|
16
|
-
WHERE owner_id = ? AND workspace_id = ? GROUP BY status`).all(principal.ownerId, principal.workspaceId);
|
|
17
|
-
const activations = this.db.prepare(`SELECT a.id, a.status,
|
|
18
|
-
(SELECT MAX(created_at) FROM scene_runs WHERE activation_id = a.id) AS last_check_at,
|
|
19
|
-
(SELECT reason FROM scene_runs WHERE activation_id = a.id ORDER BY created_at DESC, id DESC LIMIT 1) AS last_reason,
|
|
20
|
-
CASE WHEN a.status = 'active' THEN (SELECT MIN(next_due_at) FROM scene_schedule_cursors WHERE activation_id = a.id) END AS next_schedule_at,
|
|
21
|
-
(SELECT MIN(due_at) FROM scene_work_items WHERE activation_id = a.id AND status = 'watching') AS deadline_at,
|
|
22
|
-
CASE WHEN a.status = 'active' THEN (SELECT MIN(due_at) FROM scene_work_items WHERE activation_id = a.id AND status = 'watching' AND (last_triggered_revision IS NULL OR last_triggered_revision <> revision)) END AS next_deadline_check_at,
|
|
23
|
-
(SELECT MIN(retry_at) FROM scene_runs WHERE activation_id = a.id AND status = 'retry_wait') AS retry_at,
|
|
24
|
-
(SELECT reason FROM scene_source_health WHERE activation_id = a.id) AS source_reason,
|
|
25
|
-
(SELECT last_attempt_at FROM scene_source_health WHERE activation_id = a.id) AS source_attempt_at,
|
|
26
|
-
(SELECT consecutive_failures FROM scene_source_health WHERE activation_id = a.id) AS source_failures,
|
|
27
|
-
(SELECT last_success_at FROM scene_source_health WHERE activation_id = a.id) AS source_success_at,
|
|
28
|
-
(SELECT retry_at FROM scene_source_health WHERE activation_id = a.id) AS source_retry_at
|
|
29
|
-
FROM scene_activations a WHERE a.owner_id = ? AND a.workspace_id = ? ORDER BY a.id LIMIT 100`).all(principal.ownerId, principal.workspaceId);
|
|
30
|
-
const policyRow = this.db.prepare("SELECT preferences_json FROM scene_preferences WHERE owner_id = ? AND workspace_id = ?").get(principal.ownerId, principal.workspaceId);
|
|
31
|
-
const policy = policyRow ? JSON.parse(String(policyRow.preferences_json)) : {};
|
|
32
|
-
const checksPaused = policy.checksPaused === true || Date.parse(policy.checksPausedUntil ?? "") > now;
|
|
33
|
-
if (checksPaused) for (const activation of activations) {
|
|
34
|
-
activation.next_schedule_at = null;
|
|
35
|
-
activation.next_deadline_check_at = null;
|
|
36
|
-
activation.retry_at = null;
|
|
37
|
-
}
|
|
38
|
-
let currentModel = null;
|
|
39
|
-
try {
|
|
40
|
-
currentModel = this.modelRef();
|
|
41
|
-
} catch {}
|
|
42
|
-
return {
|
|
43
|
-
checksPaused,
|
|
44
|
-
currentModel,
|
|
45
|
-
pendingChecks: Number(queue.depth),
|
|
46
|
-
oldestDueWaitMs: queue.oldest == null ? 0 : Math.max(0, now - Number(queue.oldest)),
|
|
47
|
-
notifications,
|
|
48
|
-
activations
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
forUser(principal, days = 7) {
|
|
52
|
-
if (!principal.ownerId?.trim() || !principal.workspaceId?.trim()) throw new Error("Scene principal is required");
|
|
53
|
-
if (!Number.isInteger(days) || days < 1 || days > 90) throw new Error("Scene metric window must be 1–90 days");
|
|
54
|
-
const until = this.clock();
|
|
55
|
-
const since = until - days * 864e5;
|
|
56
|
-
const feedback = this.db.prepare(`SELECT
|
|
57
|
-
COUNT(*) AS ratedOutcomes,
|
|
58
|
-
COALESCE(SUM(CASE WHEN f.rating = 'useful' THEN 1 ELSE 0 END), 0) AS usefulOutcomes,
|
|
59
|
-
COALESCE(SUM(CASE WHEN f.rating = 'not_useful' THEN 1 ELSE 0 END), 0) AS unhelpfulOutcomes,
|
|
60
|
-
COUNT(DISTINCT CASE WHEN f.rating = 'useful' THEN a.id END) AS scenesWithUsefulOutcomes
|
|
61
|
-
FROM scene_feedback_history f JOIN scene_feedback latest
|
|
62
|
-
ON latest.presentation_id = f.presentation_id AND latest.revision = f.revision
|
|
63
|
-
JOIN scene_presentations p ON p.id = f.presentation_id JOIN scene_outcomes o ON o.id = p.outcome_id
|
|
64
|
-
JOIN scene_runs r ON r.id = o.run_id JOIN scene_activations a ON a.id = r.activation_id
|
|
65
|
-
WHERE a.owner_id = ? AND a.workspace_id = ?
|
|
66
|
-
AND f.recorded_at >= ? AND f.recorded_at < ?`).get(principal.ownerId, principal.workspaceId, since, until);
|
|
67
|
-
const work = this.db.prepare(`SELECT COUNT(*) AS checks,
|
|
68
|
-
COALESCE(SUM(CASE WHEN r.status = 'failed' THEN 1 ELSE 0 END), 0) AS failedChecks,
|
|
69
|
-
COALESCE(SUM(CASE WHEN r.status = 'skipped' THEN 1 ELSE 0 END), 0) AS skippedChecks
|
|
70
|
-
FROM scene_runs r JOIN scene_activations a ON a.id = r.activation_id
|
|
71
|
-
WHERE a.owner_id = ? AND a.workspace_id = ? AND r.created_at >= ? AND r.created_at < ?`).get(principal.ownerId, principal.workspaceId, since, until);
|
|
72
|
-
return {
|
|
73
|
-
window: {
|
|
74
|
-
since,
|
|
75
|
-
until,
|
|
76
|
-
days
|
|
77
|
-
},
|
|
78
|
-
ratedOutcomes: Number(feedback.ratedOutcomes),
|
|
79
|
-
usefulOutcomes: Number(feedback.usefulOutcomes),
|
|
80
|
-
unhelpfulOutcomes: Number(feedback.unhelpfulOutcomes),
|
|
81
|
-
scenesWithUsefulOutcomes: Number(feedback.scenesWithUsefulOutcomes),
|
|
82
|
-
checks: Number(work.checks),
|
|
83
|
-
failedChecks: Number(work.failedChecks),
|
|
84
|
-
skippedChecks: Number(work.skippedChecks)
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
//#endregion
|
|
89
|
-
export { SceneMetrics };
|
package/dist/src/scenes/model.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { init_agent_scope, resolveDefaultAgentId } from "../agent/agent-scope.js";
|
|
2
|
-
import { resolveModelSelector } from "../config/agent-model-intents.js";
|
|
3
|
-
//#region src/scenes/model.ts
|
|
4
|
-
init_agent_scope();
|
|
5
|
-
/** Scene reasoning follows the existing agent model policy and falls back to chat. */
|
|
6
|
-
function resolveSceneModelRef(config) {
|
|
7
|
-
return resolveModelSelector(config, resolveDefaultAgentId(), "@reasoning");
|
|
8
|
-
}
|
|
9
|
-
//#endregion
|
|
10
|
-
export { resolveSceneModelRef };
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { DatabaseSync } from 'node:sqlite';
|
|
2
|
-
import type { NotificationResult } from '../notifications/resultOutbox.js';
|
|
3
|
-
export type SceneNotificationEligibility = {
|
|
4
|
-
action: 'cancel';
|
|
5
|
-
reason: string;
|
|
6
|
-
} | {
|
|
7
|
-
action: 'defer';
|
|
8
|
-
until: number;
|
|
9
|
-
} | {
|
|
10
|
-
action: 'eligible';
|
|
11
|
-
activationId: string;
|
|
12
|
-
presentationId: string;
|
|
13
|
-
revision: number;
|
|
14
|
-
kind: string;
|
|
15
|
-
};
|
|
16
|
-
/** Local result eligibility only. The host must still recheck connector authorization and attention policy. */
|
|
17
|
-
export declare function sceneNotificationEligibility(db: DatabaseSync, result: NotificationResult, now: number, expectedRevision?: number): SceneNotificationEligibility;
|