chore(release): prepare v0.8.39#1734
Conversation
…ouping The v0.8.38 upgrade dramatically changed two user-visible behaviors that were not intended as regressions: - The /model picker was reworked (#1201/#1632) to make a blocking network fetch on open and replace the curated tier list with the raw provider catalog. Revert model_picker.rs and the OpenModelPicker handler to the v0.8.37 instant curated picker. The /models command still lists the live catalog. - #1617 rekeyed the approval cache to an exact full-argument fingerprint, which also dropped the v0.8.37 arity-aware command-family grouping for "approve for session". Reintroduce build_approval_grouping_key (the lossy v0.8.37 logic) for approvals while keeping the exact key for denials, so denying one call no longer over-blocks later differing calls. https://claude.ai/code/session_01NDuRxM56o17SE7SDLcTFYT
There was a problem hiding this comment.
Code Review
This pull request bumps the project version to 0.8.39 and introduces a wide range of bug fixes and usability enhancements. Key improvements include reverting the /model picker to a curated list for instant access, refining session approvals to group by command family while maintaining exact denials, and ensuring runtime system prompt overrides persist through context refreshes. Additionally, the update fixes Docker first-run directory permissions, enhances history compaction to prevent template failures by retaining user text, and improves TUI navigation with mouse-wheel support in the pager and better multiline handling in the composer. Other fixes address macOS system theme detection, rlm_open validation, and ACP JSON-RPC ID compatibility. I have no feedback to provide as there were no review comments to assess.
Bump workspace, inter-crate, and npm package versions 0.8.38 -> 0.8.39. Roll CHANGELOG [Unreleased] into [0.8.39] with all fixes: - Revert v0.8.38 /model picker rework (back to instant curated picker) - Restore approval grouping (lossy v0.8.37 logic for approvals, exact key for denials) - Thinking-only turn surface fix (#1727) - ACP server JSON-RPC id stringification (#1696) - Chat client: reasoning_content for generic providers (#1673) - Compaction: user text query preservation (#1704) - Engine: system prompt override survival (#1688) - Pager: G/End overshoot fix (#1706), mouse scroll (#1716) - Composer: scroll with text (#1677), multiline arrows (#1721) - macOS system theme detection (#1670) - rlm_open blank source fields (#1712) - Terminal resize paging fix (#1724) - Docker first-run permission (#1684) - README Rust 1.88+ requirement note (#1718) Tests: 3149 passed, 0 failed (deepseek-tui crate) clippy: clean on --all-targets --all-features
6cc0cdb to
373fbd9
Compare
[0.8.39] - 2026-05-17
Fixed
ThreadStoreinitialized before startup opens persisted thread state, with aregression test to prevent moving it below its first use.
/modelpicker opens instantly with the curated list again. Revertedthe v0.8.38 live-catalog rework: the picker no longer makes a blocking
network call on open and once again shows the curated
auto/deepseek-v4-pro/deepseek-v4-flashrows. The/modelscommand stilllists the live provider catalog.
are keyed by a lossy, arity-aware fingerprint once more, so approving
cargo buildalso coverscargo build --release. Denials keep the exactper-call fingerprint from Bug in deny tool use #1617, so denying one call no longer over-blocks
later, different calls to the same tool.
pre-creates
/home/deepseek/.deepseekwithdeepseekownership so thedocumented named-volume launch can create runtime thread state on first use
(Docker:
Permission denied (os error 13)creating .deepseek/tasks/runtime/threads on first run #1684).created with a
system_promptoverride now keep that prompt throughmode/context refreshes before the model request is built (Runtime API: system_prompt on POST /v1/threads is accepted and stored but discarded before the model request #1688).
compaction now pins the latest user text message when the retained tail only
contains tool calls/results, avoiding OpenAI-compatible Jinja template
failures on the next request (fix(compaction): preserve usr txt query to prevent Jinja template crash #1704).
Gor End in the pagerno longer overshoots the render clamp, so
k/Up scrolls upward immediatelyafterward, and mouse wheels now scroll pager overlays directly (fix(pager): G/End overshoot makes k/Up unresponsive after jump to bottom #1706,
fix(tui): add mouse scroll support to pager overlay #1716).
composer_arrows_scrollis enabled, Up/Down now scroll the transcript evenwith text in the composer instead of replacing the draft with input history
(输入框有文字的情况下滚动鼠标滚轮无法上翻历史对话,只能切换输入历史 #1677).
move the cursor within multiline drafts before falling back to input history,
while single-line mouse-wheel-as-arrow scrolling remains unchanged (Multiline composer: Up/Down should navigate within input text, not jump to history #1721).
reasoning_contentstreams no longer corrupt text output.Generic OpenAI-compatible providers that stream answer text in
reasoning_contentnow render it as normal text unless the selected provideris one whose reasoning-content semantics are supported (reasoning_content 字段导致第三方中转 OpenAI格式 兼容 API 显示严重错乱 #1673).
COLORFGBGismissing or unusable,
theme = "system"now falls back to macOS appearancedetection and treats a missing
AppleInterfaceStylekey as Light mode(theme = "system" detects dark on macOS Light mode with Ghostty #1670).
rlm_openaccepts schema-filled blank source fields. Emptyfile_path,content, andurlstrings now count as absent, so calls that provide onereal source no longer fail the exactly-one-source validator (bug(rlm_open): tool schema requires content/file_path/url simultaneously, causing "provide exactly one" validation f ailure #1712).
resize, PageUp/PageDown now use the resized viewport height instead of
falling back to one-line jumps before the next render (fix: preserve scroll position across terminal resize #1724).
serve --acpnow returns stringids even when clients send numeric ids, matching Zed's stricter ACP client
expectations (ACP server JSON-RPC id field type mismatch with Zed editor #1696).
Thanks
Thanks to Matt Van Horn (@mvanhorn) for the
Docker first-run permission fix in #1699 and the runtime system-prompt
regression tests harvested from #1702. Thanks to Kristopher Clark
(@krisclarkdev) for the compaction
user-query preservation fix in #1704. Thanks to Stephen Xu
(@wlon) for the pager jump-bottom fix in #1706.
Thanks to tdccccc (@tdccccc) for the
composer scroll fix in #1715 and pager mouse-wheel support in #1716.
Thanks to Paulo Aboim Pinto
(@aboimpinto) for the multiline composer
arrow navigation tests harvested from #1719. Thanks to LittleBlacky
(@LittleBlacky) for the provider-gated
reasoning_contentstream fix in #1680.Thanks to Eosin Ai (@Aitensa) for the macOS
system appearance fallback in #1674.
Thanks to Anaheim (@AnaheimEX) for the
rlm_openschema validation report in #1712.Thanks to THatch26 (@THatch26) for the
terminal resize paging fix in #1724.
Thanks to Alvin (@alvin1) for the Zed ACP id
compatibility report in #1696.