Skip to content

v1.1.0

Choose a tag to compare

@Tokisakix Tokisakix released this 16 May 10:40
· 78 commits to main since this release

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 a register_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, so kill -9 mid-loop loses at most one partial line. Opt in via run_session_loop(..., persist=True).
  • Sandbox identity persistence — stable working dirs for local, remote-id pinning for opensandbox, 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_exceeded callback, 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 merge primitive — first-class atomic merge on the session graph, complementing fork.

Supporting refactors and fixes

  • Unified streaming loop; BackendSandbox.refcount public 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_session has no sandbox.
  • max_tool_rounds truncation now warns and stamps lineage.
  • OpenSandbox _code_run reliably surfaces Python tracebacks (the v1.0.2 code-interpreter image doesn't always populate Execution.error).
  • Local backend normalizes OSError in _files_write / _files_exists.

Docs

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