Skip to content

feat: collapsible message bubbles with per-tool activity logging#180

Merged
rockfordlhotka merged 3 commits intomainfrom
feat/collapsible-chat-bubbles
Mar 20, 2026
Merged

feat: collapsible message bubbles with per-tool activity logging#180
rockfordlhotka merged 3 commits intomainfrom
feat/collapsible-chat-bubbles

Conversation

@rockfordlhotka
Copy link
Copy Markdown
Member

Summary

  • Collapsible UI hierarchy: User input and primary agent final replies are fully expanded; subagent completions, A2A status, system scheduled tasks, and WIP progress are collapsed into de-emphasized, expandable bubbles
  • Per-tool-call activity logging: Implemented IToolProgressNotifier that publishes every native tool invocation to the message bus, feeding step-by-step activity log bubbles in the Blazor UI
  • Activity log accumulation: Non-final replies from all sources (primary, subagent, A2A, scheduled) append to a single activity log bubble per source instead of creating individual bubbles

Backend

  • IsSystemTask flag on ScheduledTask/ScheduledTaskMessage distinguishes patrol tasks (SessionId = "scheduled-system", collapsed) from user-created tasks ("scheduled", expanded)
  • ToolProgressNotifier uses AsyncLocal<ToolProgressContext> so all handlers set routing context before RunAsync — covers UserMessage, ScheduledTask, Subagent, SubagentResult, and all A2A handlers

Frontend

  • MessageCategory enum with CategorizeReply heuristics in BlazorUserFrontend
  • Three rendering paths in Chat.razor: activity log bubble, collapsible bubble (dashed border + category badge), and standard expanded bubble
  • Full dark mode and responsive CSS for all new styles

Test plan

  • dotnet build RockBot.slnx — 0 errors
  • dotnet test RockBot.slnx — all 623 tests pass
  • Deployed to k8s and verified both agent and blazor pods running
  • Manual: send message triggering tool calls → verify single activity log bubble with step-by-step entries
  • Manual: subagent spawn → verify collapsed subagent activity log
  • Manual: patrol fires → verify collapsed "Background Task" bubble
  • Manual: dark mode toggle → verify all new styles

🤖 Generated with Claude Code

rockfordlhotka and others added 3 commits March 20, 2026 09:51
… chat UI

Add a visibility hierarchy where only user input and primary agent final
replies are fully expanded by default. Subagent completions, A2A status,
system scheduled tasks, and WIP progress are collapsed into de-emphasized,
expandable bubbles.

Backend: add IsSystemTask flag to ScheduledTask/ScheduledTaskMessage so
heartbeat-patrol replies use SessionId "scheduled-system" (collapsed) vs
"scheduled" (expanded) for user-created tasks.

Frontend: introduce MessageCategory enum, ActivityLogEntry record, and
activity log accumulation. Progress callbacks now feed a collapsible
activity log bubble instead of the thinking indicator. Three rendering
paths: activity log, collapsible (dashed border + category badge), and
standard expanded. Full dark mode and responsive CSS for all new styles.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add ToolProgressNotifier that publishes AgentReply(IsFinal=false) to the
message bus for every tool invocation on the native FunctionInvokingChatClient
path. Uses AsyncLocal<ToolProgressContext> so each handler (UserMessage,
ScheduledTask, Subagent, A2A) sets routing context before RunAsync.

This gives the Blazor activity log a step-by-step view of every tool call
as it happens, covering all handler types and both native and text-based
tool-calling paths.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Non-final replies now append to the source's activity log bubble instead
of creating a new bubble per message. Activity logs are keyed by
category + agentName so multiple concurrent sources (primary, subagent-X,
scheduled-system) each accumulate into their own bubble.

BlazorUserFrontend routes non-final DisplayReplyAsync calls through
AppendActivityLogEntry. Activity log headers now show category badge,
agent name, and entry count.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@rockfordlhotka rockfordlhotka merged commit d99f319 into main Mar 20, 2026
2 checks passed
@rockfordlhotka rockfordlhotka deleted the feat/collapsible-chat-bubbles branch March 20, 2026 17:54
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.

1 participant