Skip to content

fix(opencode): handle client disconnect in SSE stream writes#15147

Open
zaxbysauce wants to merge 2 commits intoanomalyco:devfrom
zaxbysauce:fix/sse-client-disconnect-handling
Open

fix(opencode): handle client disconnect in SSE stream writes#15147
zaxbysauce wants to merge 2 commits intoanomalyco:devfrom
zaxbysauce:fix/sse-client-disconnect-handling

Conversation

@zaxbysauce
Copy link

@zaxbysauce zaxbysauce commented Feb 26, 2026

Issue for this PR

Closes #15149

Type of change

  • Bug fix
  • New feature
  • Refactor / code improvement
  • Documentation

What does this PR do?

Fixes server becoming unresponsive when external clients disconnect during SSE streaming.

When running opencode serve with external clients, if a client disconnects abruptly while connected to the /event or /global/event SSE endpoints, the writeSSE calls throw unhandled "Unexpected EOF" errors. These errors corrupt the server state, causing subsequent requests to also fail.

The fix wraps all writeSSE calls in try/catch to gracefully handle client disconnects by cleaning up event subscriptions, clearing heartbeat intervals, and logging the disconnection.

How did you verify your code works?

  • TypeScript compiles without errors
  • Lint passes
  • Code follows existing patterns in the codebase

Screenshots / recordings

If this is a UI change, please include a screenshot or recording.

Checklist

  • I have tested my changes locally
  • I have not included unrelated changes in this PR

If you do not follow this template your PR will be automatically rejected.

When running opencode serve with external clients, SSE stream writes would
fail with 'Unexpected EOF' when clients disconnect abruptly. These errors
were not caught, causing the server to enter a corrupted state where
subsequent requests would also fail.

This fix wraps all writeSSE calls in try/catch to gracefully handle
client disconnects by:
- Cleaning up the event subscription
- Clearing the heartbeat interval
- Logging the disconnection

This ensures the server remains stable after client disconnects.
@github-actions
Copy link
Contributor

Thanks for your contribution!

This PR doesn't have a linked issue. All PRs must reference an existing issue.

Please:

  1. Open an issue describing the bug/feature (if one doesn't exist)
  2. Add Fixes #<number> or Closes #<number> to this PR description

See CONTRIBUTING.md for details.

@github-actions github-actions bot added the needs:compliance This means the issue will auto-close after 2 hours. label Feb 26, 2026
@github-actions
Copy link
Contributor

The following comment was made by an LLM, it may be inaccurate:

I found one potentially related PR:

#14092: fix(opencode): prevent resource leaks in serve/web shutdown and SSE stream cleanup

This PR addresses similar resource cleanup issues in SSE stream handling and server shutdown, which is closely related to the client disconnect handling in PR #15147. Both are addressing stability and resource management in SSE operations.

@zaxbysauce
Copy link
Author

Pull Request content has been updated to comply with PR template.

@github-actions github-actions bot removed the needs:compliance This means the issue will auto-close after 2 hours. label Feb 26, 2026
@github-actions
Copy link
Contributor

Thanks for updating your PR! It now meets our contributing guidelines. 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Server becomes unresponsive after external client disconnects during SSE streaming

1 participant