@nextclaw/service 0.1.15 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/agent/agent-runtime.utils.d.ts +2 -1
- package/dist/cli/commands/agent/agent-runtime.utils.d.ts.map +1 -0
- package/dist/cli/commands/agent/agent-runtime.utils.js +2 -0
- package/dist/cli/commands/agent/agent-runtime.utils.js.map +1 -0
- package/dist/cli/commands/agent/cli-agent-runner.utils.d.ts +2 -1
- package/dist/cli/commands/agent/cli-agent-runner.utils.d.ts.map +1 -0
- package/dist/cli/commands/agent/cli-agent-runner.utils.js +2 -0
- package/dist/cli/commands/agent/cli-agent-runner.utils.js.map +1 -0
- package/dist/cli/commands/agent/services/agent-commands.service.d.ts +2 -1
- package/dist/cli/commands/agent/services/agent-commands.service.d.ts.map +1 -0
- package/dist/cli/commands/agent/services/agent-commands.service.js +2 -0
- package/dist/cli/commands/agent/services/agent-commands.service.js.map +1 -0
- package/dist/cli/commands/config/services/config-commands.service.d.ts +2 -1
- package/dist/cli/commands/config/services/config-commands.service.d.ts.map +1 -0
- package/dist/cli/commands/config/services/config-commands.service.js +2 -0
- package/dist/cli/commands/config/services/config-commands.service.js.map +1 -0
- package/dist/cli/commands/cron/services/cron-commands.service.d.ts +2 -1
- package/dist/cli/commands/cron/services/cron-commands.service.d.ts.map +1 -0
- package/dist/cli/commands/cron/services/cron-commands.service.js +2 -0
- package/dist/cli/commands/cron/services/cron-commands.service.js.map +1 -0
- package/dist/cli/commands/cron/services/cron-local.service.d.ts +2 -1
- package/dist/cli/commands/cron/services/cron-local.service.d.ts.map +1 -0
- package/dist/cli/commands/cron/services/cron-local.service.js +2 -0
- package/dist/cli/commands/cron/services/cron-local.service.js.map +1 -0
- package/dist/cli/commands/cron/utils/cron-job.utils.d.ts +2 -1
- package/dist/cli/commands/cron/utils/cron-job.utils.d.ts.map +1 -0
- package/dist/cli/commands/cron/utils/cron-job.utils.js +2 -0
- package/dist/cli/commands/cron/utils/cron-job.utils.js.map +1 -0
- package/dist/cli/commands/diagnostics/services/diagnostics-commands.service.d.ts +2 -1
- package/dist/cli/commands/diagnostics/services/diagnostics-commands.service.d.ts.map +1 -0
- package/dist/cli/commands/diagnostics/services/diagnostics-commands.service.js +2 -0
- package/dist/cli/commands/diagnostics/services/diagnostics-commands.service.js.map +1 -0
- package/dist/cli/commands/diagnostics/utils/diagnostics-render.utils.d.ts +2 -1
- package/dist/cli/commands/diagnostics/utils/diagnostics-render.utils.d.ts.map +1 -0
- package/dist/cli/commands/diagnostics/utils/diagnostics-render.utils.js +2 -0
- package/dist/cli/commands/diagnostics/utils/diagnostics-render.utils.js.map +1 -0
- package/dist/cli/commands/gateway/index.d.ts +2 -1
- package/dist/cli/commands/gateway/index.d.ts.map +1 -0
- package/dist/cli/commands/gateway/index.js +2 -0
- package/dist/cli/commands/gateway/index.js.map +1 -0
- package/dist/cli/commands/logs/index.d.ts +2 -1
- package/dist/cli/commands/logs/index.d.ts.map +1 -0
- package/dist/cli/commands/logs/index.js +2 -0
- package/dist/cli/commands/logs/index.js.map +1 -0
- package/dist/cli/commands/mcp/index.d.ts +2 -1
- package/dist/cli/commands/mcp/index.d.ts.map +1 -0
- package/dist/cli/commands/mcp/index.js +2 -0
- package/dist/cli/commands/mcp/index.js.map +1 -0
- package/dist/cli/commands/restart/index.d.ts +2 -1
- package/dist/cli/commands/restart/index.d.ts.map +1 -0
- package/dist/cli/commands/restart/index.js +2 -0
- package/dist/cli/commands/restart/index.js.map +1 -0
- package/dist/cli/commands/secrets/index.d.ts +2 -1
- package/dist/cli/commands/secrets/index.d.ts.map +1 -0
- package/dist/cli/commands/secrets/index.js +2 -0
- package/dist/cli/commands/secrets/index.js.map +1 -0
- package/dist/cli/commands/serve/index.d.ts +2 -1
- package/dist/cli/commands/serve/index.d.ts.map +1 -0
- package/dist/cli/commands/serve/index.js +2 -0
- package/dist/cli/commands/serve/index.js.map +1 -0
- package/dist/cli/commands/skills/index.d.ts +2 -1
- package/dist/cli/commands/skills/index.d.ts.map +1 -0
- package/dist/cli/commands/skills/index.js +2 -0
- package/dist/cli/commands/skills/index.js.map +1 -0
- package/dist/cli/commands/skills/marketplace-client.d.ts +2 -1
- package/dist/cli/commands/skills/marketplace-client.d.ts.map +1 -0
- package/dist/cli/commands/skills/marketplace-client.js +2 -0
- package/dist/cli/commands/skills/marketplace-client.js.map +1 -0
- package/dist/cli/commands/skills/marketplace-command-options.utils.d.ts +2 -1
- package/dist/cli/commands/skills/marketplace-command-options.utils.d.ts.map +1 -0
- package/dist/cli/commands/skills/marketplace-command-options.utils.js +2 -0
- package/dist/cli/commands/skills/marketplace-command-options.utils.js.map +1 -0
- package/dist/cli/commands/skills/marketplace-identity.utils.d.ts +2 -1
- package/dist/cli/commands/skills/marketplace-identity.utils.d.ts.map +1 -0
- package/dist/cli/commands/skills/marketplace-identity.utils.js +2 -0
- package/dist/cli/commands/skills/marketplace-identity.utils.js.map +1 -0
- package/dist/cli/commands/skills/marketplace-network-retry.d.ts +2 -1
- package/dist/cli/commands/skills/marketplace-network-retry.d.ts.map +1 -0
- package/dist/cli/commands/skills/marketplace-network-retry.js +2 -0
- package/dist/cli/commands/skills/marketplace-network-retry.js.map +1 -0
- package/dist/cli/commands/skills/marketplace.metadata.d.ts +2 -1
- package/dist/cli/commands/skills/marketplace.metadata.d.ts.map +1 -0
- package/dist/cli/commands/skills/marketplace.metadata.js +2 -0
- package/dist/cli/commands/skills/marketplace.metadata.js.map +1 -0
- package/dist/cli/commands/skills/marketplace.utils.d.ts +2 -1
- package/dist/cli/commands/skills/marketplace.utils.d.ts.map +1 -0
- package/dist/cli/commands/skills/marketplace.utils.js +2 -0
- package/dist/cli/commands/skills/marketplace.utils.js.map +1 -0
- package/dist/cli/commands/skills/skills-query.service.d.ts +2 -1
- package/dist/cli/commands/skills/skills-query.service.d.ts.map +1 -0
- package/dist/cli/commands/skills/skills-query.service.js +2 -0
- package/dist/cli/commands/skills/skills-query.service.js.map +1 -0
- package/dist/cli/commands/start/index.d.ts +2 -1
- package/dist/cli/commands/start/index.d.ts.map +1 -0
- package/dist/cli/commands/start/index.js +2 -0
- package/dist/cli/commands/start/index.js.map +1 -0
- package/dist/cli/commands/stop/index.d.ts +2 -1
- package/dist/cli/commands/stop/index.d.ts.map +1 -0
- package/dist/cli/commands/stop/index.js +2 -0
- package/dist/cli/commands/stop/index.js.map +1 -0
- package/dist/cli/commands/ui/index.d.ts +2 -1
- package/dist/cli/commands/ui/index.d.ts.map +1 -0
- package/dist/cli/commands/ui/index.js +2 -0
- package/dist/cli/commands/ui/index.js.map +1 -0
- package/dist/cli/commands/usage/services/llm-usage-command.service.d.ts +2 -1
- package/dist/cli/commands/usage/services/llm-usage-command.service.d.ts.map +1 -0
- package/dist/cli/commands/usage/services/llm-usage-command.service.js +2 -0
- package/dist/cli/commands/usage/services/llm-usage-command.service.js.map +1 -0
- package/dist/commands/channel/channel-config-view.d.ts +2 -1
- package/dist/commands/channel/channel-config-view.d.ts.map +1 -0
- package/dist/commands/channel/channel-config-view.js +2 -0
- package/dist/commands/channel/channel-config-view.js.map +1 -0
- package/dist/commands/channel/channel-list-view.service.d.ts +2 -1
- package/dist/commands/channel/channel-list-view.service.d.ts.map +1 -0
- package/dist/commands/channel/channel-list-view.service.js +2 -0
- package/dist/commands/channel/channel-list-view.service.js.map +1 -0
- package/dist/commands/channel/index.d.ts +2 -1
- package/dist/commands/channel/index.d.ts.map +1 -0
- package/dist/commands/channel/index.js +2 -0
- package/dist/commands/channel/index.js.map +1 -0
- package/dist/commands/platform-auth/services/account-status.service.d.ts +2 -1
- package/dist/commands/platform-auth/services/account-status.service.d.ts.map +1 -0
- package/dist/commands/platform-auth/services/account-status.service.js +2 -0
- package/dist/commands/platform-auth/services/account-status.service.js.map +1 -0
- package/dist/commands/platform-auth/services/platform-auth-commands.service.d.ts +2 -1
- package/dist/commands/platform-auth/services/platform-auth-commands.service.d.ts.map +1 -0
- package/dist/commands/platform-auth/services/platform-auth-commands.service.js +2 -0
- package/dist/commands/platform-auth/services/platform-auth-commands.service.js.map +1 -0
- package/dist/commands/platform-auth/utils/payload.utils.d.ts +2 -1
- package/dist/commands/platform-auth/utils/payload.utils.d.ts.map +1 -0
- package/dist/commands/platform-auth/utils/payload.utils.js +2 -0
- package/dist/commands/platform-auth/utils/payload.utils.js.map +1 -0
- package/dist/commands/plugin/index.d.ts +2 -1
- package/dist/commands/plugin/index.d.ts.map +1 -0
- package/dist/commands/plugin/index.js +2 -0
- package/dist/commands/plugin/index.js.map +1 -0
- package/dist/commands/plugin/plugin-command.utils.d.ts +4 -3
- package/dist/commands/plugin/plugin-command.utils.d.ts.map +1 -0
- package/dist/commands/plugin/plugin-command.utils.js +2 -0
- package/dist/commands/plugin/plugin-command.utils.js.map +1 -0
- package/dist/commands/plugin/plugin-mutation-actions.utils.d.ts +2 -1
- package/dist/commands/plugin/plugin-mutation-actions.utils.d.ts.map +1 -0
- package/dist/commands/plugin/plugin-mutation-actions.utils.js +2 -0
- package/dist/commands/plugin/plugin-mutation-actions.utils.js.map +1 -0
- package/dist/commands/remote/index.d.ts +2 -1
- package/dist/commands/remote/index.d.ts.map +1 -0
- package/dist/commands/remote/index.js +2 -0
- package/dist/commands/remote/index.js.map +1 -0
- package/dist/commands/remote/services/remote-access-host.service.d.ts +2 -1
- package/dist/commands/remote/services/remote-access-host.service.d.ts.map +1 -0
- package/dist/commands/remote/services/remote-access-host.service.js +2 -0
- package/dist/commands/remote/services/remote-access-host.service.js.map +1 -0
- package/dist/commands/remote/services/remote-service-control.service.d.ts +2 -1
- package/dist/commands/remote/services/remote-service-control.service.d.ts.map +1 -0
- package/dist/commands/remote/services/remote-service-control.service.js +2 -0
- package/dist/commands/remote/services/remote-service-control.service.js.map +1 -0
- package/dist/commands/remote/utils/platform-api-base.utils.d.ts +2 -1
- package/dist/commands/remote/utils/platform-api-base.utils.d.ts.map +1 -0
- package/dist/commands/remote/utils/platform-api-base.utils.js +2 -0
- package/dist/commands/remote/utils/platform-api-base.utils.js.map +1 -0
- package/dist/commands/remote/utils/remote-runtime-support.utils.d.ts +2 -1
- package/dist/commands/remote/utils/remote-runtime-support.utils.d.ts.map +1 -0
- package/dist/commands/remote/utils/remote-runtime-support.utils.js +2 -0
- package/dist/commands/remote/utils/remote-runtime-support.utils.js.map +1 -0
- package/dist/commands/service/index.d.ts +2 -1
- package/dist/commands/service/index.d.ts.map +1 -0
- package/dist/commands/service/index.js +2 -0
- package/dist/commands/service/index.js.map +1 -0
- package/dist/commands/service/services/autostart/host-autostart-command.service.d.ts +2 -1
- package/dist/commands/service/services/autostart/host-autostart-command.service.d.ts.map +1 -0
- package/dist/commands/service/services/autostart/host-autostart-command.service.js +2 -0
- package/dist/commands/service/services/autostart/host-autostart-command.service.js.map +1 -0
- package/dist/commands/service/services/autostart/host-autostart-runtime.service.d.ts +2 -1
- package/dist/commands/service/services/autostart/host-autostart-runtime.service.d.ts.map +1 -0
- package/dist/commands/service/services/autostart/host-autostart-runtime.service.js +2 -0
- package/dist/commands/service/services/autostart/host-autostart-runtime.service.js.map +1 -0
- package/dist/commands/service/services/autostart/host-autostart.service.d.ts +2 -1
- package/dist/commands/service/services/autostart/host-autostart.service.d.ts.map +1 -0
- package/dist/commands/service/services/autostart/host-autostart.service.js +2 -0
- package/dist/commands/service/services/autostart/host-autostart.service.js.map +1 -0
- package/dist/commands/service/services/autostart/linux-systemd-autostart.service.d.ts +2 -1
- package/dist/commands/service/services/autostart/linux-systemd-autostart.service.d.ts.map +1 -0
- package/dist/commands/service/services/autostart/linux-systemd-autostart.service.js +2 -0
- package/dist/commands/service/services/autostart/linux-systemd-autostart.service.js.map +1 -0
- package/dist/commands/service/services/autostart/macos-launch-agent-autostart.service.d.ts +2 -1
- package/dist/commands/service/services/autostart/macos-launch-agent-autostart.service.d.ts.map +1 -0
- package/dist/commands/service/services/autostart/macos-launch-agent-autostart.service.js +2 -0
- package/dist/commands/service/services/autostart/macos-launch-agent-autostart.service.js.map +1 -0
- package/dist/commands/service/services/autostart/windows-task-autostart.service.d.ts +2 -1
- package/dist/commands/service/services/autostart/windows-task-autostart.service.d.ts.map +1 -0
- package/dist/commands/service/services/autostart/windows-task-autostart.service.js +2 -0
- package/dist/commands/service/services/autostart/windows-task-autostart.service.js.map +1 -0
- package/dist/commands/service/types/autostart/host-autostart.types.d.ts +2 -1
- package/dist/commands/service/types/autostart/host-autostart.types.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-bundle-layout.store.d.ts +2 -1
- package/dist/launcher/npm-runtime-bundle-layout.store.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-bundle-layout.store.js +2 -0
- package/dist/launcher/npm-runtime-bundle-layout.store.js.map +1 -0
- package/dist/launcher/npm-runtime-bundle-manifest.service.d.ts +2 -1
- package/dist/launcher/npm-runtime-bundle-manifest.service.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-bundle-manifest.service.js +2 -0
- package/dist/launcher/npm-runtime-bundle-manifest.service.js.map +1 -0
- package/dist/launcher/npm-runtime-bundle.service.d.ts +2 -1
- package/dist/launcher/npm-runtime-bundle.service.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-bundle.service.js +2 -0
- package/dist/launcher/npm-runtime-bundle.service.js.map +1 -0
- package/dist/launcher/npm-runtime-bundle.types.d.ts +2 -1
- package/dist/launcher/npm-runtime-bundle.types.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-launcher.service.d.ts +2 -1
- package/dist/launcher/npm-runtime-launcher.service.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-launcher.service.js +2 -0
- package/dist/launcher/npm-runtime-launcher.service.js.map +1 -0
- package/dist/launcher/npm-runtime-update-command.service.d.ts +5 -1
- package/dist/launcher/npm-runtime-update-command.service.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-update-command.service.js +32 -0
- package/dist/launcher/npm-runtime-update-command.service.js.map +1 -0
- package/dist/launcher/npm-runtime-update-source.service.d.ts +2 -1
- package/dist/launcher/npm-runtime-update-source.service.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-update-source.service.js +2 -0
- package/dist/launcher/npm-runtime-update-source.service.js.map +1 -0
- package/dist/launcher/npm-runtime-update-state.store.d.ts +2 -1
- package/dist/launcher/npm-runtime-update-state.store.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-update-state.store.js +2 -0
- package/dist/launcher/npm-runtime-update-state.store.js.map +1 -0
- package/dist/launcher/npm-runtime-update.manager.d.ts +2 -1
- package/dist/launcher/npm-runtime-update.manager.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-update.manager.js +2 -0
- package/dist/launcher/npm-runtime-update.manager.js.map +1 -0
- package/dist/launcher/npm-runtime-update.service.d.ts +2 -1
- package/dist/launcher/npm-runtime-update.service.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-update.service.js +2 -0
- package/dist/launcher/npm-runtime-update.service.js.map +1 -0
- package/dist/service-runtime.service.d.ts +2 -1
- package/dist/service-runtime.service.d.ts.map +1 -0
- package/dist/service-runtime.service.js +6 -1
- package/dist/service-runtime.service.js.map +1 -0
- package/dist/shared/controllers/gateway.controller.d.ts +2 -1
- package/dist/shared/controllers/gateway.controller.d.ts.map +1 -0
- package/dist/shared/controllers/gateway.controller.js +2 -0
- package/dist/shared/controllers/gateway.controller.js.map +1 -0
- package/dist/shared/services/gateway/gateway-restart-wake.service.d.ts +2 -1
- package/dist/shared/services/gateway/gateway-restart-wake.service.d.ts.map +1 -0
- package/dist/shared/services/gateway/gateway-restart-wake.service.js +2 -0
- package/dist/shared/services/gateway/gateway-restart-wake.service.js.map +1 -0
- package/dist/shared/services/gateway/managers/gateway-plugin.manager.d.ts +2 -1
- package/dist/shared/services/gateway/managers/gateway-plugin.manager.d.ts.map +1 -0
- package/dist/shared/services/gateway/managers/gateway-plugin.manager.js +2 -0
- package/dist/shared/services/gateway/managers/gateway-plugin.manager.js.map +1 -0
- package/dist/shared/services/gateway/managers/gateway-remote.manager.d.ts +2 -1
- package/dist/shared/services/gateway/managers/gateway-remote.manager.d.ts.map +1 -0
- package/dist/shared/services/gateway/managers/gateway-remote.manager.js +2 -0
- package/dist/shared/services/gateway/managers/gateway-remote.manager.js.map +1 -0
- package/dist/shared/services/gateway/nextclaw-app.service.d.ts +2 -1
- package/dist/shared/services/gateway/nextclaw-app.service.d.ts.map +1 -0
- package/dist/shared/services/gateway/nextclaw-app.service.js +2 -0
- package/dist/shared/services/gateway/nextclaw-app.service.js.map +1 -0
- package/dist/shared/services/gateway/nextclaw-gateway-runtime.service.d.ts +2 -1
- package/dist/shared/services/gateway/nextclaw-gateway-runtime.service.d.ts.map +1 -0
- package/dist/shared/services/gateway/nextclaw-gateway-runtime.service.js +2 -0
- package/dist/shared/services/gateway/nextclaw-gateway-runtime.service.js.map +1 -0
- package/dist/shared/services/gateway/service-bootstrap-status.service.d.ts +2 -1
- package/dist/shared/services/gateway/service-bootstrap-status.service.d.ts.map +1 -0
- package/dist/shared/services/gateway/service-bootstrap-status.service.js +2 -0
- package/dist/shared/services/gateway/service-bootstrap-status.service.js.map +1 -0
- package/dist/shared/services/gateway/service-startup-support.service.d.ts +2 -1
- package/dist/shared/services/gateway/service-startup-support.service.d.ts.map +1 -0
- package/dist/shared/services/gateway/service-startup-support.service.js +2 -0
- package/dist/shared/services/gateway/service-startup-support.service.js.map +1 -0
- package/dist/shared/services/gateway/utils/cron-job-handler.utils.d.ts +2 -1
- package/dist/shared/services/gateway/utils/cron-job-handler.utils.d.ts.map +1 -0
- package/dist/shared/services/gateway/utils/cron-job-handler.utils.js +2 -0
- package/dist/shared/services/gateway/utils/cron-job-handler.utils.js.map +1 -0
- package/dist/shared/services/gateway/utils/gateway-runtime-lifecycle.utils.d.ts +2 -1
- package/dist/shared/services/gateway/utils/gateway-runtime-lifecycle.utils.d.ts.map +1 -0
- package/dist/shared/services/gateway/utils/gateway-runtime-lifecycle.utils.js +2 -0
- package/dist/shared/services/gateway/utils/gateway-runtime-lifecycle.utils.js.map +1 -0
- package/dist/shared/services/marketplace/service-marketplace-installer.service.d.ts +2 -1
- package/dist/shared/services/marketplace/service-marketplace-installer.service.d.ts.map +1 -0
- package/dist/shared/services/marketplace/service-marketplace-installer.service.js +2 -0
- package/dist/shared/services/marketplace/service-marketplace-installer.service.js.map +1 -0
- package/dist/shared/services/marketplace/service-mcp-marketplace-ops.d.ts +2 -1
- package/dist/shared/services/marketplace/service-mcp-marketplace-ops.d.ts.map +1 -0
- package/dist/shared/services/marketplace/service-mcp-marketplace-ops.js +2 -0
- package/dist/shared/services/marketplace/service-mcp-marketplace-ops.js.map +1 -0
- package/dist/shared/services/plugin/utils/plugin-dev-hot-reload.utils.d.ts +2 -1
- package/dist/shared/services/plugin/utils/plugin-dev-hot-reload.utils.d.ts.map +1 -0
- package/dist/shared/services/plugin/utils/plugin-dev-hot-reload.utils.js +2 -0
- package/dist/shared/services/plugin/utils/plugin-dev-hot-reload.utils.js.map +1 -0
- package/dist/shared/services/plugin/utils/plugin-runtime-bridge.utils.d.ts +2 -1
- package/dist/shared/services/plugin/utils/plugin-runtime-bridge.utils.d.ts.map +1 -0
- package/dist/shared/services/plugin/utils/plugin-runtime-bridge.utils.js +2 -0
- package/dist/shared/services/plugin/utils/plugin-runtime-bridge.utils.js.map +1 -0
- package/dist/shared/services/restart/restart-coordinator.service.d.ts +2 -1
- package/dist/shared/services/restart/restart-coordinator.service.d.ts.map +1 -0
- package/dist/shared/services/restart/restart-coordinator.service.js +2 -0
- package/dist/shared/services/restart/restart-coordinator.service.js.map +1 -0
- package/dist/shared/services/restart/restart-sentinel.service.d.ts +2 -1
- package/dist/shared/services/restart/restart-sentinel.service.d.ts.map +1 -0
- package/dist/shared/services/restart/restart-sentinel.service.js +2 -0
- package/dist/shared/services/restart/restart-sentinel.service.js.map +1 -0
- package/dist/shared/services/restart/runtime-restart-request.service.d.ts +2 -1
- package/dist/shared/services/restart/runtime-restart-request.service.d.ts.map +1 -0
- package/dist/shared/services/restart/runtime-restart-request.service.js +2 -0
- package/dist/shared/services/restart/runtime-restart-request.service.js.map +1 -0
- package/dist/shared/services/runtime/managed-service-supervisor.service.d.ts +2 -1
- package/dist/shared/services/runtime/managed-service-supervisor.service.d.ts.map +1 -0
- package/dist/shared/services/runtime/managed-service-supervisor.service.js +2 -0
- package/dist/shared/services/runtime/managed-service-supervisor.service.js.map +1 -0
- package/dist/shared/services/runtime/nextclaw-distribution.service.d.ts +2 -1
- package/dist/shared/services/runtime/nextclaw-distribution.service.d.ts.map +1 -0
- package/dist/shared/services/runtime/nextclaw-distribution.service.js +2 -0
- package/dist/shared/services/runtime/nextclaw-distribution.service.js.map +1 -0
- package/dist/shared/services/runtime/runtime-command.service.d.ts +2 -1
- package/dist/shared/services/runtime/runtime-command.service.d.ts.map +1 -0
- package/dist/shared/services/runtime/runtime-command.service.js +2 -0
- package/dist/shared/services/runtime/runtime-command.service.js.map +1 -0
- package/dist/shared/services/runtime/runtime-config-init.service.d.ts +2 -1
- package/dist/shared/services/runtime/runtime-config-init.service.d.ts.map +1 -0
- package/dist/shared/services/runtime/runtime-config-init.service.js +2 -0
- package/dist/shared/services/runtime/runtime-config-init.service.js.map +1 -0
- package/dist/shared/services/runtime/service-managed-startup.service.d.ts +2 -1
- package/dist/shared/services/runtime/service-managed-startup.service.d.ts.map +1 -0
- package/dist/shared/services/runtime/service-managed-startup.service.js +2 -0
- package/dist/shared/services/runtime/service-managed-startup.service.js.map +1 -0
- package/dist/shared/services/runtime/utils/managed-service-routing.utils.d.ts +2 -1
- package/dist/shared/services/runtime/utils/managed-service-routing.utils.d.ts.map +1 -0
- package/dist/shared/services/runtime/utils/managed-service-routing.utils.js +2 -0
- package/dist/shared/services/runtime/utils/managed-service-routing.utils.js.map +1 -0
- package/dist/shared/services/runtime/utils/service-remote-runtime.utils.d.ts +2 -1
- package/dist/shared/services/runtime/utils/service-remote-runtime.utils.d.ts.map +1 -0
- package/dist/shared/services/runtime/utils/service-remote-runtime.utils.js +2 -0
- package/dist/shared/services/runtime/utils/service-remote-runtime.utils.js.map +1 -0
- package/dist/shared/services/ui/companion-runtime.service.d.ts +2 -1
- package/dist/shared/services/ui/companion-runtime.service.d.ts.map +1 -0
- package/dist/shared/services/ui/companion-runtime.service.js +2 -0
- package/dist/shared/services/ui/companion-runtime.service.js.map +1 -0
- package/dist/shared/services/ui/local-ui-discovery.service.d.ts +2 -1
- package/dist/shared/services/ui/local-ui-discovery.service.d.ts.map +1 -0
- package/dist/shared/services/ui/local-ui-discovery.service.js +2 -0
- package/dist/shared/services/ui/local-ui-discovery.service.js.map +1 -0
- package/dist/shared/services/ui/npm-runtime-update-host.service.d.ts +2 -1
- package/dist/shared/services/ui/npm-runtime-update-host.service.d.ts.map +1 -0
- package/dist/shared/services/ui/npm-runtime-update-host.service.js +2 -0
- package/dist/shared/services/ui/npm-runtime-update-host.service.js.map +1 -0
- package/dist/shared/services/ui/runtime-control-host.service.d.ts +2 -1
- package/dist/shared/services/ui/runtime-control-host.service.d.ts.map +1 -0
- package/dist/shared/services/ui/runtime-control-host.service.js +2 -0
- package/dist/shared/services/ui/runtime-control-host.service.js.map +1 -0
- package/dist/shared/services/ui/service-remote-access.service.d.ts +2 -1
- package/dist/shared/services/ui/service-remote-access.service.d.ts.map +1 -0
- package/dist/shared/services/ui/service-remote-access.service.js +2 -0
- package/dist/shared/services/ui/service-remote-access.service.js.map +1 -0
- package/dist/shared/services/ui/ui-bridge-api.service.d.ts +2 -1
- package/dist/shared/services/ui/ui-bridge-api.service.d.ts.map +1 -0
- package/dist/shared/services/ui/ui-bridge-api.service.js +2 -0
- package/dist/shared/services/ui/ui-bridge-api.service.js.map +1 -0
- package/dist/shared/services/workspace/workspace-manager.service.d.ts +2 -1
- package/dist/shared/services/workspace/workspace-manager.service.d.ts.map +1 -0
- package/dist/shared/services/workspace/workspace-manager.service.js +2 -0
- package/dist/shared/services/workspace/workspace-manager.service.js.map +1 -0
- package/dist/shared/stores/companion-runtime.store.d.ts +2 -1
- package/dist/shared/stores/companion-runtime.store.d.ts.map +1 -0
- package/dist/shared/stores/companion-runtime.store.js +2 -0
- package/dist/shared/stores/companion-runtime.store.js.map +1 -0
- package/dist/shared/stores/local-ui-runtime.store.d.ts +2 -1
- package/dist/shared/stores/local-ui-runtime.store.d.ts.map +1 -0
- package/dist/shared/stores/local-ui-runtime.store.js +2 -0
- package/dist/shared/stores/local-ui-runtime.store.js.map +1 -0
- package/dist/shared/stores/managed-service-state.store.d.ts +2 -1
- package/dist/shared/stores/managed-service-state.store.d.ts.map +1 -0
- package/dist/shared/stores/managed-service-state.store.js +2 -0
- package/dist/shared/stores/managed-service-state.store.js.map +1 -0
- package/dist/shared/stores/pending-restart.store.d.ts +2 -1
- package/dist/shared/stores/pending-restart.store.d.ts.map +1 -0
- package/dist/shared/stores/pending-restart.store.js +2 -0
- package/dist/shared/stores/pending-restart.store.js.map +1 -0
- package/dist/shared/types/cli.types.d.ts +2 -1
- package/dist/shared/types/cli.types.d.ts.map +1 -0
- package/dist/shared/types/distribution.types.d.ts +2 -1
- package/dist/shared/types/distribution.types.d.ts.map +1 -0
- package/dist/shared/utils/cli.utils.d.ts +2 -1
- package/dist/shared/utils/cli.utils.d.ts.map +1 -0
- package/dist/shared/utils/cli.utils.js +2 -0
- package/dist/shared/utils/cli.utils.js.map +1 -0
- package/dist/shared/utils/config-path.d.ts +2 -1
- package/dist/shared/utils/config-path.d.ts.map +1 -0
- package/dist/shared/utils/config-path.js +2 -0
- package/dist/shared/utils/config-path.js.map +1 -0
- package/dist/shared/utils/marketplace/cli-subcommand-launch.utils.d.ts +2 -1
- package/dist/shared/utils/marketplace/cli-subcommand-launch.utils.d.ts.map +1 -0
- package/dist/shared/utils/marketplace/cli-subcommand-launch.utils.js +2 -0
- package/dist/shared/utils/marketplace/cli-subcommand-launch.utils.js.map +1 -0
- package/dist/shared/utils/marketplace/service-marketplace-helpers.utils.d.ts +2 -1
- package/dist/shared/utils/marketplace/service-marketplace-helpers.utils.d.ts.map +1 -0
- package/dist/shared/utils/marketplace/service-marketplace-helpers.utils.js +2 -0
- package/dist/shared/utils/marketplace/service-marketplace-helpers.utils.js.map +1 -0
- package/dist/shared/utils/package/package-manifest.utils.d.ts +2 -1
- package/dist/shared/utils/package/package-manifest.utils.d.ts.map +1 -0
- package/dist/shared/utils/package/package-manifest.utils.js +2 -0
- package/dist/shared/utils/package/package-manifest.utils.js.map +1 -0
- package/dist/shared/utils/runtime-helpers.d.ts +2 -1
- package/dist/shared/utils/runtime-helpers.d.ts.map +1 -0
- package/dist/shared/utils/runtime-helpers.js +2 -0
- package/dist/shared/utils/runtime-helpers.js.map +1 -0
- package/dist/shared/utils/service-port-probe.utils.d.ts +2 -1
- package/dist/shared/utils/service-port-probe.utils.d.ts.map +1 -0
- package/dist/shared/utils/service-port-probe.utils.js +2 -0
- package/dist/shared/utils/service-port-probe.utils.js.map +1 -0
- package/dist/shared/utils/startup-trace.d.ts +2 -1
- package/dist/shared/utils/startup-trace.d.ts.map +1 -0
- package/dist/shared/utils/startup-trace.js +2 -0
- package/dist/shared/utils/startup-trace.js.map +1 -0
- package/dist/shared/utils/top-level-nextclaw-command-env.utils.d.ts +2 -1
- package/dist/shared/utils/top-level-nextclaw-command-env.utils.d.ts.map +1 -0
- package/dist/shared/utils/top-level-nextclaw-command-env.utils.js +2 -0
- package/dist/shared/utils/top-level-nextclaw-command-env.utils.js.map +1 -0
- package/package.json +20 -20
|
@@ -11,4 +11,5 @@ type AgentRuntimeListResult = {
|
|
|
11
11
|
};
|
|
12
12
|
declare function listAvailableAgentRuntimes(params?: AgentRuntimeSessionTypeDescribeParams): Promise<AgentRuntimeListResult>;
|
|
13
13
|
//#endregion
|
|
14
|
-
export { AgentRuntimeListEntry, AgentRuntimeListResult, listAvailableAgentRuntimes };
|
|
14
|
+
export { AgentRuntimeListEntry, AgentRuntimeListResult, listAvailableAgentRuntimes };
|
|
15
|
+
//# sourceMappingURL=agent-runtime.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-runtime.utils.d.ts","names":[],"sources":["../../../../src/cli/commands/agent/agent-runtime.utils.ts"],"mappings":";;;KAYY,qBAAA,GAAwB,6BAAA;EAClC,OAAA;EACA,MAAA;AAAA;AAAA,KAGU,sBAAA;EACV,cAAA;EACA,QAAA,EAAU,qBAAA;AAAA;AAAA,iBAOU,0BAAA,CACpB,MAAA,GAAS,qCAAA,GACR,OAAA,CAAQ,sBAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-runtime.utils.js","names":[],"sources":["../../../../src/cli/commands/agent/agent-runtime.utils.ts"],"sourcesContent":["import { loadConfig } from \"@nextclaw/core\";\nimport type { NcpAgentRuntime } from \"@nextclaw/ncp\";\nimport type { RuntimeFactoryParams } from \"@nextclaw/ncp-toolkit\";\nimport {\n AgentRuntimeRegistry,\n BuiltinNarpRuntimeProviderService,\n DEFAULT_AGENT_RUNTIME_ENTRY_ID,\n resolveAgentRuntimeEntries,\n type AgentRuntimeSessionTypeDescribeParams,\n type AgentRuntimeSessionTypeOption,\n} from \"@nextclaw/kernel\";\n\nexport type AgentRuntimeListEntry = AgentRuntimeSessionTypeOption & {\n default: boolean;\n source: \"builtin\";\n};\n\nexport type AgentRuntimeListResult = {\n defaultRuntime: string;\n runtimes: AgentRuntimeListEntry[];\n};\n\nfunction createUnusedRuntime(_params: RuntimeFactoryParams): NcpAgentRuntime {\n throw new Error(\"runtime creation is not available during runtime listing\");\n}\n\nexport async function listAvailableAgentRuntimes(\n params?: AgentRuntimeSessionTypeDescribeParams,\n): Promise<AgentRuntimeListResult> {\n const config = loadConfig();\n const runtimeRegistry = new AgentRuntimeRegistry();\n const runtimeSourceByKind = new Map<string, {\n source: \"builtin\";\n }>();\n const runtimeSourceByEntryId = new Map<string, {\n source: \"builtin\";\n }>();\n\n runtimeRegistry.register({\n kind: DEFAULT_AGENT_RUNTIME_ENTRY_ID,\n label: \"Native\",\n createRuntime: createUnusedRuntime,\n });\n runtimeSourceByKind.set(DEFAULT_AGENT_RUNTIME_ENTRY_ID, {\n source: \"builtin\",\n });\n for (const provider of new BuiltinNarpRuntimeProviderService({ loadConfig: () => config }).createProviders()) {\n runtimeRegistry.register(provider);\n }\n runtimeSourceByKind.set(\"narp-http\", {\n source: \"builtin\",\n });\n runtimeSourceByKind.set(\"narp-stdio\", {\n source: \"builtin\",\n });\n\n const resolvedEntries = resolveAgentRuntimeEntries({\n config,\n });\n runtimeRegistry.applyEntries(resolvedEntries);\n for (const entry of resolvedEntries.entries) {\n const source = runtimeSourceByKind.get(entry.type);\n runtimeSourceByEntryId.set(entry.id, source ?? {\n source: \"builtin\",\n });\n }\n\n const listed = await runtimeRegistry.listSessionTypes(params);\n return {\n defaultRuntime: listed.defaultType,\n runtimes: listed.options.map((runtime) => {\n const source = runtimeSourceByEntryId.get(runtime.value);\n return {\n ...runtime,\n default: runtime.value === listed.defaultType,\n source: source?.source ?? \"builtin\",\n };\n }),\n };\n}\n"],"mappings":";;;AAsBA,SAAS,oBAAoB,SAAgD;AAC3E,OAAM,IAAI,MAAM,2DAA2D;;AAG7E,eAAsB,2BACpB,QACiC;CACjC,MAAM,SAAS,YAAY;CAC3B,MAAM,kBAAkB,IAAI,sBAAsB;CAClD,MAAM,sCAAsB,IAAI,KAE5B;CACJ,MAAM,yCAAyB,IAAI,KAE/B;AAEJ,iBAAgB,SAAS;EACvB,MAAM;EACN,OAAO;EACP,eAAe;EAChB,CAAC;AACF,qBAAoB,IAAI,gCAAgC,EACtD,QAAQ,WACT,CAAC;AACF,MAAK,MAAM,YAAY,IAAI,kCAAkC,EAAE,kBAAkB,QAAQ,CAAC,CAAC,iBAAiB,CAC1G,iBAAgB,SAAS,SAAS;AAEpC,qBAAoB,IAAI,aAAa,EACnC,QAAQ,WACT,CAAC;AACF,qBAAoB,IAAI,cAAc,EACpC,QAAQ,WACT,CAAC;CAEF,MAAM,kBAAkB,2BAA2B,EACjD,QACD,CAAC;AACF,iBAAgB,aAAa,gBAAgB;AAC7C,MAAK,MAAM,SAAS,gBAAgB,SAAS;EAC3C,MAAM,SAAS,oBAAoB,IAAI,MAAM,KAAK;AAClD,yBAAuB,IAAI,MAAM,IAAI,UAAU,EAC7C,QAAQ,WACT,CAAC;;CAGJ,MAAM,SAAS,MAAM,gBAAgB,iBAAiB,OAAO;AAC7D,QAAO;EACL,gBAAgB,OAAO;EACvB,UAAU,OAAO,QAAQ,KAAK,YAAY;GACxC,MAAM,SAAS,uBAAuB,IAAI,QAAQ,MAAM;AACxD,UAAO;IACL,GAAG;IACH,SAAS,QAAQ,UAAU,OAAO;IAClC,QAAQ,QAAQ,UAAU;IAC3B;IACD;EACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-agent-runner.utils.d.ts","names":[],"sources":["../../../../src/cli/commands/agent/cli-agent-runner.utils.ts"],"mappings":";;;;;iBAkFsB,kBAAA,CAAmB,MAAA;EACvC,IAAA;EACA,IAAA,EAAM,mBAAA;EACN,MAAA,EAAQ,MAAA;EACR,MAAA,EAAQ,cAAA;EACR,eAAA,EAAiB,kBAAA;AAAA,IACf,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-agent-runner.utils.js","names":[],"sources":["../../../../src/cli/commands/agent/cli-agent-runner.utils.ts"],"sourcesContent":["import {\n getDataDir,\n type Config,\n} from \"@nextclaw/core\";\nimport {\n dispatchPromptOverNcp,\n type LlmProviderRuntime,\n type NextclawKernel,\n} from \"@nextclaw/kernel\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { createInterface } from \"node:readline\";\nimport type { AgentCommandOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\nimport { printAgentResponse, prompt } from \"@nextclaw-service/shared/utils/cli.utils.js\";\n\nconst EXIT_COMMANDS = new Set([\"exit\", \"quit\", \"/exit\", \"/quit\", \":q\"]);\n\nfunction buildCliSharedMetadata(\n opts: Pick<AgentCommandOptions, \"model\">,\n): Record<string, unknown> {\n return typeof opts.model === \"string\" && opts.model.trim()\n ? { model: opts.model.trim() }\n : {};\n}\n\nfunction createCliHistoryInterface() {\n const historyFile = join(getDataDir(), \"history\", \"cli_history\");\n const historyDir = resolve(historyFile, \"..\");\n mkdirSync(historyDir, { recursive: true });\n\n const history = existsSync(historyFile)\n ? readFileSync(historyFile, \"utf-8\").split(\"\\n\").filter(Boolean)\n : [];\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n rl.on(\"close\", () => {\n const merged = history.concat(\n (rl as unknown as { history: string[] }).history ?? [],\n );\n writeFileSync(historyFile, merged.join(\"\\n\"));\n process.exit(0);\n });\n\n return rl;\n}\n\nasync function runCliInteractiveLoop(params: {\n logo: string;\n config: Config;\n agentRunRequests: NextclawKernel[\"agentRunRequestManager\"];\n sessionKey: string;\n metadata: Record<string, unknown>;\n}): Promise<void> {\n const { agentRunRequests, config, logo, metadata, sessionKey } = params;\n console.log(`${logo} Interactive mode (type exit or Ctrl+C to quit)\\n`);\n const rl = createCliHistoryInterface();\n\n let running = true;\n while (running) {\n const line = await prompt(rl, \"You: \");\n const trimmed = line.trim();\n if (!trimmed) {\n continue;\n }\n if (EXIT_COMMANDS.has(trimmed.toLowerCase())) {\n rl.close();\n running = false;\n break;\n }\n const response = await dispatchPromptOverNcp({\n config,\n agentRunRequests,\n sessionKey,\n content: trimmed,\n metadata,\n });\n printAgentResponse(response);\n }\n}\n\nexport async function runCliAgentCommand(params: {\n logo: string;\n opts: AgentCommandOptions;\n config: Config;\n kernel: NextclawKernel;\n providerManager: LlmProviderRuntime;\n}): Promise<void> {\n const {\n config,\n kernel,\n logo,\n opts,\n } = params;\n await kernel.extensions.load({ config });\n await kernel.start();\n\n try {\n const sessionKey = opts.session ?? \"cli:default\";\n const sharedMetadata = buildCliSharedMetadata(opts);\n\n if (opts.message) {\n const response = await dispatchPromptOverNcp({\n config,\n agentRunRequests: kernel.agentRunRequestManager,\n sessionKey,\n content: opts.message,\n metadata: sharedMetadata,\n });\n printAgentResponse(response);\n return;\n }\n\n await runCliInteractiveLoop({\n logo,\n config,\n agentRunRequests: kernel.agentRunRequestManager,\n sessionKey,\n metadata: sharedMetadata,\n });\n } finally {\n await kernel.dispose();\n }\n}\n"],"mappings":";;;;;;;AAeA,MAAM,gBAAgB,IAAI,IAAI;CAAC;CAAQ;CAAQ;CAAS;CAAS;CAAK,CAAC;AAEvE,SAAS,uBACP,MACyB;AACzB,QAAO,OAAO,KAAK,UAAU,YAAY,KAAK,MAAM,MAAM,GACtD,EAAE,OAAO,KAAK,MAAM,MAAM,EAAE,GAC5B,EAAE;;AAGR,SAAS,4BAA4B;CACnC,MAAM,cAAc,KAAK,YAAY,EAAE,WAAW,cAAc;AAEhE,WADmB,QAAQ,aAAa,KAAK,EACvB,EAAE,WAAW,MAAM,CAAC;CAE1C,MAAM,UAAU,WAAW,YAAY,GACnC,aAAa,aAAa,QAAQ,CAAC,MAAM,KAAK,CAAC,OAAO,QAAQ,GAC9D,EAAE;CACN,MAAM,KAAK,gBAAgB;EACzB,OAAO,QAAQ;EACf,QAAQ,QAAQ;EACjB,CAAC;AACF,IAAG,GAAG,eAAe;AAInB,gBAAc,aAHC,QAAQ,OACpB,GAAwC,WAAW,EAAE,CACvD,CACiC,KAAK,KAAK,CAAC;AAC7C,UAAQ,KAAK,EAAE;GACf;AAEF,QAAO;;AAGT,eAAe,sBAAsB,QAMnB;CAChB,MAAM,EAAE,kBAAkB,QAAQ,MAAM,UAAU,eAAe;AACjE,SAAQ,IAAI,GAAG,KAAK,mDAAmD;CACvE,MAAM,KAAK,2BAA2B;CAEtC,IAAI,UAAU;AACd,QAAO,SAAS;EAEd,MAAM,WADO,MAAM,OAAO,IAAI,QAAQ,EACjB,MAAM;AAC3B,MAAI,CAAC,QACH;AAEF,MAAI,cAAc,IAAI,QAAQ,aAAa,CAAC,EAAE;AAC5C,MAAG,OAAO;AACV,aAAU;AACV;;AASF,qBAPiB,MAAM,sBAAsB;GAC3C;GACA;GACA;GACA,SAAS;GACT;GACD,CAAC,CAC0B;;;AAIhC,eAAsB,mBAAmB,QAMvB;CAChB,MAAM,EACJ,QACA,QACA,MACA,SACE;AACJ,OAAM,OAAO,WAAW,KAAK,EAAE,QAAQ,CAAC;AACxC,OAAM,OAAO,OAAO;AAEpB,KAAI;EACF,MAAM,aAAa,KAAK,WAAW;EACnC,MAAM,iBAAiB,uBAAuB,KAAK;AAEnD,MAAI,KAAK,SAAS;AAQhB,sBAPiB,MAAM,sBAAsB;IAC3C;IACA,kBAAkB,OAAO;IACzB;IACA,SAAS,KAAK;IACd,UAAU;IACX,CAAC,CAC0B;AAC5B;;AAGF,QAAM,sBAAsB;GAC1B;GACA;GACA,kBAAkB,OAAO;GACzB;GACA,UAAU;GACX,CAAC;WACM;AACR,QAAM,OAAO,SAAS"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-commands.service.d.ts","names":[],"sources":["../../../../../src/cli/commands/agent/services/agent-commands.service.ts"],"mappings":";;;cAYa,aAAA;EAAA,iBACkB,IAAA;cAAA,IAAA;IAC3B,4BAAA,GAA+B,aAAA;EAAA;EAGjC,IAAA,GAAQ,IAAA,GAAM,wBAAA;EAkBd,QAAA,GAAkB,IAAA,GAAM,4BAAA,KAAoC,OAAA;EAyB5D,MAAA,GAAgB,OAAA,UAAiB,IAAA,GAAM,uBAAA,KAA+B,OAAA;EA4BtE,MAAA,GAAgB,OAAA,UAAiB,IAAA,GAAM,0BAAA,KAAkC,OAAA;EAsBzE,MAAA,GAAgB,OAAA,UAAiB,IAAA,GAAM,0BAAA,KAAkC,OAAA;EAAA,QAkBjE,gBAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-commands.service.js","names":[],"sources":["../../../../../src/cli/commands/agent/services/agent-commands.service.ts"],"sourcesContent":["import {\n BUILTIN_MAIN_AGENT_ID,\n createAgentProfile,\n loadConfig,\n removeAgentProfile,\n resolveEffectiveAgentProfiles,\n updateAgentProfile,\n type EffectiveAgentProfile\n} from \"@nextclaw/core\";\nimport { listAvailableAgentRuntimes } from \"../agent-runtime.utils.js\";\nimport type { AgentsListCommandOptions, AgentsNewCommandOptions, AgentsRemoveCommandOptions, AgentsRuntimesCommandOptions, AgentsUpdateCommandOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\n\nexport class AgentCommands {\n constructor(private readonly deps: {\n initializeAgentHomeDirectory: (homeDirectory: string) => void;\n }) {}\n\n list = (opts: AgentsListCommandOptions = {}): void => {\n const config = loadConfig();\n const agents = resolveEffectiveAgentProfiles(config).map((agent) => this.toAgentListEntry(agent));\n if (opts.json) {\n console.log(JSON.stringify(agents, null, 2));\n return;\n }\n for (const agent of agents) {\n const head = agent.builtIn ? `${agent.id} (built-in)` : agent.id;\n console.log(head);\n console.log(` name: ${agent.displayName ?? \"-\"}`);\n console.log(` description: ${agent.description ?? \"-\"}`);\n console.log(` home: ${agent.workspace}`);\n console.log(` avatar: ${agent.avatar ?? \"-\"}`);\n console.log(` runtime: ${agent.runtime ?? \"-\"}`);\n }\n };\n\n runtimes = async (opts: AgentsRuntimesCommandOptions = {}): Promise<void> => {\n const describeMode = opts.probe ? \"probe\" : \"observation\";\n const listed = await listAvailableAgentRuntimes({ describeMode });\n if (opts.json) {\n console.log(JSON.stringify({\n defaultRuntime: listed.defaultRuntime,\n describeMode,\n runtimes: listed.runtimes,\n }, null, 2));\n return;\n }\n\n for (const runtime of listed.runtimes) {\n const head = runtime.default ? `${runtime.value} (default)` : runtime.value;\n console.log(head);\n console.log(` label: ${runtime.label}`);\n console.log(` source: ${runtime.source}`);\n console.log(` ready: ${runtime.ready === false ? \"no\" : \"yes\"}`);\n console.log(` reason: ${runtime.reason ?? \"-\"}`);\n console.log(` reasonMessage: ${runtime.reasonMessage ?? \"-\"}`);\n console.log(` recommendedModel: ${runtime.recommendedModel ?? \"-\"}`);\n console.log(` supportedModels: ${runtime.supportedModels?.join(\", \") ?? \"-\"}`);\n }\n };\n\n create = async (agentId: string, opts: AgentsNewCommandOptions = {}): Promise<void> => {\n const created = createAgentProfile(\n {\n id: agentId,\n displayName: opts.name,\n description: opts.description,\n avatar: opts.avatar,\n home: opts.home,\n runtime: opts.runtime\n },\n {\n initializeHomeDirectory: this.deps.initializeAgentHomeDirectory\n }\n );\n if (opts.json) {\n console.log(JSON.stringify({\n agent: created\n }, null, 2));\n return;\n }\n console.log(`✓ Created agent ${created.id}`);\n console.log(` name: ${created.displayName ?? \"-\"}`);\n console.log(` description: ${created.description ?? \"-\"}`);\n console.log(` home: ${created.workspace}`);\n console.log(` avatar: ${created.avatar ?? \"-\"}`);\n console.log(` runtime: ${created.runtime ?? created.engine ?? \"-\"}`);\n };\n\n update = async (agentId: string, opts: AgentsUpdateCommandOptions = {}): Promise<void> => {\n const updated = updateAgentProfile({\n id: agentId,\n displayName: opts.name,\n description: opts.description,\n avatar: opts.avatar,\n runtime: opts.runtime\n });\n if (opts.json) {\n console.log(JSON.stringify({\n agent: updated\n }, null, 2));\n return;\n }\n console.log(`✓ Updated agent ${updated.id}`);\n console.log(` name: ${updated.displayName ?? \"-\"}`);\n console.log(` description: ${updated.description ?? \"-\"}`);\n console.log(` home: ${updated.workspace}`);\n console.log(` avatar: ${updated.avatar ?? \"-\"}`);\n console.log(` runtime: ${updated.runtime ?? updated.engine ?? \"-\"}`);\n };\n\n remove = async (agentId: string, opts: AgentsRemoveCommandOptions = {}): Promise<void> => {\n if (agentId.trim().toLowerCase() === BUILTIN_MAIN_AGENT_ID) {\n throw new Error(`agent id '${BUILTIN_MAIN_AGENT_ID}' is reserved`);\n }\n const removed = removeAgentProfile(agentId);\n if (!removed) {\n throw new Error(`agent '${agentId}' not found`);\n }\n if (opts.json) {\n console.log(JSON.stringify({\n removed: true,\n agentId\n }, null, 2));\n return;\n }\n console.log(`✓ Removed agent ${agentId}`);\n };\n\n private toAgentListEntry = (agent: EffectiveAgentProfile) => {\n return {\n id: agent.id,\n displayName: agent.displayName ?? null,\n description: agent.description ?? null,\n avatar: agent.avatar ?? null,\n workspace: agent.workspace,\n runtime: agent.runtime ?? agent.engine ?? null,\n builtIn: agent.builtIn === true\n };\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-commands.service.d.ts","names":[],"sources":["../../../../../src/cli/commands/config/services/config-commands.service.ts"],"mappings":";;;cAOa,cAAA;EAAA,QAED,IAAA;cAAA,IAAA;IACN,cAAA,GAAiB,MAAA,EAAQ,oBAAA,KAAyB,OAAA;EAAA;EAItD,GAAA,GAAO,QAAA,UAAkB,IAAA,GAAM,gBAAA;EAoC/B,GAAA,GAAa,QAAA,UAAkB,KAAA,UAAe,IAAA,GAAM,gBAAA,KAAwB,OAAA;EA4C5E,KAAA,GAAe,QAAA,aAAmB,OAAA;EAAA,QAkC1B,qBAAA;EAAA,QAQA,8BAAA;EAAA,QAoBA,yBAAA;EAAA,QAUA,2BAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-commands.service.js","names":[],"sources":["../../../../../src/cli/commands/config/services/config-commands.service.ts"],"sourcesContent":["import { buildReloadPlan, diffConfigPaths, getWorkspacePath, loadConfig, saveConfig, type Config } from \"@nextclaw/core\";\nimport { getPluginChannelBindings } from \"@nextclaw/openclaw-compat\";\nimport { getAtConfigPath, parseConfigSetValue, parseRequiredConfigPath, setAtConfigPath, unsetAtConfigPath } from \"@nextclaw-service/shared/utils/config-path.js\";\nimport { resolveChannelConfigView } from \"@nextclaw-service/commands/channel/index.js\";\nimport { loadPluginRegistry, mergePluginConfigView } from \"@nextclaw-service/commands/plugin/index.js\";\nimport type { ConfigGetOptions, ConfigSetOptions, RequestRestartParams } from \"@nextclaw-service/shared/types/cli.types.js\";\n\nexport class ConfigCommands {\n constructor(\n private deps: {\n requestRestart: (params: RequestRestartParams) => Promise<void>;\n }\n ) {}\n\n get = (pathExpr: string, opts: ConfigGetOptions = {}): void => {\n let parsedPath: string[];\n try {\n parsedPath = parseRequiredConfigPath(pathExpr);\n } catch (error) {\n console.error(String(error));\n process.exit(1);\n return;\n }\n\n const config = loadConfig();\n const resolvedConfig = this.resolveReadConfigView(config, parsedPath) as unknown as Record<string, unknown>;\n const result = getAtConfigPath(resolvedConfig, parsedPath);\n if (!result.found) {\n console.error(`Config path not found: ${pathExpr}`);\n process.exit(1);\n return;\n }\n\n if (opts.json) {\n console.log(JSON.stringify(result.value ?? null, null, 2));\n return;\n }\n\n if (\n typeof result.value === \"string\" ||\n typeof result.value === \"number\" ||\n typeof result.value === \"boolean\"\n ) {\n console.log(String(result.value));\n return;\n }\n\n console.log(JSON.stringify(result.value ?? null, null, 2));\n };\n\n set = async (pathExpr: string, value: string, opts: ConfigSetOptions = {}): Promise<void> => {\n let parsedPath: string[];\n try {\n parsedPath = parseRequiredConfigPath(pathExpr);\n } catch (error) {\n console.error(String(error));\n process.exit(1);\n return;\n }\n\n let parsedValue: unknown;\n try {\n parsedValue = parseConfigSetValue(value, opts);\n } catch (error) {\n console.error(`Failed to parse config value: ${String(error)}`);\n process.exit(1);\n return;\n }\n\n const prevConfig = loadConfig();\n const projectedContext = this.resolveProjectedChannelContext(prevConfig, parsedPath);\n const nextConfigTarget = projectedContext\n ? structuredClone(projectedContext.view) as unknown as Record<string, unknown>\n : structuredClone(prevConfig) as unknown as Record<string, unknown>;\n try {\n setAtConfigPath(nextConfigTarget, parsedPath, parsedValue);\n } catch (error) {\n console.error(String(error));\n process.exit(1);\n return;\n }\n\n const nextConfig = projectedContext\n ? mergePluginConfigView(prevConfig, nextConfigTarget, projectedContext.bindings)\n : nextConfigTarget as Config;\n saveConfig(nextConfig as Config);\n await this.requestRestartForConfigDiff({\n prevConfig,\n nextConfig: nextConfig as Config,\n reason: `config.set ${pathExpr}`,\n manualMessage: `Updated ${pathExpr}. Restart the gateway to apply.`\n });\n };\n\n unset = async (pathExpr: string): Promise<void> => {\n let parsedPath: string[];\n try {\n parsedPath = parseRequiredConfigPath(pathExpr);\n } catch (error) {\n console.error(String(error));\n process.exit(1);\n return;\n }\n\n const prevConfig = loadConfig();\n const projectedContext = this.resolveProjectedChannelContext(prevConfig, parsedPath);\n const nextConfigTarget = projectedContext\n ? structuredClone(projectedContext.view) as unknown as Record<string, unknown>\n : structuredClone(prevConfig) as unknown as Record<string, unknown>;\n const removed = unsetAtConfigPath(nextConfigTarget, parsedPath);\n if (!removed) {\n console.error(`Config path not found: ${pathExpr}`);\n process.exit(1);\n return;\n }\n\n const nextConfig = projectedContext\n ? mergePluginConfigView(prevConfig, nextConfigTarget, projectedContext.bindings)\n : nextConfigTarget as Config;\n saveConfig(nextConfig as Config);\n await this.requestRestartForConfigDiff({\n prevConfig,\n nextConfig: nextConfig as Config,\n reason: `config.unset ${pathExpr}`,\n manualMessage: `Removed ${pathExpr}. Restart the gateway to apply.`\n });\n };\n\n private resolveReadConfigView = (config: Config, parsedPath: string[]): Config => {\n if (parsedPath[0] !== \"channels\") {\n return config;\n }\n const { bindings } = this.loadPluginChannelBindings(config);\n return resolveChannelConfigView(config, bindings);\n };\n\n private resolveProjectedChannelContext = (config: Config, parsedPath: string[]): {\n bindings: ReturnType<typeof getPluginChannelBindings>;\n view: Config;\n } | null => {\n if (parsedPath[0] !== \"channels\" || parsedPath.length < 2) {\n return null;\n }\n\n const channelId = parsedPath[1];\n const { bindings } = this.loadPluginChannelBindings(config);\n if (!bindings.some((binding) => binding.channelId === channelId)) {\n return null;\n }\n\n return {\n bindings,\n view: resolveChannelConfigView(config, bindings)\n };\n };\n\n private loadPluginChannelBindings = (config: Config): {\n bindings: ReturnType<typeof getPluginChannelBindings>;\n } => {\n const workspaceDir = getWorkspacePath(config.agents.defaults.workspace);\n const pluginRegistry = loadPluginRegistry(config, workspaceDir);\n return {\n bindings: getPluginChannelBindings(pluginRegistry)\n };\n };\n\n private requestRestartForConfigDiff = async (params: {\n prevConfig: Config;\n nextConfig: Config;\n reason: string;\n manualMessage: string;\n }): Promise<void> => {\n const { manualMessage, nextConfig, prevConfig, reason } = params;\n const changedPaths = diffConfigPaths(prevConfig, nextConfig);\n if (!changedPaths.length) {\n return;\n }\n const plan = buildReloadPlan(changedPaths);\n if (plan.restartRequired.length === 0) {\n return;\n }\n await this.deps.requestRestart({\n changedPaths: plan.restartRequired,\n mode: \"notify\",\n reason: `${reason} (${plan.restartRequired.join(\", \")})`,\n manualMessage\n });\n };\n}\n"],"mappings":";;;;;;;AAOA,IAAa,iBAAb,MAA4B;CAC1B,YACE,MAGA;AAHQ,OAAA,OAAA;;CAKV,OAAO,UAAkB,OAAyB,EAAE,KAAW;EAC7D,IAAI;AACJ,MAAI;AACF,gBAAa,wBAAwB,SAAS;WACvC,OAAO;AACd,WAAQ,MAAM,OAAO,MAAM,CAAC;AAC5B,WAAQ,KAAK,EAAE;AACf;;EAGF,MAAM,SAAS,YAAY;EAE3B,MAAM,SAAS,gBADQ,KAAK,sBAAsB,QAAQ,WAAW,EACtB,WAAW;AAC1D,MAAI,CAAC,OAAO,OAAO;AACjB,WAAQ,MAAM,0BAA0B,WAAW;AACnD,WAAQ,KAAK,EAAE;AACf;;AAGF,MAAI,KAAK,MAAM;AACb,WAAQ,IAAI,KAAK,UAAU,OAAO,SAAS,MAAM,MAAM,EAAE,CAAC;AAC1D;;AAGF,MACE,OAAO,OAAO,UAAU,YACxB,OAAO,OAAO,UAAU,YACxB,OAAO,OAAO,UAAU,WACxB;AACA,WAAQ,IAAI,OAAO,OAAO,MAAM,CAAC;AACjC;;AAGF,UAAQ,IAAI,KAAK,UAAU,OAAO,SAAS,MAAM,MAAM,EAAE,CAAC;;CAG5D,MAAM,OAAO,UAAkB,OAAe,OAAyB,EAAE,KAAoB;EAC3F,IAAI;AACJ,MAAI;AACF,gBAAa,wBAAwB,SAAS;WACvC,OAAO;AACd,WAAQ,MAAM,OAAO,MAAM,CAAC;AAC5B,WAAQ,KAAK,EAAE;AACf;;EAGF,IAAI;AACJ,MAAI;AACF,iBAAc,oBAAoB,OAAO,KAAK;WACvC,OAAO;AACd,WAAQ,MAAM,iCAAiC,OAAO,MAAM,GAAG;AAC/D,WAAQ,KAAK,EAAE;AACf;;EAGF,MAAM,aAAa,YAAY;EAC/B,MAAM,mBAAmB,KAAK,+BAA+B,YAAY,WAAW;EACpF,MAAM,mBAAmB,mBACrB,gBAAgB,iBAAiB,KAAK,GACtC,gBAAgB,WAAW;AAC/B,MAAI;AACF,mBAAgB,kBAAkB,YAAY,YAAY;WACnD,OAAO;AACd,WAAQ,MAAM,OAAO,MAAM,CAAC;AAC5B,WAAQ,KAAK,EAAE;AACf;;EAGF,MAAM,aAAa,mBACf,sBAAsB,YAAY,kBAAkB,iBAAiB,SAAS,GAC9E;AACJ,aAAW,WAAqB;AAChC,QAAM,KAAK,4BAA4B;GACrC;GACY;GACZ,QAAQ,cAAc;GACtB,eAAe,WAAW,SAAS;GACpC,CAAC;;CAGJ,QAAQ,OAAO,aAAoC;EACjD,IAAI;AACJ,MAAI;AACF,gBAAa,wBAAwB,SAAS;WACvC,OAAO;AACd,WAAQ,MAAM,OAAO,MAAM,CAAC;AAC5B,WAAQ,KAAK,EAAE;AACf;;EAGF,MAAM,aAAa,YAAY;EAC/B,MAAM,mBAAmB,KAAK,+BAA+B,YAAY,WAAW;EACpF,MAAM,mBAAmB,mBACrB,gBAAgB,iBAAiB,KAAK,GACtC,gBAAgB,WAAW;AAE/B,MAAI,CADY,kBAAkB,kBAAkB,WAAW,EACjD;AACZ,WAAQ,MAAM,0BAA0B,WAAW;AACnD,WAAQ,KAAK,EAAE;AACf;;EAGF,MAAM,aAAa,mBACf,sBAAsB,YAAY,kBAAkB,iBAAiB,SAAS,GAC9E;AACJ,aAAW,WAAqB;AAChC,QAAM,KAAK,4BAA4B;GACrC;GACY;GACZ,QAAQ,gBAAgB;GACxB,eAAe,WAAW,SAAS;GACpC,CAAC;;CAGJ,yBAAiC,QAAgB,eAAiC;AAChF,MAAI,WAAW,OAAO,WACpB,QAAO;EAET,MAAM,EAAE,aAAa,KAAK,0BAA0B,OAAO;AAC3D,SAAO,yBAAyB,QAAQ,SAAS;;CAGnD,kCAA0C,QAAgB,eAG9C;AACV,MAAI,WAAW,OAAO,cAAc,WAAW,SAAS,EACtD,QAAO;EAGT,MAAM,YAAY,WAAW;EAC7B,MAAM,EAAE,aAAa,KAAK,0BAA0B,OAAO;AAC3D,MAAI,CAAC,SAAS,MAAM,YAAY,QAAQ,cAAc,UAAU,CAC9D,QAAO;AAGT,SAAO;GACL;GACA,MAAM,yBAAyB,QAAQ,SAAS;GACjD;;CAGH,6BAAqC,WAEhC;AAGH,SAAO,EACL,UAAU,yBAFW,mBAAmB,QADrB,iBAAiB,OAAO,OAAO,SAAS,UAAU,CACR,CAEX,EACnD;;CAGH,8BAAsC,OAAO,WAKxB;EACnB,MAAM,EAAE,eAAe,YAAY,YAAY,WAAW;EAC1D,MAAM,eAAe,gBAAgB,YAAY,WAAW;AAC5D,MAAI,CAAC,aAAa,OAChB;EAEF,MAAM,OAAO,gBAAgB,aAAa;AAC1C,MAAI,KAAK,gBAAgB,WAAW,EAClC;AAEF,QAAM,KAAK,KAAK,eAAe;GAC7B,cAAc,KAAK;GACnB,MAAM;GACN,QAAQ,GAAG,OAAO,IAAI,KAAK,gBAAgB,KAAK,KAAK,CAAC;GACtD;GACD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-commands.service.d.ts","names":[],"sources":["../../../../../src/cli/commands/cron/services/cron-commands.service.ts"],"mappings":";;;;cAuBa,YAAA;EAAA,QAED,KAAA;cAAA,KAAA,GAAK,gBAAA;EAAA,QAGP,eAAA;EAQR,IAAA,GAAc,IAAA;IAAQ,WAAA;EAAA,MAA0B,OAAA;EAkBhD,GAAA,GAAa,IAAA,EAAM,cAAA,KAAiB,OAAA;EAyBpC,MAAA,GAAgB,KAAA,aAAgB,OAAA;EAwBhC,MAAA,GAAgB,KAAA,UAAe,IAAA;IAAQ,OAAA;EAAA,MAAsB,OAAA;EA2B7D,GAAA,GAAa,KAAA,UAAe,IAAA;IAAQ,KAAA;EAAA,MAAoB,OAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-commands.service.js","names":[],"sources":["../../../../../src/cli/commands/cron/services/cron-commands.service.ts"],"sourcesContent":["import type { CronCreateResult } from \"@nextclaw/server\";\nimport type { CronAddOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\nimport { createCronCreateRequest, CronLocalService } from \"./cron-local.service.js\";\nimport { printCronJobs, type CronJobView } from \"@nextclaw-service/cli/commands/cron/utils/cron-job.utils.js\";\nimport { UiBridgeApiClient, resolveLocalUiApiBase } from \"@nextclaw-service/shared/services/ui/ui-bridge-api.service.js\";\n\ntype CronListApiData = {\n jobs: CronJobView[];\n};\n\ntype CronActionApiData = {\n deleted?: boolean;\n job?: CronJobView | null;\n executed?: boolean;\n};\n\nfunction readErrorMessage(error: unknown): string {\n if (error instanceof Error && error.message.trim().length > 0) {\n return error.message.trim();\n }\n return String(error ?? \"unknown error\");\n}\n\nexport class CronCommands {\n constructor(\n private local = new CronLocalService()\n ) {}\n\n private createApiClient = (): UiBridgeApiClient | null => {\n const apiBase = resolveLocalUiApiBase();\n if (!apiBase) {\n return null;\n }\n return new UiBridgeApiClient(apiBase);\n };\n\n list = async (opts: { enabledOnly?: boolean }): Promise<void> => {\n const includeDisabled = opts.enabledOnly !== true;\n const apiClient = this.createApiClient();\n if (apiClient) {\n try {\n const query = includeDisabled ? \"\" : \"?enabledOnly=1\";\n const data = await apiClient.request<CronListApiData>({\n path: `/api/cron${query}`\n });\n printCronJobs(data.jobs);\n return;\n } catch {\n void 0;\n }\n }\n printCronJobs(this.local.list(includeDisabled));\n };\n\n add = async (opts: CronAddOptions): Promise<void> => {\n const request = createCronCreateRequest(opts);\n if (!request.request) {\n console.error(request.error ?? \"Error: Failed to add job\");\n return;\n }\n const apiClient = this.createApiClient();\n if (apiClient) {\n try {\n const data = await apiClient.request<CronCreateResult>({\n path: \"/api/cron\",\n method: \"POST\",\n body: request.request\n });\n console.log(`✓ Added job '${data.job.name}' (${data.job.id})`);\n return;\n } catch (error) {\n console.error(`Error: ${readErrorMessage(error)}`);\n return;\n }\n }\n const job = this.local.addRequest(request.request);\n console.log(`✓ Added job '${job.name}' (${job.id})`);\n };\n\n remove = async (jobId: string): Promise<void> => {\n const apiClient = this.createApiClient();\n if (apiClient) {\n try {\n const data = await apiClient.request<CronActionApiData>({\n path: `/api/cron/${encodeURIComponent(jobId)}`,\n method: \"DELETE\"\n });\n if (data.deleted) {\n console.log(`✓ Removed job ${jobId}`);\n return;\n }\n } catch (error) {\n console.error(`Error: ${readErrorMessage(error)}`);\n return;\n }\n }\n if (this.local.remove(jobId)) {\n console.log(`✓ Removed job ${jobId}`);\n } else {\n console.log(`Job ${jobId} not found`);\n }\n };\n\n enable = async (jobId: string, opts: { disable?: boolean }): Promise<void> => {\n const apiClient = this.createApiClient();\n const enabled = !opts.disable;\n if (apiClient) {\n try {\n const data = await apiClient.request<CronActionApiData>({\n path: `/api/cron/${encodeURIComponent(jobId)}/enable`,\n method: \"PUT\",\n body: { enabled }\n });\n if (data.job) {\n console.log(`✓ Job '${data.job.name}' ${opts.disable ? \"disabled\" : \"enabled\"}`);\n return;\n }\n } catch (error) {\n console.error(`Error: ${readErrorMessage(error)}`);\n return;\n }\n }\n const job = this.local.enable(jobId, enabled);\n if (job) {\n console.log(`✓ Job '${job.name}' ${opts.disable ? \"disabled\" : \"enabled\"}`);\n } else {\n console.log(`Job ${jobId} not found`);\n }\n };\n\n run = async (jobId: string, opts: { force?: boolean }): Promise<void> => {\n const apiClient = this.createApiClient();\n if (apiClient) {\n try {\n const data = await apiClient.request<CronActionApiData>({\n path: `/api/cron/${encodeURIComponent(jobId)}/run`,\n method: \"POST\",\n body: { force: Boolean(opts.force) }\n });\n console.log(data.executed ? \"✓ Job executed\" : `Failed to run job ${jobId}`);\n return;\n } catch (error) {\n console.error(`Error: ${readErrorMessage(error)}`);\n return;\n }\n }\n const ok = await this.local.run(jobId, Boolean(opts.force));\n console.log(ok ? \"✓ Job executed\" : `Failed to run job ${jobId}`);\n };\n}\n"],"mappings":"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"}
|
|
@@ -22,4 +22,5 @@ declare class CronLocalService {
|
|
|
22
22
|
readonly run: (jobId: string, force: boolean) => Promise<boolean>;
|
|
23
23
|
}
|
|
24
24
|
//#endregion
|
|
25
|
-
export { CronLocalService, createCronCreateRequest };
|
|
25
|
+
export { CronLocalService, createCronCreateRequest };
|
|
26
|
+
//# sourceMappingURL=cron-local.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-local.service.d.ts","names":[],"sources":["../../../../../src/cli/commands/cron/services/cron-local.service.ts"],"mappings":";;;;;;iBAwCgB,uBAAA,CAAwB,IAAA,EAAM,cAAA;EAAmB,OAAA,GAAU,iBAAA;EAAmB,KAAA;AAAA;AAAA,cAyBjF,gBAAA;EAAA,iBAEQ,UAAA;cAAA,UAAA,GAAU,iBAAA;EAAA,SAKpB,IAAA,GAAQ,GAAA,cAAe,WAAA;EAAA,SAIvB,UAAA,GAAc,OAAA,EAAS,iBAAA,KAAoB,WAAA;EAAA,SAe3C,GAAA,GAAO,IAAA,EAAM,cAAA;IAAmB,GAAA,EAAK,WAAA;IAAoB,KAAA;EAAA;EAAA,SAQzD,MAAA,GAAU,KAAA;EAAA,SAIV,MAAA,GAAU,KAAA,UAAe,OAAA,cAAmB,WAAA;EAAA,SAI5C,GAAA,GAAa,KAAA,UAAe,KAAA,cAAiB,OAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-local.service.js","names":[],"sources":["../../../../../src/cli/commands/cron/services/cron-local.service.ts"],"sourcesContent":["import { getDataDir } from \"@nextclaw/core\";\nimport { AutomationManager } from \"@nextclaw/kernel\";\nimport type { CronCreateRequest } from \"@nextclaw/server\";\nimport type { CronAddOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\nimport type { CronJobView } from \"@nextclaw-service/cli/commands/cron/utils/cron-job.utils.js\";\nimport { resolve } from \"node:path\";\n\nfunction readTrimmed(value: string | undefined): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n\nfunction toSchedule(opts: CronAddOptions): { schedule?: CronCreateRequest[\"schedule\"]; error?: string } {\n const every = readTrimmed(opts.every);\n const cron = readTrimmed(opts.cron);\n const at = readTrimmed(opts.at);\n const scheduleFlags = [every, cron, at].filter((value) => value !== undefined);\n if (scheduleFlags.length !== 1) {\n return { error: \"Error: Must specify exactly one of --every, --cron, or --at\" };\n }\n if (every) {\n const everySeconds = Number(every);\n if (!Number.isFinite(everySeconds) || everySeconds <= 0) {\n return { error: \"Error: --every must be a positive number of seconds\" };\n }\n return { schedule: { kind: \"every\", everyMs: everySeconds * 1000 } };\n }\n if (cron) {\n return { schedule: { kind: \"cron\", expr: cron } };\n }\n const atMs = Date.parse(String(at));\n if (!Number.isFinite(atMs)) {\n return { error: \"Error: --at must be a valid ISO datetime\" };\n }\n return { schedule: { kind: \"at\", atMs } };\n}\n\nexport function createCronCreateRequest(opts: CronAddOptions): { request?: CronCreateRequest; error?: string } {\n const name = readTrimmed(opts.name);\n const message = readTrimmed(opts.message);\n if (!name || !message) {\n return { error: \"Error: name and message are required\" };\n }\n const schedule = toSchedule(opts);\n if (!schedule.schedule) {\n return { error: schedule.error ?? \"Error: Must specify --every, --cron, or --at\" };\n }\n return {\n request: {\n name,\n message,\n schedule: schedule.schedule,\n agentId: readTrimmed(opts.agent),\n sessionId: readTrimmed(opts.session),\n deliver: Boolean(opts.deliver),\n channel: readTrimmed(opts.channel),\n to: readTrimmed(opts.to),\n accountId: readTrimmed(opts.account)\n }\n };\n}\n\nexport class CronLocalService {\n constructor(\n private readonly automation = new AutomationManager({\n storePath: resolve(getDataDir(), \"cron\", \"jobs.json\")\n })\n ) {}\n\n readonly list = (all: boolean): CronJobView[] => {\n return this.automation.listJobs(all) as CronJobView[];\n };\n\n readonly addRequest = (request: CronCreateRequest): CronJobView => {\n return this.automation.addJob({\n name: request.name,\n schedule: request.schedule,\n message: request.message,\n agentId: request.agentId ?? undefined,\n sessionId: request.sessionId ?? undefined,\n deliver: request.deliver === true,\n channel: request.channel ?? undefined,\n to: request.to ?? undefined,\n accountId: request.accountId ?? undefined,\n deleteAfterRun: request.deleteAfterRun === true\n }) as CronJobView;\n };\n\n readonly add = (opts: CronAddOptions): { job: CronJobView | null; error?: string } => {\n const request = createCronCreateRequest(opts);\n if (!request.request) {\n return { job: null, error: request.error };\n }\n return { job: this.addRequest(request.request) };\n };\n\n readonly remove = (jobId: string): boolean => {\n return this.automation.removeJob(jobId);\n };\n\n readonly enable = (jobId: string, enabled: boolean): CronJobView | null => {\n return (this.automation.enableJob(jobId, enabled) as CronJobView | null) ?? null;\n };\n\n readonly run = async (jobId: string, force: boolean): Promise<boolean> => {\n return this.automation.runJob(jobId, force);\n };\n}\n"],"mappings":";;;;AAOA,SAAS,YAAY,OAA+C;AAClE,KAAI,OAAO,UAAU,SACnB;AAGF,QADgB,MAAM,MAAM,IACV,KAAA;;AAGpB,SAAS,WAAW,MAAoF;CACtG,MAAM,QAAQ,YAAY,KAAK,MAAM;CACrC,MAAM,OAAO,YAAY,KAAK,KAAK;CACnC,MAAM,KAAK,YAAY,KAAK,GAAG;AAE/B,KADsB;EAAC;EAAO;EAAM;EAAG,CAAC,QAAQ,UAAU,UAAU,KAAA,EAAU,CAC5D,WAAW,EAC3B,QAAO,EAAE,OAAO,+DAA+D;AAEjF,KAAI,OAAO;EACT,MAAM,eAAe,OAAO,MAAM;AAClC,MAAI,CAAC,OAAO,SAAS,aAAa,IAAI,gBAAgB,EACpD,QAAO,EAAE,OAAO,uDAAuD;AAEzE,SAAO,EAAE,UAAU;GAAE,MAAM;GAAS,SAAS,eAAe;GAAM,EAAE;;AAEtE,KAAI,KACF,QAAO,EAAE,UAAU;EAAE,MAAM;EAAQ,MAAM;EAAM,EAAE;CAEnD,MAAM,OAAO,KAAK,MAAM,OAAO,GAAG,CAAC;AACnC,KAAI,CAAC,OAAO,SAAS,KAAK,CACxB,QAAO,EAAE,OAAO,4CAA4C;AAE9D,QAAO,EAAE,UAAU;EAAE,MAAM;EAAM;EAAM,EAAE;;AAG3C,SAAgB,wBAAwB,MAAuE;CAC7G,MAAM,OAAO,YAAY,KAAK,KAAK;CACnC,MAAM,UAAU,YAAY,KAAK,QAAQ;AACzC,KAAI,CAAC,QAAQ,CAAC,QACZ,QAAO,EAAE,OAAO,wCAAwC;CAE1D,MAAM,WAAW,WAAW,KAAK;AACjC,KAAI,CAAC,SAAS,SACZ,QAAO,EAAE,OAAO,SAAS,SAAS,gDAAgD;AAEpF,QAAO,EACL,SAAS;EACP;EACA;EACA,UAAU,SAAS;EACnB,SAAS,YAAY,KAAK,MAAM;EAChC,WAAW,YAAY,KAAK,QAAQ;EACpC,SAAS,QAAQ,KAAK,QAAQ;EAC9B,SAAS,YAAY,KAAK,QAAQ;EAClC,IAAI,YAAY,KAAK,GAAG;EACxB,WAAW,YAAY,KAAK,QAAQ;EACrC,EACF;;AAGH,IAAa,mBAAb,MAA8B;CAC5B,YACE,aAA8B,IAAI,kBAAkB,EAClD,WAAW,QAAQ,YAAY,EAAE,QAAQ,YAAY,EACtD,CAAC,EACF;AAHiB,OAAA,aAAA;;CAKnB,QAAiB,QAAgC;AAC/C,SAAO,KAAK,WAAW,SAAS,IAAI;;CAGtC,cAAuB,YAA4C;AACjE,SAAO,KAAK,WAAW,OAAO;GAC5B,MAAM,QAAQ;GACd,UAAU,QAAQ;GAClB,SAAS,QAAQ;GACjB,SAAS,QAAQ,WAAW,KAAA;GAC5B,WAAW,QAAQ,aAAa,KAAA;GAChC,SAAS,QAAQ,YAAY;GAC7B,SAAS,QAAQ,WAAW,KAAA;GAC5B,IAAI,QAAQ,MAAM,KAAA;GAClB,WAAW,QAAQ,aAAa,KAAA;GAChC,gBAAgB,QAAQ,mBAAmB;GAC5C,CAAC;;CAGJ,OAAgB,SAAsE;EACpF,MAAM,UAAU,wBAAwB,KAAK;AAC7C,MAAI,CAAC,QAAQ,QACX,QAAO;GAAE,KAAK;GAAM,OAAO,QAAQ;GAAO;AAE5C,SAAO,EAAE,KAAK,KAAK,WAAW,QAAQ,QAAQ,EAAE;;CAGlD,UAAmB,UAA2B;AAC5C,SAAO,KAAK,WAAW,UAAU,MAAM;;CAGzC,UAAmB,OAAe,YAAyC;AACzE,SAAQ,KAAK,WAAW,UAAU,OAAO,QAAQ,IAA2B;;CAG9E,MAAe,OAAO,OAAe,UAAqC;AACxE,SAAO,KAAK,WAAW,OAAO,OAAO,MAAM"}
|
|
@@ -28,4 +28,5 @@ type CronJobView = {
|
|
|
28
28
|
declare function formatCronSchedule(schedule: CronSchedule): string;
|
|
29
29
|
declare function printCronJobs(jobs: CronJobView[]): void;
|
|
30
30
|
//#endregion
|
|
31
|
-
export { CronJobView, CronPayload, CronSchedule, formatCronSchedule, printCronJobs };
|
|
31
|
+
export { CronJobView, CronPayload, CronSchedule, formatCronSchedule, printCronJobs };
|
|
32
|
+
//# sourceMappingURL=cron-job.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-job.utils.d.ts","names":[],"sources":["../../../../../src/cli/commands/cron/utils/cron-job.utils.ts"],"mappings":";KAAY,YAAA;EACN,IAAA;EAAe,OAAA;AAAA;EACf,IAAA;EAAc,IAAA;AAAA;EACd,IAAA;EAAY,IAAA;AAAA;AAAA,KAEN,WAAA;EACV,OAAA;EACA,OAAA;EACA,SAAA;EACA,OAAA;EACA,OAAA;EACA,EAAA;EACA,SAAA;AAAA;AAAA,KAGU,WAAA;EACV,EAAA;EACA,IAAA;EACA,OAAA;EACA,QAAA,EAAU,YAAA;EACV,OAAA,EAAS,WAAA;AAAA;AAAA,iBAGK,kBAAA,CAAmB,QAAA,EAAU,YAAA;AAAA,iBAU7B,aAAA,CAAc,IAAA,EAAM,WAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-job.utils.js","names":[],"sources":["../../../../../src/cli/commands/cron/utils/cron-job.utils.ts"],"sourcesContent":["export type CronSchedule =\n | { kind: \"every\"; everyMs?: number | null }\n | { kind: \"cron\"; expr?: string | null }\n | { kind: \"at\"; atMs?: number | null };\n\nexport type CronPayload = {\n message: string;\n agentId?: string | null;\n sessionId?: string | null;\n deliver?: boolean;\n channel?: string | null;\n to?: string | null;\n accountId?: string | null;\n};\n\nexport type CronJobView = {\n id: string;\n name: string;\n enabled: boolean;\n schedule: CronSchedule;\n payload: CronPayload;\n};\n\nexport function formatCronSchedule(schedule: CronSchedule): string {\n if (schedule.kind === \"every\") {\n return `every ${Math.round((schedule.everyMs ?? 0) / 1000)}s`;\n }\n if (schedule.kind === \"cron\") {\n return schedule.expr ?? \"\";\n }\n return schedule.atMs ? new Date(schedule.atMs).toISOString() : \"\";\n}\n\nexport function printCronJobs(jobs: CronJobView[]): void {\n if (!jobs.length) {\n console.log(\"No scheduled jobs.\");\n return;\n }\n for (const job of jobs) {\n console.log(`${job.id} [${job.enabled ? \"enabled\" : \"disabled\"}] ${job.name} ${formatCronSchedule(job.schedule)}`);\n }\n}\n"],"mappings":";AAuBA,SAAgB,mBAAmB,UAAgC;AACjE,KAAI,SAAS,SAAS,QACpB,QAAO,SAAS,KAAK,OAAO,SAAS,WAAW,KAAK,IAAK,CAAC;AAE7D,KAAI,SAAS,SAAS,OACpB,QAAO,SAAS,QAAQ;AAE1B,QAAO,SAAS,OAAO,IAAI,KAAK,SAAS,KAAK,CAAC,aAAa,GAAG;;AAGjE,SAAgB,cAAc,MAA2B;AACvD,KAAI,CAAC,KAAK,QAAQ;AAChB,UAAQ,IAAI,qBAAqB;AACjC;;AAEF,MAAK,MAAM,OAAO,KAChB,SAAQ,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,UAAU,YAAY,WAAW,IAAI,IAAI,KAAK,GAAG,mBAAmB,IAAI,SAAS,GAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics-commands.service.d.ts","names":[],"sources":["../../../../../src/cli/commands/diagnostics/services/diagnostics-commands.service.ts"],"mappings":";;;cAmBa,mBAAA;EAAA,QAGS,IAAA;EAAA,iBAFH,wBAAA;cAEG,IAAA;IAAQ,IAAA;EAAA;EAAA,SAEnB,MAAA,GAAgB,IAAA,GAAM,oBAAA,KAA4B,OAAA;EAAA,SAelD,MAAA,GAAgB,IAAA,GAAM,oBAAA,KAA4B,OAAA;EAAA,iBAsC1C,4BAAA;EAAA,iBAoBA,iBAAA;EAAA,iBAuDA,qBAAA;EAAA,iBAUA,oBAAA;EAAA,iBA0GA,2BAAA;EAAA,iBAuBA,cAAA;EAAA,iBAuBA,oBAAA;EAAA,iBAyBA,oBAAA;EAAA,iBAoEA,WAAA;EAAA,iBAeA,qBAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics-commands.service.js","names":["createNetServer"],"sources":["../../../../../src/cli/commands/diagnostics/services/diagnostics-commands.service.ts"],"sourcesContent":["import { createServer as createNetServer } from \"node:net\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport {\n APP_NAME,\n getConfigPath,\n getWorkspacePath,\n hasSecretRef,\n loadConfig,\n resolveAppLogPath\n} from \"@nextclaw/core\";\nimport { listBuiltinProviders } from \"@nextclaw/runtime\";\nimport { isProcessRunning, resolveUiApiBase, resolveUiConfig } from \"@nextclaw-service/shared/utils/cli.utils.js\";\nimport { managedServiceStateStore } from \"@nextclaw-service/shared/stores/managed-service-state.store.js\";\nimport type { ManagedServiceState } from \"@nextclaw-service/shared/stores/managed-service-state.store.js\";\nimport { ManagedServiceSupervisor } from \"@nextclaw-service/shared/services/runtime/managed-service-supervisor.service.js\";\nimport { printDoctorReport, printStatusReport, type DoctorCheck } from \"../utils/diagnostics-render.utils.js\";\nimport { resolveNextclawRemoteStatusSnapshot } from \"@nextclaw-service/commands/remote/index.js\";\nimport type { DoctorCommandOptions, HealthProbe, RuntimeStatusReport, StatusCommandOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\n\nexport class DiagnosticsCommands {\n private readonly managedServiceSupervisor = new ManagedServiceSupervisor();\n\n constructor(private deps: { logo: string }) {}\n\n readonly status = async (opts: StatusCommandOptions = {}): Promise<void> => {\n const report = await this.collectRuntimeStatus({\n verbose: Boolean(opts.verbose),\n fix: Boolean(opts.fix)\n });\n\n if (opts.json) {\n console.log(JSON.stringify(report, null, 2));\n process.exitCode = 0;\n return;\n }\n printStatusReport({ logo: this.deps.logo, report, verbose: Boolean(opts.verbose) });\n process.exitCode = 0;\n };\n\n readonly doctor = async (opts: DoctorCommandOptions = {}): Promise<void> => {\n const report = await this.collectRuntimeStatus({\n verbose: Boolean(opts.verbose),\n fix: Boolean(opts.fix)\n });\n\n const checkPort = await this.checkPortAvailability(this.resolveDoctorPortCheckTarget(report));\n const checks = this.buildDoctorChecks(report, checkPort);\n const exitCode = this.resolveDoctorExitCode(checks);\n\n if (opts.json) {\n console.log(\n JSON.stringify(\n {\n generatedAt: report.generatedAt,\n checks,\n status: report,\n exitCode\n },\n null,\n 2\n )\n );\n process.exitCode = exitCode;\n return;\n }\n\n printDoctorReport({\n logo: this.deps.logo,\n generatedAt: report.generatedAt,\n checks,\n recommendations: report.recommendations,\n verbose: Boolean(opts.verbose),\n logTail: report.logTail\n });\n process.exitCode = exitCode;\n };\n\n private readonly resolveDoctorPortCheckTarget = (report: RuntimeStatusReport): { host: string; port: number } => {\n const host = report.process.running && report.endpoints.uiUrl\n ? new URL(report.endpoints.uiUrl).hostname\n : \"127.0.0.1\";\n try {\n const base = report.process.running && report.endpoints.uiUrl\n ? report.endpoints.uiUrl\n : report.endpoints.configuredUiUrl;\n return {\n host,\n port: Number(new URL(base).port || 80)\n };\n } catch {\n return {\n host,\n port: 55667\n };\n }\n };\n\n private readonly buildDoctorChecks = (\n report: RuntimeStatusReport,\n checkPort: { available: boolean; detail: string }\n ): DoctorCheck[] => {\n const providerConfigured = report.providers.some((provider) => provider.configured);\n return [\n {\n name: \"config-file\",\n status: report.configExists ? \"pass\" : \"fail\",\n detail: report.configPath\n },\n {\n name: \"workspace-dir\",\n status: report.workspaceExists ? \"pass\" : \"warn\",\n detail: report.workspacePath\n },\n {\n name: \"service-state\",\n status: report.process.staleState\n ? \"fail\"\n : report.process.running\n ? report.process.lease?.missing\n ? \"warn\"\n : \"pass\"\n : \"warn\",\n detail: report.process.running\n ? `PID ${report.process.pid}${report.process.lease?.missing ? \" (missing lease heartbeat)\" : \"\"}`\n : report.process.staleState\n ? `state is stale (${report.process.staleReason ?? \"unknown\"})`\n : \"service not running\"\n },\n {\n name: \"service-health\",\n status: report.process.running\n ? report.health.managed.state === \"ok\"\n ? \"pass\"\n : \"fail\"\n : \"warn\",\n detail: report.process.running\n ? `${report.health.managed.state}: ${report.health.managed.detail}`\n : `${report.health.configured.state}: ${report.health.configured.detail}`\n },\n {\n name: \"ui-port-availability\",\n status: report.process.running || checkPort.available ? \"pass\" : \"fail\",\n detail: report.process.running ? \"managed by running service\" : checkPort.available ? \"available\" : checkPort.detail\n },\n {\n name: \"provider-config\",\n status: providerConfigured ? \"pass\" : \"warn\",\n detail: providerConfigured ? \"at least one provider configured\" : \"no provider api key configured\"\n }\n ] as const;\n };\n\n private readonly resolveDoctorExitCode = (checks: DoctorCheck[]): number => {\n if (checks.some((check) => check.status === \"fail\")) {\n return 1;\n }\n if (checks.some((check) => check.status === \"warn\")) {\n return 1;\n }\n return 0;\n };\n\n private readonly collectRuntimeStatus = async (params: { verbose: boolean; fix: boolean }): Promise<RuntimeStatusReport> => {\n const configPath = getConfigPath();\n const config = loadConfig();\n const workspacePath = getWorkspacePath(config.agents.defaults.workspace);\n const serviceStatePath = managedServiceStateStore.path;\n\n const serviceStatus = this.resolveManagedServiceStatus({ fix: params.fix });\n const { fixActions, liveness, serviceState } = serviceStatus;\n\n const managedByState = Boolean(serviceState);\n const running = Boolean(serviceState && liveness.running);\n const staleState = Boolean(serviceState && liveness.staleState);\n\n const configuredUi = resolveUiConfig(config, { enabled: true, host: config.ui.host, port: config.ui.port });\n const configuredUiUrl = resolveUiApiBase(configuredUi.host, configuredUi.port);\n const configuredApiUrl = `${configuredUiUrl}/api`;\n\n const managedUiUrl = serviceState?.uiUrl ?? null;\n const managedApiUrl = serviceState?.apiUrl ?? null;\n\n const managedHealth: HealthProbe = running && managedApiUrl\n ? await this.probeApiHealth(`${managedApiUrl}/health`)\n : { state: \"unreachable\", detail: \"service not running\" };\n\n const configuredHealth = await this.probeApiHealth(`${configuredApiUrl}/health`, 900);\n const remote = resolveNextclawRemoteStatusSnapshot(config);\n const orphanSuspected = !running && configuredHealth.state === \"ok\";\n const providers = this.listProviderStatuses(config);\n\n const issues: string[] = [];\n const recommendations: string[] = [];\n\n this.collectRuntimeIssues({\n configPath,\n workspacePath,\n staleState,\n running,\n managedHealth,\n serviceState,\n orphanSuspected,\n providers,\n issues,\n recommendations\n });\n\n const logTail = params.verbose\n ? this.readLogTail((serviceState?.logPath ?? resolveAppLogPath(\"service\")), 25)\n : [];\n\n const level: RuntimeStatusReport[\"level\"] = running\n ? managedHealth.state === \"ok\"\n ? issues.length > 0\n ? \"degraded\"\n : \"healthy\"\n : \"degraded\"\n : \"stopped\";\n\n const exitCode: RuntimeStatusReport[\"exitCode\"] = 0;\n\n return {\n generatedAt: new Date().toISOString(),\n configPath,\n configExists: existsSync(configPath),\n workspacePath,\n workspaceExists: existsSync(workspacePath),\n model: config.agents.defaults.model,\n providers,\n serviceStatePath,\n serviceStateExists: existsSync(serviceStatePath),\n fixActions,\n process: {\n managedByState,\n pid: serviceState?.pid ?? null,\n running,\n staleState,\n staleReason: liveness.staleReason,\n orphanSuspected,\n startedAt: serviceState?.startedAt ?? null,\n lease: serviceState\n ? {\n heartbeatAt: liveness.lastHeartbeatAt,\n expired: liveness.leaseExpired,\n missing: liveness.leaseMissing\n }\n : null,\n lastExit: serviceState?.lastExit ?? null\n },\n endpoints: {\n uiUrl: managedUiUrl,\n apiUrl: managedApiUrl,\n configuredUiUrl,\n configuredApiUrl\n },\n health: {\n managed: managedHealth,\n configured: configuredHealth\n },\n issues,\n recommendations,\n logTail,\n remote,\n level,\n exitCode\n };\n };\n\n private readonly resolveManagedServiceStatus = (params: { fix: boolean }): {\n fixActions: string[];\n liveness: ReturnType<ManagedServiceSupervisor[\"resolveStateLiveness\"]>;\n serviceState: ManagedServiceState | null;\n } => {\n const fixActions: string[] = [];\n let serviceState = managedServiceStateStore.read();\n let liveness = this.managedServiceSupervisor.resolveStateLiveness(serviceState);\n if (params.fix && serviceState && liveness.staleState && !liveness.processExists) {\n managedServiceStateStore.clear();\n fixActions.push(\"Cleared stale service state file.\");\n serviceState = managedServiceStateStore.read();\n liveness = this.managedServiceSupervisor.resolveStateLiveness(serviceState);\n } else if (params.fix && serviceState && liveness.staleState && liveness.processExists) {\n fixActions.push(\"Skipped clearing stale service state because the recorded PID still exists.\");\n }\n return {\n fixActions,\n liveness,\n serviceState\n };\n };\n\n private readonly probeApiHealth = async (url: string, timeoutMs = 1500): Promise<HealthProbe> => {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const response = await fetch(url, {\n method: \"GET\",\n signal: controller.signal\n });\n if (!response.ok) {\n return { state: \"invalid-response\", detail: `HTTP ${response.status}` };\n }\n const payload = (await response.json()) as { ok?: boolean; data?: { status?: string } };\n if (payload?.ok === true && payload?.data?.status === \"ok\") {\n return { state: \"ok\", detail: \"health endpoint returned ok\", payload };\n }\n return { state: \"invalid-response\", detail: \"unexpected health payload\", payload };\n } catch (error) {\n return { state: \"unreachable\", detail: String(error) };\n } finally {\n clearTimeout(timer);\n }\n };\n\n private readonly listProviderStatuses = (config: ReturnType<typeof loadConfig>): RuntimeStatusReport[\"providers\"] => {\n return listBuiltinProviders().map((spec) => {\n const provider = (config.providers as Record<string, { enabled?: boolean; apiKey?: string; apiBase?: string } | undefined>)[spec.name];\n const apiKeyRefSet = hasSecretRef(config, `providers.${spec.name}.apiKey`);\n if (!provider) {\n return { name: spec.displayName ?? spec.name, configured: false, detail: \"missing config\" };\n }\n if (provider.enabled === false) {\n return { name: spec.displayName ?? spec.name, configured: false, detail: \"disabled\" };\n }\n if (spec.isLocal) {\n return {\n name: spec.displayName ?? spec.name,\n configured: Boolean(provider.apiBase),\n detail: provider.apiBase ? provider.apiBase : \"apiBase not set\"\n };\n }\n return {\n name: spec.displayName ?? spec.name,\n configured: Boolean(provider.apiKey) || apiKeyRefSet,\n detail: provider.apiKey ? \"apiKey set\" : apiKeyRefSet ? \"apiKey ref set\" : \"apiKey not set\"\n };\n });\n };\n\n private readonly collectRuntimeIssues = (params: {\n configPath: string;\n workspacePath: string;\n staleState: boolean;\n running: boolean;\n managedHealth: HealthProbe;\n serviceState: ManagedServiceState | null;\n orphanSuspected: boolean;\n providers: RuntimeStatusReport[\"providers\"];\n issues: string[];\n recommendations: string[];\n }): void => {\n const {\n configPath,\n issues,\n managedHealth,\n orphanSuspected,\n providers,\n recommendations,\n running,\n serviceState,\n staleState,\n workspacePath\n } = params;\n if (!existsSync(configPath)) {\n issues.push(\"Config file is missing.\");\n recommendations.push(`Run ${APP_NAME} init to create config files.`);\n }\n if (!existsSync(workspacePath)) {\n issues.push(\"Workspace directory does not exist.\");\n recommendations.push(`Run ${APP_NAME} init to create workspace templates.`);\n }\n if (staleState) {\n const staleDetail = serviceState?.lastExit\n ? ` Last exit: ${serviceState.lastExit.reason}${serviceState.lastExit.signal ? ` (${serviceState.lastExit.signal})` : \"\"} at ${serviceState.lastExit.exitedAt}.`\n : \"\";\n issues.push(`Service state is stale (${params.serviceState ? \"state no longer represents a live lease\" : \"state missing\"}).${staleDetail}`);\n recommendations.push(\n params.serviceState && isProcessRunning(params.serviceState.pid)\n ? `Run ${APP_NAME} restart to replace the stale leased process.`\n : `Run ${APP_NAME} status --fix to clean stale state.`\n );\n }\n if (running && managedHealth.state !== \"ok\") {\n issues.push(`Managed service health check failed: ${managedHealth.detail}`);\n recommendations.push(`Check logs at ${serviceState?.logPath ?? resolveAppLogPath(\"service\")}.`);\n }\n if (running && serviceState && !serviceState.lease) {\n issues.push(\"Managed service state is missing a lease heartbeat.\");\n recommendations.push(`Run ${APP_NAME} restart to refresh the managed service state contract.`);\n }\n if (running && serviceState?.startupState === \"degraded\" && managedHealth.state !== \"ok\") {\n const startupHint = serviceState.startupLastProbeError ? ` (${serviceState.startupLastProbeError})` : \"\";\n issues.push(`Service is in degraded startup state${startupHint}.`);\n recommendations.push(`Wait and re-check ${APP_NAME} status; if it does not recover, inspect logs and restart.`);\n }\n if (!running) {\n recommendations.push(`Run ${APP_NAME} start to launch the service.`);\n }\n if (orphanSuspected) {\n issues.push(\"A service appears healthy on configured API endpoint, but state is missing/stale.\");\n recommendations.push(\"Another process may be occupying the UI port; stop it or use --ui-port with a free port.\");\n }\n if (!providers.some((provider) => provider.configured)) {\n recommendations.push(\"Configure at least one provider API key in UI or config before expecting agent replies.\");\n }\n };\n\n private readonly readLogTail = (path: string, maxLines = 25): string[] => {\n if (!existsSync(path)) {\n return [];\n }\n try {\n const lines = readFileSync(path, \"utf-8\").split(/\\r?\\n/).filter(Boolean);\n if (lines.length <= maxLines) {\n return lines;\n }\n return lines.slice(lines.length - maxLines);\n } catch {\n return [];\n }\n };\n\n private readonly checkPortAvailability = async (params: { host: string; port: number }): Promise<{ available: boolean; detail: string }> => {\n return await new Promise((resolve) => {\n const server = createNetServer();\n server.once(\"error\", (error) => {\n resolve({\n available: false,\n detail: `bind failed on ${params.host}:${params.port} (${String(error)})`\n });\n });\n server.listen(params.port, params.host, () => {\n server.close(() => {\n resolve({\n available: true,\n detail: `bind ok on ${params.host}:${params.port}`\n });\n });\n });\n });\n };\n}\n"],"mappings":"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"}
|
|
@@ -20,4 +20,5 @@ declare function printDoctorReport(params: {
|
|
|
20
20
|
logTail: string[];
|
|
21
21
|
}): void;
|
|
22
22
|
//#endregion
|
|
23
|
-
export { DoctorCheck, printDoctorReport, printStatusReport };
|
|
23
|
+
export { DoctorCheck, printDoctorReport, printStatusReport };
|
|
24
|
+
//# sourceMappingURL=diagnostics-render.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics-render.utils.d.ts","names":[],"sources":["../../../../../src/cli/commands/diagnostics/utils/diagnostics-render.utils.ts"],"mappings":";;;KAGY,WAAA;EACV,IAAA;EACA,MAAA;EACA,MAAA;AAAA;AAAA,iBAGc,iBAAA,CAAkB,MAAA;EAChC,IAAA;EACA,MAAA,EAAQ,mBAAA;EACR,OAAA;AAAA;AAAA,iBA0Ec,iBAAA,CAAkB,MAAA;EAChC,IAAA;EACA,WAAA;EACA,MAAA,EAAQ,WAAA;EACR,eAAA;EACA,OAAA;EACA,OAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics-render.utils.js","names":[],"sources":["../../../../../src/cli/commands/diagnostics/utils/diagnostics-render.utils.ts"],"sourcesContent":["import { APP_NAME } from \"@nextclaw/core\";\nimport type { RuntimeStatusReport } from \"@nextclaw-service/shared/types/cli.types.js\";\n\nexport type DoctorCheck = {\n name: string;\n status: \"pass\" | \"warn\" | \"fail\";\n detail: string;\n};\n\nexport function printStatusReport(params: {\n logo: string;\n report: RuntimeStatusReport;\n verbose: boolean;\n}): void {\n const { logo, report, verbose } = params;\n console.log(`${logo} ${APP_NAME} Status`);\n console.log(`Level: ${report.level}`);\n console.log(`Generated: ${report.generatedAt}`);\n console.log(\"\");\n printProcessSection(report);\n printEndpointSection(report);\n printProviderSection(report);\n printTextList(\"Fix actions\", report.fixActions);\n printTextList(\"Issues\", report.issues);\n printTextList(\"Recommendations\", report.recommendations);\n\n if (verbose && report.logTail.length > 0) {\n console.log(\"\");\n console.log(\"Recent logs:\");\n for (const line of report.logTail) {\n console.log(line);\n }\n }\n}\n\nfunction printProcessSection(report: RuntimeStatusReport): void {\n const processLabel = report.process.running\n ? `running (PID ${report.process.pid})`\n : report.process.staleState\n ? \"stale-state\"\n : \"stopped\";\n console.log(`Process: ${processLabel}`);\n console.log(`State file: ${report.serviceStatePath} ${report.serviceStateExists ? \"✓\" : \"✗\"}`);\n if (report.process.startedAt) {\n console.log(`Started: ${report.process.startedAt}`);\n }\n if (report.process.lease?.heartbeatAt) {\n console.log(`Last heartbeat: ${report.process.lease.heartbeatAt}${report.process.lease.expired ? \" (expired)\" : \"\"}`);\n }\n if (report.process.staleReason) {\n console.log(`Stale reason: ${report.process.staleReason}`);\n }\n if (report.process.lastExit) {\n const exit = report.process.lastExit;\n console.log(`Last exit: ${exit.reason}${exit.signal ? ` ${exit.signal}` : \"\"}${typeof exit.code === \"number\" ? ` code=${exit.code}` : \"\"} at ${exit.exitedAt}`);\n }\n console.log(`Managed health: ${report.health.managed.state} (${report.health.managed.detail})`);\n if (!report.process.running) {\n console.log(`Configured health: ${report.health.configured.state} (${report.health.configured.detail})`);\n }\n}\n\nfunction printEndpointSection(report: RuntimeStatusReport): void {\n console.log(`UI: ${report.endpoints.uiUrl ?? report.endpoints.configuredUiUrl}`);\n console.log(`API: ${report.endpoints.apiUrl ?? report.endpoints.configuredApiUrl}`);\n console.log(`Remote: ${report.remote.configuredEnabled ? \"enabled\" : \"disabled\"}${report.remote.runtime ? ` (${report.remote.runtime.state})` : \"\"}`);\n if (report.remote.runtime?.deviceName) {\n console.log(`Remote device: ${report.remote.runtime.deviceName}`);\n }\n if (report.remote.runtime?.platformBase) {\n console.log(`Remote platform: ${report.remote.runtime.platformBase}`);\n }\n if (report.remote.runtime?.lastError) {\n console.log(`Remote error: ${report.remote.runtime.lastError}`);\n }\n console.log(`Config: ${report.configPath} ${report.configExists ? \"✓\" : \"✗\"}`);\n console.log(`Workspace: ${report.workspacePath} ${report.workspaceExists ? \"✓\" : \"✗\"}`);\n console.log(`Model: ${report.model}`);\n}\n\nfunction printProviderSection(report: RuntimeStatusReport): void {\n for (const provider of report.providers) {\n console.log(`${provider.name}: ${provider.configured ? \"✓\" : \"not set\"}${provider.detail ? ` (${provider.detail})` : \"\"}`);\n }\n}\n\nexport function printDoctorReport(params: {\n logo: string;\n generatedAt: string;\n checks: DoctorCheck[];\n recommendations: string[];\n verbose: boolean;\n logTail: string[];\n}): void {\n const { checks, generatedAt, logTail, logo, recommendations, verbose } = params;\n console.log(`${logo} ${APP_NAME} Doctor`);\n console.log(`Generated: ${generatedAt}`);\n console.log(\"\");\n\n for (const check of checks) {\n const icon = check.status === \"pass\" ? \"✓\" : check.status === \"warn\" ? \"!\" : \"✗\";\n console.log(`${icon} ${check.name}: ${check.detail}`);\n }\n\n printTextList(\"Recommendations\", recommendations);\n\n if (verbose && logTail.length > 0) {\n console.log(\"\");\n console.log(\"Recent logs:\");\n for (const line of logTail) {\n console.log(line);\n }\n }\n}\n\nfunction printTextList(title: string, items: string[]): void {\n if (items.length === 0) {\n return;\n }\n console.log(\"\");\n console.log(`${title}:`);\n for (const item of items) {\n console.log(`- ${item}`);\n }\n}\n"],"mappings":";;AASA,SAAgB,kBAAkB,QAIzB;CACP,MAAM,EAAE,MAAM,QAAQ,YAAY;AAClC,SAAQ,IAAI,GAAG,KAAK,GAAG,SAAS,SAAS;AACzC,SAAQ,IAAI,UAAU,OAAO,QAAQ;AACrC,SAAQ,IAAI,cAAc,OAAO,cAAc;AAC/C,SAAQ,IAAI,GAAG;AACf,qBAAoB,OAAO;AAC3B,sBAAqB,OAAO;AAC5B,sBAAqB,OAAO;AAC5B,eAAc,eAAe,OAAO,WAAW;AAC/C,eAAc,UAAU,OAAO,OAAO;AACtC,eAAc,mBAAmB,OAAO,gBAAgB;AAExD,KAAI,WAAW,OAAO,QAAQ,SAAS,GAAG;AACxC,UAAQ,IAAI,GAAG;AACf,UAAQ,IAAI,eAAe;AAC3B,OAAK,MAAM,QAAQ,OAAO,QACxB,SAAQ,IAAI,KAAK;;;AAKvB,SAAS,oBAAoB,QAAmC;CAC9D,MAAM,eAAe,OAAO,QAAQ,UAChC,gBAAgB,OAAO,QAAQ,IAAI,KACnC,OAAO,QAAQ,aACb,gBACA;AACN,SAAQ,IAAI,YAAY,eAAe;AACvC,SAAQ,IAAI,eAAe,OAAO,iBAAiB,GAAG,OAAO,qBAAqB,MAAM,MAAM;AAC9F,KAAI,OAAO,QAAQ,UACjB,SAAQ,IAAI,YAAY,OAAO,QAAQ,YAAY;AAErD,KAAI,OAAO,QAAQ,OAAO,YACxB,SAAQ,IAAI,mBAAmB,OAAO,QAAQ,MAAM,cAAc,OAAO,QAAQ,MAAM,UAAU,eAAe,KAAK;AAEvH,KAAI,OAAO,QAAQ,YACjB,SAAQ,IAAI,iBAAiB,OAAO,QAAQ,cAAc;AAE5D,KAAI,OAAO,QAAQ,UAAU;EAC3B,MAAM,OAAO,OAAO,QAAQ;AAC5B,UAAQ,IAAI,cAAc,KAAK,SAAS,KAAK,SAAS,IAAI,KAAK,WAAW,KAAK,OAAO,KAAK,SAAS,WAAW,SAAS,KAAK,SAAS,GAAG,MAAM,KAAK,WAAW;;AAEjK,SAAQ,IAAI,mBAAmB,OAAO,OAAO,QAAQ,MAAM,IAAI,OAAO,OAAO,QAAQ,OAAO,GAAG;AAC/F,KAAI,CAAC,OAAO,QAAQ,QAClB,SAAQ,IAAI,sBAAsB,OAAO,OAAO,WAAW,MAAM,IAAI,OAAO,OAAO,WAAW,OAAO,GAAG;;AAI5G,SAAS,qBAAqB,QAAmC;AAC/D,SAAQ,IAAI,OAAO,OAAO,UAAU,SAAS,OAAO,UAAU,kBAAkB;AAChF,SAAQ,IAAI,QAAQ,OAAO,UAAU,UAAU,OAAO,UAAU,mBAAmB;AACnF,SAAQ,IAAI,WAAW,OAAO,OAAO,oBAAoB,YAAY,aAAa,OAAO,OAAO,UAAU,KAAK,OAAO,OAAO,QAAQ,MAAM,KAAK,KAAK;AACrJ,KAAI,OAAO,OAAO,SAAS,WACzB,SAAQ,IAAI,kBAAkB,OAAO,OAAO,QAAQ,aAAa;AAEnE,KAAI,OAAO,OAAO,SAAS,aACzB,SAAQ,IAAI,oBAAoB,OAAO,OAAO,QAAQ,eAAe;AAEvE,KAAI,OAAO,OAAO,SAAS,UACzB,SAAQ,IAAI,iBAAiB,OAAO,OAAO,QAAQ,YAAY;AAEjE,SAAQ,IAAI,WAAW,OAAO,WAAW,GAAG,OAAO,eAAe,MAAM,MAAM;AAC9E,SAAQ,IAAI,cAAc,OAAO,cAAc,GAAG,OAAO,kBAAkB,MAAM,MAAM;AACvF,SAAQ,IAAI,UAAU,OAAO,QAAQ;;AAGvC,SAAS,qBAAqB,QAAmC;AAC/D,MAAK,MAAM,YAAY,OAAO,UAC5B,SAAQ,IAAI,GAAG,SAAS,KAAK,IAAI,SAAS,aAAa,MAAM,YAAY,SAAS,SAAS,KAAK,SAAS,OAAO,KAAK,KAAK;;AAI9H,SAAgB,kBAAkB,QAOzB;CACP,MAAM,EAAE,QAAQ,aAAa,SAAS,MAAM,iBAAiB,YAAY;AACzE,SAAQ,IAAI,GAAG,KAAK,GAAG,SAAS,SAAS;AACzC,SAAQ,IAAI,cAAc,cAAc;AACxC,SAAQ,IAAI,GAAG;AAEf,MAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,OAAO,MAAM,WAAW,SAAS,MAAM,MAAM,WAAW,SAAS,MAAM;AAC7E,UAAQ,IAAI,GAAG,KAAK,GAAG,MAAM,KAAK,IAAI,MAAM,SAAS;;AAGvD,eAAc,mBAAmB,gBAAgB;AAEjD,KAAI,WAAW,QAAQ,SAAS,GAAG;AACjC,UAAQ,IAAI,GAAG;AACf,UAAQ,IAAI,eAAe;AAC3B,OAAK,MAAM,QAAQ,QACjB,SAAQ,IAAI,KAAK;;;AAKvB,SAAS,cAAc,OAAe,OAAuB;AAC3D,KAAI,MAAM,WAAW,EACnB;AAEF,SAAQ,IAAI,GAAG;AACf,SAAQ,IAAI,GAAG,MAAM,GAAG;AACxB,MAAK,MAAM,QAAQ,MACjB,SAAQ,IAAI,KAAK,OAAO"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/cli/commands/gateway/index.ts"],"mappings":";;;;cAIa,eAAA;EAAA,iBAEQ,IAAA;cAAA,IAAA;IACf,qBAAA,EAAuB,qBAAA;IACvB,gBAAA;EAAA;EAIJ,GAAA,GAAa,IAAA,EAAM,qBAAA,KAAwB,OAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/cli/commands/gateway/index.ts"],"sourcesContent":["import type { Config } from \"@nextclaw/core\";\nimport type { GatewayCommandOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\nimport type { RuntimeCommandService } from \"@nextclaw-service/shared/services/runtime/runtime-command.service.js\";\n\nexport class GatewayCommands {\n constructor(\n private readonly deps: {\n runtimeCommandService: RuntimeCommandService;\n forcedPublicHost: string;\n }\n ) {}\n\n run = async (opts: GatewayCommandOptions): Promise<void> => {\n const uiOverrides: Partial<Config[\"ui\"]> = {\n host: this.deps.forcedPublicHost,\n };\n if (opts.ui) {\n uiOverrides.enabled = true;\n }\n if (opts.uiPort) {\n uiOverrides.port = Number(opts.uiPort);\n }\n if (opts.uiOpen) {\n uiOverrides.open = true;\n }\n await this.deps.runtimeCommandService.startGateway({ uiOverrides });\n };\n}\n"],"mappings":";AAIA,IAAa,kBAAb,MAA6B;CAC3B,YACE,MAIA;AAJiB,OAAA,OAAA;;CAMnB,MAAM,OAAO,SAA+C;EAC1D,MAAM,cAAqC,EACzC,MAAM,KAAK,KAAK,kBACjB;AACD,MAAI,KAAK,GACP,aAAY,UAAU;AAExB,MAAI,KAAK,OACP,aAAY,OAAO,OAAO,KAAK,OAAO;AAExC,MAAI,KAAK,OACP,aAAY,OAAO;AAErB,QAAM,KAAK,KAAK,sBAAsB,aAAa,EAAE,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/cli/commands/logs/index.ts"],"mappings":";;;;cAGa,YAAA;EAAA,iBACkB,OAAA;cAAA,OAAA,GAAS,cAAA;EAEtC,IAAA;EAUA,IAAA,GAAQ,IAAA,GAAM,sBAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/cli/commands/logs/index.ts"],"sourcesContent":["import { getLoggingRuntime, type AppLogKind, type LoggingRuntime } from \"@nextclaw/core\";\nimport type { LogsTailCommandOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\n\nexport class LogsCommands {\n constructor(private readonly runtime: LoggingRuntime = getLoggingRuntime()) {}\n\n path = (): void => {\n const paths = this.runtime.getPaths();\n console.log([\n `Logs directory: ${paths.logsDir}`,\n `Service log: ${paths.serviceLogPath}`,\n `Crash log: ${paths.crashLogPath}`,\n `Archive: ${paths.archiveDir}`,\n ].join(\"\\n\"));\n };\n\n tail = (opts: LogsTailCommandOptions = {}): void => {\n const kind: AppLogKind = opts.crash ? \"crash\" : \"service\";\n const rawLines = Number(opts.lines);\n const lines = Number.isFinite(rawLines) && rawLines > 0 ? Math.floor(rawLines) : 40;\n const output = this.runtime.tail(kind, lines);\n if (output.length === 0) {\n console.log(`No log entries found in ${this.runtime.resolveLogPath(kind)}.`);\n return;\n }\n console.log(output.join(\"\\n\"));\n };\n}\n"],"mappings":";;AAGA,IAAa,eAAb,MAA0B;CACxB,YAAY,UAA2C,mBAAmB,EAAE;AAA/C,OAAA,UAAA;;CAE7B,aAAmB;EACjB,MAAM,QAAQ,KAAK,QAAQ,UAAU;AACrC,UAAQ,IAAI;GACV,mBAAmB,MAAM;GACzB,gBAAgB,MAAM;GACtB,cAAc,MAAM;GACpB,YAAY,MAAM;GACnB,CAAC,KAAK,KAAK,CAAC;;CAGf,QAAQ,OAA+B,EAAE,KAAW;EAClD,MAAM,OAAmB,KAAK,QAAQ,UAAU;EAChD,MAAM,WAAW,OAAO,KAAK,MAAM;EACnC,MAAM,QAAQ,OAAO,SAAS,SAAS,IAAI,WAAW,IAAI,KAAK,MAAM,SAAS,GAAG;EACjF,MAAM,SAAS,KAAK,QAAQ,KAAK,MAAM,MAAM;AAC7C,MAAI,OAAO,WAAW,GAAG;AACvB,WAAQ,IAAI,2BAA2B,KAAK,QAAQ,eAAe,KAAK,CAAC,GAAG;AAC5E;;AAEF,UAAQ,IAAI,OAAO,KAAK,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/cli/commands/mcp/index.ts"],"mappings":";;;cA4Ia,WAAA;EACX,IAAA,GAAQ,IAAA,GAAM,cAAA;EA+Bd,GAAA,GAAa,IAAA,UAAc,OAAA,YAAmB,IAAA,EAAM,oBAAA,KAAuB,OAAA;EAa3E,MAAA,GAAgB,IAAA,aAAe,OAAA;EAa/B,MAAA,GAAgB,IAAA,aAAe,OAAA;EAI/B,OAAA,GAAiB,IAAA,aAAe,OAAA;EAIhC,MAAA,GAAgB,IAAA,WAAe,IAAA,GAAM,gBAAA,KAAwB,OAAA;EAAA,QAiCrD,aAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/cli/commands/mcp/index.ts"],"sourcesContent":["import { loadConfig, saveConfig, type McpServerDefinition } from \"@nextclaw/core\";\nimport {\n McpDoctorFacade,\n McpMutationService,\n McpRegistryService\n} from \"@nextclaw/mcp\";\nimport type { McpAddCommandOptions, McpDoctorOptions, McpListOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\n\nfunction normalizeOptionalString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n\nfunction parsePairs(values: string[] | undefined, label: string): Record<string, string> {\n const output: Record<string, string> = {};\n for (const raw of values ?? []) {\n const index = raw.indexOf(\"=\");\n if (index <= 0) {\n throw new Error(`Invalid ${label} entry: ${raw}. Expected key=value.`);\n }\n const key = raw.slice(0, index).trim();\n const value = raw.slice(index + 1);\n if (!key) {\n throw new Error(`Invalid ${label} entry: ${raw}. Expected key=value.`);\n }\n output[key] = value;\n }\n return output;\n}\n\nfunction parseTimeoutMs(value: unknown): number | undefined {\n if (value === undefined || value === null || value === \"\") {\n return undefined;\n }\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || parsed <= 0) {\n throw new Error(`Invalid timeout: ${String(value)}`);\n }\n return Math.trunc(parsed);\n}\n\nfunction buildMcpServerDefinition(command: string[], opts: McpAddCommandOptions): McpServerDefinition {\n const transport = (normalizeOptionalString(opts.transport) ?? \"stdio\").toLowerCase();\n const disabled = Boolean(opts.disabled);\n const explicitAgents = Array.from(\n new Set(\n (opts.agent ?? [])\n .map((agentId) => normalizeOptionalString(agentId))\n .filter((agentId): agentId is string => Boolean(agentId))\n )\n );\n const allAgents = explicitAgents.length === 0 ? true : Boolean(opts.allAgents);\n\n if (transport === \"stdio\") {\n if (command.length === 0) {\n throw new Error(\"stdio transport requires a command after --\");\n }\n return {\n enabled: !disabled,\n transport: {\n type: \"stdio\",\n command: command[0],\n args: command.slice(1),\n cwd: normalizeOptionalString(opts.cwd),\n env: parsePairs(opts.env, \"env\"),\n stderr: (normalizeOptionalString(opts.stderr) ?? \"pipe\") as \"inherit\" | \"pipe\" | \"ignore\"\n },\n scope: {\n allAgents,\n agents: allAgents ? [] : explicitAgents\n },\n policy: {\n trust: \"explicit\",\n start: \"eager\"\n },\n metadata: {\n source: \"manual\",\n installedAt: new Date().toISOString()\n }\n };\n }\n\n const url = normalizeOptionalString(opts.url);\n if (!url) {\n throw new Error(`${transport} transport requires --url`);\n }\n const timeoutMs = parseTimeoutMs(opts.timeoutMs);\n const shared = {\n enabled: !disabled,\n scope: {\n allAgents,\n agents: allAgents ? [] : explicitAgents\n },\n policy: {\n trust: \"explicit\" as const,\n start: \"eager\" as const\n },\n metadata: {\n source: \"manual\" as const,\n installedAt: new Date().toISOString()\n }\n };\n\n if (transport === \"http\") {\n return {\n ...shared,\n transport: {\n type: \"http\",\n url,\n headers: parsePairs(opts.header, \"header\"),\n timeoutMs: timeoutMs ?? 15000,\n verifyTls: !opts.insecure\n }\n };\n }\n\n if (transport === \"sse\") {\n return {\n ...shared,\n transport: {\n type: \"sse\",\n url,\n headers: parsePairs(opts.header, \"header\"),\n timeoutMs: timeoutMs ?? 15000,\n verifyTls: !opts.insecure,\n reconnect: {\n enabled: true,\n initialDelayMs: 1000,\n maxDelayMs: 30000\n }\n }\n };\n }\n\n throw new Error(`Unsupported MCP transport: ${transport}`);\n}\n\nexport class McpCommands {\n list = (opts: McpListOptions = {}): void => {\n const registry = new McpRegistryService({\n getConfig: () => loadConfig()\n });\n const servers = registry.listServers().map((server) => ({\n name: server.name,\n enabled: server.definition.enabled,\n transport: server.definition.transport.type,\n scope: server.definition.scope\n }));\n\n if (opts.json) {\n console.log(JSON.stringify({ servers }, null, 2));\n return;\n }\n\n if (servers.length === 0) {\n console.log(\"No MCP servers configured.\");\n return;\n }\n\n for (const server of servers) {\n const scope = server.scope.allAgents\n ? \"all-agents\"\n : server.scope.agents.length > 0\n ? `agents=${server.scope.agents.join(\",\")}`\n : \"default-agent\";\n console.log(`${server.enabled ? \"ENABLED \" : \"DISABLED\"} ${server.name} (${server.transport}, ${scope})`);\n }\n };\n\n add = async (name: string, command: string[], opts: McpAddCommandOptions): Promise<void> => {\n const mutation = new McpMutationService({\n getConfig: () => loadConfig(),\n saveConfig: (config) => saveConfig(config)\n });\n const result = mutation.addServer(name, buildMcpServerDefinition(command, opts));\n if (!result.changed) {\n reportUserInputIssue(result.message);\n return;\n }\n console.log(result.message);\n };\n\n remove = async (name: string): Promise<void> => {\n const mutation = new McpMutationService({\n getConfig: () => loadConfig(),\n saveConfig: (config) => saveConfig(config)\n });\n const result = mutation.removeServer(name);\n if (!result.changed) {\n reportUserInputIssue(result.message);\n return;\n }\n console.log(result.message);\n };\n\n enable = async (name: string): Promise<void> => {\n await this.toggleEnabled(name, true);\n };\n\n disable = async (name: string): Promise<void> => {\n await this.toggleEnabled(name, false);\n };\n\n doctor = async (name?: string, opts: McpDoctorOptions = {}): Promise<void> => {\n const registry = new McpRegistryService({\n getConfig: () => loadConfig()\n });\n const doctor = new McpDoctorFacade({\n getConfig: () => loadConfig(),\n registryService: registry\n });\n\n try {\n const reports = await doctor.inspect(name);\n if (opts.json) {\n console.log(JSON.stringify({ reports }, null, 2));\n return;\n }\n\n if (reports.length === 0) {\n console.log(\"No MCP servers matched.\");\n return;\n }\n\n for (const report of reports) {\n const status = report.error ? \"ERROR\" : \"OK\";\n const detail = report.error ? ` (${report.error})` : \"\";\n console.log(\n `[${status}] ${report.name} enabled=${report.enabled} transport=${report.transport} tools=${report.toolCount}${detail}`\n );\n }\n } finally {\n await registry.close();\n }\n };\n\n private toggleEnabled = async (name: string, enabled: boolean): Promise<void> => {\n const mutation = new McpMutationService({\n getConfig: () => loadConfig(),\n saveConfig: (config) => saveConfig(config)\n });\n const result = mutation.toggleEnabled(name, enabled);\n if (!result.changed) {\n reportUserInputIssue(result.message);\n return;\n }\n console.log(result.message);\n };\n}\n\nfunction reportUserInputIssue(message: string): void {\n console.error(message);\n process.exitCode = 1;\n}\n"],"mappings":";;;AAQA,SAAS,wBAAwB,OAAoC;AACnE,KAAI,OAAO,UAAU,SACnB;AAGF,QADgB,MAAM,MAAM,IACV,KAAA;;AAGpB,SAAS,WAAW,QAA8B,OAAuC;CACvF,MAAM,SAAiC,EAAE;AACzC,MAAK,MAAM,OAAO,UAAU,EAAE,EAAE;EAC9B,MAAM,QAAQ,IAAI,QAAQ,IAAI;AAC9B,MAAI,SAAS,EACX,OAAM,IAAI,MAAM,WAAW,MAAM,UAAU,IAAI,uBAAuB;EAExE,MAAM,MAAM,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM;EACtC,MAAM,QAAQ,IAAI,MAAM,QAAQ,EAAE;AAClC,MAAI,CAAC,IACH,OAAM,IAAI,MAAM,WAAW,MAAM,UAAU,IAAI,uBAAuB;AAExE,SAAO,OAAO;;AAEhB,QAAO;;AAGT,SAAS,eAAe,OAAoC;AAC1D,KAAI,UAAU,KAAA,KAAa,UAAU,QAAQ,UAAU,GACrD;CAEF,MAAM,SAAS,OAAO,MAAM;AAC5B,KAAI,CAAC,OAAO,SAAS,OAAO,IAAI,UAAU,EACxC,OAAM,IAAI,MAAM,oBAAoB,OAAO,MAAM,GAAG;AAEtD,QAAO,KAAK,MAAM,OAAO;;AAG3B,SAAS,yBAAyB,SAAmB,MAAiD;CACpG,MAAM,aAAa,wBAAwB,KAAK,UAAU,IAAI,SAAS,aAAa;CACpF,MAAM,WAAW,QAAQ,KAAK,SAAS;CACvC,MAAM,iBAAiB,MAAM,KAC3B,IAAI,KACD,KAAK,SAAS,EAAE,EACd,KAAK,YAAY,wBAAwB,QAAQ,CAAC,CAClD,QAAQ,YAA+B,QAAQ,QAAQ,CAAC,CAC5D,CACF;CACD,MAAM,YAAY,eAAe,WAAW,IAAI,OAAO,QAAQ,KAAK,UAAU;AAE9E,KAAI,cAAc,SAAS;AACzB,MAAI,QAAQ,WAAW,EACrB,OAAM,IAAI,MAAM,8CAA8C;AAEhE,SAAO;GACL,SAAS,CAAC;GACV,WAAW;IACT,MAAM;IACN,SAAS,QAAQ;IACjB,MAAM,QAAQ,MAAM,EAAE;IACtB,KAAK,wBAAwB,KAAK,IAAI;IACtC,KAAK,WAAW,KAAK,KAAK,MAAM;IAChC,QAAS,wBAAwB,KAAK,OAAO,IAAI;IAClD;GACD,OAAO;IACL;IACA,QAAQ,YAAY,EAAE,GAAG;IAC1B;GACD,QAAQ;IACN,OAAO;IACP,OAAO;IACR;GACD,UAAU;IACR,QAAQ;IACR,8BAAa,IAAI,MAAM,EAAC,aAAa;IACtC;GACF;;CAGH,MAAM,MAAM,wBAAwB,KAAK,IAAI;AAC7C,KAAI,CAAC,IACH,OAAM,IAAI,MAAM,GAAG,UAAU,2BAA2B;CAE1D,MAAM,YAAY,eAAe,KAAK,UAAU;CAChD,MAAM,SAAS;EACb,SAAS,CAAC;EACV,OAAO;GACL;GACA,QAAQ,YAAY,EAAE,GAAG;GAC1B;EACD,QAAQ;GACN,OAAO;GACP,OAAO;GACR;EACD,UAAU;GACR,QAAQ;GACR,8BAAa,IAAI,MAAM,EAAC,aAAa;GACtC;EACF;AAED,KAAI,cAAc,OAChB,QAAO;EACL,GAAG;EACH,WAAW;GACT,MAAM;GACN;GACA,SAAS,WAAW,KAAK,QAAQ,SAAS;GAC1C,WAAW,aAAa;GACxB,WAAW,CAAC,KAAK;GAClB;EACF;AAGH,KAAI,cAAc,MAChB,QAAO;EACL,GAAG;EACH,WAAW;GACT,MAAM;GACN;GACA,SAAS,WAAW,KAAK,QAAQ,SAAS;GAC1C,WAAW,aAAa;GACxB,WAAW,CAAC,KAAK;GACjB,WAAW;IACT,SAAS;IACT,gBAAgB;IAChB,YAAY;IACb;GACF;EACF;AAGH,OAAM,IAAI,MAAM,8BAA8B,YAAY;;AAG5D,IAAa,cAAb,MAAyB;CACvB,QAAQ,OAAuB,EAAE,KAAW;EAI1C,MAAM,UAHW,IAAI,mBAAmB,EACtC,iBAAiB,YAAY,EAC9B,CAAC,CACuB,aAAa,CAAC,KAAK,YAAY;GACtD,MAAM,OAAO;GACb,SAAS,OAAO,WAAW;GAC3B,WAAW,OAAO,WAAW,UAAU;GACvC,OAAO,OAAO,WAAW;GAC1B,EAAE;AAEH,MAAI,KAAK,MAAM;AACb,WAAQ,IAAI,KAAK,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AACjD;;AAGF,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAQ,IAAI,6BAA6B;AACzC;;AAGF,OAAK,MAAM,UAAU,SAAS;GAC5B,MAAM,QAAQ,OAAO,MAAM,YACvB,eACA,OAAO,MAAM,OAAO,SAAS,IAC3B,UAAU,OAAO,MAAM,OAAO,KAAK,IAAI,KACvC;AACN,WAAQ,IAAI,GAAG,OAAO,UAAU,aAAa,WAAW,GAAG,OAAO,KAAK,IAAI,OAAO,UAAU,IAAI,MAAM,GAAG;;;CAI7G,MAAM,OAAO,MAAc,SAAmB,SAA8C;EAK1F,MAAM,SAJW,IAAI,mBAAmB;GACtC,iBAAiB,YAAY;GAC7B,aAAa,WAAW,WAAW,OAAO;GAC3C,CAAC,CACsB,UAAU,MAAM,yBAAyB,SAAS,KAAK,CAAC;AAChF,MAAI,CAAC,OAAO,SAAS;AACnB,wBAAqB,OAAO,QAAQ;AACpC;;AAEF,UAAQ,IAAI,OAAO,QAAQ;;CAG7B,SAAS,OAAO,SAAgC;EAK9C,MAAM,SAJW,IAAI,mBAAmB;GACtC,iBAAiB,YAAY;GAC7B,aAAa,WAAW,WAAW,OAAO;GAC3C,CAAC,CACsB,aAAa,KAAK;AAC1C,MAAI,CAAC,OAAO,SAAS;AACnB,wBAAqB,OAAO,QAAQ;AACpC;;AAEF,UAAQ,IAAI,OAAO,QAAQ;;CAG7B,SAAS,OAAO,SAAgC;AAC9C,QAAM,KAAK,cAAc,MAAM,KAAK;;CAGtC,UAAU,OAAO,SAAgC;AAC/C,QAAM,KAAK,cAAc,MAAM,MAAM;;CAGvC,SAAS,OAAO,MAAe,OAAyB,EAAE,KAAoB;EAC5E,MAAM,WAAW,IAAI,mBAAmB,EACtC,iBAAiB,YAAY,EAC9B,CAAC;EACF,MAAM,SAAS,IAAI,gBAAgB;GACjC,iBAAiB,YAAY;GAC7B,iBAAiB;GAClB,CAAC;AAEF,MAAI;GACF,MAAM,UAAU,MAAM,OAAO,QAAQ,KAAK;AAC1C,OAAI,KAAK,MAAM;AACb,YAAQ,IAAI,KAAK,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AACjD;;AAGF,OAAI,QAAQ,WAAW,GAAG;AACxB,YAAQ,IAAI,0BAA0B;AACtC;;AAGF,QAAK,MAAM,UAAU,SAAS;IAC5B,MAAM,SAAS,OAAO,QAAQ,UAAU;IACxC,MAAM,SAAS,OAAO,QAAQ,KAAK,OAAO,MAAM,KAAK;AACrD,YAAQ,IACN,IAAI,OAAO,IAAI,OAAO,KAAK,WAAW,OAAO,QAAQ,aAAa,OAAO,UAAU,SAAS,OAAO,YAAY,SAChH;;YAEK;AACR,SAAM,SAAS,OAAO;;;CAI1B,gBAAwB,OAAO,MAAc,YAAoC;EAK/E,MAAM,SAJW,IAAI,mBAAmB;GACtC,iBAAiB,YAAY;GAC7B,aAAa,WAAW,WAAW,OAAO;GAC3C,CAAC,CACsB,cAAc,MAAM,QAAQ;AACpD,MAAI,CAAC,OAAO,SAAS;AACnB,wBAAqB,OAAO,QAAQ;AACpC;;AAEF,UAAQ,IAAI,OAAO,QAAQ;;;AAI/B,SAAS,qBAAqB,SAAuB;AACnD,SAAQ,MAAM,QAAQ;AACtB,SAAQ,WAAW"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/cli/commands/restart/index.ts"],"mappings":";;;;;cAUa,eAAA;EAAA,iBAEQ,IAAA;cAAA,IAAA;IACf,qBAAA,EAAuB,qBAAA;IACvB,aAAA,EAAe,aAAA;IACf,gBAAA;IACA,mCAAA,GAAsC,MAAA,aAAmB,OAAA;EAAA;EAI7D,GAAA,GAAa,IAAA,EAAM,mBAAA,KAAsB,OAAA;EAAA,QAuDjC,wBAAA;EAAA,QA6BA,oCAAA;EAAA,QAQA,iCAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/cli/commands/restart/index.ts"],"sourcesContent":["import { APP_NAME, loadConfig } from \"@nextclaw/core\";\nimport { managedServiceStateStore } from \"@nextclaw-service/shared/stores/managed-service-state.store.js\";\nimport { localUiRuntimeStore } from \"@nextclaw-service/shared/stores/local-ui-runtime.store.js\";\nimport { findListeningProcessByPort, isProcessRunning, resolveUiConfig, waitForExit } from \"@nextclaw-service/shared/utils/cli.utils.js\";\nimport { resolveManagedServiceUiOverrides } from \"@nextclaw-service/shared/utils/runtime-helpers.js\";\nimport { describeUnmanagedHealthyTargetMessage } from \"@nextclaw-service/shared/services/runtime/runtime-command.service.js\";\nimport type { RuntimeCommandService } from \"@nextclaw-service/shared/services/runtime/runtime-command.service.js\";\nimport type { StartCommandOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\nimport type { StartCommands } from \"@nextclaw-service/cli/commands/start/index.js\";\n\nexport class RestartCommands {\n constructor(\n private readonly deps: {\n runtimeCommandService: RuntimeCommandService;\n startCommands: StartCommands;\n forcedPublicHost: string;\n writeRestartSentinelFromExecContext: (reason: string) => Promise<void>;\n }\n ) {}\n\n run = async (opts: StartCommandOptions): Promise<void> => {\n await this.deps.writeRestartSentinelFromExecContext(\"cli.restart\");\n const uiOverrides = resolveManagedServiceUiOverrides({\n uiPort: opts.uiPort,\n forcedPublicHost: this.deps.forcedPublicHost\n });\n const targetUi = resolveUiConfig(loadConfig(), uiOverrides);\n\n const state = managedServiceStateStore.read();\n if (state && isProcessRunning(state.pid)) {\n console.log(`Restarting ${APP_NAME}...`);\n await this.deps.runtimeCommandService.stopService();\n } else {\n const foregroundRuntime = localUiRuntimeStore.read();\n const foregroundMatchesTarget = Boolean(\n foregroundRuntime &&\n isProcessRunning(foregroundRuntime.pid) &&\n foregroundRuntime.uiPort === targetUi.port\n );\n if (foregroundRuntime && foregroundMatchesTarget) {\n const restarted = await this.restartForegroundRuntime(foregroundRuntime.pid);\n if (!restarted) {\n return;\n }\n await this.deps.startCommands.run(opts);\n return;\n }\n if (state) {\n managedServiceStateStore.clear();\n console.log(\"Service state was stale and has been cleaned up.\");\n }\n\n const unmanagedHealthyServiceMessage = await describeUnmanagedHealthyTargetMessage({ uiOverrides });\n if (unmanagedHealthyServiceMessage) {\n const adoptedRuntimePid = this.resolveAdoptableForegroundRuntimePid(targetUi.port);\n if (adoptedRuntimePid) {\n const restarted = await this.restartForegroundRuntime(adoptedRuntimePid);\n if (!restarted) {\n return;\n }\n await this.deps.startCommands.run(opts);\n return;\n }\n console.error(`Error: Cannot restart ${APP_NAME} because the target UI/API port is already served by a healthy unmanaged instance.`);\n console.error(unmanagedHealthyServiceMessage);\n return;\n }\n if (!state) {\n console.log(\"No running service found. Starting a new service.\");\n }\n }\n\n await this.deps.startCommands.run(opts);\n };\n\n private restartForegroundRuntime = async (pid: number): Promise<boolean> => {\n console.log(`Restarting ${APP_NAME} foreground runtime (PID ${pid})...`);\n try {\n process.kill(pid, \"SIGTERM\");\n } catch (error) {\n console.error(`Failed to stop foreground runtime: ${String(error)}`);\n return false;\n }\n\n const stopped = await waitForExit(pid, 3000);\n if (!stopped) {\n try {\n process.kill(pid, \"SIGKILL\");\n } catch (error) {\n console.error(`Failed to force stop foreground runtime: ${String(error)}`);\n return false;\n }\n const forcedStopped = await waitForExit(pid, 2000);\n if (!forcedStopped) {\n console.error(`Failed to stop foreground runtime PID ${pid}.`);\n return false;\n }\n }\n\n localUiRuntimeStore.clearIfOwnedByProcess(pid);\n console.log(`✓ ${APP_NAME} foreground runtime stopped`);\n return true;\n };\n\n private resolveAdoptableForegroundRuntimePid = (port: number): number | null => {\n const listeningProcess = findListeningProcessByPort(port);\n if (!listeningProcess || !isProcessRunning(listeningProcess.pid)) {\n return null;\n }\n return this.isAdoptableNextclawRuntimeCommand(listeningProcess.command) ? listeningProcess.pid : null;\n };\n\n private isAdoptableNextclawRuntimeCommand = (command: string | null): boolean => {\n const normalized = command?.trim() ?? \"\";\n if (!normalized) {\n return false;\n }\n return (\n /\\bserve\\b/.test(normalized) &&\n (\n normalized.includes(\"/dist/cli/app/index.js\") ||\n normalized.includes(\"/src/cli/app/index.js\") ||\n normalized.includes(\"/runtime/dist/cli/app/index.js\")\n )\n );\n };\n}\n"],"mappings":";;;;;;;;AAUA,IAAa,kBAAb,MAA6B;CAC3B,YACE,MAMA;AANiB,OAAA,OAAA;;CAQnB,MAAM,OAAO,SAA6C;AACxD,QAAM,KAAK,KAAK,oCAAoC,cAAc;EAClE,MAAM,cAAc,iCAAiC;GACnD,QAAQ,KAAK;GACb,kBAAkB,KAAK,KAAK;GAC7B,CAAC;EACF,MAAM,WAAW,gBAAgB,YAAY,EAAE,YAAY;EAE3D,MAAM,QAAQ,yBAAyB,MAAM;AAC7C,MAAI,SAAS,iBAAiB,MAAM,IAAI,EAAE;AACxC,WAAQ,IAAI,cAAc,SAAS,KAAK;AACxC,SAAM,KAAK,KAAK,sBAAsB,aAAa;SAC9C;GACL,MAAM,oBAAoB,oBAAoB,MAAM;GACpD,MAAM,0BAA0B,QAC9B,qBACA,iBAAiB,kBAAkB,IAAI,IACvC,kBAAkB,WAAW,SAAS,KACvC;AACD,OAAI,qBAAqB,yBAAyB;AAEhD,QAAI,CADc,MAAM,KAAK,yBAAyB,kBAAkB,IAAI,CAE1E;AAEF,UAAM,KAAK,KAAK,cAAc,IAAI,KAAK;AACvC;;AAEF,OAAI,OAAO;AACT,6BAAyB,OAAO;AAChC,YAAQ,IAAI,mDAAmD;;GAGjE,MAAM,iCAAiC,MAAM,sCAAsC,EAAE,aAAa,CAAC;AACnG,OAAI,gCAAgC;IAClC,MAAM,oBAAoB,KAAK,qCAAqC,SAAS,KAAK;AAClF,QAAI,mBAAmB;AAErB,SAAI,CADc,MAAM,KAAK,yBAAyB,kBAAkB,CAEtE;AAEF,WAAM,KAAK,KAAK,cAAc,IAAI,KAAK;AACvC;;AAEF,YAAQ,MAAM,yBAAyB,SAAS,oFAAoF;AACpI,YAAQ,MAAM,+BAA+B;AAC7C;;AAEF,OAAI,CAAC,MACH,SAAQ,IAAI,oDAAoD;;AAIpE,QAAM,KAAK,KAAK,cAAc,IAAI,KAAK;;CAGzC,2BAAmC,OAAO,QAAkC;AAC1E,UAAQ,IAAI,cAAc,SAAS,2BAA2B,IAAI,MAAM;AACxE,MAAI;AACF,WAAQ,KAAK,KAAK,UAAU;WACrB,OAAO;AACd,WAAQ,MAAM,sCAAsC,OAAO,MAAM,GAAG;AACpE,UAAO;;AAIT,MAAI,CADY,MAAM,YAAY,KAAK,IAAK,EAC9B;AACZ,OAAI;AACF,YAAQ,KAAK,KAAK,UAAU;YACrB,OAAO;AACd,YAAQ,MAAM,4CAA4C,OAAO,MAAM,GAAG;AAC1E,WAAO;;AAGT,OAAI,CADkB,MAAM,YAAY,KAAK,IAAK,EAC9B;AAClB,YAAQ,MAAM,yCAAyC,IAAI,GAAG;AAC9D,WAAO;;;AAIX,sBAAoB,sBAAsB,IAAI;AAC9C,UAAQ,IAAI,KAAK,SAAS,6BAA6B;AACvD,SAAO;;CAGT,wCAAgD,SAAgC;EAC9E,MAAM,mBAAmB,2BAA2B,KAAK;AACzD,MAAI,CAAC,oBAAoB,CAAC,iBAAiB,iBAAiB,IAAI,CAC9D,QAAO;AAET,SAAO,KAAK,kCAAkC,iBAAiB,QAAQ,GAAG,iBAAiB,MAAM;;CAGnG,qCAA6C,YAAoC;EAC/E,MAAM,aAAa,SAAS,MAAM,IAAI;AACtC,MAAI,CAAC,WACH,QAAO;AAET,SACE,YAAY,KAAK,WAAW,KAE1B,WAAW,SAAS,yBAAyB,IAC7C,WAAW,SAAS,wBAAwB,IAC5C,WAAW,SAAS,iCAAiC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/cli/commands/secrets/index.ts"],"mappings":";;;cAqIa,eAAA;EAAA,QAED,IAAA;cAAA,IAAA;IACN,cAAA,GAAiB,MAAA,EAAQ,oBAAA,KAAyB,OAAA;EAAA;EAItD,KAAA,GAAS,IAAA,GAAM,mBAAA;EAwEf,SAAA,GAAmB,IAAA,EAAM,uBAAA,KAA0B,OAAA;EAgCnD,KAAA,GAAe,IAAA,EAAM,mBAAA,KAAsB,OAAA;EAwB3C,MAAA,GAAgB,IAAA,GAAM,oBAAA,KAA4B,OAAA;EAAA,QAa1C,cAAA;EAAA,QASA,iBAAA;EAAA,QAWA,mBAAA;EAAA,QA2BA,iBAAA;EAAA,QAUA,cAAA;EAAA,QAUA,mBAAA;EAAA,QA4BA,2BAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/cli/commands/secrets/index.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport {\n buildReloadPlan,\n diffConfigPaths,\n getConfigPath,\n loadConfig,\n resolveConfigSecrets,\n saveConfig,\n type Config,\n type SecretRef,\n type SecretSource\n} from \"@nextclaw/core\";\nimport { getAtConfigPath, parseRequiredConfigPath } from \"@nextclaw-service/shared/utils/config-path.js\";\nimport type { RequestRestartParams, SecretsApplyOptions, SecretsAuditOptions, SecretsConfigureOptions, SecretsReloadOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\n\ntype AuditItem = {\n path: string;\n source: SecretSource;\n provider: string;\n id: string;\n ok: boolean;\n detail: string;\n};\n\nconst SECRET_SOURCES: SecretSource[] = [\"env\", \"file\", \"exec\"];\n\nfunction normalizeSecretSource(value: unknown): SecretSource | null {\n if (typeof value !== \"string\") {\n return null;\n }\n const normalized = value.trim().toLowerCase();\n return SECRET_SOURCES.includes(normalized as SecretSource) ? (normalized as SecretSource) : null;\n}\n\nfunction normalizeOptionalString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n\nfunction parseTimeoutMs(value: unknown): number | undefined {\n if (value === undefined || value === null || value === \"\") {\n return undefined;\n }\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || parsed <= 0) {\n throw new Error(`invalid timeout: ${String(value)}`);\n }\n return Math.trunc(parsed);\n}\n\nfunction inferProviderAlias(config: Config, ref: SecretRef): string {\n const explicit = normalizeOptionalString(ref.provider);\n if (explicit) {\n return explicit;\n }\n const defaultAlias = normalizeOptionalString(config.secrets.defaults[ref.source]);\n if (defaultAlias) {\n return defaultAlias;\n }\n return ref.source;\n}\n\nfunction summarizeAudit(items: AuditItem[]): { total: number; ok: number; failed: number } {\n const ok = items.filter((item) => item.ok).length;\n return {\n total: items.length,\n ok,\n failed: items.length - ok\n };\n}\n\nfunction parseRefsPatch(raw: unknown): Record<string, SecretRef> {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) {\n throw new Error(\"refs patch must be an object\");\n }\n\n const output: Record<string, SecretRef> = {};\n for (const [path, value] of Object.entries(raw as Record<string, unknown>)) {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(`invalid ref for ${path}`);\n }\n const source = normalizeSecretSource((value as Record<string, unknown>).source);\n const id = normalizeOptionalString((value as Record<string, unknown>).id);\n const provider = normalizeOptionalString((value as Record<string, unknown>).provider);\n if (!source || !id) {\n throw new Error(`invalid ref for ${path}: source/id is required`);\n }\n output[path] = { source, ...(provider ? { provider } : {}), id };\n }\n return output;\n}\n\nfunction parseApplyFile(raw: string): {\n enabled?: boolean;\n defaults?: Config[\"secrets\"][\"defaults\"];\n providers?: Config[\"secrets\"][\"providers\"];\n refs?: Record<string, SecretRef>;\n} {\n const data = JSON.parse(raw) as unknown;\n if (!data || typeof data !== \"object\" || Array.isArray(data)) {\n throw new Error(\"apply file must be an object\");\n }\n const record = data as Record<string, unknown>;\n\n if (record.refs || record.providers || record.defaults || Object.prototype.hasOwnProperty.call(record, \"enabled\")) {\n const patch: {\n enabled?: boolean;\n defaults?: Config[\"secrets\"][\"defaults\"];\n providers?: Config[\"secrets\"][\"providers\"];\n refs?: Record<string, SecretRef>;\n } = {};\n\n if (Object.prototype.hasOwnProperty.call(record, \"enabled\")) {\n patch.enabled = Boolean(record.enabled);\n }\n if (record.defaults && typeof record.defaults === \"object\" && !Array.isArray(record.defaults)) {\n patch.defaults = record.defaults as Config[\"secrets\"][\"defaults\"];\n }\n if (record.providers && typeof record.providers === \"object\" && !Array.isArray(record.providers)) {\n patch.providers = record.providers as Config[\"secrets\"][\"providers\"];\n }\n if (record.refs) {\n patch.refs = parseRefsPatch(record.refs);\n }\n return patch;\n }\n\n return { refs: parseRefsPatch(record) };\n}\n\nexport class SecretsCommands {\n constructor(\n private deps: {\n requestRestart: (params: RequestRestartParams) => Promise<void>;\n }\n ) {}\n\n audit = (opts: SecretsAuditOptions = {}): void => {\n const config = loadConfig();\n const configPath = getConfigPath();\n const refs = config.secrets.refs;\n const items: AuditItem[] = [];\n\n for (const [path, ref] of Object.entries(refs)) {\n const provider = inferProviderAlias(config, ref);\n const scopedConfig = structuredClone(config);\n scopedConfig.secrets.refs = { [path]: ref };\n\n try {\n const resolved = resolveConfigSecrets(scopedConfig, { configPath });\n const parsedPath = parseRequiredConfigPath(path);\n const target = getAtConfigPath(resolved as unknown as Record<string, unknown>, parsedPath);\n if (!target.found) {\n items.push({\n path,\n source: ref.source,\n provider,\n id: ref.id,\n ok: false,\n detail: \"resolved but path not found\"\n });\n continue;\n }\n const resolvedValue = target.value;\n const detail =\n typeof resolvedValue === \"string\"\n ? `resolved (length=${resolvedValue.length})`\n : `resolved (${typeof resolvedValue})`;\n items.push({\n path,\n source: ref.source,\n provider,\n id: ref.id,\n ok: true,\n detail\n });\n } catch (error) {\n items.push({\n path,\n source: ref.source,\n provider,\n id: ref.id,\n ok: false,\n detail: String(error)\n });\n }\n }\n\n const summary = summarizeAudit(items);\n if (opts.json) {\n console.log(JSON.stringify({ summary, items }, null, 2));\n } else if (!items.length) {\n console.log(\"No secret refs configured.\");\n } else {\n for (const item of items) {\n const status = item.ok ? \"OK\" : \"ERROR\";\n console.log(\n `[${status}] ${item.path} <- ${item.source}:${item.provider}:${item.id} (${item.detail})`\n );\n }\n console.log(`Summary: total=${summary.total}, ok=${summary.ok}, failed=${summary.failed}`);\n }\n\n const strict = Boolean(opts.strict);\n if (strict && summary.failed > 0) {\n process.exitCode = 1;\n }\n };\n\n configure = async (opts: SecretsConfigureOptions): Promise<void> => {\n const alias = normalizeOptionalString(opts.provider);\n if (!alias) {\n throw new Error(\"provider alias is required\");\n }\n\n const prevConfig = loadConfig();\n const nextConfig = structuredClone(prevConfig);\n const remove = Boolean(opts.remove);\n\n if (remove) {\n this.removeProvider(nextConfig, alias);\n } else {\n this.configureProvider(nextConfig, alias, opts);\n }\n\n resolveConfigSecrets(nextConfig, { configPath: getConfigPath() });\n saveConfig(nextConfig);\n await this.requestRestartForConfigDiff({\n prevConfig,\n nextConfig,\n reason: `secrets.configure ${alias}`,\n manualMessage: \"Secrets provider updated. Restart the gateway if required.\"\n });\n\n if (opts.json) {\n console.log(JSON.stringify({ ok: true, providers: nextConfig.secrets.providers, defaults: nextConfig.secrets.defaults }, null, 2));\n return;\n }\n console.log(`Secrets provider ${remove ? \"removed\" : \"configured\"}: ${alias}`);\n };\n\n apply = async (opts: SecretsApplyOptions): Promise<void> => {\n const prevConfig = loadConfig();\n const nextConfig = structuredClone(prevConfig);\n\n this.applyEnabledPatch(nextConfig, opts);\n this.applyFilePatch(nextConfig, opts);\n this.applySingleRefPatch(nextConfig, opts);\n\n resolveConfigSecrets(nextConfig, { configPath: getConfigPath() });\n saveConfig(nextConfig);\n await this.requestRestartForConfigDiff({\n prevConfig,\n nextConfig,\n reason: \"secrets.apply\",\n manualMessage: \"Secrets updated. Restart the gateway if required.\"\n });\n\n if (opts.json) {\n console.log(JSON.stringify({ ok: true, secrets: nextConfig.secrets }, null, 2));\n return;\n }\n console.log(\"Secrets applied.\");\n };\n\n reload = async (opts: SecretsReloadOptions = {}): Promise<void> => {\n const config = loadConfig();\n const configPath = getConfigPath();\n resolveConfigSecrets(config, { configPath });\n saveConfig(config);\n\n if (opts.json) {\n console.log(JSON.stringify({ ok: true, message: \"secrets reload signal emitted\" }, null, 2));\n return;\n }\n console.log(\"Secrets reload signal emitted.\");\n };\n\n private removeProvider = (config: Config, alias: string): void => {\n delete config.secrets.providers[alias];\n for (const source of SECRET_SOURCES) {\n if (config.secrets.defaults[source] === alias) {\n delete config.secrets.defaults[source];\n }\n }\n };\n\n private configureProvider = (config: Config, alias: string, opts: SecretsConfigureOptions): void => {\n const source = normalizeSecretSource(opts.source);\n if (!source) {\n throw new Error(\"source is required and must be one of env/file/exec\");\n }\n config.secrets.providers[alias] = this.buildProviderConfig(source, opts);\n if (opts.setDefault) {\n config.secrets.defaults[source] = alias;\n }\n };\n\n private buildProviderConfig = (source: SecretSource, opts: SecretsConfigureOptions): Config[\"secrets\"][\"providers\"][string] => {\n if (source === \"env\") {\n return {\n source,\n ...(normalizeOptionalString(opts.prefix) ? { prefix: normalizeOptionalString(opts.prefix) } : {})\n };\n }\n if (source === \"file\") {\n const path = normalizeOptionalString(opts.path);\n if (!path) {\n throw new Error(\"file source requires --path\");\n }\n return { source, path, format: \"json\" };\n }\n const command = normalizeOptionalString(opts.command);\n if (!command) {\n throw new Error(\"exec source requires --command\");\n }\n return {\n source,\n command,\n args: Array.isArray(opts.arg) ? opts.arg : [],\n ...(normalizeOptionalString(opts.cwd) ? { cwd: normalizeOptionalString(opts.cwd) } : {}),\n timeoutMs: parseTimeoutMs(opts.timeoutMs) ?? 5000\n };\n };\n\n private applyEnabledPatch = (config: Config, opts: SecretsApplyOptions): void => {\n const { disable, enable } = opts;\n if (enable && disable) {\n throw new Error(\"cannot set --enable and --disable at the same time\");\n }\n if (enable || disable) {\n config.secrets.enabled = Boolean(enable);\n }\n };\n\n private applyFilePatch = (config: Config, opts: SecretsApplyOptions): void => {\n if (!opts.file) {\n return;\n }\n const { defaults, providers, refs } = parseApplyFile(readFileSync(opts.file, \"utf-8\"));\n if (defaults) config.secrets.defaults = defaults;\n if (providers) config.secrets.providers = providers;\n if (refs) config.secrets.refs = { ...config.secrets.refs, ...refs };\n };\n\n private applySingleRefPatch = (config: Config, opts: SecretsApplyOptions): void => {\n if (!opts.path) {\n if (opts.remove && !opts.file) {\n throw new Error(\"--remove requires --path\");\n }\n return;\n }\n const path = opts.path.trim();\n if (!path) {\n throw new Error(\"path is empty\");\n }\n if (opts.remove) {\n delete config.secrets.refs[path];\n return;\n }\n const source = normalizeSecretSource(opts.source);\n const id = normalizeOptionalString(opts.id);\n if (!source || !id) {\n throw new Error(\"apply single ref requires --source and --id\");\n }\n const provider = normalizeOptionalString(opts.provider);\n config.secrets.refs[path] = {\n source,\n id,\n ...(provider ? { provider } : {})\n };\n };\n\n private requestRestartForConfigDiff = async (params: {\n prevConfig: Config;\n nextConfig: Config;\n reason: string;\n manualMessage: string;\n }): Promise<void> => {\n const { manualMessage, nextConfig, prevConfig, reason } = params;\n const changedPaths = diffConfigPaths(prevConfig, nextConfig);\n if (!changedPaths.length) {\n return;\n }\n const plan = buildReloadPlan(changedPaths);\n if (plan.restartRequired.length === 0) {\n return;\n }\n await this.deps.requestRestart({\n changedPaths: plan.restartRequired,\n mode: \"notify\",\n reason: `${reason} (${plan.restartRequired.join(\", \")})`,\n manualMessage\n });\n };\n}\n"],"mappings":"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"}
|