Something went wrong. Try again.
fork of prime agent with changes i want but are not upstreamable probqbly (and some fixes)
Something went wrong. Try again.
2.0 kB · 74 lines
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475interface StdoutTakeoverState { rawStdoutWrite: (chunk: string, callback?: (error?: Error | null) => void) => boolean; rawStderrWrite: (chunk: string, callback?: (error?: Error | null) => void) => boolean; originalStdoutWrite: typeof process.stdout.write;}
let stdoutTakeoverState: StdoutTakeoverState | undefined;
export function takeOverStdout(): void { if (stdoutTakeoverState) { return; }
const rawStdoutWrite = process.stdout.write.bind(process.stdout) as StdoutTakeoverState["rawStdoutWrite"]; const rawStderrWrite = process.stderr.write.bind(process.stderr) as StdoutTakeoverState["rawStderrWrite"]; const originalStdoutWrite = process.stdout.write;
process.stdout.write = (( chunk: string | Uint8Array, encodingOrCallback?: BufferEncoding | ((error?: Error | null) => void), callback?: (error?: Error | null) => void, ): boolean => { if (typeof encodingOrCallback === "function") { return rawStderrWrite(String(chunk), encodingOrCallback); } return rawStderrWrite(String(chunk), callback); }) as typeof process.stdout.write;
stdoutTakeoverState = { rawStdoutWrite, rawStderrWrite, originalStdoutWrite, };}
export function restoreStdout(): void { if (!stdoutTakeoverState) { return; }
process.stdout.write = stdoutTakeoverState.originalStdoutWrite; stdoutTakeoverState = undefined;}
export function isStdoutTakenOver(): boolean { return stdoutTakeoverState !== undefined;}
export function writeRawStdout(text: string): void { if (stdoutTakeoverState) { stdoutTakeoverState.rawStdoutWrite(text); return; } process.stdout.write(text);}
export async function flushRawStdout(): Promise<void> { if (stdoutTakeoverState) { await new Promise<void>((resolve, reject) => { stdoutTakeoverState?.rawStdoutWrite("", (err) => { if (err) reject(err); else resolve(); }); }); return; }
await new Promise<void>((resolve, reject) => { process.stdout.write("", (err) => { if (err) reject(err); else resolve(); }); });}