Bugs fixed:
- files.py: use typed error checking (_raise_for_status) instead of raw
raise_for_status(), ensuring WrennNotFoundError etc. are raised
correctly
- exceptions.py: check both "capsule_ids" and "sandbox_ids" response
keys
for backwards compatibility
- code_interpreter: retry _ensure_kernel on 5xx errors (only fail on
4xx),
remove redundant TimeoutError in bare except, clean up non-standard
top-level msg_id/msg_type from Jupyter messages
Resource leaks fixed:
- capsule.py: close WrennClient if capsule creation or init fails
- code_interpreter: add close()/__del__ for _proxy_client cleanup when
not using context manager
Logic fixes:
- pty.py: yield exit events to callers instead of silently discarding
them
- capsule.py: auto-resume paused capsules in wait_ready instead of
failing
- capsule.py: log warnings on destroy failure in __exit__ instead of
silently swallowing errors