Skip to content

Track upstream ductor release v0.19.0 #14

Description

@github-actions

Upstream published a new release: v0.19.0.

Suggested follow-up

  1. Review the upstream changelog and commits.
  2. Decide which changes need to be ported into this fork.
  3. Track any fork-specific conflicts before merging or cherry-picking.

Upstream release notes

ductor v0.19.0

The biggest community release so far: Slack becomes ductor's third chat transport, reasoning effort gets a first-class /effort command, and a wave of contributor PRs makes background tasks, cron delivery, and Codex noticeably more reliable. Ten merged PRs, four squashed bugs — thank you all. 💜

TL;DR

  • Slack transport — run your agents from Slack (Socket Mode, wizard setup, native streaming, all 8 languages). Install with the slack extra.
  • /effort — set reasoning effort per chat/topic, now for Claude (--effort, including max) and Codex. Every topic keeps its own level.
  • Topic-scoped process kills/model, /new, /reset, and error recovery no longer abort other topics' in-flight work or background tasks.
  • Background tasks hardened — completed results survive cancel races, resume can't overlap a live run, DUCTOR_TASK_ID finally reaches task subprocesses, and finished-task history prunes itself.
  • Cron delivery tracking — if Telegram is down when a cron result lands, you'll see it (last: success (delivery failed)) and the full result is preserved for resend instead of vanishing.
  • Codex prompts via stdin — no more Argument list too long, and prompts stay out of /proc and logs. Codex resumes also re-assert your selected model and effort now.
  • append_system_prompt_files — inject your own files (glossary, style guide, …) into the system prompt on every turn.
  • Selector polish — model and effort keyboards render two buttons per row instead of one unreadable line.

Slack transport (PleasePrompto#114)

@victor-develop battle-tested this in a long-lived fork and backported it upstream: a full Slack transport speaking the same orchestrator as Telegram and Matrix — Socket Mode (no public webhook needed), onboarding wizard integration, thread-aware routing, media, and Slack-native streaming with graceful fallback. Config mirrors the Matrix pattern (pip install "ductor[slack]", then ductor onboarding). Closes PleasePrompto#165.

Per-session reasoning effort (PleasePrompto#164)

@ryuhaneul brought effort to parity with model selection: /effort (or the thinking-level step in /model) applies to the current chat or topic only, the main chat sets the global default, and /status shows the active level. Claude gains --effort support for the first time (lowmax); Codex keeps -c model_reasoning_effort — now actually switchable at runtime.

Reliability

Codex

Also in this release

Merged PRs

And thanks to @Tony-ooo, @SpriteOvO, and @abhisheksoni27 for the sharp bug reports and the Slack nudge. 🙏

Verification

  • pytest -p xdist -n 8 — full suite green (4,000+ tests, incl. the new Slack suite)
  • ruff format --check ., ruff check . — clean
  • mypy ductor_bot — clean (251 files, strict)
  • Live smoke test against a real Telegram bot: chat/streaming, /model, /effort (flag verified in CLI argv), background task env, Codex stdin path
  • ductor --versionductor 0.19.0

Full changelog: PleasePrompto/ductor@v0.18.2...v0.19.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    upstream-releaseTracks upstream PleasePrompto/ductor releases

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions