Skip to content

Sidebar rows in fixed columns: location, role, provider, model, effort, name, time, work, usage #19

Closed

Description

@tannerpolley

Goal

Make every sidebar thread row use the same column order and widths, so the items line up vertically across rows:

Location icon · Role · Provider icon · Model name (e.g. Opus 5.5) · Effort · Name · Time · Current-work icon · Token/usage

Each item gets its own fixed column, so all rows fit the same horizontal space. Effort labels get short forms; for example "Extra High" becomes XHigh.

Owner request (2026-10-12).

What exists today

  • Projects view top-level rows (SidebarProjectThreadRow, SidebarProjectSections.tsx ~1180–1310):
    • an empty caret slot (w-4), provider icon, model label plus effort (max-w-[6.5rem], hidden below a 16rem container), then the title (flexible, truncates);
    • then trailing: a count, elapsed time, and a status mark (w-3.5).
    • It has no location icon.
  • Subagent rows (SidebarBackgroundWorkRows.tsx ~157–215) use the same order, with the worktree icon in the caret slot.
  • Widths. Only the caret and status slots are fixed (SidebarColumns.tsx). The trailing group sizes to its content, so time and status don't line up.
  • The Activity view (the default sidebarMode) is a 3-line card with no model or effort. LegacySidebar.tsx is off by default.
  • Effort labels come from each provider's catalog label (formatModelSelectionEffort, threadExecution.ts ~171), and there is no short form. Model names already have a short form (shortModelNames).

Proposed

Performance: pure CSS widths, with no measuring in JavaScript per row. Mobile is out of scope.

Activity

  1. tannerpolley commented on Oct 13, 2026

    @tannerpolley
    OwnerAuthor

    Owner example (2026-10-13): expand carets break the hierarchy alignment. In the ePC-SAFT project, rows with an expand caret (›/⌄) and rows without one start their content at different horizontal positions. Worktree icons, provider icons and model names then don't line up across sibling rows and levels, so the parent/child hierarchy is hard to read.

    Requirements for this issue:

    Related: duplicated grandchild rows in the same screenshot are tracked separately.

  2. tannerpolley commented on Oct 13, 2026

    @tannerpolley
    OwnerAuthor

    Owner decisions (2026-10-13):

    • The Activity view keeps its card layout. Fixed columns apply to the Projects view and child rows.
    • On a narrow sidebar, columns drop in this order: usage, then effort, then model. The caret, title and work status always stay.
  3. tannerpolley commented on Oct 14, 2026

    @tannerpolley
    OwnerAuthor

    Merged to main in fb389ff (4 commits), after one independent Opus review, two fix rounds, a re-verification and a live sandbox check.

    • Columns (Sidebar rows in fixed columns: location, role, provider, model, effort, name, time, work, usage #19): Projects-view rows, child rows and native subagent rows share one column definition: caret · location · role · provider · model · effort · name · time · work · usage. The caret column is reserved on rows without children. Each level indents by one fixed 12px step. On a narrow sidebar the columns drop in the order usage, effort, model. Activity keeps its cards, and search rows keep their layout. The tree guides, hidden-task counts and classic style (Codex-style sidebar off) are kept.
    • Sandbox check: measured on a live orchestrator → child → native-subagent tree. Leading columns line up within each depth (+12px per level); count, time and status line up across all depths. Times are compact ("6s", "3m") and don't overlap the status mark. Titles are 12px.
    • Default 16rem sidebar: model, effort and usage are hidden, and the title keeps about 11 characters. At 20rem: model. At 24rem and wider: model, effort and usage (for example "Haiku 5.5 · Med · … · 145k").
    • Usage (Show each thread's token usage next to its status icon #17): the number is the latest turn's tokens; the tooltip shows input, cached, output, context fill and thread total. The server keeps a small per-thread summary (fork migration 11), sent to clients at most every 5 s during a turn and immediately on turn start or completion. That's about 190 bytes per thread. A Claude turn that ends without a final result keeps its partial count.
    • Tests: about 181 focused tests; tsc-rs is clean for server, web, contracts and client-runtime.

    Ships in the next build after v2.12.1.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementRequested improvement or new capability.

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions