feat(daemon): port Fase 5 daemon — IPC agent-driver loop (Submit/Close) + streaming tokens; wire CLI --daemon/--attach

This commit is contained in:
asepharyana
2026-09-02 22:50:38 +07:00
parent d134678530
commit 14d3556179
9 changed files with 387 additions and 6 deletions
+13 -4
View File
@@ -9,6 +9,7 @@
import * as fs from "node:fs";
import * as os from "node:os";
import * as path from "node:path";
import { newStore } from "@zesdex/domain";
import { parseCli, modeCount } from "./args.ts";
import { runSingleProcess } from "./compose.ts";
@@ -127,11 +128,19 @@ async function main(): Promise<void> {
}
if (opts.daemon) {
console.info("daemon mode not yet wired — falling back to REPL");
await runRepl();
const { runDaemon } = await import("@zesdex/daemon");
console.info("daemon mode — creating per-session IPC socket");
const handle = await runDaemon();
const stop = () => void handle.stop().then(() => process.exit(0));
process.on("SIGINT", stop);
process.on("SIGTERM", stop);
await new Promise(() => {});
} else if (opts.attach !== null) {
console.info(`attach mode for session '${opts.attach}' not yet wired`);
process.exit(1);
const { runAttach } = await import("@zesdex/daemon");
console.info(`attach mode for daemon session '${opts.attach}'`);
const store = newStore();
const socketPath = path.join(store.base_dir, "run", `${opts.attach}.sock`);
await runAttach(socketPath);
} else if (opts.api) {
const { newApiState, startApiServer } = await import("@zesdex/api");
const baseDir =