@xopcai/xopc 0.0.116 → 0.0.117
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -6
- package/README.zh-CN.md +21 -6
- 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-BBLhJ2C6.js} +1 -1
- package/dist/gateway/static/root/assets/agents-C6xgagZd.js +71 -0
- package/dist/gateway/static/root/assets/{app-management-settings-panel-yXSXY_bu.js → app-management-settings-panel-CBpLONvG.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-DjY1P_ug.js → appearance-settings-CGcc54yj.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-DdDx0V4z.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-CytE5j-e.js → archive-plugin-DZsVqMhU.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-BvvrN6rF.js → attachment-load-CIol6JWX.js} +1 -1
- package/dist/gateway/static/root/assets/{binary-plugins-IBWSitnj.js → binary-plugins-B3UauMfp.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-C-wDpsf-.js → block-editor-2HJoFchH.js} +3 -3
- package/dist/gateway/static/root/assets/browser-settings-page-CUOO-PQk.js +8 -0
- package/dist/gateway/static/root/assets/capability-presets-api-XQoMTI0A.js +1 -0
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-CfqF-kGr.js +1 -0
- package/dist/gateway/static/root/assets/{channels-settings-Cd3JbeQ1.js → channels-settings-BYyRzsex.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-DIvEz4NX.js +2 -0
- package/dist/gateway/static/root/assets/cron-api-R41aQCX9.js +1 -0
- package/dist/gateway/static/root/assets/cron-page-D97nFqQD.js +3 -0
- package/dist/gateway/static/root/assets/dreaming-settings-Bceaw1PG.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-BAIyjDlq.js → extension-debug-page-DX5WRE_t.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-DEhv2GpC.js → extension-page-Buah7Bw-.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DOuAxTDW.js → extension-settings-page-DuroLVnf.js} +1 -1
- package/dist/gateway/static/root/assets/{fetch-CTsREQIe.js → fetch-B5zdl27C.js} +1 -1
- package/dist/gateway/static/root/assets/{format-interval-label-D35Bfhtx.js → format-interval-label-Dn_QKIqb.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-config-api-gT4ZhE7h.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-iISWAZRm.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-C1KAHrd2.js → gateway-startup-retry-B3kL8KGY.js} +1 -1
- package/dist/gateway/static/root/assets/goal-detail-page-DCUROLMQ.js +1 -0
- package/dist/gateway/static/root/assets/{goals-config-api-KnLGpu6h.js → goals-config-api-AR-fVh0P.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-Cpb21ezg.js +2 -0
- package/dist/gateway/static/root/assets/{goals-settings-DtPtqZi8.js → goals-settings-CPAuFwoD.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-uKw1f0IG.js → heartbeat-config-api-D7bKFEeO.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-DN9vEj9P.js → heartbeat-settings-CC69vNx0.js} +1 -1
- package/dist/gateway/static/root/assets/index-CwhK8qCh.js +122 -0
- package/dist/gateway/static/root/assets/index-CyfhARL-.css +1 -0
- package/dist/gateway/static/root/assets/{interval-presets-Dq0FXJ65.js → interval-presets-0DtsnxE0.js} +1 -1
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-C9_t4m7t.js → keyboard-shortcuts-settings-BPREtN8B.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-SNkWzidV.js → logs-page-DefCgF4o.js} +2 -2
- package/dist/gateway/static/root/assets/{markdown-split-Ca87W8-h.js → markdown-split-ChbR9LGO.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-BAcUjPRJ.js → media-plugins-B82oP80n.js} +1 -1
- package/dist/gateway/static/root/assets/messages-Cf1O9JB0.js +3 -0
- package/dist/gateway/static/root/assets/models-hub-panel-DmKiIihT.js +2 -0
- package/dist/gateway/static/root/assets/note-detail-page-CxxfLRJZ.js +2 -0
- package/dist/gateway/static/root/assets/{note-image-lightbox-hnSX5SSn.js → note-image-lightbox-CDknITM3.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-ycsDlkFA.js → notes-page-X2slSx7V.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-CNgM20H5.js → preview-open-alternatives-DV3xQsWB.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BvmUWqgu.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-CcdjGcfT.js → save-bar-controls-BODCXnvY.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-CYr39z76.js → schedule-field-CgJSCD3B.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-BRAJgZQ2.js → schema-form-qtfEI6QM.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-B0yESuuL.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-q2M8RKOo.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-BhzjeGWi.js → settings-collapsible-section-BHZKjVcS.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-Cz3Pcr9b.js → settings-form-section-5i35D-J1.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-CGozabLD.js +1 -0
- package/dist/gateway/static/root/assets/setup-status-panel-FoOSe6nU.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-DL4y9K5e.js → share-preview-page-B0H63tDv.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-Cy5zWyYQ.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-DaZNFro9.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-CnwtUzvw.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-FD2jxRZ3.js → system-settings-panel-DXs2VmBt.js} +1 -1
- package/dist/gateway/static/root/assets/typed-models-lib-4gPuydz_.js +1 -0
- package/dist/gateway/static/root/assets/{use-channel-catalog-BInPrfR5.js → use-channel-catalog-BCjP_VHb.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DvKiOglO.js +1 -0
- package/dist/gateway/static/root/assets/{voice-player-store-1U3vFppm.js → voice-player-store-BlF9V05n.js} +1 -1
- package/dist/gateway/static/root/assets/workflows-page-CAVZcONQ.js +18 -0
- package/dist/gateway/static/root/index.html +5 -5
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +1 -1
- package/dist/src/agent/agent-manager.js +13 -14
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/agent-scope.js +7 -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/run-background-review.d.ts +0 -2
- package/dist/src/agent/background-review/run-background-review.js +2 -4
- package/dist/src/agent/background-review/run-background-review.js.map +1 -1
- package/dist/src/agent/background-review/settings.js +8 -7
- package/dist/src/agent/background-review/settings.js.map +1 -1
- package/dist/src/agent/bootstrap/bootstrap-context.d.ts +2 -2
- package/dist/src/agent/bootstrap/bootstrap-context.js +4 -4
- package/dist/src/agent/bootstrap/bootstrap-context.js.map +1 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
- package/dist/src/agent/bootstrap/project-agents-context.js +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.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js.map +1 -1
- package/dist/src/agent/fallback/candidates.js +6 -3
- package/dist/src/agent/fallback/candidates.js.map +1 -1
- package/dist/src/agent/goals/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 +2 -0
- package/dist/src/agent/memory/builtin-memory-store.js +5 -1
- package/dist/src/agent/memory/builtin-memory-store.js.map +1 -1
- package/dist/src/agent/memory/builtin-provider.d.ts +31 -9
- package/dist/src/agent/memory/builtin-provider.js +261 -11
- package/dist/src/agent/memory/builtin-provider.js.map +1 -1
- package/dist/src/agent/memory/context-assembler.d.ts +10 -0
- package/dist/src/agent/memory/context-assembler.js +26 -0
- package/dist/src/agent/memory/context-assembler.js.map +1 -0
- package/dist/src/agent/memory/create-memory-manager.js +25 -7
- package/dist/src/agent/memory/create-memory-manager.js.map +1 -1
- package/dist/src/agent/memory/dreaming/config.d.ts +1 -6
- package/dist/src/agent/memory/dreaming/config.js +8 -8
- package/dist/src/agent/memory/dreaming/config.js.map +1 -1
- package/dist/src/agent/memory/dreaming/deep-promotion.d.ts +2 -0
- package/dist/src/agent/memory/dreaming/deep-promotion.js +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 +37 -1
- package/dist/src/agent/memory/manager.js +332 -40
- package/dist/src/agent/memory/manager.js.map +1 -1
- package/dist/src/agent/memory/memory-config.js +12 -15
- package/dist/src/agent/memory/memory-config.js.map +1 -1
- package/dist/src/agent/memory/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/provider.d.ts +20 -15
- package/dist/src/agent/memory/stub-memory-provider.d.ts +17 -2
- package/dist/src/agent/memory/stub-memory-provider.js +20 -3
- package/dist/src/agent/memory/stub-memory-provider.js.map +1 -1
- package/dist/src/agent/memory/types.d.ts +136 -0
- package/dist/src/agent/models/manager.d.ts +1 -1
- package/dist/src/agent/models/manager.js +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.js +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
- package/dist/src/agent/reply/post-compaction-context.js +12 -7
- package/dist/src/agent/reply/post-compaction-context.js.map +1 -1
- package/dist/src/agent/reply/startup-context.js +8 -9
- package/dist/src/agent/reply/startup-context.js.map +1 -1
- package/dist/src/agent/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.js +25 -29
- 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 +20 -16
- 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 +6 -5
- 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 +11 -0
- package/dist/src/agent-manifest/resolver.js +93 -0
- package/dist/src/agent-manifest/resolver.js.map +1 -0
- package/dist/src/agent-manifest/schema.d.ts +778 -0
- package/dist/src/agent-manifest/schema.js +267 -0
- package/dist/src/agent-manifest/schema.js.map +1 -0
- package/dist/src/agent-manifest/validator.d.ts +24 -0
- package/dist/src/agent-manifest/validator.js +87 -0
- package/dist/src/agent-manifest/validator.js.map +1 -0
- package/dist/src/agent-runtime/boundary-guard.d.ts +12 -0
- package/dist/src/agent-runtime/boundary-guard.js +23 -0
- package/dist/src/agent-runtime/boundary-guard.js.map +1 -0
- package/dist/src/agent-runtime/index.d.ts +7 -0
- package/dist/src/agent-runtime/index.js +8 -0
- package/dist/src/agent-runtime/memory-runtime.d.ts +21 -0
- package/dist/src/agent-runtime/memory-runtime.js +50 -0
- package/dist/src/agent-runtime/memory-runtime.js.map +1 -0
- package/dist/src/agent-runtime/model-router.d.ts +11 -0
- package/dist/src/agent-runtime/model-router.js +16 -0
- package/dist/src/agent-runtime/model-router.js.map +1 -0
- package/dist/src/agent-runtime/run-trace.d.ts +27 -0
- package/dist/src/agent-runtime/run-trace.js +53 -0
- package/dist/src/agent-runtime/run-trace.js.map +1 -0
- package/dist/src/agent-runtime/runtime-profile.d.ts +24 -0
- package/dist/src/agent-runtime/runtime-profile.js +44 -0
- package/dist/src/agent-runtime/runtime-profile.js.map +1 -0
- package/dist/src/agent-runtime/tool-registry.d.ts +28 -0
- package/dist/src/agent-runtime/tool-registry.js +52 -0
- package/dist/src/agent-runtime/tool-registry.js.map +1 -0
- package/dist/src/agent-runtime/workflow-runtime.d.ts +31 -0
- package/dist/src/agent-runtime/workflow-runtime.js +34 -0
- package/dist/src/agent-runtime/workflow-runtime.js.map +1 -0
- package/dist/src/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/chat-commands/agent-edit.js +2 -2
- 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/thinking.js +16 -42
- package/dist/src/chat-commands/builtins/thinking.js.map +1 -1
- package/dist/src/chat-commands/config-paths.js +1 -1
- package/dist/src/chat-commands/config-paths.js.map +1 -1
- package/dist/src/chat-commands/context.js +3 -4
- package/dist/src/chat-commands/context.js.map +1 -1
- package/dist/src/cli/command-manifest.js +1 -1
- package/dist/src/cli/command-manifest.js.map +1 -1
- package/dist/src/cli/commands/agent.js +3 -1
- package/dist/src/cli/commands/agent.js.map +1 -1
- package/dist/src/cli/commands/agents.js +3 -6
- package/dist/src/cli/commands/agents.js.map +1 -1
- package/dist/src/cli/commands/browser-cli-helpers.js +9 -11
- package/dist/src/cli/commands/browser-cli-helpers.js.map +1 -1
- package/dist/src/cli/commands/config.js +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 +2 -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 -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 +2 -2
- package/dist/src/cli/commands/models.js +27 -11
- package/dist/src/cli/commands/models.js.map +1 -1
- package/dist/src/cli/commands/onboard/channels/registry.js.map +1 -1
- package/dist/src/cli/commands/onboard/model.js +20 -22
- package/dist/src/cli/commands/onboard/model.js.map +1 -1
- package/dist/src/cli/commands/onboard.js +1 -1
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/cli/commands/skills-test.js +1 -1
- package/dist/src/cli/templates.js +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 +66 -12
- package/dist/src/commands/agents.config.js.map +1 -1
- package/dist/src/config/agent-profile.d.ts +5 -17
- package/dist/src/config/agent-profile.js +31 -64
- package/dist/src/config/agent-profile.js.map +1 -1
- package/dist/src/config/agent-typed-models.d.ts +1 -1
- package/dist/src/config/agent-typed-models.js +1 -2
- 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 +8 -8
- 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.js +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 +918 -781
- package/dist/src/config/schema.js +154 -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 +17 -18
- package/dist/src/gateway/agents-admin.js +125 -90
- 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/file-path-classifier.js +2 -2
- 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 +56 -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/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/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 +8 -0
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/memory.d.ts +3 -0
- package/dist/src/gateway/hono/routes/memory.js +290 -0
- package/dist/src/gateway/hono/routes/memory.js.map +1 -0
- package/dist/src/gateway/hono/routes/models.js +1 -1
- 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.js +2 -2
- 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 +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 +2 -2
- package/dist/src/providers/index.js +11 -15
- 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/session-workspace.js +7 -2
- package/dist/src/session/session-workspace.js.map +1 -1
- package/dist/src/session/store.js +6 -1
- package/dist/src/session/store.js.map +1 -1
- package/dist/src/session/thinking-resolve.d.ts +1 -1
- package/dist/src/session/thinking-resolve.js +1 -1
- package/dist/src/session/thinking-resolve.js.map +1 -1
- package/dist/src/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.js +2 -2
- package/dist/src/storage/sqlite/memory-records-repository.d.ts +101 -0
- package/dist/src/storage/sqlite/memory-records-repository.js +309 -0
- package/dist/src/storage/sqlite/memory-records-repository.js.map +1 -0
- package/dist/src/storage/sqlite/migrations/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/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.js +7 -5
- package/dist/src/tui/backends/embedded-backend.js.map +1 -1
- package/dist/src/tui/clipboard-image.js +3 -3
- 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 +1 -1
- package/dist/src/tui/tui.js +6 -6
- 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/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/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/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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.config.js","names":[],"sources":["../../../src/commands/agents.config.ts"],"sourcesContent":["/**\n * Mutate `agents.list` / bindings when adding or removing agents.\n */\n\nimport { rm } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\n\nimport type { Config } from '../config/schema.js';\nimport {\n listAgentEntries,\n normalizeAgentId,\n resolveAgentHomeDir,\n resolveAgentWorkspaceDir,\n resolveDefaultAgentId,\n DEFAULT_AGENT_ID,\n} from '../agent/agent-scope.js';\n\ntype AgentEntry = NonNullable<NonNullable<Config['agents']>['list']>[number];\n\nexport { listAgentEntries };\n\nexport function findAgentEntryIndex(list: AgentEntry[], agentId: string): number {\n const id = normalizeAgentId(agentId);\n return list.findIndex((e) => normalizeAgentId(e.id) === id);\n}\n\nexport function applyAgentConfig(\n cfg: Config,\n params: {\n agentId: string;\n workspace?: string;\n
|
|
1
|
+
{"version":3,"file":"agents.config.js","names":[],"sources":["../../../src/commands/agents.config.ts"],"sourcesContent":["/**\n * Mutate `agents.list` / bindings when adding or removing agents.\n */\n\nimport { rm } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\n\nimport type { Config } from '../config/schema.js';\nimport {\n listAgentEntries,\n normalizeAgentId,\n resolveAgentHomeDir,\n resolveAgentWorkspaceDir,\n resolveDefaultAgentId,\n DEFAULT_AGENT_ID,\n} from '../agent/agent-scope.js';\n\ntype AgentEntry = NonNullable<NonNullable<Config['agents']>['list']>[number];\n\nexport { listAgentEntries };\n\nexport function findAgentEntryIndex(list: AgentEntry[], agentId: string): number {\n const id = normalizeAgentId(agentId);\n return list.findIndex((e) => normalizeAgentId(e.id) === id);\n}\n\nexport function applyAgentConfig(\n cfg: Config,\n params: {\n agentId: string;\n workspace?: string;\n model?: string;\n models?: AgentEntry['models'];\n skills?: string[];\n tools?: AgentEntry['tools'];\n },\n): Config {\n const agentId = normalizeAgentId(params.agentId);\n const list = listAgentEntries(cfg);\n const index = findAgentEntryIndex(list, agentId);\n const nextTools = params.tools;\n const base = index >= 0 ? list[index] : {\n id: agentId,\n enabled: true as const,\n identity: { name: agentId, role: 'Agent', language: 'en', tone: 'direct' },\n responsibilities: { primary: ['Help the user complete tasks'] },\n workspace: { root: `~/.xopc/workspace/${agentId}` },\n models: { defaultRole: 'deep', roles: { deep: { model: params.model ?? 'openai/gpt-4.1' } } },\n tools: { builtin: {} },\n skills: { mode: 'all' as const },\n memory: { mode: 'confirmWrite' as const, sources: ['session' as const, 'curated' as const], writePolicy: { curated: 'confirm' as const } },\n workflows: {},\n boundaries: { requiresConfirmation: [], forbidden: [], escalation: [] },\n };\n const nextEntry: AgentEntry = {\n ...base,\n enabled: base.enabled ?? true,\n ...(params.workspace ? { workspace: { root: params.workspace } } : {}),\n ...(params.models ? { models: params.models } : {}),\n ...(params.model ? { models: { ...base.models, defaultRole: 'deep', roles: { ...base.models.roles, deep: { model: params.model } } } } : {}),\n ...(params.skills ? { skills: { mode: 'allowlist' as const, allow: params.skills } } : {}),\n ...(nextTools ? { tools: nextTools } : {}),\n };\n const nextList = [...list];\n if (index >= 0) {\n nextList[index] = nextEntry;\n } else {\n if (nextList.length === 0 && agentId !== normalizeAgentId(resolveDefaultAgentId(cfg))) {\n nextList.push({\n id: resolveDefaultAgentId(cfg),\n enabled: true,\n identity: { name: resolveDefaultAgentId(cfg), role: 'Agent', language: 'en', tone: 'direct' },\n responsibilities: { primary: ['Help the user complete tasks'] },\n workspace: { root: `~/.xopc/workspace/${resolveDefaultAgentId(cfg)}` },\n models: { defaultRole: 'deep', roles: { deep: { model: 'openai/gpt-4.1' } } },\n tools: { builtin: {} },\n skills: { mode: 'all' },\n memory: { mode: 'confirmWrite', sources: ['session', 'curated'], writePolicy: { curated: 'confirm' } },\n workflows: {},\n boundaries: { requiresConfirmation: [], forbidden: [], escalation: [] },\n });\n }\n nextList.push(nextEntry);\n }\n return {\n ...cfg,\n agents: {\n ...cfg.agents,\n list: nextList,\n },\n };\n}\n\nexport function pruneAgentConfig(\n cfg: Config,\n agentId: string,\n): { config: Config; removedBindings: number } {\n const id = normalizeAgentId(agentId);\n const agents = listAgentEntries(cfg);\n const nextAgentsList = agents.filter((e) => normalizeAgentId(e.id) !== id);\n const nextAgents = nextAgentsList.length > 0 ? nextAgentsList : [];\n\n const bindings = cfg.bindings ?? [];\n const filteredBindings = bindings.filter((b) => normalizeAgentId(b.agentId) !== id);\n\n return {\n config: {\n ...cfg,\n agents: { ...cfg.agents, list: nextAgents },\n bindings: filteredBindings,\n },\n removedBindings: bindings.length - filteredBindings.length,\n };\n}\n\nexport async function removeAgentDirsFromDisk(cfg: Config, id: string): Promise<void> {\n const aid = normalizeAgentId(id);\n if (aid === DEFAULT_AGENT_ID) {\n throw new Error('Refusing to delete the main agent home on disk from this command.');\n }\n const home = resolveAgentHomeDir(cfg, aid);\n const ws = resolveAgentWorkspaceDir(cfg, aid);\n if (existsSync(home)) {\n await rm(home, { recursive: true, force: true });\n }\n if (existsSync(ws) && ws !== home) {\n await rm(ws, { recursive: true, force: true });\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,38 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
* Effective agent profile: merges `agents.defaults` with `agents.list` entry.
|
|
3
|
-
* Subagent session keys fall back to the configured default agent id for profile lookup.
|
|
4
|
-
*/
|
|
1
|
+
import { type EffectiveAgentManifest } from '../agent-manifest/index.js';
|
|
5
2
|
import type { ThinkLevel, ReasoningLevel, VerboseLevel } from '../agent/transcript/thinking-types.js';
|
|
6
3
|
import type { Config } from './schema.js';
|
|
7
|
-
import type { AgentModelConfig } from './schema.js';
|
|
8
4
|
export { resolveAgentWorkspaceDir } from '../agent/agent-scope.js';
|
|
9
|
-
export type { AgentModelConfig };
|
|
10
5
|
export interface EffectiveAgentTools {
|
|
11
|
-
|
|
12
|
-
disable: Set<string>;
|
|
6
|
+
denied: Set<string>;
|
|
13
7
|
}
|
|
14
8
|
export interface EffectiveAgentProfile {
|
|
15
9
|
agentId: string;
|
|
16
|
-
|
|
10
|
+
manifest: EffectiveAgentManifest;
|
|
17
11
|
resolvedWorkspacePath: string;
|
|
18
|
-
/** Primary model ref (provider/model); may be empty → runtime default. */
|
|
19
12
|
primaryModelRef: string | undefined;
|
|
20
13
|
fallbacks: string[];
|
|
21
14
|
thinkingDefault?: ThinkLevel;
|
|
22
15
|
reasoningDefault?: ReasoningLevel;
|
|
23
16
|
verboseDefault?: VerboseLevel;
|
|
24
17
|
systemPromptOverride?: string;
|
|
25
|
-
/** Skill names visible in `<available_skills>`; undefined means all enabled skills, empty means none. */
|
|
26
18
|
skillsAllowlist?: string[];
|
|
27
19
|
tools: EffectiveAgentTools;
|
|
28
20
|
params: Record<string, unknown>;
|
|
29
21
|
}
|
|
30
|
-
/**
|
|
31
|
-
* Agent id used for config lookup from a session key (subagent keys → default agent).
|
|
32
|
-
*/
|
|
33
22
|
export declare function extractProfileAgentId(sessionKey: string | undefined | null, config: Config): string;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
*/
|
|
23
|
+
export declare function resolveEffectiveAgentManifestForAgent(config: Config, agentId: string): EffectiveAgentManifest;
|
|
24
|
+
export declare function resolveEffectiveAgentManifestForSession(config: Config, sessionKey: string | undefined | null): EffectiveAgentManifest;
|
|
37
25
|
export declare function resolveEffectiveAgentProfile(config: Config, agentId: string): EffectiveAgentProfile;
|
|
38
26
|
export declare function resolveEffectiveAgentProfileForSession(config: Config, sessionKey: string | undefined | null): EffectiveAgentProfile;
|
|
@@ -1,47 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
|
|
2
|
+
import "../agent-manifest/index.js";
|
|
3
|
+
import { init_agent_scope, normalizeAgentId, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
|
|
3
4
|
import { init_session_key, parseSessionKey } from "../routing/session-key.js";
|
|
4
5
|
import { agentExists, getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
|
|
5
6
|
//#region src/config/agent-profile.ts
|
|
6
|
-
init_schema();
|
|
7
7
|
init_agent_scope();
|
|
8
8
|
init_resolve_route();
|
|
9
9
|
init_session_key();
|
|
10
|
-
function
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
return {
|
|
14
|
-
primary: override.primary ?? base.primary,
|
|
15
|
-
fallbacks: override.fallbacks ?? base.fallbacks
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
function primaryAndFallbacksFromModelConfig(raw) {
|
|
19
|
-
const primary = raw?.primary?.trim();
|
|
20
|
-
const fallbacks = Array.isArray(raw?.fallbacks) ? raw.fallbacks.map((s) => s.trim()).filter(Boolean) : [];
|
|
21
|
-
return {
|
|
22
|
-
primary: primary || void 0,
|
|
23
|
-
fallbacks
|
|
24
|
-
};
|
|
10
|
+
function findAgentManifest(config, agentId) {
|
|
11
|
+
const id = normalizeAgentId(agentId);
|
|
12
|
+
return config.agents.list.find((agent) => agent.enabled !== false && normalizeAgentId(agent.id) === id);
|
|
25
13
|
}
|
|
26
|
-
function mergeDisableLists(a, b) {
|
|
27
|
-
const out = /* @__PURE__ */ new Set();
|
|
28
|
-
for (const x of a ?? []) {
|
|
29
|
-
const s = String(x).trim();
|
|
30
|
-
if (s) out.add(s);
|
|
31
|
-
}
|
|
32
|
-
for (const x of b ?? []) {
|
|
33
|
-
const s = String(x).trim();
|
|
34
|
-
if (s) out.add(s);
|
|
35
|
-
}
|
|
36
|
-
return out;
|
|
37
|
-
}
|
|
38
|
-
function resolveSkillsAllowlist(defaultsSkills, entrySkills) {
|
|
39
|
-
if (entrySkills !== void 0) return [...entrySkills];
|
|
40
|
-
if (defaultsSkills !== void 0) return [...defaultsSkills];
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Agent id used for config lookup from a session key (subagent keys → default agent).
|
|
44
|
-
*/
|
|
45
14
|
function extractProfileAgentId(sessionKey, config) {
|
|
46
15
|
const parsed = parseSessionKey(sessionKey ?? "");
|
|
47
16
|
if (!parsed) return getDefaultAgentId(config);
|
|
@@ -50,40 +19,38 @@ function extractProfileAgentId(sessionKey, config) {
|
|
|
50
19
|
if (!agentExists(aid, config)) return getDefaultAgentId(config);
|
|
51
20
|
return aid.toLowerCase();
|
|
52
21
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
22
|
+
function resolveEffectiveAgentManifestForAgent(config, agentId) {
|
|
23
|
+
const agent = findAgentManifest(config, agentId) ?? findAgentManifest(config, getDefaultAgentId(config));
|
|
24
|
+
if (!agent) throw new Error(`No enabled agent manifest found for "${agentId}"`);
|
|
25
|
+
return resolveEffectiveAgentManifest({
|
|
26
|
+
agent,
|
|
27
|
+
presets: config.agents.capabilityPresets
|
|
28
|
+
}).manifest;
|
|
29
|
+
}
|
|
30
|
+
function resolveEffectiveAgentManifestForSession(config, sessionKey) {
|
|
31
|
+
return resolveEffectiveAgentManifestForAgent(config, extractProfileAgentId(sessionKey, config));
|
|
32
|
+
}
|
|
56
33
|
function resolveEffectiveAgentProfile(config, agentId) {
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
const { primary: primaryFromMerged, fallbacks: fallbacksFromMerged } = primaryAndFallbacksFromModelConfig(mergeModelConfig(defaults?.models?.chat, entry?.models?.chat));
|
|
62
|
-
const globalDefault = getAgentDefaultModelRef(config);
|
|
63
|
-
const primaryModelRef = primaryFromMerged?.trim() || globalDefault;
|
|
64
|
-
const disable = mergeDisableLists(defaults?.tools?.disable, entry?.tools?.disable);
|
|
65
|
-
const params = {
|
|
66
|
-
...defaults?.params,
|
|
67
|
-
...entry?.params
|
|
68
|
-
};
|
|
34
|
+
const manifest = resolveEffectiveAgentManifestForAgent(config, agentId);
|
|
35
|
+
const defaultModel = manifest.models.roles[manifest.models.defaultRole]?.model;
|
|
36
|
+
const deniedTools = Object.entries(manifest.tools.builtin).filter(([, policy]) => policy.mode === "deny").map(([name]) => name);
|
|
37
|
+
const skillsAllowlist = manifest.skills.mode === "allowlist" ? [...manifest.skills.allow ?? []] : void 0;
|
|
69
38
|
return {
|
|
70
|
-
agentId:
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
tools: { disable },
|
|
80
|
-
params
|
|
39
|
+
agentId: manifest.id,
|
|
40
|
+
manifest,
|
|
41
|
+
resolvedWorkspacePath: resolveAgentWorkspaceDir(config, manifest.id),
|
|
42
|
+
primaryModelRef: defaultModel?.trim() || void 0,
|
|
43
|
+
fallbacks: [],
|
|
44
|
+
systemPromptOverride: manifest.prompt?.customInstructions,
|
|
45
|
+
skillsAllowlist,
|
|
46
|
+
tools: { denied: new Set(deniedTools) },
|
|
47
|
+
params: {}
|
|
81
48
|
};
|
|
82
49
|
}
|
|
83
50
|
function resolveEffectiveAgentProfileForSession(config, sessionKey) {
|
|
84
51
|
return resolveEffectiveAgentProfile(config, extractProfileAgentId(sessionKey, config));
|
|
85
52
|
}
|
|
86
53
|
//#endregion
|
|
87
|
-
export { extractProfileAgentId, resolveAgentWorkspaceDir, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession };
|
|
54
|
+
export { extractProfileAgentId, resolveAgentWorkspaceDir, resolveEffectiveAgentManifestForAgent, resolveEffectiveAgentManifestForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession };
|
|
88
55
|
|
|
89
56
|
//# sourceMappingURL=agent-profile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-profile.js","names":[],"sources":["../../../src/config/agent-profile.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"agent-profile.js","names":[],"sources":["../../../src/config/agent-profile.ts"],"sourcesContent":["import { resolveEffectiveAgentManifest, type EffectiveAgentManifest } from '../agent-manifest/index.js';\nimport { normalizeAgentId, resolveAgentWorkspaceDir } from '../agent/agent-scope.js';\nimport type { ThinkLevel, ReasoningLevel, VerboseLevel } from '../agent/transcript/thinking-types.js';\nimport { agentExists, getDefaultAgentId } from '../routing/resolve-route.js';\nimport { parseSessionKey } from '../routing/session-key.js';\nimport type { Config } from './schema.js';\n\nexport { resolveAgentWorkspaceDir } from '../agent/agent-scope.js';\n\nexport interface EffectiveAgentTools {\n denied: Set<string>;\n}\n\nexport interface EffectiveAgentProfile {\n agentId: string;\n manifest: EffectiveAgentManifest;\n resolvedWorkspacePath: string;\n primaryModelRef: string | undefined;\n fallbacks: string[];\n thinkingDefault?: ThinkLevel;\n reasoningDefault?: ReasoningLevel;\n verboseDefault?: VerboseLevel;\n systemPromptOverride?: string;\n skillsAllowlist?: string[];\n tools: EffectiveAgentTools;\n params: Record<string, unknown>;\n}\n\nfunction findAgentManifest(config: Config, agentId: string) {\n const id = normalizeAgentId(agentId);\n return config.agents.list.find((agent) => agent.enabled !== false && normalizeAgentId(agent.id) === id);\n}\n\nexport function extractProfileAgentId(sessionKey: string | undefined | null, config: Config): string {\n const parsed = parseSessionKey(sessionKey ?? '');\n if (!parsed) {\n return getDefaultAgentId(config);\n }\n const aid = parsed.agentId;\n if (aid === 'subagent' || aid.startsWith('subagent:')) {\n return getDefaultAgentId(config);\n }\n if (!agentExists(aid, config)) {\n return getDefaultAgentId(config);\n }\n return aid.toLowerCase();\n}\n\nexport function resolveEffectiveAgentManifestForAgent(config: Config, agentId: string): EffectiveAgentManifest {\n const agent = findAgentManifest(config, agentId) ?? findAgentManifest(config, getDefaultAgentId(config));\n if (!agent) {\n throw new Error(`No enabled agent manifest found for \"${agentId}\"`);\n }\n return resolveEffectiveAgentManifest({\n agent,\n presets: config.agents.capabilityPresets,\n }).manifest;\n}\n\nexport function resolveEffectiveAgentManifestForSession(\n config: Config,\n sessionKey: string | undefined | null,\n): EffectiveAgentManifest {\n return resolveEffectiveAgentManifestForAgent(config, extractProfileAgentId(sessionKey, config));\n}\n\nexport function resolveEffectiveAgentProfile(config: Config, agentId: string): EffectiveAgentProfile {\n const manifest = resolveEffectiveAgentManifestForAgent(config, agentId);\n const defaultModel = manifest.models.roles[manifest.models.defaultRole]?.model;\n const deniedTools = Object.entries(manifest.tools.builtin)\n .filter(([, policy]) => policy.mode === 'deny')\n .map(([name]) => name);\n const skillsAllowlist = manifest.skills.mode === 'allowlist' ? [...(manifest.skills.allow ?? [])] : undefined;\n\n return {\n agentId: manifest.id,\n manifest,\n resolvedWorkspacePath: resolveAgentWorkspaceDir(config, manifest.id),\n primaryModelRef: defaultModel?.trim() || undefined,\n fallbacks: [],\n systemPromptOverride: manifest.prompt?.customInstructions,\n skillsAllowlist,\n tools: { denied: new Set(deniedTools) },\n params: {},\n };\n}\n\nexport function resolveEffectiveAgentProfileForSession(\n config: Config,\n sessionKey: string | undefined | null,\n): EffectiveAgentProfile {\n return resolveEffectiveAgentProfile(config, extractProfileAgentId(sessionKey, config));\n}\n"],"mappings":";;;;;;kBACqF;oBAER;kBACjB;AAwB5D,SAAS,kBAAkB,QAAgB,SAAiB;CAC1D,MAAM,KAAK,iBAAiB,QAAQ;AACpC,QAAO,OAAO,OAAO,KAAK,MAAM,UAAU,MAAM,YAAY,SAAS,iBAAiB,MAAM,GAAG,KAAK,GAAG;;AAGzG,SAAgB,sBAAsB,YAAuC,QAAwB;CACnG,MAAM,SAAS,gBAAgB,cAAc,GAAG;AAChD,KAAI,CAAC,OACH,QAAO,kBAAkB,OAAO;CAElC,MAAM,MAAM,OAAO;AACnB,KAAI,QAAQ,cAAc,IAAI,WAAW,YAAY,CACnD,QAAO,kBAAkB,OAAO;AAElC,KAAI,CAAC,YAAY,KAAK,OAAO,CAC3B,QAAO,kBAAkB,OAAO;AAElC,QAAO,IAAI,aAAa;;AAG1B,SAAgB,sCAAsC,QAAgB,SAAyC;CAC7G,MAAM,QAAQ,kBAAkB,QAAQ,QAAQ,IAAI,kBAAkB,QAAQ,kBAAkB,OAAO,CAAC;AACxG,KAAI,CAAC,MACH,OAAM,IAAI,MAAM,wCAAwC,QAAQ,GAAG;AAErE,QAAO,8BAA8B;EACnC;EACA,SAAS,OAAO,OAAO;EACxB,CAAC,CAAC;;AAGL,SAAgB,wCACd,QACA,YACwB;AACxB,QAAO,sCAAsC,QAAQ,sBAAsB,YAAY,OAAO,CAAC;;AAGjG,SAAgB,6BAA6B,QAAgB,SAAwC;CACnG,MAAM,WAAW,sCAAsC,QAAQ,QAAQ;CACvE,MAAM,eAAe,SAAS,OAAO,MAAM,SAAS,OAAO,cAAc;CACzE,MAAM,cAAc,OAAO,QAAQ,SAAS,MAAM,QAAQ,CACvD,QAAQ,GAAG,YAAY,OAAO,SAAS,OAAO,CAC9C,KAAK,CAAC,UAAU,KAAK;CACxB,MAAM,kBAAkB,SAAS,OAAO,SAAS,cAAc,CAAC,GAAI,SAAS,OAAO,SAAS,EAAE,CAAE,GAAG,KAAA;AAEpG,QAAO;EACL,SAAS,SAAS;EAClB;EACA,uBAAuB,yBAAyB,QAAQ,SAAS,GAAG;EACpE,iBAAiB,cAAc,MAAM,IAAI,KAAA;EACzC,WAAW,EAAE;EACb,sBAAsB,SAAS,QAAQ;EACvC;EACA,OAAO,EAAE,QAAQ,IAAI,IAAI,YAAY,EAAE;EACvC,QAAQ,EAAE;EACX;;AAGH,SAAgB,uCACd,QACA,YACuB;AACvB,QAAO,6BAA6B,QAAQ,sBAAsB,YAAY,OAAO,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { init_agent_scope, listAgentEntries, normalizeAgentId } from "../agent/agent-scope.js";
|
|
2
1
|
import { init_schema, parseModelRef } from "./schema.js";
|
|
2
|
+
import { init_agent_scope, listAgentEntries, normalizeAgentId } from "../agent/agent-scope.js";
|
|
3
3
|
//#region src/config/agent-typed-models.ts
|
|
4
4
|
init_schema();
|
|
5
5
|
init_agent_scope();
|
|
@@ -11,7 +11,6 @@ function rolesToEntries(roles) {
|
|
|
11
11
|
}
|
|
12
12
|
function resolveEffectiveTypedModels(config, agentId) {
|
|
13
13
|
const out = /* @__PURE__ */ new Map();
|
|
14
|
-
for (const modelRole of rolesToEntries(config.agents?.defaults?.models?.roles)) out.set(modelRole.id, modelRole);
|
|
15
14
|
const id = normalizeAgentId(agentId);
|
|
16
15
|
const entry = listAgentEntries(config).find((candidate) => candidate.enabled !== false && normalizeAgentId(candidate.id) === id);
|
|
17
16
|
for (const modelRole of rolesToEntries(entry?.models?.roles)) out.set(modelRole.id, modelRole);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-typed-models.js","names":[],"sources":["../../../src/config/agent-typed-models.ts"],"sourcesContent":["/**\n * Named model roles from
|
|
1
|
+
{"version":3,"file":"agent-typed-models.js","names":[],"sources":["../../../src/config/agent-typed-models.ts"],"sourcesContent":["/**\n * Named model roles from the selected agent manifest.\n */\n\nimport type { AgentTypedModel, Config } from './schema.js';\nimport { parseModelRef } from './schema.js';\nimport { listAgentEntries, normalizeAgentId } from '../agent/agent-scope.js';\n\nexport type { AgentTypedModel };\n\nfunction rolesToEntries(\n roles: Record<string, { model: string; description?: string }> | undefined,\n): AgentTypedModel[] {\n return Object.entries(roles ?? {}).map(([id, role]) => ({\n id,\n ...role,\n }));\n}\n\nexport function resolveEffectiveTypedModels(config: Config, agentId: string): Map<string, AgentTypedModel> {\n const out = new Map<string, AgentTypedModel>();\n const id = normalizeAgentId(agentId);\n const entry = listAgentEntries(config).find(\n (candidate) => candidate.enabled !== false && normalizeAgentId(candidate.id) === id,\n );\n for (const modelRole of rolesToEntries(entry?.models?.roles)) {\n out.set(modelRole.id, modelRole);\n }\n return out;\n}\n\n/** Resolve a typed model id to `provider/model`, or undefined when not configured. */\nexport function resolveTypedModelRef(\n config: Config,\n agentId: string,\n typeId: string,\n): string | undefined {\n const entry = resolveEffectiveTypedModels(config, agentId).get(typeId);\n const ref = entry?.model?.trim();\n return ref || undefined;\n}\n\nfunction parseModelRefInput(ref: string): { directRef?: string; typeId?: string } {\n const trimmed = ref.trim();\n if (!trimmed) {\n return {};\n }\n if (trimmed.includes('/')) {\n return { directRef: trimmed };\n }\n const typeId = trimmed.startsWith('@') ? trimmed.slice(1).trim() : trimmed;\n return typeId ? { typeId } : {};\n}\n\n/**\n * Resolve a model reference: `provider/model`, typed id (`small`), or `@small`.\n * Throws when the ref is invalid or the typed id is unknown.\n */\nexport function resolveModelRef(config: Config, agentId: string, ref: string): string {\n const { directRef, typeId } = parseModelRefInput(ref);\n if (directRef) {\n if (!parseModelRef(directRef)) {\n throw new Error(`model ref must be provider/model format (got '${directRef}')`);\n }\n return directRef;\n }\n if (typeId) {\n const resolved = resolveTypedModelRef(config, agentId, typeId);\n if (resolved) {\n return resolved;\n }\n const available = [...resolveEffectiveTypedModels(config, agentId).keys()];\n const hint =\n available.length > 0 ? ` (available: ${available.join(', ')})` : ' (none configured)';\n throw new Error(`Unknown typed model id '${typeId}' for agent '${agentId}'${hint}`);\n }\n throw new Error('model ref must not be empty');\n}\n"],"mappings":";;;aAK4C;kBACiC;AAI7E,SAAS,eACP,OACmB;AACnB,QAAO,OAAO,QAAQ,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW;EACtD;EACA,GAAG;EACJ,EAAE;;AAGL,SAAgB,4BAA4B,QAAgB,SAA+C;CACzG,MAAM,sBAAM,IAAI,KAA8B;CAC9C,MAAM,KAAK,iBAAiB,QAAQ;CACpC,MAAM,QAAQ,iBAAiB,OAAO,CAAC,MACpC,cAAc,UAAU,YAAY,SAAS,iBAAiB,UAAU,GAAG,KAAK,GAClF;AACD,MAAK,MAAM,aAAa,eAAe,OAAO,QAAQ,MAAM,CAC1D,KAAI,IAAI,UAAU,IAAI,UAAU;AAElC,QAAO;;;AAIT,SAAgB,qBACd,QACA,SACA,QACoB;AAGpB,QAFc,4BAA4B,QAAQ,QAAQ,CAAC,IAAI,OAC9C,EAAE,OAAO,MAAM,IAClB,KAAA;;AAGhB,SAAS,mBAAmB,KAAsD;CAChF,MAAM,UAAU,IAAI,MAAM;AAC1B,KAAI,CAAC,QACH,QAAO,EAAE;AAEX,KAAI,QAAQ,SAAS,IAAI,CACvB,QAAO,EAAE,WAAW,SAAS;CAE/B,MAAM,SAAS,QAAQ,WAAW,IAAI,GAAG,QAAQ,MAAM,EAAE,CAAC,MAAM,GAAG;AACnE,QAAO,SAAS,EAAE,QAAQ,GAAG,EAAE;;;;;;AAOjC,SAAgB,gBAAgB,QAAgB,SAAiB,KAAqB;CACpF,MAAM,EAAE,WAAW,WAAW,mBAAmB,IAAI;AACrD,KAAI,WAAW;AACb,MAAI,CAAC,cAAc,UAAU,CAC3B,OAAM,IAAI,MAAM,iDAAiD,UAAU,IAAI;AAEjF,SAAO;;AAET,KAAI,QAAQ;EACV,MAAM,WAAW,qBAAqB,QAAQ,SAAS,OAAO;AAC9D,MAAI,SACF,QAAO;EAET,MAAM,YAAY,CAAC,GAAG,4BAA4B,QAAQ,QAAQ,CAAC,MAAM,CAAC;EAC1E,MAAM,OACJ,UAAU,SAAS,IAAI,gBAAgB,UAAU,KAAK,KAAK,CAAC,KAAK;AACnE,QAAM,IAAI,MAAM,2BAA2B,OAAO,eAAe,QAAQ,GAAG,OAAO;;AAErF,OAAM,IAAI,MAAM,8BAA8B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getTailnetIPv4Sync } from "../infra/tailscale.js";
|
|
2
2
|
import { isLoopbackHost } from "../gateway/host.js";
|
|
3
|
-
import { existsSync } from "node:fs";
|
|
4
3
|
import net from "node:net";
|
|
4
|
+
import { existsSync } from "node:fs";
|
|
5
5
|
//#region src/config/gateway-bind.ts
|
|
6
6
|
function resolveGatewayBindMode(cfg, bindOverride) {
|
|
7
7
|
if (bindOverride) return bindOverride;
|
package/dist/src/config/index.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema } from "../../extensions/telegram/src/config-schema.js";
|
|
2
|
+
import { WeixinAccountConfigSchema, WeixinConfigSchema } from "../../extensions/weixin/src/config-schema.js";
|
|
3
|
+
import { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigSchema, ConnectorsConfigSchema, CronConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultModelRef, init_schema, parseModelRef } from "./schema.js";
|
|
4
|
+
import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
|
|
2
5
|
import { ENV_VARS, XOPC_DB_FILENAME, resolveHomeDir, resolveStateDir, resolveXopcDatabasePath } from "./paths-state.js";
|
|
3
6
|
import { expandWorkspacePathString, init_workspace_path, normalizeWorkspaceDir, resolveWorkspaceRoot } from "./workspace-path.js";
|
|
4
7
|
import { resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
|
|
5
8
|
import { resolveAgentDir as resolveAgentDir$1, resolveAgentHomeDir as resolveAgentHomeDir$1, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
|
|
9
|
+
import { extractProfileAgentId, resolveEffectiveAgentManifestForAgent, resolveEffectiveAgentManifestForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
|
|
6
10
|
import { FILENAMES, WORKSPACE_FILES, existsSync, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveCronDir, resolveCronJobsPath, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
|
|
7
|
-
import { CustomModelSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
|
|
8
|
-
import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema } from "../../extensions/telegram/src/config-schema.js";
|
|
9
|
-
import { WeixinAccountConfigSchema, WeixinConfigSchema } from "../../extensions/weixin/src/config-schema.js";
|
|
10
|
-
import { AgentConfigSchema, AgentDefaultsSchema, AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigSchema, ConnectorsConfigSchema, CronConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultModelRef, init_schema, parseModelRef } from "./schema.js";
|
|
11
11
|
import { init_loader, loadConfig, saveConfig } from "./loader.js";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
12
|
+
import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
|
|
13
|
+
import { CustomModelSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
|
|
14
14
|
import { canonicalizeConfiguredMcpServer, isKnownCliMcpTypeAlias, normalizeConfiguredMcpServers, resolveXopcMcpTransportAlias } from "./mcp-config-normalize.js";
|
|
15
15
|
import { formatThinkingLevels, listThinkingLevels, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, thinkLevelToNumber } from "../agent/transcript/thinking-types.js";
|
|
16
16
|
import { getWorkspacePath } from "./workspace-path-helpers.js";
|
|
@@ -27,6 +27,6 @@ init_workspace_path();
|
|
|
27
27
|
init_models_json();
|
|
28
28
|
init_resolve_config_value();
|
|
29
29
|
//#endregion
|
|
30
|
-
export {
|
|
30
|
+
export { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BASE_RELOAD_RULES, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigHotReloader, ConfigSchema, ConnectorsConfigSchema, CronConfigSchema, CustomModelSchema, ENV_VARS, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, FILENAMES, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelOverrideSchema, ModelsDevConfigSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProfileManager, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, VercelGatewayRoutingSchema, WORKSPACE_FILES, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WeixinAccountConfigSchema, WeixinConfigSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, XOPC_DB_FILENAME, applyConfigOverrides, buildReloadPlan, canonicalizeConfiguredMcpServer, clearConfigValueCache, createProfile, deleteProfile, diffConfigPaths, existsSync, expandWorkspacePathString, extractProfileAgentId, formatThinkingLevels, getAgentDefaultModelRef, getAllowedCommands, getCacheStats, getConfigOverrides, getCurrentProfile, getDefaultModelValues, resolveModelsJsonPath as getModelsJsonPath, getProfileManager, getProfileNameFromDir, getSwitchCommand, getWorkspacePath, isKnownCliMcpTypeAlias, listAgentProfileMarkdownDirs, listAgentWorkspaceDirs, listProfiles, listThinkingLevels, loadConfig, loadModelsJson, matchReloadRule, modelsJsonExists, normalizeConfiguredMcpServers, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, normalizeWorkspaceDir, parseModelRef, resetConfigOverrides, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveConfigValue, resolveCredentialsDir, resolveCronDir, resolveCronJobsPath, resolveDefaultAgentWorkspaceDir, resolveEffectiveAgentManifestForAgent, resolveEffectiveAgentManifestForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHeaders, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveProfileStateDir, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceRoot, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcDatabasePath, resolveXopcMcpTransportAlias, saveConfig, saveModelsJson, setConfigOverride, testApiKeyResolution, thinkLevelToNumber, unsetConfigOverride, validateModelsConfig };
|
|
31
31
|
|
|
32
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Model-related configuration (documentation only):
|
|
3
3
|
*
|
|
4
|
-
* - Main config: `ConfigSchema` (
|
|
4
|
+
* - Main config: `ConfigSchema` (agent manifests, gateway, channels, etc.).
|
|
5
5
|
* - LLM API keys: `CredentialResolver` / auth profiles (Gateway PATCH /api/config `providers`, CLI onboard).
|
|
6
6
|
* - Overrides and custom providers: `~/.xopc/models.json`.
|
|
7
7
|
*/
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import {
|
|
3
|
-
import { init_paths, resolveConfigPath } from "./paths.js";
|
|
2
|
+
import { ConfigSchema, init_schema } from "./schema.js";
|
|
4
3
|
import { createLogger } from "../utils/logger/index.js";
|
|
5
4
|
import { init_logger } from "../utils/logger.js";
|
|
6
|
-
import {
|
|
5
|
+
import { init_paths, resolveConfigPath } from "./paths.js";
|
|
6
|
+
import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
|
|
7
7
|
import { assertChannelPluginConfigs, init_validate_channel_configs } from "./validate-channel-configs.js";
|
|
8
|
-
import { existsSync, mkdirSync, promises, readFileSync } from "fs";
|
|
9
8
|
import { dirname } from "path";
|
|
9
|
+
import { existsSync, mkdirSync, promises, readFileSync } from "fs";
|
|
10
10
|
import { config } from "dotenv";
|
|
11
11
|
//#region src/config/loader.ts
|
|
12
12
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import { init_write_file_atomic, writeTextAtomicSync } from "../infra/write-file-atomic.js";
|
|
3
2
|
import { init_paths, resolveModelsJsonPath } from "./paths.js";
|
|
4
|
-
import {
|
|
3
|
+
import { init_write_file_atomic, writeTextAtomicSync } from "../infra/write-file-atomic.js";
|
|
5
4
|
import { z } from "zod";
|
|
5
|
+
import { existsSync, readFileSync } from "fs";
|
|
6
6
|
//#region src/config/models-json.ts
|
|
7
7
|
/**
|
|
8
8
|
* Models.json configuration types and schema
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import { join } from "node:path";
|
|
3
2
|
import { homedir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
4
|
//#region src/config/paths-state.ts
|
|
5
5
|
function resolveHomeDir(env = process.env) {
|
|
6
6
|
return env[ENV_VARS.HOME] || homedir();
|
package/dist/src/config/paths.js
CHANGED
|
@@ -2,8 +2,8 @@ import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
|
2
2
|
import { ENV_VARS, XOPC_DB_FILENAME, init_paths_state, resolveHomeDir, resolveStateDir, resolveXopcDatabasePath } from "./paths-state.js";
|
|
3
3
|
import { init_workspace_defaults, resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
|
|
4
4
|
import { init_agent_scope, resolveAgentDir as resolveAgentDir$1, resolveAgentHomeDir as resolveAgentHomeDir$1, resolveAgentProfileDir as resolveAgentProfileDir$1, resolveAgentProfileMarkdownPath as resolveAgentProfileMarkdownPath$1, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
|
|
5
|
-
import { existsSync } from "fs";
|
|
6
5
|
import { dirname, join, sep } from "path";
|
|
6
|
+
import { existsSync } from "fs";
|
|
7
7
|
import { fileURLToPath } from "url";
|
|
8
8
|
//#region src/config/paths.ts
|
|
9
9
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ENV_VARS, init_paths_state, resolveHomeDir } from "./paths-state.js";
|
|
2
2
|
import { createLogger } from "../utils/logger/index.js";
|
|
3
3
|
import { init_logger } from "../utils/logger.js";
|
|
4
|
-
import { existsSync } from "fs";
|
|
5
4
|
import { join } from "path";
|
|
5
|
+
import { existsSync } from "fs";
|
|
6
6
|
import { mkdir, readdir, rm, stat } from "fs/promises";
|
|
7
7
|
//#region src/config/profile.ts
|
|
8
8
|
init_logger();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { init_paths, resolveModelsJsonPath } from "./paths.js";
|
|
2
1
|
import { baseLogger as logger } from "../utils/logger/index.js";
|
|
3
2
|
import { init_logger } from "../utils/logger.js";
|
|
3
|
+
import { init_paths, resolveModelsJsonPath } from "./paths.js";
|
|
4
4
|
import { init_loader, loadConfig } from "./loader.js";
|
|
5
5
|
import { diffConfigPaths } from "./diff.js";
|
|
6
6
|
import { BASE_RELOAD_RULES, buildReloadPlan, matchReloadRule } from "./rules.js";
|
|
@@ -166,7 +166,7 @@ var ConfigHotReloader = class {
|
|
|
166
166
|
if (this.callbacks.onModelsReload) await Promise.resolve(this.callbacks.onModelsReload(newConfig));
|
|
167
167
|
return;
|
|
168
168
|
}
|
|
169
|
-
if (path.startsWith("agents.
|
|
169
|
+
if (path.startsWith("agents.list") || path.startsWith("agents.capabilityPresets")) {
|
|
170
170
|
if (this.callbacks.onAgentDefaultsReload) await Promise.resolve(this.callbacks.onAgentDefaultsReload(newConfig));
|
|
171
171
|
return;
|
|
172
172
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reload.js","names":[],"sources":["../../../src/config/reload.ts"],"sourcesContent":["/**\n * Configuration hot reload manager\n */\n\nimport { watch, type FSWatcher } from 'fs';\nimport { loadConfig } from './loader.js';\nimport type { Config } from './schema.js';\nimport { diffConfigPaths } from './diff.js';\nimport { buildReloadPlan, type ReloadPlan } from './rules.js';\nimport { resolveModelsJsonPath } from './paths.js';\nimport { logger as log } from '../utils/logger.js';\n\nexport interface HotReloadConfig {\n debounceMs: number;\n enabled: boolean;\n}\n\nexport interface ReloadResult {\n success: boolean;\n plan?: ReloadPlan;\n error?: string;\n}\n\n/**\n * Callback types for different reload actions\n */\nexport type ReloadCallback = (newConfig: Config) => void | Promise<void>;\n\nexport interface ReloadCallbacks {\n onModelsReload?: ReloadCallback;\n onAgentDefaultsReload?: ReloadCallback;\n onChannelsReload?: ReloadCallback;\n onCronReload?: ReloadCallback;\n onHeartbeatReload?: ReloadCallback;\n onToolsReload?: ReloadCallback;\n onMcpReload?: ReloadCallback;\n onWebSearchReload?: ReloadCallback;\n /** All `extensions.*` hot paths in one batch (deduplicated in applyReload). */\n onExtensionsReload?: (\n newConfig: Config,\n changedPaths: string[],\n ) => void | Promise<void>;\n onFullRestart?: ReloadCallback;\n}\n\n/**\n * Configuration hot reload manager\n */\nexport class ConfigHotReloader {\n private configPath: string;\n private callbacks: ReloadCallbacks;\n private watcher: FSWatcher | null = null;\n private modelsJsonWatcher: FSWatcher | null = null;\n private debounceTimer: ReturnType<typeof setTimeout> | null = null;\n private currentConfig: Config;\n private debounceMs: number;\n private enabled: boolean;\n\n constructor(\n configPath: string,\n initialConfig: Config,\n callbacks: ReloadCallbacks,\n options: HotReloadConfig = { debounceMs: 300, enabled: true }\n ) {\n this.configPath = configPath;\n this.currentConfig = initialConfig;\n this.callbacks = callbacks;\n this.debounceMs = options.debounceMs;\n this.enabled = options.enabled;\n }\n\n /**\n * Start watching config file for changes\n */\n start(): void {\n if (!this.enabled) {\n log.info('Config hot reload disabled');\n return;\n }\n\n try {\n this.watcher = watch(this.configPath, (eventType) => {\n if (eventType === 'change') {\n this.scheduleReload();\n }\n });\n log.info({ path: this.configPath }, 'Config hot reload enabled');\n } catch (err) {\n log.error({ err }, 'Failed to setup config watcher');\n }\n\n this.startModelsJsonWatcher();\n }\n\n /**\n * Stop watching config file\n */\n async stop(): Promise<void> {\n if (this.watcher) {\n this.watcher.close();\n this.watcher = null;\n }\n if (this.modelsJsonWatcher) {\n this.modelsJsonWatcher.close();\n this.modelsJsonWatcher = null;\n }\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n log.info('Config hot reload stopped');\n }\n\n /**\n * Schedule a reload with debounce\n */\n private scheduleReload(): void {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n this.debounceTimer = setTimeout(() => {\n void this.reload();\n }, this.debounceMs);\n }\n\n /**\n * Watch models.json independently so direct file edits are picked up without restarting.\n * The watcher is best-effort: if the file does not exist yet, it will not be watched.\n */\n private startModelsJsonWatcher(): void {\n const modelsJsonPath = resolveModelsJsonPath();\n try {\n this.modelsJsonWatcher = watch(modelsJsonPath, (eventType) => {\n if (eventType === 'change') {\n this.scheduleModelsJsonReload();\n }\n });\n log.info({ path: modelsJsonPath }, 'models.json hot reload enabled');\n } catch {\n log.debug({ path: modelsJsonPath }, 'models.json not found, skipping watcher');\n }\n }\n\n /**\n * Debounced handler for models.json changes.\n * Calls onModelsReload with the current config so the registry is refreshed.\n */\n private scheduleModelsJsonReload(): void {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n this.debounceTimer = setTimeout(() => {\n log.info('models.json changed on disk — refreshing ModelRegistry');\n if (this.callbacks.onModelsReload) {\n void Promise.resolve(this.callbacks.onModelsReload(this.currentConfig));\n }\n }, this.debounceMs);\n }\n\n /**\n * Reload configuration and apply changes\n */\n async reload(): Promise<ReloadResult> {\n try {\n log.info('Reloading configuration...');\n \n // Load new config\n const newConfig = loadConfig(this.configPath);\n \n // Diff with current config\n const changedPaths = diffConfigPaths(this.currentConfig, newConfig);\n \n if (changedPaths.length === 0) {\n log.debug('No config changes detected');\n return { success: true };\n }\n \n log.info({ changedPaths }, 'Config changes detected');\n \n // Build reload plan\n const plan = buildReloadPlan(changedPaths);\n \n // Apply changes based on plan\n await this.applyReload(plan, newConfig);\n \n // Update current config\n this.currentConfig = newConfig;\n \n return { success: true, plan };\n \n } catch (err) {\n const error = err instanceof Error ? err.message : String(err);\n log.error({ err, configPath: this.configPath, errorMessage: error }, `Config hot reload failed: ${error}`);\n return { success: false, error };\n }\n }\n\n /**\n * Apply reload based on plan\n */\n private async applyReload(plan: ReloadPlan, newConfig: Config): Promise<void> {\n // Handle restart-required changes first\n if (plan.requiresRestart) {\n log.info(\n { restartPaths: plan.restartPaths },\n 'Config changes require gateway restart'\n );\n \n if (this.callbacks.onFullRestart) {\n this.callbacks.onFullRestart(newConfig);\n }\n return;\n }\n\n if (!plan.requiresHotReload) {\n log.info({ plan }, 'Config hot reload completed');\n return;\n }\n\n const isExtensionPath = (p: string) => p === 'extensions' || p.startsWith('extensions.');\n const extensionPaths = plan.hotPaths.filter(isExtensionPath);\n const otherPaths = plan.hotPaths.filter((p) => !isExtensionPath(p));\n\n for (const path of otherPaths) {\n await this.applyHotPath(path, newConfig);\n }\n\n if (extensionPaths.length > 0 && this.callbacks.onExtensionsReload) {\n await Promise.resolve(this.callbacks.onExtensionsReload(newConfig, extensionPaths));\n }\n\n log.info({ plan }, 'Config hot reload completed');\n }\n\n /**\n * Apply a single hot-reloadable path\n */\n private async applyHotPath(path: string, newConfig: Config): Promise<void> {\n if (path.startsWith('models.')) {\n if (this.callbacks.onModelsReload) {\n await Promise.resolve(this.callbacks.onModelsReload(newConfig));\n }\n return;\n }\n\n if (path.startsWith('agents.defaults.')) {\n if (this.callbacks.onAgentDefaultsReload) {\n await Promise.resolve(this.callbacks.onAgentDefaultsReload(newConfig));\n }\n return;\n }\n\n if (path.startsWith('channels.')) {\n if (this.callbacks.onChannelsReload) {\n await Promise.resolve(this.callbacks.onChannelsReload(newConfig));\n }\n return;\n }\n\n if (path.startsWith('cron.')) {\n if (this.callbacks.onCronReload) {\n await Promise.resolve(this.callbacks.onCronReload(newConfig));\n }\n return;\n }\n\n if (path === 'gateway.heartbeat' || path.startsWith('gateway.heartbeat.')) {\n if (this.callbacks.onHeartbeatReload) {\n await Promise.resolve(this.callbacks.onHeartbeatReload(newConfig));\n }\n return;\n }\n\n if (path.startsWith('tools.')) {\n if (this.callbacks.onToolsReload) {\n await Promise.resolve(this.callbacks.onToolsReload(newConfig));\n }\n return;\n }\n\n if (path.startsWith('mcp.') || path === 'mcp') {\n if (this.callbacks.onMcpReload) {\n await Promise.resolve(this.callbacks.onMcpReload(newConfig));\n }\n return;\n }\n\n if (path.startsWith('webSearch.') || path.startsWith('webTools.')) {\n if (this.callbacks.onWebSearchReload) {\n await Promise.resolve(this.callbacks.onWebSearchReload(newConfig));\n }\n return;\n }\n\n log.debug({ path }, 'No handler for hot reload path');\n }\n\n /**\n * Manually trigger a reload\n */\n async triggerReload(): Promise<ReloadResult> {\n return this.reload();\n }\n\n /**\n * Align diff baseline with a freshly loaded config (e.g. Weixin QR wrote token files but JSON unchanged).\n */\n syncCurrentConfig(config: Config): void {\n this.currentConfig = config;\n }\n\n /**\n * Get current config\n */\n getConfig(): Config {\n return this.currentConfig;\n }\n\n /**\n * Check if hot reload is enabled\n */\n isEnabled(): boolean {\n return this.enabled;\n }\n}\n\nexport { diffConfigPaths } from './diff.js';\nexport { buildReloadPlan, matchReloadRule, BASE_RELOAD_RULES } from './rules.js';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reload.js","names":[],"sources":["../../../src/config/reload.ts"],"sourcesContent":["/**\n * Configuration hot reload manager\n */\n\nimport { watch, type FSWatcher } from 'fs';\nimport { loadConfig } from './loader.js';\nimport type { Config } from './schema.js';\nimport { diffConfigPaths } from './diff.js';\nimport { buildReloadPlan, type ReloadPlan } from './rules.js';\nimport { resolveModelsJsonPath } from './paths.js';\nimport { logger as log } from '../utils/logger.js';\n\nexport interface HotReloadConfig {\n debounceMs: number;\n enabled: boolean;\n}\n\nexport interface ReloadResult {\n success: boolean;\n plan?: ReloadPlan;\n error?: string;\n}\n\n/**\n * Callback types for different reload actions\n */\nexport type ReloadCallback = (newConfig: Config) => void | Promise<void>;\n\nexport interface ReloadCallbacks {\n onModelsReload?: ReloadCallback;\n onAgentDefaultsReload?: ReloadCallback;\n onChannelsReload?: ReloadCallback;\n onCronReload?: ReloadCallback;\n onHeartbeatReload?: ReloadCallback;\n onToolsReload?: ReloadCallback;\n onMcpReload?: ReloadCallback;\n onWebSearchReload?: ReloadCallback;\n /** All `extensions.*` hot paths in one batch (deduplicated in applyReload). */\n onExtensionsReload?: (\n newConfig: Config,\n changedPaths: string[],\n ) => void | Promise<void>;\n onFullRestart?: ReloadCallback;\n}\n\n/**\n * Configuration hot reload manager\n */\nexport class ConfigHotReloader {\n private configPath: string;\n private callbacks: ReloadCallbacks;\n private watcher: FSWatcher | null = null;\n private modelsJsonWatcher: FSWatcher | null = null;\n private debounceTimer: ReturnType<typeof setTimeout> | null = null;\n private currentConfig: Config;\n private debounceMs: number;\n private enabled: boolean;\n\n constructor(\n configPath: string,\n initialConfig: Config,\n callbacks: ReloadCallbacks,\n options: HotReloadConfig = { debounceMs: 300, enabled: true }\n ) {\n this.configPath = configPath;\n this.currentConfig = initialConfig;\n this.callbacks = callbacks;\n this.debounceMs = options.debounceMs;\n this.enabled = options.enabled;\n }\n\n /**\n * Start watching config file for changes\n */\n start(): void {\n if (!this.enabled) {\n log.info('Config hot reload disabled');\n return;\n }\n\n try {\n this.watcher = watch(this.configPath, (eventType) => {\n if (eventType === 'change') {\n this.scheduleReload();\n }\n });\n log.info({ path: this.configPath }, 'Config hot reload enabled');\n } catch (err) {\n log.error({ err }, 'Failed to setup config watcher');\n }\n\n this.startModelsJsonWatcher();\n }\n\n /**\n * Stop watching config file\n */\n async stop(): Promise<void> {\n if (this.watcher) {\n this.watcher.close();\n this.watcher = null;\n }\n if (this.modelsJsonWatcher) {\n this.modelsJsonWatcher.close();\n this.modelsJsonWatcher = null;\n }\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n log.info('Config hot reload stopped');\n }\n\n /**\n * Schedule a reload with debounce\n */\n private scheduleReload(): void {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n this.debounceTimer = setTimeout(() => {\n void this.reload();\n }, this.debounceMs);\n }\n\n /**\n * Watch models.json independently so direct file edits are picked up without restarting.\n * The watcher is best-effort: if the file does not exist yet, it will not be watched.\n */\n private startModelsJsonWatcher(): void {\n const modelsJsonPath = resolveModelsJsonPath();\n try {\n this.modelsJsonWatcher = watch(modelsJsonPath, (eventType) => {\n if (eventType === 'change') {\n this.scheduleModelsJsonReload();\n }\n });\n log.info({ path: modelsJsonPath }, 'models.json hot reload enabled');\n } catch {\n log.debug({ path: modelsJsonPath }, 'models.json not found, skipping watcher');\n }\n }\n\n /**\n * Debounced handler for models.json changes.\n * Calls onModelsReload with the current config so the registry is refreshed.\n */\n private scheduleModelsJsonReload(): void {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n this.debounceTimer = setTimeout(() => {\n log.info('models.json changed on disk — refreshing ModelRegistry');\n if (this.callbacks.onModelsReload) {\n void Promise.resolve(this.callbacks.onModelsReload(this.currentConfig));\n }\n }, this.debounceMs);\n }\n\n /**\n * Reload configuration and apply changes\n */\n async reload(): Promise<ReloadResult> {\n try {\n log.info('Reloading configuration...');\n \n // Load new config\n const newConfig = loadConfig(this.configPath);\n \n // Diff with current config\n const changedPaths = diffConfigPaths(this.currentConfig, newConfig);\n \n if (changedPaths.length === 0) {\n log.debug('No config changes detected');\n return { success: true };\n }\n \n log.info({ changedPaths }, 'Config changes detected');\n \n // Build reload plan\n const plan = buildReloadPlan(changedPaths);\n \n // Apply changes based on plan\n await this.applyReload(plan, newConfig);\n \n // Update current config\n this.currentConfig = newConfig;\n \n return { success: true, plan };\n \n } catch (err) {\n const error = err instanceof Error ? err.message : String(err);\n log.error({ err, configPath: this.configPath, errorMessage: error }, `Config hot reload failed: ${error}`);\n return { success: false, error };\n }\n }\n\n /**\n * Apply reload based on plan\n */\n private async applyReload(plan: ReloadPlan, newConfig: Config): Promise<void> {\n // Handle restart-required changes first\n if (plan.requiresRestart) {\n log.info(\n { restartPaths: plan.restartPaths },\n 'Config changes require gateway restart'\n );\n \n if (this.callbacks.onFullRestart) {\n this.callbacks.onFullRestart(newConfig);\n }\n return;\n }\n\n if (!plan.requiresHotReload) {\n log.info({ plan }, 'Config hot reload completed');\n return;\n }\n\n const isExtensionPath = (p: string) => p === 'extensions' || p.startsWith('extensions.');\n const extensionPaths = plan.hotPaths.filter(isExtensionPath);\n const otherPaths = plan.hotPaths.filter((p) => !isExtensionPath(p));\n\n for (const path of otherPaths) {\n await this.applyHotPath(path, newConfig);\n }\n\n if (extensionPaths.length > 0 && this.callbacks.onExtensionsReload) {\n await Promise.resolve(this.callbacks.onExtensionsReload(newConfig, extensionPaths));\n }\n\n log.info({ plan }, 'Config hot reload completed');\n }\n\n /**\n * Apply a single hot-reloadable path\n */\n private async applyHotPath(path: string, newConfig: Config): Promise<void> {\n if (path.startsWith('models.')) {\n if (this.callbacks.onModelsReload) {\n await Promise.resolve(this.callbacks.onModelsReload(newConfig));\n }\n return;\n }\n\n if (path.startsWith('agents.list') || path.startsWith('agents.capabilityPresets')) {\n if (this.callbacks.onAgentDefaultsReload) {\n await Promise.resolve(this.callbacks.onAgentDefaultsReload(newConfig));\n }\n return;\n }\n\n if (path.startsWith('channels.')) {\n if (this.callbacks.onChannelsReload) {\n await Promise.resolve(this.callbacks.onChannelsReload(newConfig));\n }\n return;\n }\n\n if (path.startsWith('cron.')) {\n if (this.callbacks.onCronReload) {\n await Promise.resolve(this.callbacks.onCronReload(newConfig));\n }\n return;\n }\n\n if (path === 'gateway.heartbeat' || path.startsWith('gateway.heartbeat.')) {\n if (this.callbacks.onHeartbeatReload) {\n await Promise.resolve(this.callbacks.onHeartbeatReload(newConfig));\n }\n return;\n }\n\n if (path.startsWith('tools.')) {\n if (this.callbacks.onToolsReload) {\n await Promise.resolve(this.callbacks.onToolsReload(newConfig));\n }\n return;\n }\n\n if (path.startsWith('mcp.') || path === 'mcp') {\n if (this.callbacks.onMcpReload) {\n await Promise.resolve(this.callbacks.onMcpReload(newConfig));\n }\n return;\n }\n\n if (path.startsWith('webSearch.') || path.startsWith('webTools.')) {\n if (this.callbacks.onWebSearchReload) {\n await Promise.resolve(this.callbacks.onWebSearchReload(newConfig));\n }\n return;\n }\n\n log.debug({ path }, 'No handler for hot reload path');\n }\n\n /**\n * Manually trigger a reload\n */\n async triggerReload(): Promise<ReloadResult> {\n return this.reload();\n }\n\n /**\n * Align diff baseline with a freshly loaded config (e.g. Weixin QR wrote token files but JSON unchanged).\n */\n syncCurrentConfig(config: Config): void {\n this.currentConfig = config;\n }\n\n /**\n * Get current config\n */\n getConfig(): Config {\n return this.currentConfig;\n }\n\n /**\n * Check if hot reload is enabled\n */\n isEnabled(): boolean {\n return this.enabled;\n }\n}\n\nexport { diffConfigPaths } from './diff.js';\nexport { buildReloadPlan, matchReloadRule, BASE_RELOAD_RULES } from './rules.js';\n"],"mappings":"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"}
|
package/dist/src/config/rules.js
CHANGED
|
@@ -14,69 +14,19 @@ const BASE_RELOAD_RULES = [
|
|
|
14
14
|
description: "Model merge mode"
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
|
-
prefix: "agents.
|
|
17
|
+
prefix: "agents.list",
|
|
18
18
|
kind: "hot",
|
|
19
|
-
description: "
|
|
19
|
+
description: "Agent manifests"
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
|
-
prefix: "agents.
|
|
22
|
+
prefix: "agents.capabilityPresets",
|
|
23
23
|
kind: "hot",
|
|
24
|
-
description: "
|
|
24
|
+
description: "Agent capability presets"
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
|
-
prefix: "agents.
|
|
27
|
+
prefix: "agents.default",
|
|
28
28
|
kind: "hot",
|
|
29
|
-
description: "
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
prefix: "agents.defaults.temperature",
|
|
33
|
-
kind: "hot",
|
|
34
|
-
description: "Temperature"
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
prefix: "agents.defaults.maxToolIterations",
|
|
38
|
-
kind: "hot",
|
|
39
|
-
description: "Max tool iterations"
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
prefix: "agents.defaults.compaction",
|
|
43
|
-
kind: "hot",
|
|
44
|
-
description: "Compaction settings"
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
prefix: "agents.defaults.pruning",
|
|
48
|
-
kind: "hot",
|
|
49
|
-
description: "Pruning settings"
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
prefix: "agents.defaults.webExtract",
|
|
53
|
-
kind: "hot",
|
|
54
|
-
description: "Web extract model and limits"
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
prefix: "agents.defaults.browser",
|
|
58
|
-
kind: "hot",
|
|
59
|
-
description: "Browser automation (Playwright) tools"
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
prefix: "agents.defaults.delegate",
|
|
63
|
-
kind: "hot",
|
|
64
|
-
description: "delegate_task sub-agent tool"
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
prefix: "agents.defaults.executeCode",
|
|
68
|
-
kind: "hot",
|
|
69
|
-
description: "execute_code sandbox tool"
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
prefix: "agents.defaults.backgroundReview",
|
|
73
|
-
kind: "hot",
|
|
74
|
-
description: "Post-turn memory/skill nudge + background review"
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
prefix: "agents.defaults.workspace",
|
|
78
|
-
kind: "none",
|
|
79
|
-
description: "Workspace path - no runtime effect"
|
|
29
|
+
description: "Default agent id"
|
|
80
30
|
},
|
|
81
31
|
{
|
|
82
32
|
prefix: "gateway.bind",
|