@nextclaw/service 0.1.15 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/agent/agent-runtime.utils.d.ts +2 -1
- package/dist/cli/commands/agent/agent-runtime.utils.d.ts.map +1 -0
- package/dist/cli/commands/agent/agent-runtime.utils.js +2 -0
- package/dist/cli/commands/agent/agent-runtime.utils.js.map +1 -0
- package/dist/cli/commands/agent/cli-agent-runner.utils.d.ts +2 -1
- package/dist/cli/commands/agent/cli-agent-runner.utils.d.ts.map +1 -0
- package/dist/cli/commands/agent/cli-agent-runner.utils.js +2 -0
- package/dist/cli/commands/agent/cli-agent-runner.utils.js.map +1 -0
- package/dist/cli/commands/agent/services/agent-commands.service.d.ts +2 -1
- package/dist/cli/commands/agent/services/agent-commands.service.d.ts.map +1 -0
- package/dist/cli/commands/agent/services/agent-commands.service.js +2 -0
- package/dist/cli/commands/agent/services/agent-commands.service.js.map +1 -0
- package/dist/cli/commands/config/services/config-commands.service.d.ts +2 -1
- package/dist/cli/commands/config/services/config-commands.service.d.ts.map +1 -0
- package/dist/cli/commands/config/services/config-commands.service.js +2 -0
- package/dist/cli/commands/config/services/config-commands.service.js.map +1 -0
- package/dist/cli/commands/cron/services/cron-commands.service.d.ts +2 -1
- package/dist/cli/commands/cron/services/cron-commands.service.d.ts.map +1 -0
- package/dist/cli/commands/cron/services/cron-commands.service.js +2 -0
- package/dist/cli/commands/cron/services/cron-commands.service.js.map +1 -0
- package/dist/cli/commands/cron/services/cron-local.service.d.ts +2 -1
- package/dist/cli/commands/cron/services/cron-local.service.d.ts.map +1 -0
- package/dist/cli/commands/cron/services/cron-local.service.js +2 -0
- package/dist/cli/commands/cron/services/cron-local.service.js.map +1 -0
- package/dist/cli/commands/cron/utils/cron-job.utils.d.ts +2 -1
- package/dist/cli/commands/cron/utils/cron-job.utils.d.ts.map +1 -0
- package/dist/cli/commands/cron/utils/cron-job.utils.js +2 -0
- package/dist/cli/commands/cron/utils/cron-job.utils.js.map +1 -0
- package/dist/cli/commands/diagnostics/services/diagnostics-commands.service.d.ts +2 -1
- package/dist/cli/commands/diagnostics/services/diagnostics-commands.service.d.ts.map +1 -0
- package/dist/cli/commands/diagnostics/services/diagnostics-commands.service.js +2 -0
- package/dist/cli/commands/diagnostics/services/diagnostics-commands.service.js.map +1 -0
- package/dist/cli/commands/diagnostics/utils/diagnostics-render.utils.d.ts +2 -1
- package/dist/cli/commands/diagnostics/utils/diagnostics-render.utils.d.ts.map +1 -0
- package/dist/cli/commands/diagnostics/utils/diagnostics-render.utils.js +2 -0
- package/dist/cli/commands/diagnostics/utils/diagnostics-render.utils.js.map +1 -0
- package/dist/cli/commands/gateway/index.d.ts +2 -1
- package/dist/cli/commands/gateway/index.d.ts.map +1 -0
- package/dist/cli/commands/gateway/index.js +2 -0
- package/dist/cli/commands/gateway/index.js.map +1 -0
- package/dist/cli/commands/logs/index.d.ts +2 -1
- package/dist/cli/commands/logs/index.d.ts.map +1 -0
- package/dist/cli/commands/logs/index.js +2 -0
- package/dist/cli/commands/logs/index.js.map +1 -0
- package/dist/cli/commands/mcp/index.d.ts +2 -1
- package/dist/cli/commands/mcp/index.d.ts.map +1 -0
- package/dist/cli/commands/mcp/index.js +2 -0
- package/dist/cli/commands/mcp/index.js.map +1 -0
- package/dist/cli/commands/restart/index.d.ts +2 -1
- package/dist/cli/commands/restart/index.d.ts.map +1 -0
- package/dist/cli/commands/restart/index.js +2 -0
- package/dist/cli/commands/restart/index.js.map +1 -0
- package/dist/cli/commands/secrets/index.d.ts +2 -1
- package/dist/cli/commands/secrets/index.d.ts.map +1 -0
- package/dist/cli/commands/secrets/index.js +2 -0
- package/dist/cli/commands/secrets/index.js.map +1 -0
- package/dist/cli/commands/serve/index.d.ts +2 -1
- package/dist/cli/commands/serve/index.d.ts.map +1 -0
- package/dist/cli/commands/serve/index.js +2 -0
- package/dist/cli/commands/serve/index.js.map +1 -0
- package/dist/cli/commands/skills/index.d.ts +2 -1
- package/dist/cli/commands/skills/index.d.ts.map +1 -0
- package/dist/cli/commands/skills/index.js +2 -0
- package/dist/cli/commands/skills/index.js.map +1 -0
- package/dist/cli/commands/skills/marketplace-client.d.ts +2 -1
- package/dist/cli/commands/skills/marketplace-client.d.ts.map +1 -0
- package/dist/cli/commands/skills/marketplace-client.js +2 -0
- package/dist/cli/commands/skills/marketplace-client.js.map +1 -0
- package/dist/cli/commands/skills/marketplace-command-options.utils.d.ts +2 -1
- package/dist/cli/commands/skills/marketplace-command-options.utils.d.ts.map +1 -0
- package/dist/cli/commands/skills/marketplace-command-options.utils.js +2 -0
- package/dist/cli/commands/skills/marketplace-command-options.utils.js.map +1 -0
- package/dist/cli/commands/skills/marketplace-identity.utils.d.ts +2 -1
- package/dist/cli/commands/skills/marketplace-identity.utils.d.ts.map +1 -0
- package/dist/cli/commands/skills/marketplace-identity.utils.js +2 -0
- package/dist/cli/commands/skills/marketplace-identity.utils.js.map +1 -0
- package/dist/cli/commands/skills/marketplace-network-retry.d.ts +2 -1
- package/dist/cli/commands/skills/marketplace-network-retry.d.ts.map +1 -0
- package/dist/cli/commands/skills/marketplace-network-retry.js +2 -0
- package/dist/cli/commands/skills/marketplace-network-retry.js.map +1 -0
- package/dist/cli/commands/skills/marketplace.metadata.d.ts +2 -1
- package/dist/cli/commands/skills/marketplace.metadata.d.ts.map +1 -0
- package/dist/cli/commands/skills/marketplace.metadata.js +2 -0
- package/dist/cli/commands/skills/marketplace.metadata.js.map +1 -0
- package/dist/cli/commands/skills/marketplace.utils.d.ts +2 -1
- package/dist/cli/commands/skills/marketplace.utils.d.ts.map +1 -0
- package/dist/cli/commands/skills/marketplace.utils.js +2 -0
- package/dist/cli/commands/skills/marketplace.utils.js.map +1 -0
- package/dist/cli/commands/skills/skills-query.service.d.ts +2 -1
- package/dist/cli/commands/skills/skills-query.service.d.ts.map +1 -0
- package/dist/cli/commands/skills/skills-query.service.js +2 -0
- package/dist/cli/commands/skills/skills-query.service.js.map +1 -0
- package/dist/cli/commands/start/index.d.ts +2 -1
- package/dist/cli/commands/start/index.d.ts.map +1 -0
- package/dist/cli/commands/start/index.js +2 -0
- package/dist/cli/commands/start/index.js.map +1 -0
- package/dist/cli/commands/stop/index.d.ts +2 -1
- package/dist/cli/commands/stop/index.d.ts.map +1 -0
- package/dist/cli/commands/stop/index.js +2 -0
- package/dist/cli/commands/stop/index.js.map +1 -0
- package/dist/cli/commands/ui/index.d.ts +2 -1
- package/dist/cli/commands/ui/index.d.ts.map +1 -0
- package/dist/cli/commands/ui/index.js +2 -0
- package/dist/cli/commands/ui/index.js.map +1 -0
- package/dist/cli/commands/usage/services/llm-usage-command.service.d.ts +2 -1
- package/dist/cli/commands/usage/services/llm-usage-command.service.d.ts.map +1 -0
- package/dist/cli/commands/usage/services/llm-usage-command.service.js +2 -0
- package/dist/cli/commands/usage/services/llm-usage-command.service.js.map +1 -0
- package/dist/commands/channel/channel-config-view.d.ts +2 -1
- package/dist/commands/channel/channel-config-view.d.ts.map +1 -0
- package/dist/commands/channel/channel-config-view.js +2 -0
- package/dist/commands/channel/channel-config-view.js.map +1 -0
- package/dist/commands/channel/channel-list-view.service.d.ts +2 -1
- package/dist/commands/channel/channel-list-view.service.d.ts.map +1 -0
- package/dist/commands/channel/channel-list-view.service.js +2 -0
- package/dist/commands/channel/channel-list-view.service.js.map +1 -0
- package/dist/commands/channel/index.d.ts +2 -1
- package/dist/commands/channel/index.d.ts.map +1 -0
- package/dist/commands/channel/index.js +2 -0
- package/dist/commands/channel/index.js.map +1 -0
- package/dist/commands/platform-auth/services/account-status.service.d.ts +2 -1
- package/dist/commands/platform-auth/services/account-status.service.d.ts.map +1 -0
- package/dist/commands/platform-auth/services/account-status.service.js +2 -0
- package/dist/commands/platform-auth/services/account-status.service.js.map +1 -0
- package/dist/commands/platform-auth/services/platform-auth-commands.service.d.ts +2 -1
- package/dist/commands/platform-auth/services/platform-auth-commands.service.d.ts.map +1 -0
- package/dist/commands/platform-auth/services/platform-auth-commands.service.js +2 -0
- package/dist/commands/platform-auth/services/platform-auth-commands.service.js.map +1 -0
- package/dist/commands/platform-auth/utils/payload.utils.d.ts +2 -1
- package/dist/commands/platform-auth/utils/payload.utils.d.ts.map +1 -0
- package/dist/commands/platform-auth/utils/payload.utils.js +2 -0
- package/dist/commands/platform-auth/utils/payload.utils.js.map +1 -0
- package/dist/commands/plugin/index.d.ts +2 -1
- package/dist/commands/plugin/index.d.ts.map +1 -0
- package/dist/commands/plugin/index.js +2 -0
- package/dist/commands/plugin/index.js.map +1 -0
- package/dist/commands/plugin/plugin-command.utils.d.ts +4 -3
- package/dist/commands/plugin/plugin-command.utils.d.ts.map +1 -0
- package/dist/commands/plugin/plugin-command.utils.js +2 -0
- package/dist/commands/plugin/plugin-command.utils.js.map +1 -0
- package/dist/commands/plugin/plugin-mutation-actions.utils.d.ts +2 -1
- package/dist/commands/plugin/plugin-mutation-actions.utils.d.ts.map +1 -0
- package/dist/commands/plugin/plugin-mutation-actions.utils.js +2 -0
- package/dist/commands/plugin/plugin-mutation-actions.utils.js.map +1 -0
- package/dist/commands/remote/index.d.ts +2 -1
- package/dist/commands/remote/index.d.ts.map +1 -0
- package/dist/commands/remote/index.js +2 -0
- package/dist/commands/remote/index.js.map +1 -0
- package/dist/commands/remote/services/remote-access-host.service.d.ts +2 -1
- package/dist/commands/remote/services/remote-access-host.service.d.ts.map +1 -0
- package/dist/commands/remote/services/remote-access-host.service.js +2 -0
- package/dist/commands/remote/services/remote-access-host.service.js.map +1 -0
- package/dist/commands/remote/services/remote-service-control.service.d.ts +2 -1
- package/dist/commands/remote/services/remote-service-control.service.d.ts.map +1 -0
- package/dist/commands/remote/services/remote-service-control.service.js +2 -0
- package/dist/commands/remote/services/remote-service-control.service.js.map +1 -0
- package/dist/commands/remote/utils/platform-api-base.utils.d.ts +2 -1
- package/dist/commands/remote/utils/platform-api-base.utils.d.ts.map +1 -0
- package/dist/commands/remote/utils/platform-api-base.utils.js +2 -0
- package/dist/commands/remote/utils/platform-api-base.utils.js.map +1 -0
- package/dist/commands/remote/utils/remote-runtime-support.utils.d.ts +2 -1
- package/dist/commands/remote/utils/remote-runtime-support.utils.d.ts.map +1 -0
- package/dist/commands/remote/utils/remote-runtime-support.utils.js +2 -0
- package/dist/commands/remote/utils/remote-runtime-support.utils.js.map +1 -0
- package/dist/commands/service/index.d.ts +2 -1
- package/dist/commands/service/index.d.ts.map +1 -0
- package/dist/commands/service/index.js +2 -0
- package/dist/commands/service/index.js.map +1 -0
- package/dist/commands/service/services/autostart/host-autostart-command.service.d.ts +2 -1
- package/dist/commands/service/services/autostart/host-autostart-command.service.d.ts.map +1 -0
- package/dist/commands/service/services/autostart/host-autostart-command.service.js +2 -0
- package/dist/commands/service/services/autostart/host-autostart-command.service.js.map +1 -0
- package/dist/commands/service/services/autostart/host-autostart-runtime.service.d.ts +2 -1
- package/dist/commands/service/services/autostart/host-autostart-runtime.service.d.ts.map +1 -0
- package/dist/commands/service/services/autostart/host-autostart-runtime.service.js +2 -0
- package/dist/commands/service/services/autostart/host-autostart-runtime.service.js.map +1 -0
- package/dist/commands/service/services/autostart/host-autostart.service.d.ts +2 -1
- package/dist/commands/service/services/autostart/host-autostart.service.d.ts.map +1 -0
- package/dist/commands/service/services/autostart/host-autostart.service.js +2 -0
- package/dist/commands/service/services/autostart/host-autostart.service.js.map +1 -0
- package/dist/commands/service/services/autostart/linux-systemd-autostart.service.d.ts +2 -1
- package/dist/commands/service/services/autostart/linux-systemd-autostart.service.d.ts.map +1 -0
- package/dist/commands/service/services/autostart/linux-systemd-autostart.service.js +2 -0
- package/dist/commands/service/services/autostart/linux-systemd-autostart.service.js.map +1 -0
- package/dist/commands/service/services/autostart/macos-launch-agent-autostart.service.d.ts +2 -1
- package/dist/commands/service/services/autostart/macos-launch-agent-autostart.service.d.ts.map +1 -0
- package/dist/commands/service/services/autostart/macos-launch-agent-autostart.service.js +2 -0
- package/dist/commands/service/services/autostart/macos-launch-agent-autostart.service.js.map +1 -0
- package/dist/commands/service/services/autostart/windows-task-autostart.service.d.ts +2 -1
- package/dist/commands/service/services/autostart/windows-task-autostart.service.d.ts.map +1 -0
- package/dist/commands/service/services/autostart/windows-task-autostart.service.js +2 -0
- package/dist/commands/service/services/autostart/windows-task-autostart.service.js.map +1 -0
- package/dist/commands/service/types/autostart/host-autostart.types.d.ts +2 -1
- package/dist/commands/service/types/autostart/host-autostart.types.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-bundle-layout.store.d.ts +2 -1
- package/dist/launcher/npm-runtime-bundle-layout.store.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-bundle-layout.store.js +2 -0
- package/dist/launcher/npm-runtime-bundle-layout.store.js.map +1 -0
- package/dist/launcher/npm-runtime-bundle-manifest.service.d.ts +2 -1
- package/dist/launcher/npm-runtime-bundle-manifest.service.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-bundle-manifest.service.js +2 -0
- package/dist/launcher/npm-runtime-bundle-manifest.service.js.map +1 -0
- package/dist/launcher/npm-runtime-bundle.service.d.ts +2 -1
- package/dist/launcher/npm-runtime-bundle.service.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-bundle.service.js +2 -0
- package/dist/launcher/npm-runtime-bundle.service.js.map +1 -0
- package/dist/launcher/npm-runtime-bundle.types.d.ts +2 -1
- package/dist/launcher/npm-runtime-bundle.types.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-launcher.service.d.ts +2 -1
- package/dist/launcher/npm-runtime-launcher.service.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-launcher.service.js +2 -0
- package/dist/launcher/npm-runtime-launcher.service.js.map +1 -0
- package/dist/launcher/npm-runtime-update-command.service.d.ts +5 -1
- package/dist/launcher/npm-runtime-update-command.service.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-update-command.service.js +32 -0
- package/dist/launcher/npm-runtime-update-command.service.js.map +1 -0
- package/dist/launcher/npm-runtime-update-source.service.d.ts +2 -1
- package/dist/launcher/npm-runtime-update-source.service.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-update-source.service.js +2 -0
- package/dist/launcher/npm-runtime-update-source.service.js.map +1 -0
- package/dist/launcher/npm-runtime-update-state.store.d.ts +2 -1
- package/dist/launcher/npm-runtime-update-state.store.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-update-state.store.js +2 -0
- package/dist/launcher/npm-runtime-update-state.store.js.map +1 -0
- package/dist/launcher/npm-runtime-update.manager.d.ts +2 -1
- package/dist/launcher/npm-runtime-update.manager.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-update.manager.js +2 -0
- package/dist/launcher/npm-runtime-update.manager.js.map +1 -0
- package/dist/launcher/npm-runtime-update.service.d.ts +2 -1
- package/dist/launcher/npm-runtime-update.service.d.ts.map +1 -0
- package/dist/launcher/npm-runtime-update.service.js +2 -0
- package/dist/launcher/npm-runtime-update.service.js.map +1 -0
- package/dist/service-runtime.service.d.ts +2 -1
- package/dist/service-runtime.service.d.ts.map +1 -0
- package/dist/service-runtime.service.js +6 -1
- package/dist/service-runtime.service.js.map +1 -0
- package/dist/shared/controllers/gateway.controller.d.ts +2 -1
- package/dist/shared/controllers/gateway.controller.d.ts.map +1 -0
- package/dist/shared/controllers/gateway.controller.js +2 -0
- package/dist/shared/controllers/gateway.controller.js.map +1 -0
- package/dist/shared/services/gateway/gateway-restart-wake.service.d.ts +2 -1
- package/dist/shared/services/gateway/gateway-restart-wake.service.d.ts.map +1 -0
- package/dist/shared/services/gateway/gateway-restart-wake.service.js +2 -0
- package/dist/shared/services/gateway/gateway-restart-wake.service.js.map +1 -0
- package/dist/shared/services/gateway/managers/gateway-plugin.manager.d.ts +2 -1
- package/dist/shared/services/gateway/managers/gateway-plugin.manager.d.ts.map +1 -0
- package/dist/shared/services/gateway/managers/gateway-plugin.manager.js +2 -0
- package/dist/shared/services/gateway/managers/gateway-plugin.manager.js.map +1 -0
- package/dist/shared/services/gateway/managers/gateway-remote.manager.d.ts +2 -1
- package/dist/shared/services/gateway/managers/gateway-remote.manager.d.ts.map +1 -0
- package/dist/shared/services/gateway/managers/gateway-remote.manager.js +2 -0
- package/dist/shared/services/gateway/managers/gateway-remote.manager.js.map +1 -0
- package/dist/shared/services/gateway/nextclaw-app.service.d.ts +2 -1
- package/dist/shared/services/gateway/nextclaw-app.service.d.ts.map +1 -0
- package/dist/shared/services/gateway/nextclaw-app.service.js +2 -0
- package/dist/shared/services/gateway/nextclaw-app.service.js.map +1 -0
- package/dist/shared/services/gateway/nextclaw-gateway-runtime.service.d.ts +2 -1
- package/dist/shared/services/gateway/nextclaw-gateway-runtime.service.d.ts.map +1 -0
- package/dist/shared/services/gateway/nextclaw-gateway-runtime.service.js +2 -0
- package/dist/shared/services/gateway/nextclaw-gateway-runtime.service.js.map +1 -0
- package/dist/shared/services/gateway/service-bootstrap-status.service.d.ts +2 -1
- package/dist/shared/services/gateway/service-bootstrap-status.service.d.ts.map +1 -0
- package/dist/shared/services/gateway/service-bootstrap-status.service.js +2 -0
- package/dist/shared/services/gateway/service-bootstrap-status.service.js.map +1 -0
- package/dist/shared/services/gateway/service-startup-support.service.d.ts +2 -1
- package/dist/shared/services/gateway/service-startup-support.service.d.ts.map +1 -0
- package/dist/shared/services/gateway/service-startup-support.service.js +2 -0
- package/dist/shared/services/gateway/service-startup-support.service.js.map +1 -0
- package/dist/shared/services/gateway/utils/cron-job-handler.utils.d.ts +2 -1
- package/dist/shared/services/gateway/utils/cron-job-handler.utils.d.ts.map +1 -0
- package/dist/shared/services/gateway/utils/cron-job-handler.utils.js +2 -0
- package/dist/shared/services/gateway/utils/cron-job-handler.utils.js.map +1 -0
- package/dist/shared/services/gateway/utils/gateway-runtime-lifecycle.utils.d.ts +2 -1
- package/dist/shared/services/gateway/utils/gateway-runtime-lifecycle.utils.d.ts.map +1 -0
- package/dist/shared/services/gateway/utils/gateway-runtime-lifecycle.utils.js +2 -0
- package/dist/shared/services/gateway/utils/gateway-runtime-lifecycle.utils.js.map +1 -0
- package/dist/shared/services/marketplace/service-marketplace-installer.service.d.ts +2 -1
- package/dist/shared/services/marketplace/service-marketplace-installer.service.d.ts.map +1 -0
- package/dist/shared/services/marketplace/service-marketplace-installer.service.js +2 -0
- package/dist/shared/services/marketplace/service-marketplace-installer.service.js.map +1 -0
- package/dist/shared/services/marketplace/service-mcp-marketplace-ops.d.ts +2 -1
- package/dist/shared/services/marketplace/service-mcp-marketplace-ops.d.ts.map +1 -0
- package/dist/shared/services/marketplace/service-mcp-marketplace-ops.js +2 -0
- package/dist/shared/services/marketplace/service-mcp-marketplace-ops.js.map +1 -0
- package/dist/shared/services/plugin/utils/plugin-dev-hot-reload.utils.d.ts +2 -1
- package/dist/shared/services/plugin/utils/plugin-dev-hot-reload.utils.d.ts.map +1 -0
- package/dist/shared/services/plugin/utils/plugin-dev-hot-reload.utils.js +2 -0
- package/dist/shared/services/plugin/utils/plugin-dev-hot-reload.utils.js.map +1 -0
- package/dist/shared/services/plugin/utils/plugin-runtime-bridge.utils.d.ts +2 -1
- package/dist/shared/services/plugin/utils/plugin-runtime-bridge.utils.d.ts.map +1 -0
- package/dist/shared/services/plugin/utils/plugin-runtime-bridge.utils.js +2 -0
- package/dist/shared/services/plugin/utils/plugin-runtime-bridge.utils.js.map +1 -0
- package/dist/shared/services/restart/restart-coordinator.service.d.ts +2 -1
- package/dist/shared/services/restart/restart-coordinator.service.d.ts.map +1 -0
- package/dist/shared/services/restart/restart-coordinator.service.js +2 -0
- package/dist/shared/services/restart/restart-coordinator.service.js.map +1 -0
- package/dist/shared/services/restart/restart-sentinel.service.d.ts +2 -1
- package/dist/shared/services/restart/restart-sentinel.service.d.ts.map +1 -0
- package/dist/shared/services/restart/restart-sentinel.service.js +2 -0
- package/dist/shared/services/restart/restart-sentinel.service.js.map +1 -0
- package/dist/shared/services/restart/runtime-restart-request.service.d.ts +2 -1
- package/dist/shared/services/restart/runtime-restart-request.service.d.ts.map +1 -0
- package/dist/shared/services/restart/runtime-restart-request.service.js +2 -0
- package/dist/shared/services/restart/runtime-restart-request.service.js.map +1 -0
- package/dist/shared/services/runtime/managed-service-supervisor.service.d.ts +2 -1
- package/dist/shared/services/runtime/managed-service-supervisor.service.d.ts.map +1 -0
- package/dist/shared/services/runtime/managed-service-supervisor.service.js +2 -0
- package/dist/shared/services/runtime/managed-service-supervisor.service.js.map +1 -0
- package/dist/shared/services/runtime/nextclaw-distribution.service.d.ts +2 -1
- package/dist/shared/services/runtime/nextclaw-distribution.service.d.ts.map +1 -0
- package/dist/shared/services/runtime/nextclaw-distribution.service.js +2 -0
- package/dist/shared/services/runtime/nextclaw-distribution.service.js.map +1 -0
- package/dist/shared/services/runtime/runtime-command.service.d.ts +2 -1
- package/dist/shared/services/runtime/runtime-command.service.d.ts.map +1 -0
- package/dist/shared/services/runtime/runtime-command.service.js +2 -0
- package/dist/shared/services/runtime/runtime-command.service.js.map +1 -0
- package/dist/shared/services/runtime/runtime-config-init.service.d.ts +2 -1
- package/dist/shared/services/runtime/runtime-config-init.service.d.ts.map +1 -0
- package/dist/shared/services/runtime/runtime-config-init.service.js +2 -0
- package/dist/shared/services/runtime/runtime-config-init.service.js.map +1 -0
- package/dist/shared/services/runtime/service-managed-startup.service.d.ts +2 -1
- package/dist/shared/services/runtime/service-managed-startup.service.d.ts.map +1 -0
- package/dist/shared/services/runtime/service-managed-startup.service.js +2 -0
- package/dist/shared/services/runtime/service-managed-startup.service.js.map +1 -0
- package/dist/shared/services/runtime/utils/managed-service-routing.utils.d.ts +2 -1
- package/dist/shared/services/runtime/utils/managed-service-routing.utils.d.ts.map +1 -0
- package/dist/shared/services/runtime/utils/managed-service-routing.utils.js +2 -0
- package/dist/shared/services/runtime/utils/managed-service-routing.utils.js.map +1 -0
- package/dist/shared/services/runtime/utils/service-remote-runtime.utils.d.ts +2 -1
- package/dist/shared/services/runtime/utils/service-remote-runtime.utils.d.ts.map +1 -0
- package/dist/shared/services/runtime/utils/service-remote-runtime.utils.js +2 -0
- package/dist/shared/services/runtime/utils/service-remote-runtime.utils.js.map +1 -0
- package/dist/shared/services/ui/companion-runtime.service.d.ts +2 -1
- package/dist/shared/services/ui/companion-runtime.service.d.ts.map +1 -0
- package/dist/shared/services/ui/companion-runtime.service.js +2 -0
- package/dist/shared/services/ui/companion-runtime.service.js.map +1 -0
- package/dist/shared/services/ui/local-ui-discovery.service.d.ts +2 -1
- package/dist/shared/services/ui/local-ui-discovery.service.d.ts.map +1 -0
- package/dist/shared/services/ui/local-ui-discovery.service.js +2 -0
- package/dist/shared/services/ui/local-ui-discovery.service.js.map +1 -0
- package/dist/shared/services/ui/npm-runtime-update-host.service.d.ts +2 -1
- package/dist/shared/services/ui/npm-runtime-update-host.service.d.ts.map +1 -0
- package/dist/shared/services/ui/npm-runtime-update-host.service.js +2 -0
- package/dist/shared/services/ui/npm-runtime-update-host.service.js.map +1 -0
- package/dist/shared/services/ui/runtime-control-host.service.d.ts +2 -1
- package/dist/shared/services/ui/runtime-control-host.service.d.ts.map +1 -0
- package/dist/shared/services/ui/runtime-control-host.service.js +2 -0
- package/dist/shared/services/ui/runtime-control-host.service.js.map +1 -0
- package/dist/shared/services/ui/service-remote-access.service.d.ts +2 -1
- package/dist/shared/services/ui/service-remote-access.service.d.ts.map +1 -0
- package/dist/shared/services/ui/service-remote-access.service.js +2 -0
- package/dist/shared/services/ui/service-remote-access.service.js.map +1 -0
- package/dist/shared/services/ui/ui-bridge-api.service.d.ts +2 -1
- package/dist/shared/services/ui/ui-bridge-api.service.d.ts.map +1 -0
- package/dist/shared/services/ui/ui-bridge-api.service.js +2 -0
- package/dist/shared/services/ui/ui-bridge-api.service.js.map +1 -0
- package/dist/shared/services/workspace/workspace-manager.service.d.ts +2 -1
- package/dist/shared/services/workspace/workspace-manager.service.d.ts.map +1 -0
- package/dist/shared/services/workspace/workspace-manager.service.js +2 -0
- package/dist/shared/services/workspace/workspace-manager.service.js.map +1 -0
- package/dist/shared/stores/companion-runtime.store.d.ts +2 -1
- package/dist/shared/stores/companion-runtime.store.d.ts.map +1 -0
- package/dist/shared/stores/companion-runtime.store.js +2 -0
- package/dist/shared/stores/companion-runtime.store.js.map +1 -0
- package/dist/shared/stores/local-ui-runtime.store.d.ts +2 -1
- package/dist/shared/stores/local-ui-runtime.store.d.ts.map +1 -0
- package/dist/shared/stores/local-ui-runtime.store.js +2 -0
- package/dist/shared/stores/local-ui-runtime.store.js.map +1 -0
- package/dist/shared/stores/managed-service-state.store.d.ts +2 -1
- package/dist/shared/stores/managed-service-state.store.d.ts.map +1 -0
- package/dist/shared/stores/managed-service-state.store.js +2 -0
- package/dist/shared/stores/managed-service-state.store.js.map +1 -0
- package/dist/shared/stores/pending-restart.store.d.ts +2 -1
- package/dist/shared/stores/pending-restart.store.d.ts.map +1 -0
- package/dist/shared/stores/pending-restart.store.js +2 -0
- package/dist/shared/stores/pending-restart.store.js.map +1 -0
- package/dist/shared/types/cli.types.d.ts +2 -1
- package/dist/shared/types/cli.types.d.ts.map +1 -0
- package/dist/shared/types/distribution.types.d.ts +2 -1
- package/dist/shared/types/distribution.types.d.ts.map +1 -0
- package/dist/shared/utils/cli.utils.d.ts +2 -1
- package/dist/shared/utils/cli.utils.d.ts.map +1 -0
- package/dist/shared/utils/cli.utils.js +2 -0
- package/dist/shared/utils/cli.utils.js.map +1 -0
- package/dist/shared/utils/config-path.d.ts +2 -1
- package/dist/shared/utils/config-path.d.ts.map +1 -0
- package/dist/shared/utils/config-path.js +2 -0
- package/dist/shared/utils/config-path.js.map +1 -0
- package/dist/shared/utils/marketplace/cli-subcommand-launch.utils.d.ts +2 -1
- package/dist/shared/utils/marketplace/cli-subcommand-launch.utils.d.ts.map +1 -0
- package/dist/shared/utils/marketplace/cli-subcommand-launch.utils.js +2 -0
- package/dist/shared/utils/marketplace/cli-subcommand-launch.utils.js.map +1 -0
- package/dist/shared/utils/marketplace/service-marketplace-helpers.utils.d.ts +2 -1
- package/dist/shared/utils/marketplace/service-marketplace-helpers.utils.d.ts.map +1 -0
- package/dist/shared/utils/marketplace/service-marketplace-helpers.utils.js +2 -0
- package/dist/shared/utils/marketplace/service-marketplace-helpers.utils.js.map +1 -0
- package/dist/shared/utils/package/package-manifest.utils.d.ts +2 -1
- package/dist/shared/utils/package/package-manifest.utils.d.ts.map +1 -0
- package/dist/shared/utils/package/package-manifest.utils.js +2 -0
- package/dist/shared/utils/package/package-manifest.utils.js.map +1 -0
- package/dist/shared/utils/runtime-helpers.d.ts +2 -1
- package/dist/shared/utils/runtime-helpers.d.ts.map +1 -0
- package/dist/shared/utils/runtime-helpers.js +2 -0
- package/dist/shared/utils/runtime-helpers.js.map +1 -0
- package/dist/shared/utils/service-port-probe.utils.d.ts +2 -1
- package/dist/shared/utils/service-port-probe.utils.d.ts.map +1 -0
- package/dist/shared/utils/service-port-probe.utils.js +2 -0
- package/dist/shared/utils/service-port-probe.utils.js.map +1 -0
- package/dist/shared/utils/startup-trace.d.ts +2 -1
- package/dist/shared/utils/startup-trace.d.ts.map +1 -0
- package/dist/shared/utils/startup-trace.js +2 -0
- package/dist/shared/utils/startup-trace.js.map +1 -0
- package/dist/shared/utils/top-level-nextclaw-command-env.utils.d.ts +2 -1
- package/dist/shared/utils/top-level-nextclaw-command-env.utils.d.ts.map +1 -0
- package/dist/shared/utils/top-level-nextclaw-command-env.utils.js +2 -0
- package/dist/shared/utils/top-level-nextclaw-command-env.utils.js.map +1 -0
- package/package.json +20 -20
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nextclaw-app.service.js","names":[],"sources":["../../../../src/shared/services/gateway/nextclaw-app.service.ts"],"sourcesContent":["import type { NextclawKernel } from \"@nextclaw/kernel\";\nimport { logStartupTrace, measureStartupAsync } from \"@nextclaw-service/shared/utils/startup-trace.js\";\nimport type { NextclawGatewayRuntime } from \"@nextclaw-service/shared/services/gateway/nextclaw-gateway-runtime.service.js\";\n\nexport type UiStartupHandle = {\n endpoint: string;\n};\n\ntype NextclawAppKernel = Pick<\n NextclawKernel,\n \"extensions\" | \"start\"\n>;\n\nexport class NextclawApp {\n private readonly kernel: NextclawAppKernel;\n\n constructor(private readonly gateway: NextclawGatewayRuntime) {\n this.kernel = gateway.kernel;\n }\n\n start = async (): Promise<void> => {\n logStartupTrace(\"service.deferred_startup.begin\");\n try {\n await this.bootstrapKernel();\n } catch (error) {\n this.handleKernelStartupError(error);\n }\n\n await this.startDeferredRuntimeServices();\n console.log(\"✓ Deferred startup: plugin gateways and channels settled\");\n logStartupTrace(\"service.deferred_startup.end\");\n };\n\n bootstrapKernel = async (): Promise<void> => {\n this.gateway.bootstrapStatus.markNcpAgentRunning();\n await measureStartupAsync(\n \"service.deferred_startup.bootstrap_kernel\",\n async () => await this.kernel.start(),\n );\n this.gateway.bootstrapStatus.markNcpAgentReady();\n if (this.gateway.uiConfig.enabled) {\n console.log(\"✓ UI NCP agent: ready\");\n return;\n }\n console.log(\"✓ Service NCP agent: ready\");\n };\n\n startDeferredRuntimeServices = async (): Promise<void> => {\n await measureStartupAsync(\n \"service.deferred_startup.load_plugins\",\n this.gateway.plugins.load,\n );\n await measureStartupAsync(\n \"service.deferred_startup.start_plugin_gateways\",\n this.gateway.plugins.startGateways,\n );\n await measureStartupAsync(\n \"service.deferred_startup.start_extensions\",\n async () => await this.kernel.extensions.start({ endpoint: this.gateway.uiStartup.endpoint }),\n );\n await measureStartupAsync(\"service.deferred_startup.start_channels\", this.gateway.startDeferredChannels);\n await measureStartupAsync(\n \"service.deferred_startup.wake_restart_sentinel\",\n this.gateway.restartWake.wakeFromRestartSentinel,\n );\n };\n\n private readonly handleKernelStartupError = (error: unknown): void => {\n this.gateway.bootstrapStatus.markNcpAgentError(\n error instanceof Error ? error.message : String(error),\n );\n console.error(\n `UI NCP agent startup failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n };\n}\n"],"mappings":";;AAaA,IAAa,cAAb,MAAyB;CACvB;CAEA,YAAY,SAAkD;AAAjC,OAAA,UAAA;AAC3B,OAAK,SAAS,QAAQ;;CAGxB,QAAQ,YAA2B;AACjC,kBAAgB,iCAAiC;AACjD,MAAI;AACF,SAAM,KAAK,iBAAiB;WACrB,OAAO;AACd,QAAK,yBAAyB,MAAM;;AAGtC,QAAM,KAAK,8BAA8B;AACzC,UAAQ,IAAI,2DAA2D;AACvE,kBAAgB,+BAA+B;;CAGjD,kBAAkB,YAA2B;AAC3C,OAAK,QAAQ,gBAAgB,qBAAqB;AAClD,QAAM,oBACJ,6CACA,YAAY,MAAM,KAAK,OAAO,OAAO,CACtC;AACD,OAAK,QAAQ,gBAAgB,mBAAmB;AAChD,MAAI,KAAK,QAAQ,SAAS,SAAS;AACjC,WAAQ,IAAI,wBAAwB;AACpC;;AAEF,UAAQ,IAAI,6BAA6B;;CAG3C,+BAA+B,YAA2B;AACxD,QAAM,oBACJ,yCACA,KAAK,QAAQ,QAAQ,KACtB;AACD,QAAM,oBACJ,kDACA,KAAK,QAAQ,QAAQ,cACtB;AACD,QAAM,oBACJ,6CACA,YAAY,MAAM,KAAK,OAAO,WAAW,MAAM,EAAE,UAAU,KAAK,QAAQ,UAAU,UAAU,CAAC,CAC9F;AACD,QAAM,oBAAoB,2CAA2C,KAAK,QAAQ,sBAAsB;AACxG,QAAM,oBACJ,kDACA,KAAK,QAAQ,YAAY,wBAC1B;;CAGH,4BAA6C,UAAyB;AACpE,OAAK,QAAQ,gBAAgB,kBAC3B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,CACvD;AACD,UAAQ,MACN,gCAAgC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,GACvF"}
|
|
@@ -83,4 +83,5 @@ declare class NextclawGatewayRuntime {
|
|
|
83
83
|
private configureIngressHandlers;
|
|
84
84
|
}
|
|
85
85
|
//#endregion
|
|
86
|
-
export { GatewayRuntimeDeps, NextclawGatewayRuntime };
|
|
86
|
+
export { GatewayRuntimeDeps, NextclawGatewayRuntime };
|
|
87
|
+
//# sourceMappingURL=nextclaw-gateway-runtime.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nextclaw-gateway-runtime.service.d.ts","names":[],"sources":["../../../../src/shared/services/gateway/nextclaw-gateway-runtime.service.ts"],"mappings":";;;;;;;;;;;;;;;KAkEK,QAAA,GAAS,YAAA,CAAa,MAAA;AAAA,KACtB,YAAA,GAAa,YAAA,CAAa,UAAA;AAAA,KAC1B,gBAAA,GAAiB,YAAA,CAAa,cAAA;AAAA,KAE9B,qBAAA;EACH,WAAA,GAAc,OAAA,CAAQ,QAAA;EACtB,WAAA;AAAA;AAAA,KAGU,kBAAA;EACV,cAAA,GAAiB,MAAA,EAAQ,oBAAA,KAAyB,OAAA;EAClD,4BAAA,GAA+B,aAAA;EAC/B,YAAA,GAAe,OAAA;IAAW,WAAA,EAAa,MAAA;IAAyB,IAAA;EAAA,MAAoB,OAAA;EACpF,WAAA,QAAmB,OAAA;EACnB,gBAAA,GAAmB,IAAA,eAAmB,OAAA;EACtC,8BAAA,GAAiC,IAAA,UAAc,KAAA;IAAiC,OAAA;IAAiB,MAAA;EAAA;AAAA;AAAA,cAGtF,sBAAA;EAAA,iBA4BQ,IAAA;EAAA,iBACA,OAAA;EAAA,SA5BV,MAAA,EAAQ,cAAA;EAAA,SACR,WAAA,EAAa,QAAA;EAAA,SACb,UAAA,EAAY,YAAA;EAAA,SACZ,cAAA,EAAgB,gBAAA;EAAA,SAChB,UAAA,EAAY,iBAAA;EAAA,SACZ,cAAA,EAAgB,oBAAA;EAAA,SAChB,aAAA,EAAe,mBAAA;EAAA,SACf,OAAA,EAAS,OAAA;EAAA,SACT,YAAA,EADgB,oBAAA;EAAA,SAEhB,cAAA;EAAA,SACA,eAAA,EAAiB,kBAAA;EAAA,SACjB,iBAAA,EAAmB,qBAAA;EAAA,SAEnB,aAAA,EAAe,aAAA;EAAA,SACf,QAAA,EAAU,QAAA;EAAA,SACV,WAAA;EAAA,SACA,SAAA;EAAA,SACA,aAAA,EAAe,oBAAA;EAAA,SACf,WAAA,EAAa,oBAAA;EAAA,SACb,OAAA,EAAS,oBAAA;EAAA,SACT,WAAA,EAAa,yBAAA;EACtB,eAAA,EAAiB,2BAAA;EACjB,SAAA,EAAW,eAAA;EAAA,SACF,YAAA,EAAY,0BAAA;EAAA,QACb,sBAAA;cAGW,IAAA,EAAM,kBAAA,EACN,OAAA,EAAS,qBAAA;EAyD5B,KAAA,QAAkB,OAAA;EAAA,QAcV,KAAA;EAAA,QAOA,qBAAA;EAAA,QAOA,uBAAA;EAAA,QAIA,cAAA;EAAA,QAiCA,qBAAA;EAAA,QAkBA,cAAA;EAAA,QAmBA,oBAAA;EAAA,SAKC,qBAAA,QAAkC,OAAA;EAAA,QAInC,0BAAA;EAAA,iBAcS,aAAA;EAAA,QAWT,iBAAA;EAAA,QASA,OAAA;EAAA,QASA,kBAAA;EAAA,QAKA,uBAAA;EAAA,QAqBA,oBAAA;EAAA,QAiBA,sBAAA;EAAA,QAIA,sBAAA;EAAA,QA2BA,wBAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nextclaw-gateway-runtime.service.js","names":["getConfigPath","getDataDir","getWorkspacePath","waitForNextTick"],"sources":["../../../../src/shared/services/gateway/nextclaw-gateway-runtime.service.ts"],"sourcesContent":["import * as NextclawCore from \"@nextclaw/core\";\nimport {\n NextclawKernel,\n runGatewayInboundLoop,\n type AutomationManager,\n type ConfigManager,\n type LlmProviderManager,\n} from \"@nextclaw/kernel\";\nimport type { EventBus, Ingress } from \"@nextclaw/shared\";\nimport {\n setPluginRuntimeBridge,\n} from \"@nextclaw/openclaw-compat\";\nimport {\n startUiServer,\n type MarketplaceApiConfig,\n type UiRouterOptions,\n type UiRuntimeControlHost,\n type UiRuntimeUpdateHost,\n} from \"@nextclaw/server\";\nimport { resolve } from \"node:path\";\nimport { setImmediate as waitForNextTick } from \"node:timers/promises\";\nimport { GatewayControllerImpl } from \"@nextclaw-service/shared/controllers/gateway.controller.js\";\nimport { GatewayPluginManager } from \"@nextclaw-service/shared/services/gateway/managers/gateway-plugin.manager.js\";\nimport { GatewayRemoteManager } from \"@nextclaw-service/shared/services/gateway/managers/gateway-remote.manager.js\";\nimport { GatewayRestartWakeService } from \"@nextclaw-service/shared/services/gateway/gateway-restart-wake.service.js\";\nimport { createCronJobHandler } from \"@nextclaw-service/shared/services/gateway/utils/cron-job-handler.utils.js\";\nimport { companionRuntimeService } from \"@nextclaw-service/shared/services/ui/companion-runtime.service.js\";\nimport { handleGatewayDeferredStartupError } from \"@nextclaw-service/shared/services/gateway/utils/gateway-runtime-lifecycle.utils.js\";\nimport { NextclawApp, type UiStartupHandle } from \"@nextclaw-service/shared/services/gateway/nextclaw-app.service.js\";\nimport { NextclawDistributionService } from \"@nextclaw-service/shared/services/runtime/nextclaw-distribution.service.js\";\nimport { ServiceBootstrapStatusStore } from \"@nextclaw-service/shared/services/gateway/service-bootstrap-status.service.js\";\nimport { ServiceFileWatcherRegistry, markLocalUiRuntimeIfStarted, startGatewayRuntimeSupport, watchServiceConfigFile } from \"@nextclaw-service/shared/services/gateway/service-startup-support.service.js\";\nimport { installPluginRuntimeBridge } from \"@nextclaw-service/shared/services/plugin/utils/plugin-runtime-bridge.utils.js\";\nimport { wrapStartChannelsWithDevPluginHotReload } from \"@nextclaw-service/shared/services/plugin/utils/plugin-dev-hot-reload.utils.js\";\nimport { ServiceMarketplaceInstaller } from \"@nextclaw-service/shared/services/marketplace/service-marketplace-installer.service.js\";\nimport { NpmRuntimeUpdateHost } from \"@nextclaw-service/shared/services/ui/npm-runtime-update-host.service.js\";\nimport { createRuntimeControlHost } from \"@nextclaw-service/shared/services/ui/runtime-control-host.service.js\";\nimport { localUiRuntimeStore } from \"@nextclaw-service/shared/stores/local-ui-runtime.store.js\";\nimport { managedServiceStateStore } from \"@nextclaw-service/shared/stores/managed-service-state.store.js\";\nimport type { RequestRestartParams } from \"@nextclaw-service/shared/types/cli.types.js\";\nimport { openBrowser, resolveUiConfig, resolveUiStaticDir } from \"@nextclaw-service/shared/utils/cli.utils.js\";\nimport { logStartupTrace, measureStartupAsync, measureStartupSync } from \"@nextclaw-service/shared/utils/startup-trace.js\";\n\nconst {\n getConfigPath,\n getDataDir,\n getWorkspacePath,\n} = NextclawCore;\n\nconst DEV_PLUGIN_HOT_RELOAD_STARTUP_SETTLE_MS = 5_000;\n\nfunction resolveApplyRestartMode(uiPort: number): \"managed-service-restart\" | \"manual-process-restart\" {\n const serviceState = managedServiceStateStore.read();\n if (serviceState?.pid === process.pid) {\n return \"managed-service-restart\";\n }\n if (\n process.env.NEXTCLAW_RUNTIME_BUNDLE_CHILD === \"1\" &&\n typeof serviceState?.uiPort === \"number\" &&\n serviceState.uiPort === uiPort\n ) {\n return \"managed-service-restart\";\n }\n return \"manual-process-restart\";\n}\n\ntype Config = NextclawCore.Config;\ntype MessageBus = NextclawCore.MessageBus;\ntype SessionManager = NextclawCore.SessionManager;\n\ntype GatewayRuntimeOptions = {\n uiOverrides?: Partial<Config[\"ui\"]>;\n uiStaticDir?: string | null;\n};\n\nexport type GatewayRuntimeDeps = {\n requestRestart: (params: RequestRestartParams) => Promise<void>;\n initializeAgentHomeDirectory: (homeDirectory: string) => void;\n startService: (options: { uiOverrides: Record<string, unknown>; open: boolean }) => Promise<void>;\n stopService: () => Promise<void>;\n runCliSubcommand: (args: string[]) => Promise<string>;\n installBuiltinMarketplaceSkill: (slug: string, force: boolean | undefined) => { message: string; output?: string } | null;\n};\n\nexport class NextclawGatewayRuntime {\n readonly kernel: NextclawKernel;\n readonly appEventBus: EventBus;\n readonly messageBus: MessageBus;\n readonly sessionManager: SessionManager;\n readonly automation: AutomationManager;\n readonly runtimeControl: UiRuntimeControlHost;\n readonly runtimeUpdate: UiRuntimeUpdateHost | null;\n readonly ingress: Ingress;\n readonly distribution = NextclawDistributionService.get();\n readonly productVersion: string;\n readonly providerManager: LlmProviderManager;\n readonly gatewayController: GatewayControllerImpl;\n\n readonly configManager: ConfigManager;\n readonly uiConfig: Config[\"ui\"];\n readonly uiStaticDir: string | null;\n readonly workspace: string;\n readonly remoteManager: GatewayRemoteManager;\n readonly marketplace: MarketplaceApiConfig;\n readonly plugins: GatewayPluginManager;\n readonly restartWake: GatewayRestartWakeService;\n bootstrapStatus: ServiceBootstrapStatusStore;\n uiStartup: UiStartupHandle;\n readonly fileWatchers = new ServiceFileWatcherRegistry();\n private deferredChannelStarter: () => Promise<void>;\n\n constructor(\n private readonly deps: GatewayRuntimeDeps,\n private readonly options: GatewayRuntimeOptions,\n ) {\n const configPath = getConfigPath();\n this.kernel = measureStartupSync(\n \"service.gateway.kernel\",\n () => new NextclawKernel({\n homeDir: getDataDir(),\n configPath,\n }),\n );\n this.configManager = this.kernel.configManager;\n const config = this.configManager.config;\n this.uiConfig = resolveUiConfig(config, options.uiOverrides);\n this.uiStaticDir = options.uiStaticDir === undefined ? resolveUiStaticDir(this.distribution.uiDistDir) : options.uiStaticDir;\n this.workspace = getWorkspacePath(config.agents.defaults.workspace);\n this.appEventBus = this.kernel.eventBus;\n this.ingress = this.kernel.ingress;\n this.messageBus = this.kernel.messageBus;\n this.sessionManager = this.kernel.sessions;\n this.automation = this.kernel.automation;\n this.productVersion = this.distribution.version;\n this.plugins = new GatewayPluginManager(this);\n this.providerManager = this.kernel.llmProviders;\n this.installConfigHostHooks();\n this.restartWake = new GatewayRestartWakeService(this);\n this.bootstrapStatus = this.createBootstrapStatus();\n this.uiStartup = this.createDisabledUiStartup();\n this.remoteManager = new GatewayRemoteManager({\n deps: this.deps,\n configManager: this.configManager,\n uiConfig: this.uiConfig,\n onRemoteStateChange: (state) => this.bootstrapStatus.syncRemoteRuntimeState(state),\n });\n this.marketplace = this.createMarketplace();\n this.runtimeControl = createRuntimeControlHost({\n serviceCommands: this.deps,\n requestRestart: this.deps.requestRestart,\n uiConfig: this.uiConfig,\n });\n this.runtimeUpdate =\n process.env.NEXTCLAW_DISABLE_RUNTIME_UPDATE_HOST === \"1\"\n ? null\n : new NpmRuntimeUpdateHost({\n eventBus: this.appEventBus,\n applyRestartMode: resolveApplyRestartMode(this.uiConfig.port),\n requestRestart: this.deps.requestRestart,\n uiConfig: this.uiConfig,\n });\n this.gatewayController = this.createGatewayController();\n this.kernel.provideGatewayController(this.gatewayController);\n this.deferredChannelStarter = this.startChannels;\n this.automation.onJob = createCronJobHandler({\n agentRunRequests: this.kernel.agentRunRequestManager,\n bus: this.messageBus,\n });\n }\n\n start = async (): Promise<void> => {\n logStartupTrace(\"service.start_gateway.begin\");\n await this.reset();\n this.configureIngressHandlers();\n this.uiStartup = await this.startUiRuntime();\n await companionRuntimeService.applyConfig(this.configManager.config);\n await this.markUiRuntimeReady();\n await this.startSupportServices();\n this.installChannelDevHotReload();\n await this.runRuntimeLoop();\n await companionRuntimeService.ensureStopped();\n logStartupTrace(\"service.start_gateway.end\");\n };\n\n private reset = async (): Promise<void> => {\n await this.fileWatchers.clear();\n this.bootstrapStatus = this.createBootstrapStatus();\n this.uiStartup = this.createDisabledUiStartup();\n this.deferredChannelStarter = this.startChannels;\n };\n\n private createBootstrapStatus = (): ServiceBootstrapStatusStore => {\n const bootstrapStatus = new ServiceBootstrapStatusStore();\n bootstrapStatus.markChannelsPending();\n bootstrapStatus.setRemoteState(this.configManager.config.remote.enabled ? \"pending\" : \"disabled\");\n return bootstrapStatus;\n };\n\n private createDisabledUiStartup = (): UiStartupHandle => ({\n endpoint: \"\",\n });\n\n private startUiRuntime = async (): Promise<UiStartupHandle> => {\n const uiStartup = await measureStartupAsync(\"service.start_ui_runtime\", async () => {\n logStartupTrace(\"service.start_ui_runtime.begin\");\n if (!this.uiConfig.enabled) {\n return this.createDisabledUiStartup();\n }\n const uiServer = await startUiServer(this.createUiRouterOptions());\n const uiUrl = NextclawCore.resolveLocalUiBaseUrl({\n host: uiServer.host,\n port: uiServer.port,\n });\n console.log(`✓ UI API: ${uiUrl}/api`);\n if (this.uiStaticDir) {\n console.log(`✓ UI frontend: ${uiUrl}`);\n }\n if (this.uiConfig.open) {\n openBrowser(uiUrl);\n }\n logStartupTrace(\"service.start_ui_runtime.ready\", {\n host: uiServer.host,\n port: uiServer.port,\n });\n return {\n endpoint: uiUrl,\n };\n });\n markLocalUiRuntimeIfStarted({\n uiStartup: this.uiConfig.enabled ? uiStartup : null,\n uiConfig: this.uiConfig,\n });\n return uiStartup;\n };\n\n private createUiRouterOptions = (): UiRouterOptions => ({\n kernel: this.kernel,\n configPath: this.configManager.configPath,\n appEventBus: this.appEventBus,\n uiConfig: this.uiConfig,\n uiStaticDir: this.uiStaticDir,\n productVersion: this.productVersion,\n applyLiveConfigReload: this.configManager.applyLiveConfigReload,\n initializeAgentHomeDirectory: this.deps.initializeAgentHomeDirectory,\n marketplace: this.marketplace,\n cron: this.automation,\n remoteAccess: this.remoteManager.remoteAccess,\n runtimeControl: this.runtimeControl,\n ...(this.runtimeUpdate ? { runtimeUpdate: this.runtimeUpdate } : {}),\n bootstrapStatus: this.bootstrapStatus,\n plugins: this.plugins,\n });\n\n private runRuntimeLoop = async (): Promise<void> => {\n logStartupTrace(\"service.start_gateway.runtime_loop_begin\");\n let startupTask: Promise<void> | null = null;\n try {\n const runtimeLoopTask = runGatewayInboundLoop(this);\n startupTask = this.startDeferredRuntime();\n void startupTask.catch((error) => handleGatewayDeferredStartupError({\n bootstrapStatus: this.bootstrapStatus,\n error,\n }));\n await runtimeLoopTask;\n } finally {\n if (startupTask) {\n await startupTask.catch(() => undefined);\n }\n await this.cleanup();\n }\n };\n\n private startDeferredRuntime = async (): Promise<void> => {\n const app = new NextclawApp(this);\n await app.start();\n };\n\n readonly startDeferredChannels = async (): Promise<void> => {\n await this.deferredChannelStarter();\n };\n\n private installChannelDevHotReload = (): void => {\n this.deferredChannelStarter = wrapStartChannelsWithDevPluginHotReload({\n startChannels: this.startChannels,\n watcherRegistry: this.fileWatchers,\n isRuntimeActive: () => true,\n reloadPlugins: async (pluginIds: string[]) => {\n await this.plugins.reloadForDevHotReload(\n pluginIds.map((pluginId) => `plugins.entries.${pluginId}.source`),\n );\n },\n startupSettleMs: DEV_PLUGIN_HOT_RELOAD_STARTUP_SETTLE_MS,\n });\n };\n\n private readonly startChannels = async (): Promise<void> => {\n await this.kernel.channels.start();\n const enabledChannels = this.kernel.channels.enabledChannels;\n if (enabledChannels.length > 0) {\n console.log(`✓ Channels enabled: ${enabledChannels.join(\", \")}`);\n } else {\n console.log(\"Warning: No channels enabled\");\n }\n this.bootstrapStatus.markChannelsReady(enabledChannels);\n };\n\n private createMarketplace = (): MarketplaceApiConfig => ({\n apiBaseUrl: process.env.NEXTCLAW_MARKETPLACE_API_BASE,\n installer: new ServiceMarketplaceInstaller({\n applyLiveConfigReload: this.configManager.applyLiveConfigReload,\n runCliSubcommand: this.deps.runCliSubcommand,\n installBuiltinSkill: this.deps.installBuiltinMarketplaceSkill,\n }).createInstaller(),\n });\n\n private cleanup = async (): Promise<void> => {\n localUiRuntimeStore.clearIfOwnedByProcess();\n await this.fileWatchers.clear();\n await this.kernel.extensions.stop();\n await this.remoteManager.stop();\n await this.plugins.stopGateways();\n setPluginRuntimeBridge(null);\n };\n\n private markUiRuntimeReady = async (): Promise<void> => {\n this.bootstrapStatus.markShellReady();\n await waitForNextTick();\n };\n\n private createGatewayController = (): GatewayControllerImpl => {\n return measureStartupSync(\n \"service.gateway.gateway_controller\",\n () => new GatewayControllerImpl({\n configManager: this.configManager,\n channels: this.kernel.channels,\n cron: this.automation,\n sessionManager: this.sessionManager,\n requestRestart: async (options) => {\n await this.deps.requestRestart({\n reason: options?.reason ?? \"gateway tool restart\",\n manualMessage: \"Restart the gateway to apply changes.\",\n strategy: \"background-service-or-exit\",\n delayMs: options?.delayMs,\n silentOnServiceRestart: true,\n });\n },\n })\n );\n };\n\n private startSupportServices = async (): Promise<void> => {\n this.plugins.publishConfigChanges();\n this.configurePluginRuntime();\n await measureStartupAsync(\"service.start_gateway_support_services\", async () =>\n await startGatewayRuntimeSupport({\n automation: this.automation,\n remoteModule: this.remoteManager.remoteModule,\n watchConfigFile: () => watchServiceConfigFile({\n configPath: resolve(getConfigPath()),\n watcherRegistry: this.fileWatchers,\n scheduleReload: (reason) => this.configManager.scheduleReload(reason)\n }),\n watcherRegistry: this.fileWatchers\n })\n );\n };\n\n private configurePluginRuntime = (): void => {\n installPluginRuntimeBridge(this);\n };\n\n private installConfigHostHooks = (): void => {\n this.configManager.installRuntimeHooks({\n reloadCompanion: async ({ config: nextConfig }) => {\n await companionRuntimeService.applyConfig(nextConfig);\n },\n reloadPlugins: async ({ config: nextConfig, changedPaths }) => {\n const result = await this.plugins.reloadForConfigChange({\n config: nextConfig,\n changedPaths,\n });\n if (result.restartChannels) {\n console.log(\"Config reload: plugin channel gateways restarted.\");\n }\n return { restartChannels: result.restartChannels };\n },\n onRestartRequired: (paths) => {\n void this.deps.requestRestart({\n changedPaths: paths,\n manualMessage: `已保存以下改动,等待你手动重启后生效:${paths.join(\", \")}`,\n mode: \"notify\",\n reason: `config reload requires restart: ${paths.join(\", \")}`,\n strategy: \"background-service-or-manual\",\n });\n },\n });\n };\n\n private configureIngressHandlers = (): void => {\n this.kernel.extensions.registerIngressHandlers();\n };\n\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,MAAM,EACJ,eAAA,iBACA,YAAA,cACA,kBAAA,uBACE;AAEJ,MAAM,0CAA0C;AAEhD,SAAS,wBAAwB,QAAsE;CACrG,MAAM,eAAe,yBAAyB,MAAM;AACpD,KAAI,cAAc,QAAQ,QAAQ,IAChC,QAAO;AAET,KACE,QAAQ,IAAI,kCAAkC,OAC9C,OAAO,cAAc,WAAW,YAChC,aAAa,WAAW,OAExB,QAAO;AAET,QAAO;;AAqBT,IAAa,yBAAb,MAAoC;CAClC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,eAAwB,4BAA4B,KAAK;CACzD;CACA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,eAAwB,IAAI,4BAA4B;CACxD;CAEA,YACE,MACA,SACA;AAFiB,OAAA,OAAA;AACA,OAAA,UAAA;EAEjB,MAAM,aAAaA,iBAAe;AAClC,OAAK,SAAS,mBACZ,gCACM,IAAI,eAAe;GACvB,SAASC,cAAY;GACrB;GACD,CAAC,CACH;AACD,OAAK,gBAAgB,KAAK,OAAO;EACjC,MAAM,SAAS,KAAK,cAAc;AAClC,OAAK,WAAW,gBAAgB,QAAQ,QAAQ,YAAY;AAC5D,OAAK,cAAc,QAAQ,gBAAgB,KAAA,IAAY,mBAAmB,KAAK,aAAa,UAAU,GAAG,QAAQ;AACjH,OAAK,YAAYC,mBAAiB,OAAO,OAAO,SAAS,UAAU;AACnE,OAAK,cAAc,KAAK,OAAO;AAC/B,OAAK,UAAU,KAAK,OAAO;AAC3B,OAAK,aAAa,KAAK,OAAO;AAC9B,OAAK,iBAAiB,KAAK,OAAO;AAClC,OAAK,aAAa,KAAK,OAAO;AAC9B,OAAK,iBAAiB,KAAK,aAAa;AACxC,OAAK,UAAU,IAAI,qBAAqB,KAAK;AAC7C,OAAK,kBAAkB,KAAK,OAAO;AACnC,OAAK,wBAAwB;AAC7B,OAAK,cAAc,IAAI,0BAA0B,KAAK;AACtD,OAAK,kBAAkB,KAAK,uBAAuB;AACnD,OAAK,YAAY,KAAK,yBAAyB;AAC/C,OAAK,gBAAgB,IAAI,qBAAqB;GAC5C,MAAM,KAAK;GACX,eAAe,KAAK;GACpB,UAAU,KAAK;GACf,sBAAsB,UAAU,KAAK,gBAAgB,uBAAuB,MAAM;GACnF,CAAC;AACF,OAAK,cAAc,KAAK,mBAAmB;AAC3C,OAAK,iBAAiB,yBAAyB;GAC7C,iBAAiB,KAAK;GACtB,gBAAgB,KAAK,KAAK;GAC1B,UAAU,KAAK;GAChB,CAAC;AACF,OAAK,gBACH,QAAQ,IAAI,yCAAyC,MACjD,OACA,IAAI,qBAAqB;GACvB,UAAU,KAAK;GACf,kBAAkB,wBAAwB,KAAK,SAAS,KAAK;GAC7D,gBAAgB,KAAK,KAAK;GAC1B,UAAU,KAAK;GACtB,CAAC;AACF,OAAK,oBAAoB,KAAK,yBAAyB;AACvD,OAAK,OAAO,yBAAyB,KAAK,kBAAkB;AAC5D,OAAK,yBAAyB,KAAK;AACnC,OAAK,WAAW,QAAQ,qBAAqB;GAC3C,kBAAkB,KAAK,OAAO;GAC9B,KAAK,KAAK;GACX,CAAC;;CAGJ,QAAQ,YAA2B;AACjC,kBAAgB,8BAA8B;AAC9C,QAAM,KAAK,OAAO;AAClB,OAAK,0BAA0B;AAC/B,OAAK,YAAY,MAAM,KAAK,gBAAgB;AAC5C,QAAM,wBAAwB,YAAY,KAAK,cAAc,OAAO;AACpE,QAAM,KAAK,oBAAoB;AAC/B,QAAM,KAAK,sBAAsB;AACjC,OAAK,4BAA4B;AACjC,QAAM,KAAK,gBAAgB;AAC3B,QAAM,wBAAwB,eAAe;AAC7C,kBAAgB,4BAA4B;;CAG9C,QAAgB,YAA2B;AACzC,QAAM,KAAK,aAAa,OAAO;AAC/B,OAAK,kBAAkB,KAAK,uBAAuB;AACnD,OAAK,YAAY,KAAK,yBAAyB;AAC/C,OAAK,yBAAyB,KAAK;;CAGrC,8BAAmE;EACjE,MAAM,kBAAkB,IAAI,6BAA6B;AACzD,kBAAgB,qBAAqB;AACrC,kBAAgB,eAAe,KAAK,cAAc,OAAO,OAAO,UAAU,YAAY,WAAW;AACjG,SAAO;;CAGT,iCAA0D,EACxD,UAAU,IACX;CAED,iBAAyB,YAAsC;EAC7D,MAAM,YAAY,MAAM,oBAAoB,4BAA4B,YAAY;AAClF,mBAAgB,iCAAiC;AACjD,OAAI,CAAC,KAAK,SAAS,QACjB,QAAO,KAAK,yBAAyB;GAEvC,MAAM,WAAW,MAAM,cAAc,KAAK,uBAAuB,CAAC;GAClE,MAAM,QAAQ,aAAa,sBAAsB;IAC/C,MAAM,SAAS;IACf,MAAM,SAAS;IAChB,CAAC;AACF,WAAQ,IAAI,aAAa,MAAM,MAAM;AACrC,OAAI,KAAK,YACP,SAAQ,IAAI,kBAAkB,QAAQ;AAExC,OAAI,KAAK,SAAS,KAChB,aAAY,MAAM;AAEpB,mBAAgB,kCAAkC;IAChD,MAAM,SAAS;IACf,MAAM,SAAS;IAChB,CAAC;AACF,UAAO,EACL,UAAU,OACX;IACD;AACF,8BAA4B;GAC1B,WAAW,KAAK,SAAS,UAAU,YAAY;GAC/C,UAAU,KAAK;GAChB,CAAC;AACF,SAAO;;CAGT,+BAAwD;EACtD,QAAQ,KAAK;EACb,YAAY,KAAK,cAAc;EAC/B,aAAa,KAAK;EAClB,UAAU,KAAK;EACf,aAAa,KAAK;EAClB,gBAAgB,KAAK;EACrB,uBAAuB,KAAK,cAAc;EAC1C,8BAA8B,KAAK,KAAK;EACxC,aAAa,KAAK;EAClB,MAAM,KAAK;EACX,cAAc,KAAK,cAAc;EACjC,gBAAgB,KAAK;EACrB,GAAI,KAAK,gBAAgB,EAAE,eAAe,KAAK,eAAe,GAAG,EAAE;EACnE,iBAAiB,KAAK;EACtB,SAAS,KAAK;EACf;CAED,iBAAyB,YAA2B;AAClD,kBAAgB,2CAA2C;EAC3D,IAAI,cAAoC;AACxC,MAAI;GACF,MAAM,kBAAkB,sBAAsB,KAAK;AACnD,iBAAc,KAAK,sBAAsB;AACpC,eAAY,OAAO,UAAU,kCAAkC;IAClE,iBAAiB,KAAK;IACtB;IACD,CAAC,CAAC;AACH,SAAM;YACE;AACR,OAAI,YACF,OAAM,YAAY,YAAY,KAAA,EAAU;AAE1C,SAAM,KAAK,SAAS;;;CAIxB,uBAA+B,YAA2B;AAExD,QADY,IAAI,YAAY,KAAK,CACvB,OAAO;;CAGnB,wBAAiC,YAA2B;AAC1D,QAAM,KAAK,wBAAwB;;CAGrC,mCAAiD;AAC/C,OAAK,yBAAyB,wCAAwC;GACpE,eAAe,KAAK;GACpB,iBAAiB,KAAK;GACtB,uBAAuB;GACvB,eAAe,OAAO,cAAwB;AAC5C,UAAM,KAAK,QAAQ,sBACjB,UAAU,KAAK,aAAa,mBAAmB,SAAS,SAAS,CAClE;;GAEH,iBAAiB;GAClB,CAAC;;CAGJ,gBAAiC,YAA2B;AAC1D,QAAM,KAAK,OAAO,SAAS,OAAO;EAClC,MAAM,kBAAkB,KAAK,OAAO,SAAS;AAC7C,MAAI,gBAAgB,SAAS,EAC3B,SAAQ,IAAI,uBAAuB,gBAAgB,KAAK,KAAK,GAAG;MAEhE,SAAQ,IAAI,+BAA+B;AAE7C,OAAK,gBAAgB,kBAAkB,gBAAgB;;CAGzD,2BAAyD;EACvD,YAAY,QAAQ,IAAI;EACxB,WAAW,IAAI,4BAA4B;GACzC,uBAAuB,KAAK,cAAc;GAC1C,kBAAkB,KAAK,KAAK;GAC5B,qBAAqB,KAAK,KAAK;GAChC,CAAC,CAAC,iBAAiB;EACrB;CAED,UAAkB,YAA2B;AAC3C,sBAAoB,uBAAuB;AAC3C,QAAM,KAAK,aAAa,OAAO;AAC/B,QAAM,KAAK,OAAO,WAAW,MAAM;AACnC,QAAM,KAAK,cAAc,MAAM;AAC/B,QAAM,KAAK,QAAQ,cAAc;AACjC,yBAAuB,KAAK;;CAG9B,qBAA6B,YAA2B;AACtD,OAAK,gBAAgB,gBAAgB;AACrC,QAAMC,cAAiB;;CAGzB,gCAA+D;AAC7D,SAAO,mBACL,4CACM,IAAI,sBAAsB;GAC9B,eAAe,KAAK;GACpB,UAAU,KAAK,OAAO;GACtB,MAAM,KAAK;GACX,gBAAgB,KAAK;GACrB,gBAAgB,OAAO,YAAY;AACjC,UAAM,KAAK,KAAK,eAAe;KAC7B,QAAQ,SAAS,UAAU;KAC3B,eAAe;KACf,UAAU;KACV,SAAS,SAAS;KAClB,wBAAwB;KACzB,CAAC;;GAEL,CAAC,CACH;;CAGH,uBAA+B,YAA2B;AACxD,OAAK,QAAQ,sBAAsB;AACnC,OAAK,wBAAwB;AAC7B,QAAM,oBAAoB,0CAA0C,YAClE,MAAM,2BAA2B;GAC/B,YAAY,KAAK;GACjB,cAAc,KAAK,cAAc;GACjC,uBAAuB,uBAAuB;IAC5C,YAAY,QAAQH,iBAAe,CAAC;IACpC,iBAAiB,KAAK;IACtB,iBAAiB,WAAW,KAAK,cAAc,eAAe,OAAO;IACtE,CAAC;GACF,iBAAiB,KAAK;GACvB,CAAC,CACH;;CAGH,+BAA6C;AAC3C,6BAA2B,KAAK;;CAGlC,+BAA6C;AAC3C,OAAK,cAAc,oBAAoB;GACrC,iBAAiB,OAAO,EAAE,QAAQ,iBAAiB;AACjD,UAAM,wBAAwB,YAAY,WAAW;;GAEvD,eAAe,OAAO,EAAE,QAAQ,YAAY,mBAAmB;IAC7D,MAAM,SAAS,MAAM,KAAK,QAAQ,sBAAsB;KACtD,QAAQ;KACR;KACD,CAAC;AACF,QAAI,OAAO,gBACT,SAAQ,IAAI,oDAAoD;AAElE,WAAO,EAAE,iBAAiB,OAAO,iBAAiB;;GAEpD,oBAAoB,UAAU;AACvB,SAAK,KAAK,eAAe;KAC5B,cAAc;KACd,eAAe,sBAAsB,MAAM,KAAK,KAAK;KACrD,MAAM;KACN,QAAQ,mCAAmC,MAAM,KAAK,KAAK;KAC3D,UAAU;KACX,CAAC;;GAEL,CAAC;;CAGJ,iCAA+C;AAC7C,OAAK,OAAO,WAAW,yBAAyB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-bootstrap-status.service.d.ts","names":[],"sources":["../../../../src/shared/services/gateway/service-bootstrap-status.service.ts"],"mappings":";;;;cAOa,2BAAA;EAAA,QACH,KAAA;EAmBR,SAAA,CAAA,GAAa,mBAAA;EAab,cAAA,CAAA;EAKA,mBAAA,CAAA;EASA,iBAAA,CAAA;EASA,iBAAA,CAAkB,KAAA;EASlB,0BAAA,CAA2B,MAAA;IACzB,gBAAA;EAAA;EAcF,2BAAA,CAA4B,MAAA;IAC1B,iBAAA;IACA,gBAAA;EAAA;EAUF,wBAAA,CAAyB,MAAA;IACvB,iBAAA;IACA,gBAAA;EAAA;EAYF,wBAAA,CAAyB,KAAA;EAWzB,mBAAA,CAAA;EAOA,iBAAA,CAAkB,OAAA;EAWlB,iBAAA,CAAkB,KAAA;EAUlB,cAAA,CAAe,KAAA,EAAO,oBAAA,EAAsB,OAAA;EAO5C,sBAAA,CAAuB,OAAA,EAAS,kBAAA;EAWhC,SAAA,CAAU,KAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-bootstrap-status.service.js","names":[],"sources":["../../../../src/shared/services/gateway/service-bootstrap-status.service.ts"],"sourcesContent":["import type { BootstrapRemoteState, BootstrapStatusView } from \"@nextclaw/server\";\nimport type { RemoteRuntimeState } from \"@nextclaw/remote\";\n\nfunction now(): string {\n return new Date().toISOString();\n}\n\nexport class ServiceBootstrapStatusStore {\n private state: BootstrapStatusView = {\n phase: \"kernel-starting\",\n ncpAgent: {\n state: \"pending\",\n },\n pluginHydration: {\n state: \"pending\",\n loadedPluginCount: 0,\n totalPluginCount: 0\n },\n channels: {\n state: \"pending\",\n enabled: []\n },\n remote: {\n state: \"pending\"\n }\n };\n\n getStatus(): BootstrapStatusView {\n return {\n ...this.state,\n ncpAgent: { ...this.state.ncpAgent },\n pluginHydration: { ...this.state.pluginHydration },\n channels: {\n ...this.state.channels,\n enabled: [...this.state.channels.enabled]\n },\n remote: { ...this.state.remote }\n };\n }\n\n markShellReady(): void {\n this.state.phase = \"shell-ready\";\n this.state.shellReadyAt = this.state.shellReadyAt ?? now();\n }\n\n markNcpAgentRunning(): void {\n this.state.ncpAgent = {\n state: \"running\",\n startedAt: this.state.ncpAgent.startedAt ?? now(),\n completedAt: undefined,\n error: undefined\n };\n }\n\n markNcpAgentReady(): void {\n this.state.ncpAgent = {\n state: \"ready\",\n startedAt: this.state.ncpAgent.startedAt ?? now(),\n completedAt: now(),\n error: undefined\n };\n }\n\n markNcpAgentError(error: string): void {\n this.state.ncpAgent = {\n state: \"error\",\n startedAt: this.state.ncpAgent.startedAt ?? now(),\n completedAt: now(),\n error\n };\n }\n\n markPluginHydrationRunning(params: {\n totalPluginCount: number;\n }): void {\n this.state.phase = \"hydrating-capabilities\";\n this.state.pluginHydration = {\n ...this.state.pluginHydration,\n state: \"running\",\n loadedPluginCount: 0,\n totalPluginCount: params.totalPluginCount,\n startedAt: this.state.pluginHydration.startedAt ?? now(),\n completedAt: undefined,\n error: undefined\n };\n }\n\n markPluginHydrationProgress(params: {\n loadedPluginCount: number;\n totalPluginCount?: number;\n }): void {\n this.state.pluginHydration = {\n ...this.state.pluginHydration,\n state: \"running\",\n loadedPluginCount: params.loadedPluginCount,\n totalPluginCount: params.totalPluginCount ?? this.state.pluginHydration.totalPluginCount\n };\n }\n\n markPluginHydrationReady(params: {\n loadedPluginCount: number;\n totalPluginCount: number;\n }): void {\n this.state.pluginHydration = {\n ...this.state.pluginHydration,\n state: \"ready\",\n loadedPluginCount: params.loadedPluginCount,\n totalPluginCount: params.totalPluginCount,\n completedAt: now(),\n error: undefined\n };\n }\n\n markPluginHydrationError(error: string): void {\n this.state.phase = \"error\";\n this.state.lastError = error;\n this.state.pluginHydration = {\n ...this.state.pluginHydration,\n state: \"error\",\n completedAt: now(),\n error\n };\n }\n\n markChannelsPending(): void {\n this.state.channels = {\n state: \"pending\",\n enabled: []\n };\n }\n\n markChannelsReady(enabled: string[]): void {\n this.state.channels = {\n state: \"ready\",\n enabled: [...enabled]\n };\n if (this.state.pluginHydration.state === \"ready\") {\n this.state.phase = \"ready\";\n this.state.lastError = undefined;\n }\n }\n\n markChannelsError(error: string): void {\n this.state.phase = \"error\";\n this.state.lastError = error;\n this.state.channels = {\n state: \"error\",\n enabled: [...this.state.channels.enabled],\n error\n };\n }\n\n setRemoteState(state: BootstrapRemoteState, message?: string): void {\n this.state.remote = {\n state,\n ...(message ? { message } : {})\n };\n }\n\n syncRemoteRuntimeState(runtime: RemoteRuntimeState): void {\n const message = runtime.lastError?.trim() || undefined;\n const state =\n runtime.state === \"connected\" ? \"ready\"\n : runtime.state === \"disabled\" ? \"disabled\"\n : runtime.state === \"error\" && message?.includes(\"already owned\") ? \"conflict\"\n : runtime.state === \"error\" ? \"error\"\n : \"pending\";\n this.setRemoteState(state, message);\n }\n\n markError(error: string): void {\n this.state.phase = \"error\";\n this.state.lastError = error;\n }\n}\n"],"mappings":"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"}
|
|
@@ -39,4 +39,5 @@ declare function startGatewayRuntimeSupport(params: {
|
|
|
39
39
|
watcherRegistry: ServiceFileWatcherRegistry;
|
|
40
40
|
}): Promise<void>;
|
|
41
41
|
//#endregion
|
|
42
|
-
export { ServiceFileWatcherRegistry, logPluginGatewayDiagnostics, markLocalUiRuntimeIfStarted, pluginGatewayLogger, startGatewayRuntimeSupport, startGatewaySupportServices, watchCronStoreFile, watchServiceConfigFile };
|
|
42
|
+
export { ServiceFileWatcherRegistry, logPluginGatewayDiagnostics, markLocalUiRuntimeIfStarted, pluginGatewayLogger, startGatewayRuntimeSupport, startGatewaySupportServices, watchCronStoreFile, watchServiceConfigFile };
|
|
43
|
+
//# sourceMappingURL=service-startup-support.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-startup-support.service.d.ts","names":[],"sources":["../../../../src/shared/services/gateway/service-startup-support.service.ts"],"mappings":";;;;;;;cAQa,mBAAA;;;;;;iBAOG,2BAAA,CACd,WAAA,EAAa,gBAAA;AAAA,iBAaO,2BAAA,CAA4B,MAAA;EAChD,UAAA,EAAY,iBAAA;EACZ,YAAA,EAAc,mBAAA;EACd,eAAA;AAAA,IACE,OAAA;AAAA,iBAWY,kBAAA,CAAmB,UAAA,EAAY,iBAAA,GAAoB,SAAA;AAAA,iBAqBnD,sBAAA,CAAuB,MAAA;EACrC,UAAA;EACA,eAAA,EAAiB,0BAAA;EACjB,cAAA,GAAiB,MAAA;AAAA;AAAA,cA0BN,0BAAA;EAAA,iBACM,QAAA;EAAA,SAER,QAAA,GAAY,OAAA,EAAS,SAAA;EAAA,SAIrB,KAAA,QAAkB,OAAA;AAAA;AAAA,iBAYb,2BAAA,CAA4B,MAAA;EAC1C,SAAA;EACA,QAAA,EAAU,IAAA,CAAK,MAAA;AAAA;AAAA,iBAQK,0BAAA,CAA2B,MAAA;EAC/C,UAAA,EAAY,iBAAA;EACZ,YAAA,EAAc,mBAAA;EACd,eAAA;EACA,eAAA,EAAiB,0BAAA;AAAA,IACf,OAAA"}
|
|
@@ -94,3 +94,5 @@ async function startGatewayRuntimeSupport(params) {
|
|
|
94
94
|
}
|
|
95
95
|
//#endregion
|
|
96
96
|
export { ServiceFileWatcherRegistry, logPluginGatewayDiagnostics, markLocalUiRuntimeIfStarted, pluginGatewayLogger, startGatewayRuntimeSupport, startGatewaySupportServices, watchCronStoreFile, watchServiceConfigFile };
|
|
97
|
+
|
|
98
|
+
//# sourceMappingURL=service-startup-support.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-startup-support.service.js","names":[],"sources":["../../../../src/shared/services/gateway/service-startup-support.service.ts"],"sourcesContent":["import type { Config } from \"@nextclaw/core\";\nimport type { AutomationManager } from \"@nextclaw/kernel\";\nimport type { PluginDiagnostic } from \"@nextclaw/openclaw-compat\";\nimport type { RemoteServiceModule } from \"@nextclaw/remote\";\nimport chokidar, { type FSWatcher } from \"chokidar\";\nimport { resolve } from \"node:path\";\nimport { localUiRuntimeStore } from \"../../../shared/stores/local-ui-runtime.store.js\";\n\nexport const pluginGatewayLogger = {\n info: (message: string) => console.log(`[plugins] ${message}`),\n warn: (message: string) => console.warn(`[plugins] ${message}`),\n error: (message: string) => console.error(`[plugins] ${message}`),\n debug: (message: string) => console.debug(`[plugins] ${message}`)\n};\n\nexport function logPluginGatewayDiagnostics(\n diagnostics: PluginDiagnostic[],\n): void {\n for (const diag of diagnostics) {\n const prefix = diag.pluginId ? `${diag.pluginId}: ` : \"\";\n const text = `${prefix}${diag.message}`;\n if (diag.level === \"error\") {\n console.error(`[plugins] ${text}`);\n } else {\n console.warn(`[plugins] ${text}`);\n }\n }\n}\n\nexport async function startGatewaySupportServices(params: {\n automation: AutomationManager;\n remoteModule: RemoteServiceModule | null;\n watchConfigFile: () => void;\n}): Promise<void> {\n const { automation, remoteModule, watchConfigFile } = params;\n const cronJobs = automation.status().jobs;\n if (cronJobs > 0) {\n console.log(`✓ Cron: ${cronJobs} scheduled jobs`);\n }\n remoteModule?.start();\n watchConfigFile();\n await automation.start();\n}\n\nexport function watchCronStoreFile(automation: AutomationManager): FSWatcher {\n const cronStorePath = resolve(automation.storePath);\n const watcher = chokidar.watch(cronStorePath, {\n ignoreInitial: true,\n awaitWriteFinish: { stabilityThreshold: 200, pollInterval: 50 }\n });\n watcher.on(\"all\", (event, changedPath) => {\n if (resolve(changedPath) !== cronStorePath) {\n return;\n }\n if (event === \"add\" || event === \"change\" || event === \"unlink\") {\n try {\n automation.reloadFromStore();\n } catch (error) {\n console.error(`Cron store reload failed (${event}): ${String(error)}`);\n }\n }\n });\n return watcher;\n}\n\nexport function watchServiceConfigFile(params: {\n configPath: string;\n watcherRegistry: ServiceFileWatcherRegistry;\n scheduleReload: (reason: string) => void;\n}): void {\n const configPath = resolve(params.configPath);\n const watcher = chokidar.watch(configPath, {\n ignoreInitial: true,\n awaitWriteFinish: { stabilityThreshold: 200, pollInterval: 50 }\n });\n params.watcherRegistry.remember(watcher);\n watcher.on(\"all\", (event, changedPath) => {\n if (resolve(changedPath) !== configPath) {\n return;\n }\n if (event === \"add\") {\n params.scheduleReload(\"config add\");\n return;\n }\n if (event === \"change\") {\n params.scheduleReload(\"config change\");\n return;\n }\n if (event === \"unlink\") {\n params.scheduleReload(\"config unlink\");\n }\n });\n}\n\nexport class ServiceFileWatcherRegistry {\n private readonly watchers: FSWatcher[] = [];\n\n readonly remember = (watcher: FSWatcher): void => {\n this.watchers.push(watcher);\n };\n\n readonly clear = async (): Promise<void> => {\n const watchers = this.watchers.splice(0);\n await Promise.allSettled(watchers.map(async (watcher) => {\n try {\n await watcher.close();\n } catch {\n void 0;\n }\n }));\n };\n}\n\nexport function markLocalUiRuntimeIfStarted(params: {\n uiStartup: unknown | null | undefined;\n uiConfig: Pick<Config[\"ui\"], \"host\" | \"port\">;\n}): void {\n const { uiConfig, uiStartup } = params;\n if (uiStartup) {\n localUiRuntimeStore.writeCurrentProcess(uiConfig);\n }\n}\n\nexport async function startGatewayRuntimeSupport(params: {\n automation: AutomationManager;\n remoteModule: RemoteServiceModule | null;\n watchConfigFile: () => void;\n watcherRegistry: ServiceFileWatcherRegistry;\n}): Promise<void> {\n const {\n automation,\n remoteModule,\n watchConfigFile,\n watcherRegistry\n } = params;\n await startGatewaySupportServices({\n automation,\n remoteModule,\n watchConfigFile\n });\n watcherRegistry.remember(watchCronStoreFile(automation));\n}\n"],"mappings":";;;;AAQA,MAAa,sBAAsB;CACjC,OAAO,YAAoB,QAAQ,IAAI,aAAa,UAAU;CAC9D,OAAO,YAAoB,QAAQ,KAAK,aAAa,UAAU;CAC/D,QAAQ,YAAoB,QAAQ,MAAM,aAAa,UAAU;CACjE,QAAQ,YAAoB,QAAQ,MAAM,aAAa,UAAU;CAClE;AAED,SAAgB,4BACd,aACM;AACN,MAAK,MAAM,QAAQ,aAAa;EAE9B,MAAM,OAAO,GADE,KAAK,WAAW,GAAG,KAAK,SAAS,MAAM,KAC7B,KAAK;AAC9B,MAAI,KAAK,UAAU,QACjB,SAAQ,MAAM,aAAa,OAAO;MAElC,SAAQ,KAAK,aAAa,OAAO;;;AAKvC,eAAsB,4BAA4B,QAIhC;CAChB,MAAM,EAAE,YAAY,cAAc,oBAAoB;CACtD,MAAM,WAAW,WAAW,QAAQ,CAAC;AACrC,KAAI,WAAW,EACb,SAAQ,IAAI,WAAW,SAAS,iBAAiB;AAEnD,eAAc,OAAO;AACrB,kBAAiB;AACjB,OAAM,WAAW,OAAO;;AAG1B,SAAgB,mBAAmB,YAA0C;CAC3E,MAAM,gBAAgB,QAAQ,WAAW,UAAU;CACnD,MAAM,UAAU,SAAS,MAAM,eAAe;EAC5C,eAAe;EACf,kBAAkB;GAAE,oBAAoB;GAAK,cAAc;GAAI;EAChE,CAAC;AACF,SAAQ,GAAG,QAAQ,OAAO,gBAAgB;AACxC,MAAI,QAAQ,YAAY,KAAK,cAC3B;AAEF,MAAI,UAAU,SAAS,UAAU,YAAY,UAAU,SACrD,KAAI;AACF,cAAW,iBAAiB;WACrB,OAAO;AACd,WAAQ,MAAM,6BAA6B,MAAM,KAAK,OAAO,MAAM,GAAG;;GAG1E;AACF,QAAO;;AAGT,SAAgB,uBAAuB,QAI9B;CACP,MAAM,aAAa,QAAQ,OAAO,WAAW;CAC7C,MAAM,UAAU,SAAS,MAAM,YAAY;EACzC,eAAe;EACf,kBAAkB;GAAE,oBAAoB;GAAK,cAAc;GAAI;EAChE,CAAC;AACF,QAAO,gBAAgB,SAAS,QAAQ;AACxC,SAAQ,GAAG,QAAQ,OAAO,gBAAgB;AACxC,MAAI,QAAQ,YAAY,KAAK,WAC3B;AAEF,MAAI,UAAU,OAAO;AACnB,UAAO,eAAe,aAAa;AACnC;;AAEF,MAAI,UAAU,UAAU;AACtB,UAAO,eAAe,gBAAgB;AACtC;;AAEF,MAAI,UAAU,SACZ,QAAO,eAAe,gBAAgB;GAExC;;AAGJ,IAAa,6BAAb,MAAwC;CACtC,WAAyC,EAAE;CAE3C,YAAqB,YAA6B;AAChD,OAAK,SAAS,KAAK,QAAQ;;CAG7B,QAAiB,YAA2B;EAC1C,MAAM,WAAW,KAAK,SAAS,OAAO,EAAE;AACxC,QAAM,QAAQ,WAAW,SAAS,IAAI,OAAO,YAAY;AACvD,OAAI;AACF,UAAM,QAAQ,OAAO;WACf;IAGR,CAAC;;;AAIP,SAAgB,4BAA4B,QAGnC;CACP,MAAM,EAAE,UAAU,cAAc;AAChC,KAAI,UACF,qBAAoB,oBAAoB,SAAS;;AAIrD,eAAsB,2BAA2B,QAK/B;CAChB,MAAM,EACJ,YACA,cACA,iBACA,oBACE;AACJ,OAAM,4BAA4B;EAChC;EACA;EACA;EACD,CAAC;AACF,iBAAgB,SAAS,mBAAmB,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-job-handler.utils.d.ts","names":[],"sources":["../../../../../src/shared/services/gateway/utils/cron-job-handler.utils.ts"],"mappings":";;;;KAGK,WAAA;EACH,EAAA;EACA,IAAA;EACA,OAAA;IACE,OAAA;IACA,OAAA;IACA,SAAA;IACA,OAAA;IACA,OAAA;IACA,EAAA;IACA,SAAA;EAAA;AAAA;AAAA,iBAsCY,oBAAA,CAAqB,MAAA;EACnC,gBAAA,EAAkB,cAAA;EAClB,GAAA,EAAK,UAAA;AAAA,KACF,GAAA,EAAK,WAAA,KAAgB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-job-handler.utils.js","names":[],"sources":["../../../../../src/shared/services/gateway/utils/cron-job-handler.utils.ts"],"sourcesContent":["import type { MessageBus } from \"@nextclaw/core\";\nimport { runPromptOverNcp, type NcpRunnerAgent } from \"@nextclaw/kernel\";\n\ntype CronJobLike = {\n id: string;\n name: string;\n payload: {\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};\n\nfunction normalizeOptionalString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n\nfunction buildCronSessionMetadata(params: {\n job: CronJobLike;\n agentId: string;\n accountId?: string;\n}): Record<string, unknown> {\n const { job, agentId, accountId } = params;\n const channel = normalizeOptionalString(job.payload.channel) ?? \"cli\";\n const chatId = normalizeOptionalString(job.payload.to) ?? \"direct\";\n const metadata: Record<string, unknown> = {\n agentId,\n agent_id: agentId,\n channel,\n chatId,\n chat_id: chatId,\n label: job.name,\n cron_job_id: job.id,\n cron_job_name: job.name,\n session_origin: \"cron\",\n };\n if (accountId) {\n metadata.accountId = accountId;\n metadata.account_id = accountId;\n }\n return metadata;\n}\n\nexport function createCronJobHandler(params: {\n agentRunRequests: NcpRunnerAgent;\n bus: MessageBus;\n}): (job: CronJobLike) => Promise<string> {\n return async (job: CronJobLike): Promise<string> => {\n const accountId = normalizeOptionalString(job.payload.accountId);\n const agentId = normalizeOptionalString(job.payload.agentId) ?? \"main\";\n const sessionId = normalizeOptionalString(job.payload.sessionId) ?? `cron:${job.id}`;\n const metadata = buildCronSessionMetadata({\n job,\n agentId,\n accountId,\n });\n const result = await runPromptOverNcp({\n agent: params.agentRunRequests,\n sessionId,\n content: job.payload.message,\n metadata,\n missingCompletedMessageError: \"cron job completed without a final assistant message\",\n runErrorMessage: \"cron job failed\",\n });\n const response = result.text;\n\n if (job.payload.deliver && job.payload.to) {\n await params.bus.publishOutbound({\n channel: job.payload.channel ?? \"cli\",\n chatId: job.payload.to,\n content: response,\n media: [],\n metadata,\n });\n }\n\n return response;\n };\n}\n"],"mappings":";;AAiBA,SAAS,wBAAwB,OAAoC;AACnE,KAAI,OAAO,UAAU,SACnB;AAGF,QADgB,MAAM,MAAM,IACV,KAAA;;AAGpB,SAAS,yBAAyB,QAIN;CAC1B,MAAM,EAAE,KAAK,SAAS,cAAc;CACpC,MAAM,UAAU,wBAAwB,IAAI,QAAQ,QAAQ,IAAI;CAChE,MAAM,SAAS,wBAAwB,IAAI,QAAQ,GAAG,IAAI;CAC1D,MAAM,WAAoC;EACxC;EACA,UAAU;EACV;EACA;EACA,SAAS;EACT,OAAO,IAAI;EACX,aAAa,IAAI;EACjB,eAAe,IAAI;EACnB,gBAAgB;EACjB;AACD,KAAI,WAAW;AACb,WAAS,YAAY;AACrB,WAAS,aAAa;;AAExB,QAAO;;AAGT,SAAgB,qBAAqB,QAGK;AACxC,QAAO,OAAO,QAAsC;EAClD,MAAM,YAAY,wBAAwB,IAAI,QAAQ,UAAU;EAChE,MAAM,UAAU,wBAAwB,IAAI,QAAQ,QAAQ,IAAI;EAChE,MAAM,YAAY,wBAAwB,IAAI,QAAQ,UAAU,IAAI,QAAQ,IAAI;EAChF,MAAM,WAAW,yBAAyB;GACxC;GACA;GACA;GACD,CAAC;EASF,MAAM,YARS,MAAM,iBAAiB;GACpC,OAAO,OAAO;GACd;GACA,SAAS,IAAI,QAAQ;GACrB;GACA,8BAA8B;GAC9B,iBAAiB;GAClB,CAAC,EACsB;AAExB,MAAI,IAAI,QAAQ,WAAW,IAAI,QAAQ,GACrC,OAAM,OAAO,IAAI,gBAAgB;GAC/B,SAAS,IAAI,QAAQ,WAAW;GAChC,QAAQ,IAAI,QAAQ;GACpB,SAAS;GACT,OAAO,EAAE;GACT;GACD,CAAC;AAGJ,SAAO"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-runtime-lifecycle.utils.d.ts","names":[],"sources":["../../../../../src/shared/services/gateway/utils/gateway-runtime-lifecycle.utils.ts"],"mappings":";;;iBAEgB,iCAAA,CAAkC,MAAA;EAChD,eAAA,EAAiB,2BAAA;EACjB,KAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-runtime-lifecycle.utils.js","names":[],"sources":["../../../../../src/shared/services/gateway/utils/gateway-runtime-lifecycle.utils.ts"],"sourcesContent":["import type { ServiceBootstrapStatusStore } from \"../service-bootstrap-status.service.js\";\n\nexport function handleGatewayDeferredStartupError(params: {\n bootstrapStatus: ServiceBootstrapStatusStore;\n error: unknown;\n}): void {\n const { bootstrapStatus, error } = params;\n const message = error instanceof Error ? error.message : String(error);\n bootstrapStatus.markError(message);\n if (bootstrapStatus.getStatus().pluginHydration.state === \"running\") {\n bootstrapStatus.markPluginHydrationError(message);\n }\n console.error(\n `Deferred startup failed: ${message}`,\n );\n}\n"],"mappings":";AAEA,SAAgB,kCAAkC,QAGzC;CACP,MAAM,EAAE,iBAAiB,UAAU;CACnC,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACtE,iBAAgB,UAAU,QAAQ;AAClC,KAAI,gBAAgB,WAAW,CAAC,gBAAgB,UAAU,UACxD,iBAAgB,yBAAyB,QAAQ;AAEnD,SAAQ,MACN,4BAA4B,UAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-marketplace-installer.service.d.ts","names":[],"sources":["../../../../src/shared/services/marketplace/service-marketplace-installer.service.ts"],"mappings":";;;KAkBK,gBAAA;EACH,OAAA;EACA,MAAA;AAAA;AAAA,KAGG,yBAAA,GAA4B,gBAAA;AAAA,cAEpB,2BAAA;EAAA,iBAEQ,IAAA;cAAA,IAAA;IACf,qBAAA,SAA8B,OAAA;IAC9B,gBAAA,GAAmB,IAAA,eAAmB,OAAA;IACtC,mBAAA,GAAsB,IAAA,UAAc,KAAA,eAAoB,yBAAA;EAAA;EAI5D,eAAA,CAAA,GAAmB,oBAAA;EAAA,QAgBL,aAAA;EAAA,QAMA,YAAA;EAAA,QAiCA,UAAA;EAAA,QAIA,YAAA;EAAA,QAMA,aAAA;EAAA,QAMA,eAAA;EAAA,QAQA,cAAA;EAAA,QAeA,SAAA;EAAA,QAIA,UAAA;EAAA,QAIA,SAAA;EAAA,QAIA,SAAA;EAAA,QAIN,uBAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-marketplace-installer.service.js","names":[],"sources":["../../../../src/shared/services/marketplace/service-marketplace-installer.service.ts"],"sourcesContent":["import { getSkillsPath, getWorkspacePath, loadConfig } from \"@nextclaw/core\";\nimport type {\n MarketplaceInstallSkillParams,\n MarketplaceInstaller,\n MarketplaceMcpDoctorResult,\n MarketplaceMcpInstallRequest\n} from \"@nextclaw/server\";\nimport { existsSync, rmSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n disablePluginMutation,\n enablePluginMutation,\n installPluginMutation,\n uninstallPluginMutation\n} from \"@nextclaw-service/commands/plugin/plugin-mutation-actions.utils.js\";\nimport { buildMarketplaceSkillInstallArgs, pickUserFacingCommandSummary } from \"@nextclaw-service/shared/utils/marketplace/service-marketplace-helpers.utils.js\";\nimport { ServiceMcpMarketplaceOps } from \"@nextclaw-service/shared/services/marketplace/service-mcp-marketplace-ops.js\";\n\ntype UserFacingResult = {\n message: string;\n output?: string;\n};\n\ntype BuiltinSkillInstallResult = UserFacingResult | null;\n\nexport class ServiceMarketplaceInstaller {\n constructor(\n private readonly deps: {\n applyLiveConfigReload?: () => Promise<void>;\n runCliSubcommand: (args: string[]) => Promise<string>;\n installBuiltinSkill: (slug: string, force?: boolean) => BuiltinSkillInstallResult;\n }\n ) {}\n\n createInstaller(): MarketplaceInstaller {\n return {\n installPlugin: (spec) => this.installPlugin(spec),\n installSkill: (params) => this.installSkill(params),\n installMcp: (params) => this.installMcp(params),\n enablePlugin: (id) => this.enablePlugin(id),\n disablePlugin: (id) => this.disablePlugin(id),\n uninstallPlugin: (id) => this.uninstallPlugin(id),\n uninstallSkill: (slug) => this.uninstallSkill(slug),\n enableMcp: (name) => this.enableMcp(name),\n disableMcp: (name) => this.disableMcp(name),\n removeMcp: (name) => this.removeMcp(name),\n doctorMcp: (name) => this.doctorMcp(name)\n };\n }\n\n private async installPlugin(spec: string): Promise<UserFacingResult> {\n const result = await installPluginMutation(spec);\n await this.deps.applyLiveConfigReload?.();\n return { message: result.message };\n }\n\n private async installSkill(params: MarketplaceInstallSkillParams): Promise<UserFacingResult> {\n if (params.kind === \"builtin\") {\n const result = this.deps.installBuiltinSkill(params.slug, params.force);\n if (!result) {\n throw new Error(`Builtin skill not found: ${params.slug}`);\n }\n return result;\n }\n\n if (params.kind && params.kind !== \"marketplace\") {\n throw new Error(`Unsupported marketplace skill kind: ${params.kind}`);\n }\n\n const workspace = getWorkspacePath(loadConfig().agents.defaults.workspace);\n const args = buildMarketplaceSkillInstallArgs({\n slug: params.slug,\n workspace,\n force: params.force\n });\n\n try {\n const output = await this.deps.runCliSubcommand(args);\n const summary = pickUserFacingCommandSummary(output, `Installed skill: ${params.slug}`);\n return { message: summary };\n } catch (error) {\n const fallback = this.deps.installBuiltinSkill(params.slug, params.force);\n if (!fallback) {\n throw error;\n }\n return fallback;\n }\n }\n\n private async installMcp(params: MarketplaceMcpInstallRequest): Promise<{ name: string; message: string; output?: string }> {\n return await this.createMcpMarketplaceOps().install(params);\n }\n\n private async enablePlugin(id: string): Promise<UserFacingResult> {\n const result = await enablePluginMutation(id);\n await this.deps.applyLiveConfigReload?.();\n return { message: result.message };\n }\n\n private async disablePlugin(id: string): Promise<UserFacingResult> {\n const result = await disablePluginMutation(id);\n await this.deps.applyLiveConfigReload?.();\n return { message: result.message };\n }\n\n private async uninstallPlugin(id: string): Promise<UserFacingResult> {\n await disablePluginMutation(id);\n await this.deps.applyLiveConfigReload?.();\n const result = await uninstallPluginMutation(id, { force: true });\n await this.deps.applyLiveConfigReload?.();\n return { message: result.message };\n }\n\n private async uninstallSkill(slug: string): Promise<UserFacingResult> {\n const workspace = getWorkspacePath(loadConfig().agents.defaults.workspace);\n const targetDir = join(getSkillsPath(workspace), slug);\n\n if (!existsSync(targetDir)) {\n throw new Error(`Skill not installed in workspace: ${slug}`);\n }\n\n rmSync(targetDir, { recursive: true, force: true });\n\n return {\n message: `Uninstalled skill: ${slug}`\n };\n }\n\n private async enableMcp(name: string): Promise<UserFacingResult> {\n return await this.createMcpMarketplaceOps().enable(name);\n }\n\n private async disableMcp(name: string): Promise<UserFacingResult> {\n return await this.createMcpMarketplaceOps().disable(name);\n }\n\n private async removeMcp(name: string): Promise<UserFacingResult> {\n return await this.createMcpMarketplaceOps().remove(name);\n }\n\n private async doctorMcp(name: string): Promise<MarketplaceMcpDoctorResult> {\n return await this.createMcpMarketplaceOps().doctor(name);\n }\n\n private createMcpMarketplaceOps(): ServiceMcpMarketplaceOps {\n return new ServiceMcpMarketplaceOps({\n applyLiveConfigReload: this.deps.applyLiveConfigReload\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-mcp-marketplace-ops.d.ts","names":[],"sources":["../../../../src/shared/services/marketplace/service-mcp-marketplace-ops.ts"],"mappings":";;;cAGa,wBAAA;EAAA,iBAEQ,OAAA;cAAA,OAAA;IACf,qBAAA,SAA8B,OAAA;EAAA;EAI5B,OAAA,CAAQ,MAAA;IACZ,IAAA;IACA,IAAA;IACA,OAAA;IACA,SAAA;IACA,MAAA;IACA,MAAA,GAAS,MAAA;IACT,QAAA;EAAA,IACE,OAAA;IAAU,IAAA;IAAc,OAAA;IAAiB,MAAA;EAAA;EA+BvC,MAAA,CAAO,IAAA,WAAe,OAAA;IAAU,OAAA;IAAiB,MAAA;EAAA;EASjD,OAAA,CAAQ,IAAA,WAAe,OAAA;IAAU,OAAA;IAAiB,MAAA;EAAA;EASlD,MAAA,CAAO,IAAA,WAAe,OAAA;IAAU,OAAA;IAAiB,MAAA;EAAA;EASjD,MAAA,CAAO,IAAA,WAAY,OAAA,CATU,gBAAA,CASV,eAAA;EAAA,QAQjB,qBAAA;EAAA,QAOA,kBAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-mcp-marketplace-ops.js","names":[],"sources":["../../../../src/shared/services/marketplace/service-mcp-marketplace-ops.ts"],"sourcesContent":["import { loadConfig, saveConfig } from \"@nextclaw/core\";\nimport { McpDoctorFacade, McpMutationService, type McpMarketplaceInstallTemplate } from \"@nextclaw/mcp\";\n\nexport class ServiceMcpMarketplaceOps {\n constructor(\n private readonly options: {\n applyLiveConfigReload?: () => Promise<void>;\n }\n ) {}\n\n async install(params: {\n spec: string;\n name?: string;\n enabled?: boolean;\n allAgents?: boolean;\n agents?: string[];\n inputs?: Record<string, string>;\n template?: unknown;\n }): Promise<{ name: string; message: string; output?: string }> {\n if (!params.template) {\n throw new Error(`Missing MCP marketplace template for ${params.spec}`);\n }\n\n const template = params.template as McpMarketplaceInstallTemplate;\n const result = this.createMutationService().installFromTemplate({\n template,\n name: params.name,\n enabled: params.enabled,\n scope: {\n allAgents: params.allAgents ?? true,\n agents: params.allAgents === false ? params.agents ?? [] : []\n },\n inputs: params.inputs,\n metadata: {\n source: \"marketplace\",\n catalogSlug: params.spec,\n displayName: template.defaultName\n }\n });\n if (!result.changed) {\n throw new Error(result.message);\n }\n await this.options.applyLiveConfigReload?.();\n return {\n name: result.name,\n message: result.message\n };\n }\n\n async enable(name: string): Promise<{ message: string; output?: string }> {\n const result = this.createMutationService().toggleEnabled(name, true);\n if (!result.changed) {\n throw new Error(result.message);\n }\n await this.options.applyLiveConfigReload?.();\n return { message: result.message };\n }\n\n async disable(name: string): Promise<{ message: string; output?: string }> {\n const result = this.createMutationService().toggleEnabled(name, false);\n if (!result.changed) {\n throw new Error(result.message);\n }\n await this.options.applyLiveConfigReload?.();\n return { message: result.message };\n }\n\n async remove(name: string): Promise<{ message: string; output?: string }> {\n const result = this.createMutationService().removeServer(name);\n if (!result.changed) {\n throw new Error(result.message);\n }\n await this.options.applyLiveConfigReload?.();\n return { message: result.message };\n }\n\n async doctor(name: string) {\n const report = await this.createDoctorFacade().inspectOne(name);\n if (!report) {\n throw new Error(`Unknown MCP server: ${name}`);\n }\n return report;\n }\n\n private createMutationService(): McpMutationService {\n return new McpMutationService({\n getConfig: () => loadConfig(),\n saveConfig: (config) => saveConfig(config)\n });\n }\n\n private createDoctorFacade(): McpDoctorFacade {\n return new McpDoctorFacade({\n getConfig: () => loadConfig()\n });\n }\n}\n"],"mappings":";;;AAGA,IAAa,2BAAb,MAAsC;CACpC,YACE,SAGA;AAHiB,OAAA,UAAA;;CAKnB,MAAM,QAAQ,QAQkD;AAC9D,MAAI,CAAC,OAAO,SACV,OAAM,IAAI,MAAM,wCAAwC,OAAO,OAAO;EAGxE,MAAM,WAAW,OAAO;EACxB,MAAM,SAAS,KAAK,uBAAuB,CAAC,oBAAoB;GAC9D;GACA,MAAM,OAAO;GACb,SAAS,OAAO;GAChB,OAAO;IACL,WAAW,OAAO,aAAa;IAC/B,QAAQ,OAAO,cAAc,QAAQ,OAAO,UAAU,EAAE,GAAG,EAAE;IAC9D;GACD,QAAQ,OAAO;GACf,UAAU;IACR,QAAQ;IACR,aAAa,OAAO;IACpB,aAAa,SAAS;IACvB;GACF,CAAC;AACF,MAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,OAAO,QAAQ;AAEjC,QAAM,KAAK,QAAQ,yBAAyB;AAC5C,SAAO;GACL,MAAM,OAAO;GACb,SAAS,OAAO;GACjB;;CAGH,MAAM,OAAO,MAA6D;EACxE,MAAM,SAAS,KAAK,uBAAuB,CAAC,cAAc,MAAM,KAAK;AACrE,MAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,OAAO,QAAQ;AAEjC,QAAM,KAAK,QAAQ,yBAAyB;AAC5C,SAAO,EAAE,SAAS,OAAO,SAAS;;CAGpC,MAAM,QAAQ,MAA6D;EACzE,MAAM,SAAS,KAAK,uBAAuB,CAAC,cAAc,MAAM,MAAM;AACtE,MAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,OAAO,QAAQ;AAEjC,QAAM,KAAK,QAAQ,yBAAyB;AAC5C,SAAO,EAAE,SAAS,OAAO,SAAS;;CAGpC,MAAM,OAAO,MAA6D;EACxE,MAAM,SAAS,KAAK,uBAAuB,CAAC,aAAa,KAAK;AAC9D,MAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,OAAO,QAAQ;AAEjC,QAAM,KAAK,QAAQ,yBAAyB;AAC5C,SAAO,EAAE,SAAS,OAAO,SAAS;;CAGpC,MAAM,OAAO,MAAc;EACzB,MAAM,SAAS,MAAM,KAAK,oBAAoB,CAAC,WAAW,KAAK;AAC/D,MAAI,CAAC,OACH,OAAM,IAAI,MAAM,uBAAuB,OAAO;AAEhD,SAAO;;CAGT,wBAAoD;AAClD,SAAO,IAAI,mBAAmB;GAC5B,iBAAiB,YAAY;GAC7B,aAAa,WAAW,WAAW,OAAO;GAC3C,CAAC;;CAGJ,qBAA8C;AAC5C,SAAO,IAAI,gBAAgB,EACzB,iBAAiB,YAAY,EAC9B,CAAC"}
|
|
@@ -21,4 +21,5 @@ declare function wrapStartChannelsWithDevPluginHotReload(params: {
|
|
|
21
21
|
startupSettleMs: number;
|
|
22
22
|
}): () => Promise<void>;
|
|
23
23
|
//#endregion
|
|
24
|
-
export { DEV_PLUGIN_HOT_RELOAD_TARGETS_ENV, DevPluginHotReloadTarget, resolveDevPluginHotReloadTargets, startDevPluginHotReloadWatcher, wrapStartChannelsWithDevPluginHotReload };
|
|
24
|
+
export { DEV_PLUGIN_HOT_RELOAD_TARGETS_ENV, DevPluginHotReloadTarget, resolveDevPluginHotReloadTargets, startDevPluginHotReloadWatcher, wrapStartChannelsWithDevPluginHotReload };
|
|
25
|
+
//# sourceMappingURL=plugin-dev-hot-reload.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-dev-hot-reload.utils.d.ts","names":[],"sources":["../../../../../src/shared/services/plugin/utils/plugin-dev-hot-reload.utils.ts"],"mappings":";;;cAIa,iCAAA;AAAA,KAED,wBAAA;EACV,QAAA;EACA,UAAA;EACA,UAAA;AAAA;AAAA,iBAiCc,gCAAA,CACd,QAAA,wBACC,wBAAA;AAAA,iBA+Ca,8BAAA,CAA+B,MAAA;EAC7C,eAAA,EAAiB,0BAAA;EACjB,aAAA,GAAgB,SAAA,eAAwB,OAAA;EACxC,OAAA,GAAU,wBAAA;AAAA;AAAA,iBA+EI,uCAAA,CAAwC,MAAA;EACtD,aAAA,QAAqB,OAAA;EACrB,eAAA,EAAiB,0BAAA;EACjB,eAAA;EACA,aAAA,GAAgB,SAAA,eAAwB,OAAA;EACxC,eAAA;AAAA,UACQ,OAAA"}
|
|
@@ -115,3 +115,5 @@ function wrapStartChannelsWithDevPluginHotReload(params) {
|
|
|
115
115
|
}
|
|
116
116
|
//#endregion
|
|
117
117
|
export { DEV_PLUGIN_HOT_RELOAD_TARGETS_ENV, resolveDevPluginHotReloadTargets, startDevPluginHotReloadWatcher, wrapStartChannelsWithDevPluginHotReload };
|
|
118
|
+
|
|
119
|
+
//# sourceMappingURL=plugin-dev-hot-reload.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-dev-hot-reload.utils.js","names":[],"sources":["../../../../../src/shared/services/plugin/utils/plugin-dev-hot-reload.utils.ts"],"sourcesContent":["import chokidar from \"chokidar\";\nimport { resolve, sep } from \"node:path\";\nimport type { ServiceFileWatcherRegistry } from \"@nextclaw-service/shared/services/gateway/service-startup-support.service.js\";\n\nexport const DEV_PLUGIN_HOT_RELOAD_TARGETS_ENV = \"NEXTCLAW_DEV_PLUGIN_HOT_RELOAD_TARGETS\";\n\nexport type DevPluginHotReloadTarget = {\n pluginId: string;\n pluginPath: string;\n watchPaths: string[];\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readOptionalString(value: unknown): string | null {\n if (typeof value !== \"string\") {\n return null;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction normalizeWatchPaths(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n const watchPaths: string[] = [];\n for (const entry of value) {\n const normalized = readOptionalString(entry);\n if (!normalized) {\n continue;\n }\n const resolvedPath = resolve(normalized);\n if (!watchPaths.includes(resolvedPath)) {\n watchPaths.push(resolvedPath);\n }\n }\n return watchPaths;\n}\n\nexport function resolveDevPluginHotReloadTargets(\n rawValue = process.env[DEV_PLUGIN_HOT_RELOAD_TARGETS_ENV],\n): DevPluginHotReloadTarget[] {\n if (typeof rawValue !== \"string\" || rawValue.trim().length === 0) {\n return [];\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(rawValue);\n } catch (error) {\n throw new Error(\n `[dev-plugin-hot-reload] failed to parse ${DEV_PLUGIN_HOT_RELOAD_TARGETS_ENV}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n\n if (!Array.isArray(parsed)) {\n throw new Error(\n `[dev-plugin-hot-reload] ${DEV_PLUGIN_HOT_RELOAD_TARGETS_ENV} must be a JSON array`,\n );\n }\n\n const seenPluginIds = new Set<string>();\n const targets: DevPluginHotReloadTarget[] = [];\n for (const entry of parsed) {\n if (!isRecord(entry)) {\n continue;\n }\n const pluginId = readOptionalString(entry.pluginId);\n const pluginPath = readOptionalString(entry.pluginPath);\n const watchPaths = normalizeWatchPaths(entry.watchPaths);\n if (!pluginId || !pluginPath || watchPaths.length === 0) {\n continue;\n }\n if (seenPluginIds.has(pluginId)) {\n throw new Error(\n `[dev-plugin-hot-reload] duplicate plugin target for \"${pluginId}\"`,\n );\n }\n seenPluginIds.add(pluginId);\n targets.push({\n pluginId,\n pluginPath: resolve(pluginPath),\n watchPaths,\n });\n }\n return targets;\n}\n\nexport function startDevPluginHotReloadWatcher(params: {\n watcherRegistry: ServiceFileWatcherRegistry;\n reloadPlugins: (pluginIds: string[]) => Promise<void>;\n targets?: DevPluginHotReloadTarget[];\n}): void {\n const targets = params.targets ?? resolveDevPluginHotReloadTargets();\n if (targets.length === 0) {\n return;\n }\n\n const pendingPluginIds = new Set<string>();\n let flushTimer: ReturnType<typeof setTimeout> | null = null;\n let reloadRunning = false;\n let reloadPending = false;\n\n const flushReload = async (): Promise<void> => {\n if (reloadRunning) {\n reloadPending = true;\n return;\n }\n const pluginIds = [...pendingPluginIds];\n pendingPluginIds.clear();\n if (pluginIds.length === 0) {\n return;\n }\n\n reloadRunning = true;\n try {\n console.log(`[dev] Plugin dist updated: ${pluginIds.join(\", \")}`);\n await params.reloadPlugins(pluginIds);\n console.log(`[dev] Plugin hot reload applied: ${pluginIds.join(\", \")}`);\n } catch (error) {\n console.error(\n `[dev] Plugin hot reload failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n } finally {\n reloadRunning = false;\n if (reloadPending || pendingPluginIds.size > 0) {\n reloadPending = false;\n await flushReload();\n }\n }\n };\n\n const scheduleReload = (pluginId: string): void => {\n pendingPluginIds.add(pluginId);\n if (flushTimer) {\n clearTimeout(flushTimer);\n }\n flushTimer = setTimeout(() => {\n flushTimer = null;\n void flushReload();\n }, 150);\n };\n\n const watcher = chokidar.watch(\n targets.flatMap((entry) => entry.watchPaths),\n {\n ignoreInitial: true,\n awaitWriteFinish: { stabilityThreshold: 200, pollInterval: 50 },\n },\n );\n params.watcherRegistry.remember(watcher);\n watcher.on(\"all\", (_event, changedPath) => {\n const normalizedChangedPath = resolve(changedPath);\n for (const target of targets) {\n if (\n target.watchPaths.some((watchPath) =>\n normalizedChangedPath === watchPath ||\n normalizedChangedPath.startsWith(`${watchPath}${sep}`),\n )\n ) {\n scheduleReload(target.pluginId);\n }\n }\n });\n\n console.log(\n `[dev] Plugin hot reload watcher: ${targets.map((entry) => entry.pluginId).join(\", \")}`,\n );\n}\n\nexport function wrapStartChannelsWithDevPluginHotReload(params: {\n startChannels: () => Promise<void>;\n watcherRegistry: ServiceFileWatcherRegistry;\n isRuntimeActive: () => boolean;\n reloadPlugins: (pluginIds: string[]) => Promise<void>;\n startupSettleMs: number;\n}): () => Promise<void> {\n return async () => {\n await params.startChannels();\n console.log(\n `[dev] Plugin hot reload watcher will arm after ${params.startupSettleMs}ms startup settle window.`,\n );\n const timer = setTimeout(() => {\n if (!params.isRuntimeActive()) {\n return;\n }\n startDevPluginHotReloadWatcher({\n watcherRegistry: params.watcherRegistry,\n reloadPlugins: params.reloadPlugins,\n });\n }, params.startupSettleMs);\n timer.unref?.();\n };\n}\n"],"mappings":"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"}
|
|
@@ -3,4 +3,5 @@ import { NextclawGatewayRuntime } from "../../gateway/nextclaw-gateway-runtime.s
|
|
|
3
3
|
//#region src/shared/services/plugin/utils/plugin-runtime-bridge.utils.d.ts
|
|
4
4
|
declare function installPluginRuntimeBridge(gateway: NextclawGatewayRuntime): void;
|
|
5
5
|
//#endregion
|
|
6
|
-
export { installPluginRuntimeBridge };
|
|
6
|
+
export { installPluginRuntimeBridge };
|
|
7
|
+
//# sourceMappingURL=plugin-runtime-bridge.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-runtime-bridge.utils.d.ts","names":[],"sources":["../../../../../src/shared/services/plugin/utils/plugin-runtime-bridge.utils.ts"],"mappings":";;;iBAwBgB,0BAAA,CAA2B,OAAA,EAAS,sBAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-runtime-bridge.utils.js","names":[],"sources":["../../../../../src/shared/services/plugin/utils/plugin-runtime-bridge.utils.ts"],"sourcesContent":["import { loadConfig, saveConfig, type InboundAttachment } from \"@nextclaw/core\";\nimport { setPluginRuntimeBridge } from \"@nextclaw/openclaw-compat\";\nimport { dispatchPromptOverNcp } from \"@nextclaw/kernel\";\nimport type { NextclawGatewayRuntime } from \"@nextclaw-service/shared/services/gateway/nextclaw-gateway-runtime.service.js\";\n\ntype PluginRuntimeDispatchContext = {\n BodyForAgent?: unknown;\n Body?: unknown;\n SessionKey?: unknown;\n OriginatingChannel?: unknown;\n OriginatingTo?: unknown;\n SenderId?: unknown;\n AccountId?: unknown;\n AgentId?: unknown;\n Model?: unknown;\n AgentModel?: unknown;\n MediaPath?: unknown;\n MediaPaths?: unknown;\n MediaUrl?: unknown;\n MediaUrls?: unknown;\n MediaType?: unknown;\n MediaTypes?: unknown;\n};\n\nexport function installPluginRuntimeBridge(gateway: NextclawGatewayRuntime): void {\n setPluginRuntimeBridge({\n loadConfig: () =>\n gateway.kernel.extensions.toConfigView(gateway.configManager.loadConfig()),\n writeConfigFile: async (nextConfigView) => {\n if (!nextConfigView || typeof nextConfigView !== \"object\" || Array.isArray(nextConfigView)) {\n throw new Error(\"plugin runtime writeConfigFile expects an object config\");\n }\n const current = loadConfig();\n const next = gateway.kernel.extensions.mergeConfigView(current, nextConfigView);\n saveConfig(next);\n },\n dispatchReplyWithBufferedBlockDispatcher: async ({ ctx, dispatcherOptions }) => {\n const request = resolvePluginRuntimeRequest(ctx as PluginRuntimeDispatchContext);\n if (!request) {\n return;\n }\n\n try {\n await dispatcherOptions.onReplyStart?.();\n const response = await dispatchPromptOverNcp({\n config: gateway.configManager.loadConfig(),\n agentRunRequests: gateway.kernel.agentRunRequestManager,\n ...request,\n });\n const replyText = typeof response === \"string\" ? response : String(response ?? \"\");\n if (replyText.trim()) {\n await dispatcherOptions.deliver({ text: replyText }, { kind: \"final\" });\n }\n } catch (error) {\n dispatcherOptions.onError?.(error);\n throw error;\n }\n }\n });\n}\n\nfunction resolvePluginRuntimeRequest(ctx: PluginRuntimeDispatchContext) {\n const bodyForAgent = typeof ctx.BodyForAgent === \"string\" ? ctx.BodyForAgent : \"\";\n const body = typeof ctx.Body === \"string\" ? ctx.Body : \"\";\n const content = (bodyForAgent || body).trim();\n const attachments = resolvePluginRuntimeAttachments(ctx);\n if (!content && attachments.length === 0) {\n return null;\n }\n\n const sessionKey = typeof ctx.SessionKey === \"string\" && ctx.SessionKey.trim().length > 0 ? ctx.SessionKey : undefined;\n const channel =\n typeof ctx.OriginatingChannel === \"string\" && ctx.OriginatingChannel.trim().length > 0\n ? ctx.OriginatingChannel\n : \"cli\";\n const chatId =\n typeof ctx.OriginatingTo === \"string\" && ctx.OriginatingTo.trim().length > 0\n ? ctx.OriginatingTo\n : typeof ctx.SenderId === \"string\" && ctx.SenderId.trim().length > 0\n ? ctx.SenderId\n : \"direct\";\n const agentId = typeof ctx.AgentId === \"string\" ? ctx.AgentId : undefined;\n const modelOverride = resolveModelOverride(ctx);\n const accountId = typeof ctx.AccountId === \"string\" && ctx.AccountId.trim().length > 0 ? ctx.AccountId : undefined;\n\n return {\n content,\n sessionKey,\n channel,\n chatId,\n agentId,\n attachments,\n metadata: {\n ...(accountId ? { account_id: accountId } : {}),\n ...(modelOverride ? { model: modelOverride } : {})\n }\n };\n}\n\nfunction resolveModelOverride(ctx: PluginRuntimeDispatchContext): string | undefined {\n if (typeof ctx.Model === \"string\" && ctx.Model.trim().length > 0) {\n return ctx.Model.trim();\n }\n if (typeof ctx.AgentModel === \"string\" && ctx.AgentModel.trim().length > 0) {\n return ctx.AgentModel.trim();\n }\n return undefined;\n}\n\nfunction readStringList(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => (typeof entry === \"string\" ? entry.trim() : \"\"))\n .filter(Boolean);\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n\nfunction resolvePluginRuntimeAttachments(ctx: PluginRuntimeDispatchContext): InboundAttachment[] {\n const mediaPaths = readStringList(ctx.MediaPaths);\n const mediaUrls = readStringList(ctx.MediaUrls);\n const fallbackPath = readOptionalString(ctx.MediaPath);\n const fallbackUrl = readOptionalString(ctx.MediaUrl);\n const mediaTypes = readStringList(ctx.MediaTypes);\n const fallbackType = readOptionalString(ctx.MediaType);\n const entryCount = Math.max(\n mediaPaths.length,\n mediaUrls.length,\n fallbackPath ? 1 : 0,\n fallbackUrl ? 1 : 0,\n );\n\n const attachments: InboundAttachment[] = [];\n for (let index = 0; index < entryCount; index += 1) {\n const path = mediaPaths[index] ?? (index === 0 ? fallbackPath : undefined);\n const rawUrl = mediaUrls[index] ?? (index === 0 ? fallbackUrl : undefined);\n const url = rawUrl && rawUrl !== path ? rawUrl : undefined;\n const mimeType = mediaTypes[index] ?? fallbackType;\n if (!path && !url) {\n continue;\n }\n attachments.push({\n path,\n url,\n mimeType,\n source: \"plugin-runtime\",\n status: path ? \"ready\" : \"remote-only\",\n });\n }\n\n return attachments;\n}\n"],"mappings":"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"}
|
|
@@ -27,4 +27,5 @@ declare class RestartCoordinator {
|
|
|
27
27
|
readonly requestRestart: (request: RestartRequest) => Promise<RestartResult>;
|
|
28
28
|
}
|
|
29
29
|
//#endregion
|
|
30
|
-
export { RestartCoordinator, RestartRequest, RestartResult, RestartStrategy };
|
|
30
|
+
export { RestartCoordinator, RestartRequest, RestartResult, RestartStrategy };
|
|
31
|
+
//# sourceMappingURL=restart-coordinator.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart-coordinator.service.d.ts","names":[],"sources":["../../../../src/shared/services/restart/restart-coordinator.service.ts"],"mappings":";;;KAEY,eAAA;AAAA,KAEA,cAAA;EACV,MAAA;EACA,QAAA,GAAW,eAAA;EACX,OAAA;EACA,aAAA;AAAA;AAAA,KAGU,aAAA;EACV,MAAA;EACA,OAAA;AAAA;AAAA,KAGG,sBAAA;EACH,gBAAA,QAAwB,mBAAA;EACxB,gBAAA,GAAmB,GAAA;EACnB,UAAA;EACA,wBAAA,GAA2B,MAAA,aAAmB,OAAA;EAC9C,mBAAA,GAAsB,OAAA,UAAiB,MAAA;AAAA;AAAA,cAG5B,kBAAA;EAAA,QAIS,IAAA;EAAA,QAHZ,iBAAA;EAAA,QACA,aAAA;cAEY,IAAA,EAAM,sBAAA;EAAA,SAEjB,cAAA,GAAwB,OAAA,EAAS,cAAA,KAAiB,OAAA,CAAQ,aAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart-coordinator.service.js","names":[],"sources":["../../../../src/shared/services/restart/restart-coordinator.service.ts"],"sourcesContent":["import type { ManagedServiceState } from \"@nextclaw-service/shared/stores/managed-service-state.store.js\";\n\nexport type RestartStrategy = \"background-service-or-manual\" | \"background-service-or-exit\" | \"exit-process\";\n\nexport type RestartRequest = {\n reason: string;\n strategy?: RestartStrategy;\n delayMs?: number;\n manualMessage?: string;\n};\n\nexport type RestartResult = {\n status: \"service-restarted\" | \"restart-in-progress\" | \"exit-scheduled\" | \"manual-required\";\n message: string;\n};\n\ntype RestartCoordinatorDeps = {\n readServiceState: () => ManagedServiceState | null;\n isProcessRunning: (pid: number) => boolean;\n currentPid: () => number;\n restartBackgroundService: (reason: string) => Promise<boolean>;\n scheduleProcessExit: (delayMs: number, reason: string) => void;\n};\n\nexport class RestartCoordinator {\n private restartingService = false;\n private exitScheduled = false;\n\n constructor(private deps: RestartCoordinatorDeps) {}\n\n readonly requestRestart = async (request: RestartRequest): Promise<RestartResult> => {\n const reason = request.reason.trim() || \"config changed\";\n const strategy = request.strategy ?? \"background-service-or-manual\";\n\n if (strategy !== \"exit-process\") {\n const state = this.deps.readServiceState();\n const serviceRunning = Boolean(state && this.deps.isProcessRunning(state.pid));\n const managedByCurrentProcess = Boolean(state && state.pid === this.deps.currentPid());\n\n if (serviceRunning && !managedByCurrentProcess) {\n if (this.restartingService) {\n return {\n status: \"restart-in-progress\",\n message: \"Restart already in progress; skipping duplicate request.\"\n };\n }\n this.restartingService = true;\n try {\n const restarted = await this.deps.restartBackgroundService(reason);\n if (restarted) {\n return {\n status: \"service-restarted\",\n message: `Restarted background service to apply changes (${reason}).`\n };\n }\n } finally {\n this.restartingService = false;\n }\n }\n }\n\n if (strategy === \"background-service-or-exit\" || strategy === \"exit-process\") {\n if (this.exitScheduled) {\n return {\n status: \"exit-scheduled\",\n message: \"Restart already scheduled; skipping duplicate request.\"\n };\n }\n const delay =\n typeof request.delayMs === \"number\" && Number.isFinite(request.delayMs) ? Math.max(0, Math.floor(request.delayMs)) : 100;\n this.exitScheduled = true;\n this.deps.scheduleProcessExit(delay, reason);\n return {\n status: \"exit-scheduled\",\n message: `Restart scheduled (${reason}).`\n };\n }\n\n return {\n status: \"manual-required\",\n message: request.manualMessage ?? \"Restart the gateway to apply changes.\"\n };\n };\n}\n"],"mappings":";AAwBA,IAAa,qBAAb,MAAgC;CAC9B,oBAA4B;CAC5B,gBAAwB;CAExB,YAAY,MAAsC;AAA9B,OAAA,OAAA;;CAEpB,iBAA0B,OAAO,YAAoD;EACnF,MAAM,SAAS,QAAQ,OAAO,MAAM,IAAI;EACxC,MAAM,WAAW,QAAQ,YAAY;AAErC,MAAI,aAAa,gBAAgB;GAC/B,MAAM,QAAQ,KAAK,KAAK,kBAAkB;GAC1C,MAAM,iBAAiB,QAAQ,SAAS,KAAK,KAAK,iBAAiB,MAAM,IAAI,CAAC;GAC9E,MAAM,0BAA0B,QAAQ,SAAS,MAAM,QAAQ,KAAK,KAAK,YAAY,CAAC;AAEtF,OAAI,kBAAkB,CAAC,yBAAyB;AAC9C,QAAI,KAAK,kBACP,QAAO;KACL,QAAQ;KACR,SAAS;KACV;AAEH,SAAK,oBAAoB;AACzB,QAAI;AAEF,SADkB,MAAM,KAAK,KAAK,yBAAyB,OAAO,CAEhE,QAAO;MACL,QAAQ;MACR,SAAS,kDAAkD,OAAO;MACnE;cAEK;AACR,UAAK,oBAAoB;;;;AAK/B,MAAI,aAAa,gCAAgC,aAAa,gBAAgB;AAC5E,OAAI,KAAK,cACP,QAAO;IACL,QAAQ;IACR,SAAS;IACV;GAEH,MAAM,QACJ,OAAO,QAAQ,YAAY,YAAY,OAAO,SAAS,QAAQ,QAAQ,GAAG,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,QAAQ,CAAC,GAAG;AACvH,QAAK,gBAAgB;AACrB,QAAK,KAAK,oBAAoB,OAAO,OAAO;AAC5C,UAAO;IACL,QAAQ;IACR,SAAS,sBAAsB,OAAO;IACvC;;AAGH,SAAO;GACL,QAAQ;GACR,SAAS,QAAQ,iBAAiB;GACnC"}
|
|
@@ -36,4 +36,5 @@ declare function parseSessionKey(sessionKey?: string): {
|
|
|
36
36
|
} | null;
|
|
37
37
|
declare function enqueuePendingSystemEvent(sessionManager: SessionManager, sessionKey: string, message: string): void;
|
|
38
38
|
//#endregion
|
|
39
|
-
export { RestartSentinelDeliveryContext, RestartSentinelPayload, consumeRestartSentinel, enqueuePendingSystemEvent, formatRestartSentinelMessage, parseSessionKey, resolveRestartSentinelPath, summarizeRestartSentinel, writeRestartSentinel };
|
|
39
|
+
export { RestartSentinelDeliveryContext, RestartSentinelPayload, consumeRestartSentinel, enqueuePendingSystemEvent, formatRestartSentinelMessage, parseSessionKey, resolveRestartSentinelPath, summarizeRestartSentinel, writeRestartSentinel };
|
|
40
|
+
//# sourceMappingURL=restart-sentinel.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart-sentinel.service.d.ts","names":[],"sources":["../../../../src/shared/services/restart/restart-sentinel.service.ts"],"mappings":";;;KAIY,8BAAA;EACV,OAAA;EACA,MAAA;EACA,OAAA;EACA,SAAA;EACA,QAAA,GAAW,MAAA;AAAA;AAAA,KAGD,sBAAA;EACV,IAAA;EACA,MAAA;EACA,EAAA;EACA,UAAA;EACA,eAAA,GAAkB,8BAAA;EAClB,OAAA;EACA,KAAA;IACE,MAAA;IACA,QAAA;IACA,UAAA;EAAA;AAAA;AAAA,KAIC,mBAAA;EACH,OAAA;EACA,OAAA,EAAS,sBAAA;AAAA;AAAA,iBAyBK,0BAAA,CAAA;AAAA,iBAIM,oBAAA,CAAqB,OAAA,EAAS,sBAAA,GAAyB,OAAA;AAAA,iBAWvD,sBAAA,CAAA,GAA0B,OAAA,CAAQ,mBAAA;AAAA,iBAoBxC,wBAAA,CAAyB,OAAA,EAAS,sBAAA;AAAA,iBAkBlC,4BAAA,CAA6B,OAAA,EAAS,sBAAA;AAAA,iBAetC,eAAA,CACd,UAAA;EACG,OAAA;EAAiB,MAAA;AAAA;AAAA,iBAeN,yBAAA,CACd,cAAA,EAAgB,cAAA,EAChB,UAAA,UACA,OAAA"}
|
|
@@ -86,3 +86,5 @@ function enqueuePendingSystemEvent(sessionManager, sessionKey, message) {
|
|
|
86
86
|
}
|
|
87
87
|
//#endregion
|
|
88
88
|
export { consumeRestartSentinel, enqueuePendingSystemEvent, formatRestartSentinelMessage, parseSessionKey, resolveRestartSentinelPath, summarizeRestartSentinel, writeRestartSentinel };
|
|
89
|
+
|
|
90
|
+
//# sourceMappingURL=restart-sentinel.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart-sentinel.service.js","names":[],"sources":["../../../../src/shared/services/restart/restart-sentinel.service.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { getDataDir, type SessionManager } from \"@nextclaw/core\";\n\nexport type RestartSentinelDeliveryContext = {\n channel?: string;\n chatId?: string;\n replyTo?: string | null;\n accountId?: string | null;\n metadata?: Record<string, unknown>;\n};\n\nexport type RestartSentinelPayload = {\n kind: \"config.apply\" | \"config.patch\" | \"update.run\" | \"restart\";\n status: \"ok\" | \"error\" | \"skipped\";\n ts: number;\n sessionKey?: string;\n deliveryContext?: RestartSentinelDeliveryContext;\n message?: string | null;\n stats?: {\n reason?: string | null;\n strategy?: string | null;\n durationMs?: number | null;\n };\n};\n\ntype RestartSentinelFile = {\n version: 1;\n payload: RestartSentinelPayload;\n};\n\nconst RESTART_SENTINEL_FILENAME = \"restart-sentinel.json\";\nconst PENDING_SYSTEM_EVENTS_KEY = \"pending_system_events\";\nconst RESTART_REASON_MAX_CHARS = 240;\nconst RESTART_NOTE_MAX_CHARS = 600;\nconst RESTART_OUTBOUND_MAX_CHARS = 1200;\n\nfunction trimTo(value: string, maxChars: number): string {\n const text = value.trim();\n if (!text) {\n return \"\";\n }\n if (text.length <= maxChars) {\n return text;\n }\n return `${text.slice(0, Math.max(0, maxChars - 1)).trimEnd()}…`;\n}\n\nfunction normalizeLine(value: string, maxChars: number): string | null {\n const trimmed = trimTo(value, maxChars);\n return trimmed ? trimmed : null;\n}\n\nexport function resolveRestartSentinelPath(): string {\n return resolve(getDataDir(), \"run\", RESTART_SENTINEL_FILENAME);\n}\n\nexport async function writeRestartSentinel(payload: RestartSentinelPayload): Promise<string> {\n const path = resolveRestartSentinelPath();\n mkdirSync(resolve(path, \"..\"), { recursive: true });\n const file: RestartSentinelFile = {\n version: 1,\n payload\n };\n writeFileSync(path, `${JSON.stringify(file, null, 2)}\\n`, \"utf-8\");\n return path;\n}\n\nexport async function consumeRestartSentinel(): Promise<RestartSentinelFile | null> {\n const path = resolveRestartSentinelPath();\n if (!existsSync(path)) {\n return null;\n }\n try {\n const raw = readFileSync(path, \"utf-8\");\n const parsed = JSON.parse(raw) as RestartSentinelFile;\n if (!parsed || parsed.version !== 1 || !parsed.payload) {\n rmSync(path, { force: true });\n return null;\n }\n rmSync(path, { force: true });\n return parsed;\n } catch {\n rmSync(path, { force: true });\n return null;\n }\n}\n\nexport function summarizeRestartSentinel(payload: RestartSentinelPayload): string {\n const reason = normalizeLine(payload.stats?.reason ?? \"\", RESTART_REASON_MAX_CHARS);\n if (payload.kind === \"update.run\") {\n return payload.status === \"ok\"\n ? \"✅ NextClaw update completed and service restarted.\"\n : \"⚠️ NextClaw update finished with issues.\";\n }\n if (payload.kind === \"config.apply\" || payload.kind === \"config.patch\") {\n return payload.status === \"ok\"\n ? \"✅ Config applied and service restarted.\"\n : \"⚠️ Config change restart finished with issues.\";\n }\n if (reason) {\n return `Gateway restart complete (${reason}).`;\n }\n return \"Gateway restart complete.\";\n}\n\nexport function formatRestartSentinelMessage(payload: RestartSentinelPayload): string {\n const lines = [summarizeRestartSentinel(payload)];\n const note = normalizeLine(payload.message ?? \"\", RESTART_NOTE_MAX_CHARS);\n if (note) {\n lines.push(note);\n }\n const reason = normalizeLine(payload.stats?.reason ?? \"\", RESTART_REASON_MAX_CHARS);\n if (reason && !lines.some((line) => line.includes(reason))) {\n lines.push(`Reason: ${reason}`);\n }\n\n const message = lines.join(\"\\n\").trim();\n return trimTo(message, RESTART_OUTBOUND_MAX_CHARS);\n}\n\nexport function parseSessionKey(\n sessionKey?: string\n): { channel: string; chatId: string } | null {\n const value = sessionKey?.trim();\n if (!value) {\n return null;\n }\n const separator = value.indexOf(\":\");\n if (separator <= 0 || separator >= value.length - 1) {\n return null;\n }\n return {\n channel: value.slice(0, separator),\n chatId: value.slice(separator + 1)\n };\n}\n\nexport function enqueuePendingSystemEvent(\n sessionManager: SessionManager,\n sessionKey: string,\n message: string\n): void {\n const text = message.trim();\n if (!text) {\n return;\n }\n const session = sessionManager.getOrCreate(sessionKey);\n const queueRaw = session.metadata[PENDING_SYSTEM_EVENTS_KEY];\n const queue = Array.isArray(queueRaw)\n ? queueRaw\n .filter((item): item is string => typeof item === \"string\")\n .map((item) => item.trim())\n .filter(Boolean)\n : [];\n if (queue.at(-1) === text) {\n return;\n }\n queue.push(text);\n if (queue.length > 20) {\n queue.splice(0, queue.length - 20);\n }\n session.metadata[PENDING_SYSTEM_EVENTS_KEY] = queue;\n session.updatedAt = new Date();\n sessionManager.save(session);\n}\n"],"mappings":"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"}
|
|
@@ -21,4 +21,5 @@ declare class RuntimeRestartRequestService {
|
|
|
21
21
|
readonly run: (params: RequestRestartParams) => Promise<void>;
|
|
22
22
|
}
|
|
23
23
|
//#endregion
|
|
24
|
-
export { RuntimeRestartRequestService };
|
|
24
|
+
export { RuntimeRestartRequestService };
|
|
25
|
+
//# sourceMappingURL=runtime-restart-request.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-restart-request.service.d.ts","names":[],"sources":["../../../../src/shared/services/restart/runtime-restart-request.service.ts"],"mappings":";;;;KAIK,gCAAA;EACH,yBAAA,GAA4B,MAAA;IAC1B,OAAA;IACA,MAAA;IACA,QAAA,GAAW,oBAAA;EAAA;EAEb,6BAAA,GAAgC,MAAA;IAC9B,OAAA;IACA,aAAA;IACA,MAAA;IACA,QAAA,GAAW,oBAAA;EAAA,MACP,OAAA,CAAQ,aAAA;AAAA;AAAA,cAGH,4BAAA;EAAA,iBACkB,IAAA;cAAA,IAAA,EAAM,gCAAA;EAAA,SAE1B,GAAA,GAAa,MAAA,EAAQ,oBAAA,KAAuB,OAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-restart-request.service.js","names":[],"sources":["../../../../src/shared/services/restart/runtime-restart-request.service.ts"],"sourcesContent":["import type { RestartResult } from \"./restart-coordinator.service.js\";\nimport type { RequestRestartParams } from \"@nextclaw-service/shared/types/cli.types.js\";\nimport { pendingRestartStore } from \"@nextclaw-service/shared/stores/pending-restart.store.js\";\n\ntype RuntimeRestartRequestServiceDeps = {\n armManagedServiceRelaunch: (params: {\n delayMs?: number;\n reason: string;\n strategy?: RequestRestartParams[\"strategy\"];\n }) => void;\n requestRestartFromCoordinator: (params: {\n delayMs?: number;\n manualMessage?: string;\n reason: string;\n strategy?: RequestRestartParams[\"strategy\"];\n }) => Promise<RestartResult>;\n};\n\nexport class RuntimeRestartRequestService {\n constructor(private readonly deps: RuntimeRestartRequestServiceDeps) {}\n\n readonly run = async (params: RequestRestartParams): Promise<void> => {\n const {\n changedPaths,\n delayMs,\n manualMessage,\n mode,\n reason,\n silentOnServiceRestart,\n strategy\n } = params;\n if (mode === \"notify\") {\n pendingRestartStore.mark({\n changedPaths,\n manualMessage,\n reason\n });\n console.warn(manualMessage);\n return;\n }\n\n this.deps.armManagedServiceRelaunch({\n reason,\n strategy,\n delayMs\n });\n\n const result = await this.deps.requestRestartFromCoordinator({\n reason,\n strategy,\n delayMs,\n manualMessage\n });\n if (result.status === \"manual-required\" || result.status === \"restart-in-progress\") {\n console.log(result.message);\n return;\n }\n\n pendingRestartStore.clear();\n if (result.status === \"service-restarted\") {\n if (!silentOnServiceRestart) {\n console.log(result.message);\n }\n return;\n }\n\n console.warn(result.message);\n };\n}\n"],"mappings":";;AAkBA,IAAa,+BAAb,MAA0C;CACxC,YAAY,MAAyD;AAAxC,OAAA,OAAA;;CAE7B,MAAe,OAAO,WAAgD;EACpE,MAAM,EACJ,cACA,SACA,eACA,MACA,QACA,wBACA,aACE;AACJ,MAAI,SAAS,UAAU;AACrB,uBAAoB,KAAK;IACvB;IACA;IACA;IACD,CAAC;AACF,WAAQ,KAAK,cAAc;AAC3B;;AAGF,OAAK,KAAK,0BAA0B;GAClC;GACA;GACA;GACD,CAAC;EAEF,MAAM,SAAS,MAAM,KAAK,KAAK,8BAA8B;GAC3D;GACA;GACA;GACA;GACD,CAAC;AACF,MAAI,OAAO,WAAW,qBAAqB,OAAO,WAAW,uBAAuB;AAClF,WAAQ,IAAI,OAAO,QAAQ;AAC3B;;AAGF,sBAAoB,OAAO;AAC3B,MAAI,OAAO,WAAW,qBAAqB;AACzC,OAAI,CAAC,uBACH,SAAQ,IAAI,OAAO,QAAQ;AAE7B;;AAGF,UAAQ,KAAK,OAAO,QAAQ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-service-supervisor.service.d.ts","names":[],"sources":["../../../../src/shared/services/runtime/managed-service-supervisor.service.ts"],"mappings":";;;;;;KA0BK,QAAA,GAAS,YAAA,CAAa,MAAA;AAAA,KAEtB,qBAAA;EACH,KAAA,EAAO,YAAA;EACP,OAAA;EACA,kBAAA;EACA,mBAAA;EACA,sBAAA;EACA,QAAA,EAAU,sBAAA;AAAA;AAAA,KAGP,sBAAA;EACH,aAAA;EACA,OAAA;EACA,UAAA;EACA,WAAA;EACA,YAAA;EACA,YAAA;EACA,eAAA;AAAA;AAAA,KAGG,+BAAA;EACH,UAAA,GAAa,wBAAA;EACb,GAAA,SAAY,IAAA;EACZ,kBAAA,IAAsB,GAAA;EACtB,mBAAA;EACA,UAAA;AAAA;AAAA,cAGW,wBAAA;EAAA,iBACM,UAAA;EAAA,iBACA,GAAA;EAAA,iBACA,kBAAA;EAAA,iBACA,mBAAA;EAAA,iBACA,UAAA;EAAA,iBACA,oBAAA;EAAA,QACT,cAAA;EAAA,QACA,0BAAA;EAAA,QACA,WAAA;cAEI,OAAA,GAAS,+BAAA;EAQrB,mBAAA,GAAuB,MAAA;IACrB,OAAA;IACA,MAAA,EAAQ,QAAA;IACR,QAAA;MAAY,IAAA;MAAc,IAAA;IAAA;IAC1B,KAAA;IACA,MAAA;IACA,SAAA;IACA,gBAAA;IACA,uBAAA,GAA0B,iBAAA;IAC1B,kBAAA,GAAqB,OAAA,UAAiB,OAAA;IACtC,8BAAA,GAAiC,MAAA;MAC/B,KAAA;MACA,MAAA;MACA,SAAA;MACA,OAAA;MACA,cAAA;IAAA;IAEF,qBAAA;EAAA,MACE,qBAAA;EA6FJ,eAAA,GAAmB,MAAA;IACjB,kBAAA;IACA,SAAA;MAAa,KAAA;MAAgB,cAAA;IAAA;IAC7B,QAAA,EAAU,sBAAA;EAAA,MACR,mBAAA;EAOJ,sCAAA;EA4CA,+BAAA,GAAmC,GAAA;EAenC,8BAAA;EAIA,oBAAA,GAAwB,KAAA,EAAO,mBAAA,YAA6B,sBAAA;EAAA,QAgDpD,cAAA;EAuBR,wBAAA,GAA4B,IAAA,EAAM,sBAAA;EAAA,QAY1B,aAAA;EAAA,iBAQS,WAAA;EAAA,QAOT,kBAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-service-supervisor.service.js","names":[],"sources":["../../../../src/shared/services/runtime/managed-service-supervisor.service.ts"],"sourcesContent":["import { spawn, type ChildProcess } from \"node:child_process\";\nimport { mkdirSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport * as NextclawCore from \"@nextclaw/core\";\nimport { FileLogSink } from \"@nextclaw/core\";\nimport {\n managedServiceStateStore,\n type ManagedServiceLastExit,\n type ManagedServiceLease,\n type ManagedServiceState,\n type ManagedServiceStateStore\n} from \"@nextclaw-service/shared/stores/managed-service-state.store.js\";\nimport { writeInitialManagedServiceState, writeReadyManagedServiceState } from \"@nextclaw-service/shared/services/runtime/utils/service-remote-runtime.utils.js\";\nimport type { ManagedServiceSnapshot } from \"@nextclaw-service/shared/services/runtime/utils/managed-service-routing.utils.js\";\nimport { resolveCliSubcommandLaunch } from \"@nextclaw-service/shared/utils/marketplace/cli-subcommand-launch.utils.js\";\nimport { createTopLevelNextclawCommandEnv } from \"@nextclaw-service/shared/utils/top-level-nextclaw-command-env.utils.js\";\nimport { isProcessRunning, resolveServiceLogPath } from \"@nextclaw-service/shared/utils/cli.utils.js\";\n\nconst DEFAULT_HEARTBEAT_INTERVAL_MS = 2_000;\nconst DEFAULT_LEASE_TTL_MS = 10_000;\nconst SIGNAL_EXIT_CODES: Record<string, number> = {\n SIGHUP: 129,\n SIGINT: 130,\n SIGTERM: 143\n};\n\ntype Config = NextclawCore.Config;\n\ntype ManagedServiceStartup = {\n child: ChildProcess;\n logPath: string;\n readinessTimeoutMs: number;\n quickPhaseTimeoutMs: number;\n extendedPhaseTimeoutMs: number;\n snapshot: ManagedServiceSnapshot;\n};\n\ntype ManagedServiceLiveness = {\n processExists: boolean;\n running: boolean;\n staleState: boolean;\n staleReason: \"process-not-running\" | \"lease-expired\" | null;\n leaseExpired: boolean;\n leaseMissing: boolean;\n lastHeartbeatAt: string | null;\n};\n\ntype ManagedServiceSupervisorOptions = {\n stateStore?: ManagedServiceStateStore;\n now?: () => Date;\n isProcessRunningFn?: (pid: number) => boolean;\n heartbeatIntervalMs?: number;\n leaseTtlMs?: number;\n};\n\nexport class ManagedServiceSupervisor {\n private readonly stateStore: ManagedServiceStateStore;\n private readonly now: () => Date;\n private readonly isProcessRunningFn: (pid: number) => boolean;\n private readonly heartbeatIntervalMs: number;\n private readonly leaseTtlMs: number;\n private readonly serviceStartupLogger = NextclawCore.getAppLogger(\"service.startup\");\n private heartbeatTimer: NodeJS.Timeout | null = null;\n private lifecycleTrackingInstalled = false;\n private pendingExit: ManagedServiceLastExit | null = null;\n\n constructor(options: ManagedServiceSupervisorOptions = {}) {\n this.stateStore = options.stateStore ?? managedServiceStateStore;\n this.now = options.now ?? (() => new Date());\n this.isProcessRunningFn = options.isProcessRunningFn ?? isProcessRunning;\n this.heartbeatIntervalMs = options.heartbeatIntervalMs ?? DEFAULT_HEARTBEAT_INTERVAL_MS;\n this.leaseTtlMs = options.leaseTtlMs ?? DEFAULT_LEASE_TTL_MS;\n }\n\n spawnManagedService = (params: {\n appName: string;\n config: Config;\n uiConfig: { host: string; port: number };\n uiUrl: string;\n apiUrl: string;\n healthUrl: string;\n startupTimeoutMs?: number;\n resolveStartupTimeoutMs: (overrideTimeoutMs: number | undefined) => number;\n appendStartupStage: (logPath: string, message: string) => void;\n printStartupFailureDiagnostics: (params: {\n uiUrl: string;\n apiUrl: string;\n healthUrl: string;\n logPath: string;\n lastProbeError: string | null;\n }) => void;\n resolveServiceLogPath?: () => string;\n }): ManagedServiceStartup | null => {\n const {\n appName,\n apiUrl,\n appendStartupStage,\n config,\n healthUrl,\n printStartupFailureDiagnostics,\n resolveStartupTimeoutMs,\n startupTimeoutMs,\n uiConfig,\n uiUrl\n } = params;\n const logPath = (params.resolveServiceLogPath ?? resolveServiceLogPath)();\n new FileLogSink({ serviceLogPath: logPath }).ensureReady();\n mkdirSync(dirname(logPath), { recursive: true });\n const readinessTimeoutMs = resolveStartupTimeoutMs(startupTimeoutMs);\n const quickPhaseTimeoutMs = Math.min(8000, readinessTimeoutMs);\n const extendedPhaseTimeoutMs = Math.max(0, readinessTimeoutMs - quickPhaseTimeoutMs);\n appendStartupStage(\n logPath,\n `start requested: ui=${uiConfig.host}:${uiConfig.port}, readinessTimeoutMs=${readinessTimeoutMs}`\n );\n console.log(`Starting ${appName} background service (readiness timeout ${Math.ceil(readinessTimeoutMs / 1000)}s)...`);\n\n const cliLaunch = resolveCliSubcommandLaunch({\n argvEntry: process.argv[1],\n importMetaUrl: import.meta.url,\n cliArgs: [\"serve\", \"--ui-port\", String(uiConfig.port)],\n nodePath: process.execPath\n });\n const childArgs = [...process.execArgv, ...cliLaunch.args];\n appendStartupStage(logPath, `spawning background process: ${cliLaunch.command} ${childArgs.join(\" \")}`);\n const child = spawn(cliLaunch.command, childArgs, {\n env: createTopLevelNextclawCommandEnv(process.env),\n stdio: \"ignore\",\n detached: true,\n windowsHide: true\n });\n appendStartupStage(logPath, `spawned background process pid=${child.pid ?? \"unknown\"}`);\n if (!child.pid) {\n appendStartupStage(logPath, \"spawn failed: child pid missing\");\n console.error(\"Error: Failed to start background service.\");\n printStartupFailureDiagnostics({\n uiUrl,\n apiUrl,\n healthUrl,\n logPath,\n lastProbeError: null\n });\n return null;\n }\n\n const snapshot: ManagedServiceSnapshot = {\n pid: child.pid,\n uiUrl,\n apiUrl,\n uiHost: uiConfig.host,\n uiPort: uiConfig.port,\n logPath\n };\n writeInitialManagedServiceState({\n config,\n lease: this.createLease(child.pid),\n readinessTimeoutMs,\n snapshot\n });\n this.serviceStartupLogger.info(\"runtime.process.started\", {\n runtimeKind: \"managed-service\",\n childPid: child.pid,\n uiUrl,\n apiUrl,\n uiHost: uiConfig.host,\n uiPort: uiConfig.port,\n entrypoint: `${cliLaunch.command} ${childArgs.join(\" \")}`\n });\n this.serviceStartupLogger.info(\"service_state.written\", {\n runtimeKind: \"managed-service\",\n childPid: child.pid,\n statePath: this.stateStore.path,\n uiUrl,\n apiUrl\n });\n return {\n child,\n logPath,\n readinessTimeoutMs,\n quickPhaseTimeoutMs,\n extendedPhaseTimeoutMs,\n snapshot\n };\n };\n\n writeReadyState = (params: {\n readinessTimeoutMs: number;\n readiness: { ready: boolean; lastProbeError: string | null };\n snapshot: ManagedServiceSnapshot;\n }): ManagedServiceState => {\n return writeReadyManagedServiceState({\n ...params,\n lease: this.createLease(params.snapshot.pid)\n });\n };\n\n installCurrentProcessLifecycleTracking = (): void => {\n if (this.lifecycleTrackingInstalled) {\n return;\n }\n this.lifecycleTrackingInstalled = true;\n this.startHeartbeatForCurrentProcess();\n\n for (const signal of [\"SIGHUP\", \"SIGINT\", \"SIGTERM\"] as const) {\n process.once(signal, () => {\n this.pendingExit = {\n pid: process.pid,\n reason: \"signal\",\n exitedAt: this.now().toISOString(),\n code: SIGNAL_EXIT_CODES[signal],\n signal\n };\n this.recordCurrentProcessExit(this.pendingExit);\n this.stopHeartbeat();\n process.exit(SIGNAL_EXIT_CODES[signal]);\n });\n }\n\n process.once(\"uncaughtExceptionMonitor\", (error) => {\n this.pendingExit = {\n pid: process.pid,\n reason: \"uncaughtException\",\n exitedAt: this.now().toISOString(),\n message: error instanceof Error ? error.message : String(error)\n };\n });\n\n process.once(\"exit\", (code) => {\n this.recordCurrentProcessExit({\n ...(this.pendingExit ?? {\n pid: process.pid,\n reason: \"exit\",\n exitedAt: this.now().toISOString()\n }),\n code\n });\n this.stopHeartbeat();\n });\n };\n\n startHeartbeatForCurrentProcess = (pid = process.pid): void => {\n if (this.heartbeatTimer) {\n return;\n }\n if (!this.writeHeartbeat(pid)) {\n return;\n }\n this.heartbeatTimer = setInterval(() => {\n if (!this.writeHeartbeat(pid)) {\n this.stopHeartbeat();\n }\n }, this.heartbeatIntervalMs);\n this.heartbeatTimer.unref();\n };\n\n stopHeartbeatForCurrentProcess = (): void => {\n this.stopHeartbeat();\n };\n\n resolveStateLiveness = (state: ManagedServiceState | null): ManagedServiceLiveness => {\n if (!state) {\n return {\n processExists: false,\n running: false,\n staleState: false,\n staleReason: null,\n leaseExpired: false,\n leaseMissing: false,\n lastHeartbeatAt: null\n };\n }\n\n const processExists = this.isProcessRunningFn(state.pid);\n const leaseStatus = this.resolveLeaseStatus(state.lease);\n if (!processExists) {\n return {\n processExists,\n running: false,\n staleState: true,\n staleReason: \"process-not-running\",\n leaseExpired: leaseStatus.expired,\n leaseMissing: leaseStatus.missing,\n lastHeartbeatAt: leaseStatus.heartbeatAt\n };\n }\n if (leaseStatus.expired) {\n return {\n processExists,\n running: false,\n staleState: true,\n staleReason: \"lease-expired\",\n leaseExpired: true,\n leaseMissing: false,\n lastHeartbeatAt: leaseStatus.heartbeatAt\n };\n }\n return {\n processExists,\n running: true,\n staleState: false,\n staleReason: null,\n leaseExpired: false,\n leaseMissing: leaseStatus.missing,\n lastHeartbeatAt: leaseStatus.heartbeatAt\n };\n };\n\n private writeHeartbeat = (pid: number): boolean => {\n let wrote = false;\n this.stateStore.update((state) => {\n if (state.pid !== pid) {\n return state;\n }\n wrote = true;\n const next: ManagedServiceState = {\n ...state,\n lease: {\n ...(state.lease ?? this.createLease(pid)),\n ownerPid: pid,\n heartbeatAt: this.now().toISOString(),\n heartbeatIntervalMs: this.heartbeatIntervalMs,\n ttlMs: this.leaseTtlMs\n }\n };\n delete next.lastExit;\n return next;\n });\n return wrote;\n };\n\n recordCurrentProcessExit = (exit: ManagedServiceLastExit): void => {\n this.stateStore.update((state) => {\n if (state.pid !== exit.pid) {\n return state;\n }\n return {\n ...state,\n lastExit: exit\n };\n });\n };\n\n private stopHeartbeat = (): void => {\n if (!this.heartbeatTimer) {\n return;\n }\n clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = null;\n };\n\n private readonly createLease = (ownerPid: number): ManagedServiceLease => ({\n ownerPid,\n heartbeatAt: this.now().toISOString(),\n heartbeatIntervalMs: this.heartbeatIntervalMs,\n ttlMs: this.leaseTtlMs\n });\n\n private resolveLeaseStatus = (lease: ManagedServiceLease | undefined): {\n expired: boolean;\n missing: boolean;\n heartbeatAt: string | null;\n } => {\n if (!lease) {\n return {\n expired: false,\n missing: true,\n heartbeatAt: null\n };\n }\n const heartbeatAtMs = Date.parse(lease.heartbeatAt);\n const ttlMs = Number.isFinite(lease.ttlMs) ? lease.ttlMs : this.leaseTtlMs;\n return {\n expired: !Number.isFinite(heartbeatAtMs) || heartbeatAtMs + ttlMs < this.now().getTime(),\n missing: false,\n heartbeatAt: lease.heartbeatAt\n };\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nextclaw-distribution.service.d.ts","names":[],"sources":["../../../../src/shared/services/runtime/nextclaw-distribution.service.ts"],"mappings":";;;cAEa,2BAAA;EAAA,eACI,mBAAA;EAAA,OAER,SAAA,CAAU,YAAA,EAAc,oBAAA;EAAA,OAIxB,GAAA,CAAA,GAAO,oBAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nextclaw-distribution.service.js","names":[],"sources":["../../../../src/shared/services/runtime/nextclaw-distribution.service.ts"],"sourcesContent":["import type { NextclawDistribution } from \"@nextclaw-service/shared/types/distribution.types.js\";\n\nexport class NextclawDistributionService {\n private static currentDistribution: NextclawDistribution | null = null;\n\n static configure(distribution: NextclawDistribution): void {\n NextclawDistributionService.currentDistribution = distribution;\n }\n\n static get(): NextclawDistribution {\n if (!NextclawDistributionService.currentDistribution) {\n throw new Error(\"NextClaw distribution is not configured.\");\n }\n return NextclawDistributionService.currentDistribution;\n }\n}\n"],"mappings":";AAEA,IAAa,8BAAb,MAAa,4BAA4B;CACvC,OAAe,sBAAmD;CAElE,OAAO,UAAU,cAA0C;AACzD,8BAA4B,sBAAsB;;CAGpD,OAAO,MAA4B;AACjC,MAAI,CAAC,4BAA4B,oBAC/B,OAAM,IAAI,MAAM,2CAA2C;AAE7D,SAAO,4BAA4B"}
|