Fix parsing failure for large JSON outputs split across buffers #50
+179
−6
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This implementation addresses parsing failures that occur when large JSON responses from Claude Code CLI are split across multiple lines due to stream buffering. The solution introduces an incomplete JSON buffer reconstruction system with deferred yielding to ensure reliable message parsing.
Implementation Details
Core Problem
When JSON objects exceed buffer boundaries, they arrive split across multiple lines:
Line 1:
{"type": "message", "data": "very long content that gets cut off mid-Line 2:
way through the JSON object"}Solution Architecture
json.JSONDecodeErrorexceptions{/[)vs genuinely malformed JSONSince reconstruction may reprocess the same line content multiple times, yielding must be
deferred:
Yielding phase - only when no incomplete JSON pending
Multi-Iteration Processing Flow
Iteration 1 (Line: valid_json1\nvalid_json2\nincomplete_large_json_part1):
Iteration 2 (Line: large_json_part2):
Key Design Decisions
valid/invalid content
Error Handling
}or]) still raisesCLIJSONDecodeErrorImpact
This implementation ensures that large JSON responses are never lost due to buffer boundaries
while maintaining the integrity of the message stream and preventing duplicate outputs during
the reconstruction process.