@xopcai/xopc 0.0.6 → 0.0.8
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/dist/extensions/telegram/src/plugin.js +1 -1
- package/dist/extensions/telegram/src/routing-integration.js +2 -2
- package/dist/extensions/weixin/src/api/api.js +1 -1
- package/dist/extensions/weixin/src/cdn/upload.js +1 -1
- package/dist/extensions/weixin/src/media/data-url.js +1 -1
- package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
- package/dist/extensions/weixin/src/plugin.js +1 -1
- package/dist/gateway/static/root/assets/{agents-B6s2BvpH.js → agents-BSNzJWbQ.js} +2 -2
- package/dist/gateway/static/root/assets/{agents-B6s2BvpH.js.map → agents-BSNzJWbQ.js.map} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-BtsZ5ZPx.js → apps-page-BKk9SB4D.js} +2 -2
- package/dist/gateway/static/root/assets/{apps-page-BtsZ5ZPx.js.map → apps-page-BKk9SB4D.js.map} +1 -1
- package/dist/gateway/static/root/assets/attachment-load-DXcJLSWT.js +1 -0
- package/dist/gateway/static/root/assets/{channels-settings-BUfWBEVU.js → channels-settings-_J6cQN6G.js} +2 -2
- package/dist/gateway/static/root/assets/{channels-settings-BUfWBEVU.js.map → channels-settings-_J6cQN6G.js.map} +1 -1
- package/dist/gateway/static/root/assets/{chat-agents-api-BR30M2YQ.js → chat-agents-api-DPb_0O8M.js} +2 -2
- package/dist/gateway/static/root/assets/{chat-agents-api-BR30M2YQ.js.map → chat-agents-api-DPb_0O8M.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-page-CMTx0Mjz.js → cron-page-BUJOuuKX.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-page-CMTx0Mjz.js.map → cron-page-BUJOuuKX.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-utils-BJma9IcD.js → cron-utils-Cn0YVg8x.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-utils-BJma9IcD.js.map → cron-utils-Cn0YVg8x.js.map} +1 -1
- package/dist/gateway/static/root/assets/electron-env-D9bm1FIu.js +2 -0
- package/dist/gateway/static/root/assets/electron-env-D9bm1FIu.js.map +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-BCVoNSo6.js → extension-debug-page-DTz4O5Ua.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-debug-page-BCVoNSo6.js.map → extension-debug-page-DTz4O5Ua.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-iframe-host-PWB-Pw2d.js → extension-iframe-host-Cs1Kde9o.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-iframe-host-PWB-Pw2d.js.map → extension-iframe-host-Cs1Kde9o.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-D2tTklsD.js → extension-page-G52iX0Bo.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-page-D2tTklsD.js.map → extension-page-G52iX0Bo.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-provider-BpHodVRj.js → extension-provider-CO2jxBA9.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-provider-BpHodVRj.js.map → extension-provider-CO2jxBA9.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-BEu6Xw1Z.js → extension-settings-page-D9Ul8uSt.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-settings-page-BEu6Xw1Z.js.map → extension-settings-page-D9Ul8uSt.js.map} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-C7ZFPhNj.js → gateway-config-swr-Bc8SVD15.js} +2 -2
- package/dist/gateway/static/root/assets/{gateway-config-swr-C7ZFPhNj.js.map → gateway-config-swr-Bc8SVD15.js.map} +1 -1
- package/dist/gateway/static/root/assets/index-BXUJbteW.js +16 -0
- package/dist/gateway/static/root/assets/index-BXUJbteW.js.map +1 -0
- package/dist/gateway/static/root/assets/index-CQLMxWSA.css +2 -0
- package/dist/gateway/static/root/assets/{logs-page-BpsxYdcL.js → logs-page-5V25JkQY.js} +2 -2
- package/dist/gateway/static/root/assets/{logs-page-BpsxYdcL.js.map → logs-page-5V25JkQY.js.map} +1 -1
- package/dist/gateway/static/root/assets/{model-selector-BiiDq8Pk.js → model-selector-he3aQfme.js} +2 -2
- package/dist/gateway/static/root/assets/{model-selector-BiiDq8Pk.js.map → model-selector-he3aQfme.js.map} +1 -1
- package/dist/gateway/static/root/assets/navigation-DB9S-C6S.js +2 -0
- package/dist/gateway/static/root/assets/navigation-DB9S-C6S.js.map +1 -0
- package/dist/gateway/static/root/assets/page-header-store-DJHD9Ean.js +2 -0
- package/dist/gateway/static/root/assets/{page-header-store-HcRZK5CZ.js.map → page-header-store-DJHD9Ean.js.map} +1 -1
- package/dist/gateway/static/root/assets/{session-api-DxNaAkmX.js → session-api-n-4O5d9U.js} +2 -2
- package/dist/gateway/static/root/assets/{session-api-DxNaAkmX.js.map → session-api-n-4O5d9U.js.map} +1 -1
- package/dist/gateway/static/root/assets/{session-working-directory-control-CDH-Wk4E.js → session-working-directory-control-B6dHLvbr.js} +3 -3
- package/dist/gateway/static/root/assets/{session-working-directory-control-CDH-Wk4E.js.map → session-working-directory-control-B6dHLvbr.js.map} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-5PK75r1n.js → sessions-page-rBUfTdm3.js} +2 -2
- package/dist/gateway/static/root/assets/{sessions-page-5PK75r1n.js.map → sessions-page-rBUfTdm3.js.map} +1 -1
- package/dist/gateway/static/root/assets/settings-page-B3QrJm-E.js +2 -0
- package/dist/gateway/static/root/assets/settings-page-B3QrJm-E.js.map +1 -0
- package/dist/gateway/static/root/assets/{skill-api-CxbNlOD_.js → skill-api-vxtE8kI6.js} +2 -2
- package/dist/gateway/static/root/assets/{skill-api-CxbNlOD_.js.map → skill-api-vxtE8kI6.js.map} +1 -1
- package/dist/gateway/static/root/assets/{skills-page-Dd8ZzYJb.js → skills-page-D36_O2Ub.js} +2 -2
- package/dist/gateway/static/root/assets/{skills-page-Dd8ZzYJb.js.map → skills-page-D36_O2Ub.js.map} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-CPTH77BE.js → theme-store-CmiSsYBd.js} +2 -2
- package/dist/gateway/static/root/assets/{theme-store-CPTH77BE.js.map → theme-store-CmiSsYBd.js.map} +1 -1
- package/dist/gateway/static/root/assets/url-CtSqjF9J.js +2 -0
- package/dist/gateway/static/root/assets/url-CtSqjF9J.js.map +1 -0
- package/dist/gateway/static/root/assets/{useTranslation-BEUWOMuh.js → useTranslation-DYORQ7x6.js} +2 -2
- package/dist/gateway/static/root/assets/{useTranslation-BEUWOMuh.js.map → useTranslation-DYORQ7x6.js.map} +1 -1
- package/dist/gateway/static/root/index.html +16 -16
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.js +4 -4
- package/dist/src/agent/context/workspace-seed.js +2 -2
- package/dist/src/agent/image/index.d.ts +0 -1
- package/dist/src/agent/image/index.js +1 -2
- package/dist/src/agent/ipc/bus.js +1 -1
- package/dist/src/agent/memory/plugin-discovery.js +1 -1
- package/dist/src/agent/models/manager.js +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +1 -1
- package/dist/src/agent/service.js +3 -3
- package/dist/src/agent/skills/hub-hash.js +1 -1
- package/dist/src/agent/skills/hub-pull.js +1 -1
- package/dist/src/agent/skills/index.js +1 -1
- package/dist/src/agent/skills/skill-manager.js +1 -1
- package/dist/src/agent/tools/browser/tools.js +2 -2
- package/dist/src/agent/tools/browser/tools.js.map +1 -1
- package/dist/src/agent/tools/factory.js +1 -1
- package/dist/src/agent/tools/image-generate-tool.js +1 -1
- package/dist/src/agent/tools/image-tool.js +2 -2
- package/dist/src/agent/tools/image-tool.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/read.d.ts +0 -2
- package/dist/src/agent/tools/read.js +1 -3
- package/dist/src/agent/tools/read.js.map +1 -1
- package/dist/src/agent/tools/send-media.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +1 -1
- package/dist/src/channels/plugin-types.d.ts +14 -0
- package/dist/src/cli/commands/agent.js +1 -1
- package/dist/src/cli/commands/doctor/checks/channel-config.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/channel-config.js +113 -0
- package/dist/src/cli/commands/doctor/checks/channel-config.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/channel-plugins.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/channel-plugins.js +47 -0
- package/dist/src/cli/commands/doctor/checks/channel-plugins.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/config-health.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/config-health.js +82 -0
- package/dist/src/cli/commands/doctor/checks/config-health.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/cron-health.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/cron-health.js +116 -0
- package/dist/src/cli/commands/doctor/checks/cron-health.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/gateway-health.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/gateway-health.js +64 -0
- package/dist/src/cli/commands/doctor/checks/gateway-health.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/gateway-service.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/gateway-service.js +64 -0
- package/dist/src/cli/commands/doctor/checks/gateway-service.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/node-version.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/node-version.js +33 -0
- package/dist/src/cli/commands/doctor/checks/node-version.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/provider-auth.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +91 -0
- package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/security-audit.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/security-audit.js +85 -0
- package/dist/src/cli/commands/doctor/checks/security-audit.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/session-integrity.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/session-integrity.js +118 -0
- package/dist/src/cli/commands/doctor/checks/session-integrity.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/state-integrity.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/state-integrity.js +99 -0
- package/dist/src/cli/commands/doctor/checks/state-integrity.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/version-check.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/version-check.js +71 -0
- package/dist/src/cli/commands/doctor/checks/version-check.js.map +1 -0
- package/dist/src/cli/commands/doctor/checks/workspace-status.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/workspace-status.js +73 -0
- package/dist/src/cli/commands/doctor/checks/workspace-status.js.map +1 -0
- package/dist/src/cli/commands/doctor/flow.d.ts +9 -0
- package/dist/src/cli/commands/doctor/flow.js +51 -0
- package/dist/src/cli/commands/doctor/flow.js.map +1 -0
- package/dist/src/cli/commands/doctor/format.d.ts +6 -0
- package/dist/src/cli/commands/doctor/format.js +61 -0
- package/dist/src/cli/commands/doctor/format.js.map +1 -0
- package/dist/src/cli/commands/doctor/index.js +44 -0
- package/dist/src/cli/commands/doctor/index.js.map +1 -0
- package/dist/src/cli/commands/doctor/types.d.ts +20 -0
- package/dist/src/cli/commands/doctor/types.js +1 -0
- package/dist/src/cli/commands/init.js +2 -2
- package/dist/src/cli/index.d.ts +1 -1
- package/dist/src/cli/index.js +1 -1
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/utils/init-workspace.js +1 -1
- package/dist/src/config/index.js +3 -3
- package/dist/src/config/loader.js +1 -1
- package/dist/src/config/models-json.d.ts +15 -15
- package/dist/src/config/models-json.js +1 -1
- package/dist/src/config/profile.js +1 -1
- package/dist/src/config/schema.d.ts +0 -105
- package/dist/src/config/schema.js +3 -40
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/cron/executor.js +2 -2
- package/dist/src/daemon/launchd.js +2 -2
- package/dist/src/daemon/launchd.js.map +1 -1
- package/dist/src/daemon/systemd.js +2 -2
- package/dist/src/daemon/systemd.js.map +1 -1
- package/dist/src/extensions/loader.js +1 -1
- package/dist/src/gateway/agents-admin.js +1 -1
- package/dist/src/gateway/hono/lib/static-ui.js +1 -1
- package/dist/src/gateway/hono/routes/doctor.d.ts +3 -0
- package/dist/src/gateway/hono/routes/doctor.js +35 -0
- package/dist/src/gateway/hono/routes/doctor.js.map +1 -0
- 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/workspace.js +2 -2
- package/dist/src/gateway/hono/sse.js +2 -2
- package/dist/src/gateway/lock.js +1 -1
- package/dist/src/gateway/ports.js +98 -3
- package/dist/src/gateway/ports.js.map +1 -1
- package/dist/src/gateway/service.d.ts +0 -4
- package/dist/src/gateway/service.js +4 -23
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/routing/bindings.js +1 -1
- package/dist/src/routing/index.d.ts +1 -1
- package/dist/src/routing/index.js +2 -2
- package/dist/src/routing/index.js.map +1 -1
- package/dist/src/routing/resolve-route.js +1 -1
- package/dist/src/routing/session-key.d.ts +0 -5
- package/dist/src/routing/session-key.js +1 -27
- package/dist/src/routing/session-key.js.map +1 -1
- package/dist/src/session/session-title.js +1 -1
- package/dist/src/session/store.js +2 -6
- package/dist/src/session/store.js.map +1 -1
- package/dist/src/session/types.d.ts +0 -10
- package/dist/src/session/types.js.map +1 -1
- package/package.json +1 -2
- package/dist/gateway/static/root/assets/attachment-load-6pRlDPZ8.js +0 -1
- package/dist/gateway/static/root/assets/index-DBZ5eXW5.js +0 -16
- package/dist/gateway/static/root/assets/index-DBZ5eXW5.js.map +0 -1
- package/dist/gateway/static/root/assets/index-KsVMH-Jo.css +0 -2
- package/dist/gateway/static/root/assets/navigation-BpLKd2Ca.js +0 -2
- package/dist/gateway/static/root/assets/navigation-BpLKd2Ca.js.map +0 -1
- package/dist/gateway/static/root/assets/page-header-store-HcRZK5CZ.js +0 -2
- package/dist/gateway/static/root/assets/preference-select-fields-B4AJBqUY.js +0 -2
- package/dist/gateway/static/root/assets/preference-select-fields-B4AJBqUY.js.map +0 -1
- package/dist/gateway/static/root/assets/settings-page-BvSj0JqX.js +0 -2
- package/dist/gateway/static/root/assets/settings-page-BvSj0JqX.js.map +0 -1
- package/dist/gateway/static/root/assets/url-QmwQTJ-j.js +0 -2
- package/dist/gateway/static/root/assets/url-QmwQTJ-j.js.map +0 -1
- package/dist/src/acp/commands.d.ts +0 -11
- package/dist/src/acp/commands.js +0 -17
- package/dist/src/acp/commands.js.map +0 -1
- package/dist/src/acp/control-plane/identity-reconcile.d.ts +0 -36
- package/dist/src/acp/control-plane/identity-reconcile.js +0 -124
- package/dist/src/acp/control-plane/identity-reconcile.js.map +0 -1
- package/dist/src/acp/control-plane/index.d.ts +0 -10
- package/dist/src/acp/control-plane/index.js +0 -6
- package/dist/src/acp/control-plane/manager.d.ts +0 -86
- package/dist/src/acp/control-plane/manager.js +0 -502
- package/dist/src/acp/control-plane/manager.js.map +0 -1
- package/dist/src/acp/control-plane/manager.types.d.ts +0 -125
- package/dist/src/acp/control-plane/manager.types.js +0 -14
- package/dist/src/acp/control-plane/manager.types.js.map +0 -1
- package/dist/src/acp/control-plane/manager.utils.d.ts +0 -29
- package/dist/src/acp/control-plane/manager.utils.js +0 -46
- package/dist/src/acp/control-plane/manager.utils.js.map +0 -1
- package/dist/src/acp/control-plane/runtime-cache-manager.d.ts +0 -49
- package/dist/src/acp/control-plane/runtime-cache-manager.js +0 -155
- package/dist/src/acp/control-plane/runtime-cache-manager.js.map +0 -1
- package/dist/src/acp/control-plane/runtime-cache.d.ts +0 -45
- package/dist/src/acp/control-plane/runtime-cache.js +0 -58
- package/dist/src/acp/control-plane/runtime-cache.js.map +0 -1
- package/dist/src/acp/control-plane/runtime-options.d.ts +0 -30
- package/dist/src/acp/control-plane/runtime-options.js +0 -92
- package/dist/src/acp/control-plane/runtime-options.js.map +0 -1
- package/dist/src/acp/control-plane/session-actor-queue.d.ts +0 -22
- package/dist/src/acp/control-plane/session-actor-queue.js +0 -70
- package/dist/src/acp/control-plane/session-actor-queue.js.map +0 -1
- package/dist/src/acp/control-plane/session-lifecycle-manager.d.ts +0 -59
- package/dist/src/acp/control-plane/session-lifecycle-manager.js +0 -209
- package/dist/src/acp/control-plane/session-lifecycle-manager.js.map +0 -1
- package/dist/src/acp/control-plane/session-store.d.ts +0 -39
- package/dist/src/acp/control-plane/session-store.js +0 -149
- package/dist/src/acp/control-plane/session-store.js.map +0 -1
- package/dist/src/acp/control-plane/turn-manager.d.ts +0 -40
- package/dist/src/acp/control-plane/turn-manager.js +0 -134
- package/dist/src/acp/control-plane/turn-manager.js.map +0 -1
- package/dist/src/acp/event-mapper.d.ts +0 -48
- package/dist/src/acp/event-mapper.js +0 -94
- package/dist/src/acp/event-mapper.js.map +0 -1
- package/dist/src/acp/index.d.ts +0 -10
- package/dist/src/acp/index.js +0 -5
- package/dist/src/acp/meta.d.ts +0 -15
- package/dist/src/acp/meta.js +0 -36
- package/dist/src/acp/meta.js.map +0 -1
- package/dist/src/acp/routing-integration.d.ts +0 -37
- package/dist/src/acp/routing-integration.js +0 -58
- package/dist/src/acp/routing-integration.js.map +0 -1
- package/dist/src/acp/runtime/backends/index.d.ts +0 -4
- package/dist/src/acp/runtime/backends/index.js +0 -2
- package/dist/src/acp/runtime/backends/local.d.ts +0 -136
- package/dist/src/acp/runtime/backends/local.js +0 -603
- package/dist/src/acp/runtime/backends/local.js.map +0 -1
- package/dist/src/acp/runtime/error-text.d.ts +0 -16
- package/dist/src/acp/runtime/error-text.js +0 -40
- package/dist/src/acp/runtime/error-text.js.map +0 -1
- package/dist/src/acp/runtime/errors.d.ts +0 -31
- package/dist/src/acp/runtime/errors.js +0 -47
- package/dist/src/acp/runtime/errors.js.map +0 -1
- package/dist/src/acp/runtime/index.d.ts +0 -7
- package/dist/src/acp/runtime/index.js +0 -4
- package/dist/src/acp/runtime/registry.d.ts +0 -35
- package/dist/src/acp/runtime/registry.js +0 -85
- package/dist/src/acp/runtime/registry.js.map +0 -1
- package/dist/src/acp/runtime/session-identity.d.ts +0 -35
- package/dist/src/acp/runtime/session-identity.js +0 -134
- package/dist/src/acp/runtime/session-identity.js.map +0 -1
- package/dist/src/acp/runtime/types.d.ts +0 -214
- package/dist/src/acp/secret-file.d.ts +0 -7
- package/dist/src/acp/secret-file.js +0 -19
- package/dist/src/acp/secret-file.js.map +0 -1
- package/dist/src/acp/server.d.ts +0 -48
- package/dist/src/acp/server.js +0 -300
- package/dist/src/acp/server.js.map +0 -1
- package/dist/src/acp/session.d.ts +0 -29
- package/dist/src/acp/session.js +0 -30
- package/dist/src/acp/session.js.map +0 -1
- package/dist/src/acp/types.d.ts +0 -39
- package/dist/src/acp/types.js +0 -13
- package/dist/src/acp/types.js.map +0 -1
- package/dist/src/agent/image/describe-images.d.ts +0 -18
- package/dist/src/agent/image/describe-images.js +0 -19
- package/dist/src/agent/image/describe-images.js.map +0 -1
- package/dist/src/cli/commands/acp.d.ts +0 -4
- package/dist/src/cli/commands/acp.js +0 -200
- package/dist/src/cli/commands/acp.js.map +0 -1
- /package/dist/src/{acp/runtime/types.js → cli/commands/doctor/index.d.ts} +0 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { PACKAGE_VERSION, init_package_version } from "../../../../package-version.js";
|
|
2
|
+
//#region src/cli/commands/doctor/checks/version-check.ts
|
|
3
|
+
init_package_version();
|
|
4
|
+
const REGISTRY_URL = "https://registry.npmjs.org/@xopcai/xopc/latest";
|
|
5
|
+
const TIMEOUT_MS = 5e3;
|
|
6
|
+
/** Simple semver: 1 if a > b, -1 if a < b, 0 if equal. */
|
|
7
|
+
function compareSemver(a, b) {
|
|
8
|
+
const pa = a.split(".").map((x) => parseInt(x, 10) || 0);
|
|
9
|
+
const pb = b.split(".").map((x) => parseInt(x, 10) || 0);
|
|
10
|
+
const n = Math.max(pa.length, pb.length);
|
|
11
|
+
for (let i = 0; i < n; i++) {
|
|
12
|
+
const da = pa[i] ?? 0;
|
|
13
|
+
const db = pb[i] ?? 0;
|
|
14
|
+
if (da > db) return 1;
|
|
15
|
+
if (da < db) return -1;
|
|
16
|
+
}
|
|
17
|
+
return 0;
|
|
18
|
+
}
|
|
19
|
+
async function fetchLatestVersion() {
|
|
20
|
+
const controller = new AbortController();
|
|
21
|
+
const t = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
22
|
+
try {
|
|
23
|
+
const res = await fetch(REGISTRY_URL, {
|
|
24
|
+
signal: controller.signal,
|
|
25
|
+
headers: { accept: "application/json" }
|
|
26
|
+
});
|
|
27
|
+
if (!res.ok) return null;
|
|
28
|
+
const data = await res.json();
|
|
29
|
+
return typeof data.version === "string" ? data.version : null;
|
|
30
|
+
} catch {
|
|
31
|
+
return null;
|
|
32
|
+
} finally {
|
|
33
|
+
clearTimeout(t);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function checkVersionUpdate(_ctx) {
|
|
37
|
+
const local = PACKAGE_VERSION.trim() || "0.0.0";
|
|
38
|
+
const latest = await fetchLatestVersion();
|
|
39
|
+
if (!latest) return {
|
|
40
|
+
id: "version-check",
|
|
41
|
+
label: "Version",
|
|
42
|
+
status: "skip",
|
|
43
|
+
message: "Could not query npm for the latest version (offline or registry error).",
|
|
44
|
+
hints: []
|
|
45
|
+
};
|
|
46
|
+
if (compareSemver(latest, local) > 0) return {
|
|
47
|
+
id: "version-check",
|
|
48
|
+
label: "Version",
|
|
49
|
+
status: "warn",
|
|
50
|
+
message: `Running v${local}; npm latest is v${latest}.`,
|
|
51
|
+
hints: ["Upgrade: pnpm add -g @xopcai/xopc@latest", "Or: npm i -g @xopcai/xopc@latest"]
|
|
52
|
+
};
|
|
53
|
+
if (compareSemver(local, latest) > 0) return {
|
|
54
|
+
id: "version-check",
|
|
55
|
+
label: "Version",
|
|
56
|
+
status: "pass",
|
|
57
|
+
message: `Running v${local} (ahead of npm registry v${latest}; local/dev build is OK).`,
|
|
58
|
+
hints: []
|
|
59
|
+
};
|
|
60
|
+
return {
|
|
61
|
+
id: "version-check",
|
|
62
|
+
label: "Version",
|
|
63
|
+
status: "pass",
|
|
64
|
+
message: `Running v${local} (matches npm latest).`,
|
|
65
|
+
hints: []
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//#endregion
|
|
69
|
+
export { checkVersionUpdate };
|
|
70
|
+
|
|
71
|
+
//# sourceMappingURL=version-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-check.js","names":[],"sources":["../../../../../../src/cli/commands/doctor/checks/version-check.ts"],"sourcesContent":["import { PACKAGE_VERSION } from '../../../../package-version.js';\nimport type { CheckResult, DoctorContext } from '../types.js';\n\nconst REGISTRY_URL = 'https://registry.npmjs.org/@xopcai/xopc/latest';\nconst TIMEOUT_MS = 5000;\n\n/** Simple semver: 1 if a > b, -1 if a < b, 0 if equal. */\nfunction compareSemver(a: string, b: string): number {\n const pa = a.split('.').map((x) => parseInt(x, 10) || 0);\n const pb = b.split('.').map((x) => parseInt(x, 10) || 0);\n const n = Math.max(pa.length, pb.length);\n for (let i = 0; i < n; i++) {\n const da = pa[i] ?? 0;\n const db = pb[i] ?? 0;\n if (da > db) return 1;\n if (da < db) return -1;\n }\n return 0;\n}\n\nasync function fetchLatestVersion(): Promise<string | null> {\n const controller = new AbortController();\n const t = setTimeout(() => controller.abort(), TIMEOUT_MS);\n try {\n const res = await fetch(REGISTRY_URL, {\n signal: controller.signal,\n headers: { accept: 'application/json' },\n });\n if (!res.ok) return null;\n const data = (await res.json()) as { version?: string };\n return typeof data.version === 'string' ? data.version : null;\n } catch {\n return null;\n } finally {\n clearTimeout(t);\n }\n}\n\nexport async function checkVersionUpdate(_ctx: DoctorContext): Promise<CheckResult> {\n const local = PACKAGE_VERSION.trim() || '0.0.0';\n const latest = await fetchLatestVersion();\n if (!latest) {\n return {\n id: 'version-check',\n label: 'Version',\n status: 'skip',\n message: 'Could not query npm for the latest version (offline or registry error).',\n hints: [],\n };\n }\n\n if (compareSemver(latest, local) > 0) {\n return {\n id: 'version-check',\n label: 'Version',\n status: 'warn',\n message: `Running v${local}; npm latest is v${latest}.`,\n hints: ['Upgrade: pnpm add -g @xopcai/xopc@latest', 'Or: npm i -g @xopcai/xopc@latest'],\n };\n }\n\n if (compareSemver(local, latest) > 0) {\n return {\n id: 'version-check',\n label: 'Version',\n status: 'pass',\n message: `Running v${local} (ahead of npm registry v${latest}; local/dev build is OK).`,\n hints: [],\n };\n }\n\n return {\n id: 'version-check',\n label: 'Version',\n status: 'pass',\n message: `Running v${local} (matches npm latest).`,\n hints: [],\n };\n}\n"],"mappings":";;sBAAiE;AAGjE,MAAM,eAAe;AACrB,MAAM,aAAa;;AAGnB,SAAS,cAAc,GAAW,GAAmB;CACnD,MAAM,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,MAAM,SAAS,GAAG,GAAG,IAAI,EAAE;CACxD,MAAM,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,MAAM,SAAS,GAAG,GAAG,IAAI,EAAE;CACxD,MAAM,IAAI,KAAK,IAAI,GAAG,QAAQ,GAAG,OAAO;AACxC,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC1B,MAAM,KAAK,GAAG,MAAM;EACpB,MAAM,KAAK,GAAG,MAAM;AACpB,MAAI,KAAK,GAAI,QAAO;AACpB,MAAI,KAAK,GAAI,QAAO;;AAEtB,QAAO;;AAGT,eAAe,qBAA6C;CAC1D,MAAM,aAAa,IAAI,iBAAiB;CACxC,MAAM,IAAI,iBAAiB,WAAW,OAAO,EAAE,WAAW;AAC1D,KAAI;EACF,MAAM,MAAM,MAAM,MAAM,cAAc;GACpC,QAAQ,WAAW;GACnB,SAAS,EAAE,QAAQ,oBAAoB;GACxC,CAAC;AACF,MAAI,CAAC,IAAI,GAAI,QAAO;EACpB,MAAM,OAAQ,MAAM,IAAI,MAAM;AAC9B,SAAO,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;SACnD;AACN,SAAO;WACC;AACR,eAAa,EAAE;;;AAInB,eAAsB,mBAAmB,MAA2C;CAClF,MAAM,QAAQ,gBAAgB,MAAM,IAAI;CACxC,MAAM,SAAS,MAAM,oBAAoB;AACzC,KAAI,CAAC,OACH,QAAO;EACL,IAAI;EACJ,OAAO;EACP,QAAQ;EACR,SAAS;EACT,OAAO,EAAE;EACV;AAGH,KAAI,cAAc,QAAQ,MAAM,GAAG,EACjC,QAAO;EACL,IAAI;EACJ,OAAO;EACP,QAAQ;EACR,SAAS,YAAY,MAAM,mBAAmB,OAAO;EACrD,OAAO,CAAC,4CAA4C,mCAAmC;EACxF;AAGH,KAAI,cAAc,OAAO,OAAO,GAAG,EACjC,QAAO;EACL,IAAI;EACJ,OAAO;EACP,QAAQ;EACR,SAAS,YAAY,MAAM,2BAA2B,OAAO;EAC7D,OAAO,EAAE;EACV;AAGH,QAAO;EACL,IAAI;EACJ,OAAO;EACP,QAAQ;EACR,SAAS,YAAY,MAAM;EAC3B,OAAO,EAAE;EACV"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { init_agent_scope, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../../../../agent/agent-scope.js";
|
|
2
|
+
import { WORKSPACE_FILES, init_paths } from "../../../../config/paths.js";
|
|
3
|
+
import { init_loader, loadConfig } from "../../../../config/loader.js";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { existsSync } from "node:fs";
|
|
6
|
+
//#region src/cli/commands/doctor/checks/workspace-status.ts
|
|
7
|
+
init_agent_scope();
|
|
8
|
+
init_loader();
|
|
9
|
+
init_paths();
|
|
10
|
+
async function checkWorkspaceStatus(ctx) {
|
|
11
|
+
if (!existsSync(ctx.configPath)) return {
|
|
12
|
+
id: "workspace-status",
|
|
13
|
+
label: "Workspace",
|
|
14
|
+
status: "skip",
|
|
15
|
+
message: "No config file; skipped.",
|
|
16
|
+
hints: []
|
|
17
|
+
};
|
|
18
|
+
let config;
|
|
19
|
+
try {
|
|
20
|
+
config = loadConfig(ctx.configPath);
|
|
21
|
+
} catch {
|
|
22
|
+
return {
|
|
23
|
+
id: "workspace-status",
|
|
24
|
+
label: "Workspace",
|
|
25
|
+
status: "skip",
|
|
26
|
+
message: "Config could not be loaded; skipped.",
|
|
27
|
+
hints: []
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const agentId = resolveDefaultAgentId(config);
|
|
31
|
+
const root = resolveAgentWorkspaceDir(config, agentId);
|
|
32
|
+
const hints = [];
|
|
33
|
+
if (!existsSync(root)) return {
|
|
34
|
+
id: "workspace-status",
|
|
35
|
+
label: "Workspace",
|
|
36
|
+
status: "warn",
|
|
37
|
+
message: "Agent workspace directory is missing.",
|
|
38
|
+
hints: [root, "Run: xopc onboard"]
|
|
39
|
+
};
|
|
40
|
+
const soul = join(root, WORKSPACE_FILES.SOUL);
|
|
41
|
+
const identity = join(root, WORKSPACE_FILES.IDENTITY);
|
|
42
|
+
const missing = [];
|
|
43
|
+
if (!existsSync(soul)) missing.push(WORKSPACE_FILES.SOUL);
|
|
44
|
+
if (!existsSync(identity)) missing.push(WORKSPACE_FILES.IDENTITY);
|
|
45
|
+
if (missing.length > 0) return {
|
|
46
|
+
id: "workspace-status",
|
|
47
|
+
label: "Workspace",
|
|
48
|
+
status: "warn",
|
|
49
|
+
message: `Essential workspace files missing: ${missing.join(", ")}.`,
|
|
50
|
+
hints: [root, "Run: xopc onboard"]
|
|
51
|
+
};
|
|
52
|
+
if (!existsSync(join(root, WORKSPACE_FILES.USER))) hints.push(`${WORKSPACE_FILES.USER} is optional; add a user profile for better context.`);
|
|
53
|
+
if (!existsSync(join(root, WORKSPACE_FILES.TOOLS))) hints.push(`${WORKSPACE_FILES.TOOLS} is optional; add tool notes if you use many tools.`);
|
|
54
|
+
if (!existsSync(join(root, ".git"))) hints.push("No .git in workspace; version control is recommended for backup and history.");
|
|
55
|
+
if (hints.length > 0) return {
|
|
56
|
+
id: "workspace-status",
|
|
57
|
+
label: "Workspace",
|
|
58
|
+
status: "pass",
|
|
59
|
+
message: "Essential workspace files are present.",
|
|
60
|
+
hints
|
|
61
|
+
};
|
|
62
|
+
return {
|
|
63
|
+
id: "workspace-status",
|
|
64
|
+
label: "Workspace",
|
|
65
|
+
status: "pass",
|
|
66
|
+
message: "Workspace directory and essential files look good.",
|
|
67
|
+
hints: [root]
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
//#endregion
|
|
71
|
+
export { checkWorkspaceStatus };
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=workspace-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-status.js","names":[],"sources":["../../../../../../src/cli/commands/doctor/checks/workspace-status.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\n\nimport { resolveDefaultAgentId, resolveAgentWorkspaceDir } from '../../../../agent/agent-scope.js';\nimport { loadConfig } from '../../../../config/loader.js';\nimport { WORKSPACE_FILES } from '../../../../config/paths.js';\nimport type { CheckResult, DoctorContext } from '../types.js';\n\nexport async function checkWorkspaceStatus(ctx: DoctorContext): Promise<CheckResult> {\n if (!existsSync(ctx.configPath)) {\n return {\n id: 'workspace-status',\n label: 'Workspace',\n status: 'skip',\n message: 'No config file; skipped.',\n hints: [],\n };\n }\n\n let config;\n try {\n config = loadConfig(ctx.configPath);\n } catch {\n return {\n id: 'workspace-status',\n label: 'Workspace',\n status: 'skip',\n message: 'Config could not be loaded; skipped.',\n hints: [],\n };\n }\n\n const agentId = resolveDefaultAgentId(config);\n const root = resolveAgentWorkspaceDir(config, agentId);\n const hints: string[] = [];\n\n if (!existsSync(root)) {\n return {\n id: 'workspace-status',\n label: 'Workspace',\n status: 'warn',\n message: 'Agent workspace directory is missing.',\n hints: [root, 'Run: xopc onboard'],\n };\n }\n\n const soul = join(root, WORKSPACE_FILES.SOUL);\n const identity = join(root, WORKSPACE_FILES.IDENTITY);\n const missing: string[] = [];\n if (!existsSync(soul)) missing.push(WORKSPACE_FILES.SOUL);\n if (!existsSync(identity)) missing.push(WORKSPACE_FILES.IDENTITY);\n\n if (missing.length > 0) {\n return {\n id: 'workspace-status',\n label: 'Workspace',\n status: 'warn',\n message: `Essential workspace files missing: ${missing.join(', ')}.`,\n hints: [root, 'Run: xopc onboard'],\n };\n }\n\n if (!existsSync(join(root, WORKSPACE_FILES.USER))) {\n hints.push(`${WORKSPACE_FILES.USER} is optional; add a user profile for better context.`);\n }\n if (!existsSync(join(root, WORKSPACE_FILES.TOOLS))) {\n hints.push(`${WORKSPACE_FILES.TOOLS} is optional; add tool notes if you use many tools.`);\n }\n\n if (!existsSync(join(root, '.git'))) {\n hints.push('No .git in workspace; version control is recommended for backup and history.');\n }\n\n if (hints.length > 0) {\n return {\n id: 'workspace-status',\n label: 'Workspace',\n status: 'pass',\n message: 'Essential workspace files are present.',\n hints,\n };\n }\n\n return {\n id: 'workspace-status',\n label: 'Workspace',\n status: 'pass',\n message: 'Workspace directory and essential files look good.',\n hints: [root],\n };\n}\n"],"mappings":";;;;;;kBAGmG;aACzC;YACI;AAG9D,eAAsB,qBAAqB,KAA0C;AACnF,KAAI,CAAC,WAAW,IAAI,WAAW,CAC7B,QAAO;EACL,IAAI;EACJ,OAAO;EACP,QAAQ;EACR,SAAS;EACT,OAAO,EAAE;EACV;CAGH,IAAI;AACJ,KAAI;AACF,WAAS,WAAW,IAAI,WAAW;SAC7B;AACN,SAAO;GACL,IAAI;GACJ,OAAO;GACP,QAAQ;GACR,SAAS;GACT,OAAO,EAAE;GACV;;CAGH,MAAM,UAAU,sBAAsB,OAAO;CAC7C,MAAM,OAAO,yBAAyB,QAAQ,QAAQ;CACtD,MAAM,QAAkB,EAAE;AAE1B,KAAI,CAAC,WAAW,KAAK,CACnB,QAAO;EACL,IAAI;EACJ,OAAO;EACP,QAAQ;EACR,SAAS;EACT,OAAO,CAAC,MAAM,oBAAoB;EACnC;CAGH,MAAM,OAAO,KAAK,MAAM,gBAAgB,KAAK;CAC7C,MAAM,WAAW,KAAK,MAAM,gBAAgB,SAAS;CACrD,MAAM,UAAoB,EAAE;AAC5B,KAAI,CAAC,WAAW,KAAK,CAAE,SAAQ,KAAK,gBAAgB,KAAK;AACzD,KAAI,CAAC,WAAW,SAAS,CAAE,SAAQ,KAAK,gBAAgB,SAAS;AAEjE,KAAI,QAAQ,SAAS,EACnB,QAAO;EACL,IAAI;EACJ,OAAO;EACP,QAAQ;EACR,SAAS,sCAAsC,QAAQ,KAAK,KAAK,CAAC;EAClE,OAAO,CAAC,MAAM,oBAAoB;EACnC;AAGH,KAAI,CAAC,WAAW,KAAK,MAAM,gBAAgB,KAAK,CAAC,CAC/C,OAAM,KAAK,GAAG,gBAAgB,KAAK,sDAAsD;AAE3F,KAAI,CAAC,WAAW,KAAK,MAAM,gBAAgB,MAAM,CAAC,CAChD,OAAM,KAAK,GAAG,gBAAgB,MAAM,qDAAqD;AAG3F,KAAI,CAAC,WAAW,KAAK,MAAM,OAAO,CAAC,CACjC,OAAM,KAAK,+EAA+E;AAG5F,KAAI,MAAM,SAAS,EACjB,QAAO;EACL,IAAI;EACJ,OAAO;EACP,QAAQ;EACR,SAAS;EACT;EACD;AAGH,QAAO;EACL,IAAI;EACJ,OAAO;EACP,QAAQ;EACR,SAAS;EACT,OAAO,CAAC,KAAK;EACd"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CheckResult, DoctorContext } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Headless data collection — used by both CLI and gateway API.
|
|
4
|
+
*/
|
|
5
|
+
export declare function collectDoctorResults(ctx: DoctorContext): Promise<CheckResult[]>;
|
|
6
|
+
/**
|
|
7
|
+
* CLI entry point — collect and print.
|
|
8
|
+
*/
|
|
9
|
+
export declare function runDoctor(ctx: DoctorContext): Promise<CheckResult[]>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { printJsonResults, printResults } from "./format.js";
|
|
2
|
+
import { checkNodeVersion } from "./checks/node-version.js";
|
|
3
|
+
import { checkConfigHealth } from "./checks/config-health.js";
|
|
4
|
+
import { checkStateIntegrity } from "./checks/state-integrity.js";
|
|
5
|
+
import { checkProviderAuth } from "./checks/provider-auth.js";
|
|
6
|
+
import { checkChannelConfig } from "./checks/channel-config.js";
|
|
7
|
+
import { checkGatewayHealth } from "./checks/gateway-health.js";
|
|
8
|
+
import { checkSessionIntegrity } from "./checks/session-integrity.js";
|
|
9
|
+
import { checkGatewayService } from "./checks/gateway-service.js";
|
|
10
|
+
import { checkSecurityAudit } from "./checks/security-audit.js";
|
|
11
|
+
import { checkWorkspaceStatus } from "./checks/workspace-status.js";
|
|
12
|
+
import { checkCronHealth } from "./checks/cron-health.js";
|
|
13
|
+
import { checkVersionUpdate } from "./checks/version-check.js";
|
|
14
|
+
import { checkChannelPlugins } from "./checks/channel-plugins.js";
|
|
15
|
+
//#region src/cli/commands/doctor/flow.ts
|
|
16
|
+
const DOCTOR_CHECKS = [
|
|
17
|
+
checkVersionUpdate,
|
|
18
|
+
checkNodeVersion,
|
|
19
|
+
checkConfigHealth,
|
|
20
|
+
checkStateIntegrity,
|
|
21
|
+
checkProviderAuth,
|
|
22
|
+
checkChannelConfig,
|
|
23
|
+
checkSecurityAudit,
|
|
24
|
+
checkWorkspaceStatus,
|
|
25
|
+
checkGatewayService,
|
|
26
|
+
checkGatewayHealth,
|
|
27
|
+
checkCronHealth,
|
|
28
|
+
checkSessionIntegrity
|
|
29
|
+
];
|
|
30
|
+
/**
|
|
31
|
+
* Headless data collection — used by both CLI and gateway API.
|
|
32
|
+
*/
|
|
33
|
+
async function collectDoctorResults(ctx) {
|
|
34
|
+
const results = [];
|
|
35
|
+
for (const check of DOCTOR_CHECKS) results.push(await check(ctx));
|
|
36
|
+
results.push(...await checkChannelPlugins(ctx));
|
|
37
|
+
return results;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* CLI entry point — collect and print.
|
|
41
|
+
*/
|
|
42
|
+
async function runDoctor(ctx) {
|
|
43
|
+
const results = await collectDoctorResults(ctx);
|
|
44
|
+
if (ctx.options.json) printJsonResults(results);
|
|
45
|
+
else printResults(results);
|
|
46
|
+
return results;
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { collectDoctorResults, runDoctor };
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow.js","names":[],"sources":["../../../../../src/cli/commands/doctor/flow.ts"],"sourcesContent":["import { printJsonResults, printResults } from './format.js';\nimport type { CheckResult, DoctorCheck, DoctorContext } from './types.js';\nimport { checkNodeVersion } from './checks/node-version.js';\nimport { checkConfigHealth } from './checks/config-health.js';\nimport { checkStateIntegrity } from './checks/state-integrity.js';\nimport { checkProviderAuth } from './checks/provider-auth.js';\nimport { checkChannelConfig } from './checks/channel-config.js';\nimport { checkGatewayHealth } from './checks/gateway-health.js';\nimport { checkSessionIntegrity } from './checks/session-integrity.js';\nimport { checkGatewayService } from './checks/gateway-service.js';\nimport { checkSecurityAudit } from './checks/security-audit.js';\nimport { checkWorkspaceStatus } from './checks/workspace-status.js';\nimport { checkCronHealth } from './checks/cron-health.js';\nimport { checkVersionUpdate } from './checks/version-check.js';\nimport { checkChannelPlugins } from './checks/channel-plugins.js';\n\nconst DOCTOR_CHECKS: DoctorCheck[] = [\n checkVersionUpdate,\n checkNodeVersion,\n checkConfigHealth,\n checkStateIntegrity,\n checkProviderAuth,\n checkChannelConfig,\n checkSecurityAudit,\n checkWorkspaceStatus,\n checkGatewayService,\n checkGatewayHealth,\n checkCronHealth,\n checkSessionIntegrity,\n];\n\n/**\n * Headless data collection — used by both CLI and gateway API.\n */\nexport async function collectDoctorResults(ctx: DoctorContext): Promise<CheckResult[]> {\n const results: CheckResult[] = [];\n\n for (const check of DOCTOR_CHECKS) {\n results.push(await check(ctx));\n }\n\n results.push(...(await checkChannelPlugins(ctx)));\n\n return results;\n}\n\n/**\n * CLI entry point — collect and print.\n */\nexport async function runDoctor(ctx: DoctorContext): Promise<CheckResult[]> {\n const results = await collectDoctorResults(ctx);\n\n if (ctx.options.json) {\n printJsonResults(results);\n } else {\n printResults(results);\n }\n\n return results;\n}\n"],"mappings":";;;;;;;;;;;;;;;AAgBA,MAAM,gBAA+B;CACnC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;AAKD,eAAsB,qBAAqB,KAA4C;CACrF,MAAM,UAAyB,EAAE;AAEjC,MAAK,MAAM,SAAS,cAClB,SAAQ,KAAK,MAAM,MAAM,IAAI,CAAC;AAGhC,SAAQ,KAAK,GAAI,MAAM,oBAAoB,IAAI,CAAE;AAEjD,QAAO;;;;;AAMT,eAAsB,UAAU,KAA4C;CAC1E,MAAM,UAAU,MAAM,qBAAqB,IAAI;AAE/C,KAAI,IAAI,QAAQ,KACd,kBAAiB,QAAQ;KAEzB,cAAa,QAAQ;AAGvB,QAAO"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CheckResult } from './types.js';
|
|
2
|
+
export declare function formatCheckLine(result: CheckResult): string;
|
|
3
|
+
export declare function formatHints(hints: string[]): string[];
|
|
4
|
+
export declare function printSummary(results: CheckResult[]): void;
|
|
5
|
+
export declare function printResults(results: CheckResult[]): void;
|
|
6
|
+
export declare function printJsonResults(results: CheckResult[]): void;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { colors } from "../../utils/colors.js";
|
|
2
|
+
//#region src/cli/commands/doctor/format.ts
|
|
3
|
+
const STATUS_ICONS = {
|
|
4
|
+
pass: "✓",
|
|
5
|
+
warn: "⚠",
|
|
6
|
+
fail: "✗",
|
|
7
|
+
skip: "–"
|
|
8
|
+
};
|
|
9
|
+
function statusColor(status, text) {
|
|
10
|
+
switch (status) {
|
|
11
|
+
case "pass": return colors.green(text);
|
|
12
|
+
case "warn": return colors.yellow(text);
|
|
13
|
+
case "fail": return colors.red(text);
|
|
14
|
+
default: return colors.gray(text);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function formatCheckLine(result) {
|
|
18
|
+
const icon = STATUS_ICONS[result.status];
|
|
19
|
+
const fixed = result.fixed ? " " + colors.cyan("[fixed]") : "";
|
|
20
|
+
return ` ${statusColor(result.status, icon)} ${result.label}: ${result.message}${fixed}`;
|
|
21
|
+
}
|
|
22
|
+
function formatHints(hints) {
|
|
23
|
+
return hints.map((h) => ` ${colors.gray("→")} ${h}`);
|
|
24
|
+
}
|
|
25
|
+
function printSummary(results) {
|
|
26
|
+
const passed = results.filter((r) => r.status === "pass").length;
|
|
27
|
+
const warnings = results.filter((r) => r.status === "warn").length;
|
|
28
|
+
const failed = results.filter((r) => r.status === "fail").length;
|
|
29
|
+
const skipped = results.filter((r) => r.status === "skip").length;
|
|
30
|
+
console.log("");
|
|
31
|
+
console.log(colors.bold(`${passed} passed, ${warnings} warnings, ${failed} failed` + (skipped ? `, ${skipped} skipped` : "")));
|
|
32
|
+
}
|
|
33
|
+
function printResults(results) {
|
|
34
|
+
console.log("");
|
|
35
|
+
console.log(colors.bold("xopc doctor"));
|
|
36
|
+
console.log("");
|
|
37
|
+
for (const r of results) {
|
|
38
|
+
console.log(formatCheckLine(r));
|
|
39
|
+
for (const line of formatHints(r.hints)) console.log(line);
|
|
40
|
+
}
|
|
41
|
+
printSummary(results);
|
|
42
|
+
console.log("");
|
|
43
|
+
}
|
|
44
|
+
function printJsonResults(results) {
|
|
45
|
+
const payload = {
|
|
46
|
+
ok: results.every((r) => r.status !== "fail"),
|
|
47
|
+
checks: results.map((r) => ({
|
|
48
|
+
id: r.id,
|
|
49
|
+
label: r.label,
|
|
50
|
+
status: r.status,
|
|
51
|
+
message: r.message,
|
|
52
|
+
hints: r.hints,
|
|
53
|
+
fixed: r.fixed ?? false
|
|
54
|
+
}))
|
|
55
|
+
};
|
|
56
|
+
console.log(JSON.stringify(payload, null, 2));
|
|
57
|
+
}
|
|
58
|
+
//#endregion
|
|
59
|
+
export { formatCheckLine, formatHints, printJsonResults, printResults, printSummary };
|
|
60
|
+
|
|
61
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","names":[],"sources":["../../../../../src/cli/commands/doctor/format.ts"],"sourcesContent":["import { colors } from '../../utils/colors.js';\nimport type { CheckResult, CheckStatus } from './types.js';\n\nconst STATUS_ICONS: Record<CheckStatus, string> = {\n pass: '✓',\n warn: '⚠',\n fail: '✗',\n skip: '–',\n};\n\nfunction statusColor(status: CheckStatus, text: string): string {\n switch (status) {\n case 'pass':\n return colors.green(text);\n case 'warn':\n return colors.yellow(text);\n case 'fail':\n return colors.red(text);\n default:\n return colors.gray(text);\n }\n}\n\nexport function formatCheckLine(result: CheckResult): string {\n const icon = STATUS_ICONS[result.status];\n const fixed = result.fixed ? ' ' + colors.cyan('[fixed]') : '';\n return ` ${statusColor(result.status, icon)} ${result.label}: ${result.message}${fixed}`;\n}\n\nexport function formatHints(hints: string[]): string[] {\n return hints.map((h) => ` ${colors.gray('→')} ${h}`);\n}\n\nexport function printSummary(results: CheckResult[]): void {\n const passed = results.filter((r) => r.status === 'pass').length;\n const warnings = results.filter((r) => r.status === 'warn').length;\n const failed = results.filter((r) => r.status === 'fail').length;\n const skipped = results.filter((r) => r.status === 'skip').length;\n console.log('');\n console.log(\n colors.bold(\n `${passed} passed, ${warnings} warnings, ${failed} failed` +\n (skipped ? `, ${skipped} skipped` : ''),\n ),\n );\n}\n\nexport function printResults(results: CheckResult[]): void {\n console.log('');\n console.log(colors.bold('xopc doctor'));\n console.log('');\n for (const r of results) {\n console.log(formatCheckLine(r));\n for (const line of formatHints(r.hints)) {\n console.log(line);\n }\n }\n printSummary(results);\n console.log('');\n}\n\nexport function printJsonResults(results: CheckResult[]): void {\n const ok = results.every((r) => r.status !== 'fail');\n const payload = {\n ok,\n checks: results.map((r) => ({\n id: r.id,\n label: r.label,\n status: r.status,\n message: r.message,\n hints: r.hints,\n fixed: r.fixed ?? false,\n })),\n };\n console.log(JSON.stringify(payload, null, 2));\n}\n"],"mappings":";;AAGA,MAAM,eAA4C;CAChD,MAAM;CACN,MAAM;CACN,MAAM;CACN,MAAM;CACP;AAED,SAAS,YAAY,QAAqB,MAAsB;AAC9D,SAAQ,QAAR;EACE,KAAK,OACH,QAAO,OAAO,MAAM,KAAK;EAC3B,KAAK,OACH,QAAO,OAAO,OAAO,KAAK;EAC5B,KAAK,OACH,QAAO,OAAO,IAAI,KAAK;EACzB,QACE,QAAO,OAAO,KAAK,KAAK;;;AAI9B,SAAgB,gBAAgB,QAA6B;CAC3D,MAAM,OAAO,aAAa,OAAO;CACjC,MAAM,QAAQ,OAAO,QAAQ,MAAM,OAAO,KAAK,UAAU,GAAG;AAC5D,QAAO,KAAK,YAAY,OAAO,QAAQ,KAAK,CAAC,GAAG,OAAO,MAAM,IAAI,OAAO,UAAU;;AAGpF,SAAgB,YAAY,OAA2B;AACrD,QAAO,MAAM,KAAK,MAAM,OAAO,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI;;AAGzD,SAAgB,aAAa,SAA8B;CACzD,MAAM,SAAS,QAAQ,QAAQ,MAAM,EAAE,WAAW,OAAO,CAAC;CAC1D,MAAM,WAAW,QAAQ,QAAQ,MAAM,EAAE,WAAW,OAAO,CAAC;CAC5D,MAAM,SAAS,QAAQ,QAAQ,MAAM,EAAE,WAAW,OAAO,CAAC;CAC1D,MAAM,UAAU,QAAQ,QAAQ,MAAM,EAAE,WAAW,OAAO,CAAC;AAC3D,SAAQ,IAAI,GAAG;AACf,SAAQ,IACN,OAAO,KACL,GAAG,OAAO,WAAW,SAAS,aAAa,OAAO,YAC/C,UAAU,KAAK,QAAQ,YAAY,IACvC,CACF;;AAGH,SAAgB,aAAa,SAA8B;AACzD,SAAQ,IAAI,GAAG;AACf,SAAQ,IAAI,OAAO,KAAK,cAAc,CAAC;AACvC,SAAQ,IAAI,GAAG;AACf,MAAK,MAAM,KAAK,SAAS;AACvB,UAAQ,IAAI,gBAAgB,EAAE,CAAC;AAC/B,OAAK,MAAM,QAAQ,YAAY,EAAE,MAAM,CACrC,SAAQ,IAAI,KAAK;;AAGrB,cAAa,QAAQ;AACrB,SAAQ,IAAI,GAAG;;AAGjB,SAAgB,iBAAiB,SAA8B;CAE7D,MAAM,UAAU;EACd,IAFS,QAAQ,OAAO,MAAM,EAAE,WAAW,OAAO;EAGlD,QAAQ,QAAQ,KAAK,OAAO;GAC1B,IAAI,EAAE;GACN,OAAO,EAAE;GACT,QAAQ,EAAE;GACV,SAAS,EAAE;GACX,OAAO,EAAE;GACT,OAAO,EAAE,SAAS;GACnB,EAAE;EACJ;AACD,SAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { init_paths_state, resolveStateDir } from "../../../config/paths-state.js";
|
|
2
|
+
import { formatExamples, register } from "../../registry.js";
|
|
3
|
+
import { runDoctor } from "./flow.js";
|
|
4
|
+
import { Command } from "commander";
|
|
5
|
+
//#region src/cli/commands/doctor/index.ts
|
|
6
|
+
init_paths_state();
|
|
7
|
+
function createDoctorCommand(ctx) {
|
|
8
|
+
return new Command("doctor").description("Check xopc installation health and diagnose common issues").option("--fix", "Automatically apply safe fixes", false).option("--json", "Output results as JSON", false).option("--deep", "Run deeper / slower checks (e.g. session scan)", false).addHelpText("after", formatExamples([
|
|
9
|
+
"xopc doctor",
|
|
10
|
+
"xopc doctor --json",
|
|
11
|
+
"xopc doctor --deep",
|
|
12
|
+
"xopc doctor --fix"
|
|
13
|
+
])).action(async (opts) => {
|
|
14
|
+
const configPath = ctx.configPath;
|
|
15
|
+
if ((await runDoctor({
|
|
16
|
+
configPath,
|
|
17
|
+
stateDir: resolveStateDir(),
|
|
18
|
+
options: {
|
|
19
|
+
fix: Boolean(opts.fix),
|
|
20
|
+
json: Boolean(opts.json),
|
|
21
|
+
deep: Boolean(opts.deep)
|
|
22
|
+
}
|
|
23
|
+
})).some((r) => r.status === "fail")) process.exitCode = 1;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
register({
|
|
27
|
+
id: "doctor",
|
|
28
|
+
name: "doctor",
|
|
29
|
+
description: "Check xopc installation health and diagnose common issues",
|
|
30
|
+
factory: createDoctorCommand,
|
|
31
|
+
metadata: {
|
|
32
|
+
category: "maintenance",
|
|
33
|
+
examples: [
|
|
34
|
+
"xopc doctor",
|
|
35
|
+
"xopc doctor --json",
|
|
36
|
+
"xopc doctor --deep",
|
|
37
|
+
"xopc doctor --fix"
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
//#endregion
|
|
42
|
+
export {};
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../src/cli/commands/doctor/index.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { register, formatExamples, type CLIContext } from '../../registry.js';\nimport { resolveStateDir } from '../../../config/paths-state.js';\nimport { runDoctor } from './flow.js';\nimport type { DoctorOptions } from './types.js';\n\nfunction createDoctorCommand(ctx: CLIContext): Command {\n return new Command('doctor')\n .description('Check xopc installation health and diagnose common issues')\n .option('--fix', 'Automatically apply safe fixes', false)\n .option('--json', 'Output results as JSON', false)\n .option('--deep', 'Run deeper / slower checks (e.g. session scan)', false)\n .addHelpText(\n 'after',\n formatExamples(['xopc doctor', 'xopc doctor --json', 'xopc doctor --deep', 'xopc doctor --fix']),\n )\n .action(async (opts: DoctorOptions) => {\n const configPath = ctx.configPath;\n const stateDir = resolveStateDir();\n const results = await runDoctor({\n configPath,\n stateDir,\n options: {\n fix: Boolean(opts.fix),\n json: Boolean(opts.json),\n deep: Boolean(opts.deep),\n },\n });\n const failed = results.some((r) => r.status === 'fail');\n if (failed) {\n process.exitCode = 1;\n }\n });\n}\n\nregister({\n id: 'doctor',\n name: 'doctor',\n description: 'Check xopc installation health and diagnose common issues',\n factory: createDoctorCommand,\n metadata: {\n category: 'maintenance',\n examples: ['xopc doctor', 'xopc doctor --json', 'xopc doctor --deep', 'xopc doctor --fix'],\n },\n});\n"],"mappings":";;;;;kBAEiE;AAIjE,SAAS,oBAAoB,KAA0B;AACrD,QAAO,IAAI,QAAQ,SAAS,CACzB,YAAY,4DAA4D,CACxE,OAAO,SAAS,kCAAkC,MAAM,CACxD,OAAO,UAAU,0BAA0B,MAAM,CACjD,OAAO,UAAU,kDAAkD,MAAM,CACzE,YACC,SACA,eAAe;EAAC;EAAe;EAAsB;EAAsB;EAAoB,CAAC,CACjG,CACA,OAAO,OAAO,SAAwB;EACrC,MAAM,aAAa,IAAI;AAYvB,OAVgB,MAAM,UAAU;GAC9B;GACA,UAHe,iBAAiB;GAIhC,SAAS;IACP,KAAK,QAAQ,KAAK,IAAI;IACtB,MAAM,QAAQ,KAAK,KAAK;IACxB,MAAM,QAAQ,KAAK,KAAK;IACzB;GACF,CAAC,EACqB,MAAM,MAAM,EAAE,WAAW,OAAO,CAErD,SAAQ,WAAW;GAErB;;AAGN,SAAS;CACP,IAAI;CACJ,MAAM;CACN,aAAa;CACb,SAAS;CACT,UAAU;EACR,UAAU;EACV,UAAU;GAAC;GAAe;GAAsB;GAAsB;GAAoB;EAC3F;CACF,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type CheckStatus = 'pass' | 'warn' | 'fail' | 'skip';
|
|
2
|
+
export interface CheckResult {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
status: CheckStatus;
|
|
6
|
+
message: string;
|
|
7
|
+
hints: string[];
|
|
8
|
+
fixed?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface DoctorOptions {
|
|
11
|
+
fix: boolean;
|
|
12
|
+
json: boolean;
|
|
13
|
+
deep: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface DoctorContext {
|
|
16
|
+
configPath: string;
|
|
17
|
+
stateDir: string;
|
|
18
|
+
options: DoctorOptions;
|
|
19
|
+
}
|
|
20
|
+
export type DoctorCheck = (ctx: DoctorContext) => Promise<CheckResult>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { createLogger } from "../../utils/logger/index.js";
|
|
2
|
-
import { init_logger } from "../../utils/logger.js";
|
|
3
1
|
import { resolveStateDir } from "../../config/paths-state.js";
|
|
4
2
|
import { resolveAgentBootstrapDir, resolveAgentWorkspaceDir } from "../../agent/agent-scope.js";
|
|
3
|
+
import { createLogger } from "../../utils/logger/index.js";
|
|
4
|
+
import { init_logger } from "../../utils/logger.js";
|
|
5
5
|
import { WORKSPACE_FILES, init_paths, resolveAgentDir, resolveAgentHomeDir, resolveAgentMetadataPath, resolveBinDir, resolveConfigPath, resolveCredentialsDir, resolveCronDir, resolveExtensionsDir, resolveInboxDir, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogsDir, resolveSessionsDir, resolveSkillsDir, resolveToolsDir, resolveWorkspaceStateDir, resolveWorkspaceStatePath } from "../../config/paths.js";
|
|
6
6
|
import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
|
|
7
7
|
import { join } from "path";
|
package/dist/src/cli/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ import './commands/gateway.js';
|
|
|
7
7
|
import './commands/session.js';
|
|
8
8
|
import './commands/cron.js';
|
|
9
9
|
import './commands/config.js';
|
|
10
|
+
import './commands/doctor/index.js';
|
|
10
11
|
import './commands/image.js';
|
|
11
12
|
import './commands/channels.js';
|
|
12
13
|
import './commands/models.js';
|
|
@@ -14,7 +15,6 @@ import './commands/extension.js';
|
|
|
14
15
|
import './commands/auth.js';
|
|
15
16
|
import './commands/skills.js';
|
|
16
17
|
import './commands/logs.js';
|
|
17
|
-
import './commands/acp.js';
|
|
18
18
|
export declare let parsedOpts: {
|
|
19
19
|
config?: string;
|
|
20
20
|
workspace?: string;
|
package/dist/src/cli/index.js
CHANGED
|
@@ -11,6 +11,7 @@ import "./commands/gateway.js";
|
|
|
11
11
|
import "./commands/session.js";
|
|
12
12
|
import "./commands/cron.js";
|
|
13
13
|
import "./commands/config.js";
|
|
14
|
+
import "./commands/doctor/index.js";
|
|
14
15
|
import "./commands/image.js";
|
|
15
16
|
import "./commands/channels.js";
|
|
16
17
|
import "./commands/models.js";
|
|
@@ -18,7 +19,6 @@ import "./commands/extension.js";
|
|
|
18
19
|
import "./commands/auth.js";
|
|
19
20
|
import "./commands/skills.js";
|
|
20
21
|
import "./commands/logs.js";
|
|
21
|
-
import "./commands/acp.js";
|
|
22
22
|
import { registerAgentsCli } from "./commands/agents.js";
|
|
23
23
|
import { Command } from "commander";
|
|
24
24
|
//#region src/cli/index.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["pkg.version"],"sources":["../../../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from 'commander';\nimport { registry, createDefaultContext, type CLIContext } from './registry.js';\nimport pkg from '../../package.json' with { type: 'json' };\nimport { flushAndClose } from '../utils/logger.js'; // Import flushAndClose for graceful shutdown\nimport { registerExtensionCliCommands } from './bootstrap-extensions.js';\n\n// Import order determines display order in help\nimport './commands/setup.js';\nimport './commands/onboard.js';\nimport './commands/agent.js';\nimport './commands/gateway.js';\nimport './commands/session.js';\nimport './commands/cron.js';\nimport './commands/config.js';\nimport './commands/
|
|
1
|
+
{"version":3,"file":"index.js","names":["pkg.version"],"sources":["../../../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from 'commander';\nimport { registry, createDefaultContext, type CLIContext } from './registry.js';\nimport pkg from '../../package.json' with { type: 'json' };\nimport { flushAndClose } from '../utils/logger.js'; // Import flushAndClose for graceful shutdown\nimport { registerExtensionCliCommands } from './bootstrap-extensions.js';\n\n// Import order determines display order in help\nimport './commands/setup.js';\nimport './commands/onboard.js';\nimport './commands/agent.js';\nimport './commands/gateway.js';\nimport './commands/session.js';\nimport './commands/cron.js';\nimport './commands/config.js';\nimport './commands/doctor/index.js';\nimport './commands/image.js';\nimport './commands/channels.js';\nimport './commands/models.js';\nimport './commands/extension.js';\nimport './commands/auth.js';\nimport './commands/skills.js';\nimport './commands/logs.js';\nimport { registerAgentsCli } from './commands/agents.js';\n\n// Global parsed options - updated before each command\nexport let parsedOpts: { config?: string; workspace?: string; verbose?: boolean } = {};\n\nexport function getContextWithOpts(argv: string[] = process.argv): CLIContext {\n return createDefaultContext(argv, parsedOpts);\n}\n\n// Long-running commands that should not auto-exit\nconst LONG_RUNNING_COMMANDS = new Set(['gateway', 'agent']);\n\nconst program = new Command()\n .name('xopc')\n .description('Ultra-Lightweight Personal AI Assistant')\n .version(pkg.version)\n .option('--verbose', 'Enable verbose logging', false)\n .option('--config <path>', 'Config file path')\n .option('--workspace <path>', 'Workspace directory');\n\n// Hook to capture parsed options before each command runs\nprogram.hook('preAction', (thisCommand) => {\n parsedOpts = thisCommand.opts();\n});\n\n// Hook to ensure process exits after command completion\nprogram.hook('postAction', async (thisCommand) => {\n // Get the actual subcommand being executed (not the root program name)\n const args = thisCommand.args;\n const subCommandName = args.length > 0 ? args[0] : thisCommand.name();\n\n // Skip long-running commands (gateway foreground, agent interactive mode)\n if (LONG_RUNNING_COMMANDS.has(subCommandName)) {\n // For agent command, only skip exit if interactive mode (-i) is used\n if (subCommandName === 'agent') {\n const hasInteractiveFlag = process.argv.includes('-i') || process.argv.includes('--interactive');\n if (!hasInteractiveFlag) {\n // Agent in non-interactive mode should exit normally\n await flushAndClose();\n process.exit(0);\n }\n }\n // Gateway or agent -i: don't exit\n return;\n }\n // For all other commands, flush logs and exit\n await flushAndClose();\n process.exit(0);\n});\n\n// Create initial context (will use env vars and defaults)\nconst ctx = getContextWithOpts(process.argv);\nregistry.install(program, ctx);\nregisterAgentsCli(program);\n\n// Only parse if this is the main module being executed directly\n// Skip parsing when imported as module (e.g., in tests)\nconst isTestEnv = !!process.env.VITEST || !!process.env.TEST || !!process.env.NODE_ENV?.includes('test');\nconst isMainModule = !isTestEnv && import.meta.url.startsWith('file:');\n\nif (isMainModule) {\n // Filter out standalone '--' separator (passed by pnpm run -- <cmd>)\n // npm removes it automatically, pnpm passes it through\n const argv = process.argv.filter((arg, index) => {\n if (arg !== '--') return true;\n // Only filter '--' if it's the separator between script and command\n // (i.e., comes after the script name and before actual args)\n return index < 2; // Keep '--' if it's a script argument (index 0 or 1)\n });\n void registerExtensionCliCommands(program).then(() => {\n program.parse(argv);\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;aAImD;AAsBnD,IAAW,aAAyE,EAAE;AAEtF,SAAgB,mBAAmB,OAAiB,QAAQ,MAAkB;AAC5E,QAAO,qBAAqB,MAAM,WAAW;;AAI/C,MAAM,wBAAwB,IAAI,IAAI,CAAC,WAAW,QAAQ,CAAC;AAE3D,MAAM,UAAU,IAAI,SAAS,CAC1B,KAAK,OAAO,CACZ,YAAY,0CAA0C,CACtD,QAAQA,QAAY,CACpB,OAAO,aAAa,0BAA0B,MAAM,CACpD,OAAO,mBAAmB,mBAAmB,CAC7C,OAAO,sBAAsB,sBAAsB;AAGtD,QAAQ,KAAK,cAAc,gBAAgB;AACzC,cAAa,YAAY,MAAM;EAC/B;AAGF,QAAQ,KAAK,cAAc,OAAO,gBAAgB;CAEhD,MAAM,OAAO,YAAY;CACzB,MAAM,iBAAiB,KAAK,SAAS,IAAI,KAAK,KAAK,YAAY,MAAM;AAGrE,KAAI,sBAAsB,IAAI,eAAe,EAAE;AAE7C,MAAI,mBAAmB;OAEjB,EADuB,QAAQ,KAAK,SAAS,KAAK,IAAI,QAAQ,KAAK,SAAS,gBAAgB,GACvE;AAEvB,UAAM,eAAe;AACrB,YAAQ,KAAK,EAAE;;;AAInB;;AAGF,OAAM,eAAe;AACrB,SAAQ,KAAK,EAAE;EACf;AAGF,MAAM,MAAM,mBAAmB,QAAQ,KAAK;AAC5C,SAAS,QAAQ,SAAS,IAAI;AAC9B,kBAAkB,QAAQ;AAO1B,IAFqB,EADH,CAAC,CAAC,QAAQ,IAAI,UAAU,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAA,cAAuB,SAAS,OAAO,KACrE,OAAO,KAAK,IAAI,WAAW,QAAQ,EAEpD;CAGhB,MAAM,OAAO,QAAQ,KAAK,QAAQ,KAAK,UAAU;AAC/C,MAAI,QAAQ,KAAM,QAAO;AAGzB,SAAO,QAAQ;GACf;AACG,8BAA6B,QAAQ,CAAC,WAAW;AACpD,UAAQ,MAAM,KAAK;GACnB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ConfigSchema, init_schema } from "../../config/schema.js";
|
|
2
2
|
import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
|
-
import { randomBytes } from "node:crypto";
|
|
5
4
|
import { existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
5
|
+
import { randomBytes } from "node:crypto";
|
|
6
6
|
//#region src/cli/utils/init-workspace.ts
|
|
7
7
|
init_schema();
|
|
8
8
|
init_loader();
|
package/dist/src/config/index.js
CHANGED
|
@@ -4,10 +4,10 @@ import { resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
|
|
|
4
4
|
import { resolveAgentBootstrapDir, resolveAgentDir as resolveAgentDir$1, resolveAgentHomeDir as resolveAgentHomeDir$1, resolveAgentWorkspaceDir, resolveSessionsDir as resolveSessionsDir$1 } from "../agent/agent-scope.js";
|
|
5
5
|
import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema } from "../../extensions/telegram/src/config-schema.js";
|
|
6
6
|
import { WeixinAccountConfigSchema, WeixinConfigSchema } from "../../extensions/weixin/src/config-schema.js";
|
|
7
|
-
import {
|
|
7
|
+
import { AgentConfigSchema, AgentDefaultsSchema, AgentModelRefSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, ChannelsConfigSchema, ConfigSchema, CronConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayConfigSchema, HeartbeatConfigSchema, ModelsDevConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, ToolsConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, getAgentDefaultModelRef, getWorkspacePath, init_schema, parseModelRef } from "./schema.js";
|
|
8
|
+
import { extractProfileAgentId, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
|
|
8
9
|
import { FILENAMES, WORKSPACE_FILES, existsSync, init_paths, resolveAgentAuthProfilesPath, resolveAgentCredentialsDir, resolveAgentDir, resolveAgentHomeDir, resolveAgentMetadataPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveCronDir, resolveCronJobsPath, resolveCronLogPath, resolveCronLogsDir, resolveCronRunsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveMemoryDir, resolveMemoryPath, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSessionTranscriptPath, resolveSessionTranscriptPathInDir, resolveSessionsArchiveDir, resolveSessionsDir, resolveSessionsIndexPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
|
|
9
10
|
import { init_loader, loadConfig, registerChannelConfigValidator, saveConfig } from "./loader.js";
|
|
10
|
-
import { extractProfileAgentId, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
|
|
11
11
|
import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
|
|
12
12
|
import { CustomModelSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
|
|
13
13
|
import { formatThinkingLevels, listThinkingLevels, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, thinkLevelToNumber } from "../agent/transcript/thinking-types.js";
|
|
@@ -24,6 +24,6 @@ init_workspace_path();
|
|
|
24
24
|
init_models_json();
|
|
25
25
|
init_resolve_config_value();
|
|
26
26
|
//#endregion
|
|
27
|
-
export {
|
|
27
|
+
export { AgentConfigSchema, AgentDefaultsSchema, AgentModelRefSchema, AgentsConfigSchema, BASE_RELOAD_RULES, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, ChannelsConfigSchema, ConfigHotReloader, ConfigSchema, CronConfigSchema, CustomModelSchema, ENV_VARS, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, FILENAMES, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayConfigSchema, HeartbeatConfigSchema, ModelOverrideSchema, ModelsDevConfigSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProfileManager, ProviderConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, ToolsConfigSchema, VercelGatewayRoutingSchema, WORKSPACE_FILES, WebSearchConfigSchema, WebToolsConfigSchema, WeixinAccountConfigSchema, WeixinConfigSchema, buildReloadPlan, clearConfigValueCache, createProfile, deleteProfile, diffConfigPaths, existsSync, expandWorkspacePathString, extractProfileAgentId, formatThinkingLevels, getAgentDefaultModelRef, getAllowedCommands, getCacheStats, getCurrentProfile, getDefaultModelValues, resolveModelsJsonPath as getModelsJsonPath, getProfileManager, getProfileNameFromDir, getSwitchCommand, getWorkspacePath, listAgentBootstrapDirs, listAgentWorkspaceDirs, listProfiles, listThinkingLevels, loadConfig, loadModelsJson, matchReloadRule, modelsJsonExists, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, normalizeWorkspaceDir, parseModelRef, registerChannelConfigValidator, resolveAgentAuthProfilesPath, resolveAgentBootstrapDir, resolveAgentCredentialsDir, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentMetadataPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveConfigValue, resolveCredentialsDir, resolveCronDir, resolveCronJobsPath, resolveCronLogPath, resolveCronLogsDir, resolveCronRunsDir, resolveDefaultAgentWorkspaceDir, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHeaders, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveMemoryDir, resolveMemoryPath, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveProfileStateDir, resolveSessionTranscriptPath, resolveSessionTranscriptPathInDir, resolveSessionsArchiveDir, resolveSessionsDir, resolveSessionsDir$1 as resolveSessionsDirFromConfig, resolveSessionsIndexPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceRoot, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, saveConfig, saveModelsJson, testApiKeyResolution, thinkLevelToNumber, validateModelsConfig };
|
|
28
28
|
|
|
29
29
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { ConfigSchema, init_schema } from "./schema.js";
|
|
2
3
|
import { createLogger } from "../utils/logger/index.js";
|
|
3
4
|
import { init_logger } from "../utils/logger.js";
|
|
4
|
-
import { ConfigSchema, init_schema } from "./schema.js";
|
|
5
5
|
import { init_paths, resolveConfigPath } from "./paths.js";
|
|
6
6
|
import { dirname } from "path";
|
|
7
7
|
import { existsSync, mkdirSync, promises, readFileSync } from "fs";
|
|
@@ -78,11 +78,11 @@ export declare const CustomModelSchema: z.ZodObject<{
|
|
|
78
78
|
api: z.ZodOptional<z.ZodEnum<{
|
|
79
79
|
"openai-completions": "openai-completions";
|
|
80
80
|
"openai-responses": "openai-responses";
|
|
81
|
-
"azure-openai-responses": "azure-openai-responses";
|
|
82
|
-
"openai-codex-responses": "openai-codex-responses";
|
|
83
81
|
"anthropic-messages": "anthropic-messages";
|
|
84
|
-
"bedrock-converse-stream": "bedrock-converse-stream";
|
|
85
82
|
"google-generative-ai": "google-generative-ai";
|
|
83
|
+
"azure-openai-responses": "azure-openai-responses";
|
|
84
|
+
"bedrock-converse-stream": "bedrock-converse-stream";
|
|
85
|
+
"openai-codex-responses": "openai-codex-responses";
|
|
86
86
|
"google-gemini-cli": "google-gemini-cli";
|
|
87
87
|
"google-vertex": "google-vertex";
|
|
88
88
|
}>>;
|
|
@@ -180,11 +180,11 @@ export declare const ProviderConfigSchema: z.ZodObject<{
|
|
|
180
180
|
api: z.ZodOptional<z.ZodEnum<{
|
|
181
181
|
"openai-completions": "openai-completions";
|
|
182
182
|
"openai-responses": "openai-responses";
|
|
183
|
-
"azure-openai-responses": "azure-openai-responses";
|
|
184
|
-
"openai-codex-responses": "openai-codex-responses";
|
|
185
183
|
"anthropic-messages": "anthropic-messages";
|
|
186
|
-
"bedrock-converse-stream": "bedrock-converse-stream";
|
|
187
184
|
"google-generative-ai": "google-generative-ai";
|
|
185
|
+
"azure-openai-responses": "azure-openai-responses";
|
|
186
|
+
"bedrock-converse-stream": "bedrock-converse-stream";
|
|
187
|
+
"openai-codex-responses": "openai-codex-responses";
|
|
188
188
|
"google-gemini-cli": "google-gemini-cli";
|
|
189
189
|
"google-vertex": "google-vertex";
|
|
190
190
|
}>>;
|
|
@@ -196,11 +196,11 @@ export declare const ProviderConfigSchema: z.ZodObject<{
|
|
|
196
196
|
api: z.ZodOptional<z.ZodEnum<{
|
|
197
197
|
"openai-completions": "openai-completions";
|
|
198
198
|
"openai-responses": "openai-responses";
|
|
199
|
-
"azure-openai-responses": "azure-openai-responses";
|
|
200
|
-
"openai-codex-responses": "openai-codex-responses";
|
|
201
199
|
"anthropic-messages": "anthropic-messages";
|
|
202
|
-
"bedrock-converse-stream": "bedrock-converse-stream";
|
|
203
200
|
"google-generative-ai": "google-generative-ai";
|
|
201
|
+
"azure-openai-responses": "azure-openai-responses";
|
|
202
|
+
"bedrock-converse-stream": "bedrock-converse-stream";
|
|
203
|
+
"openai-codex-responses": "openai-codex-responses";
|
|
204
204
|
"google-gemini-cli": "google-gemini-cli";
|
|
205
205
|
"google-vertex": "google-vertex";
|
|
206
206
|
}>>;
|
|
@@ -300,11 +300,11 @@ export declare const ModelsJsonSchema: z.ZodObject<{
|
|
|
300
300
|
api: z.ZodOptional<z.ZodEnum<{
|
|
301
301
|
"openai-completions": "openai-completions";
|
|
302
302
|
"openai-responses": "openai-responses";
|
|
303
|
-
"azure-openai-responses": "azure-openai-responses";
|
|
304
|
-
"openai-codex-responses": "openai-codex-responses";
|
|
305
303
|
"anthropic-messages": "anthropic-messages";
|
|
306
|
-
"bedrock-converse-stream": "bedrock-converse-stream";
|
|
307
304
|
"google-generative-ai": "google-generative-ai";
|
|
305
|
+
"azure-openai-responses": "azure-openai-responses";
|
|
306
|
+
"bedrock-converse-stream": "bedrock-converse-stream";
|
|
307
|
+
"openai-codex-responses": "openai-codex-responses";
|
|
308
308
|
"google-gemini-cli": "google-gemini-cli";
|
|
309
309
|
"google-vertex": "google-vertex";
|
|
310
310
|
}>>;
|
|
@@ -316,11 +316,11 @@ export declare const ModelsJsonSchema: z.ZodObject<{
|
|
|
316
316
|
api: z.ZodOptional<z.ZodEnum<{
|
|
317
317
|
"openai-completions": "openai-completions";
|
|
318
318
|
"openai-responses": "openai-responses";
|
|
319
|
-
"azure-openai-responses": "azure-openai-responses";
|
|
320
|
-
"openai-codex-responses": "openai-codex-responses";
|
|
321
319
|
"anthropic-messages": "anthropic-messages";
|
|
322
|
-
"bedrock-converse-stream": "bedrock-converse-stream";
|
|
323
320
|
"google-generative-ai": "google-generative-ai";
|
|
321
|
+
"azure-openai-responses": "azure-openai-responses";
|
|
322
|
+
"bedrock-converse-stream": "bedrock-converse-stream";
|
|
323
|
+
"openai-codex-responses": "openai-codex-responses";
|
|
324
324
|
"google-gemini-cli": "google-gemini-cli";
|
|
325
325
|
"google-vertex": "google-vertex";
|
|
326
326
|
}>>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { init_paths, resolveModelsJsonPath } from "./paths.js";
|
|
3
|
+
import { z } from "zod";
|
|
3
4
|
import { dirname } from "path";
|
|
4
5
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
5
|
-
import { z } from "zod";
|
|
6
6
|
//#region src/config/models-json.ts
|
|
7
7
|
/**
|
|
8
8
|
* Models.json configuration types and schema
|