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
); } +