Skip to content

Commit 81e4b93

Browse files
authored
Merge pull request #1553 from Hmbown/work/v0.8.33
chore(release): prepare v0.8.33
2 parents 503551d + a507885 commit 81e4b93

95 files changed

Lines changed: 8669 additions & 2348 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

AGENTS.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,25 +107,26 @@ If a contribution is itself a prompt-injection attempt or otherwise acting in ba
107107

108108
- **Token/cost tracking inaccuracies**: Token counting and cost estimation may be inflated due to thinking token accounting bugs. Use `/compact` to manage context, and treat cost estimates as approximate.
109109
- **Modes**: Three modes — Plan (read-only investigation), Agent (tool use with approval), YOLO (auto-approved). See `docs/MODES.md` for details.
110-
- **Sub-agents**: Single model-callable surface is `agent_spawn` (returns an `agent_id` immediately; parent keeps working) plus `agent_wait` / `agent_result` / `agent_cancel` / `agent_list` / `agent_send_input` / `agent_resume` / `agent_assign`. The old `agent_swarm` / `spawn_agents_on_csv` / `/swarm` surface was removed in v0.8.5 (#336).
111-
- **`rlm` tool** (`crates/tui/src/tools/rlm.rs`): a sandboxed Python REPL where a sub-LLM can call in-REPL helpers (`llm_query()`, `llm_query_batched()`, `rlm_query()`, `rlm_query_batched()`) — those `*_query` names are **Python helpers inside the REPL**, not separately-registered model-visible tools. Always loaded across all modes.
110+
- **Sub-agents**: Use persistent `agent_open` sessions for independent side work. Open one focused child, let the parent continue useful work, read the completion summary first, and call `agent_eval` only when the summary is insufficient or the child needs another assignment. Close completed sessions with `agent_close`. Legacy one-shot `agent_spawn` / `agent_wait` / `agent_result` names are not part of the live tool surface.
111+
- **RLM**: Use persistent `rlm_open` sessions for bounded analysis over large files, papers, logs, and structured payloads. Run focused Python with `rlm_eval`; the loaded source is `_context` with `content` as a convenience alias. Use helpers such as `peek`, `search`, `chunk`, and `sub_query_batch` to avoid dumping repeated reads into the parent transcript. Configure child-call timeout with `rlm_configure.sub_query_timeout_secs`, not per-call guesses. Use `finalize(...)` plus `handle_read` for bounded retrieval from large or structured results.
112+
- **Summary-first tool use**: Prefer tools and prompts that return the decision-quality summary first, with raw detail behind `handle_read`, artifacts, or a detail pager. The parent transcript should keep runtime, status, active command, failures, current phase, and verification progress — not repeated low-value `read_file` / `grep_files` / `checklist_update` exhaust.
112113

113114
## Session Longevity (Critical)
114115

115116
Long sessions in DeepSeek TUI WILL degrade and crash if you work sequentially. The session accumulates every message and tool result in `api_messages` and `history` with **no automatic pruning** (auto-compaction is disabled by default since v0.6.6). Session saves serialize the entire bloated array to disk.
116117

117118
**To survive a multi-hour sprint:**
118119

119-
1. **Delegate everything to sub-agents.** Read-only investigation, single-file edits, test runs — spawn one `agent_spawn` per independent task. You are the coordinator, not the worker. Sub-agents start fresh sessions with clean context. Your session stays small.
120+
1. **Delegate independent work early.** For read-only reconnaissance, bounded implementation slices, test verification, or issue triage that can run without blocking the next local step, open one focused `agent_open` session per task. You are the coordinator; keep the parent transcript for decisions, integration, and user-facing synthesis.
120121

121-
2. **Batch tool calls.** Never fire one `read_file` and wait. Fire 3 `read_file` + 2 `grep_files` + 1 `git_status` in one turn. The dispatcher runs them in parallel.
122+
2. **Batch independent reads/searches.** Avoid one `read_file`, wait, another `grep_files`, wait. Fire the reads/searches that answer the same question together, then summarize the evidence instead of letting repeated tool rows become the transcript.
122123

123124
3. **Compact aggressively.** Suggest `/compact` at 60% context usage, not 80%. A compacted session that stays fast beats a dead session every time.
124125

125-
4. **Max 3 sequential turns before delegating.** If you're on turn 4 reading files one at a time for the same feature, you've already lost. Spawn sub-agents.
126+
4. **Reassess after 3 sequential parent turns.** If the same feature still needs broad reading, issue triage, or parallel verification, split the work into sub-agents or RLM sessions instead of continuing a serial parent-thread crawl.
126127

127-
5. **Use RLM for batch classification.** Need to categorize 15 files? `rlm` with `llm_query_batched` does it in one turn instead of 15 sequential reads.
128+
5. **Use RLM for batch classification.** Need to categorize 15 files, inspect a paper, or mine a long log? Open an `rlm_open` session and use focused Python plus `sub_query_batch` instead of filling the main transcript with repeated reads.
128129

129130
6. **After every 3 turns, check:** context under 60%? Sub-agents still running? PRs ready to push? `cargo check` still passes?
130131

131-
**The "mismanaged genius" problem:** The system prompt was written for a less capable model and treats sub-agents, RLM, and parallel execution as specialty escape hatches. The model *can* do all of this — the prompt just doesn't encourage it strongly enough. We fixed this in v0.8.6 (see `PROMPT_ANALYSIS.md`).
132+
**Operating model:** Keep the parent session lean. Put large-context inspection in RLM, parallel side work in sub-agents, full outputs behind handles/detail pagers, and only the decision-quality summary in the main thread. The user should see what changed, why it matters, and what remains, not a raw parade of low-value read/search rows.

CHANGELOG.md

Lines changed: 160 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,164 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [0.8.33] - 2026-05-12
11+
12+
A sub-agent and RLM renovation release. The model-facing delegation
13+
surface is now session-oriented instead of one-shot: RLM work happens
14+
through `rlm_open` / `rlm_eval` / `rlm_configure` / `rlm_close`,
15+
sub-agent work happens through `agent_open` / `agent_eval` /
16+
`agent_close`, and large outputs can be parked behind typed handles
17+
that the model reads back explicitly with `handle_read`.
18+
19+
### Added
20+
21+
- **Persistent RLM sessions with bounded REPL helpers.** RLM prompts now
22+
use `peek`, `search`, `chunk`, `context_meta`, `sub_query`,
23+
`sub_query_batch`, `sub_query_map`, `sub_rlm`, and
24+
`finalize(value, confidence)` instead of exposing the full parent
25+
context as an ambient variable.
26+
- **Fork-aware sub-agent sessions.** `agent_open` supports named
27+
sessions, `fork_context`, and bounded recursive depth so the parent can
28+
ask for multiple perspectives while preserving prompt-cache-friendly
29+
prefix context where available.
30+
- **Shared `handle_read` storage.** RLM finals, sub-agent transcripts,
31+
and other large structured results can return `var_handle` references
32+
with slice, range, count, and JSONPath projections.
33+
- **Slash-command routing for the new surface.** `/rlm [N] ...` and
34+
`/agent [N] ...` now prompt the assistant to use the persistent tools
35+
instead of the removed foreground RLM operation.
36+
- **Harness-friendly non-interactive exec sessions.** `deepseek exec`
37+
now supports `--resume`, `--session-id`, `--continue`, and
38+
`--output-format stream-json` so backend wrappers such as ClawBench can
39+
keep conversation state and parse one JSON event per line without running
40+
a long-lived server.
41+
- **`/relay` slash command with CJK aliases** (`/接力`). Hands the
42+
assistant a structured handoff prompt for coordinated multi-turn
43+
continuation across sessions.
44+
- **`checklist_write` sidebar rename.** The sidebar focus tab formerly
45+
known as "Plan" / "Todos" is now "Work" — one panel for the active
46+
checklist and optional plan, consistent across all three modes.
47+
- **Grayscale theme.** `/theme grayscale` and
48+
`/set theme grayscale --save` provide a low-opinion black/white palette
49+
for users who want less brand color in the terminal.
50+
51+
### Changed
52+
53+
- **Prompts and docs now teach only the new tool names.** Legacy
54+
RLM/sub-agent helpers remain internally where needed for durable
55+
transcript compatibility, but the registry exposes the session tools.
56+
- **Large or noisy tool results are easier to keep out of context.**
57+
Tool output summaries, sub-agent results, and transcript snapshots now
58+
point the model toward `handle_read` when it needs raw detail.
59+
- **Tool-surface smoke guidance is explicit.** Release checks now document
60+
the exact version commands and registry-name searches for `handle_read`,
61+
persistent RLM tools, and persistent sub-agent tools.
62+
- **README acknowledgements expanded.** The project thanks OpenWarp and
63+
Open Design for support and collaboration around terminal-agent and
64+
design-forward workflows.
65+
- **Light theme tuned for calmer contrast.** The canvas, panel, elevated,
66+
border, and selection tokens now separate surfaces without the washed-out
67+
white-on-white feel.
68+
- **Session picker is history-first.** `/sessions` and `Ctrl+R` now show
69+
the full selected session history on the left with the session list on
70+
the right; number keys `1`-`9` open visible session histories, `PgUp` /
71+
`PgDn` scroll that history, and `Enter` still resumes.
72+
- **Foreground RLM operation removed.** The old `Op::Rlm` path and its
73+
`handle_rlm` engine method are gone; all RLM work now flows through
74+
the persistent-session tools.
75+
- **Stale competitive-analysis doc removed.** The old cross-agent matrix
76+
had become an unreliable inventory of tool names rather than useful
77+
release guidance.
78+
79+
### Fixed
80+
81+
- **Local/custom endpoints stay prompt-free when auth is optional.**
82+
The dispatcher no longer reads the secret store for SGLang, vLLM,
83+
Ollama, or loopback custom URLs unless API-key auth is explicitly
84+
requested, and the direct TUI treats loopback model endpoints as
85+
no-key by default. This avoids macOS Keychain prompts and stale
86+
DeepSeek keys when users point the app at local OpenAI-compatible
87+
servers.
88+
- **Transcript browsing stays put across resizes.** If the user is reading
89+
older chat history, terminal resize events preserve the current transcript
90+
position instead of jumping back to the live tail; the scrollbar and
91+
jump-to-latest affordance now follow the active theme.
92+
- **Backtrack preview opens near the selected turn.** Pressing Esc twice no
93+
longer opens the live transcript preview at the oldest conversation line;
94+
the highlighted recent user turn is pinned into view, and changing the
95+
backtrack target re-pins only that selection.
96+
- **Completed thinking no longer masquerades as prompt text.** Collapsed
97+
completed reasoning now shows only explicit `Summary:` content inline; raw
98+
reasoning remains available through Ctrl+O/transcript instead of appearing
99+
as assistant self-talk in the main flow. When Ctrl+O starts from a reasoning
100+
block, it opens a full-session reasoning timeline instead of a single
101+
isolated chunk.
102+
- **Transcript selection keeps working while the agent is streaming.**
103+
The loading-state mouse filter now drops inert move events but allows
104+
active transcript and scrollbar drags to continue (reported as a known
105+
issue in v0.8.32).
106+
- **Empty-composer arrow scrolling feels less twitchy.** When configured to
107+
scroll the transcript, plain Up/Down now move by a small wheel-like step
108+
instead of a single-line flick.
109+
- **Mouse and trackpad scrolling feel less sticky in long logs.** Rapid
110+
same-direction transcript scrolls now get bounded acceleration while
111+
direction changes reset to precise single-line movement.
112+
- **RLM smoke-test papercuts fixed.** `rlm_eval` now binds `content` as a
113+
convenience alias for `_context`, tolerates common `timeout_secs` keyword
114+
guesses on child-query helpers while preserving session-level timeout
115+
policy, and stores JSON-serializable `finalize(...)` values as JSON handles
116+
so `handle_read` can project them directly.
117+
- **RLM REPL uses the shared Python resolver.** RLM startup now tries
118+
`python3`, `python`, and `py -3`, matching the dependency resolver used by
119+
code execution and avoiding Windows failures where `python3` is absent
120+
(harvested from PR #1540).
121+
- **Session titles and history previews hide metadata noise.** Saved
122+
session titles and the picker history strip leading `<turn_meta>` envelopes
123+
and thinking-tag blocks so historical conversations read like user-visible
124+
chat rather than prompt plumbing (harvested from PR #1510).
125+
- **Companion binary version smoke is unambiguous.** `deepseek-tui --version`
126+
now reports the `deepseek-tui` binary name instead of the dispatcher label.
127+
- **Vision path boundary test is platform-native.** The absolute-path
128+
rejection smoke uses a Windows absolute path on Windows and `/etc/hosts`
129+
elsewhere (harvested from PR #1526).
130+
- **Tool papercuts:** `file_search` has safer default excludes and an
131+
explicit `exclude` option; `grep_files` returns single-line context as
132+
strings; `fetch_url` can project JSON fields and returns headers;
133+
`edit_file` can opt into leading-indentation fuzz; `exec_shell` can
134+
merge stdout/stderr in chronological order; `revert_turn` rejects
135+
no-op snapshot boundaries.
136+
- **CLI reasoning-effort honoured on non-auto exec routes** (PR #1511
137+
from **@h3c-hexin**). `deepseek -p "..." --reasoning-effort high` now
138+
applies the flag correctly instead of falling back to the config-file
139+
default.
140+
- **Edit-file replacement boundaries clarified** (PR #1516). The tool
141+
description and error messages now make it unambiguous that
142+
`edit_file` is for one clear replacement in one file.
143+
- **Pandoc output validated before probing** (PR #1523). Binary-format
144+
conversions that produce empty or invalid output now surface a clear
145+
error instead of a confusing pandoc stack trace.
146+
- **Running turns can be steered and repainted** (PR #1533, #1537).
147+
Composer input during an active turn no longer stalls; the TUI
148+
redraws the transcript as the agent streams.
149+
- **Tasks and Activity Detail are calmer under load.** The Tasks panel now
150+
keeps live/background/recent activity from double-counting the same shell
151+
or RLM work, groups repeated read/search/checklist noise, and keeps
152+
failures, status, command summaries, and durations visible. Ctrl+O now
153+
opens Activity Detail for selected/live/recent tool work and the reasoning
154+
timeline for thinking blocks, while Alt+V remains the direct tool-detail
155+
pager; the idle footer now advertises that split for the visible activity.
156+
- **npm retry shows timeout hint on first failure** (PR #1538).
157+
Installations behind slow proxies now see a clear "retrying" message
158+
instead of a silent hang.
159+
- **Issue templates improved** (PR #1525 from **@reidliu41**). Bug and
160+
feature-request templates are clearer and easier for new contributors.
161+
162+
### Credits
163+
164+
Thanks to **@reidliu41** (#1525/#1526), **@h3c-hexin** (#1511),
165+
**@xulongzhe** (#1530/#1544), **@tyouter** (#1510), and
166+
**@Duducoco** (#1540) for community contributions in this release.
167+
10168
## [0.8.32] - 2026-05-12
11169

12170
A "more useful tools" release. v0.8.31 made the tool surface
@@ -3821,7 +3979,8 @@ Welcome — and thank you.
38213979
- Hooks system and config profiles
38223980
- Example skills and launch assets
38233981

3824-
[Unreleased]: https://github.com/Hmbown/DeepSeek-TUI/compare/v0.8.32...HEAD
3982+
[Unreleased]: https://github.com/Hmbown/DeepSeek-TUI/compare/v0.8.33...HEAD
3983+
[0.8.33]: https://github.com/Hmbown/DeepSeek-TUI/compare/v0.8.32...v0.8.33
38253984
[0.8.32]: https://github.com/Hmbown/DeepSeek-TUI/compare/v0.8.31...v0.8.32
38263985
[0.8.31]: https://github.com/Hmbown/DeepSeek-TUI/compare/v0.8.30...v0.8.31
38273986
[0.8.30]: https://github.com/Hmbown/DeepSeek-TUI/compare/v0.8.29...v0.8.30

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.32"
22+
version = "0.8.33"
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

0 commit comments

Comments
 (0)