feat(desktop): introduce Tauri client with multi-tab concurrent runtimes#689
Merged
Conversation
Native shell that drives a new `reasonix desktop` JSON-RPC subcommand over stdio. Each tab owns an independent CacheFirstLoop, workspace, session, and file/symbol index so two projects can stream in parallel without crossing context. Extracts buildCodeToolset into src/code/setup.ts so the desktop and the `code` command share an identical tool surface. While extracting, wires up web (web_search / web_fetch) and skill (run_skill + subagent runner) tools — they were exported but never registered. pauseGate confirm / choice / plan requests route via AsyncLocalStorage so concurrent turns can't cross approvals. CacheFirstLoop._turn now advances past loaded assistant messages on resume — the frontend's turn-keyed message map would otherwise treat a fresh streaming response as a duplicate of an historical message. Release workflow builds Tauri bundles for linux-x64, macos-arm64, macos-x64, windows-x64 on tag push and uploads to GitHub Releases. Signing keys flow through env (Apple notary, Windows Authenticode, Tauri updater); see desktop/SIGNING.md.
esengine
added a commit
that referenced
this pull request
May 12, 2026
…il, CardStream fix (#705) npm-only release. The Tauri desktop source is in the repo and the CLI subcommand works, but installer bundles for macOS / Windows / Linux don't ship this round (separate release once signing's settled). Highlights: - Tauri desktop client with multi-tab concurrent runtimes (#689) plus a near-full polish pass: wallet balance, version chip, active- plan rail, abortable pause-gates, edit-gate pill, en + zh-CN i18n, shared pause-policy module dedup'd with the CLI TUI (#701) - checkpoint API + git-changes panel in the embedded dashboard (#682) - outside-sandbox file access approval modal (#696) - MCP loading pill + readiness gate on tool dispatch (#687) - escalate-after flag for flash → pro threshold (#699) Fixes: - CardStream Maximum-update-depth crash, quantize window so boundary cards stop oscillating (#700, #702) - `reasonix code` bridges config key to env + lazy subagent client so fresh installs can reach the setup wizard (#703) - pinned-mode scroll shrinks coalesced (#666), generic CSI key decode (#692), shell-confirm preview clamp (#691), frontmatter BOM/folded lines (#690), MCP error classification (#688), and more
ChasLui
pushed a commit
to ChasLui/DeepSeek-Reasonix
that referenced
this pull request
May 23, 2026
…mes (esengine#689) Native shell that drives a new `reasonix desktop` JSON-RPC subcommand over stdio. Each tab owns an independent CacheFirstLoop, workspace, session, and file/symbol index so two projects can stream in parallel without crossing context. Extracts buildCodeToolset into src/code/setup.ts so the desktop and the `code` command share an identical tool surface. While extracting, wires up web (web_search / web_fetch) and skill (run_skill + subagent runner) tools — they were exported but never registered. pauseGate confirm / choice / plan requests route via AsyncLocalStorage so concurrent turns can't cross approvals. CacheFirstLoop._turn now advances past loaded assistant messages on resume — the frontend's turn-keyed message map would otherwise treat a fresh streaming response as a duplicate of an historical message. Release workflow builds Tauri bundles for linux-x64, macos-arm64, macos-x64, windows-x64 on tag push and uploads to GitHub Releases. Signing keys flow through env (Apple notary, Windows Authenticode, Tauri updater); see desktop/SIGNING.md.
ChasLui
pushed a commit
to ChasLui/DeepSeek-Reasonix
that referenced
this pull request
May 23, 2026
…il, CardStream fix (esengine#705) npm-only release. The Tauri desktop source is in the repo and the CLI subcommand works, but installer bundles for macOS / Windows / Linux don't ship this round (separate release once signing's settled). Highlights: - Tauri desktop client with multi-tab concurrent runtimes (esengine#689) plus a near-full polish pass: wallet balance, version chip, active- plan rail, abortable pause-gates, edit-gate pill, en + zh-CN i18n, shared pause-policy module dedup'd with the CLI TUI (esengine#701) - checkpoint API + git-changes panel in the embedded dashboard (esengine#682) - outside-sandbox file access approval modal (esengine#696) - MCP loading pill + readiness gate on tool dispatch (esengine#687) - escalate-after flag for flash → pro threshold (esengine#699) Fixes: - CardStream Maximum-update-depth crash, quantize window so boundary cards stop oscillating (esengine#700, esengine#702) - `reasonix code` bridges config key to env + lazy subagent client so fresh installs can reach the setup wizard (esengine#703) - pinned-mode scroll shrinks coalesced (esengine#666), generic CSI key decode (esengine#692), shell-confirm preview clamp (esengine#691), frontmatter BOM/folded lines (esengine#690), MCP error classification (esengine#688), and more
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
desktop/Tauri shell that drives areasonix desktopJSON-RPC subcommand over stdio. Each tab owns an independentCacheFirstLoop, workspace, session, and file/symbol index — two projects can stream in parallel without blocking each other or crossing approvals.buildCodeToolsetintosrc/code/setup.tsso the desktop and thecodecommand share an identical tool surface. Wiresweb_search/web_fetchandrun_skill(with subagent runner) on the way through — both were exported but never registered.pauseGateconfirm / choice / plan routing usesAsyncLocalStorageto attribute requests to the tab whose async chain is currently running, so concurrent shell prompts can't land in the wrong tab.CacheFirstLoop._turnadvances past loaded assistant messages on resume — the frontend's turn-keyed message map would otherwise treat a fresh response as a duplicate of an historical turn and route deltas into the old bubble.desktop/SIGNING.md.What's in the desktop client
display: none) so they keep receiving streaming events.desktop-<timestamp>-<tabIdx>per tab, writesmeta.workspacefor filtering. Click in sidebar to resume — runtime rebuilds with the picked session,meta.totalCostUsd/cacheHitTokenscarryover seeded into the frontend's usage.@dir/directory browse,@symbolexported-name search, recently-used promotion.open_in_editorTauri command that spawns the configured editor (code,cursor,windsurf, ...) throughcmd /con Windows so.cmdshims resolve. Falls back to OS default when no editor is set. Line jump via-g path:linewhen the editor supports it.Test plan
npm run verifycleancd desktop && npm run tauri devboots, shows the whale empty state@opens picker, preview pane renders head of selected file@src/lists files + folders insrc; picking a folder re-queriessrc/foo.ts:42in agent output → opens in VS Code at line 42.github/workflows/release.yml(orworkflow_dispatchwith a tag) and produces installers per platform