Files
codewhale/CHANGELOG.md
T
Hunter Bown e1ac84ae44 release: v0.6.1 — pricing update, remove light theme + theme setting
- V4 cache-hit input prices cut to 1/10th per DeepSeek pricing update:
  Pro promo 0.03625→0.003625, Pro base 0.145→0.0145, Flash 0.028→0.0028
- Remove the 'light' theme variant (Variant::Light, Theme::light(), test)
- Remove the theme setting entirely — hardcode UI_THEME to whale/dark,
  drop the theme field from Settings, ConfigView, and config command
- Bump workspace version 0.6.0 → 0.6.1 (Cargo.toml, npm pkg, CHANGELOG)
- De-cringe the README: drop emojis, marketing fluff, unverified claims
2026-04-26 11:56:41 -05:00

39 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

Added

  • Sub-agents surface in the footer status strip. When N > 0 sub-agents are in flight, the footer grows a "1 agent" / "N agents" chip in DeepSeek-sky color matching the model badge. Hides entirely at zero. (footer_agents_chip in widgets/footer.rs)
  • @-mention popup is fully wired in the composer. Previously only the App state fields existed (mention_menu_selected, mention_menu_hidden). The popup now renders below the input mirror-style with the slash menu, with @-prefixed entries; Up/Down navigates, Enter / Tab apply the selection, Esc hides until the next input edit. Mention takes precedence over slash because the positional check is stricter. (visible_mention_menu_entries + apply_mention_menu_selection in file_mention.rs)

Fixed

  • Tool-call cells no longer flash <command> / <file> placeholders. The engine used to emit ToolCallStarted from ContentBlockStart with input: {} — before any InputJsonDelta had streamed in — which baked the placeholder into the cell at creation time. The emission is now deferred to ContentBlockStop and routed through final_tool_input, so the cell is created with the parsed args already in hand. (engine.rs final_tool_input; engine/tests.rs final_tool_input_*)
  • parse_invocation_count flake. Two markdown_render tests both read the global PARSE_INVOCATIONS atomic and raced when other tests called parse() in parallel. Switched the counter to thread_local!<Cell<u64>>, so each test thread sees only its own invocations. Tested 8 sequential full-suite runs: 8/8 green (was ~40% green).

Changed

  • System prompts redesigned with decomposition-first philosophy. All four prompt tiers (base, agent, plan, yolo) now teach the model to decompose tasks before acting — todo_write first for granular task tracking, update_plan for high-level strategy, and sub-agents for parallelizable work. Inspired by the "mismanaged geniuses hypothesis" (Zhang et al., 2026): frontier LMs are already capable enough; the bottleneck is how we scaffold their self-management. The prompts now make work visible through the sidebar (Plan / Todos / Tasks / Agents) instead of letting the model work invisibly.
  • Tool labels use progressive verbs. "Read foo.rs" → "Reading foo.rs", "List X" → "Listing X", "Search pattern" → "Searching for pattern", "List files" → "Listing files". Past-tense labels read wrong while a tool is still in flight; the new forms match what the user actually sees.
  • Long-running tools grow an elapsed badge. From 3 s onward the running status segment becomes running (3s), running (4s), … so the user can tell a tool isn't stuck. The status-animation tick (360 ms) drives the redraw; below 3 s the badge stays hidden so quick reads/greps don't churn. (history.rs running_status_label_with_elapsed)
  • Spinner pulse is twice as fastTOOL_STATUS_SYMBOL_MS 1800 ms → 720 ms per glyph (full 4-glyph heartbeat in ~2.88 s instead of ~7.2 s).
  • tools/subagent.rs is now a folder module. Tests live in tools/subagent/tests.rs; runtime + manager + tool implementations stay in tools/subagent/mod.rs. Public API unchanged. The runtime / tool-impl split was deferred — SubAgentTask, run_subagent_task, build_allowed_tools, the agent prompt constants, and normalize_role_alias are referenced from both layers and need a small API design pass before they cleanly separate.

Test hygiene

  • 5 regression tests pin auto-scroll churn contract. mark_history_updated does not scroll; tool-cell handlers only mark_history_updated; add_message and flush_active_cell gate on user_scrolled_during_stream; the per-stream lock clears at TurnComplete and when the user returns to the live tail. (P2.4)

