Skip to content

feat: improve ChatTimeline presentation and controls - #1958

Draft
Douglasymlai wants to merge 3 commits into
mainfrom
fix/chattimeline-eventbus-launch
Draft

Douglasymlai wants to merge 3 commits into
mainfrom
fix/chattimeline-eventbus-launch

Conversation

@Douglasymlai

@Douglasymlai Douglasymlai commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

This PR is being split into smaller PRs so each part can be reviewed and tested on its own. It stays open as a Draft for reference and will be closed once every part has landed. Please review the split PRs instead of this one.

Split

Order Part PR
1 Model-change divider between tasks that ran on different models (uses the per-task model added in #2061) #2098
2 Session header menu: title as a menu button, Pin, Rename, End, Delete #2096
3 Approval and question cards above the composer #2095
4 User message actions: Copy, time, Edit and resend, Expand #2097
5 Turn into skill / Turn into automation from the Session menu after #2096
6 Narrative task log, outcome-tense action titles, Information density and Dev mode (experimental timeline view) after #2098 and #2096
7 Default work log rows match the Narrative view; automation buttons removed from final answers after part 6

The implementation plan document from this branch is not carried over.

Original description

What changed

The Session title and trailing vertical three-dot icon are one menu button. Long titles fade at the existing 200px cap without an ellipsis; the mask follows the button surface in rest, hover, and open states. The full-name tooltip and accessible label remain available, the whole button shows a selected state while its menu is open, and pressing it does not scale the button. Moderate groups only adjacent calls from the same toolkit, including legacy Terminal receipts without a toolkit name. Its outer row shows the latest useful search query or the command's short display description, such as “Fetching Anthropic news page,” alongside the action count; standalone command rows use the same description. It refreshes as calls arrive and falls back to a short label when display text is unsuitable. Session rename updates the visible title immediately, then rolls back and reports an error if the save fails.

The narrower menu starts with Turn into skill and Turn into automation, using the latest completed Task in the current Session; the entries stay visible but disabled until a result exists. Turn into skill prepares an editable follow-up for the bundled skill-creator skill. Turn into automation opens the existing Automation editor prefilled from that Task, and uses the shared Zap icon. When the event-native timeline is enabled, the menu then shows an Information density slider (Minimum/Moderate/Full, stored as the existing compact/balanced/expanded values) and a Dev mode switch that turns on the Trajectory view; the slider is disabled while Dev mode is on. Pin, Rename, End, and Delete follow. Moderate is the default. Minimum and Moderate count consecutive calls of one toolkit method on a single row; Full shows each action row in order.

The broader ChatTimeline work also moves human approval controls above the composer and adds copy/time actions to user messages. Those actions sit below the bubble, align to the right, and appear on hover or keyboard focus while remaining visible on non-hover devices. The timestamp uses the same horizontal inset as the adjacent icon buttons. Short messages show Edit and resend beside Copy; messages longer than four lines show Expand/Collapse in that slot, revealing the full content while preserving the folded height and fade. The redundant “Eigent is working…” tail row is removed from both event-native views; the existing left-to-right ShinyText marks the active narrative action. The final-message automation buttons are removed from both event-native views and the legacy timeline. Both timeline views have a model-change divider component that appears when adjacent Runs have different recorded model identities.

Narrative task-log rows (calls, repeated-call groups, subagents, agent groups, and the Run header) share one TaskLog primitive: one trigger, chevron, focus ring, shimmer, and open-state rule. A row follows its own automatic state (for example, open while it waits for you), and your click wins until that state changes; a Run log you opened stays open after the Run ends. A call with nothing to reveal stays a plain line instead of opening an empty detail. Calls whose title is only the toolkit/method fallback read in the tense of their outcome: “Running npm test”, “Ran npm test”, “Failed to run npm test”, or “Stopped npm test”, with copy in all 11 locales. Minimum names only the action; Moderate and Full add the query, command, or path. Authored titles, toolkit descriptions, and human calls keep their own wording, and an unknown outcome keeps the original title. Outcomes the title doesn't state (timed out, cancelled, blocked, interrupted, unknown) appear in words after it, so status is never color-only. Rows show no duration, and an opened call shows only its request/response box.

The implementation plan and remaining product-review questions are in docs/plans/chat-timeline-experience-implementation.md.

Integration and limits

  • The model divider accepts per-Run identities but is not yet connected to Run reads. feat: expose resolved model identity per Run #2061 (the reland of feat: expose resolved model identity per Run #1965) adds the non-secret resolved_model field for that integration.
  • Event-native rendering remains flag-gated; this PR does not complete the launch cutover.
  • This PR changes no bundled skills. Turn into skill prepares a composer prompt for the existing skill-creator skill. Turn into automation prefills the editor from the latest completed Task, and also reads an automation-draft block from that result when one is present. The skills that produce automation drafts and interactive HTML results are in a separate PR.
  • Rewind is not exposed because the traced restore endpoint only creates a candidate and does not apply it to the user's worktree.

Validation

  • Task log update: ChatBox, TaskWorkLogAccordion, and lib Vitest suites: 1,508 passed across 96 files; TypeScript, scoped ESLint, locale parity/source usage, design-token check, and git diff --check passed
  • Latest focused Session header Vitest suite: 10 passed; earlier Session header, narrative/trajectory timeline, and user-message suites: 58 passed; earlier Session header/source, automation parser, and timeline suites: 91 passed; earlier Balanced/timeline suites: 94 passed; earlier rename suite: 3 passed
  • TypeScript, locale parity/source usage, design-token/theme checks, scoped ESLint, Prettier, and git diff --check passed
  • Vite web build passed (before the task log update; not re-run)
  • Local browser redirected to login, so authenticated visual QA of the Session and task log is being done in the desktop app

@Douglasymlai Douglasymlai changed the title feat: fully launch and improve ChatTimeline feat: improve ChatTimeline presentation and controls Sep 23, 2026
@Douglasymlai
Douglasymlai force-pushed the fix/chattimeline-eventbus-launch branch from f532163 to 9fd771a Compare October 14, 2026 14:48
@Douglasymlai
Douglasymlai marked this pull request as ready for review October 14, 2026 21:52
@Douglasymlai
Douglasymlai force-pushed the fix/chattimeline-eventbus-launch branch from ea19213 to 69aeb24 Compare October 17, 2026 21:07

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

Claude Code Review is paused for this repository because its GitHub organization is not linked to your Claude organization.

To turn it back on, one person needs both roles: owner of the GitHub organization (or the account owner, for a personal repository) and admin or owner of your Claude organization. If that is not you, pass this on to someone who is.

Open Organization settings, Git providers and click Link next to the GitHub organization's name. If it is not listed, click Enable GitHub integration or Connect your GitHub first, whichever the page shows.

New pull requests are then reviewed as before. To get a review on one that is already open, someone with write access can comment @claude review.

Tip: disable this comment in your organization's Code Review settings.

This branch has not been deployed

No deployments
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