Skip to content

feat(tui): the quota-bar percentage is opt-in - #514

Merged
MagicalTux merged 1 commit into
masterfrom
fix/quota-bar-percent-default-off
Oct 4, 2026
Merged

MagicalTux merged 1 commit into
masterfrom
fix/quota-bar-percent-default-off

Conversation

@MagicalTux

Copy link
Copy Markdown
Member

quotaBarPercent defaulted to on, so every TUI quota bar read 97% · 2h30m. The bar's fill already is the percentage; the countdown is the one field the fill cannot carry. The switch stays, the default flips: a config without the key reads as off, the settings row (g → Bar percentage) shows off, and the first toggle writes true. teamclaude status and the dashboard are unchanged (they carry their own percentage).

Touched: createDefaultConfig, the reload read in index.js, the three reads in tui.js, docs/configuration.md, and the two tests that encoded the old default.

🤖 Generated with Claude Code

quotaBarPercent defaulted to on, so every bar read `97% · 2h30m`. The bar's
fill already is the percentage; the countdown is the field the fill cannot
carry. Off unless set: a config without the key reads as off, and the first
toggle from the settings screen writes `true`.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@MagicalTux
MagicalTux force-pushed the fix/quota-bar-percent-default-off branch from 91aaad3 to 666d8ac Compare October 4, 2026 06:20
@MagicalTux
MagicalTux merged commit 2bc2c46 into master Oct 4, 2026
5 checks passed
@MagicalTux
MagicalTux deleted the fix/quota-bar-percent-default-off branch October 4, 2026 06:22
@MagicalTux MagicalTux mentioned this pull request Oct 4, 2026
MagicalTux added a commit that referenced this pull request Oct 4, 2026
Fifteen commits since 1.1.22. Two change what an existing install does
without an opt-in (#514, #503); the rest is additive or display.

Behaviour changes
  #514 the TUI quota-bar percentage (`quotaBarPercent`) is off unless set:
       a bar carries its countdown, and its fill is the percentage. The
       switch (g → Bar percentage) is unchanged; a config without the key
       now reads as off
  #503 with Codex accounts in the pool, a request on the intercepted
       chatgpt.com that is not Codex inference (codex-cli 0.156's workspace
       discovery, plugin, MCP and settings calls) is passed through to
       chatgpt.com with the client's own login instead of reaching the
       Anthropic pool and a 404; the Codex Responses WebSocket is refused
       (501) so the CLI falls back to HTTPS, where the pool serves it (#492)
  #502 `login --api` adds a key at priority 100, a last resort behind the
       subscriptions, with `--priority <n>` to place it; existing entries
       are untouched (#497)

Fixes
  #498 artifacts (`/api/frame/*`) are relayed with the client's own
       credential, so publishing and reading them works behind a rotated pool
  #499 the Remote Control bridge (`/v1/environments/*`, `/v1/sessions/*`,
       `/v2/session_ingress/*`, `/v2/ccr-sessions/*`), which Claude Code
       2.1.287 sends through HTTPS_PROXY, is relayed with the client's own
       credential; registration no longer lands in a rotated account's org
  #488 keep-warm works on Windows: the warm-up client is spawned through a
       shell, so npm's `claude.cmd` shim is found
  #489 Node 24.6's undefined HTTP/2 keep-alive buffer no longer crashes the
       MITM tunnel with a NaN timeout
  #490 on a very wide terminal the two provider panes sit together and their
       bars grow to the list's cap instead of padding half the screen

Features
  #496 `accountSort` orders the TUI account list by the soonest reset of a
       window (session, weekly, S7, F7) inside each provider group; cycled
       from the settings screen, display only
  #494 a z.ai GLM Coding Plan backend account shows its 5-hour and weekly
       windows in `teamclaude status`
  #495 a NanoGPT backend account shows its daily and weekly windows and
       NanoGPT's own billing advice (`billing balance`, `balance not allowed`)
  #500 each dashboard account card lists the models the account served in
       the last 15 minutes

Docs
  #505 what a cross-organization switch costs a Sonnet 5.5 conversation:
       the API drops the earlier thinking blocks silently; same-org pools are
       unaffected (#491)

Tests
  #501 #504 two tests that raced the wall clock or a shared port now assert
       the mechanism, and the last private server-spawn harness is gone

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
euisan added a commit to euisan/teamclaude that referenced this pull request Oct 5, 2026
* feat(tui): fold account rows below 70 columns so usage bars wrap

On a narrow terminal (a phone over a remote session, say) an account row
could not hold its name, status and quota bars on one line. The list dropped
every bar past the first and shrank that one to a cell or two, so the weekly
and family windows vanished below 70 columns and the session bar became
unreadable near 40.

Below LIST_MIN a full-width list now folds each account into a heading
(marker, route cells, name, type, status) and one line per quota bar, with
the trailing tags wrapped a whole tag at a time beneath them. Each folded
bar takes the row less a 2-column right margin (COMPACT_BAR_RIGHT_MARGIN),
so it never touches the screen edge. The heading gives the name every
column the rest leaves, measured in display columns, so a CJK name is cut
where it reaches the type column. The smallest drawable terminal drops from
40x8 to 30x8 so the folded layout is reachable at phone widths.

This ports teamcodex KarpelesLab#21 (7296e40, compact layout below 70 columns) and
KarpelesLab#23 (0a34280, compact bar right margin), adapted to teamclaude's budgeted
_listLayout: the layout flags `narrow`, _renderRow passes the width, and
_renderAcct returns lines instead of one string. Split panes are never
narrow. teamcodex KarpelesLab#12/KarpelesLab#17/KarpelesLab#18/KarpelesLab#19 are already in 1.1.22 and were not needed.

At 70 columns and wider the frame is byte-identical to 1.1.22: the trailing
tags moved into a list but are appended in the same order with the same
separator. test/fixtures/tui-wide-frames.json holds frames recorded from the
unmodified renderer, and test/tui-narrow-bars.test.js pins both sides.

docs/teamcodex-port-plan.md classifies all 34 teamcodex commits for later
porting; docs/evidence/ holds the real TUI.start() paint at 30-80 columns.

* test(tui): use a neutral double-width name in the narrow-layout fixtures

The width tests need an account name of East Asian Wide characters, but the
one they used read like a real person's name and address. It is now
'가나다라마바사-wide@example.test': seven Hangul syllables (fourteen columns)
then ASCII, which still exercises the cases the tests care about.

- At 40 columns the name is cut exactly where it reaches the type column.
- At 30 columns a fifth syllable would straddle the edge, so it is dropped
  whole and its leftover column padded (a case the old name did not hit).
- At 69 columns the whole name fits.

The wide-frame fixture was re-recorded from the unmodified 1.1.22 renderer
with the new name. The pty capture in docs/evidence was regenerated from the
real TUI.start() paint. The comments that named the data Korean now describe
it by width. Mutating the folded heading to measure characters instead of
display columns still fails "the folded heading spends what the type and
status leave on the name, in display columns".

Reapplied on 1.1.23: tui-wide-frames.json re-recorded from the unmodified 1.1.23 renderer (percentage off by default since KarpelesLab#514); renderFrame takes a config, and the folded-label test checks percentage on and off.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
euisan added a commit to euisan/teamclaude that referenced this pull request Oct 5, 2026
…bars

Owner request 1: match teamcodex by changing usage-bar labels from
"39% · 2h53m" to "39% 2h53m". A single space lowers the minimum bar
width needed to show both values by two columns; narrower bars still
show the whole countdown alone.

Keep the separators in dashboard and status output unchanged. Update
label assertions, exact width boundaries, folded-bar expectations, and
recorded frames for this label change alone.

Reapplied on 1.1.23: with the percentage opt-in (KarpelesLab#514) the default frames and fixture are unchanged; the on-state row test and folded labels use the single space, and docs/configuration.md quotes the new label.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant