From c4502c9661c6085b3501923ad6c99bd9bf645fbf Mon Sep 17 00:00:00 2001 From: David Kaya Date: Sat, 21 Mar 2026 19:16:06 +0100 Subject: [PATCH] feat: show agent model, effort, and description in activity panel Each agent now renders as a card with: - Status dot and name - Model badge (e.g. gpt-5.4) and reasoning effort badge - Agent description text - Live activity status label Cards highlight with blue/emerald borders when active/completed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/renderer/components/ActivityPanel.tsx | 110 +++++++++++++++++----- 1 file changed, 89 insertions(+), 21 deletions(-) diff --git a/src/renderer/components/ActivityPanel.tsx b/src/renderer/components/ActivityPanel.tsx index 39f2fcb..2a11102 100644 --- a/src/renderer/components/ActivityPanel.tsx +++ b/src/renderer/components/ActivityPanel.tsx @@ -1,5 +1,5 @@ import { useMemo } from 'react'; -import { Activity } from 'lucide-react'; +import { Activity, Bot, Cpu, Sparkles } from 'lucide-react'; import { buildAgentActivityRows, @@ -11,6 +11,21 @@ import { import type { PatternDefinition } from '@shared/domain/pattern'; import type { SessionRecord } from '@shared/domain/session'; +function formatModel(model: string): string { + return model.replace(/-/g, '\u2011'); +} + +function formatEffort(effort: string | undefined): string | undefined { + if (!effort) return undefined; + const labels: Record = { + low: 'Low effort', + medium: 'Medium effort', + high: 'High effort', + xhigh: 'Max effort', + }; + return labels[effort] ?? effort; +} + interface ActivityPanelProps { activity?: SessionActivityState; pattern: PatternDefinition; @@ -38,30 +53,82 @@ export function ActivityPanel({ activity, pattern, session }: ActivityPanelProps - {/* Agent list */} -
-
- {activityRows.map((row) => ( -
- +
+ {activityRows.map((row, index) => { + const agent = pattern.agents[index]; + const isActive = isAgentActivityActive(row.activity); + const isCompleted = isAgentActivityCompleted(row.activity); + + return ( +
-
-
- {row.agentName} + key={row.key} + > + {/* Agent name + status dot */} +
+ + + {row.agentName} +
-
- {formatAgentActivityLabel(row.activity)} + + {/* Model + reasoning effort badges */} + {agent && ( +
+ + + {formatModel(agent.model)} + + {agent.reasoningEffort && ( + + + {formatEffort(agent.reasoningEffort)} + + )} +
+ )} + + {/* Description */} + {agent?.description && ( +

+ {agent.description} +

+ )} + + {/* Activity status */} +
+ + + {formatAgentActivityLabel(row.activity)} +
-
- ))} + ); + })}
{activityRows.length === 0 && ( @@ -73,3 +140,4 @@ export function ActivityPanel({ activity, pattern, session }: ActivityPanelProps
); } +