opencode
opencode copied to clipboard
fix(tui): clean up SDK event listeners on unmount
Summary
Fix memory leak in the TUI App component where SDK event listeners (onStdout, onStderr, onMessage, onFinished) are never unsubscribed.
Problem
In packages/tui/src/app.tsx, the useEffect hook sets up event listeners via sdk.on() calls but the cleanup function only calls sdk.stop() without removing the listeners. This causes:
- Event listener accumulation over time
- Memory retention of closed sessions
- Potential duplicate event handling
Solution
- Store unsubscribe functions returned by
sdk.on() - Call all unsubscribe functions in the cleanup return
- Ensures proper cleanup when component unmounts or session changes
Fixes #8258