ReleaseCoreWeaveCoreWeavepublished Mar 25, 2026seen Jun 26

coreweave/cwsandbox-client v0.12.0

coreweave/cwsandbox-client

Open original ↗

Captured source

source ↗
published Mar 25, 2026seen Jun 26captured 10hhttp 200method plain

v0.12.0

Repository: coreweave/cwsandbox-client

Tag: v0.12.0

Published: 2026-03-25T21:17:49Z

Prerelease: no

Release notes:

v0.12.0 (2026-03-25)

_This release is published under the Apache-2.0 License._

Bug Fixes

  • sandbox: Always enqueue output sentinel on cancellation (`e680f4c`)

CancelledError is a BaseException, bypassing the except Exception handler. The if not cancelled guard in the finally block skipped the output_queue sentinel, leaving StreamReader consumers hanging forever. Remove the guard so the sentinel is always enqueued.

Fixes both _exec_streaming_async and _exec_streaming_tty_async.

Documentation

Cover SDK shell() usage, terminal resize, stdin/stdout streaming, and a comparison table for choosing between exec and shell.

Features

Remote debugging and interactive workflows need direct terminal access to sandboxes without writing Python.

Add cwsandbox sh with raw mode, SIGWINCH resize, and terminal state restore on exit.

  • sandbox: Add TTY exec and shell method (`8ff5de4`)

Add _exec_streaming_tty_async for raw-byte TTY streaming with resize support, and the public shell() method that returns a TerminalSession. Widen _on_exec_complete to accept TerminalResult.

Make StreamReader a Generic[_S] parameterized over str (text streams) and bytes (raw TTY output). Add TerminalResult and TerminalSession types for interactive TTY sessions. Update Waitable type alias and __all__ exports.

Testing

Cover _exec_streaming_tty_async paths: happy path, server errors, gRPC transport errors, stdin forwarding, resize, and early failure propagation. Fold TestShellCancellation into the new class with shared helpers to reduce setup duplication.

  • sandbox: Add xfail test for cancelled TTY session output hang (`8d665d8`)

Demonstrates a bug where cancelling a TerminalSession future leaves the output StreamReader hanging forever. The CancelledError path in _exec_streaming_tty_async skips the output_queue sentinel (if not cancelled), so consumers block indefinitely.

The fix is to remove the if not cancelled guard so the sentinel is always enqueued. Cross-review confirmed no double-sentinel risk.

Marked xfail(strict=True) — will flip to XPASS once the guard is removed, signaling the marker should be dropped.

---

Detailed Changes: v0.11.2...v0.12.0