v0.17.0
Performance
Async IO execution layer — Rewrote the sandbox execution layer from blocking subprocess.Popen to asyncio, eliminating deadlock risk from sequential stdout/stderr reads. Stream reading uses chunk-based read() with manual line splitting, removing any line-length limit. (#275, #277, #280)
Reduced execution memory footprint — ExecutionResult no longer stores raw stdout, stderr, or event lists. A new streaming ExecutionAccumulator extracts fields in a single pass, so the execution layer holds zero buffered output. (#283)
Unified image cache — Replaced split image management with a single ImageCache class using content-addressed tags and persistent staleness detection that survives restarts. (#282)
CI image caching — New airut-sandbox image hash, image save, and image load subcommands let CI workflows cache pre-built container images. (#288, #292, #299)
Features & Improvements
Email subject line in prompt — New conversations include the decoded email subject as context for Claude. Messages with a subject but empty body are now accepted, since the subject alone can carry the full request. (#304, #307)
- Subnet conflict resolution — Running
airutandairut-sandboxconcurrently on the same host no longer fails; subnet allocation retries with the next available octet on conflict. (#287) - Live network logging — New
--network-log-liveflag onairut-sandboxstreams proxy log lines to stderr during execution. (#278) - Sandbox CLI output flushing — stdout/stderr now flush after each line, fixing delayed output when piped in CI. (#285)
- Dashboard stop-button fix — API error responses now return JSON bodies, fixing a parse error when stopping tasks during early startup. (#279)
- Image save overwrite fix —
airut-sandbox image saveremoves existing tarballs before writing. (#298) - sandbox-action vN branches — Replaced floating tags with a
v0branch for release distribution, eliminating tag deletion race conditions. (#271)
Cleanups
- Type annotation overhaul — Replaced all bare
typing.Anyandobjectannotations across production and test code with concrete types. AddedJsonValue/JsonDict/YamlValuetype aliases and enabled theruff ANN401lint rule project-wide. (#291, #296, #300, #301, #302) - Dependency updates — Bumped all dev dependency floors and fixed Flask vulnerability (GHSA-68rp-wp8r-4726) and pyOpenSSL vulnerability (GHSA-vp96-hxj8-p424) in proxy deps. (#289, #290)
- Warnings-as-errors — All Python warnings now fail tests; fixed a stale unawaited coroutine. (#295)
- Documentation refresh — Fixed stale specs, broken anchors, and cross-doc duplication. Documented
workflow_dispatchsecurity caveat, ProxyManager GIL thread-safety assumptions, and added CI image caching security analysis. (#292, #297, #305, #306, #308, #309, #310)