Skip to content

v0.19.0 — Session Prefetch, Scoped Permissions & Dark Theme Overhaul

Pre-release
Pre-release

Choose a tag to compare

@OpenSource03 OpenSource03 released this 11 Mar 04:00
· 26 commits to master since this release

What's New

⚡ Session Prefetch & Switching Performance

  • Session payload cache — prefetches up to 6 recent sessions via requestIdleCallback so switching is instant with no disk I/O
  • Metadata sidecar files — session listing reads tiny .meta.json files instead of parsing full multi-MB session files
  • Async session I/O — migrated all fs.existsSync/readFileSync calls to fs.promises.* for non-blocking session operations
  • Consolidated metadata sync — merged 4 separate setSessions(prev => prev.map(...)) effects into a single batched update
  • startTransition wrapping — session switch state updates are wrapped in React transitions for smoother UI

🔐 Scoped Permission Rules

  • "Always allow" dropdown — split button on the permission prompt with per-destination scope (session, local project, shared project, user-global)
  • Permission rule forwardingupdatedPermissions flows through the SDK permission bridge so rules persist to the chosen settings file
  • Local settings source — all SDK query paths now include "local" in settingSources for .claude/settings.local.json support

🎨 Dark Theme & Glass Morphism Overhaul

  • Light glass tuning — separate gradient math for light glass mode with softer titlebar veils, adjusted shadow opacity curves, and color-mix(in oklab, white 97%, var(--background) 3%) surface color
  • Refined top scroll fade — lighter, shorter gradient (h-20/h-24), reduced radial shadow spread, and fine-tuned opacity breakpoints for both island and flat layouts
  • Transparency toggleglass-enabled class now respects a harnss-transparency localStorage key, applied early in preload before React mounts
  • Darker window background — Electron window base color changed from #18181b to #040404 for true dark appearance
  • ShadCN Select component — new Radix-based <Select> replaces all native <select> elements in settings panels for consistent styling

🛠 Tool & UI Polish

  • Bash output truncation — long bash results (200+ lines) collapse with a "Show full output" toggle
  • Engine icons in sidebar — session items show per-engine/agent icons instead of generic message bubbles
  • AskUserQuestion redesign — tighter spacing, smaller type scale, and cleaner answer display
  • Icon picker fix — dropdown-to-popover transition uses onCloseAutoFocus prevention instead of fragile setTimeout
  • Message unqueue — new unqueueMessage action lets users remove queued messages before they're sent

📜 Scroll System Refactor

  • getTopScrollProgress helper — extracted smoothstep scroll-progress calculation to a pure, tested function in chat-scroll.ts
  • Synchronous viewport sync — programmatic scrolls (jump-to-bottom, prepend anchor restore) now immediately update top-progress and scrolled-from-top state
  • useLayoutEffect for session reset — scroll position resets happen in layout phase to prevent flicker on session switch
  • Stale viewport ref guardgetViewport() checks isConnected to avoid operating on detached DOM nodes

🐛 Bug Fixes

  • Git status loading race — separate loadingRequestIdRef prevents stale requests from clearing the loading spinner
  • Switch request guardswitchRequestIdRef discards late-arriving disk loads when the user rapidly switches sessions
  • Non-blocking save on switchsaveCurrentSession() is now fire-and-forget (void) during session switches to avoid blocking the UI

Full Changelog: v0.18.1...v0.19.0