@nextclaw/service 0.1.14 → 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 +3 -1
- 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 +3 -5
- 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 +4 -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 +40 -14
- 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 +8 -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 +2 -1
- 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 +134 -75
- 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 -1
- 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 +85 -0
- package/dist/shared/services/runtime/managed-service-supervisor.service.d.ts.map +1 -0
- package/dist/shared/services/runtime/managed-service-supervisor.service.js +271 -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 +3 -1
- package/dist/shared/services/runtime/runtime-command.service.d.ts.map +1 -0
- package/dist/shared/services/runtime/runtime-command.service.js +5 -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 +4 -32
- package/dist/shared/services/runtime/service-managed-startup.service.d.ts.map +1 -0
- package/dist/shared/services/runtime/service-managed-startup.service.js +10 -92
- 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 +5 -2
- 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 +23 -17
- 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 +19 -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 +16 -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"}
|
|
@@ -15,7 +15,7 @@ async function listAvailableAgentRuntimes(params) {
|
|
|
15
15
|
createRuntime: createUnusedRuntime
|
|
16
16
|
});
|
|
17
17
|
runtimeSourceByKind.set(DEFAULT_AGENT_RUNTIME_ENTRY_ID, { source: "builtin" });
|
|
18
|
-
for (const provider of new BuiltinNarpRuntimeProviderService(() => config).createProviders()) runtimeRegistry.register(provider);
|
|
18
|
+
for (const provider of new BuiltinNarpRuntimeProviderService({ loadConfig: () => config }).createProviders()) runtimeRegistry.register(provider);
|
|
19
19
|
runtimeSourceByKind.set("narp-http", { source: "builtin" });
|
|
20
20
|
runtimeSourceByKind.set("narp-stdio", { source: "builtin" });
|
|
21
21
|
const resolvedEntries = resolveAgentRuntimeEntries({ config });
|
|
@@ -39,3 +39,5 @@ async function listAvailableAgentRuntimes(params) {
|
|
|
39
39
|
}
|
|
40
40
|
//#endregion
|
|
41
41
|
export { listAvailableAgentRuntimes };
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=agent-runtime.utils.js.map
|
|
@@ -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"}
|
|
@@ -30,7 +30,7 @@ function createCliHistoryInterface() {
|
|
|
30
30
|
return rl;
|
|
31
31
|
}
|
|
32
32
|
async function runCliInteractiveLoop(params) {
|
|
33
|
-
const { agentRunRequests, config, logo, metadata, sessionKey
|
|
33
|
+
const { agentRunRequests, config, logo, metadata, sessionKey } = params;
|
|
34
34
|
console.log(`${logo} Interactive mode (type exit or Ctrl+C to quit)\n`);
|
|
35
35
|
const rl = createCliHistoryInterface();
|
|
36
36
|
let running = true;
|
|
@@ -44,7 +44,6 @@ async function runCliInteractiveLoop(params) {
|
|
|
44
44
|
}
|
|
45
45
|
printAgentResponse(await dispatchPromptOverNcp({
|
|
46
46
|
config,
|
|
47
|
-
sessionManager,
|
|
48
47
|
agentRunRequests,
|
|
49
48
|
sessionKey,
|
|
50
49
|
content: trimmed,
|
|
@@ -54,7 +53,6 @@ async function runCliInteractiveLoop(params) {
|
|
|
54
53
|
}
|
|
55
54
|
async function runCliAgentCommand(params) {
|
|
56
55
|
const { config, kernel, logo, opts } = params;
|
|
57
|
-
const sessionManager = kernel.sessions;
|
|
58
56
|
await kernel.extensions.load({ config });
|
|
59
57
|
await kernel.start();
|
|
60
58
|
try {
|
|
@@ -63,7 +61,6 @@ async function runCliAgentCommand(params) {
|
|
|
63
61
|
if (opts.message) {
|
|
64
62
|
printAgentResponse(await dispatchPromptOverNcp({
|
|
65
63
|
config,
|
|
66
|
-
sessionManager,
|
|
67
64
|
agentRunRequests: kernel.agentRunRequestManager,
|
|
68
65
|
sessionKey,
|
|
69
66
|
content: opts.message,
|
|
@@ -74,7 +71,6 @@ async function runCliAgentCommand(params) {
|
|
|
74
71
|
await runCliInteractiveLoop({
|
|
75
72
|
logo,
|
|
76
73
|
config,
|
|
77
|
-
sessionManager,
|
|
78
74
|
agentRunRequests: kernel.agentRunRequestManager,
|
|
79
75
|
sessionKey,
|
|
80
76
|
metadata: sharedMetadata
|
|
@@ -85,3 +81,5 @@ async function runCliAgentCommand(params) {
|
|
|
85
81
|
}
|
|
86
82
|
//#endregion
|
|
87
83
|
export { runCliAgentCommand };
|
|
84
|
+
|
|
85
|
+
//# sourceMappingURL=cli-agent-runner.utils.js.map
|
|
@@ -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":"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"}
|
|
@@ -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"}
|
|
@@ -3,6 +3,7 @@ import { DoctorCommandOptions, StatusCommandOptions } from "../../../../shared/t
|
|
|
3
3
|
//#region src/cli/commands/diagnostics/services/diagnostics-commands.service.d.ts
|
|
4
4
|
declare class DiagnosticsCommands {
|
|
5
5
|
private deps;
|
|
6
|
+
private readonly managedServiceSupervisor;
|
|
6
7
|
constructor(deps: {
|
|
7
8
|
logo: string;
|
|
8
9
|
});
|
|
@@ -12,6 +13,7 @@ declare class DiagnosticsCommands {
|
|
|
12
13
|
private readonly buildDoctorChecks;
|
|
13
14
|
private readonly resolveDoctorExitCode;
|
|
14
15
|
private readonly collectRuntimeStatus;
|
|
16
|
+
private readonly resolveManagedServiceStatus;
|
|
15
17
|
private readonly probeApiHealth;
|
|
16
18
|
private readonly listProviderStatuses;
|
|
17
19
|
private readonly collectRuntimeIssues;
|
|
@@ -19,4 +21,5 @@ declare class DiagnosticsCommands {
|
|
|
19
21
|
private readonly checkPortAvailability;
|
|
20
22
|
}
|
|
21
23
|
//#endregion
|
|
22
|
-
export { DiagnosticsCommands };
|
|
24
|
+
export { DiagnosticsCommands };
|
|
25
|
+
//# sourceMappingURL=diagnostics-commands.service.d.ts.map
|
|
@@ -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"}
|
|
@@ -2,6 +2,7 @@ import { isProcessRunning, resolveUiApiBase, resolveUiConfig } from "../../../..
|
|
|
2
2
|
import { managedServiceStateStore } from "../../../../shared/stores/managed-service-state.store.js";
|
|
3
3
|
import { resolveNextclawRemoteStatusSnapshot } from "../../../../commands/remote/utils/remote-runtime-support.utils.js";
|
|
4
4
|
import "../../../../commands/remote/index.js";
|
|
5
|
+
import { ManagedServiceSupervisor } from "../../../../shared/services/runtime/managed-service-supervisor.service.js";
|
|
5
6
|
import { printDoctorReport, printStatusReport } from "../utils/diagnostics-render.utils.js";
|
|
6
7
|
import { APP_NAME, getConfigPath, getWorkspacePath, hasSecretRef, loadConfig, resolveAppLogPath } from "@nextclaw/core";
|
|
7
8
|
import { existsSync, readFileSync } from "node:fs";
|
|
@@ -9,6 +10,7 @@ import { createServer } from "node:net";
|
|
|
9
10
|
import { listBuiltinProviders } from "@nextclaw/runtime";
|
|
10
11
|
//#region src/cli/commands/diagnostics/services/diagnostics-commands.service.ts
|
|
11
12
|
var DiagnosticsCommands = class {
|
|
13
|
+
managedServiceSupervisor = new ManagedServiceSupervisor();
|
|
12
14
|
constructor(deps) {
|
|
13
15
|
this.deps = deps;
|
|
14
16
|
}
|
|
@@ -87,8 +89,8 @@ var DiagnosticsCommands = class {
|
|
|
87
89
|
},
|
|
88
90
|
{
|
|
89
91
|
name: "service-state",
|
|
90
|
-
status: report.process.staleState ? "fail" : report.process.running ? "pass" : "warn",
|
|
91
|
-
detail: report.process.running ? `PID ${report.process.pid}` : report.process.staleState ?
|
|
92
|
+
status: report.process.staleState ? "fail" : report.process.running ? report.process.lease?.missing ? "warn" : "pass" : "warn",
|
|
93
|
+
detail: report.process.running ? `PID ${report.process.pid}${report.process.lease?.missing ? " (missing lease heartbeat)" : ""}` : report.process.staleState ? `state is stale (${report.process.staleReason ?? "unknown"})` : "service not running"
|
|
92
94
|
},
|
|
93
95
|
{
|
|
94
96
|
name: "service-health",
|
|
@@ -117,16 +119,10 @@ var DiagnosticsCommands = class {
|
|
|
117
119
|
const config = loadConfig();
|
|
118
120
|
const workspacePath = getWorkspacePath(config.agents.defaults.workspace);
|
|
119
121
|
const serviceStatePath = managedServiceStateStore.path;
|
|
120
|
-
const fixActions =
|
|
121
|
-
let serviceState = managedServiceStateStore.read();
|
|
122
|
-
if (params.fix && serviceState && !isProcessRunning(serviceState.pid)) {
|
|
123
|
-
managedServiceStateStore.clear();
|
|
124
|
-
fixActions.push("Cleared stale service state file.");
|
|
125
|
-
serviceState = managedServiceStateStore.read();
|
|
126
|
-
}
|
|
122
|
+
const { fixActions, liveness, serviceState } = this.resolveManagedServiceStatus({ fix: params.fix });
|
|
127
123
|
const managedByState = Boolean(serviceState);
|
|
128
|
-
const running = Boolean(serviceState &&
|
|
129
|
-
const staleState = Boolean(serviceState &&
|
|
124
|
+
const running = Boolean(serviceState && liveness.running);
|
|
125
|
+
const staleState = Boolean(serviceState && liveness.staleState);
|
|
130
126
|
const configuredUi = resolveUiConfig(config, {
|
|
131
127
|
enabled: true,
|
|
132
128
|
host: config.ui.host,
|
|
@@ -176,8 +172,15 @@ var DiagnosticsCommands = class {
|
|
|
176
172
|
pid: serviceState?.pid ?? null,
|
|
177
173
|
running,
|
|
178
174
|
staleState,
|
|
175
|
+
staleReason: liveness.staleReason,
|
|
179
176
|
orphanSuspected,
|
|
180
|
-
startedAt: serviceState?.startedAt ?? null
|
|
177
|
+
startedAt: serviceState?.startedAt ?? null,
|
|
178
|
+
lease: serviceState ? {
|
|
179
|
+
heartbeatAt: liveness.lastHeartbeatAt,
|
|
180
|
+
expired: liveness.leaseExpired,
|
|
181
|
+
missing: liveness.leaseMissing
|
|
182
|
+
} : null,
|
|
183
|
+
lastExit: serviceState?.lastExit ?? null
|
|
181
184
|
},
|
|
182
185
|
endpoints: {
|
|
183
186
|
uiUrl: managedUiUrl,
|
|
@@ -197,6 +200,22 @@ var DiagnosticsCommands = class {
|
|
|
197
200
|
exitCode: 0
|
|
198
201
|
};
|
|
199
202
|
};
|
|
203
|
+
resolveManagedServiceStatus = (params) => {
|
|
204
|
+
const fixActions = [];
|
|
205
|
+
let serviceState = managedServiceStateStore.read();
|
|
206
|
+
let liveness = this.managedServiceSupervisor.resolveStateLiveness(serviceState);
|
|
207
|
+
if (params.fix && serviceState && liveness.staleState && !liveness.processExists) {
|
|
208
|
+
managedServiceStateStore.clear();
|
|
209
|
+
fixActions.push("Cleared stale service state file.");
|
|
210
|
+
serviceState = managedServiceStateStore.read();
|
|
211
|
+
liveness = this.managedServiceSupervisor.resolveStateLiveness(serviceState);
|
|
212
|
+
} else if (params.fix && serviceState && liveness.staleState && liveness.processExists) fixActions.push("Skipped clearing stale service state because the recorded PID still exists.");
|
|
213
|
+
return {
|
|
214
|
+
fixActions,
|
|
215
|
+
liveness,
|
|
216
|
+
serviceState
|
|
217
|
+
};
|
|
218
|
+
};
|
|
200
219
|
probeApiHealth = async (url, timeoutMs = 1500) => {
|
|
201
220
|
const controller = new AbortController();
|
|
202
221
|
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
@@ -266,13 +285,18 @@ var DiagnosticsCommands = class {
|
|
|
266
285
|
recommendations.push(`Run ${APP_NAME} init to create workspace templates.`);
|
|
267
286
|
}
|
|
268
287
|
if (staleState) {
|
|
269
|
-
|
|
270
|
-
|
|
288
|
+
const staleDetail = serviceState?.lastExit ? ` Last exit: ${serviceState.lastExit.reason}${serviceState.lastExit.signal ? ` (${serviceState.lastExit.signal})` : ""} at ${serviceState.lastExit.exitedAt}.` : "";
|
|
289
|
+
issues.push(`Service state is stale (${params.serviceState ? "state no longer represents a live lease" : "state missing"}).${staleDetail}`);
|
|
290
|
+
recommendations.push(params.serviceState && isProcessRunning(params.serviceState.pid) ? `Run ${APP_NAME} restart to replace the stale leased process.` : `Run ${APP_NAME} status --fix to clean stale state.`);
|
|
271
291
|
}
|
|
272
292
|
if (running && managedHealth.state !== "ok") {
|
|
273
293
|
issues.push(`Managed service health check failed: ${managedHealth.detail}`);
|
|
274
294
|
recommendations.push(`Check logs at ${serviceState?.logPath ?? resolveAppLogPath("service")}.`);
|
|
275
295
|
}
|
|
296
|
+
if (running && serviceState && !serviceState.lease) {
|
|
297
|
+
issues.push("Managed service state is missing a lease heartbeat.");
|
|
298
|
+
recommendations.push(`Run ${APP_NAME} restart to refresh the managed service state contract.`);
|
|
299
|
+
}
|
|
276
300
|
if (running && serviceState?.startupState === "degraded" && managedHealth.state !== "ok") {
|
|
277
301
|
const startupHint = serviceState.startupLastProbeError ? ` (${serviceState.startupLastProbeError})` : "";
|
|
278
302
|
issues.push(`Service is in degraded startup state${startupHint}.`);
|
|
@@ -317,3 +341,5 @@ var DiagnosticsCommands = class {
|
|
|
317
341
|
};
|
|
318
342
|
//#endregion
|
|
319
343
|
export { DiagnosticsCommands };
|
|
344
|
+
|
|
345
|
+
//# sourceMappingURL=diagnostics-commands.service.js.map
|
|
@@ -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"}
|
|
@@ -23,6 +23,12 @@ function printProcessSection(report) {
|
|
|
23
23
|
console.log(`Process: ${processLabel}`);
|
|
24
24
|
console.log(`State file: ${report.serviceStatePath} ${report.serviceStateExists ? "✓" : "✗"}`);
|
|
25
25
|
if (report.process.startedAt) console.log(`Started: ${report.process.startedAt}`);
|
|
26
|
+
if (report.process.lease?.heartbeatAt) console.log(`Last heartbeat: ${report.process.lease.heartbeatAt}${report.process.lease.expired ? " (expired)" : ""}`);
|
|
27
|
+
if (report.process.staleReason) console.log(`Stale reason: ${report.process.staleReason}`);
|
|
28
|
+
if (report.process.lastExit) {
|
|
29
|
+
const exit = report.process.lastExit;
|
|
30
|
+
console.log(`Last exit: ${exit.reason}${exit.signal ? ` ${exit.signal}` : ""}${typeof exit.code === "number" ? ` code=${exit.code}` : ""} at ${exit.exitedAt}`);
|
|
31
|
+
}
|
|
26
32
|
console.log(`Managed health: ${report.health.managed.state} (${report.health.managed.detail})`);
|
|
27
33
|
if (!report.process.running) console.log(`Configured health: ${report.health.configured.state} (${report.health.configured.detail})`);
|
|
28
34
|
}
|
|
@@ -64,3 +70,5 @@ function printTextList(title, items) {
|
|
|
64
70
|
}
|
|
65
71
|
//#endregion
|
|
66
72
|
export { printDoctorReport, printStatusReport };
|
|
73
|
+
|
|
74
|
+
//# sourceMappingURL=diagnostics-render.utils.js.map
|
|
@@ -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":"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"}
|
|
@@ -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"}
|