Skip to content

Releases: bubbuild/republic

0.5.8

10 May 14:54
f1c3ff0

Choose a tag to compare

What's Changed

  • chore(deps): bump pygments from 2.19.2 to 2.20.0 by @dependabot[bot] in #38
  • chore(deps): bump cryptography from 46.0.5 to 46.0.6 by @dependabot[bot] in #39
  • chore(deps): bump cryptography from 46.0.6 to 46.0.7 by @dependabot[bot] in #40
  • fix(codex): preserve streamed text when completed response has empty output by @sunlei in #37
  • chore(deps): bump any-llm-sdk from 1.7.0 to 1.13.0 by @PsiACE in #41
  • chore(deps-dev): bump pytest from 9.0.2 to 9.0.3 by @dependabot[bot] in #42
  • chore(deps): bump uv from 0.9.29 to 0.11.6 by @dependabot[bot] in #43
  • chore(deps): bump authlib from 1.6.9 to 1.6.11 by @dependabot[bot] in #44
  • fix: write RFC 3339 timestamps to codex auth.json by @Copilot in #46
  • chore: bump version to 0.5.8 by @PsiACE in #47

New Contributors

  • @dependabot[bot] made their first contribution in #38
  • @sunlei made their first contribution in #37
  • @Copilot made their first contribution in #46

Full Changelog: 0.5.7...0.5.8

0.5.7

27 Mar 06:59
d41c197

Choose a tag to compare

What's Changed

  • feat: async context selection and concurrent tool execution by @frostming in #36
  • feat: remove ErrorPayload in favor of RepublicError by @frostming in #35

Full Changelog: 0.5.6...0.5.7

0.5.6

16 Mar 10:26
4dd51dd

Choose a tag to compare

Full Changelog: 0.5.5...0.5.6

0.5.5

16 Mar 06:17
c290be8

Choose a tag to compare

What's Changed

  • feat(auth): add GitHub Copilot OAuth support by @PsiACE in #27
  • refactor: try to make codex/copilot clean by @PsiACE in #28
  • Refactor GitHub Copilot and OpenAI Codex clients to use unified provider structure by @frostming in #29
  • fix(responses): handle completed metadata-only outputs by @PsiACE in #30

Full Changelog: 0.5.4...0.5.5

0.5.4

09 Mar 04:40
c3d2c1f

Choose a tag to compare

What's Changed

  • fix: treat max_retries as retry count by @Andy963 in #26
  • feat: add query filters for text matching and date range in TapeQuery by @frostming in #24
  • OpenAI codex oauth integration by @niyue in #23
  • fix(responses): restore parity with chat completions and refactor parsing by @PsiACE in #21

New Contributors

Full Changelog: 0.5.3...0.5.4

0.5.3

05 Mar 10:51
d8ba90e

Choose a tag to compare

What's Changed

  • chore(meta): migrate links to bubbuild/republic and align attribution by @PsiACE in #20

Full Changelog: 0.5.2...0.5.3

0.5.2

01 Mar 06:32
f0ccc1a

Choose a tag to compare

Full Changelog: 0.5.1...0.5.2

0.5.1

01 Mar 06:20
cc1e4e4

Choose a tag to compare

Full Changelog: 0.5.0...0.5.1

Release v0.5.0: Async tape storage

01 Mar 06:02
2d330aa

Choose a tag to compare

Key Changes

1. Added opt-in Responses API mode

LLM now supports use_responses: bool = False for explicit Responses mode.

  • When enabled (and supported by the provider), non-stream requests use the Responses API.
  • Added internal conversion from chat/tool history to Responses input items.
  • Tool-call extraction now supports both completion-style and responses-style payloads.

Files involved:

  • src/republic/llm.py
  • src/republic/core/execution.py
  • src/republic/clients/chat.py
  • tests/test_responses_handling.py

2. Tape subsystem refactored for async support

Tape management now supports both sync and async paths, including async storage and context lifecycle.

  • Added AsyncTapeStore protocol.
  • Added AsyncTapeStoreAdapter to wrap sync stores for async usage.
  • Added AsyncTapeManager for async read/write/handoff/record flows.
  • TapeQuery is now generic and supports await query.all() for async stores.
  • Tape session now provides async tape methods: read_messages_async, append_async, reset_async, handoff_async.

Files involved:

  • src/republic/tape/store.py
  • src/republic/tape/manager.py
  • src/republic/tape/query.py
  • src/republic/tape/session.py
  • src/republic/tape/__init__.py

3. Expanded top-level exports for async tape types

republic top-level exports now include:

  • AsyncTapeManager
  • AsyncTapeStore

Files involved:

  • src/republic/__init__.py

4. Reliability and release pipeline fixes

  • Fixed TapeEntry.copy() to preserve timestamp during copies.
  • Fixed docs deployment workflow permissions by adding contents: write to deploy-docs and updating actions/checkout version.

Files involved:

  • src/republic/tape/entries.py
  • .github/workflows/on-release-main.yml

Behavior Changes and Upgrade Notes

AsyncTapeStore with sync APIs

When tape_store is an AsyncTapeStore, sync APIs with tape=... raise ErrorPayload.

Use async APIs instead:

  • chat_async
  • tool_calls_async
  • run_tools_async
  • stream_async
  • stream_events_async

LLM direct tape helpers moved behind session objects

LLM no longer directly exposes:

  • tapes()
  • handoff(...)
  • read_messages(...)
  • query(...)
  • reset_tape(...)

Migration: use operations on the session returned by llm.tape("<name>").

Documentation Updates

  • docs/guides/tape.md now includes Async Tape Store usage and sync/async behavior rules.

Commit List

  • 2d330aa fix: add permissions for contents write in deploy-docs job
  • edd9400 chore: bump version to 0.5.0 in pyproject.toml, about.py, and uv.lock
  • 4ffea2d feat: Refactor tape management to support asynchronous operations (#19)
  • 04525fb fix: import time and include timestamp in TapeEntry copy method
  • b9069a5 feat: add opt-in Responses API mode (#18)

Upgrade Checklist

  • If you use an async tape backend, migrate tape-related calls to async APIs.
  • If you relied on removed LLM tape helpers, migrate to llm.tape(name).
  • Enable Responses behavior explicitly with LLM(..., use_responses=True) when needed.

0.4.1

27 Feb 02:50
f5afe26

Choose a tag to compare

What's Changed

  • refactor tape query API and document read_entries deprecation by @frostming in #17

Full Changelog: 0.4.0...0.4.1