@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-for-session.js","names":[],"sources":["../../../../src/agent/embedded/run-for-session.ts"],"sourcesContent":["import crypto from 'node:crypto';\nimport type { AgentMessage, ThinkingLevel } from '@earendil-works/pi-agent-core';\n\nimport type { Config } from '../../config/schema.js';\nimport type { AgentInstanceGateway } from '../agent-instance-gateway.js';\nimport type { ModelManager } from '../models/index.js';\nimport type { SessionStore } from '../../session/store.js';\nimport { resolveAgentTurnTimeoutMs } from '../orchestration/run-agent-turn-with-timeout.js';\nimport { runXopcEmbeddedTurn } from './run-turn.js';\nimport type { EmbeddedStreamEvent, RunXopcEmbeddedTurnParams, RunXopcEmbeddedTurnResult } from './types.js';\nimport { applyStartupContextToUserMessage } from '../reply/apply-turn-user-enrichment.js';\nimport {\n mergeTurnTools,\n resolveEmbeddedMcpToolsForTurn,\n} from '../mcp/resolve-embedded-mcp-tools.js';\nimport { createLogger } from '../../utils/logger.js';\n\nconst log = createLogger('EmbeddedTurnForSession');\n\nexport type RunEmbeddedForSessionParams = {\n sessionKey: string;\n runId?: string;\n userMessage: AgentMessage;\n llmImages?: import('@earendil-works/pi-ai').ImageContent[];\n sessionStore: SessionStore;\n agentManager: AgentInstanceGateway;\n modelManager: ModelManager;\n thinkingOverride?: string | null;\n abortSignal?: AbortSignal;\n onEvent?: (event: EmbeddedStreamEvent) => void;\n getConfig?: () => Config | undefined;\n beforeTurn?: () => void | Promise<void>;\n afterTurn?: (userPlain: string) => void | Promise<void>;\n startupAction?: 'new' | 'reset';\n forceStartupContext?: boolean;\n applyStartupContext?: boolean;\n /** When true, dispose session MCP runtime after this turn completes. */\n cleanupBundleMcpOnRunEnd?: boolean;\n};\n\nexport async function runEmbeddedTurnForSession(\n params: RunEmbeddedForSessionParams,\n): Promise<RunXopcEmbeddedTurnResult> {\n const { sessionKey, agentManager, modelManager, sessionStore, userMessage } = params;\n const runId = params.runId ?? crypto.randomUUID();\n\n await params.beforeTurn?.();\n\n const agent = (agentManager as any).getOrCreateAgent(sessionKey) as {\n state: {\n tools: RunXopcEmbeddedTurnParams['tools'];\n systemPrompt?: string;\n thinkingLevel?: ThinkingLevel;\n };\n };\n const mm = modelManager as any;\n await mm.applyModelForSession(agent, sessionKey);\n\n const modelRef = String(mm.getModelForSession(sessionKey));\n agentManager.setModelForSession(sessionKey, modelRef);\n const model = mm.getResolvedModelForSession(sessionKey) as RunXopcEmbeddedTurnParams['model'];\n const tools = agent.state.tools;\n const systemPrompt = agent.state.systemPrompt ?? '';\n const thinkingLevel = (params.thinkingOverride as ThinkingLevel | undefined) ?? agent.state.thinkingLevel;\n const workspaceDir = agentManager.getResolvedWorkspaceForSession(sessionKey);\n const config = params.getConfig?.();\n\n // --- Pre-turn automatic compaction ---\n await maybeAutoCompactBeforeTurn({\n sessionKey,\n sessionStore,\n agentManager,\n model,\n config,\n onEvent: params.onEvent,\n });\n\n let userMessageForTurn = userMessage;\n if (params.applyStartupContext !== false) {\n userMessageForTurn = await applyStartupContextToUserMessage({\n userMessage,\n sessionKey,\n workspaceDir,\n cfg: config,\n sessionStore,\n startupAction: params.startupAction,\n force: params.forceStartupContext,\n });\n }\n\n const result = await (async () => {\n const mcpResolved = await resolveEmbeddedMcpToolsForTurn({\n sessionKey,\n workspaceDir,\n cfg: config,\n baseTools: tools,\n cleanupOnTurnEnd: params.cleanupBundleMcpOnRunEnd === true,\n });\n const turnTools = mergeTurnTools(tools, mcpResolved.tools);\n try {\n return await runXopcEmbeddedTurn({\n sessionKey,\n runId,\n userMessage: userMessageForTurn,\n images: params.llmImages,\n model,\n modelRef,\n tools: turnTools,\n systemPrompt,\n thinkingLevel,\n workspaceDir,\n sessionStore,\n timeoutMs: resolveAgentTurnTimeoutMs(config),\n abortSignal: params.abortSignal,\n onEvent: params.onEvent,\n });\n } finally {\n await mcpResolved.dispose().catch(() => {});\n }\n })();\n\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// Pre-turn automatic compaction\n// ---------------------------------------------------------------------------\n\nasync function maybeAutoCompactBeforeTurn(opts: {\n sessionKey: string;\n sessionStore: SessionStore;\n agentManager: AgentInstanceGateway;\n model: RunXopcEmbeddedTurnParams['model'];\n config: Config | undefined;\n onEvent?: (event: EmbeddedStreamEvent) => void;\n}): Promise<void> {\n const { sessionKey, sessionStore, agentManager, model, config, onEvent } = opts;\n
|
|
1
|
+
{"version":3,"file":"run-for-session.js","names":[],"sources":["../../../../src/agent/embedded/run-for-session.ts"],"sourcesContent":["import crypto from 'node:crypto';\nimport type { AgentMessage, ThinkingLevel } from '@earendil-works/pi-agent-core';\n\nimport type { Config } from '../../config/schema.js';\nimport type { AgentInstanceGateway } from '../agent-instance-gateway.js';\nimport type { ModelManager } from '../models/index.js';\nimport type { SessionStore } from '../../session/store.js';\nimport { resolveAgentTurnTimeoutMs } from '../orchestration/run-agent-turn-with-timeout.js';\nimport { runXopcEmbeddedTurn } from './run-turn.js';\nimport type { EmbeddedStreamEvent, RunXopcEmbeddedTurnParams, RunXopcEmbeddedTurnResult } from './types.js';\nimport { applyStartupContextToUserMessage } from '../reply/apply-turn-user-enrichment.js';\nimport { resolveEffectiveAgentManifestForSession } from '../../config/agent-profile.js';\nimport {\n mergeTurnTools,\n resolveEmbeddedMcpToolsForTurn,\n} from '../mcp/resolve-embedded-mcp-tools.js';\nimport { createLogger } from '../../utils/logger.js';\n\nconst log = createLogger('EmbeddedTurnForSession');\n\nexport type RunEmbeddedForSessionParams = {\n sessionKey: string;\n runId?: string;\n userMessage: AgentMessage;\n llmImages?: import('@earendil-works/pi-ai').ImageContent[];\n sessionStore: SessionStore;\n agentManager: AgentInstanceGateway;\n modelManager: ModelManager;\n thinkingOverride?: string | null;\n abortSignal?: AbortSignal;\n onEvent?: (event: EmbeddedStreamEvent) => void;\n getConfig?: () => Config | undefined;\n beforeTurn?: () => void | Promise<void>;\n afterTurn?: (userPlain: string) => void | Promise<void>;\n startupAction?: 'new' | 'reset';\n forceStartupContext?: boolean;\n applyStartupContext?: boolean;\n /** When true, dispose session MCP runtime after this turn completes. */\n cleanupBundleMcpOnRunEnd?: boolean;\n};\n\nexport async function runEmbeddedTurnForSession(\n params: RunEmbeddedForSessionParams,\n): Promise<RunXopcEmbeddedTurnResult> {\n const { sessionKey, agentManager, modelManager, sessionStore, userMessage } = params;\n const runId = params.runId ?? crypto.randomUUID();\n\n await params.beforeTurn?.();\n\n const agent = (agentManager as any).getOrCreateAgent(sessionKey) as {\n state: {\n tools: RunXopcEmbeddedTurnParams['tools'];\n systemPrompt?: string;\n thinkingLevel?: ThinkingLevel;\n };\n };\n const mm = modelManager as any;\n await mm.applyModelForSession(agent, sessionKey);\n\n const modelRef = String(mm.getModelForSession(sessionKey));\n agentManager.setModelForSession(sessionKey, modelRef);\n const model = mm.getResolvedModelForSession(sessionKey) as RunXopcEmbeddedTurnParams['model'];\n const tools = agent.state.tools;\n const systemPrompt = agent.state.systemPrompt ?? '';\n const thinkingLevel = (params.thinkingOverride as ThinkingLevel | undefined) ?? agent.state.thinkingLevel;\n const workspaceDir = agentManager.getResolvedWorkspaceForSession(sessionKey);\n const config = params.getConfig?.();\n\n // --- Pre-turn automatic compaction ---\n await maybeAutoCompactBeforeTurn({\n sessionKey,\n sessionStore,\n agentManager,\n model,\n config,\n onEvent: params.onEvent,\n });\n\n let userMessageForTurn = userMessage;\n if (params.applyStartupContext !== false) {\n userMessageForTurn = await applyStartupContextToUserMessage({\n userMessage,\n sessionKey,\n workspaceDir,\n cfg: config,\n sessionStore,\n startupAction: params.startupAction,\n force: params.forceStartupContext,\n });\n }\n\n const result = await (async () => {\n const mcpResolved = await resolveEmbeddedMcpToolsForTurn({\n sessionKey,\n workspaceDir,\n cfg: config,\n baseTools: tools,\n cleanupOnTurnEnd: params.cleanupBundleMcpOnRunEnd === true,\n });\n const turnTools = mergeTurnTools(tools, mcpResolved.tools);\n try {\n return await runXopcEmbeddedTurn({\n sessionKey,\n runId,\n userMessage: userMessageForTurn,\n images: params.llmImages,\n model,\n modelRef,\n tools: turnTools,\n systemPrompt,\n thinkingLevel,\n workspaceDir,\n sessionStore,\n timeoutMs: resolveAgentTurnTimeoutMs(config),\n abortSignal: params.abortSignal,\n onEvent: params.onEvent,\n });\n } finally {\n await mcpResolved.dispose().catch(() => {});\n }\n })();\n\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// Pre-turn automatic compaction\n// ---------------------------------------------------------------------------\n\nasync function maybeAutoCompactBeforeTurn(opts: {\n sessionKey: string;\n sessionStore: SessionStore;\n agentManager: AgentInstanceGateway;\n model: RunXopcEmbeddedTurnParams['model'];\n config: Config | undefined;\n onEvent?: (event: EmbeddedStreamEvent) => void;\n}): Promise<void> {\n const { sessionKey, sessionStore, agentManager, model, config, onEvent } = opts;\n if (config) {\n try {\n const manifest = resolveEffectiveAgentManifestForSession(config, sessionKey);\n if (manifest.memory.retention?.compaction === false) {\n return;\n }\n } catch {\n // Keep compaction enabled when manifest resolution is unavailable.\n }\n }\n\n const contextWindow = (model as { contextWindow?: number }).contextWindow ?? 128_000;\n const messages = await sessionStore.load(sessionKey);\n const prep = sessionStore.prepareCompaction(sessionKey, messages, contextWindow);\n\n if (!prep.needsCompaction) {\n return;\n }\n\n log.info(\n { sessionKey, reason: prep.stats?.reason, usagePercent: prep.stats?.usagePercent, contextWindow },\n 'Pre-turn auto-compaction triggered',\n );\n\n onEvent?.({\n type: 'compaction',\n status: 'started',\n tokensBefore: prep.stats?.usagePercent != null\n ? Math.round((prep.stats.usagePercent as number) * contextWindow)\n : undefined,\n });\n\n try {\n const result = await sessionStore.compact(sessionKey, messages, contextWindow);\n\n if (result.compacted) {\n // Evict the cached agent so the next turn reloads from the compacted transcript\n agentManager.removeAgent(sessionKey);\n\n log.info(\n { sessionKey, tokensBefore: result.tokensBefore, tokensAfter: result.tokensAfter },\n 'Pre-turn auto-compaction completed',\n );\n\n onEvent?.({\n type: 'compaction',\n status: 'completed',\n tokensBefore: result.tokensBefore,\n tokensAfter: result.tokensAfter,\n summary: result.summary.length > 200 ? `${result.summary.slice(0, 200)}…` : result.summary,\n });\n } else {\n onEvent?.({ type: 'compaction', status: 'skipped' });\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n log.warn({ err, sessionKey }, `Pre-turn auto-compaction failed: ${errorMessage}`);\n // Non-fatal: let the turn proceed even if compaction fails\n onEvent?.({ type: 'compaction', status: 'skipped' });\n }\n}\n"],"mappings":"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"}
|
|
@@ -3,10 +3,13 @@ import { normalizeProviderId, parseModelRef as parseModelRef$1 } from "../models
|
|
|
3
3
|
//#region src/agent/fallback/candidates.ts
|
|
4
4
|
init_providers();
|
|
5
5
|
function getDefaultModelParts(config) {
|
|
6
|
-
const
|
|
6
|
+
const defaultModel = getDefaultModelSync(config);
|
|
7
|
+
if (!defaultModel) return null;
|
|
8
|
+
const parts = defaultModel.split("/");
|
|
9
|
+
if (!parts[0] || !parts[1]) return null;
|
|
7
10
|
return {
|
|
8
|
-
provider: parts[0]
|
|
9
|
-
model: parts[1]
|
|
11
|
+
provider: parts[0],
|
|
12
|
+
model: parts[1]
|
|
10
13
|
};
|
|
11
14
|
}
|
|
12
15
|
/**
|
|
@@ -23,13 +26,12 @@ function parseModelRef(raw, defaultProvider) {
|
|
|
23
26
|
}
|
|
24
27
|
function resolveFallbackCandidates(params) {
|
|
25
28
|
const { cfg, provider: inputProvider, model: inputModel, fallbacksOverride } = params;
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
const fallbacks = fallbacksOverride ?? modelConfig?.fallbacks;
|
|
29
|
+
const primaryRef = getDefaultModelSync(cfg);
|
|
30
|
+
const fallbacks = fallbacksOverride;
|
|
29
31
|
const defaultParts = getDefaultModelParts(cfg);
|
|
30
32
|
const primaryResolved = parseModelRef(primaryRef || getDefaultModelSync(cfg));
|
|
31
|
-
const provider = inputProvider.trim() || primaryResolved?.provider || defaultParts
|
|
32
|
-
const model = inputModel.trim() || primaryResolved?.model || defaultParts
|
|
33
|
+
const provider = inputProvider.trim() || primaryResolved?.provider || defaultParts?.provider || "";
|
|
34
|
+
const model = inputModel.trim() || primaryResolved?.model || defaultParts?.model || "";
|
|
33
35
|
const candidates = [];
|
|
34
36
|
const seen = /* @__PURE__ */ new Set();
|
|
35
37
|
const addCandidate = (c) => {
|
|
@@ -39,7 +41,7 @@ function resolveFallbackCandidates(params) {
|
|
|
39
41
|
seen.add(key);
|
|
40
42
|
candidates.push(c);
|
|
41
43
|
};
|
|
42
|
-
addCandidate({
|
|
44
|
+
if (provider && model) addCandidate({
|
|
43
45
|
provider,
|
|
44
46
|
model
|
|
45
47
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"candidates.js","names":["parseModelRefUtil"],"sources":["../../../../src/agent/fallback/candidates.ts"],"sourcesContent":["import type { Config } from '../../config/schema.js';\nimport { isProviderConfiguredSync } from '../../providers/index.js';\nimport { getDefaultModelSync } from '../../providers/index.js';\nimport { parseModelRef as parseModelRefUtil, normalizeProviderId } from '../models/selection.js';\n\nexport interface ModelCandidate {\n provider: string;\n model: string;\n}\n\nexport interface FallbackAttempt {\n provider: string;\n model: string;\n error: string;\n reason?: string;\n status?: number;\n code?: string;\n}\n\
|
|
1
|
+
{"version":3,"file":"candidates.js","names":["parseModelRefUtil"],"sources":["../../../../src/agent/fallback/candidates.ts"],"sourcesContent":["import type { Config } from '../../config/schema.js';\nimport { isProviderConfiguredSync } from '../../providers/index.js';\nimport { getDefaultModelSync } from '../../providers/index.js';\nimport { parseModelRef as parseModelRefUtil, normalizeProviderId } from '../models/selection.js';\n\nexport interface ModelCandidate {\n provider: string;\n model: string;\n}\n\nexport interface FallbackAttempt {\n provider: string;\n model: string;\n error: string;\n reason?: string;\n status?: number;\n code?: string;\n}\n\nfunction getDefaultModelParts(config?: Config): ModelCandidate | null {\n const defaultModel = getDefaultModelSync(config);\n if (!defaultModel) return null;\n const parts = defaultModel.split('/');\n if (!parts[0] || !parts[1]) return null;\n return { provider: parts[0], model: parts[1] };\n}\n\n/**\n * Parse model reference string into provider/model parts.\n * Uses the unified implementation from selection.ts.\n */\nfunction parseModelRef(raw: string, defaultProvider?: string): ModelCandidate | null {\n const result = parseModelRefUtil(raw, defaultProvider);\n if (!result) return null;\n return {\n provider: normalizeProviderId(result.provider),\n model: result.model,\n };\n}\n\nexport function resolveFallbackCandidates(params: {\n cfg: Config | undefined;\n provider: string;\n model: string;\n fallbacksOverride?: string[];\n}): ModelCandidate[] {\n const { cfg, provider: inputProvider, model: inputModel, fallbacksOverride } = params;\n\n const primaryRef = getDefaultModelSync(cfg);\n const fallbacks = fallbacksOverride;\n\n const defaultParts = getDefaultModelParts(cfg);\n const primaryResolved = parseModelRef(primaryRef || getDefaultModelSync(cfg));\n const provider = inputProvider.trim() || primaryResolved?.provider || defaultParts?.provider || '';\n const model = inputModel.trim() || primaryResolved?.model || defaultParts?.model || '';\n\n const candidates: ModelCandidate[] = [];\n const seen = new Set<string>();\n\n const addCandidate = (c: ModelCandidate) => {\n const key = `${c.provider}/${c.model}`.toLowerCase();\n if (seen.has(key)) return;\n // Skip providers that are not configured (no API key)\n if (!isProviderConfiguredSync(c.provider)) return;\n seen.add(key);\n candidates.push(c);\n };\n\n if (provider && model) {\n addCandidate({ provider, model });\n }\n\n if (fallbacks) {\n for (const fb of fallbacks) {\n const resolved = parseModelRef(fb, provider);\n if (resolved) addCandidate(resolved);\n }\n }\n\n if (!fallbacksOverride && primaryResolved) {\n addCandidate(primaryResolved);\n }\n\n return candidates;\n}\n"],"mappings":";;;gBACoE;AAkBpE,SAAS,qBAAqB,QAAwC;CACpE,MAAM,eAAe,oBAAoB,OAAO;AAChD,KAAI,CAAC,aAAc,QAAO;CAC1B,MAAM,QAAQ,aAAa,MAAM,IAAI;AACrC,KAAI,CAAC,MAAM,MAAM,CAAC,MAAM,GAAI,QAAO;AACnC,QAAO;EAAE,UAAU,MAAM;EAAI,OAAO,MAAM;EAAI;;;;;;AAOhD,SAAS,cAAc,KAAa,iBAAiD;CACnF,MAAM,SAASA,gBAAkB,KAAK,gBAAgB;AACtD,KAAI,CAAC,OAAQ,QAAO;AACpB,QAAO;EACL,UAAU,oBAAoB,OAAO,SAAS;EAC9C,OAAO,OAAO;EACf;;AAGH,SAAgB,0BAA0B,QAKrB;CACnB,MAAM,EAAE,KAAK,UAAU,eAAe,OAAO,YAAY,sBAAsB;CAE/E,MAAM,aAAa,oBAAoB,IAAI;CAC3C,MAAM,YAAY;CAElB,MAAM,eAAe,qBAAqB,IAAI;CAC9C,MAAM,kBAAkB,cAAc,cAAc,oBAAoB,IAAI,CAAC;CAC7E,MAAM,WAAW,cAAc,MAAM,IAAI,iBAAiB,YAAY,cAAc,YAAY;CAChG,MAAM,QAAQ,WAAW,MAAM,IAAI,iBAAiB,SAAS,cAAc,SAAS;CAEpF,MAAM,aAA+B,EAAE;CACvC,MAAM,uBAAO,IAAI,KAAa;CAE9B,MAAM,gBAAgB,MAAsB;EAC1C,MAAM,MAAM,GAAG,EAAE,SAAS,GAAG,EAAE,QAAQ,aAAa;AACpD,MAAI,KAAK,IAAI,IAAI,CAAE;AAEnB,MAAI,CAAC,yBAAyB,EAAE,SAAS,CAAE;AAC3C,OAAK,IAAI,IAAI;AACb,aAAW,KAAK,EAAE;;AAGpB,KAAI,YAAY,MACd,cAAa;EAAE;EAAU;EAAO,CAAC;AAGnC,KAAI,UACF,MAAK,MAAM,MAAM,WAAW;EAC1B,MAAM,WAAW,cAAc,IAAI,SAAS;AAC5C,MAAI,SAAU,cAAa,SAAS;;AAIxC,KAAI,CAAC,qBAAqB,gBACxB,cAAa,gBAAgB;AAG/B,QAAO"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { checklistCounts } from "./checklist-types.js";
|
|
2
|
-
import { renderChecklistPlain } from "./state.js";
|
|
3
1
|
import { formatI18n } from "../../i18n/format.js";
|
|
4
2
|
import { SERVER_LOCALES, isServerLocale, normalizeServerLocale, serverLocaleOrFallback } from "../../i18n/locale.js";
|
|
3
|
+
import { checklistCounts } from "./checklist-types.js";
|
|
4
|
+
import { renderChecklistPlain } from "./state.js";
|
|
5
5
|
import { JUDGE_REASON_EN, goalsChecklistProgressSuffix, goalsContinuationChecklistTemplate, goalsContinuationPlainTemplate, goalsEvaluateCopy, goalsJudgeReason, goalsJudgeResponseLanguageNote } from "../../i18n/goals-bundle.js";
|
|
6
6
|
//#region src/agent/goals/goal-locale.ts
|
|
7
7
|
const GOAL_UI_LOCALES = SERVER_LOCALES;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { createLogger } from "../../utils/logger/index.js";
|
|
2
|
-
import { init_logger } from "../../utils/logger.js";
|
|
3
1
|
import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
|
|
4
|
-
import { resolveGoalUiLocale } from "./goal-locale.js";
|
|
5
2
|
import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
|
|
3
|
+
import { createLogger } from "../../utils/logger/index.js";
|
|
4
|
+
import { init_logger } from "../../utils/logger.js";
|
|
6
5
|
import { GoalService } from "../../goals/goal-service.js";
|
|
6
|
+
import { resolveGoalUiLocale } from "./goal-locale.js";
|
|
7
7
|
import { evaluateAfterTurnHermesLike } from "./evaluate-turn.js";
|
|
8
8
|
import "../../goals/index.js";
|
|
9
9
|
//#region src/agent/goals/post-turn.ts
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* want a single import surface.
|
|
8
8
|
*/
|
|
9
9
|
import type { Config } from '../../../config/schema.js';
|
|
10
|
+
import type { ToolModelConfig } from '../tool-model-config.js';
|
|
10
11
|
import type { AuthProfileStore } from '../../../providers/auth-runtime/index.js';
|
|
11
12
|
import type { FallbackAttempt } from '../../failover-error.js';
|
|
12
13
|
import type { GeneratedImageAsset, ImageGenerationBackground, ImageGenerationIgnoredOverride, ImageGenerationNormalization, ImageGenerationOutputFormat, ImageGenerationProvider, ImageGenerationProviderOptions, ImageGenerationQuality, ImageGenerationResolution, ImageGenerationSourceImage } from './types.js';
|
|
@@ -16,6 +17,7 @@ export interface GenerateImageParams {
|
|
|
16
17
|
prompt: string;
|
|
17
18
|
agentDir?: string;
|
|
18
19
|
authStore?: AuthProfileStore;
|
|
20
|
+
modelConfig?: ToolModelConfig;
|
|
19
21
|
modelOverride?: string;
|
|
20
22
|
count?: number;
|
|
21
23
|
size?: string;
|
|
@@ -21,7 +21,7 @@ async function generateImage(params, deps = {}) {
|
|
|
21
21
|
const getProvider = (id, cfg) => (deps.getProvider ?? getImageGenerationProvider)(id, cfg);
|
|
22
22
|
const candidates = resolveCapabilityModelCandidates({
|
|
23
23
|
cfg: params.cfg,
|
|
24
|
-
modelConfig: params.
|
|
24
|
+
modelConfig: params.modelConfig,
|
|
25
25
|
modelOverride: params.modelOverride,
|
|
26
26
|
parseModelRef: parseImageGenerationModelRef,
|
|
27
27
|
agentDir: params.agentDir,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","names":["listProvidersSummaryFromRegistry"],"sources":["../../../../../src/agent/image/generation/runtime.ts"],"sourcesContent":["import type { Config } from '../../../config/schema.js';\nimport { PROVIDER_ENV_MAP } from '../../../providers/env-keys.js';\nimport { createLogger } from '../../../utils/logger.js';\nimport {\n buildMediaGenerationNormalizationMetadata,\n buildNoCapabilityModelConfiguredMessage,\n recordCapabilityCandidateFailure,\n resolveCapabilityModelCandidates,\n throwCapabilityGenerationFailure,\n type CapabilityProviderCandidate,\n} from '../../media-generation/index.js';\nimport { describeFailoverError, isFailoverError, type FallbackAttempt } from '../../failover-error.js';\nimport { parseImageGenerationModelRef } from './model-ref.js';\nimport { resolveImageGenerationOverrides } from './normalization.js';\nimport {\n getImageGenerationProvider,\n listImageGenerationProviders,\n listImageGenerationProvidersSummary as listProvidersSummaryFromRegistry,\n type ImageGenerationProvider,\n type ImageGenerationProviderSummary,\n} from './provider-registry.js';\nimport type {\n ImageGenerationProviderCapabilities,\n ImageGenerationRequest,\n ImageGenerationSourceImage,\n} from './types.js';\n\n// Side-effect: registers every bundled image-generation provider listed in\n// src/generated/bundled-image-generation-providers.ts (regenerated via\n// `pnpm run generate:bundled-image-providers`). Vendor implementations live\n// under extensions/<vendor>/src/image-generation-provider.ts.\nimport './bundled.js';\n\nexport type {\n GenerateImageParams,\n GenerateImageRuntimeResult,\n ImageGenerationRuntimeDeps,\n} from './runtime-types.js';\n\nimport type {\n GenerateImageParams,\n GenerateImageRuntimeResult,\n ImageGenerationRuntimeDeps,\n} from './runtime-types.js';\n\nconst log = createLogger('ImageGen');\n\n/**\n * Generate one or more images, walking the candidate model list with\n * structured failover. See {@link GenerateImageParams} / {@link GenerateImageRuntimeResult}.\n */\nexport async function generateImage(\n params: GenerateImageParams,\n deps: ImageGenerationRuntimeDeps = {},\n): Promise<GenerateImageRuntimeResult> {\n const listProviders = (cfg?: Config) =>\n (deps.listProviders ?? listImageGenerationProviders)(cfg);\n const getProvider = (id: string, cfg?: Config) =>\n (deps.getProvider ?? getImageGenerationProvider)(id, cfg);\n\n const candidates = resolveCapabilityModelCandidates({\n cfg: params.cfg,\n modelConfig: params.cfg?.agents?.defaults?.imageGenerationModel,\n modelOverride: params.modelOverride,\n parseModelRef: parseImageGenerationModelRef,\n agentDir: params.agentDir,\n listProviders: (cfg) => listProviders(cfg).map(toCapabilityCandidate),\n autoProviderFallback: params.autoProviderFallback,\n });\n\n if (candidates.length === 0) {\n throw new Error(buildNoImageGenerationModelConfiguredMessage(params.cfg, deps));\n }\n\n const attempts: FallbackAttempt[] = [];\n let lastError: unknown;\n\n for (const candidate of candidates) {\n const startedAt = Date.now();\n const provider = getProvider(candidate.provider, params.cfg);\n if (!provider) {\n const errorMessage = `Image generation provider not registered: ${candidate.provider}`;\n attempts.push({\n provider: candidate.provider,\n model: candidate.model,\n error: errorMessage,\n reason: 'config',\n });\n lastError = new Error(errorMessage);\n log.warn(\n { provider: candidate.provider, model: candidate.model, phase: 'candidate_skipped' },\n `image-generation candidate skipped: ${errorMessage}`,\n );\n continue;\n }\n\n try {\n const sanitized = resolveImageGenerationOverrides({\n provider,\n size: params.size,\n aspectRatio: params.aspectRatio,\n resolution: params.resolution,\n quality: params.quality,\n outputFormat: params.outputFormat,\n background: params.background,\n inputImages: params.inputImages,\n });\n\n const request = buildProviderRequest({\n provider,\n candidate,\n params,\n sanitized,\n });\n\n log.debug(\n {\n provider: candidate.provider,\n model: candidate.model,\n phase: 'provider_invoked',\n normalizationCount: sanitized.normalization\n ? Object.keys(sanitized.normalization).length\n : 0,\n ignoredCount: sanitized.ignoredOverrides.length,\n },\n `image-generation provider invoked: ${candidate.provider}/${candidate.model}`,\n );\n\n const result = await provider.generateImage(request);\n if (!result.images?.length) {\n throw new Error('Image generation provider returned no images.');\n }\n\n const normalizationMetadata = buildMediaGenerationNormalizationMetadata({\n normalization: sanitized.normalization as Record<string, unknown> | undefined,\n });\n\n return {\n images: result.images,\n provider: candidate.provider,\n model: result.model ?? candidate.model,\n attempts,\n ...(sanitized.normalization ? { normalization: sanitized.normalization } : {}),\n ignoredOverrides: sanitized.ignoredOverrides,\n metadata: { ...(result.metadata ?? {}), ...normalizationMetadata },\n };\n } catch (err) {\n lastError = err;\n const durationMs = Date.now() - startedAt;\n recordCapabilityCandidateFailure({\n attempts,\n provider: candidate.provider,\n model: candidate.model,\n error: err,\n durationMs,\n });\n const last = attempts[attempts.length - 1];\n const description = isFailoverError(err) ? describeFailoverError(err) : undefined;\n log.warn(\n {\n err,\n provider: candidate.provider,\n model: candidate.model,\n status: last?.status,\n reason: last?.reason,\n durationMs,\n phase: 'candidate_failed',\n attemptCount: attempts.length,\n },\n `image-generation candidate failed: ${candidate.provider}/${candidate.model}: ${\n description ?? last?.error ?? (err instanceof Error ? err.message : String(err))\n }`,\n );\n }\n }\n\n return throwCapabilityGenerationFailure({\n capabilityLabel: 'image generation',\n attempts,\n lastError,\n });\n}\n\nexport function listImageGenerationProvidersSummary(\n cfg?: Config,\n): ImageGenerationProviderSummary[] {\n return listProvidersSummaryFromRegistry(cfg);\n}\n\n// ============================================\n// Helpers\n// ============================================\n\nfunction buildProviderRequest(input: {\n provider: ImageGenerationProvider;\n candidate: { provider: string; model: string };\n params: GenerateImageParams;\n sanitized: ReturnType<typeof resolveImageGenerationOverrides>;\n}): ImageGenerationRequest {\n const { provider, candidate, params, sanitized } = input;\n const inputImages = params.inputImages\n ? cloneInputImages(params.inputImages)\n : undefined;\n return {\n provider: provider.id,\n model: candidate.model,\n prompt: params.prompt,\n ...(params.cfg ? { cfg: params.cfg } : {}),\n ...(params.agentDir ? { agentDir: params.agentDir } : {}),\n ...(params.authStore ? { authStore: params.authStore } : {}),\n ...(typeof params.timeoutMs === 'number' ? { timeoutMs: params.timeoutMs } : {}),\n ...(params.signal ? { signal: params.signal } : {}),\n ...(typeof params.count === 'number' ? { count: params.count } : {}),\n ...(sanitized.size !== undefined ? { size: sanitized.size } : {}),\n ...(sanitized.aspectRatio !== undefined ? { aspectRatio: sanitized.aspectRatio } : {}),\n ...(sanitized.resolution !== undefined ? { resolution: sanitized.resolution } : {}),\n ...(sanitized.quality !== undefined ? { quality: sanitized.quality } : {}),\n ...(sanitized.outputFormat !== undefined ? { outputFormat: sanitized.outputFormat } : {}),\n ...(sanitized.background !== undefined ? { background: sanitized.background } : {}),\n ...(inputImages ? { inputImages } : {}),\n ...(params.providerOptions ? { providerOptions: params.providerOptions } : {}),\n };\n}\n\nfunction cloneInputImages(images: ImageGenerationSourceImage[]): ImageGenerationSourceImage[] {\n return images.map((img) => ({\n buffer: img.buffer,\n mimeType: img.mimeType,\n ...(img.fileName ? { fileName: img.fileName } : {}),\n ...(img.metadata ? { metadata: img.metadata } : {}),\n }));\n}\n\nfunction toCapabilityCandidate(provider: ImageGenerationProvider): CapabilityProviderCandidate {\n return {\n id: provider.id,\n ...(provider.aliases ? { aliases: provider.aliases } : {}),\n defaultModel: provider.defaultModel ?? null,\n models: provider.models ?? [],\n isConfigured: provider.isConfigured,\n };\n}\n\nfunction buildNoImageGenerationModelConfiguredMessage(\n cfg: Config | undefined,\n deps: ImageGenerationRuntimeDeps,\n): string {\n const list = (deps.listProviders ?? listImageGenerationProviders)(cfg);\n return buildNoCapabilityModelConfiguredMessage({\n capabilityLabel: 'image-generation',\n modelConfigKey: 'imageGenerationModel',\n providers: list.map(toCapabilityCandidate),\n getProviderEnvVars: deps.getProviderEnvVars ?? ((id) => PROVIDER_ENV_MAP[id]),\n });\n}\n\n// Re-export the canonical capability type for callers consuming this barrel.\nexport type { ImageGenerationProviderCapabilities };\n// Re-export the provider-registry surface that gateway routes / CLI consume\n// through this single barrel module. NOTE: `listImageGenerationProvidersSummary`\n// is implemented locally above (it overlays cfg-aware `configured` flags), so\n// it must not be re-exported from the registry to avoid a name clash.\nexport {\n getImageGenerationProvider,\n listImageGenerationProviders,\n} from './provider-registry.js';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.js","names":["listProvidersSummaryFromRegistry"],"sources":["../../../../../src/agent/image/generation/runtime.ts"],"sourcesContent":["import type { Config } from '../../../config/schema.js';\nimport { PROVIDER_ENV_MAP } from '../../../providers/env-keys.js';\nimport { createLogger } from '../../../utils/logger.js';\nimport {\n buildMediaGenerationNormalizationMetadata,\n buildNoCapabilityModelConfiguredMessage,\n recordCapabilityCandidateFailure,\n resolveCapabilityModelCandidates,\n throwCapabilityGenerationFailure,\n type CapabilityProviderCandidate,\n} from '../../media-generation/index.js';\nimport { describeFailoverError, isFailoverError, type FallbackAttempt } from '../../failover-error.js';\nimport { parseImageGenerationModelRef } from './model-ref.js';\nimport { resolveImageGenerationOverrides } from './normalization.js';\nimport {\n getImageGenerationProvider,\n listImageGenerationProviders,\n listImageGenerationProvidersSummary as listProvidersSummaryFromRegistry,\n type ImageGenerationProvider,\n type ImageGenerationProviderSummary,\n} from './provider-registry.js';\nimport type {\n ImageGenerationProviderCapabilities,\n ImageGenerationRequest,\n ImageGenerationSourceImage,\n} from './types.js';\n\n// Side-effect: registers every bundled image-generation provider listed in\n// src/generated/bundled-image-generation-providers.ts (regenerated via\n// `pnpm run generate:bundled-image-providers`). Vendor implementations live\n// under extensions/<vendor>/src/image-generation-provider.ts.\nimport './bundled.js';\n\nexport type {\n GenerateImageParams,\n GenerateImageRuntimeResult,\n ImageGenerationRuntimeDeps,\n} from './runtime-types.js';\n\nimport type {\n GenerateImageParams,\n GenerateImageRuntimeResult,\n ImageGenerationRuntimeDeps,\n} from './runtime-types.js';\n\nconst log = createLogger('ImageGen');\n\n/**\n * Generate one or more images, walking the candidate model list with\n * structured failover. See {@link GenerateImageParams} / {@link GenerateImageRuntimeResult}.\n */\nexport async function generateImage(\n params: GenerateImageParams,\n deps: ImageGenerationRuntimeDeps = {},\n): Promise<GenerateImageRuntimeResult> {\n const listProviders = (cfg?: Config) =>\n (deps.listProviders ?? listImageGenerationProviders)(cfg);\n const getProvider = (id: string, cfg?: Config) =>\n (deps.getProvider ?? getImageGenerationProvider)(id, cfg);\n\n const candidates = resolveCapabilityModelCandidates({\n cfg: params.cfg,\n modelConfig: params.modelConfig,\n modelOverride: params.modelOverride,\n parseModelRef: parseImageGenerationModelRef,\n agentDir: params.agentDir,\n listProviders: (cfg) => listProviders(cfg).map(toCapabilityCandidate),\n autoProviderFallback: params.autoProviderFallback,\n });\n\n if (candidates.length === 0) {\n throw new Error(buildNoImageGenerationModelConfiguredMessage(params.cfg, deps));\n }\n\n const attempts: FallbackAttempt[] = [];\n let lastError: unknown;\n\n for (const candidate of candidates) {\n const startedAt = Date.now();\n const provider = getProvider(candidate.provider, params.cfg);\n if (!provider) {\n const errorMessage = `Image generation provider not registered: ${candidate.provider}`;\n attempts.push({\n provider: candidate.provider,\n model: candidate.model,\n error: errorMessage,\n reason: 'config',\n });\n lastError = new Error(errorMessage);\n log.warn(\n { provider: candidate.provider, model: candidate.model, phase: 'candidate_skipped' },\n `image-generation candidate skipped: ${errorMessage}`,\n );\n continue;\n }\n\n try {\n const sanitized = resolveImageGenerationOverrides({\n provider,\n size: params.size,\n aspectRatio: params.aspectRatio,\n resolution: params.resolution,\n quality: params.quality,\n outputFormat: params.outputFormat,\n background: params.background,\n inputImages: params.inputImages,\n });\n\n const request = buildProviderRequest({\n provider,\n candidate,\n params,\n sanitized,\n });\n\n log.debug(\n {\n provider: candidate.provider,\n model: candidate.model,\n phase: 'provider_invoked',\n normalizationCount: sanitized.normalization\n ? Object.keys(sanitized.normalization).length\n : 0,\n ignoredCount: sanitized.ignoredOverrides.length,\n },\n `image-generation provider invoked: ${candidate.provider}/${candidate.model}`,\n );\n\n const result = await provider.generateImage(request);\n if (!result.images?.length) {\n throw new Error('Image generation provider returned no images.');\n }\n\n const normalizationMetadata = buildMediaGenerationNormalizationMetadata({\n normalization: sanitized.normalization as Record<string, unknown> | undefined,\n });\n\n return {\n images: result.images,\n provider: candidate.provider,\n model: result.model ?? candidate.model,\n attempts,\n ...(sanitized.normalization ? { normalization: sanitized.normalization } : {}),\n ignoredOverrides: sanitized.ignoredOverrides,\n metadata: { ...(result.metadata ?? {}), ...normalizationMetadata },\n };\n } catch (err) {\n lastError = err;\n const durationMs = Date.now() - startedAt;\n recordCapabilityCandidateFailure({\n attempts,\n provider: candidate.provider,\n model: candidate.model,\n error: err,\n durationMs,\n });\n const last = attempts[attempts.length - 1];\n const description = isFailoverError(err) ? describeFailoverError(err) : undefined;\n log.warn(\n {\n err,\n provider: candidate.provider,\n model: candidate.model,\n status: last?.status,\n reason: last?.reason,\n durationMs,\n phase: 'candidate_failed',\n attemptCount: attempts.length,\n },\n `image-generation candidate failed: ${candidate.provider}/${candidate.model}: ${\n description ?? last?.error ?? (err instanceof Error ? err.message : String(err))\n }`,\n );\n }\n }\n\n return throwCapabilityGenerationFailure({\n capabilityLabel: 'image generation',\n attempts,\n lastError,\n });\n}\n\nexport function listImageGenerationProvidersSummary(\n cfg?: Config,\n): ImageGenerationProviderSummary[] {\n return listProvidersSummaryFromRegistry(cfg);\n}\n\n// ============================================\n// Helpers\n// ============================================\n\nfunction buildProviderRequest(input: {\n provider: ImageGenerationProvider;\n candidate: { provider: string; model: string };\n params: GenerateImageParams;\n sanitized: ReturnType<typeof resolveImageGenerationOverrides>;\n}): ImageGenerationRequest {\n const { provider, candidate, params, sanitized } = input;\n const inputImages = params.inputImages\n ? cloneInputImages(params.inputImages)\n : undefined;\n return {\n provider: provider.id,\n model: candidate.model,\n prompt: params.prompt,\n ...(params.cfg ? { cfg: params.cfg } : {}),\n ...(params.agentDir ? { agentDir: params.agentDir } : {}),\n ...(params.authStore ? { authStore: params.authStore } : {}),\n ...(typeof params.timeoutMs === 'number' ? { timeoutMs: params.timeoutMs } : {}),\n ...(params.signal ? { signal: params.signal } : {}),\n ...(typeof params.count === 'number' ? { count: params.count } : {}),\n ...(sanitized.size !== undefined ? { size: sanitized.size } : {}),\n ...(sanitized.aspectRatio !== undefined ? { aspectRatio: sanitized.aspectRatio } : {}),\n ...(sanitized.resolution !== undefined ? { resolution: sanitized.resolution } : {}),\n ...(sanitized.quality !== undefined ? { quality: sanitized.quality } : {}),\n ...(sanitized.outputFormat !== undefined ? { outputFormat: sanitized.outputFormat } : {}),\n ...(sanitized.background !== undefined ? { background: sanitized.background } : {}),\n ...(inputImages ? { inputImages } : {}),\n ...(params.providerOptions ? { providerOptions: params.providerOptions } : {}),\n };\n}\n\nfunction cloneInputImages(images: ImageGenerationSourceImage[]): ImageGenerationSourceImage[] {\n return images.map((img) => ({\n buffer: img.buffer,\n mimeType: img.mimeType,\n ...(img.fileName ? { fileName: img.fileName } : {}),\n ...(img.metadata ? { metadata: img.metadata } : {}),\n }));\n}\n\nfunction toCapabilityCandidate(provider: ImageGenerationProvider): CapabilityProviderCandidate {\n return {\n id: provider.id,\n ...(provider.aliases ? { aliases: provider.aliases } : {}),\n defaultModel: provider.defaultModel ?? null,\n models: provider.models ?? [],\n isConfigured: provider.isConfigured,\n };\n}\n\nfunction buildNoImageGenerationModelConfiguredMessage(\n cfg: Config | undefined,\n deps: ImageGenerationRuntimeDeps,\n): string {\n const list = (deps.listProviders ?? listImageGenerationProviders)(cfg);\n return buildNoCapabilityModelConfiguredMessage({\n capabilityLabel: 'image-generation',\n modelConfigKey: 'imageGenerationModel',\n providers: list.map(toCapabilityCandidate),\n getProviderEnvVars: deps.getProviderEnvVars ?? ((id) => PROVIDER_ENV_MAP[id]),\n });\n}\n\n// Re-export the canonical capability type for callers consuming this barrel.\nexport type { ImageGenerationProviderCapabilities };\n// Re-export the provider-registry surface that gateway routes / CLI consume\n// through this single barrel module. NOTE: `listImageGenerationProvidersSummary`\n// is implemented locally above (it overlays cfg-aware `configured` flags), so\n// it must not be re-exported from the registry to avoid a name clash.\nexport {\n getImageGenerationProvider,\n listImageGenerationProviders,\n} from './provider-registry.js';\n"],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ export declare function coerceImageAssistantText(params: {
|
|
|
14
14
|
provider: string;
|
|
15
15
|
model: string;
|
|
16
16
|
}): string;
|
|
17
|
-
export declare function coerceImageModelConfig(
|
|
17
|
+
export declare function coerceImageModelConfig(_cfg?: Config): ImageModelConfig;
|
|
18
18
|
export declare function applyImageGenerationModelConfigDefaults(cfg: Config | undefined, imageGenerationModelConfig: ToolModelConfig): Config | undefined;
|
|
19
19
|
export declare function resolvePromptAndModelOverride(args: Record<string, unknown>, defaultPrompt: string): {
|
|
20
20
|
prompt: string;
|
|
@@ -25,26 +25,13 @@ function coerceImageAssistantText(params) {
|
|
|
25
25
|
if (text.trim()) return text.trim();
|
|
26
26
|
throw new Error(`Image model returned no text (${params.provider}/${params.model}).`);
|
|
27
27
|
}
|
|
28
|
-
function coerceImageModelConfig(
|
|
29
|
-
return coerceToolModelConfig(
|
|
28
|
+
function coerceImageModelConfig(_cfg) {
|
|
29
|
+
return coerceToolModelConfig(void 0);
|
|
30
30
|
}
|
|
31
31
|
function applyImageGenerationModelConfigDefaults(cfg, imageGenerationModelConfig) {
|
|
32
32
|
if (!cfg) return;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
return {
|
|
36
|
-
...cfg,
|
|
37
|
-
agents: {
|
|
38
|
-
...cfg.agents,
|
|
39
|
-
defaults: {
|
|
40
|
-
...cfg.agents?.defaults,
|
|
41
|
-
imageGenerationModel: {
|
|
42
|
-
primary,
|
|
43
|
-
...imageGenerationModelConfig.fallbacks?.length ? { fallbacks: imageGenerationModelConfig.fallbacks } : {}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
};
|
|
33
|
+
if (!imageGenerationModelConfig.primary?.trim()) return cfg;
|
|
34
|
+
return cfg;
|
|
48
35
|
}
|
|
49
36
|
function resolvePromptAndModelOverride(args, defaultPrompt) {
|
|
50
37
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-helpers.js","names":[],"sources":["../../../../src/agent/image/image-helpers.ts"],"sourcesContent":["import type { AgentToolResult } from '@earendil-works/pi-agent-core';\nimport type { AssistantMessage } from '@earendil-works/pi-ai';\nimport type { Config } from '../../config/schema.js';\nimport { extractTextContent } from '../context/workspace.js';\nimport type { ImageAttempt } from './image-model-fallback.js';\nimport { coerceToolModelConfig, type ToolModelConfig } from './tool-model-config.js';\n\nexport type ImageModelConfig = ToolModelConfig;\n\nexport function decodeDataUrl(dataUrl: string): {\n buffer: Buffer;\n mimeType: string;\n kind: 'image';\n} {\n const trimmed = dataUrl.trim();\n const match = /^data:([^;,]+);base64,([a-z0-9+/=\\r\\n]+)$/i.exec(trimmed);\n if (!match) {\n throw new Error('Invalid data URL (expected base64 data: URL).');\n }\n const mimeType = (match[1] ?? '').trim().toLowerCase();\n if (!mimeType.startsWith('image/')) {\n throw new Error(`Unsupported data URL type: ${mimeType || 'unknown'}`);\n }\n const b64 = (match[2] ?? '').trim();\n const buffer = Buffer.from(b64, 'base64');\n if (buffer.length === 0) {\n throw new Error('Invalid data URL: empty payload.');\n }\n return { buffer, mimeType, kind: 'image' };\n}\n\nexport function coerceImageAssistantText(params: {\n message: AssistantMessage;\n provider: string;\n model: string;\n}): string {\n const stop = params.message.stopReason;\n const errorMessage = params.message.errorMessage?.trim();\n if (stop === 'error' || stop === 'aborted') {\n throw new Error(\n errorMessage\n ? `Image model failed (${params.provider}/${params.model}): ${errorMessage}`\n : `Image model failed (${params.provider}/${params.model})`,\n );\n }\n if (errorMessage) {\n throw new Error(`Image model failed (${params.provider}/${params.model}): ${errorMessage}`);\n }\n const text = extractTextContent(\n params.message.content as Array<{ type: string; text?: string }>,\n );\n if (text.trim()) {\n return text.trim();\n }\n throw new Error(`Image model returned no text (${params.provider}/${params.model}).`);\n}\n\nexport function coerceImageModelConfig(
|
|
1
|
+
{"version":3,"file":"image-helpers.js","names":[],"sources":["../../../../src/agent/image/image-helpers.ts"],"sourcesContent":["import type { AgentToolResult } from '@earendil-works/pi-agent-core';\nimport type { AssistantMessage } from '@earendil-works/pi-ai';\nimport type { Config } from '../../config/schema.js';\nimport { extractTextContent } from '../context/workspace.js';\nimport type { ImageAttempt } from './image-model-fallback.js';\nimport { coerceToolModelConfig, type ToolModelConfig } from './tool-model-config.js';\n\nexport type ImageModelConfig = ToolModelConfig;\n\nexport function decodeDataUrl(dataUrl: string): {\n buffer: Buffer;\n mimeType: string;\n kind: 'image';\n} {\n const trimmed = dataUrl.trim();\n const match = /^data:([^;,]+);base64,([a-z0-9+/=\\r\\n]+)$/i.exec(trimmed);\n if (!match) {\n throw new Error('Invalid data URL (expected base64 data: URL).');\n }\n const mimeType = (match[1] ?? '').trim().toLowerCase();\n if (!mimeType.startsWith('image/')) {\n throw new Error(`Unsupported data URL type: ${mimeType || 'unknown'}`);\n }\n const b64 = (match[2] ?? '').trim();\n const buffer = Buffer.from(b64, 'base64');\n if (buffer.length === 0) {\n throw new Error('Invalid data URL: empty payload.');\n }\n return { buffer, mimeType, kind: 'image' };\n}\n\nexport function coerceImageAssistantText(params: {\n message: AssistantMessage;\n provider: string;\n model: string;\n}): string {\n const stop = params.message.stopReason;\n const errorMessage = params.message.errorMessage?.trim();\n if (stop === 'error' || stop === 'aborted') {\n throw new Error(\n errorMessage\n ? `Image model failed (${params.provider}/${params.model}): ${errorMessage}`\n : `Image model failed (${params.provider}/${params.model})`,\n );\n }\n if (errorMessage) {\n throw new Error(`Image model failed (${params.provider}/${params.model}): ${errorMessage}`);\n }\n const text = extractTextContent(\n params.message.content as Array<{ type: string; text?: string }>,\n );\n if (text.trim()) {\n return text.trim();\n }\n throw new Error(`Image model returned no text (${params.provider}/${params.model}).`);\n}\n\nexport function coerceImageModelConfig(_cfg?: Config): ImageModelConfig {\n return coerceToolModelConfig(undefined);\n}\n\nexport function applyImageGenerationModelConfigDefaults(\n cfg: Config | undefined,\n imageGenerationModelConfig: ToolModelConfig,\n): Config | undefined {\n if (!cfg) {\n return undefined;\n }\n const primary = imageGenerationModelConfig.primary?.trim();\n if (!primary) {\n return cfg;\n }\n return cfg;\n}\n\nexport function resolvePromptAndModelOverride(\n args: Record<string, unknown>,\n defaultPrompt: string,\n): {\n prompt: string;\n modelOverride?: string;\n} {\n const prompt =\n typeof args.prompt === 'string' && args.prompt.trim() ? args.prompt.trim() : defaultPrompt;\n const modelOverride =\n typeof args.model === 'string' && args.model.trim() ? args.model.trim() : undefined;\n return { prompt, modelOverride };\n}\n\nexport function buildImageToolTextResult(\n result: { text: string; provider: string; model: string; attempts: ImageAttempt[] },\n extraDetails: Record<string, unknown>,\n): AgentToolResult<Record<string, unknown>> {\n return {\n content: [{ type: 'text', text: result.text }],\n details: {\n model: `${result.provider}/${result.model}`,\n ...extraDetails,\n attempts: result.attempts,\n },\n };\n}\n"],"mappings":";;;AASA,SAAgB,cAAc,SAI5B;CACA,MAAM,UAAU,QAAQ,MAAM;CAC9B,MAAM,QAAQ,6CAA6C,KAAK,QAAQ;AACxE,KAAI,CAAC,MACH,OAAM,IAAI,MAAM,gDAAgD;CAElE,MAAM,YAAY,MAAM,MAAM,IAAI,MAAM,CAAC,aAAa;AACtD,KAAI,CAAC,SAAS,WAAW,SAAS,CAChC,OAAM,IAAI,MAAM,8BAA8B,YAAY,YAAY;CAExE,MAAM,OAAO,MAAM,MAAM,IAAI,MAAM;CACnC,MAAM,SAAS,OAAO,KAAK,KAAK,SAAS;AACzC,KAAI,OAAO,WAAW,EACpB,OAAM,IAAI,MAAM,mCAAmC;AAErD,QAAO;EAAE;EAAQ;EAAU,MAAM;EAAS;;AAG5C,SAAgB,yBAAyB,QAI9B;CACT,MAAM,OAAO,OAAO,QAAQ;CAC5B,MAAM,eAAe,OAAO,QAAQ,cAAc,MAAM;AACxD,KAAI,SAAS,WAAW,SAAS,UAC/B,OAAM,IAAI,MACR,eACI,uBAAuB,OAAO,SAAS,GAAG,OAAO,MAAM,KAAK,iBAC5D,uBAAuB,OAAO,SAAS,GAAG,OAAO,MAAM,GAC5D;AAEH,KAAI,aACF,OAAM,IAAI,MAAM,uBAAuB,OAAO,SAAS,GAAG,OAAO,MAAM,KAAK,eAAe;CAE7F,MAAM,OAAO,mBACX,OAAO,QAAQ,QAChB;AACD,KAAI,KAAK,MAAM,CACb,QAAO,KAAK,MAAM;AAEpB,OAAM,IAAI,MAAM,iCAAiC,OAAO,SAAS,GAAG,OAAO,MAAM,IAAI;;AAGvF,SAAgB,uBAAuB,MAAiC;AACtE,QAAO,sBAAsB,KAAA,EAAU;;AAGzC,SAAgB,wCACd,KACA,4BACoB;AACpB,KAAI,CAAC,IACH;AAGF,KAAI,CADY,2BAA2B,SAAS,MAAM,CAExD,QAAO;AAET,QAAO;;AAGT,SAAgB,8BACd,MACA,eAIA;AAKA,QAAO;EAAE,QAHP,OAAO,KAAK,WAAW,YAAY,KAAK,OAAO,MAAM,GAAG,KAAK,OAAO,MAAM,GAAG;EAG9D,eADf,OAAO,KAAK,UAAU,YAAY,KAAK,MAAM,MAAM,GAAG,KAAK,MAAM,MAAM,GAAG,KAAA;EAC5C;;AAGlC,SAAgB,yBACd,QACA,cAC0C;AAC1C,QAAO;EACL,SAAS,CAAC;GAAE,MAAM;GAAQ,MAAM,OAAO;GAAM,CAAC;EAC9C,SAAS;GACP,OAAO,GAAG,OAAO,SAAS,GAAG,OAAO;GACpC,GAAG;GACH,UAAU,OAAO;GAClB;EACF"}
|
|
@@ -21,7 +21,7 @@ async function runWithImageModelFallback(params) {
|
|
|
21
21
|
toolConfig: params.toolConfig,
|
|
22
22
|
modelOverride: params.modelOverride
|
|
23
23
|
});
|
|
24
|
-
if (refs.length === 0) throw new Error("No image model
|
|
24
|
+
if (refs.length === 0) throw new Error("No image-capable model is available.");
|
|
25
25
|
const attempts = [];
|
|
26
26
|
let lastErr;
|
|
27
27
|
for (const modelRef of refs) try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-model-fallback.js","names":[],"sources":["../../../../src/agent/image/image-model-fallback.ts"],"sourcesContent":["import type { ToolModelConfig } from './tool-model-config.js';\n\nexport type ImageAttempt = { provider: string; model: string; error: string };\n\nfunction collectModelRefs(params: {\n toolConfig: ToolModelConfig;\n modelOverride?: string;\n}): string[] {\n const refs: string[] = [];\n const add = (raw: string | undefined) => {\n const t = raw?.trim();\n if (t?.includes('/')) {\n refs.push(t);\n }\n };\n add(params.modelOverride);\n add(params.toolConfig.primary);\n for (const f of params.toolConfig.fallbacks ?? []) {\n add(f);\n }\n const seen = new Set<string>();\n const out: string[] = [];\n for (const r of refs) {\n if (!seen.has(r)) {\n seen.add(r);\n out.push(r);\n }\n }\n return out;\n}\n\nexport async function runWithImageModelFallback<T>(params: {\n toolConfig: ToolModelConfig;\n modelOverride?: string;\n run: (modelRef: string) => Promise<T>;\n}): Promise<{ result: T; attempts: ImageAttempt[] }> {\n const refs = collectModelRefs({\n toolConfig: params.toolConfig,\n modelOverride: params.modelOverride,\n });\n if (refs.length === 0) {\n throw new Error(\n 'No image model
|
|
1
|
+
{"version":3,"file":"image-model-fallback.js","names":[],"sources":["../../../../src/agent/image/image-model-fallback.ts"],"sourcesContent":["import type { ToolModelConfig } from './tool-model-config.js';\n\nexport type ImageAttempt = { provider: string; model: string; error: string };\n\nfunction collectModelRefs(params: {\n toolConfig: ToolModelConfig;\n modelOverride?: string;\n}): string[] {\n const refs: string[] = [];\n const add = (raw: string | undefined) => {\n const t = raw?.trim();\n if (t?.includes('/')) {\n refs.push(t);\n }\n };\n add(params.modelOverride);\n add(params.toolConfig.primary);\n for (const f of params.toolConfig.fallbacks ?? []) {\n add(f);\n }\n const seen = new Set<string>();\n const out: string[] = [];\n for (const r of refs) {\n if (!seen.has(r)) {\n seen.add(r);\n out.push(r);\n }\n }\n return out;\n}\n\nexport async function runWithImageModelFallback<T>(params: {\n toolConfig: ToolModelConfig;\n modelOverride?: string;\n run: (modelRef: string) => Promise<T>;\n}): Promise<{ result: T; attempts: ImageAttempt[] }> {\n const refs = collectModelRefs({\n toolConfig: params.toolConfig,\n modelOverride: params.modelOverride,\n });\n if (refs.length === 0) {\n throw new Error(\n 'No image-capable model is available.',\n );\n }\n\n const attempts: ImageAttempt[] = [];\n let lastErr: unknown;\n\n for (const modelRef of refs) {\n try {\n const result = await params.run(modelRef);\n return { result, attempts };\n } catch (err) {\n lastErr = err;\n const msg = err instanceof Error ? err.message : String(err);\n const slash = modelRef.indexOf('/');\n attempts.push({\n provider: slash > 0 ? modelRef.slice(0, slash) : modelRef,\n model: slash > 0 ? modelRef.slice(slash + 1) : '',\n error: msg,\n });\n }\n }\n\n const summary = attempts.map((a) => `${a.provider}/${a.model}: ${a.error}`).join(' | ');\n throw new Error(\n `All image models failed (${attempts.length}): ${summary || (lastErr instanceof Error ? lastErr.message : String(lastErr))}`,\n );\n}\n"],"mappings":";AAIA,SAAS,iBAAiB,QAGb;CACX,MAAM,OAAiB,EAAE;CACzB,MAAM,OAAO,QAA4B;EACvC,MAAM,IAAI,KAAK,MAAM;AACrB,MAAI,GAAG,SAAS,IAAI,CAClB,MAAK,KAAK,EAAE;;AAGhB,KAAI,OAAO,cAAc;AACzB,KAAI,OAAO,WAAW,QAAQ;AAC9B,MAAK,MAAM,KAAK,OAAO,WAAW,aAAa,EAAE,CAC/C,KAAI,EAAE;CAER,MAAM,uBAAO,IAAI,KAAa;CAC9B,MAAM,MAAgB,EAAE;AACxB,MAAK,MAAM,KAAK,KACd,KAAI,CAAC,KAAK,IAAI,EAAE,EAAE;AAChB,OAAK,IAAI,EAAE;AACX,MAAI,KAAK,EAAE;;AAGf,QAAO;;AAGT,eAAsB,0BAA6B,QAIE;CACnD,MAAM,OAAO,iBAAiB;EAC5B,YAAY,OAAO;EACnB,eAAe,OAAO;EACvB,CAAC;AACF,KAAI,KAAK,WAAW,EAClB,OAAM,IAAI,MACR,uCACD;CAGH,MAAM,WAA2B,EAAE;CACnC,IAAI;AAEJ,MAAK,MAAM,YAAY,KACrB,KAAI;AAEF,SAAO;GAAE,QAAA,MADY,OAAO,IAAI,SAAS;GACxB;GAAU;UACpB,KAAK;AACZ,YAAU;EACV,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;EAC5D,MAAM,QAAQ,SAAS,QAAQ,IAAI;AACnC,WAAS,KAAK;GACZ,UAAU,QAAQ,IAAI,SAAS,MAAM,GAAG,MAAM,GAAG;GACjD,OAAO,QAAQ,IAAI,SAAS,MAAM,QAAQ,EAAE,GAAG;GAC/C,OAAO;GACR,CAAC;;CAIN,MAAM,UAAU,SAAS,KAAK,MAAM,GAAG,EAAE,SAAS,GAAG,EAAE,MAAM,IAAI,EAAE,QAAQ,CAAC,KAAK,MAAM;AACvF,OAAM,IAAI,MACR,4BAA4B,SAAS,OAAO,KAAK,YAAY,mBAAmB,QAAQ,QAAQ,UAAU,OAAO,QAAQ,IAC1H"}
|
|
@@ -13,7 +13,7 @@ async function resolveInboundImageContentParts(params) {
|
|
|
13
13
|
const fallbacks = toolCfg?.fallbacks ?? [];
|
|
14
14
|
if (!primary) return [{
|
|
15
15
|
type: "text",
|
|
16
|
-
text: `[${params.images.length} image(s) attached;
|
|
16
|
+
text: `[${params.images.length} image(s) attached; no image-capable model is available to describe them.]`
|
|
17
17
|
}];
|
|
18
18
|
try {
|
|
19
19
|
return [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbound-image-handling.js","names":[],"sources":["../../../../src/agent/image/inbound-image-handling.ts"],"sourcesContent":["import type { Config } from '../../config/schema.js';\nimport { describeImagesWithFallback } from './understanding/runtime.js';\nimport { resolveImageModelConfigForTool } from './tool-model-config.js';\nimport { resolveImageHandlingStrategy } from './vision-detection.js';\n\nexport async function resolveInboundImageContentParts(params: {\n modelRef: string;\n cfg?: Config;\n userTextForContext: string;\n images: Array<{ data: string; mimeType: string }>;\n}): Promise<Array<{ type: 'image'; data: string; mimeType: string } | { type: 'text'; text: string }>> {\n const strategy = resolveImageHandlingStrategy(params.modelRef);\n if (strategy === 'native') {\n return params.images.map((att) => ({\n type: 'image' as const,\n data: att.data,\n mimeType: att.mimeType,\n }));\n }\n\n const toolCfg = resolveImageModelConfigForTool({ cfg: params.cfg });\n const primary = toolCfg?.primary;\n const fallbacks = toolCfg?.fallbacks ?? [];\n\n if (!primary) {\n return [\n {\n type: 'text' as const,\n text: `[${params.images.length} image(s) attached;
|
|
1
|
+
{"version":3,"file":"inbound-image-handling.js","names":[],"sources":["../../../../src/agent/image/inbound-image-handling.ts"],"sourcesContent":["import type { Config } from '../../config/schema.js';\nimport { describeImagesWithFallback } from './understanding/runtime.js';\nimport { resolveImageModelConfigForTool } from './tool-model-config.js';\nimport { resolveImageHandlingStrategy } from './vision-detection.js';\n\nexport async function resolveInboundImageContentParts(params: {\n modelRef: string;\n cfg?: Config;\n userTextForContext: string;\n images: Array<{ data: string; mimeType: string }>;\n}): Promise<Array<{ type: 'image'; data: string; mimeType: string } | { type: 'text'; text: string }>> {\n const strategy = resolveImageHandlingStrategy(params.modelRef);\n if (strategy === 'native') {\n return params.images.map((att) => ({\n type: 'image' as const,\n data: att.data,\n mimeType: att.mimeType,\n }));\n }\n\n const toolCfg = resolveImageModelConfigForTool({ cfg: params.cfg });\n const primary = toolCfg?.primary;\n const fallbacks = toolCfg?.fallbacks ?? [];\n\n if (!primary) {\n return [\n {\n type: 'text' as const,\n text: `[${params.images.length} image(s) attached; no image-capable model is available to describe them.]`,\n },\n ];\n }\n\n try {\n const buffers = params.images.map((att) => ({\n buffer: Buffer.from(att.data, 'base64'),\n mimeType: att.mimeType,\n }));\n const prompt = params.userTextForContext.trim()\n ? `Describe these images in the context of the user's message: \"${params.userTextForContext}\"`\n : 'Describe these images in detail.';\n const result = await describeImagesWithFallback({\n modelRef: primary,\n fallbacks,\n images: buffers,\n prompt,\n maxTokens: 1024,\n timeoutMs: 30_000,\n });\n return [{ type: 'text' as const, text: `[Image description: ${result.text}]` }];\n } catch (err) {\n return [\n {\n type: 'text' as const,\n text: `[${params.images.length} image(s) attached but could not be described: ${err instanceof Error ? err.message : String(err)}]`,\n },\n ];\n }\n}\n"],"mappings":";;;;AAKA,eAAsB,gCAAgC,QAKiD;AAErG,KADiB,6BAA6B,OAAO,SACzC,KAAK,SACf,QAAO,OAAO,OAAO,KAAK,SAAS;EACjC,MAAM;EACN,MAAM,IAAI;EACV,UAAU,IAAI;EACf,EAAE;CAGL,MAAM,UAAU,+BAA+B,EAAE,KAAK,OAAO,KAAK,CAAC;CACnE,MAAM,UAAU,SAAS;CACzB,MAAM,YAAY,SAAS,aAAa,EAAE;AAE1C,KAAI,CAAC,QACH,QAAO,CACL;EACE,MAAM;EACN,MAAM,IAAI,OAAO,OAAO,OAAO;EAChC,CACF;AAGH,KAAI;AAgBF,SAAO,CAAC;GAAE,MAAM;GAAiB,MAAM,wBAAuB,MARzC,2BAA2B;IAC9C,UAAU;IACV;IACA,QAVc,OAAO,OAAO,KAAK,SAAS;KAC1C,QAAQ,OAAO,KAAK,IAAI,MAAM,SAAS;KACvC,UAAU,IAAI;KACf,EAOgB;IACf,QAPa,OAAO,mBAAmB,MAAM,GAC3C,gEAAgE,OAAO,mBAAmB,KAC1F;IAMF,WAAW;IACX,WAAW;IACZ,CAAC,EACmE,KAAK;GAAI,CAAC;UACxE,KAAK;AACZ,SAAO,CACL;GACE,MAAM;GACN,MAAM,IAAI,OAAO,OAAO,OAAO,iDAAiD,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI,CAAC;GAClI,CACF"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { checkFileSafety } from "../prompt/safety.js";
|
|
2
2
|
import { decodeDataUrl } from "./image-helpers.js";
|
|
3
|
-
import { promises } from "node:fs";
|
|
4
|
-
import path from "node:path";
|
|
5
3
|
import { homedir } from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { promises } from "node:fs";
|
|
6
6
|
//#region src/agent/image/load-image-media.ts
|
|
7
7
|
function expandUser(p) {
|
|
8
8
|
if (p.startsWith("~/") || p === "~") return path.join(homedir(), p.slice(1));
|
|
@@ -14,7 +14,7 @@ export declare function buildToolModelConfigFromCandidates(params: {
|
|
|
14
14
|
candidates: Array<string | null | undefined>;
|
|
15
15
|
}): ToolModelConfig | null;
|
|
16
16
|
/**
|
|
17
|
-
* Effective image understanding model
|
|
17
|
+
* Effective image understanding model inferred from configured providers.
|
|
18
18
|
*/
|
|
19
19
|
export declare function resolveImageModelConfigForTool(params: {
|
|
20
20
|
cfg?: Config;
|
|
@@ -49,10 +49,10 @@ function firstVisionModelRef(provider) {
|
|
|
49
49
|
return m ? `${provider}/${m.id}` : void 0;
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
|
-
* Effective image understanding model
|
|
52
|
+
* Effective image understanding model inferred from configured providers.
|
|
53
53
|
*/
|
|
54
54
|
function resolveImageModelConfigForTool(params) {
|
|
55
|
-
const explicit = coerceToolModelConfig(
|
|
55
|
+
const explicit = coerceToolModelConfig(void 0);
|
|
56
56
|
if (hasToolModelConfig(explicit)) return explicit;
|
|
57
57
|
const primary = resolveDefaultModelRef(params.cfg);
|
|
58
58
|
const primaryCandidates = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-model-config.js","names":[],"sources":["../../../../src/agent/image/tool-model-config.ts"],"sourcesContent":["import type { AgentModelConfig, Config } from '../../config/schema.js';\nimport { getAgentDefaultModelRef, parseModelRef } from '../../config/schema.js';\nimport {\n resolveAgentModelFallbackValues,\n resolveAgentModelPrimaryValue,\n} from '../../config/model-input.js';\nimport { getDefaultModelSync, getModelsByProvider, isProviderConfiguredSync } from '../../providers/index.js';\n\nexport type ToolModelConfig = { primary?: string; fallbacks?: string[] };\n\nexport function hasToolModelConfig(model: ToolModelConfig | undefined): boolean {\n return Boolean(\n model?.primary?.trim() || (model?.fallbacks ?? []).some((entry) => entry.trim().length > 0),\n );\n}\n\nexport function resolveDefaultModelRef(cfg?: Config): { provider: string; model: string } {\n const ref = cfg ? getAgentDefaultModelRef(cfg) : undefined;\n if (ref) {\n const p = parseModelRef(ref);\n if (p) {\n return p;\n }\n }\n const fallback = getDefaultModelSync(cfg);\n const p2 = parseModelRef(fallback);\n if (p2) {\n return p2;\n }\n return { provider: 'deepseek', model: 'deepseek-v4-flash' };\n}\n\nexport function coerceToolModelConfig(model?: AgentModelConfig): ToolModelConfig {\n const primary = resolveAgentModelPrimaryValue(model);\n const fallbacks = resolveAgentModelFallbackValues(model);\n return {\n ...(primary?.trim() ? { primary: primary.trim() } : {}),\n ...(fallbacks.length > 0 ? { fallbacks } : {}),\n };\n}\n\nexport function buildToolModelConfigFromCandidates(params: {\n explicit: ToolModelConfig;\n candidates: Array<string | null | undefined>;\n}): ToolModelConfig | null {\n if (hasToolModelConfig(params.explicit)) {\n return params.explicit;\n }\n\n const deduped: string[] = [];\n for (const candidate of params.candidates) {\n const trimmed = candidate?.trim();\n if (!trimmed || !trimmed.includes('/')) {\n continue;\n }\n const provider = trimmed.slice(0, trimmed.indexOf('/')).trim();\n if (!provider || !isProviderConfiguredSync(provider)) {\n continue;\n }\n if (!deduped.includes(trimmed)) {\n deduped.push(trimmed);\n }\n }\n\n if (deduped.length === 0) {\n return null;\n }\n\n return {\n primary: deduped[0],\n ...(deduped.length > 1 ? { fallbacks: deduped.slice(1) } : {}),\n };\n}\n\nfunction firstVisionModelRef(provider: string): string | undefined {\n const m = getModelsByProvider(provider).find((x) => x.input?.includes('image'));\n return m ? `${provider}/${m.id}` : undefined;\n}\n\n/**\n * Effective image understanding model
|
|
1
|
+
{"version":3,"file":"tool-model-config.js","names":[],"sources":["../../../../src/agent/image/tool-model-config.ts"],"sourcesContent":["import type { AgentModelConfig, Config } from '../../config/schema.js';\nimport { getAgentDefaultModelRef, parseModelRef } from '../../config/schema.js';\nimport {\n resolveAgentModelFallbackValues,\n resolveAgentModelPrimaryValue,\n} from '../../config/model-input.js';\nimport { getDefaultModelSync, getModelsByProvider, isProviderConfiguredSync } from '../../providers/index.js';\n\nexport type ToolModelConfig = { primary?: string; fallbacks?: string[] };\n\nexport function hasToolModelConfig(model: ToolModelConfig | undefined): boolean {\n return Boolean(\n model?.primary?.trim() || (model?.fallbacks ?? []).some((entry) => entry.trim().length > 0),\n );\n}\n\nexport function resolveDefaultModelRef(cfg?: Config): { provider: string; model: string } {\n const ref = cfg ? getAgentDefaultModelRef(cfg) : undefined;\n if (ref) {\n const p = parseModelRef(ref);\n if (p) {\n return p;\n }\n }\n const fallback = getDefaultModelSync(cfg);\n const p2 = parseModelRef(fallback);\n if (p2) {\n return p2;\n }\n return { provider: 'deepseek', model: 'deepseek-v4-flash' };\n}\n\nexport function coerceToolModelConfig(model?: AgentModelConfig): ToolModelConfig {\n const primary = resolveAgentModelPrimaryValue(model);\n const fallbacks = resolveAgentModelFallbackValues(model);\n return {\n ...(primary?.trim() ? { primary: primary.trim() } : {}),\n ...(fallbacks.length > 0 ? { fallbacks } : {}),\n };\n}\n\nexport function buildToolModelConfigFromCandidates(params: {\n explicit: ToolModelConfig;\n candidates: Array<string | null | undefined>;\n}): ToolModelConfig | null {\n if (hasToolModelConfig(params.explicit)) {\n return params.explicit;\n }\n\n const deduped: string[] = [];\n for (const candidate of params.candidates) {\n const trimmed = candidate?.trim();\n if (!trimmed || !trimmed.includes('/')) {\n continue;\n }\n const provider = trimmed.slice(0, trimmed.indexOf('/')).trim();\n if (!provider || !isProviderConfiguredSync(provider)) {\n continue;\n }\n if (!deduped.includes(trimmed)) {\n deduped.push(trimmed);\n }\n }\n\n if (deduped.length === 0) {\n return null;\n }\n\n return {\n primary: deduped[0],\n ...(deduped.length > 1 ? { fallbacks: deduped.slice(1) } : {}),\n };\n}\n\nfunction firstVisionModelRef(provider: string): string | undefined {\n const m = getModelsByProvider(provider).find((x) => x.input?.includes('image'));\n return m ? `${provider}/${m.id}` : undefined;\n}\n\n/**\n * Effective image understanding model inferred from configured providers.\n */\nexport function resolveImageModelConfigForTool(params: { cfg?: Config }): ToolModelConfig | null {\n const explicit = coerceToolModelConfig(undefined);\n if (hasToolModelConfig(explicit)) {\n return explicit;\n }\n\n const primary = resolveDefaultModelRef(params.cfg);\n const primaryCandidates: string[] = [];\n const vision = firstVisionModelRef(primary.provider);\n if (vision) {\n primaryCandidates.push(vision);\n }\n if (primary.provider === 'openai') {\n primaryCandidates.push('openai/gpt-4o-mini');\n }\n if (primary.provider === 'anthropic') {\n primaryCandidates.push('anthropic/claude-sonnet-4-5');\n }\n if (primary.provider === 'google') {\n primaryCandidates.push('google/gemini-2.0-flash');\n }\n\n return buildToolModelConfigFromCandidates({\n explicit,\n candidates: [\n ...primaryCandidates,\n firstVisionModelRef('openai') ?? 'openai/gpt-4o-mini',\n firstVisionModelRef('anthropic') ?? 'anthropic/claude-sonnet-4-5',\n ],\n });\n}\n"],"mappings":";;;;aACgF;gBAK8B;AAI9G,SAAgB,mBAAmB,OAA6C;AAC9E,QAAO,QACL,OAAO,SAAS,MAAM,KAAK,OAAO,aAAa,EAAE,EAAE,MAAM,UAAU,MAAM,MAAM,CAAC,SAAS,EAAE,CAC5F;;AAGH,SAAgB,uBAAuB,KAAmD;CACxF,MAAM,MAAM,MAAM,wBAAwB,IAAI,GAAG,KAAA;AACjD,KAAI,KAAK;EACP,MAAM,IAAI,cAAc,IAAI;AAC5B,MAAI,EACF,QAAO;;CAIX,MAAM,KAAK,cADM,oBAAoB,IACJ,CAAC;AAClC,KAAI,GACF,QAAO;AAET,QAAO;EAAE,UAAU;EAAY,OAAO;EAAqB;;AAG7D,SAAgB,sBAAsB,OAA2C;CAC/E,MAAM,UAAU,8BAA8B,MAAM;CACpD,MAAM,YAAY,gCAAgC,MAAM;AACxD,QAAO;EACL,GAAI,SAAS,MAAM,GAAG,EAAE,SAAS,QAAQ,MAAM,EAAE,GAAG,EAAE;EACtD,GAAI,UAAU,SAAS,IAAI,EAAE,WAAW,GAAG,EAAE;EAC9C;;AAGH,SAAgB,mCAAmC,QAGxB;AACzB,KAAI,mBAAmB,OAAO,SAAS,CACrC,QAAO,OAAO;CAGhB,MAAM,UAAoB,EAAE;AAC5B,MAAK,MAAM,aAAa,OAAO,YAAY;EACzC,MAAM,UAAU,WAAW,MAAM;AACjC,MAAI,CAAC,WAAW,CAAC,QAAQ,SAAS,IAAI,CACpC;EAEF,MAAM,WAAW,QAAQ,MAAM,GAAG,QAAQ,QAAQ,IAAI,CAAC,CAAC,MAAM;AAC9D,MAAI,CAAC,YAAY,CAAC,yBAAyB,SAAS,CAClD;AAEF,MAAI,CAAC,QAAQ,SAAS,QAAQ,CAC5B,SAAQ,KAAK,QAAQ;;AAIzB,KAAI,QAAQ,WAAW,EACrB,QAAO;AAGT,QAAO;EACL,SAAS,QAAQ;EACjB,GAAI,QAAQ,SAAS,IAAI,EAAE,WAAW,QAAQ,MAAM,EAAE,EAAE,GAAG,EAAE;EAC9D;;AAGH,SAAS,oBAAoB,UAAsC;CACjE,MAAM,IAAI,oBAAoB,SAAS,CAAC,MAAM,MAAM,EAAE,OAAO,SAAS,QAAQ,CAAC;AAC/E,QAAO,IAAI,GAAG,SAAS,GAAG,EAAE,OAAO,KAAA;;;;;AAMrC,SAAgB,+BAA+B,QAAkD;CAC/F,MAAM,WAAW,sBAAsB,KAAA,EAAU;AACjD,KAAI,mBAAmB,SAAS,CAC9B,QAAO;CAGT,MAAM,UAAU,uBAAuB,OAAO,IAAI;CAClD,MAAM,oBAA8B,EAAE;CACtC,MAAM,SAAS,oBAAoB,QAAQ,SAAS;AACpD,KAAI,OACF,mBAAkB,KAAK,OAAO;AAEhC,KAAI,QAAQ,aAAa,SACvB,mBAAkB,KAAK,qBAAqB;AAE9C,KAAI,QAAQ,aAAa,YACvB,mBAAkB,KAAK,8BAA8B;AAEvD,KAAI,QAAQ,aAAa,SACvB,mBAAkB,KAAK,0BAA0B;AAGnD,QAAO,mCAAmC;EACxC;EACA,YAAY;GACV,GAAG;GACH,oBAAoB,SAAS,IAAI;GACjC,oBAAoB,YAAY,IAAI;GACrC;EACF,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
|
|
2
|
-
import { init_paths, resolveAgentDir } from "../../config/paths.js";
|
|
3
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
4
2
|
import { init_logger } from "../../utils/logger.js";
|
|
5
|
-
import {
|
|
3
|
+
import { init_paths, resolveAgentDir } from "../../config/paths.js";
|
|
4
|
+
import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
|
|
6
5
|
import { join } from "path";
|
|
6
|
+
import { existsSync, watch } from "fs";
|
|
7
7
|
import { mkdir, readFile, readdir, rename } from "fs/promises";
|
|
8
8
|
//#region src/agent/ipc/inbox.ts
|
|
9
9
|
init_write_file_atomic();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { init_paths, resolveSocketPath } from "../../config/paths.js";
|
|
2
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
3
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
+
import { init_paths, resolveSocketPath } from "../../config/paths.js";
|
|
4
4
|
import { isValidIPCMessage } from "./types.js";
|
|
5
5
|
import { dirname } from "path";
|
|
6
6
|
import { mkdir } from "fs/promises";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { init_string_coerce, normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "../../utils/string-coerce.js";
|
|
1
2
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
3
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { init_string_coerce, normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "../../utils/string-coerce.js";
|
|
4
4
|
import { buildSafeToolName, normalizeReservedToolNames } from "./bundle-mcp-names.js";
|
|
5
5
|
import { setPluginToolMeta } from "./mcp-tool-meta.js";
|
|
6
6
|
import crypto from "node:crypto";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
|
|
1
2
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
3
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
|
|
4
4
|
import { resolveGlobalSingleton } from "../../utils/global-singleton.js";
|
|
5
5
|
import { sanitizeServerName } from "./bundle-mcp-names.js";
|
|
6
6
|
import { redactSensitiveUrlLikeString } from "../../utils/redact-sensitive-url.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { init_string_coerce, normalizeLowercaseStringOrEmpty } from "../../utils/string-coerce.js";
|
|
1
2
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
3
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { init_string_coerce, normalizeLowercaseStringOrEmpty } from "../../utils/string-coerce.js";
|
|
4
4
|
import { resolveXopcMcpTransportAlias } from "../../config/mcp-config-normalize.js";
|
|
5
5
|
import { sanitizeForLog } from "../../utils/sanitize-log.js";
|
|
6
6
|
import { describeHttpMcpServerLaunchConfig, resolveHttpMcpServerLaunchConfig } from "./mcp-http.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
|
|
1
2
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
3
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
|
|
4
4
|
import { XopcStdioClientTransport } from "./mcp-stdio-transport.js";
|
|
5
5
|
import { resolveMcpTransportConfig } from "./mcp-transport-config.js";
|
|
6
6
|
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
|
@@ -5,7 +5,7 @@ import { materializeBundleMcpToolsForRun } from "./bundle-mcp-materialize.js";
|
|
|
5
5
|
import "./bundle-mcp-tools.js";
|
|
6
6
|
//#region src/agent/mcp/resolve-embedded-mcp-tools.ts
|
|
7
7
|
async function resolveEmbeddedMcpToolsForTurn(params) {
|
|
8
|
-
const disabledTools = (params.cfg ? resolveEffectiveAgentProfileForSession(params.cfg, params.sessionKey) : void 0)?.tools.
|
|
8
|
+
const disabledTools = (params.cfg ? resolveEffectiveAgentProfileForSession(params.cfg, params.sessionKey) : void 0)?.tools.denied;
|
|
9
9
|
if (!shouldCreateBundleMcpRuntimeForAttempt({
|
|
10
10
|
cfg: params.cfg,
|
|
11
11
|
disabledTools
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-embedded-mcp-tools.js","names":[],"sources":["../../../../src/agent/mcp/resolve-embedded-mcp-tools.ts"],"sourcesContent":["import type { AgentTool } from '@earendil-works/pi-agent-core';\nimport type { Config } from '../../config/schema.js';\nimport { resolveEffectiveAgentProfileForSession } from '../../config/agent-profile.js';\nimport {\n getOrCreateSessionMcpRuntime,\n materializeBundleMcpToolsForRun,\n} from './bundle-mcp-tools.js';\nimport { shouldCreateBundleMcpRuntimeForAttempt } from './bundle-mcp-policy.js';\nimport type { BundleMcpToolRuntime } from './bundle-mcp-types.js';\n\nexport type ResolvedEmbeddedMcpTools = {\n tools: AgentTool[];\n dispose: () => Promise<void>;\n};\n\nexport async function resolveEmbeddedMcpToolsForTurn(params: {\n sessionKey: string;\n workspaceDir: string;\n cfg?: Config;\n baseTools: AgentTool[];\n cleanupOnTurnEnd?: boolean;\n}): Promise<ResolvedEmbeddedMcpTools> {\n const profile = params.cfg\n ? resolveEffectiveAgentProfileForSession(params.cfg, params.sessionKey)\n : undefined;\n const disabledTools = profile?.tools.
|
|
1
|
+
{"version":3,"file":"resolve-embedded-mcp-tools.js","names":[],"sources":["../../../../src/agent/mcp/resolve-embedded-mcp-tools.ts"],"sourcesContent":["import type { AgentTool } from '@earendil-works/pi-agent-core';\nimport type { Config } from '../../config/schema.js';\nimport { resolveEffectiveAgentProfileForSession } from '../../config/agent-profile.js';\nimport {\n getOrCreateSessionMcpRuntime,\n materializeBundleMcpToolsForRun,\n} from './bundle-mcp-tools.js';\nimport { shouldCreateBundleMcpRuntimeForAttempt } from './bundle-mcp-policy.js';\nimport type { BundleMcpToolRuntime } from './bundle-mcp-types.js';\n\nexport type ResolvedEmbeddedMcpTools = {\n tools: AgentTool[];\n dispose: () => Promise<void>;\n};\n\nexport async function resolveEmbeddedMcpToolsForTurn(params: {\n sessionKey: string;\n workspaceDir: string;\n cfg?: Config;\n baseTools: AgentTool[];\n cleanupOnTurnEnd?: boolean;\n}): Promise<ResolvedEmbeddedMcpTools> {\n const profile = params.cfg\n ? resolveEffectiveAgentProfileForSession(params.cfg, params.sessionKey)\n : undefined;\n const disabledTools = profile?.tools.denied;\n\n if (\n !shouldCreateBundleMcpRuntimeForAttempt({\n cfg: params.cfg,\n disabledTools,\n })\n ) {\n return { tools: [], dispose: async () => {} };\n }\n\n const reserved = new Set(params.baseTools.map((t) => t.name));\n const runtime = await getOrCreateSessionMcpRuntime({\n sessionId: params.sessionKey,\n sessionKey: params.sessionKey,\n workspaceDir: params.workspaceDir,\n cfg: params.cfg,\n });\n\n let materialized: BundleMcpToolRuntime;\n try {\n materialized = await materializeBundleMcpToolsForRun({\n runtime,\n reservedToolNames: reserved,\n disposeRuntime: params.cleanupOnTurnEnd\n ? async () => {\n await runtime.dispose();\n }\n : undefined,\n });\n } catch (error) {\n await runtime.dispose().catch(() => {});\n throw error;\n }\n\n const filtered = materialized.tools.filter((tool) => {\n if (disabledTools?.has(tool.name)) {\n return false;\n }\n return true;\n });\n\n return {\n tools: filtered,\n dispose: materialized.dispose,\n };\n}\n\nexport function mergeTurnTools(baseTools: AgentTool[], mcpTools: AgentTool[]): AgentTool[] {\n if (mcpTools.length === 0) {\n return baseTools;\n }\n return [...baseTools, ...mcpTools];\n}\n"],"mappings":";;;;;;AAeA,eAAsB,+BAA+B,QAMf;CAIpC,MAAM,iBAHU,OAAO,MACnB,uCAAuC,OAAO,KAAK,OAAO,WAAW,GACrE,KAAA,IAC2B,MAAM;AAErC,KACE,CAAC,uCAAuC;EACtC,KAAK,OAAO;EACZ;EACD,CAAC,CAEF,QAAO;EAAE,OAAO,EAAE;EAAE,SAAS,YAAY;EAAI;CAG/C,MAAM,WAAW,IAAI,IAAI,OAAO,UAAU,KAAK,MAAM,EAAE,KAAK,CAAC;CAC7D,MAAM,UAAU,MAAM,6BAA6B;EACjD,WAAW,OAAO;EAClB,YAAY,OAAO;EACnB,cAAc,OAAO;EACrB,KAAK,OAAO;EACb,CAAC;CAEF,IAAI;AACJ,KAAI;AACF,iBAAe,MAAM,gCAAgC;GACnD;GACA,mBAAmB;GACnB,gBAAgB,OAAO,mBACnB,YAAY;AACV,UAAM,QAAQ,SAAS;OAEzB,KAAA;GACL,CAAC;UACK,OAAO;AACd,QAAM,QAAQ,SAAS,CAAC,YAAY,GAAG;AACvC,QAAM;;AAUR,QAAO;EACL,OARe,aAAa,MAAM,QAAQ,SAAS;AACnD,OAAI,eAAe,IAAI,KAAK,KAAK,CAC/B,QAAO;AAET,UAAO;IAIQ;EACf,SAAS,aAAa;EACvB;;AAGH,SAAgB,eAAe,WAAwB,UAAoC;AACzF,KAAI,SAAS,WAAW,EACtB,QAAO;AAET,QAAO,CAAC,GAAG,WAAW,GAAG,SAAS"}
|
|
@@ -23,8 +23,11 @@ export interface CapabilityProviderCandidate {
|
|
|
23
23
|
}
|
|
24
24
|
export interface ResolveCapabilityModelCandidatesParams {
|
|
25
25
|
cfg?: Config;
|
|
26
|
-
/** Active capability model config
|
|
27
|
-
modelConfig:
|
|
26
|
+
/** Active capability model config from a manifest/runtime policy. */
|
|
27
|
+
modelConfig: {
|
|
28
|
+
primary?: string;
|
|
29
|
+
fallbacks?: string[];
|
|
30
|
+
} | AgentModelConfig | undefined;
|
|
28
31
|
/** Caller-supplied per-call override (highest priority). */
|
|
29
32
|
modelOverride?: string;
|
|
30
33
|
/** Optional ref parser; defaults to {@link parseCapabilityModelRef}. */
|
|
@@ -189,7 +189,7 @@ function throwCapabilityGenerationFailure(params) {
|
|
|
189
189
|
});
|
|
190
190
|
}
|
|
191
191
|
function buildNoCapabilityModelConfiguredMessage(params) {
|
|
192
|
-
const lines = [`No ${params.capabilityLabel} model configured.
|
|
192
|
+
const lines = [`No ${params.capabilityLabel} model configured. Add a manifest/runtime model policy for ${params.modelConfigKey} or pass modelOverride at call site.`];
|
|
193
193
|
if (params.providers.length > 0) {
|
|
194
194
|
lines.push("Registered providers:");
|
|
195
195
|
for (const p of params.providers) {
|