Skip to content

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 20 Aug 03:17
· 34 commits to main since this release

Added

  • A renews row on every Usage card. A window reset says when you may work again; a renewal
    says when the plan is charged and its allowance starts over — the question that decides whether
    pacing is worth it at all. Codex states it, so the row reads renews 13 Sep · in 25d, taken
    from the same ~/.codex/auth.json ID token the account line already decodes: no extra request,
    no extra file, one read for both labels.

    Anthropic states it nowhere readable — not in the usage endpoint, not in ~/.claude.json — so
    the Claude card says unknown instead of counting a month from the day the subscription was
    created. A date already in the past reads as unknown too: the Codex claim only refreshes while
    Codex runs, and a stale date under a heading that says renews reads as one that is coming.

  • The mouse reaches every surface, not just the switcher. The pointer worked in the projects
    picker and nowhere else: --usage and --changelog never turned mouse reporting on at all,
    --settings read only keys, the Git pane took the wheel and ignored every click, and the mode
    pickers moved the selection without ever running it. Now the wheel scrolls the changelog, moves
    the selection in the Git menu and its sub-lists, walks the settings form, and scrolls a mode
    picker's preview card when the pointer is over it — and a click reaches rows, tabs and
    command-bar pills on all of them.

    One rule everywhere, because terminals report no double-click: a click selects, a click on the
    row already selected does what Enter would, and a click on a pill does what the key printed on
    its cap does. So no stray click ever launches a review or writes a setting, and a pill's label
    cannot drift from its behaviour — the label is the behaviour. Each zone is still measured by
    the loop that draws the thing it points at; what is shared is the lookup, not the measurement.
    Clicking outside the settings card now discards the draft as esc does, instead of closing over
    a staged edit and leaving it alive.

Changed

  • A reset that is not today now names the day it falls on. The status line reads
    resets 08:53 Wed 19 Aug and the window's own bar row reads 1d 12h · 19 Aug. A weekday is
    unambiguous inside a seven-day window but it is not legible: mapping Thu onto a calendar six
    days out is arithmetic you had to do in your head, and the weekly bucket is exactly the one that
    lands far enough away to need it.

    A window rolling over later today stays as short as it was — resets 15:59 Thu, 2h 40m — so
    the presence of a date is itself the signal that the rollover is not today. The countdown keeps
    its place beside it: it is the only "how long do I wait" figure a window that missed the donut
    gets.

  • More air between the Usage cards. The pane paints no background and draws no divider
    between providers, so whitespace is the only thing separating them — and with the columns
    butted together the two cards read as one wide table of rows rather than two independent
    answers. They now get a gutter, which yields back to one column on a pane too narrow to seat
    the cards' own rows. The columns also fill the pane exactly, instead of 100 / n leaving the
    remainder dark on the right.

  • The Git menu asks before an all-files review of a large repo. a runs tuicr -A, which
    reads every tracked file — and because the pane deliberately keeps the screen, draws one static
    splash and execs the review over itself, a checkout big enough to keep tuicr busy for minutes
    is indistinguishable from a hang: no frame, no spinner, nothing to cancel. On a 7,600-file tree
    it was two solid minutes of a cat that never moved.

    The row now counts the tree first — one git ls-files, taken on activation rather than on open,
    so the menu's first frame still costs nothing — and over git.all_files_warn (1,500 by default)
    it spends a screen saying what it found: 6,699 files tracked in this repo, tuicr reads every one of them before its first frame. Enter opens it anyway, esc goes back to the menu. Under the
    threshold nothing changed, and all_files_warn = 0 never asks. A count git refuses to give
    opens the review rather than standing in front of it: a broken number must not become a locked
    door.

  • The Git pane stopped painting itself opaque. Its menu card, its sub-list card and that
    list's search box each filled themselves with panel_bg and drew their borders in the accent.
    All three were hand-rolled Blocks — exactly the drift tui::boxed exists to prevent — and the
    result was one pane that looked like a solid dialog sitting next to five that the terminal shows
    through. They go through the helper now: borders recede in overlay0, captions keep
    title_color, and nothing paints a fill, so a translucent terminal stays translucent under the
    Git pane too.

    panel_bg keeps the places it belongs: as ink on key caps and pills, and as the fill of the
    changelog, settings and cheatsheet popups, which float over the live picker and genuinely have
    to occlude it. The switcher's own list panel was hand-rolling a Block as well — its caption
    slot holds the tab strip rather than a word — so tui grew framed, the captionless half of
    boxed, and both panels build from it. Three render tests now assert the absence of a fill,
    because the one that existed only covered the mode pickers.