Skip to content

Conversation

@oorestisime
Copy link

@oorestisime oorestisime commented Jan 12, 2026

What does this PR do?

Fixes a crash that occurs when aborting a session with double-escape. The app would crash with "Unexpected end of JSON input" error.

Fixes #7946

An example of error

error/crash [09:17:24] [LOG] 'bootstrapping'
[09:17:25] [LOG] 'resolveSystemTheme'
[09:17:25] [LOG] '{"type":"home"}'
[09:17:26] [LOG] [
      '#1d1f21', '#cc6666',
      '#b5bd68', '#f0c674',
      '#81a2be', '#b294bb',
      '#8abeb7', '#c5c8c6',
      '#666666', '#d54e53',
      '#b9ca4a', '#e7c547',
      '#7aa6da', '#c397d8',
      '#70c0b1', '#eaeaea'
    ]
[09:17:49] [LOG] 'navigate' { type: 'session', sessionID: 'ses_44eee8c1cffeyYbm3ENuvzhYkm' }
[09:17:49] [LOG] '{"type":"session","sessionID":"ses_44eee8c1cffeyYbm3ENuvzhYkm"}'
[09:17:53] [LOG] 'TSWorker:' 'Loading from local path: /$bunfs/root/tree-sitter-markdown-411r6y9b.wasm'
[09:17:53] [LOG] 'TSWorker:' 'Loading from local path: /$bunfs/root/highlights-r812a2qc.scm'
[09:17:53] [LOG] 'TSWorker:' 'Loading from local path: /$bunfs/root/injections-73j83es3.scm'
[09:17:53] [LOG] 'TSWorker:' 'Loading from local path: /$bunfs/root/tree-sitter-markdown_inline-j5349f42.wasm'
[09:17:53] [LOG] 'TSWorker:' 'Loading from local path: /$bunfs/root/highlights-x6tmsnaa.scm'
[09:25:00] [ERROR] Error: Unexpected end of JSON input
    SyntaxError: Unexpected end of JSON input
        at <parse> (:0)
        at json (unknown)
        at <anonymous> (../sdk/js/src/v2/gen/client/client.gen.ts:167:33)
        at processTicksAndRejections (native:7:39) 

Changes:

  • Add try/catch in RPC listener to send error responses back to client instead of leaving promises hanging
  • Handle rpc.error messages in client to reject promises properly
  • Add .catch() to session.abort call to prevent unhandled rejections
  • Return JSON from /session/:sessionID/prompt instead of a streaming response to avoid empty bodies on abort
  • Fire-and-forget /session/:sessionID/prompt_async with a 204 no-content response and server-side error logging

How did you verify your code works?

  1. Started opencode TUI
  2. Started an agent task
  3. Pressed escape twice to abort mid-work
  4. Verified the app no longer crashes with JSON parse errors

Note: I have not rerun the flow after the latest server response adjustments in this environment.

…bort

- Add try/catch in RPC listener to send error responses back to client
- Handle rpc.error messages in client to reject promises properly
- Add .catch() to session.abort call to prevent unhandled rejections

Previously, when aborting a session with double-escape, the app could crash
with 'Unexpected end of JSON input' if an RPC call failed. This was because
errors in the worker weren't being sent back to the main process, leaving
promises unresolved and potentially causing JSON parse errors downstream.
@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
Copy link
Contributor

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

No duplicate PRs found

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.

Crash on double-escape abort: JSON parse error from prompt response

1 participant