github NeuralNomadsAI/CodeNomad v0.19.0

4 hours ago

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 .deb installer for Ubuntu 24.04 and a portable Electron .tar.gz fallback.
  • 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.

Full Changelog: v0.18.0...v0.19.0

Don't miss a new CodeNomad release

NewReleases is sending notifications on new releases.