@xopcai/xopc 0.0.118 → 0.0.120
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 +2 -1
- package/README.zh-CN.md +2 -1
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-dzUrQoeZ.js → agent-avatar-dicebear-APTlX9Sq.js} +1 -1
- package/dist/gateway/static/root/assets/agents-CFW_FS_V.js +2 -0
- package/dist/gateway/static/root/assets/app-management-settings-panel-DTKc5HHT.js +1 -0
- package/dist/gateway/static/root/assets/appearance-settings-BTciFrE9.js +1 -0
- package/dist/gateway/static/root/assets/{apps-page--wMEL00f.js → apps-page-DT52OrbM.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-Cki4SfU2.js → archive-plugin-CiHaUMII.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-D-KnS2Do.js → attachment-load-t4gSrNjL.js} +1 -1
- package/dist/gateway/static/root/assets/automation-suggestion-card-CtysjSoQ.js +1 -0
- package/dist/gateway/static/root/assets/automations-page-B2YvT3ES.js +1 -0
- package/dist/gateway/static/root/assets/{binary-plugins-D2sgvJja.js → binary-plugins-BAbSldW5.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-DIq-4Gvb.js → block-editor-BNr_82xl.js} +28 -28
- package/dist/gateway/static/root/assets/browser-settings-page-BQEXPhDU.js +8 -0
- package/dist/gateway/static/root/assets/capability-presets-api-tzD702Gg.js +1 -0
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-AGhTueAc.js +1 -0
- package/dist/gateway/static/root/assets/channel-recipient-api-DL_KzwGE.js +1 -0
- package/dist/gateway/static/root/assets/channels-settings-DRTutLlN.js +1 -0
- package/dist/gateway/static/root/assets/cn-BQ_8x0bT.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-DneJVuge.js +2 -0
- package/dist/gateway/static/root/assets/cron-expression-B3B1eqnr.js +2 -0
- package/dist/gateway/static/root/assets/dreaming-settings-BEwWA1yf.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-DYu1KaFQ.js → extension-debug-page-Dl2kO0Sf.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-B3W6QwlZ.js → extension-page-DmbLPsx_.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-D7VQ-cxE.js → extension-settings-page-BS2rx40e.js} +1 -1
- package/dist/gateway/static/root/assets/{fetch-B7xDPu-R.js → fetch-B3ME5Eri.js} +1 -1
- package/dist/gateway/static/root/assets/format-cron-label-arqgGlVV.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-config-api-BTBLSeUu.js → gateway-config-api-DI9_BBTo.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-DAFI_T0W.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-CYj9FWCp.js → gateway-startup-retry-CSZQTz6K.js} +1 -1
- package/dist/gateway/static/root/assets/goal-detail-page-DLuz4jC9.js +1 -0
- package/dist/gateway/static/root/assets/{goals-config-api-CQQgzPr3.js → goals-config-api-Bhzqrp2w.js} +1 -1
- package/dist/gateway/static/root/assets/{goals-page-BHitvJAv.js → goals-page-DTAfv9Ft.js} +2 -2
- package/dist/gateway/static/root/assets/goals-settings-CWN2iirQ.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-settings-CkkkHvOi.js +1 -0
- package/dist/gateway/static/root/assets/index-CnjzMw5i.js +191 -0
- package/dist/gateway/static/root/assets/index-E1QinYKp.css +1 -0
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-kMp08SlX.js +1 -0
- package/dist/gateway/static/root/assets/{locale-store-DjbfSsfA.js → locale-store-Ba72bFmP.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-C2Uqvae9.js → logs-page-CDXDlS_W.js} +2 -2
- package/dist/gateway/static/root/assets/{markdown-split-BwOFrJ2E.js → markdown-split-Bc0w40vz.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-Cnz6Q5G6.js → media-plugins-DJ_HvgIy.js} +1 -1
- package/dist/gateway/static/root/assets/messages-CISb1HLv.js +3 -0
- package/dist/gateway/static/root/assets/models-hub-panel-BTwxMIgZ.js +2 -0
- package/dist/gateway/static/root/assets/note-detail-page-BBfOeB0m.js +2 -0
- package/dist/gateway/static/root/assets/{note-image-lightbox-B-Svpmza.js → note-image-lightbox-4zntqpZq.js} +1 -1
- package/dist/gateway/static/root/assets/notes-page-VocWOjoK.js +1 -0
- package/dist/gateway/static/root/assets/{preview-open-alternatives-Bss4TiwP.js → preview-open-alternatives-BbA7sRd_.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CXwjuD_Q.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-BRNjdgKq.js → save-bar-controls-Dividh61.js} +1 -1
- package/dist/gateway/static/root/assets/schedule-field-pRheF2CO.js +1 -0
- package/dist/gateway/static/root/assets/{schema-form-Dub9sy8r.js → schema-form-D6PiPxfr.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-CpcVySQK.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-BVy_TawT.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-BeFLavGi.js → settings-collapsible-section-BMCOfuE_.js} +1 -1
- package/dist/gateway/static/root/assets/settings-form-section-DBkGwpIN.js +1 -0
- package/dist/gateway/static/root/assets/settings-page-CZpNyCWn.js +1 -0
- package/dist/gateway/static/root/assets/settings-page-layout-NxoW5Y57.js +1 -0
- package/dist/gateway/static/root/assets/setup-status-panel-MVHLLu_a.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-C8glrdqe.js → share-preview-page-B0suFCfj.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-C6DBbQGo.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-6hJmhwSn.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-Im1MA0Iw.js +2 -0
- package/dist/gateway/static/root/assets/system-settings-panel-CrmEnyX4.js +1 -0
- package/dist/gateway/static/root/assets/{theme-store-CD2wtgZV.js → theme-store-Bt6vAkSB.js} +1 -1
- package/dist/gateway/static/root/assets/typed-models-lib-BAsGn25g.js +1 -0
- package/dist/gateway/static/root/assets/{use-channel-catalog-DqlWTsDb.js → use-channel-catalog-C7vcAoGb.js} +1 -1
- package/dist/gateway/static/root/assets/user-profile-settings-panel-QAQWGelF.js +1 -0
- package/dist/gateway/static/root/assets/utils-Dl9efgnV.js +1 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-C73IVZeC.js → voice-api-key-field-D-6XueTv.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-player-store-C_ArLJPM.js → voice-player-store-CMC5NOJp.js} +1 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-DVPllR4k.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-B94WISTW.js +18 -0
- package/dist/gateway/static/root/index.html +8 -9
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +4 -5
- package/dist/src/agent/agent-manager.js +4 -8
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/context/workspace-templates/AGENTS.md +3 -2
- package/dist/src/agent/embedded/run-for-session.js +102 -14
- package/dist/src/agent/embedded/run-for-session.js.map +1 -1
- package/dist/src/agent/fallback/candidates.d.ts +0 -8
- package/dist/src/agent/fallback/candidates.js.map +1 -1
- package/dist/src/agent/index.js +1 -1
- package/dist/src/agent/lifecycle/handlers/compaction.d.ts +1 -3
- package/dist/src/agent/lifecycle/handlers/compaction.js +1 -16
- package/dist/src/agent/lifecycle/handlers/compaction.js.map +1 -1
- package/dist/src/agent/lifecycle/progress.d.ts +0 -1
- package/dist/src/agent/lifecycle/progress.js +1 -6
- package/dist/src/agent/lifecycle/progress.js.map +1 -1
- package/dist/src/agent/lifecycle/timeout-wrapper.d.ts +1 -2
- package/dist/src/agent/lifecycle/timeout-wrapper.js +1 -7
- package/dist/src/agent/lifecycle/timeout-wrapper.js.map +1 -1
- package/dist/src/agent/memory/builtin-memory-store.d.ts +1 -1
- package/dist/src/agent/memory/builtin-memory-store.js +1 -1
- package/dist/src/agent/memory/builtin-memory-store.js.map +1 -1
- package/dist/src/agent/memory/builtin-provider.d.ts +2 -2
- package/dist/src/agent/memory/builtin-provider.js +2 -2
- package/dist/src/agent/memory/builtin-provider.js.map +1 -1
- package/dist/src/agent/memory/dreaming/light-sweep.d.ts +0 -7
- package/dist/src/agent/memory/dreaming/light-sweep.js +16 -277
- package/dist/src/agent/memory/dreaming/light-sweep.js.map +1 -1
- package/dist/src/agent/memory/dreaming/rem-patterns.d.ts +1 -1
- package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
- package/dist/src/agent/memory/dreaming/rem-patterns.js.map +1 -1
- package/dist/src/agent/memory/dreaming/short-term-store.d.ts +3 -3
- package/dist/src/agent/memory/dreaming/short-term-store.js +5 -5
- package/dist/src/agent/memory/dreaming/short-term-store.js.map +1 -1
- package/dist/src/agent/memory/dreaming/utils.d.ts +2 -2
- package/dist/src/agent/memory/dreaming/utils.js +2 -2
- package/dist/src/agent/memory/dreaming/utils.js.map +1 -1
- package/dist/src/agent/memory/index.d.ts +0 -2
- package/dist/src/agent/memory/index.js +1 -2
- package/dist/src/agent/middleware/self-verify.d.ts +0 -1
- package/dist/src/agent/middleware/self-verify.js +0 -2
- package/dist/src/agent/middleware/self-verify.js.map +1 -1
- package/dist/src/agent/models/index.d.ts +1 -1
- package/dist/src/agent/models/manager.d.ts +4 -20
- package/dist/src/agent/models/manager.js +9 -126
- package/dist/src/agent/models/manager.js.map +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.d.ts +0 -4
- package/dist/src/agent/orchestration/agent-orchestrator.js +1 -9
- package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
- package/dist/src/agent/prompt/sections/memory-skills.js +11 -10
- package/dist/src/agent/prompt/sections/memory-skills.js.map +1 -1
- package/dist/src/agent/prompt/sections/tooling.js +4 -4
- package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.d.ts +0 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +0 -12
- package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
- package/dist/src/agent/prompt/subagent-context.js +1 -1
- package/dist/src/agent/prompt/subagent-context.js.map +1 -1
- package/dist/src/agent/prompt/types.d.ts +1 -1
- package/dist/src/agent/reply/startup-context.js +6 -105
- package/dist/src/agent/reply/startup-context.js.map +1 -1
- package/dist/src/agent/service.d.ts +1 -12
- package/dist/src/agent/service.js +3 -81
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/service.types.d.ts +2 -2
- package/dist/src/agent/session/session-config-service.d.ts +11 -11
- package/dist/src/agent/session/session-config-service.js +14 -14
- package/dist/src/agent/session/session-config-service.js.map +1 -1
- package/dist/src/agent/session/session-inspector.js +3 -2
- package/dist/src/agent/session/session-inspector.js.map +1 -1
- package/dist/src/agent/starter-agents.js +12 -12
- package/dist/src/agent/starter-agents.js.map +1 -1
- package/dist/src/agent/tools/automation-tool.d.ts +14 -0
- package/dist/src/agent/tools/automation-tool.js +102 -0
- package/dist/src/agent/tools/automation-tool.js.map +1 -0
- package/dist/src/agent/tools/delegate-tool.js +1 -1
- package/dist/src/agent/tools/delegate-tool.js.map +1 -1
- package/dist/src/agent/tools/factory.d.ts +3 -3
- package/dist/src/agent/tools/factory.js +2 -2
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/index.d.ts +1 -1
- package/dist/src/agent/tools/index.js +2 -2
- package/dist/src/agent/tools/memory-tool.js +2 -2
- package/dist/src/agent/tools/memory-tool.js.map +1 -1
- package/dist/src/agent-manifest/resolver.d.ts +1 -0
- package/dist/src/agent-manifest/resolver.js +1 -0
- package/dist/src/agent-manifest/resolver.js.map +1 -1
- package/dist/src/agent-manifest/schema.d.ts +6 -0
- package/dist/src/agent-manifest/schema.js +12 -3
- package/dist/src/agent-manifest/schema.js.map +1 -1
- package/dist/src/ai-assist/text-assist.d.ts +1 -1
- package/dist/src/ai-assist/text-assist.js +56 -0
- package/dist/src/ai-assist/text-assist.js.map +1 -1
- package/dist/src/auth/profiles/store.js.map +1 -1
- package/dist/src/automations/api/routes.d.ts +3 -0
- package/dist/src/automations/api/routes.js +193 -0
- package/dist/src/automations/api/routes.js.map +1 -0
- package/dist/src/automations/domain/index.d.ts +3 -0
- package/dist/src/automations/domain/index.js +3 -0
- package/dist/src/automations/domain/schedule.d.ts +4 -0
- package/dist/src/automations/domain/schedule.js +37 -0
- package/dist/src/automations/domain/schedule.js.map +1 -0
- package/dist/src/automations/domain/types.d.ts +160 -0
- package/dist/src/automations/domain/validation.d.ts +370 -0
- package/dist/src/automations/domain/validation.js +149 -0
- package/dist/src/automations/domain/validation.js.map +1 -0
- package/dist/src/automations/draft/automation-draft-prompt.d.ts +26 -0
- package/dist/src/automations/draft/automation-draft-prompt.js +127 -0
- package/dist/src/automations/draft/automation-draft-prompt.js.map +1 -0
- package/dist/src/automations/draft/automation-draft-service.d.ts +12 -0
- package/dist/src/automations/draft/automation-draft-service.js +135 -0
- package/dist/src/automations/draft/automation-draft-service.js.map +1 -0
- package/dist/src/automations/draft/automation-draft-validator.d.ts +99 -0
- package/dist/src/automations/draft/automation-draft-validator.js +105 -0
- package/dist/src/automations/draft/automation-draft-validator.js.map +1 -0
- package/dist/src/automations/draft/automation-draft.types.d.ts +40 -0
- package/dist/src/automations/draft/index.d.ts +3 -0
- package/dist/src/automations/draft/index.js +3 -0
- package/dist/src/automations/index.d.ts +3 -0
- package/dist/src/automations/index.js +8 -0
- package/dist/src/automations/product-events.d.ts +5 -0
- package/dist/src/automations/product-events.js +21 -0
- package/dist/src/automations/product-events.js.map +1 -0
- package/dist/src/automations/service/action-executor.d.ts +9 -0
- package/dist/src/automations/service/action-executor.js +157 -0
- package/dist/src/automations/service/action-executor.js.map +1 -0
- package/dist/src/automations/service/automation-service.d.ts +54 -0
- package/dist/src/automations/service/automation-service.js +404 -0
- package/dist/src/automations/service/automation-service.js.map +1 -0
- package/dist/src/automations/service/index.d.ts +2 -0
- package/dist/src/automations/service/index.js +3 -0
- package/dist/src/automations/storage/automation-repository.d.ts +6 -0
- package/dist/src/automations/storage/automation-repository.js +61 -0
- package/dist/src/automations/storage/automation-repository.js.map +1 -0
- package/dist/src/automations/storage/automation-run-repository.d.ts +17 -0
- package/dist/src/automations/storage/automation-run-repository.js +130 -0
- package/dist/src/automations/storage/automation-run-repository.js.map +1 -0
- package/dist/src/automations/storage/index.d.ts +2 -0
- package/dist/src/automations/storage/index.js +3 -0
- package/dist/src/channels/plugin-types.d.ts +3 -0
- package/dist/src/chat-commands/builtins/thinking.js.map +1 -1
- package/dist/src/cli/command-catalog.js +0 -39
- package/dist/src/cli/command-catalog.js.map +1 -1
- package/dist/src/cli/command-loaders.js +0 -1
- package/dist/src/cli/command-loaders.js.map +1 -1
- package/dist/src/cli/command-manifest.js +0 -4
- package/dist/src/cli/command-manifest.js.map +1 -1
- package/dist/src/cli/commands/agents.js +7 -6
- package/dist/src/cli/commands/agents.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/doctor/checks/{cron-health.d.ts → migrations.d.ts} +1 -1
- package/dist/src/cli/commands/doctor/checks/migrations.js +40 -0
- package/dist/src/cli/commands/doctor/checks/migrations.js.map +1 -0
- package/dist/src/cli/commands/doctor/flow.js +2 -2
- package/dist/src/cli/commands/doctor/flow.js.map +1 -1
- package/dist/src/cli/commands/gateway/call.js +2 -2
- package/dist/src/cli/commands/gateway/call.js.map +1 -1
- package/dist/src/cli/commands/gateway/run-foreground.js +4 -2
- package/dist/src/cli/commands/gateway/run-foreground.js.map +1 -1
- package/dist/src/cli/commands/init.js +27 -9
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/tui.js +24 -2
- package/dist/src/cli/commands/tui.js.map +1 -1
- package/dist/src/cli/templates.js +3 -2
- package/dist/src/cli/templates.js.map +1 -1
- package/dist/src/cli/utils/init-workspace-core.js +2 -0
- package/dist/src/cli/utils/init-workspace-core.js.map +1 -1
- package/dist/src/commands/agents.config.d.ts +9 -0
- package/dist/src/commands/agents.config.js +40 -2
- package/dist/src/commands/agents.config.js.map +1 -1
- package/dist/src/config/agent-profile.js +4 -3
- package/dist/src/config/agent-profile.js.map +1 -1
- package/dist/src/config/agent-typed-models.js.map +1 -1
- package/dist/src/config/config-surface.d.ts +3 -0
- package/dist/src/config/index.d.ts +0 -1
- package/dist/src/config/index.js +3 -3
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/config/paths.d.ts +0 -9
- package/dist/src/config/paths.js +1 -14
- package/dist/src/config/paths.js.map +1 -1
- package/dist/src/config/profile.js +0 -1
- package/dist/src/config/profile.js.map +1 -1
- package/dist/src/config/rules.js +0 -5
- package/dist/src/config/rules.js.map +1 -1
- package/dist/src/config/schema.d.ts +13 -12
- package/dist/src/config/schema.js +22 -26
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/web-patch.d.ts +0 -12
- package/dist/src/config/web-patch.js +2 -29
- package/dist/src/config/web-patch.js.map +1 -1
- package/dist/src/extensions/api.d.ts +2 -0
- package/dist/src/extensions/api.js +10 -0
- package/dist/src/extensions/api.js.map +1 -1
- package/dist/src/extensions/extension-registry-impl.d.ts +4 -1
- package/dist/src/extensions/extension-registry-impl.js +8 -0
- package/dist/src/extensions/extension-registry-impl.js.map +1 -1
- package/dist/src/extensions/loader.d.ts +3 -3
- package/dist/src/extensions/loader.js +3 -3
- package/dist/src/extensions/loader.js.map +1 -1
- package/dist/src/extensions/sdk/testing.d.ts +2 -0
- package/dist/src/extensions/sdk/testing.js +7 -0
- package/dist/src/extensions/sdk/testing.js.map +1 -1
- package/dist/src/extensions/types/core.d.ts +10 -1
- package/dist/src/extensions/types/index.d.ts +1 -1
- package/dist/src/extensions/types/{phase4.d.ts → registration.d.ts} +2 -2
- package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
- package/dist/src/gateway/agent-builtin-tools.js +1 -1
- package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
- package/dist/src/gateway/agents-admin.d.ts +1 -0
- package/dist/src/gateway/agents-admin.js +13 -15
- package/dist/src/gateway/agents-admin.js.map +1 -1
- package/dist/src/gateway/capability-presets-admin.d.ts +1 -0
- package/dist/src/gateway/capability-presets-admin.js +19 -10
- package/dist/src/gateway/capability-presets-admin.js.map +1 -1
- package/dist/src/gateway/dreaming-automation-reconciler.d.ts +11 -0
- package/dist/src/gateway/dreaming-automation-reconciler.js +105 -0
- package/dist/src/gateway/dreaming-automation-reconciler.js.map +1 -0
- package/dist/src/gateway/heartbeat/service.d.ts +0 -2
- package/dist/src/gateway/heartbeat/service.js +0 -7
- package/dist/src/gateway/heartbeat/service.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +5 -6
- package/dist/src/gateway/hono/lib/config-payload.js +2 -2
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/routes/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.d.ts +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +15 -6
- package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
- package/dist/src/gateway/hono/routes/dreaming.js +27 -37
- package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
- package/dist/src/gateway/hono/routes/home.d.ts +2 -2
- package/dist/src/gateway/hono/routes/home.js +34 -25
- package/dist/src/gateway/hono/routes/home.js.map +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +10 -6
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/migrations.d.ts +3 -0
- package/dist/src/gateway/hono/routes/migrations.js +35 -0
- package/dist/src/gateway/hono/routes/migrations.js.map +1 -0
- package/dist/src/gateway/hono/routes/public-gateway.js +2 -1
- package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
- package/dist/src/gateway/hono/routes/sessions.js +14 -0
- package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
- package/dist/src/gateway/run-loop.js +2 -0
- package/dist/src/gateway/run-loop.js.map +1 -1
- package/dist/src/gateway/security/operator-scopes.js +5 -1
- package/dist/src/gateway/security/operator-scopes.js.map +1 -1
- package/dist/src/gateway/service/config-coordinator.d.ts +4 -4
- package/dist/src/gateway/service/config-coordinator.js +14 -8
- package/dist/src/gateway/service/config-coordinator.js.map +1 -1
- package/dist/src/gateway/service/sessions-api.d.ts +2 -1
- package/dist/src/gateway/service/sessions-api.js +6 -1
- package/dist/src/gateway/service/sessions-api.js.map +1 -1
- package/dist/src/gateway/service.d.ts +7 -3
- package/dist/src/gateway/service.js +61 -27
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/goals/goal-service.js +45 -4
- package/dist/src/goals/goal-service.js.map +1 -1
- package/dist/src/migrations/config/default-capability-preset.d.ts +10 -0
- package/dist/src/migrations/config/default-capability-preset.js +135 -0
- package/dist/src/migrations/config/default-capability-preset.js.map +1 -0
- package/dist/src/migrations/index.d.ts +4 -0
- package/dist/src/migrations/index.js +4 -0
- package/dist/src/migrations/registry.d.ts +8 -0
- package/dist/src/migrations/registry.js +18 -0
- package/dist/src/migrations/registry.js.map +1 -0
- package/dist/src/migrations/runner.d.ts +17 -0
- package/dist/src/migrations/runner.js +191 -0
- package/dist/src/migrations/runner.js.map +1 -0
- package/dist/src/migrations/types.d.ts +34 -0
- package/dist/src/notes/service.js +24 -1
- package/dist/src/notes/service.js.map +1 -1
- package/dist/src/providers/model-registry.d.ts +0 -1
- package/dist/src/providers/model-registry.js +0 -3
- package/dist/src/providers/model-registry.js.map +1 -1
- package/dist/src/routing/resolve-tui-session-key.d.ts +3 -0
- package/dist/src/routing/resolve-tui-session-key.js +14 -3
- package/dist/src/routing/resolve-tui-session-key.js.map +1 -1
- package/dist/src/session/transcript-outline.d.ts +47 -0
- package/dist/src/session/transcript-outline.js +481 -0
- package/dist/src/session/transcript-outline.js.map +1 -0
- package/dist/src/storage/sqlite/index.d.ts +0 -2
- package/dist/src/storage/sqlite/index.js +1 -3
- package/dist/src/storage/sqlite/migrations/016_automations.sql +47 -0
- package/dist/src/storage/sqlite/migrations/017_automation_run_events.sql +14 -0
- package/dist/src/storage/sqlite/migrations/018_automation_safety.sql +1 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/row-mappers.js +3 -1
- package/dist/src/storage/sqlite/row-mappers.js.map +1 -1
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/schema.sql +56 -46
- package/dist/src/tui/backends/embedded-backend.d.ts +6 -0
- package/dist/src/tui/backends/embedded-backend.js +19 -9
- package/dist/src/tui/backends/embedded-backend.js.map +1 -1
- package/dist/src/tui/backends/gateway-sse-backend.d.ts +3 -0
- package/dist/src/tui/backends/gateway-sse-backend.js +14 -0
- package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
- package/dist/src/tui/tui-backend.d.ts +4 -0
- package/dist/src/tui/tui-commands.d.ts +5 -0
- package/dist/src/tui/tui-commands.js +43 -0
- package/dist/src/tui/tui-commands.js.map +1 -1
- package/dist/src/tui/tui-transcript-tree.d.ts +1 -1
- package/dist/src/tui/tui-transcript-tree.js +17 -257
- package/dist/src/tui/tui-transcript-tree.js.map +1 -1
- package/dist/src/tui/tui-types.d.ts +2 -0
- package/dist/src/tui/tui-types.js.map +1 -1
- package/dist/src/tui/tui.js +7 -2
- package/dist/src/tui/tui.js.map +1 -1
- package/dist/src/workflows/domain/index.js +1 -1
- package/dist/src/workflows/domain/run.d.ts +7 -7
- package/dist/src/workflows/domain/run.js.map +1 -1
- package/dist/src/workflows/index.js +2 -2
- package/dist/src/workflows/service/workflow-run-service.d.ts +2 -0
- package/dist/src/workflows/service/workflow-run-service.js +31 -9
- package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
- package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -1
- package/package.json +4 -2
- package/dist/gateway/static/root/assets/agents-BCxZbkOw.js +0 -2
- package/dist/gateway/static/root/assets/app-management-settings-panel-bxYJVJpx.js +0 -1
- package/dist/gateway/static/root/assets/appearance-settings-BCIykXlI.js +0 -1
- package/dist/gateway/static/root/assets/browser-settings-page-DRhKdn81.js +0 -8
- package/dist/gateway/static/root/assets/capability-presets-api-CorhiHlg.js +0 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-qFx9Jtce.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-BAwAkqIA.js +0 -1
- package/dist/gateway/static/root/assets/cn-JdwAhgNB.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-BQLcfitM.js +0 -2
- package/dist/gateway/static/root/assets/createLucideIcon-DPHK1VkS.js +0 -1
- package/dist/gateway/static/root/assets/cron-api-qGwmL-24.js +0 -1
- package/dist/gateway/static/root/assets/cron-dreaming-jobs-nCMWCf0p.js +0 -1
- package/dist/gateway/static/root/assets/cron-page-BBWMAj8-.js +0 -3
- package/dist/gateway/static/root/assets/dreaming-settings-Dw89Obml.js +0 -1
- package/dist/gateway/static/root/assets/format-cron-label-BsotZDO5.js +0 -2
- package/dist/gateway/static/root/assets/format-interval-label-BzxafKxR.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-Cmwy58rS.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-l7mu5GWX.js +0 -1
- package/dist/gateway/static/root/assets/goals-settings-CYVY4NGp.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-config-api-DriO_CN9.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-CUQTKxg7.js +0 -1
- package/dist/gateway/static/root/assets/index-C17Tsd_b.css +0 -1
- package/dist/gateway/static/root/assets/index-Cc41r16l.js +0 -191
- package/dist/gateway/static/root/assets/interval-presets-DFPCKW_W.js +0 -1
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-CcVcqstx.js +0 -1
- package/dist/gateway/static/root/assets/messages-B1iSKjiw.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-panel-BfLfcta8.js +0 -2
- package/dist/gateway/static/root/assets/note-detail-page-BjwOQBfT.js +0 -2
- package/dist/gateway/static/root/assets/notes-page-DktdBiwB.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-rfVx96fq.js +0 -1
- package/dist/gateway/static/root/assets/schedule-field-CUCKODde.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-DbtMFuuH.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-5re5gAnP.js +0 -1
- package/dist/gateway/static/root/assets/settings-form-section-dmyaPOTG.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-D-WMyLlj.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-Cl-DEJAU.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-CyPVvbLt.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-CleTH1oz.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-Ck8hdXqR.js +0 -2
- package/dist/gateway/static/root/assets/system-settings-panel-DI-LN_8G.js +0 -1
- package/dist/gateway/static/root/assets/typed-models-lib-kX9duch4.js +0 -1
- package/dist/gateway/static/root/assets/user-profile-settings-panel-B-UFPMXy.js +0 -1
- package/dist/gateway/static/root/assets/utils-Dm0hKalR.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-BtFGp2y_.js +0 -18
- package/dist/src/agent/fallback/error.d.ts +0 -22
- package/dist/src/agent/fallback/error.js +0 -32
- package/dist/src/agent/fallback/error.js.map +0 -1
- package/dist/src/agent/fallback/index.d.ts +0 -5
- package/dist/src/agent/fallback/index.js +0 -9
- package/dist/src/agent/fallback/index.js.map +0 -1
- package/dist/src/agent/memory/memory-flush.d.ts +0 -27
- package/dist/src/agent/memory/memory-flush.js +0 -124
- package/dist/src/agent/memory/memory-flush.js.map +0 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.d.ts +0 -29
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js +0 -76
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js.map +0 -1
- package/dist/src/agent/service/reconcile-dreaming-cron.d.ts +0 -6
- package/dist/src/agent/service/reconcile-dreaming-cron.js +0 -84
- package/dist/src/agent/service/reconcile-dreaming-cron.js.map +0 -1
- package/dist/src/agent/tools/cronjob-tool.d.ts +0 -29
- package/dist/src/agent/tools/cronjob-tool.js +0 -274
- package/dist/src/agent/tools/cronjob-tool.js.map +0 -1
- package/dist/src/cli/commands/cron-cli.d.ts +0 -2
- package/dist/src/cli/commands/cron-cli.js +0 -15
- package/dist/src/cli/commands/cron-cli.js.map +0 -1
- package/dist/src/cli/commands/cron.d.ts +0 -4
- package/dist/src/cli/commands/cron.js +0 -188
- package/dist/src/cli/commands/cron.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/cron-health.js +0 -35
- package/dist/src/cli/commands/doctor/checks/cron-health.js.map +0 -1
- package/dist/src/cron/execution-types.d.ts +0 -42
- package/dist/src/cron/executor.d.ts +0 -67
- package/dist/src/cron/executor.js +0 -669
- package/dist/src/cron/executor.js.map +0 -1
- package/dist/src/cron/index.d.ts +0 -7
- package/dist/src/cron/index.js +0 -7
- package/dist/src/cron/job-content.d.ts +0 -5
- package/dist/src/cron/job-content.js +0 -15
- package/dist/src/cron/job-content.js.map +0 -1
- package/dist/src/cron/run-log-store.d.ts +0 -12
- package/dist/src/cron/run-log-store.js +0 -58
- package/dist/src/cron/run-log-store.js.map +0 -1
- package/dist/src/cron/schedule.d.ts +0 -10
- package/dist/src/cron/schedule.js +0 -85
- package/dist/src/cron/schedule.js.map +0 -1
- package/dist/src/cron/service.d.ts +0 -58
- package/dist/src/cron/service.js +0 -419
- package/dist/src/cron/service.js.map +0 -1
- package/dist/src/cron/types.d.ts +0 -183
- package/dist/src/cron/validation.d.ts +0 -500
- package/dist/src/cron/validation.js +0 -192
- package/dist/src/cron/validation.js.map +0 -1
- package/dist/src/cron/workflow-run-completion.d.ts +0 -23
- package/dist/src/cron/workflow-run-completion.js +0 -72
- package/dist/src/cron/workflow-run-completion.js.map +0 -1
- package/dist/src/extensions/types/phase4.js +0 -1
- package/dist/src/gateway/hono/routes/cron.d.ts +0 -3
- package/dist/src/gateway/hono/routes/cron.js +0 -109
- package/dist/src/gateway/hono/routes/cron.js.map +0 -1
- package/dist/src/storage/sqlite/cron-job-repository.d.ts +0 -6
- package/dist/src/storage/sqlite/cron-job-repository.js +0 -70
- package/dist/src/storage/sqlite/cron-job-repository.js.map +0 -1
- package/dist/src/storage/sqlite/cron-run-repository.d.ts +0 -5
- package/dist/src/storage/sqlite/cron-run-repository.js +0 -96
- package/dist/src/storage/sqlite/cron-run-repository.js.map +0 -1
- /package/dist/src/{cron → automations/domain}/types.js +0 -0
- /package/dist/src/{config/defaults.d.ts → automations/draft/automation-draft.types.js} +0 -0
- /package/dist/src/{config/defaults.js → extensions/types/registration.js} +0 -0
- /package/dist/src/{cron/execution-types.js → migrations/types.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","names":[],"sources":["../../../src/cli/templates.ts"],"sourcesContent":["/**\n * Workspace template files for onboarding.\n * Templates are stored in docs/reference/templates/ and loaded at runtime.\n */\n\nimport { readFileSync, existsSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/** Profile Markdown template file names (seeded into `agents/<id>/profile/`). */\nexport const TEMPLATE_FILES = [\n 'SOUL.md',\n 'IDENTITY.md',\n 'TOOLS.md',\n 'AGENTS.md',\n 'HEARTBEAT.md',\n 'MEMORY.md',\n] as const;\n\nexport type TemplateFile = (typeof TEMPLATE_FILES)[number];\n\n/** Alias for profile Markdown templates used by seed helpers. */\nexport const PROFILE_MARKDOWN_TEMPLATE_FILES: readonly TemplateFile[] = [...TEMPLATE_FILES];\n\n/** Template content cache */\nconst templateCache = new Map<TemplateFile, string>();\n\n/**\n * Get the path to template files.\n * Uses environment or looks in project root.\n */\nfunction getTemplatePath(): string {\n // Use environment to determine path\n const envPath = process.env.XOPC_TEMPLATE_PATH;\n if (envPath && existsSync(envPath)) {\n return envPath;\n }\n\n // Default: look in project root docs/reference/templates\n // Works for both development (src/cli/) and production (dist/cli/)\n const projectRoot = join(__dirname, '../../..');\n const defaultPath = join(projectRoot, 'docs/reference/templates');\n \n if (existsSync(defaultPath)) {\n return defaultPath;\n }\n\n // Fallback: return default (will fail gracefully)\n return defaultPath;\n}\n\n/**\n * Load a template file. Caches results for repeated access.\n */\nexport function loadTemplate(name: TemplateFile): string {\n // Return cached version if available\n if (templateCache.has(name)) {\n return templateCache.get(name)!;\n }\n\n const templatePath = join(getTemplatePath(), name);\n \n try {\n if (existsSync(templatePath)) {\n const content = readFileSync(templatePath, 'utf-8');\n templateCache.set(name, content);\n return content;\n }\n } catch {\n // Fall through to fallback\n }\n\n // Fallback: return minimal default if template is missing\n console.warn(`Warning: Template ${name} not found, using fallback`);\n return getFallbackTemplate(name);\n}\n\n/**\n * Load all templates as a record.\n */\nexport function loadAllTemplates(): Record<TemplateFile, string> {\n const result = {} as Record<TemplateFile, string>;\n for (const name of TEMPLATE_FILES) {\n result[name] = loadTemplate(name);\n }\n return result;\n}\n\n/**\n * Clear the template cache (useful for testing).\n */\nexport function clearTemplateCache(): void {\n templateCache.clear();\n}\n\n/** Minimal fallback templates in case files are missing */\nexport function getFallbackTemplate(name: TemplateFile): string {\n const fallbacks: Record<TemplateFile, string> = {\n 'AGENTS.md': `# AGENTS.md - Your Workspace\n\nThis folder is home. Treat it that way.\n\n## Session Startup\n\nUse runtime-provided startup context first. Bootstrap files (global user profile, SOUL, MEMORY, etc.) are injected by xopc on /new and /reset.\n\nDo not manually reread startup files unless the user asks or the provided context is incomplete.\n\n## Red Lines\n\n- Don't exfiltrate private data\n- Don't run destructive commands without asking\n- When in doubt, ask\n\n## Memory\n\n-
|
|
1
|
+
{"version":3,"file":"templates.js","names":[],"sources":["../../../src/cli/templates.ts"],"sourcesContent":["/**\n * Workspace template files for onboarding.\n * Templates are stored in docs/reference/templates/ and loaded at runtime.\n */\n\nimport { readFileSync, existsSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/** Profile Markdown template file names (seeded into `agents/<id>/profile/`). */\nexport const TEMPLATE_FILES = [\n 'SOUL.md',\n 'IDENTITY.md',\n 'TOOLS.md',\n 'AGENTS.md',\n 'HEARTBEAT.md',\n 'MEMORY.md',\n] as const;\n\nexport type TemplateFile = (typeof TEMPLATE_FILES)[number];\n\n/** Alias for profile Markdown templates used by seed helpers. */\nexport const PROFILE_MARKDOWN_TEMPLATE_FILES: readonly TemplateFile[] = [...TEMPLATE_FILES];\n\n/** Template content cache */\nconst templateCache = new Map<TemplateFile, string>();\n\n/**\n * Get the path to template files.\n * Uses environment or looks in project root.\n */\nfunction getTemplatePath(): string {\n // Use environment to determine path\n const envPath = process.env.XOPC_TEMPLATE_PATH;\n if (envPath && existsSync(envPath)) {\n return envPath;\n }\n\n // Default: look in project root docs/reference/templates\n // Works for both development (src/cli/) and production (dist/cli/)\n const projectRoot = join(__dirname, '../../..');\n const defaultPath = join(projectRoot, 'docs/reference/templates');\n \n if (existsSync(defaultPath)) {\n return defaultPath;\n }\n\n // Fallback: return default (will fail gracefully)\n return defaultPath;\n}\n\n/**\n * Load a template file. Caches results for repeated access.\n */\nexport function loadTemplate(name: TemplateFile): string {\n // Return cached version if available\n if (templateCache.has(name)) {\n return templateCache.get(name)!;\n }\n\n const templatePath = join(getTemplatePath(), name);\n \n try {\n if (existsSync(templatePath)) {\n const content = readFileSync(templatePath, 'utf-8');\n templateCache.set(name, content);\n return content;\n }\n } catch {\n // Fall through to fallback\n }\n\n // Fallback: return minimal default if template is missing\n console.warn(`Warning: Template ${name} not found, using fallback`);\n return getFallbackTemplate(name);\n}\n\n/**\n * Load all templates as a record.\n */\nexport function loadAllTemplates(): Record<TemplateFile, string> {\n const result = {} as Record<TemplateFile, string>;\n for (const name of TEMPLATE_FILES) {\n result[name] = loadTemplate(name);\n }\n return result;\n}\n\n/**\n * Clear the template cache (useful for testing).\n */\nexport function clearTemplateCache(): void {\n templateCache.clear();\n}\n\n/** Minimal fallback templates in case files are missing */\nexport function getFallbackTemplate(name: TemplateFile): string {\n const fallbacks: Record<TemplateFile, string> = {\n 'AGENTS.md': `# AGENTS.md - Your Workspace\n\nThis folder is home. Treat it that way.\n\n## Session Startup\n\nUse runtime-provided startup context first. Bootstrap files (global user profile, SOUL, MEMORY, etc.) are injected by xopc on /new and /reset.\n\nDo not manually reread startup files unless the user asks or the provided context is incomplete.\n\n## Red Lines\n\n- Don't exfiltrate private data\n- Don't run destructive commands without asking\n- When in doubt, ask\n\n## Memory\n\n- Use runtime memory tools for recall.\n- Use curated memory for durable facts and preferences when available.\n- Cite only memory sources that a tool actually returns.\n\nWrite what matters. Text > Brain.\n`,\n 'SOUL.md': `# SOUL.md - Who You Are\n\n_You're not a chatbot. You're becoming someone._\n\n## Core Truths\n\n- Be genuinely helpful, not performatively helpful\n- Have opinions\n- Be resourceful before asking\n- Earn trust through competence\n- Remember you're a guest\n\n## Boundaries\n\n- Private things stay private\n- When in doubt, ask before acting externally\n- Never send half-baked replies\n\nThis file is yours to evolve.\n`,\n 'IDENTITY.md': `# IDENTITY.md - Who Am I?\n\n_Fill this in during your first conversation._\n\n- **Name:**\n- **Creature:**\n- **Vibe:**\n- **Emoji:**\n`,\n 'TOOLS.md': `# TOOLS.md - Local Notes\n\nEnvironment-specific notes:\n\n- SSH hosts\n- API endpoints\n- Device nicknames\n`,\n 'HEARTBEAT.md': `# HEARTBEAT.md - Periodic Checks\n\nEdit this file to define what you check during heartbeat polls.\n\n## Example Checklist\n\n- [ ] Check email for urgent messages\n- [ ] Check calendar for upcoming events\n\n**Remember:** If nothing needs attention, reply \\`HEARTBEAT_OK\\`.\n`,\n 'MEMORY.md': `# MEMORY.md - Long-Term Memory\n\n_Your curated memories._\n\n## People\n\n## Projects\n\n## Preferences\n\n## Learned Lessons\n\n**Only load in main sessions.**\n`,\n };\n \n return fallbacks[name] || `# ${name}\\n\\n(Template content missing)\\n`;\n}\n"],"mappings":";;;;;;;;AAUA,MAAM,YAAY,QADC,cAAc,OAAO,KAAK,IACT,CAAC;;AAGrC,MAAa,iBAAiB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACD;;AAKD,MAAa,kCAA2D,CAAC,GAAG,eAAe;;AAG3F,MAAM,gCAAgB,IAAI,KAA2B;;;;;AAMrD,SAAS,kBAA0B;CAEjC,MAAM,UAAU,QAAQ,IAAI;AAC5B,KAAI,WAAW,WAAW,QAAQ,CAChC,QAAO;CAMT,MAAM,cAAc,KADA,KAAK,WAAW,WACA,EAAE,2BAA2B;AAEjE,KAAI,WAAW,YAAY,CACzB,QAAO;AAIT,QAAO;;;;;AAMT,SAAgB,aAAa,MAA4B;AAEvD,KAAI,cAAc,IAAI,KAAK,CACzB,QAAO,cAAc,IAAI,KAAK;CAGhC,MAAM,eAAe,KAAK,iBAAiB,EAAE,KAAK;AAElD,KAAI;AACF,MAAI,WAAW,aAAa,EAAE;GAC5B,MAAM,UAAU,aAAa,cAAc,QAAQ;AACnD,iBAAc,IAAI,MAAM,QAAQ;AAChC,UAAO;;SAEH;AAKR,SAAQ,KAAK,qBAAqB,KAAK,4BAA4B;AACnE,QAAO,oBAAoB,KAAK;;;;;AAMlC,SAAgB,mBAAiD;CAC/D,MAAM,SAAS,EAAE;AACjB,MAAK,MAAM,QAAQ,eACjB,QAAO,QAAQ,aAAa,KAAK;AAEnC,QAAO;;;;;AAMT,SAAgB,qBAA2B;AACzC,eAAc,OAAO;;;AAIvB,SAAgB,oBAAoB,MAA4B;AA0F9D,QAAO;EAxFL,aAAa;;;;;;;;;;;;;;;;;;;;;;;;EAwBb,WAAW;;;;;;;;;;;;;;;;;;;;EAoBX,eAAe;;;;;;;;;EASf,YAAY;;;;;;;;EAQZ,gBAAgB;;;;;;;;;;;EAWhB,aAAa;;;;;;;;;;;;;;EAgBC,CAAC,SAAS,KAAK,KAAK"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ConfigSchema, init_schema } from "../../config/schema.js";
|
|
2
2
|
import { init_loader, saveConfig } from "../../config/loader.js";
|
|
3
3
|
import { ensureStarterAgentsInitialized } from "../../agent/starter-agents.js";
|
|
4
|
+
import { runBootstrapMigrationsSync } from "../../migrations/runner.js";
|
|
4
5
|
import { dirname } from "node:path";
|
|
5
6
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
6
7
|
import { randomBytes } from "node:crypto";
|
|
@@ -36,6 +37,7 @@ async function initWorkspaceCore(options) {
|
|
|
36
37
|
const persistedWorkspaceRoot = persistWorkspacePath ? workspacePath : void 0;
|
|
37
38
|
mkdirSync(dirname(configPath), { recursive: true });
|
|
38
39
|
const configExisted = existsSync(configPath);
|
|
40
|
+
if (configExisted) runBootstrapMigrationsSync(configPath, { stateDir: dirname(configPath) });
|
|
39
41
|
const workspaceExisted = existsSync(workspacePath);
|
|
40
42
|
let config;
|
|
41
43
|
if (configExisted) config = await tryReadDiskConfig(configPath, assertChannelPlugins) ?? ConfigSchema.parse(void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-workspace-core.js","names":[],"sources":["../../../../src/cli/utils/init-workspace-core.ts"],"sourcesContent":["import { randomBytes } from 'node:crypto';\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport type { Config } from '../../config/schema.js';\nimport { ConfigSchema } from '../../config/schema.js';\nimport { saveConfig } from '../../config/loader.js';\nimport { ensureStarterAgentsInitialized } from '../../agent/starter-agents.js';\n\nexport interface InitWorkspaceCoreOptions {\n configPath: string;\n workspacePath: string;\n /** When set with a new config file, overrides schema default port (e.g. Electron). */\n gatewayPort?: number;\n /** When true, sets the default agent manifest workspace root to `workspacePath`. */\n persistWorkspacePath?: boolean;\n /** Optional channel plugin validator (CLI/gateway only; Electron omits). */\n assertChannelPlugins?: (cfg: Config) => void | Promise<void>;\n}\n\nexport interface InitWorkspaceResult {\n /** Fully-initialised config (matches disk after any write). */\n config: Config;\n /** Gateway auth token (always present after init). */\n token: string;\n configCreated: boolean;\n workspaceCreated: boolean;\n}\n\nasync function assertChannelPluginsIfNeeded(\n cfg: Config,\n assert?: InitWorkspaceCoreOptions['assertChannelPlugins'],\n): Promise<void> {\n if (assert) await assert(cfg);\n}\n\nasync function serializeConfig(\n cfg: Config,\n assertChannelPlugins?: InitWorkspaceCoreOptions['assertChannelPlugins'],\n): Promise<string> {\n const validated = ConfigSchema.parse(cfg);\n await assertChannelPluginsIfNeeded(validated, assertChannelPlugins);\n return JSON.stringify(validated, null, 2);\n}\n\nasync function tryReadDiskConfig(\n configPath: string,\n assertChannelPlugins?: InitWorkspaceCoreOptions['assertChannelPlugins'],\n): Promise<Config | null> {\n try {\n const raw = readFileSync(configPath, 'utf-8');\n const cfg = ConfigSchema.parse(JSON.parse(raw) as unknown);\n await assertChannelPluginsIfNeeded(cfg, assertChannelPlugins);\n return cfg;\n } catch {\n return null;\n }\n}\n\n/**\n * Workspace + config initialisation without importing bundled channel plugins.\n * Used by Electron main; CLI/gateway should call {@link initWorkspace} instead.\n */\nexport async function initWorkspaceCore(options: InitWorkspaceCoreOptions): Promise<InitWorkspaceResult> {\n const gatewayPortDefaulted = options.gatewayPort ?? 18790;\n const persistWorkspacePath = options.persistWorkspacePath ?? false;\n const { configPath, workspacePath, assertChannelPlugins } = options;\n const persistedWorkspaceRoot = persistWorkspacePath ? workspacePath : undefined;\n\n mkdirSync(dirname(configPath), { recursive: true });\n\n const configExisted = existsSync(configPath);\n const workspaceExisted = existsSync(workspacePath);\n\n let config: Config;\n if (configExisted) {\n config = (await tryReadDiskConfig(configPath, assertChannelPlugins)) ?? ConfigSchema.parse(undefined);\n } else {\n config = ConfigSchema.parse(undefined);\n await assertChannelPluginsIfNeeded(config, assertChannelPlugins);\n }\n\n mkdirSync(workspacePath, { recursive: true });\n\n const configCreated = !configExisted;\n const workspaceCreated = !workspaceExisted;\n\n const hadToken =\n config.gateway?.auth?.mode === 'token' &&\n typeof config.gateway?.auth?.token === 'string' &&\n config.gateway.auth.token.length > 0;\n\n const token = hadToken ? (config.gateway!.auth!.token as string) : randomBytes(24).toString('hex');\n\n const port = configExisted\n ? (config.gateway?.port ?? gatewayPortDefaulted)\n : options.gatewayPort !== undefined\n ? gatewayPortDefaulted\n : (config.gateway?.port ?? 18790);\n\n const defaultAgentId = config.agents.default ?? config.agents.list[0]?.id ?? 'main';\n const agentsList =\n persistedWorkspaceRoot === undefined\n ? config.agents.list\n : config.agents.list.map((agent) =>\n agent.id === defaultAgentId ? { ...agent, workspace: { root: persistedWorkspaceRoot } } : agent,\n );\n\n const nextConfig: Config = {\n ...config,\n agents: {\n ...config.agents,\n list: agentsList,\n },\n gateway: {\n ...config.gateway,\n port,\n auth: {\n ...config.gateway?.auth,\n mode: 'token' as const,\n token,\n },\n },\n };\n\n const starterResult = ensureStarterAgentsInitialized(ConfigSchema.parse(nextConfig));\n const nextFinal = ConfigSchema.parse(starterResult.config);\n await assertChannelPluginsIfNeeded(nextFinal, assertChannelPlugins);\n\n let needsWrite = configCreated || starterResult.changed;\n if (!needsWrite) {\n const disk = await tryReadDiskConfig(configPath, assertChannelPlugins);\n if (!disk) {\n needsWrite = true;\n } else {\n needsWrite =\n (await serializeConfig(disk, assertChannelPlugins)) !==\n (await serializeConfig(nextFinal, assertChannelPlugins));\n }\n }\n\n if (needsWrite) {\n if (assertChannelPlugins) {\n await saveConfig(nextFinal, configPath);\n } else {\n writeFileSync(configPath, `${JSON.stringify(nextFinal, null, 2)}\\n`, 'utf8');\n }\n }\n\n return {\n config: nextFinal,\n token,\n configCreated,\n workspaceCreated,\n };\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"init-workspace-core.js","names":[],"sources":["../../../../src/cli/utils/init-workspace-core.ts"],"sourcesContent":["import { randomBytes } from 'node:crypto';\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport type { Config } from '../../config/schema.js';\nimport { ConfigSchema } from '../../config/schema.js';\nimport { saveConfig } from '../../config/loader.js';\nimport { ensureStarterAgentsInitialized } from '../../agent/starter-agents.js';\nimport { runBootstrapMigrationsSync } from '../../migrations/runner.js';\n\nexport interface InitWorkspaceCoreOptions {\n configPath: string;\n workspacePath: string;\n /** When set with a new config file, overrides schema default port (e.g. Electron). */\n gatewayPort?: number;\n /** When true, sets the default agent manifest workspace root to `workspacePath`. */\n persistWorkspacePath?: boolean;\n /** Optional channel plugin validator (CLI/gateway only; Electron omits). */\n assertChannelPlugins?: (cfg: Config) => void | Promise<void>;\n}\n\nexport interface InitWorkspaceResult {\n /** Fully-initialised config (matches disk after any write). */\n config: Config;\n /** Gateway auth token (always present after init). */\n token: string;\n configCreated: boolean;\n workspaceCreated: boolean;\n}\n\nasync function assertChannelPluginsIfNeeded(\n cfg: Config,\n assert?: InitWorkspaceCoreOptions['assertChannelPlugins'],\n): Promise<void> {\n if (assert) await assert(cfg);\n}\n\nasync function serializeConfig(\n cfg: Config,\n assertChannelPlugins?: InitWorkspaceCoreOptions['assertChannelPlugins'],\n): Promise<string> {\n const validated = ConfigSchema.parse(cfg);\n await assertChannelPluginsIfNeeded(validated, assertChannelPlugins);\n return JSON.stringify(validated, null, 2);\n}\n\nasync function tryReadDiskConfig(\n configPath: string,\n assertChannelPlugins?: InitWorkspaceCoreOptions['assertChannelPlugins'],\n): Promise<Config | null> {\n try {\n const raw = readFileSync(configPath, 'utf-8');\n const cfg = ConfigSchema.parse(JSON.parse(raw) as unknown);\n await assertChannelPluginsIfNeeded(cfg, assertChannelPlugins);\n return cfg;\n } catch {\n return null;\n }\n}\n\n/**\n * Workspace + config initialisation without importing bundled channel plugins.\n * Used by Electron main; CLI/gateway should call {@link initWorkspace} instead.\n */\nexport async function initWorkspaceCore(options: InitWorkspaceCoreOptions): Promise<InitWorkspaceResult> {\n const gatewayPortDefaulted = options.gatewayPort ?? 18790;\n const persistWorkspacePath = options.persistWorkspacePath ?? false;\n const { configPath, workspacePath, assertChannelPlugins } = options;\n const persistedWorkspaceRoot = persistWorkspacePath ? workspacePath : undefined;\n\n mkdirSync(dirname(configPath), { recursive: true });\n\n const configExisted = existsSync(configPath);\n if (configExisted) {\n runBootstrapMigrationsSync(configPath, { stateDir: dirname(configPath) });\n }\n const workspaceExisted = existsSync(workspacePath);\n\n let config: Config;\n if (configExisted) {\n config = (await tryReadDiskConfig(configPath, assertChannelPlugins)) ?? ConfigSchema.parse(undefined);\n } else {\n config = ConfigSchema.parse(undefined);\n await assertChannelPluginsIfNeeded(config, assertChannelPlugins);\n }\n\n mkdirSync(workspacePath, { recursive: true });\n\n const configCreated = !configExisted;\n const workspaceCreated = !workspaceExisted;\n\n const hadToken =\n config.gateway?.auth?.mode === 'token' &&\n typeof config.gateway?.auth?.token === 'string' &&\n config.gateway.auth.token.length > 0;\n\n const token = hadToken ? (config.gateway!.auth!.token as string) : randomBytes(24).toString('hex');\n\n const port = configExisted\n ? (config.gateway?.port ?? gatewayPortDefaulted)\n : options.gatewayPort !== undefined\n ? gatewayPortDefaulted\n : (config.gateway?.port ?? 18790);\n\n const defaultAgentId = config.agents.default ?? config.agents.list[0]?.id ?? 'main';\n const agentsList =\n persistedWorkspaceRoot === undefined\n ? config.agents.list\n : config.agents.list.map((agent) =>\n agent.id === defaultAgentId ? { ...agent, workspace: { root: persistedWorkspaceRoot } } : agent,\n );\n\n const nextConfig: Config = {\n ...config,\n agents: {\n ...config.agents,\n list: agentsList,\n },\n gateway: {\n ...config.gateway,\n port,\n auth: {\n ...config.gateway?.auth,\n mode: 'token' as const,\n token,\n },\n },\n };\n\n const starterResult = ensureStarterAgentsInitialized(ConfigSchema.parse(nextConfig));\n const nextFinal = ConfigSchema.parse(starterResult.config);\n await assertChannelPluginsIfNeeded(nextFinal, assertChannelPlugins);\n\n let needsWrite = configCreated || starterResult.changed;\n if (!needsWrite) {\n const disk = await tryReadDiskConfig(configPath, assertChannelPlugins);\n if (!disk) {\n needsWrite = true;\n } else {\n needsWrite =\n (await serializeConfig(disk, assertChannelPlugins)) !==\n (await serializeConfig(nextFinal, assertChannelPlugins));\n }\n }\n\n if (needsWrite) {\n if (assertChannelPlugins) {\n await saveConfig(nextFinal, configPath);\n } else {\n writeFileSync(configPath, `${JSON.stringify(nextFinal, null, 2)}\\n`, 'utf8');\n }\n }\n\n return {\n config: nextFinal,\n token,\n configCreated,\n workspaceCreated,\n };\n}\n"],"mappings":";;;;;;;;aAKsD;aACF;AAwBpD,eAAe,6BACb,KACA,QACe;AACf,KAAI,OAAQ,OAAM,OAAO,IAAI;;AAG/B,eAAe,gBACb,KACA,sBACiB;CACjB,MAAM,YAAY,aAAa,MAAM,IAAI;AACzC,OAAM,6BAA6B,WAAW,qBAAqB;AACnE,QAAO,KAAK,UAAU,WAAW,MAAM,EAAE;;AAG3C,eAAe,kBACb,YACA,sBACwB;AACxB,KAAI;EACF,MAAM,MAAM,aAAa,YAAY,QAAQ;EAC7C,MAAM,MAAM,aAAa,MAAM,KAAK,MAAM,IAAI,CAAY;AAC1D,QAAM,6BAA6B,KAAK,qBAAqB;AAC7D,SAAO;SACD;AACN,SAAO;;;;;;;AAQX,eAAsB,kBAAkB,SAAiE;CACvG,MAAM,uBAAuB,QAAQ,eAAe;CACpD,MAAM,uBAAuB,QAAQ,wBAAwB;CAC7D,MAAM,EAAE,YAAY,eAAe,yBAAyB;CAC5D,MAAM,yBAAyB,uBAAuB,gBAAgB,KAAA;AAEtE,WAAU,QAAQ,WAAW,EAAE,EAAE,WAAW,MAAM,CAAC;CAEnD,MAAM,gBAAgB,WAAW,WAAW;AAC5C,KAAI,cACF,4BAA2B,YAAY,EAAE,UAAU,QAAQ,WAAW,EAAE,CAAC;CAE3E,MAAM,mBAAmB,WAAW,cAAc;CAElD,IAAI;AACJ,KAAI,cACF,UAAU,MAAM,kBAAkB,YAAY,qBAAqB,IAAK,aAAa,MAAM,KAAA,EAAU;MAChG;AACL,WAAS,aAAa,MAAM,KAAA,EAAU;AACtC,QAAM,6BAA6B,QAAQ,qBAAqB;;AAGlE,WAAU,eAAe,EAAE,WAAW,MAAM,CAAC;CAE7C,MAAM,gBAAgB,CAAC;CACvB,MAAM,mBAAmB,CAAC;CAO1B,MAAM,QAJJ,OAAO,SAAS,MAAM,SAAS,WAC/B,OAAO,OAAO,SAAS,MAAM,UAAU,YACvC,OAAO,QAAQ,KAAK,MAAM,SAAS,IAEX,OAAO,QAAS,KAAM,QAAmB,YAAY,GAAG,CAAC,SAAS,MAAM;CAElG,MAAM,OAAO,gBACR,OAAO,SAAS,QAAQ,uBACzB,QAAQ,gBAAgB,KAAA,IACtB,uBACC,OAAO,SAAS,QAAQ;CAE/B,MAAM,iBAAiB,OAAO,OAAO,WAAW,OAAO,OAAO,KAAK,IAAI,MAAM;CAC7E,MAAM,aACJ,2BAA2B,KAAA,IACvB,OAAO,OAAO,OACd,OAAO,OAAO,KAAK,KAAK,UACtB,MAAM,OAAO,iBAAiB;EAAE,GAAG;EAAO,WAAW,EAAE,MAAM,wBAAwB;EAAE,GAAG,MAC3F;CAEP,MAAM,aAAqB;EACzB,GAAG;EACH,QAAQ;GACN,GAAG,OAAO;GACV,MAAM;GACP;EACD,SAAS;GACP,GAAG,OAAO;GACV;GACA,MAAM;IACJ,GAAG,OAAO,SAAS;IACnB,MAAM;IACN;IACD;GACF;EACF;CAED,MAAM,gBAAgB,+BAA+B,aAAa,MAAM,WAAW,CAAC;CACpF,MAAM,YAAY,aAAa,MAAM,cAAc,OAAO;AAC1D,OAAM,6BAA6B,WAAW,qBAAqB;CAEnE,IAAI,aAAa,iBAAiB,cAAc;AAChD,KAAI,CAAC,YAAY;EACf,MAAM,OAAO,MAAM,kBAAkB,YAAY,qBAAqB;AACtE,MAAI,CAAC,KACH,cAAa;MAEb,cACG,MAAM,gBAAgB,MAAM,qBAAqB,KACjD,MAAM,gBAAgB,WAAW,qBAAqB;;AAI7D,KAAI,WACF,KAAI,qBACF,OAAM,WAAW,WAAW,WAAW;KAEvC,eAAc,YAAY,GAAG,KAAK,UAAU,WAAW,MAAM,EAAE,CAAC,KAAK,OAAO;AAIhF,QAAO;EACL,QAAQ;EACR;EACA;EACA;EACD"}
|
|
@@ -14,6 +14,15 @@ export declare function applyAgentConfig(cfg: Config, params: {
|
|
|
14
14
|
skills?: string[];
|
|
15
15
|
tools?: AgentEntry['tools'];
|
|
16
16
|
}): Config;
|
|
17
|
+
export declare function getAgentDeleteBlocker(cfg: Config, agentId: string): string | null;
|
|
18
|
+
export declare function setTuiDefaultAgentConfig(cfg: Config, agentIdRaw: string): {
|
|
19
|
+
ok: true;
|
|
20
|
+
config: Config;
|
|
21
|
+
agentId: string;
|
|
22
|
+
} | {
|
|
23
|
+
ok: false;
|
|
24
|
+
message: string;
|
|
25
|
+
};
|
|
17
26
|
export declare function pruneAgentConfig(cfg: Config, agentId: string): {
|
|
18
27
|
config: Config;
|
|
19
28
|
removedBindings: number;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentHomeDir, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agent/agent-scope.js";
|
|
1
|
+
import { DEFAULT_AGENT_ID, init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentHomeDir, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agent/agent-scope.js";
|
|
2
2
|
import { existsSync } from "node:fs";
|
|
3
3
|
import { rm } from "node:fs/promises";
|
|
4
4
|
//#region src/commands/agents.config.ts
|
|
@@ -97,8 +97,46 @@ function applyAgentConfig(cfg, params) {
|
|
|
97
97
|
}
|
|
98
98
|
};
|
|
99
99
|
}
|
|
100
|
+
function getAgentDeleteBlocker(cfg, agentId) {
|
|
101
|
+
const id = normalizeAgentId(agentId);
|
|
102
|
+
if (id === "main") return `Agent id "${DEFAULT_AGENT_ID}" is reserved for the primary agent.`;
|
|
103
|
+
if (id === normalizeAgentId(resolveDefaultAgentId(cfg))) return `Agent "${id}" is the global default agent. Change agents.default first.`;
|
|
104
|
+
const tuiDefault = cfg.tui?.defaultAgent?.trim();
|
|
105
|
+
if (tuiDefault && id === normalizeAgentId(tuiDefault)) return `Agent "${id}" is the TUI default agent. Change tui.defaultAgent first.`;
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
function setTuiDefaultAgentConfig(cfg, agentIdRaw) {
|
|
109
|
+
const raw = agentIdRaw.trim();
|
|
110
|
+
if (!raw) return {
|
|
111
|
+
ok: false,
|
|
112
|
+
message: "Agent id is required."
|
|
113
|
+
};
|
|
114
|
+
const agentId = normalizeAgentId(raw);
|
|
115
|
+
if (agentId !== raw.toLowerCase()) return {
|
|
116
|
+
ok: false,
|
|
117
|
+
message: `Invalid agent id: ${raw}`
|
|
118
|
+
};
|
|
119
|
+
const entry = listAgentEntries(cfg).find((agent) => normalizeAgentId(agent.id) === agentId);
|
|
120
|
+
if (!entry || entry.enabled === false) return {
|
|
121
|
+
ok: false,
|
|
122
|
+
message: `Agent "${agentId}" not found or disabled.`
|
|
123
|
+
};
|
|
124
|
+
return {
|
|
125
|
+
ok: true,
|
|
126
|
+
agentId,
|
|
127
|
+
config: {
|
|
128
|
+
...cfg,
|
|
129
|
+
tui: {
|
|
130
|
+
...cfg.tui,
|
|
131
|
+
defaultAgent: agentId
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
}
|
|
100
136
|
function pruneAgentConfig(cfg, agentId) {
|
|
101
137
|
const id = normalizeAgentId(agentId);
|
|
138
|
+
const blocker = getAgentDeleteBlocker(cfg, id);
|
|
139
|
+
if (blocker) throw new Error(blocker);
|
|
102
140
|
const nextAgentsList = listAgentEntries(cfg).filter((e) => normalizeAgentId(e.id) !== id);
|
|
103
141
|
const nextAgents = nextAgentsList.length > 0 ? nextAgentsList : [];
|
|
104
142
|
const bindings = cfg.bindings ?? [];
|
|
@@ -130,6 +168,6 @@ async function removeAgentDirsFromDisk(cfg, id) {
|
|
|
130
168
|
});
|
|
131
169
|
}
|
|
132
170
|
//#endregion
|
|
133
|
-
export { applyAgentConfig, findAgentEntryIndex, listAgentEntries, pruneAgentConfig, removeAgentDirsFromDisk };
|
|
171
|
+
export { applyAgentConfig, findAgentEntryIndex, getAgentDeleteBlocker, listAgentEntries, pruneAgentConfig, removeAgentDirsFromDisk, setTuiDefaultAgentConfig };
|
|
134
172
|
|
|
135
173
|
//# sourceMappingURL=agents.config.js.map
|
|
@@ -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 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 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\n ? {\n models: {\n ...(base.models ?? {}),\n defaultRole: 'deep',\n roles: { ...(base.models?.roles ?? {}), deep: { model: params.model } },\n },\n }\n : {}),\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 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":";;;;;;;kBAeiC;AAMjC,SAAgB,oBAAoB,MAAoB,SAAyB;CAC/E,MAAM,KAAK,iBAAiB,QAAQ;AACpC,QAAO,KAAK,WAAW,MAAM,iBAAiB,EAAE,GAAG,KAAK,GAAG;;AAG7D,SAAgB,iBACd,KACA,QAQQ;CACR,MAAM,UAAU,iBAAiB,OAAO,QAAQ;CAChD,MAAM,OAAO,iBAAiB,IAAI;CAClC,MAAM,QAAQ,oBAAoB,MAAM,QAAQ;CAChD,MAAM,YAAY,OAAO;CACzB,MAAM,OAAO,SAAS,IAAI,KAAK,SAAS;EACtC,IAAI;EACJ,SAAS;EACT,UAAU;GAAE,MAAM;GAAS,MAAM;GAAS,UAAU;GAAM,MAAM;GAAU;EAC1E,kBAAkB,EAAE,SAAS,CAAC,+BAA+B,EAAE;EAC/D,WAAW,EAAE,MAAM,qBAAqB,WAAW;EACnD,OAAO,EAAE,SAAS,EAAE,EAAE;EACtB,QAAQ,EAAE,MAAM,OAAgB;EAChC,QAAQ;GAAE,MAAM;GAAyB,SAAS,CAAC,WAAoB,UAAmB;GAAE,aAAa,EAAE,SAAS,WAAoB;GAAE;EAC1I,WAAW,EAAE;EACb,YAAY;GAAE,sBAAsB,EAAE;GAAE,WAAW,EAAE;GAAE,YAAY,EAAE;GAAE;EACxE;CACD,MAAM,YAAwB;EAC5B,GAAG;EACH,SAAS,KAAK,WAAW;EACzB,GAAI,OAAO,YAAY,EAAE,WAAW,EAAE,MAAM,OAAO,WAAW,EAAE,GAAG,EAAE;EACrE,GAAI,OAAO,SAAS,EAAE,QAAQ,OAAO,QAAQ,GAAG,EAAE;EAClD,GAAI,OAAO,QACP,EACE,QAAQ;GACN,GAAI,KAAK,UAAU,EAAE;GACrB,aAAa;GACb,OAAO;IAAE,GAAI,KAAK,QAAQ,SAAS,EAAE;IAAG,MAAM,EAAE,OAAO,OAAO,OAAO;IAAE;GACxE,EACF,GACD,EAAE;EACN,GAAI,OAAO,SAAS,EAAE,QAAQ;GAAE,MAAM;GAAsB,OAAO,OAAO;GAAQ,EAAE,GAAG,EAAE;EACzF,GAAI,YAAY,EAAE,OAAO,WAAW,GAAG,EAAE;EAC1C;CACD,MAAM,WAAW,CAAC,GAAG,KAAK;AAC1B,KAAI,SAAS,EACX,UAAS,SAAS;MACb;AACL,MAAI,SAAS,WAAW,KAAK,YAAY,iBAAiB,sBAAsB,IAAI,CAAC,CACnF,UAAS,KAAK;GACZ,IAAI,sBAAsB,IAAI;GAC9B,SAAS;GACT,UAAU;IAAE,MAAM,sBAAsB,IAAI;IAAE,MAAM;IAAS,UAAU;IAAM,MAAM;IAAU;GAC7F,kBAAkB,EAAE,SAAS,CAAC,+BAA+B,EAAE;GAC/D,WAAW,EAAE,MAAM,qBAAqB,sBAAsB,IAAI,IAAI;GACtE,OAAO,EAAE,SAAS,EAAE,EAAE;GACtB,QAAQ,EAAE,MAAM,OAAO;GACvB,QAAQ;IAAE,MAAM;IAAgB,SAAS,CAAC,WAAW,UAAU;IAAE,aAAa,EAAE,SAAS,WAAW;IAAE;GACtG,WAAW,EAAE;GACb,YAAY;IAAE,sBAAsB,EAAE;IAAE,WAAW,EAAE;IAAE,YAAY,EAAE;IAAE;GACxE,CAAC;AAEJ,WAAS,KAAK,UAAU;;AAE1B,QAAO;EACL,GAAG;EACH,QAAQ;GACN,GAAG,IAAI;GACP,MAAM;GACP;EACF;;AAGH,SAAgB,iBACd,KACA,SAC6C;CAC7C,MAAM,KAAK,iBAAiB,QAAQ;
|
|
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 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\n ? {\n models: {\n ...(base.models ?? {}),\n defaultRole: 'deep',\n roles: { ...(base.models?.roles ?? {}), deep: { model: params.model } },\n },\n }\n : {}),\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 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 getAgentDeleteBlocker(cfg: Config, agentId: string): string | null {\n const id = normalizeAgentId(agentId);\n if (id === DEFAULT_AGENT_ID) {\n return `Agent id \"${DEFAULT_AGENT_ID}\" is reserved for the primary agent.`;\n }\n if (id === normalizeAgentId(resolveDefaultAgentId(cfg))) {\n return `Agent \"${id}\" is the global default agent. Change agents.default first.`;\n }\n const tuiDefault = cfg.tui?.defaultAgent?.trim();\n if (tuiDefault && id === normalizeAgentId(tuiDefault)) {\n return `Agent \"${id}\" is the TUI default agent. Change tui.defaultAgent first.`;\n }\n return null;\n}\n\nexport function setTuiDefaultAgentConfig(\n cfg: Config,\n agentIdRaw: string,\n): { ok: true; config: Config; agentId: string } | { ok: false; message: string } {\n const raw = agentIdRaw.trim();\n if (!raw) {\n return { ok: false, message: 'Agent id is required.' };\n }\n const agentId = normalizeAgentId(raw);\n if (agentId !== raw.toLowerCase()) {\n return { ok: false, message: `Invalid agent id: ${raw}` };\n }\n const entry = listAgentEntries(cfg).find((agent) => normalizeAgentId(agent.id) === agentId);\n if (!entry || entry.enabled === false) {\n return { ok: false, message: `Agent \"${agentId}\" not found or disabled.` };\n }\n return {\n ok: true,\n agentId,\n config: {\n ...cfg,\n tui: {\n ...cfg.tui,\n defaultAgent: agentId,\n },\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 blocker = getAgentDeleteBlocker(cfg, id);\n if (blocker) {\n throw new Error(blocker);\n }\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,6 +1,6 @@
|
|
|
1
|
-
import { init_agent_scope, normalizeAgentId, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
|
|
2
1
|
import { resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
|
|
3
2
|
import "../agent-manifest/index.js";
|
|
3
|
+
import { init_agent_scope, normalizeAgentId, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
|
|
4
4
|
import { init_session_key, parseSessionKey } from "../routing/session-key.js";
|
|
5
5
|
import { agentExists, getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
|
|
6
6
|
//#region src/config/agent-profile.ts
|
|
@@ -33,7 +33,8 @@ function resolveEffectiveAgentManifestForSession(config, sessionKey) {
|
|
|
33
33
|
}
|
|
34
34
|
function resolveEffectiveAgentProfile(config, agentId) {
|
|
35
35
|
const manifest = resolveEffectiveAgentManifestForAgent(config, agentId);
|
|
36
|
-
const
|
|
36
|
+
const defaultRoleModel = manifest.models.roles[manifest.models.defaultRole];
|
|
37
|
+
const defaultModel = defaultRoleModel?.model;
|
|
37
38
|
const deniedTools = Object.entries(manifest.tools.builtin).filter(([, policy]) => policy.mode === "deny").map(([name]) => name);
|
|
38
39
|
const skillsAllowlist = manifest.skills.mode === "allowlist" ? [...manifest.skills.allow ?? []] : void 0;
|
|
39
40
|
return {
|
|
@@ -41,7 +42,7 @@ function resolveEffectiveAgentProfile(config, agentId) {
|
|
|
41
42
|
manifest,
|
|
42
43
|
resolvedWorkspacePath: resolveAgentWorkspaceDir(config, manifest.id),
|
|
43
44
|
primaryModelRef: defaultModel?.trim() || void 0,
|
|
44
|
-
fallbacks: [],
|
|
45
|
+
fallbacks: (defaultRoleModel?.fallbacks ?? []).map((ref) => ref.trim()).filter(Boolean),
|
|
45
46
|
systemPromptOverride: manifest.prompt?.customInstructions,
|
|
46
47
|
skillsAllowlist,
|
|
47
48
|
tools: { denied: new Set(deniedTools) },
|
|
@@ -1 +1 @@
|
|
|
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 defaultPresetId: config.agents.defaultPreset,\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
|
|
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 defaultPresetId: config.agents.defaultPreset,\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 defaultRoleModel = manifest.models.roles[manifest.models.defaultRole];\n const defaultModel = defaultRoleModel?.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: (defaultRoleModel?.fallbacks ?? []).map((ref) => ref.trim()).filter(Boolean),\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;EACvB,iBAAiB,OAAO,OAAO;EAChC,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,mBAAmB,SAAS,OAAO,MAAM,SAAS,OAAO;CAC/D,MAAM,eAAe,kBAAkB;CACvC,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,YAAY,kBAAkB,aAAa,EAAE,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,CAAC,OAAO,QAAQ;EACvF,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 +1 @@
|
|
|
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 { resolveEffectiveAgentManifestForAgent } from './agent-profile.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 manifest = resolveEffectiveAgentManifestForAgent(config, agentId);\n for (const modelRole of rolesToEntries(manifest.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;AAK5C,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,WAAW,sCAAsC,QAAQ,QAAQ;AACvE,MAAK,MAAM,aAAa,eAAe,SAAS,OAAO,MAAM,CAC3D,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
|
+
{"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 { resolveEffectiveAgentManifestForAgent } from './agent-profile.js';\n\nexport type { AgentTypedModel };\n\nfunction rolesToEntries(\n roles: Record<string, { model: string; fallbacks?: 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 manifest = resolveEffectiveAgentManifestForAgent(config, agentId);\n for (const modelRole of rolesToEntries(manifest.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;AAK5C,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,WAAW,sCAAsC,QAAQ,QAAQ;AACvE,MAAK,MAAM,aAAa,eAAe,SAAS,OAAO,MAAM,CAC3D,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"}
|
|
@@ -9,7 +9,6 @@ export * from './profile.js';
|
|
|
9
9
|
export * from './reload.js';
|
|
10
10
|
export * from './diff.js';
|
|
11
11
|
export * from './rules.js';
|
|
12
|
-
export * from './defaults.js';
|
|
13
12
|
export * from './integration.js';
|
|
14
13
|
export * from './models-json.js';
|
|
15
14
|
export * from './resolve-config-value.js';
|
package/dist/src/config/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema } from "../../extensions/telegram/src/config-schema.js";
|
|
2
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,
|
|
3
|
+
import { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigSchema, ConnectorsConfigSchema, 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, TuiConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultModelRef, init_schema, parseModelRef } from "./schema.js";
|
|
4
4
|
import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
|
|
5
5
|
import { ENV_VARS, XOPC_DB_FILENAME, resolveHomeDir, resolveStateDir, resolveXopcDatabasePath } from "./paths-state.js";
|
|
6
6
|
import { expandWorkspacePathString, init_workspace_path, normalizeWorkspaceDir, resolveWorkspaceRoot } from "./workspace-path.js";
|
|
7
7
|
import { resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
|
|
8
8
|
import { resolveAgentDir as resolveAgentDir$1, resolveAgentHomeDir as resolveAgentHomeDir$1, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
|
|
9
9
|
import { extractProfileAgentId, resolveEffectiveAgentManifestForAgent, resolveEffectiveAgentManifestForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
|
|
10
|
-
import { FILENAMES, USER_MEMORY_FILENAME, USER_PROFILE_FILENAME, WORKSPACE_FILES, existsSync, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir,
|
|
10
|
+
import { FILENAMES, USER_MEMORY_FILENAME, USER_PROFILE_FILENAME, WORKSPACE_FILES, existsSync, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveUserDir, resolveUserMemoryPath, resolveUserProfilePath, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
|
|
11
11
|
import { init_loader, loadConfig, saveConfig } from "./loader.js";
|
|
12
12
|
import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
|
|
13
13
|
import { CustomModelSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
|
|
@@ -27,6 +27,6 @@ init_workspace_path();
|
|
|
27
27
|
init_models_json();
|
|
28
28
|
init_resolve_config_value();
|
|
29
29
|
//#endregion
|
|
30
|
-
export { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BASE_RELOAD_RULES, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigHotReloader, ConfigSchema, ConnectorsConfigSchema,
|
|
30
|
+
export { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BASE_RELOAD_RULES, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigHotReloader, ConfigSchema, ConnectorsConfigSchema, 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, TuiConfigSchema, TunnelConfigSchema, TunnelConsentSchema, USER_MEMORY_FILENAME, USER_PROFILE_FILENAME, 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, 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, resolveUserDir, resolveUserMemoryPath, resolveUserProfilePath, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceRoot, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcDatabasePath, resolveXopcMcpTransportAlias, saveConfig, saveModelsJson, setConfigOverride, testApiKeyResolution, thinkLevelToNumber, unsetConfigOverride, validateModelsConfig };
|
|
31
31
|
|
|
32
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/config/index.ts"],"sourcesContent":["export * from './schema.js';\nexport { getWorkspacePath } from './workspace-path-helpers.js';\nexport * from './agent-profile.js';\nexport * from './loader.js';\nexport * from './paths.js';\nexport * from './workspace-dirs.js';\nexport { expandWorkspacePathString, normalizeWorkspaceDir, resolveWorkspaceRoot } from './workspace-path.js';\nexport * from './profile.js';\nexport * from './reload.js';\nexport * from './diff.js';\nexport * from './rules.js';\nexport * from './
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/config/index.ts"],"sourcesContent":["export * from './schema.js';\nexport { getWorkspacePath } from './workspace-path-helpers.js';\nexport * from './agent-profile.js';\nexport * from './loader.js';\nexport * from './paths.js';\nexport * from './workspace-dirs.js';\nexport { expandWorkspacePathString, normalizeWorkspaceDir, resolveWorkspaceRoot } from './workspace-path.js';\nexport * from './profile.js';\nexport * from './reload.js';\nexport * from './diff.js';\nexport * from './rules.js';\nexport * from './integration.js';\nexport * from './models-json.js';\nexport * from './resolve-config-value.js';\nexport * from './runtime-overrides.js';\nexport * from './mcp-config-normalize.js';\n\n// Re-export thinking types\nexport type {\n ThinkLevel,\n ReasoningLevel,\n VerboseLevel,\n ElevatedMode,\n SessionAgentConfig,\n} from '../agent/transcript/thinking-types.js';\nexport {\n normalizeThinkLevel,\n normalizeReasoningLevel,\n normalizeVerboseLevel,\n normalizeElevatedMode,\n listThinkingLevels,\n formatThinkingLevels,\n thinkLevelToNumber,\n} from '../agent/transcript/thinking-types.js';\n\n// Re-export types from types.models (avoid conflict with schema.js)\nexport type {\n ModelApi,\n ModelCompatConfig,\n ModelProviderAuthMode,\n ModelDefinitionConfig,\n ModelProviderConfig,\n BedrockDiscoveryConfig,\n ModelsConfig,\n} from './types.models.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;qBAM6G"}
|
|
@@ -10,7 +10,6 @@ export declare const FILENAMES: {
|
|
|
10
10
|
readonly XOPC_DB: "xopc.db";
|
|
11
11
|
readonly EXTENSIONS_LOCK: "extensions-lock.json";
|
|
12
12
|
readonly CREDENTIALS_PROFILES: "auth-profiles.json";
|
|
13
|
-
readonly CRON_JOBS: "jobs.json";
|
|
14
13
|
readonly WORKSPACE_STATE: "workspace.json";
|
|
15
14
|
readonly SKILLS_CACHE: "skills-cache.json";
|
|
16
15
|
/** Hub / CLI install provenance for ~/.xopc/skills/<id>. */
|
|
@@ -126,14 +125,6 @@ export declare function resolveSkillPath(skillId: string): string;
|
|
|
126
125
|
* Skills hub lock file (~/.xopc/skills-lock.json): install source + content hash per managed skill id.
|
|
127
126
|
*/
|
|
128
127
|
export declare function resolveSkillsLockPath(): string;
|
|
129
|
-
/**
|
|
130
|
-
* Resolve the cron directory
|
|
131
|
-
*/
|
|
132
|
-
export declare function resolveCronDir(): string;
|
|
133
|
-
/**
|
|
134
|
-
* Resolve the cron jobs file path
|
|
135
|
-
*/
|
|
136
|
-
export declare function resolveCronJobsPath(): string;
|
|
137
128
|
/**
|
|
138
129
|
* Resolve the logs directory
|
|
139
130
|
*/
|
package/dist/src/config/paths.js
CHANGED
|
@@ -156,18 +156,6 @@ function resolveSkillsLockPath() {
|
|
|
156
156
|
return join(resolveStateDir(), FILENAMES.SKILLS_LOCK);
|
|
157
157
|
}
|
|
158
158
|
/**
|
|
159
|
-
* Resolve the cron directory
|
|
160
|
-
*/
|
|
161
|
-
function resolveCronDir() {
|
|
162
|
-
return join(resolveStateDir(), "cron");
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Resolve the cron jobs file path
|
|
166
|
-
*/
|
|
167
|
-
function resolveCronJobsPath() {
|
|
168
|
-
return join(resolveCronDir(), FILENAMES.CRON_JOBS);
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
159
|
* Resolve the logs directory
|
|
172
160
|
*/
|
|
173
161
|
function resolveLogsDir() {
|
|
@@ -319,7 +307,6 @@ var init_paths = __esmMin((() => {
|
|
|
319
307
|
XOPC_DB: "xopc.db",
|
|
320
308
|
EXTENSIONS_LOCK: "extensions-lock.json",
|
|
321
309
|
CREDENTIALS_PROFILES: "auth-profiles.json",
|
|
322
|
-
CRON_JOBS: "jobs.json",
|
|
323
310
|
WORKSPACE_STATE: "workspace.json",
|
|
324
311
|
SKILLS_CACHE: "skills-cache.json",
|
|
325
312
|
/** Hub / CLI install provenance for ~/.xopc/skills/<id>. */
|
|
@@ -341,6 +328,6 @@ var init_paths = __esmMin((() => {
|
|
|
341
328
|
}));
|
|
342
329
|
//#endregion
|
|
343
330
|
init_paths();
|
|
344
|
-
export { ENV_VARS, FILENAMES, USER_MEMORY_FILENAME, USER_PROFILE_FILENAME, WORKSPACE_FILES, XOPC_DB_FILENAME, existsSync, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir,
|
|
331
|
+
export { ENV_VARS, FILENAMES, USER_MEMORY_FILENAME, USER_PROFILE_FILENAME, WORKSPACE_FILES, XOPC_DB_FILENAME, existsSync, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveDefaultAgentWorkspaceDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveUserDir, resolveUserMemoryPath, resolveUserProfilePath, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcDatabasePath };
|
|
345
332
|
|
|
346
333
|
//# sourceMappingURL=paths.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","names":["resolveAgentDirScoped","resolveAgentHomeScoped","resolveAgentProfileDirScoped","resolveAgentProfileMarkdownPathScoped"],"sources":["../../../src/config/paths.ts"],"sourcesContent":["import { join, sep } from 'path';\nimport { fileURLToPath } from 'url';\nimport { dirname } from 'path';\nimport { existsSync } from 'fs';\n\nimport type { Config } from './schema.js';\nimport {\n resolveAgentDir as resolveAgentDirScoped,\n resolveAgentHomeDir as resolveAgentHomeScoped,\n resolveAgentProfileDir as resolveAgentProfileDirScoped,\n resolveAgentProfileMarkdownPath as resolveAgentProfileMarkdownPathScoped,\n resolveAgentWorkspaceDir,\n} from '../agent/agent-scope.js';\nimport { ENV_VARS, resolveStateDir } from './paths-state.js';\n\nexport { ENV_VARS, resolveHomeDir, resolveStateDir, resolveXopcDatabasePath, XOPC_DB_FILENAME } from './paths-state.js';\nexport { resolveDefaultAgentWorkspaceDir } from './workspace-defaults.js';\nexport {\n resolveAgentWorkspaceDir,\n resolveAgentDir as resolveAgentDirFromConfig,\n resolveAgentHomeDir as resolveAgentHomeDirFromConfig,\n} from '../agent/agent-scope.js';\n\n// ============================================\n// File Names\n// ============================================\nconst ENV_BUNDLED_EXTENSIONS_ROOT = 'XOPC_BUNDLED_EXTENSIONS_ROOT';\nconst ENV_BUNDLED_SKILLS_ROOT = 'XOPC_BUNDLED_SKILLS_ROOT';\n\nexport const FILENAMES = {\n CONFIG: 'xopc.json',\n MODELS_JSON: 'models.json',\n /** Primary SQLite state database (`~/.xopc/xopc.db`). */\n XOPC_DB: 'xopc.db',\n EXTENSIONS_LOCK: 'extensions-lock.json',\n CREDENTIALS_PROFILES: 'auth-profiles.json',\n CRON_JOBS: 'jobs.json',\n WORKSPACE_STATE: 'workspace.json',\n SKILLS_CACHE: 'skills-cache.json',\n /** Hub / CLI install provenance for ~/.xopc/skills/<id>. */\n SKILLS_LOCK: 'skills-lock.json',\n PID: 'pid',\n STATUS: 'status.json',\n SOCKET: 'agent.sock',\n} as const;\n\n// ============================================\n// Workspace Files\n// ============================================\nexport const WORKSPACE_FILES = {\n SOUL: 'SOUL.md',\n IDENTITY: 'IDENTITY.md',\n AGENTS: 'AGENTS.md',\n TOOLS: 'TOOLS.md',\n HEARTBEAT: 'HEARTBEAT.md',\n MEMORY: 'MEMORY.md',\n} as const;\n\nexport const USER_PROFILE_FILENAME = 'PROFILE.md';\nexport const USER_MEMORY_FILENAME = 'MEMORY.md';\n\n// ============================================\n// Path Resolution Functions\n// ============================================\n\n/**\n * Resolve the main config file path\n */\nexport function resolveConfigPath(): string {\n return process.env[ENV_VARS.CONFIG_PATH] ?? join(resolveStateDir(), FILENAMES.CONFIG);\n}\n\n/**\n * Resolve the credentials directory\n */\nexport function resolveCredentialsDir(): string {\n return process.env[ENV_VARS.CREDENTIALS_DIR] ?? join(resolveStateDir(), 'credentials');\n}\n\n/**\n * Resolve the global auth-profiles.json path\n */\nexport function resolveAuthProfilesPath(): string {\n return join(resolveCredentialsDir(), FILENAMES.CREDENTIALS_PROFILES);\n}\n\n/** Global user profile root (`~/.xopc/user/`). */\nexport function resolveUserDir(): string {\n return join(resolveStateDir(), 'user');\n}\n\n/** Global human/user profile Markdown (`~/.xopc/user/PROFILE.md`). */\nexport function resolveUserProfilePath(): string {\n return join(resolveUserDir(), USER_PROFILE_FILENAME);\n}\n\n/** Global human/user long-term memory Markdown (`~/.xopc/user/MEMORY.md`). */\nexport function resolveUserMemoryPath(): string {\n return join(resolveUserDir(), USER_MEMORY_FILENAME);\n}\n\n/**\n * Resolve OAuth token file path for a provider\n */\nexport function resolveOAuthPath(provider: string): string {\n return join(resolveCredentialsDir(), 'oauth', `${provider}.json`);\n}\n\n/**\n * Internal agent state dir: `stateDir/agents/<id>/agent/`\n * (credentials, inbox IPC, pid, agent.json — not the Markdown workspace).\n */\nexport function resolveAgentDir(config: Config, agentId: string): string {\n return resolveAgentDirScoped(config, agentId);\n}\n\n/**\n * Per-agent home: `stateDir/agents/<id>/` (sessions + `agent/`).\n */\nexport function resolveAgentHomeDir(config: Config, agentId: string): string {\n return resolveAgentHomeScoped(config, agentId);\n}\n\n/** Agent profile Markdown root: `stateDir/agents/<id>/profile/`. */\nexport function resolveAgentProfileDir(config: Config, agentId: string): string {\n return resolveAgentProfileDirScoped(config, agentId);\n}\n\n/** Single file under {@link resolveAgentProfileDir} (basename only). */\nexport function resolveAgentProfileMarkdownPath(config: Config, agentId: string, filename: string): string {\n return resolveAgentProfileMarkdownPathScoped(config, agentId, filename);\n}\n\n/**\n * Resolve a profile system Markdown path (SOUL.md, …) under the agent `profile/` directory.\n */\nexport function resolveWorkspaceFile(config: Config, filename: string, agentId: string): string {\n return join(resolveAgentProfileDirScoped(config, agentId), filename);\n}\n\n/**\n * OpenClaw-aligned: per-agent auth-profiles.json directly under agent dir (no credentials subdirectory).\n */\nexport function resolveAgentAuthProfilesPath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), FILENAMES.CREDENTIALS_PROFILES);\n}\n\n/**\n * Resolve the inbox directory for an agent\n */\nexport function resolveInboxDir(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), 'inbox');\n}\n\n/**\n * Resolve the pending inbox directory\n */\nexport function resolveInboxPendingDir(config: Config, agentId: string): string {\n return join(resolveInboxDir(config, agentId), 'pending');\n}\n\n/**\n * Resolve the processed inbox directory\n */\nexport function resolveInboxProcessedDir(config: Config, agentId: string): string {\n return join(resolveInboxDir(config, agentId), 'processed');\n}\n\n/**\n * Resolve a specific inbox message path\n */\nexport function resolveInboxMessagePath(\n config: Config,\n messageId: string,\n pending: boolean,\n agentId: string,\n): string {\n const dir = pending ? resolveInboxPendingDir(config, agentId) : resolveInboxProcessedDir(config, agentId);\n return join(dir, `${messageId}.json`);\n}\n\n/**\n * Resolve the pid file path\n */\nexport function resolvePidPath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), FILENAMES.PID);\n}\n\n/**\n * Resolve the status.json path\n */\nexport function resolveStatusPath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), FILENAMES.STATUS);\n}\n\n/**\n * Resolve the Unix socket path\n */\nexport function resolveSocketPath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), FILENAMES.SOCKET);\n}\n\n/**\n * Resolve the extensions directory (global)\n */\nexport function resolveExtensionsDir(): string {\n return join(resolveStateDir(), 'extensions');\n}\n\n/**\n * Resolve the extensions lockfile path\n */\nexport function resolveExtensionsLockPath(): string {\n return join(resolveExtensionsDir(), FILENAMES.EXTENSIONS_LOCK);\n}\n\n/**\n * Per-agent extensions directory (`…/agents/<id>/agent/extensions/`) — used for discovery of\n * legacy or manually placed copies. CLI, web store, and `extensions dev` symlink installs use\n * {@link resolveExtensionsDir} (`~/.xopc/extensions`) only.\n */\nexport function resolveWorkspaceExtensionsDir(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), 'extensions');\n}\n\n/**\n * Resolve the skills directory (global)\n */\nexport function resolveSkillsDir(): string {\n return join(resolveStateDir(), 'skills');\n}\n\n/**\n * Resolve a specific skill path\n */\nexport function resolveSkillPath(skillId: string): string {\n return join(resolveSkillsDir(), skillId, 'SKILL.md');\n}\n\n/**\n * Skills hub lock file (~/.xopc/skills-lock.json): install source + content hash per managed skill id.\n */\nexport function resolveSkillsLockPath(): string {\n return join(resolveStateDir(), FILENAMES.SKILLS_LOCK);\n}\n\n/**\n * Resolve the cron directory\n */\nexport function resolveCronDir(): string {\n return join(resolveStateDir(), 'cron');\n}\n\n/**\n * Resolve the cron jobs file path\n */\nexport function resolveCronJobsPath(): string {\n return join(resolveCronDir(), FILENAMES.CRON_JOBS);\n}\n\n/**\n * Resolve the logs directory\n */\nexport function resolveLogsDir(): string {\n return process.env[ENV_VARS.LOG_DIR] ?? join(resolveStateDir(), 'logs');\n}\n\n/**\n * Resolve a specific log file path\n */\nexport function resolveLogPath(date: string): string {\n return join(resolveLogsDir(), `xopc-${date}.log`);\n}\n\n/**\n * Resolve the bin directory\n */\nexport function resolveBinDir(): string {\n return join(resolveStateDir(), 'bin');\n}\n\n/**\n * Resolve the xopc CLI path\n */\nexport function resolveXopcBinPath(): string {\n return join(resolveBinDir(), 'xopc');\n}\n\n/**\n * Resolve the tools directory\n */\nexport function resolveToolsDir(): string {\n return join(resolveStateDir(), 'tools');\n}\n\n/**\n * Resolve the Node.js tools directory\n */\nexport function resolveNodeToolsDir(): string {\n return join(resolveToolsDir(), 'node');\n}\n\n/**\n * Resolve the current Node.js bin directory\n */\nexport function resolveNodeBinDir(): string {\n return join(resolveNodeToolsDir(), 'current', 'bin');\n}\n\n/**\n * Resolve the node binary path\n */\nexport function resolveNodeBinPath(): string {\n return join(resolveNodeBinDir(), 'node');\n}\n\n/**\n * Resolve the npm binary path\n */\nexport function resolveNpmBinPath(): string {\n return join(resolveNodeBinDir(), 'npm');\n}\n\n/**\n * Resolve the models.json path\n */\nexport function resolveModelsJsonPath(): string {\n return join(resolveStateDir(), FILENAMES.MODELS_JSON);\n}\n\n/**\n * OpenClaw-aligned: workspace setup state directory (`<workspace>/.xopc/`).\n */\nexport function resolveWorkspaceStateDir(config: Config, agentId: string): string {\n return join(resolveAgentWorkspaceDir(config, agentId), '.xopc');\n}\n\n/**\n * OpenClaw-aligned: workspace setup state file (`<workspace>/.xopc/workspace.json`).\n */\nexport function resolveWorkspaceStatePath(config: Config, agentId: string): string {\n return join(resolveWorkspaceStateDir(config, agentId), FILENAMES.WORKSPACE_STATE);\n}\n\n/**\n * Resolve the skills cache file path (internal agent state, under agent dir).\n */\nexport function resolveSkillsCachePath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), 'state', FILENAMES.SKILLS_CACHE);\n}\n\n/**\n * Resolve the bundled extensions directory (shipped with xopc).\n *\n * Layout-dependent candidates (first existing wins):\n * - `XOPC_BUNDLED_EXTENSIONS_ROOT` (Electron packaged gateway override)\n * - `dist/src/config` → `dist/extensions` (npm / gateway)\n * - `src/config` → `dist/extensions` when built, else `extensions/` (dev, tsx)\n * - `out/server` → `dist/electron/extensions` (Electron extension bundles)\n */\nexport function resolveBundledExtensionsDir(): string | null {\n const envDir = process.env[ENV_BUNDLED_EXTENSIONS_ROOT];\n if (envDir && existsSync(envDir)) {\n return envDir;\n }\n\n try {\n const currentFile = fileURLToPath(import.meta.url);\n const srcDir = dirname(currentFile);\n const isElectronServerBundle = srcDir.endsWith(`${sep}out${sep}server`);\n const candidates = isElectronServerBundle\n ? [join(srcDir, '..', '..', 'dist', 'electron', 'extensions')]\n : [\n // In source-tree dev, prefer compiled bundled extensions when present: manifests point\n // at built JavaScript entries (for example src/index.js), while source folders contain TS.\n join(srcDir, '..', '..', 'dist', 'extensions'),\n join(srcDir, '..', '..', 'extensions'),\n join(srcDir, '..', '..', '..', 'dist', 'extensions'),\n join(srcDir, '..', '..', '..', 'extensions'),\n ];\n for (const dir of candidates) {\n if (existsSync(dir)) {\n return dir;\n }\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Resolve the bundled skills directory (shipped with xopc)\n */\nexport function resolveBundledSkillsDir(): string | null {\n const envDir = process.env[ENV_BUNDLED_SKILLS_ROOT];\n if (envDir && existsSync(envDir)) {\n return envDir;\n }\n\n try {\n const currentFile = fileURLToPath(import.meta.url);\n const srcDir = dirname(currentFile);\n \n // Production (npm): dist/config/paths.js -> ../../ -> package root -> skills\n const packageRoot = join(srcDir, '..', '..');\n const skillsDir = join(packageRoot, 'skills');\n if (existsSync(skillsDir)) {\n return skillsDir;\n }\n \n // Development (source): src/config/paths.js -> ../../../ -> package root -> skills\n const devPackageRoot = join(srcDir, '..', '..', '..');\n const devSkillsDir = join(devPackageRoot, 'skills');\n if (existsSync(devSkillsDir)) {\n return devSkillsDir;\n }\n \n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Path to extension-sdk entry (for jiti / extension loader aliases).\n */\nexport function resolveExtensionSdkPath(): string {\n try {\n const currentFile = fileURLToPath(import.meta.url);\n const srcDir = dirname(currentFile);\n const adjacent = join(srcDir, '..', 'extensions', 'sdk', 'index.ts');\n if (existsSync(adjacent)) {\n return adjacent;\n }\n const fromPackageRoot = join(srcDir, '..', '..', 'src', 'extensions', 'sdk', 'index.ts');\n if (existsSync(fromPackageRoot)) {\n return fromPackageRoot;\n }\n const cwd = join(process.cwd(), 'src', 'extensions', 'sdk', 'index.ts');\n if (existsSync(cwd)) {\n return cwd;\n }\n return adjacent;\n } catch {\n return join(process.cwd(), 'src', 'extensions', 'sdk', 'index.ts');\n }\n}\n\n// Re-export existsSync for bundled paths\nexport { existsSync };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"paths.js","names":["resolveAgentDirScoped","resolveAgentHomeScoped","resolveAgentProfileDirScoped","resolveAgentProfileMarkdownPathScoped"],"sources":["../../../src/config/paths.ts"],"sourcesContent":["import { join, sep } from 'path';\nimport { fileURLToPath } from 'url';\nimport { dirname } from 'path';\nimport { existsSync } from 'fs';\n\nimport type { Config } from './schema.js';\nimport {\n resolveAgentDir as resolveAgentDirScoped,\n resolveAgentHomeDir as resolveAgentHomeScoped,\n resolveAgentProfileDir as resolveAgentProfileDirScoped,\n resolveAgentProfileMarkdownPath as resolveAgentProfileMarkdownPathScoped,\n resolveAgentWorkspaceDir,\n} from '../agent/agent-scope.js';\nimport { ENV_VARS, resolveStateDir } from './paths-state.js';\n\nexport { ENV_VARS, resolveHomeDir, resolveStateDir, resolveXopcDatabasePath, XOPC_DB_FILENAME } from './paths-state.js';\nexport { resolveDefaultAgentWorkspaceDir } from './workspace-defaults.js';\nexport {\n resolveAgentWorkspaceDir,\n resolveAgentDir as resolveAgentDirFromConfig,\n resolveAgentHomeDir as resolveAgentHomeDirFromConfig,\n} from '../agent/agent-scope.js';\n\n// ============================================\n// File Names\n// ============================================\nconst ENV_BUNDLED_EXTENSIONS_ROOT = 'XOPC_BUNDLED_EXTENSIONS_ROOT';\nconst ENV_BUNDLED_SKILLS_ROOT = 'XOPC_BUNDLED_SKILLS_ROOT';\n\nexport const FILENAMES = {\n CONFIG: 'xopc.json',\n MODELS_JSON: 'models.json',\n /** Primary SQLite state database (`~/.xopc/xopc.db`). */\n XOPC_DB: 'xopc.db',\n EXTENSIONS_LOCK: 'extensions-lock.json',\n CREDENTIALS_PROFILES: 'auth-profiles.json',\n WORKSPACE_STATE: 'workspace.json',\n SKILLS_CACHE: 'skills-cache.json',\n /** Hub / CLI install provenance for ~/.xopc/skills/<id>. */\n SKILLS_LOCK: 'skills-lock.json',\n PID: 'pid',\n STATUS: 'status.json',\n SOCKET: 'agent.sock',\n} as const;\n\n// ============================================\n// Workspace Files\n// ============================================\nexport const WORKSPACE_FILES = {\n SOUL: 'SOUL.md',\n IDENTITY: 'IDENTITY.md',\n AGENTS: 'AGENTS.md',\n TOOLS: 'TOOLS.md',\n HEARTBEAT: 'HEARTBEAT.md',\n MEMORY: 'MEMORY.md',\n} as const;\n\nexport const USER_PROFILE_FILENAME = 'PROFILE.md';\nexport const USER_MEMORY_FILENAME = 'MEMORY.md';\n\n// ============================================\n// Path Resolution Functions\n// ============================================\n\n/**\n * Resolve the main config file path\n */\nexport function resolveConfigPath(): string {\n return process.env[ENV_VARS.CONFIG_PATH] ?? join(resolveStateDir(), FILENAMES.CONFIG);\n}\n\n/**\n * Resolve the credentials directory\n */\nexport function resolveCredentialsDir(): string {\n return process.env[ENV_VARS.CREDENTIALS_DIR] ?? join(resolveStateDir(), 'credentials');\n}\n\n/**\n * Resolve the global auth-profiles.json path\n */\nexport function resolveAuthProfilesPath(): string {\n return join(resolveCredentialsDir(), FILENAMES.CREDENTIALS_PROFILES);\n}\n\n/** Global user profile root (`~/.xopc/user/`). */\nexport function resolveUserDir(): string {\n return join(resolveStateDir(), 'user');\n}\n\n/** Global human/user profile Markdown (`~/.xopc/user/PROFILE.md`). */\nexport function resolveUserProfilePath(): string {\n return join(resolveUserDir(), USER_PROFILE_FILENAME);\n}\n\n/** Global human/user long-term memory Markdown (`~/.xopc/user/MEMORY.md`). */\nexport function resolveUserMemoryPath(): string {\n return join(resolveUserDir(), USER_MEMORY_FILENAME);\n}\n\n/**\n * Resolve OAuth token file path for a provider\n */\nexport function resolveOAuthPath(provider: string): string {\n return join(resolveCredentialsDir(), 'oauth', `${provider}.json`);\n}\n\n/**\n * Internal agent state dir: `stateDir/agents/<id>/agent/`\n * (credentials, inbox IPC, pid, agent.json — not the Markdown workspace).\n */\nexport function resolveAgentDir(config: Config, agentId: string): string {\n return resolveAgentDirScoped(config, agentId);\n}\n\n/**\n * Per-agent home: `stateDir/agents/<id>/` (sessions + `agent/`).\n */\nexport function resolveAgentHomeDir(config: Config, agentId: string): string {\n return resolveAgentHomeScoped(config, agentId);\n}\n\n/** Agent profile Markdown root: `stateDir/agents/<id>/profile/`. */\nexport function resolveAgentProfileDir(config: Config, agentId: string): string {\n return resolveAgentProfileDirScoped(config, agentId);\n}\n\n/** Single file under {@link resolveAgentProfileDir} (basename only). */\nexport function resolveAgentProfileMarkdownPath(config: Config, agentId: string, filename: string): string {\n return resolveAgentProfileMarkdownPathScoped(config, agentId, filename);\n}\n\n/**\n * Resolve a profile system Markdown path (SOUL.md, …) under the agent `profile/` directory.\n */\nexport function resolveWorkspaceFile(config: Config, filename: string, agentId: string): string {\n return join(resolveAgentProfileDirScoped(config, agentId), filename);\n}\n\n/**\n * OpenClaw-aligned: per-agent auth-profiles.json directly under agent dir (no credentials subdirectory).\n */\nexport function resolveAgentAuthProfilesPath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), FILENAMES.CREDENTIALS_PROFILES);\n}\n\n/**\n * Resolve the inbox directory for an agent\n */\nexport function resolveInboxDir(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), 'inbox');\n}\n\n/**\n * Resolve the pending inbox directory\n */\nexport function resolveInboxPendingDir(config: Config, agentId: string): string {\n return join(resolveInboxDir(config, agentId), 'pending');\n}\n\n/**\n * Resolve the processed inbox directory\n */\nexport function resolveInboxProcessedDir(config: Config, agentId: string): string {\n return join(resolveInboxDir(config, agentId), 'processed');\n}\n\n/**\n * Resolve a specific inbox message path\n */\nexport function resolveInboxMessagePath(\n config: Config,\n messageId: string,\n pending: boolean,\n agentId: string,\n): string {\n const dir = pending ? resolveInboxPendingDir(config, agentId) : resolveInboxProcessedDir(config, agentId);\n return join(dir, `${messageId}.json`);\n}\n\n/**\n * Resolve the pid file path\n */\nexport function resolvePidPath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), FILENAMES.PID);\n}\n\n/**\n * Resolve the status.json path\n */\nexport function resolveStatusPath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), FILENAMES.STATUS);\n}\n\n/**\n * Resolve the Unix socket path\n */\nexport function resolveSocketPath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), FILENAMES.SOCKET);\n}\n\n/**\n * Resolve the extensions directory (global)\n */\nexport function resolveExtensionsDir(): string {\n return join(resolveStateDir(), 'extensions');\n}\n\n/**\n * Resolve the extensions lockfile path\n */\nexport function resolveExtensionsLockPath(): string {\n return join(resolveExtensionsDir(), FILENAMES.EXTENSIONS_LOCK);\n}\n\n/**\n * Per-agent extensions directory (`…/agents/<id>/agent/extensions/`) — used for discovery of\n * legacy or manually placed copies. CLI, web store, and `extensions dev` symlink installs use\n * {@link resolveExtensionsDir} (`~/.xopc/extensions`) only.\n */\nexport function resolveWorkspaceExtensionsDir(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), 'extensions');\n}\n\n/**\n * Resolve the skills directory (global)\n */\nexport function resolveSkillsDir(): string {\n return join(resolveStateDir(), 'skills');\n}\n\n/**\n * Resolve a specific skill path\n */\nexport function resolveSkillPath(skillId: string): string {\n return join(resolveSkillsDir(), skillId, 'SKILL.md');\n}\n\n/**\n * Skills hub lock file (~/.xopc/skills-lock.json): install source + content hash per managed skill id.\n */\nexport function resolveSkillsLockPath(): string {\n return join(resolveStateDir(), FILENAMES.SKILLS_LOCK);\n}\n\n/**\n * Resolve the logs directory\n */\nexport function resolveLogsDir(): string {\n return process.env[ENV_VARS.LOG_DIR] ?? join(resolveStateDir(), 'logs');\n}\n\n/**\n * Resolve a specific log file path\n */\nexport function resolveLogPath(date: string): string {\n return join(resolveLogsDir(), `xopc-${date}.log`);\n}\n\n/**\n * Resolve the bin directory\n */\nexport function resolveBinDir(): string {\n return join(resolveStateDir(), 'bin');\n}\n\n/**\n * Resolve the xopc CLI path\n */\nexport function resolveXopcBinPath(): string {\n return join(resolveBinDir(), 'xopc');\n}\n\n/**\n * Resolve the tools directory\n */\nexport function resolveToolsDir(): string {\n return join(resolveStateDir(), 'tools');\n}\n\n/**\n * Resolve the Node.js tools directory\n */\nexport function resolveNodeToolsDir(): string {\n return join(resolveToolsDir(), 'node');\n}\n\n/**\n * Resolve the current Node.js bin directory\n */\nexport function resolveNodeBinDir(): string {\n return join(resolveNodeToolsDir(), 'current', 'bin');\n}\n\n/**\n * Resolve the node binary path\n */\nexport function resolveNodeBinPath(): string {\n return join(resolveNodeBinDir(), 'node');\n}\n\n/**\n * Resolve the npm binary path\n */\nexport function resolveNpmBinPath(): string {\n return join(resolveNodeBinDir(), 'npm');\n}\n\n/**\n * Resolve the models.json path\n */\nexport function resolveModelsJsonPath(): string {\n return join(resolveStateDir(), FILENAMES.MODELS_JSON);\n}\n\n/**\n * OpenClaw-aligned: workspace setup state directory (`<workspace>/.xopc/`).\n */\nexport function resolveWorkspaceStateDir(config: Config, agentId: string): string {\n return join(resolveAgentWorkspaceDir(config, agentId), '.xopc');\n}\n\n/**\n * OpenClaw-aligned: workspace setup state file (`<workspace>/.xopc/workspace.json`).\n */\nexport function resolveWorkspaceStatePath(config: Config, agentId: string): string {\n return join(resolveWorkspaceStateDir(config, agentId), FILENAMES.WORKSPACE_STATE);\n}\n\n/**\n * Resolve the skills cache file path (internal agent state, under agent dir).\n */\nexport function resolveSkillsCachePath(config: Config, agentId: string): string {\n return join(resolveAgentDir(config, agentId), 'state', FILENAMES.SKILLS_CACHE);\n}\n\n/**\n * Resolve the bundled extensions directory (shipped with xopc).\n *\n * Layout-dependent candidates (first existing wins):\n * - `XOPC_BUNDLED_EXTENSIONS_ROOT` (Electron packaged gateway override)\n * - `dist/src/config` → `dist/extensions` (npm / gateway)\n * - `src/config` → `dist/extensions` when built, else `extensions/` (dev, tsx)\n * - `out/server` → `dist/electron/extensions` (Electron extension bundles)\n */\nexport function resolveBundledExtensionsDir(): string | null {\n const envDir = process.env[ENV_BUNDLED_EXTENSIONS_ROOT];\n if (envDir && existsSync(envDir)) {\n return envDir;\n }\n\n try {\n const currentFile = fileURLToPath(import.meta.url);\n const srcDir = dirname(currentFile);\n const isElectronServerBundle = srcDir.endsWith(`${sep}out${sep}server`);\n const candidates = isElectronServerBundle\n ? [join(srcDir, '..', '..', 'dist', 'electron', 'extensions')]\n : [\n // In source-tree dev, prefer compiled bundled extensions when present: manifests point\n // at built JavaScript entries (for example src/index.js), while source folders contain TS.\n join(srcDir, '..', '..', 'dist', 'extensions'),\n join(srcDir, '..', '..', 'extensions'),\n join(srcDir, '..', '..', '..', 'dist', 'extensions'),\n join(srcDir, '..', '..', '..', 'extensions'),\n ];\n for (const dir of candidates) {\n if (existsSync(dir)) {\n return dir;\n }\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Resolve the bundled skills directory (shipped with xopc)\n */\nexport function resolveBundledSkillsDir(): string | null {\n const envDir = process.env[ENV_BUNDLED_SKILLS_ROOT];\n if (envDir && existsSync(envDir)) {\n return envDir;\n }\n\n try {\n const currentFile = fileURLToPath(import.meta.url);\n const srcDir = dirname(currentFile);\n \n // Production (npm): dist/config/paths.js -> ../../ -> package root -> skills\n const packageRoot = join(srcDir, '..', '..');\n const skillsDir = join(packageRoot, 'skills');\n if (existsSync(skillsDir)) {\n return skillsDir;\n }\n \n // Development (source): src/config/paths.js -> ../../../ -> package root -> skills\n const devPackageRoot = join(srcDir, '..', '..', '..');\n const devSkillsDir = join(devPackageRoot, 'skills');\n if (existsSync(devSkillsDir)) {\n return devSkillsDir;\n }\n \n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Path to extension-sdk entry (for jiti / extension loader aliases).\n */\nexport function resolveExtensionSdkPath(): string {\n try {\n const currentFile = fileURLToPath(import.meta.url);\n const srcDir = dirname(currentFile);\n const adjacent = join(srcDir, '..', 'extensions', 'sdk', 'index.ts');\n if (existsSync(adjacent)) {\n return adjacent;\n }\n const fromPackageRoot = join(srcDir, '..', '..', 'src', 'extensions', 'sdk', 'index.ts');\n if (existsSync(fromPackageRoot)) {\n return fromPackageRoot;\n }\n const cwd = join(process.cwd(), 'src', 'extensions', 'sdk', 'index.ts');\n if (existsSync(cwd)) {\n return cwd;\n }\n return adjacent;\n } catch {\n return join(process.cwd(), 'src', 'extensions', 'sdk', 'index.ts');\n }\n}\n\n// Re-export existsSync for bundled paths\nexport { existsSync };\n"],"mappings":"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"}
|
|
@@ -73,7 +73,6 @@ var ProfileManager = class {
|
|
|
73
73
|
await mkdir(join(stateDir, "credentials"), { recursive: true });
|
|
74
74
|
await mkdir(join(stateDir, "extensions"), { recursive: true });
|
|
75
75
|
await mkdir(join(stateDir, "skills"), { recursive: true });
|
|
76
|
-
await mkdir(join(stateDir, "cron"), { recursive: true });
|
|
77
76
|
await mkdir(join(stateDir, "logs"), { recursive: true });
|
|
78
77
|
await mkdir(join(stateDir, "bin"), { recursive: true });
|
|
79
78
|
await mkdir(join(stateDir, "tools"), { recursive: true });
|