diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index a4d66e8d2..e173ea0f0 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- Fixed Agent Hub lineage registration timestamps displaying in UTC instead of the user's local timezone. + ## [17.2.12] - 2026-08-08 ### Fixed diff --git a/packages/coding-agent/src/modes/components/agent-hub.ts b/packages/coding-agent/src/modes/components/agent-hub.ts index f63acd014..fea6456c9 100644 --- a/packages/coding-agent/src/modes/components/agent-hub.ts +++ b/packages/coding-agent/src/modes/components/agent-hub.ts @@ -829,7 +829,19 @@ export class AgentHubOverlayComponent extends Container implements SelectListMou `Spawned by ${sanitizeDisplayText(ref.parentId ?? MAIN_AGENT_ID)}${children.length > 0 ? ` · ${children.length} children` : ""}`, ); if (children.length > 0) add(theme.fg("dim", formatChildIds(children, width))); - add(theme.fg("dim", `Registered ${new Date(ref.createdAt).toISOString().slice(0, 16).replace("T", " ")}Z`)); + add( + theme.fg( + "dim", + `Registered ${new Date(ref.createdAt).toLocaleString(undefined, { + year: "numeric", + month: "short", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + timeZoneName: "short", + })}`, + ), + ); section("Changes"); add( diff --git a/packages/coding-agent/test/agent-hub-ordering.test.ts b/packages/coding-agent/test/agent-hub-ordering.test.ts index 5f72f089a..8f980299d 100644 --- a/packages/coding-agent/test/agent-hub-ordering.test.ts +++ b/packages/coding-agent/test/agent-hub-ordering.test.ts @@ -529,6 +529,7 @@ describe("Agent hub row ordering", () => { it("renders aggregate usage and a selected-agent inspector without inventing change attribution", () => { geometry = stubStdoutGeometry(140); geometry.setRows(28); + const createdAt = Date.parse("2026-08-09T20:15:00Z"); const agents = new AgentRegistry(); agents.register({ id: "Reviewer", @@ -541,6 +542,7 @@ describe("Agent hub row ordering", () => { patchPath: "/tmp/Reviewer.patch", branchName: "omp/task/Reviewer", }, + createdAt, }); const observers = new SessionObserverRegistry(); vi.spyOn(observers, "getSessions").mockReturnValue([ @@ -584,7 +586,16 @@ describe("Agent hub row ordering", () => { expect(rendered).toContain("Security Reviewer"); expect(rendered).toContain("read · src/session/agent-session.ts"); expect(rendered).toContain("31K/128K 24%"); - expect(rendered).toContain("Registered "); + expect(rendered).toContain( + `Registered ${new Date(createdAt).toLocaleString(undefined, { + year: "numeric", + month: "short", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + timeZoneName: "short", + })}`, + ); expect(rendered).toContain("Shared workspace · per-agent LoC not attributable"); expect(rendered).toContain("Output /tmp/Reviewer.md"); expect(rendered).toContain("Patch /tmp/Reviewer.patch");