Skip to content

feat: add the Narrative task log and Information density / Dev mode controls - #2100

Merged
Douglasymlai merged 8 commits into
mainfrom
feat/narrative-task-log
Oct 25, 2026
Merged

Douglasymlai merged 8 commits into
mainfrom
feat/narrative-task-log

Conversation

@Douglasymlai

@Douglasymlai Douglasymlai commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Split out of #1958. This only changes the experimental timeline view. The default chat view is unchanged.

Problem

In the experimental timeline view, the work log under each Task is hard to scan:

  • Each call row shows raw toolkit and method names, such as Terminal Toolkit · Shell exec. You can't tell whether the call is still running, finished, failed or was stopped.
  • Calls, repeated calls, subagents, agent groups and the Task header each open and close in a different way. A log you opened can fold itself again while the Task is still running.
  • Rows that have nothing to show still look clickable.
  • An extra "Eigent is working…" line repeats what the log already shows.
  • The only way to switch between the narrative and trajectory views is a pill in the Session header. You can't choose how much detail the narrative view shows.

Cause

Each kind of row had its own open/close logic and styling. Call titles came straight from toolkit and method names. The view choice was a header control with no detail setting.

Fix

  • One task log row. Calls, repeated calls, subagents, agent groups and the Task header now share one row: the same trigger, chevron, focus ring, running shimmer and open/close rule. A row follows the Task's state (open while working, folded when done) until you click it. After that your choice wins until the state changes again. A Task log you opened stays open after the Task ends.
  • Readable call titles. When a call has no title of its own, the row says what happened, in the right tense: "Running npm test", "Ran npm test", "Failed to run npm test", "Stopped npm test". Searches, reads, edits, writes, browsing and plan updates work the same way. Titles a call already has keep their wording. Outcomes like timed out, cancelled, blocked or interrupted show in words after the title. All 11 languages are translated.
  • Calmer rows. A call with nothing to reveal is a plain line. Rows show no durations. Opening a call shows only its request/response box. The "Eigent is working…" line is removed from both the narrative and trajectory views.
  • Information density in the Session menu: a Minimum / Moderate / Full slider (Moderate by default; your choice is kept between launches). Minimum and Moderate put repeated calls of the same tool action in one row with a count. Moderate also shows the latest query or command in that row. Full lists every call.
  • Dev mode switch in the Session menu turns on the trajectory view. The density slider is disabled while Dev mode is on. The narrative/trajectory pill is removed from the header.
  • The ⌘⇧L shortcut is renamed "Toggle Dev Mode". When the experimental timeline view is off, the shortcut does nothing and is hidden from the shortcuts list. The density and Dev mode controls only appear when the experimental timeline view is on.

Testing

In the app (macOS, experimental timeline view, plus the default view for the "nothing new appears" checks):

  • Running Tasks that used the terminal, web search, a web fetch and a file write:
    • Rows read "Running …" while running and "Ran / Searched for / Wrote …" when done, each with an icon and no durations.
    • The "Eigent is working…" line is gone.
  • Folding: a Task log opens while running and folds when the Task ends. A log opened by hand stays open after later Tasks finish, and one collapsed by hand stays collapsed while the Task keeps running.
  • Opened calls: opening a call shows only its request/response box.
  • Density, with three searches in a row:
    • Moderate shows one row "Searched for cuttlefish · 3 events" (latest query).
    • Minimum shows "Searched · 3 events".
    • Full lists all three in order.
    • The chosen density was kept after quitting and relaunching.
  • Dev mode: the switch and ⌘⇧L turn on the trajectory view, and the density slider is disabled while it's on. The header has no Narrative/Trajectory pill, and the shortcuts list shows "Toggle Dev Mode".
  • Default chat view: no density or Dev mode controls appear, ⌘⇧L does nothing, and the shortcut isn't listed.
  • Keyboard, theme and language: keyboard open/close of rows with a visible focus ring, and arrow keys on the slider. Light and dark themes. Chinese and Arabic menus and headers.
  • Fixed in this PR after testing:
    • durations showing inside opened rows and stopped summaries;
    • Minimum showing a query, and Moderate naming the first instead of the latest call;
    • tool formatter text ending up in titles;
    • a read-call title showing a parameter summary;
    • Stop adding paused time back to the timer.
    • Each was retested in the app: a paused Task held its time, resumed correctly and kept it after Stop, and earlier Task durations stayed unchanged.
  • Not checked in the app: a call that failed or was stopped (the backend reported these as finished or unknown), a call with nothing to reveal (covered by unit tests), the full right-to-left layout, and the running shimmer under the macOS reduce-motion setting.

Automated:

  • TimelineModes, CallRow, callSubject, chatProjectionContract, chatEventProjectionBridge, pageTabStore, AppCommandProvider, KeyboardShortcutsDialog and HeaderBox suites pass. New tests cover:
    • the shared row and its open state;
    • outcome-tense titles and subjects;
    • density grouping;
    • the slider and switch (mouse and keyboard);
    • the saved-settings migration;
    • the shortcut doing nothing in the default view;
    • the pause-timer cases.
  • npm run type-check, npm run check:i18n, npm run check:design-tokens, ESLint and Prettier: pass. CI passes.
  • ThemeProvider and three installationStore tests fail the same way on main, so they're unrelated.

Testing Evidence

  • I have included human-verified testing evidence in this PR.
  • This PR includes frontend/UI changes, and I attached screenshot(s) or screen recording(s). (screenshots to be attached)
  • No frontend/UI changes in this PR.

@Douglasymlai Douglasymlai self-assigned this Oct 24, 2026
@Douglasymlai
Douglasymlai marked this pull request as ready for review October 24, 2026 16:44
@Douglasymlai
Douglasymlai force-pushed the feat/narrative-task-log branch from c5adc16 to 9bf901a Compare October 25, 2026 11:57
@Douglasymlai
Douglasymlai merged commit 56052ba into main Oct 25, 2026
12 checks passed
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