/** * `jeo daemon status|start|stop|reload` — manage the background Telegram * notification/subagent-control daemon (gjc `gjc daemon` parity, scoped to * jeo's one daemon kind). See `src/agent/notify/daemon-control.ts`. */ import { daemonStatus, startDaemon, stopDaemon, reloadDaemon } from "../agent/notify/daemon-control"; async function printStatus(): Promise { const status = await daemonStatus(); if (!status.configured) { console.log("notifications not configured — run 'jeo notify setup' first."); } if (status.running) { console.log(`running (pid ${status.pid}, started ${new Date(status.startedAt!).toISOString()})`); } else if (status.stale) { console.log("stale — a lock file exists but its pid is dead (previous daemon crashed without cleanup). 'jeo daemon start' will reclaim it."); } else { console.log("stopped"); } } export async function runDaemonCommand(args: string[]): Promise { const action = args[0] ?? "status"; if (action === "status" || action === "list") return printStatus(); if (action === "start") { const res = await startDaemon(); console.log(res.message); if (!res.ok) process.exitCode = 1; return; } if (action === "stop") { const res = await stopDaemon(); console.log(res.message); if (!res.ok) process.exitCode = 1; return; } if (action === "reload") { const res = await reloadDaemon(); console.log(res.message); if (!res.ok) process.exitCode = 1; return; } console.log(`Unknown 'jeo daemon' action '${action}'. Usage: jeo daemon [status|start|stop|reload]`); process.exitCode = 1; }