mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-01 12:02:05 +00:00
When the previous frame's stdout.write has not drained (the outer terminal parser is overwhelmed by a wide CR+LF burst — CJK + ANSI tool output on a high-context session), the renderer kept writing a new frame every tick. That piled writes onto an already-backed-up pipe and kept the macrotask queue hot, starving the stdin 'readable' callback — the observed stdin freeze where the agent loop keeps running but keystrokes/Ctrl-C are dead. onRender now coalesces: while pendingWriteStart is non-null (prior write's drain callback hasn't fired) it skips the frame and retries on the drain tick instead of writing. A MAX_COALESCED_BACKPRESSURE_FRAMES ceiling forces a write through after N skips so a terminal whose drain callback never fires (OSError EIO on flush) self-heals once the pipe recovers rather than wedging forever. TTY-only; piped stdout has no flow control. Coalesce counter resets on every real write. This is the stdout-backpressure strand left open after #54046 fixed the swallowed-exception strand. |
||
|---|---|---|
| .. | ||
| src | ||
| ambient.d.ts | ||
| index.d.ts | ||
| index.js | ||
| package.json | ||
| text-input.d.ts | ||
| text-input.js | ||