@xopcai/xopc 0.0.115 → 0.0.117
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -10
- package/README.zh-CN.md +26 -10
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/demo-memory/src/index.d.ts +6 -0
- package/dist/extensions/demo-memory/src/index.js +132 -0
- package/dist/extensions/demo-memory/src/index.js.map +1 -0
- package/dist/extensions/demo-memory/xopc.extension.json +15 -0
- package/dist/extensions/feishu/src/schema/config-schema.d.ts +3 -3
- package/dist/extensions/telegram/src/command-handler.js +1 -2
- package/dist/extensions/telegram/src/command-handler.js.map +1 -1
- package/dist/extensions/telegram/src/config-schema.d.ts +8 -8
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/config-schema.d.ts +3 -3
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DVnBfANm.js → agent-avatar-dicebear-BBLhJ2C6.js} +1 -1
- package/dist/gateway/static/root/assets/agents-C6xgagZd.js +71 -0
- package/dist/gateway/static/root/assets/app-management-settings-panel-CBpLONvG.js +1 -0
- package/dist/gateway/static/root/assets/{appearance-settings-BQpPSTHD.js → appearance-settings-CGcc54yj.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-DdDx0V4z.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-CXu-Csep.js → archive-plugin-DZsVqMhU.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-BAjgOoGY.js → attachment-load-CIol6JWX.js} +1 -1
- package/dist/gateway/static/root/assets/{binary-plugins-BSBgB2hO.js → binary-plugins-B3UauMfp.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-BpXw9TTR.js → block-editor-2HJoFchH.js} +3 -3
- package/dist/gateway/static/root/assets/browser-settings-page-CUOO-PQk.js +8 -0
- package/dist/gateway/static/root/assets/capability-presets-api-XQoMTI0A.js +1 -0
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-CfqF-kGr.js +1 -0
- package/dist/gateway/static/root/assets/{channels-settings-BbPUpzWB.js → channels-settings-BYyRzsex.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-DIvEz4NX.js +2 -0
- package/dist/gateway/static/root/assets/cron-api-R41aQCX9.js +1 -0
- package/dist/gateway/static/root/assets/cron-page-D97nFqQD.js +3 -0
- package/dist/gateway/static/root/assets/dreaming-settings-Bceaw1PG.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-D9kgUHCc.js → extension-debug-page-DX5WRE_t.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CGyhXqzR.js → extension-page-Buah7Bw-.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DL8Xquqd.js → extension-settings-page-DuroLVnf.js} +1 -1
- package/dist/gateway/static/root/assets/{fetch-D0VXA932.js → fetch-B5zdl27C.js} +1 -1
- package/dist/gateway/static/root/assets/{format-interval-label-Be8SmgUw.js → format-interval-label-Dn_QKIqb.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-config-api-gT4ZhE7h.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-iISWAZRm.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-DERUH61L.js → gateway-startup-retry-B3kL8KGY.js} +1 -1
- package/dist/gateway/static/root/assets/goal-detail-page-DCUROLMQ.js +1 -0
- package/dist/gateway/static/root/assets/{goals-config-api-BPmqWk90.js → goals-config-api-AR-fVh0P.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-Cpb21ezg.js +2 -0
- package/dist/gateway/static/root/assets/goals-settings-CPAuFwoD.js +1 -0
- package/dist/gateway/static/root/assets/{heartbeat-config-api-Bfdzr8oV.js → heartbeat-config-api-D7bKFEeO.js} +1 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-CC69vNx0.js +1 -0
- package/dist/gateway/static/root/assets/index-CwhK8qCh.js +122 -0
- package/dist/gateway/static/root/assets/index-CyfhARL-.css +1 -0
- package/dist/gateway/static/root/assets/{interval-presets-utKbuCRY.js → interval-presets-0DtsnxE0.js} +1 -1
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CjqS6c6V.js → keyboard-shortcuts-settings-BPREtN8B.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-DefCgF4o.js +2 -0
- package/dist/gateway/static/root/assets/{markdown-split-DW8C47iB.js → markdown-split-ChbR9LGO.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-D6HwDhDT.js → media-plugins-B82oP80n.js} +1 -1
- package/dist/gateway/static/root/assets/messages-Cf1O9JB0.js +3 -0
- package/dist/gateway/static/root/assets/models-hub-panel-DmKiIihT.js +2 -0
- package/dist/gateway/static/root/assets/note-detail-page-CxxfLRJZ.js +2 -0
- package/dist/gateway/static/root/assets/{note-image-lightbox-pJM35Pz5.js → note-image-lightbox-CDknITM3.js} +1 -1
- package/dist/gateway/static/root/assets/notes-page-X2slSx7V.js +1 -0
- package/dist/gateway/static/root/assets/{preview-open-alternatives-CVwHuyN6.js → preview-open-alternatives-DV3xQsWB.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BvmUWqgu.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-Ba-UEk7x.js → save-bar-controls-BODCXnvY.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-CNN9595U.js → schedule-field-CgJSCD3B.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-DnNMmtD5.js → schema-form-qtfEI6QM.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-B0yESuuL.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-q2M8RKOo.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-CmOz80i5.js → settings-collapsible-section-BHZKjVcS.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-BmK7JJOV.js → settings-form-section-5i35D-J1.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-CGozabLD.js +1 -0
- package/dist/gateway/static/root/assets/setup-status-panel-FoOSe6nU.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-Dp2qGrHC.js → share-preview-page-B0H63tDv.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-Cy5zWyYQ.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-DaZNFro9.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-CnwtUzvw.js +2 -0
- package/dist/gateway/static/root/assets/system-settings-panel-DXs2VmBt.js +1 -0
- package/dist/gateway/static/root/assets/typed-models-lib-4gPuydz_.js +1 -0
- package/dist/gateway/static/root/assets/{use-channel-catalog-CHlO8J9G.js → use-channel-catalog-BCjP_VHb.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DvKiOglO.js +1 -0
- package/dist/gateway/static/root/assets/{voice-player-store-DDDWYHvg.js → voice-player-store-BlF9V05n.js} +1 -1
- package/dist/gateway/static/root/assets/workflows-page-CAVZcONQ.js +18 -0
- package/dist/gateway/static/root/index.html +5 -5
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +1 -1
- package/dist/src/agent/agent-manager.js +7 -8
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/agent-scope.js +6 -8
- package/dist/src/agent/agent-scope.js.map +1 -1
- package/dist/src/agent/background-review/coordinator.js +0 -1
- package/dist/src/agent/background-review/coordinator.js.map +1 -1
- package/dist/src/agent/background-review/run-background-review.d.ts +0 -2
- package/dist/src/agent/background-review/run-background-review.js +2 -4
- package/dist/src/agent/background-review/run-background-review.js.map +1 -1
- package/dist/src/agent/background-review/settings.js +8 -7
- package/dist/src/agent/background-review/settings.js.map +1 -1
- package/dist/src/agent/bootstrap/bootstrap-context.d.ts +2 -2
- package/dist/src/agent/bootstrap/bootstrap-context.js +4 -4
- package/dist/src/agent/bootstrap/bootstrap-context.js.map +1 -1
- package/dist/src/agent/context/workspace-seed.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js.map +1 -1
- package/dist/src/agent/fallback/candidates.js +6 -3
- package/dist/src/agent/fallback/candidates.js.map +1 -1
- package/dist/src/agent/goals/checklist-judge.d.ts +1 -0
- package/dist/src/agent/goals/checklist-judge.js +1 -1
- package/dist/src/agent/goals/checklist-judge.js.map +1 -1
- package/dist/src/agent/goals/evaluate-turn.d.ts +1 -0
- package/dist/src/agent/goals/evaluate-turn.js +1 -0
- package/dist/src/agent/goals/evaluate-turn.js.map +1 -1
- package/dist/src/agent/goals/post-turn.js +8 -1
- package/dist/src/agent/goals/post-turn.js.map +1 -1
- package/dist/src/agent/image/generation/runtime-types.d.ts +2 -0
- package/dist/src/agent/image/generation/runtime.js +1 -1
- package/dist/src/agent/image/generation/runtime.js.map +1 -1
- package/dist/src/agent/image/image-helpers.d.ts +1 -1
- package/dist/src/agent/image/image-helpers.js +4 -17
- package/dist/src/agent/image/image-helpers.js.map +1 -1
- package/dist/src/agent/image/image-model-fallback.js +1 -1
- package/dist/src/agent/image/image-model-fallback.js.map +1 -1
- package/dist/src/agent/image/inbound-image-handling.js +1 -1
- package/dist/src/agent/image/inbound-image-handling.js.map +1 -1
- package/dist/src/agent/image/tool-model-config.d.ts +1 -1
- package/dist/src/agent/image/tool-model-config.js +2 -2
- package/dist/src/agent/image/tool-model-config.js.map +1 -1
- package/dist/src/agent/image/understanding/pi-ai-provider.js +5 -2
- package/dist/src/agent/image/understanding/pi-ai-provider.js.map +1 -1
- package/dist/src/agent/image/understanding/provider-registry.d.ts +1 -0
- package/dist/src/agent/image/understanding/provider-registry.js +16 -2
- package/dist/src/agent/image/understanding/provider-registry.js.map +1 -1
- package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js +1 -1
- package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js.map +1 -1
- package/dist/src/agent/media-generation/runtime-shared.d.ts +5 -2
- package/dist/src/agent/media-generation/runtime-shared.js +1 -1
- package/dist/src/agent/media-generation/runtime-shared.js.map +1 -1
- package/dist/src/agent/memory/builtin-memory-store.d.ts +2 -0
- package/dist/src/agent/memory/builtin-memory-store.js +4 -0
- package/dist/src/agent/memory/builtin-memory-store.js.map +1 -1
- package/dist/src/agent/memory/builtin-provider.d.ts +31 -9
- package/dist/src/agent/memory/builtin-provider.js +261 -11
- package/dist/src/agent/memory/builtin-provider.js.map +1 -1
- package/dist/src/agent/memory/context-assembler.d.ts +10 -0
- package/dist/src/agent/memory/context-assembler.js +26 -0
- package/dist/src/agent/memory/context-assembler.js.map +1 -0
- package/dist/src/agent/memory/create-memory-manager.js +25 -7
- package/dist/src/agent/memory/create-memory-manager.js.map +1 -1
- package/dist/src/agent/memory/dreaming/config.d.ts +1 -6
- package/dist/src/agent/memory/dreaming/config.js +8 -8
- package/dist/src/agent/memory/dreaming/config.js.map +1 -1
- package/dist/src/agent/memory/dreaming/deep-promotion.d.ts +2 -0
- package/dist/src/agent/memory/dreaming/deep-promotion.js +24 -0
- package/dist/src/agent/memory/dreaming/deep-promotion.js.map +1 -1
- package/dist/src/agent/memory/index.d.ts +1 -0
- package/dist/src/agent/memory/index.js +4 -3
- package/dist/src/agent/memory/inject-prefetch.js +6 -2
- package/dist/src/agent/memory/inject-prefetch.js.map +1 -1
- package/dist/src/agent/memory/manager.d.ts +37 -1
- package/dist/src/agent/memory/manager.js +332 -40
- package/dist/src/agent/memory/manager.js.map +1 -1
- package/dist/src/agent/memory/memory-config.js +12 -15
- package/dist/src/agent/memory/memory-config.js.map +1 -1
- package/dist/src/agent/memory/plugin-discovery.d.ts +19 -5
- package/dist/src/agent/memory/plugin-discovery.js +97 -31
- package/dist/src/agent/memory/plugin-discovery.js.map +1 -1
- package/dist/src/agent/memory/provider.d.ts +20 -15
- package/dist/src/agent/memory/stub-memory-provider.d.ts +17 -2
- package/dist/src/agent/memory/stub-memory-provider.js +20 -3
- package/dist/src/agent/memory/stub-memory-provider.js.map +1 -1
- package/dist/src/agent/memory/types.d.ts +136 -0
- package/dist/src/agent/models/manager.d.ts +1 -1
- package/dist/src/agent/models/manager.js +1 -1
- package/dist/src/agent/models/manager.js.map +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.d.ts +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js +2 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.d.ts +2 -2
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js +1 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js.map +1 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.d.ts +2 -6
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +2 -8
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js.map +1 -1
- package/dist/src/agent/reply/post-compaction-context.js +11 -6
- package/dist/src/agent/reply/post-compaction-context.js.map +1 -1
- package/dist/src/agent/reply/startup-context.js +8 -9
- package/dist/src/agent/reply/startup-context.js.map +1 -1
- package/dist/src/agent/service/process-direct-streaming.js +1 -4
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service/session-context-report.js +1 -1
- package/dist/src/agent/service/session-context-report.js.map +1 -1
- package/dist/src/agent/service.js +21 -25
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/service.types.d.ts +1 -2
- package/dist/src/agent/session/session-hydrator.js +1 -2
- package/dist/src/agent/session/session-hydrator.js.map +1 -1
- package/dist/src/agent/session/session-inspector.d.ts +1 -1
- package/dist/src/agent/session/session-inspector.js +9 -14
- package/dist/src/agent/session/session-inspector.js.map +1 -1
- package/dist/src/agent/skills/hub-pull.js +1 -1
- package/dist/src/agent/starter-agents.d.ts +1 -3
- package/dist/src/agent/starter-agents.js +13 -21
- package/dist/src/agent/starter-agents.js.map +1 -1
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -2
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +1 -1
- package/dist/src/agent/tools/composio-tool.d.ts +8 -0
- package/dist/src/agent/tools/composio-tool.js +46 -0
- package/dist/src/agent/tools/composio-tool.js.map +1 -0
- package/dist/src/agent/tools/curated-memory-tool.d.ts +2 -5
- package/dist/src/agent/tools/curated-memory-tool.js +20 -16
- package/dist/src/agent/tools/curated-memory-tool.js.map +1 -1
- package/dist/src/agent/tools/factory.d.ts +0 -4
- package/dist/src/agent/tools/factory.js +32 -66
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/image-generate-tool.d.ts +1 -1
- package/dist/src/agent/tools/image-generate-tool.js +19 -14
- package/dist/src/agent/tools/image-generate-tool.js.map +1 -1
- package/dist/src/agent/tools/image-tool.js +1 -3
- package/dist/src/agent/tools/image-tool.js.map +1 -1
- package/dist/src/agent/tools/index.d.ts +1 -0
- package/dist/src/agent/tools/index.js +2 -1
- package/dist/src/agent/tools/memory-tool.d.ts +2 -2
- package/dist/src/agent/tools/memory-tool.js +39 -14
- package/dist/src/agent/tools/memory-tool.js.map +1 -1
- package/dist/src/agent/tools/session-search-tool.js +1 -3
- package/dist/src/agent/tools/session-search-tool.js.map +1 -1
- package/dist/src/agent/tools/web-extract.js +6 -5
- package/dist/src/agent/tools/web-extract.js.map +1 -1
- package/dist/src/agent/workflow/builtins/audit-repo.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/audit-repo.js +15 -2
- package/dist/src/agent/workflow/builtins/audit-repo.js.map +1 -1
- package/dist/src/agent/workflow/builtins/client-proposal.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/client-proposal.js +10 -1
- package/dist/src/agent/workflow/builtins/client-proposal.js.map +1 -1
- package/dist/src/agent/workflow/builtins/competitor-scan.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/competitor-scan.js +16 -2
- package/dist/src/agent/workflow/builtins/competitor-scan.js.map +1 -1
- package/dist/src/agent/workflow/builtins/content-draft.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/content-draft.js +15 -2
- package/dist/src/agent/workflow/builtins/content-draft.js.map +1 -1
- package/dist/src/agent/workflow/builtins/content-repurpose.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/content-repurpose.js +10 -1
- package/dist/src/agent/workflow/builtins/content-repurpose.js.map +1 -1
- package/dist/src/agent/workflow/builtins/debug-incident.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/debug-incident.js +9 -1
- package/dist/src/agent/workflow/builtins/debug-incident.js.map +1 -1
- package/dist/src/agent/workflow/builtins/decision-compare.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/decision-compare.js +16 -2
- package/dist/src/agent/workflow/builtins/decision-compare.js.map +1 -1
- package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/implementation-plan.js +11 -1
- package/dist/src/agent/workflow/builtins/implementation-plan.js.map +1 -1
- package/dist/src/agent/workflow/builtins/inbox-triage.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/inbox-triage.js +11 -1
- package/dist/src/agent/workflow/builtins/inbox-triage.js.map +1 -1
- package/dist/src/agent/workflow/builtins/meeting-prep.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/meeting-prep.js +9 -1
- package/dist/src/agent/workflow/builtins/meeting-prep.js.map +1 -1
- package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/multi-perspective-review.js +9 -1
- package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +1 -1
- package/dist/src/agent/workflow/builtins/offer-design.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/offer-design.js +10 -1
- package/dist/src/agent/workflow/builtins/offer-design.js.map +1 -1
- package/dist/src/agent/workflow/builtins/pr-review.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/pr-review.js +9 -1
- package/dist/src/agent/workflow/builtins/pr-review.js.map +1 -1
- package/dist/src/agent/workflow/builtins/release-check.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/release-check.js +10 -1
- package/dist/src/agent/workflow/builtins/release-check.js.map +1 -1
- package/dist/src/agent/workflow/builtins/research.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/research.js +16 -2
- package/dist/src/agent/workflow/builtins/research.js.map +1 -1
- package/dist/src/agent/workflow/builtins/weekly-review.d.ts +1 -1
- package/dist/src/agent/workflow/builtins/weekly-review.js +9 -1
- package/dist/src/agent/workflow/builtins/weekly-review.js.map +1 -1
- package/dist/src/agent/workflow/subagent-runner.js +1 -3
- package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
- package/dist/src/agent-manifest/index.d.ts +4 -0
- package/dist/src/agent-manifest/index.js +10 -0
- package/dist/src/agent-manifest/index.js.map +1 -0
- package/dist/src/agent-manifest/prompt.d.ts +2 -0
- package/dist/src/agent-manifest/prompt.js +57 -0
- package/dist/src/agent-manifest/prompt.js.map +1 -0
- package/dist/src/agent-manifest/resolver.d.ts +11 -0
- package/dist/src/agent-manifest/resolver.js +93 -0
- package/dist/src/agent-manifest/resolver.js.map +1 -0
- package/dist/src/agent-manifest/schema.d.ts +778 -0
- package/dist/src/agent-manifest/schema.js +267 -0
- package/dist/src/agent-manifest/schema.js.map +1 -0
- package/dist/src/agent-manifest/validator.d.ts +24 -0
- package/dist/src/agent-manifest/validator.js +87 -0
- package/dist/src/agent-manifest/validator.js.map +1 -0
- package/dist/src/agent-runtime/boundary-guard.d.ts +12 -0
- package/dist/src/agent-runtime/boundary-guard.js +23 -0
- package/dist/src/agent-runtime/boundary-guard.js.map +1 -0
- package/dist/src/agent-runtime/index.d.ts +7 -0
- package/dist/src/agent-runtime/index.js +8 -0
- package/dist/src/agent-runtime/memory-runtime.d.ts +21 -0
- package/dist/src/agent-runtime/memory-runtime.js +50 -0
- package/dist/src/agent-runtime/memory-runtime.js.map +1 -0
- package/dist/src/agent-runtime/model-router.d.ts +11 -0
- package/dist/src/agent-runtime/model-router.js +16 -0
- package/dist/src/agent-runtime/model-router.js.map +1 -0
- package/dist/src/agent-runtime/run-trace.d.ts +27 -0
- package/dist/src/agent-runtime/run-trace.js +53 -0
- package/dist/src/agent-runtime/run-trace.js.map +1 -0
- package/dist/src/agent-runtime/runtime-profile.d.ts +24 -0
- package/dist/src/agent-runtime/runtime-profile.js +44 -0
- package/dist/src/agent-runtime/runtime-profile.js.map +1 -0
- package/dist/src/agent-runtime/tool-registry.d.ts +28 -0
- package/dist/src/agent-runtime/tool-registry.js +52 -0
- package/dist/src/agent-runtime/tool-registry.js.map +1 -0
- package/dist/src/agent-runtime/workflow-runtime.d.ts +31 -0
- package/dist/src/agent-runtime/workflow-runtime.js +34 -0
- package/dist/src/agent-runtime/workflow-runtime.js.map +1 -0
- package/dist/src/browser/actions/extension-registry-bridge.js +1 -1
- package/dist/src/browser/actions/extension-registry-bridge.js.map +1 -1
- package/dist/src/browser/actions/registry.js +5 -8
- package/dist/src/browser/actions/registry.js.map +1 -1
- package/dist/src/browser/backend-from-config.d.ts +1 -1
- package/dist/src/browser/backend-from-config.js +50 -71
- package/dist/src/browser/backend-from-config.js.map +1 -1
- package/dist/src/browser/browser-command-timeout.d.ts +0 -1
- package/dist/src/browser/browser-command-timeout.js +3 -7
- package/dist/src/browser/browser-command-timeout.js.map +1 -1
- package/dist/src/browser/providers/browser-ext-install.d.ts +2 -12
- package/dist/src/browser/providers/browser-ext-install.js +3 -8
- package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
- package/dist/src/browser/readiness.js +16 -16
- package/dist/src/browser/readiness.js.map +1 -1
- package/dist/src/browser/schemas.js +1 -1
- package/dist/src/browser/schemas.js.map +1 -1
- package/dist/src/chat-commands/builtins/config.js +4 -4
- package/dist/src/chat-commands/builtins/config.js.map +1 -1
- package/dist/src/chat-commands/builtins/thinking.js +16 -42
- package/dist/src/chat-commands/builtins/thinking.js.map +1 -1
- package/dist/src/chat-commands/config-paths.js +1 -1
- package/dist/src/chat-commands/config-paths.js.map +1 -1
- package/dist/src/chat-commands/context.js +3 -4
- package/dist/src/chat-commands/context.js.map +1 -1
- package/dist/src/cli/command-manifest.js +1 -1
- package/dist/src/cli/command-manifest.js.map +1 -1
- package/dist/src/cli/commands/agent.js +3 -1
- package/dist/src/cli/commands/agent.js.map +1 -1
- package/dist/src/cli/commands/agents.js +3 -6
- package/dist/src/cli/commands/agents.js.map +1 -1
- package/dist/src/cli/commands/browser-cli-helpers.js +9 -11
- package/dist/src/cli/commands/browser-cli-helpers.js.map +1 -1
- package/dist/src/cli/commands/config.js +5 -5
- package/dist/src/cli/commands/config.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -17
- package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +1 -1
- package/dist/src/cli/commands/goal.js +1 -1
- package/dist/src/cli/commands/image.js +13 -372
- package/dist/src/cli/commands/image.js.map +1 -1
- package/dist/src/cli/commands/models.js +26 -10
- package/dist/src/cli/commands/models.js.map +1 -1
- package/dist/src/cli/commands/onboard/channels/registry.js.map +1 -1
- package/dist/src/cli/commands/onboard/model.js +20 -22
- package/dist/src/cli/commands/onboard/model.js.map +1 -1
- package/dist/src/cli/commands/onboard.js +1 -1
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/cli/utils/init-workspace-core.d.ts +1 -4
- package/dist/src/cli/utils/init-workspace-core.js +7 -6
- package/dist/src/cli/utils/init-workspace-core.js.map +1 -1
- package/dist/src/commands/agents.config.d.ts +0 -1
- package/dist/src/commands/agents.config.js +66 -12
- package/dist/src/commands/agents.config.js.map +1 -1
- package/dist/src/config/agent-profile.d.ts +5 -17
- package/dist/src/config/agent-profile.js +31 -64
- package/dist/src/config/agent-profile.js.map +1 -1
- package/dist/src/config/agent-typed-models.d.ts +1 -1
- package/dist/src/config/agent-typed-models.js +0 -1
- package/dist/src/config/agent-typed-models.js.map +1 -1
- package/dist/src/config/index.js +3 -3
- package/dist/src/config/integration.d.ts +1 -1
- package/dist/src/config/reload.js +1 -1
- package/dist/src/config/reload.js.map +1 -1
- package/dist/src/config/rules.js +6 -56
- package/dist/src/config/rules.js.map +1 -1
- package/dist/src/config/schema.d.ts +925 -781
- package/dist/src/config/schema.js +157 -424
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/connectors/composio-triggers.d.ts +10 -0
- package/dist/src/connectors/composio-triggers.js +32 -0
- package/dist/src/connectors/composio-triggers.js.map +1 -0
- package/dist/src/connectors/composio.d.ts +54 -0
- package/dist/src/connectors/composio.js +334 -0
- package/dist/src/connectors/composio.js.map +1 -0
- package/dist/src/connectors/health.js +16 -1
- package/dist/src/connectors/health.js.map +1 -1
- package/dist/src/connectors/install.d.ts +2 -1
- package/dist/src/connectors/install.js +50 -13
- package/dist/src/connectors/install.js.map +1 -1
- package/dist/src/connectors/instances.js +57 -6
- package/dist/src/connectors/instances.js.map +1 -1
- package/dist/src/connectors/lifecycle.d.ts +3 -0
- package/dist/src/connectors/lifecycle.js +23 -0
- package/dist/src/connectors/lifecycle.js.map +1 -0
- package/dist/src/connectors/materialize.js +2 -1
- package/dist/src/connectors/materialize.js.map +1 -1
- package/dist/src/connectors/providers.d.ts +1 -0
- package/dist/src/connectors/providers.js +10 -2
- package/dist/src/connectors/providers.js.map +1 -1
- package/dist/src/connectors/registries/modelscope.d.ts +2 -0
- package/dist/src/connectors/registries/modelscope.js +205 -0
- package/dist/src/connectors/registries/modelscope.js.map +1 -0
- package/dist/src/connectors/registries/official-mcp.d.ts +2 -0
- package/dist/src/connectors/registries/official-mcp.js +142 -0
- package/dist/src/connectors/registries/official-mcp.js.map +1 -0
- package/dist/src/connectors/registries/search.d.ts +12 -0
- package/dist/src/connectors/registries/search.js +89 -0
- package/dist/src/connectors/registries/search.js.map +1 -0
- package/dist/src/connectors/registries/smithery.d.ts +2 -0
- package/dist/src/connectors/registries/smithery.js +98 -0
- package/dist/src/connectors/registries/smithery.js.map +1 -0
- package/dist/src/connectors/registries/types.d.ts +20 -0
- package/dist/src/connectors/registries/types.js +1 -0
- package/dist/src/connectors/secret-store.js +4 -2
- package/dist/src/connectors/secret-store.js.map +1 -1
- package/dist/src/connectors/setup-secrets.d.ts +15 -0
- package/dist/src/connectors/setup-secrets.js +64 -0
- package/dist/src/connectors/setup-secrets.js.map +1 -0
- package/dist/src/connectors/supervisor.d.ts +15 -0
- package/dist/src/connectors/supervisor.js +73 -0
- package/dist/src/connectors/supervisor.js.map +1 -0
- package/dist/src/connectors/types.d.ts +27 -3
- package/dist/src/connectors/usage.js +6 -1
- package/dist/src/connectors/usage.js.map +1 -1
- package/dist/src/cron/index.js +1 -1
- package/dist/src/cron/service.js +1 -1
- package/dist/src/cron/validation.d.ts +3 -3
- package/dist/src/extensions/activation-context.js +13 -7
- package/dist/src/extensions/activation-context.js.map +1 -1
- package/dist/src/gateway/agents-admin.d.ts +17 -18
- package/dist/src/gateway/agents-admin.js +123 -88
- package/dist/src/gateway/agents-admin.js.map +1 -1
- package/dist/src/gateway/capability-presets-admin.d.ts +56 -0
- package/dist/src/gateway/capability-presets-admin.js +214 -0
- package/dist/src/gateway/capability-presets-admin.js.map +1 -0
- package/dist/src/gateway/hono/lib/agent-model.d.ts +1 -1
- package/dist/src/gateway/hono/lib/agent-model.js +1 -1
- package/dist/src/gateway/hono/lib/agent-model.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +234 -127
- package/dist/src/gateway/hono/lib/config-payload.js +13 -37
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/routes/agents.js +56 -33
- package/dist/src/gateway/hono/routes/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/browser.js +8 -15
- package/dist/src/gateway/hono/routes/browser.js.map +1 -1
- package/dist/src/gateway/hono/routes/capability-presets.d.ts +3 -0
- package/dist/src/gateway/hono/routes/capability-presets.js +145 -0
- package/dist/src/gateway/hono/routes/capability-presets.js.map +1 -0
- package/dist/src/gateway/hono/routes/config-patch/agents.d.ts +1 -17
- package/dist/src/gateway/hono/routes/config-patch/agents.js +2 -443
- package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +7 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
- package/dist/src/gateway/hono/routes/config.js +1 -1
- package/dist/src/gateway/hono/routes/config.js.map +1 -1
- package/dist/src/gateway/hono/routes/connectors.js +230 -3
- package/dist/src/gateway/hono/routes/connectors.js.map +1 -1
- package/dist/src/gateway/hono/routes/dreaming.js +7 -0
- package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
- package/dist/src/gateway/hono/routes/goals.js +52 -5
- package/dist/src/gateway/hono/routes/goals.js.map +1 -1
- package/dist/src/gateway/hono/routes/index.js +2 -0
- package/dist/src/gateway/hono/routes/index.js.map +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/memory.d.ts +3 -0
- package/dist/src/gateway/hono/routes/memory.js +290 -0
- package/dist/src/gateway/hono/routes/memory.js.map +1 -0
- package/dist/src/gateway/hono/routes/voice.js +14 -1
- package/dist/src/gateway/hono/routes/voice.js.map +1 -1
- package/dist/src/gateway/hono/sse.js.map +1 -1
- package/dist/src/gateway/service/agent-runner.d.ts +5 -12
- package/dist/src/gateway/service/agent-runner.js +8 -8
- package/dist/src/gateway/service/agent-runner.js.map +1 -1
- package/dist/src/gateway/service/run-gateway-agent.d.ts +2 -10
- package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
- package/dist/src/gateway/service.d.ts +2 -2
- package/dist/src/gateway/service.js +20 -16
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/gateway/user-turn-input.d.ts +18 -0
- package/dist/src/gateway/user-turn-input.js +16 -0
- package/dist/src/gateway/user-turn-input.js.map +1 -0
- package/dist/src/goals/goal-queue-store.d.ts +2 -1
- package/dist/src/goals/goal-queue-store.js +2 -2
- package/dist/src/goals/goal-queue-store.js.map +1 -1
- package/dist/src/goals/goal-queue-types.d.ts +4 -3
- package/dist/src/goals/goal-runner.js +25 -3
- package/dist/src/goals/goal-runner.js.map +1 -1
- package/dist/src/goals/goal-service.d.ts +6 -1
- package/dist/src/goals/goal-service.js +9 -2
- package/dist/src/goals/goal-service.js.map +1 -1
- package/dist/src/goals/goal-store.d.ts +7 -1
- package/dist/src/goals/goal-store.js +42 -0
- package/dist/src/goals/goal-store.js.map +1 -1
- package/dist/src/goals/types.d.ts +10 -0
- package/dist/src/notes/agent-context.js +2 -2
- package/dist/src/providers/index.d.ts +2 -2
- package/dist/src/providers/index.js +10 -14
- package/dist/src/providers/index.js.map +1 -1
- package/dist/src/session/index.js +1 -1
- package/dist/src/session/session-workspace.js +7 -2
- package/dist/src/session/session-workspace.js.map +1 -1
- package/dist/src/session/store.js +5 -0
- package/dist/src/session/store.js.map +1 -1
- package/dist/src/session/thinking-resolve.d.ts +1 -1
- package/dist/src/session/thinking-resolve.js +1 -1
- package/dist/src/session/thinking-resolve.js.map +1 -1
- package/dist/src/storage/sqlite/connection.js +1 -1
- package/dist/src/storage/sqlite/index.d.ts +1 -0
- package/dist/src/storage/sqlite/index.js +2 -1
- package/dist/src/storage/sqlite/memory-records-repository.d.ts +101 -0
- package/dist/src/storage/sqlite/memory-records-repository.js +309 -0
- package/dist/src/storage/sqlite/memory-records-repository.js.map +1 -0
- package/dist/src/storage/sqlite/migrations/011_goal_context_messages.sql +8 -0
- package/dist/src/storage/sqlite/migrations/012_memory_records.sql +63 -0
- package/dist/src/storage/sqlite/migrations/013_memory_trace_events.sql +21 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +2 -2
- package/dist/src/storage/sqlite/migrations/runner.js +4 -4
- package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/runner.ts +2 -2
- package/dist/src/storage/sqlite/schema.js +3 -3
- package/dist/src/storage/sqlite/schema.sql +95 -0
- package/dist/src/tui/backends/embedded-backend.js +6 -4
- package/dist/src/tui/backends/embedded-backend.js.map +1 -1
- package/dist/src/tui/extension-host/load-extensions.js.map +1 -1
- package/dist/src/voice/tts/openai-compatible-speech.d.ts +1 -1
- package/dist/src/voice/tts/openai-compatible-speech.js.map +1 -1
- package/dist/src/voice/tts/providers/edge-speech.js +14 -2
- package/dist/src/voice/tts/providers/edge-speech.js.map +1 -1
- package/dist/src/voice/tts/speak-core.js +3 -3
- package/dist/src/voice/tts/speak-core.js.map +1 -1
- package/dist/src/voice/tts/speech-provider-types.d.ts +2 -2
- package/dist/src/voice/tts/types.js +1 -1
- package/dist/src/voice/tts/types.js.map +1 -1
- package/dist/src/workflows/domain/result.d.ts +0 -1
- package/dist/src/workflows/engine/workflow-engine.js +7 -23
- package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
- package/dist/src/workflows/service/workflow-run-service.js +3 -4
- package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
- package/dist/src/workflows/service/workflow-session-bridge.js +1 -1
- package/package.json +4 -3
- package/dist/gateway/static/root/assets/agent-browser-settings-page-DPXc4hz8.js +0 -6
- package/dist/gateway/static/root/assets/agent-defaults-tabbed-page-CTJ0YnRQ.js +0 -1
- package/dist/gateway/static/root/assets/agents-zJXQfJ_W.js +0 -71
- package/dist/gateway/static/root/assets/app-management-settings-panel-DzGbdr04.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-CPjfyzSD.js +0 -1
- package/dist/gateway/static/root/assets/config-api-NOoPiIYz.js +0 -3
- package/dist/gateway/static/root/assets/connectors-settings-CAXYMOdp.js +0 -2
- package/dist/gateway/static/root/assets/cron-api-C9BOqAXd.js +0 -1
- package/dist/gateway/static/root/assets/cron-page-DuUbBeKI.js +0 -3
- package/dist/gateway/static/root/assets/dreaming-settings-DQ4DtiK1.js +0 -1
- package/dist/gateway/static/root/assets/gateway-config-api-C-xjn__h.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-BMPwIjKI.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-BJsyjJnF.js +0 -1
- package/dist/gateway/static/root/assets/goals-page-BerDgIhw.js +0 -2
- package/dist/gateway/static/root/assets/goals-settings-ByTjeAto.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-TbHgcjTn.js +0 -1
- package/dist/gateway/static/root/assets/index-AkTrf6Pb.js +0 -122
- package/dist/gateway/static/root/assets/index-fh5sXTj9.css +0 -1
- package/dist/gateway/static/root/assets/logs-page-DGXuPf5B.js +0 -2
- package/dist/gateway/static/root/assets/messages-upgxw6Ub.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-panel-Bot16nn7.js +0 -2
- package/dist/gateway/static/root/assets/note-detail-page-Brlyou8M.js +0 -2
- package/dist/gateway/static/root/assets/notes-page-DvZ4pwc-.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BZEDmxbZ.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-DdGGlsfn.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DlkEkPf9.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-DFPTrsPF.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-CYCCfgh4.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-Bff1pGd0.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-CJGKpBur.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-C6ocduTD.js +0 -2
- package/dist/gateway/static/root/assets/system-settings-panel-5jrIEr5b.js +0 -1
- package/dist/gateway/static/root/assets/use-agent-defaults-form-BuiXLIs5.js +0 -1
- package/dist/gateway/static/root/assets/use-settings-tab-guard-CW5JORnl.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DDoQyghO.js +0 -1
- package/dist/gateway/static/root/assets/workflow-page.utils-CKjeEGqx.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-B604ehHG.js +0 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-auth.js","names":[],"sources":["../../../../../../src/cli/commands/doctor/checks/provider-auth.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\n\nimport { loadConfig } from '../../../../config/loader.js';\nimport type { Config } from '../../../../config/schema.js';\nimport { parseModelRef, getAgentDefaultModelRef } from '../../../../config/schema.js';\nimport { getApiKeyFromEnv, PROVIDER_ENV_MAP } from '../../../../providers/env-keys.js';\nimport type { CheckResult, DoctorContext } from '../types.js';\n\nfunction collectProviderIdsFromConfig(cfg: Config): Set<string> {\n const ids = new Set<string>();\n\n const addRef = (ref: string | undefined) => {\n if (!ref?.trim()) return;\n const parsed = parseModelRef(ref.trim());\n if (parsed) ids.add(parsed.provider.toLowerCase());\n };\n\n addRef(getAgentDefaultModelRef(cfg));\n\n const
|
|
1
|
+
{"version":3,"file":"provider-auth.js","names":[],"sources":["../../../../../../src/cli/commands/doctor/checks/provider-auth.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\n\nimport { loadConfig } from '../../../../config/loader.js';\nimport type { Config } from '../../../../config/schema.js';\nimport { parseModelRef, getAgentDefaultModelRef } from '../../../../config/schema.js';\nimport { getApiKeyFromEnv, PROVIDER_ENV_MAP } from '../../../../providers/env-keys.js';\nimport type { CheckResult, DoctorContext } from '../types.js';\n\nfunction collectProviderIdsFromConfig(cfg: Config): Set<string> {\n const ids = new Set<string>();\n\n const addRef = (ref: string | undefined) => {\n if (!ref?.trim()) return;\n const parsed = parseModelRef(ref.trim());\n if (parsed) ids.add(parsed.provider.toLowerCase());\n };\n\n addRef(getAgentDefaultModelRef(cfg));\n\n const addRoles = (roles: Record<string, { model?: string }> | undefined) => {\n for (const role of Object.values(roles ?? {})) {\n addRef(role.model);\n }\n };\n\n const list = cfg.agents?.list;\n if (Array.isArray(list)) {\n for (const e of list) {\n addRoles(e?.models?.roles);\n }\n }\n\n return ids;\n}\n\nfunction anyProviderEnvPresent(): boolean {\n for (const vars of Object.values(PROVIDER_ENV_MAP)) {\n for (const v of vars) {\n if (process.env[v]?.trim()) return true;\n }\n }\n for (const [k, val] of Object.entries(process.env)) {\n if (!val?.trim()) continue;\n if (k.endsWith('_API_KEY') || k.endsWith('_TOKEN')) return true;\n }\n return false;\n}\n\nexport async function checkProviderAuth(ctx: DoctorContext): Promise<CheckResult> {\n if (!existsSync(ctx.configPath)) {\n return {\n id: 'provider-auth',\n label: 'Provider auth',\n status: 'skip',\n message: 'No config file; skipped.',\n hints: [],\n };\n }\n\n let cfg: Config;\n try {\n cfg = loadConfig(ctx.configPath);\n } catch {\n return {\n id: 'provider-auth',\n label: 'Provider auth',\n status: 'skip',\n message: 'Config could not be loaded; skipped.',\n hints: [],\n };\n }\n\n const fromConfig = collectProviderIdsFromConfig(cfg);\n const checkIds = fromConfig.size > 0 ? [...fromConfig] : Object.keys(PROVIDER_ENV_MAP);\n\n for (const id of checkIds) {\n const key = getApiKeyFromEnv(id);\n if (key?.trim()) {\n return {\n id: 'provider-auth',\n label: 'Provider auth',\n status: 'pass',\n message: 'At least one LLM provider API key is available.',\n hints: [],\n };\n }\n }\n\n if (anyProviderEnvPresent()) {\n return {\n id: 'provider-auth',\n label: 'Provider auth',\n status: 'pass',\n message: 'Environment contains provider credentials.',\n hints: [],\n };\n }\n\n return {\n id: 'provider-auth',\n label: 'Provider auth',\n status: 'warn',\n message: 'No API keys detected for configured providers.',\n hints: ['Set keys via: xopc auth set <provider> <key>', 'Or export the provider env vars from the pi-ai docs.'],\n };\n}\n"],"mappings":";;;;;aAE0D;aAE4B;eACC;AAGvF,SAAS,6BAA6B,KAA0B;CAC9D,MAAM,sBAAM,IAAI,KAAa;CAE7B,MAAM,UAAU,QAA4B;AAC1C,MAAI,CAAC,KAAK,MAAM,CAAE;EAClB,MAAM,SAAS,cAAc,IAAI,MAAM,CAAC;AACxC,MAAI,OAAQ,KAAI,IAAI,OAAO,SAAS,aAAa,CAAC;;AAGpD,QAAO,wBAAwB,IAAI,CAAC;CAEpC,MAAM,YAAY,UAA0D;AAC1E,OAAK,MAAM,QAAQ,OAAO,OAAO,SAAS,EAAE,CAAC,CAC3C,QAAO,KAAK,MAAM;;CAItB,MAAM,OAAO,IAAI,QAAQ;AACzB,KAAI,MAAM,QAAQ,KAAK,CACrB,MAAK,MAAM,KAAK,KACd,UAAS,GAAG,QAAQ,MAAM;AAI9B,QAAO;;AAGT,SAAS,wBAAiC;AACxC,MAAK,MAAM,QAAQ,OAAO,OAAO,iBAAiB,CAChD,MAAK,MAAM,KAAK,KACd,KAAI,QAAQ,IAAI,IAAI,MAAM,CAAE,QAAO;AAGvC,MAAK,MAAM,CAAC,GAAG,QAAQ,OAAO,QAAQ,QAAQ,IAAI,EAAE;AAClD,MAAI,CAAC,KAAK,MAAM,CAAE;AAClB,MAAI,EAAE,SAAS,WAAW,IAAI,EAAE,SAAS,SAAS,CAAE,QAAO;;AAE7D,QAAO;;AAGT,eAAsB,kBAAkB,KAA0C;AAChF,KAAI,CAAC,WAAW,IAAI,WAAW,CAC7B,QAAO;EACL,IAAI;EACJ,OAAO;EACP,QAAQ;EACR,SAAS;EACT,OAAO,EAAE;EACV;CAGH,IAAI;AACJ,KAAI;AACF,QAAM,WAAW,IAAI,WAAW;SAC1B;AACN,SAAO;GACL,IAAI;GACJ,OAAO;GACP,QAAQ;GACR,SAAS;GACT,OAAO,EAAE;GACV;;CAGH,MAAM,aAAa,6BAA6B,IAAI;CACpD,MAAM,WAAW,WAAW,OAAO,IAAI,CAAC,GAAG,WAAW,GAAG,OAAO,KAAK,iBAAiB;AAEtF,MAAK,MAAM,MAAM,SAEf,KADY,iBAAiB,GACtB,EAAE,MAAM,CACb,QAAO;EACL,IAAI;EACJ,OAAO;EACP,QAAQ;EACR,SAAS;EACT,OAAO,EAAE;EACV;AAIL,KAAI,uBAAuB,CACzB,QAAO;EACL,IAAI;EACJ,OAAO;EACP,QAAQ;EACR,SAAS;EACT,OAAO,EAAE;EACV;AAGH,QAAO;EACL,IAAI;EACJ,OAAO;EACP,QAAQ;EACR,SAAS;EACT,OAAO,CAAC,gDAAgD,uDAAuD;EAChH"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { init_loader, loadConfig } from "../../config/loader.js";
|
|
2
2
|
import { closeXopcDatabase, openXopcDatabase } from "../../storage/sqlite/connection.js";
|
|
3
|
-
import "../../storage/sqlite/index.js";
|
|
4
3
|
import { GoalService } from "../../goals/goal-service.js";
|
|
5
4
|
import "../../goals/index.js";
|
|
5
|
+
import "../../storage/sqlite/index.js";
|
|
6
6
|
import { formatExamples, register } from "../registry.js";
|
|
7
7
|
import { Command } from "commander";
|
|
8
8
|
//#region src/cli/commands/goal.ts
|
|
@@ -1,390 +1,31 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
|
|
3
|
-
import { init_providers, isProviderConfigured } from "../../providers/index.js";
|
|
4
|
-
import { resolveAgentModelFallbackValues, resolveAgentModelPrimaryValue } from "../../config/model-input.js";
|
|
5
|
-
import { getImageGenerationProvider } from "../../agent/image/generation/provider-registry.js";
|
|
6
|
-
import { generateImage, listImageGenerationProvidersSummary } from "../../agent/image/generation/runtime.js";
|
|
1
|
+
import { listImageGenerationProvidersSummary } from "../../agent/image/generation/runtime.js";
|
|
7
2
|
import { formatExamples, register } from "../registry.js";
|
|
8
|
-
import { getContextWithOpts } from "../context.js";
|
|
9
3
|
import "../../agent/image/index.js";
|
|
10
|
-
import { colors } from "../utils/colors.js";
|
|
11
|
-
import { join, resolve } from "node:path";
|
|
12
|
-
import { mkdir, writeFile } from "node:fs/promises";
|
|
13
4
|
import { Command } from "commander";
|
|
14
5
|
//#region src/cli/commands/image.ts
|
|
15
|
-
init_loader();
|
|
16
|
-
init_schema();
|
|
17
|
-
init_providers();
|
|
18
|
-
function modelRefToString(model) {
|
|
19
|
-
if (!model) return null;
|
|
20
|
-
return resolveAgentModelPrimaryValue(model) ?? null;
|
|
21
|
-
}
|
|
22
|
-
function modelFallbacksToArray(model) {
|
|
23
|
-
return resolveAgentModelFallbackValues(model);
|
|
24
|
-
}
|
|
25
6
|
function createImageCommand(_ctx) {
|
|
26
|
-
const cmd = new Command("image").description("
|
|
27
|
-
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
]));
|
|
35
|
-
cmd.command("status").description("Show current image model configuration").option("--json", "Output as JSON").action(async (opts) => {
|
|
36
|
-
const defaults = loadConfig(getContextWithOpts().configPath).agents?.defaults;
|
|
37
|
-
const understandingPrimary = modelRefToString(defaults?.imageModel);
|
|
38
|
-
const understandingFallbacks = modelFallbacksToArray(defaults?.imageModel);
|
|
39
|
-
const generationPrimary = modelRefToString(defaults?.imageGenerationModel);
|
|
40
|
-
const generationFallbacks = modelFallbacksToArray(defaults?.imageGenerationModel);
|
|
41
|
-
const mediaMaxMb = defaults?.mediaMaxMb;
|
|
42
|
-
if (opts.json) {
|
|
43
|
-
console.log(JSON.stringify({
|
|
44
|
-
imageUnderstanding: {
|
|
45
|
-
primary: understandingPrimary,
|
|
46
|
-
fallbacks: understandingFallbacks
|
|
47
|
-
},
|
|
48
|
-
imageGeneration: {
|
|
49
|
-
primary: generationPrimary,
|
|
50
|
-
fallbacks: generationFallbacks
|
|
51
|
-
},
|
|
52
|
-
mediaMaxMb: mediaMaxMb ?? null
|
|
53
|
-
}, null, 2));
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
console.log("");
|
|
57
|
-
console.log(colors.cyan("Image multimodal configuration"));
|
|
58
|
-
console.log("═".repeat(50));
|
|
59
|
-
console.log("");
|
|
60
|
-
console.log(colors.cyan("Image understanding (vision)"));
|
|
61
|
-
if (understandingPrimary) {
|
|
62
|
-
const parsed = parseModelRef(understandingPrimary);
|
|
63
|
-
const status = (parsed ? await isProviderConfigured(parsed.provider) : false) ? colors.green("OK") : colors.yellow("(provider not configured)");
|
|
64
|
-
console.log(` Primary: ${understandingPrimary} ${status}`);
|
|
65
|
-
} else console.log(` Primary: ${colors.gray("(not set — inferred from keys / defaults)")}`);
|
|
66
|
-
for (let i = 0; i < understandingFallbacks.length; i++) {
|
|
67
|
-
const fb = understandingFallbacks[i];
|
|
68
|
-
const parsed = parseModelRef(fb);
|
|
69
|
-
const status = (parsed ? await isProviderConfigured(parsed.provider) : false) ? colors.green("OK") : colors.yellow("?");
|
|
70
|
-
console.log(` Fallback ${i + 1}: ${fb} ${status}`);
|
|
71
|
-
}
|
|
72
|
-
console.log("");
|
|
73
|
-
console.log(colors.cyan("Image generation"));
|
|
74
|
-
if (generationPrimary) {
|
|
75
|
-
const parsed = parseModelRef(generationPrimary);
|
|
76
|
-
const status = (parsed ? await isProviderConfigured(parsed.provider) : false) ? colors.green("OK") : colors.yellow("(provider not configured)");
|
|
77
|
-
console.log(` Primary: ${generationPrimary} ${status}`);
|
|
78
|
-
} else console.log(` Primary: ${colors.gray("(not set — defaults to openai/gpt-image-1)")}`);
|
|
79
|
-
for (let i = 0; i < generationFallbacks.length; i++) {
|
|
80
|
-
const fb = generationFallbacks[i];
|
|
81
|
-
const parsed = parseModelRef(fb);
|
|
82
|
-
const status = (parsed ? await isProviderConfigured(parsed.provider) : false) ? colors.green("OK") : colors.yellow("?");
|
|
83
|
-
console.log(` Fallback ${i + 1}: ${fb} ${status}`);
|
|
84
|
-
}
|
|
85
|
-
console.log("");
|
|
86
|
-
console.log(colors.cyan("General"));
|
|
87
|
-
console.log(` Max image size: ${mediaMaxMb ? `${mediaMaxMb} MB` : colors.gray("(default)")}`);
|
|
88
|
-
console.log("");
|
|
89
|
-
console.log("═".repeat(50));
|
|
90
|
-
console.log(colors.gray("Use \"xopc image set-understanding\" / \"xopc image set-generation\" to set primary models."));
|
|
91
|
-
console.log("");
|
|
92
|
-
});
|
|
93
|
-
cmd.command("set-understanding <modelRef>").description("Set the primary image understanding (vision) model").action(async (modelRef) => {
|
|
94
|
-
const parsed = parseModelRef(modelRef);
|
|
95
|
-
if (!parsed) {
|
|
96
|
-
console.error(colors.red(`Invalid model reference: "${modelRef}". Use "provider/model" format.`));
|
|
97
|
-
process.exit(1);
|
|
98
|
-
}
|
|
99
|
-
if (!await isProviderConfigured(parsed.provider)) console.warn(colors.yellow(`Provider "${parsed.provider}" is not configured. Set the API key before using this model.`));
|
|
100
|
-
const configPath = getContextWithOpts().configPath;
|
|
101
|
-
const config = loadConfig(configPath);
|
|
102
|
-
if (!config.agents) config.agents = { defaults: {} };
|
|
103
|
-
if (!config.agents.defaults) config.agents.defaults = {};
|
|
104
|
-
const existingFallbacks = modelFallbacksToArray(config.agents.defaults.imageModel);
|
|
105
|
-
config.agents.defaults.imageModel = existingFallbacks.length > 0 ? {
|
|
106
|
-
primary: modelRef,
|
|
107
|
-
fallbacks: existingFallbacks
|
|
108
|
-
} : { primary: modelRef };
|
|
109
|
-
await saveConfig(config, configPath);
|
|
110
|
-
console.log(colors.green(`Image understanding model set to: ${modelRef}`));
|
|
111
|
-
});
|
|
112
|
-
cmd.command("set-generation <modelRef>").description("Set the primary image generation model").action(async (modelRef) => {
|
|
113
|
-
const parsed = parseModelRef(modelRef);
|
|
114
|
-
if (!parsed) {
|
|
115
|
-
console.error(colors.red(`Invalid model reference: "${modelRef}". Use "provider/model" format.`));
|
|
116
|
-
process.exit(1);
|
|
117
|
-
}
|
|
118
|
-
if (!await isProviderConfigured(parsed.provider)) console.warn(colors.yellow(`Provider "${parsed.provider}" is not configured. Set the API key before using this model.`));
|
|
119
|
-
const configPath = getContextWithOpts().configPath;
|
|
120
|
-
const config = loadConfig(configPath);
|
|
121
|
-
if (!config.agents) config.agents = { defaults: {} };
|
|
122
|
-
if (!config.agents.defaults) config.agents.defaults = {};
|
|
123
|
-
const existingFallbacks = modelFallbacksToArray(config.agents.defaults.imageGenerationModel);
|
|
124
|
-
config.agents.defaults.imageGenerationModel = existingFallbacks.length > 0 ? {
|
|
125
|
-
primary: modelRef,
|
|
126
|
-
fallbacks: existingFallbacks
|
|
127
|
-
} : { primary: modelRef };
|
|
128
|
-
await saveConfig(config, configPath);
|
|
129
|
-
console.log(colors.green(`Image generation model set to: ${modelRef}`));
|
|
130
|
-
});
|
|
131
|
-
cmd.command("add-fallback <type> <modelRef>").description("Add a fallback model (type: \"understanding\" or \"generation\")").action(async (type, modelRef) => {
|
|
132
|
-
if (type !== "understanding" && type !== "generation") {
|
|
133
|
-
console.error(colors.red("Type must be \"understanding\" or \"generation\"."));
|
|
134
|
-
process.exit(1);
|
|
135
|
-
}
|
|
136
|
-
const parsed = parseModelRef(modelRef);
|
|
137
|
-
if (!parsed) {
|
|
138
|
-
console.error(colors.red(`Invalid model reference: "${modelRef}". Use "provider/model" format.`));
|
|
139
|
-
process.exit(1);
|
|
140
|
-
}
|
|
141
|
-
if (!await isProviderConfigured(parsed.provider)) console.warn(colors.yellow(`Provider "${parsed.provider}" is not configured.`));
|
|
142
|
-
const configPath = getContextWithOpts().configPath;
|
|
143
|
-
const config = loadConfig(configPath);
|
|
144
|
-
if (!config.agents) config.agents = { defaults: {} };
|
|
145
|
-
if (!config.agents.defaults) config.agents.defaults = {};
|
|
146
|
-
const configKey = type === "understanding" ? "imageModel" : "imageGenerationModel";
|
|
147
|
-
const current = config.agents.defaults[configKey];
|
|
148
|
-
const primary = resolveAgentModelPrimaryValue(current);
|
|
149
|
-
const fallbacks = [...resolveAgentModelFallbackValues(current)];
|
|
150
|
-
if (!primary) {
|
|
151
|
-
const hint = type === "understanding" ? "xopc image set-understanding <model>" : "xopc image set-generation <model>";
|
|
152
|
-
console.error(colors.red(`No primary model set for image ${type}. Set it first: ${hint}`));
|
|
153
|
-
process.exit(1);
|
|
154
|
-
}
|
|
155
|
-
if (fallbacks.includes(modelRef)) {
|
|
156
|
-
console.warn(colors.yellow(`"${modelRef}" is already in the fallback list.`));
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
fallbacks.push(modelRef);
|
|
160
|
-
config.agents.defaults[configKey] = {
|
|
161
|
-
primary,
|
|
162
|
-
fallbacks
|
|
163
|
-
};
|
|
164
|
-
await saveConfig(config, configPath);
|
|
165
|
-
console.log(colors.green(`Added fallback for image ${type}: ${modelRef}`));
|
|
166
|
-
console.log(colors.gray(` Fallback chain: ${primary} -> ${fallbacks.join(" -> ")}`));
|
|
167
|
-
});
|
|
168
|
-
cmd.command("remove-fallback <type> <index>").description("Remove a fallback model by index (0-based)").action(async (type, indexStr) => {
|
|
169
|
-
if (type !== "understanding" && type !== "generation") {
|
|
170
|
-
console.error(colors.red("Type must be \"understanding\" or \"generation\"."));
|
|
171
|
-
process.exit(1);
|
|
172
|
-
}
|
|
173
|
-
const index = parseInt(indexStr, 10);
|
|
174
|
-
if (Number.isNaN(index) || index < 0) {
|
|
175
|
-
console.error(colors.red("Index must be a non-negative integer."));
|
|
176
|
-
process.exit(1);
|
|
177
|
-
}
|
|
178
|
-
const configPath = getContextWithOpts().configPath;
|
|
179
|
-
const config = loadConfig(configPath);
|
|
180
|
-
const configKey = type === "understanding" ? "imageModel" : "imageGenerationModel";
|
|
181
|
-
const current = config.agents?.defaults?.[configKey];
|
|
182
|
-
const primary = resolveAgentModelPrimaryValue(current);
|
|
183
|
-
const fallbacks = [...resolveAgentModelFallbackValues(current)];
|
|
184
|
-
if (index >= fallbacks.length) {
|
|
185
|
-
console.error(colors.red(`Fallback index ${index} out of range (${fallbacks.length} fallbacks).`));
|
|
186
|
-
process.exit(1);
|
|
187
|
-
}
|
|
188
|
-
const removed = fallbacks.splice(index, 1)[0];
|
|
189
|
-
if (!config.agents) config.agents = { defaults: {} };
|
|
190
|
-
if (!config.agents.defaults) config.agents.defaults = {};
|
|
191
|
-
if (primary) config.agents.defaults[configKey] = fallbacks.length > 0 ? {
|
|
192
|
-
primary,
|
|
193
|
-
fallbacks
|
|
194
|
-
} : { primary };
|
|
195
|
-
await saveConfig(config, configPath);
|
|
196
|
-
console.log(colors.green(`Removed fallback: ${removed}`));
|
|
197
|
-
});
|
|
198
|
-
cmd.command("providers").description("List registered image-generation providers and their capabilities").option("--json", "Output as JSON").action(async (opts) => {
|
|
199
|
-
const configPath = getContextWithOpts().configPath;
|
|
200
|
-
const config = loadConfig(configPath);
|
|
201
|
-
const rows = listImageGenerationProvidersSummary(config).map((s) => {
|
|
202
|
-
const provider = getImageGenerationProvider(s.id, config);
|
|
203
|
-
let configured = false;
|
|
204
|
-
try {
|
|
205
|
-
configured = provider?.isConfigured?.({ cfg: config }) === true;
|
|
206
|
-
} catch {
|
|
207
|
-
configured = false;
|
|
208
|
-
}
|
|
209
|
-
return {
|
|
210
|
-
id: s.id,
|
|
211
|
-
label: s.label ?? s.id,
|
|
212
|
-
defaultModel: s.defaultModel ?? null,
|
|
213
|
-
models: s.models,
|
|
214
|
-
aliases: s.aliases ?? [],
|
|
215
|
-
capabilities: s.capabilities ?? null,
|
|
216
|
-
configured
|
|
217
|
-
};
|
|
218
|
-
});
|
|
7
|
+
const cmd = new Command("image").description("Inspect image provider availability").addHelpText("after", formatExamples(["xopc image providers # List available image generation providers", "xopc image status # Explain current manifest-era image behavior"]));
|
|
8
|
+
cmd.command("status").description("Show image runtime status").action(() => {
|
|
9
|
+
console.log("Image model defaults were removed.");
|
|
10
|
+
console.log("Image generation now uses configured providers discovered at runtime.");
|
|
11
|
+
console.log("Agent-specific capability policy belongs in agent manifests or capability presets.");
|
|
12
|
+
});
|
|
13
|
+
cmd.command("providers").description("List image generation providers").option("--json", "Output as JSON").action((opts) => {
|
|
14
|
+
const providers = listImageGenerationProvidersSummary();
|
|
219
15
|
if (opts.json) {
|
|
220
|
-
console.log(JSON.stringify(
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
console.log("");
|
|
224
|
-
console.log(colors.cyan("Image-generation providers"));
|
|
225
|
-
console.log("═".repeat(60));
|
|
226
|
-
if (rows.length === 0) {
|
|
227
|
-
console.log("");
|
|
228
|
-
console.log(colors.yellow(" No image-generation providers registered. Check `extensions/<vendor>/` and bundled.ts."));
|
|
229
|
-
console.log("");
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
|
-
for (const row of rows) {
|
|
233
|
-
const statusIcon = row.configured ? colors.green("OK") : colors.yellow("?");
|
|
234
|
-
const statusText = row.configured ? "configured" : "missing API key";
|
|
235
|
-
console.log("");
|
|
236
|
-
console.log(` ${statusIcon} ${row.label} (${row.id}) — ${statusText}`);
|
|
237
|
-
if (row.defaultModel) console.log(` Default: ${row.defaultModel}`);
|
|
238
|
-
if (row.models.length > 0) console.log(` Models: ${row.models.map((m) => `${row.id}/${m}`).join(", ")}`);
|
|
239
|
-
if (row.aliases.length > 0) console.log(` Aliases: ${row.aliases.join(", ")}`);
|
|
240
|
-
}
|
|
241
|
-
console.log("");
|
|
242
|
-
console.log("═".repeat(60));
|
|
243
|
-
console.log(colors.gray("Use `xopc image set-generation <provider/model>` to set the primary model, `xopc auth set <provider>` to configure API keys."));
|
|
244
|
-
console.log("");
|
|
245
|
-
});
|
|
246
|
-
cmd.command("set-max-size <mb>").description("Set maximum image size in MB").action(async (mbStr) => {
|
|
247
|
-
const mb = parseFloat(mbStr);
|
|
248
|
-
if (Number.isNaN(mb) || mb <= 0) {
|
|
249
|
-
console.error(colors.red("Size must be a positive number (in MB)."));
|
|
250
|
-
process.exit(1);
|
|
251
|
-
}
|
|
252
|
-
const configPath = getContextWithOpts().configPath;
|
|
253
|
-
const config = loadConfig(configPath);
|
|
254
|
-
if (!config.agents) config.agents = { defaults: {} };
|
|
255
|
-
if (!config.agents.defaults) config.agents.defaults = {};
|
|
256
|
-
config.agents.defaults.mediaMaxMb = mb;
|
|
257
|
-
await saveConfig(config, configPath);
|
|
258
|
-
console.log(colors.green(`Max image size set to: ${mb} MB`));
|
|
259
|
-
});
|
|
260
|
-
cmd.command("set-timeout <ms>").description("Set the per-request timeout (ms) for image generation; 0 to clear").action(async (msStr) => {
|
|
261
|
-
const ms = parseInt(msStr, 10);
|
|
262
|
-
if (Number.isNaN(ms) || ms < 0) {
|
|
263
|
-
console.error(colors.red("Timeout must be a non-negative integer (ms)."));
|
|
264
|
-
process.exit(1);
|
|
265
|
-
}
|
|
266
|
-
const configPath = getContextWithOpts().configPath;
|
|
267
|
-
const config = loadConfig(configPath);
|
|
268
|
-
if (!config.agents) config.agents = { defaults: {} };
|
|
269
|
-
if (!config.agents.defaults) config.agents.defaults = {};
|
|
270
|
-
const current = config.agents.defaults.imageGenerationModel;
|
|
271
|
-
const primary = resolveAgentModelPrimaryValue(current);
|
|
272
|
-
if (!primary) {
|
|
273
|
-
console.error(colors.red("No image generation model is configured. Run `xopc image set-generation <provider/model>` first."));
|
|
274
|
-
process.exit(1);
|
|
275
|
-
}
|
|
276
|
-
const fallbacks = resolveAgentModelFallbackValues(current);
|
|
277
|
-
const autoProviderFallback = current?.autoProviderFallback === true;
|
|
278
|
-
if (ms === 0) {
|
|
279
|
-
config.agents.defaults.imageGenerationModel = {
|
|
280
|
-
primary,
|
|
281
|
-
...fallbacks.length > 0 ? { fallbacks } : {},
|
|
282
|
-
...autoProviderFallback ? { autoProviderFallback: true } : {}
|
|
283
|
-
};
|
|
284
|
-
await saveConfig(config, configPath);
|
|
285
|
-
console.log(colors.green("Image generation timeout cleared."));
|
|
286
|
-
return;
|
|
287
|
-
}
|
|
288
|
-
config.agents.defaults.imageGenerationModel = {
|
|
289
|
-
primary,
|
|
290
|
-
...fallbacks.length > 0 ? { fallbacks } : {},
|
|
291
|
-
...autoProviderFallback ? { autoProviderFallback: true } : {},
|
|
292
|
-
timeoutMs: ms
|
|
293
|
-
};
|
|
294
|
-
await saveConfig(config, configPath);
|
|
295
|
-
console.log(colors.green(`Image generation timeout set to: ${ms}ms`));
|
|
296
|
-
});
|
|
297
|
-
cmd.command("set-auto-fallback <on-or-off>").description("Enable / disable sweeping every configured provider when primary chain fails").action(async (value) => {
|
|
298
|
-
const v = value.trim().toLowerCase();
|
|
299
|
-
const enable = v === "on" || v === "true" || v === "1" || v === "yes";
|
|
300
|
-
const disable = v === "off" || v === "false" || v === "0" || v === "no";
|
|
301
|
-
if (!enable && !disable) {
|
|
302
|
-
console.error(colors.red("Value must be \"on\" or \"off\"."));
|
|
303
|
-
process.exit(1);
|
|
304
|
-
}
|
|
305
|
-
const configPath = getContextWithOpts().configPath;
|
|
306
|
-
const config = loadConfig(configPath);
|
|
307
|
-
if (!config.agents) config.agents = { defaults: {} };
|
|
308
|
-
if (!config.agents.defaults) config.agents.defaults = {};
|
|
309
|
-
const current = config.agents.defaults.imageGenerationModel;
|
|
310
|
-
const primary = resolveAgentModelPrimaryValue(current);
|
|
311
|
-
if (!primary) {
|
|
312
|
-
console.error(colors.red("No image generation model is configured. Run `xopc image set-generation <provider/model>` first."));
|
|
313
|
-
process.exit(1);
|
|
314
|
-
}
|
|
315
|
-
const fallbacks = resolveAgentModelFallbackValues(current);
|
|
316
|
-
const timeoutMs = current?.timeoutMs;
|
|
317
|
-
if (disable) {
|
|
318
|
-
config.agents.defaults.imageGenerationModel = {
|
|
319
|
-
primary,
|
|
320
|
-
...fallbacks.length > 0 ? { fallbacks } : {},
|
|
321
|
-
...timeoutMs ? { timeoutMs } : {}
|
|
322
|
-
};
|
|
323
|
-
await saveConfig(config, configPath);
|
|
324
|
-
console.log(colors.green("Image generation auto-fallback disabled."));
|
|
16
|
+
console.log(JSON.stringify(providers, null, 2));
|
|
325
17
|
return;
|
|
326
18
|
}
|
|
327
|
-
|
|
328
|
-
primary,
|
|
329
|
-
...fallbacks.length > 0 ? { fallbacks } : {},
|
|
330
|
-
...timeoutMs ? { timeoutMs } : {},
|
|
331
|
-
autoProviderFallback: true
|
|
332
|
-
};
|
|
333
|
-
await saveConfig(config, configPath);
|
|
334
|
-
console.log(colors.green("Image generation auto-fallback enabled."));
|
|
335
|
-
});
|
|
336
|
-
cmd.command("generate <prompt...>").description("Generate one or more images and save them to disk").option("--model <ref>", "Model ref (provider/model); falls back to configured primary").option("--size <size>", "Image size, e.g. 1024x1024").option("--count <n>", "Number of images to generate", (v) => parseInt(v, 10), 1).option("--output <dir>", "Output directory (default: ./generated-images)").option("--timeout <ms>", "Per-call timeout (ms)", (v) => parseInt(v, 10)).action(async (promptParts, opts) => {
|
|
337
|
-
const prompt = promptParts.join(" ").trim();
|
|
338
|
-
if (!prompt) {
|
|
339
|
-
console.error(colors.red("Prompt is required."));
|
|
340
|
-
process.exit(1);
|
|
341
|
-
}
|
|
342
|
-
const configPath = getContextWithOpts().configPath;
|
|
343
|
-
const config = loadConfig(configPath);
|
|
344
|
-
const outputDir = resolve(opts.output ?? "./generated-images");
|
|
345
|
-
await mkdir(outputDir, { recursive: true });
|
|
346
|
-
const count = Number.isFinite(opts.count) && (opts.count ?? 0) > 0 ? Math.floor(opts.count) : 1;
|
|
347
|
-
try {
|
|
348
|
-
const result = await generateImage({
|
|
349
|
-
prompt,
|
|
350
|
-
cfg: config,
|
|
351
|
-
...opts.model ? { modelRef: opts.model } : {},
|
|
352
|
-
...opts.size ? { size: opts.size } : {},
|
|
353
|
-
count,
|
|
354
|
-
...typeof opts.timeout === "number" && opts.timeout > 0 ? { timeoutMs: opts.timeout } : {}
|
|
355
|
-
});
|
|
356
|
-
const writtenPaths = [];
|
|
357
|
-
for (let i = 0; i < result.images.length; i++) {
|
|
358
|
-
const img = result.images[i];
|
|
359
|
-
const full = join(outputDir, img.fileName?.trim() || `image-${i + 1}.png`);
|
|
360
|
-
await writeFile(full, img.buffer);
|
|
361
|
-
writtenPaths.push(full);
|
|
362
|
-
}
|
|
363
|
-
console.log("");
|
|
364
|
-
console.log(colors.green(`Generated ${result.images.length} image${result.images.length === 1 ? "" : "s"} (model: ${result.model}).`));
|
|
365
|
-
for (const p of writtenPaths) console.log(` - ${p}`);
|
|
366
|
-
console.log("");
|
|
367
|
-
} catch (err) {
|
|
368
|
-
console.error(colors.red(`Image generation failed: ${err instanceof Error ? err.message : String(err)}`));
|
|
369
|
-
process.exit(1);
|
|
370
|
-
}
|
|
19
|
+
for (const provider of providers) console.log(`${provider.id}: ${provider.defaultModel ?? provider.models[0] ?? "no default model"}`);
|
|
371
20
|
});
|
|
372
21
|
return cmd;
|
|
373
22
|
}
|
|
374
23
|
register({
|
|
375
24
|
id: "image",
|
|
376
25
|
name: "image",
|
|
377
|
-
description: "
|
|
26
|
+
description: "Inspect image provider availability",
|
|
378
27
|
factory: createImageCommand,
|
|
379
|
-
metadata: {
|
|
380
|
-
category: "utility",
|
|
381
|
-
examples: [
|
|
382
|
-
"xopc image status",
|
|
383
|
-
"xopc image set-understanding openai/gpt-4o",
|
|
384
|
-
"xopc image set-generation openai/gpt-image-1",
|
|
385
|
-
"xopc image providers"
|
|
386
|
-
]
|
|
387
|
-
}
|
|
28
|
+
metadata: { category: "utility" }
|
|
388
29
|
});
|
|
389
30
|
//#endregion
|
|
390
31
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.js","names":["resolvePath"],"sources":["../../../../src/cli/commands/image.ts"],"sourcesContent":["import { mkdir, writeFile } from 'node:fs/promises';\nimport { join, resolve as resolvePath } from 'node:path';\nimport { Command } from 'commander';\nimport { loadConfig, saveConfig } from '../../config/loader.js';\nimport { parseModelRef, type AgentModelConfig } from '../../config/schema.js';\nimport {\n resolveAgentModelPrimaryValue,\n resolveAgentModelFallbackValues,\n} from '../../config/model-input.js';\nimport { isProviderConfigured } from '../../providers/index.js';\nimport {\n generateImage,\n getImageGenerationProvider,\n listImageGenerationProvidersSummary,\n} from '../../agent/image/index.js';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\nimport { colors } from '../utils/colors.js';\nimport { getContextWithOpts } from '../context.js';\n\nfunction modelRefToString(model?: AgentModelConfig): string | null {\n if (!model) {\n return null;\n }\n return resolveAgentModelPrimaryValue(model) ?? null;\n}\n\nfunction modelFallbacksToArray(model?: AgentModelConfig): string[] {\n return resolveAgentModelFallbackValues(model);\n}\n\nfunction createImageCommand(_ctx: CLIContext): Command {\n const cmd = new Command('image')\n .description('Configure image generation and understanding models')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc image status # Show current image config',\n 'xopc image set-understanding openai/gpt-4o # Set image understanding model',\n 'xopc image set-generation openai/gpt-image-1 # Set image generation model',\n 'xopc image add-fallback understanding anthropic/claude-sonnet-4-5',\n 'xopc image add-fallback generation dashscope/wan2.7-image-pro',\n 'xopc image remove-fallback understanding 0 # Remove first fallback',\n 'xopc image providers # List available providers',\n ]),\n );\n\n cmd\n .command('status')\n .description('Show current image model configuration')\n .option('--json', 'Output as JSON')\n .action(async (opts: { json?: boolean }) => {\n const ctx = getContextWithOpts();\n const config = loadConfig(ctx.configPath);\n const defaults = config.agents?.defaults;\n\n const understandingPrimary = modelRefToString(defaults?.imageModel);\n const understandingFallbacks = modelFallbacksToArray(defaults?.imageModel);\n const generationPrimary = modelRefToString(defaults?.imageGenerationModel);\n const generationFallbacks = modelFallbacksToArray(defaults?.imageGenerationModel);\n const mediaMaxMb = defaults?.mediaMaxMb;\n\n if (opts.json) {\n console.log(\n JSON.stringify(\n {\n imageUnderstanding: {\n primary: understandingPrimary,\n fallbacks: understandingFallbacks,\n },\n imageGeneration: {\n primary: generationPrimary,\n fallbacks: generationFallbacks,\n },\n mediaMaxMb: mediaMaxMb ?? null,\n },\n null,\n 2,\n ),\n );\n return;\n }\n\n console.log('');\n console.log(colors.cyan('Image multimodal configuration'));\n console.log('═'.repeat(50));\n\n console.log('');\n console.log(colors.cyan('Image understanding (vision)'));\n if (understandingPrimary) {\n const parsed = parseModelRef(understandingPrimary);\n const configured = parsed ? await isProviderConfigured(parsed.provider) : false;\n const status = configured ? colors.green('OK') : colors.yellow('(provider not configured)');\n console.log(` Primary: ${understandingPrimary} ${status}`);\n } else {\n console.log(` Primary: ${colors.gray('(not set — inferred from keys / defaults)')}`);\n }\n for (let i = 0; i < understandingFallbacks.length; i++) {\n const fb = understandingFallbacks[i]!;\n const parsed = parseModelRef(fb);\n const configured = parsed ? await isProviderConfigured(parsed.provider) : false;\n const status = configured ? colors.green('OK') : colors.yellow('?');\n console.log(` Fallback ${i + 1}: ${fb} ${status}`);\n }\n\n console.log('');\n console.log(colors.cyan('Image generation'));\n if (generationPrimary) {\n const parsed = parseModelRef(generationPrimary);\n const configured = parsed ? await isProviderConfigured(parsed.provider) : false;\n const status = configured ? colors.green('OK') : colors.yellow('(provider not configured)');\n console.log(` Primary: ${generationPrimary} ${status}`);\n } else {\n console.log(` Primary: ${colors.gray('(not set — defaults to openai/gpt-image-1)')}`);\n }\n for (let i = 0; i < generationFallbacks.length; i++) {\n const fb = generationFallbacks[i]!;\n const parsed = parseModelRef(fb);\n const configured = parsed ? await isProviderConfigured(parsed.provider) : false;\n const status = configured ? colors.green('OK') : colors.yellow('?');\n console.log(` Fallback ${i + 1}: ${fb} ${status}`);\n }\n\n console.log('');\n console.log(colors.cyan('General'));\n console.log(` Max image size: ${mediaMaxMb ? `${mediaMaxMb} MB` : colors.gray('(default)')}`);\n\n console.log('');\n console.log('═'.repeat(50));\n console.log(\n colors.gray(\n 'Use \"xopc image set-understanding\" / \"xopc image set-generation\" to set primary models.',\n ),\n );\n console.log('');\n });\n\n cmd\n .command('set-understanding <modelRef>')\n .description('Set the primary image understanding (vision) model')\n .action(async (modelRef: string) => {\n const parsed = parseModelRef(modelRef);\n if (!parsed) {\n console.error(\n colors.red(`Invalid model reference: \"${modelRef}\". Use \"provider/model\" format.`),\n );\n process.exit(1);\n }\n\n const configured = await isProviderConfigured(parsed.provider);\n if (!configured) {\n console.warn(\n colors.yellow(\n `Provider \"${parsed.provider}\" is not configured. Set the API key before using this model.`,\n ),\n );\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n if (!config.agents) {\n config.agents = { defaults: {} } as typeof config.agents;\n }\n if (!config.agents.defaults) {\n config.agents.defaults = {} as typeof config.agents.defaults;\n }\n\n const existingFallbacks = modelFallbacksToArray(config.agents.defaults.imageModel);\n config.agents.defaults.imageModel =\n existingFallbacks.length > 0\n ? { primary: modelRef, fallbacks: existingFallbacks }\n : { primary: modelRef };\n\n await saveConfig(config, configPath);\n console.log(colors.green(`Image understanding model set to: ${modelRef}`));\n });\n\n cmd\n .command('set-generation <modelRef>')\n .description('Set the primary image generation model')\n .action(async (modelRef: string) => {\n const parsed = parseModelRef(modelRef);\n if (!parsed) {\n console.error(\n colors.red(`Invalid model reference: \"${modelRef}\". Use \"provider/model\" format.`),\n );\n process.exit(1);\n }\n\n const configured = await isProviderConfigured(parsed.provider);\n if (!configured) {\n console.warn(\n colors.yellow(\n `Provider \"${parsed.provider}\" is not configured. Set the API key before using this model.`,\n ),\n );\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n if (!config.agents) {\n config.agents = { defaults: {} } as typeof config.agents;\n }\n if (!config.agents.defaults) {\n config.agents.defaults = {} as typeof config.agents.defaults;\n }\n\n const existingFallbacks = modelFallbacksToArray(config.agents.defaults.imageGenerationModel);\n config.agents.defaults.imageGenerationModel =\n existingFallbacks.length > 0\n ? { primary: modelRef, fallbacks: existingFallbacks }\n : { primary: modelRef };\n\n await saveConfig(config, configPath);\n console.log(colors.green(`Image generation model set to: ${modelRef}`));\n });\n\n cmd\n .command('add-fallback <type> <modelRef>')\n .description('Add a fallback model (type: \"understanding\" or \"generation\")')\n .action(async (type: string, modelRef: string) => {\n if (type !== 'understanding' && type !== 'generation') {\n console.error(colors.red('Type must be \"understanding\" or \"generation\".'));\n process.exit(1);\n }\n\n const parsed = parseModelRef(modelRef);\n if (!parsed) {\n console.error(\n colors.red(`Invalid model reference: \"${modelRef}\". Use \"provider/model\" format.`),\n );\n process.exit(1);\n }\n\n const configured = await isProviderConfigured(parsed.provider);\n if (!configured) {\n console.warn(colors.yellow(`Provider \"${parsed.provider}\" is not configured.`));\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n if (!config.agents) {\n config.agents = { defaults: {} } as typeof config.agents;\n }\n if (!config.agents.defaults) {\n config.agents.defaults = {} as typeof config.agents.defaults;\n }\n\n const configKey = type === 'understanding' ? 'imageModel' : 'imageGenerationModel';\n const current = config.agents.defaults[configKey];\n const primary = resolveAgentModelPrimaryValue(current);\n const fallbacks = [...resolveAgentModelFallbackValues(current)];\n\n if (!primary) {\n const hint =\n type === 'understanding'\n ? 'xopc image set-understanding <model>'\n : 'xopc image set-generation <model>';\n console.error(colors.red(`No primary model set for image ${type}. Set it first: ${hint}`));\n process.exit(1);\n }\n\n if (fallbacks.includes(modelRef)) {\n console.warn(colors.yellow(`\"${modelRef}\" is already in the fallback list.`));\n return;\n }\n\n fallbacks.push(modelRef);\n config.agents.defaults[configKey] = { primary, fallbacks };\n\n await saveConfig(config, configPath);\n console.log(colors.green(`Added fallback for image ${type}: ${modelRef}`));\n console.log(colors.gray(` Fallback chain: ${primary} -> ${fallbacks.join(' -> ')}`));\n });\n\n cmd\n .command('remove-fallback <type> <index>')\n .description('Remove a fallback model by index (0-based)')\n .action(async (type: string, indexStr: string) => {\n if (type !== 'understanding' && type !== 'generation') {\n console.error(colors.red('Type must be \"understanding\" or \"generation\".'));\n process.exit(1);\n }\n\n const index = parseInt(indexStr, 10);\n if (Number.isNaN(index) || index < 0) {\n console.error(colors.red('Index must be a non-negative integer.'));\n process.exit(1);\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n const configKey = type === 'understanding' ? 'imageModel' : 'imageGenerationModel';\n const current = config.agents?.defaults?.[configKey];\n const primary = resolveAgentModelPrimaryValue(current);\n const fallbacks = [...resolveAgentModelFallbackValues(current)];\n\n if (index >= fallbacks.length) {\n console.error(\n colors.red(`Fallback index ${index} out of range (${fallbacks.length} fallbacks).`),\n );\n process.exit(1);\n }\n\n const removed = fallbacks.splice(index, 1)[0];\n\n if (!config.agents) {\n config.agents = { defaults: {} } as typeof config.agents;\n }\n if (!config.agents.defaults) {\n config.agents.defaults = {} as typeof config.agents.defaults;\n }\n\n if (primary) {\n config.agents.defaults[configKey] =\n fallbacks.length > 0 ? { primary, fallbacks } : { primary };\n }\n\n await saveConfig(config, configPath);\n console.log(colors.green(`Removed fallback: ${removed}`));\n });\n\n cmd\n .command('providers')\n .description('List registered image-generation providers and their capabilities')\n .option('--json', 'Output as JSON')\n .action(async (opts: { json?: boolean }) => {\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n\n const summaries = listImageGenerationProvidersSummary(config);\n const rows = summaries.map((s) => {\n const provider = getImageGenerationProvider(s.id, config);\n let configured = false;\n try {\n configured = provider?.isConfigured?.({ cfg: config }) === true;\n } catch {\n configured = false;\n }\n return {\n id: s.id,\n label: s.label ?? s.id,\n defaultModel: s.defaultModel ?? null,\n models: s.models,\n aliases: s.aliases ?? [],\n capabilities: s.capabilities ?? null,\n configured,\n };\n });\n\n if (opts.json) {\n console.log(JSON.stringify(rows, null, 2));\n return;\n }\n\n console.log('');\n console.log(colors.cyan('Image-generation providers'));\n console.log('═'.repeat(60));\n\n if (rows.length === 0) {\n console.log('');\n console.log(\n colors.yellow(\n ' No image-generation providers registered. Check `extensions/<vendor>/` and bundled.ts.',\n ),\n );\n console.log('');\n return;\n }\n\n for (const row of rows) {\n const statusIcon = row.configured ? colors.green('OK') : colors.yellow('?');\n const statusText = row.configured ? 'configured' : 'missing API key';\n console.log('');\n console.log(` ${statusIcon} ${row.label} (${row.id}) — ${statusText}`);\n if (row.defaultModel) console.log(` Default: ${row.defaultModel}`);\n if (row.models.length > 0) {\n console.log(` Models: ${row.models.map((m) => `${row.id}/${m}`).join(', ')}`);\n }\n if (row.aliases.length > 0) {\n console.log(` Aliases: ${row.aliases.join(', ')}`);\n }\n }\n\n console.log('');\n console.log('═'.repeat(60));\n console.log(\n colors.gray(\n 'Use `xopc image set-generation <provider/model>` to set the primary model, ' +\n '`xopc auth set <provider>` to configure API keys.',\n ),\n );\n console.log('');\n });\n\n cmd\n .command('set-max-size <mb>')\n .description('Set maximum image size in MB')\n .action(async (mbStr: string) => {\n const mb = parseFloat(mbStr);\n if (Number.isNaN(mb) || mb <= 0) {\n console.error(colors.red('Size must be a positive number (in MB).'));\n process.exit(1);\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n if (!config.agents) {\n config.agents = { defaults: {} } as typeof config.agents;\n }\n if (!config.agents.defaults) {\n config.agents.defaults = {} as typeof config.agents.defaults;\n }\n config.agents.defaults.mediaMaxMb = mb;\n\n await saveConfig(config, configPath);\n console.log(colors.green(`Max image size set to: ${mb} MB`));\n });\n\n cmd\n .command('set-timeout <ms>')\n .description('Set the per-request timeout (ms) for image generation; 0 to clear')\n .action(async (msStr: string) => {\n const ms = parseInt(msStr, 10);\n if (Number.isNaN(ms) || ms < 0) {\n console.error(colors.red('Timeout must be a non-negative integer (ms).'));\n process.exit(1);\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n if (!config.agents) config.agents = { defaults: {} } as typeof config.agents;\n if (!config.agents.defaults) config.agents.defaults = {} as typeof config.agents.defaults;\n\n const current = config.agents.defaults.imageGenerationModel;\n const primary = resolveAgentModelPrimaryValue(current);\n if (!primary) {\n console.error(\n colors.red('No image generation model is configured. Run `xopc image set-generation <provider/model>` first.'),\n );\n process.exit(1);\n }\n const fallbacks = resolveAgentModelFallbackValues(current);\n const autoProviderFallback = current?.autoProviderFallback === true;\n\n if (ms === 0) {\n config.agents.defaults.imageGenerationModel = {\n primary,\n ...(fallbacks.length > 0 ? { fallbacks } : {}),\n ...(autoProviderFallback ? { autoProviderFallback: true } : {}),\n };\n await saveConfig(config, configPath);\n console.log(colors.green('Image generation timeout cleared.'));\n return;\n }\n\n config.agents.defaults.imageGenerationModel = {\n primary,\n ...(fallbacks.length > 0 ? { fallbacks } : {}),\n ...(autoProviderFallback ? { autoProviderFallback: true } : {}),\n timeoutMs: ms,\n };\n await saveConfig(config, configPath);\n console.log(colors.green(`Image generation timeout set to: ${ms}ms`));\n });\n\n cmd\n .command('set-auto-fallback <on-or-off>')\n .description('Enable / disable sweeping every configured provider when primary chain fails')\n .action(async (value: string) => {\n const v = value.trim().toLowerCase();\n const enable = v === 'on' || v === 'true' || v === '1' || v === 'yes';\n const disable = v === 'off' || v === 'false' || v === '0' || v === 'no';\n if (!enable && !disable) {\n console.error(colors.red('Value must be \"on\" or \"off\".'));\n process.exit(1);\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n if (!config.agents) config.agents = { defaults: {} } as typeof config.agents;\n if (!config.agents.defaults) config.agents.defaults = {} as typeof config.agents.defaults;\n\n const current = config.agents.defaults.imageGenerationModel;\n const primary = resolveAgentModelPrimaryValue(current);\n if (!primary) {\n console.error(\n colors.red('No image generation model is configured. Run `xopc image set-generation <provider/model>` first.'),\n );\n process.exit(1);\n }\n const fallbacks = resolveAgentModelFallbackValues(current);\n const timeoutMs = current?.timeoutMs;\n\n if (disable) {\n config.agents.defaults.imageGenerationModel = {\n primary,\n ...(fallbacks.length > 0 ? { fallbacks } : {}),\n ...(timeoutMs ? { timeoutMs } : {}),\n };\n await saveConfig(config, configPath);\n console.log(colors.green('Image generation auto-fallback disabled.'));\n return;\n }\n\n config.agents.defaults.imageGenerationModel = {\n primary,\n ...(fallbacks.length > 0 ? { fallbacks } : {}),\n ...(timeoutMs ? { timeoutMs } : {}),\n autoProviderFallback: true,\n };\n await saveConfig(config, configPath);\n console.log(colors.green('Image generation auto-fallback enabled.'));\n });\n\n cmd\n .command('generate <prompt...>')\n .description('Generate one or more images and save them to disk')\n .option('--model <ref>', 'Model ref (provider/model); falls back to configured primary')\n .option('--size <size>', 'Image size, e.g. 1024x1024')\n .option('--count <n>', 'Number of images to generate', (v) => parseInt(v, 10), 1)\n .option('--output <dir>', 'Output directory (default: ./generated-images)')\n .option('--timeout <ms>', 'Per-call timeout (ms)', (v) => parseInt(v, 10))\n .action(\n async (\n promptParts: string[],\n opts: { model?: string; size?: string; count?: number; output?: string; timeout?: number },\n ) => {\n const prompt = promptParts.join(' ').trim();\n if (!prompt) {\n console.error(colors.red('Prompt is required.'));\n process.exit(1);\n }\n\n const configPath = getContextWithOpts().configPath;\n const config = loadConfig(configPath);\n const outputDir = resolvePath(opts.output ?? './generated-images');\n await mkdir(outputDir, { recursive: true });\n\n const count = Number.isFinite(opts.count) && (opts.count ?? 0) > 0 ? Math.floor(opts.count!) : 1;\n\n try {\n const result = await generateImage({\n prompt,\n cfg: config,\n ...(opts.model ? { modelRef: opts.model } : {}),\n ...(opts.size ? { size: opts.size } : {}),\n count,\n ...(typeof opts.timeout === 'number' && opts.timeout > 0 ? { timeoutMs: opts.timeout } : {}),\n });\n\n const writtenPaths: string[] = [];\n for (let i = 0; i < result.images.length; i++) {\n const img = result.images[i];\n const fileName = img.fileName?.trim() || `image-${i + 1}.png`;\n const full = join(outputDir, fileName);\n await writeFile(full, img.buffer);\n writtenPaths.push(full);\n }\n\n console.log('');\n console.log(\n colors.green(\n `Generated ${result.images.length} image${result.images.length === 1 ? '' : 's'} (model: ${result.model}).`,\n ),\n );\n for (const p of writtenPaths) console.log(` - ${p}`);\n console.log('');\n } catch (err) {\n console.error(colors.red(`Image generation failed: ${err instanceof Error ? err.message : String(err)}`));\n process.exit(1);\n }\n },\n );\n\n return cmd;\n}\n\nregister({\n id: 'image',\n name: 'image',\n description: 'Configure image generation and understanding models',\n factory: createImageCommand,\n metadata: {\n category: 'utility',\n examples: [\n 'xopc image status',\n 'xopc image set-understanding openai/gpt-4o',\n 'xopc image set-generation openai/gpt-image-1',\n 'xopc image providers',\n ],\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"image.js","names":[],"sources":["../../../../src/cli/commands/image.ts"],"sourcesContent":["import { Command } from 'commander';\n\nimport { listImageGenerationProvidersSummary } from '../../agent/image/index.js';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\n\nfunction createImageCommand(_ctx: CLIContext): Command {\n const cmd = new Command('image')\n .description('Inspect image provider availability')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc image providers # List available image generation providers',\n 'xopc image status # Explain current manifest-era image behavior',\n ]),\n );\n\n cmd\n .command('status')\n .description('Show image runtime status')\n .action(() => {\n console.log('Image model defaults were removed.');\n console.log('Image generation now uses configured providers discovered at runtime.');\n console.log('Agent-specific capability policy belongs in agent manifests or capability presets.');\n });\n\n cmd\n .command('providers')\n .description('List image generation providers')\n .option('--json', 'Output as JSON')\n .action((opts: { json?: boolean }) => {\n const providers = listImageGenerationProvidersSummary();\n if (opts.json) {\n console.log(JSON.stringify(providers, null, 2));\n return;\n }\n for (const provider of providers) {\n console.log(`${provider.id}: ${provider.defaultModel ?? provider.models[0] ?? 'no default model'}`);\n }\n });\n\n return cmd;\n}\n\nregister({\n id: 'image',\n name: 'image',\n description: 'Inspect image provider availability',\n factory: createImageCommand,\n metadata: { category: 'utility' },\n});\n"],"mappings":";;;;;AAKA,SAAS,mBAAmB,MAA2B;CACrD,MAAM,MAAM,IAAI,QAAQ,QAAQ,CAC7B,YAAY,sCAAsC,CAClD,YACC,SACA,eAAe,CACb,sEACA,uEACD,CAAC,CACH;AAEH,KACG,QAAQ,SAAS,CACjB,YAAY,4BAA4B,CACxC,aAAa;AACZ,UAAQ,IAAI,qCAAqC;AACjD,UAAQ,IAAI,wEAAwE;AACpF,UAAQ,IAAI,qFAAqF;GACjG;AAEJ,KACG,QAAQ,YAAY,CACpB,YAAY,kCAAkC,CAC9C,OAAO,UAAU,iBAAiB,CAClC,QAAQ,SAA6B;EACpC,MAAM,YAAY,qCAAqC;AACvD,MAAI,KAAK,MAAM;AACb,WAAQ,IAAI,KAAK,UAAU,WAAW,MAAM,EAAE,CAAC;AAC/C;;AAEF,OAAK,MAAM,YAAY,UACrB,SAAQ,IAAI,GAAG,SAAS,GAAG,IAAI,SAAS,gBAAgB,SAAS,OAAO,MAAM,qBAAqB;GAErG;AAEJ,QAAO;;AAGT,SAAS;CACP,IAAI;CACJ,MAAM;CACN,aAAa;CACb,SAAS;CACT,UAAU,EAAE,UAAU,WAAW;CAClC,CAAC"}
|
|
@@ -35,18 +35,34 @@ const VISION_IDS = new Set([
|
|
|
35
35
|
"qwen2.5-vl-72b-instruct"
|
|
36
36
|
]);
|
|
37
37
|
function currentModelRef(config) {
|
|
38
|
-
|
|
38
|
+
const legacyDefault = config.agents.defaults?.model?.trim();
|
|
39
|
+
if (legacyDefault) return legacyDefault;
|
|
40
|
+
const list = Array.isArray(config.agents?.list) ? config.agents.list : [];
|
|
41
|
+
const id = config.agents?.default ?? list.find((entry) => entry.default === true)?.id ?? list[0]?.id;
|
|
42
|
+
const agent = list.find((entry) => entry.id === id) ?? list[0];
|
|
43
|
+
const roles = agent?.models?.roles ?? {};
|
|
44
|
+
const defaultRole = agent?.models?.defaultRole ?? Object.keys(roles)[0];
|
|
45
|
+
return defaultRole ? roles[defaultRole]?.model : void 0;
|
|
39
46
|
}
|
|
40
47
|
function setDefaultModel(config, modelRef) {
|
|
41
|
-
config.agents
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
const list = Array.isArray(config.agents?.list) ? config.agents.list : [];
|
|
49
|
+
const id = config.agents?.default ?? list[0]?.id ?? "main";
|
|
50
|
+
const index = list.findIndex((entry) => entry.id === id);
|
|
51
|
+
if (index >= 0) {
|
|
52
|
+
const agent = list[index];
|
|
53
|
+
const defaultRole = agent.models?.defaultRole || "deep";
|
|
54
|
+
list[index] = {
|
|
55
|
+
...agent,
|
|
56
|
+
models: {
|
|
57
|
+
...agent.models,
|
|
58
|
+
defaultRole,
|
|
59
|
+
roles: {
|
|
60
|
+
...agent.models?.roles,
|
|
61
|
+
[defaultRole]: { model: modelRef }
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
50
66
|
return config;
|
|
51
67
|
}
|
|
52
68
|
function modelRef(provider, id) {
|