0.6.1 - 2026-04-26

Changed

  • V4 cache-hit input prices cut to 1/10th per DeepSeek's pricing update. Pro promo 0.03625→0.003625, Pro base 0.145→0.0145, Flash 0.028→0.0028 per 1M tokens. Cache-miss and output rates unchanged.
  • Removed the "light" theme option. It was never tested, looked bad, and the dark/whale palettes are the supported targets. Theme validation now accepts only default, dark, and whale.
  • System prompts redesigned with decomposition-first philosophy. All five prompt tiers teach the model to todo_write before acting, update_plan for strategy, and sub-agents for parallel work. Inspired by the mismanaged-geniuses hypothesis (Zhang et al., 2026).

0.6.0 - 2026-04-25

Added

  • rlm_query tool — recursive language models as a first-class structured tool. Inspired by Alex Zhang's RLM work and Sakana AI's published novelty-search research, but trimmed to what an agent loop actually needs. The model calls rlm_query with one prompt or up to 16 concurrent prompts; children run on deepseek-v4-flash by default and can be promoted to Pro per-call. Children dispatch concurrently via tokio::join_all against the existing DeepSeek client — no external runtime, no fenced-block DSL, no Python sandbox. Returns plain text for one prompt, indexed [0] ...\n\n---\n\n[1] ... blocks for many. Available in Plan / Agent / YOLO. Cost is folded into the session's running total automatically.

