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:
+107
@@ -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
|
||||
|
||||
@@ -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 24–48 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
@@ -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 conhost;v0.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 会话恢复改为按当前工作区过滤**(#1395,PR #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 合并**
|
||||
(#1157,PR #1399,来自 **@linzhiqin2003**)— 此前工作区
|
||||
自带 AGENTS.md 会完全遮蔽全局基准,现在分层叠加。
|
||||
- **语言指令:thinking 跟随用户消息语言**(#1118,PR #1398,
|
||||
来自 **@linzhiqin2003**)— 此前项目上下文推断的 `lang`
|
||||
字段可能压制最新用户消息的语言,导致中文对话出现英文 thinking。
|
||||
- **网络搜索过滤垃圾 SERP**(#964,PR #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**。
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user