@xopcai/xopc 0.0.82 → 0.0.84
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 +3 -1
- package/README.zh-CN.md +3 -1
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/feishu/src/outbound/media-load.js +2 -3
- package/dist/extensions/feishu/src/outbound/media-load.js.map +1 -1
- package/dist/extensions/feishu/src/schema/config-schema.d.ts +6 -6
- package/dist/extensions/telegram/src/config-schema.d.ts +6 -6
- package/dist/extensions/telegram/src/plugin.d.ts +1 -1
- package/dist/extensions/telegram/src/plugin.js +1 -1
- package/dist/extensions/telegram/src/routing-integration.js +2 -2
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/api/api.js +3 -3
- package/dist/extensions/weixin/src/auth/accounts.js +1 -1
- package/dist/extensions/weixin/src/cdn/upload.js +1 -1
- package/dist/extensions/weixin/src/config-schema.d.ts +3 -3
- package/dist/extensions/weixin/src/media/data-url.js +1 -1
- package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
- package/dist/extensions/weixin/src/messaging/inbound.js +1 -1
- package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
- package/dist/extensions/weixin/src/plugin.js +1 -1
- package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
- package/dist/gateway/static/root/assets/agents-tR-nNP04.js +222 -0
- package/dist/gateway/static/root/assets/{apps-page-pJ27dsqn.js → apps-page-BDw6SP-d.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-DEFd-jj1.js +1 -0
- package/dist/gateway/static/root/assets/{channels-status-swr-D1KYmOmi.js → channels-status-swr-DI5FHdGe.js} +1 -1
- package/dist/gateway/static/root/assets/{cron-api-Y2wfSJVI.js → cron-api-BSqY8LwW.js} +1 -1
- package/dist/gateway/static/root/assets/{cron-page-B97KU_RG.js → cron-page-D7lVDjcR.js} +1 -1
- package/dist/gateway/static/root/assets/{dist-CboA_Css.js → dist-CqNMNhJM.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-DN_zNmpo.js → extension-debug-page-gf2L0kY_.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-BUXtOzv5.js → extension-page-CQo2Xsmg.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-C2dX4KCW.js → extension-settings-page-CZf0WoZg.js} +1 -1
- package/dist/gateway/static/root/assets/fetch-2iRFmd3n.js +3 -0
- package/dist/gateway/static/root/assets/{field-primitives-B9rOLqdm.js → field-primitives-DTtlp-l8.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-DvfiRVrc.js → heartbeat-config-api-B0drdQEJ.js} +1 -1
- package/dist/gateway/static/root/assets/{index-DQuaMye9.js → index-0Gt3TG4j.js} +94 -85
- package/dist/gateway/static/root/assets/index-BuFldCsB.css +1 -0
- package/dist/gateway/static/root/assets/{logs-page-BQuBpHcc.js → logs-page-DMuORLfC.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-_UO8g6NN.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-2Yu-FASs.js → settings-form-section-DkmHkknc.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-Cz8FoW_A.js +3 -0
- package/dist/gateway/static/root/assets/skills-page-HrUOxF7H.js +2 -0
- package/dist/gateway/static/root/assets/{theme-store-DnwYutiX.js → theme-store-D01dJt95.js} +1 -1
- package/dist/gateway/static/root/assets/{utils-D2Gn2qod.js → utils-BFwcR6pL.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-JF8-aqc5.js +1 -0
- package/dist/gateway/static/root/index.html +4 -4
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-instance-gateway.d.ts +50 -0
- package/dist/src/agent/agent-instance-gateway.js +1 -0
- package/dist/src/agent/agent-manager.d.ts +20 -14
- package/dist/src/agent/agent-manager.js +74 -186
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/background-review/coordinator.d.ts +61 -0
- package/dist/src/agent/background-review/coordinator.js +120 -0
- package/dist/src/agent/background-review/coordinator.js.map +1 -0
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
- package/dist/src/agent/child-agent-factory.d.ts +14 -0
- package/dist/src/agent/child-agent-factory.js +2 -8
- package/dist/src/agent/child-agent-factory.js.map +1 -1
- package/dist/src/agent/context/workspace-seed.js +3 -3
- package/dist/src/agent/embedded/index.d.ts +1 -2
- package/dist/src/agent/embedded/index.js +2 -3
- package/dist/src/agent/embedded/run-for-session.d.ts +2 -2
- package/dist/src/agent/embedded/run-for-session.js.map +1 -1
- package/dist/src/agent/embedded/runs.d.ts +32 -0
- package/dist/src/agent/embedded/runs.js +79 -19
- package/dist/src/agent/embedded/runs.js.map +1 -1
- package/dist/src/agent/embedded/session-manager-cache.d.ts +14 -0
- package/dist/src/agent/embedded/session-manager-cache.js +32 -11
- package/dist/src/agent/embedded/session-manager-cache.js.map +1 -1
- package/dist/src/agent/embedded/session-runner.d.ts +37 -7
- package/dist/src/agent/embedded/session-runner.js +184 -153
- package/dist/src/agent/embedded/session-runner.js.map +1 -1
- package/dist/src/agent/embedded/session-tool-result-guard.d.ts +57 -9
- package/dist/src/agent/embedded/session-tool-result-guard.js +159 -67
- package/dist/src/agent/embedded/session-tool-result-guard.js.map +1 -1
- package/dist/src/agent/goals/goal-run-store.js +4 -4
- package/dist/src/agent/goals/persistent-goal-service.d.ts +84 -0
- package/dist/src/agent/goals/persistent-goal-service.js +139 -0
- package/dist/src/agent/goals/persistent-goal-service.js.map +1 -0
- package/dist/src/agent/goals/post-turn.js +2 -2
- package/dist/src/agent/goals/state.d.ts +1 -1
- package/dist/src/agent/goals/state.js.map +1 -1
- package/dist/src/agent/image/load-image-media.js +1 -1
- package/dist/src/agent/inbound/inbound-loop.d.ts +77 -0
- package/dist/src/agent/inbound/inbound-loop.js +226 -0
- package/dist/src/agent/inbound/inbound-loop.js.map +1 -0
- package/dist/src/agent/inbound/turn-dispatcher.d.ts +80 -0
- package/dist/src/agent/inbound/turn-dispatcher.js +138 -0
- package/dist/src/agent/inbound/turn-dispatcher.js.map +1 -0
- package/dist/src/agent/ipc/bus.js +1 -1
- package/dist/src/agent/ipc/inbox.js +2 -2
- package/dist/src/agent/ipc/socket.js +1 -1
- package/dist/src/agent/lifecycle/handlers/compaction.d.ts +1 -1
- package/dist/src/agent/lifecycle/handlers/compaction.js.map +1 -1
- package/dist/src/agent/lifecycle/manager.d.ts +1 -1
- package/dist/src/agent/lifecycle/manager.js.map +1 -1
- package/dist/src/agent/lifecycle/types.d.ts +1 -1
- package/dist/src/agent/memory/builtin-memory-store.js +1 -1
- package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
- package/dist/src/agent/memory/dreaming/events.js +1 -1
- package/dist/src/agent/memory/dreaming/last-run.js +1 -1
- package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
- package/dist/src/agent/memory/dreaming/preview.js +1 -1
- package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
- package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
- package/dist/src/agent/memory/dreaming/utils.d.ts +12 -2
- package/dist/src/agent/memory/dreaming/utils.js +1 -1
- package/dist/src/agent/memory/dreaming/utils.js.map +1 -1
- package/dist/src/agent/memory/index.js +3 -3
- package/dist/src/agent/memory/plugin-discovery.js +1 -1
- package/dist/src/agent/memory/prefetch-coordinator.d.ts +37 -0
- package/dist/src/agent/memory/prefetch-coordinator.js +45 -0
- package/dist/src/agent/memory/prefetch-coordinator.js.map +1 -0
- package/dist/src/agent/messaging/command-handler.d.ts +5 -1
- package/dist/src/agent/messaging/command-handler.js +24 -96
- package/dist/src/agent/messaging/command-handler.js.map +1 -1
- package/dist/src/agent/messaging/index.d.ts +1 -0
- package/dist/src/agent/messaging/index.js +2 -1
- package/dist/src/agent/messaging/message-router.d.ts +1 -1
- package/dist/src/agent/messaging/message-router.js.map +1 -1
- package/dist/src/agent/messaging/outbound-coordinator.d.ts +82 -0
- package/dist/src/agent/messaging/outbound-coordinator.js +123 -0
- package/dist/src/agent/messaging/outbound-coordinator.js.map +1 -0
- package/dist/src/agent/models/manager.js +1 -1
- package/dist/src/agent/orchestration/agent-event-handler.d.ts +36 -33
- package/dist/src/agent/orchestration/agent-event-handler.js +212 -174
- package/dist/src/agent/orchestration/agent-event-handler.js.map +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.d.ts +4 -4
- package/dist/src/agent/orchestration/agent-orchestrator.js +4 -8
- package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
- package/dist/src/agent/orchestration/index.d.ts +1 -1
- package/dist/src/agent/orchestration/index.js +2 -2
- package/dist/src/agent/prompt/service-prompt-builder.js +4 -4
- package/dist/src/agent/reply/post-compaction-context.js +1 -1
- package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
- package/dist/src/agent/sandbox/path-policy.js +1 -1
- package/dist/src/agent/service/async-queue.d.ts +20 -0
- package/dist/src/agent/service/async-queue.js +53 -0
- package/dist/src/agent/service/async-queue.js.map +1 -0
- package/dist/src/agent/service/build-direct-message-content.d.ts +2 -2
- package/dist/src/agent/service/build-direct-message-content.js.map +1 -1
- package/dist/src/agent/service/direct-turn-helpers.d.ts +70 -0
- package/dist/src/agent/service/direct-turn-helpers.js +90 -0
- package/dist/src/agent/service/direct-turn-helpers.js.map +1 -0
- package/dist/src/agent/service/process-direct-one-shot.d.ts +3 -3
- package/dist/src/agent/service/process-direct-one-shot.js +17 -34
- package/dist/src/agent/service/process-direct-one-shot.js.map +1 -1
- package/dist/src/agent/service/process-direct-streaming.d.ts +2 -2
- package/dist/src/agent/service/process-direct-streaming.js +122 -168
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service/webchat-tts.d.ts +2 -2
- package/dist/src/agent/service/webchat-tts.js +1 -1
- package/dist/src/agent/service/webchat-tts.js.map +1 -1
- package/dist/src/agent/service.d.ts +62 -167
- package/dist/src/agent/service.js +177 -786
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/session/index.d.ts +4 -0
- package/dist/src/agent/session/index.js +5 -1
- package/dist/src/agent/session/session-config-service.d.ts +68 -0
- package/dist/src/agent/session/session-config-service.js +172 -0
- package/dist/src/agent/session/session-config-service.js.map +1 -0
- package/dist/src/agent/session/session-context.d.ts +27 -19
- package/dist/src/agent/session/session-context.js +39 -24
- package/dist/src/agent/session/session-context.js.map +1 -1
- package/dist/src/agent/session/session-hydrator.d.ts +42 -0
- package/dist/src/agent/session/session-hydrator.js +66 -0
- package/dist/src/agent/session/session-hydrator.js.map +1 -0
- package/dist/src/agent/session/session-inspector.d.ts +80 -0
- package/dist/src/agent/session/session-inspector.js +119 -0
- package/dist/src/agent/session/session-inspector.js.map +1 -0
- package/dist/src/agent/session/session-state-bag.d.ts +83 -0
- package/dist/src/agent/session/session-state-bag.js +192 -0
- package/dist/src/agent/session/session-state-bag.js.map +1 -0
- package/dist/src/agent/skills/config.js +1 -1
- package/dist/src/agent/skills/hub-hash.js +2 -2
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent/skills/hub-pull.js +2 -2
- package/dist/src/agent/skills/index.d.ts +0 -2
- package/dist/src/agent/skills/index.js +3 -5
- package/dist/src/agent/skills/index.js.map +1 -1
- package/dist/src/agent/skills/managed-store.js +1 -1
- package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +11 -6
- package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js.map +1 -1
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +35 -7
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +1 -1
- package/dist/src/agent/skills/scanner.js +1 -1
- package/dist/src/agent/skills/skill-manage-ops.js +2 -2
- package/dist/src/agent/skills/skill-manager.js +1 -1
- package/dist/src/agent/tools/browser/tool/browser-use-tool.d.ts +7 -0
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +37 -0
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +1 -1
- package/dist/src/agent/tools/delegate-tool.d.ts +7 -0
- package/dist/src/agent/tools/delegate-tool.js +2 -1
- package/dist/src/agent/tools/delegate-tool.js.map +1 -1
- package/dist/src/agent/tools/dreaming-tool.js +1 -1
- package/dist/src/agent/tools/executor.d.ts +34 -15
- package/dist/src/agent/tools/executor.js +44 -79
- package/dist/src/agent/tools/executor.js.map +1 -1
- package/dist/src/agent/tools/factory.d.ts +6 -0
- package/dist/src/agent/tools/factory.js +63 -4
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/image-generate-tool.js +1 -1
- package/dist/src/agent/tools/send-media.js +1 -1
- package/dist/src/agent/tools/skill-manage-tool.js +1 -1
- package/dist/src/agent/tools/skills-tools.js +1 -1
- package/dist/src/agent/tools/tts-tool.js +1 -1
- package/dist/src/agent/tools/write.js +1 -1
- package/dist/src/agent/workspace-runtime/registry.d.ts +48 -0
- package/dist/src/agent/workspace-runtime/registry.js +59 -0
- package/dist/src/agent/workspace-runtime/registry.js.map +1 -0
- package/dist/src/auth/credentials.js +3 -3
- package/dist/src/auth/profiles/store.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +1 -1
- package/dist/src/browser/cdp-local-launcher.js +4 -3
- package/dist/src/browser/cdp-local-launcher.js.map +1 -1
- package/dist/src/browser/index.d.ts +1 -0
- package/dist/src/browser/index.js +2 -1
- package/dist/src/browser/manager.js +3 -2
- package/dist/src/browser/manager.js.map +1 -1
- package/dist/src/browser/providers/browser-ext-install.js +4 -4
- package/dist/src/browser/providers/browser-use.js +2 -1
- package/dist/src/browser/providers/browser-use.js.map +1 -1
- package/dist/src/browser/providers/browserbase.js +2 -1
- package/dist/src/browser/providers/browserbase.js.map +1 -1
- package/dist/src/browser/providers/cloakbrowser.js +7 -6
- package/dist/src/browser/providers/cloakbrowser.js.map +1 -1
- package/dist/src/browser/providers/playwright-doctor.d.ts +2 -0
- package/dist/src/browser/providers/playwright-doctor.js +7 -3
- package/dist/src/browser/providers/playwright-doctor.js.map +1 -1
- package/dist/src/browser/readiness.d.ts +33 -0
- package/dist/src/browser/readiness.js +138 -0
- package/dist/src/browser/readiness.js.map +1 -0
- package/dist/src/browser/stealth.js +2 -2
- package/dist/src/channels/attachments/inbound-persist.js +1 -1
- package/dist/src/channels/attachments/outbound-tts-persist.js +1 -1
- package/dist/src/channels/channel-domain.d.ts +1 -1
- package/dist/src/channels/config-helpers.d.ts +1 -1
- package/dist/src/channels/config-helpers.js.map +1 -1
- package/dist/src/channels/heartbeat-scheduler.d.ts +40 -0
- package/dist/src/channels/heartbeat-scheduler.js +94 -0
- package/dist/src/channels/heartbeat-scheduler.js.map +1 -0
- package/dist/src/channels/lifecycle-supervisor.d.ts +81 -0
- package/dist/src/channels/lifecycle-supervisor.js +263 -0
- package/dist/src/channels/lifecycle-supervisor.js.map +1 -0
- package/dist/src/channels/manager.d.ts +34 -68
- package/dist/src/channels/manager.js +107 -477
- package/dist/src/channels/manager.js.map +1 -1
- package/dist/src/channels/outbound/deliver.d.ts +1 -1
- package/dist/src/channels/outbound/deliver.js.map +1 -1
- package/dist/src/channels/outbound/persist-store.js +1 -1
- package/dist/src/channels/outbound-sender.d.ts +51 -0
- package/dist/src/channels/outbound-sender.js +125 -0
- package/dist/src/channels/outbound-sender.js.map +1 -0
- package/dist/src/channels/pairing/allow-from-file.js +1 -1
- package/dist/src/channels/pairing/pairing-service.d.ts +3 -10
- package/dist/src/channels/pairing/pairing-service.js.map +1 -1
- package/dist/src/channels/pairing/pairing-store.js +2 -2
- package/dist/src/channels/pairing/pairing-types.d.ts +15 -0
- package/dist/src/channels/pairing/pairing-types.js +1 -0
- package/dist/src/channels/plugin-registry.d.ts +22 -0
- package/dist/src/channels/plugin-registry.js +44 -0
- package/dist/src/channels/plugin-registry.js.map +1 -0
- package/dist/src/channels/plugin-types.d.ts +1 -1
- package/dist/src/channels/plugins/types.adapters.d.ts +2 -2
- package/dist/src/channels/security-helpers.d.ts +1 -1
- package/dist/src/channels/security-helpers.js.map +1 -1
- package/dist/src/channels/setup-wizard.d.ts +1 -1
- package/dist/src/chat-commands/builtins/config.js +2 -2
- package/dist/src/chat-commands/context.js +1 -1
- package/dist/src/cli/command-catalog.js +110 -8
- package/dist/src/cli/command-catalog.js.map +1 -1
- package/dist/src/cli/command-loaders.js +2 -0
- package/dist/src/cli/command-loaders.js.map +1 -1
- package/dist/src/cli/command-manifest.js +9 -1
- package/dist/src/cli/command-manifest.js.map +1 -1
- package/dist/src/cli/commands/agent/stream-renderer.js +1 -1
- package/dist/src/cli/commands/agent/stream-renderer.js.map +1 -1
- package/dist/src/cli/commands/agent.js +4 -4
- package/dist/src/cli/commands/agent.js.map +1 -1
- package/dist/src/cli/commands/browser-cli-helpers.js +2 -1
- package/dist/src/cli/commands/browser-cli-helpers.js.map +1 -1
- package/dist/src/cli/commands/config.js +70 -19
- package/dist/src/cli/commands/config.js.map +1 -1
- package/dist/src/cli/commands/cron-cli.d.ts +2 -0
- package/dist/src/cli/commands/cron-cli.js +15 -0
- package/dist/src/cli/commands/cron-cli.js.map +1 -0
- package/dist/src/cli/commands/cron.d.ts +4 -1
- package/dist/src/cli/commands/cron.js +76 -41
- package/dist/src/cli/commands/cron.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/channel-config.js +1 -1
- package/dist/src/cli/commands/doctor/checks/channel-config.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/config-health.js +2 -2
- package/dist/src/cli/commands/doctor/checks/config-health.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/cron-health.js +1 -1
- package/dist/src/cli/commands/doctor/checks/cron-health.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/gateway-health.js +2 -2
- package/dist/src/cli/commands/doctor/checks/gateway-health.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/gateway-service.js +2 -2
- package/dist/src/cli/commands/doctor/checks/gateway-service.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
- package/dist/src/cli/commands/doctor/checks/session-integrity.js +1 -1
- package/dist/src/cli/commands/doctor/checks/state-integrity.js +2 -2
- package/dist/src/cli/commands/doctor/checks/state-integrity.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/workspace-status.js +4 -4
- package/dist/src/cli/commands/doctor/checks/workspace-status.js.map +1 -1
- package/dist/src/cli/commands/extension-dev.js +2 -2
- package/dist/src/cli/commands/extension-dev.js.map +1 -1
- package/dist/src/cli/commands/extension-marketplace.js +2 -2
- package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
- package/dist/src/cli/commands/extension-pack.js +1 -1
- package/dist/src/cli/commands/gateway/call.js +1 -1
- package/dist/src/cli/commands/gateway/call.js.map +1 -1
- package/dist/src/cli/commands/gateway/health.js +1 -1
- package/dist/src/cli/commands/gateway/health.js.map +1 -1
- package/dist/src/cli/commands/gateway/index.d.ts +1 -1
- package/dist/src/cli/commands/gateway/index.js +2 -2
- package/dist/src/cli/commands/gateway/lifecycle-core.d.ts +31 -12
- package/dist/src/cli/commands/gateway/lifecycle-core.js +167 -116
- package/dist/src/cli/commands/gateway/lifecycle-core.js.map +1 -1
- package/dist/src/cli/commands/gateway/lifecycle.d.ts +11 -0
- package/dist/src/cli/commands/gateway/lifecycle.js +102 -0
- package/dist/src/cli/commands/gateway/lifecycle.js.map +1 -0
- package/dist/src/cli/commands/gateway/logs.js +1 -1
- package/dist/src/cli/commands/gateway/logs.js.map +1 -1
- package/dist/src/cli/commands/gateway/probe.js +1 -1
- package/dist/src/cli/commands/gateway/probe.js.map +1 -1
- package/dist/src/cli/commands/gateway/restart-health.d.ts +12 -0
- package/dist/src/cli/commands/gateway/restart-health.js +45 -1
- package/dist/src/cli/commands/gateway/restart-health.js.map +1 -1
- package/dist/src/cli/commands/gateway/restart.js +3 -3
- package/dist/src/cli/commands/gateway/restart.js.map +1 -1
- package/dist/src/cli/commands/gateway/run-foreground.d.ts +0 -1
- package/dist/src/cli/commands/gateway/run-foreground.js +0 -35
- package/dist/src/cli/commands/gateway/run-foreground.js.map +1 -1
- package/dist/src/cli/commands/gateway/service.d.ts +4 -0
- package/dist/src/cli/commands/gateway/service.js +18 -3
- package/dist/src/cli/commands/gateway/service.js.map +1 -1
- package/dist/src/cli/commands/gateway/shared.d.ts +3 -0
- package/dist/src/cli/commands/gateway/shared.js +54 -0
- package/dist/src/cli/commands/gateway/shared.js.map +1 -0
- package/dist/src/cli/commands/gateway/status.js +1 -1
- package/dist/src/cli/commands/gateway/status.js.map +1 -1
- package/dist/src/cli/commands/gateway/stop.js +2 -2
- package/dist/src/cli/commands/gateway/stop.js.map +1 -1
- package/dist/src/cli/commands/gateway/subcommands.js +1 -4
- package/dist/src/cli/commands/gateway/subcommands.js.map +1 -1
- package/dist/src/cli/commands/gateway/token.js +1 -1
- package/dist/src/cli/commands/gateway/token.js.map +1 -1
- package/dist/src/cli/commands/gateway.js +5 -5
- package/dist/src/cli/commands/gateway.js.map +1 -1
- package/dist/src/cli/commands/image.js +2 -2
- package/dist/src/cli/commands/image.js.map +1 -1
- package/dist/src/cli/commands/init.js +31 -4
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/models.d.ts +4 -1
- package/dist/src/cli/commands/models.js +87 -75
- package/dist/src/cli/commands/models.js.map +1 -1
- package/dist/src/cli/commands/onboard/gateway.d.ts +0 -8
- package/dist/src/cli/commands/onboard/gateway.js +48 -49
- package/dist/src/cli/commands/onboard/gateway.js.map +1 -1
- package/dist/src/cli/commands/onboard.js +11 -64
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/cli/commands/profile.d.ts +3 -5
- package/dist/src/cli/commands/profile.js +31 -31
- package/dist/src/cli/commands/profile.js.map +1 -1
- package/dist/src/cli/commands/session/utils.js +1 -1
- package/dist/src/cli/commands/session/utils.js.map +1 -1
- package/dist/src/cli/commands/setup.js +6 -1
- package/dist/src/cli/commands/setup.js.map +1 -1
- package/dist/src/cli/commands/skills.js +1 -1
- package/dist/src/cli/commands/tailscale.js +1 -1
- package/dist/src/cli/commands/tailscale.js.map +1 -1
- package/dist/src/cli/context.d.ts +20 -0
- package/dist/src/cli/context.js +23 -0
- package/dist/src/cli/context.js.map +1 -0
- package/dist/src/cli/extension-cli-register.js +3 -3
- package/dist/src/cli/gateway-run-argv.js +16 -9
- package/dist/src/cli/gateway-run-argv.js.map +1 -1
- package/dist/src/cli/gateway-run-fast-path.js +1 -1
- package/dist/src/cli/gateway-run-fast-path.js.map +1 -1
- package/dist/src/cli/index.d.ts +1 -7
- package/dist/src/cli/index.js +4 -6
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/utils/init-workspace-core.js +2 -2
- package/dist/src/config/commands.flags.d.ts +3 -0
- package/dist/src/config/commands.flags.js +11 -0
- package/dist/src/config/commands.flags.js.map +1 -0
- package/dist/src/config/index.d.ts +1 -0
- package/dist/src/config/index.js +6 -5
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/config/loader.js +2 -2
- package/dist/src/config/models-json.js +2 -2
- package/dist/src/config/profile.js +2 -2
- package/dist/src/config/schema.d.ts +11 -4
- package/dist/src/config/schema.js +13 -12
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/workspace-path-helpers.d.ts +15 -0
- package/dist/src/config/workspace-path-helpers.js +14 -0
- package/dist/src/config/workspace-path-helpers.js.map +1 -0
- package/dist/src/cron/executor.js +4 -4
- package/dist/src/cron/executor.js.map +1 -1
- package/dist/src/cron/persistence.js +1 -1
- package/dist/src/cron/run-log-store.js +1 -1
- package/dist/src/daemon/index.d.ts +0 -1
- package/dist/src/daemon/index.js +1 -2
- package/dist/src/daemon/install-plan.js +3 -2
- package/dist/src/daemon/install-plan.js.map +1 -1
- package/dist/src/daemon/launchd.js +2 -2
- package/dist/src/daemon/systemd.js +2 -2
- package/dist/src/daemon/types.d.ts +0 -6
- package/dist/src/extensions/api.d.ts +1 -1
- package/dist/src/extensions/api.js +2 -2
- package/dist/src/extensions/api.js.map +1 -1
- package/dist/src/extensions/bundle-mcp.js +1 -1
- package/dist/src/extensions/discover-extensions.js +1 -1
- package/dist/src/extensions/extension-registry-impl.d.ts +51 -0
- package/dist/src/extensions/extension-registry-impl.js +117 -0
- package/dist/src/extensions/extension-registry-impl.js.map +1 -0
- package/dist/src/extensions/health.js +1 -1
- package/dist/src/extensions/index.js +3 -2
- package/dist/src/extensions/loader.d.ts +3 -43
- package/dist/src/extensions/loader.js +3 -110
- package/dist/src/extensions/loader.js.map +1 -1
- package/dist/src/extensions/lockfile.js +2 -2
- package/dist/src/extensions/sdk/index.js +2 -1
- package/dist/src/extensions/sdk/index.js.map +1 -1
- package/dist/src/extensions/types/events.d.ts +7 -1
- package/dist/src/gateway/agents-admin.js +2 -2
- package/dist/src/gateway/file-path-classifier.js +2 -2
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/gateway/heartbeat/service.js.map +1 -1
- package/dist/src/gateway/hono/app.js +5 -53
- package/dist/src/gateway/hono/app.js.map +1 -1
- package/dist/src/gateway/hono/lib/extension-store.js +1 -1
- package/dist/src/gateway/hono/lib/static-ui.js +2 -2
- package/dist/src/gateway/hono/middleware/auth.d.ts +5 -14
- package/dist/src/gateway/hono/middleware/auth.js +89 -126
- package/dist/src/gateway/hono/middleware/auth.js.map +1 -1
- package/dist/src/gateway/hono/middleware/logger.js +1 -1
- package/dist/src/gateway/hono/middleware/logger.js.map +1 -1
- package/dist/src/gateway/hono/middleware/strict-rate-limit.d.ts +14 -0
- package/dist/src/gateway/hono/middleware/strict-rate-limit.js +62 -0
- package/dist/src/gateway/hono/middleware/strict-rate-limit.js.map +1 -0
- package/dist/src/gateway/hono/oauth.js +1 -1
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +4 -4
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js.map +1 -1
- package/dist/src/gateway/hono/routes/browser.d.ts +20 -0
- package/dist/src/gateway/hono/routes/browser.js +626 -0
- package/dist/src/gateway/hono/routes/browser.js.map +1 -0
- package/dist/src/gateway/hono/routes/commands-skills.js +13 -13
- package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/agents.d.ts +18 -0
- package/dist/src/gateway/hono/routes/config-patch/agents.js +418 -0
- package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -0
- package/dist/src/gateway/hono/routes/config-patch/channels.d.ts +12 -0
- package/dist/src/gateway/hono/routes/config-patch/channels.js +186 -0
- package/dist/src/gateway/hono/routes/config-patch/channels.js.map +1 -0
- package/dist/src/gateway/hono/routes/config-patch/gateway.d.ts +18 -0
- package/dist/src/gateway/hono/routes/config-patch/gateway.js +264 -0
- package/dist/src/gateway/hono/routes/config-patch/gateway.js.map +1 -0
- package/dist/src/gateway/hono/routes/config-patch/index.d.ts +9 -0
- package/dist/src/gateway/hono/routes/config-patch/index.js +6 -0
- package/dist/src/gateway/hono/routes/config-patch/misc.d.ts +23 -0
- package/dist/src/gateway/hono/routes/config-patch/misc.js +139 -0
- package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -0
- package/dist/src/gateway/hono/routes/config-patch/result.d.ts +18 -0
- package/dist/src/gateway/hono/routes/config-patch/result.js +13 -0
- package/dist/src/gateway/hono/routes/config-patch/result.js.map +1 -0
- package/dist/src/gateway/hono/routes/config.js +20 -1764
- package/dist/src/gateway/hono/routes/config.js.map +1 -1
- package/dist/src/gateway/hono/routes/dreaming.js +2 -3
- package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
- package/dist/src/gateway/hono/routes/host-fs.js +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +10 -5
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/mcp.js +1 -2
- package/dist/src/gateway/hono/routes/mcp.js.map +1 -1
- package/dist/src/gateway/hono/routes/models.js +1 -1
- package/dist/src/gateway/hono/routes/sessions.js +32 -32
- package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
- package/dist/src/gateway/hono/routes/shares.js +4 -4
- package/dist/src/gateway/hono/routes/shares.js.map +1 -1
- package/dist/src/gateway/hono/routes/tunnel.js +1 -1
- package/dist/src/gateway/hono/routes/tunnel.js.map +1 -1
- package/dist/src/gateway/hono/routes/workspace.js +6 -7
- package/dist/src/gateway/hono/routes/workspace.js.map +1 -1
- package/dist/src/gateway/hono/sse.js +2 -2
- package/dist/src/gateway/index.d.ts +1 -1
- package/dist/src/gateway/index.js +4 -2
- package/dist/src/gateway/lock.js +3 -3
- package/dist/src/gateway/rate-limit/auth-policy.d.ts +34 -0
- package/dist/src/gateway/rate-limit/auth-policy.js +49 -0
- package/dist/src/gateway/rate-limit/auth-policy.js.map +1 -0
- package/dist/src/gateway/rate-limit/buckets.d.ts +63 -0
- package/dist/src/gateway/rate-limit/buckets.js +143 -0
- package/dist/src/gateway/rate-limit/buckets.js.map +1 -0
- package/dist/src/gateway/rate-limit/env-flags.d.ts +13 -0
- package/dist/src/gateway/rate-limit/env-flags.js +16 -0
- package/dist/src/gateway/rate-limit/env-flags.js.map +1 -0
- package/dist/src/gateway/rate-limit/index.d.ts +3 -0
- package/dist/src/gateway/rate-limit/index.js +4 -0
- package/dist/src/gateway/run-loop.d.ts +1 -1
- package/dist/src/gateway/run-loop.js +24 -4
- package/dist/src/gateway/run-loop.js.map +1 -1
- package/dist/src/gateway/runtime-config.js +2 -1
- package/dist/src/gateway/runtime-config.js.map +1 -1
- package/dist/src/gateway/security/audit.js +2 -1
- package/dist/src/gateway/security/audit.js.map +1 -1
- package/dist/src/gateway/security/index.d.ts +0 -1
- package/dist/src/gateway/security/index.js +1 -2
- package/dist/src/gateway/security/loopback.d.ts +13 -0
- package/dist/src/gateway/security/loopback.js +45 -0
- package/dist/src/gateway/security/loopback.js.map +1 -0
- package/dist/src/gateway/service/agent-runner.d.ts +108 -0
- package/dist/src/gateway/service/agent-runner.js +184 -0
- package/dist/src/gateway/service/agent-runner.js.map +1 -0
- package/dist/src/gateway/service/config-coordinator.d.ts +119 -0
- package/dist/src/gateway/service/config-coordinator.js +351 -0
- package/dist/src/gateway/service/config-coordinator.js.map +1 -0
- package/dist/src/gateway/service/marketplace-service.d.ts +85 -0
- package/dist/src/gateway/service/marketplace-service.js +239 -0
- package/dist/src/gateway/service/marketplace-service.js.map +1 -0
- package/dist/src/gateway/service/run-gateway-agent.js +5 -5
- package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
- package/dist/src/gateway/service/sessions-api.d.ts +125 -0
- package/dist/src/gateway/service/sessions-api.js +135 -0
- package/dist/src/gateway/service/sessions-api.js.map +1 -0
- package/dist/src/gateway/service.d.ts +30 -360
- package/dist/src/gateway/service.js +122 -904
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/gateway/workspace-fs-file-list.js +1 -1
- package/dist/src/gateway/workspace-heartbeat-path.js +1 -2
- package/dist/src/gateway/workspace-heartbeat-path.js.map +1 -1
- package/dist/src/infra/gateway-process-argv.d.ts +4 -0
- package/dist/src/infra/gateway-process-argv.js +26 -0
- package/dist/src/infra/gateway-process-argv.js.map +1 -0
- package/dist/src/infra/gateway-processes.d.ts +5 -0
- package/dist/src/infra/gateway-processes.js +65 -0
- package/dist/src/infra/gateway-processes.js.map +1 -0
- package/dist/src/infra/rate-limit/failure-limiter.d.ts +50 -0
- package/dist/src/infra/rate-limit/failure-limiter.js +100 -0
- package/dist/src/infra/rate-limit/failure-limiter.js.map +1 -0
- package/dist/src/infra/rate-limit/index.d.ts +5 -0
- package/dist/src/infra/rate-limit/index.js +3 -0
- package/dist/src/infra/rate-limit/keyed-store.d.ts +34 -0
- package/dist/src/infra/rate-limit/keyed-store.js +44 -0
- package/dist/src/infra/rate-limit/keyed-store.js.map +1 -0
- package/dist/src/infra/rate-limit/rate-limiter.d.ts +39 -0
- package/dist/src/infra/rate-limit/rate-limiter.js +65 -0
- package/dist/src/infra/rate-limit/rate-limiter.js.map +1 -0
- package/dist/src/infra/restart.d.ts +21 -0
- package/dist/src/infra/restart.js +122 -0
- package/dist/src/infra/restart.js.map +1 -0
- package/dist/src/infra/update-check.js +1 -1
- package/dist/src/infra/update-lock.js +3 -3
- package/dist/src/infra/update-runner.js +1 -1
- package/dist/src/infra/update-startup.js +2 -2
- package/dist/src/infra/write-file-atomic.js +2 -2
- package/dist/src/mcp/channel-bridge.d.ts +0 -6
- package/dist/src/mcp/channel-bridge.js +1 -5
- package/dist/src/mcp/channel-bridge.js.map +1 -1
- package/dist/src/media-shared/http/ssrf-guard.js +1 -1
- package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
- package/dist/src/providers/index.js +2 -2
- package/dist/src/providers/model-registry.js +1 -1
- package/dist/src/session/config-store.js +2 -2
- package/dist/src/session/parity/jsonl-transcript-io.js +2 -2
- package/dist/src/session/parity/sessions-json-file-read.d.ts +2 -1
- package/dist/src/session/parity/sessions-json-file-read.js.map +1 -1
- package/dist/src/session/parity/sessions-json-file.js +1 -1
- package/dist/src/session/parity/transcript-file-lock.js +2 -2
- package/dist/src/session/parity/transcript-paths.js +1 -1
- package/dist/src/session/search-index-cache.js +1 -1
- package/dist/src/session/search-index.js +1 -1
- package/dist/src/session/session-title.js +1 -1
- package/dist/src/session/store.js +5 -5
- package/dist/src/share/share-rate-limit.d.ts +10 -2
- package/dist/src/share/share-rate-limit.js +33 -42
- package/dist/src/share/share-rate-limit.js.map +1 -1
- package/dist/src/share/share-store.js +3 -3
- package/dist/src/tui/backends/embedded-backend.js +16 -12
- package/dist/src/tui/backends/embedded-backend.js.map +1 -1
- package/dist/src/tui/clipboard-image.js +2 -2
- package/dist/src/tui/extension-host/load-extensions.js +1 -1
- package/dist/src/tui/format-tui-hotkeys.js +1 -1
- package/dist/src/tui/theme-manager.js +1 -1
- package/dist/src/tui/tui-keybindings-file.js +1 -1
- package/dist/src/tui/tui-scoped-models.js +1 -1
- package/dist/src/tui/tui-settings.js +1 -1
- package/dist/src/tui/tui-skills-autocomplete.js +1 -1
- package/dist/src/tui/tui.js +1 -2
- package/dist/src/tui/tui.js.map +1 -1
- package/dist/src/tui/xopc-tui-keybindings.d.ts +0 -1
- package/dist/src/tui/xopc-tui-keybindings.js +1 -2
- package/dist/src/tui/xopc-tui-keybindings.js.map +1 -1
- package/dist/src/tunnel/frpc-binary.js +2 -2
- package/dist/src/tunnel/frpc-config.js +1 -1
- package/dist/src/tunnel/frpc-extract.js +1 -1
- package/dist/src/tunnel/pairing-rate-limit.d.ts +10 -2
- package/dist/src/tunnel/pairing-rate-limit.js +19 -15
- package/dist/src/tunnel/pairing-rate-limit.js.map +1 -1
- package/dist/src/tunnel/tunnel-rate-limit.d.ts +6 -3
- package/dist/src/tunnel/tunnel-rate-limit.js +11 -22
- package/dist/src/tunnel/tunnel-rate-limit.js.map +1 -1
- package/dist/src/tunnel/tunnel-state.js +1 -1
- package/dist/src/utils/logger/audit.js +1 -1
- package/dist/src/utils/logger/log-store.js +1 -1
- package/dist/src/utils/logger/rotation.js +1 -1
- package/dist/src/utils/logger/stats.d.ts +1 -1
- package/dist/src/voice/tts/audio.js +1 -1
- package/dist/src/voice/tts/factory.js +1 -1
- package/dist/src/voice/tts/index.js +2 -2
- package/dist/src/voice/tts/merge-config.js +1 -1
- package/dist/src/voice/tts/providers/edge-speech.js +1 -1
- package/dist/src/voice/tts/service.js +1 -1
- package/dist/src/voice/tts/service.js.map +1 -1
- package/dist/src/voice/tts/speak-core.js +1 -1
- package/package.json +10 -5
- package/dist/gateway/static/root/assets/agents-Cqh1ts38.js +0 -222
- package/dist/gateway/static/root/assets/channels-settings-wTiWStg9.js +0 -1
- package/dist/gateway/static/root/assets/fetch-BAAh_kXG.js +0 -3
- package/dist/gateway/static/root/assets/index-C8yHX-AA.css +0 -1
- package/dist/gateway/static/root/assets/sessions-page-BeiFm0Ms.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-RPAz_Wg_.js +0 -3
- package/dist/gateway/static/root/assets/skills-page-Wu4aNWDx.js +0 -2
- package/dist/gateway/static/root/assets/voice-api-key-field-BxIGhhEL.js +0 -1
- package/dist/src/agent/embedded/session-raw-append-message.d.ts +0 -11
- package/dist/src/agent/embedded/session-raw-append-message.js +0 -15
- package/dist/src/agent/embedded/session-raw-append-message.js.map +0 -1
- package/dist/src/agent/embedded/session-tool-result-guard-wrapper.d.ts +0 -15
- package/dist/src/agent/embedded/session-tool-result-guard-wrapper.js +0 -24
- package/dist/src/agent/embedded/session-tool-result-guard-wrapper.js.map +0 -1
- package/dist/src/agent/embedded/session-tool-result-state.d.ts +0 -17
- package/dist/src/agent/embedded/session-tool-result-state.js +0 -26
- package/dist/src/agent/embedded/session-tool-result-state.js.map +0 -1
- package/dist/src/daemon/launchd-restart-handoff.d.ts +0 -25
- package/dist/src/daemon/launchd-restart-handoff.js +0 -132
- package/dist/src/daemon/launchd-restart-handoff.js.map +0 -1
- package/dist/src/gateway/auth-rate-limit.d.ts +0 -71
- package/dist/src/gateway/auth-rate-limit.js +0 -192
- package/dist/src/gateway/auth-rate-limit.js.map +0 -1
- package/dist/src/gateway/restart-handler.d.ts +0 -14
- package/dist/src/gateway/restart-handler.js +0 -64
- package/dist/src/gateway/restart-handler.js.map +0 -1
- package/dist/src/gateway/security/flood-guard.d.ts +0 -28
- package/dist/src/gateway/security/flood-guard.js +0 -42
- package/dist/src/gateway/security/flood-guard.js.map +0 -1
- package/dist/src/infra/rate-limit.d.ts +0 -38
- package/dist/src/infra/rate-limit.js +0 -60
- package/dist/src/infra/rate-limit.js.map +0 -1
- package/dist/src/infra/restart-intent.d.ts +0 -13
- package/dist/src/infra/restart-intent.js +0 -40
- package/dist/src/infra/restart-intent.js.map +0 -1
- package/dist/src/infra/restart-sentinel.d.ts +0 -23
- package/dist/src/infra/restart-sentinel.js +0 -75
- package/dist/src/infra/restart-sentinel.js.map +0 -1
- package/skills/creative/canvas-design/LICENSE.txt +0 -202
- package/skills/creative/canvas-design/SKILL-zh.md +0 -130
- package/skills/creative/canvas-design/SKILL.md +0 -130
- package/skills/creative/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -94
- package/skills/creative/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Jura-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Lora-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/creative/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -93
- package/skills/creative/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
|
@@ -3,13 +3,5 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { Config } from '../../../config/schema.js';
|
|
5
5
|
import type { CLIContext } from '../../registry.js';
|
|
6
|
-
/**
|
|
7
|
-
* Configure Gateway WebUI
|
|
8
|
-
*/
|
|
9
6
|
export declare function setupGateway(config: Config): Promise<Config>;
|
|
10
|
-
/**
|
|
11
|
-
* Handle gateway startup after onboarding.
|
|
12
|
-
* In interactive mode, asks user if they want to start gateway in background.
|
|
13
|
-
* In non-interactive mode, provides guidance on how to start manually.
|
|
14
|
-
*/
|
|
15
7
|
export declare function startGatewayNow(config: Config, ctx: CLIContext): Promise<void>;
|
|
@@ -1,19 +1,12 @@
|
|
|
1
1
|
import { GatewayLockError, acquireGatewayLock } from "../../../gateway/lock.js";
|
|
2
|
-
import { spawn } from "child_process";
|
|
3
2
|
import { confirm } from "@inquirer/prompts";
|
|
4
3
|
//#region src/cli/commands/onboard/gateway.ts
|
|
5
4
|
/**
|
|
6
5
|
* Gateway Configuration and Startup for Onboarding
|
|
7
6
|
*/
|
|
8
|
-
/**
|
|
9
|
-
* Check if running in interactive mode
|
|
10
|
-
*/
|
|
11
7
|
function isInteractive() {
|
|
12
8
|
return process.stdin.isTTY && process.stdout.isTTY;
|
|
13
9
|
}
|
|
14
|
-
/**
|
|
15
|
-
* Configure Gateway WebUI
|
|
16
|
-
*/
|
|
17
10
|
async function setupGateway(config) {
|
|
18
11
|
console.log("\n🌐 Step: Gateway WebUI (Optional)\n");
|
|
19
12
|
if (!await confirm({
|
|
@@ -52,11 +45,30 @@ async function setupGateway(config) {
|
|
|
52
45
|
console.log(` Token: ${token.slice(0, 8)}...${token.slice(-8)}`);
|
|
53
46
|
return config;
|
|
54
47
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
48
|
+
async function installAndStartGatewayService(config, _ctx) {
|
|
49
|
+
const [{ resolveGatewayService, isDaemonAvailableAsync, getPlatformName }, { buildGatewayInstallArgs }] = await Promise.all([import("../../../daemon/service.js"), import("../../../daemon/install-plan.js")]);
|
|
50
|
+
if (!await isDaemonAvailableAsync()) {
|
|
51
|
+
console.log(`ℹ️ OS service not available on ${getPlatformName()}.`);
|
|
52
|
+
console.log(" Start manually with: xopc gateway");
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
const service = await resolveGatewayService();
|
|
56
|
+
const port = config.gateway?.port ?? 18790;
|
|
57
|
+
const bind = config.gateway?.bind ?? "loopback";
|
|
58
|
+
const token = config.gateway?.auth?.token;
|
|
59
|
+
if (!await service.isLoaded({ env: process.env }).catch(() => false)) {
|
|
60
|
+
const installArgs = buildGatewayInstallArgs({
|
|
61
|
+
port,
|
|
62
|
+
bind,
|
|
63
|
+
token
|
|
64
|
+
});
|
|
65
|
+
installArgs.stdout = process.stdout;
|
|
66
|
+
await service.install(installArgs);
|
|
67
|
+
}
|
|
68
|
+
const { startGatewayService } = await import("../../../daemon/service.js");
|
|
69
|
+
const result = await startGatewayService({ service });
|
|
70
|
+
return result.outcome === "started" || result.outcome === "scheduled";
|
|
71
|
+
}
|
|
60
72
|
async function startGatewayNow(config, ctx) {
|
|
61
73
|
const bind = config?.gateway?.bind ?? "loopback";
|
|
62
74
|
const port = config?.gateway?.port || 18790;
|
|
@@ -77,52 +89,39 @@ async function startGatewayNow(config, ctx) {
|
|
|
77
89
|
console.log("📝 To apply the new configuration, restart gateway:");
|
|
78
90
|
console.log(" xopc gateway restart");
|
|
79
91
|
} else if (isInteractive()) if (await confirm({
|
|
80
|
-
message: "
|
|
92
|
+
message: "Install and start Gateway as an OS service now?",
|
|
81
93
|
default: true
|
|
82
94
|
})) {
|
|
83
|
-
console.log("\n🚀
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
env: process.env
|
|
99
|
-
});
|
|
100
|
-
child.unref();
|
|
101
|
-
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
102
|
-
if (child.pid && !child.killed) {
|
|
103
|
-
console.log("✅ Gateway started in background");
|
|
104
|
-
console.log(` PID: ${child.pid}`);
|
|
105
|
-
console.log(` URL: http://${displayHost}:${port}`);
|
|
106
|
-
const token = config?.gateway?.auth?.token;
|
|
107
|
-
if (token) console.log(` Token: ${token.slice(0, 8)}...${token.slice(-8)}`);
|
|
108
|
-
} else {
|
|
109
|
-
console.log("⚠️ Failed to start gateway automatically.");
|
|
110
|
-
console.log(" You can start it manually with:");
|
|
111
|
-
console.log(` xopc gateway --background`);
|
|
95
|
+
console.log("\n🚀 Installing Gateway service...");
|
|
96
|
+
try {
|
|
97
|
+
if (await installAndStartGatewayService(config, ctx)) {
|
|
98
|
+
console.log("✅ Gateway service installed and started");
|
|
99
|
+
console.log(` URL: http://${displayHost}:${port}`);
|
|
100
|
+
const token = config?.gateway?.auth?.token;
|
|
101
|
+
if (token) console.log(` Token: ${token.slice(0, 8)}...${token.slice(-8)}`);
|
|
102
|
+
} else {
|
|
103
|
+
console.log("⚠️ Service install completed but start may need manual action.");
|
|
104
|
+
console.log(" Try: xopc gateway service start");
|
|
105
|
+
}
|
|
106
|
+
} catch (err) {
|
|
107
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
108
|
+
console.log(`⚠️ Failed to install/start gateway service: ${message}`);
|
|
109
|
+
console.log(" Start manually with: xopc gateway");
|
|
112
110
|
}
|
|
113
111
|
} else {
|
|
114
|
-
console.log("\n⏭️ Skipping gateway
|
|
115
|
-
console.log("
|
|
116
|
-
console.log(
|
|
112
|
+
console.log("\n⏭️ Skipping gateway service install.");
|
|
113
|
+
console.log(" Start in foreground with: xopc gateway");
|
|
114
|
+
console.log(" Or install service later: xopc gateway service install");
|
|
117
115
|
}
|
|
118
116
|
else {
|
|
119
117
|
console.log("\n🚀 Gateway is configured but not running.");
|
|
120
118
|
console.log("");
|
|
121
|
-
console.log("📝 To start
|
|
122
|
-
console.log(
|
|
119
|
+
console.log("📝 To install and start as an OS service:");
|
|
120
|
+
console.log(" xopc gateway service install");
|
|
121
|
+
console.log(" xopc gateway service start");
|
|
123
122
|
console.log("");
|
|
124
|
-
console.log("📝 To start in foreground (development
|
|
125
|
-
console.log(`
|
|
123
|
+
console.log("📝 To start in foreground (development):");
|
|
124
|
+
console.log(` xopc gateway --bind ${bind} --port ${port}`);
|
|
126
125
|
}
|
|
127
126
|
console.log("");
|
|
128
127
|
console.log("📚 Other useful commands:");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.js","names":[],"sources":["../../../../../src/cli/commands/onboard/gateway.ts"],"sourcesContent":["/**\n * Gateway Configuration and Startup for Onboarding\n */\n\nimport { confirm } from '@inquirer/prompts';\nimport
|
|
1
|
+
{"version":3,"file":"gateway.js","names":[],"sources":["../../../../../src/cli/commands/onboard/gateway.ts"],"sourcesContent":["/**\n * Gateway Configuration and Startup for Onboarding\n */\n\nimport { confirm } from '@inquirer/prompts';\nimport type { Config } from '../../../config/schema.js';\nimport type { CLIContext } from '../../registry.js';\nimport { acquireGatewayLock, GatewayLockError } from '../../../gateway/lock.js';\n\nfunction isInteractive(): boolean {\n return process.stdin.isTTY && process.stdout.isTTY;\n}\n\nexport async function setupGateway(config: Config): Promise<Config> {\n console.log('\\n🌐 Step: Gateway WebUI (Optional)\\n');\n\n const enableGateway = await confirm({\n message: 'Enable Gateway WebUI?',\n default: true,\n });\n\n if (!enableGateway) {\n config.gateway = config.gateway || {};\n config.gateway.auth = { mode: 'none' };\n console.log('ℹ️ Gateway disabled (auth mode set to none)');\n return config;\n }\n\n const existingToken = config?.gateway?.auth?.token;\n const existingMode = config?.gateway?.auth?.mode;\n\n if (existingToken && existingMode === 'token') {\n console.log('\\nℹ️ Gateway auth token already configured');\n const keepExisting = await confirm({\n message: 'Keep existing token?',\n default: true,\n });\n\n if (keepExisting) {\n console.log('✅ Keeping existing gateway configuration');\n return config;\n }\n }\n\n const crypto = await import('crypto');\n const token = crypto.randomBytes(24).toString('hex');\n\n config.gateway = config.gateway || {};\n config.gateway.bind = config.gateway.bind || 'loopback';\n config.gateway.port = config.gateway.port || 18790;\n config.gateway.auth = {\n mode: 'token',\n token,\n };\n\n console.log('\\n✅ Gateway configured:');\n console.log(` Bind: ${config.gateway.bind}`);\n console.log(` Port: ${config.gateway.port}`);\n console.log(` Auth: Token-based (auto-generated)`);\n console.log(` Token: ${token.slice(0, 8)}...${token.slice(-8)}`);\n\n return config;\n}\n\nasync function installAndStartGatewayService(config: Config, _ctx: CLIContext): Promise<boolean> {\n const [{ resolveGatewayService, isDaemonAvailableAsync, getPlatformName }, { buildGatewayInstallArgs }] =\n await Promise.all([\n import('../../../daemon/service.js'),\n import('../../../daemon/install-plan.js'),\n ]);\n\n const available = await isDaemonAvailableAsync();\n if (!available) {\n console.log(`ℹ️ OS service not available on ${getPlatformName()}.`);\n console.log(' Start manually with: xopc gateway');\n return false;\n }\n\n const service = await resolveGatewayService();\n const port = config.gateway?.port ?? 18790;\n const bind = config.gateway?.bind ?? 'loopback';\n const token = config.gateway?.auth?.token;\n\n const loaded = await service.isLoaded({ env: process.env }).catch(() => false);\n if (!loaded) {\n const installArgs = buildGatewayInstallArgs({ port, bind, token });\n installArgs.stdout = process.stdout;\n await service.install(installArgs);\n }\n\n const { startGatewayService } = await import('../../../daemon/service.js');\n const result = await startGatewayService({ service });\n return result.outcome === 'started' || result.outcome === 'scheduled';\n}\n\nexport async function startGatewayNow(config: Config, ctx: CLIContext): Promise<void> {\n const bind = config?.gateway?.bind ?? 'loopback';\n const port = config?.gateway?.port || 18790;\n const displayHost = bind === 'lan' ? 'localhost' : '127.0.0.1';\n\n let isRunning = false;\n try {\n const lock = await acquireGatewayLock(ctx.configPath, { timeoutMs: 100, port });\n await lock.release();\n } catch (err) {\n if (err instanceof GatewayLockError) {\n isRunning = true;\n }\n }\n\n if (isRunning) {\n console.log('\\n🌐 Gateway is already running!');\n console.log(` URL: http://${displayHost}:${port}`);\n console.log('');\n console.log('📝 To apply the new configuration, restart gateway:');\n console.log(' xopc gateway restart');\n } else if (isInteractive()) {\n const shouldInstall = await confirm({\n message: 'Install and start Gateway as an OS service now?',\n default: true,\n });\n\n if (shouldInstall) {\n console.log('\\n🚀 Installing Gateway service...');\n try {\n const started = await installAndStartGatewayService(config, ctx);\n if (started) {\n console.log('✅ Gateway service installed and started');\n console.log(` URL: http://${displayHost}:${port}`);\n const token = config?.gateway?.auth?.token;\n if (token) {\n console.log(` Token: ${token.slice(0, 8)}...${token.slice(-8)}`);\n }\n } else {\n console.log('⚠️ Service install completed but start may need manual action.');\n console.log(' Try: xopc gateway service start');\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n console.log(`⚠️ Failed to install/start gateway service: ${message}`);\n console.log(' Start manually with: xopc gateway');\n }\n } else {\n console.log('\\n⏭️ Skipping gateway service install.');\n console.log(' Start in foreground with: xopc gateway');\n console.log(' Or install service later: xopc gateway service install');\n }\n } else {\n console.log('\\n🚀 Gateway is configured but not running.');\n console.log('');\n console.log('📝 To install and start as an OS service:');\n console.log(' xopc gateway service install');\n console.log(' xopc gateway service start');\n console.log('');\n console.log('📝 To start in foreground (development):');\n console.log(` xopc gateway --bind ${bind} --port ${port}`);\n }\n\n console.log('');\n console.log('📚 Other useful commands:');\n console.log(' xopc gateway status # Check gateway status');\n console.log(' xopc gateway stop # Stop gateway');\n console.log(' xopc gateway restart # Restart gateway');\n console.log(' xopc gateway logs # View logs');\n}\n"],"mappings":"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"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { init_agent_scope, resolveAgentProfileDir, resolveDefaultAgentId } from "../../agent/agent-scope.js";
|
|
2
|
-
import { ConfigSchema, init_schema } from "../../config/schema.js";
|
|
3
2
|
import { WORKSPACE_FILES, init_paths } from "../../config/paths.js";
|
|
3
|
+
import { ConfigSchema, init_schema } from "../../config/schema.js";
|
|
4
4
|
import { saveConfig } from "../../config/loader.js";
|
|
5
5
|
import { isWeixinOnboardConfigured } from "../../../extensions/weixin/src/adapters/onboard-cli.js";
|
|
6
6
|
import { formatExamples, register } from "../registry.js";
|
|
7
7
|
import "../../config/index.js";
|
|
8
8
|
import { resolveGatewayLocalClientHost } from "../../config/gateway-bind.js";
|
|
9
9
|
import { seedMainAgentProfileMarkdown } from "../../agent/context/workspace-seed.js";
|
|
10
|
-
import { GatewayLockError, acquireGatewayLock } from "../../gateway/lock.js";
|
|
11
10
|
import { colors } from "../utils/colors.js";
|
|
12
11
|
import { initWorkspace } from "../utils/init-workspace.js";
|
|
13
12
|
import { setupModel } from "./onboard/model.js";
|
|
@@ -122,7 +121,9 @@ async function runOnboard(options, ctx) {
|
|
|
122
121
|
console.log(" xopc agent -m \"Hello\" # Chat with AI");
|
|
123
122
|
console.log(" xopc agent -i # Interactive mode");
|
|
124
123
|
console.log(" xopc models list # List models");
|
|
124
|
+
console.log(" xopc config validate # Validate xopc.json");
|
|
125
125
|
console.log(" xopc auth list # View authentication");
|
|
126
|
+
console.log(" xopc init # Full state dirs (if upgrading or missing data)");
|
|
126
127
|
console.log("\n📁 Files:");
|
|
127
128
|
console.log(" Config:", configPath);
|
|
128
129
|
console.log(" Workspace:", workspacePath);
|
|
@@ -130,64 +131,9 @@ async function runOnboard(options, ctx) {
|
|
|
130
131
|
if (isInteractive() && didConfigurableSteps) await promptLaunchAfterOnboard(config, ctx, { doChannels });
|
|
131
132
|
process.exit(0);
|
|
132
133
|
}
|
|
133
|
-
async function
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
const displayHost = bind === "lan" ? "localhost" : "127.0.0.1";
|
|
137
|
-
let isRunning = false;
|
|
138
|
-
try {
|
|
139
|
-
await (await acquireGatewayLock(ctx.configPath, {
|
|
140
|
-
timeoutMs: 100,
|
|
141
|
-
port
|
|
142
|
-
})).release();
|
|
143
|
-
} catch (err) {
|
|
144
|
-
if (err instanceof GatewayLockError) isRunning = true;
|
|
145
|
-
}
|
|
146
|
-
if (isRunning) {
|
|
147
|
-
console.log("\n🌐 Gateway is already running!");
|
|
148
|
-
console.log(` URL: http://${displayHost}:${port}`);
|
|
149
|
-
console.log("");
|
|
150
|
-
console.log("📝 To apply the new configuration, restart gateway:");
|
|
151
|
-
console.log(" xopc gateway restart");
|
|
152
|
-
} else {
|
|
153
|
-
console.log("\n🚀 Starting Gateway WebUI in background...");
|
|
154
|
-
console.log("");
|
|
155
|
-
const { spawn } = await import("child_process");
|
|
156
|
-
const args = [
|
|
157
|
-
...process.execArgv,
|
|
158
|
-
...process.argv.slice(1).filter((arg) => !arg.includes("onboard") && arg !== "--quick"),
|
|
159
|
-
"gateway",
|
|
160
|
-
"--background",
|
|
161
|
-
"--bind",
|
|
162
|
-
bind,
|
|
163
|
-
"--port",
|
|
164
|
-
String(port)
|
|
165
|
-
];
|
|
166
|
-
const child = spawn(process.execPath, args, {
|
|
167
|
-
detached: true,
|
|
168
|
-
stdio: "ignore",
|
|
169
|
-
env: process.env
|
|
170
|
-
});
|
|
171
|
-
child.unref();
|
|
172
|
-
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
173
|
-
if (child.pid && !child.killed) {
|
|
174
|
-
console.log("✅ Gateway started in background");
|
|
175
|
-
console.log(` PID: ${child.pid}`);
|
|
176
|
-
console.log(` URL: http://${displayHost}:${port}`);
|
|
177
|
-
const token = config.gateway?.auth?.token;
|
|
178
|
-
if (token) console.log(` Token: ${token.slice(0, 8)}...${token.slice(-8)}`);
|
|
179
|
-
} else {
|
|
180
|
-
console.log("⚠️ Failed to start gateway automatically.");
|
|
181
|
-
console.log(" Start manually with:");
|
|
182
|
-
console.log(" xopc gateway --background");
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
console.log("");
|
|
186
|
-
console.log("📚 Useful commands:");
|
|
187
|
-
console.log(" xopc gateway status # Check gateway status");
|
|
188
|
-
console.log(" xopc gateway stop # Stop gateway");
|
|
189
|
-
console.log(" xopc gateway restart # Restart gateway");
|
|
190
|
-
console.log(" xopc gateway logs # View logs");
|
|
134
|
+
async function startGatewayAsService(config, ctx) {
|
|
135
|
+
const { startGatewayNow } = await import("./onboard/gateway.js");
|
|
136
|
+
await startGatewayNow(config, ctx);
|
|
191
137
|
}
|
|
192
138
|
async function promptLaunchAfterOnboard(config, ctx, flags) {
|
|
193
139
|
console.log("");
|
|
@@ -201,8 +147,8 @@ async function promptLaunchAfterOnboard(config, ctx, flags) {
|
|
|
201
147
|
},
|
|
202
148
|
{
|
|
203
149
|
value: "gateway",
|
|
204
|
-
name: "Gateway WebUI (
|
|
205
|
-
description: "
|
|
150
|
+
name: "Gateway WebUI (OS service)",
|
|
151
|
+
description: "Install and start the HTTP gateway for the browser console"
|
|
206
152
|
},
|
|
207
153
|
{
|
|
208
154
|
value: "none",
|
|
@@ -213,7 +159,7 @@ async function promptLaunchAfterOnboard(config, ctx, flags) {
|
|
|
213
159
|
default: "tui"
|
|
214
160
|
});
|
|
215
161
|
if (choice === "gateway") {
|
|
216
|
-
await
|
|
162
|
+
await startGatewayAsService(config, ctx);
|
|
217
163
|
return;
|
|
218
164
|
}
|
|
219
165
|
if (choice === "tui") {
|
|
@@ -223,7 +169,8 @@ async function promptLaunchAfterOnboard(config, ctx, flags) {
|
|
|
223
169
|
return;
|
|
224
170
|
}
|
|
225
171
|
console.log("\n⏭️ You can start later:");
|
|
226
|
-
console.log(" xopc gateway
|
|
172
|
+
console.log(" xopc gateway service install");
|
|
173
|
+
console.log(" xopc gateway");
|
|
227
174
|
console.log(" xopc tui --local");
|
|
228
175
|
}
|
|
229
176
|
async function setupGateway(config) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboard.js","names":["runModelSetup","runChannelOnboard"],"sources":["../../../../src/cli/commands/onboard.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { join } from 'path';\nimport { select } from '@inquirer/prompts';\nimport { saveConfig } from '../../config/index.js';\nimport { register, formatExamples } from '../registry.js';\nimport type { CLIContext } from '../registry.js';\nimport type { Config } from '../../config/schema.js';\nimport { setupModel as runModelSetup } from './onboard/model.js';\nimport { colors } from '../utils/colors.js';\nimport { acquireGatewayLock, GatewayLockError } from '../../gateway/lock.js';\nimport { setupChannels as runChannelOnboard, getChannelConfigurators } from './onboard/channels/index.js';\nimport { seedMainAgentProfileMarkdown } from '../../agent/context/workspace-seed.js';\nimport { resolveDefaultAgentId, resolveAgentProfileDir } from '../../agent/agent-scope.js';\nimport { WORKSPACE_FILES } from '../../config/paths.js';\nimport { resolveGatewayLocalClientHost } from '../../config/gateway-bind.js';\nimport { initWorkspace } from '../utils/init-workspace.js';\nimport { ConfigSchema } from '../../config/schema.js';\nimport { isWeixinOnboardConfigured } from '../../../extensions/weixin/src/adapters/onboard-cli.js';\n\nfunction isInteractive(): boolean {\n return process.stdin.isTTY && process.stdout.isTTY;\n}\n\nasync function setupNonInteractive(_configPath: string, existingConfig: Config): Promise<Config> {\n console.log('\\n🤖 AI Model Configuration (Non-Interactive Mode)\\n');\n console.log('Current config:', JSON.stringify(existingConfig.agents?.defaults?.model, null, 2));\n console.log('\\n💡 To configure in interactive mode, run: xopc onboard');\n console.log('💡 Or set up manually in:', _configPath);\n return existingConfig;\n}\n\nfunction createOnboardCommand(ctx: CLIContext): Command {\n const cmd = new Command('onboard')\n .description('Interactive setup wizard for xopc (gateway uses schema defaults)')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc onboard # Full interactive setup',\n 'xopc onboard --model # Configure LLM model only',\n 'xopc onboard --channels # Configure channels (incl. Weixin QR)',\n 'xopc onboard --gateway # Apply default gateway settings (quiet)',\n ])\n )\n .option('--model', 'Configure LLM provider and model')\n .option('--channels', 'Configure messaging channels')\n .option('--gateway', 'Configure gateway WebUI')\n .option('--all', 'Configure everything (default)')\n .action(async (options) => {\n try {\n await runOnboard(options, ctx);\n } catch (error: unknown) {\n const err = error as { name?: string; code?: string };\n if (err?.name === 'ExitPromptError' || err?.code === 'EXIT_PROMPT') {\n console.log('\\n\\n👋 Setup cancelled.');\n process.exit(0);\n }\n throw error;\n }\n });\n\n return cmd;\n}\n\ntype OnboardOptions = {\n model?: boolean;\n channels?: boolean;\n gateway?: boolean;\n all?: boolean;\n};\n\nasync function runOnboard(\n options: OnboardOptions,\n ctx: CLIContext\n): Promise<void> {\n console.log(colors.cyan('\\n🚀 Welcome to xopc setup!\\n'));\n console.log('═'.repeat(50));\n\n const workspacePath = ctx.workspacePath;\n const configPath = ctx.configPath;\n\n const initResult = await initWorkspace({ configPath, workspacePath });\n let config = initResult.config;\n\n // Determine what to configure based on options\n const doModel = options.model || options.all || (!options.channels && !options.gateway);\n const doChannels = options.channels || options.all || (!options.model && !options.gateway);\n const doGateway = options.gateway || options.all || (!options.model && !options.channels);\n const runFullWizard = !options.model && !options.channels && !options.gateway;\n /** Any setup step besides the unified launch prompt ran in interactive flow. */\n const didConfigurableSteps = doModel || doChannels || doGateway;\n\n if (!isInteractive()) {\n // Non-interactive mode\n if (doModel) {\n config = await setupNonInteractive(configPath, config);\n }\n if (doChannels) {\n console.log('\\n💬 Channels Configuration (Non-Interactive Mode)\\n');\n console.log('💡 To configure channels, edit the config file manually.');\n }\n if (doGateway) {\n console.log('\\n🌐 Gateway Configuration (Non-Interactive Mode)\\n');\n console.log('💡 To configure gateway, edit the config file manually.');\n }\n } else {\n // Interactive mode\n if (doModel) {\n config = await runModelSetup(config, ctx);\n }\n\n if (doChannels) {\n const channelIds = getChannelConfigurators().map(c => c.id);\n console.log(colors.gray(`\\nChannel onboarding: ${channelIds.join(', ')}\\n`));\n config = await runChannelOnboard(config);\n }\n\n if (doGateway) {\n config = await setupGateway(config);\n }\n }\n\n // Save config once at the end\n await saveConfig(config as Config, configPath);\n\n seedMainAgentProfileMarkdown(config as Config);\n\n console.log('\\n' + '═'.repeat(50));\n console.log('\\n🎉 Setup Complete!\\n');\n\n const gatewayAuth = (config as any)?.gateway?.auth;\n const gatewayConfigured =\n gatewayAuth?.mode === 'token' &&\n typeof gatewayAuth?.token === 'string' &&\n gatewayAuth.token.length > 0;\n const port = (config as Config)?.gateway?.port ?? 18790;\n const displayHost = resolveGatewayLocalClientHost(config as Config);\n const gwToken = gatewayConfigured ? (gatewayAuth.token as string) : undefined;\n\n const showGatewaySummary = Boolean(gatewayConfigured && gwToken && (doGateway || runFullWizard));\n\n if (showGatewaySummary && gwToken) {\n const webuiUrl = `http://${displayHost}:${port}?token=${gwToken}`;\n console.log('🌐 Web console (browser) — start here');\n console.log(` Open: http://${displayHost}:${port}`);\n console.log(` Token: ${gwToken.slice(0, 8)}...${gwToken.slice(-8)}`);\n console.log(' Bookmark link (token is saved in the browser when you open it):');\n console.log(` ${webuiUrl}`);\n console.log('');\n }\n\n if (runFullWizard) {\n console.log('🚀 Next steps:');\n if (gatewayConfigured) {\n console.log(' 1. Choose how to launch below (gateway or terminal UI)');\n console.log(' 2. Or chat with: xopc agent -i');\n console.log(' 3. Optional: read BOOTSTRAP.md in your workspace for workspace tips');\n } else {\n console.log(' 1. Chat in the terminal: xopc agent -i');\n console.log(' 2. Optional: add the Web console: xopc onboard --gateway');\n console.log(' 3. Optional: read BOOTSTRAP.md in your workspace');\n }\n console.log('');\n } else if (doGateway && gatewayConfigured) {\n console.log('🚀 Next step:');\n console.log(' Start the gateway if it is not running, then open the Web console URL above.');\n console.log('');\n }\n\n console.log('📝 Usage:');\n console.log(' xopc agent -m \"Hello\" # Chat with AI');\n console.log(' xopc agent -i # Interactive mode');\n console.log(' xopc models list # List models');\n console.log(' xopc auth list # View authentication');\n\n console.log('\\n📁 Files:');\n console.log(' Config:', configPath);\n console.log(' Workspace:', workspacePath);\n if (runFullWizard) {\n console.log(\n ' BOOTSTRAP.md (origin story):',\n join(resolveAgentProfileDir(config as Config, resolveDefaultAgentId(config as Config)), WORKSPACE_FILES.BOOTSTRAP),\n );\n }\n\n if (isInteractive() && didConfigurableSteps) {\n await promptLaunchAfterOnboard(config as Config, ctx, { doChannels });\n }\n\n process.exit(0);\n}\n\nasync function startGatewayInBackground(config: Config, ctx: CLIContext): Promise<void> {\n const bind = (config as { gateway?: { bind?: string } }).gateway?.bind ?? 'loopback';\n const port = (config as { gateway?: { port?: number } }).gateway?.port ?? 18790;\n const displayHost = bind === 'lan' ? 'localhost' : '127.0.0.1';\n\n let isRunning = false;\n try {\n const lock = await acquireGatewayLock(ctx.configPath, { timeoutMs: 100, port });\n await lock.release();\n } catch (err) {\n if (err instanceof GatewayLockError) {\n isRunning = true;\n }\n }\n\n if (isRunning) {\n console.log('\\n🌐 Gateway is already running!');\n console.log(` URL: http://${displayHost}:${port}`);\n console.log('');\n console.log('📝 To apply the new configuration, restart gateway:');\n console.log(' xopc gateway restart');\n } else {\n console.log('\\n🚀 Starting Gateway WebUI in background...');\n console.log('');\n\n const { spawn } = await import('child_process');\n const args = [\n ...process.execArgv,\n ...process.argv.slice(1).filter((arg) => !arg.includes('onboard') && arg !== '--quick'),\n 'gateway',\n '--background',\n '--bind',\n bind,\n '--port',\n String(port),\n ];\n\n const child = spawn(process.execPath, args, {\n detached: true,\n stdio: 'ignore',\n env: process.env,\n });\n\n child.unref();\n\n await new Promise((resolve) => setTimeout(resolve, 500));\n\n if (child.pid && !child.killed) {\n console.log('✅ Gateway started in background');\n console.log(` PID: ${child.pid}`);\n console.log(` URL: http://${displayHost}:${port}`);\n const token = (config as { gateway?: { auth?: { token?: string } } }).gateway?.auth?.token;\n if (token) {\n console.log(` Token: ${token.slice(0, 8)}...${token.slice(-8)}`);\n }\n } else {\n console.log('⚠️ Failed to start gateway automatically.');\n console.log(' Start manually with:');\n console.log(' xopc gateway --background');\n }\n }\n\n console.log('');\n console.log('📚 Useful commands:');\n console.log(' xopc gateway status # Check gateway status');\n console.log(' xopc gateway stop # Stop gateway');\n console.log(' xopc gateway restart # Restart gateway');\n console.log(' xopc gateway logs # View logs');\n}\n\nasync function promptLaunchAfterOnboard(\n config: Config,\n ctx: CLIContext,\n flags: { doChannels: boolean },\n): Promise<void> {\n console.log('');\n const choice = await select<'tui' | 'gateway' | 'none'>({\n message: 'How do you want to launch xopc now?',\n choices: [\n {\n value: 'tui',\n name: 'Terminal UI (embedded)',\n description: 'xopc tui --local — no gateway process required',\n },\n {\n value: 'gateway',\n name: 'Gateway WebUI (background)',\n description: 'Start the HTTP gateway for the browser console',\n },\n {\n value: 'none',\n name: 'Exit — I will start manually',\n description: 'Finish setup without starting a runtime',\n },\n ],\n default: 'tui',\n });\n\n if (choice === 'gateway') {\n await startGatewayInBackground(config, ctx);\n return;\n }\n\n if (choice === 'tui') {\n if (flags.doChannels && !isWeixinOnboardConfigured(config)) {\n console.log(\n colors.gray(\n '\\n💡 Weixin is not logged in yet. When ready run: xopc channels login --channel weixin\\n',\n ),\n );\n }\n const { runTui } = await import('../../tui/tui.js');\n await runTui({ local: true });\n return;\n }\n\n console.log('\\n⏭️ You can start later:');\n console.log(' xopc gateway --background');\n console.log(' xopc tui --local');\n}\n\nasync function setupGateway(config: Config): Promise<Config> {\n console.log(colors.cyan('\\n🌐 Gateway WebUI\\n'));\n console.log(\n colors.gray(\n 'Applying defaults from config schema (127.0.0.1:18790, token auth; token generated if missing).\\n',\n ),\n );\n\n const gw = config.gateway ?? {};\n const { randomBytes } = await import('node:crypto');\n const authMode = gw.auth?.mode === 'none' ? ('none' as const) : ('token' as const);\n const token =\n authMode === 'token'\n ? typeof gw.auth?.token === 'string' && gw.auth.token.length > 0\n ? gw.auth.token\n : randomBytes(24).toString('hex')\n : undefined;\n\n const merged: Config = {\n ...config,\n gateway: {\n ...gw,\n bind: gw.bind ?? 'loopback',\n port: gw.port ?? 18790,\n auth:\n authMode === 'none'\n ? { mode: 'none' as const }\n : { mode: 'token' as const, token: token! },\n },\n };\n\n const parsed = ConfigSchema.parse(merged);\n console.log('✅ Gateway defaults applied.\\n');\n return parsed;\n}\n\nregister({\n id: 'onboard',\n name: 'onboard',\n description: 'Interactive setup wizard',\n factory: createOnboardCommand,\n metadata: {\n category: 'setup',\n examples: ['xopc onboard', 'xopc onboard --model', 'xopc onboard --channels'],\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"onboard.js","names":["runModelSetup","runChannelOnboard"],"sources":["../../../../src/cli/commands/onboard.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { join } from 'path';\nimport { select } from '@inquirer/prompts';\nimport { saveConfig } from '../../config/index.js';\nimport { register, formatExamples } from '../registry.js';\nimport type { CLIContext } from '../registry.js';\nimport type { Config } from '../../config/schema.js';\nimport { setupModel as runModelSetup } from './onboard/model.js';\nimport { colors } from '../utils/colors.js';\nimport { setupChannels as runChannelOnboard, getChannelConfigurators } from './onboard/channels/index.js';\nimport { seedMainAgentProfileMarkdown } from '../../agent/context/workspace-seed.js';\nimport { resolveDefaultAgentId, resolveAgentProfileDir } from '../../agent/agent-scope.js';\nimport { WORKSPACE_FILES } from '../../config/paths.js';\nimport { resolveGatewayLocalClientHost } from '../../config/gateway-bind.js';\nimport { initWorkspace } from '../utils/init-workspace.js';\nimport { ConfigSchema } from '../../config/schema.js';\nimport { isWeixinOnboardConfigured } from '../../../extensions/weixin/src/adapters/onboard-cli.js';\n\nfunction isInteractive(): boolean {\n return process.stdin.isTTY && process.stdout.isTTY;\n}\n\nasync function setupNonInteractive(_configPath: string, existingConfig: Config): Promise<Config> {\n console.log('\\n🤖 AI Model Configuration (Non-Interactive Mode)\\n');\n console.log('Current config:', JSON.stringify(existingConfig.agents?.defaults?.model, null, 2));\n console.log('\\n💡 To configure in interactive mode, run: xopc onboard');\n console.log('💡 Or set up manually in:', _configPath);\n return existingConfig;\n}\n\nfunction createOnboardCommand(ctx: CLIContext): Command {\n const cmd = new Command('onboard')\n .description('Interactive setup wizard for xopc (gateway uses schema defaults)')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc onboard # Full interactive setup',\n 'xopc onboard --model # Configure LLM model only',\n 'xopc onboard --channels # Configure channels (incl. Weixin QR)',\n 'xopc onboard --gateway # Apply default gateway settings (quiet)',\n ])\n )\n .option('--model', 'Configure LLM provider and model')\n .option('--channels', 'Configure messaging channels')\n .option('--gateway', 'Configure gateway WebUI')\n .option('--all', 'Configure everything (default)')\n .action(async (options) => {\n try {\n await runOnboard(options, ctx);\n } catch (error: unknown) {\n const err = error as { name?: string; code?: string };\n if (err?.name === 'ExitPromptError' || err?.code === 'EXIT_PROMPT') {\n console.log('\\n\\n👋 Setup cancelled.');\n process.exit(0);\n }\n throw error;\n }\n });\n\n return cmd;\n}\n\ntype OnboardOptions = {\n model?: boolean;\n channels?: boolean;\n gateway?: boolean;\n all?: boolean;\n};\n\nasync function runOnboard(\n options: OnboardOptions,\n ctx: CLIContext\n): Promise<void> {\n console.log(colors.cyan('\\n🚀 Welcome to xopc setup!\\n'));\n console.log('═'.repeat(50));\n\n const workspacePath = ctx.workspacePath;\n const configPath = ctx.configPath;\n\n const initResult = await initWorkspace({ configPath, workspacePath });\n let config = initResult.config;\n\n // Determine what to configure based on options\n const doModel = options.model || options.all || (!options.channels && !options.gateway);\n const doChannels = options.channels || options.all || (!options.model && !options.gateway);\n const doGateway = options.gateway || options.all || (!options.model && !options.channels);\n const runFullWizard = !options.model && !options.channels && !options.gateway;\n /** Any setup step besides the unified launch prompt ran in interactive flow. */\n const didConfigurableSteps = doModel || doChannels || doGateway;\n\n if (!isInteractive()) {\n // Non-interactive mode\n if (doModel) {\n config = await setupNonInteractive(configPath, config);\n }\n if (doChannels) {\n console.log('\\n💬 Channels Configuration (Non-Interactive Mode)\\n');\n console.log('💡 To configure channels, edit the config file manually.');\n }\n if (doGateway) {\n console.log('\\n🌐 Gateway Configuration (Non-Interactive Mode)\\n');\n console.log('💡 To configure gateway, edit the config file manually.');\n }\n } else {\n // Interactive mode\n if (doModel) {\n config = await runModelSetup(config, ctx);\n }\n\n if (doChannels) {\n const channelIds = getChannelConfigurators().map(c => c.id);\n console.log(colors.gray(`\\nChannel onboarding: ${channelIds.join(', ')}\\n`));\n config = await runChannelOnboard(config);\n }\n\n if (doGateway) {\n config = await setupGateway(config);\n }\n }\n\n // Save config once at the end\n await saveConfig(config as Config, configPath);\n\n seedMainAgentProfileMarkdown(config as Config);\n\n console.log('\\n' + '═'.repeat(50));\n console.log('\\n🎉 Setup Complete!\\n');\n\n const gatewayAuth = (config as any)?.gateway?.auth;\n const gatewayConfigured =\n gatewayAuth?.mode === 'token' &&\n typeof gatewayAuth?.token === 'string' &&\n gatewayAuth.token.length > 0;\n const port = (config as Config)?.gateway?.port ?? 18790;\n const displayHost = resolveGatewayLocalClientHost(config as Config);\n const gwToken = gatewayConfigured ? (gatewayAuth.token as string) : undefined;\n\n const showGatewaySummary = Boolean(gatewayConfigured && gwToken && (doGateway || runFullWizard));\n\n if (showGatewaySummary && gwToken) {\n const webuiUrl = `http://${displayHost}:${port}?token=${gwToken}`;\n console.log('🌐 Web console (browser) — start here');\n console.log(` Open: http://${displayHost}:${port}`);\n console.log(` Token: ${gwToken.slice(0, 8)}...${gwToken.slice(-8)}`);\n console.log(' Bookmark link (token is saved in the browser when you open it):');\n console.log(` ${webuiUrl}`);\n console.log('');\n }\n\n if (runFullWizard) {\n console.log('🚀 Next steps:');\n if (gatewayConfigured) {\n console.log(' 1. Choose how to launch below (gateway or terminal UI)');\n console.log(' 2. Or chat with: xopc agent -i');\n console.log(' 3. Optional: read BOOTSTRAP.md in your workspace for workspace tips');\n } else {\n console.log(' 1. Chat in the terminal: xopc agent -i');\n console.log(' 2. Optional: add the Web console: xopc onboard --gateway');\n console.log(' 3. Optional: read BOOTSTRAP.md in your workspace');\n }\n console.log('');\n } else if (doGateway && gatewayConfigured) {\n console.log('🚀 Next step:');\n console.log(' Start the gateway if it is not running, then open the Web console URL above.');\n console.log('');\n }\n\n console.log('📝 Usage:');\n console.log(' xopc agent -m \"Hello\" # Chat with AI');\n console.log(' xopc agent -i # Interactive mode');\n console.log(' xopc models list # List models');\n console.log(' xopc config validate # Validate xopc.json');\n console.log(' xopc auth list # View authentication');\n console.log(' xopc init # Full state dirs (if upgrading or missing data)');\n\n console.log('\\n📁 Files:');\n console.log(' Config:', configPath);\n console.log(' Workspace:', workspacePath);\n if (runFullWizard) {\n console.log(\n ' BOOTSTRAP.md (origin story):',\n join(resolveAgentProfileDir(config as Config, resolveDefaultAgentId(config as Config)), WORKSPACE_FILES.BOOTSTRAP),\n );\n }\n\n if (isInteractive() && didConfigurableSteps) {\n await promptLaunchAfterOnboard(config as Config, ctx, { doChannels });\n }\n\n process.exit(0);\n}\n\nasync function startGatewayAsService(config: Config, ctx: CLIContext): Promise<void> {\n const { startGatewayNow } = await import('./onboard/gateway.js');\n await startGatewayNow(config, ctx);\n}\n\nasync function promptLaunchAfterOnboard(\n config: Config,\n ctx: CLIContext,\n flags: { doChannels: boolean },\n): Promise<void> {\n console.log('');\n const choice = await select<'tui' | 'gateway' | 'none'>({\n message: 'How do you want to launch xopc now?',\n choices: [\n {\n value: 'tui',\n name: 'Terminal UI (embedded)',\n description: 'xopc tui --local — no gateway process required',\n },\n {\n value: 'gateway',\n name: 'Gateway WebUI (OS service)',\n description: 'Install and start the HTTP gateway for the browser console',\n },\n {\n value: 'none',\n name: 'Exit — I will start manually',\n description: 'Finish setup without starting a runtime',\n },\n ],\n default: 'tui',\n });\n\n if (choice === 'gateway') {\n await startGatewayAsService(config, ctx);\n return;\n }\n\n if (choice === 'tui') {\n if (flags.doChannels && !isWeixinOnboardConfigured(config)) {\n console.log(\n colors.gray(\n '\\n💡 Weixin is not logged in yet. When ready run: xopc channels login --channel weixin\\n',\n ),\n );\n }\n const { runTui } = await import('../../tui/tui.js');\n await runTui({ local: true });\n return;\n }\n\n console.log('\\n⏭️ You can start later:');\n console.log(' xopc gateway service install');\n console.log(' xopc gateway');\n console.log(' xopc tui --local');\n}\n\nasync function setupGateway(config: Config): Promise<Config> {\n console.log(colors.cyan('\\n🌐 Gateway WebUI\\n'));\n console.log(\n colors.gray(\n 'Applying defaults from config schema (127.0.0.1:18790, token auth; token generated if missing).\\n',\n ),\n );\n\n const gw = config.gateway ?? {};\n const { randomBytes } = await import('node:crypto');\n const authMode = gw.auth?.mode === 'none' ? ('none' as const) : ('token' as const);\n const token =\n authMode === 'token'\n ? typeof gw.auth?.token === 'string' && gw.auth.token.length > 0\n ? gw.auth.token\n : randomBytes(24).toString('hex')\n : undefined;\n\n const merged: Config = {\n ...config,\n gateway: {\n ...gw,\n bind: gw.bind ?? 'loopback',\n port: gw.port ?? 18790,\n auth:\n authMode === 'none'\n ? { mode: 'none' as const }\n : { mode: 'token' as const, token: token! },\n },\n };\n\n const parsed = ConfigSchema.parse(merged);\n console.log('✅ Gateway defaults applied.\\n');\n return parsed;\n}\n\nregister({\n id: 'onboard',\n name: 'onboard',\n description: 'Interactive setup wizard',\n factory: createOnboardCommand,\n metadata: {\n category: 'setup',\n examples: ['xopc onboard', 'xopc onboard --model', 'xopc onboard --channels'],\n },\n});\n"],"mappings":"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"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export
|
|
5
|
-
export declare function createProfileSwitchCommand(): Command;
|
|
6
|
-
export declare function registerProfileCommands(program: Command): void;
|
|
2
|
+
import { type CLIContext } from '../registry.js';
|
|
3
|
+
declare function createProfileCommand(_ctx: CLIContext): Command;
|
|
4
|
+
export { createProfileCommand };
|
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import {
|
|
3
|
+
import { formatExamples, register } from "../registry.js";
|
|
4
|
+
import { createProfile, deleteProfile, getCurrentProfile, getSwitchCommand, listProfiles, resolveProfileStateDir } from "../../config/profile.js";
|
|
4
5
|
import { colors } from "../utils/colors.js";
|
|
5
6
|
import { Command } from "commander";
|
|
6
7
|
import Table from "cli-table3";
|
|
7
8
|
//#region src/cli/commands/profile.ts
|
|
8
9
|
init_logger();
|
|
9
10
|
const log = createLogger("ProfileCommands");
|
|
10
|
-
function
|
|
11
|
-
|
|
11
|
+
function createProfileCommand(_ctx) {
|
|
12
|
+
const cmd = new Command("profile").description("Manage xopc state profiles (~/.xopc vs ~/.xopc-<name>)").addHelpText("after", formatExamples([
|
|
13
|
+
"xopc profile list",
|
|
14
|
+
"xopc profile create staging",
|
|
15
|
+
"xopc profile switch staging",
|
|
16
|
+
"xopc profile delete staging --force"
|
|
17
|
+
]));
|
|
18
|
+
cmd.command("list").description("List all profiles").option("--json", "Output as JSON").action(async (options) => {
|
|
12
19
|
try {
|
|
13
20
|
const profiles = await listProfiles();
|
|
14
21
|
if (options.json) {
|
|
@@ -16,7 +23,7 @@ function createProfileListCommand() {
|
|
|
16
23
|
return;
|
|
17
24
|
}
|
|
18
25
|
if (profiles.length === 0) {
|
|
19
|
-
console.log("No profiles found. Create one with: xopc profile
|
|
26
|
+
console.log("No profiles found. Create one with: xopc profile create <name>");
|
|
20
27
|
return;
|
|
21
28
|
}
|
|
22
29
|
const table = new Table({
|
|
@@ -53,26 +60,20 @@ function createProfileListCommand() {
|
|
|
53
60
|
process.exit(1);
|
|
54
61
|
}
|
|
55
62
|
});
|
|
56
|
-
|
|
57
|
-
function createProfileCreateCommand() {
|
|
58
|
-
return new Command("profile:create").description("Create a new profile").argument("<name>", "Profile name (letters, numbers, hyphens, underscores)").action(async (name) => {
|
|
63
|
+
cmd.command("create").description("Create a new profile").argument("<name>", "Profile name (letters, numbers, hyphens, underscores)").action(async (name) => {
|
|
59
64
|
try {
|
|
60
65
|
const profile = await createProfile(name);
|
|
61
66
|
console.log(colors.green("✓"), `Created profile "${profile.name}"`);
|
|
62
67
|
console.log(`\n Directory: ${profile.stateDir}`);
|
|
63
|
-
console.log(
|
|
64
|
-
console.log(`
|
|
65
|
-
console.log(`\nOr add to your shell profile:`);
|
|
66
|
-
console.log(` echo 'export XOPC_PROFILE=${profile.name}' >> ~/.bashrc`);
|
|
68
|
+
console.log("\nTo use this profile:");
|
|
69
|
+
console.log(` ${getSwitchCommand(profile.name)}`);
|
|
67
70
|
} catch (error) {
|
|
68
71
|
log.error({ error }, "Failed to create profile");
|
|
69
72
|
console.error(colors.red("Error:"), error instanceof Error ? error.message : String(error));
|
|
70
73
|
process.exit(1);
|
|
71
74
|
}
|
|
72
75
|
});
|
|
73
|
-
|
|
74
|
-
function createProfileDeleteCommand() {
|
|
75
|
-
return new Command("profile:delete").description("Delete a profile").argument("<name>", "Profile name").option("-f, --force", "Force delete even if active").action(async (name, options) => {
|
|
76
|
+
cmd.command("delete").description("Delete a profile").argument("<name>", "Profile name").option("-f, --force", "Force delete even if active").action(async (name, options) => {
|
|
76
77
|
try {
|
|
77
78
|
await deleteProfile(name, { force: options.force });
|
|
78
79
|
console.log(colors.green("✓"), `Deleted profile "${name}"`);
|
|
@@ -82,38 +83,37 @@ function createProfileDeleteCommand() {
|
|
|
82
83
|
process.exit(1);
|
|
83
84
|
}
|
|
84
85
|
});
|
|
85
|
-
|
|
86
|
-
function createProfileSwitchCommand() {
|
|
87
|
-
return new Command("profile:switch").description("Get shell command to switch to a profile").argument("<name>", "Profile name").action(async (name) => {
|
|
86
|
+
cmd.command("switch").description("Print shell command to switch to a profile").argument("<name>", "Profile name").action(async (name) => {
|
|
88
87
|
try {
|
|
89
|
-
const stateDir = resolveProfileStateDir(name);
|
|
90
88
|
if (!(await listProfiles()).some((p) => p.name === name)) {
|
|
91
89
|
console.error(colors.red("Error:"), `Profile "${name}" not found`);
|
|
92
|
-
console.log(`\nCreate it with: xopc profile
|
|
90
|
+
console.log(`\nCreate it with: xopc profile create ${name}`);
|
|
93
91
|
process.exit(1);
|
|
94
92
|
}
|
|
95
93
|
console.log(colors.cyan("Run this command to switch to this profile:"));
|
|
96
94
|
console.log();
|
|
97
|
-
console.log(`
|
|
95
|
+
console.log(` ${getSwitchCommand(name)}`);
|
|
98
96
|
console.log();
|
|
99
|
-
console.log(
|
|
100
|
-
console.log(` echo 'export XOPC_PROFILE=${name}' >> ~/.bashrc`);
|
|
101
|
-
console.log();
|
|
102
|
-
console.log(`State directory: ${stateDir}`);
|
|
97
|
+
console.log(`State directory: ${resolveProfileStateDir(name)}`);
|
|
103
98
|
} catch (error) {
|
|
104
99
|
log.error({ error }, "Failed to switch profile");
|
|
105
100
|
console.error(colors.red("Error:"), error instanceof Error ? error.message : String(error));
|
|
106
101
|
process.exit(1);
|
|
107
102
|
}
|
|
108
103
|
});
|
|
104
|
+
return cmd;
|
|
109
105
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
106
|
+
register({
|
|
107
|
+
id: "profile",
|
|
108
|
+
name: "profile",
|
|
109
|
+
description: "Manage xopc state profiles (~/.xopc vs ~/.xopc-<name>)",
|
|
110
|
+
factory: createProfileCommand,
|
|
111
|
+
metadata: {
|
|
112
|
+
category: "setup",
|
|
113
|
+
examples: ["xopc profile list", "xopc profile create staging"]
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
116
|
//#endregion
|
|
117
|
-
export {
|
|
117
|
+
export { createProfileCommand };
|
|
118
118
|
|
|
119
119
|
//# sourceMappingURL=profile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","names":[],"sources":["../../../../src/cli/commands/profile.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { createLogger } from '../../utils/logger.js';\nimport {\n
|
|
1
|
+
{"version":3,"file":"profile.js","names":[],"sources":["../../../../src/cli/commands/profile.ts"],"sourcesContent":["import { Command } from 'commander';\nimport Table from 'cli-table3';\n\nimport { createLogger } from '../../utils/logger.js';\nimport {\n createProfile,\n deleteProfile,\n getCurrentProfile,\n getSwitchCommand,\n listProfiles,\n resolveProfileStateDir,\n} from '../../config/profile.js';\nimport { formatExamples, register, type CLIContext } from '../registry.js';\nimport { colors } from '../utils/colors.js';\n\nconst log = createLogger('ProfileCommands');\n\nfunction createProfileCommand(_ctx: CLIContext): Command {\n const cmd = new Command('profile')\n .description('Manage xopc state profiles (~/.xopc vs ~/.xopc-<name>)')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc profile list',\n 'xopc profile create staging',\n 'xopc profile switch staging',\n 'xopc profile delete staging --force',\n ]),\n );\n\n cmd\n .command('list')\n .description('List all profiles')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const profiles = await listProfiles();\n\n if (options.json) {\n console.log(JSON.stringify(profiles, null, 2));\n return;\n }\n\n if (profiles.length === 0) {\n console.log('No profiles found. Create one with: xopc profile create <name>');\n return;\n }\n\n const table = new Table({\n head: ['Name', 'Status', 'Agents', 'Created', 'Directory'].map((h) => colors.cyan(h)),\n colWidths: [15, 10, 8, 20, 40],\n });\n\n for (const profile of profiles) {\n const status = profile.isActive ? colors.green('active') : colors.gray('inactive');\n table.push([\n profile.name === 'default' ? colors.yellow(profile.name) : profile.name,\n status,\n profile.agentCount.toString(),\n profile.createdAt ? new Date(profile.createdAt).toLocaleDateString() : '-',\n profile.stateDir,\n ]);\n }\n\n console.log(table.toString());\n console.log(`\\nCurrent: ${getCurrentProfile()}`);\n } catch (error) {\n log.error({ error }, 'Failed to list profiles');\n console.error(colors.red('Error:'), error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n cmd\n .command('create')\n .description('Create a new profile')\n .argument('<name>', 'Profile name (letters, numbers, hyphens, underscores)')\n .action(async (name) => {\n try {\n const profile = await createProfile(name);\n\n console.log(colors.green('✓'), `Created profile \"${profile.name}\"`);\n console.log(`\\n Directory: ${profile.stateDir}`);\n console.log('\\nTo use this profile:');\n console.log(` ${getSwitchCommand(profile.name)}`);\n } catch (error) {\n log.error({ error }, 'Failed to create profile');\n console.error(colors.red('Error:'), error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n cmd\n .command('delete')\n .description('Delete a profile')\n .argument('<name>', 'Profile name')\n .option('-f, --force', 'Force delete even if active')\n .action(async (name, options) => {\n try {\n await deleteProfile(name, { force: options.force });\n console.log(colors.green('✓'), `Deleted profile \"${name}\"`);\n } catch (error) {\n log.error({ error }, 'Failed to delete profile');\n console.error(colors.red('Error:'), error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n cmd\n .command('switch')\n .description('Print shell command to switch to a profile')\n .argument('<name>', 'Profile name')\n .action(async (name) => {\n try {\n const profiles = await listProfiles();\n const exists = profiles.some((p) => p.name === name);\n\n if (!exists) {\n console.error(colors.red('Error:'), `Profile \"${name}\" not found`);\n console.log(`\\nCreate it with: xopc profile create ${name}`);\n process.exit(1);\n }\n\n console.log(colors.cyan('Run this command to switch to this profile:'));\n console.log();\n console.log(` ${getSwitchCommand(name)}`);\n console.log();\n console.log(`State directory: ${resolveProfileStateDir(name)}`);\n } catch (error) {\n log.error({ error }, 'Failed to switch profile');\n console.error(colors.red('Error:'), error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n return cmd;\n}\n\nregister({\n id: 'profile',\n name: 'profile',\n description: 'Manage xopc state profiles (~/.xopc vs ~/.xopc-<name>)',\n factory: createProfileCommand,\n metadata: {\n category: 'setup',\n examples: ['xopc profile list', 'xopc profile create staging'],\n },\n});\n\nexport { createProfileCommand };\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"sources":["../../../../../src/cli/commands/session/utils.ts"],"sourcesContent":["/**\n * Session command utilities\n */\n\nimport { getSessionManager } from '../../utils/session.js';\nimport { getContextWithOpts } from '../../
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"sources":["../../../../../src/cli/commands/session/utils.ts"],"sourcesContent":["/**\n * Session command utilities\n */\n\nimport { getSessionManager } from '../../utils/session.js';\nimport { getContextWithOpts } from '../../context.js';\nimport type { SessionIndex } from '../../../session/index.js';\n\n/**\n * Get initialized session manager\n */\nexport async function getManager(): Promise<SessionIndex> {\n getContextWithOpts();\n return getSessionManager();\n}\n\n/**\n * Collect multiple option values into array\n */\nexport function collect(value: string, previous: string[]): string[] {\n return previous.concat([value]);\n}\n"],"mappings":";;;;;;;;;AAWA,eAAsB,aAAoC;AACxD,qBAAoB;AACpB,QAAO,mBAAmB;;;;;AAM5B,SAAgB,QAAQ,OAAe,UAA8B;AACnE,QAAO,SAAS,OAAO,CAAC,MAAM,CAAC"}
|