镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

feat(agents): show a timestamp on each activity feed entry - #1443

Merged
wpfleger96 merged 7 commits into
mainfrom
duncan/activity-entry-timestamps
Oct 20, 2026
Merged

wpfleger96 merged 7 commits into
mainfrom
duncan/activity-entry-timestamps

Conversation

@wpfleger96

@wpfleger96 wpfleger96 commented Oct 20, 2026 •

Copy link
Copy Markdown
Member

Every activity feed entry (tool calls, thinking, messages, plans, status) now shows its own time, matching old Buzz's transcript row timestamps.

  • ActivityTranscript.tsx: each entry's existing at renders under it as a small, muted, left-aligned <time> (hour and minute), with the full date, time and time zone on hover. Both use the cached formatters in shared/datetime.ts (formatTime, formatFullTimestamp), so the hover text matches message timestamps. The turn heading above each turn uses the shared formatItemTimestamp format ("3:04 PM", "Yesterday at 3:04 PM", "Jun 20, 2025 at 3:04 PM"). The prompt entry has no time of its own; the turn heading already dates it. Calls nested inside a CodeMode script get their own time inside the expanded details. An entry or turn whose time is unknown (zero, non-finite, or an invalid date) shows no time.
  • Codex app-server history stamps every item with the turn start. restoreRecordedTools already reads the rollout; it now sets each item's at from item_completed.started_at_ms, and a tool's completedAt from completed_at_ms. A tool's duration is never invented: when only the start is recorded, an existing app-server duration is shifted onto it; when only the finish is recorded, an existing duration is moved back from that finish, and a tool with no duration keeps none. A zero in either field means unknown. A rebuilt CodeMode exec/wait call whose own record has no valid timestamp gets no finish from its output. Items with no rollout record keep the turn time.
  • Streamed chunks keep their first chunk's time, and tool updates keep their start time; the existing projection already does both.

Render every transcript item's own time beside it, and hydrate Codex item times from the rollout's item_completed records instead of the turn start. Items without a rollout record keep the turn time.

Signed-off-by: Will Pfleger <wpfleger@block.xyz>
Signed-off-by: Will Pfleger <wpfleger@block.xyz>
@wpfleger96
wpfleger96 marked this pull request as ready for review October 20, 2026 22:08
@wpfleger96
wpfleger96 requested a review from a team as a code owner October 20, 2026 22:08
…times

Signed-off-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>
Hayt added 2 commits October 20, 2026 18:29
…ed time formats

Codex history can record a finish with no start, which was dropped. Entry stamps
built two Intl formatters per render and their hover text drifted from the shared
full timestamp, which includes the time zone.

Signed-off-by: Hayt <211b96e6a2b7f45fd4047988976c7bbbeeda0c15f3ae7b32eec20834b5a55118@buzz.block.builderlab.xyz>
…rmat

The heading built a locale formatter on every render and showed the browser's
default date. An unknown start now omits the date instead of showing 1970 or
throwing from the cached formatter.

Signed-off-by: Hayt <211b96e6a2b7f45fd4047988976c7bbbeeda0c15f3ae7b32eec20834b5a55118@buzz.block.builderlab.xyz>
Comment thread src/bundled/codex/recorded-tools.ts Resolved
Hayt added 2 commits October 20, 2026 19:21
…finish

A recorded finish without a start was paired with the turn start, so the feed
showed time since the turn began as the tool's duration. Move an existing
app-server duration back from the finish instead, or leave the finish unset.

Signed-off-by: Hayt <211b96e6a2b7f45fd4047988976c7bbbeeda0c15f3ae7b32eec20834b5a55118@buzz.block.builderlab.xyz>
A rebuilt exec/wait call with a missing or invalid timestamp starts at the turn-start fallback; pairing it with a real output time showed a fabricated duration.

Signed-off-by: Hayt <211b96e6a2b7f45fd4047988976c7bbbeeda0c15f3ae7b32eec20834b5a55118@buzz.block.builderlab.xyz>

@kalvinnchau kalvinnchau left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🤖 Re-reviewed at 8af844d. The shared cached date formatters fix the per-render Intl cost, and recorded Codex times no longer invent durations: a lone finish moves the app-server duration back, and an undated restored call gets no finish. Focused vitest and tsc pass.

"Turn",
new Date(turn.startedAt).toLocaleString(),
known(turn.startedAt) &&
formatItemTimestamp(turn.startedAt / 1000, { withTime: true }),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🤖 [P3, non-blocking] Relative turn heading can go stale after midnight

The heading now uses the relative formatItemTimestamp ("2:34 PM" for today, "Yesterday at 2:34 PM" before that), but Turn doesn't subscribe to useLocalDay() the way MessageTimestamp and DayDivider do. A transcript left idle overnight keeps showing a bare "2:34 PM" for yesterday's turn until something else re-renders it. The live feed re-renders often, so the effect is small. Fix: call useLocalDay() once in Turn.

@wpfleger96
wpfleger96 merged commit 056ded4 into main Oct 20, 2026
37 checks passed
@wpfleger96
wpfleger96 deleted the duncan/activity-entry-timestamps branch October 20, 2026 23:53
ngoodger-block added a commit to ngoodger-block/buzz-app that referenced this pull request Oct 21, 2026
* origin/main: (56 commits)
  Polish huddle portraits and thread layout (block#1406)
  fix(goose): keep long model names inside the Settings model row (block#1432)
  feat(agents): show a timestamp on each activity feed entry (block#1443)
  feat(agents): add buttons to compact and start new session (block#1434)
  feat(activity): request and show Claude Code and Codex thinking (block#1452)
  add inline renaming for Solo sidebar chats (block#1345)
  fix(goose): say why the profile has no model to choose (block#1445)
  Add Marketplace tab and shared agent profile panels (block#1411)
  fix: publish scoped typing indicators from conversation composers (block#1435)
  feat: add configurable composer and pane focus shortcuts (block#1418)
  perf(messages): reuse captured video opening frames on remount (block#1437)
  FOR OCT 22: let agents clone and push their channel's repository (block#1324)
  perf(relay): keep row profile map identity while new authors load (block#1431)
  perf: avoid redundant relay channel derivation (block#1412)
  Normalize dialog sizing, headers, spacing, and motion (block#1403)
  Polish agent activity pills and popover actions (block#1429)
  feat(agents): ask to resume claude and codex turns stopped by reload or quit (block#1235)
  test(sign-out): join listed paths with / so the tests pass on Windows (block#1247)
  fix(deps): remove distrusted emsign certificate roots (block#1436)
  fix(plugins): distinguish usage and costs from agent activity (block#1392)
  ...

Signed-off-by: Nikolaj Goodger <ngoodger@squareup.com>
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.

2 participants