What's Changed
- fix: skip saving empty conversations to history when switching workspace/model by @AtmoOmen in #2401
- [v2] Stabilize tool schema ordering for prompt cache reuse by @SivanCola in #2402
- [v2] Canonicalize MCP JSON schemas for stable cache prefixes by @SivanCola in #2403
- fix(gitignore): update v2 build ignores by @PorunC in #2415
- test(event): add comprehensive unit tests for event package by @HUQIANTAO in #2417
- docs: add CONTRIBUTING.md and update .gitignore by @HUQIANTAO in #2427
- feat(glob): add ** recursive pattern support by @HUQIANTAO in #2423
- fix(serve): gate CORS behind explicit origin, wire RunGraceful with signal handling by @HUQIANTAO in #2459
- fix(openai): drain error response body for HTTP connection reuse by @HUQIANTAO in #2450
- feat(desktop): add release pipeline and self-updater by @esengine in #2466
- fix(plugin): log prompt/resource listing failures in Host.Add by @HUQIANTAO in #2448
- fix(subagent): tighten inherited tool boundaries by @paradoxSCH in #2434
- feat(desktop): use a fresh signing key; add genkey/verify by @esengine in #2467
- fix: replace silent error discards with structured logging by @HUQIANTAO in #2421
- test(hook): add comprehensive runner, format, and payload tests by @HUQIANTAO in #2430
- test(memory): add tests for splitFrontmatter, slug, oneLine, render, and store edge cases by @HUQIANTAO in #2437
- test(diff): add edge case tests for splitLines, isBinary, CRLF, large files, and helpers by @HUQIANTAO in #2438
- test(billing): add edge case tests for symbol, Display, and Fetch error paths by @HUQIANTAO in #2439
- test(permission): add edge case tests for ParseDecision, matchGlob, Subject, and rememberRule by @HUQIANTAO in #2440
- test(jobs): add timeout, edge case, and helper tests by @HUQIANTAO in #2441
- test(command): add edge case tests for splitFrontmatter, Render, and Load by @HUQIANTAO in #2442
- test(desktop): add wire.go and sessions.go tests by @HUQIANTAO in #2452
- test(serve): add endpoint tests for cancel, approve, new, compact, index, malformed input by @HUQIANTAO in #2453
- test(agent): add comprehensive session, save, load, and preview tests by @HUQIANTAO in #2454
- test(builtin): add dedicated tests for read_file, ls, glob, and grep tools by @HUQIANTAO in #2432
- test(builtin): add dedicated tests for write_file, edit_file, multi_edit, and confine by @HUQIANTAO in #2433
- feat(provider): add Anthropic Messages API provider by @esengine in #2469
- feat(provider): support Anthropic extended thinking round-trip by @esengine in #2471
- test(provider): add comprehensive unit tests for provider package by @HUQIANTAO in #2418
- test(skill): add edge case tests for IsValidName, splitFrontmatter, parseAllowedTools, parseRunAs, and helpers by @HUQIANTAO in #2443
- test(acp): add tests for newSessionID, mcpSpecs, transcriptPath, and acpSession by @HUQIANTAO in #2445
- test(cli): add tests for visibleWidth, padRight, and boxed helpers by @HUQIANTAO in #2455
- test(desktop): add workspace.go and settings_app.go helper tests by @HUQIANTAO in #2458
- fix(ci): update golangci-lint v2 config, move sandbox tests to platform-specific files by @HUQIANTAO in #2444
- feat(sandbox): add bubblewrap support for Linux with enforce-mode warning by @HUQIANTAO in #2447
- refactor: extract shared frontmatter parser into internal/frontmatter by @HUQIANTAO in #2446
- refactor: deduplicate compactArgs between agent and cli by @HUQIANTAO in #2449
- fix(agent): break the same-tool, same-error retry loop by @esengine in #2474
- style: gofmt storm_test.go to unblock CI by @esengine in #2475
- fix(tui): add shift+enter to InsertNewline key binding, with test by @JimmyDaddy in #2425
- feat(compaction): surface context compaction as a card across CLI, desktop, headless by @esengine in #2477
- fix(ask): reject blank option labels by @XTLine in #2426
- feat(subagent): configure skill model overrides by @GTC2080 in #2451
- fix(cli): /model switch breaks terminal + garbles streaming output by @HUQIANTAO in #2472
- feat(hooks): add lifecycle hook events + compaction focus & headroom by @esengine in #2478
- docs: drop external-agent references from two comments by @esengine in #2480
- feat(outputstyle): selectable persona/tone output styles by @esengine in #2482
- Clarify CLI Tool Approval Prompts by @SivanCola in #2484
- feat(tool): add notebook_edit for Jupyter .ipynb cells by @esengine in #2491
- Add release cache-hit guard by @SivanCola in #2470
- fix(tool): repair notebook_edit test compile error by @esengine in #2492
- Conversation Branch Tree for Chat Sessions / 对话分支树管理 by @SivanCola in #2460
- fix(cli): /model switch breaks terminal + garbles streaming output by @HUQIANTAO in #2486
- Fix desktop transcript streaming autoscroll by @SivanCola in #2487
- feat(tool): add slash_command for model-invoked slash commands by @esengine in #2494
- [v2] Skip approval for known read-only bash commands by @SivanCola in #2411
- [v2] Add range and Go symbol deletion tools by @SivanCola in #2410
- test(builtin): make resolveIn absolute-path test cross-platform by @esengine in #2500
- [v2] Add DeepSeek thinking effort controls by @SivanCola in #2408
- build: add Go-native git hooks (make hooks) by @esengine in #2505
- test: make path and codegraph tests Windows-portable by @esengine in #2507
- feat(desktop): render LaTeX math in markdown via KaTeX by @esengine in #2509
- fix(desktop): render LaTeX with ( ) and [ ] math delimiters by @esengine in #2510
- fix(desktop): pin vite dev server to 127.0.0.1 (fix Windows blank window) by @esengine in #2511
- fix(desktop): protect [ spacing and swap | for \vert in math (#2017 parity) by @esengine in #2514
- fix(desktop): save provider/config to global user config, surviving workspace switch by @esengine in #2516
- Support image paste attachments in CLI by @SivanCola in #2508
- Add secure desktop image attachments by @SivanCola in #2504
- feat(cli): read clipboard images on Windows and Linux by @esengine in #2525
- TUI: alt-screen transcript viewport with scrollbar, selection, and copy by @esengine in #2524
- fix(model): skip providers without an API key in all model pickers by @AtmoOmen in #2519
- feat(cli): in-chat /resume to switch saved sessions live by @esengine in #2531
- fix(tool): make the shell tool work on Windows without bash by @esengine in #2532
- test(sandbox): cover no-bash → PowerShell fallback deterministically by @esengine in #2533
- test(cli): exercise /resume through the slash dispatcher end-to-end by @esengine in #2534
- fix(sandbox): make shell-resolution tests host-independent by @esengine in #2536
- Keep MCP startup resilient to server failures by @SivanCola in #2502
- feat(plan): layered two-level plans (phases → sub-steps) by @esengine in #2539
- Support manual connect for configured MCP servers by @SivanCola in #2503
- fix(plan): parse numbered-heading phases so layering survives real plans by @esengine in #2543
- feat(desktop): indent layered-plan sub-steps in the todo panel by @esengine in #2544
- test(boot): disable codegraph in the MCP-failure test by @esengine in #2545
- test(desktop): make sessionTitlesPath test platform-agnostic by @esengine in #2546
- fix(cli): CJK bold (**) not rendering — goldmark right-flanking workaround by @HUQIANTAO in #2476
- fix(desktop): shorten Windows cwd in the status breadcrumb by @esengine in #2547
- fix: fold long pasted text in composers by @SivanCola in #2517
- feat(cli): collapse thinking with a live marker + duration summary by @esengine in #2562
- feat(desktop): MCP & Skills drawer with connector management by @esengine in #2566
- feat(agent): segment read-only tool batch execution by @LegGasai in #2541
- fix: @目录引用递归列出子目录 + glob简单模式自动递归回退 by @xinrenH in #2506
- [v2] Add reusable mock provider for agent tests by @SivanCola in #2412
- feat(tui): require double Ctrl+C to quit when idle, preventing accidental exits by @lanshi17 in #2501
- fix(provider): repair dangling tool_call pairing before send by @esengine in #2567
- feat(agent): verify complete_step evidence receipts by @GTC2080 in #2540
- Auto Plan Gate for Complex Tasks / 复杂任务自动计划门 by @SivanCola in #2457
- fix(agent): stop auto-compaction re-firing every turn by @esengine in #2571
- feat(agent): verify complete_step steps against todos by @GTC2080 in #2569
- feat: add PostLLMCall hook for post-model-turn reasoning transform by @i1j in #2568
- feat(desktop): async startup — non-blocking boot.Build + parallel plugin init by @HUQIANTAO in #2563
- feat(tui): add /quit slash command for session exit by @lanshi17 in #2577
- feat(ci): e2e benchmark bot triggered by a PR comment by @esengine in #2574
- fix(ci): build e2e harness from default branch, not PR head by @esengine in #2584
- feat(ci): tune diff test-gen (step cap, clearer report) by @esengine in #2587
- feat(agent): guard todo completion transitions by @GTC2080 in #2576
- feat(ci): surface generated tests + per-test differential by @esengine in #2592
- feat(ci): harden e2e diff bot (coverage, regression, retries, safety) by @esengine in #2593
- feat(ci): mutation testing for diff bot (behavioral signal for additive PRs) by @esengine in #2600
- v2新桌面 by @SivanCola in #2561
- feat(memory): forget tool, fallible-recall framing, richer index by @esengine in #2599
- fix: MiMo reasoning_content 不需要回传 — 实测验证 by @Bernardxu123 in #2613
- Fix plan approval blocking the proposal by @SivanCola in #2616
- chore(desktop): tidy plan-approval dock follow-ups by @esengine in #2619
- fix(control): surface errors from /branch and /switch slash commands by @lanshi17 in #2610
- fix(boot): detach codegraph background install from the Build context by @lanshi17 in #2612
- fix: bash tool WSL launcher probe fallback to Git Bash by @Bernardxu123 in #2620
- Prefer Numeric Choices in CLI Approval Prompts by @SivanCola in #2601
- fix(sandbox): bound the bash WSL probe with a timeout by @esengine in #2625
- Remove No Project option from workspace menu by @SivanCola in #2624
- chore(desktop): drop orphaned composer.noProject locale string by @esengine in #2626
- Refine MCP and Skills Drawer Hierarchy by @SivanCola in #2621
- feat(desktop): dock regular tool approvals above the composer by @esengine in #2627
- Fix typed nil interface panics by @SivanCola in #2607
- feat(agent): bind todo completion receipts to signed todo by @GTC2080 in #2604
- Improve MCP drawer details and skill metadata badges by @SivanCola in #2634
- Refine desktop workspace panel layout by @SivanCola in #2629
- Improve Composer Handling for Long Pasted Text by @SivanCola in #2633
- chore(desktop): drop dead MCP group-title strings and CSS by @esengine in #2640
- chore(desktop): drop committed workspace layout demo gif by @esengine in #2639
- chore(desktop): clean up after composer paste preview by @esengine in #2638
- feat(desktop): refine memory drawer management by @SivanCola in #2635
- chore(desktop): tighten jumpTo comment by @esengine in #2641
- feat(attach): file drag attach + inline image tokens (+ classifier panic fix) by @esengine in #2647
- feat: native-Windows steering + optional ripgrep search engine by @esengine in #2650
- feat: restore GBK/GB18030 file encoding support (#2637) by @lanshi17 in #2645
- test(builtin): make GBK round-trip test self-contained by @esengine in #2655
- feat(grep): native search honors .gitignore by @esengine in #2656
- fix(desktop): don't submit on IME confirm Enter by @dcs02280653-collab in #2632
- feat(grep): nested .gitignore + skip hidden files (match ripgrep) by @esengine in #2660
- feat(deepseek): support thinking effort controlsFeat/deepseek thinking effort by @kabaka9527 in #2648
- feat(grep): complete .gitignore parity — nested negation + core.excludesFile by @esengine in #2664
- feat(cli): add doctor diagnostics command by @XTLine in #2631
- fix(doctor): redact home directory from report paths by @esengine in #2667
- fix(desktop): compact approval shelf by @SivanCola in #2663
- fix(desktop): repair module build and add CI coverage by @esengine in #2668
- chore(desktop): drop approval i18n keys orphaned by #2663 by @esengine in #2669
- fix: resolve stdio MCP commands with effective PATH by @SivanCola in #2665
- fix(desktop): keep transcript pinned when approval shelf appears by @SivanCola in #2670
- ci: run the root test matrix on windows-latest by @esengine in #2674
- refactor(desktop): dedupe transcript re-pin logic from #2670 by @esengine in #2676
- fix(config): merge [[plugins]] across config files instead of replacing by @esengine in #2684
- fix(bash): suppress the console window for shell commands on Windows by @esengine in #2686
- feat(desktop): surface crashes instead of blanking to a white screen by @esengine in #2691
- fix(desktop): wire up tool_progress so live bash output doesn't blank the app by @esengine in #2693
- fix(memory): deduplicate symlinked memory docs by @lizhengwu in #2688
- style(memory): drop redundant docSeen.add comment by @esengine in #2695
- fix(io): copy-fallback for atomic writes on cross-device (EXDEV) rename by @esengine in #2696
- Manage Agent Skill Sources in Desktop by @SivanCola in #2692
- refactor(config): share skill-path canonicalization, fold case on Windows by @esengine in #2698
- feat(plugin): unify StartAll/StartAvailable with timeout & concurrency cap by @SivanCola in #2675
- feat: add configurable network proxy settings by @SivanCola in #2690
- Fix session list jumping on resume by @SivanCola in #2697
- refactor(desktop): share sessionActivityTime helper by @esengine in #2699
- feat(plugin): defer prompts/resources to a background phase by @esengine in #2701
- fix(cli): recall submitted input with arrow keys by @esengine in #2700
- feat(proxy): auto-detect the Windows system proxy (PAC/WPAD/IE) by @esengine in #2702
- fix(skill): require relevant inline skill use, keep subagent judgment-based by @esengine in #2704
- feat(plugin): persist handshake schema & startup latency to user cache by @esengine in #2703
- Polished Slash Command Views by @SivanCola in #2521
- Define a cohesive desktop light and dark theme system by @SivanCola in #2636
- chore: clear staticcheck findings across internal packages by @esengine in #2706
- ci: add a -race job and run the prompt-cache prefix guard by @esengine in #2707
- fix(desktop): restore history reasoning and running previews by @SivanCola in #2705
- fix(doctor): report effective sandbox availability, not just mode by @esengine in #2708
- fix(doctor): surface warnings at the top of the report by @esengine in #2710
- test: goroutine-leak guard (goleak) + fix the leaks it found by @esengine in #2709
- feat(plugin): tier-based MCP loading with cache-aware lazy placeholders by @esengine in #2713
- feat(tui): clear composer on single Ctrl+C when input is non-empty by @lanshi17 in #2712
- fix(jobs): mark a killed job Killed synchronously by @esengine in #2715
- fix(cli): copy via OSC 52 when the platform clipboard tool fails (tmux/SSH) by @esengine in #2719
- fix(desktop): allow read-only history preview while running by @SivanCola in #2711
- feat: reasoning effort controls (/effort) by @esengine in #2722
- fix(tools): skip macOS TCC-protected dirs in recursive glob/grep walks by @esengine in #2723
- test(bash): widen cancel/kill timing margins to stop load flakes by @esengine in #2724
- perf(tools): windowed read_file paging + cached tool schema canonicalization by @esengine in #2725
- feat(cli): add theme switching by @esengine in #2727
- feat(cli): interactive /resume picker with keyboard navigation by @esengine in #2726
- fix(control): don't draft or gate on a plan in bypass/YOLO mode by @esengine in #2728
- feat(cli): show a live "working · Ns" line under a running tool by @esengine in #2729
- fix(cli): let Esc cancel a running turn even with the completion menu open by @esengine in #2733
- fix: stop Windows console-window flashing + surface unusable-model cause by @esengine in #2736
- desktop: per-turn autosave + transcript render perf by @esengine in #2738
- fix(cli): setup wizard — fetch /models, dedupe key prompts, stable entry names by @esengine in #2739
- feat(theme): wire mode and accent themes by @SivanCola in #2734
- fix(cli): don't OSC-probe the terminal on a runtime /theme auto by @esengine in #2740
- fix(desktop): complete the live-stream state so the frontend builds by @esengine in #2741
- fix(cli): setup always offers the built-in provider catalog (DeepSeek + MiMo) by @esengine in #2743
- fix(cli): chain into argument menu right after accepting a command by @esengine in #2744
- feat(serve): overhaul HTTP SSE sidebar and add session titles by @lanshi17 in #2742
- fix(serve): cache session titles and match current session on Windows by @esengine in #2745
- Manage Recent Sessions from the Desktop Sidebar by @SivanCola in #2746
- feat(cli): render LaTeX math as Unicode in chat output by @esengine in #2757
- refactor(desktop): validate session path once on delete by @esengine in #2756
- feat(desktop): first-run onboarding overlay for default provider API key by @Bernardxu123 in #2752
- feat(agent): enforce project instruction receipts by @GTC2080 in #2753
- refactor(desktop): trim onboarding comments, fix stale timeout note by @esengine in #2759
- fix(serve): sidebar resume/compact/model-switch with a race-safe controller swap by @esengine in #2758
- Add CLI Language Switching by @SivanCola in #2760
- feat(desktop): workspace Add to Chat context + Changed view by @esengine in #2762
- style(config): trim SetLanguage doc comment to one line by @esengine in #2763
- feat(net): exponential-backoff retry with clear error UX by @esengine in #2765
- fix(control): stop hash-prefixed prompts being swallowed by memory quick-add by @esengine in #2767
- fix(desktop): remove redundant tooltips by @SivanCola in #2769
- feat(agent): gate final-answer readiness (with mutation-driven test coverage) by @esengine in #2771
- fix(desktop): restore full-path hover on workspace tree rows by @esengine in #2773
- fix(test): make Windows statusline and symlink tests portable by @wade19990814-hue in #2772
- feat(release): npm + Homebrew distribution for the CLI by @esengine in #2775
- feat(desktop): commit explicit Windows installer icon.ico by @esengine in #2776
- fix(plugin): drain detached MCP stats writers in Host.Close by @esengine in #2777
- fix(desktop): stamp the release version into the build by @esengine in #2779
- fix(desktop): keep the NSIS installer script ASCII by @esengine in #2780
- fix(desktop): use a numeric version for the installer/versioninfo by @esengine in #2781
- fix(release): don't push the Homebrew cask for prereleases by @esengine in #2782
- fix(desktop): bump CI pnpm to 10 for the frontend build by @esengine in #2783
- fix(release): distinguish CLI vs desktop releases; shield updater from prereleases by @esengine in #2784
- fix(desktop): build a universal macOS app, drop the Intel runner by @esengine in #2787
- docs(changelog): mark 1.0.0 released by @esengine in #2789
New Contributors
- @JimmyDaddy made their first contribution in #2425
- @XTLine made their first contribution in #2426
- @LegGasai made their first contribution in #2541
- @xinrenH made their first contribution in #2506
- @lanshi17 made their first contribution in #2501
- @i1j made their first contribution in #2568
- @dcs02280653-collab made their first contribution in #2632
- @lizhengwu made their first contribution in #2688
Full Changelog: https://github.com/esengine/DeepSeek-Reasonix/commits/desktop-v1.0.0