fix: propagate CLI errors to pending control requests #388
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.
Summary
When the CLI exits with an error (e.g., invalid session ID passed to
--resume), signal all pending control requests immediately instead of waiting for the 60-second timeout.The fix adds 4 lines to the exception handler in
_read_messages:Problem
When the CLI exits with an error, the SDK's message reader catches it but doesn't notify pending control requests. This causes
initialize()to wait for the full 60-second timeout even though the error is known within seconds.Example scenario:
ClaudeAgentOptions(resume="invalid-id")No conversation found with session ID: xxxand exits with code 1initialize()keeps waiting for 60 seconds before timing outSolution
The existing code at
_send_control_requestlines 361-362 already handles exceptions in results:The fix simply signals all pending control events when an error occurs, allowing them to fail fast with the actual error instead of timing out.
Test Plan
Fixes #387