()
| 86 | async function sleep(ms) { return new Promise((r) => setTimeout(r, ms)); } |
| 87 | |
| 88 | async function main() { |
| 89 | log(`local-daemon starting. root=${ROOT} cooldown=${opts.cooldown}ms`); |
| 90 | let sessions = 0; |
| 91 | while (true) { |
| 92 | const state = readDaemon(); |
| 93 | if (!state) { log('No daemon.json found. Exiting.'); break; } |
| 94 | if (state.status !== 'running') { |
| 95 | log(`Daemon status is "${state.status}". Reason: ${state.stopReason ?? 'n/a'}. Exiting.`); |
| 96 | break; |
| 97 | } |
| 98 | if (opts.maxSessions > 0 && sessions >= opts.maxSessions) { |
| 99 | log(`Reached --max-sessions (${opts.maxSessions}). Exiting.`); |
| 100 | break; |
| 101 | } |
| 102 | sessions += 1; |
| 103 | log(`Starting session #${sessions} (daemon session count: ${state.sessionCount ?? 0})`); |
| 104 | const code = await runSession(); |
| 105 | log(`Session #${sessions} exited with code ${code}`); |
| 106 | log(`Cooldown ${opts.cooldown / 1000}s...`); |
| 107 | await sleep(opts.cooldown); |
| 108 | } |
| 109 | log(`local-daemon stopped after ${sessions} session(s).`); |
| 110 | } |
| 111 | |
| 112 | main().catch((err) => { log(`fatal: ${err.stack ?? err.message}`); process.exit(1); }); |
| 113 |
no test coverage detected