Skip to content

v2.27.0

Choose a tag to compare

@JackUait JackUait released this 08 Sep 13:50
· 82 commits to main since this release

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