UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

86 lines (85 loc) 6.08 kB
import { c as isGatewayServiceEnv } from "./constants-ChqKLfPp.js"; import { t as createLazyImportLoader } from "./lazy-promise-DGqyc4Y4.js"; import { o as isGatewayExternallySupervised } from "./gateway-supervision-D7p37rG2.js"; import { n as inheritOptionFromParent } from "./command-options-BDuSHeWG.js"; import { s as resolveGatewayRpcOptionsWithLocalPort } from "./gateway-rpc-C9fDQ0vT.js"; //#region src/cli/daemon-cli/register-service-commands.ts const daemonInstallModuleLoader = createLazyImportLoader(() => import("./install.runtime-EE8HGFUx.js")); const daemonLifecycleModuleLoader = createLazyImportLoader(() => import("./lifecycle.runtime.js")); const daemonStatusModuleLoader = createLazyImportLoader(() => import("./status.runtime-CXjWD7BA.js")); function resolveJsonOption(cmdOpts, command) { const parentJson = inheritOptionFromParent(command, "json", "cli"); return Boolean(cmdOpts.json || parentJson); } function resolveInstallOptions(cmdOpts, command) { const parentForce = inheritOptionFromParent(command, "force"); const parentPort = inheritOptionFromParent(command, "port"); const parentToken = inheritOptionFromParent(command, "token"); return { ...cmdOpts, force: Boolean(cmdOpts.force || parentForce), port: cmdOpts.port ?? parentPort, token: cmdOpts.token ?? parentToken, json: resolveJsonOption(cmdOpts, command) }; } function resolveRestartOptions(cmdOpts, command) { const parentForce = inheritOptionFromParent(command, "force"); const force = Boolean(cmdOpts.force || parentForce); const safeFromGateway = process.platform === "win32" && isGatewayServiceEnv(process.env) && !isGatewayExternallySupervised() && !force && cmdOpts.wait === void 0 && !cmdOpts.preserveDefinition && !cmdOpts.skipDeferral; return { ...cmdOpts, force, safe: cmdOpts.safe || safeFromGateway, json: resolveJsonOption(cmdOpts, command) }; } function resolveStopOptions(cmdOpts, command) { const parentForce = inheritOptionFromParent(command, "force"); return { ...cmdOpts, force: Boolean(cmdOpts.force || parentForce), json: resolveJsonOption(cmdOpts, command) }; } /** Attach Gateway service status/install/lifecycle subcommands to a parent command. */ function addGatewayServiceCommands(parent, opts) { parent.command("status").description(opts?.statusDescription ?? "Show gateway service status + probe connectivity/capability").option("--url <url>", "Gateway WebSocket URL (defaults to config/remote/local)").option("--port <port>", "Local Gateway port").option("--token <token>", "Gateway token (if required)").option("--password <password>", "Gateway password (password auth)").option("--timeout <ms>", "Timeout in ms", "10000").option("--no-probe", "Skip RPC probe").option("--require-rpc", "Exit non-zero when the RPC probe fails", false).option("--deep", "Scan system-level services", false).option("--json", "Output JSON", false).action(async (cmdOpts, command) => { const { runDaemonStatus } = await daemonStatusModuleLoader.load(); await runDaemonStatus({ rpc: resolveGatewayRpcOptionsWithLocalPort(cmdOpts, command), probe: Boolean(cmdOpts.probe), requireRpc: Boolean(cmdOpts.requireRpc), deep: Boolean(cmdOpts.deep), json: resolveJsonOption(cmdOpts, command) }); }); parent.command("install").description("Install the Gateway service (launchd/systemd/schtasks)").option("--port <port>", "Gateway port").option("--runtime <runtime>", "Daemon runtime (node|bun). Default: node").option("--token <token>", "Gateway token (token auth)").option("--wrapper <path>", "Executable wrapper for generated service ProgramArguments").option("--force", "Reinstall/overwrite if already installed", false).option("--json", "Output JSON", false).action(async (cmdOpts, command) => { const { runDaemonInstall } = await daemonInstallModuleLoader.load(); await runDaemonInstall(resolveInstallOptions(cmdOpts, command)); }); parent.command("uninstall").description("Uninstall the Gateway service (launchd/systemd/schtasks)").option("--json", "Output JSON", false).action(async (cmdOpts, command) => { const { runDaemonUninstall } = await daemonLifecycleModuleLoader.load(); await runDaemonUninstall({ ...cmdOpts, json: resolveJsonOption(cmdOpts, command) }); }); parent.command("start").description("Start the Gateway service (launchd/systemd/schtasks)").option("--json", "Output JSON", false).action(async (cmdOpts, command) => { const { runDaemonStart } = await daemonLifecycleModuleLoader.load(); await runDaemonStart({ ...cmdOpts, json: resolveJsonOption(cmdOpts, command) }); }); parent.command("stop").description("Stop the Gateway service (launchd/systemd/schtasks)").option("--force", "Allow stop from a non-interactive shell", false).option("--json", "Output JSON", false).option("--disable", "Persistently suppress KeepAlive/RunAtLoad so the gateway does not respawn until next start (launchd only)", false).action(async (cmdOpts, command) => { const { runDaemonStop } = await daemonLifecycleModuleLoader.load(); await runDaemonStop(resolveStopOptions(cmdOpts, command)); }); parent.command("restart").description("Restart the Gateway service (launchd/systemd/schtasks)").option("--preserve-definition", "Keep the native service definition", false).option("--force", "Restart immediately without waiting for active gateway work", false).option("--safe", "Request an OpenClaw-aware restart after active work drains (bounded wait; may force after the timeout expires)", false).option("--skip-deferral", "Bypass the safe-restart active-work deferral gate; close-stage reply drain still applies; requires --safe", false).option("--wait <duration>", "Wait duration before restart (ms, 10s, 5m; 0 waits indefinitely). For non-safe restarts (plain restart); not compatible with --force or --safe").option("--json", "Output JSON", false).action(async (cmdOpts, command) => { const { runDaemonRestart } = await daemonLifecycleModuleLoader.load(); await runDaemonRestart(resolveRestartOptions(cmdOpts, command)); }); } //#endregion export { addGatewayServiceCommands as t };