@xopcai/xopc 0.0.116 → 0.0.118
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/README.md +44 -28
- package/README.zh-CN.md +63 -45
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/demo-memory/src/index.d.ts +6 -0
- package/dist/extensions/demo-memory/src/index.js +132 -0
- package/dist/extensions/demo-memory/src/index.js.map +1 -0
- package/dist/extensions/demo-memory/xopc.extension.json +15 -0
- package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
- package/dist/extensions/feishu/src/schema/config-schema.d.ts +3 -3
- 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/command-handler.js +1 -2
- package/dist/extensions/telegram/src/command-handler.js.map +1 -1
- package/dist/extensions/telegram/src/config-schema.d.ts +8 -8
- 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/update-offset-store.js +1 -1
- 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 +2 -2
- package/dist/extensions/weixin/src/auth/accounts.js +1 -1
- package/dist/extensions/weixin/src/cdn/upload.js +1 -1
- package/dist/extensions/weixin/src/config-schema.d.ts +3 -3
- package/dist/extensions/weixin/src/media/data-url.js +1 -1
- package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
- package/dist/extensions/weixin/src/messaging/inbound.js +1 -1
- package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
- package/dist/extensions/weixin/src/plugin.js +1 -1
- package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
- package/dist/extensions/weixin/src/workflow-progress.js +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CWM1UU5P.js → agent-avatar-dicebear-dzUrQoeZ.js} +1 -1
- package/dist/gateway/static/root/assets/agents-BCxZbkOw.js +2 -0
- package/dist/gateway/static/root/assets/{app-management-settings-panel-yXSXY_bu.js → app-management-settings-panel-bxYJVJpx.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-DjY1P_ug.js → appearance-settings-BCIykXlI.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page--wMEL00f.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-CytE5j-e.js → archive-plugin-Cki4SfU2.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-BvvrN6rF.js → attachment-load-D-KnS2Do.js} +1 -1
- package/dist/gateway/static/root/assets/{binary-plugins-IBWSitnj.js → binary-plugins-D2sgvJja.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-C-wDpsf-.js → block-editor-DIq-4Gvb.js} +27 -27
- package/dist/gateway/static/root/assets/browser-settings-page-DRhKdn81.js +8 -0
- package/dist/gateway/static/root/assets/capability-presets-api-CorhiHlg.js +1 -0
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-qFx9Jtce.js +1 -0
- package/dist/gateway/static/root/assets/channels-settings-BAwAkqIA.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-BQLcfitM.js +2 -0
- package/dist/gateway/static/root/assets/cron-api-qGwmL-24.js +1 -0
- package/dist/gateway/static/root/assets/cron-page-BBWMAj8-.js +3 -0
- package/dist/gateway/static/root/assets/dreaming-settings-Dw89Obml.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-BAIyjDlq.js → extension-debug-page-DYu1KaFQ.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-DEhv2GpC.js → extension-page-B3W6QwlZ.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DOuAxTDW.js → extension-settings-page-D7VQ-cxE.js} +1 -1
- package/dist/gateway/static/root/assets/{fetch-CTsREQIe.js → fetch-B7xDPu-R.js} +1 -1
- package/dist/gateway/static/root/assets/{format-interval-label-D35Bfhtx.js → format-interval-label-BzxafKxR.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-config-api-BTBLSeUu.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-Cmwy58rS.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-C1KAHrd2.js → gateway-startup-retry-CYj9FWCp.js} +1 -1
- package/dist/gateway/static/root/assets/goal-detail-page-l7mu5GWX.js +1 -0
- package/dist/gateway/static/root/assets/{goals-config-api-KnLGpu6h.js → goals-config-api-CQQgzPr3.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-BHitvJAv.js +2 -0
- package/dist/gateway/static/root/assets/{goals-settings-DtPtqZi8.js → goals-settings-CYVY4NGp.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-uKw1f0IG.js → heartbeat-config-api-DriO_CN9.js} +1 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-CUQTKxg7.js +1 -0
- package/dist/gateway/static/root/assets/index-C17Tsd_b.css +1 -0
- package/dist/gateway/static/root/assets/index-Cc41r16l.js +191 -0
- package/dist/gateway/static/root/assets/{interval-presets-Dq0FXJ65.js → interval-presets-DFPCKW_W.js} +1 -1
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-C9_t4m7t.js → keyboard-shortcuts-settings-CcVcqstx.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-SNkWzidV.js → logs-page-C2Uqvae9.js} +2 -2
- package/dist/gateway/static/root/assets/{markdown-split-Ca87W8-h.js → markdown-split-BwOFrJ2E.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-BAcUjPRJ.js → media-plugins-Cnz6Q5G6.js} +1 -1
- package/dist/gateway/static/root/assets/messages-B1iSKjiw.js +3 -0
- package/dist/gateway/static/root/assets/models-hub-panel-BfLfcta8.js +2 -0
- package/dist/gateway/static/root/assets/note-detail-page-BjwOQBfT.js +2 -0
- package/dist/gateway/static/root/assets/{note-image-lightbox-hnSX5SSn.js → note-image-lightbox-B-Svpmza.js} +1 -1
- package/dist/gateway/static/root/assets/notes-page-DktdBiwB.js +1 -0
- package/dist/gateway/static/root/assets/{preview-open-alternatives-CNgM20H5.js → preview-open-alternatives-Bss4TiwP.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-rfVx96fq.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-CcdjGcfT.js → save-bar-controls-BRNjdgKq.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-CYr39z76.js → schedule-field-CUCKODde.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-BRAJgZQ2.js → schema-form-Dub9sy8r.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-DbtMFuuH.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-5re5gAnP.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-BhzjeGWi.js → settings-collapsible-section-BeFLavGi.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-Cz3Pcr9b.js → settings-form-section-dmyaPOTG.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-D-WMyLlj.js +1 -0
- package/dist/gateway/static/root/assets/setup-status-panel-Cl-DEJAU.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-DL4y9K5e.js → share-preview-page-C8glrdqe.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-CyPVvbLt.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-CleTH1oz.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-Ck8hdXqR.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-FD2jxRZ3.js → system-settings-panel-DI-LN_8G.js} +1 -1
- package/dist/gateway/static/root/assets/typed-models-lib-kX9duch4.js +1 -0
- package/dist/gateway/static/root/assets/{use-channel-catalog-BInPrfR5.js → use-channel-catalog-DqlWTsDb.js} +1 -1
- package/dist/gateway/static/root/assets/user-profile-settings-panel-B-UFPMXy.js +1 -0
- package/dist/gateway/static/root/assets/utils-Dm0hKalR.js +1 -0
- package/dist/gateway/static/root/assets/voice-api-key-field-C73IVZeC.js +1 -0
- package/dist/gateway/static/root/assets/{voice-player-store-1U3vFppm.js → voice-player-store-C_ArLJPM.js} +1 -1
- package/dist/gateway/static/root/assets/workflows-page-BtFGp2y_.js +18 -0
- package/dist/gateway/static/root/index.html +5 -5
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +1 -1
- package/dist/src/agent/agent-manager.js +14 -14
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/agent-scope.js +5 -9
- package/dist/src/agent/agent-scope.js.map +1 -1
- package/dist/src/agent/background-review/coordinator.js +0 -1
- package/dist/src/agent/background-review/coordinator.js.map +1 -1
- package/dist/src/agent/background-review/prompts.d.ts +2 -2
- package/dist/src/agent/background-review/prompts.js +2 -2
- package/dist/src/agent/background-review/prompts.js.map +1 -1
- package/dist/src/agent/background-review/run-background-review.d.ts +0 -2
- package/dist/src/agent/background-review/run-background-review.js +2 -4
- package/dist/src/agent/background-review/run-background-review.js.map +1 -1
- package/dist/src/agent/background-review/settings.d.ts +1 -1
- package/dist/src/agent/background-review/settings.js +8 -8
- package/dist/src/agent/background-review/settings.js.map +1 -1
- package/dist/src/agent/bootstrap/bootstrap-cache.d.ts +1 -0
- package/dist/src/agent/bootstrap/bootstrap-cache.js +4 -3
- package/dist/src/agent/bootstrap/bootstrap-cache.js.map +1 -1
- package/dist/src/agent/bootstrap/bootstrap-context.d.ts +2 -2
- package/dist/src/agent/bootstrap/bootstrap-context.js +4 -4
- package/dist/src/agent/bootstrap/bootstrap-context.js.map +1 -1
- package/dist/src/agent/bootstrap/bootstrap-files.d.ts +4 -0
- package/dist/src/agent/bootstrap/bootstrap-files.js +4 -3
- package/dist/src/agent/bootstrap/bootstrap-files.js.map +1 -1
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js +4 -2
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js.map +1 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.d.ts +2 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +18 -17
- package/dist/src/agent/bootstrap/load-bootstrap-files.js.map +1 -1
- package/dist/src/agent/bootstrap/project-agents-context.js +1 -1
- package/dist/src/agent/bootstrap/types.d.ts +1 -1
- package/dist/src/agent/context/workspace-seed.js +3 -3
- package/dist/src/agent/context/workspace-state.js +1 -1
- package/dist/src/agent/context/workspace-templates/AGENTS.md +1 -1
- package/dist/src/agent/context/workspace.d.ts +4 -2
- package/dist/src/agent/context/workspace.js +6 -5
- package/dist/src/agent/context/workspace.js.map +1 -1
- package/dist/src/agent/embedded/run-for-session.js +4 -1
- package/dist/src/agent/embedded/run-for-session.js.map +1 -1
- package/dist/src/agent/fallback/candidates.js +11 -9
- package/dist/src/agent/fallback/candidates.js.map +1 -1
- package/dist/src/agent/goals/goal-locale.js +2 -2
- package/dist/src/agent/goals/post-turn.js +3 -3
- package/dist/src/agent/image/generation/runtime-types.d.ts +2 -0
- package/dist/src/agent/image/generation/runtime.js +1 -1
- package/dist/src/agent/image/generation/runtime.js.map +1 -1
- package/dist/src/agent/image/image-helpers.d.ts +1 -1
- package/dist/src/agent/image/image-helpers.js +4 -17
- package/dist/src/agent/image/image-helpers.js.map +1 -1
- package/dist/src/agent/image/image-model-fallback.js +1 -1
- package/dist/src/agent/image/image-model-fallback.js.map +1 -1
- package/dist/src/agent/image/inbound-image-handling.js +1 -1
- package/dist/src/agent/image/inbound-image-handling.js.map +1 -1
- package/dist/src/agent/image/load-image-media.js +2 -2
- package/dist/src/agent/image/tool-model-config.d.ts +1 -1
- package/dist/src/agent/image/tool-model-config.js +2 -2
- package/dist/src/agent/image/tool-model-config.js.map +1 -1
- package/dist/src/agent/ipc/inbox.js +3 -3
- package/dist/src/agent/ipc/socket.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/mcp/resolve-embedded-mcp-tools.js +1 -1
- package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js.map +1 -1
- package/dist/src/agent/media-generation/runtime-shared.d.ts +5 -2
- package/dist/src/agent/media-generation/runtime-shared.js +1 -1
- package/dist/src/agent/media-generation/runtime-shared.js.map +1 -1
- package/dist/src/agent/memory/builtin-memory-store.d.ts +6 -2
- package/dist/src/agent/memory/builtin-memory-store.js +15 -6
- package/dist/src/agent/memory/builtin-memory-store.js.map +1 -1
- package/dist/src/agent/memory/builtin-provider.d.ts +31 -9
- package/dist/src/agent/memory/builtin-provider.js +290 -11
- package/dist/src/agent/memory/builtin-provider.js.map +1 -1
- package/dist/src/agent/memory/candidate-extractor.d.ts +6 -0
- package/dist/src/agent/memory/candidate-extractor.js +60 -0
- package/dist/src/agent/memory/candidate-extractor.js.map +1 -0
- package/dist/src/agent/memory/context-assembler.d.ts +10 -0
- package/dist/src/agent/memory/context-assembler.js +26 -0
- package/dist/src/agent/memory/context-assembler.js.map +1 -0
- package/dist/src/agent/memory/create-memory-manager.js +25 -7
- package/dist/src/agent/memory/create-memory-manager.js.map +1 -1
- package/dist/src/agent/memory/dreaming/config.d.ts +1 -6
- package/dist/src/agent/memory/dreaming/config.js +8 -8
- package/dist/src/agent/memory/dreaming/config.js.map +1 -1
- package/dist/src/agent/memory/dreaming/deep-promotion.d.ts +2 -0
- package/dist/src/agent/memory/dreaming/deep-promotion.js +25 -1
- package/dist/src/agent/memory/dreaming/deep-promotion.js.map +1 -1
- package/dist/src/agent/memory/dreaming/events.js +1 -1
- package/dist/src/agent/memory/dreaming/last-run.js +1 -1
- package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
- package/dist/src/agent/memory/dreaming/preview.js +1 -1
- package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
- package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
- package/dist/src/agent/memory/dreaming/utils.js +1 -1
- package/dist/src/agent/memory/index.d.ts +1 -0
- package/dist/src/agent/memory/index.js +4 -3
- package/dist/src/agent/memory/inject-prefetch.js +6 -2
- package/dist/src/agent/memory/inject-prefetch.js.map +1 -1
- package/dist/src/agent/memory/manager.d.ts +39 -2
- package/dist/src/agent/memory/manager.js +355 -39
- package/dist/src/agent/memory/manager.js.map +1 -1
- package/dist/src/agent/memory/memory-config.js +15 -15
- package/dist/src/agent/memory/memory-config.js.map +1 -1
- package/dist/src/agent/memory/memory-flush.js +1 -1
- package/dist/src/agent/memory/plugin-discovery.d.ts +19 -5
- package/dist/src/agent/memory/plugin-discovery.js +97 -31
- package/dist/src/agent/memory/plugin-discovery.js.map +1 -1
- package/dist/src/agent/memory/prefetch-coordinator.js.map +1 -1
- package/dist/src/agent/memory/provider.d.ts +20 -15
- package/dist/src/agent/memory/stub-memory-provider.d.ts +17 -2
- package/dist/src/agent/memory/stub-memory-provider.js +20 -3
- package/dist/src/agent/memory/stub-memory-provider.js.map +1 -1
- package/dist/src/agent/memory/types.d.ts +162 -3
- package/dist/src/agent/models/manager.d.ts +1 -1
- package/dist/src/agent/models/manager.js +2 -2
- package/dist/src/agent/models/manager.js.map +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.d.ts +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js +2 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.d.ts +2 -2
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js +1 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js.map +1 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.d.ts +2 -6
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +2 -8
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js.map +1 -1
- package/dist/src/agent/prompt/memory/index.d.ts +4 -2
- package/dist/src/agent/prompt/memory/index.js +19 -13
- package/dist/src/agent/prompt/memory/index.js.map +1 -1
- package/dist/src/agent/prompt/sections/memory-skills.js +1 -1
- package/dist/src/agent/prompt/sections/memory-skills.js.map +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +5 -20
- package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
- package/dist/src/agent/reply/post-compaction-context.js +10 -7
- package/dist/src/agent/reply/post-compaction-context.js.map +1 -1
- package/dist/src/agent/reply/startup-context.js +7 -12
- package/dist/src/agent/reply/startup-context.js.map +1 -1
- package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
- package/dist/src/agent/sandbox/path-policy.js +2 -2
- package/dist/src/agent/service/process-direct-streaming.js +1 -4
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service/session-context-report.js +1 -1
- package/dist/src/agent/service/session-context-report.js.map +1 -1
- package/dist/src/agent/service.d.ts +3 -3
- package/dist/src/agent/service.js +30 -35
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/service.types.d.ts +1 -2
- package/dist/src/agent/session/session-hydrator.js +1 -2
- package/dist/src/agent/session/session-hydrator.js.map +1 -1
- package/dist/src/agent/session/session-inspector.d.ts +1 -1
- package/dist/src/agent/session/session-inspector.js +10 -15
- package/dist/src/agent/session/session-inspector.js.map +1 -1
- package/dist/src/agent/skills/config.js +2 -2
- package/dist/src/agent/skills/filesystem-watcher.js +1 -1
- package/dist/src/agent/skills/hub-hash.js +2 -2
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent/skills/hub-pull.js +3 -3
- package/dist/src/agent/skills/index.js +2 -2
- package/dist/src/agent/skills/installer.js +2 -2
- package/dist/src/agent/skills/managed-store.js +1 -1
- package/dist/src/agent/skills/skill-manage-ops.js +1 -1
- package/dist/src/agent/skills/skill-manager.js +1 -1
- package/dist/src/agent/skills/skill-view-path.js +1 -1
- package/dist/src/agent/skills/test-framework.js +1 -1
- package/dist/src/agent/starter-agents.d.ts +1 -3
- package/dist/src/agent/starter-agents.js +14 -22
- package/dist/src/agent/starter-agents.js.map +1 -1
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -2
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +1 -1
- package/dist/src/agent/tools/curated-memory-tool.d.ts +2 -5
- package/dist/src/agent/tools/curated-memory-tool.js +77 -18
- package/dist/src/agent/tools/curated-memory-tool.js.map +1 -1
- package/dist/src/agent/tools/dreaming-tool.js +1 -1
- package/dist/src/agent/tools/factory.d.ts +0 -4
- package/dist/src/agent/tools/factory.js +19 -58
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/find.js +1 -1
- package/dist/src/agent/tools/grep.js +1 -1
- package/dist/src/agent/tools/image-generate-tool.d.ts +1 -1
- package/dist/src/agent/tools/image-generate-tool.js +20 -15
- package/dist/src/agent/tools/image-generate-tool.js.map +1 -1
- package/dist/src/agent/tools/image-tool.js +1 -3
- package/dist/src/agent/tools/image-tool.js.map +1 -1
- package/dist/src/agent/tools/memory-tool.d.ts +2 -2
- package/dist/src/agent/tools/memory-tool.js +39 -14
- package/dist/src/agent/tools/memory-tool.js.map +1 -1
- package/dist/src/agent/tools/session-search-tool.js +1 -3
- package/dist/src/agent/tools/session-search-tool.js.map +1 -1
- package/dist/src/agent/tools/skill-manage-tool.js +1 -1
- package/dist/src/agent/tools/web-extract.js +8 -9
- package/dist/src/agent/tools/web-extract.js.map +1 -1
- package/dist/src/agent/tools/workflow-tool.js +1 -1
- package/dist/src/agent/workflow/catalog.js +1 -1
- package/dist/src/agent/workflow/subagent-runner.js +1 -3
- package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
- package/dist/src/agent-manifest/index.d.ts +4 -0
- package/dist/src/agent-manifest/index.js +10 -0
- package/dist/src/agent-manifest/index.js.map +1 -0
- package/dist/src/agent-manifest/prompt.d.ts +2 -0
- package/dist/src/agent-manifest/prompt.js +57 -0
- package/dist/src/agent-manifest/prompt.js.map +1 -0
- package/dist/src/agent-manifest/resolver.d.ts +12 -0
- package/dist/src/agent-manifest/resolver.js +95 -0
- package/dist/src/agent-manifest/resolver.js.map +1 -0
- package/dist/src/agent-manifest/schema.d.ts +1010 -0
- package/dist/src/agent-manifest/schema.js +269 -0
- package/dist/src/agent-manifest/schema.js.map +1 -0
- package/dist/src/agent-manifest/validator.d.ts +25 -0
- package/dist/src/agent-manifest/validator.js +88 -0
- package/dist/src/agent-manifest/validator.js.map +1 -0
- package/dist/src/agent-runtime/boundary-guard.d.ts +12 -0
- package/dist/src/agent-runtime/boundary-guard.js +23 -0
- package/dist/src/agent-runtime/boundary-guard.js.map +1 -0
- package/dist/src/agent-runtime/index.d.ts +7 -0
- package/dist/src/agent-runtime/index.js +8 -0
- package/dist/src/agent-runtime/memory-runtime.d.ts +21 -0
- package/dist/src/agent-runtime/memory-runtime.js +50 -0
- package/dist/src/agent-runtime/memory-runtime.js.map +1 -0
- package/dist/src/agent-runtime/model-router.d.ts +11 -0
- package/dist/src/agent-runtime/model-router.js +16 -0
- package/dist/src/agent-runtime/model-router.js.map +1 -0
- package/dist/src/agent-runtime/run-trace.d.ts +27 -0
- package/dist/src/agent-runtime/run-trace.js +53 -0
- package/dist/src/agent-runtime/run-trace.js.map +1 -0
- package/dist/src/agent-runtime/runtime-profile.d.ts +24 -0
- package/dist/src/agent-runtime/runtime-profile.js +44 -0
- package/dist/src/agent-runtime/runtime-profile.js.map +1 -0
- package/dist/src/agent-runtime/tool-registry.d.ts +28 -0
- package/dist/src/agent-runtime/tool-registry.js +52 -0
- package/dist/src/agent-runtime/tool-registry.js.map +1 -0
- package/dist/src/agent-runtime/workflow-runtime.d.ts +31 -0
- package/dist/src/agent-runtime/workflow-runtime.js +34 -0
- package/dist/src/agent-runtime/workflow-runtime.js.map +1 -0
- package/dist/src/ai-assist/text-assist.js +1 -1
- package/dist/src/auth/credentials.js +2 -2
- package/dist/src/auth/profiles/store.js +2 -2
- package/dist/src/auth/sync-provider-auth.js +1 -1
- package/dist/src/browser/actions/extension-registry-bridge.js +1 -1
- package/dist/src/browser/actions/extension-registry-bridge.js.map +1 -1
- package/dist/src/browser/actions/registry.js +5 -8
- package/dist/src/browser/actions/registry.js.map +1 -1
- package/dist/src/browser/backend-from-config.d.ts +1 -1
- package/dist/src/browser/backend-from-config.js +50 -71
- package/dist/src/browser/backend-from-config.js.map +1 -1
- package/dist/src/browser/browser-command-timeout.d.ts +0 -1
- package/dist/src/browser/browser-command-timeout.js +3 -7
- package/dist/src/browser/browser-command-timeout.js.map +1 -1
- package/dist/src/browser/cache-dir-policy.js +1 -1
- package/dist/src/browser/cdp-local-launcher.js +2 -2
- package/dist/src/browser/pipeline/source.js +1 -1
- package/dist/src/browser/providers/browser-ext-install.d.ts +2 -12
- package/dist/src/browser/providers/browser-ext-install.js +7 -12
- package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
- package/dist/src/browser/providers/cloakbrowser.js +5 -5
- package/dist/src/browser/providers/playwright-doctor.js +1 -1
- package/dist/src/browser/readiness.js +16 -16
- package/dist/src/browser/readiness.js.map +1 -1
- package/dist/src/browser/schemas.js +1 -1
- package/dist/src/browser/schemas.js.map +1 -1
- package/dist/src/browser/stealth.js +1 -1
- package/dist/src/channels/catalog/channel-catalog-service.js +1 -1
- package/dist/src/channels/outbound/persist-store.js +1 -1
- package/dist/src/channels/pairing/allow-from-file.js +1 -1
- package/dist/src/channels/pairing/pairing-store.js +2 -2
- package/dist/src/channels/pipeline.d.ts +1 -1
- package/dist/src/channels/pipeline.js.map +1 -1
- package/dist/src/chat-commands/agent-edit.js +2 -3
- package/dist/src/chat-commands/agent-edit.js.map +1 -1
- package/dist/src/chat-commands/builtins/config.js +6 -6
- package/dist/src/chat-commands/builtins/config.js.map +1 -1
- package/dist/src/chat-commands/builtins/model.js +2 -2
- package/dist/src/chat-commands/builtins/model.js.map +1 -1
- package/dist/src/chat-commands/builtins/thinking.js +16 -42
- package/dist/src/chat-commands/builtins/thinking.js.map +1 -1
- package/dist/src/chat-commands/config-paths.js +1 -1
- package/dist/src/chat-commands/config-paths.js.map +1 -1
- package/dist/src/chat-commands/context.js +3 -4
- package/dist/src/chat-commands/context.js.map +1 -1
- package/dist/src/cli/command-manifest.d.ts +1 -1
- package/dist/src/cli/command-manifest.js +2 -2
- package/dist/src/cli/command-manifest.js.map +1 -1
- package/dist/src/cli/commands/agent.js +3 -1
- package/dist/src/cli/commands/agent.js.map +1 -1
- package/dist/src/cli/commands/agents.js +3 -6
- package/dist/src/cli/commands/agents.js.map +1 -1
- package/dist/src/cli/commands/browser-cli-helpers.js +9 -11
- package/dist/src/cli/commands/browser-cli-helpers.js.map +1 -1
- package/dist/src/cli/commands/config.js +6 -6
- package/dist/src/cli/commands/config.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +3 -18
- package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
- package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -2
- package/dist/src/cli/commands/doctor/checks/workspace-status.js.map +1 -1
- package/dist/src/cli/commands/extension-create.js +1 -1
- package/dist/src/cli/commands/extension-dev.js +2 -2
- package/dist/src/cli/commands/extension-marketplace.js +2 -2
- package/dist/src/cli/commands/extension-pack.js +2 -2
- package/dist/src/cli/commands/extension.js +3 -3
- package/dist/src/cli/commands/gateway/logs.js +1 -1
- package/dist/src/cli/commands/goal.js +1 -1
- package/dist/src/cli/commands/image.js +13 -372
- package/dist/src/cli/commands/image.js.map +1 -1
- package/dist/src/cli/commands/init.js +7 -6
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/models.js +14 -16
- package/dist/src/cli/commands/models.js.map +1 -1
- package/dist/src/cli/commands/onboard/channels/registry.js.map +1 -1
- package/dist/src/cli/commands/onboard/model.js +28 -23
- package/dist/src/cli/commands/onboard/model.js.map +1 -1
- package/dist/src/cli/commands/onboard.js +3 -3
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/cli/commands/skills-test.js +1 -1
- package/dist/src/cli/commands/tui.js +2 -2
- package/dist/src/cli/commands/tui.js.map +1 -1
- package/dist/src/cli/index.d.ts +1 -0
- package/dist/src/cli/index.js +10 -5
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/registry.js +1 -1
- package/dist/src/cli/registry.js.map +1 -1
- package/dist/src/cli/templates.d.ts +1 -1
- package/dist/src/cli/templates.js +2 -12
- package/dist/src/cli/templates.js.map +1 -1
- package/dist/src/cli/utils/gateway-client.js +1 -1
- package/dist/src/cli/utils/init-workspace-core.d.ts +1 -4
- package/dist/src/cli/utils/init-workspace-core.js +9 -8
- package/dist/src/cli/utils/init-workspace-core.js.map +1 -1
- package/dist/src/commands/agents.config.d.ts +0 -1
- package/dist/src/commands/agents.config.js +59 -13
- package/dist/src/commands/agents.config.js.map +1 -1
- package/dist/src/config/agent-profile.d.ts +5 -17
- package/dist/src/config/agent-profile.js +32 -64
- package/dist/src/config/agent-profile.js.map +1 -1
- package/dist/src/config/agent-typed-models.d.ts +1 -1
- package/dist/src/config/agent-typed-models.js +3 -6
- package/dist/src/config/agent-typed-models.js.map +1 -1
- package/dist/src/config/gateway-bind.js +1 -1
- package/dist/src/config/index.js +9 -9
- package/dist/src/config/integration.d.ts +1 -1
- package/dist/src/config/loader.js +4 -4
- package/dist/src/config/models-json.js +2 -2
- package/dist/src/config/paths-state.js +1 -1
- package/dist/src/config/paths.d.ts +8 -1
- package/dist/src/config/paths.js +17 -4
- package/dist/src/config/paths.js.map +1 -1
- package/dist/src/config/profile.js +1 -1
- package/dist/src/config/reload.js +2 -2
- package/dist/src/config/reload.js.map +1 -1
- package/dist/src/config/rules.js +6 -56
- package/dist/src/config/rules.js.map +1 -1
- package/dist/src/config/schema.d.ts +916 -779
- package/dist/src/config/schema.js +174 -423
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/workspace-path.js +1 -1
- package/dist/src/connectors/composio-triggers.js +1 -1
- package/dist/src/cron/executor.js +1 -1
- package/dist/src/cron/index.js +1 -1
- package/dist/src/cron/service.js +2 -2
- package/dist/src/cron/validation.d.ts +3 -3
- package/dist/src/daemon/constants.js +1 -1
- package/dist/src/daemon/install-plan.js +2 -2
- package/dist/src/daemon/launchd.js +2 -2
- package/dist/src/daemon/schtasks.js +2 -2
- package/dist/src/daemon/systemd.js +2 -2
- package/dist/src/extensions/activation-context.js +13 -7
- package/dist/src/extensions/activation-context.js.map +1 -1
- package/dist/src/extensions/bundle-mcp.js +1 -1
- package/dist/src/extensions/discover-extensions.js +2 -2
- package/dist/src/extensions/health.js +1 -1
- package/dist/src/extensions/install.js +2 -2
- package/dist/src/extensions/loader.js +2 -2
- package/dist/src/extensions/lockfile.js +3 -3
- package/dist/src/extensions/security.js +1 -1
- package/dist/src/extensions/update.js +2 -2
- package/dist/src/gateway/agents-admin.d.ts +24 -18
- package/dist/src/gateway/agents-admin.js +158 -92
- package/dist/src/gateway/agents-admin.js.map +1 -1
- package/dist/src/gateway/capability-presets-admin.d.ts +56 -0
- package/dist/src/gateway/capability-presets-admin.js +214 -0
- package/dist/src/gateway/capability-presets-admin.js.map +1 -0
- package/dist/src/gateway/chat-stream/mapper.js +9 -2
- package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
- package/dist/src/gateway/file-path-classifier.js +2 -2
- package/dist/src/gateway/global-defaults-admin.d.ts +36 -0
- package/dist/src/gateway/global-defaults-admin.js +146 -0
- package/dist/src/gateway/global-defaults-admin.js.map +1 -0
- package/dist/src/gateway/hono/lib/agent-model.d.ts +1 -1
- package/dist/src/gateway/hono/lib/agent-model.js +1 -1
- package/dist/src/gateway/hono/lib/agent-model.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +234 -127
- package/dist/src/gateway/hono/lib/config-payload.js +14 -38
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/lib/extension-store.js +2 -2
- package/dist/src/gateway/hono/lib/static-ui.js +2 -2
- package/dist/src/gateway/hono/routes/agents.js +88 -33
- package/dist/src/gateway/hono/routes/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
- package/dist/src/gateway/hono/routes/browser.js +8 -15
- package/dist/src/gateway/hono/routes/browser.js.map +1 -1
- package/dist/src/gateway/hono/routes/capability-presets.d.ts +3 -0
- package/dist/src/gateway/hono/routes/capability-presets.js +145 -0
- package/dist/src/gateway/hono/routes/capability-presets.js.map +1 -0
- package/dist/src/gateway/hono/routes/commands-skills.js +4 -5
- package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/agents.d.ts +1 -17
- package/dist/src/gateway/hono/routes/config-patch/agents.js +2 -443
- package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +7 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
- package/dist/src/gateway/hono/routes/config.js +1 -1
- package/dist/src/gateway/hono/routes/config.js.map +1 -1
- package/dist/src/gateway/hono/routes/dreaming.js +8 -1
- package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
- package/dist/src/gateway/hono/routes/global-defaults.d.ts +3 -0
- package/dist/src/gateway/hono/routes/global-defaults.js +61 -0
- package/dist/src/gateway/hono/routes/global-defaults.js.map +1 -0
- package/dist/src/gateway/hono/routes/host-fs.js +2 -2
- package/dist/src/gateway/hono/routes/index.js +2 -0
- package/dist/src/gateway/hono/routes/index.js.map +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +17 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/memory.d.ts +3 -0
- package/dist/src/gateway/hono/routes/memory.js +361 -0
- package/dist/src/gateway/hono/routes/memory.js.map +1 -0
- package/dist/src/gateway/hono/routes/models.js +2 -2
- package/dist/src/gateway/hono/routes/shares.js +1 -1
- package/dist/src/gateway/hono/routes/workflows.js +1 -1
- package/dist/src/gateway/hono/routes/workspace.js +2 -2
- package/dist/src/gateway/lock.js +3 -3
- package/dist/src/gateway/ports.js +1 -1
- package/dist/src/gateway/service/config-coordinator.js +1 -1
- package/dist/src/gateway/service/marketplace-service.d.ts +4 -4
- package/dist/src/gateway/service/marketplace-service.js +13 -9
- package/dist/src/gateway/service/marketplace-service.js.map +1 -1
- package/dist/src/gateway/service.d.ts +1 -1
- package/dist/src/gateway/service.js +15 -16
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/gateway/workspace-fs-file-list.js +1 -1
- package/dist/src/goals/goal-workflow-judge.js +2 -2
- package/dist/src/i18n/goals-bundle.js +1 -1
- package/dist/src/i18n/index.js +1 -1
- package/dist/src/i18n/share-tool-bundle.js +2 -2
- package/dist/src/infra/brew.js +1 -1
- package/dist/src/infra/package-json.js +1 -1
- package/dist/src/infra/package-update-steps.js +1 -1
- package/dist/src/infra/path-env.js +2 -2
- package/dist/src/infra/restart.js +1 -1
- package/dist/src/infra/stable-node-path.js +1 -1
- package/dist/src/infra/update-check.js +1 -1
- package/dist/src/infra/update-global.js +1 -1
- package/dist/src/infra/update-lock.js +2 -2
- package/dist/src/infra/update-restart.js +1 -1
- package/dist/src/infra/update-runner.js +1 -1
- package/dist/src/infra/update-startup.js +1 -1
- package/dist/src/infra/write-file-atomic.js +2 -2
- package/dist/src/media/store.js +1 -1
- package/dist/src/notes/agent-context.js +3 -3
- package/dist/src/notes/service.js +4 -2
- package/dist/src/notes/service.js.map +1 -1
- package/dist/src/notes/store.js +2 -2
- package/dist/src/project-trust/trust-store.js +2 -2
- package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
- package/dist/src/providers/index.d.ts +5 -6
- package/dist/src/providers/index.js +26 -30
- package/dist/src/providers/index.js.map +1 -1
- package/dist/src/providers/model-registry.js +4 -4
- package/dist/src/session/index.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/session/thinking-resolve.d.ts +1 -1
- package/dist/src/session/thinking-resolve.js +1 -1
- package/dist/src/session/thinking-resolve.js.map +1 -1
- package/dist/src/share/share-auto.js +2 -2
- package/dist/src/share/share-store.js +3 -3
- package/dist/src/share/share-thumbnail.js +2 -2
- package/dist/src/share/share-zip.js +1 -1
- package/dist/src/share/site-share-store.js +3 -3
- package/dist/src/share/site-static-serve.js +1 -1
- package/dist/src/storage/sqlite/connection.js +2 -2
- package/dist/src/storage/sqlite/index.d.ts +1 -0
- package/dist/src/storage/sqlite/index.js +2 -1
- package/dist/src/storage/sqlite/memory-index-repository.d.ts +1 -0
- package/dist/src/storage/sqlite/memory-index-repository.js +17 -16
- package/dist/src/storage/sqlite/memory-index-repository.js.map +1 -1
- package/dist/src/storage/sqlite/memory-records-repository.d.ts +144 -0
- package/dist/src/storage/sqlite/memory-records-repository.js +453 -0
- package/dist/src/storage/sqlite/memory-records-repository.js.map +1 -0
- package/dist/src/storage/sqlite/migrations/012_memory_records.sql +63 -0
- package/dist/src/storage/sqlite/migrations/013_memory_trace_events.sql +21 -0
- package/dist/src/storage/sqlite/migrations/014_memory_record_governance.sql +10 -0
- package/dist/src/storage/sqlite/migrations/015_memory_trace_feedback.sql +4 -0
- package/dist/src/storage/sqlite/migrations/discover.js +1 -1
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +4 -4
- 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/schema.js +2 -2
- package/dist/src/storage/sqlite/schema.sql +86 -0
- package/dist/src/tui/backends/embedded-backend.d.ts +3 -0
- package/dist/src/tui/backends/embedded-backend.js +43 -24
- package/dist/src/tui/backends/embedded-backend.js.map +1 -1
- package/dist/src/tui/backends/gateway-sse-backend.d.ts +1 -0
- package/dist/src/tui/backends/gateway-sse-backend.js +16 -3
- package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
- package/dist/src/tui/clipboard-image.js +3 -3
- package/dist/src/tui/components/tui-header.d.ts +0 -1
- package/dist/src/tui/components/tui-header.js +3 -8
- package/dist/src/tui/components/tui-header.js.map +1 -1
- package/dist/src/tui/extension-host/load-extensions.js +1 -1
- package/dist/src/tui/extension-host/load-extensions.js.map +1 -1
- package/dist/src/tui/theme-manager.js +1 -1
- package/dist/src/tui/tui-command-formatters.js +4 -4
- package/dist/src/tui/tui-commands.js +2 -2
- package/dist/src/tui/tui-keybindings-file.js +1 -1
- package/dist/src/tui/tui-scoped-models.js +2 -2
- package/dist/src/tui/tui-settings.js +1 -1
- package/dist/src/tui/tui-startup-resources.js +2 -1
- package/dist/src/tui/tui-startup-resources.js.map +1 -1
- package/dist/src/tui/tui-startup-text.js +12 -12
- package/dist/src/tui/tui-startup-text.js.map +1 -1
- package/dist/src/tui/tui.js +10 -7
- package/dist/src/tui/tui.js.map +1 -1
- package/dist/src/tunnel/frpc-binary.js +4 -4
- package/dist/src/tunnel/frpc-config.js +1 -1
- package/dist/src/tunnel/frpc-extract.js +1 -1
- package/dist/src/tunnel/tunnel-state.js +1 -1
- package/dist/src/utils/logger/audit.js +1 -1
- package/dist/src/utils/logger/log-store.js +1 -1
- package/dist/src/utils/logger/rotation.js +1 -1
- package/dist/src/utils/logger/streams.js +1 -1
- package/dist/src/voice/tts/audio.js +1 -1
- package/dist/src/voice/tts/providers/edge-speech.js +2 -2
- package/dist/src/workflows/draft/workflow-draft-service.js +1 -1
- package/dist/src/workflows/service/workflow-run-service.js +4 -5
- package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
- package/dist/src/workflows/service/workflow-session-bridge.js +1 -1
- package/dist/src/workflows/store/event-store.js +1 -1
- package/dist/src/workflows/store/run-store.js +1 -1
- package/package.json +3 -2
- package/dist/gateway/static/root/assets/agent-browser-settings-page-D1SyFYeh.js +0 -6
- package/dist/gateway/static/root/assets/agent-defaults-tabbed-page-C9YxgvuI.js +0 -1
- package/dist/gateway/static/root/assets/agents-CteVs3UO.js +0 -71
- package/dist/gateway/static/root/assets/apps-page-CVQ1M8Ax.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-Cd3JbeQ1.js +0 -1
- package/dist/gateway/static/root/assets/config-api-C4RAtTKW.js +0 -3
- package/dist/gateway/static/root/assets/connectors-page-MsMa5qBr.js +0 -2
- package/dist/gateway/static/root/assets/cron-api-sJNMqB6P.js +0 -1
- package/dist/gateway/static/root/assets/cron-page-D30CSwkn.js +0 -3
- package/dist/gateway/static/root/assets/dreaming-settings-6fCUWRQf.js +0 -1
- package/dist/gateway/static/root/assets/gateway-config-api-C6989a-W.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-BpF26t91.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-DOjhmRyf.js +0 -1
- package/dist/gateway/static/root/assets/goals-page-Xl9_wrFc.js +0 -2
- package/dist/gateway/static/root/assets/heartbeat-settings-DN9vEj9P.js +0 -1
- package/dist/gateway/static/root/assets/index-C8ytlAF2.js +0 -122
- package/dist/gateway/static/root/assets/index-CVpJW2NS.css +0 -1
- package/dist/gateway/static/root/assets/messages-BqzIDrlr.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-panel-BO4o-GmO.js +0 -2
- package/dist/gateway/static/root/assets/note-detail-page-DLV_XDmT.js +0 -2
- package/dist/gateway/static/root/assets/notes-page-ycsDlkFA.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-DQpnE8K9.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-BZui7iAY.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DEfzZ1ax.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-CLuSsu1-.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-Cq4qpXLi.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-B9F3HyYQ.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-Bp9UPPwm.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-BIoBsfSV.js +0 -2
- package/dist/gateway/static/root/assets/use-agent-defaults-form-Cz2_pPzu.js +0 -1
- package/dist/gateway/static/root/assets/use-settings-tab-guard-nuHMmZQv.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-BUIrKb8s.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-qE3SexnO.js +0 -18
- package/dist/src/agent/context/workspace-templates/USER.md +0 -24
|
@@ -1,9 +1,31 @@
|
|
|
1
1
|
import type { AgentTool } from '@earendil-works/pi-agent-core';
|
|
2
2
|
import type { MemoryProvider, MemoryProviderInitOptions } from './provider.js';
|
|
3
|
+
import type { MemoryDeleteRequest, MemoryListRequest, MemoryReadRequest, MemoryReadResult, MemorySearchRequest, MemorySearchResult, MemoryUpdateRequest, MemoryWriteRequest, MemoryWriteResult, MemoryRecord, MemorySignal, MemoryKind } from './types.js';
|
|
4
|
+
export type MemorySearchStrategy = 'local-first' | 'external-first' | 'fanout' | 'local-only' | 'external-only';
|
|
5
|
+
export type MemoryWriteStrategy = 'local-first' | 'external-first' | 'write-through' | 'local-only' | 'external-only';
|
|
6
|
+
export interface MemoryRoutingOptions {
|
|
7
|
+
searchStrategy?: MemorySearchStrategy;
|
|
8
|
+
writeStrategy?: MemoryWriteStrategy;
|
|
9
|
+
replicateTo?: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface MemoryManagerOptions extends MemoryRoutingOptions {
|
|
12
|
+
loadProviders?: () => Promise<MemoryProvider[]>;
|
|
13
|
+
writePolicy?: MemoryWritePolicy;
|
|
14
|
+
}
|
|
15
|
+
export interface MemoryWritePolicy {
|
|
16
|
+
allowExternalWrites?: boolean;
|
|
17
|
+
allowedProviderIds?: string[];
|
|
18
|
+
autoWriteKinds?: MemoryKind[];
|
|
19
|
+
requireUserProfileApproval?: boolean;
|
|
20
|
+
}
|
|
3
21
|
export declare class MemoryManager {
|
|
4
22
|
private providers;
|
|
5
23
|
private toolToProvider;
|
|
6
|
-
private
|
|
24
|
+
private readonly routing;
|
|
25
|
+
private readonly loadProviders?;
|
|
26
|
+
private readonly writePolicy;
|
|
27
|
+
private pluginProvidersLoaded;
|
|
28
|
+
constructor(options?: MemoryManagerOptions);
|
|
7
29
|
addProvider(provider: MemoryProvider): void;
|
|
8
30
|
get providersList(): MemoryProvider[];
|
|
9
31
|
/**
|
|
@@ -18,10 +40,25 @@ export declare class MemoryManager {
|
|
|
18
40
|
}): void;
|
|
19
41
|
syncAll(userContent: string, assistantContent: string, options?: {
|
|
20
42
|
sessionId?: string;
|
|
21
|
-
}): void
|
|
43
|
+
}): Promise<void>;
|
|
44
|
+
private proposeCandidatesFromTurn;
|
|
22
45
|
getAdditionalTools(): AgentTool[];
|
|
23
46
|
handleToolCall(toolName: string, args: Record<string, unknown>): Promise<string>;
|
|
47
|
+
search(request: MemorySearchRequest): Promise<MemorySearchResult[]>;
|
|
48
|
+
read(request: MemoryReadRequest): Promise<MemoryReadResult | null>;
|
|
49
|
+
get(id: string): Promise<MemoryRecord | null>;
|
|
50
|
+
list(request: MemoryListRequest): Promise<MemoryRecord[]>;
|
|
51
|
+
write(request: MemoryWriteRequest): Promise<MemoryWriteResult>;
|
|
52
|
+
update(request: MemoryUpdateRequest): Promise<MemoryWriteResult>;
|
|
53
|
+
delete(request: MemoryDeleteRequest): Promise<MemoryWriteResult>;
|
|
24
54
|
onMemoryWrite(action: 'add' | 'replace' | 'remove', target: 'memory' | 'user', content: string): void;
|
|
55
|
+
recordSignal(signal: MemorySignal): void;
|
|
25
56
|
initializeAll(sessionId: string, options?: MemoryProviderInitOptions): Promise<void>;
|
|
57
|
+
private loadPluginProvidersOnce;
|
|
26
58
|
shutdownAll(): Promise<void>;
|
|
59
|
+
private providersForSearch;
|
|
60
|
+
private providersForWrite;
|
|
61
|
+
private writeWithStrategy;
|
|
62
|
+
private providerAllowedForWrite;
|
|
63
|
+
private trace;
|
|
27
64
|
}
|
|
@@ -1,38 +1,48 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
+
import { appendMemoryTraceEvent } from "../../storage/sqlite/memory-records-repository.js";
|
|
4
|
+
import "../../storage/sqlite/index.js";
|
|
5
|
+
import { proposeMemoryCandidatesFromTurn } from "./candidate-extractor.js";
|
|
3
6
|
//#region src/agent/memory/manager.ts
|
|
4
7
|
init_logger();
|
|
5
8
|
const log = createLogger("MemoryManager");
|
|
6
9
|
var MemoryManager = class {
|
|
7
10
|
providers = [];
|
|
8
11
|
toolToProvider = /* @__PURE__ */ new Map();
|
|
9
|
-
|
|
12
|
+
routing;
|
|
13
|
+
loadProviders;
|
|
14
|
+
writePolicy;
|
|
15
|
+
pluginProvidersLoaded = false;
|
|
16
|
+
constructor(options = {}) {
|
|
17
|
+
this.routing = {
|
|
18
|
+
searchStrategy: options.searchStrategy ?? "fanout",
|
|
19
|
+
writeStrategy: options.writeStrategy ?? "local-first",
|
|
20
|
+
replicateTo: options.replicateTo ?? []
|
|
21
|
+
};
|
|
22
|
+
this.loadProviders = options.loadProviders;
|
|
23
|
+
this.writePolicy = {
|
|
24
|
+
allowExternalWrites: options.writePolicy?.allowExternalWrites ?? false,
|
|
25
|
+
requireUserProfileApproval: options.writePolicy?.requireUserProfileApproval ?? false,
|
|
26
|
+
allowedProviderIds: options.writePolicy?.allowedProviderIds,
|
|
27
|
+
autoWriteKinds: options.writePolicy?.autoWriteKinds
|
|
28
|
+
};
|
|
29
|
+
}
|
|
10
30
|
addProvider(provider) {
|
|
11
|
-
if (!(provider.name === "builtin")) {
|
|
12
|
-
if (this.hasExternal) {
|
|
13
|
-
const existing = this.providers.find((p) => p.name !== "builtin")?.name ?? "unknown";
|
|
14
|
-
log.warn({
|
|
15
|
-
rejected: provider.name,
|
|
16
|
-
existing
|
|
17
|
-
}, "Rejected memory provider — only one external provider allowed");
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
this.hasExternal = true;
|
|
21
|
-
}
|
|
22
31
|
this.providers.push(provider);
|
|
23
|
-
for (const schema of provider.getToolSchemas()) {
|
|
32
|
+
for (const schema of provider.getToolSchemas?.() ?? []) {
|
|
24
33
|
const toolName = schema.name;
|
|
25
34
|
if (!toolName) continue;
|
|
26
35
|
if (!this.toolToProvider.has(toolName)) this.toolToProvider.set(toolName, provider);
|
|
27
36
|
else log.warn({
|
|
28
37
|
toolName,
|
|
29
|
-
existing: this.toolToProvider.get(toolName)?.
|
|
30
|
-
ignored: provider.
|
|
38
|
+
existing: this.toolToProvider.get(toolName)?.id,
|
|
39
|
+
ignored: provider.id
|
|
31
40
|
}, "Memory tool name conflict");
|
|
32
41
|
}
|
|
33
42
|
log.info({
|
|
34
|
-
|
|
35
|
-
toolCount: provider.getToolSchemas().length
|
|
43
|
+
id: provider.id,
|
|
44
|
+
toolCount: provider.getToolSchemas?.().length ?? 0,
|
|
45
|
+
capabilities: provider.capabilities
|
|
36
46
|
}, "Memory provider registered");
|
|
37
47
|
}
|
|
38
48
|
get providersList() {
|
|
@@ -44,14 +54,14 @@ var MemoryManager = class {
|
|
|
44
54
|
buildExternalSystemPrompt() {
|
|
45
55
|
const blocks = [];
|
|
46
56
|
for (const p of this.providers) {
|
|
47
|
-
if (p.
|
|
57
|
+
if (p.capabilities.local) continue;
|
|
48
58
|
try {
|
|
49
|
-
const block = p.systemPromptBlock();
|
|
59
|
+
const block = p.systemPromptBlock?.();
|
|
50
60
|
if (block?.trim()) blocks.push(block.trim());
|
|
51
61
|
} catch (err) {
|
|
52
62
|
log.warn({
|
|
53
63
|
err,
|
|
54
|
-
|
|
64
|
+
id: p.id
|
|
55
65
|
}, "systemPromptBlock failed");
|
|
56
66
|
}
|
|
57
67
|
}
|
|
@@ -60,50 +70,91 @@ var MemoryManager = class {
|
|
|
60
70
|
async prefetchAll(query, options) {
|
|
61
71
|
const parts = [];
|
|
62
72
|
for (const p of this.providers) try {
|
|
63
|
-
const v = await p.prefetch(query, options);
|
|
73
|
+
const v = await p.prefetch?.(query, options);
|
|
64
74
|
if (v?.trim()) parts.push(v.trim());
|
|
65
75
|
} catch (err) {
|
|
66
76
|
log.debug({
|
|
67
77
|
err,
|
|
68
|
-
|
|
78
|
+
id: p.id
|
|
69
79
|
}, "prefetch failed (non-fatal)");
|
|
70
80
|
}
|
|
71
81
|
return parts.join("\n\n");
|
|
72
82
|
}
|
|
73
83
|
queuePrefetchAll(query, options) {
|
|
74
84
|
for (const p of this.providers) try {
|
|
75
|
-
p.queuePrefetch(query, options);
|
|
85
|
+
p.queuePrefetch?.(query, options);
|
|
76
86
|
} catch (err) {
|
|
77
87
|
log.debug({
|
|
78
88
|
err,
|
|
79
|
-
|
|
89
|
+
id: p.id
|
|
80
90
|
}, "queuePrefetch failed (non-fatal)");
|
|
81
91
|
}
|
|
82
92
|
}
|
|
83
|
-
syncAll(userContent, assistantContent, options) {
|
|
84
|
-
|
|
85
|
-
|
|
93
|
+
async syncAll(userContent, assistantContent, options) {
|
|
94
|
+
const event = {
|
|
95
|
+
type: "turn",
|
|
96
|
+
userContent,
|
|
97
|
+
assistantContent,
|
|
98
|
+
sessionId: options?.sessionId
|
|
99
|
+
};
|
|
100
|
+
await this.proposeCandidatesFromTurn(event);
|
|
101
|
+
for (const p of this.providers) {
|
|
102
|
+
const started = Date.now();
|
|
103
|
+
try {
|
|
104
|
+
await p.sync?.(event);
|
|
105
|
+
this.trace("sync", p.id, event, {
|
|
106
|
+
resultCount: 1,
|
|
107
|
+
durationMs: Date.now() - started,
|
|
108
|
+
sessionKey: options?.sessionId
|
|
109
|
+
});
|
|
110
|
+
} catch (err) {
|
|
111
|
+
this.trace("sync", p.id, event, {
|
|
112
|
+
error: err instanceof Error ? err.message : String(err),
|
|
113
|
+
durationMs: Date.now() - started,
|
|
114
|
+
sessionKey: options?.sessionId
|
|
115
|
+
});
|
|
116
|
+
log.warn({
|
|
117
|
+
err,
|
|
118
|
+
id: p.id
|
|
119
|
+
}, "memory sync failed");
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
async proposeCandidatesFromTurn(event) {
|
|
124
|
+
const candidates = proposeMemoryCandidatesFromTurn({
|
|
125
|
+
userContent: event.userContent,
|
|
126
|
+
assistantContent: event.assistantContent,
|
|
127
|
+
sessionKey: event.sessionId
|
|
128
|
+
});
|
|
129
|
+
for (const candidate of candidates) try {
|
|
130
|
+
await this.write({
|
|
131
|
+
...candidate,
|
|
132
|
+
scope: {
|
|
133
|
+
...candidate.scope ?? {},
|
|
134
|
+
...event.sessionId ? { sessionKey: event.sessionId } : {}
|
|
135
|
+
}
|
|
136
|
+
});
|
|
86
137
|
} catch (err) {
|
|
87
|
-
log.
|
|
138
|
+
log.debug({
|
|
88
139
|
err,
|
|
89
|
-
|
|
90
|
-
}, "
|
|
140
|
+
sessionKey: event.sessionId
|
|
141
|
+
}, "memory candidate proposal failed");
|
|
91
142
|
}
|
|
92
143
|
}
|
|
93
144
|
getAdditionalTools() {
|
|
94
145
|
const out = [];
|
|
95
146
|
const seen = /* @__PURE__ */ new Set();
|
|
96
147
|
for (const p of this.providers) {
|
|
97
|
-
if (p.
|
|
148
|
+
if (p.capabilities.local) continue;
|
|
98
149
|
try {
|
|
99
|
-
for (const t of p.getToolSchemas()) if (t.name && !seen.has(t.name)) {
|
|
150
|
+
for (const t of p.getToolSchemas?.() ?? []) if (t.name && !seen.has(t.name)) {
|
|
100
151
|
seen.add(t.name);
|
|
101
152
|
out.push(t);
|
|
102
153
|
}
|
|
103
154
|
} catch (err) {
|
|
104
155
|
log.warn({
|
|
105
156
|
err,
|
|
106
|
-
|
|
157
|
+
id: p.id
|
|
107
158
|
}, "getToolSchemas failed");
|
|
108
159
|
}
|
|
109
160
|
}
|
|
@@ -112,42 +163,307 @@ var MemoryManager = class {
|
|
|
112
163
|
async handleToolCall(toolName, args) {
|
|
113
164
|
const provider = this.toolToProvider.get(toolName);
|
|
114
165
|
if (!provider) throw new Error(`No memory provider handles tool '${toolName}'`);
|
|
166
|
+
if (!provider.handleToolCall) throw new Error(`Memory provider '${provider.id}' does not handle tool calls`);
|
|
115
167
|
return provider.handleToolCall(toolName, args);
|
|
116
168
|
}
|
|
169
|
+
async search(request) {
|
|
170
|
+
const providers = this.providersForSearch();
|
|
171
|
+
const results = [];
|
|
172
|
+
for (const p of providers) {
|
|
173
|
+
if (!p.capabilities.search || !p.search) continue;
|
|
174
|
+
const started = Date.now();
|
|
175
|
+
try {
|
|
176
|
+
const providerResults = await p.search(request);
|
|
177
|
+
this.trace("search", p.id, request, {
|
|
178
|
+
resultCount: providerResults.length,
|
|
179
|
+
selectedRecordIds: providerResults.map((result) => result.record.id),
|
|
180
|
+
durationMs: Date.now() - started,
|
|
181
|
+
sessionKey: request.scope?.sessionKey
|
|
182
|
+
});
|
|
183
|
+
results.push(...providerResults);
|
|
184
|
+
if (providerResults.length > 0 && this.routing.searchStrategy !== "fanout") break;
|
|
185
|
+
} catch (err) {
|
|
186
|
+
this.trace("search", p.id, request, {
|
|
187
|
+
error: err instanceof Error ? err.message : String(err),
|
|
188
|
+
durationMs: Date.now() - started,
|
|
189
|
+
sessionKey: request.scope?.sessionKey
|
|
190
|
+
});
|
|
191
|
+
log.warn({
|
|
192
|
+
err,
|
|
193
|
+
id: p.id
|
|
194
|
+
}, "memory search failed");
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
const seen = /* @__PURE__ */ new Set();
|
|
198
|
+
return results.sort((a, b) => b.score - a.score).filter((result) => {
|
|
199
|
+
const key = `${result.citation.providerId}:${result.citation.recordId}`;
|
|
200
|
+
if (seen.has(key)) return false;
|
|
201
|
+
seen.add(key);
|
|
202
|
+
return true;
|
|
203
|
+
}).slice(0, request.maxResults ?? 5);
|
|
204
|
+
}
|
|
205
|
+
async read(request) {
|
|
206
|
+
for (const p of this.providersForSearch()) {
|
|
207
|
+
if (!p.capabilities.read || !p.read) continue;
|
|
208
|
+
const started = Date.now();
|
|
209
|
+
try {
|
|
210
|
+
const result = await p.read(request);
|
|
211
|
+
this.trace("read", p.id, request, {
|
|
212
|
+
resultCount: result ? 1 : 0,
|
|
213
|
+
selectedRecordIds: result ? [result.record.id] : [],
|
|
214
|
+
durationMs: Date.now() - started,
|
|
215
|
+
sessionKey: request.scope?.sessionKey
|
|
216
|
+
});
|
|
217
|
+
if (result) return result;
|
|
218
|
+
} catch (err) {
|
|
219
|
+
this.trace("read", p.id, request, {
|
|
220
|
+
error: err instanceof Error ? err.message : String(err),
|
|
221
|
+
durationMs: Date.now() - started,
|
|
222
|
+
sessionKey: request.scope?.sessionKey
|
|
223
|
+
});
|
|
224
|
+
log.warn({
|
|
225
|
+
err,
|
|
226
|
+
id: p.id
|
|
227
|
+
}, "memory read failed");
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
async get(id) {
|
|
233
|
+
for (const p of this.providers) {
|
|
234
|
+
if (!p.capabilities.read) continue;
|
|
235
|
+
try {
|
|
236
|
+
const direct = await p.get?.(id);
|
|
237
|
+
if (direct) return direct;
|
|
238
|
+
} catch (err) {
|
|
239
|
+
log.warn({
|
|
240
|
+
err,
|
|
241
|
+
id: p.id,
|
|
242
|
+
recordId: id
|
|
243
|
+
}, "memory get failed");
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
async list(request) {
|
|
249
|
+
const out = [];
|
|
250
|
+
for (const p of this.providersForSearch()) {
|
|
251
|
+
if (!p.capabilities.read || !p.list) continue;
|
|
252
|
+
try {
|
|
253
|
+
out.push(...await p.list(request));
|
|
254
|
+
} catch (err) {
|
|
255
|
+
log.warn({
|
|
256
|
+
err,
|
|
257
|
+
id: p.id
|
|
258
|
+
}, "memory list failed");
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return out;
|
|
262
|
+
}
|
|
263
|
+
async write(request) {
|
|
264
|
+
return this.writeWithStrategy("write", request);
|
|
265
|
+
}
|
|
266
|
+
async update(request) {
|
|
267
|
+
return this.writeWithStrategy("update", request);
|
|
268
|
+
}
|
|
269
|
+
async delete(request) {
|
|
270
|
+
return this.writeWithStrategy("delete", request);
|
|
271
|
+
}
|
|
117
272
|
onMemoryWrite(action, target, content) {
|
|
118
273
|
for (const p of this.providers) {
|
|
119
|
-
if (p.
|
|
274
|
+
if (p.capabilities.local) continue;
|
|
120
275
|
try {
|
|
121
|
-
p.
|
|
276
|
+
p.sync?.({
|
|
277
|
+
type: "write",
|
|
278
|
+
action,
|
|
279
|
+
target,
|
|
280
|
+
content
|
|
281
|
+
});
|
|
122
282
|
} catch (err) {
|
|
123
283
|
log.debug({
|
|
124
284
|
err,
|
|
125
|
-
|
|
126
|
-
}, "
|
|
285
|
+
id: p.id
|
|
286
|
+
}, "memory write sync failed");
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
recordSignal(signal) {
|
|
291
|
+
for (const p of this.providers) {
|
|
292
|
+
const started = Date.now();
|
|
293
|
+
try {
|
|
294
|
+
p.sync?.({
|
|
295
|
+
type: "signal",
|
|
296
|
+
signal
|
|
297
|
+
});
|
|
298
|
+
this.trace("sync", p.id, {
|
|
299
|
+
type: "signal",
|
|
300
|
+
signal
|
|
301
|
+
}, {
|
|
302
|
+
resultCount: 1,
|
|
303
|
+
durationMs: Date.now() - started
|
|
304
|
+
});
|
|
305
|
+
} catch (err) {
|
|
306
|
+
this.trace("sync", p.id, {
|
|
307
|
+
type: "signal",
|
|
308
|
+
signal
|
|
309
|
+
}, {
|
|
310
|
+
error: err instanceof Error ? err.message : String(err),
|
|
311
|
+
durationMs: Date.now() - started
|
|
312
|
+
});
|
|
313
|
+
log.debug({
|
|
314
|
+
err,
|
|
315
|
+
id: p.id,
|
|
316
|
+
source: signal.source
|
|
317
|
+
}, "memory signal sync failed");
|
|
127
318
|
}
|
|
128
319
|
}
|
|
129
320
|
}
|
|
130
321
|
async initializeAll(sessionId, options) {
|
|
322
|
+
await this.loadPluginProvidersOnce();
|
|
131
323
|
for (const p of this.providers) try {
|
|
132
324
|
await p.initialize(sessionId, options);
|
|
133
325
|
} catch (err) {
|
|
134
326
|
log.warn({
|
|
135
327
|
err,
|
|
136
|
-
|
|
328
|
+
id: p.id
|
|
137
329
|
}, "initialize failed");
|
|
138
330
|
}
|
|
139
331
|
}
|
|
332
|
+
async loadPluginProvidersOnce() {
|
|
333
|
+
if (this.pluginProvidersLoaded || !this.loadProviders) return;
|
|
334
|
+
this.pluginProvidersLoaded = true;
|
|
335
|
+
try {
|
|
336
|
+
const providers = await this.loadProviders();
|
|
337
|
+
const existingIds = new Set(this.providers.map((p) => p.id));
|
|
338
|
+
for (const provider of providers) {
|
|
339
|
+
if (existingIds.has(provider.id)) {
|
|
340
|
+
log.warn({ id: provider.id }, "Skipped duplicate memory provider");
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
343
|
+
this.addProvider(provider);
|
|
344
|
+
existingIds.add(provider.id);
|
|
345
|
+
}
|
|
346
|
+
} catch (err) {
|
|
347
|
+
log.warn({ err }, "Memory provider plugin loading failed");
|
|
348
|
+
}
|
|
349
|
+
}
|
|
140
350
|
async shutdownAll() {
|
|
141
351
|
for (const p of [...this.providers].reverse()) try {
|
|
142
352
|
await p.shutdown();
|
|
143
353
|
} catch (err) {
|
|
144
354
|
log.warn({
|
|
145
355
|
err,
|
|
146
|
-
|
|
356
|
+
id: p.id
|
|
147
357
|
}, "shutdown failed");
|
|
148
358
|
}
|
|
149
359
|
}
|
|
360
|
+
providersForSearch() {
|
|
361
|
+
const locals = this.providers.filter((p) => p.capabilities.local);
|
|
362
|
+
const externals = this.providers.filter((p) => !p.capabilities.local);
|
|
363
|
+
switch (this.routing.searchStrategy) {
|
|
364
|
+
case "local-only": return locals;
|
|
365
|
+
case "external-only": return externals;
|
|
366
|
+
case "external-first": return [...externals, ...locals];
|
|
367
|
+
default: return [...locals, ...externals];
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
providersForWrite() {
|
|
371
|
+
const locals = this.providers.filter((p) => p.capabilities.local);
|
|
372
|
+
const externals = this.providers.filter((p) => !p.capabilities.local);
|
|
373
|
+
switch (this.routing.writeStrategy) {
|
|
374
|
+
case "local-only": return locals;
|
|
375
|
+
case "external-only": return externals;
|
|
376
|
+
case "external-first": return [...externals, ...locals];
|
|
377
|
+
default: return [...locals, ...externals];
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
async writeWithStrategy(operation, request) {
|
|
381
|
+
const providers = operation === "write" && request.status === "candidate" ? this.providers.filter((provider) => provider.capabilities.local) : this.providersForWrite();
|
|
382
|
+
const errors = [];
|
|
383
|
+
let firstSuccess = null;
|
|
384
|
+
for (const p of providers) {
|
|
385
|
+
const fn = p[operation];
|
|
386
|
+
if (!this.providerAllowedForWrite(p, operation, request)) {
|
|
387
|
+
this.trace(operation, p.id, request, {
|
|
388
|
+
skippedReason: "policy",
|
|
389
|
+
sessionKey: request.scope?.sessionKey
|
|
390
|
+
});
|
|
391
|
+
continue;
|
|
392
|
+
}
|
|
393
|
+
if (!(operation === "write" && p.capabilities.write || operation === "update" && p.capabilities.update || operation === "delete" && p.capabilities.delete) || !fn) continue;
|
|
394
|
+
const started = Date.now();
|
|
395
|
+
try {
|
|
396
|
+
const result = await fn.call(p, request);
|
|
397
|
+
this.trace(operation, p.id, request, {
|
|
398
|
+
resultCount: result.record ? 1 : 0,
|
|
399
|
+
selectedRecordIds: result.record ? [result.record.id] : [],
|
|
400
|
+
error: result.success ? void 0 : result.error,
|
|
401
|
+
durationMs: Date.now() - started,
|
|
402
|
+
sessionKey: request.scope?.sessionKey
|
|
403
|
+
});
|
|
404
|
+
if (result.success) {
|
|
405
|
+
firstSuccess ??= result;
|
|
406
|
+
if (this.routing.writeStrategy !== "write-through") return result;
|
|
407
|
+
} else if (result.error) errors.push(`${p.id}: ${result.error}`);
|
|
408
|
+
} catch (err) {
|
|
409
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
410
|
+
this.trace(operation, p.id, request, {
|
|
411
|
+
error: message,
|
|
412
|
+
durationMs: Date.now() - started,
|
|
413
|
+
sessionKey: request.scope?.sessionKey
|
|
414
|
+
});
|
|
415
|
+
errors.push(`${p.id}: ${message}`);
|
|
416
|
+
log.warn({
|
|
417
|
+
err,
|
|
418
|
+
id: p.id,
|
|
419
|
+
operation
|
|
420
|
+
}, "memory write operation failed");
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
if (firstSuccess) return firstSuccess;
|
|
424
|
+
return {
|
|
425
|
+
success: false,
|
|
426
|
+
error: errors.join("; ") || `No provider supports memory ${operation}`
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
providerAllowedForWrite(provider, operation, request) {
|
|
430
|
+
if (!provider.capabilities.local && !this.writePolicy.allowExternalWrites) return false;
|
|
431
|
+
if (!provider.capabilities.local && this.writePolicy.allowedProviderIds && this.writePolicy.allowedProviderIds.length > 0 && !this.writePolicy.allowedProviderIds.includes(provider.id)) return false;
|
|
432
|
+
if (operation === "write") {
|
|
433
|
+
const writeRequest = request;
|
|
434
|
+
if (writeRequest.status === "candidate" && !provider.capabilities.local) return false;
|
|
435
|
+
if (this.writePolicy.autoWriteKinds && this.writePolicy.autoWriteKinds.length > 0 && !this.writePolicy.autoWriteKinds.includes(writeRequest.kind)) return false;
|
|
436
|
+
if (this.writePolicy.requireUserProfileApproval && writeRequest.kind === "user_profile" && !writeRequest.approved) return false;
|
|
437
|
+
}
|
|
438
|
+
if (operation === "update" && this.writePolicy.requireUserProfileApproval) {
|
|
439
|
+
const updateRequest = request;
|
|
440
|
+
if (updateRequest.target === "user" && !updateRequest.approved) return false;
|
|
441
|
+
}
|
|
442
|
+
return true;
|
|
443
|
+
}
|
|
444
|
+
trace(phase, providerId, request, meta = {}) {
|
|
445
|
+
try {
|
|
446
|
+
appendMemoryTraceEvent({
|
|
447
|
+
phase,
|
|
448
|
+
providerId,
|
|
449
|
+
request: sanitizeTraceRequest(request),
|
|
450
|
+
...meta
|
|
451
|
+
});
|
|
452
|
+
} catch (err) {
|
|
453
|
+
log.debug({
|
|
454
|
+
err,
|
|
455
|
+
providerId,
|
|
456
|
+
phase
|
|
457
|
+
}, "memory trace append failed");
|
|
458
|
+
}
|
|
459
|
+
}
|
|
150
460
|
};
|
|
461
|
+
function sanitizeTraceRequest(request) {
|
|
462
|
+
if (!request || typeof request !== "object") return request;
|
|
463
|
+
const copy = { ...request };
|
|
464
|
+
if (typeof copy.content === "string" && copy.content.length > 500) copy.content = `${copy.content.slice(0, 500)}…`;
|
|
465
|
+
return copy;
|
|
466
|
+
}
|
|
151
467
|
//#endregion
|
|
152
468
|
export { MemoryManager };
|
|
153
469
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","names":[],"sources":["../../../../src/agent/memory/manager.ts"],"sourcesContent":["import type { AgentTool } from '@earendil-works/pi-agent-core';\n\nimport { createLogger } from '../../utils/logger.js';\nimport type { MemoryProvider, MemoryProviderInitOptions } from './provider.js';\n\nconst log = createLogger('MemoryManager');\n\nexport class MemoryManager {\n private providers: MemoryProvider[] = [];\n private toolToProvider = new Map<string, MemoryProvider>();\n private hasExternal = false;\n\n addProvider(provider: MemoryProvider): void {\n const isBuiltin = provider.name === 'builtin';\n\n if (!isBuiltin) {\n if (this.hasExternal) {\n const existing = this.providers.find((p) => p.name !== 'builtin')?.name ?? 'unknown';\n log.warn(\n { rejected: provider.name, existing },\n 'Rejected memory provider — only one external provider allowed',\n );\n return;\n }\n this.hasExternal = true;\n }\n\n this.providers.push(provider);\n\n for (const schema of provider.getToolSchemas()) {\n const toolName = schema.name;\n if (!toolName) {\n continue;\n }\n if (!this.toolToProvider.has(toolName)) {\n this.toolToProvider.set(toolName, provider);\n } else {\n log.warn(\n { toolName, existing: this.toolToProvider.get(toolName)?.name, ignored: provider.name },\n 'Memory tool name conflict',\n );\n }\n }\n\n log.info({ name: provider.name, toolCount: provider.getToolSchemas().length }, 'Memory provider registered');\n }\n\n get providersList(): MemoryProvider[] {\n return [...this.providers];\n }\n\n /**\n * Non-builtin static instructions (builtin uses curated snapshot in system prompt builder).\n */\n buildExternalSystemPrompt(): string {\n const blocks: string[] = [];\n for (const p of this.providers) {\n if (p.name === 'builtin') {\n continue;\n }\n try {\n const block = p.systemPromptBlock();\n if (block?.trim()) {\n blocks.push(block.trim());\n }\n } catch (err) {\n log.warn({ err, name: p.name }, 'systemPromptBlock failed');\n }\n }\n return blocks.join('\\n\\n');\n }\n\n async prefetchAll(query: string, options?: { sessionId?: string }): Promise<string> {\n const parts: string[] = [];\n for (const p of this.providers) {\n try {\n const v = await p.prefetch(query, options);\n if (v?.trim()) {\n parts.push(v.trim());\n }\n } catch (err) {\n log.debug({ err, name: p.name }, 'prefetch failed (non-fatal)');\n }\n }\n return parts.join('\\n\\n');\n }\n\n queuePrefetchAll(query: string, options?: { sessionId?: string }): void {\n for (const p of this.providers) {\n try {\n p.queuePrefetch(query, options);\n } catch (err) {\n log.debug({ err, name: p.name }, 'queuePrefetch failed (non-fatal)');\n }\n }\n }\n\n syncAll(userContent: string, assistantContent: string, options?: { sessionId?: string }): void {\n for (const p of this.providers) {\n try {\n p.syncTurn(userContent, assistantContent, options);\n } catch (err) {\n log.warn({ err, name: p.name }, 'syncTurn failed');\n }\n }\n }\n\n getAdditionalTools(): AgentTool[] {\n const out: AgentTool[] = [];\n const seen = new Set<string>();\n for (const p of this.providers) {\n if (p.name === 'builtin') {\n continue;\n }\n try {\n for (const t of p.getToolSchemas()) {\n if (t.name && !seen.has(t.name)) {\n seen.add(t.name);\n out.push(t);\n }\n }\n } catch (err) {\n log.warn({ err, name: p.name }, 'getToolSchemas failed');\n }\n }\n return out;\n }\n\n async handleToolCall(toolName: string, args: Record<string, unknown>): Promise<string> {\n const provider = this.toolToProvider.get(toolName);\n if (!provider) {\n throw new Error(`No memory provider handles tool '${toolName}'`);\n }\n return provider.handleToolCall(toolName, args);\n }\n\n onMemoryWrite(action: 'add' | 'replace' | 'remove', target: 'memory' | 'user', content: string): void {\n for (const p of this.providers) {\n if (p.name === 'builtin') {\n continue;\n }\n try {\n p.onMemoryWrite?.(action, target, content);\n } catch (err) {\n log.debug({ err, name: p.name }, 'onMemoryWrite failed');\n }\n }\n }\n\n async initializeAll(sessionId: string, options?: MemoryProviderInitOptions): Promise<void> {\n for (const p of this.providers) {\n try {\n await p.initialize(sessionId, options);\n } catch (err) {\n log.warn({ err, name: p.name }, 'initialize failed');\n }\n }\n }\n\n async shutdownAll(): Promise<void> {\n for (const p of [...this.providers].reverse()) {\n try {\n await p.shutdown();\n } catch (err) {\n log.warn({ err, name: p.name }, 'shutdown failed');\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manager.js","names":[],"sources":["../../../../src/agent/memory/manager.ts"],"sourcesContent":["import type { AgentTool } from '@earendil-works/pi-agent-core';\n\nimport { appendMemoryTraceEvent } from '../../storage/sqlite/index.js';\nimport { createLogger } from '../../utils/logger.js';\nimport { proposeMemoryCandidatesFromTurn } from './candidate-extractor.js';\nimport type { MemoryProvider, MemoryProviderInitOptions } from './provider.js';\nimport type {\n MemoryDeleteRequest,\n MemoryListRequest,\n MemoryReadRequest,\n MemoryReadResult,\n MemorySearchRequest,\n MemorySearchResult,\n MemorySyncEvent,\n MemoryUpdateRequest,\n MemoryWriteRequest,\n MemoryWriteResult,\n MemoryRecord,\n MemorySignal,\n MemoryKind,\n} from './types.js';\n\nconst log = createLogger('MemoryManager');\n\nexport type MemorySearchStrategy = 'local-first' | 'external-first' | 'fanout' | 'local-only' | 'external-only';\nexport type MemoryWriteStrategy = 'local-first' | 'external-first' | 'write-through' | 'local-only' | 'external-only';\n\nexport interface MemoryRoutingOptions {\n searchStrategy?: MemorySearchStrategy;\n writeStrategy?: MemoryWriteStrategy;\n replicateTo?: string[];\n}\n\nexport interface MemoryManagerOptions extends MemoryRoutingOptions {\n loadProviders?: () => Promise<MemoryProvider[]>;\n writePolicy?: MemoryWritePolicy;\n}\n\nexport interface MemoryWritePolicy {\n allowExternalWrites?: boolean;\n allowedProviderIds?: string[];\n autoWriteKinds?: MemoryKind[];\n requireUserProfileApproval?: boolean;\n}\n\nexport class MemoryManager {\n private providers: MemoryProvider[] = [];\n private toolToProvider = new Map<string, MemoryProvider>();\n private readonly routing: Required<MemoryRoutingOptions>;\n private readonly loadProviders?: () => Promise<MemoryProvider[]>;\n private readonly writePolicy: Required<Pick<MemoryWritePolicy, 'allowExternalWrites' | 'requireUserProfileApproval'>> &\n Omit<MemoryWritePolicy, 'allowExternalWrites' | 'requireUserProfileApproval'>;\n private pluginProvidersLoaded = false;\n\n constructor(options: MemoryManagerOptions = {}) {\n this.routing = {\n searchStrategy: options.searchStrategy ?? 'fanout',\n writeStrategy: options.writeStrategy ?? 'local-first',\n replicateTo: options.replicateTo ?? [],\n };\n this.loadProviders = options.loadProviders;\n this.writePolicy = {\n allowExternalWrites: options.writePolicy?.allowExternalWrites ?? false,\n requireUserProfileApproval: options.writePolicy?.requireUserProfileApproval ?? false,\n allowedProviderIds: options.writePolicy?.allowedProviderIds,\n autoWriteKinds: options.writePolicy?.autoWriteKinds,\n };\n }\n\n addProvider(provider: MemoryProvider): void {\n this.providers.push(provider);\n\n for (const schema of provider.getToolSchemas?.() ?? []) {\n const toolName = schema.name;\n if (!toolName) {\n continue;\n }\n if (!this.toolToProvider.has(toolName)) {\n this.toolToProvider.set(toolName, provider);\n } else {\n log.warn(\n { toolName, existing: this.toolToProvider.get(toolName)?.id, ignored: provider.id },\n 'Memory tool name conflict',\n );\n }\n }\n\n log.info(\n { id: provider.id, toolCount: provider.getToolSchemas?.().length ?? 0, capabilities: provider.capabilities },\n 'Memory provider registered',\n );\n }\n\n get providersList(): MemoryProvider[] {\n return [...this.providers];\n }\n\n /**\n * Non-builtin static instructions (builtin uses curated snapshot in system prompt builder).\n */\n buildExternalSystemPrompt(): string {\n const blocks: string[] = [];\n for (const p of this.providers) {\n if (p.capabilities.local) {\n continue;\n }\n try {\n const block = p.systemPromptBlock?.();\n if (block?.trim()) {\n blocks.push(block.trim());\n }\n } catch (err) {\n log.warn({ err, id: p.id }, 'systemPromptBlock failed');\n }\n }\n return blocks.join('\\n\\n');\n }\n\n async prefetchAll(query: string, options?: { sessionId?: string }): Promise<string> {\n const parts: string[] = [];\n for (const p of this.providers) {\n try {\n const v = await p.prefetch?.(query, options);\n if (v?.trim()) {\n parts.push(v.trim());\n }\n } catch (err) {\n log.debug({ err, id: p.id }, 'prefetch failed (non-fatal)');\n }\n }\n return parts.join('\\n\\n');\n }\n\n queuePrefetchAll(query: string, options?: { sessionId?: string }): void {\n for (const p of this.providers) {\n try {\n p.queuePrefetch?.(query, options);\n } catch (err) {\n log.debug({ err, id: p.id }, 'queuePrefetch failed (non-fatal)');\n }\n }\n }\n\n async syncAll(userContent: string, assistantContent: string, options?: { sessionId?: string }): Promise<void> {\n const event: MemorySyncEvent = {\n type: 'turn',\n userContent,\n assistantContent,\n sessionId: options?.sessionId,\n };\n await this.proposeCandidatesFromTurn(event);\n for (const p of this.providers) {\n const started = Date.now();\n try {\n await p.sync?.(event);\n this.trace('sync', p.id, event, {\n resultCount: 1,\n durationMs: Date.now() - started,\n sessionKey: options?.sessionId,\n });\n } catch (err) {\n this.trace('sync', p.id, event, {\n error: err instanceof Error ? err.message : String(err),\n durationMs: Date.now() - started,\n sessionKey: options?.sessionId,\n });\n log.warn({ err, id: p.id }, 'memory sync failed');\n }\n }\n }\n\n private async proposeCandidatesFromTurn(event: Extract<MemorySyncEvent, { type: 'turn' }>): Promise<void> {\n const candidates = proposeMemoryCandidatesFromTurn({\n userContent: event.userContent,\n assistantContent: event.assistantContent,\n sessionKey: event.sessionId,\n });\n for (const candidate of candidates) {\n try {\n await this.write({\n ...candidate,\n scope: {\n ...(candidate.scope ?? {}),\n ...(event.sessionId ? { sessionKey: event.sessionId } : {}),\n },\n });\n } catch (err) {\n log.debug({ err, sessionKey: event.sessionId }, 'memory candidate proposal failed');\n }\n }\n }\n\n getAdditionalTools(): AgentTool[] {\n const out: AgentTool[] = [];\n const seen = new Set<string>();\n for (const p of this.providers) {\n if (p.capabilities.local) {\n continue;\n }\n try {\n for (const t of p.getToolSchemas?.() ?? []) {\n if (t.name && !seen.has(t.name)) {\n seen.add(t.name);\n out.push(t);\n }\n }\n } catch (err) {\n log.warn({ err, id: p.id }, 'getToolSchemas failed');\n }\n }\n return out;\n }\n\n async handleToolCall(toolName: string, args: Record<string, unknown>): Promise<string> {\n const provider = this.toolToProvider.get(toolName);\n if (!provider) {\n throw new Error(`No memory provider handles tool '${toolName}'`);\n }\n if (!provider.handleToolCall) {\n throw new Error(`Memory provider '${provider.id}' does not handle tool calls`);\n }\n return provider.handleToolCall(toolName, args);\n }\n\n async search(request: MemorySearchRequest): Promise<MemorySearchResult[]> {\n const providers = this.providersForSearch();\n const results: MemorySearchResult[] = [];\n\n for (const p of providers) {\n if (!p.capabilities.search || !p.search) continue;\n const started = Date.now();\n try {\n const providerResults = await p.search(request);\n this.trace('search', p.id, request, {\n resultCount: providerResults.length,\n selectedRecordIds: providerResults.map((result) => result.record.id),\n durationMs: Date.now() - started,\n sessionKey: request.scope?.sessionKey,\n });\n results.push(...providerResults);\n if (providerResults.length > 0 && this.routing.searchStrategy !== 'fanout') {\n break;\n }\n } catch (err) {\n this.trace('search', p.id, request, {\n error: err instanceof Error ? err.message : String(err),\n durationMs: Date.now() - started,\n sessionKey: request.scope?.sessionKey,\n });\n log.warn({ err, id: p.id }, 'memory search failed');\n }\n }\n\n const seen = new Set<string>();\n return results\n .sort((a, b) => b.score - a.score)\n .filter((result) => {\n const key = `${result.citation.providerId}:${result.citation.recordId}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n })\n .slice(0, request.maxResults ?? 5);\n }\n\n async read(request: MemoryReadRequest): Promise<MemoryReadResult | null> {\n for (const p of this.providersForSearch()) {\n if (!p.capabilities.read || !p.read) continue;\n const started = Date.now();\n try {\n const result = await p.read(request);\n this.trace('read', p.id, request, {\n resultCount: result ? 1 : 0,\n selectedRecordIds: result ? [result.record.id] : [],\n durationMs: Date.now() - started,\n sessionKey: request.scope?.sessionKey,\n });\n if (result) return result;\n } catch (err) {\n this.trace('read', p.id, request, {\n error: err instanceof Error ? err.message : String(err),\n durationMs: Date.now() - started,\n sessionKey: request.scope?.sessionKey,\n });\n log.warn({ err, id: p.id }, 'memory read failed');\n }\n }\n return null;\n }\n\n async get(id: string): Promise<MemoryRecord | null> {\n for (const p of this.providers) {\n if (!p.capabilities.read) continue;\n try {\n const direct = await p.get?.(id);\n if (direct) return direct;\n } catch (err) {\n log.warn({ err, id: p.id, recordId: id }, 'memory get failed');\n }\n }\n return null;\n }\n\n async list(request: MemoryListRequest): Promise<MemoryRecord[]> {\n const out: MemoryRecord[] = [];\n for (const p of this.providersForSearch()) {\n if (!p.capabilities.read || !p.list) continue;\n try {\n out.push(...await p.list(request));\n } catch (err) {\n log.warn({ err, id: p.id }, 'memory list failed');\n }\n }\n return out;\n }\n\n async write(request: MemoryWriteRequest): Promise<MemoryWriteResult> {\n return this.writeWithStrategy('write', request);\n }\n\n async update(request: MemoryUpdateRequest): Promise<MemoryWriteResult> {\n return this.writeWithStrategy('update', request);\n }\n\n async delete(request: MemoryDeleteRequest): Promise<MemoryWriteResult> {\n return this.writeWithStrategy('delete', request);\n }\n\n onMemoryWrite(action: 'add' | 'replace' | 'remove', target: 'memory' | 'user', content: string): void {\n for (const p of this.providers) {\n if (p.capabilities.local) {\n continue;\n }\n try {\n p.sync?.({ type: 'write', action, target, content });\n } catch (err) {\n log.debug({ err, id: p.id }, 'memory write sync failed');\n }\n }\n }\n\n recordSignal(signal: MemorySignal): void {\n for (const p of this.providers) {\n const started = Date.now();\n try {\n p.sync?.({ type: 'signal', signal });\n this.trace('sync', p.id, { type: 'signal', signal }, {\n resultCount: 1,\n durationMs: Date.now() - started,\n });\n } catch (err) {\n this.trace('sync', p.id, { type: 'signal', signal }, {\n error: err instanceof Error ? err.message : String(err),\n durationMs: Date.now() - started,\n });\n log.debug({ err, id: p.id, source: signal.source }, 'memory signal sync failed');\n }\n }\n }\n\n async initializeAll(sessionId: string, options?: MemoryProviderInitOptions): Promise<void> {\n await this.loadPluginProvidersOnce();\n for (const p of this.providers) {\n try {\n await p.initialize(sessionId, options);\n } catch (err) {\n log.warn({ err, id: p.id }, 'initialize failed');\n }\n }\n }\n\n private async loadPluginProvidersOnce(): Promise<void> {\n if (this.pluginProvidersLoaded || !this.loadProviders) return;\n this.pluginProvidersLoaded = true;\n try {\n const providers = await this.loadProviders();\n const existingIds = new Set(this.providers.map((p) => p.id));\n for (const provider of providers) {\n if (existingIds.has(provider.id)) {\n log.warn({ id: provider.id }, 'Skipped duplicate memory provider');\n continue;\n }\n this.addProvider(provider);\n existingIds.add(provider.id);\n }\n } catch (err) {\n log.warn({ err }, 'Memory provider plugin loading failed');\n }\n }\n\n async shutdownAll(): Promise<void> {\n for (const p of [...this.providers].reverse()) {\n try {\n await p.shutdown();\n } catch (err) {\n log.warn({ err, id: p.id }, 'shutdown failed');\n }\n }\n }\n\n private providersForSearch(): MemoryProvider[] {\n const locals = this.providers.filter((p) => p.capabilities.local);\n const externals = this.providers.filter((p) => !p.capabilities.local);\n switch (this.routing.searchStrategy) {\n case 'local-only':\n return locals;\n case 'external-only':\n return externals;\n case 'external-first':\n return [...externals, ...locals];\n case 'local-first':\n case 'fanout':\n default:\n return [...locals, ...externals];\n }\n }\n\n private providersForWrite(): MemoryProvider[] {\n const locals = this.providers.filter((p) => p.capabilities.local);\n const externals = this.providers.filter((p) => !p.capabilities.local);\n switch (this.routing.writeStrategy) {\n case 'local-only':\n return locals;\n case 'external-only':\n return externals;\n case 'external-first':\n return [...externals, ...locals];\n case 'write-through':\n case 'local-first':\n default:\n return [...locals, ...externals];\n }\n }\n\n private async writeWithStrategy(\n operation: 'write' | 'update' | 'delete',\n request: MemoryWriteRequest | MemoryUpdateRequest | MemoryDeleteRequest,\n ): Promise<MemoryWriteResult> {\n const providers =\n operation === 'write' && (request as MemoryWriteRequest).status === 'candidate'\n ? this.providers.filter((provider) => provider.capabilities.local)\n : this.providersForWrite();\n const errors: string[] = [];\n let firstSuccess: MemoryWriteResult | null = null;\n\n for (const p of providers) {\n const fn = p[operation];\n if (!this.providerAllowedForWrite(p, operation, request)) {\n this.trace(operation, p.id, request, {\n skippedReason: 'policy',\n sessionKey: request.scope?.sessionKey,\n });\n continue;\n }\n const canWrite =\n (operation === 'write' && p.capabilities.write) ||\n (operation === 'update' && p.capabilities.update) ||\n (operation === 'delete' && p.capabilities.delete);\n if (!canWrite || !fn) continue;\n const started = Date.now();\n try {\n const result = await fn.call(p, request as never);\n this.trace(operation, p.id, request, {\n resultCount: result.record ? 1 : 0,\n selectedRecordIds: result.record ? [result.record.id] : [],\n error: result.success ? undefined : result.error,\n durationMs: Date.now() - started,\n sessionKey: request.scope?.sessionKey,\n });\n if (result.success) {\n firstSuccess ??= result;\n if (this.routing.writeStrategy !== 'write-through') {\n return result;\n }\n } else if (result.error) {\n errors.push(`${p.id}: ${result.error}`);\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n this.trace(operation, p.id, request, {\n error: message,\n durationMs: Date.now() - started,\n sessionKey: request.scope?.sessionKey,\n });\n errors.push(`${p.id}: ${message}`);\n log.warn({ err, id: p.id, operation }, 'memory write operation failed');\n }\n }\n\n if (firstSuccess) return firstSuccess;\n return { success: false, error: errors.join('; ') || `No provider supports memory ${operation}` };\n }\n\n private providerAllowedForWrite(\n provider: MemoryProvider,\n operation: 'write' | 'update' | 'delete',\n request: MemoryWriteRequest | MemoryUpdateRequest | MemoryDeleteRequest,\n ): boolean {\n if (!provider.capabilities.local && !this.writePolicy.allowExternalWrites) {\n return false;\n }\n if (\n !provider.capabilities.local &&\n this.writePolicy.allowedProviderIds &&\n this.writePolicy.allowedProviderIds.length > 0 &&\n !this.writePolicy.allowedProviderIds.includes(provider.id)\n ) {\n return false;\n }\n if (operation === 'write') {\n const writeRequest = request as MemoryWriteRequest;\n if (writeRequest.status === 'candidate' && !provider.capabilities.local) {\n return false;\n }\n if (\n this.writePolicy.autoWriteKinds &&\n this.writePolicy.autoWriteKinds.length > 0 &&\n !this.writePolicy.autoWriteKinds.includes(writeRequest.kind)\n ) {\n return false;\n }\n if (\n this.writePolicy.requireUserProfileApproval &&\n writeRequest.kind === 'user_profile' &&\n !writeRequest.approved\n ) {\n return false;\n }\n }\n if (operation === 'update' && this.writePolicy.requireUserProfileApproval) {\n const updateRequest = request as MemoryUpdateRequest;\n if (updateRequest.target === 'user' && !updateRequest.approved) {\n return false;\n }\n }\n return true;\n }\n\n private trace(\n phase: 'search' | 'read' | 'write' | 'update' | 'delete' | 'sync' | 'inject' | 'test',\n providerId: string,\n request: unknown,\n meta: {\n sessionKey?: string;\n resultCount?: number;\n selectedRecordIds?: string[];\n skippedReason?: string;\n error?: string;\n durationMs?: number;\n } = {},\n ): void {\n try {\n appendMemoryTraceEvent({\n phase,\n providerId,\n request: sanitizeTraceRequest(request),\n ...meta,\n });\n } catch (err) {\n log.debug({ err, providerId, phase }, 'memory trace append failed');\n }\n }\n}\n\nfunction sanitizeTraceRequest(request: unknown): unknown {\n if (!request || typeof request !== 'object') return request;\n const copy = { ...(request as Record<string, unknown>) };\n if (typeof copy.content === 'string' && copy.content.length > 500) {\n copy.content = `${copy.content.slice(0, 500)}…`;\n }\n return copy;\n}\n"],"mappings":"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"}
|