Files
stack/packages/cli/src/model-stall.mjs
T
jason.woltje 362893d043 feat: integrate reviewed proxy page and managed model keys
Source-candidate: poe d9a564e6d20f5f0fd75ce45b12cbbf8bb4c9d568\nSource-candidate: magica38ba5762b06716db1dee00d0afec162656488f5c\nValidated321whole-file phase plus whole bus1349/model-proxy100/webui490; final gate tooling checks pending, not landed.
2026-10-26 12:04:21 -05:00

46 lines
2.5 KiB
JavaScript

import { existsSync, openSync, fstatSync, readSync, closeSync, constants } from 'node:fs';
import { join } from 'node:path';
// A first-turn timestamp is protocol metadata only, never output or a credential.
function firstTurn(runDir) {
let fd;
try {
fd = openSync(join(runDir, 'proxy-first-turn'), constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
const stat = fstatSync(fd);
if (!stat.isFile() || (stat.mode & 0o777) !== 0o600 || stat.uid !== process.getuid() || stat.size > 64) return 0n;
const bytes = Buffer.alloc(64), size = readSync(fd, bytes, 0, bytes.length, 0);
if (bytes.subarray(0, size).some(byte => byte > 127)) return 0n;
const match = /^turn ([1-9][0-9]{0,23})\n$/.exec(bytes.subarray(0, size).toString('ascii'));
if (!match || match[0].length !== size || size !== stat.size) return 0n;
const stamp = BigInt(match[1]);
return stamp > 0n && stamp <= process.hrtime.bigint() ? stamp : 0n;
} catch (error) { return error.code === 'ENOENT' ? null : 0n; }
finally { if (fd !== undefined) { try { closeSync(fd); } catch { return 0n; } } }
}
// Legacy utility callers retain their explicit construction-time budget. Managed
// proxy sessions opt into first-actual-turn arming in the launcher.
export function watchModelOutput({ runDir, seconds = 120, keyId, stop, receipt, armAtFirstTurn = false }) {
let timer, settled = false, finish;
const done = new Promise(resolve => { finish = resolve; });
const cancel = () => { if (settled) return; settled = true; clearTimeout(timer); finish(); };
const budget = BigInt(Math.ceil(seconds * 1e9));
let deadline = armAtFirstTurn ? null : process.hrtime.bigint() + budget;
const tick = async () => {
if (settled) return;
if (existsSync(join(runDir, 'proxy-first-output'))) { cancel(); return; }
if (deadline === null) {
const first = firstTurn(runDir);
if (first === null) { timer = setTimeout(tick, 1000); return; }
// Invalid protocol metadata fails closed through the same trusted stop;
// it cannot grant an idle session an indefinite or extended budget.
deadline = first === 0n ? 0n : first + budget;
}
const left = Number(deadline - process.hrtime.bigint()) / 1e6;
if (left > 0) { timer = setTimeout(tick, Math.min(1000, left)); return; }
try { await stop(); receipt({ action: 'proxy-stall', keyIds: [keyId] }); }
catch { receipt({ action: 'proxy-stall', code: 'proxy-stop-failed', keyIds: [keyId] }); }
finally { cancel(); }
};
timer = setTimeout(tick, 0);
return { cancel, done };
}