mirror of
https://github.com/cline/cline.git
synced 2026-10-29 17:42:34 +08:00
* desktop: native-feel polish and render-path performance fixes - Suppress the WebView browser context menu on app chrome (keep it for editable fields and active text selections) - Make UI chrome unselectable app-wide; opt chat messages, markdown, code, diffs, and error banners back into text selection - Contain overscroll so inner scrollers don't rubber-band the window - Lazy-load Settings/Sessions/Onboarding/Diff views out of the entry chunk - Memoize ChatInputBar and AgentHeader; stabilize their props in the chat pane so stream flushes only re-render the affected message bubble - Stop refocusing the composer textarea on every keystroke (caret flicker) - Cache slash commands across menu opens (stale-while-revalidate) - Avoid rebuilding reversed message arrays and ask-question JSX per render - Drop core info/debug console logging on the streaming hot path behind a cline:debug-logs opt-in; remove leftover [webview:delete] debug logs - SearchCombobox (provider/model picker): Escape closes and restores focus - Remove unused @vercel/analytics, recharts, embla-carousel deps and the unused chart/carousel UI components * desktop: surface failed-turn errors instead of leaving the chat blank On a failed run the runtime reports its error string in result.text. The webview rendered that as an assistant bubble, which the canonical history rehydration then wiped (the failed turn is never persisted), so provider errors like a retired model id left the user staring at a silently empty chat. Route failed-turn text to a persistent error-role message added after rehydration instead. * desktop: fade the welcome/conversation swap instead of hard-cutting Sending the first message replaced the hero layout with the message grid in a single commit, which read as a white flash. A 180ms enter animation now plays when either side becomes visible; disabled under prefers-reduced-motion. * desktop: render new-chat panes instantly from the last catalog load Clicking + remounts ChatThreadPane, which refused to render until the provider catalog (a large fetch) and workspace list resolved again — about a second of blank pane plus boot spinner on every new chat. Seed remounts from a module-level snapshot of the last successful load; the mount effect still refreshes both in the background. * desktop: invalidate the provider-catalog snapshot with the cache Seeding remounted chat panes from the last catalog load left a window where a pane created right after a credential change could act on the old keys. The snapshot now lives in the catalog module and is dropped by invalidateProviderCatalogCache(), so credential edits force the next remount to wait for fresh data.