Skip to content

fix(http): skip non-object JSON in SSE streams - #172

Merged
PsiACE merged 1 commit into
agentclientprotocol:mainfrom
ningyixi:fix/sse-non-object-json
Oct 18, 2026
Merged

PsiACE merged 1 commit into
agentclientprotocol:mainfrom
ningyixi:fix/sse-non-object-json

Conversation

@ningyixi

Copy link
Copy Markdown
Contributor

Summary

If a connection-scoped SSE event contains valid JSON that is not an object (for example, data: []), the HTTP client passes it to JSON-RPC routing, which assumes a dictionary. The resulting exception closes the stream, and receive() returns None instead of delivering the next valid response.

Skip non-object payloads in the shared SSE decoder, just as it already skips invalid JSON. This matches the existing object filtering in the WebSocket and NDJSON transports. JSON objects continue through the normal JSON-RPC handling unchanged.

Validation

  • Before the fix, the new tests produced 9 failures and 1 passing null control. All three HTTP-client cases returned EOF instead of the following session/new result.
  • Parser coverage includes arrays, a batch-shaped array, strings, numbers, booleans, and null. HTTP-client regressions exercise the existing httpx2.MockTransport server and verify delivery of a valid response immediately after the invalid event.
  • uv run python -m pytest tests/http/test_sse.py tests/http/test_http_client.py -q: 28 passed.
  • make check: passed (lockfile, repository-wide pre-commit, Ruff, ty, deptry).
  • make test: 448 passed, 1 skipped (optional Gemini CLI test).

No public API, configuration, or schema changes. The parser docstring documents the skip behavior. No live model calls were made.

AI assistance disclosure: Codex prepared the patch, tests, and this description, and ran the checks above. No human code review is claimed.

@PsiACE
PsiACE merged commit 4662aae into agentclientprotocol:main Oct 18, 2026
8 checks passed
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.

2 participants