| 1 | # Changelog |
| 2 | |
| 3 | All notable changes to the Go line (Reasonix 1.0+) are recorded here. The legacy |
| 4 | `0.x` TypeScript history lives on the [`v1`](https://github.com/esengine/DeepSeek-Reasonix/tree/v1) |
| 5 | branch. |
| 6 | |
| 7 | ## Unreleased |
| 8 | |
| 9 | ### Fixed |
| 10 | |
| 11 | - **Issue #7575:** Linux Bash under bubblewrap no longer mounts a fresh empty |
| 12 | `--tmpfs /tmp` on every call. Consecutive commands in the same logical session |
| 13 | now share a private temporary directory (bound at `/tmp` on Linux, exported via |
| 14 | `TMPDIR`/`TMP`/`TEMP` on all platforms) without exposing the host public |
| 15 | temporary root. `/new`, `/clear`, resume of another session, and branch |
| 16 | switches rotate the directory; model/settings hot rebuilds keep it. Sub-agent |
| 17 | runs get independent directories. Temporary files are not durable across process |
| 18 | restarts. |
| 19 | |
| 20 | ### Added |
| 21 | |
| 22 | - Added `[ui].show_turn_usage` so CLI/TUI users can hide per-request token and |
| 23 | cost receipts from transcript scrollback without disabling usage accounting. |
| 24 | |
| 25 | ## [1.20.0] — 2026-08-05 |
| 26 | |
| 27 | Extension kernel, Task Monitor, and safer Goal completion. |
| 28 | |
| 29 | Compact decision surfaces, local decision receipts, unified extension kernel, |
| 30 | native Task Monitor, bounded sub-agent progress, Goal fail-closed completion, |
| 31 | MiMo and DashScope Responses fixes, SSH remote access simplification, and |
| 32 | multiple Desktop stability improvements. |
| 33 | |
| 34 | ### Highlights |
| 35 | |
| 36 | - **Unified Extension Kernel and Extension Protocol v1**: Immutable runtime |
| 37 | snapshots, fail-atomic reload, Plugin Manifest v1 (prompts, themes, full-trust |
| 38 | code runtimes), stable JSON-RPC sidecar protocol, interceptor dispatch, |
| 39 | streaming provider adapter, structured UI, and Go SDK. |
| 40 | - **Native Task Monitor**: Monitor agent tasks natively in CLI and Desktop with |
| 41 | lifecycle semantics and session-scoped summary view. |
| 42 | - **Bounded Sub-agent Progress Forwarding**: Forward structured progress for |
| 43 | `task`, `parallel_tasks`, and `fleet` without flooding the parent stream. |
| 44 | Renders nested lifecycle cards in Desktop and stable per-child transcript |
| 45 | slots in CLI. |
| 46 | - **Goal Completion Fail-Closed**: Replace free-form Goal footer markers with a |
| 47 | stable `update_goal` tool and epoch-scoped per-turn reports. Centralized |
| 48 | completion logic with bounded evaluator, progress-aware budgets, and |
| 49 | pause/resume controls. |
| 50 | - **Ablation Subsystem Switches**: Switch subsystems off behind one shared |
| 51 | vocabulary for controlled experiments. Includes planner, subagent, retrieval, |
| 52 | evidence, and compaction. |
| 53 | - **Benchmark Cost per Solved Task**: Report cost per solved task, tokens per |
| 54 | solved, median wall time, and failure-class breakdown in e2e reports. |
| 55 | - **Compact Decision Surfaces and Local Receipts**: Compact footer decision-card |
| 56 | layout with bounded scroll, dense action rows, and overflow disclosure. |
| 57 | Record bounded Ask, approval, and recovery decisions as local transcript |
| 58 | receipts. |
| 59 | - **Simplified SSH Remote Access**: Remove Remote Workbench protocol and |
| 60 | stacks; reuse CLI/Serve remote model. Desktop opens per-host native web child |
| 61 | windows via SSH. Keyless remote Serve setup with loopback-only page. |
| 62 | - **Model Usage Charts with Primer Palette**: Replace monochrome accent ramp |
| 63 | with GitHub Primer data-viz two-set categorical palette. Fix donut overflow |
| 64 | on hover and keyboard accessibility. |
| 65 | - **Cross-platform Extension and Task Monitor Reliability**: Make |
| 66 | content-reference eviction deterministic, reject Unix and Windows absolute |
| 67 | plugin paths consistently, stabilize parallel-task cancellation, and restore |
| 68 | reliable Windows validation for Task Monitor and remote provider setup. |
| 69 | - **MiMo and DashScope Responses Wire Alignment**: Fix multi-turn tool loops, |
| 70 | reasoning round-trip, JSON output for MiMo; fix DashScope second-turn 400 |
| 71 | error, all-zero usage suppression, and vendor-aware cache TTL. |
| 72 | - **Desktop Stability Fixes**: Recover stuck updates and legacy WebKit, contain |
| 73 | macOS alias repair startup crashes, keep composer overflow stacks readable, |
| 74 | and harden account verification and community flows. |
| 75 | - **Remote Web Recovery After SSH Drops**: Add integration regression test for |
| 76 | SSH drop, forward recovery, and window reload. Document transient outage |
| 77 | behavior. |
| 78 | - **CI: Auto-minimize Activity-Farming Spam Comments**: Detect and minimize |
| 79 | template spam comments from non-contributor accounts based on structural |
| 80 | signals. |
| 81 | |
| 82 | ### Added |
| 83 | |
| 84 | - Added Extension Protocol v1 and the unified extension kernel: installed or |
| 85 | linked sidecars can contribute tools, skills, commands, hooks, MCP servers, |
| 86 | providers, interceptors, and structured UI surfaces through a versioned |
| 87 | NDJSON contract and the public Go SDK. CLI, Desktop, ACP, and Serve support |
| 88 | fail-atomic runtime reloads; Serve also renders extension surfaces and lists |
| 89 | extension-hosted providers without exposing credentials. |
| 90 | - Added the structured Goal completion protocol: the always-registered |
| 91 | `update_goal` tool (continue/complete/blocked with reason and next_action) |
| 92 | replaces the `[goal:*]` footer markers. The Goal FSM is now the exclusive |
| 93 | cross-turn decision point and validates every complete claim against Delivery |
| 94 | readiness; when the model submits no report, an independent bounded evaluator |
| 95 | (recovery_model → guardian_model → main model, no tools/history, usage |
| 96 | attributed to `goal-evaluator`) judges the turn once, and any evaluator |
| 97 | failure pauses the goal instead of continuing silently. |
| 98 | - Added Goal budget classes with safe pauses: simple 10 turns / 200k tokens, |
| 99 | write 20 turns / 400k tokens, AutoResearch 40 turns / 800k tokens, and a |
| 100 | 4-turn no-host-verifiable-progress gate. Pauses keep all Goal state; `/goal |
| 101 | resume` continues and adds one slice of the current class when the pause was |
| 102 | budget-related. `/goal status` shows the full turn/token/no-progress runtime, |
| 103 | and `/goal pause` manually suspends a running Goal. |
| 104 | - Added the `goalRuntime` nested view to the desktop Meta, the remote protocol |
| 105 | (`session/goal/pause` operation, `goalRuntime` DTO on session meta), and the |
| 106 | ACP status payload; the desktop Composer goal menu shows the runtime summary |
| 107 | with distinct pause/end/resume actions. |
| 108 | |
| 109 | ### Changed |
| 110 | |
| 111 | - Delivery no longer retries final-answer readiness with hidden model messages: |
| 112 | a plain Delivery run ends on the first unsatisfied final answer and surfaces |
| 113 | the recovery card, while a Goal + Delivery run has the Goal FSM absorb the |
| 114 | failure and continue under budget with the missing requirements as the next |
| 115 | turn's prompt. Historical `[goal:*]` footers are stripped from old transcripts |
| 116 | for display only and never participate in state decisions. |
| 117 | - Added a **Remote SSH** module (VS Code Remote-SSH style): a user-global |
| 118 | `[remote]` host config, `reasonix remote` CLI (add/list/remove/import/test/ |
| 119 | connect/status/forward/serve/fs) and `/remote` slash command, an SSH transport |
| 120 | with trust-on-first-use host-key verification, keepalive + exponential-backoff |
| 121 | reconnect, `-L`/`-R` port forwarding, and SFTP file access. `connect` |
| 122 | bootstraps a persistent `reasonix serve` on the remote host and tunnels its |
| 123 | loopback port so the full agent runs remotely. The desktop app adds a |
| 124 | **Settings -> Remote SSH** host manager, a remote file browser/editor, a |
| 125 | port-forwarding panel, and a status-bar connection chip. Linux/macOS remotes. |
| 126 | - Added `reasonix serve --port-file/--token-file/--pid-file` so a supervised |
| 127 | headless serve can bind an ephemeral port and read its auth token from a file |
| 128 | (keeping it out of `ps`). |
| 129 | - Added an authenticated, loopback-only Provider setup page for `reasonix |
| 130 | serve`. A Serve whose selected Provider is missing its API key now remains |
| 131 | reachable, stores the submitted key in that host's Reasonix credential file, |
| 132 | and rebuilds the active controller in place without restarting Serve. |
| 133 | - Added Claude Code-style searchable CLI pickers for models, providers, and |
| 134 | sessions, with arrow, Vim, and `Ctrl+P` / `Ctrl+N` navigation. |
| 135 | - Added `-p` / `--print`, `text`, `json`, and `stream-json` output modes for |
| 136 | one-shot use and automation. |
| 137 | - Added session-scoped `--allowed-tools`, repeatable `--add-dir`, Claude-compatible |
| 138 | permission modes, flexible `--resume [QUERY]`, and the `--copy` resume escape |
| 139 | hatch. |
| 140 | - Added `/status` details for the active model, effort, cache, Git state, |
| 141 | background jobs, work profile, and provider balance where available. |
| 142 | - Remote SSH workspaces now open as a standalone remote web window again. |
| 143 | Opening a workspace from the status bar or the Remote Server tab starts or |
| 144 | reuses the remote `reasonix serve`, tunnels its loopback port, and opens the |
| 145 | Serve web client in a dedicated per-host window. The remote web page uses |
| 146 | the provider configuration and API keys on the **remote** host; the desktop |
| 147 | no longer exposes its local providers to remote hosts. If the selected remote |
| 148 | Provider is missing its API key, the window opens a setup page that saves the |
| 149 | key only on that host and then opens the normal Serve UI. The Remote Workbench |
| 150 | protocol, its Provider Broker, and the same-window remote projection were |
| 151 | removed. Legacy mirror and provider-trust files are not deleted |
| 152 | automatically; Settings -> Remote SSH shows a cleanup card when they exist. |
| 153 | The hidden `remote attach-workspace`, `remote runtime-workbench`, and |
| 154 | `remote workbench-build-id` commands now fail with a pointer to |
| 155 | `reasonix remote connect <host> --open`. |
| 156 | - Automatic Plan Mode has been retired. Plan Mode is now always entered through |
| 157 | an explicit user choice, and the one-time config v5 upgrade removes legacy |
| 158 | `agent.auto_plan` and `agent.auto_plan_classifier` values so upgraded users |
| 159 | receive the same behavior as new users. |
| 160 | - `Shift+Tab` now cycles CLI safe modes from Ask to Auto to Plan, while YOLO |
| 161 | remains an independent `Ctrl+Y` toggle. |
| 162 | - Model, provider, resume, and approval menus now use consistent row selection; |
| 163 | slash completion, help, aliases, and dispatch share one command registry. |
| 164 | - The full-screen CLI composer now uses theme-accented borders and a slim bar |
| 165 | cursor by default, grows within the available terminal height, scrolls long |
| 166 | drafts independently, and preserves selections across explicit image paste. |
| 167 | - The persistent CLI footer now uses a responsive, theme-aware layout for |
| 168 | interaction state, model, effort, localized work mode, Git identity, cache, |
| 169 | context, compaction headroom, jobs, and balance. Narrow terminals move or |
| 170 | compact complete groups instead of clipping labels. |
| 171 | - CLI clipboard actions now separate terminal-native text paste from explicit |
| 172 | image paste: `Ctrl+V` on macOS/Linux, `Alt+V` on Windows, or `/paste-image`. |
| 173 | Local transcript copy verifies the native clipboard write, while SSH uses a |
| 174 | clearly labelled OSC 52 fallback. |
| 175 | - Runtime rebuilds after model, effort, or work-mode changes now preserve the |
| 176 | conversation, session permission overrides, additional directories, and |
| 177 | session lease ownership. |
| 178 | - Agent execution now monitors host-observed Todo progress automatically. A |
| 179 | stalled current item receives a recovery nudge after 8 tool-call rounds with |
| 180 | no new completion, unique read, command, or mutation, and pauses with saved |
| 181 | work after 16. Exact repeats do not renew the progress lease; real work does. |
| 182 | Two-level task lists keep the single in_progress contract: the active |
| 183 | sub-step is the only current item while its phase stays pending, and the |
| 184 | phase becomes in_progress to sign off only after all of its sub-steps are |
| 185 | completed. A level-1 sub-step with no phase header above it is rejected. |
| 186 | Executor and planner rounds now use automatic progress management. Retired |
| 187 | `[agent].max_steps` and `planner_max_steps` keys remain parseable for upgrades, |
| 188 | but are ignored and removed by a one-time migration so stale hidden limits |
| 189 | cannot truncate new behavior. One-off CLI and unattended bot limits remain. |
| 190 | |
| 191 | ### Fixed |
| 192 | |
| 193 | - Fixed long parallel sub-agent research being silently lost when combined |
| 194 | `parallel_tasks` or `fleet` answers exceeded the single-tool output limit. |
| 195 | Persisted sessions now keep each child transcript independently, return a |
| 196 | bounded fair preview plus stable reference for every result, and page full |
| 197 | answers through the conversation-scoped `read_subagent_result` tool. |
| 198 | - Fixed Remote Workbench failing with only `initialize: workbench-desktop: |
| 199 | connection closed` on fresh or cross-platform SSH hosts. Desktop now proves |
| 200 | the exact Host CLI Build ID, provisions the matching verified release without |
| 201 | requiring remote npm, runs the managed binary explicitly, and preserves a |
| 202 | safe structured bootstrap error when the remote command exits early. |
| 203 | - Hardened Bash permission reuse for dynamic and indirect execution. Parameter/arithmetic expansions, |
| 204 | assignments, redirects, heredocs, and globs can only be remembered as exact |
| 205 | `Bash=<literal>` rules, while still using Auto's normal fallback. Nested or |
| 206 | indirect execution now requires a human in interactive Ask/Auto and fails |
| 207 | closed in headless Ask/Auto/DontAsk. Broad Bash rules, Guardian/hook allows, |
| 208 | and the approved-plan window can no longer silently authorize that stricter |
| 209 | class; YOLO remains the explicit full-access bypass and sandbox enforcement |
| 210 | is unchanged. |
| 211 | - Fixed Desktop sessions incorrectly locking themselves during Goal + Delivery |
| 212 | mode changes, controller rebuilds, duplicate-tab restore, and background |
| 213 | reattachment. Desktop now keeps one process-local runtime owner per canonical |
| 214 | session, fences stale controller events by runtime epoch, blocks sends until |
| 215 | that runtime is ready, and scopes single-instance ownership to |
| 216 | `REASONIX_HOME` instead of the executable path. Switching saved sessions is |
| 217 | now transactional: a target build, restore, or lease failure leaves the |
| 218 | current controller, lease, path, mode profile, and runtime epoch untouched. |
| 219 | - Stabilized the desktop rich composer caret after skill and plugin invocation |
| 220 | tags. DOM→model and model→DOM selection mapping now treat invocation chips as |
| 221 | zero-length atoms while still counting user text that lands inside the NBSP |
| 222 | caret anchor (common on Windows WebView2), restore both selection ends, and |
| 223 | recover the insertion point from a `beforeinput` snapshot when the browser |
| 224 | temporarily loses selection — so mid-text edits no longer jump to the end. |
| 225 | - Isolated the Windows desktop WebView2 shell from stale system proxies, so an |
| 226 | exited proxy client cannot leave the embedded UI hidden during startup. If |
| 227 | WebView2 still does not reach DOM-ready within 15 seconds, Reasonix now shows |
| 228 | the native window with a recovery prompt instead of appearing not to launch. |
| 229 | Remote Markdown images are fetched by the backend with Reasonix's proxy |
| 230 | configuration instead of bypassing that proxy through the isolated WebView. |
| 231 | - Restored captured-mouse right-click text paste, made composer drag selection |
| 232 | copy through the verified native clipboard path, and kept non-Git footer |
| 233 | telemetry left-aligned without reserving an empty data band. |
| 234 | - Restored stateful MCP behavior after the v1.17.13 regression: user-added |
| 235 | servers work without extra trust settings (including delivery-mode on-demand |
| 236 | calls), repository-provided servers use one exact launch confirmation, and |
| 237 | stdio tools reuse one persistent process so browser sessions survive across |
| 238 | calls without repeated startup latency. The former trust/reverify/catalog |
| 239 | management UI and CLI are removed. |
| 240 | - Localized persistent-footer labels and displayed work-mode values in English, |
| 241 | Simplified Chinese, and Traditional Chinese, while keeping command arguments |
| 242 | stable. |
| 243 | - Restored the `0.53` content boundary: model output, tool output, session |
| 244 | transcripts, recovery branches, and background-job artifacts retain their |
| 245 | original text instead of being rewritten by heuristic secret redaction. |
| 246 | Credential masking remains in key-entry summaries and explicit diagnostic or |
| 247 | session-cleanup paths. Transcript-bearing session/job sidecars are kept |
| 248 | private (`0600`, with private job directories), and the retired |
| 249 | `redact_tool_output` setting is removed with a one-time upgrade notice. |
| 250 | |
| 251 | ### Notes |
| 252 | |
| 253 | - Full bilingual release notes: |
| 254 | <https://reasonix.io/changelog/v1.20.0/> · |
| 255 | [GitHub release](https://github.com/esengine/DeepSeek-Reasonix/releases/tag/desktop-v1.20.0). |
| 256 | - The detailed entries below accumulated on `main-v2` after 1.0.0 and shipped |
| 257 | across 1.1.0–1.20.0; per-version attribution lives in the per-version release |
| 258 | notes linked above. |
| 259 | |
| 260 | ## 1.1.0 – 1.19.7 |
| 261 | |
| 262 | Per-version entries for the intermediate releases are published in the |
| 263 | [bilingual release notes](https://reasonix.io/changelog/) and on the |
| 264 | [GitHub releases page](https://github.com/esengine/DeepSeek-Reasonix/releases). |
| 265 | |
| 266 | ## [1.0.0] — 2026-06-03 |
| 267 | |
| 268 | First stable release — a **ground-up rewrite in Go**. Not an upgrade of the `0.x` |
| 269 | TypeScript line; a new codebase that becomes the default (`main-v2`). |
| 270 | |
| 271 | ### Highlights |
| 272 | |
| 273 | - **Go kernel**: a single static binary (CGO-free), cross-compiled for |
| 274 | darwin/linux/windows on amd64 + arm64. Distributed via npm (the package wraps |
| 275 | the native binary), Homebrew (`esengine/reasonix` tap), and release archives; |
| 276 | no Node runtime needed to run it. |
| 277 | - **Agent core**: the loop, built-in tools (read/write/edit/multi_edit/glob/grep/ |
| 278 | ls/bash/web_fetch/todo_write), permission gate, sandboxed bash, and the |
| 279 | DeepSeek prefix-cache–oriented design. |
| 280 | - **Subagents**: `task` plus explore/research/review/security_review skill agents. |
| 281 | - **Skills & hooks**: Claude-Code-style skills (`internal/skill`) and hooks |
| 282 | (`internal/hook`), symlink-aware and slash-integrated. |
| 283 | - **MCP client**: connect external servers over stdio / Streamable HTTP; reads |
| 284 | `[[plugins]]` and a Claude-Code `.mcp.json`. |
| 285 | - **Code intelligence via CodeGraph**: a tree-sitter symbol/call graph |
| 286 | (`codegraph_*` tools) replaces embedding semantic search — no embedding service |
| 287 | or API cost. Fetched into a local cache on first use (or `reasonix codegraph |
| 288 | install`) and indexed in the background, so installs and startup stay fast. |
| 289 | - **Plan mode** with evidence-backed step sign-off (`complete_step`). |
| 290 | - **Memory**: `REASONIX.md` hierarchy + auto-memory, folded into the cache-stable |
| 291 | prefix. |
| 292 | - **ACP** (`reasonix acp`) and an HTTP/SSE server frontend; desktop app (Wails). |
| 293 | |
| 294 | ### Fixed |
| 295 | |
| 296 | - **File encoding support restored** — GBK/GB18030 (and other non-UTF-8) files |
| 297 | can now be read, edited, and grepped correctly. The v2 rewrite had dropped |
| 298 | v1's encoding detection; files in CJK Windows charsets were silently misread |
| 299 | or rejected as binary. The read/edit/write round-trip now preserves the |
| 300 | original file encoding. (#2637) |
| 301 | |
| 302 | ### Notes |
| 303 | |
| 304 | - Versions: the legacy TypeScript line stays in `0.x`; the Go line starts at |
| 305 | `1.0.0`. See [docs/MIGRATING.md](docs/MIGRATING.md). |
| 306 | - Release archives ship a bare binary; CodeGraph is fetched on first use. Windows |
| 307 | support for the fetched runtime is unverified — install `codegraph` on PATH if |
| 308 | the auto-fetch doesn't resolve there. |
| 309 | |
| 310 | [1.20.0]: https://github.com/esengine/DeepSeek-Reasonix/releases/tag/desktop-v1.20.0 |
| 311 | [1.0.0]: https://github.com/esengine/DeepSeek-Reasonix/releases/tag/v1.0.0 |
| 312 |