v1.1.0
v1.1.0
This release builds on v1.0.0 (session-first loops, sandbox-as-backend, session graph) with four user-visible feature surfaces, two architecture improvements, and a project-wide CI/lint overhaul.
Most of what's below shipped thanks to community contributions — thank you 🙏
Highlights
Community contributions
Thanks to @Enderfga for a sustained run of feature work:
- Multi-provider LLM support — Anthropic via
provider_kind="anthropic", Azure OpenAI env-var fallbacks, registry-based chat-client dispatch so adding another vendor is aregister_chat_client(kind, factory)call. - Streaming completions — opt in via
run_session_loop(..., on_event=...); per-delta callbacks for UI consumers. - Session persistence — append-only JSONL under
~/.openrath/sessions/<uuid>.jsonl. Every chunk is flushed as it lands, sokill -9mid-loop loses at most one partial line. Opt in viarun_session_loop(..., persist=True). - Sandbox identity persistence — stable working dirs for
local, remote-id pinning foropensandbox, both under~/.openrath/sandboxes/. Groundwork for cross-process reattach. - LLM API fault-tolerance — transient-error retries, cumulative token-usage aggregation, per-session budget guard (
provider.budget_total_tokens+on_budget_exceededcallback, latched to the first cap-crossing). - MCP stdio adapter — wire an MCP server in as a
FlowToolCall.
Thanks to @xy3xy3 for Chinese README and language-switch links.
Thanks to @NorthSecond for the infrastructure pass:
- GitHub Actions CI — full matrix (lint / mypy / pytest 3.10–3.13 / opensandbox / docs / build / shellcheck) with pre-commit hooks.
- flake8 → ruff migration with auto-fix and format-check enforcement.
From the OpenRath team @Tokisakix
- Refcount-shared sandboxes — a sandbox can now be held by multiple sessions; close happens when the last reference drops, not when the first session ends. Improves reuse across fork/merge workflows.
- Session
mergeprimitive — first-class atomic merge on the session graph, complementingfork.
Supporting refactors and fixes
- Unified streaming loop;
BackendSandbox.refcountpublic read-only property; shared helpers extracted (parse_tool_arguments,tool_failure_from,resolve_executor,spec_json). - Streaming + Anthropic now fails fast at setup instead of deep inside dispatch.
- Compress works when
user_sessionhas no sandbox. max_tool_roundstruncation now warns and stamps lineage.- OpenSandbox
_code_runreliably surfaces Python tracebacks (the v1.0.2 code-interpreter image doesn't always populateExecution.error). - Local backend normalizes
OSErrorin_files_write/_files_exists.
Docs
- Docs site translated to English; new research_transformer example; reference table for LLM integration points.
Install
pip install --upgrade openrath
# optional sandbox backend
pip install --upgrade "openrath[opensandbox]"Compatibility
- No public-API breaking changes vs. v1.0.0.
- Python 3.10 – 3.13 supported.
Full changelog: v1.0.0...v1.1.0