Skip to content

TUI: timestamp gutter mode for messages #29112

@guyshe-jfrog

Description

@guyshe-jfrog

Problem

The TUI already has /timestamps to show the time under each user message ("footer" mode). When scanning a long conversation it's useful to see when each message was sent at a glance, but the footer style takes a full line per message and doesn't align across rows.

Proposal

Extend /timestamps to cycle three modes instead of two:

  • hide (current default) — nothing shown
  • footer — current "show" behavior, time on a line below each user message
  • gutter — fixed 5-char HH:MM column to the left of each user message, 24-hour. Click the gutter to open a small popup with the full local datetime + relative ("3m ago")

Add an optional tui.json key timestamps_mode ("hide" | "footer" | "gutter", default "hide") that seeds the default for new users. The slash command still cycles at runtime; the config key just sets the starting mode. Existing users keep their current toggle — the kv-stored legacy "show" value is normalized to "footer" at read time.

Scope of v1:

  • User messages only. Assistant messages already render a separate footer line (▣ Mode · model · duration) and aren't part of the existing /timestamps behavior.
  • Mouse-only popup. Keyboard support (t on a selected message) needs a new selectedMessageID signal — happy to do it in a follow-up PR.
  • Gutter width is hardcoded to 6 cells (HH:MM + space). No dynamic measurement, keeps alignment stable.

Why this design

Three alternatives I considered:

  • A (this proposal): one cycle, three modes. Single mental model. One slash command. Config seeds default.
  • B: independent toggles (/timestamps for footer, /timestamp-gutter for gutter). Both can be on at once, which duplicates the timestamp visually.
  • C: replace footer with gutter behind the same toggle. Cleaner visually but breaks current users' UX without a way back.

I'm asking before opening the PR because CONTRIBUTING.md:13 + :251-253 require design approval for UI changes. Happy to take this in a different direction if you'd prefer B or C — or drop it.

Draft PR

I have a working branch with implementation, docs, and unit tests (11 new tests, all green, typecheck clean). Will open as a draft once there's directional sign-off, or close this issue if it's a no.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions