Desktop Performance Wave - 8 PRs Target Rendering Bottlenecks

NOTE: X API v2 is fully paywalled (search and lookup both return 402). This roundup is sourced from GitHub PRs and commits in the last 48 hours.
52 feature and performance PRs landed on main between July 18 and July 20. The dominant cluster was a wave of desktop rendering fixes by OutThisLife, alongside provider picker improvements from teknium1 and new model support.
Desktop performance - 8 PRs, 455 additions, 24 files
OutThisLife shipped 8 PRs that each target a specific rendering bottleneck in the desktop app. The changes are correctness-preserving: no behaviour changes, just CPU and DOM work that was happening on every frame or every token and no longer does.
The agent-side win came first. #67788 drops a per-call base64 re-serialization from the request-size estimate. Every API call was running str(msg) on the entire message history, allocating a multi-MB string just to len() it. A single 1MB screenshot became a 1MB string allocation on every call. The fix uses an approximate token count instead of the full serialize pass.
On the desktop side, the most impactful changes target what runs on every stream token. #67742 stops the sidebar and every mounted tool row from re-rendering on each message delta. $sessionStates republishes tens of times per second during a turn. The derived ID computeds allocated fresh arrays each time, and nanostores notifies on !==, so the whole sidebar re-rendered per token. The fix memoizes the derived arrays so only genuinely changed session IDs trigger a render.
#67842 stops buildToolView from running JSON.stringify on every tool row's args and result on every rebuild. A 100KB read_file result was serialized just to be discarded for every tool type except web_search. The serialization is now memoized and scoped to web_search only.
#67818 fixes the review pane freezing when a large changed file is selected. FileDiffPanel was rendering SyntaxDiff over every line with a full Shiki highlight, because windowing was entangled with showLineNumbers and fullText. The fix decouples windowing from the gutter so the review pane renders only the visible chunks.
Four smaller PRs fill out the wave: #67844 stops tool rows re-rendering on session or working-directory changes. #67857 idle-mounts boot-hidden panes off the cold-start critical path. #67838 rAF-coalesces pane and console sash resizes. #67824 limits file-tree revalidation to only the changed subtree instead of the full tree.
Provider picker - 5 PRs tighten visibility and grouping
teknium1 shipped a cluster of provider picker improvements. #67971 is a consolidated salvage of three contributor PRs: test hermeticity for picker suites (#30692, deepujain), model_catalog.excluded_providers config (#67751, craigdfrench), and the per-provider enabled: false flag (#37339, nnnet). At 464 additions and 2 deletions across 13 files, it is the largest PR in today's window by line count.
#67908 makes the TUI status bar display friendly model names instead of opaque IDs, and folds same-endpoint provider entries into one picker row. #67904 adds collapsible provider groups in the desktop model picker. #67758 folds Qwen providers into one group row. #67759 adds custom endpoint settings to the desktop, superseding #42745.
Claude Sonnet 5 added across all curated lists
#67932 adds Claude Sonnet 5 to every curated provider model list, including pricing, context metadata, output limits, and reasoning timeouts. The PR salvages three contributor PRs: #55848 (vortexopenclaw), #55853, and #60410.
Adaptive thinking for Kimi-family models
#67606 enables adaptive thinking for Kimi-family models on Anthropic-Messages endpoints. Previously, the thinking parameter was blanket-dropped because Kimi endpoints once rejected it. The fix sends thinking.type=adaptive with output_config.effort instead. Salvages #67228 by chouqin.
Desktop TTS settings go inline
#68017 moves each TTS backend's voice and model settings inline into the Capabilities tab. Previously, API keys were visible there but voice and model fields lived only in Settings, requiring a separate navigation to configure them. The change is 682 additions and 193 deletions across 11 files.
Security fixes
Two credential-isolation PRs landed: subagent transcripts now redact credentials, and master credential stores are never mounted into skill sandboxes. A third fix bounds the environment probe subprocess so an inherited Windows pipe cannot wedge sessions.
Community
New community repos appeared in the last 24 hours. hermes-pipeline-plugin is a multi-agent pipeline orchestrator with 8 pipeline categories and quality gates. shiraharino.com is a public diary built with TypeScript and Tailwind. hermes-backup automates Google Drive backups of Hermes Agent data. Tildagon-Hermes-Bridge deploys Hermes Agent to the EMF Camp Tildagon badge via PIN-authenticated local app deployment.
The full window: 52 merged PRs with feature or performance labels, plus security fixes and community projects. v0.19.0 will curate the full post-v0.18.0 window.