v0.16.1
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 ductorcan self-upgrade —/upgradenow detects uv tool installs and runs uv-native upgrade commands instead ofpython -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.1This fixes /upgrade for users installed with:
uv tool install ductorVerification
pytest— 3639 passedruff check .ruff format --check ductor_bot tests pyproject.tomlmypy ductor_botpython -m ductor_bot.i18n.checkpython -m json.tool config.example.jsonpython -m buildpython -m ductor_bot --version→ductor 0.16.1- Real Codex smoke test with
gpt-5.5returnedductor-gpt-5.5-ok
Full changelog: v0.16.0...v0.16.1