Highlights
- Resume exactly where you left off: Desktop builds now restore window bounds, zoom, workspace tabs, active sessions, drafts, attachments, scroll positions, panel layout, Yolo state, and expanded session trees across restarts.
- Yolo now works beyond the browser: Permission auto-accept is server-owned, synchronized across clients, persisted through session metadata, and continues working while the UI is closed.
- Provider usage and model control: The Status panel can show quota windows and reset times for supported providers, while per-provider visibility controls keep large model catalogs manageable.
- A more adaptable workspace: Settings were reorganized, chat blocks can be shown, collapsed, or hidden, and right-panel tabs and Status sections can be reordered or disabled.
- Large session trees stay responsive: Nested sub-sessions can expand recursively, while sidebar virtualization keeps deep or large histories fast.
- Stronger native desktop workflows: Open project folders, terminals, files, and editors from CodeNomad, update Windows builds through WinGet, and update OpenCode directly from Settings.
Desktop continuity and native integration
- Electron and Tauri now coordinate a single primary desktop snapshot while keeping additional app processes independent. Restoration handles partial startup, cancelled workspaces, stale owners, shutdown races, and cross-platform child-process cleanup.
- Native File menus and the command palette expose safe project-folder, terminal, file, and editor actions with canonical path validation.
- Tauri gained native About and Help menus, restored the macOS quit shortcut, and can deliver notifications to authenticated remote windows.
- Workspace actions are clearer, real paths are resolved when opening folders, local-instance creation is explicitly labelled, and invalid OpenCode configuration is surfaced instead of failing silently.
Sessions and messaging
- Recursive parent/sub-session trees support deep expansion, search, selection, and persisted expanded state. Only visible sidebar rows are mounted, including when the drawer is closed.
- Mobile clients now detect real SSE reconnects and reload authoritative state, preventing sessions from remaining stuck or showing duplicated messages after backgrounding. Redundant large-session reloads were also removed.
- Conversation follow behavior now respects deliberate scroll-up escape and deterministic bottom pinning. Session loading failures are visible, the project session ceiling was raised, worktrees refresh from OpenCode ready events, and session list scoping was corrected.
- Prompt submission focuses the conversation, failed prompts remain in input history, and environment-variable removals persist correctly.
- Tool deletion now removes associated reasoning and generated text instead of leaving orphaned output, with clearer destructive-selection overlays.
- Markdown gained bracket-style math delimiters and per-code-block line wrapping. Raw HTML is sanitized without swallowing later assistant output, and long file paths keep their relevant segments visible.
Providers, speech, and settings
- Provider quota usage supports a broad set of subscription and API providers, refreshes safely in the background, and keeps the last successful result when a refresh fails.
- Provider settings now include model search plus Show all / Hide all controls. Hidden models disappear only from pickers without changing OpenCode defaults or execution.
- Speech input and output can use separate OpenAI-compatible providers, API keys, base URLs, and models, with dedicated STT and TTS tests. Early microphone release no longer leaves pending acquisition active.
- Settings are split into focused General, Chat, Notifications, Speech, Remote Access, OpenCode, Providers, SideCars, Config files, Advanced, and Info sections.
- Thinking, tool output, diagnostics, tool inputs, and token usage each support expanded, collapsed, or hidden presentation modes. Provider authentication and loading are scoped more safely to the active instance.
- The right panel now uses a typed registry and bundled manifest lifecycle. Users can show, hide, drag, and reorder native tabs and Status sections, with preferences restored across launches.
Reliability and platform fixes
- Large workspace search counts only relevant fuzzy matches toward its cap, prevents directory-link cycles, and gives the file picker enough space for long paths.
- Permission handling ignores stale updates, preserves family-scoped Yolo behavior, and serializes metadata writes so Yolo and worktree data cannot overwrite each other.
- Linux workspace startup avoids process-identity timeouts, Windows auto-port selection retries reserved ports, and macOS/Windows/POSIX process cleanup uses stricter ownership checks.
- Authentication submits the username shown to the user, provider controls remain usable on narrow screens, and mobile selection actions no longer overlap.
- Desktop restoration and workspace startup were hardened against crashes, timeouts, cancelled launches, stale renderer authority, and incomplete shutdown.
- Connection indicators better explain mobile network drops, remote Tauri notifications work again, and background-process prompting now follows the shared instance-client path.
Packaging and distribution
- Linux releases now provide a tested Tauri
.debinstaller for Ubuntu 24.04 and a portable Electron.tar.gzfallback. - Windows Tauri users can launch the official silent WinGet upgrade from the update notification, with the GitHub release page retained as fallback.
- Release builds synchronize package versions and validate bundled resources, executables, desktop entries, and shared-library closure across the supported artifacts.
What's Changed
- fix(ui): SSE connection status indicators for mobile network drops by @JDis03 in #549
- fix(ui): remove scope=project from session list requests by @JDis03 in #572
- fix(ui): stabilize strict follow autoscroll by @pascalandr in #576
- feat(yolo): move permission auto-accept (Yolo) to the server by @heunghingwan in #561
- feat(ui): implement recursive nested session expansion by @detain in #478
- PR: Extend delete overlays and clean companion parts during tool deletion by @VooDisss in #247
- build: publish deb and portable tar.gz Linux artifacts by @shantur in #492
- feat: detect realpath when open workspace by @bluelovers in #486
- feat(speech): separate STT/TTS provider configuration by @heunghingwan in #579
- fix(ui): cancel pending microphone acquisition on early release (#550) by @heunghingwan in #580
- feat(ui): support bracket math delimiters by @jollyxenon in #588
- feat(ui): focus messages after prompt submission by @pascalandr in #577
- feat(desktop): persist and restore UI state across restarts by @pascalandr in #578
- fix(ui): persist environment variable removal by @pascalandr in #581
- fix(ui): refresh worktrees from OpenCode ready events by @pascalandr in #583
- feat(usage): show provider quota in session status by @pascalandr in #584
- feat(ui): add line wrap toggle to markdown code blocks by @shantur in #599
- fix(ui): surface session loading failures by @pascalandr in #582
- feat(settings): add OpenCode update action by @pascalandr in #585
- fix(ui): temporarily raise project session list ceiling by @pascalandr in #604
- feat(ui): make open workspace action explicit by @pascalandr in #600
- feat(windows): update CodeNomad from the in-app notification by @pascalandr in #597
- fix(restore): simplify persistence and harden cross-platform cleanup by @pascalandr in #602
- fix(tauri): add native About and Help menus by @pascalandr in #596
- perf(ui): virtualize nested session list by @pascalandr in #586
- fix(ui): polish provider usage status panel ( and Yolo panel ) by @pascalandr in #610
- feat(restore): persist Yolo and session expansion state by @pascalandr in #611
- fix(ui): defer session virtualization for closed left panel by @pascalandr in #612
- fix(ui): label new local instance action by @pascalandr in #613
- feat(settings): reorganize settings and add chat block visibility by @pascalandr in #614
- feat(ui): add right panel customization by @pascalandr in #615
- fix(auth): submit the displayed default username by @pascalandr in #620
- fix(ui): avoid mobile selection action overlap by @pascalandr in #622
- fix(files): search large workspaces beyond candidate cap by @pascalandr in #623
- fix(permissions): ignore stale permission updates by @pascalandr in #621
- fix(server): prevent Linux workspace launch identity timeouts by @pascalandr in #625
- refactor(server): route background-process prompt through the instance client factory by @heunghingwan in #630
- feat(ui): load right panel plugin manifests by @pascalandr in #617
- fix(ui): keep relevant file path segments visible by @pascalandr in #628
- fix(server): retry Windows reserved auto ports by @pascalandr in #632
- fix(tauri): restore macOS quit shortcut by @pascalandr in #633
- fix(ui): preserve failed prompts in input history by @pascalandr in #634
- fix(workspaces): surface invalid OpenCode configuration by @pascalandr in #635
- fix(ui): resolve stuck/duplicated messages after mobile background by @JDis03 in #639
- fix(ui): stop active-session load effect from re-firing on every session mutation by @JDis03 in #644
- fix(ui): preserve assistant output after raw HTML by @pascalandr in #646
- fix(tauri): restore notifications in remote windows by @pascalandr in #641
- feat(desktop): open workspaces in native apps by @pascalandr in #638
- feat(ui): manage visible provider models by @pascalandr in #637
- fix(ui): contain provider card actions by @pascalandr in #651
- docs: fix broken star history chart by @OctoBored in #654
- fix(ui): stop reasoning output scroll jitter by @pascalandr in #653
Thanks for contributions
Thanks to @shantur, @pascalandr, @JDis03, @heunghingwan, @VooDisss, @detain, @bluelovers, @jollyxenon, and @OctoBored.
- @heunghingwan made their first contribution in #561
- @detain made their first contribution in #478
- @OctoBored made their first contribution in #654
Full Changelog: v0.18.0...v0.19.0