Skip to content

Commit eeccf7d

Browse files
authored
chore(release): prepare v0.8.39
chore(release): prepare v0.8.39
2 parents f0a7e15 + 373fbd9 commit eeccf7d

38 files changed

Lines changed: 1028 additions & 208 deletions

CHANGELOG.md

Lines changed: 76 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,86 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8-
## [Unreleased]
8+
## [0.8.39] - 2026-05-17
99

1010
### Fixed
1111

1212
- **Feishu/Lark bridge startup order is guarded.** The bridge now keeps
1313
`ThreadStore` initialized before startup opens persisted thread state, with a
1414
regression test to prevent moving it below its first use.
15+
- **`/model` picker opens instantly with the curated list again.** Reverted
16+
the v0.8.38 live-catalog rework: the picker no longer makes a blocking
17+
network call on open and once again shows the curated `auto` /
18+
`deepseek-v4-pro` / `deepseek-v4-flash` rows. The `/models` command still
19+
lists the live provider catalog.
20+
- **"Approve for session" groups by command family again.** Session approvals
21+
are keyed by a lossy, arity-aware fingerprint once more, so approving
22+
`cargo build` also covers `cargo build --release`. Denials keep the exact
23+
per-call fingerprint from #1617, so denying one call no longer over-blocks
24+
later, different calls to the same tool.
25+
- **Docker first-run state directories are writable.** The image now
26+
pre-creates `/home/deepseek/.deepseek` with `deepseek` ownership so the
27+
documented named-volume launch can create runtime thread state on first use
28+
(#1684).
29+
- **Runtime API system prompt overrides survive the first turn.** Threads
30+
created with a `system_prompt` override now keep that prompt through
31+
mode/context refreshes before the model request is built (#1688).
32+
- **Compaction keeps a user text query in tool-heavy histories.** Automatic
33+
compaction now pins the latest user text message when the retained tail only
34+
contains tool calls/results, avoiding OpenAI-compatible Jinja template
35+
failures on the next request (#1704).
36+
- **Pager jumps land at the visible bottom.** Pressing `G` or End in the pager
37+
no longer overshoots the render clamp, so `k`/Up scrolls upward immediately
38+
afterward, and mouse wheels now scroll pager overlays directly (#1706,
39+
#1716).
40+
- **Mouse-wheel-as-arrow scrolling preserves composer drafts.** When
41+
`composer_arrows_scroll` is enabled, Up/Down now scroll the transcript even
42+
with text in the composer instead of replacing the draft with input history
43+
(#1677).
44+
- **Multiline composer arrows move between input lines.** Plain Up/Down now
45+
move the cursor within multiline drafts before falling back to input history,
46+
while single-line mouse-wheel-as-arrow scrolling remains unchanged (#1721).
47+
- **Third-party `reasoning_content` streams no longer corrupt text output.**
48+
Generic OpenAI-compatible providers that stream answer text in
49+
`reasoning_content` now render it as normal text unless the selected provider
50+
is one whose reasoning-content semantics are supported (#1673).
51+
- **macOS system theme detection recognizes Light mode.** When `COLORFGBG` is
52+
missing or unusable, `theme = "system"` now falls back to macOS appearance
53+
detection and treats a missing `AppleInterfaceStyle` key as Light mode
54+
(#1670).
55+
- **`rlm_open` accepts schema-filled blank source fields.** Empty `file_path`,
56+
`content`, and `url` strings now count as absent, so calls that provide one
57+
real source no longer fail the exactly-one-source validator (#1712).
58+
- **Resize keeps transcript paging usable immediately.** After a terminal
59+
resize, PageUp/PageDown now use the resized viewport height instead of
60+
falling back to one-line jumps before the next render (#1724).
61+
- **ACP responses stringify JSON-RPC ids.** `serve --acp` now returns string
62+
ids even when clients send numeric ids, matching Zed's stricter ACP client
63+
expectations (#1696).
64+
65+
### Thanks
66+
67+
Thanks to **Matt Van Horn ([@mvanhorn](https://github.com/mvanhorn))** for the
68+
Docker first-run permission fix in #1699 and the runtime system-prompt
69+
regression tests harvested from #1702. Thanks to **Kristopher Clark
70+
([@krisclarkdev](https://github.com/krisclarkdev))** for the compaction
71+
user-query preservation fix in #1704. Thanks to **Stephen Xu
72+
([@wlon](https://github.com/wlon))** for the pager jump-bottom fix in #1706.
73+
Thanks to **tdccccc ([@tdccccc](https://github.com/tdccccc))** for the
74+
composer scroll fix in #1715 and pager mouse-wheel support in #1716.
75+
Thanks to **Paulo Aboim Pinto
76+
([@aboimpinto](https://github.com/aboimpinto))** for the multiline composer
77+
arrow navigation tests harvested from #1719. Thanks to **LittleBlacky
78+
([@LittleBlacky](https://github.com/LittleBlacky))** for the provider-gated
79+
`reasoning_content` stream fix in #1680.
80+
Thanks to **Eosin Ai ([@Aitensa](https://github.com/Aitensa))** for the macOS
81+
system appearance fallback in #1674.
82+
Thanks to **Anaheim ([@AnaheimEX](https://github.com/AnaheimEX))** for the
83+
`rlm_open` schema validation report in #1712.
84+
Thanks to **THatch26 ([@THatch26](https://github.com/THatch26))** for the
85+
terminal resize paging fix in #1724.
86+
Thanks to **Alvin ([@alvin1](https://github.com/alvin1))** for the Zed ACP id
87+
compatibility report in #1696.
1588

1689
## [0.8.38] - 2026-05-15
1790

@@ -4291,7 +4364,8 @@ Welcome — and thank you.
42914364
- Hooks system and config profiles
42924365
- Example skills and launch assets
42934366

4294-
[Unreleased]: https://github.com/Hmbown/DeepSeek-TUI/compare/v0.8.38...HEAD
4367+
[Unreleased]: https://github.com/Hmbown/DeepSeek-TUI/compare/v0.8.39...HEAD
4368+
[0.8.39]: https://github.com/Hmbown/DeepSeek-TUI/compare/v0.8.38...v0.8.39
42954369
[0.8.38]: https://github.com/Hmbown/DeepSeek-TUI/compare/v0.8.37...v0.8.38
42964370
[0.8.37]: https://github.com/Hmbown/DeepSeek-TUI/compare/v0.8.36...v0.8.37
42974371
[0.8.36]: https://github.com/Hmbown/DeepSeek-TUI/compare/v0.8.35...v0.8.36

Cargo.lock

Lines changed: 14 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ default-members = ["crates/cli", "crates/app-server", "crates/tui"]
1919
resolver = "2"
2020

2121
[workspace.package]
22-
version = "0.8.38"
22+
version = "0.8.39"
2323
edition = "2024"
2424
# Rust 1.88 stabilized `let_chains` in `if`/`while` conditions, which the
2525
# codebase relies on extensively. Cargo enforces this so users on older

Dockerfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
7474

7575
# Non-root user with explicit UID/GID for filesystem ownership clarity.
7676
RUN groupadd --gid 1000 deepseek \
77-
&& useradd --create-home --shell /bin/bash --uid 1000 --gid 1000 deepseek
77+
&& useradd --create-home --shell /bin/bash --uid 1000 --gid 1000 deepseek \
78+
&& install -d -m 0700 -o deepseek -g deepseek /home/deepseek/.deepseek
7879
USER deepseek
7980
WORKDIR /home/deepseek
8081

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ agent runtime itself.
1818
# matching prebuilt Rust binaries from GitHub Releases.
1919
npm install -g deepseek-tui
2020

21-
# 2. Cargo — no Node needed.
21+
# 2. Cargo — no Node needed. Requires Rust 1.88+ (the crates use the
22+
# 2024 edition; older toolchains fail with "feature `edition2024` is
23+
# required"). Run `rustup update` first, or use a non-Cargo path below.
2224
cargo install deepseek-tui-cli --locked # `deepseek` (entry point)
2325
cargo install deepseek-tui --locked # `deepseek-tui` (TUI binary)
2426

crates/agent/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ repository.workspace = true
77
description = "Model/provider registry and fallback strategy for DeepSeek workspace architecture"
88

99
[dependencies]
10-
deepseek-config = { path = "../config", version = "0.8.38" }
10+
deepseek-config = { path = "../config", version = "0.8.39" }
1111
serde.workspace = true

crates/app-server/Cargo.toml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ description = "Codex-style app-server transport for DeepSeek workspace architect
1010
anyhow.workspace = true
1111
axum.workspace = true
1212
clap.workspace = true
13-
deepseek-agent = { path = "../agent", version = "0.8.38" }
14-
deepseek-config = { path = "../config", version = "0.8.38" }
15-
deepseek-core = { path = "../core", version = "0.8.38" }
16-
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.38" }
17-
deepseek-hooks = { path = "../hooks", version = "0.8.38" }
18-
deepseek-mcp = { path = "../mcp", version = "0.8.38" }
19-
deepseek-protocol = { path = "../protocol", version = "0.8.38" }
20-
deepseek-state = { path = "../state", version = "0.8.38" }
21-
deepseek-tools = { path = "../tools", version = "0.8.38" }
13+
deepseek-agent = { path = "../agent", version = "0.8.39" }
14+
deepseek-config = { path = "../config", version = "0.8.39" }
15+
deepseek-core = { path = "../core", version = "0.8.39" }
16+
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.39" }
17+
deepseek-hooks = { path = "../hooks", version = "0.8.39" }
18+
deepseek-mcp = { path = "../mcp", version = "0.8.39" }
19+
deepseek-protocol = { path = "../protocol", version = "0.8.39" }
20+
deepseek-state = { path = "../state", version = "0.8.39" }
21+
deepseek-tools = { path = "../tools", version = "0.8.39" }
2222
serde.workspace = true
2323
serde_json.workspace = true
2424
tokio.workspace = true

crates/cli/Cargo.toml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ path = "src/main.rs"
1414
anyhow.workspace = true
1515
clap.workspace = true
1616
clap_complete.workspace = true
17-
deepseek-agent = { path = "../agent", version = "0.8.38" }
18-
deepseek-app-server = { path = "../app-server", version = "0.8.38" }
19-
deepseek-config = { path = "../config", version = "0.8.38" }
20-
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.38" }
21-
deepseek-mcp = { path = "../mcp", version = "0.8.38" }
22-
deepseek-secrets = { path = "../secrets", version = "0.8.38" }
23-
deepseek-state = { path = "../state", version = "0.8.38" }
17+
deepseek-agent = { path = "../agent", version = "0.8.39" }
18+
deepseek-app-server = { path = "../app-server", version = "0.8.39" }
19+
deepseek-config = { path = "../config", version = "0.8.39" }
20+
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.39" }
21+
deepseek-mcp = { path = "../mcp", version = "0.8.39" }
22+
deepseek-secrets = { path = "../secrets", version = "0.8.39" }
23+
deepseek-state = { path = "../state", version = "0.8.39" }
2424
chrono.workspace = true
2525
dirs.workspace = true
2626
serde.workspace = true

crates/config/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ description = "Config schema and precedence model for DeepSeek workspace archite
88

99
[dependencies]
1010
anyhow.workspace = true
11-
deepseek-secrets = { path = "../secrets", version = "0.8.38" }
11+
deepseek-secrets = { path = "../secrets", version = "0.8.39" }
1212
dirs.workspace = true
1313
serde.workspace = true
1414
toml.workspace = true

crates/core/Cargo.toml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ description = "Core runtime boundaries for DeepSeek workspace architecture"
99
[dependencies]
1010
anyhow.workspace = true
1111
chrono.workspace = true
12-
deepseek-agent = { path = "../agent", version = "0.8.38" }
13-
deepseek-config = { path = "../config", version = "0.8.38" }
14-
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.38" }
15-
deepseek-hooks = { path = "../hooks", version = "0.8.38" }
16-
deepseek-mcp = { path = "../mcp", version = "0.8.38" }
17-
deepseek-protocol = { path = "../protocol", version = "0.8.38" }
18-
deepseek-state = { path = "../state", version = "0.8.38" }
19-
deepseek-tools = { path = "../tools", version = "0.8.38" }
12+
deepseek-agent = { path = "../agent", version = "0.8.39" }
13+
deepseek-config = { path = "../config", version = "0.8.39" }
14+
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.39" }
15+
deepseek-hooks = { path = "../hooks", version = "0.8.39" }
16+
deepseek-mcp = { path = "../mcp", version = "0.8.39" }
17+
deepseek-protocol = { path = "../protocol", version = "0.8.39" }
18+
deepseek-state = { path = "../state", version = "0.8.39" }
19+
deepseek-tools = { path = "../tools", version = "0.8.39" }
2020
serde_json.workspace = true
2121
uuid.workspace = true

0 commit comments

Comments
 (0)