Repository navigation
Releases
Releases · JackUait/wisp-deck
v2.27.1
Features
- Refresh the picker's models from inside the router
- Refresh stale model lists in the background
- Build the picker from the cached model lists
- Cache each source's model list on disk
- Read a source's live model list
- Pick the newest model per family from a listing
- Offer a DeepSeek API key as a subscription
- Offer the models the GLM Coding Plan actually serves
Bug Fixes
- Never follow a model-list redirect with the key
- Write the profile through a unique temp file
- Stop an unchanged model list from rewriting the profile
- Give the router the default login's tag file
- Stop probing ps with a pid list
- Refresh a borrowed login's OAuth token instead of 401ing
- Keep every subagent on the row the session picked
- Keep Explore subagents on the row the session picked
- Stop sending the one tool schema DeepSeek refuses
- Stamp the tool denial only on a provider the profile really names
- Stop sending the one tool schema z.ai refuses
Other Changes
- Perf(allin): stop fetching every subscription's quota at launch
v2.27.0
Features
- Show what each subscription has left, and drop the spent rows
- Choose which picker rows the All-In profile offers
- Admit ChatGPT, served by a lazily started Codex bridge
- A lazily started ChatGPT bridge a router can own
- Re-admit Featherless by delegating to rolefix's own handler
- Create the profile the moment a second subscription connects
- Create and refresh the All-In profile on every install
- Launch the All-In profile through the router
- Wrap a launch in the cross-subscription router
- Generate and refresh the All-In profile's picker
- Route each turn to its own endpoint and credential
- Resolve each row's endpoint and credential
- Build picker rows from every login and ready provider
- Parse a picker row into its source, model and 1M marker
Bug Fixes
- Paint nothing once a quit has been requested
- Never sweep a lock whose age it could not read
- Drop the "unmapped" label All-In can never shed
- Make the All-In pane's usage bars follow the picked row
- Label the Default login by its tag, and resolve wisp/ ids in the subagent line
- Drop gpt-5.4, which no app-server serves
- Honor disabled subscriptions and create the profile on a read
- Disarm the stream watchdog when the profile is born, not swept
- Refuse a checklist update that names no status
- Declare Astra's real 272000 window, not 1050000
- Let the switcher accept the router profile
- Declare all four window keys, not just the 1M marker
- Make the router refuse what the roster refuses, and fail closed
- Trade the 1M row away, and drop the unused behavesAs field
- Give the generated profile an identity, an endpoint, and a gate
- Exclude Featherless from the roster, no repair proxy in the router
- Rebuild the Codex thread when Claude rewrites its history
- Use XDG config root and anchor the router gate
- Share the loopback-launch shape with claude-rolefix
- Fail loudly on an unreadable/corrupt profile, guard the refresh
- Reject oversized/malformed routing inputs instead of failing open
- De-duplicate KeychainService, assert the account config-dir join
- Apply context window to self-hosted providers so the floor is enforced
- Keep repainting on a skipped tick, only skip the Git build
- Stop a long turn being aborted and replayed mid-compaction
Other Changes
- Perf(keep-awake): build the holder path in the shell, not in a subshell
- Perf(restore): ask tmux for every layout once, not once per session
- Perf(statusline): walk the agent's process tree by level, not by process
- Perf(attention): make a poll cost the tree it supervises, not the tree's size
- Perf(attention): stop paying per process to read the process table
- Perf(watcher): strip wc's padding with a builtin, not with tr
- Perf(keep-awake): read the enable flag in the shell, not through grep
- Perf(ledger): back the shell renderer off an unchanging repository too
- Perf(ledger): stop polling Git at full speed for a repository nobody is changing
- Perf(watcher): read a settings key in the shell, not through four processes
- Perf(attention): read the process table once per tick, not twice
- Perf(restore): parse a session's environment once, not once per field
- Perf(ledger): build the popup backdrop for a user, not for a timer
- Perf(statusline): run the ccstatusline binary instead of booting npx
- Perf(keep-awake): probe every holder's liveness with one ps, not one each
- Perf(attention): read the process table from the kernel, not from ps
v2.26.0
Features
- Launch GPT panes on Astra instead of gpt-5.6-sol
- Offer GPT-6 Astra in the ChatGPT model pool
- Let the unreached part of the bar recede
- Split the usage bar into countable sections
- Drop the loader's frame and its floating particles
- Show a tab cue when a session is in trouble
- Run a Featherless pane behind the role-repair proxy
- Repair the message roles a strict Anthropic endpoint rejects
- Serve a stale catalog when the fetch fails
- Guard the Anthropic route and the keep-alive with a live test
- Pick a Featherless model during add and reuse the key
- Add a searchable Featherless model picker
- Route Featherless through the own-model save path
- Cache the catalog with a TTL and rank search by model name
- Fetch the catalog with a bearer credential
- Parse the remote model catalog
- Gate Featherless readiness on a picked model and window
- Add Featherless as a remote-catalog provider
- Let a self-hosted profile declare its model text-only
- Keep the worktree list true while the menu is open
- Add a Custom / self-hosted provider you configure yourself
Bug Fixes
- Stop a here-document deadlocking on a 512-byte pipe
- Hide the usage pill a backend can never fill
- Draw the usage bar in cells the terminal owns
- Repair the three things Featherless drops from a reply
- Stop offering models too narrow to run Claude Code
- Discard the agent worktrees git clean -f silently refuses
- Repair the JSON contract Featherless accepts and ignores
- Drop the thinking field that turns off tool calling
- Reserve the reply's room inside a small context window
- Price Fable 5.1 cache reads at its own $0.25/MTok rate
- Render the picker as a card, not just its help line
- Stop the model picker crashing the whole project menu
- Track mcpfit, which a pushed commit already depends on
- Propagate Claude's exit code instead of a cobra error banner
- Report Codex's real token usage on a streamed turn
- Drop a Featherless pick when its name prompt is abandoned
- Stop retrying a model provider that is not running
- Keep Claude compaction responsive
- Enforce self-hosted context windows
- Stop a bridged pane refusing edits as a read-only session
- Stop a self-hosted pane reporting a thinking model as a dead network
- Stop a symlinked node_modules from failing the whole refresh
v2.25.4
Features
- Draw each tab as a filled card
- Name each tab and report the turn running in it
- Follow the agent into a worktree it creates mid-session
- Show git's real clone progress instead of a spinner
Bug Fixes
- Keep the SSE stream warm so a reasoning turn is not killed
- Close stderr before opening the follow's inputs
- Follow home when the agent's worktree is removed as it leaves
- Keep the cold-start budget off the waits that follow it
- Stop killing an app-server that is merely starting cold
- Stop a broken restore chain from closing every new tab
v2.25.3
v2.25.2
Features
- Mark a waiting tab as seen once the user has looked at it
- Move the tab between git worktrees from the Switch modal
Bug Fixes
- Declare each provider's real context window
- Give a cold codex app-server time to start
- Center the switcher card in the ledger pane
- Let bridge own GPT window enforcement
- Count semantic compaction input
- Retire a tab's bell when the chat is cleared
- Run a spare-pane status click through bash, not tmux's /bin/sh
- Kill a closed tab's terminals instead of leaking them
- Center the switcher card in the tmux window, not the agent pane
- Purge the live Kimi key from the tests and guard the tree
v2.25.1
Features
- Find codex and opencode wherever they're installed, like claude
- Preview every popular image format, not just png/jpg/gif
- Display model names the way their vendors write them
- Show each subagent's model and context in the panel row
- Color the push count apart from the branch
Bug Fixes
- Follow a parked Claude turn to the background job running it
- Survive a fresh install and find claude outside the bash -l PATH
- Deliver the generated image instead of declaring it discarded
- Report Codex's own image generation instead of 502ing the turn
- Pin the Wisp status line over project settings
v2.25.0
Features
- Give the in-menu update its own screen, and stop re-asking setup
- Keep the push/pull counts for Codex panes
- Move the push/pull counts next to the branch
- Make the update notice a segmented pill
- Tab-switch shortcuts work from the spare pane too
- Keyboard shortcuts to cycle and jump between tabs
- Drop the top header, move the changed-file stamp to the footer
- Highlight Astro files via the HTML lexer
- Draw the tab bar as the agent pane's top border
- Float the account switcher as a card-sized popup over the agent pane
- Per-tab session tabs via tmux windows
- Rebuild the installed TUI binary on Go-touching commits
- Bell emoji in tab title while session needs attention
- Always-visible session bar with + button; bar survives status off
- Re-picking an open project adds a session to its existing tab
- Wrapper consolidation, request claim, stack-aware cleanup
- Wrapper env stamp, reaper, stack keybinds; drop exit-unattached
- Owner-pid orphan reaper
- Adoption handoff and stack-aware owner teardown
- One-shot new-session request write/claim
- Cycle and close-current session helpers
- Session bar chips and per-session repaint
- Stack registry and per-session file cleanup
- Detect live sessions of a project
- Move branch name from ledger header to Claude statusline
- Refuse to disable the last enabled managed subscription
- Refuse to disable the last enabled AI tool
- Refuse to disable the last enabled AI tool
- Subscription help shows 'x enable' on a disabled focused profile
- AI tools help shows 'x enable' on a disabled focused tool
Bug Fixes
- Keep checklist work resumable
- Restore check_for_update, dropped by a bad file rewrite
- Fall back to a flagless install when --update is rejected
- Make the update chip a plain rectangle
- Draw the update chip's caps in the container's border color
- Soften the update chip's ends to a thin curve
- Square off the update chip's ends
- Move the update chip onto the wordmark's row
- Quiet the update chip into the menu's own material
- Price Kimi coding models
- Report Codex web searches to Claude
- Remove usage source hint
- Answer Anthropic's web_search server tool instead of 400-ing it
- Route Kimi coding keys to the gateway that accepts them
- Translate reserved MCP tool names
- Keep compaction prompt fresh
- Preserve mixed continuation input
- Accept held-control shortcuts
- Stop counting Codex replayed history, which inflated GPT usage 31x
- Resolve the account pill every refresh, not once at startup
- Make the preview correct for every script, not just Bengali
- Measure the preview by grapheme cluster, not by rune
- Show a "Starting …" indicator while the AI pane boots
- Re-pick adds the session in the background, no view switch
- Build prefix+S sessions in-place; never adopt pre-stacking sessions
- Prune dead owners' stack registry files in the reaper
- Rename zsh-special 'path' locals in cycle/close helpers
- Shell-escape session name in stack keybinds
- Build all three panes in the new-session batch, not across batches
- Disabled AI tools show a gray bullet, not the green installed dot
- Survive Codex incompatibilities instead of poisoning the session
Other Changes
- Revert: remove per-project session stacking entirely
- Perf(launch): boot the agent pane before the launch tail, drop idle-path spawns
- Perf(switcher): open account choices in-process
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
v2.23.0
Features
- Preserve every agent's session + shared cross-agent pool
- Move author credit behind 'a' About popup
- Show author credit line
- Slim left padding, deeper nesting for login rows
- Drop the bottom padding so the help footer hugs the border
- Move the title onto the card border, rows up to the top
- Gray out rows that are neither active nor under the cursor
- Use the starburst flare glyph for Claude instead of the crab
- Per-tool icons instead of the generic robot glyph
- Group Claude logins under a Claude subgroup header
- Offer ALL agents in the mid-session switcher, not just Claude logins
Bug Fixes
- Ship wisp-deck-config and defaults so the CLI isn't a dead symlink
- Widen layout-watch horizon and stand down on user pane drags
- Replay pane layout while session is alive and after pty settles
- Prefer cached npx install over uninstallable @latest
- Make cross-agent handoff actually work end-to-end
- Indent the cursor bar with nested login rows