diff --git a/CHANGELOG.md b/CHANGELOG.md index ec2c8872..904b83d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.5.0] - 2026-04-25 + +### Fixed +- Multi-turn tool calls on thinking-mode models no longer return HTTP 400. Every assistant message in the conversation now carries `reasoning_content` when thinking is enabled — not just tool-call rounds — matching DeepSeek's actual API validation, which rejects any assistant message missing the field even though the docs describe non-tool-call reasoning as "ignored". +- Added a final-pass wire-payload sanitizer in the chat-completions client that forces a non-empty `reasoning_content` placeholder onto any assistant message still missing one at request time. This is the last line of defense after engine-side and build-side substitution, so sessions restored from older checkpoints, sub-agents that append messages directly, and cached prefix mismatches all produce a valid request. +- On a `reasoning_content`-related 400, the client now logs the offending message indices to make future regressions diagnosable. +- Stripped phantom `web.run` references from prompts and the `web_search` tool surface ([#25](https://github.com/Hmbown/DeepSeek-TUI/issues/25)). + +### Changed +- Header/UI widget refactor in the TUI (`crates/tui/src/tui/ui.rs`, `widgets/header.rs`) — internal cleanup, no user-visible behavior change. + ## [0.4.9] - 2026-04-27 ### Fixed diff --git a/README.md b/README.md index e33aee55..660d7dd6 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,6 @@ npm i -g deepseek-tui ``` [![CI](https://github.com/Hmbown/DeepSeek-TUI/actions/workflows/ci.yml/badge.svg)](https://github.com/Hmbown/DeepSeek-TUI/actions/workflows/ci.yml) -[![crates.io](https://img.shields.io/crates/v/deepseek-tui)](https://crates.io/crates/deepseek-tui) [![npm](https://img.shields.io/npm/v/deepseek-tui)](https://www.npmjs.com/package/deepseek-tui) ![DeepSeek TUI screenshot](assets/screenshot.png) @@ -64,25 +63,27 @@ DEEPSEEK_PROVIDER=nvidia-nim NVIDIA_API_KEY="..." deepseek ```
-Other install methods +Install from source ```bash -# From crates.io (requires Rust 1.85+) -cargo install deepseek-tui --locked # TUI binary -cargo install deepseek-tui-cli --locked # CLI facade (deepseek command) - -# From source git clone https://github.com/Hmbown/DeepSeek-TUI.git cd DeepSeek-TUI -cargo install --path crates/tui --locked +cargo install --path crates/tui --locked # requires Rust 1.85+ ``` -The canonical crates.io packages are `deepseek-tui` and `deepseek-tui-cli`. The unrelated `deepseek-cli` crate is not part of this project. crates.io publication can lag the workspace version — use npm or install from source for the latest release surface immediately. -
--- +## What's new in v0.5.0 + +- **Multi-turn tool calls no longer 400 on thinking-mode models.** Every assistant message now replays `reasoning_content` (with a safe placeholder when the round produced none), and a final-pass sanitizer guarantees the wire payload satisfies DeepSeek's thinking-mode contract — even for sessions restored from older checkpoints or sub-agents that bypass the engine path. +- **Phantom `web.run` references stripped** from prompts and the `web_search` tool ([#25](https://github.com/Hmbown/DeepSeek-TUI/issues/25)). + +Full history: [CHANGELOG.md](CHANGELOG.md). + +--- + ## Models & Pricing DeepSeek TUI targets **DeepSeek V4** models with 1M-token context windows by default.