Skip to content

v1.3.142

Choose a tag to compare

@topcheer topcheer released this 10 Jul 14:28
· 3432 commits to main since this release

v1.3.142

Desktop (Wails)

Desktop Streaming & Scroll UX

  • Programmatic scroll flag — eliminates onScroll jitter during streaming output via programmaticScrollRef pattern
  • 200px near-bottom threshold — widened from 120px to prevent auto-scroll disengagement during fast streaming
  • Throttled streaming scroll — 80ms throttle reduces layout thrashing during high-speed output

Desktop Session Management

  • Skip session reload on active click — clicking the already-active session no longer triggers history reload
  • Deduplicated session history loading — prevents message clearing on rapid session switches
  • Resume latest session on startup — desktop now resumes the most recent session instead of creating a blank one
  • Streaming UI for external triggers — cron/IM/mobile-triggered agent runs now show proper streaming animation

Desktop Performance

  • MessageCard memoization — React.memo with custom comparator eliminates unnecessary re-renders
  • MessageContent memoization — useMemo caches parsed HTML, fixing massive input lag in long sessions
  • Initial message limit — last 50 messages loaded initially, rest lazy-loaded to prevent UI freeze
  • Max rendered messages cap — 500 message cap (was 200) with virtualization-friendly approach

Desktop Chat Improvements

  • Markdown rendering for user messages — all user messages now render as markdown (not just agent messages)
  • Append-only persistence — desktop now uses TUI-matching append-only session persistence, not full rewrite
  • Scrollbar gutter fix — removed scrollbar-gutter: stable causing right-side blank strip
  • Increased message capacity — max rendered messages raised from 200 to 500

Desktop Appearance

  • Working light/dark theme — CSS variable override system with proper theme switching
  • Appearance tab in Settings — visible theme toggle with persist preference
  • OS dark mode auto-detection — respects prefers-color-scheme media query
  • Title bar styling — uses CSS variables for background and border consistency

Desktop Tests

  • Vitest framework — added frontend unit test infrastructure with jsdom config
  • parseDiff tests — 14 unit tests for diff parsing logic
  • ContextMenu/Toast/Skeleton tests — component-level test coverage
  • CI integration — frontend tests added to verify-ci.sh

TUI

Provider Retry Display

  • Single system item for retries — provider retry notifications (rate limits, transient errors) now accumulate in a single system message item instead of creating a new item per retry attempt
  • StreamEventSystem forwarding — agent loop now properly forwards StreamEventSystem events from provider to TUI for display

Slash Commands

  • /cron command — new slash command with list, get, pause, resum, pauseall, resumeall subcommands

IM

Binding & Pairing

  • Pairing code push to old channel — when rebinding to a new channel, the pairing code is now also pushed to the existing channel so users can see it without watching the ggcode screen
  • Binding watcher — new binding_watcher.go monitors ~/.ggcode/im-bindings.json for LastSessionID changes by other instances, auto-mutes stale adapters to prevent conflicts
  • Explicit image download timeout — Matrix, Mattermost, and WhatsApp adapters now have explicit timeouts for image downloads to prevent hangs

Reconnect Resilience

  • Jittered backoff — Telegram and Slack adapters now use jittered reconnect backoff to prevent thundering herd

LAN Chat

Reliability

  • Self-message UDP filtering — filters self-messages in UDP receive path to prevent echo loops
  • Full error text preservation — tool result summaries now preserve complete error text instead of truncating
  • Optimized rate limiter — actionable error messages with inbound DM reset on rate limit hit
  • Agent rate limiting — added rate limiting to lanchat tool to prevent message storms

Desktop Session Sidebar

  • Esc-to-clear search — session search input now clears on Esc with proper aria-label

Internal

  • Skip reflection/ratchet/asyncVerify on cancellation — agent run cancellation now properly skips post-run analysis tasks
  • Injected memory messages as user role — changed from system to user role for better provider compatibility
  • Stale project memory test fix — updated assertion to be role-agnostic