Skip to content

v0.16.1

Choose a tag to compare

@PleasePrompto PleasePrompto released this 25 Apr 17:20
· 79 commits to main since this release

ductor v0.16.1

Patch release for Telegram streaming, heartbeat/session locking, and uv-based self-upgrades.

TL;DR

  • Telegram final answers are reliable again — reasoning-only or tool-heavy streaming turns no longer suppress the final answer.
  • Heartbeat no longer leaves chats stuck busy — heartbeat turns now serialize through the shared session lock, and post-stream memory maintenance no longer re-enters the active Telegram lock.
  • uv tool install ductor can self-upgrade/upgrade now detects uv tool installs and runs uv-native upgrade commands instead of python -m pip.
  • Telegram reasoning/tool visibility controls — merged PR #111 by @takaok5 for separate reasoning stream, tool progress, and thinking-indicator controls.
  • Packaged example config is valid JSON — removed trailing commas and excluded the example JSON from Ruff auto-formatting.

Fixes

Telegram reasoning stream UX (#111)

Merged contributor PR #111 by @takaok5.

  • Reasoning/thinking deltas now have their own callback path.
  • Telegram can show reasoning separately from the lightweight thinking indicator.
  • Tool-progress visibility and thinking-indicator visibility are configurable.
  • If only reasoning/tool activity streamed during a turn, ductor still sends the final answer.
  • Invalid explicit Codex reasoning-effort overrides now fail visibly instead of being silently dropped.

Heartbeat chat lock recovery (#115)

Heartbeat execution now uses the shared per-session LockPool, so it cannot race normal Telegram ingress on the same chat/topic.

The related memory-maintenance path was also adjusted: streaming turns schedule post-turn memory flush/compaction in the background, behind the same lock, instead of awaiting it while Telegram still holds the lock. This avoids the self-deadlock pattern where no provider process is running, the queue is empty, but the chat still appears permanently busy.

uv self-upgrade support (#112)

Install detection now recognizes uv tool environments from sys.prefix / sys.executable, and the updater builds uv-native commands:

uv tool upgrade ductor
uv tool upgrade --reinstall ductor==0.16.1

This fixes /upgrade for users installed with:

uv tool install ductor

Verification

  • pytest — 3639 passed
  • ruff check .
  • ruff format --check ductor_bot tests pyproject.toml
  • mypy ductor_bot
  • python -m ductor_bot.i18n.check
  • python -m json.tool config.example.json
  • python -m build
  • python -m ductor_bot --versionductor 0.16.1
  • Real Codex smoke test with gpt-5.5 returned ductor-gpt-5.5-ok

Full changelog: v0.16.0...v0.16.1