Repository navigation
v2.24.0
Features
- Drop the branch title from the compact-view heading
- Subscription panes show the model's REAL context usage
- Pager can no longer die before paint — recover guards + torture net
- Remove the Account row — logins live in the subscription modal
- Branch name moves to the header's left; footer keeps push/pull counts
- GPT tiers remap — fable=sol, opus=terra; new ChatGPT configs start on sol
- Tint file rows with their section title's color
- Real 7d/5h usage bars for subscription backends
- One shared interface — logins fold into the subscription modal
- Logins section inside the subscription modal
- Identity-kind glyph on the account pill
- Mutual avoidance between login and subscription hues
- Per-subscription identity colors
- Move the subscription off the header onto the account pill
- Remove the subscription switcher from the main page
- Add Moonshot Kimi subscription provider
- Show active subscription on the account pill
- Stamp launch subscription + show pill for subscriptions
- Switch Claude subscription from the account popup
- Subscription rows in the Switch agent popup
- Wire Codex login client
- Add ChatGPT sign-in action
- Track ChatGPT login state
- Expose ChatGPT auth flow
- Inject sound preview capability
- Manage subscription profile lifecycle
- Edit and activate subscription profiles
- Render subscription settings overlay
- Open subscription management modal
- Initialize provider profiles
- Launch with ChatGPT subscription
- Serve local Anthropic API
- Preserve Claude tool turns
- Translate Codex response streams
- Translate Anthropic requests
- Add Codex app-server client
- Expose OpenAI GPT subscription
- Add ChatGPT auth provider
- Dress the clean-tree wisp like the splash ghost
- Draw a mascot placeholder for a clean tree
- Supervise silent native TUI
- Add native attention observer
- Remove the Projects folder setting
- Folder browser adds the project immediately on choose
- Add-project opens folder-browser overlay modal
- Floating folder-browser card rendering
- DirBrowserModel directory navigation core
- Filter private OSC 9 notifications
- Inline add-worktree button on zero-worktree project rows
- Polish the add-project form
- Surface the GitHub-URL option in the add-project form
- Add projects by pasting a GitHub repo URL
- Ingest usage history at startup
- Make local journal history authoritative
- Persist mirrored append-only history
- Add checksummed usage history replay
- Create random-name worktree with one key
- Activate native renderer
- Preserve session controls
- Expose native command
- Preserve discard workflow
- Keep refresh off input loop
- Load snapshots asynchronously
- Parse git records safely
- Add indexed snapshots
- Observe attention protocol
- Publish semantic attention
- Reduce semantic events
- Monitor background jobs
- Track semantic attention
- Consume semantic state
- Fence launch generations
- Add state protocol
- Label image size deltas KB/MB (MB above 1024 KB)
- Show image files' byte-size change, not +0/-0 line counts
- Paint every full-screen view on a pitch-black canvas
- Open the About card as a centered overlay modal
- Show the installed wisp-deck version in the About card
- Show pending update under the wordmark with a U/click Update button
- [ Open in Preview ] button opens the image in the macOS Preview app
- Real-pixel image previews via kitty graphics
- Fit image previews to the popup box on any aspect ratio
- Preview images in the diff popup instead of a binary diff
Bug Fixes
- Don't demand the capability boundary of pre-2.23.1 releases
- Context overflow is 'prompt is too long', never a retryable 502
- ContextCompaction is a lifecycle item, not a Codex-owned tool
- Merge mixed final user content instead of 400-wedging the session
- Itoa panicked on counts ≥ 10000, killing the popup for big files
- Recover replayed tool continuations from history instead of 400
- Don't expire live tool turns mid-run; stale continuations are 400
- Fall back to WISP_DECK_PLAN for the subscription pill
- Move ChatGPT sign-in into actions
- Suppress unavailable connector warning
- Disable Claude connectors for ChatGPT
- Sanitize tmux client marker
- Require host-effect boundary
- Use token-only Claude auth
- Route shell through guarded owner
- Preserve Skill continuation
- Accept inline system messages
- Add non-redacted test sentinel
- Make login recovery automatic
- Add global test boundary
- Reap browser opener
- Login signed-out ChatGPT users
- Harden preview boundary
- Wire interactive sound previews
- Navigate subscription submenus
- Make sound cycling silent
- Highlight focused subscription
- Make subscription back clickable
- Return to subscription list
- Show standard profile actions
- Navigate profile actions
- Keep profile actions inline
- Enter subscription details with right arrow
- Prune stale Codex identities
- Constrain identity file paths
- Keep restore identity current
- Complete subscription modal navigation
- Harden subscription modal interactions
- Avoid zsh path rebinding
- Wire per-session restore identity
- Snapshot active tool identity
- Fail closed into resume picker
- Persist durable session identity
- Preserve GPT pricing rates
- Recognize storm launches by the build stamp; publish queue before the marker
- Builder pre-acquires the pop lock so storm launches cannot starve it
- Kill the stuck single-pane tab, wrong-tab restores, and pre-attach stalls
- Put the clean-tree wisp to sleep
- Shrink and mute the clean-tree mascot
- Reveal completed session layout
- Restore status-line execution
- Retire legacy plugins in zsh
- Preserve attach exit status
- Close observer attempt context
- Make Wisp sole agent sound owner
- Filter terminal notifications
- Disable lifecycle hooks
- Disable launch hooks
- Restore hover and status styling
- Disable app-server notifier
- Disable external notifier commands
- Preserve rejected terminal controls
- Consume notifications before terminal
- Disable native notification sound
- Preserve one-hour cache writes
- Stop refresh blink
- Read sound preference in Go, not bash
- Make Off a playback boundary
- File list no longer freezes with many files — kill the O(N²) hover repaint and the per-file forks
- Harden passive attention
- Bound recovery reads
- Harden semantic attention
- Hydrate semantic state
- Emit pane format tab
- Preserve lock exclusion
- Harden runtime lifecycle
- Expose in-memory identity
- Reject stale dedupe writes
- Remove worktrees off the UI event loop so deletes never freeze the interface
- Purge zsh-special variable names; guard the whole class
- Stop image size delta showing ±0 under the zsh pane
- Stop a mid-session tool change from steering future launches
- Close the last two jobs that could print into the AI tool's UI
- Close the other half of the channel into the AI tool's UI
- Stop background jobs painting stderr into the AI tool's UI
- Dim the overlay backdrop under the app's real renderer
- Stop random gibberish during image load — transmit via kitty file medium
- Stop background jobs writing to the AI tool's terminal
- Repair a broken install instead of declaring it up to date
- Stop the opencode switch test depending on a locally installed claude
- Stop the reap race printing into the AI tool's input box
- Never let a bad download replace a working install
- Don't fatal the zsh ledger loop opening an image preview
Refactoring
- Centralize host effects
- Retire appended subscription panel
- Share notification filter
- Extract overlayCard compositor from overlayAbout
Other Changes
- Perf(ledger): open files off input loop
- Perf(diff): show popup before input loads
- Perf(ledger): virtualize native rendering
- Perf(ledger): bound interaction work
- Perf(launch): stop probing npx for OpenCode before the picker paints
- Perf(image-preview): cut hi-res first paint from ~750ms to ~50ms without quality loss