import type { Command } from "commander"; import { formatDocsLink } from "../../terminal/links.js"; import { theme } from "../../terminal/theme.js"; import { createDefaultDeps } from "../deps.js"; import { runDaemonInstall, runDaemonRestart, runDaemonStart, runDaemonStatus, runDaemonStop, runDaemonUninstall, } from "./runners.js"; export function registerDaemonCli(program: Command) { const daemon = program .command("daemon") .description("Manage the Gateway daemon service (launchd/systemd/schtasks)") .addHelpText( "after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/daemon", "docs.clawd.bot/cli/daemon")}\n`, ); daemon .command("status") .description("Show daemon install status + probe the Gateway") .option("--url ", "Gateway WebSocket URL (defaults to config/remote/local)") .option("--token ", "Gateway token (if required)") .option("--password ", "Gateway password (password auth)") .option("--timeout ", "Timeout in ms", "10000") .option("--no-probe", "Skip RPC probe") .option("--deep", "Scan system-level services", false) .option("--json", "Output JSON", false) .action(async (opts) => { await runDaemonStatus({ rpc: opts, probe: Boolean(opts.probe), deep: Boolean(opts.deep), json: Boolean(opts.json), }); }); daemon .command("install") .description("Install the Gateway service (launchd/systemd/schtasks)") .option("--port ", "Gateway port") .option("--runtime ", "Daemon runtime (node|bun). Default: node") .option("--token ", "Gateway token (token auth)") .option("--force", "Reinstall/overwrite if already installed", false) .option("--json", "Output JSON", false) .action(async (opts) => { await runDaemonInstall(opts); }); daemon .command("uninstall") .description("Uninstall the Gateway service (launchd/systemd/schtasks)") .option("--json", "Output JSON", false) .action(async (opts) => { await runDaemonUninstall(opts); }); daemon .command("start") .description("Start the Gateway service (launchd/systemd/schtasks)") .option("--json", "Output JSON", false) .action(async (opts) => { await runDaemonStart(opts); }); daemon .command("stop") .description("Stop the Gateway service (launchd/systemd/schtasks)") .option("--json", "Output JSON", false) .action(async (opts) => { await runDaemonStop(opts); }); daemon .command("restart") .description("Restart the Gateway service (launchd/systemd/schtasks)") .option("--json", "Output JSON", false) .action(async (opts) => { await runDaemonRestart(opts); }); // Build default deps (parity with other commands). void createDefaultDeps(); }