@xopcai/xopc 0.0.144 → 0.0.145
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/feishu/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/src/adapters/streaming-adapter.js +1 -1
- package/dist/extensions/telegram/src/inbound-processor.js +1 -1
- package/dist/extensions/telegram/src/plugin.js +1 -1
- package/dist/extensions/telegram/src/routing-integration.js +2 -2
- package/dist/extensions/telegram/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/api/api.js +1 -1
- package/dist/extensions/weixin/src/plugin.js +1 -1
- package/dist/extensions/weixin/src/workflow-progress.js +1 -1
- package/dist/gateway/static/root/assets/Combination-DolwnuKi.js +41 -0
- package/dist/gateway/static/root/assets/{activity-center-store-jITiX2vJ.js → activity-center-store-3l9ahUqb.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-EAVnrCAs.js → agent-avatar-dicebear-BEUxdhZx.js} +1 -1
- package/dist/gateway/static/root/assets/agents-1bpT0xRO.js +2 -0
- package/dist/gateway/static/root/assets/app-management-settings-panel-CRHSZJWi.js +1 -0
- package/dist/gateway/static/root/assets/{appearance-settings-DSkm9bp_.js → appearance-settings-BunADYJb.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-Cc4JgVUQ.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-C99N0vV6.js → archive-plugin-B6vTkH2A.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-CHTDqME5.js → attachment-load-BjZXzaNv.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-suggestion-card-CBt6U3-S.js → automation-suggestion-card-ZDA-Stg1.js} +1 -1
- package/dist/gateway/static/root/assets/automations-page-mb0fdVpq.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-BRtxOLlM.js → binary-plugins-DYZfLvPz.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-CUlXfgXd.js → block-editor-C3MUlYC9.js} +46 -46
- package/dist/gateway/static/root/assets/browser-settings-page-Bb0xhaMN.js +8 -0
- package/dist/gateway/static/root/assets/capability-presets-api-BV76yN9a.js +1 -0
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-CUcGKZqC.js +2 -0
- package/dist/gateway/static/root/assets/channel-recipient-api-fTlTnWB4.js +1 -0
- package/dist/gateway/static/root/assets/channels-settings-BlSDMGdy.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-CJauF1CW.js +1 -0
- package/dist/gateway/static/root/assets/{code-editor--tMO38Tr.js → code-editor-D4_k-6QN.js} +1 -1
- package/dist/gateway/static/root/assets/connector-logo-BVFNT2zW.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-CMgAFGvb.js +2 -0
- package/dist/gateway/static/root/assets/copy-to-clipboard-HOJ79TWv.js +1 -0
- package/dist/gateway/static/root/assets/{desktop-pet-C-Drhqyk.js → desktop-pet-_jUmoXd3.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-CRGiolqF.js → desktop-pet-settings-DwGOy4AQ.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-Dw1L3M84.js → directory-picker-path-field-akvF0F-u.js} +1 -1
- package/dist/gateway/static/root/assets/{dist-SwiI0Xu3.js → dist-C99RGfAH.js} +1 -1
- package/dist/gateway/static/root/assets/dreaming-settings-BLetQiYY.js +3 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-Dcl8LJG_.js → extension-debug-page-Cof2ncxE.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-i_BXmO_x.js → extension-page-CwWktRNz.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-CuggWOIl.js +1 -0
- package/dist/gateway/static/root/assets/gateway-config-api-B7sxIbza.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-DIv0eKMf.js +1 -0
- package/dist/gateway/static/root/assets/gateway-startup-retry-DtoLihQE.js +1 -0
- package/dist/gateway/static/root/assets/goal-create-dialog-C4Kw0mfS.js +1 -0
- package/dist/gateway/static/root/assets/goal-detail-page-BMmzYpZL.js +4 -0
- package/dist/gateway/static/root/assets/goals-config-api-B0jm5JaA.js +1 -0
- package/dist/gateway/static/root/assets/goals-page-CGeT77PC.js +2 -0
- package/dist/gateway/static/root/assets/goals-settings-N5_iL7es.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-settings-XzH3lbRR.js +1 -0
- package/dist/gateway/static/root/assets/{html-workspace-editor-COqmtESs.js → html-workspace-editor-C3DKAkMc.js} +1 -1
- package/dist/gateway/static/root/assets/index-CSLF84-Q.css +1 -0
- package/dist/gateway/static/root/assets/index-I-ZCenVw.js +259 -0
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-x_v0nrIi.js +1 -0
- package/dist/gateway/static/root/assets/locale-store-CiM-D9jA.js +1 -0
- package/dist/gateway/static/root/assets/logs-page-BSh1t8cD.js +7 -0
- package/dist/gateway/static/root/assets/markdown-editor-BvUebh3C.js +2 -0
- package/dist/gateway/static/root/assets/{markdown-split-BTRFTK0w.js → markdown-split-5rJx5flj.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-BABfIZPU.js → media-plugins-DYXccwAd.js} +1 -1
- package/dist/gateway/static/root/assets/messages-Cb1VMeqP.js +5 -0
- package/dist/gateway/static/root/assets/models-hub-panel-BNpTenAI.js +2 -0
- package/dist/gateway/static/root/assets/{notes-page-88QBHW9a.js → notes-page-BgLyndCO.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-teklkhcE.js +4 -0
- package/dist/gateway/static/root/assets/{page-tabs-je95DZOf.js → page-tabs-6Al9_sGz.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-BJbwi7Rc.js → preview-open-alternatives-Cm3G72Hv.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-CCB_dKoh.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-VOAFAHYj.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-USYu64Ru.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-qWMQ9mod.js → save-bar-controls-BYtfzu_F.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-kxd270Gs.js → schedule-field-CvIRc6yK.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-DLnD-MuD.js → schema-form-CQuKx0n7.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-oGC8O5h_.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-D4rP66R1.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-DQprvu5J.js → settings-collapsible-section-CF3HHM-t.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-Cqq7Y98y.js → settings-form-section-CwWjoRN6.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-b6rXULL5.js → settings-loading-skeleton-aUFmJa13.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-BtBVz3cX.js → settings-page-B2UUU9TF.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-BNJbtklV.js → settings-page-layout-DqpbTWqI.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-Ck9keROI.js +1 -0
- package/dist/gateway/static/root/assets/share-preview-page-BOhlPsS1.js +2 -0
- package/dist/gateway/static/root/assets/shares-settings-BYLsCuqj.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-BNHUyVML.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-CpXbQH4n.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-Cq9J7i7v.js → system-settings-panel-CWxSvuwD.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-Bt6vAkSB.js → theme-store-C9Dxcppm.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-CdSwi1gT.js → typed-models-lib-qROAvqTw.js} +1 -1
- package/dist/gateway/static/root/assets/use-channel-catalog-DE9cpn4G.js +1 -0
- package/dist/gateway/static/root/assets/user-context-page-DbNEK4Yp.js +1 -0
- package/dist/gateway/static/root/assets/user-profile-fields-editor-CWxc0ghP.js +1 -0
- package/dist/gateway/static/root/assets/{user-profile-settings-panel-B8hlamVB.js → user-profile-settings-panel-DW-Up6vt.js} +1 -1
- package/dist/gateway/static/root/assets/{utils-Dx01V8qF.js → utils-D53uRXVr.js} +1 -1
- package/dist/gateway/static/root/assets/{vendor-codemirror-C1WKjCk5.js → vendor-codemirror--gTq3YAI.js} +17 -17
- package/dist/gateway/static/root/assets/voice-api-key-field-Cs7MOrg0.js +1 -0
- package/dist/gateway/static/root/assets/work-item-detail-page-D1ziG1Pp.js +1 -0
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-D_x9ELJp.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-DHGV_n6i.js +11 -0
- package/dist/gateway/static/root/index.html +10 -10
- package/dist/package.js +1 -1
- package/dist/src/activity/emitter.js +1 -1
- package/dist/src/agent/agent-manager.js +4 -4
- package/dist/src/agent/code-intelligence/binary.js +1 -1
- package/dist/src/agent/context/project-context.js +2 -2
- package/dist/src/agent/context/workspace-seed.js +2 -2
- package/dist/src/agent/embedded/run-for-session.js +1 -1
- package/dist/src/agent/embedded/session-runner.js +3 -3
- package/dist/src/agent/embedded/session-runner.js.map +1 -1
- package/dist/src/agent/embedded/xopc-auth-storage.d.ts +3 -1
- package/dist/src/agent/embedded/xopc-auth-storage.js +11 -1
- package/dist/src/agent/embedded/xopc-auth-storage.js.map +1 -1
- package/dist/src/agent/goals/post-turn.js +2 -2
- package/dist/src/agent/ipc/bus.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
- package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
- package/dist/src/agent/mcp/mcp-transport.js +1 -1
- package/dist/src/agent/memory/dreaming/config.js +1 -1
- package/dist/src/agent/memory/plugin-discovery.js +1 -1
- package/dist/src/agent/models/manager.js +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js +1 -1
- package/dist/src/agent/service.js +3 -3
- package/dist/src/agent/session/session-inspector.js +2 -2
- package/dist/src/agent/skills/hub-pull.js +1 -1
- package/dist/src/agent/tools/composio-tool.js +1 -1
- package/dist/src/agent/tools/goal-tool.js +2 -2
- package/dist/src/agent/tools/workflow-tool.js +1 -1
- package/dist/src/agent/tools/xopc-use-tool.js +1 -1
- package/dist/src/agent/workspace-runtime/registry.js +2 -2
- package/dist/src/agent-runtime/index.js +1 -1
- package/dist/src/agent-runtime/runtime-profile.js +1 -1
- package/dist/src/automations/api/routes.js +1 -1
- package/dist/src/automations/service/action-executor.js +2 -2
- package/dist/src/browser/cdp-local-launcher.js +1 -1
- package/dist/src/browser/providers/browser-ext-install.js +3 -3
- package/dist/src/browser/providers/cloakbrowser.js +2 -2
- package/dist/src/browser/providers/playwright-doctor.js +1 -1
- package/dist/src/browser/stealth.js +1 -1
- package/dist/src/capabilities/store-connector.js +1 -1
- package/dist/src/chat-commands/agent-edit.js +1 -1
- package/dist/src/chat-commands/builtins/config.js +1 -1
- package/dist/src/chat-commands/builtins/goal.js +2 -2
- package/dist/src/chat-commands/context.js +1 -1
- package/dist/src/cli/commands/agent.js +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +2 -2
- package/dist/src/cli/commands/doctor/checks/session-integrity.js +1 -1
- package/dist/src/cli/commands/extension-marketplace.js +1 -1
- package/dist/src/cli/commands/extension-pack.js +1 -1
- package/dist/src/cli/commands/goal.js +2 -2
- package/dist/src/cli/commands/init.js +1 -1
- package/dist/src/cli/commands/project.js +3 -3
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/config/gateway-bind.js +1 -1
- package/dist/src/config/index.js +3 -3
- package/dist/src/config/loader.js +1 -1
- package/dist/src/config/models-json.js +1 -1
- package/dist/src/config/schema.d.ts +60 -5
- package/dist/src/config/schema.js +30 -9
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/connectors/composio-catalog.js +11 -2
- package/dist/src/connectors/composio-catalog.js.map +1 -1
- package/dist/src/connectors/composio-sessions.js +1 -1
- package/dist/src/connectors/composio.js +1 -1
- package/dist/src/connectors/connector-memory-sync.js +135 -26
- package/dist/src/connectors/connector-memory-sync.js.map +1 -1
- package/dist/src/daemon/launchd.js +1 -1
- package/dist/src/daemon/systemd.js +1 -1
- package/dist/src/extensions/discover-extensions.js +1 -1
- package/dist/src/extensions/loader.js +2 -2
- package/dist/src/gateway/agents-admin.js +1 -1
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/gateway/hono/app.js +1 -1
- package/dist/src/gateway/hono/app.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +11 -0
- package/dist/src/gateway/hono/lib/config-payload.js +1 -0
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/lib/static-ui.js +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +6 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
- package/dist/src/gateway/hono/routes/home.js +2 -2
- package/dist/src/gateway/hono/routes/memory.js +13 -3
- package/dist/src/gateway/hono/routes/memory.js.map +1 -1
- package/dist/src/gateway/hono/routes/projects.js +5 -5
- package/dist/src/gateway/hono/routes/status.js +3 -0
- package/dist/src/gateway/hono/routes/status.js.map +1 -1
- package/dist/src/gateway/hono/routes/voice.d.ts +5 -5
- package/dist/src/gateway/hono/routes/voice.js +288 -62
- package/dist/src/gateway/hono/routes/voice.js.map +1 -1
- package/dist/src/gateway/hono/routes/workflows.js +1 -1
- package/dist/src/gateway/hono/routes/you.js +11 -7
- package/dist/src/gateway/hono/routes/you.js.map +1 -1
- package/dist/src/gateway/lock.js +1 -1
- package/dist/src/gateway/ports.js +1 -1
- package/dist/src/gateway/service.d.ts +8 -0
- package/dist/src/gateway/service.js +47 -17
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/goals/goal-workflow-judge.js +1 -1
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/infra/ports.js +1 -1
- package/dist/src/infra/ssh-tunnel.js +1 -1
- package/dist/src/infra/update-check.js +1 -1
- package/dist/src/knowledge/connected-knowledge-pipeline.d.ts +21 -0
- package/dist/src/knowledge/connected-knowledge-pipeline.js +267 -0
- package/dist/src/knowledge/connected-knowledge-pipeline.js.map +1 -0
- package/dist/src/knowledge/coordinator.d.ts +10 -0
- package/dist/src/knowledge/coordinator.js +52 -0
- package/dist/src/knowledge/coordinator.js.map +1 -0
- package/dist/src/knowledge/index.d.ts +2 -0
- package/dist/src/knowledge/index.js +3 -1
- package/dist/src/knowledge/ingestion-service.d.ts +7 -1
- package/dist/src/knowledge/ingestion-service.js +28 -0
- package/dist/src/knowledge/ingestion-service.js.map +1 -1
- package/dist/src/knowledge/types.d.ts +18 -0
- package/dist/src/media-understanding/audio-transcription-runner.js +5 -3
- package/dist/src/media-understanding/audio-transcription-runner.js.map +1 -1
- package/dist/src/media-understanding/runner.js +8 -3
- package/dist/src/media-understanding/runner.js.map +1 -1
- package/dist/src/media-understanding/types.d.ts +7 -0
- package/dist/src/migrations/runner.js +1 -1
- package/dist/src/notes/service.js +3 -3
- package/dist/src/notes/store.js +1 -1
- package/dist/src/projects/project-service.js +1 -1
- package/dist/src/projects/workspace.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/resolve-tui-session-key.js +1 -1
- package/dist/src/session/init-session-turn.js +1 -1
- package/dist/src/session/resolve-session.js +1 -1
- package/dist/src/session/session-title.js +2 -2
- package/dist/src/session/store.js +1 -1
- package/dist/src/storage/sqlite/connection.js +1 -1
- package/dist/src/storage/sqlite/index.d.ts +1 -1
- package/dist/src/storage/sqlite/index.js +2 -2
- package/dist/src/storage/sqlite/knowledge-repository.d.ts +26 -1
- package/dist/src/storage/sqlite/knowledge-repository.js +120 -6
- package/dist/src/storage/sqlite/knowledge-repository.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/037_connected_knowledge_pipeline.sql +47 -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.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/row-mappers.js +1 -1
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/tui/backends/embedded-backend.js +4 -4
- package/dist/src/tui/clipboard-image.js +1 -1
- package/dist/src/tui/tui-command-formatters.js +2 -2
- package/dist/src/tui/tui-commands.js +3 -3
- package/dist/src/tui/tui.js +1 -1
- package/dist/src/user-context/projection.d.ts +13 -4
- package/dist/src/user-context/projection.js +19 -7
- package/dist/src/user-context/projection.js.map +1 -1
- package/dist/src/utils/index.js +1 -1
- package/dist/src/utils/logger/index.js +1 -1
- package/dist/src/utils/logger.js +1 -1
- package/dist/src/voice/language-profile.d.ts +20 -0
- package/dist/src/voice/language-profile.js +156 -0
- package/dist/src/voice/language-profile.js.map +1 -0
- package/dist/src/voice/local/model-files.d.ts +14 -0
- package/dist/src/voice/local/model-files.js +94 -0
- package/dist/src/voice/local/model-files.js.map +1 -0
- package/dist/src/voice/local/model-manager.d.ts +18 -0
- package/dist/src/voice/local/model-manager.js +135 -0
- package/dist/src/voice/local/model-manager.js.map +1 -0
- package/dist/src/voice/local/models.d.ts +28 -0
- package/dist/src/voice/local/models.js +101 -0
- package/dist/src/voice/local/models.js.map +1 -0
- package/dist/src/voice/local/runtime-client.d.ts +26 -0
- package/dist/src/voice/local/runtime-client.js +166 -0
- package/dist/src/voice/local/runtime-client.js.map +1 -0
- package/dist/src/voice/local/runtime-dispatcher.d.ts +9 -0
- package/dist/src/voice/local/runtime-dispatcher.js +22 -0
- package/dist/src/voice/local/runtime-dispatcher.js.map +1 -0
- package/dist/src/voice/local/runtime-worker.d.ts +1 -0
- package/dist/src/voice/local/runtime-worker.js +249 -0
- package/dist/src/voice/local/runtime-worker.js.map +1 -0
- package/dist/src/voice/local/wav.d.ts +6 -0
- package/dist/src/voice/local/wav.js +69 -0
- package/dist/src/voice/local/wav.js.map +1 -0
- package/dist/src/voice/metadata/builtin.js +46 -0
- package/dist/src/voice/metadata/builtin.js.map +1 -1
- package/dist/src/voice/stt/factory.js +8 -2
- package/dist/src/voice/stt/factory.js.map +1 -1
- package/dist/src/voice/stt/providers/alibaba-transcription.js +14 -8
- package/dist/src/voice/stt/providers/alibaba-transcription.js.map +1 -1
- package/dist/src/voice/stt/providers/index.d.ts +1 -0
- package/dist/src/voice/stt/providers/index.js +2 -1
- package/dist/src/voice/stt/providers/local-transcription.d.ts +2 -0
- package/dist/src/voice/stt/providers/local-transcription.js +51 -0
- package/dist/src/voice/stt/providers/local-transcription.js.map +1 -0
- package/dist/src/voice/stt/providers/openai-transcription.js +5 -3
- package/dist/src/voice/stt/providers/openai-transcription.js.map +1 -1
- package/dist/src/voice/stt/transcribe-core.js +5 -4
- package/dist/src/voice/stt/transcribe-core.js.map +1 -1
- package/dist/src/voice/stt/types.d.ts +4 -0
- package/dist/src/voice/stt/types.js +5 -4
- package/dist/src/voice/stt/types.js.map +1 -1
- package/dist/src/voice/tts/providers/edge-speech.js +2 -2
- package/dist/src/voice/tts/providers/edge-speech.js.map +1 -1
- package/dist/src/voice/tts/types.js +3 -3
- package/dist/src/voice/tts/types.js.map +1 -1
- package/dist/src/work-items/work-item-service.js +1 -1
- package/dist/src/workflows/draft/workflow-draft-service.js +1 -1
- package/dist/src/workflows/service/workflow-session-bridge.js +3 -3
- package/package.json +3 -1
- package/dist/gateway/static/root/assets/Combination-HAlzriaz.js +0 -41
- package/dist/gateway/static/root/assets/agents-5rTuJOtT.js +0 -2
- package/dist/gateway/static/root/assets/app-management-settings-panel-Bu568NpC.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-DWetalKp.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-ICUfxeOz.js +0 -4
- package/dist/gateway/static/root/assets/browser-settings-page-D7Bj4MKi.js +0 -8
- package/dist/gateway/static/root/assets/capability-presets-api-Bg1ntFSD.js +0 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-C-8I-Ktn.js +0 -2
- package/dist/gateway/static/root/assets/channel-recipient-api-DuulnhIj.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-Dm5EqQyK.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-B5lVrUsN.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-BOzjh-OK.js +0 -2
- package/dist/gateway/static/root/assets/dreaming-settings-CF21cbjo.js +0 -3
- package/dist/gateway/static/root/assets/extension-settings-page-CWIi7xsn.js +0 -1
- package/dist/gateway/static/root/assets/fetch-8QNN25Sh.js +0 -1
- package/dist/gateway/static/root/assets/gateway-config-api-2sLP2kkA.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-DMHiZc-2.js +0 -1
- package/dist/gateway/static/root/assets/gateway-startup-retry-5YBnS9Fj.js +0 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-CAODVDiA.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-_d4DjmeX.js +0 -4
- package/dist/gateway/static/root/assets/goals-config-api-B4qeLKQS.js +0 -1
- package/dist/gateway/static/root/assets/goals-page-lgsop664.js +0 -2
- package/dist/gateway/static/root/assets/goals-settings-Dx_1ZNgb.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-DeTseEk_.js +0 -1
- package/dist/gateway/static/root/assets/index-CphxClbs.css +0 -1
- package/dist/gateway/static/root/assets/index-VWvztcst.js +0 -257
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-BpwpMmlk.js +0 -1
- package/dist/gateway/static/root/assets/locale-store-Ba72bFmP.js +0 -1
- package/dist/gateway/static/root/assets/logs-page-9_hbTg3j.js +0 -7
- package/dist/gateway/static/root/assets/markdown-editor-jD1LPiP-.js +0 -2
- package/dist/gateway/static/root/assets/messages-CzKxM6I4.js +0 -5
- package/dist/gateway/static/root/assets/models-hub-panel-B1CUvZxh.js +0 -2
- package/dist/gateway/static/root/assets/notes-workbench-CerZOeLW.js +0 -2
- package/dist/gateway/static/root/assets/project-detail-page-BmrApldl.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-tTn-k76N.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-DeA2-pOi.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-D4kvvcL1.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-CI1OG4gq.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-cmclUJzS.js +0 -1
- package/dist/gateway/static/root/assets/share-preview-page--zO-A1W1.js +0 -2
- package/dist/gateway/static/root/assets/shares-settings-DNJvqA67.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-DWr_0Xgn.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-DEGsTbJx.js +0 -2
- package/dist/gateway/static/root/assets/use-channel-catalog-COXIfXcl.js +0 -1
- package/dist/gateway/static/root/assets/user-context-page-C-V73ZaJ.js +0 -1
- package/dist/gateway/static/root/assets/user-profile-fields-editor-B1cxoGkh.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DGpIUelZ.js +0 -1
- package/dist/gateway/static/root/assets/work-item-detail-page-fzWTxF26.js +0 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-Dt_x8LGg.js +0 -3
- package/dist/gateway/static/root/assets/workflows-page-Bg02zEUh.js +0 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","names":[],"sources":["../../../src/media-understanding/runner.ts"],"sourcesContent":["/**\n * MediaUnderstanding capability runner.\n *\n * Orchestrates per-attachment fallback across providers for one capability\n * (audio / image / video). For each attachment:\n * 1. Build the candidate provider list from the registry, ordered by\n * autoPriority (lower = first), with caller-supplied `providerOrder`\n * overriding when set.\n * 2. Try providers in order. A provider is SKIPPED when it does not declare\n * the requested capability OR does not implement the corresponding method.\n * 3. The first provider whose capability call resolves successfully wins;\n * its output is recorded as `chosen`. Failures are recorded as attempts\n * and the next provider is tried.\n * 4. When ALL providers for an attachment fail, the attachment outcome is\n * `failed`; when no provider was even eligible (capability not registered),\n * it's `disabled`.\n *\n * DECISION (per docs/voice-rearchitecture.md §5):\n * - This is a thin runner only. xopc v2.0 ships ONLY audio; image/video\n * branches exist as type-level fall-throughs (the runner happily handles\n * them once a provider registers describeImage / describeVideo, but no\n * image-specific helpers — like multi-image batching — live here yet).\n * - We deliberately do NOT port openclaw's `MediaAttachmentCache` (which\n * handles temp-file extraction, SSRF re-validation on remote URLs, etc.).\n * For xopc v2.0 the caller is expected to pre-load the buffer; remote URL\n * fetching is the caller's responsibility (typically the channel adapter\n * does this before invoking the runner).\n */\n\nimport { createLogger } from '../utils/logger.js';\n\nimport { listProvidersForCapability } from './registry.js';\nimport type {\n AudioTranscriptionRequest,\n AudioTranscriptionResult,\n CapabilityAttachmentInput,\n ImageDescriptionRequest,\n ImageDescriptionResult,\n MediaCapability,\n MediaUnderstandingAttachmentDecision,\n MediaUnderstandingKind,\n MediaUnderstandingModelDecision,\n MediaUnderstandingOutput,\n MediaUnderstandingProvider,\n MediaUnderstandingResult,\n VideoDescriptionRequest,\n VideoDescriptionResult,\n} from './types.js';\n\nconst log = createLogger('MediaUnderstandingRunner');\n\nexport type { CapabilityAttachmentInput } from './types.js';\n\nexport interface RunCapabilityOptions {\n capability: MediaCapability;\n attachments: readonly CapabilityAttachmentInput[];\n /** Caller-supplied ordering. When set, overrides registry autoPriority. */\n providerOrder?: readonly string[];\n /**\n * Per-provider request builder. Returned shape MUST match the capability:\n * audio → AudioTranscriptionRequest\n * image → ImageDescriptionRequest\n * video → VideoDescriptionRequest\n * The runner does not synthesize api keys / urls — that's the caller's job\n * (typically reads from cfg.tools.media.audio.providers[providerId]).\n */\n buildRequest: (params: {\n provider: MediaUnderstandingProvider;\n attachment: CapabilityAttachmentInput;\n }) =>\n | AudioTranscriptionRequest\n | ImageDescriptionRequest\n | VideoDescriptionRequest\n | undefined;\n /** Optional global timeout signal (e.g. from agent-level cancellation). */\n signal?: AbortSignal;\n}\n\nconst KIND_BY_CAPABILITY: Record<MediaCapability, MediaUnderstandingKind> = {\n audio: 'audio.transcription',\n image: 'image.description',\n video: 'video.description',\n};\n\nfunction orderProviders(\n providers: MediaUnderstandingProvider[],\n capability: MediaCapability,\n override?: readonly string[],\n): MediaUnderstandingProvider[] {\n if (override && override.length > 0) {\n const lookup = new Map(providers.map((p) => [p.id.toLowerCase(), p]));\n const ordered: MediaUnderstandingProvider[] = [];\n const used = new Set<string>();\n for (const id of override) {\n const provider = lookup.get(id.toLowerCase());\n if (provider && !used.has(provider.id)) {\n ordered.push(provider);\n used.add(provider.id);\n }\n }\n // Append any registered providers not in the override (preserves capability\n // availability when the override list is incomplete).\n for (const provider of providers) {\n if (!used.has(provider.id)) {\n ordered.push(provider);\n }\n }\n return ordered;\n }\n return [...providers].sort((a, b) => {\n const aPriority = a.autoPriority?.[capability] ?? Number.MAX_SAFE_INTEGER;\n const bPriority = b.autoPriority?.[capability] ?? Number.MAX_SAFE_INTEGER;\n return aPriority - bPriority;\n });\n}\n\nfunction pickMethod(\n provider: MediaUnderstandingProvider,\n capability: MediaCapability,\n): ((req: never) => Promise<{ text: string; model?: string }>) | undefined {\n if (capability === 'audio') {\n return provider.transcribeAudio as (\n req: AudioTranscriptionRequest,\n ) => Promise<AudioTranscriptionResult>;\n }\n if (capability === 'image') {\n return provider.describeImage as (\n req: ImageDescriptionRequest,\n ) => Promise<ImageDescriptionResult>;\n }\n return provider.describeVideo as (\n req: VideoDescriptionRequest,\n ) => Promise<VideoDescriptionResult>;\n}\n\nexport async function runCapability(\n options: RunCapabilityOptions,\n): Promise<MediaUnderstandingResult> {\n const eligibleProviders = listProvidersForCapability(options.capability);\n\n // Capability outcome is 'disabled' when no registered provider implements it.\n if (eligibleProviders.length === 0) {\n log.debug(\n { capability: options.capability },\n `No providers registered for capability \"${options.capability}\"`,\n );\n return {\n decision: {\n capability: options.capability,\n outcome: 'disabled',\n attachments: options.attachments.map((a) => ({\n attachmentIndex: a.attachmentIndex,\n attempts: [],\n })),\n },\n outputs: [],\n };\n }\n\n if (options.attachments.length === 0) {\n return {\n decision: { capability: options.capability, outcome: 'no-attachment', attachments: [] },\n outputs: [],\n };\n }\n\n const providers = orderProviders(eligibleProviders, options.capability, options.providerOrder);\n const attachmentDecisions: MediaUnderstandingAttachmentDecision[] = [];\n const outputs: MediaUnderstandingOutput[] = [];\n\n for (const attachment of options.attachments) {\n options.signal?.throwIfAborted();\n\n const attempts: MediaUnderstandingModelDecision[] = [];\n let chosen: MediaUnderstandingModelDecision | undefined;\n\n for (const provider of providers) {\n const method = pickMethod(provider, options.capability);\n if (!method) {\n // Defensive: registry filter should already exclude these. Recorded as\n // skipped so callers can diagnose registry/method mismatches.\n attempts.push({\n provider: provider.id,\n type: 'provider',\n outcome: 'skipped',\n reason: `provider \"${provider.id}\" missing method for capability \"${options.capability}\"`,\n });\n continue;\n }\n const request = options.buildRequest({ provider, attachment });\n if (!request) {\n attempts.push({\n provider: provider.id,\n type: 'provider',\n outcome: 'skipped',\n reason: 'caller buildRequest returned undefined (likely missing config)',\n });\n continue;\n }\n try {\n // We narrow `method` by capability above; cast through `unknown` to keep\n // a single call site without per-capability ceremony.\n const callResult = await (method as (req: unknown) => Promise<{ text: string; model?: string }>)(\n request,\n );\n const text = callResult.text?.trim() ?? '';\n if (!text) {\n attempts.push({\n provider: provider.id,\n type: 'provider',\n outcome: 'failed',\n reason: 'empty transcription/description text',\n model: callResult.model,\n });\n continue;\n }\n chosen = {\n provider: provider.id,\n type: 'provider',\n outcome: 'success',\n model: callResult.model,\n };\n attempts.push(chosen);\n outputs.push({\n kind: KIND_BY_CAPABILITY[options.capability],\n attachmentIndex: attachment.attachmentIndex,\n text,\n provider: provider.id,\n model: callResult.model,\n });\n break;\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n log.warn(\n {\n err: error,\n providerId: provider.id,\n capability: options.capability,\n attachmentIndex: attachment.attachmentIndex,\n },\n `Provider \"${provider.id}\" failed for ${options.capability}: ${reason}`,\n );\n attempts.push({\n provider: provider.id,\n type: 'provider',\n outcome: 'failed',\n reason,\n });\n }\n }\n\n attachmentDecisions.push({\n attachmentIndex: attachment.attachmentIndex,\n attempts,\n ...(chosen ? { chosen } : {}),\n });\n }\n\n const overallOutcome = attachmentDecisions.every((d) => d.chosen)\n ? 'success'\n : attachmentDecisions.some((d) => d.chosen)\n ? 'success' // partial success — at least one attachment succeeded\n : 'failed';\n\n return {\n decision: {\n capability: options.capability,\n outcome: overallOutcome,\n attachments: attachmentDecisions,\n },\n outputs,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runner.js","names":[],"sources":["../../../src/media-understanding/runner.ts"],"sourcesContent":["/**\n * MediaUnderstanding capability runner.\n *\n * Orchestrates per-attachment fallback across providers for one capability\n * (audio / image / video). For each attachment:\n * 1. Build the candidate provider list from the registry, ordered by\n * autoPriority (lower = first), with caller-supplied `providerOrder`\n * overriding when set.\n * 2. Try providers in order. A provider is SKIPPED when it does not declare\n * the requested capability OR does not implement the corresponding method.\n * 3. The first provider whose capability call resolves successfully wins;\n * its output is recorded as `chosen`. Failures are recorded as attempts\n * and the next provider is tried.\n * 4. When ALL providers for an attachment fail, the attachment outcome is\n * `failed`; when no provider was even eligible (capability not registered),\n * it's `disabled`.\n *\n * DECISION (per docs/voice-rearchitecture.md §5):\n * - This is a thin runner only. xopc v2.0 ships ONLY audio; image/video\n * branches exist as type-level fall-throughs (the runner happily handles\n * them once a provider registers describeImage / describeVideo, but no\n * image-specific helpers — like multi-image batching — live here yet).\n * - We deliberately do NOT port openclaw's `MediaAttachmentCache` (which\n * handles temp-file extraction, SSRF re-validation on remote URLs, etc.).\n * For xopc v2.0 the caller is expected to pre-load the buffer; remote URL\n * fetching is the caller's responsibility (typically the channel adapter\n * does this before invoking the runner).\n */\n\nimport { createLogger } from '../utils/logger.js';\n\nimport { listProvidersForCapability } from './registry.js';\nimport type {\n AudioTranscriptionRequest,\n AudioTranscriptionResult,\n CapabilityAttachmentInput,\n ImageDescriptionRequest,\n ImageDescriptionResult,\n MediaCapability,\n MediaUnderstandingAttachmentDecision,\n MediaUnderstandingKind,\n MediaUnderstandingModelDecision,\n MediaUnderstandingOutput,\n MediaUnderstandingProvider,\n MediaUnderstandingResult,\n VideoDescriptionRequest,\n VideoDescriptionResult,\n} from './types.js';\n\nconst log = createLogger('MediaUnderstandingRunner');\n\nexport type { CapabilityAttachmentInput } from './types.js';\n\nexport interface RunCapabilityOptions {\n capability: MediaCapability;\n attachments: readonly CapabilityAttachmentInput[];\n /** Caller-supplied ordering. When set, overrides registry autoPriority. */\n providerOrder?: readonly string[];\n /**\n * Per-provider request builder. Returned shape MUST match the capability:\n * audio → AudioTranscriptionRequest\n * image → ImageDescriptionRequest\n * video → VideoDescriptionRequest\n * The runner does not synthesize api keys / urls — that's the caller's job\n * (typically reads from cfg.tools.media.audio.providers[providerId]).\n */\n buildRequest: (params: {\n provider: MediaUnderstandingProvider;\n attachment: CapabilityAttachmentInput;\n }) =>\n | AudioTranscriptionRequest\n | ImageDescriptionRequest\n | VideoDescriptionRequest\n | undefined;\n /** Optional global timeout signal (e.g. from agent-level cancellation). */\n signal?: AbortSignal;\n}\n\nconst KIND_BY_CAPABILITY: Record<MediaCapability, MediaUnderstandingKind> = {\n audio: 'audio.transcription',\n image: 'image.description',\n video: 'video.description',\n};\n\nfunction orderProviders(\n providers: MediaUnderstandingProvider[],\n capability: MediaCapability,\n override?: readonly string[],\n): MediaUnderstandingProvider[] {\n if (override && override.length > 0) {\n const lookup = new Map(providers.map((p) => [p.id.toLowerCase(), p]));\n const ordered: MediaUnderstandingProvider[] = [];\n const used = new Set<string>();\n for (const id of override) {\n const provider = lookup.get(id.toLowerCase());\n if (provider && !used.has(provider.id)) {\n ordered.push(provider);\n used.add(provider.id);\n }\n }\n // Append any registered providers not in the override (preserves capability\n // availability when the override list is incomplete).\n for (const provider of providers) {\n if (!used.has(provider.id)) {\n ordered.push(provider);\n }\n }\n return ordered;\n }\n return [...providers].sort((a, b) => {\n const aPriority = a.autoPriority?.[capability] ?? Number.MAX_SAFE_INTEGER;\n const bPriority = b.autoPriority?.[capability] ?? Number.MAX_SAFE_INTEGER;\n return aPriority - bPriority;\n });\n}\n\nfunction pickMethod(\n provider: MediaUnderstandingProvider,\n capability: MediaCapability,\n): ((req: never) => Promise<{ text: string; model?: string }>) | undefined {\n if (capability === 'audio') {\n return provider.transcribeAudio as (\n req: AudioTranscriptionRequest,\n ) => Promise<AudioTranscriptionResult>;\n }\n if (capability === 'image') {\n return provider.describeImage as (\n req: ImageDescriptionRequest,\n ) => Promise<ImageDescriptionResult>;\n }\n return provider.describeVideo as (\n req: VideoDescriptionRequest,\n ) => Promise<VideoDescriptionResult>;\n}\n\nexport async function runCapability(\n options: RunCapabilityOptions,\n): Promise<MediaUnderstandingResult> {\n const eligibleProviders = listProvidersForCapability(options.capability);\n\n // Capability outcome is 'disabled' when no registered provider implements it.\n if (eligibleProviders.length === 0) {\n log.debug(\n { capability: options.capability },\n `No providers registered for capability \"${options.capability}\"`,\n );\n return {\n decision: {\n capability: options.capability,\n outcome: 'disabled',\n attachments: options.attachments.map((a) => ({\n attachmentIndex: a.attachmentIndex,\n attempts: [],\n })),\n },\n outputs: [],\n };\n }\n\n if (options.attachments.length === 0) {\n return {\n decision: { capability: options.capability, outcome: 'no-attachment', attachments: [] },\n outputs: [],\n };\n }\n\n const providers = orderProviders(eligibleProviders, options.capability, options.providerOrder);\n const attachmentDecisions: MediaUnderstandingAttachmentDecision[] = [];\n const outputs: MediaUnderstandingOutput[] = [];\n\n for (const attachment of options.attachments) {\n options.signal?.throwIfAborted();\n\n const attempts: MediaUnderstandingModelDecision[] = [];\n let chosen: MediaUnderstandingModelDecision | undefined;\n\n for (const provider of providers) {\n const method = pickMethod(provider, options.capability);\n if (!method) {\n // Defensive: registry filter should already exclude these. Recorded as\n // skipped so callers can diagnose registry/method mismatches.\n attempts.push({\n provider: provider.id,\n type: 'provider',\n outcome: 'skipped',\n reason: `provider \"${provider.id}\" missing method for capability \"${options.capability}\"`,\n });\n continue;\n }\n const request = options.buildRequest({ provider, attachment });\n if (!request) {\n attempts.push({\n provider: provider.id,\n type: 'provider',\n outcome: 'skipped',\n reason: 'caller buildRequest returned undefined (likely missing config)',\n });\n continue;\n }\n const startedAt = Date.now();\n try {\n // We narrow `method` by capability above; cast through `unknown` to keep\n // a single call site without per-capability ceremony.\n const callResult = await (method as (req: unknown) => Promise<{ text: string; model?: string }>)(\n request,\n );\n const text = callResult.text?.trim() ?? '';\n if (!text) {\n attempts.push({\n provider: provider.id,\n type: 'provider',\n outcome: 'failed',\n reason: 'empty transcription/description text',\n model: callResult.model,\n latencyMs: Date.now() - startedAt,\n });\n continue;\n }\n chosen = {\n provider: provider.id,\n type: 'provider',\n outcome: 'success',\n model: callResult.model,\n latencyMs: Date.now() - startedAt,\n };\n attempts.push(chosen);\n outputs.push({\n kind: KIND_BY_CAPABILITY[options.capability],\n attachmentIndex: attachment.attachmentIndex,\n text,\n provider: provider.id,\n model: callResult.model,\n });\n break;\n } catch (error) {\n if (options.signal?.aborted) {\n throw error;\n }\n const reason = error instanceof Error ? error.message : String(error);\n log.warn(\n {\n err: error,\n providerId: provider.id,\n capability: options.capability,\n attachmentIndex: attachment.attachmentIndex,\n },\n `Provider \"${provider.id}\" failed for ${options.capability}: ${reason}`,\n );\n attempts.push({\n provider: provider.id,\n type: 'provider',\n outcome: 'failed',\n reason,\n latencyMs: Date.now() - startedAt,\n });\n }\n }\n\n attachmentDecisions.push({\n attachmentIndex: attachment.attachmentIndex,\n attempts,\n ...(chosen ? { chosen } : {}),\n });\n }\n\n const overallOutcome = attachmentDecisions.every((d) => d.chosen)\n ? 'success'\n : attachmentDecisions.some((d) => d.chosen)\n ? 'success' // partial success — at least one attachment succeeded\n : 'failed';\n\n return {\n decision: {\n capability: options.capability,\n outcome: overallOutcome,\n attachments: attachmentDecisions,\n },\n outputs,\n };\n}\n"],"mappings":"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"}
|
|
@@ -70,6 +70,8 @@ export interface MediaUnderstandingModelDecision {
|
|
|
70
70
|
type: 'provider' | 'cli';
|
|
71
71
|
outcome: MediaUnderstandingAttemptOutcome;
|
|
72
72
|
reason?: string;
|
|
73
|
+
/** Wall-clock time spent in this provider attempt. */
|
|
74
|
+
latencyMs?: number;
|
|
73
75
|
}
|
|
74
76
|
export interface MediaUnderstandingAttachmentDecision {
|
|
75
77
|
attachmentIndex: number;
|
|
@@ -98,6 +100,7 @@ export interface AudioTranscriptionRequest {
|
|
|
98
100
|
prompt?: string;
|
|
99
101
|
query?: Record<string, string | number | boolean>;
|
|
100
102
|
timeoutMs: number;
|
|
103
|
+
signal?: AbortSignal;
|
|
101
104
|
}
|
|
102
105
|
export interface AudioTranscriptionResult {
|
|
103
106
|
text: string;
|
|
@@ -156,6 +159,10 @@ export interface MediaUnderstandingProvider {
|
|
|
156
159
|
* Defaults to true.
|
|
157
160
|
*/
|
|
158
161
|
requiresApiKey?: boolean;
|
|
162
|
+
/** Optional runtime readiness check for bundled providers such as local STT. */
|
|
163
|
+
isConfigured?: (options?: {
|
|
164
|
+
model?: string;
|
|
165
|
+
}) => boolean;
|
|
159
166
|
/** Lower number = higher priority in auto-selection. */
|
|
160
167
|
autoPriority?: Partial<Record<MediaCapability, number>>;
|
|
161
168
|
/** True when the provider can natively ingest PDF (no OCR pre-step needed). */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ConfigSchema, init_schema } from "../config/schema.js";
|
|
2
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
3
2
|
import { init_logger } from "../utils/logger.js";
|
|
3
|
+
import { ConfigSchema, init_schema } from "../config/schema.js";
|
|
4
4
|
import { listRegisteredMigrations } from "./registry.js";
|
|
5
5
|
import { defaultCapabilityPresetMigration } from "./config/default-capability-preset.js";
|
|
6
6
|
import { dirname, join } from "node:path";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../utils/logger.js";
|
|
3
|
-
import { getDefaultModelSync, init_providers, resolveModel } from "../providers/index.js";
|
|
4
|
-
import { publishAutomationProductEvent } from "../automations/product-events.js";
|
|
5
|
-
import { completeWithResolvedCredentials } from "../providers/model-call.js";
|
|
6
3
|
import { buildNoteAttachmentRef } from "./attachment-ref.js";
|
|
7
4
|
import { parseNoteMarkdown } from "./note-markdown.js";
|
|
8
5
|
import { changedFieldsFromPatch, emitActivity, previewText, systemActivityActor, systemActivitySource } from "../activity/emitter.js";
|
|
6
|
+
import { getDefaultModelSync, init_providers, resolveModel } from "../providers/index.js";
|
|
7
|
+
import { publishAutomationProductEvent } from "../automations/product-events.js";
|
|
8
|
+
import { completeWithResolvedCredentials } from "../providers/model-call.js";
|
|
9
9
|
import { NotesStore } from "./store.js";
|
|
10
10
|
import { partitionAttachmentsByReference } from "./note-attachment-sync.js";
|
|
11
11
|
import { buildNoteAgentContextArtifact, getCachedNoteAgentContextArtifact } from "./agent-context.js";
|
package/dist/src/notes/store.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../utils/logger.js";
|
|
3
|
-
import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
|
|
4
3
|
import { requireXopcDatabase } from "../storage/sqlite/connection.js";
|
|
5
4
|
import { buildNoteIndexMeta } from "./note-index-meta.js";
|
|
6
5
|
import { deleteNoteRecord, getNoteRecord, listNoteRecords, upsertNoteRecord } from "../storage/sqlite/notes-repository.js";
|
|
7
6
|
import { deleteNoteAgentContextRecord } from "../storage/sqlite/note-agent-context-repository.js";
|
|
8
7
|
import "../storage/sqlite/index.js";
|
|
8
|
+
import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
|
|
9
9
|
import { resolveNoteHistoryDir, resolveNoteMediaDir } from "./paths.js";
|
|
10
10
|
import { join } from "node:path";
|
|
11
11
|
import { randomUUID } from "node:crypto";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getSessionMetadata } from "../storage/sqlite/session-repository.js";
|
|
2
2
|
import "../storage/sqlite/index.js";
|
|
3
|
-
import { ProjectStore } from "./project-store.js";
|
|
4
3
|
import { changedFieldsFromPatch, emitActivity, systemActivityActor, systemActivitySource } from "../activity/emitter.js";
|
|
4
|
+
import { ProjectStore } from "./project-store.js";
|
|
5
5
|
import { bindGoalToProject, listProjectGoalIds, unbindGoalFromProject } from "./goal-bind.js";
|
|
6
6
|
import { bindSessionToProject, listProjectSessionKeys, unbindSessionFromProject } from "./session-bind.js";
|
|
7
7
|
import { ProjectWorkspaceConflictError, ProjectWorkspaceMissingError, canonicalWorkspacePath, ensureWorkspaceDirectory, inferProjectNameFromWorkspaceRoot, isPathSameOrInsideWorkspace, isSafeAutoCreateWorkspaceRoot, resolveWorkspaceProjectRoot, workspaceDirectoryExists } from "./workspace-project.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
2
1
|
import { isXopcDatabaseOpen } from "../storage/sqlite/connection.js";
|
|
3
2
|
import { getSessionMetadata } from "../storage/sqlite/session-repository.js";
|
|
4
3
|
import "../storage/sqlite/index.js";
|
|
4
|
+
import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
5
5
|
import { projectWorkspacePath } from "../session/session-workspace.js";
|
|
6
6
|
import { ProjectStore } from "./project-store.js";
|
|
7
7
|
//#region src/projects/workspace.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import { DEFAULT_ACCOUNT_ID, init_account_id, normalizeAccountId, normalizeOptionalAccountId } from "./account-id.js";
|
|
3
2
|
import { init_string_coerce, normalizeLowercaseStringOrEmpty } from "../utils/string-coerce.js";
|
|
3
|
+
import { DEFAULT_ACCOUNT_ID, init_account_id, normalizeAccountId, normalizeOptionalAccountId } from "./account-id.js";
|
|
4
4
|
import { getSubagentDepth, init_session_key_utils, isAcpSessionKey, isCronSessionKey, isSubagentSessionKey, parseAgentSessionKey, parseThreadSessionSuffix } from "./session-key-utils.js";
|
|
5
5
|
//#region src/routing/agent-session-key.ts
|
|
6
6
|
function normalizeToken(value) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import { init_agent_scope, resolveDefaultAgentId } from "../agent/agent-scope.js";
|
|
3
2
|
import { init_account_id, normalizeAccountId } from "./account-id.js";
|
|
4
3
|
import { buildAgentMainSessionKey, buildAgentPeerSessionKey, init_agent_session_key, normalizeSessionKey } from "./agent-session-key.js";
|
|
4
|
+
import { init_agent_scope, resolveDefaultAgentId } from "../agent/agent-scope.js";
|
|
5
5
|
import { buildSessionKey, init_session_key, parseSessionKey } from "./session-key.js";
|
|
6
6
|
import { init_bindings, parseBindingRules, resolveRoute as resolveRoute$1 } from "./bindings.js";
|
|
7
7
|
//#region src/routing/resolve-route.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { init_agent_scope, listAgentEntries, resolveAgentIdByWorkspacePath, resolveDefaultAgentId } from "../agent/agent-scope.js";
|
|
2
1
|
import { init_string_coerce, normalizeLowercaseStringOrEmpty } from "../utils/string-coerce.js";
|
|
3
2
|
import { parseAgentSessionKey } from "./session-key-utils.js";
|
|
4
3
|
import { buildAgentMainSessionKey, init_agent_session_key, normalizeAgentId, normalizeMainKey } from "./agent-session-key.js";
|
|
4
|
+
import { init_agent_scope, listAgentEntries, resolveAgentIdByWorkspacePath, resolveDefaultAgentId } from "../agent/agent-scope.js";
|
|
5
5
|
import { randomUUID } from "node:crypto";
|
|
6
6
|
//#region src/routing/resolve-tui-session-key.ts
|
|
7
7
|
init_agent_scope();
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { SessionConfigSchema, init_schema } from "../config/schema.js";
|
|
2
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
3
2
|
import { init_logger } from "../utils/logger.js";
|
|
4
3
|
import { requireXopcDatabase } from "../storage/sqlite/connection.js";
|
|
5
4
|
import "../storage/sqlite/index.js";
|
|
5
|
+
import { SessionConfigSchema, init_schema } from "../config/schema.js";
|
|
6
6
|
import { evaluateSessionFreshness, resolveSessionResetPolicy } from "./reset-policy.js";
|
|
7
7
|
import { resolveChannelResetConfig, resolveSessionResetType } from "./reset-type.js";
|
|
8
8
|
import { resolveSessionLifecycleTimestamps } from "./lifecycle-timestamps.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { SessionConfigSchema, init_schema } from "../config/schema.js";
|
|
2
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
3
2
|
import { init_logger } from "../utils/logger.js";
|
|
4
3
|
import { requireXopcDatabase } from "../storage/sqlite/connection.js";
|
|
5
4
|
import { findSessionKeyBySessionId, getSessionMetadata, getSessionPersistedLevels } from "../storage/sqlite/session-repository.js";
|
|
6
5
|
import "../storage/sqlite/index.js";
|
|
6
|
+
import { SessionConfigSchema, init_schema } from "../config/schema.js";
|
|
7
7
|
import { normalizeThinkLevel, normalizeVerboseLevel } from "../agent/transcript/thinking-types.js";
|
|
8
8
|
import { evaluateSessionFreshness, resolveSessionResetPolicy } from "./reset-policy.js";
|
|
9
9
|
import { resolveChannelResetConfig, resolveSessionResetType } from "./reset-type.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { isCronSessionKey } from "../routing/session-key-utils.js";
|
|
2
|
-
import { init_session_key, parseSessionKey } from "../routing/session-key.js";
|
|
3
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
4
2
|
import { init_logger } from "../utils/logger.js";
|
|
3
|
+
import { isCronSessionKey } from "../routing/session-key-utils.js";
|
|
4
|
+
import { init_session_key, parseSessionKey } from "../routing/session-key.js";
|
|
5
5
|
import { init_providers, resolveModel } from "../providers/index.js";
|
|
6
6
|
import { completeWithResolvedCredentials } from "../providers/model-call.js";
|
|
7
7
|
import { readAgentMessageContent } from "../agent/memory/agent-message-access.js";
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { init_paths_state, resolveStateDir } from "../config/paths-state.js";
|
|
2
|
-
import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
3
2
|
import { createLogger } from "../utils/logger/index.js";
|
|
4
3
|
import { init_logger } from "../utils/logger.js";
|
|
5
4
|
import { requireXopcDatabase } from "../storage/sqlite/connection.js";
|
|
@@ -9,6 +8,7 @@ import { estimateTokensFromMessages } from "../storage/sqlite/row-mappers.js";
|
|
|
9
8
|
import { deleteSessionRecord, ensureSessionRecord, findSessionKeyBySessionId, getGlobalSessionStats, getSessionMetadata, listSessionMetadata, listSessionsByAgent, patchSessionMetadata, resetSessionRecord } from "../storage/sqlite/session-repository.js";
|
|
10
9
|
import { appendTranscriptEntry, captureCompactionCheckpoint, getCompactionCheckpointDetail, listCompactionCheckpoints, loadCheckpointRows, loadLlmMessagesForSession, loadTranscriptRowsForSession, paginateTranscriptMessages, replaceTranscriptRows, restoreCompactionCheckpoint } from "../storage/sqlite/transcript-repository.js";
|
|
11
10
|
import "../storage/sqlite/index.js";
|
|
11
|
+
import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
12
12
|
import { readPostCompactionContext } from "../agent/reply/post-compaction-context.js";
|
|
13
13
|
import { SessionCompactor } from "../agent/memory/compaction.js";
|
|
14
14
|
import { SlidingWindow } from "../agent/memory/window.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { resolveXopcDatabasePath } from "../../config/paths-state.js";
|
|
2
2
|
import { createLogger } from "../../utils/logger/index.js";
|
|
3
3
|
import { init_logger } from "../../utils/logger.js";
|
|
4
|
+
import { ensureXopcDatabaseSchema } from "./schema.js";
|
|
4
5
|
import { requireNodeSqlite } from "../../infra/node-sqlite.js";
|
|
5
6
|
import { installSqliteTransientRejectionHandler } from "../../infra/unhandled-rejections.js";
|
|
6
|
-
import { ensureXopcDatabaseSchema } from "./schema.js";
|
|
7
7
|
import path from "node:path";
|
|
8
8
|
import fs from "node:fs";
|
|
9
9
|
import childProcess from "node:child_process";
|
|
@@ -13,7 +13,7 @@ export { deleteNoteRecord, getNoteRecord, listNoteRecords, upsertNoteRecord, } f
|
|
|
13
13
|
export { deleteNoteAgentContextRecord, getNoteAgentContextRecord, upsertNoteAgentContextRecord, type NoteAgentContextRecord, } from './note-agent-context-repository.js';
|
|
14
14
|
export { resolveAgentIdFromMemoriesDir, searchMemoryIndex, syncMemoryIndex, type MemorySearchHit, } from './memory-index-repository.js';
|
|
15
15
|
export { appendMemorySignal, appendMemoryTraceEvent, deleteMemoryRecord, findLatestMemoryInjectTrace, getMemoryProviderState, getMemoryRecord, listMemorySignals, listMemoryTraceEvents, listMemoryRecords, searchMemoryRecords, setMemoryProviderState, setMemoryTraceFeedback, setLatestMemoryInjectFeedback, summarizeMemoryRecallFeedback, summarizeUserUnderstandingQuality, USER_UNDERSTANDING_REMEDIATION_POLICY, upsertMemoryRecord, type AppendMemorySignalInput, type AppendMemoryTraceEventInput, type FindLatestMemoryInjectTraceInput, type ListMemoryRecordsOptions, type MemoryRecallFeedbackSummary, type MemoryFeedbackRemediationResult, type MemorySignalRowPayload, type MemoryTraceFeedback, type MemoryTraceEventPayload, type UserUnderstandingQualityMetrics, type SearchMemoryRecordsOptions, type SetMemoryTraceFeedbackInput, type SetLatestMemoryInjectFeedbackInput, type UpsertMemoryRecordInput, } from './memory-records-repository.js';
|
|
16
|
-
export { attachMemoryEvidence, finishKnowledgeSyncRun, getKnowledgeSourceCursor, getKnowledgeSourceItem, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, setKnowledgeSourceItemSynthesisStatus, setKnowledgeSourceCursor, startKnowledgeSyncRun, upsertKnowledgeSourceItems, } from './knowledge-repository.js';
|
|
16
|
+
export { attachMemoryEvidence, claimKnowledgeSourceItems, completeKnowledgeSourceItemSynthesis, deleteMemoryEvidenceForRecord, finishKnowledgeSyncRun, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, listKnowledgeSourceItems, listKnowledgeSourceChanges, listKnowledgeSyncRuns, listMemoryEvidence, setKnowledgeSourceItemSynthesisStatus, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, startKnowledgeSyncRun, upsertKnowledgeSourceItems, } from './knowledge-repository.js';
|
|
17
17
|
export { deleteSessionConfig, getSessionConfig, hasSessionConfig, setSessionConfig, updateSessionConfig, } from './config-repository.js';
|
|
18
18
|
export { createObjectLinkRecord, getActivityEventRecord, listActivityRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, recordActivityEvent, } from './activity-repository.js';
|
|
19
19
|
export { appendConnectorExecutionAudit, claimConnectorWebhookDelivery, completeConnectorWebhookDelivery, consumeConnectorApproval, createConnectorApproval, decideConnectorApproval, deleteConnectorConnection, deleteConnectorInstallation, getConnectorConnection, getConnectorApproval, getConnectorInstallation, getCachedConnectorCatalogEntry, listCachedConnectorCatalogEntries, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, releaseConnectorWebhookDelivery, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, type CachedConnectorCatalogEntry, } from './connector-repository.js';
|
|
@@ -14,10 +14,10 @@ import { deleteNoteRecord, getNoteRecord, listNoteRecords, upsertNoteRecord } fr
|
|
|
14
14
|
import { deleteNoteAgentContextRecord, getNoteAgentContextRecord, upsertNoteAgentContextRecord } from "./note-agent-context-repository.js";
|
|
15
15
|
import { resolveAgentIdFromMemoriesDir, searchMemoryIndex, syncMemoryIndex } from "./memory-index-repository.js";
|
|
16
16
|
import { USER_UNDERSTANDING_REMEDIATION_POLICY, appendMemorySignal, appendMemoryTraceEvent, deleteMemoryRecord, findLatestMemoryInjectTrace, getMemoryProviderState, getMemoryRecord, listMemoryRecords, listMemorySignals, listMemoryTraceEvents, searchMemoryRecords, setLatestMemoryInjectFeedback, setMemoryProviderState, setMemoryTraceFeedback, summarizeMemoryRecallFeedback, summarizeUserUnderstandingQuality, upsertMemoryRecord } from "./memory-records-repository.js";
|
|
17
|
-
import { attachMemoryEvidence, finishKnowledgeSyncRun, getKnowledgeSourceCursor, getKnowledgeSourceItem, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, startKnowledgeSyncRun, upsertKnowledgeSourceItems } from "./knowledge-repository.js";
|
|
17
|
+
import { attachMemoryEvidence, claimKnowledgeSourceItems, completeKnowledgeSourceItemSynthesis, deleteMemoryEvidenceForRecord, finishKnowledgeSyncRun, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, startKnowledgeSyncRun, upsertKnowledgeSourceItems } from "./knowledge-repository.js";
|
|
18
18
|
import { deleteSessionConfig, getSessionConfig, hasSessionConfig, setSessionConfig, updateSessionConfig } from "./config-repository.js";
|
|
19
19
|
import { createObjectLinkRecord, getActivityEventRecord, listActivityRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, recordActivityEvent } from "./activity-repository.js";
|
|
20
20
|
import { appendConnectorExecutionAudit, claimConnectorWebhookDelivery, completeConnectorWebhookDelivery, consumeConnectorApproval, createConnectorApproval, decideConnectorApproval, deleteConnectorConnection, deleteConnectorInstallation, getCachedConnectorCatalogEntry, getConnectorApproval, getConnectorConnection, getConnectorInstallation, listCachedConnectorCatalogEntries, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, releaseConnectorWebhookDelivery, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation } from "./connector-repository.js";
|
|
21
21
|
import { getUserTrustPolicy, setUserTrustPolicy } from "./user-trust-repository.js";
|
|
22
22
|
import { getUserProfilePromptState, setUserProfilePromptState } from "./user-profile-setup-repository.js";
|
|
23
|
-
export { DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, SCHEMA_META_SCHEMA_VERSION_KEY, USER_UNDERSTANDING_REMEDIATION_POLICY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, appendConnectorExecutionAudit, appendMemorySignal, appendMemoryTraceEvent, appendTranscriptEntry, applyPendingMigrations, attachMemoryEvidence, buildDefaultSessionMetadata, buildGlobalSessionStats, captureCompactionCheckpoint, claimConnectorWebhookDelivery, classifyStoredRow, closeXopcDatabase, completeConnectorWebhookDelivery, consumeConnectorApproval, createConnectorApproval, createObjectLinkRecord, decideConnectorApproval, deleteConnectorConnection, deleteConnectorInstallation, deleteMemoryRecord, deleteNoteAgentContextRecord, deleteNoteRecord, deleteSessionConfig, deleteSessionRecord, discoverSqlMigrations, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, findLatestMemoryInjectTrace, findSessionKeyBySessionId, finishKnowledgeSyncRun, getActivityEventRecord, getCachedConnectorCatalogEntry, getCompactionCheckpointDetail, getConnectorApproval, getConnectorConnection, getConnectorInstallation, getCurrentSessionId, getGlobalSessionStats, getKnowledgeSourceCursor, getKnowledgeSourceItem, getMemoryProviderState, getMemoryRecord, getNoteAgentContextRecord, getNoteRecord, getSessionConfig, getSessionMetadata, getSessionPersistedLevels, getSqliteDatabase, getUserProfilePromptState, getUserTrustPolicy, getXopcDatabase, hasSessionConfig, incrementSessionStatsOnAppend, inspectSchemaMigrationStatus, isXopcDatabaseOpen, listActivityRecords, listCachedConnectorCatalogEntries, listCompactionCheckpoints, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, listMemoryRecords, listMemorySignals, listMemoryTraceEvents, listNoteRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, loadCheckpointRows, loadLlmMessagesForSession, loadTranscriptRows, loadTranscriptRowsForSession, metadataToSessionInsert, openXopcDatabase, paginateTranscriptMessages, patchSessionMetadata, readSchemaVersion, readSchemaVersionForTest, recordActivityEvent, releaseConnectorWebhookDelivery, replaceTranscriptRows, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveAgentIdFromMemoriesDir, resolveMigrationsDir, resolveSessionAgentId, resolveXopcDatabasePath, restoreCompactionCheckpoint, runSqliteWriteTransaction, searchMemoryIndex, searchMemoryRecords, sessionConfigRowToConfig, sessionRowToMetadata, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, setLatestMemoryInjectFeedback, setMemoryProviderState, setMemoryTraceFeedback, setSessionConfig, setUserProfilePromptState, setUserTrustPolicy, startKnowledgeSyncRun, summarizeMemoryRecallFeedback, summarizeUserUnderstandingQuality, syncMemoryIndex, transcriptEntryRowToStoredRow, updateSessionConfig, updateSessionStats, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, upsertKnowledgeSourceItems, upsertMemoryRecord, upsertNoteAgentContextRecord, upsertNoteRecord };
|
|
23
|
+
export { DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, SCHEMA_META_SCHEMA_VERSION_KEY, USER_UNDERSTANDING_REMEDIATION_POLICY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, appendConnectorExecutionAudit, appendMemorySignal, appendMemoryTraceEvent, appendTranscriptEntry, applyPendingMigrations, attachMemoryEvidence, buildDefaultSessionMetadata, buildGlobalSessionStats, captureCompactionCheckpoint, claimConnectorWebhookDelivery, claimKnowledgeSourceItems, classifyStoredRow, closeXopcDatabase, completeConnectorWebhookDelivery, completeKnowledgeSourceItemSynthesis, consumeConnectorApproval, createConnectorApproval, createObjectLinkRecord, decideConnectorApproval, deleteConnectorConnection, deleteConnectorInstallation, deleteMemoryEvidenceForRecord, deleteMemoryRecord, deleteNoteAgentContextRecord, deleteNoteRecord, deleteSessionConfig, deleteSessionRecord, discoverSqlMigrations, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, findLatestMemoryInjectTrace, findSessionKeyBySessionId, finishKnowledgeSyncRun, getActivityEventRecord, getCachedConnectorCatalogEntry, getCompactionCheckpointDetail, getConnectorApproval, getConnectorConnection, getConnectorInstallation, getCurrentSessionId, getGlobalSessionStats, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, getMemoryProviderState, getMemoryRecord, getNoteAgentContextRecord, getNoteRecord, getSessionConfig, getSessionMetadata, getSessionPersistedLevels, getSqliteDatabase, getUserProfilePromptState, getUserTrustPolicy, getXopcDatabase, hasSessionConfig, incrementSessionStatsOnAppend, inspectSchemaMigrationStatus, isXopcDatabaseOpen, listActivityRecords, listCachedConnectorCatalogEntries, listCompactionCheckpoints, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, listMemoryRecords, listMemorySignals, listMemoryTraceEvents, listNoteRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, loadCheckpointRows, loadLlmMessagesForSession, loadTranscriptRows, loadTranscriptRowsForSession, metadataToSessionInsert, openXopcDatabase, paginateTranscriptMessages, patchSessionMetadata, readSchemaVersion, readSchemaVersionForTest, recordActivityEvent, releaseConnectorWebhookDelivery, replaceTranscriptRows, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveAgentIdFromMemoriesDir, resolveMigrationsDir, resolveSessionAgentId, resolveXopcDatabasePath, restoreCompactionCheckpoint, runSqliteWriteTransaction, searchMemoryIndex, searchMemoryRecords, sessionConfigRowToConfig, sessionRowToMetadata, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, setLatestMemoryInjectFeedback, setMemoryProviderState, setMemoryTraceFeedback, setSessionConfig, setUserProfilePromptState, setUserTrustPolicy, startKnowledgeSyncRun, summarizeMemoryRecallFeedback, summarizeUserUnderstandingQuality, syncMemoryIndex, transcriptEntryRowToStoredRow, updateSessionConfig, updateSessionStats, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, upsertKnowledgeSourceItems, upsertMemoryRecord, upsertNoteAgentContextRecord, upsertNoteRecord };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { KnowledgeSourceItem, KnowledgeSourceItemInput, KnowledgeSyncRun, KnowledgeSyncRunStatus, KnowledgeSynthesisStatus } from '../../knowledge/types.js';
|
|
1
|
+
import type { KnowledgeSourceChange, KnowledgeSourceItem, KnowledgeSourceItemInput, KnowledgeSyncRun, KnowledgeSyncRunStatus, KnowledgeSynthesisPipeline, KnowledgeSynthesisStatus } from '../../knowledge/types.js';
|
|
2
2
|
import type { MemoryEvidence, MemoryEvidenceRelation } from '../../agent/memory/types.js';
|
|
3
3
|
export declare function startKnowledgeSyncRun(input: {
|
|
4
4
|
sourceInstanceId: string;
|
|
@@ -30,6 +30,13 @@ export declare function upsertKnowledgeSourceItems(inputs: KnowledgeSourceItemIn
|
|
|
30
30
|
unchanged: number;
|
|
31
31
|
};
|
|
32
32
|
export declare function getKnowledgeSourceItem(itemId: string): KnowledgeSourceItem | null;
|
|
33
|
+
export declare function listKnowledgeSourceChanges(options?: {
|
|
34
|
+
sourceInstanceId?: string;
|
|
35
|
+
afterSequence?: number;
|
|
36
|
+
limit?: number;
|
|
37
|
+
}): KnowledgeSourceChange[];
|
|
38
|
+
export declare function getKnowledgeConsumerWatermark(consumerId: string, sourceInstanceId: string): number;
|
|
39
|
+
export declare function setKnowledgeConsumerWatermark(consumerId: string, sourceInstanceId: string, sequence: number, nowMs?: number): void;
|
|
33
40
|
export declare function listKnowledgeSourceItems(options?: {
|
|
34
41
|
sourceInstanceId?: string;
|
|
35
42
|
synthesisStatus?: KnowledgeSynthesisStatus;
|
|
@@ -38,6 +45,23 @@ export declare function listKnowledgeSourceItems(options?: {
|
|
|
38
45
|
offset?: number;
|
|
39
46
|
}): KnowledgeSourceItem[];
|
|
40
47
|
export declare function setKnowledgeSourceItemSynthesisStatus(itemIds: string[], status: KnowledgeSynthesisStatus, nowMs?: number): number;
|
|
48
|
+
export declare function claimKnowledgeSourceItems(options: {
|
|
49
|
+
workerId: string;
|
|
50
|
+
sourceInstanceId?: string;
|
|
51
|
+
synthesisPipeline?: KnowledgeSynthesisPipeline;
|
|
52
|
+
limit?: number;
|
|
53
|
+
leaseMs?: number;
|
|
54
|
+
retryDelayMs?: number;
|
|
55
|
+
maxAttempts?: number;
|
|
56
|
+
nowMs?: number;
|
|
57
|
+
}): KnowledgeSourceItem[];
|
|
58
|
+
export declare function completeKnowledgeSourceItemSynthesis(input: {
|
|
59
|
+
itemId: string;
|
|
60
|
+
workerId: string;
|
|
61
|
+
status: 'completed' | 'failed' | 'ignored';
|
|
62
|
+
error?: string;
|
|
63
|
+
nowMs?: number;
|
|
64
|
+
}): boolean;
|
|
41
65
|
export declare function attachMemoryEvidence(input: {
|
|
42
66
|
recordId: string;
|
|
43
67
|
sourceItemId?: string;
|
|
@@ -47,4 +71,5 @@ export declare function attachMemoryEvidence(input: {
|
|
|
47
71
|
observedAt?: string;
|
|
48
72
|
nowMs?: number;
|
|
49
73
|
}): MemoryEvidence;
|
|
74
|
+
export declare function deleteMemoryEvidenceForRecord(recordId: string, relation?: MemoryEvidenceRelation): number;
|
|
50
75
|
export declare function listMemoryEvidence(recordId: string): MemoryEvidence[];
|
|
@@ -40,12 +40,29 @@ function sourceItemFromRow(row) {
|
|
|
40
40
|
metadata: parseRecord(row.metadata_json),
|
|
41
41
|
sensitivity: row.sensitivity,
|
|
42
42
|
retentionClass: row.retention_class,
|
|
43
|
+
synthesisPipeline: row.synthesis_pipeline,
|
|
43
44
|
synthesisStatus: row.synthesis_status,
|
|
45
|
+
synthesisAttempts: row.synthesis_attempts,
|
|
46
|
+
...timestampToIso(row.synthesis_claimed_at) ? { synthesisClaimedAt: timestampToIso(row.synthesis_claimed_at) } : {},
|
|
47
|
+
...row.synthesis_claimed_by ? { synthesisClaimedBy: row.synthesis_claimed_by } : {},
|
|
48
|
+
...row.synthesis_error ? { synthesisError: row.synthesis_error } : {},
|
|
44
49
|
...timestampToIso(row.deleted_at) ? { deletedAt: timestampToIso(row.deleted_at) } : {},
|
|
45
50
|
createdAt: new Date(row.created_at).toISOString(),
|
|
46
51
|
updatedAt: new Date(row.updated_at).toISOString()
|
|
47
52
|
};
|
|
48
53
|
}
|
|
54
|
+
function sourceChangeFromRow(row) {
|
|
55
|
+
return {
|
|
56
|
+
sequence: row.sequence,
|
|
57
|
+
id: row.change_id,
|
|
58
|
+
sourceInstanceId: row.source_instance_id,
|
|
59
|
+
sourceItemId: row.source_item_id,
|
|
60
|
+
kind: row.change_kind,
|
|
61
|
+
...row.old_hash ? { oldHash: row.old_hash } : {},
|
|
62
|
+
...row.new_hash ? { newHash: row.new_hash } : {},
|
|
63
|
+
changedAt: new Date(row.changed_at).toISOString()
|
|
64
|
+
};
|
|
65
|
+
}
|
|
49
66
|
function syncRunFromRow(row) {
|
|
50
67
|
return {
|
|
51
68
|
id: row.run_id,
|
|
@@ -141,8 +158,8 @@ function upsertKnowledgeSourceItems(inputs, nowMs = Date.now()) {
|
|
|
141
158
|
item_id, source_instance_id, external_id, item_type, author_role,
|
|
142
159
|
occurred_at, source_updated_at, content_hash, normalized_text,
|
|
143
160
|
payload_ref, metadata_json, sensitivity, retention_class,
|
|
144
|
-
synthesis_status, deleted_at, created_at, updated_at
|
|
145
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
161
|
+
synthesis_pipeline, synthesis_status, deleted_at, created_at, updated_at
|
|
162
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
146
163
|
ON CONFLICT(source_instance_id, external_id) DO UPDATE SET
|
|
147
164
|
item_type = excluded.item_type,
|
|
148
165
|
author_role = excluded.author_role,
|
|
@@ -154,11 +171,21 @@ function upsertKnowledgeSourceItems(inputs, nowMs = Date.now()) {
|
|
|
154
171
|
metadata_json = excluded.metadata_json,
|
|
155
172
|
sensitivity = excluded.sensitivity,
|
|
156
173
|
retention_class = excluded.retention_class,
|
|
174
|
+
synthesis_pipeline = excluded.synthesis_pipeline,
|
|
157
175
|
synthesis_status = excluded.synthesis_status,
|
|
176
|
+
synthesis_attempts = 0,
|
|
177
|
+
synthesis_claimed_at = NULL,
|
|
178
|
+
synthesis_claimed_by = NULL,
|
|
179
|
+
synthesis_error = NULL,
|
|
158
180
|
deleted_at = excluded.deleted_at,
|
|
159
|
-
updated_at = excluded.updated_at`).run(id, input.sourceInstanceId, input.externalId, input.itemType, input.authorRole ?? null, parseTimestamp(input.occurredAt), parseTimestamp(input.sourceUpdatedAt), input.contentHash, input.normalizedText ?? null, input.payloadRef ?? null, JSON.stringify(input.metadata ?? {}), input.sensitivity ?? "normal", input.retentionClass ?? "bounded", input.synthesisStatus ?? "pending", parseTimestamp(input.deletedAt), existing?.created_at ?? nowMs, nowMs);
|
|
181
|
+
updated_at = excluded.updated_at`).run(id, input.sourceInstanceId, input.externalId, input.itemType, input.authorRole ?? null, parseTimestamp(input.occurredAt), parseTimestamp(input.sourceUpdatedAt), input.contentHash, input.normalizedText ?? null, input.payloadRef ?? null, JSON.stringify(input.metadata ?? {}), input.sensitivity ?? "normal", input.retentionClass ?? "bounded", input.synthesisPipeline ?? "user_understanding", input.synthesisStatus ?? "pending", parseTimestamp(input.deletedAt), existing?.created_at ?? nowMs, nowMs);
|
|
160
182
|
const row = db.prepare(`SELECT * FROM knowledge_source_items WHERE item_id = ?`).get(id);
|
|
161
183
|
items.push(sourceItemFromRow(row));
|
|
184
|
+
const changeKind = input.deletedAt ? "deleted" : existing ? "modified" : "added";
|
|
185
|
+
db.prepare(`INSERT INTO knowledge_source_changes (
|
|
186
|
+
change_id, source_instance_id, source_item_id, change_kind,
|
|
187
|
+
old_hash, new_hash, changed_at
|
|
188
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?)`).run(randomUUID(), input.sourceInstanceId, id, changeKind, existing?.content_hash ?? null, input.deletedAt ? null : input.contentHash, nowMs);
|
|
162
189
|
if (existing) updated += 1;
|
|
163
190
|
else created += 1;
|
|
164
191
|
}
|
|
@@ -174,6 +201,36 @@ function getKnowledgeSourceItem(itemId) {
|
|
|
174
201
|
const row = getSqliteDatabase().prepare(`SELECT * FROM knowledge_source_items WHERE item_id = ?`).get(itemId);
|
|
175
202
|
return row ? sourceItemFromRow(row) : null;
|
|
176
203
|
}
|
|
204
|
+
function listKnowledgeSourceChanges(options = {}) {
|
|
205
|
+
const where = [];
|
|
206
|
+
const params = [];
|
|
207
|
+
if (options.sourceInstanceId) {
|
|
208
|
+
where.push("source_instance_id = ?");
|
|
209
|
+
params.push(options.sourceInstanceId);
|
|
210
|
+
}
|
|
211
|
+
if (options.afterSequence != null) {
|
|
212
|
+
where.push("sequence > ?");
|
|
213
|
+
params.push(Math.max(0, options.afterSequence));
|
|
214
|
+
}
|
|
215
|
+
const limit = Math.max(1, Math.min(1e3, options.limit ?? 100));
|
|
216
|
+
return getSqliteDatabase().prepare(`SELECT * FROM knowledge_source_changes
|
|
217
|
+
${where.length > 0 ? `WHERE ${where.join(" AND ")}` : ""}
|
|
218
|
+
ORDER BY sequence ASC LIMIT ?`).all(...params, limit).map(sourceChangeFromRow);
|
|
219
|
+
}
|
|
220
|
+
function getKnowledgeConsumerWatermark(consumerId, sourceInstanceId) {
|
|
221
|
+
return getSqliteDatabase().prepare(`SELECT last_sequence FROM knowledge_consumer_watermarks
|
|
222
|
+
WHERE consumer_id = ? AND source_instance_id = ?`).get(consumerId, sourceInstanceId)?.last_sequence ?? 0;
|
|
223
|
+
}
|
|
224
|
+
function setKnowledgeConsumerWatermark(consumerId, sourceInstanceId, sequence, nowMs = Date.now()) {
|
|
225
|
+
runSqliteWriteTransaction((db) => {
|
|
226
|
+
db.prepare(`INSERT INTO knowledge_consumer_watermarks (
|
|
227
|
+
consumer_id, source_instance_id, last_sequence, updated_at
|
|
228
|
+
) VALUES (?, ?, ?, ?)
|
|
229
|
+
ON CONFLICT(consumer_id, source_instance_id) DO UPDATE SET
|
|
230
|
+
last_sequence = MAX(last_sequence, excluded.last_sequence),
|
|
231
|
+
updated_at = excluded.updated_at`).run(consumerId, sourceInstanceId, Math.max(0, sequence), nowMs);
|
|
232
|
+
});
|
|
233
|
+
}
|
|
177
234
|
function listKnowledgeSourceItems(options = {}) {
|
|
178
235
|
const where = [];
|
|
179
236
|
const params = [];
|
|
@@ -202,15 +259,66 @@ function setKnowledgeSourceItemSynthesisStatus(itemIds, status, nowMs = Date.now
|
|
|
202
259
|
return Number(result.changes);
|
|
203
260
|
});
|
|
204
261
|
}
|
|
262
|
+
function claimKnowledgeSourceItems(options) {
|
|
263
|
+
const now = options.nowMs ?? Date.now();
|
|
264
|
+
const leaseCutoff = now - Math.max(1e3, options.leaseMs ?? 5 * 6e4);
|
|
265
|
+
const retryCutoff = now - Math.max(1e3, options.retryDelayMs ?? 3e4);
|
|
266
|
+
const limit = Math.max(1, Math.min(100, options.limit ?? 20));
|
|
267
|
+
const maxAttempts = Math.max(1, options.maxAttempts ?? 3);
|
|
268
|
+
return runSqliteWriteTransaction((db) => {
|
|
269
|
+
const rows = db.prepare(`SELECT * FROM knowledge_source_items
|
|
270
|
+
WHERE synthesis_attempts < ?
|
|
271
|
+
${options.sourceInstanceId ? "AND source_instance_id = ?" : ""}
|
|
272
|
+
${options.synthesisPipeline ? "AND synthesis_pipeline = ?" : ""}
|
|
273
|
+
AND (
|
|
274
|
+
synthesis_status = 'pending'
|
|
275
|
+
OR (synthesis_status = 'failed' AND updated_at < ?)
|
|
276
|
+
OR (synthesis_status = 'processing' AND synthesis_claimed_at < ?)
|
|
277
|
+
)
|
|
278
|
+
ORDER BY COALESCE(source_updated_at, occurred_at, updated_at) ASC
|
|
279
|
+
LIMIT ?`).all(maxAttempts, ...options.sourceInstanceId ? [options.sourceInstanceId] : [], ...options.synthesisPipeline ? [options.synthesisPipeline] : [], retryCutoff, leaseCutoff, limit);
|
|
280
|
+
if (rows.length === 0) return [];
|
|
281
|
+
const ids = rows.map((row) => row.item_id);
|
|
282
|
+
const placeholders = ids.map(() => "?").join(", ");
|
|
283
|
+
db.prepare(`UPDATE knowledge_source_items SET
|
|
284
|
+
synthesis_status = 'processing',
|
|
285
|
+
synthesis_attempts = synthesis_attempts + 1,
|
|
286
|
+
synthesis_claimed_at = ?,
|
|
287
|
+
synthesis_claimed_by = ?,
|
|
288
|
+
synthesis_error = NULL,
|
|
289
|
+
updated_at = ?
|
|
290
|
+
WHERE item_id IN (${placeholders})`).run(now, options.workerId, now, ...ids);
|
|
291
|
+
return db.prepare(`SELECT * FROM knowledge_source_items WHERE item_id IN (${placeholders})`).all(...ids).map(sourceItemFromRow);
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
function completeKnowledgeSourceItemSynthesis(input) {
|
|
295
|
+
const now = input.nowMs ?? Date.now();
|
|
296
|
+
return runSqliteWriteTransaction((db) => {
|
|
297
|
+
const result = db.prepare(`UPDATE knowledge_source_items SET
|
|
298
|
+
synthesis_status = ?,
|
|
299
|
+
synthesis_claimed_at = NULL,
|
|
300
|
+
synthesis_claimed_by = NULL,
|
|
301
|
+
synthesis_error = ?,
|
|
302
|
+
updated_at = ?
|
|
303
|
+
WHERE item_id = ? AND synthesis_status = 'processing' AND synthesis_claimed_by = ?`).run(input.status, input.error ?? null, now, input.itemId, input.workerId);
|
|
304
|
+
return Number(result.changes) > 0;
|
|
305
|
+
});
|
|
306
|
+
}
|
|
205
307
|
function attachMemoryEvidence(input) {
|
|
206
|
-
|
|
308
|
+
let evidenceId = randomUUID();
|
|
207
309
|
const now = input.nowMs ?? Date.now();
|
|
208
310
|
const observedAt = parseTimestamp(input.observedAt);
|
|
209
311
|
runSqliteWriteTransaction((db) => {
|
|
210
312
|
db.prepare(`INSERT INTO memory_evidence (
|
|
211
313
|
evidence_id, record_id, source_item_id, relation, excerpt,
|
|
212
314
|
confidence, observed_at, created_at
|
|
213
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
315
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
316
|
+
ON CONFLICT DO UPDATE SET
|
|
317
|
+
excerpt = COALESCE(excluded.excerpt, memory_evidence.excerpt),
|
|
318
|
+
confidence = MAX(COALESCE(memory_evidence.confidence, 0), COALESCE(excluded.confidence, 0)),
|
|
319
|
+
observed_at = MAX(COALESCE(memory_evidence.observed_at, 0), COALESCE(excluded.observed_at, 0))`).run(evidenceId, input.recordId, input.sourceItemId ?? null, input.relation ?? "supports", input.excerpt ?? null, input.confidence ?? null, observedAt, now);
|
|
320
|
+
if (input.sourceItemId) evidenceId = db.prepare(`SELECT evidence_id FROM memory_evidence
|
|
321
|
+
WHERE record_id = ? AND source_item_id = ? AND relation = ?`).get(input.recordId, input.sourceItemId, input.relation ?? "supports")?.evidence_id ?? evidenceId;
|
|
214
322
|
});
|
|
215
323
|
return {
|
|
216
324
|
evidenceId,
|
|
@@ -221,6 +329,12 @@ function attachMemoryEvidence(input) {
|
|
|
221
329
|
...observedAt != null ? { observedAt: new Date(observedAt).toISOString() } : {}
|
|
222
330
|
};
|
|
223
331
|
}
|
|
332
|
+
function deleteMemoryEvidenceForRecord(recordId, relation) {
|
|
333
|
+
return runSqliteWriteTransaction((db) => {
|
|
334
|
+
const result = relation ? db.prepare(`DELETE FROM memory_evidence WHERE record_id = ? AND relation = ?`).run(recordId, relation) : db.prepare(`DELETE FROM memory_evidence WHERE record_id = ?`).run(recordId);
|
|
335
|
+
return Number(result.changes);
|
|
336
|
+
});
|
|
337
|
+
}
|
|
224
338
|
function listMemoryEvidence(recordId) {
|
|
225
339
|
return getSqliteDatabase().prepare(`SELECT * FROM memory_evidence WHERE record_id = ? ORDER BY created_at ASC`).all(recordId).map((row) => ({
|
|
226
340
|
evidenceId: row.evidence_id,
|
|
@@ -232,6 +346,6 @@ function listMemoryEvidence(recordId) {
|
|
|
232
346
|
}));
|
|
233
347
|
}
|
|
234
348
|
//#endregion
|
|
235
|
-
export { attachMemoryEvidence, finishKnowledgeSyncRun, getKnowledgeSourceCursor, getKnowledgeSourceItem, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, startKnowledgeSyncRun, upsertKnowledgeSourceItems };
|
|
349
|
+
export { attachMemoryEvidence, claimKnowledgeSourceItems, completeKnowledgeSourceItemSynthesis, deleteMemoryEvidenceForRecord, finishKnowledgeSyncRun, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, startKnowledgeSyncRun, upsertKnowledgeSourceItems };
|
|
236
350
|
|
|
237
351
|
//# sourceMappingURL=knowledge-repository.js.map
|