export type CodexAppServerTransport = {
stdin: {
write: (data: string) => unknown;
end?: () => unknown;
destroy?: () => unknown;
unref?: () => unknown;
on?: (event: "error" , listener: (error: Error) => void ) => unknown;
};
stdout: NodeJS.ReadableStream & {
destroy?: () => unknown;
unref?: () => unknown;
};
stderr: NodeJS.ReadableStream & {
destroy?: () => unknown;
unref?: () => unknown;
};
pid?: number;
exitCode?: number | null ;
signalCode?: string | null ;
killed?: boolean ;
kill?: (signal?: NodeJS.Signals) => unknown;
unref?: () => unknown;
once: (event: string, listener: (...args: unknown[]) => void ) => unknown;
};
export function closeCodexAppServerTransport(
child: CodexAppServerTransport,
options: { forceKillDelayMs?: number } = {},
): void {
child.stdout.destroy?.();
child.stderr.destroy?.();
child.stdin.end?.();
child.stdin.destroy?.();
signalCodexAppServerTransport(child, "SIGTERM" );
const forceKillDelayMs = options.forceKillDelayMs ?? 1 _000 ;
const forceKill = setTimeout(
() => {
if (hasCodexAppServerTransportExited(child)) {
return ;
}
signalCodexAppServerTransport(child, "SIGKILL" );
},
Math.max(1 , forceKillDelayMs),
);
forceKill.unref?.();
child.once("exit" , () => clearTimeout(forceKill));
child.unref?.();
child.stdout.unref?.();
child.stderr.unref?.();
child.stdin.unref?.();
}
function hasCodexAppServerTransportExited(child: CodexAppServerTransport): boolean {
return child.exitCode !== null && child.exitCode !== undefined
? true
: child.signalCode !== null && child.signalCode !== undefined;
}
function signalCodexAppServerTransport(
child: CodexAppServerTransport,
signal: NodeJS.Signals,
): void {
if (child.pid && process.platform !== "win32" ) {
try {
process.kill(-child.pid, signal);
return ;
} catch {
// Fall back to the child handle. The process may already be gone or not
// be a process-group leader on older call sites.
}
}
child.kill?.(signal);
}
Messung V0.5 in Prozent C=95 H=100 G=97
[Verzeichnis aufwärts0.14unsichere VerbindungÜbersetzung europäischer Sprachen durch Browser2026-09-28]