hermes-agent-features/ui-tui/src/app
Brooklyn Nicholson 0d353ca6a8 fix(tui): bound retained state against idle OOM
Guards four unbounded growth paths reachable at idle — the shape matches
reports of the TUI hitting V8's 2GB heap limit after ~1m of idle with 0
tokens used (Mark-Compact freed ~6MB of 2045MB → pure retention).

- `GatewayClient.logs` + `gateway.stderr` events: 200-line cap is bytes-
  uncapped; a chatty Python child emitting multi-MB lines (traceback,
  dumped config, unsplit JSON) retains everything. Truncate at 4KB/line.
- `GatewayClient.bufferedEvents`: unbounded until `drain()` fires. Cap
  at 2000 so a pre-mount event storm can't pin memory indefinitely.
- `useMainApp` gateway `exit` handler: didn't reset `turnController`, so
  a mid-stream crash left `bufRef`/`reasoningText` alive forever.
- `pasteSnips` count-capped (32) but byte-uncapped. Add a 4MB total cap
  and clear snips in `clearIn` so submitted pastes don't linger.
- `StylePool.transitionCache`: uncapped `Map<number,string>`. Full-clear
  at 32k entries (mirrors `charCache` pattern).
2026-04-19 18:43:40 -07:00
..
slash feat(tui): replace /clear double-press gate with a proper confirm overlay 2026-04-18 18:04:08 -05:00
createGatewayEventHandler.ts fix(tui): drain message queue on every busy → false transition 2026-04-19 08:56:29 -05:00
createSlashHandler.ts feat(tui): replace /clear double-press gate with a proper confirm overlay 2026-04-18 18:04:08 -05:00
gatewayContext.tsx feat: add inline token count etc and fix venv 2026-04-15 10:20:56 -05:00
inputSelectionStore.ts fix(tui): Ctrl+C with input selection actually preserves input (lift handler to app level) 2026-04-18 16:28:51 -05:00
interfaces.ts fix(tui): drain message queue on every busy → false transition 2026-04-19 08:56:29 -05:00
overlayStore.ts feat(tui): replace /clear double-press gate with a proper confirm overlay 2026-04-18 18:04:08 -05:00
setupHandoff.ts feat(tui): /model and /setup slash commands with in-place CLI handoff 2026-04-17 10:58:18 -05:00
turnController.ts fix(tui): strip <think>…</think> tags from assistant content and route to reasoning panel 2026-04-18 14:46:38 -05:00
turnStore.ts feat(tui): interleave tool rows into live assistant turns 2026-04-17 11:33:29 -05:00
uiStore.ts feat(tui): read display.streaming / show_reasoning / show_cost / inline_diffs from config 2026-04-18 09:42:57 -05:00
useComposerState.ts fix(tui): bound retained state against idle OOM 2026-04-19 18:43:40 -07:00
useConfigSync.ts feat(tui): read display.streaming / show_reasoning / show_cost / inline_diffs from config 2026-04-18 09:42:57 -05:00
useInputHandlers.ts chore(tui): /clean pass — inline one-off locals, tighten ConfirmPrompt 2026-04-19 07:55:38 -05:00
useLongRunToolCharms.ts refactor(tui): /clean pass across ui-tui — 49 files, −217 LOC 2026-04-16 22:32:53 -05:00
useMainApp.ts fix(tui): bound retained state against idle OOM 2026-04-19 18:43:40 -07:00
useSessionLifecycle.ts fix(tui): tighten /resume render, follow-up to 42721dbe 2026-04-17 11:33:14 -05:00
useSubmission.ts refactor(tui): /clean pass across ui-tui — 49 files, −217 LOC 2026-04-16 22:32:53 -05:00