Keep local voice memory out of the daemon (#1217)

* Move local speech work out of daemon

Run local speech models in a lazily spawned worker so native model memory and blocking synthesis/transcription work stay out of the daemon process. The worker exits after idle time so local speech RSS can be reclaimed.

* Update supervisor stop test for process title
This commit is contained in:
Mohamed Boudra
2026-05-29 13:27:28 +08:00
committed by GitHub
parent cdcf3d8d55
commit 04fb0f9b82
8 changed files with 1279 additions and 199 deletions
@@ -6,7 +6,7 @@
*/
import assert from "node:assert";
import { spawn, spawnSync, type ChildProcess } from "node:child_process";
import { spawn, type ChildProcess } from "node:child_process";
import { mkdtemp, readFile, rm } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
@@ -59,15 +59,6 @@ async function readPidLockState(paseoHome: string): Promise<PidLockState> {
}
}
function readProcessCommand(pid: number): string | null {
const result = spawnSync("ps", ["-p", String(pid), "-o", "command="], { encoding: "utf8" });
if (result.status !== 0 || result.error) {
return null;
}
const command = result.stdout.trim();
return command.length > 0 ? command : null;
}
interface DaemonStatus {
localDaemon: string | null;
pid: number | null;
@@ -168,11 +159,10 @@ try {
assert(isProcessRunning(daemonPid), "daemon process should be running");
const pidLockBeforeStop = await readPidLockState(paseoHome);
assert.strictEqual(pidLockBeforeStop.pid, daemonPid, "pid lock should match status pid");
const command = readProcessCommand(daemonPid);
assert(command !== null, "pid lock pid should resolve to a running process command");
assert(
command.includes("supervisor-entrypoint.ts") || command.includes("supervisor-entrypoint.js"),
`pid lock pid should be supervisor-entrypoint process, got: ${command}`,
assert.strictEqual(
daemonPid,
supervisorProcess.pid,
"pid lock pid should be the supervisor-entrypoint process",
);
console.log(`✓ dev daemon started with daemon pid ${daemonPid}\n`);