@xopcai/xopc 0.0.115 → 0.0.117
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 +26 -10
- package/README.zh-CN.md +26 -10
- 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/schema/config-schema.d.ts +3 -3
- 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/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/config-schema.d.ts +3 -3
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DVnBfANm.js → agent-avatar-dicebear-BBLhJ2C6.js} +1 -1
- package/dist/gateway/static/root/assets/agents-C6xgagZd.js +71 -0
- package/dist/gateway/static/root/assets/app-management-settings-panel-CBpLONvG.js +1 -0
- package/dist/gateway/static/root/assets/{appearance-settings-BQpPSTHD.js → appearance-settings-CGcc54yj.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-DdDx0V4z.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-CXu-Csep.js → archive-plugin-DZsVqMhU.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-BAjgOoGY.js → attachment-load-CIol6JWX.js} +1 -1
- package/dist/gateway/static/root/assets/{binary-plugins-BSBgB2hO.js → binary-plugins-B3UauMfp.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-BpXw9TTR.js → block-editor-2HJoFchH.js} +3 -3
- package/dist/gateway/static/root/assets/browser-settings-page-CUOO-PQk.js +8 -0
- package/dist/gateway/static/root/assets/capability-presets-api-XQoMTI0A.js +1 -0
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-CfqF-kGr.js +1 -0
- package/dist/gateway/static/root/assets/{channels-settings-BbPUpzWB.js → channels-settings-BYyRzsex.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-DIvEz4NX.js +2 -0
- package/dist/gateway/static/root/assets/cron-api-R41aQCX9.js +1 -0
- package/dist/gateway/static/root/assets/cron-page-D97nFqQD.js +3 -0
- package/dist/gateway/static/root/assets/dreaming-settings-Bceaw1PG.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-D9kgUHCc.js → extension-debug-page-DX5WRE_t.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CGyhXqzR.js → extension-page-Buah7Bw-.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DL8Xquqd.js → extension-settings-page-DuroLVnf.js} +1 -1
- package/dist/gateway/static/root/assets/{fetch-D0VXA932.js → fetch-B5zdl27C.js} +1 -1
- package/dist/gateway/static/root/assets/{format-interval-label-Be8SmgUw.js → format-interval-label-Dn_QKIqb.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-config-api-gT4ZhE7h.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-iISWAZRm.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-DERUH61L.js → gateway-startup-retry-B3kL8KGY.js} +1 -1
- package/dist/gateway/static/root/assets/goal-detail-page-DCUROLMQ.js +1 -0
- package/dist/gateway/static/root/assets/{goals-config-api-BPmqWk90.js → goals-config-api-AR-fVh0P.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-Cpb21ezg.js +2 -0
- package/dist/gateway/static/root/assets/goals-settings-CPAuFwoD.js +1 -0
- package/dist/gateway/static/root/assets/{heartbeat-config-api-Bfdzr8oV.js → heartbeat-config-api-D7bKFEeO.js} +1 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-CC69vNx0.js +1 -0
- package/dist/gateway/static/root/assets/index-CwhK8qCh.js +122 -0
- package/dist/gateway/static/root/assets/index-CyfhARL-.css +1 -0
- package/dist/gateway/static/root/assets/{interval-presets-utKbuCRY.js → interval-presets-0DtsnxE0.js} +1 -1
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CjqS6c6V.js → keyboard-shortcuts-settings-BPREtN8B.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-DefCgF4o.js +2 -0
- package/dist/gateway/static/root/assets/{markdown-split-DW8C47iB.js → markdown-split-ChbR9LGO.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-D6HwDhDT.js → media-plugins-B82oP80n.js} +1 -1
- package/dist/gateway/static/root/assets/messages-Cf1O9JB0.js +3 -0
- package/dist/gateway/static/root/assets/models-hub-panel-DmKiIihT.js +2 -0
- package/dist/gateway/static/root/assets/note-detail-page-CxxfLRJZ.js +2 -0
- package/dist/gateway/static/root/assets/{note-image-lightbox-pJM35Pz5.js → note-image-lightbox-CDknITM3.js} +1 -1
- package/dist/gateway/static/root/assets/notes-page-X2slSx7V.js +1 -0
- package/dist/gateway/static/root/assets/{preview-open-alternatives-CVwHuyN6.js → preview-open-alternatives-DV3xQsWB.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BvmUWqgu.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-Ba-UEk7x.js → save-bar-controls-BODCXnvY.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-CNN9595U.js → schedule-field-CgJSCD3B.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-DnNMmtD5.js → schema-form-qtfEI6QM.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-B0yESuuL.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-q2M8RKOo.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-CmOz80i5.js → settings-collapsible-section-BHZKjVcS.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-BmK7JJOV.js → settings-form-section-5i35D-J1.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-CGozabLD.js +1 -0
- package/dist/gateway/static/root/assets/setup-status-panel-FoOSe6nU.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-Dp2qGrHC.js → share-preview-page-B0H63tDv.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-Cy5zWyYQ.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-DaZNFro9.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-CnwtUzvw.js +2 -0
- package/dist/gateway/static/root/assets/system-settings-panel-DXs2VmBt.js +1 -0
- package/dist/gateway/static/root/assets/typed-models-lib-4gPuydz_.js +1 -0
- package/dist/gateway/static/root/assets/{use-channel-catalog-CHlO8J9G.js → use-channel-catalog-BCjP_VHb.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DvKiOglO.js +1 -0
- package/dist/gateway/static/root/assets/{voice-player-store-DDDWYHvg.js → voice-player-store-BlF9V05n.js} +1 -1
- package/dist/gateway/static/root/assets/workflows-page-CAVZcONQ.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 +7 -8
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/agent-scope.js +6 -8
- 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/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.js +8 -7
- package/dist/src/agent/background-review/settings.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/context/workspace-seed.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js.map +1 -1
- package/dist/src/agent/fallback/candidates.js +6 -3
- package/dist/src/agent/fallback/candidates.js.map +1 -1
- package/dist/src/agent/goals/checklist-judge.d.ts +1 -0
- package/dist/src/agent/goals/checklist-judge.js +1 -1
- package/dist/src/agent/goals/checklist-judge.js.map +1 -1
- package/dist/src/agent/goals/evaluate-turn.d.ts +1 -0
- package/dist/src/agent/goals/evaluate-turn.js +1 -0
- package/dist/src/agent/goals/evaluate-turn.js.map +1 -1
- package/dist/src/agent/goals/post-turn.js +8 -1
- package/dist/src/agent/goals/post-turn.js.map +1 -1
- 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/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/image/understanding/pi-ai-provider.js +5 -2
- package/dist/src/agent/image/understanding/pi-ai-provider.js.map +1 -1
- package/dist/src/agent/image/understanding/provider-registry.d.ts +1 -0
- package/dist/src/agent/image/understanding/provider-registry.js +16 -2
- package/dist/src/agent/image/understanding/provider-registry.js.map +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 +2 -0
- package/dist/src/agent/memory/builtin-memory-store.js +4 -0
- 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 +261 -11
- package/dist/src/agent/memory/builtin-provider.js.map +1 -1
- 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 +24 -0
- package/dist/src/agent/memory/dreaming/deep-promotion.js.map +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 +37 -1
- package/dist/src/agent/memory/manager.js +332 -40
- package/dist/src/agent/memory/manager.js.map +1 -1
- package/dist/src/agent/memory/memory-config.js +12 -15
- package/dist/src/agent/memory/memory-config.js.map +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/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 +136 -0
- package/dist/src/agent/models/manager.d.ts +1 -1
- package/dist/src/agent/models/manager.js +1 -1
- 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/reply/post-compaction-context.js +11 -6
- package/dist/src/agent/reply/post-compaction-context.js.map +1 -1
- package/dist/src/agent/reply/startup-context.js +8 -9
- package/dist/src/agent/reply/startup-context.js.map +1 -1
- 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.js +21 -25
- 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 +9 -14
- package/dist/src/agent/session/session-inspector.js.map +1 -1
- package/dist/src/agent/skills/hub-pull.js +1 -1
- package/dist/src/agent/starter-agents.d.ts +1 -3
- package/dist/src/agent/starter-agents.js +13 -21
- 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/composio-tool.d.ts +8 -0
- package/dist/src/agent/tools/composio-tool.js +46 -0
- package/dist/src/agent/tools/composio-tool.js.map +1 -0
- package/dist/src/agent/tools/curated-memory-tool.d.ts +2 -5
- package/dist/src/agent/tools/curated-memory-tool.js +20 -16
- package/dist/src/agent/tools/curated-memory-tool.js.map +1 -1
- package/dist/src/agent/tools/factory.d.ts +0 -4
- package/dist/src/agent/tools/factory.js +32 -66
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/image-generate-tool.d.ts +1 -1
- package/dist/src/agent/tools/image-generate-tool.js +19 -14
- 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/index.d.ts +1 -0
- package/dist/src/agent/tools/index.js +2 -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/web-extract.js +6 -5
- package/dist/src/agent/tools/web-extract.js.map +1 -1
- package/dist/src/agent/workflow/builtins/audit-repo.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/audit-repo.js +15 -2
- package/dist/src/agent/workflow/builtins/audit-repo.js.map +1 -1
- package/dist/src/agent/workflow/builtins/client-proposal.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/client-proposal.js +10 -1
- package/dist/src/agent/workflow/builtins/client-proposal.js.map +1 -1
- package/dist/src/agent/workflow/builtins/competitor-scan.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/competitor-scan.js +16 -2
- package/dist/src/agent/workflow/builtins/competitor-scan.js.map +1 -1
- package/dist/src/agent/workflow/builtins/content-draft.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/content-draft.js +15 -2
- package/dist/src/agent/workflow/builtins/content-draft.js.map +1 -1
- package/dist/src/agent/workflow/builtins/content-repurpose.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/content-repurpose.js +10 -1
- package/dist/src/agent/workflow/builtins/content-repurpose.js.map +1 -1
- package/dist/src/agent/workflow/builtins/debug-incident.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/debug-incident.js +9 -1
- package/dist/src/agent/workflow/builtins/debug-incident.js.map +1 -1
- package/dist/src/agent/workflow/builtins/decision-compare.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/decision-compare.js +16 -2
- package/dist/src/agent/workflow/builtins/decision-compare.js.map +1 -1
- package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/implementation-plan.js +11 -1
- package/dist/src/agent/workflow/builtins/implementation-plan.js.map +1 -1
- package/dist/src/agent/workflow/builtins/inbox-triage.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/inbox-triage.js +11 -1
- package/dist/src/agent/workflow/builtins/inbox-triage.js.map +1 -1
- package/dist/src/agent/workflow/builtins/meeting-prep.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/meeting-prep.js +9 -1
- package/dist/src/agent/workflow/builtins/meeting-prep.js.map +1 -1
- package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/multi-perspective-review.js +9 -1
- package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +1 -1
- package/dist/src/agent/workflow/builtins/offer-design.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/offer-design.js +10 -1
- package/dist/src/agent/workflow/builtins/offer-design.js.map +1 -1
- package/dist/src/agent/workflow/builtins/pr-review.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/pr-review.js +9 -1
- package/dist/src/agent/workflow/builtins/pr-review.js.map +1 -1
- package/dist/src/agent/workflow/builtins/release-check.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/release-check.js +10 -1
- package/dist/src/agent/workflow/builtins/release-check.js.map +1 -1
- package/dist/src/agent/workflow/builtins/research.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/research.js +16 -2
- package/dist/src/agent/workflow/builtins/research.js.map +1 -1
- package/dist/src/agent/workflow/builtins/weekly-review.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/weekly-review.js +9 -1
- package/dist/src/agent/workflow/builtins/weekly-review.js.map +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 +11 -0
- package/dist/src/agent-manifest/resolver.js +93 -0
- package/dist/src/agent-manifest/resolver.js.map +1 -0
- package/dist/src/agent-manifest/schema.d.ts +778 -0
- package/dist/src/agent-manifest/schema.js +267 -0
- package/dist/src/agent-manifest/schema.js.map +1 -0
- package/dist/src/agent-manifest/validator.d.ts +24 -0
- package/dist/src/agent-manifest/validator.js +87 -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/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/providers/browser-ext-install.d.ts +2 -12
- package/dist/src/browser/providers/browser-ext-install.js +3 -8
- package/dist/src/browser/providers/browser-ext-install.js.map +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/chat-commands/builtins/config.js +4 -4
- package/dist/src/chat-commands/builtins/config.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.js +1 -1
- 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 +5 -5
- package/dist/src/cli/commands/config.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -17
- package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +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/models.js +26 -10
- 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 +20 -22
- package/dist/src/cli/commands/onboard/model.js.map +1 -1
- package/dist/src/cli/commands/onboard.js +1 -1
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/cli/utils/init-workspace-core.d.ts +1 -4
- package/dist/src/cli/utils/init-workspace-core.js +7 -6
- 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 +66 -12
- 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 +31 -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 +0 -1
- package/dist/src/config/agent-typed-models.js.map +1 -1
- package/dist/src/config/index.js +3 -3
- package/dist/src/config/integration.d.ts +1 -1
- package/dist/src/config/reload.js +1 -1
- 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 +925 -781
- package/dist/src/config/schema.js +157 -424
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/connectors/composio-triggers.d.ts +10 -0
- package/dist/src/connectors/composio-triggers.js +32 -0
- package/dist/src/connectors/composio-triggers.js.map +1 -0
- package/dist/src/connectors/composio.d.ts +54 -0
- package/dist/src/connectors/composio.js +334 -0
- package/dist/src/connectors/composio.js.map +1 -0
- package/dist/src/connectors/health.js +16 -1
- package/dist/src/connectors/health.js.map +1 -1
- package/dist/src/connectors/install.d.ts +2 -1
- package/dist/src/connectors/install.js +50 -13
- package/dist/src/connectors/install.js.map +1 -1
- package/dist/src/connectors/instances.js +57 -6
- package/dist/src/connectors/instances.js.map +1 -1
- package/dist/src/connectors/lifecycle.d.ts +3 -0
- package/dist/src/connectors/lifecycle.js +23 -0
- package/dist/src/connectors/lifecycle.js.map +1 -0
- package/dist/src/connectors/materialize.js +2 -1
- package/dist/src/connectors/materialize.js.map +1 -1
- package/dist/src/connectors/providers.d.ts +1 -0
- package/dist/src/connectors/providers.js +10 -2
- package/dist/src/connectors/providers.js.map +1 -1
- package/dist/src/connectors/registries/modelscope.d.ts +2 -0
- package/dist/src/connectors/registries/modelscope.js +205 -0
- package/dist/src/connectors/registries/modelscope.js.map +1 -0
- package/dist/src/connectors/registries/official-mcp.d.ts +2 -0
- package/dist/src/connectors/registries/official-mcp.js +142 -0
- package/dist/src/connectors/registries/official-mcp.js.map +1 -0
- package/dist/src/connectors/registries/search.d.ts +12 -0
- package/dist/src/connectors/registries/search.js +89 -0
- package/dist/src/connectors/registries/search.js.map +1 -0
- package/dist/src/connectors/registries/smithery.d.ts +2 -0
- package/dist/src/connectors/registries/smithery.js +98 -0
- package/dist/src/connectors/registries/smithery.js.map +1 -0
- package/dist/src/connectors/registries/types.d.ts +20 -0
- package/dist/src/connectors/registries/types.js +1 -0
- package/dist/src/connectors/secret-store.js +4 -2
- package/dist/src/connectors/secret-store.js.map +1 -1
- package/dist/src/connectors/setup-secrets.d.ts +15 -0
- package/dist/src/connectors/setup-secrets.js +64 -0
- package/dist/src/connectors/setup-secrets.js.map +1 -0
- package/dist/src/connectors/supervisor.d.ts +15 -0
- package/dist/src/connectors/supervisor.js +73 -0
- package/dist/src/connectors/supervisor.js.map +1 -0
- package/dist/src/connectors/types.d.ts +27 -3
- package/dist/src/connectors/usage.js +6 -1
- package/dist/src/connectors/usage.js.map +1 -1
- package/dist/src/cron/index.js +1 -1
- package/dist/src/cron/service.js +1 -1
- package/dist/src/cron/validation.d.ts +3 -3
- package/dist/src/extensions/activation-context.js +13 -7
- package/dist/src/extensions/activation-context.js.map +1 -1
- package/dist/src/gateway/agents-admin.d.ts +17 -18
- package/dist/src/gateway/agents-admin.js +123 -88
- 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/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 +13 -37
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/routes/agents.js +56 -33
- package/dist/src/gateway/hono/routes/agents.js.map +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/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/connectors.js +230 -3
- package/dist/src/gateway/hono/routes/connectors.js.map +1 -1
- package/dist/src/gateway/hono/routes/dreaming.js +7 -0
- package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
- package/dist/src/gateway/hono/routes/goals.js +52 -5
- package/dist/src/gateway/hono/routes/goals.js.map +1 -1
- 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 +8 -0
- 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 +290 -0
- package/dist/src/gateway/hono/routes/memory.js.map +1 -0
- package/dist/src/gateway/hono/routes/voice.js +14 -1
- package/dist/src/gateway/hono/routes/voice.js.map +1 -1
- package/dist/src/gateway/hono/sse.js.map +1 -1
- package/dist/src/gateway/service/agent-runner.d.ts +5 -12
- package/dist/src/gateway/service/agent-runner.js +8 -8
- package/dist/src/gateway/service/agent-runner.js.map +1 -1
- package/dist/src/gateway/service/run-gateway-agent.d.ts +2 -10
- package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
- package/dist/src/gateway/service.d.ts +2 -2
- package/dist/src/gateway/service.js +20 -16
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/gateway/user-turn-input.d.ts +18 -0
- package/dist/src/gateway/user-turn-input.js +16 -0
- package/dist/src/gateway/user-turn-input.js.map +1 -0
- package/dist/src/goals/goal-queue-store.d.ts +2 -1
- package/dist/src/goals/goal-queue-store.js +2 -2
- package/dist/src/goals/goal-queue-store.js.map +1 -1
- package/dist/src/goals/goal-queue-types.d.ts +4 -3
- package/dist/src/goals/goal-runner.js +25 -3
- package/dist/src/goals/goal-runner.js.map +1 -1
- package/dist/src/goals/goal-service.d.ts +6 -1
- package/dist/src/goals/goal-service.js +9 -2
- package/dist/src/goals/goal-service.js.map +1 -1
- package/dist/src/goals/goal-store.d.ts +7 -1
- package/dist/src/goals/goal-store.js +42 -0
- package/dist/src/goals/goal-store.js.map +1 -1
- package/dist/src/goals/types.d.ts +10 -0
- package/dist/src/notes/agent-context.js +2 -2
- package/dist/src/providers/index.d.ts +2 -2
- package/dist/src/providers/index.js +10 -14
- package/dist/src/providers/index.js.map +1 -1
- package/dist/src/session/index.js +1 -1
- package/dist/src/session/session-workspace.js +7 -2
- package/dist/src/session/session-workspace.js.map +1 -1
- package/dist/src/session/store.js +5 -0
- package/dist/src/session/store.js.map +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/storage/sqlite/connection.js +1 -1
- 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-records-repository.d.ts +101 -0
- package/dist/src/storage/sqlite/memory-records-repository.js +309 -0
- package/dist/src/storage/sqlite/memory-records-repository.js.map +1 -0
- package/dist/src/storage/sqlite/migrations/011_goal_context_messages.sql +8 -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/runner.d.ts +2 -2
- 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 +2 -2
- package/dist/src/storage/sqlite/schema.js +3 -3
- package/dist/src/storage/sqlite/schema.sql +95 -0
- package/dist/src/tui/backends/embedded-backend.js +6 -4
- package/dist/src/tui/backends/embedded-backend.js.map +1 -1
- package/dist/src/tui/extension-host/load-extensions.js.map +1 -1
- package/dist/src/voice/tts/openai-compatible-speech.d.ts +1 -1
- package/dist/src/voice/tts/openai-compatible-speech.js.map +1 -1
- package/dist/src/voice/tts/providers/edge-speech.js +14 -2
- package/dist/src/voice/tts/providers/edge-speech.js.map +1 -1
- package/dist/src/voice/tts/speak-core.js +3 -3
- package/dist/src/voice/tts/speak-core.js.map +1 -1
- package/dist/src/voice/tts/speech-provider-types.d.ts +2 -2
- package/dist/src/voice/tts/types.js +1 -1
- package/dist/src/voice/tts/types.js.map +1 -1
- package/dist/src/workflows/domain/result.d.ts +0 -1
- package/dist/src/workflows/engine/workflow-engine.js +7 -23
- package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
- package/dist/src/workflows/service/workflow-run-service.js +3 -4
- package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
- package/dist/src/workflows/service/workflow-session-bridge.js +1 -1
- package/package.json +4 -3
- package/dist/gateway/static/root/assets/agent-browser-settings-page-DPXc4hz8.js +0 -6
- package/dist/gateway/static/root/assets/agent-defaults-tabbed-page-CTJ0YnRQ.js +0 -1
- package/dist/gateway/static/root/assets/agents-zJXQfJ_W.js +0 -71
- package/dist/gateway/static/root/assets/app-management-settings-panel-DzGbdr04.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-CPjfyzSD.js +0 -1
- package/dist/gateway/static/root/assets/config-api-NOoPiIYz.js +0 -3
- package/dist/gateway/static/root/assets/connectors-settings-CAXYMOdp.js +0 -2
- package/dist/gateway/static/root/assets/cron-api-C9BOqAXd.js +0 -1
- package/dist/gateway/static/root/assets/cron-page-DuUbBeKI.js +0 -3
- package/dist/gateway/static/root/assets/dreaming-settings-DQ4DtiK1.js +0 -1
- package/dist/gateway/static/root/assets/gateway-config-api-C-xjn__h.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-BMPwIjKI.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-BJsyjJnF.js +0 -1
- package/dist/gateway/static/root/assets/goals-page-BerDgIhw.js +0 -2
- package/dist/gateway/static/root/assets/goals-settings-ByTjeAto.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-TbHgcjTn.js +0 -1
- package/dist/gateway/static/root/assets/index-AkTrf6Pb.js +0 -122
- package/dist/gateway/static/root/assets/index-fh5sXTj9.css +0 -1
- package/dist/gateway/static/root/assets/logs-page-DGXuPf5B.js +0 -2
- package/dist/gateway/static/root/assets/messages-upgxw6Ub.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-panel-Bot16nn7.js +0 -2
- package/dist/gateway/static/root/assets/note-detail-page-Brlyou8M.js +0 -2
- package/dist/gateway/static/root/assets/notes-page-DvZ4pwc-.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BZEDmxbZ.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-DdGGlsfn.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DlkEkPf9.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-DFPTrsPF.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-CYCCfgh4.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-Bff1pGd0.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-CJGKpBur.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-C6ocduTD.js +0 -2
- package/dist/gateway/static/root/assets/system-settings-panel-5jrIEr5b.js +0 -1
- package/dist/gateway/static/root/assets/use-agent-defaults-form-BuiXLIs5.js +0 -1
- package/dist/gateway/static/root/assets/use-settings-tab-guard-CW5JORnl.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DDoQyghO.js +0 -1
- package/dist/gateway/static/root/assets/workflow-page.utils-CKjeEGqx.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-B604ehHG.js +0 -18
|
@@ -1,39 +1,105 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { discoverExtensionsFromDisk, init_discover_extensions } from "../../extensions/discover-extensions.js";
|
|
2
|
+
import { isAbsolute, join } from "node:path";
|
|
3
|
+
import { stat } from "node:fs/promises";
|
|
4
|
+
import { pathToFileURL } from "node:url";
|
|
4
5
|
//#region src/agent/memory/plugin-discovery.ts
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
plugins.push({
|
|
19
|
-
name: entry,
|
|
20
|
-
description: mod.description ?? `${entry} memory plugin`,
|
|
21
|
-
available
|
|
22
|
-
});
|
|
23
|
-
} catch {
|
|
24
|
-
plugins.push({
|
|
25
|
-
name: entry,
|
|
26
|
-
description: `${entry} memory plugin`,
|
|
27
|
-
available: false
|
|
28
|
-
});
|
|
29
|
-
}
|
|
6
|
+
init_discover_extensions();
|
|
7
|
+
async function discoverMemoryPlugins(config) {
|
|
8
|
+
const plugins = [];
|
|
9
|
+
for (const extension of discoverMemoryProviderExtensions(config)) for (const providerId of extension.manifest.contracts?.memoryProviders ?? []) plugins.push({
|
|
10
|
+
name: providerId,
|
|
11
|
+
description: extension.manifest.description ?? `${extension.manifest.name} memory provider`,
|
|
12
|
+
available: true,
|
|
13
|
+
manifest: {
|
|
14
|
+
type: "memory-provider",
|
|
15
|
+
id: providerId,
|
|
16
|
+
displayName: extension.manifest.name || providerId,
|
|
17
|
+
entry: extension.manifest.main,
|
|
18
|
+
capabilities: {}
|
|
30
19
|
}
|
|
31
|
-
|
|
20
|
+
});
|
|
21
|
+
return plugins.sort((a, b) => a.name.localeCompare(b.name));
|
|
22
|
+
}
|
|
23
|
+
async function loadMemoryPluginProviders(params = {}) {
|
|
24
|
+
const providers = [];
|
|
25
|
+
for (const extension of discoverMemoryProviderExtensions(params.config)) {
|
|
26
|
+
const module = await loadMemoryProviderModule(extension);
|
|
27
|
+
if (!module?.createMemoryProvider) continue;
|
|
28
|
+
if (module.isAvailable?.() === false) continue;
|
|
29
|
+
const fallbackId = (extension.manifest.contracts?.memoryProviders ?? [])[0] ?? extension.id;
|
|
30
|
+
const manifest = normalizeMemoryProviderManifest(fallbackId, module.manifest) ?? {
|
|
31
|
+
type: "memory-provider",
|
|
32
|
+
id: fallbackId,
|
|
33
|
+
displayName: extension.manifest.name || fallbackId,
|
|
34
|
+
entry: extension.manifest.main,
|
|
35
|
+
capabilities: {}
|
|
36
|
+
};
|
|
37
|
+
const provider = await module.createMemoryProvider({
|
|
38
|
+
config: params.config,
|
|
39
|
+
manifest,
|
|
40
|
+
extension: {
|
|
41
|
+
id: extension.id,
|
|
42
|
+
path: extension.path,
|
|
43
|
+
source: extension.source,
|
|
44
|
+
config: extensionConfig(params.config, extension.id)
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
providers.push(provider);
|
|
48
|
+
}
|
|
49
|
+
return providers;
|
|
50
|
+
}
|
|
51
|
+
function discoverMemoryProviderExtensions(config) {
|
|
52
|
+
if (areExtensionsDisabled(config)) return [];
|
|
53
|
+
const disabled = new Set(extensionIds(config?.extensions?.disabled));
|
|
54
|
+
const enabled = config?.extensions?.enabled;
|
|
55
|
+
const enabledSet = Array.isArray(enabled) ? new Set(extensionIds(enabled)) : null;
|
|
56
|
+
return discoverExtensionsFromDisk({}, config).filter((extension) => (extension.manifest.contracts?.memoryProviders?.length ?? 0) > 0).filter((extension) => !disabled.has(extension.id)).filter((extension) => extension.manifest.enabledByDefault === true || enabledSet?.has(extension.id));
|
|
57
|
+
}
|
|
58
|
+
async function loadMemoryProviderModule(extension) {
|
|
59
|
+
if (!extension.manifest.main) return null;
|
|
60
|
+
const resolved = await resolveModuleEntry(isAbsolute(extension.manifest.main) ? extension.manifest.main : join(extension.path, extension.manifest.main));
|
|
61
|
+
try {
|
|
62
|
+
const mod = await import(pathToFileURL(resolved).href);
|
|
63
|
+
return "default" in mod && mod.default ? mod.default : mod;
|
|
32
64
|
} catch {
|
|
33
|
-
return
|
|
65
|
+
return null;
|
|
34
66
|
}
|
|
35
67
|
}
|
|
68
|
+
async function resolveModuleEntry(entryPath) {
|
|
69
|
+
for (const candidate of entryCandidates(entryPath)) try {
|
|
70
|
+
await stat(candidate);
|
|
71
|
+
return candidate;
|
|
72
|
+
} catch {}
|
|
73
|
+
return entryPath;
|
|
74
|
+
}
|
|
75
|
+
function entryCandidates(entryPath) {
|
|
76
|
+
const candidates = [entryPath];
|
|
77
|
+
if (entryPath.endsWith(".js")) candidates.push(`${entryPath.slice(0, -3)}.ts`);
|
|
78
|
+
return candidates;
|
|
79
|
+
}
|
|
80
|
+
function extensionIds(value) {
|
|
81
|
+
return Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
|
|
82
|
+
}
|
|
83
|
+
function areExtensionsDisabled(config) {
|
|
84
|
+
return config?.extensions?.enabled === false;
|
|
85
|
+
}
|
|
86
|
+
function extensionConfig(config, extensionId) {
|
|
87
|
+
const raw = config?.extensions?.[extensionId];
|
|
88
|
+
return raw && typeof raw === "object" && !Array.isArray(raw) ? raw : void 0;
|
|
89
|
+
}
|
|
90
|
+
function normalizeMemoryProviderManifest(fallbackId, manifest) {
|
|
91
|
+
if (!manifest || manifest.type !== "memory-provider") return void 0;
|
|
92
|
+
const id = typeof manifest.id === "string" && manifest.id.trim() ? manifest.id.trim() : fallbackId;
|
|
93
|
+
return {
|
|
94
|
+
type: "memory-provider",
|
|
95
|
+
id,
|
|
96
|
+
displayName: typeof manifest.displayName === "string" && manifest.displayName.trim() ? manifest.displayName.trim() : id,
|
|
97
|
+
...manifest.entry ? { entry: manifest.entry } : {},
|
|
98
|
+
capabilities: manifest.capabilities ?? {},
|
|
99
|
+
...manifest.configSchema ? { configSchema: manifest.configSchema } : {}
|
|
100
|
+
};
|
|
101
|
+
}
|
|
36
102
|
//#endregion
|
|
37
|
-
export { discoverMemoryPlugins };
|
|
103
|
+
export { discoverMemoryPlugins, loadMemoryPluginProviders };
|
|
38
104
|
|
|
39
105
|
//# sourceMappingURL=plugin-discovery.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-discovery.js","names":[],"sources":["../../../../src/agent/memory/plugin-discovery.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"plugin-discovery.js","names":[],"sources":["../../../../src/agent/memory/plugin-discovery.ts"],"sourcesContent":["import { stat } from 'node:fs/promises';\nimport { isAbsolute, join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\n\nimport type { Config } from '../../config/schema.js';\nimport { discoverExtensionsFromDisk } from '../../extensions/discover-extensions.js';\nimport type { DiscoveredExtension } from '../../extensions/types/loader.js';\nimport type { MemoryProvider } from './provider.js';\nimport type { MemoryProviderManifest } from './types.js';\n\nexport interface MemoryPluginMetadata {\n name: string;\n description: string;\n available: boolean;\n manifest?: MemoryProviderManifest;\n}\n\nexport interface MemoryPluginProviderContext {\n config?: Config;\n manifest?: MemoryProviderManifest;\n extension?: {\n id: string;\n path: string;\n source: DiscoveredExtension['source'];\n config?: Record<string, unknown>;\n };\n}\n\ntype MemoryPluginModule = {\n isAvailable?: () => boolean;\n description?: string;\n manifest?: MemoryProviderManifest;\n createMemoryProvider?: (\n context: MemoryPluginProviderContext,\n ) => MemoryProvider | Promise<MemoryProvider>;\n};\n\nexport async function discoverMemoryPlugins(config?: Config): Promise<MemoryPluginMetadata[]> {\n const plugins: MemoryPluginMetadata[] = [];\n for (const extension of discoverMemoryProviderExtensions(config)) {\n for (const providerId of extension.manifest.contracts?.memoryProviders ?? []) {\n plugins.push({\n name: providerId,\n description: extension.manifest.description ?? `${extension.manifest.name} memory provider`,\n available: true,\n manifest: {\n type: 'memory-provider',\n id: providerId,\n displayName: extension.manifest.name || providerId,\n entry: extension.manifest.main,\n capabilities: {},\n },\n });\n }\n }\n return plugins.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport async function loadMemoryPluginProviders(params: {\n config?: Config;\n} = {}): Promise<MemoryProvider[]> {\n const providers: MemoryProvider[] = [];\n for (const extension of discoverMemoryProviderExtensions(params.config)) {\n const module = await loadMemoryProviderModule(extension);\n if (!module?.createMemoryProvider) continue;\n if (module.isAvailable?.() === false) continue;\n\n const declaredProviderIds = extension.manifest.contracts?.memoryProviders ?? [];\n const fallbackId = declaredProviderIds[0] ?? extension.id;\n const manifest = normalizeMemoryProviderManifest(fallbackId, module.manifest) ?? {\n type: 'memory-provider',\n id: fallbackId,\n displayName: extension.manifest.name || fallbackId,\n entry: extension.manifest.main,\n capabilities: {},\n };\n\n const provider = await module.createMemoryProvider({\n config: params.config,\n manifest,\n extension: {\n id: extension.id,\n path: extension.path,\n source: extension.source,\n config: extensionConfig(params.config, extension.id),\n },\n });\n providers.push(provider);\n }\n return providers;\n}\n\nfunction discoverMemoryProviderExtensions(config?: Config): DiscoveredExtension[] {\n if (areExtensionsDisabled(config)) return [];\n const disabled = new Set(extensionIds(config?.extensions?.disabled));\n const enabled = config?.extensions?.enabled;\n const enabledSet = Array.isArray(enabled) ? new Set(extensionIds(enabled)) : null;\n return discoverExtensionsFromDisk({}, config as unknown as Record<string, unknown> | undefined)\n .filter((extension) => (extension.manifest.contracts?.memoryProviders?.length ?? 0) > 0)\n .filter((extension) => !disabled.has(extension.id))\n .filter((extension) => extension.manifest.enabledByDefault === true || enabledSet?.has(extension.id));\n}\n\nasync function loadMemoryProviderModule(extension: DiscoveredExtension): Promise<MemoryPluginModule | null> {\n if (!extension.manifest.main) return null;\n const entryPath = isAbsolute(extension.manifest.main)\n ? extension.manifest.main\n : join(extension.path, extension.manifest.main);\n const resolved = await resolveModuleEntry(entryPath);\n try {\n const mod = (await import(pathToFileURL(resolved).href)) as MemoryPluginModule | { default?: MemoryPluginModule };\n return 'default' in mod && mod.default ? mod.default : (mod as MemoryPluginModule);\n } catch {\n return null;\n }\n}\n\nasync function resolveModuleEntry(entryPath: string): Promise<string> {\n for (const candidate of entryCandidates(entryPath)) {\n try {\n await stat(candidate);\n return candidate;\n } catch {\n // Try the next candidate; source tests use .ts, builds use .js.\n }\n }\n return entryPath;\n}\n\nfunction entryCandidates(entryPath: string): string[] {\n const candidates = [entryPath];\n if (entryPath.endsWith('.js')) {\n candidates.push(`${entryPath.slice(0, -3)}.ts`);\n }\n return candidates;\n}\n\nfunction extensionIds(value: unknown): string[] {\n return Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string') : [];\n}\n\nfunction areExtensionsDisabled(config?: Config): boolean {\n return config?.extensions?.enabled === false;\n}\n\nfunction extensionConfig(config: Config | undefined, extensionId: string): Record<string, unknown> | undefined {\n const raw = config?.extensions?.[extensionId as keyof Config['extensions']];\n return raw && typeof raw === 'object' && !Array.isArray(raw) ? (raw as Record<string, unknown>) : undefined;\n}\n\nfunction normalizeMemoryProviderManifest(\n fallbackId: string,\n manifest: MemoryProviderManifest | undefined,\n): MemoryProviderManifest | undefined {\n if (!manifest || manifest.type !== 'memory-provider') return undefined;\n const id = typeof manifest.id === 'string' && manifest.id.trim() ? manifest.id.trim() : fallbackId;\n const displayName =\n typeof manifest.displayName === 'string' && manifest.displayName.trim()\n ? manifest.displayName.trim()\n : id;\n return {\n type: 'memory-provider',\n id,\n displayName,\n ...(manifest.entry ? { entry: manifest.entry } : {}),\n capabilities: manifest.capabilities ?? {},\n ...(manifest.configSchema ? { configSchema: manifest.configSchema } : {}),\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,35 +1,40 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pluggable memory provider. Builtin curated files use `BuiltinMemoryStore` + `curated_memory`;
|
|
3
|
-
* external providers add instructions, prefetch/sync, and optional tools.
|
|
4
|
-
*/
|
|
5
1
|
import type { AgentTool } from '@earendil-works/pi-agent-core';
|
|
2
|
+
import type { MemoryCapabilities, MemoryDeleteRequest, MemoryListRequest, MemoryProviderManifest, MemoryReadRequest, MemoryReadResult, MemorySearchRequest, MemorySearchResult, MemorySyncEvent, MemoryUpdateRequest, MemoryWriteRequest, MemoryWriteResult, MemoryRecord } from './types.js';
|
|
6
3
|
export interface MemoryProviderInitOptions {
|
|
7
4
|
workspace?: string;
|
|
8
5
|
agentWorkspace?: string;
|
|
9
6
|
sessionId?: string;
|
|
7
|
+
config?: Record<string, unknown>;
|
|
10
8
|
[key: string]: unknown;
|
|
11
9
|
}
|
|
12
10
|
export interface MemoryProvider {
|
|
13
|
-
readonly
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly displayName?: string;
|
|
13
|
+
readonly manifest?: MemoryProviderManifest;
|
|
14
|
+
readonly capabilities: MemoryCapabilities;
|
|
14
15
|
isAvailable(): boolean;
|
|
15
16
|
initialize(sessionId: string, options?: MemoryProviderInitOptions): Promise<void> | void;
|
|
16
|
-
/** Static text merged into system prompt
|
|
17
|
-
systemPromptBlock(): string;
|
|
18
|
-
prefetch(query: string, options?: {
|
|
17
|
+
/** Static text merged into the system prompt. */
|
|
18
|
+
systemPromptBlock?(): string;
|
|
19
|
+
prefetch?(query: string, options?: {
|
|
19
20
|
sessionId?: string;
|
|
20
21
|
}): Promise<string>;
|
|
21
|
-
queuePrefetch(query: string, options?: {
|
|
22
|
+
queuePrefetch?(query: string, options?: {
|
|
22
23
|
sessionId?: string;
|
|
23
24
|
}): void;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
sync?(event: MemorySyncEvent): Promise<void> | void;
|
|
26
|
+
search?(request: MemorySearchRequest): Promise<MemorySearchResult[]>;
|
|
27
|
+
read?(request: MemoryReadRequest): Promise<MemoryReadResult | null>;
|
|
28
|
+
get?(id: string): Promise<MemoryRecord | null>;
|
|
29
|
+
list?(request: MemoryListRequest): Promise<MemoryRecord[]>;
|
|
30
|
+
write?(request: MemoryWriteRequest): Promise<MemoryWriteResult>;
|
|
31
|
+
update?(request: MemoryUpdateRequest): Promise<MemoryWriteResult>;
|
|
32
|
+
delete?(request: MemoryDeleteRequest): Promise<MemoryWriteResult>;
|
|
33
|
+
getToolSchemas?(): AgentTool[];
|
|
28
34
|
/** JSON string result for tool calls routed by name (when not using inline AgentTool.execute only). */
|
|
29
|
-
handleToolCall(toolName: string, args: Record<string, unknown>): Promise<string>;
|
|
35
|
+
handleToolCall?(toolName: string, args: Record<string, unknown>): Promise<string>;
|
|
30
36
|
shutdown(): Promise<void> | void;
|
|
31
37
|
onTurnStart?(turnNumber: number, message: string, metadata?: Record<string, unknown>): void;
|
|
32
38
|
onSessionEnd?(messages: unknown[]): void;
|
|
33
39
|
onPreCompress?(messages: unknown[]): string;
|
|
34
|
-
onMemoryWrite?(action: 'add' | 'replace' | 'remove', target: 'memory' | 'user', content: string): void;
|
|
35
40
|
}
|
|
@@ -3,14 +3,29 @@ import type { MemoryProvider, MemoryProviderInitOptions } from './provider.js';
|
|
|
3
3
|
* Placeholder external provider — enables wiring tests without cloud deps.
|
|
4
4
|
*/
|
|
5
5
|
export declare class StubMemoryProvider implements MemoryProvider {
|
|
6
|
-
readonly
|
|
6
|
+
readonly id = "stub";
|
|
7
|
+
readonly displayName = "Stub Memory Provider";
|
|
8
|
+
readonly capabilities: {
|
|
9
|
+
search: boolean;
|
|
10
|
+
read: boolean;
|
|
11
|
+
write: boolean;
|
|
12
|
+
update: boolean;
|
|
13
|
+
delete: boolean;
|
|
14
|
+
keywordSearch: boolean;
|
|
15
|
+
semanticSearch: boolean;
|
|
16
|
+
hybridSearch: boolean;
|
|
17
|
+
citations: boolean;
|
|
18
|
+
sync: boolean;
|
|
19
|
+
local: boolean;
|
|
20
|
+
};
|
|
7
21
|
isAvailable(): boolean;
|
|
8
22
|
initialize(_sessionId: string, _options?: MemoryProviderInitOptions): Promise<void>;
|
|
9
23
|
systemPromptBlock(): string;
|
|
10
24
|
prefetch(query: string): Promise<string>;
|
|
11
25
|
queuePrefetch(): void;
|
|
12
|
-
|
|
26
|
+
sync(): void;
|
|
13
27
|
getToolSchemas(): any[];
|
|
14
28
|
handleToolCall(toolName: string): Promise<string>;
|
|
29
|
+
search(): Promise<[]>;
|
|
15
30
|
shutdown(): Promise<void>;
|
|
16
31
|
}
|
|
@@ -3,13 +3,27 @@
|
|
|
3
3
|
* Placeholder external provider — enables wiring tests without cloud deps.
|
|
4
4
|
*/
|
|
5
5
|
var StubMemoryProvider = class {
|
|
6
|
-
|
|
6
|
+
id = "stub";
|
|
7
|
+
displayName = "Stub Memory Provider";
|
|
8
|
+
capabilities = {
|
|
9
|
+
search: true,
|
|
10
|
+
read: false,
|
|
11
|
+
write: false,
|
|
12
|
+
update: false,
|
|
13
|
+
delete: false,
|
|
14
|
+
keywordSearch: false,
|
|
15
|
+
semanticSearch: false,
|
|
16
|
+
hybridSearch: false,
|
|
17
|
+
citations: false,
|
|
18
|
+
sync: true,
|
|
19
|
+
local: false
|
|
20
|
+
};
|
|
7
21
|
isAvailable() {
|
|
8
22
|
return true;
|
|
9
23
|
}
|
|
10
24
|
async initialize(_sessionId, _options) {}
|
|
11
25
|
systemPromptBlock() {
|
|
12
|
-
return "External memory provider: stub (wiring only; no cloud backend).
|
|
26
|
+
return "External memory provider: stub (wiring only; no cloud backend).";
|
|
13
27
|
}
|
|
14
28
|
async prefetch(query) {
|
|
15
29
|
const q = query.trim();
|
|
@@ -17,13 +31,16 @@ var StubMemoryProvider = class {
|
|
|
17
31
|
return `[stub prefetch] query length=${q.length}`;
|
|
18
32
|
}
|
|
19
33
|
queuePrefetch() {}
|
|
20
|
-
|
|
34
|
+
sync() {}
|
|
21
35
|
getToolSchemas() {
|
|
22
36
|
return [];
|
|
23
37
|
}
|
|
24
38
|
async handleToolCall(toolName) {
|
|
25
39
|
return JSON.stringify({ error: `stub provider has no tools (${toolName})` });
|
|
26
40
|
}
|
|
41
|
+
async search() {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
27
44
|
async shutdown() {}
|
|
28
45
|
};
|
|
29
46
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stub-memory-provider.js","names":[],"sources":["../../../../src/agent/memory/stub-memory-provider.ts"],"sourcesContent":["import type { MemoryProvider, MemoryProviderInitOptions } from './provider.js';\n\n/**\n * Placeholder external provider — enables wiring tests without cloud deps.\n */\nexport class StubMemoryProvider implements MemoryProvider {\n readonly
|
|
1
|
+
{"version":3,"file":"stub-memory-provider.js","names":[],"sources":["../../../../src/agent/memory/stub-memory-provider.ts"],"sourcesContent":["import type { MemoryProvider, MemoryProviderInitOptions } from './provider.js';\n\n/**\n * Placeholder external provider — enables wiring tests without cloud deps.\n */\nexport class StubMemoryProvider implements MemoryProvider {\n readonly id = 'stub';\n readonly displayName = 'Stub Memory Provider';\n readonly capabilities = {\n search: true,\n read: false,\n write: false,\n update: false,\n delete: false,\n keywordSearch: false,\n semanticSearch: false,\n hybridSearch: false,\n citations: false,\n sync: true,\n local: false,\n };\n\n isAvailable(): boolean {\n return true;\n }\n\n async initialize(_sessionId: string, _options?: MemoryProviderInitOptions): Promise<void> {}\n\n systemPromptBlock(): string {\n return 'External memory provider: stub (wiring only; no cloud backend).';\n }\n\n async prefetch(query: string): Promise<string> {\n const q = query.trim();\n if (!q) {\n return '';\n }\n return `[stub prefetch] query length=${q.length}`;\n }\n\n queuePrefetch(): void {}\n\n sync(): void {}\n\n getToolSchemas() {\n return [];\n }\n\n async handleToolCall(toolName: string): Promise<string> {\n return JSON.stringify({ error: `stub provider has no tools (${toolName})` });\n }\n\n async search(): Promise<[]> {\n return [];\n }\n\n async shutdown(): Promise<void> {}\n}\n"],"mappings":";;;;AAKA,IAAa,qBAAb,MAA0D;CACxD,KAAc;CACd,cAAuB;CACvB,eAAwB;EACtB,QAAQ;EACR,MAAM;EACN,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,eAAe;EACf,gBAAgB;EAChB,cAAc;EACd,WAAW;EACX,MAAM;EACN,OAAO;EACR;CAED,cAAuB;AACrB,SAAO;;CAGT,MAAM,WAAW,YAAoB,UAAqD;CAE1F,oBAA4B;AAC1B,SAAO;;CAGT,MAAM,SAAS,OAAgC;EAC7C,MAAM,IAAI,MAAM,MAAM;AACtB,MAAI,CAAC,EACH,QAAO;AAET,SAAO,gCAAgC,EAAE;;CAG3C,gBAAsB;CAEtB,OAAa;CAEb,iBAAiB;AACf,SAAO,EAAE;;CAGX,MAAM,eAAe,UAAmC;AACtD,SAAO,KAAK,UAAU,EAAE,OAAO,+BAA+B,SAAS,IAAI,CAAC;;CAG9E,MAAM,SAAsB;AAC1B,SAAO,EAAE;;CAGX,MAAM,WAA0B"}
|
|
@@ -17,3 +17,139 @@ export interface MemorySnapshot {
|
|
|
17
17
|
memory: string;
|
|
18
18
|
user: string;
|
|
19
19
|
}
|
|
20
|
+
export type MemoryKind = 'user_profile' | 'agent_note' | 'workspace_fact' | 'daily_note' | 'session_summary' | 'derived_insight';
|
|
21
|
+
export interface MemoryScope {
|
|
22
|
+
agentId: string;
|
|
23
|
+
workspaceId?: string;
|
|
24
|
+
sessionKey?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface MemoryCitation {
|
|
27
|
+
providerId: string;
|
|
28
|
+
recordId: string;
|
|
29
|
+
title?: string;
|
|
30
|
+
uri?: string;
|
|
31
|
+
path?: string;
|
|
32
|
+
lineStart?: number;
|
|
33
|
+
lineEnd?: number;
|
|
34
|
+
createdAt?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface MemoryRecord {
|
|
37
|
+
id: string;
|
|
38
|
+
kind: MemoryKind;
|
|
39
|
+
scope: MemoryScope;
|
|
40
|
+
content: string;
|
|
41
|
+
source: {
|
|
42
|
+
path?: string;
|
|
43
|
+
lineStart?: number;
|
|
44
|
+
lineEnd?: number;
|
|
45
|
+
sessionEntryId?: string;
|
|
46
|
+
provider?: string;
|
|
47
|
+
};
|
|
48
|
+
confidence?: number;
|
|
49
|
+
createdAt: string;
|
|
50
|
+
updatedAt: string;
|
|
51
|
+
tags?: string[];
|
|
52
|
+
}
|
|
53
|
+
export interface MemorySearchRequest {
|
|
54
|
+
query: string;
|
|
55
|
+
scope?: Partial<MemoryScope>;
|
|
56
|
+
kinds?: MemoryKind[];
|
|
57
|
+
maxResults?: number;
|
|
58
|
+
minScore?: number;
|
|
59
|
+
}
|
|
60
|
+
export interface MemorySearchResult {
|
|
61
|
+
record: MemoryRecord;
|
|
62
|
+
score: number;
|
|
63
|
+
snippet: string;
|
|
64
|
+
citation: MemoryCitation;
|
|
65
|
+
}
|
|
66
|
+
export interface MemoryReadRequest {
|
|
67
|
+
id?: string;
|
|
68
|
+
path?: string;
|
|
69
|
+
from?: number;
|
|
70
|
+
lines?: number;
|
|
71
|
+
scope?: Partial<MemoryScope>;
|
|
72
|
+
}
|
|
73
|
+
export interface MemoryReadResult {
|
|
74
|
+
record: MemoryRecord;
|
|
75
|
+
lineNumbers?: {
|
|
76
|
+
start: number;
|
|
77
|
+
end: number;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export interface MemoryListRequest {
|
|
81
|
+
kind?: MemoryKind;
|
|
82
|
+
target?: 'memory' | 'user';
|
|
83
|
+
scope?: Partial<MemoryScope>;
|
|
84
|
+
}
|
|
85
|
+
export interface MemoryWriteRequest {
|
|
86
|
+
kind: MemoryKind;
|
|
87
|
+
content: string;
|
|
88
|
+
scope?: Partial<MemoryScope>;
|
|
89
|
+
target?: 'memory' | 'user';
|
|
90
|
+
tags?: string[];
|
|
91
|
+
source?: MemoryRecord['source'];
|
|
92
|
+
approved?: boolean;
|
|
93
|
+
}
|
|
94
|
+
export interface MemoryUpdateRequest {
|
|
95
|
+
id?: string;
|
|
96
|
+
matchText?: string;
|
|
97
|
+
content: string;
|
|
98
|
+
scope?: Partial<MemoryScope>;
|
|
99
|
+
target?: 'memory' | 'user';
|
|
100
|
+
approved?: boolean;
|
|
101
|
+
}
|
|
102
|
+
export interface MemoryDeleteRequest {
|
|
103
|
+
id?: string;
|
|
104
|
+
matchText?: string;
|
|
105
|
+
scope?: Partial<MemoryScope>;
|
|
106
|
+
target?: 'memory' | 'user';
|
|
107
|
+
}
|
|
108
|
+
export interface MemoryWriteResult {
|
|
109
|
+
success: boolean;
|
|
110
|
+
message?: string;
|
|
111
|
+
error?: string;
|
|
112
|
+
record?: MemoryRecord;
|
|
113
|
+
}
|
|
114
|
+
export interface MemoryCapabilities {
|
|
115
|
+
search: boolean;
|
|
116
|
+
read: boolean;
|
|
117
|
+
write: boolean;
|
|
118
|
+
update: boolean;
|
|
119
|
+
delete: boolean;
|
|
120
|
+
keywordSearch?: boolean;
|
|
121
|
+
semanticSearch?: boolean;
|
|
122
|
+
hybridSearch?: boolean;
|
|
123
|
+
citations?: boolean;
|
|
124
|
+
sync?: boolean;
|
|
125
|
+
local?: boolean;
|
|
126
|
+
}
|
|
127
|
+
export interface MemoryProviderManifest {
|
|
128
|
+
type: 'memory-provider';
|
|
129
|
+
id: string;
|
|
130
|
+
displayName: string;
|
|
131
|
+
entry?: string;
|
|
132
|
+
capabilities: Partial<MemoryCapabilities>;
|
|
133
|
+
configSchema?: string;
|
|
134
|
+
}
|
|
135
|
+
export type MemorySyncEvent = {
|
|
136
|
+
type: 'turn';
|
|
137
|
+
userContent: string;
|
|
138
|
+
assistantContent: string;
|
|
139
|
+
sessionId?: string;
|
|
140
|
+
} | {
|
|
141
|
+
type: 'write';
|
|
142
|
+
action: 'add' | 'replace' | 'remove';
|
|
143
|
+
target?: 'memory' | 'user';
|
|
144
|
+
content: string;
|
|
145
|
+
} | {
|
|
146
|
+
type: 'signal';
|
|
147
|
+
signal: MemorySignal;
|
|
148
|
+
};
|
|
149
|
+
export interface MemorySignal {
|
|
150
|
+
source: 'search_recall' | 'session_summary' | 'explicit_remember' | 'background_review' | 'dreaming';
|
|
151
|
+
recordId?: string;
|
|
152
|
+
score?: number;
|
|
153
|
+
content?: string;
|
|
154
|
+
metadata?: Record<string, unknown>;
|
|
155
|
+
}
|
|
@@ -71,7 +71,7 @@ export declare class ModelManager {
|
|
|
71
71
|
*/
|
|
72
72
|
applyModelForSession(agent: Agent, sessionKey: string): Promise<void>;
|
|
73
73
|
/**
|
|
74
|
-
* Ordered model candidates for the session
|
|
74
|
+
* Ordered model candidates for the session.
|
|
75
75
|
*/
|
|
76
76
|
getFallbackCandidatesForSession(sessionKey: string): ModelCandidate[];
|
|
77
77
|
/**
|
|
@@ -148,7 +148,7 @@ var ModelManager = class {
|
|
|
148
148
|
}, "Applied model for session");
|
|
149
149
|
}
|
|
150
150
|
/**
|
|
151
|
-
* Ordered model candidates for the session
|
|
151
|
+
* Ordered model candidates for the session.
|
|
152
152
|
*/
|
|
153
153
|
getFallbackCandidatesForSession(sessionKey) {
|
|
154
154
|
const parsed = parseModelRef(this.getModelForSession(sessionKey));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","names":["getAllModelsFromProviders"],"sources":["../../../../src/agent/models/manager.ts"],"sourcesContent":["/**\n * Model management module\n * \n * Handles model selection, switching, and automatic fallback\n * when a provider fails.\n */\n\nimport { Agent, type AgentMessage } from '@earendil-works/pi-agent-core';\nimport type { Model, Api } from '@earendil-works/pi-ai';\nimport { type Config, getAgentDefaultModelRef } from '../../config/schema.js';\nimport { createLogger } from '../../utils/logger.js';\nimport { resolveModel, getAllModels as getAllModelsFromProviders, getDefaultModelSync } from '../../providers/index.js';\nimport {\n isFailoverError,\n describeFailoverError,\n resolveFallbackCandidates,\n type ModelCandidate,\n} from '../fallback/index.js';\nimport { parseModelRef } from './selection.js';\nimport {\n isAssistantTurnAborted,\n isAssistantTurnFailed,\n maybeRetryTurnAfterTransientLlmFailure,\n} from '../orchestration/llm-turn-retry.js';\nimport {\n resolveAgentTurnTimeoutMs,\n runAgentTurnWithTimeout,\n} from '../orchestration/run-agent-turn-with-timeout.js';\n\nconst log = createLogger('ModelManager');\n\nexport interface ModelManagerConfig {\n defaultModel?: string;\n config?: Config;\n}\n\nexport interface RunResult {\n content: string | null;\n usage?: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n };\n}\n\n/**\n * Get the last assistant content from agent messages\n */\nfunction getLastAssistantContent(agent: Agent): string | null {\n const messages = agent.state.messages;\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (msg.role === 'assistant') {\n return msg.content\n .filter((c) => c.type === 'text')\n .map((c) => c.text || '')\n .join('');\n }\n }\n return null;\n}\n\nexport class ModelManager {\n private defaultModel: string;\n private config?: Config;\n private currentModelName: string;\n private currentProvider: string;\n private sessionModels: Map<string, string> = new Map();\n /** Baseline model from `agents.list` / defaults merge when the session agent is created. */\n private sessionProfileDefaults: Map<string, string> = new Map();\n private channelManager?: any;\n\n constructor(config: ModelManagerConfig = {}) {\n this.config = config.config;\n this.defaultModel = config.defaultModel || getDefaultModelSync(config.config);\n this.currentModelName = this.defaultModel;\n this.currentProvider = this.defaultModel.split('/')[0] || 'anthropic';\n }\n\n /**\n * Set channel manager reference for accessing session-specific settings\n */\n setChannelManager(channelManager: any): void {\n this.channelManager = channelManager;\n }\n\n /**\n * Apply updated config so default model and failover metadata match disk/runtime config.\n */\n updateFromConfig(config: Config): void {\n this.config = config;\n const ref = getAgentDefaultModelRef(config);\n this.defaultModel = ref ? ref : getDefaultModelSync(config);\n this.sessionProfileDefaults.clear();\n }\n\n /**\n * Set the config-derived default model for a session (from effective agent profile).\n * Cleared by {@link updateFromConfig} or {@link clearSessionProfileDefault}.\n */\n setSessionProfileDefault(sessionKey: string, modelRef: string): void {\n this.sessionProfileDefaults.set(sessionKey, modelRef);\n }\n\n clearSessionProfileDefault(sessionKey: string): void {\n this.sessionProfileDefaults.delete(sessionKey);\n }\n\n /**\n * Get current model name\n */\n getCurrentModel(): string {\n return this.currentModelName;\n }\n\n /**\n * Get current provider\n */\n getCurrentProvider(): string {\n return this.currentProvider;\n }\n\n /**\n * Switch model for a specific session\n */\n async switchModelForSession(sessionKey: string, modelId: string): Promise<boolean> {\n try {\n resolveModel(modelId);\n this.sessionModels.set(sessionKey, modelId);\n log.info({ sessionKey, modelId }, 'Model switched for session');\n return true;\n } catch (err) {\n log.error({ err, sessionKey, modelId }, 'Failed to switch model');\n return false;\n }\n }\n\n /** Drop in-memory session override so the global default is used again. */\n clearSessionModelOverride(sessionKey: string): void {\n this.sessionModels.delete(sessionKey);\n }\n\n /**\n * Resolved pi-ai model for session (for transcript policy, tools, etc.)\n */\n getResolvedModelForSession(sessionKey: string): Model<Api> {\n return resolveModel(this.getModelForSession(sessionKey));\n }\n\n /**\n * Get model for session, checking session override first\n */\n getModelForSession(sessionKey: string): string {\n const sessionModel = this.sessionModels.get(sessionKey);\n if (sessionModel) {\n return sessionModel;\n }\n\n const profileDefault = this.sessionProfileDefaults.get(sessionKey);\n if (profileDefault) {\n return profileDefault;\n }\n\n return this.defaultModel;\n }\n\n /**\n * Apply model to agent if different from current\n */\n async applyModelForSession(agent: Agent, sessionKey: string): Promise<void> {\n const targetModelId = this.getModelForSession(sessionKey);\n\n let found: Model<Api>;\n try {\n found = resolveModel(targetModelId);\n } catch (err) {\n log.error({ err, sessionKey, modelId: targetModelId }, 'Failed to apply model');\n return;\n }\n\n const sm = agent.state.model as Model<Api> | undefined;\n if (sm && sm.provider === found.provider && sm.id === found.id) {\n this.currentModelName = targetModelId;\n this.currentProvider = found.provider || 'unknown';\n return;\n }\n\n agent.state.model = found;\n this.currentModelName = targetModelId;\n this.currentProvider = found.provider || 'unknown';\n\n log.info({ sessionKey, modelId: targetModelId }, 'Applied model for session');\n }\n\n /**\n * Ordered model candidates for the session (primary + `agents.defaults.models.chat.fallbacks`).\n */\n getFallbackCandidatesForSession(sessionKey: string): ModelCandidate[] {\n const ref = this.getModelForSession(sessionKey);\n const parsed = parseModelRef(ref);\n if (!parsed) {\n return [];\n }\n return resolveFallbackCandidates({\n cfg: this.config,\n provider: parsed.provider,\n model: parsed.model,\n });\n }\n\n /**\n * Apply a resolved pi-ai model and sync {@link currentModelName} / {@link currentProvider}.\n */\n applyResolvedModel(agent: Agent, model: Model<Api>, modelRef: string): void {\n agent.state.model = model;\n this.currentModelName = modelRef;\n this.currentProvider = model.provider || 'unknown';\n }\n\n /**\n * Run the agent with automatic model fallback on failure.\n */\n async runWithFallback(\n agent: Agent,\n sessionKey: string,\n userMessage: AgentMessage,\n provider: string,\n model: string\n ): Promise<RunResult> {\n const candidates = resolveFallbackCandidates({\n cfg: this.config ?? undefined,\n provider,\n model,\n });\n\n let lastError: unknown;\n\n for (let i = 0; i < candidates.length; i++) {\n const candidate = candidates[i];\n const modelRef = `${candidate.provider}/${candidate.model}`;\n\n let candidateModel: Model<Api>;\n try {\n candidateModel = resolveModel(modelRef);\n } catch {\n log.warn({ provider: candidate.provider, model: candidate.model }, 'Fallback model not found');\n continue;\n }\n\n log.info(\n { attempt: i + 1, total: candidates.length, provider: candidate.provider, model: candidate.model },\n 'Attempting model',\n );\n\n const beforeLen = agent.state.messages.length;\n\n try {\n this.applyResolvedModel(agent, candidateModel, modelRef);\n\n const runTurn = async () => {\n await agent.prompt(userMessage);\n await agent.waitForIdle();\n await maybeRetryTurnAfterTransientLlmFailure(agent, { sessionKey, log });\n };\n\n await runAgentTurnWithTimeout(agent, runTurn, resolveAgentTurnTimeoutMs(this.config));\n\n if (isAssistantTurnAborted(agent)) {\n const usage = (agent.state as { lastUsage?: RunResult['usage'] }).lastUsage;\n return { content: getLastAssistantContent(agent), usage };\n }\n\n if (!isAssistantTurnFailed(agent)) {\n const usage = (agent.state as { lastUsage?: RunResult['usage'] }).lastUsage;\n log.info(\n { provider: candidate.provider, model: candidate.model, success: true },\n 'Model call completed',\n );\n return { content: getLastAssistantContent(agent), usage };\n }\n\n lastError = new Error(`Assistant turn failed: ${modelRef}`);\n log.warn(\n { attempt: i + 1, sessionKey, modelRef },\n 'Model turn failed after retries, trying fallback',\n );\n } catch (err) {\n lastError = err;\n if (err instanceof DOMException && err.name === 'AbortError') {\n log.info({ sessionKey }, 'User aborted model call');\n throw err;\n }\n\n const errorDetails = {\n attempt: i + 1,\n provider: candidate.provider,\n model: candidate.model,\n errorMessage: err instanceof Error ? err.message : String(err),\n };\n\n if (isFailoverError(err)) {\n const described = describeFailoverError(err);\n log.warn({ ...errorDetails, ...described }, 'Model call failed, trying fallback');\n } else {\n log.warn(errorDetails, 'Model call failed, trying fallback');\n }\n }\n\n agent.state.messages = agent.state.messages.slice(0, beforeLen);\n }\n\n if (lastError) {\n const em = lastError instanceof Error ? lastError.message : String(lastError);\n const attemptedModelRefs = candidates.map((c) => `${c.provider}/${c.model}`);\n log.error(\n {\n err: lastError instanceof Error ? lastError : undefined,\n errorMessage: em,\n attemptedCandidates: candidates.length,\n attemptedModelRefs,\n sessionKey,\n },\n `All model candidates failed (${candidates.length} refs): ${em}`,\n );\n throw lastError instanceof Error ? lastError : new Error(String(lastError));\n }\n\n return { content: null };\n }\n\n /**\n * Find model by reference (provider/modelId)\n */\n findByRef(ref: string): Model<Api> | undefined {\n try {\n return resolveModel(ref);\n } catch {\n return undefined;\n }\n }\n\n /**\n * Find model by provider and ID\n */\n find(provider: string, modelId: string): Model<Api> | undefined {\n try {\n return resolveModel(`${provider}/${modelId}`);\n } catch {\n return undefined;\n }\n }\n\n /**\n * Get all available models\n */\n getAllModels(): readonly Model<Api>[] {\n return getAllModelsFromProviders();\n }\n\n /**\n * Get models grouped by provider\n */\n getModelsByProvider(): Map<string, Model<Api>[]> {\n const all = this.getAllModels();\n const grouped = new Map<string, Model<Api>[]>();\n for (const model of all) {\n const list = grouped.get(model.provider) ?? [];\n list.push(model);\n grouped.set(model.provider, list);\n }\n return grouped;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manager.js","names":["getAllModelsFromProviders"],"sources":["../../../../src/agent/models/manager.ts"],"sourcesContent":["/**\n * Model management module\n * \n * Handles model selection, switching, and automatic fallback\n * when a provider fails.\n */\n\nimport { Agent, type AgentMessage } from '@earendil-works/pi-agent-core';\nimport type { Model, Api } from '@earendil-works/pi-ai';\nimport { type Config, getAgentDefaultModelRef } from '../../config/schema.js';\nimport { createLogger } from '../../utils/logger.js';\nimport { resolveModel, getAllModels as getAllModelsFromProviders, getDefaultModelSync } from '../../providers/index.js';\nimport {\n isFailoverError,\n describeFailoverError,\n resolveFallbackCandidates,\n type ModelCandidate,\n} from '../fallback/index.js';\nimport { parseModelRef } from './selection.js';\nimport {\n isAssistantTurnAborted,\n isAssistantTurnFailed,\n maybeRetryTurnAfterTransientLlmFailure,\n} from '../orchestration/llm-turn-retry.js';\nimport {\n resolveAgentTurnTimeoutMs,\n runAgentTurnWithTimeout,\n} from '../orchestration/run-agent-turn-with-timeout.js';\n\nconst log = createLogger('ModelManager');\n\nexport interface ModelManagerConfig {\n defaultModel?: string;\n config?: Config;\n}\n\nexport interface RunResult {\n content: string | null;\n usage?: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n };\n}\n\n/**\n * Get the last assistant content from agent messages\n */\nfunction getLastAssistantContent(agent: Agent): string | null {\n const messages = agent.state.messages;\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (msg.role === 'assistant') {\n return msg.content\n .filter((c) => c.type === 'text')\n .map((c) => c.text || '')\n .join('');\n }\n }\n return null;\n}\n\nexport class ModelManager {\n private defaultModel: string;\n private config?: Config;\n private currentModelName: string;\n private currentProvider: string;\n private sessionModels: Map<string, string> = new Map();\n /** Baseline model from `agents.list` / defaults merge when the session agent is created. */\n private sessionProfileDefaults: Map<string, string> = new Map();\n private channelManager?: any;\n\n constructor(config: ModelManagerConfig = {}) {\n this.config = config.config;\n this.defaultModel = config.defaultModel || getDefaultModelSync(config.config);\n this.currentModelName = this.defaultModel;\n this.currentProvider = this.defaultModel.split('/')[0] || 'anthropic';\n }\n\n /**\n * Set channel manager reference for accessing session-specific settings\n */\n setChannelManager(channelManager: any): void {\n this.channelManager = channelManager;\n }\n\n /**\n * Apply updated config so default model and failover metadata match disk/runtime config.\n */\n updateFromConfig(config: Config): void {\n this.config = config;\n const ref = getAgentDefaultModelRef(config);\n this.defaultModel = ref ? ref : getDefaultModelSync(config);\n this.sessionProfileDefaults.clear();\n }\n\n /**\n * Set the config-derived default model for a session (from effective agent profile).\n * Cleared by {@link updateFromConfig} or {@link clearSessionProfileDefault}.\n */\n setSessionProfileDefault(sessionKey: string, modelRef: string): void {\n this.sessionProfileDefaults.set(sessionKey, modelRef);\n }\n\n clearSessionProfileDefault(sessionKey: string): void {\n this.sessionProfileDefaults.delete(sessionKey);\n }\n\n /**\n * Get current model name\n */\n getCurrentModel(): string {\n return this.currentModelName;\n }\n\n /**\n * Get current provider\n */\n getCurrentProvider(): string {\n return this.currentProvider;\n }\n\n /**\n * Switch model for a specific session\n */\n async switchModelForSession(sessionKey: string, modelId: string): Promise<boolean> {\n try {\n resolveModel(modelId);\n this.sessionModels.set(sessionKey, modelId);\n log.info({ sessionKey, modelId }, 'Model switched for session');\n return true;\n } catch (err) {\n log.error({ err, sessionKey, modelId }, 'Failed to switch model');\n return false;\n }\n }\n\n /** Drop in-memory session override so the global default is used again. */\n clearSessionModelOverride(sessionKey: string): void {\n this.sessionModels.delete(sessionKey);\n }\n\n /**\n * Resolved pi-ai model for session (for transcript policy, tools, etc.)\n */\n getResolvedModelForSession(sessionKey: string): Model<Api> {\n return resolveModel(this.getModelForSession(sessionKey));\n }\n\n /**\n * Get model for session, checking session override first\n */\n getModelForSession(sessionKey: string): string {\n const sessionModel = this.sessionModels.get(sessionKey);\n if (sessionModel) {\n return sessionModel;\n }\n\n const profileDefault = this.sessionProfileDefaults.get(sessionKey);\n if (profileDefault) {\n return profileDefault;\n }\n\n return this.defaultModel;\n }\n\n /**\n * Apply model to agent if different from current\n */\n async applyModelForSession(agent: Agent, sessionKey: string): Promise<void> {\n const targetModelId = this.getModelForSession(sessionKey);\n\n let found: Model<Api>;\n try {\n found = resolveModel(targetModelId);\n } catch (err) {\n log.error({ err, sessionKey, modelId: targetModelId }, 'Failed to apply model');\n return;\n }\n\n const sm = agent.state.model as Model<Api> | undefined;\n if (sm && sm.provider === found.provider && sm.id === found.id) {\n this.currentModelName = targetModelId;\n this.currentProvider = found.provider || 'unknown';\n return;\n }\n\n agent.state.model = found;\n this.currentModelName = targetModelId;\n this.currentProvider = found.provider || 'unknown';\n\n log.info({ sessionKey, modelId: targetModelId }, 'Applied model for session');\n }\n\n /**\n * Ordered model candidates for the session.\n */\n getFallbackCandidatesForSession(sessionKey: string): ModelCandidate[] {\n const ref = this.getModelForSession(sessionKey);\n const parsed = parseModelRef(ref);\n if (!parsed) {\n return [];\n }\n return resolveFallbackCandidates({\n cfg: this.config,\n provider: parsed.provider,\n model: parsed.model,\n });\n }\n\n /**\n * Apply a resolved pi-ai model and sync {@link currentModelName} / {@link currentProvider}.\n */\n applyResolvedModel(agent: Agent, model: Model<Api>, modelRef: string): void {\n agent.state.model = model;\n this.currentModelName = modelRef;\n this.currentProvider = model.provider || 'unknown';\n }\n\n /**\n * Run the agent with automatic model fallback on failure.\n */\n async runWithFallback(\n agent: Agent,\n sessionKey: string,\n userMessage: AgentMessage,\n provider: string,\n model: string\n ): Promise<RunResult> {\n const candidates = resolveFallbackCandidates({\n cfg: this.config ?? undefined,\n provider,\n model,\n });\n\n let lastError: unknown;\n\n for (let i = 0; i < candidates.length; i++) {\n const candidate = candidates[i];\n const modelRef = `${candidate.provider}/${candidate.model}`;\n\n let candidateModel: Model<Api>;\n try {\n candidateModel = resolveModel(modelRef);\n } catch {\n log.warn({ provider: candidate.provider, model: candidate.model }, 'Fallback model not found');\n continue;\n }\n\n log.info(\n { attempt: i + 1, total: candidates.length, provider: candidate.provider, model: candidate.model },\n 'Attempting model',\n );\n\n const beforeLen = agent.state.messages.length;\n\n try {\n this.applyResolvedModel(agent, candidateModel, modelRef);\n\n const runTurn = async () => {\n await agent.prompt(userMessage);\n await agent.waitForIdle();\n await maybeRetryTurnAfterTransientLlmFailure(agent, { sessionKey, log });\n };\n\n await runAgentTurnWithTimeout(agent, runTurn, resolveAgentTurnTimeoutMs(this.config));\n\n if (isAssistantTurnAborted(agent)) {\n const usage = (agent.state as { lastUsage?: RunResult['usage'] }).lastUsage;\n return { content: getLastAssistantContent(agent), usage };\n }\n\n if (!isAssistantTurnFailed(agent)) {\n const usage = (agent.state as { lastUsage?: RunResult['usage'] }).lastUsage;\n log.info(\n { provider: candidate.provider, model: candidate.model, success: true },\n 'Model call completed',\n );\n return { content: getLastAssistantContent(agent), usage };\n }\n\n lastError = new Error(`Assistant turn failed: ${modelRef}`);\n log.warn(\n { attempt: i + 1, sessionKey, modelRef },\n 'Model turn failed after retries, trying fallback',\n );\n } catch (err) {\n lastError = err;\n if (err instanceof DOMException && err.name === 'AbortError') {\n log.info({ sessionKey }, 'User aborted model call');\n throw err;\n }\n\n const errorDetails = {\n attempt: i + 1,\n provider: candidate.provider,\n model: candidate.model,\n errorMessage: err instanceof Error ? err.message : String(err),\n };\n\n if (isFailoverError(err)) {\n const described = describeFailoverError(err);\n log.warn({ ...errorDetails, ...described }, 'Model call failed, trying fallback');\n } else {\n log.warn(errorDetails, 'Model call failed, trying fallback');\n }\n }\n\n agent.state.messages = agent.state.messages.slice(0, beforeLen);\n }\n\n if (lastError) {\n const em = lastError instanceof Error ? lastError.message : String(lastError);\n const attemptedModelRefs = candidates.map((c) => `${c.provider}/${c.model}`);\n log.error(\n {\n err: lastError instanceof Error ? lastError : undefined,\n errorMessage: em,\n attemptedCandidates: candidates.length,\n attemptedModelRefs,\n sessionKey,\n },\n `All model candidates failed (${candidates.length} refs): ${em}`,\n );\n throw lastError instanceof Error ? lastError : new Error(String(lastError));\n }\n\n return { content: null };\n }\n\n /**\n * Find model by reference (provider/modelId)\n */\n findByRef(ref: string): Model<Api> | undefined {\n try {\n return resolveModel(ref);\n } catch {\n return undefined;\n }\n }\n\n /**\n * Find model by provider and ID\n */\n find(provider: string, modelId: string): Model<Api> | undefined {\n try {\n return resolveModel(`${provider}/${modelId}`);\n } catch {\n return undefined;\n }\n }\n\n /**\n * Get all available models\n */\n getAllModels(): readonly Model<Api>[] {\n return getAllModelsFromProviders();\n }\n\n /**\n * Get models grouped by provider\n */\n getModelsByProvider(): Map<string, Model<Api>[]> {\n const all = this.getAllModels();\n const grouped = new Map<string, Model<Api>[]>();\n for (const model of all) {\n const list = grouped.get(model.provider) ?? [];\n list.push(model);\n grouped.set(model.provider, list);\n }\n return grouped;\n }\n}\n"],"mappings":"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"}
|
|
@@ -35,7 +35,7 @@ export interface AgentOrchestratorConfig {
|
|
|
35
35
|
getAgentInternalStorageRootForSession?: (sessionKey: string) => string;
|
|
36
36
|
/** Fire-and-forget after full session persist (e.g. LLM session title); not called from mid-turn snapshots. */
|
|
37
37
|
enqueueAutoTitle?: (sessionKey: string) => void;
|
|
38
|
-
/** For per-turn timeout
|
|
38
|
+
/** For per-turn timeout. */
|
|
39
39
|
getConfig?: () => Config | undefined;
|
|
40
40
|
/** Channel streaming: token/tool events from pi embedded session. */
|
|
41
41
|
onEmbeddedStreamEvent?: (sessionKey: string, event: EmbeddedStreamEvent) => void;
|
|
@@ -95,7 +95,8 @@ var AgentOrchestrator = class {
|
|
|
95
95
|
} else {
|
|
96
96
|
const result = await runDreamingDeepPromotion({
|
|
97
97
|
workspaceDir,
|
|
98
|
-
config: resolved.phases.deep
|
|
98
|
+
config: resolved.phases.deep,
|
|
99
|
+
memoryManager: this.agentManager.getMemoryManagerForSession(sessionKey)
|
|
99
100
|
});
|
|
100
101
|
await appendDreamingEvent(workspaceDir, {
|
|
101
102
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|