docs(changelog,readme): add [0.8.29] entry + What's New sections

CHANGELOG.md gains a `[0.8.29]` section above `[0.8.28]` covering
the scroll-demon structural fix, the #1395 wrong-project Ctrl+R
fix, MCP HTTP proxy support, MCP discovery skip-malformed, note
commands, AGENTS.md merge, CJK Auto routing, sync-cnb hardening,
and the 4-PR test coverage batch.

README.md and README.zh-CN.md "What's New" sections rewritten to
match (v0.8.27 → v0.8.29). The `prompts::tests::changelog_entry_exists_for_current_package_version`
integration test pins the CHANGELOG-must-have-current-version
invariant.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hunter Bown
2026-05-10 21:01:12 -05:00
parent 865db62487
commit 3bac8d4a1c
3 changed files with 217 additions and 96 deletions
+107
View File
@@ -5,6 +5,113 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.8.29] - 2026-05-11
A maintenance release anchored by a regression fix for the
"scroll demon" (#1085 class, re-introduced by v0.8.27's flicker
patch) and a wrong-project session-restore bug (#1395). Plus 12
community PRs covering MCP transport, prompt steering, auto-routing
language coverage, web-search SERP filtering, and broad test
coverage additions.
### Fixed
- **Scroll demon — alt-screen no longer drifts under parallel
sub-agent load** (#1085 regression). The v0.8.27 flicker fix
dropped the `\x1b[2J\x1b[3J` deep-clear from the viewport-reset
path, which had been silently masking three `eprintln!` sites
inside the sub-agent and network-policy modules. Each leak
scrolled the alt-screen up by one row while ratatui's diff
renderer remained convinced its model matched reality. Three
layers of defence now ship together: a `tracing-subscriber`
writing to `~/.deepseek/logs/tui-YYYY-MM-DD.log`, an fd-level
`dup2` stderr redirect for the alt-screen lifetime (Unix only;
Windows follow-up tracked), and module-level
`#![deny(clippy::print_stdout, clippy::print_stderr)]` on
`tools/`, `core/`, `tui/`, `runtime_threads.rs`, and
`network_policy.rs`. The three known leak sites
(`subagent::persist_state_best_effort`,
`subagent::new_shared_subagent_manager`, `network_policy::record`)
now route through `tracing::warn!` with structured fields.
- **`Ctrl+R` session-restore picker is workspace-scoped** (#1395,
PR #1397 from **@linzhiqin2003**). `SessionPickerView::new`
previously listed every saved session on disk sorted globally —
so opening DeepSeek-TUI in Project B and pressing `Ctrl+R` could
hand back Project A's last conversation. The picker now filters
by current workspace, with a fallback hint when no in-workspace
sessions exist.
- **MCP discovery survives malformed items** (PR #1410 from
**@Liu-Vince**). The `tools/list`, `resources/list`,
`resources/templates/list`, and `prompts/list` walks previously
did `serde_json::from_value::<Vec<…>>(…).unwrap_or_default()`,
which silently discarded the entire page when any single entry
was misshapen. Each list now iterates per-item, skipping
malformed entries with a `tracing::debug!` instead of dropping
the rest of the catalogue. Composes with the v0.8.x pagination
loop landed for #1256.
- **Web search drops spam-stuffed SERPs** (#964, PR #1396 from
**@linzhiqin2003**). The Bing / DDG fallback paths now filter
the SEO-farm domains that were poisoning quick lookups.
- **Language directive: `reasoning_content` follows the user's
message language** (#1118, PR #1398 from **@linzhiqin2003**) —
previously the project context's inferred `lang` could override
the latest user message, leading to English thinking for a
Chinese turn.
### Added
- **MCP HTTP transport honors `HTTP(S)_PROXY` / `NO_PROXY`** (#1408
from **@hlx98007**). Reqwest 0.13 does not auto-detect proxy env
vars by default, so MCP HTTP connections were bypassing the
proxy that every other tool on the box (curl, npm, git, …) was
using. Connections behind corporate egress proxies and
China-mainland Clash / Shadowsocks tunnels now work transparently.
Malformed `HTTPS_PROXY` values log a `tracing::warn!` and the
connection proceeds without a proxy rather than failing the MCP
attach.
- **Note management slash commands** (PR #1407 from
**@reidliu41**). `/note add`, `/note list`, and friends for
persistent maintainer-style notes inside the TUI, backed by
`~/.deepseek/notes/`.
- **Header surfaces the runtime version chip.** A `v0.8.29` tag
sits in the header's right cluster after the provider / effort /
Live / context chips. Styled with `palette::TEXT_HINT` so it
reads behind the streaming indicators. Drops first under tight
terminal width.
- **Global `~/.deepseek/AGENTS.md` now merges with project
AGENTS.md** (#1157, PR #1399 from **@linzhiqin2003**) instead of
being shadowed when a workspace ships its own.
- **Auto-routing recognises CJK debug / search keywords** (PRs
#1401 and #1402 from **@linzhiqin2003**) — `--model auto` and
the reasoning-effort picker correctly route Chinese / Japanese
technical queries that previously fell through to the generic
baseline.
### Security
- **`sync-cnb.yml` workflow hardened** (CodeQL finding from
v0.8.28). Adds explicit `permissions: contents: read`
(least-privilege), bumps `actions/checkout` v3 → v4, and
narrows the trigger from `on: [push]` to `on: push.branches:
[main]` + `tags: ['v*']`. Feature branches no longer mirror to
CNB; only `main` and tagged releases do.
### Internal
- **+438 LOC of new test coverage** across four PRs from
**@linzhiqin2003**: `error_taxonomy::classify_error_message`
and Display impls (#1403), `parse_pages_arg` edge cases (#1404),
`optional_search_max_results` precedence (#1405), and
`sanitize_stream_chunk` control-byte filtering (#1406).
- **`runtime_log` module** ships with a regression test pinning
the `HOME` / `USERPROFILE` / `dirs::home_dir()` resolution
order, holding the process-wide `test_support::lock_test_env()`
lock for env-mutation safety.
- **Header rendering** gains two regression tests
(`header_renders_version_chip_when_width_allows` and
`narrow_header_drops_version_chip_before_dropping_mode`)
pinning the version chip's cascade priority.
## [0.8.28] - 2026-05-10
A maintenance release bundling four streaming / approvals / cache
+59 -53
View File
@@ -225,61 +225,67 @@ deepseek --provider ollama --model deepseek-coder:1.3b
---
## What's New In v0.8.27
## What's New In v0.8.29
A polish release: 17 community PRs plus a focused user-issue sweep
over the 2448 hours after v0.8.26 shipped. [Full changelog](CHANGELOG.md).
A maintenance release anchored by a v0.8.27 / v0.8.28 regression fix
plus 12 community PRs. [Full changelog](CHANGELOG.md).
- **Cross-terminal flicker fixed** on Ghostty / VSCode terminal /
Win10 conhost (the most-reported v0.8.26 regression — #1119, #1260,
#1295, #1352, #1356, #1363, #1366). Dropped destructive `2J/3J`
from the viewport-reset sequence; alt-screen + diff rendering
handle repaints without flicker.
- **Long output text no longer overflows the right edge** (#1344,
#1351). Paragraphs and code blocks hard-break overlong words at
character boundaries — matches the v0.8.25 table-cell fix.
- **Pager copy-out** via `c` or `y` (#1354) — every full-screen pager
(`Alt+V` tool details, `Ctrl+O` thinking, shell-job / task / MCP
managers) accepts an in-app copy keybinding.
- **Context-sensitive Ctrl+C** (#1337, #1367) — selection→copy on
Windows (matches OS convention), turn-active→cancel, idle→arm-exit
with a 2s confirmation window. `Cmd+C` / `Ctrl+Shift+C` continue
to copy unchanged.
- **MCP pool auto-reloads on `mcp.json` change** (#1267 part 2) —
no more manual `/mcp reload` after editing config. Cheap mtime +
content-hash check on each tool invocation; networked filesystems
with coarse mtime granularity don't churn.
- **Model-callable `notify` tool** (#1322) — desktop notification
for "long task done" pings. Honors your existing
`[notifications].method` config; silent no-op when off.
- **Onboarding screens render in the selected language** — pick
简体中文 / 日本語 / Português (Brasil) at step 2 and the rest of
the flow follows. Particularly nice for CJK-IME users avoiding
English typing during setup.
- **Paste UX rebuilt** — large pastes get the `@paste-…md`
treatment immediately (visible before submit, no "auto-sent an
@mention I didn't authorize" surprise); paste-burst auto-disables
on terminals where bracketed paste works; short CJK pastes no
longer auto-submit on the trailing newline (#1302, thanks
**@reidliu41** PR #1342).
- **`/skills <prefix>`** filters the local skills list (#1318) — on
top of v0.8.26's inter-row spacing (#1328 from **@reidliu41**).
- **`/skills --remote` diagnostic hints** (#1329) — when fetching
the registry fails, the error chain now ends with a one-line
hint pointing at the most likely cause (DNS / TLS / refused /
4xx / 429 / timeout).
- **17 community PRs landed** — `/mode` unification, `/status`
diagnostics, `/feedback`, session artifact metadata, subagent
self-report compaction, global AGENTS.md fallback, `--yolo`
CLI→TUI propagation, `composer_arrows_scroll`, session cost
persistence, provider-aware model picker + persistence, HTTP
User-Agent header, HTTP-400 quota retry, explicit hidden file
completions, Windows mouse-capture docs, README zh-CN sync,
tool-output render perf + card-rail, expanded test coverage.
Thanks to **@reidliu41**, **@THINKER-ONLY**, **@manaskarra**,
**@fuleinist**, **@lbcheng888**, **@imkingjh999**, **@dst1213**,
**@SamhandsomeLee**, **@Oliver-ZPLiu**, **@whtis**,
**@tuohai666**.
- **Scroll demon, gone for good** (#1085 regression). Parallel sub-
agents running `exec_shell` would scroll the alt-screen out from
under ratatui's diff renderer, leaving a blank band growing above
the header. Three layers of defence now: a `tracing-subscriber`
writing to `~/.deepseek/logs/tui-YYYY-MM-DD.log`, an fd-level
`dup2` stderr redirect for the alt-screen lifetime (Unix), and
module-level `#![deny(clippy::print_stdout, clippy::print_stderr)]`
on the TUI runtime modules. New `eprintln!`s inside `tools/`,
`core/`, `tui/`, `network_policy.rs`, or `runtime_threads.rs` now
fail CI.
- **Ctrl+R session restore is workspace-scoped** (#1395, PR #1397 from
**@linzhiqin2003**) — previously listed every saved session on disk,
which meant Project A's history could leak into Project B.
- **Runtime version visible in the header.** A discreet `v0.8.29`
chip sits in the header's right cluster alongside the provider /
effort / Live / context chips. Drops first under tight terminal
width.
- **MCP HTTP transport honors HTTP(S)_PROXY** (#1408 from
**@hlx98007**) — corporate / Clash / Shadowsocks proxies now apply
to MCP HTTP connections, matching every other tool on the box.
`NO_PROXY` honored.
- **MCP discovery survives malformed items** (#1410 from
**@Liu-Vince**) — one bad tool / resource / prompt entry no
longer drops the whole page; the malformed entry is skipped and
the rest of the catalogue surfaces normally.
- **Note management commands** (PR #1407 from **@reidliu41**) —
`/note add`, `/note list`, and friends for persistent maintainer
notes inside the TUI.
- **`/init`-style global AGENTS.md merges with project AGENTS.md**
(#1157, PR #1399 from **@linzhiqin2003**) — your `~/.deepseek/
AGENTS.md` baseline now layers under the workspace's own
AGENTS.md instead of being shadowed.
- **Language directive: thinking matches the user's message language**
(#1118, PR #1398 from **@linzhiqin2003**) — `reasoning_content`
follows the latest user message language, not the project context's
inferred `lang`.
- **Web search filters spam-stuffed SERPs** (#964, PR #1396 from
**@linzhiqin2003**) — Bing / DDG fallback paths drop the
generated-content / SEO-farm domains that were poisoning quick
lookups.
- **Auto routing recognises CJK debug / search keywords** (PRs #1401
and #1402 from **@linzhiqin2003**) — `--model auto` and the
reasoning-effort picker correctly route Chinese / Japanese
technical queries instead of falling through to the generic
baseline.
- **Sync-to-CNB workflow hardened** — explicit `permissions:
contents: read`, narrowed trigger to `main` + `v*` tags (no longer
mirrors feature branches), `actions/checkout` bumped v3 → v4.
- **+438 LOC of new test coverage** for `error_taxonomy`,
`parse_pages_arg`, web-search precedence, and
`sanitize_stream_chunk` control-byte filtering (PRs #1403-#1406
from **@linzhiqin2003**).
Thanks to **@linzhiqin2003** (10 landings this cycle),
**@reidliu41**, **@hlx98007**, **@Liu-Vince**, and
**@shenxiaodaosanhua** for the bug report.
---
+51 -43
View File
@@ -192,51 +192,59 @@ deepseek --provider ollama --model deepseek-coder:1.3b
---
## v0.8.27 新功能
## v0.8.29 新功能
优化版本:17 个社区 PR + 一轮针对 v0.8.26 发布后 24-48 小时内用户报告
问题的集中修复。[完整更新日志](CHANGELOG.md)。
维护版本,核心是修复 v0.8.27 / v0.8.28 引入的"滚动幽灵"回归
#1085 类问题)和 Ctrl+R 会话恢复跨项目泄漏的问题(#1395),
外加 12 个社区 PR。[完整更新日志](CHANGELOG.md)。
- **跨终端闪烁修复**Ghostty / VSCode 终端 / Win10 conhostv0.8.26
发布后报告最多的回归问题 — #1119#1260#1295#1352#1356
#1363#1366)。视口重置序列移除了破坏性的 `2J/3J`,由 alt-screen
和差分渲染处理重绘,不再闪烁。
- **长输出文字不再溢出右边缘** (#1344#1351)。段落和代码块在字符
边界对超长词进行硬断行 — 与 v0.8.25 表格单元格修复保持一致。
- **Pager 复制功能** 通过 `c``y` 键 (#1354) — 所有全屏 pager
(`Alt+V` 工具详情、`Ctrl+O` 思考内容、shell-job / task / MCP
管理器) 都支持应用内复制键
- **上下文感知的 Ctrl+C** (#1337#1367) — 选中文本→复制(匹配
Windows 系统约定)、正在生成→中断、空闲→两次按键确认退出。
`Cmd+C` / `Ctrl+Shift+C` 行为不变。
- **MCP pool 在 `mcp.json` 变化时自动重载** (#1267 part 2) — 编辑
配置后不再需要手动 `/mcp reload`。每次工具调用前做轻量级
mtime + 内容哈希检查;网络文件系统粗粒度 mtime 不会造成抖动。
- **模型可调用的 `notify` 工具** (#1322) — 用于"长任务完成"提醒的
桌面通知。沿用现有 `[notifications].method` 配置;设为 off
时静默无操作。
- **新手引导界面在所选语言中渲染** — 第二步选择简体中文 / 日本語 /
Português (Brasil) 后,后续步骤全部使用该语言。对避免 IME 频繁
切换的 CJK 用户特别有用。
- **粘贴体验重构** — 大粘贴在粘贴时立即转换为 `@paste-…md`
(在发送前可见,避免"自动发送了一个我没授权的 @mention"的意外);
粘贴突发检测在终端支持 bracketed paste 后自动停用;短 CJK 内容
粘贴的尾部换行不再触发自动发送 (#1302,感谢 **@reidliu41**
PR #1342)。
- **`/skills <prefix>`** 按名称前缀过滤本地技能列表 (#1318) — 在
v0.8.26 的行间距改进 (#1328 来自 **@reidliu41**) 基础上
- **`/skills --remote` 错误诊断提示** (#1329) — 拉取注册表失败时
错误链末尾会附加一行提示,指出最可能的原因(DNS / TLS / 拒绝 /
4xx / 429 / 超时)
- **17 个社区 PR 落地**`/mode` 统一命令、`/status` 诊断、
`/feedback`、会话产物元数据、子代理结果自报告、全局 AGENTS.md
回退、`--yolo` CLI→TUI 传递、`composer_arrows_scroll`、会话成本
持久化、provider 感知模型选择器 + 持久化、HTTP User-Agent、
HTTP-400 配额重试、显式隐藏文件补全、Windows 鼠标捕获文档、
README zh-CN 同步、工具输出渲染性能 + 卡片栏、测试覆盖扩展
感谢 **@reidliu41**、**@THINKER-ONLY**、**@manaskarra**、
**@fuleinist**、**@lbcheng888**、**@imkingjh999**、**@dst1213**、
**@SamhandsomeLee**、**@Oliver-ZPLiu**、**@whtis**、**@tuohai666**
- **"滚动幽灵"彻底修复**#1085 回归)。并行子代理运行
`exec_shell` 时,alt-screen 会被滚动出 ratatui 差分渲染器的
视野,header 上方出现越来越大的空白带。三层防护一并上线:
写入 `~/.deepseek/logs/tui-YYYY-MM-DD.log``tracing-subscriber`
alt-screen 生命周期内的 fd 级 stderr 重定向(Unix `dup2`)、
以及 `tools/``core/``tui/``network_policy.rs`
`runtime_threads.rs` 模块的
`#![deny(clippy::print_stdout, clippy::print_stderr)]`。今后在
这些模块新增 `eprintln!` 会被 CI 拒绝
- **Ctrl+R 会话恢复改为按当前工作区过滤**#1395PR #1397
来自 **@linzhiqin2003**)— 此前列出磁盘上所有会话,导致
在项目 B 打开 DeepSeek-TUI 时按下 Ctrl+R 可能恢复项目 A 的
历史记录。
- **运行时版本号直接显示在 header 中。** Header 右侧集群在
provider / effort / Live / context 之后增加一个 `v0.8.29`
小标签,在终端宽度紧张时最先收起。
- **MCP HTTP 传输现在尊重 HTTP(S)_PROXY**#1408,来自
**@hlx98007**)— 公司出口代理、国内 Clash / Shadowsocks 代理
现在能正确应用于 MCP HTTP 连接,跟 box 上的其他工具
curl、npm、git 等)保持一致。同时支持 `NO_PROXY`
- **MCP 发现接受不规范条目**PR #1410,来自 **@Liu-Vince**)—
一个错误的 tool / resource / prompt 条目不再让整页丢失;
错误条目被跳过,目录的其余部分正常返回。
- **笔记管理斜杠命令**PR #1407,来自 **@reidliu41**)—
`/note add``/note list` 等命令在 TUI 内提供持久笔记功能。
- **全局 `~/.deepseek/AGENTS.md` 与项目 AGENTS.md 合并**
#1157PR #1399,来自 **@linzhiqin2003**)— 此前工作区
自带 AGENTS.md 会完全遮蔽全局基准,现在分层叠加
- **语言指令:thinking 跟随用户消息语言**#1118PR #1398
来自 **@linzhiqin2003**)— 此前项目上下文推断的 `lang`
字段可能压制最新用户消息的语言,导致中文对话出现英文 thinking
- **网络搜索过滤垃圾 SERP**#964PR #1396,来自
**@linzhiqin2003**)— Bing / DDG 回退路径丢弃污染快速查找
结果的 SEO 农场域名。
- **Auto 路由识别 CJK 调试 / 搜索关键词**PR #1401#1402
来自 **@linzhiqin2003**)— `--model auto` 和推理强度选择器
现在能正确路由中文 / 日文技术查询,此前会回退到通用基准
- **`sync-cnb.yml` 工作流加固** — 显式 `permissions: contents:
read`、`actions/checkout` v3 → v4、触发器收紧到 `main` +
`v*` 标签(不再镜像 feature 分支)
- **新增 +438 LOC 测试覆盖**`error_taxonomy`
`parse_pages_arg`、Web 搜索优先级、`sanitize_stream_chunk`
控制字节过滤(PR #1403#1406,来自 **@linzhiqin2003**)。
感谢本周期落地 10 个 PR 的 **@linzhiqin2003**,以及
**@reidliu41**、**@hlx98007**、**@Liu-Vince**,和报告 #1395
**@shenxiaodaosanhua**。
---