opencode icon indicating copy to clipboard operation
opencode copied to clipboard

SDK throws 'Unexpected end of JSON input' on empty response bodies

Open coleleavitt opened this issue 3 days ago • 3 comments

Bug Description

The SDK crashes with SyntaxError: Unexpected end of JSON input when the server returns an empty response body without proper Content-Length: 0 header or 204 status code.

Steps to Reproduce

  1. Make an API call that returns an empty body with status 200
  2. SDK attempts to parse the empty body as JSON
  3. Crashes at client.gen.ts:167

Error Message

SyntaxError: Unexpected end of JSON input
    at json (unknown)
    at <anonymous> (../sdk/js/src/v2/gen/client/client.gen.ts:167:33)

Expected Behavior

  • Empty responses should be handled gracefully (return {})
  • Malformed JSON should provide actionable error messages with status code and URL

Root Cause

  1. Client-side: SDK only checks for status === 204 or Content-Length === "0" before attempting JSON parse. Empty body with 200 status and no Content-Length header falls through to response.json() which throws.

  2. Server-side: OPTIONS handler in /packages/console/app/src/routes/zen/v1/models.ts returns status: 200 with null body instead of status: 204.

Proposed Fix

  • Read response as text first, only parse if non-empty
  • Add try-catch with contextual error messages for malformed JSON
  • Fix server to return proper 204 status for empty responses

Related Issues

  • #7715 - Same bug report (duplicate)
  • #7618 - Similar fix attempt (error messages only, doesn't prevent the crash)

Not Related (different root causes)

  • #2188, #3034, #5890, #7692 - These are about model-generated malformed JSON, not SDK response parsing

coleleavitt avatar Jan 12 '26 00:01 coleleavitt