Changed

  • Scroll position survives content rewrites (#56). TranscriptScroll::resolve_top and scrolled_by no longer teleport to bottom when the anchor cell vanishes. Three-level fallback chain: same line → same cell, line 0 → nearest surviving cell at-or-before. Previously, any rewrite of the assistant message (e.g. tool-result replacement) silently dropped the user back to the live tail mid-scroll.
  • Looser command-safety chains (#57). cargo build && cargo test, git fetch && git rebase, and similar chains of known-safe commands now escalate to RequiresApproval instead of being hard-blocked as Dangerous. Chains containing unknown commands still block.
  • GettingCrowded no longer surfaces a footer chip. The context-percent header already covers conversation pressure; the chip now only fires for active engine interventions (refreshing context, verifying, resetting plan).

[0.5.2] - 2026-04-25

Added

  • /model opens a Pro/Flash + thinking-effort picker (#39). Typing /model with no argument now pops a two-pane modal: model on the left (deepseek-v4-pro flagship, deepseek-v4-flash fast/cheap, plus a "current (custom)" row when the active id isn't one of the listed defaults), and thinking effort on the right. Tab/←/→ swaps panes, ↑/↓ moves within the focused pane, Enter applies both selections, Esc cancels. The effort pane intentionally exposes only Off / High / Max because DeepSeek's Thinking Mode docs state low/medium are mapped to high server-side and xhigh is mapped to max — the legacy variants stay valid in ~/.deepseek/settings.toml for back-compat, the picker just doesn't surface them. Apply path persists default_model and reasoning_effort to settings, forwards Op::SetModel + Op::SetCompaction to the running engine so the next turn picks up the change without a restart, and resets the per-turn token gauges (cache, replay) so the footer numbers reflect the new model. /model <id> keeps working unchanged for power users.

[0.5.1] - 2026-04-25

Added

  • fetch_url tool for direct HTTP GET on a known URL — complements web_search for cases where the link is already known. Supports format (markdown / text / raw), max_bytes (default 1 MB, hard cap 10 MB), timeout_ms (default 15 s, max 60 s), redirect following, and structured {url, status, content_type, content, truncated} responses. 4xx/5xx bodies are returned (with success: false) so the caller can read JSON error envelopes. (#33)
  • PDF support in read_file. PDFs are auto-detected by extension or %PDF- magic bytes and extracted via pdftotext -layout (poppler) when available. New optional pages arg ("5" or "1-10") reads page slices. Without pdftotext, returns a structured {type: "binary_unavailable", kind: "pdf", reason, hint} with install commands for macOS/Debian. (#34)
  • Reasoning-content replay telemetry, end-to-end (#30). The chat-completions sanitizer now estimates replayed reasoning_content tokens (~4 chars/token), threads the value through the streaming Usage payload, stores it on the App, and renders an rsn N.Nk chip in the footer next to the cache hit-rate. The chip turns warning-coloured when replay tokens exceed 50% of the input budget, so users on long thinking-mode loops can see at a glance how much of their context window is going to V4's "Interleaved Thinking" replay (paper §5.1.1). Logged at RUST_LOG=deepseek_tui=info for tail-friendly diagnosis.
  • @file Tab-completion (#28). Typing @<partial> and pressing Tab now resolves the mention against the workspace using the existing ignore::WalkBuilder. A unique match is spliced into the input; multiple matches with a longer common prefix extend the partial; remaining ambiguity is surfaced via the status line. The mention-expansion path that ships file contents to the model is unchanged — this is purely a discovery aid for typing the path. Inline-contents and a fuzzy popup picker are queued for v0.5.2.
  • Per-workspace external trust list (#29). ~/.deepseek/workspace-trust.json now records, for each workspace, the absolute paths the user has opted into reading/writing from outside that workspace. The new /trust slash command supports add <path>, remove <path>, list, on, off, and a status read with no args; the engine consults the list when constructing every ToolContext so changes apply on the next tool call without restart. /diagnostics surfaces the list. The interactive "Allow once / Always allow / Deny" approval prompt is deferred — for now grant access ahead of the turn with /trust add <path>.

Fixed

  • TUI sidebar gutter bleed regression test (#36). Snapshot tests now lock in that long single-line tool results — including a todo_write echo of a multi-kilobyte JSON payload — never write any cells outside chat_area at the widths reported in the bug (80, 120, 165, 200 cols). A second test verifies the scrollbar coexists with content along the right edge instead of overdrawing the penultimate column.
  • Version drift caught in CI. New versions job in .github/workflows/ci.yml runs scripts/release/check-versions.sh on every push/PR, verifying every per-crate Cargo.toml inherits the workspace version, the npm wrapper matches the workspace version, and Cargo.lock is in sync. The release runbook now lists check-versions.sh as the first preflight step. (#31)
  • Per-mode soft context budget for V4 compaction trigger (#27).
  • Phantom web.run references stripped from prompts and the web_search tool surface (#25).
  • Unused import + cargo fmt drift that landed with feat(#27) and broke Build / Test / npm wrapper smoke under -Dwarnings.

[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).

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

  • DeepSeek thinking-mode tool-call rounds now always replay reasoning_content in all subsequent requests (including across new user turns), matching DeepSeek's documented API contract that assistant messages with tool calls must retain their reasoning content forever.
  • Missing reasoning_content on a tool-call assistant message now substitutes a safe placeholder ("(reasoning omitted)") instead of dropping the tool calls and their matching tool results, preventing orphaned conversation chains and API 400 errors.
  • Session checkpoint now persists a Thinking-block placeholder for tool-call turns that produced no streamed reasoning text, keeping on-disk sessions structurally correct so subsequent requests avoid HTTP 400 rejections.
  • Token estimation for compaction now counts thinking tokens across all tool-call rounds (not just the current user turn), aligning with the updated reasoning_content replay rule.

0.4.8 - 2026-04-25

Fixed

  • DeepSeek V4 Pro cost estimates now use DeepSeek's current limited-time 75% discount until 2026-05-05 15:59 UTC, then automatically fall back to the base Pro rates.

[0.4.5] - 2026-04-24

Fixed

  • Alternate-screen TUI sessions now capture mouse input by default so wheel scrolling moves the transcript instead of exposing terminal scrollback from before the TUI started. Use --no-mouse-capture or tui.mouse_capture = false when terminal-native drag selection is preferred.

[0.4.2] - 2026-04-24

Fixed

  • DeepSeek V4 thinking-mode tool turns now checkpoint the engine's authoritative API transcript, including assistant reasoning_content on reasoning-to-tool-call turns with no visible assistant text.
  • Chat Completions request building now drops stale V4 tool-call rounds that are missing required reasoning_content, preventing old corrupted checkpoints from triggering DeepSeek HTTP 400 replay errors.
  • Web search now falls back to Bing HTML results when DuckDuckGo returns a bot challenge or otherwise yields no parseable results.

[0.4.1] - 2026-04-24

Fixed

  • DeepSeek V4 tool-result context now preserves large file reads and command outputs instead of compacting noisy tools to a 900-character snippet after 2k characters.
  • Capacity guardrail refresh no longer performs destructive summary compaction unless the normal model-aware compaction thresholds are actually crossed.
  • V4 compaction summaries retain larger tool-result excerpts and summary input when compaction is genuinely needed.
  • The transcript now follows the bottom again when sending a new message, shows an in-app scrollbar when internally scrolled, and leaves mouse capture off in --no-alt-screen mode so terminal-native scrolling can work.

[0.4.0] - 2026-04-23

Added

  • DeepSeek V4 support: deepseek-v4-pro (flagship) and deepseek-v4-flash (fast/cheap) are now first-class model IDs with 1M context windows.
  • Reasoning-effort tier: new reasoning_effort config field (off | low | medium | high | max) mapped to DeepSeek's reasoning_effort + thinking request fields. Defaults to max.
  • Shift+Tab cycles reasoning-effort through the three behaviorally distinct tiers (off → high → max). The current tier is shown as a chip in the header.
  • Per-model pricing table: deepseek-v4-pro priced at $0.145/$1.74/$3.48 per 1M tokens (cache-hit/miss/output); deepseek-v4-flash and legacy aliases at $0.028/$0.14/$0.28.

Changed

  • Default model flipped to deepseek-v4-pro (from deepseek-reasoner).
  • deepseek-chat / deepseek-reasoner remain as silent aliases of deepseek-v4-flash for API compatibility; priced identically.
  • Context compaction: 1M-context V4 models now compact at 800k input tokens or 2,000 messages, so short/tool-heavy sessions do not compact as if they were 128k-context runs.
  • Cycling modes is now Tab-only; Shift+Tab is repurposed for reasoning-effort (reverse-mode cycle was low-value with only three modes).
  • Updated help/hint strings, validator error messages, and the model picker to reference V4 IDs.

Fixed

  • requires_reasoning_content now recognizes deepseek-v4* so thinking streams render correctly on V4 models.
  • DeepSeek V4 thinking-mode tool calls now preserve prior assistant reasoning_content whenever a tool call is replayed, matching DeepSeek's multi-turn contract and avoiding HTTP 400 rejections on later turns.
  • Raw Chat Completions requests now send DeepSeek's top-level thinking parameter instead of the OpenAI SDK-only extra_body wrapper.
  • Config, env, and UI model selection now normalize legacy DeepSeek aliases to deepseek-v4-flash instead of preserving old model labels.
  • npm wrapper first-run downloads now use process-unique temp files so concurrent deepseek / deepseek-tui invocations do not race on *.download files.

0.3.33 - 2026-04-11

Changed

  • Footer polish: simplified footer rendering, removed footer clock label, updated status line layout
  • Palette cleanup: removed FOOTER_HINT color constant

Removed

  • FOOTER_HINT color constant from palette (use TEXT_MUTED or TEXT_HINT instead)

Fixed

  • Test updates to align with simplified footer logic
  • Empty state placeholder text removed for cleaner UI

0.3.32 - 2026-04-11

Added

  • Finance tool: Yahoo Finance v8 quote endpoint with chart fallback, supporting stocks, ETFs, indices, forex, and crypto lookups.
  • Header widget redesign: proportional truncation, context-usage bar with gradient fill, streaming indicator, and graceful narrow-terminal degradation.
  • Expanded test coverage: 680+ tests including footer state, context spans, plan prompt lifecycle, workspace context refresh, header rendering, and finance tool integration tests with wiremock.
  • Workspace context refresh with configurable TTL and deferred initial fetch.
  • Config command additions for runtime settings management.

Changed

  • Redesigned footer status strip with mode/model/status layout, context bar, and narrow-terminal fallback.
  • Plan prompt now uses numeric selection (1-4) instead of keyword input; old aliases are sent as regular messages.
  • Archived outdated docs (workspace_migration_status.md -> docs/archive/).
  • Trimmed AGENTS.md boilerplate and updated task counts.
  • Clarified release-surface documentation: crates.io publication may lag the workspace/npm wrapper.

Fixed

  • Header metadata_spans now uses saturating_sub to prevent underflow on narrow terminals.
  • Finance tool reuses a single HTTP client instead of rebuilding per request.
  • Finance tool tests no longer leak temp directories.

0.3.31 - 2026-03-08

Added

  • Replaced the finance tool backend with Yahoo Finance v8 + CoinGecko fallback for reliable real-time market data (stocks, ETFs, indices, forex, crypto).
  • Added compaction UX: status strip shows animated COMPACTING indicator during context summarization, footer reflects compaction state, and CompactionCompleted events now include message count statistics.
  • Added send flash: brief tinted background highlight on the last user message after sending.
  • Added braille typing indicator with smooth 10-frame animation cycle.

Changed

  • Redesigned the footer status strip with mode/model/token/cost layout, quadrant separators, and a context-usage bar.
  • Added Unicode prefix indicators (▸ You, ◆ Answer, ● System) to chat history cells for visual distinction.
  • Improved thinking token delineation with labeled delimiters in transcript rendering.
  • Refactored source code into workspace crates for better modularity and dependency management.

Fixed

  • Fixed Plan mode ESC key dismissing the prompt without clearing plan_prompt_pending, which prevented the prompt from reappearing on subsequent plan completions.
  • Fixed clippy lint (collapsible_if) in web browsing session management.

[0.3.30] - 2026-03-06

Added

  • Added a release-ready local npm smoke path that builds binaries, serves release assets locally, packs the wrapper, installs the tarball, and checks both entrypoints before publish.
  • Added an opt-in full-matrix local release-asset fixture so npm run release:check can be exercised before GitHub release assets exist.

Changed

  • Bumped the Rust workspace crates and npm wrapper to 0.3.30.
  • Pointed the npm wrapper's default deepseekBinaryVersion at 0.3.30 for the next coordinated Rust + npm release.
  • Updated the crates dry-run helper to work from a dirty workspace and to preflight dependent workspace crates without requiring unpublished versions to already exist on crates.io.

[0.3.29] - 2026-03-03

Added

  • Added npm publish-time release asset verification for the deepseek-tui package to fail fast when expected GitHub binaries are missing.
  • Added checksum manifests to GitHub release assets and checksum verification in the npm installer.
  • Added npm pack install-and-smoke CI coverage for the deepseek-tui wrapper package.
  • Added an end-to-end release runbook covering crates.io, GitHub Releases, and npm publication.

Changed

  • Updated npm package documentation for clearer install modes, environment overrides, and release integrity behavior.
  • Improved installer support-matrix error messaging for unsupported platform/architecture combinations.
  • Decoupled npm package version from default binary artifact version via deepseekBinaryVersion, enabling packaging-only npm releases.
  • Moved the deepseek-tui binary target inside crates/tui so cargo publish --dry-run -p deepseek-tui works from the workspace package layout.
  • Replaced the root-level crates publish workflow with an ordered workspace publish flow.
  • Reworked first-run onboarding and README copy around primary workflows instead of shortcut memorization.
  • Relaxed onboarding API-key format heuristics so unusual keys warn instead of blocking setup.

0.3.28 - 2026-03-02

Added

  • Converted the project to a modular Cargo workspace using a crates/ layout.
  • Added new crate boundaries mirroring a deepseek architecture (agent, config, core, execpolicy, hooks, mcp, protocol, state, tools, tui-core, tui, and app-server).

Changed

  • Added parity CI coverage with protocol/state/snapshot checks.
  • Updated release workflow to build both deepseek and deepseek-tui binaries.

[0.3.26] - 2026-03-02

Fixed

  • Resolved SSE stream corruption caused by byte/string position mismatch in streaming parse flow.
  • Hardened base URL validation to reject non-HTTP/HTTPS schemes.
  • Prevented multi-byte UTF-8 truncation panics in common-prefix and runtime thread summary paths.
  • Corrected context usage alert thresholds by separating warning and critical trigger levels.

Changed

  • Removed non-code utility tools from the runtime tool registry (calculator, weather, sports, finance, time) and related wiring.
  • Consolidated duplicate URL encoding helpers by delegating to shared crate::utils::url_encode.
  • Replaced broad crate-level lint suppressions with targeted #[allow(...)] annotations where justified.
  • Cleaned up dead APIs, unused struct fields, unused builder helpers, and non-integrated modules.
  • Addressed clippy findings across the codebase (collapsible conditionals, defaults, indexing helpers, and API signature cleanup).

[0.3.24] - 2026-02-25

Fixed

  • Preserve reasoning-only assistant turns for DeepSeek reasoning models (deepseek-reasoner, R-series markers) when rebuilding chat history.
  • Align SSE tool streaming indices so each tool block start/delta/stop uses the same block index.
  • Prevent transcript auto-scroll-to-bottom when a non-empty transcript selection is active.
  • Allow session picker search mode to accept the current selection with a single Enter press.
  • Preserve tool output whitespace/indentation while still wrapping long unbroken tokens.
  • Make transcript selection copy/highlighting display-width aware (wide chars and tabs).
  • Gate execpolicy behavior on the exec_policy feature flag across CLI/tool execution paths.
  • Run doctor API connectivity checks using the effective loaded config/profile (instead of reloading defaults).
  • Parse DeepSeek model context-window suffix hints such as -32k and -256k.
  • Update README config docs with key environment overrides and a direct link to full configuration docs.

0.3.23 - 2026-02-24

Changed

  • Updated project copy to describe the app as a terminal-native TUI/CLI for DeepSeek models (not pinned to a specific model generation).

Fixed

  • Model selection and config validation now accept any valid deepseek-* model ID (including future releases), while still normalizing common aliases like deepseek-v3.2 and deepseek-r1.
  • Tool-call recovery now auto-loads deferred tools when the model requests them directly, instead of failing with manual tool_search_* instructions.
  • YOLO mode now preloads tools by default (including deferred MCP tools), so model tool calls can run immediately without discovery indirection.
  • Unknown tool-call failures now include discovery guidance and nearest tool-name suggestions instead of generic availability errors.
  • Slash-command errors now suggest the closest known command (for example /modle -> /model) instead of only returning a generic unknown-command message.

0.3.22 - 2026-02-19

Added

  • Interactive /config editing modal for runtime settings updates.

Changed

  • Retired user-facing /set command path (no longer reachable/discoverable).
  • Replaced /deepseek command behavior with /links (aliases: dashboard, api).

Fixed

  • Legacy /set and /deepseek inputs now return migration guidance instead of generic unknown-command errors.

0.3.21 - 2026-02-19

Added

  • Parallel tool execution in multi_tool_use.parallel for independent task workflows.
  • Session resume-thread coverage in tests.

Changed

  • Desktop and web parity polish across the TUI and runtime surfaces.
  • Onboarding and approval UX refinement from prior phase 3 iteration.

Fixed

  • Runtime pre-release startup issues and config-path edge cases.
  • Clippy lint regressions introduced by the last parity pass.

Security/Hardening

  • General pre-release hardening for runtime app behavior.

0.3.17 - 2026-02-16

Fixed

  • Config loading now expands ~ in DEEPSEEK_CONFIG_PATH and --config paths.
  • When DEEPSEEK_CONFIG_PATH points to a missing file, config loading now falls back to ~/.deepseek/config.toml if it exists.

Changed

  • Removed committed transient runtime artifacts (session_*.json, .deepseek/trusted) and added ignore rules to prevent re-commit.

0.3.16 - 2026-02-15

Added

  • deepseek models CLI command to fetch and list models from the configured /v1/models endpoint (with --json output mode).
  • /models slash command to fetch and display live model IDs in the TUI.
  • Slash-command autocomplete hints in the composer plus Tab completion for / commands.
  • Command palette modal (Ctrl+K) for quick insertion of slash commands and skills.
  • Persistent right sidebar in wide terminals showing live plan/todo/sub-agent state.
  • Expandable tool payload views (v in transcript, v in approval modal) for full params/output inspection.
  • Runtime HTTP/SSE API (deepseek serve --http) with durable thread/turn/item lifecycle, interrupt/steer, and replayable event timeline.
  • Background task queue (/task add|list|show|cancel and POST /v1/tasks) with persistent storage, bounded worker pool, and timeline/artifact tracking.

Changed

  • Centralized the default text model (DEFAULT_TEXT_MODEL) and shared common model list to reduce drift across runtime/config paths.
  • /model now clarifies that any valid DeepSeek model ID is accepted (including future releases), while still showing common model IDs.

Fixed

  • Expanded reasoning-model detection for chat history reconstruction (supports R-series and reasoner-style naming without hardcoding single versions).
  • Aligned docs/config examples with the then-current runtime default model.

0.3.14 - 2026-02-05

Added

  • web.run now supports image_query (DuckDuckGo image search)
  • multi_tool_use.parallel now supports safe MCP meta tools (list_mcp_resources, mcp_read_resource, etc.)

Fixed

  • Encode tool-call function names when rebuilding Chat Completions history (keeps dotted tool names API-safe)

Changed

  • Prompts: stronger web.run citation placement and quote-limit guidance

0.3.13 - 2026-02-04

Fixed

  • Restore an in-app scrollbar for the transcript view

0.3.12 - 2026-02-04

Fixed

  • Map dotted tool names to API-safe identifiers for DeepSeek tool calls
  • Encode any invalid tool names for API tool lists while preserving internal names

0.3.11 - 2026-02-04

Fixed

  • Fix tool name mapping for DeepSeek API

0.3.10 - 2026-02-04

Fixed

  • Always enable mouse wheel scrolling in the TUI (even without alt screen)

[0.3.9] - 2026-02-04

Removed

  • RLM mode, tools, and documentation pending a faithful implementation of the MIT RLM design
  • Duo mode tools and prompts pending a citable research spec

Fixed

  • Footer context usage bar remains visible while status toasts are shown

Changed

  • Updated prompts and docs to reflect the simplified mode/tool surface

[0.3.8] - 2026-02-03

Fixed

  • Resolve clippy warnings (CI -D warnings) in new tool implementations

[0.3.7] - 2026-02-03

Added

  • Tooling parity updates: weather, finance, sports, time, calculator, request_user_input, multi_tool_use.parallel, web.run
  • Shell streaming helpers: exec_shell_wait and exec_shell_interact
  • Sub-agent controls: send_input and wait (with aliases)
  • MCP resource helpers: list_mcp_resources, list_mcp_resource_templates, and read_mcp_resource alias

Changed

  • Skills directory selection now prefers workspace .agents/skills, then ./skills, then global
  • Docs and prompts updated to reflect new tool surface and parity notes

0.3.6 - 2026-02-02

Added

  • New welcome banner on startup showing "Welcome to DeepSeek TUI!" with directory, session ID, and model info
  • Visual context progress bar in footer showing usage with block characters [████░░░░░░] and percentage

Changed

  • Removed custom block-character scrollbar from chat area - now uses terminal's native scroll
  • Simplified header bar: removed context percentage indicator (moved to footer as progress bar)

0.3.5 - 2026-01-30

Added

  • Intelligent context offloading: large tool results (>15k chars) are automatically moved to RLM memory to preserve the context window
  • Persistent history context: compacted messages are offloaded to RLM history variable for recall
  • Full MCP protocol support: SSE transport, Resources (resources/list, resources/read), and Prompts (prompts/list, prompts/get)
  • mcp_read_resource and mcp_get_prompt virtual tools exposed to the model
  • Dialectical Duo mode with specialized TUI rendering (Player / Coach history cells)
  • Dynamic system prompt refreshing at each turn for up-to-date RLM/Duo/working-set context
  • project_map tool for automatic codebase structure discovery
  • delegate_to_agent alias for streamlined sub-agent delegation

Changed

  • Default theme changed to 'Whale' with updated color palette
  • with_agent_tools now includes project_map, test_runner, and conditionally RLM tools for all agent modes
  • MCP McpServerConfig.command is now Option<String> to support URL-only (SSE) servers

Fixed

  • MCP test compilation errors for updated McpServerConfig struct shape

0.3.4 - 2026-01-29

Changed

  • Updated Cargo.lock dependencies

Fixed

  • Compaction tool-call pairing: enforce bidirectional tool-call/tool-result integrity with fixpoint convergence
  • Safety net scanning to drop orphan tool results in the request builder
  • Double-dispatch race in parallel tool execution

0.3.3 - 2026-01-28

Added

  • TUI polish: Kimi-style footer with mode/model/token display
  • Streaming thinking blocks with dedicated rendering
  • Loading animation improvements

0.3.2 - 2026-01-28

Fixed

  • Preserve tool-call + tool-result pairing during compaction to avoid invalid tool message sequences
  • Drop orphan tool results in request builder as a safety net to prevent API 400s

0.3.1 - 2026-01-27

Added

  • deepseek setup to bootstrap MCP config and skills directories
  • deepseek mcp init to generate a template mcp.json at the configured path

Changed

  • deepseek doctor now follows the resolved config path and config-derived MCP/skills locations

Fixed

  • Doctor no longer reports missing MCP/skills when paths are overridden via config or env

0.3.0 - 2026-01-27

Added

  • Repo-aware working set tracking with prompt injection for active paths
  • Working set signals now pin relevant messages during auto-compaction
  • Offline eval harness (deepseek eval) with CI coverage in the test job
  • Shell tool now emits stdout/stderr summaries and truncation metadata
  • Dependency-aware agent_swarm tool for orchestrating multiple sub-agents
  • Expanded sub-agent tool access (apply_patch, web_search, file_search)

Changed

  • Auto-compaction now accounts for pinned budget and preserves working-set context
  • Apply patch tool validates patch shape, reports per-file summaries, and improves hunk mismatch diagnostics
  • Eval harness shell step now uses a Windows-safe default command
  • Increased max_subagents clamp to 1..=20

0.2.2 - 2026-01-22

Fixed

  • Session save no longer panics on serialization errors
  • Web search regex patterns are now cached for better performance
  • Improved panic messages for regex compilation failures

[0.2.1] - 2026-01-22

Fixed

  • Resolve clippy warnings for Rust 1.92

0.2.0 - 2026-01-20

Changed

  • Removed npm package distribution; now Cargo-only
  • Clean up for public release

Fixed

  • Disabled automatic RLM mode switching; use /rlm or /aleph to enter RLM mode
  • Fixed cargo fmt formatting issues

0.0.2 - 2026-01-20

Fixed

  • Disabled automatic RLM mode switching; use /rlm or /aleph to enter RLM mode.

0.0.1 - 2026-01-19

Added

  • DeepSeek Responses API client with chat-completions fallback
  • CLI parity commands: login/logout, exec, review, apply, mcp, sandbox
  • Resume/fork session workflows with picker fallback
  • DeepSeek blue branding refresh + whale indicator
  • Responses API proxy subcommand for key-isolated forwarding
  • Execpolicy check tooling and feature flag CLI
  • Agentic exec mode (deepseek exec --auto) with auto-approvals

Changed

  • Removed multimedia tooling and aligned prompts/docs for text-only DeepSeek API

0.1.9 - 2026-01-17

Added

  • API connectivity test in deepseek doctor command
  • Helpful error diagnostics for common API failures (invalid key, timeout, network issues)

0.1.8 - 2026-01-16

Added

  • Renderable widget abstraction and modal view stack for TUI composition
  • Parallel tool execution with lock-aware scheduling
  • Interactive shell mode with terminal pause/resume handling

Changed

  • Tool approval requirements moved into tool specs
  • Tool results are recorded in original request order

0.1.7 - 2026-01-15

Added

  • Duo mode (player-coach autocoding workflow)
  • Character-level transcript selection

Fixed

  • Approval flow tool use ID routing
  • Cursor position sync for transcript selection

0.1.6 - 2026-01-14

Added

  • Auto-RLM for large pasted blocks with context auto-load
  • chunk_auto and rlm_query auto_chunks for quick document sweeps
  • RLM usage badge with budget warnings in the footer

Changed

  • Auto-RLM now honors explicit RLM file requests even for smaller files

0.1.5 - 2026-01-14

Added

  • RLM prompt with external-context guidance and REPL tooling
  • RLM tools for context loading, execution, status, and sub-queries (rlm_load, rlm_exec, rlm_status, rlm_query)
  • RLM query usage tracking and variable buffers
  • Workspace-relative @path support for RLM loads
  • Auto-switch to RLM when users request large file analysis (or the largest file)

Changed

  • Removed Edit mode; RLM chat is default with /repl toggle

0.1.0 - 2026-01-12

Added

  • Initial alpha release of DeepSeek TUI
  • Interactive TUI chat interface
  • DeepSeek API integration (OpenAI-compatible Responses API)
  • Tool execution (shell, file ops)
  • MCP (Model Context Protocol) support
  • Session management with history
  • Skills/plugin system
  • Cost tracking and estimation
  • Hooks system and config profiles
  • Example skills and launch assets