From 2d7fae0ab87ffa24fe3b5dbbb05c1726abafda92 Mon Sep 17 00:00:00 2001 From: Taylor Ho Date: Mon, 15 Jun 2026 00:20:23 -0700 Subject: [PATCH] fix(agents): remove activity transcript now summary - Remove the sticky Now summary card from AgentSessionTranscriptList so transcript rows no longer scroll under a pinned status element - Drop summary-only helpers, Shimmer usage, and icon imports that only supported the removed card - Remove the showInterventionHint prop plumbing from ManagedAgentSessionPanel and AgentSessionThreadPanel after the summary hint was deleted - Update the channel activity E2E expectation to assert the removed summary no longer renders --- .../agents/ui/AgentSessionTranscriptList.tsx | 209 ------------------ .../agents/ui/ManagedAgentSessionPanel.tsx | 6 - .../channels/ui/AgentSessionThreadPanel.tsx | 1 - desktop/tests/e2e/channels.spec.ts | 5 +- 4 files changed, 1 insertion(+), 220 deletions(-) diff --git a/desktop/src/features/agents/ui/AgentSessionTranscriptList.tsx b/desktop/src/features/agents/ui/AgentSessionTranscriptList.tsx index d04decc4e..83735810c 100644 --- a/desktop/src/features/agents/ui/AgentSessionTranscriptList.tsx +++ b/desktop/src/features/agents/ui/AgentSessionTranscriptList.tsx @@ -1,15 +1,12 @@ import * as React from "react"; import { AlertCircle, - Bot, Brain, CheckCheck, ChevronDown, CircleDot, - Loader2, Radio, TerminalSquare, - Wrench, } from "lucide-react"; import { @@ -20,7 +17,6 @@ import { cn } from "@/shared/lib/cn"; import { normalizePubkey } from "@/shared/lib/pubkey"; import { Badge } from "@/shared/ui/badge"; import { Markdown } from "@/shared/ui/markdown"; -import { Shimmer } from "@/shared/ui/Shimmer"; import { Toggle } from "@/shared/ui/toggle"; import { UserAvatar } from "@/shared/ui/UserAvatar"; import type { PromptSection, TranscriptItem } from "./agentSessionTypes"; @@ -55,14 +51,12 @@ export function AgentSessionTranscriptList({ isWorking = false, items, profiles, - showInterventionHint = false, }: AgentTranscriptIdentityProps & { compact?: boolean; emptyDescription: string; isWorking?: boolean; items: TranscriptItem[]; profiles?: UserProfileLookup; - showInterventionHint?: boolean; }) { const presentation = React.useMemo( () => buildTranscriptPresentation(items, isWorking), @@ -90,13 +84,6 @@ export function AgentSessionTranscriptList({ return (
-
; - showInterventionHint: boolean; -}) { - const { counts, hasError, headline, lastUpdatedAt, state } = presentation; - const showSummary = isWorking || hasError || itemsHaveActivity(counts); - - if (!showSummary) { - return null; - } - - const StateIcon = getStateIcon(state, isWorking); - const statusLabel = getStateLabel(state, isWorking); - const lastUpdated = lastUpdatedAt - ? formatTranscriptTime(lastUpdatedAt) - : null; - - return ( -
-
- - - -
-
-

- Now -

- · -

{agentName}

- {lastUpdated ? ( - <> - · -

- {lastUpdated} -

- - ) : null} -
-

- {isWorking && state !== "idle" && state !== "error" ? ( - {headline} - ) : ( - headline - )} -

-
- - {statusLabel} - - {counts.tools > 0 ? ( - 0 ? "error" : "default"} - /> - ) : null} - {counts.thoughts > 0 ? ( - - ) : null} - {counts.messages > 0 ? ( - - ) : null} -
- {showInterventionHint && isWorking ? ( -

- Use Stop{" "} - above to interrupt this turn without stopping the agent process. -

- ) : null} -
-
-
- ); -} - -function ActivityCountBadge({ - count, - label, - tone = "default", -}: { - count: number; - label: string; - tone?: "default" | "error"; -}) { - return ( - - {count} {label} - {count === 1 ? "" : "s"} - - ); -} - -function itemsHaveActivity( - counts: ReturnType["counts"], -) { - return ( - counts.tools > 0 || - counts.thoughts > 0 || - counts.messages > 0 || - counts.lifecycle > 0 - ); -} - -function getStateIcon( - state: ReturnType["state"], - isWorking: boolean, -) { - if (state === "error") { - return AlertCircle; - } - if (!isWorking) { - return CircleDot; - } - switch (state) { - case "tool_running": - return Wrench; - case "thinking": - return Brain; - case "responding": - return Bot; - default: - return Loader2; - } -} - -function getStateLabel( - state: ReturnType["state"], - isWorking: boolean, -) { - if (state === "error") { - return "Error"; - } - if (!isWorking) { - return "Idle"; - } - switch (state) { - case "tool_running": - return "Running tool"; - case "thinking": - return "Thinking"; - case "responding": - return "Responding"; - default: - return "Working"; - } -} - function getDisplayBlockKey(block: TranscriptDisplayBlock) { if (block.kind === "single") { return block.item.id; diff --git a/desktop/src/features/agents/ui/ManagedAgentSessionPanel.tsx b/desktop/src/features/agents/ui/ManagedAgentSessionPanel.tsx index 001b5ca3f..feef26d3c 100644 --- a/desktop/src/features/agents/ui/ManagedAgentSessionPanel.tsx +++ b/desktop/src/features/agents/ui/ManagedAgentSessionPanel.tsx @@ -35,7 +35,6 @@ type ManagedAgentSessionPanelProps = { isWorking?: boolean; rawLayout?: "responsive" | "exclusive"; showHeader?: boolean; - showInterventionHint?: boolean; showRaw?: boolean; profiles?: UserProfileLookup; }; @@ -49,7 +48,6 @@ export function ManagedAgentSessionPanel({ isWorking = false, rawLayout = "responsive", showHeader = true, - showInterventionHint = false, showRaw = true, profiles, }: ManagedAgentSessionPanelProps) { @@ -115,7 +113,6 @@ export function ManagedAgentSessionPanel({ isWorking={isWorking} profiles={profiles} rawLayout={rawLayout} - showInterventionHint={showInterventionHint} showRaw={showRaw} transcript={scopedTranscript} /> @@ -171,7 +168,6 @@ function SessionBody({ isWorking, profiles, rawLayout, - showInterventionHint, showRaw, transcript, }: { @@ -187,7 +183,6 @@ function SessionBody({ isWorking: boolean; profiles?: UserProfileLookup; rawLayout: "responsive" | "exclusive"; - showInterventionHint: boolean; showRaw: boolean; transcript: TranscriptItem[]; }) { @@ -229,7 +224,6 @@ function SessionBody({ isWorking={isWorking} items={transcript} profiles={profiles} - showInterventionHint={showInterventionHint} /> {showRaw && rawLayout === "responsive" ? ( diff --git a/desktop/src/features/channels/ui/AgentSessionThreadPanel.tsx b/desktop/src/features/channels/ui/AgentSessionThreadPanel.tsx index 98837376c..cb34a2fe6 100644 --- a/desktop/src/features/channels/ui/AgentSessionThreadPanel.tsx +++ b/desktop/src/features/channels/ui/AgentSessionThreadPanel.tsx @@ -206,7 +206,6 @@ export function AgentSessionThreadPanel({ profiles={profiles} rawLayout="exclusive" showHeader={false} - showInterventionHint={canInterruptTurn} showRaw={showRawFeed} />
diff --git a/desktop/tests/e2e/channels.spec.ts b/desktop/tests/e2e/channels.spec.ts index cb77d8a42..905756859 100644 --- a/desktop/tests/e2e/channels.spec.ts +++ b/desktop/tests/e2e/channels.spec.ts @@ -773,10 +773,7 @@ test("shows and clears activity indicators for active channel agents", async ({ await expect(page.getByTestId("agent-session-thread-panel")).toContainText( "alice", ); - await expect(page.getByTestId("agent-transcript-now-summary")).toBeVisible(); - await expect(page.getByTestId("agent-transcript-now-summary")).toContainText( - "Working", - ); + await expect(page.getByTestId("agent-transcript-now-summary")).toHaveCount(0); await expect(page.getByTestId("agent-session-stop-turn")).toBeVisible(); await expect(page.getByTestId("agent-session-stop-turn")).toBeDisabled(); await expect(page.getByTestId("agent-session-thread-panel")).toContainText(