feat(gastown): add agent status bubble UI and gt_status tool#999
Merged
feat(gastown): add agent status bubble UI and gt_status tool#999
Conversation
04b8d04 to
88bc44f
Compare
Contributor
Code Review SummaryStatus: 1 Issues Found | Recommendation: Address before merge Overview
Fix these issues in Kilo Cloud Issue Details (click to expand)WARNING
Other Observations (not in diff)N/A Files Reviewed (19 files)
Reviewed by gpt-5.4-20260305 · 1,597,125 tokens |
backend) - Add agent_status_message and agent_status_updated_at columns to agent_metadata table - Add agent_status to BeadEventType enum - Add updateAgentStatusMessage() DB helper and RPC method in Town.do.ts - Emit agent_status bead event on the hooked bead when status is updated - Add POST /agents/:agentId/status HTTP route and handler - Add updateAgentStatusMessage() to GastownClient - Add gt_status tool to polecat plugin tools - Expose new fields in Agent type and AgentOutput Zod schema - Add gt_status guidance section to polecat system prompt Co-authored-by: John Fawcett <john@kilocode.ai>
…o frontend - Add broadcastAgentStatus() to TownDO; call it in updateAgentStatusMessage() so connected dashboard clients receive a lightweight agent_status event immediately on every gt_status call - Handle agent_status in useAlarmStatusWs (TerminalBar); dispatch to callback rather than overwriting the alarm snapshot; invalidate listAgents queries in AlarmStatusPane so agent cards refresh without waiting for the 5s poll - Add agent_status to ActivityFeed EVENT_ICONS/EVENT_COLORS (MessageSquare, muted) and eventDescription() so the event renders in feed and bead timeline Co-authored-by: John Fawcett <john@kilocode.ai>
- AgentCard: render speech-bubble below card when agent is working and has a status message; fades in/out with motion/react; greyed if stale (>10 min); truncates at 80 chars; shows relative timestamp - AgentPanel drawer: add current status row below status badge with full message text and relative timestamp - ActivityFeed: include agent name in agent_status event description (e.g. "Dusk: Running tests"); town feed agent_status clicks open the agent drawer instead of event drawer - AgentsPageClient: status bubble on each agent card in the agents grid - TownOverviewPageClient: status bubble on recent agents rows; agent_status feed events routed to agent detail drawer - router.d.ts: add agent_status_message and agent_status_updated_at to listAgents output type Co-authored-by: John Fawcett <john@kilocode.ai>
…on rehook Address two review comments: 1. Resolve agent rig from agentsByRig map instead of relying on unpopulated rig_id field on bead_events rows, so clicking agent_status feed items opens the agent drawer. 2. Clear agent_status_message and agent_status_updated_at in hookBead() when an agent is recycled for a new bead, preventing stale status bubbles from the previous task. Co-authored-by: John Fawcett <john@kilocode.ai>
Store agent_name, rig_id, and rig_name in the bead event metadata when logging agent_status events. The activity feed now displays these as '[RigName] AgentName: status message' instead of just the raw message. Co-authored-by: John Fawcett <john@kilocode.ai>
…rmat branch - Add migrateAgentMetadata() with ALTER TABLE statements for agent_status_message and agent_status_updated_at columns, wired into initBeadTables() so existing towns get the columns on next DO activation. - Add agent_status case to formatEventMessage() in the alarm status pane so status updates render as 'agent <id>: <message>' instead of the generic fallback. - Fix Prettier formatting in 5 frontend files. Co-authored-by: John Fawcett <john@kilocode.ai>
…ypes The generated router.d.ts was only partially updated — listAgents had the new fields but getRig.agents and sling.agent still omitted them, causing stale agent shapes for consumers derived from GastownOutputs.
3cb86ae to
398641c
Compare
markijbema
reviewed
Mar 11, 2026
markijbema
approved these changes
Mar 11, 2026
- Add .trim().max(280) to UpdateAgentStatusMessageBody so runaway agents can't bloat storage or WebSocket payloads with oversized status updates. - Fix double-encoded UTF-8 section divider (â→═) in Town.do.ts introduced by an earlier commit. Co-authored-by: John Fawcett <john@kilocode.ai>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
gt_statustool that lets agents emit plain-language status updates (e.g. "Installing dependencies", "Writing tests") visible on the dashboard in real time.agent_status_message/agent_status_updated_atcolumns onagent_metadata,POST /agents/:agentId/statusendpoint,agent_statusbead event type, and WebSocket broadcast from TownDO so dashboard clients see updates immediately.AgentCard,AgentPaneldrawer,TownOverviewPageClientrecent agents, andAgentsPageClientgrid. Bubbles fade in/out with motion/react, grey out when stale (>10 min), and truncate at 80 chars.agent_statusevents in the activity feed show agent name and message, and clicking them opens the agent drawer.agent_statusevents triggerlistAgentsquery invalidation so agent cards refresh without waiting for the 5s poll cycle.Verification
router.d.ts.gt_statustool wiring from container plugin through HTTP handler to TownDO storage and WebSocket broadcast.Visual Changes
Reviewer Notes
gt_statustool prompt instructs agents to only call it at meaningful phase transitions, not on every tool use, to avoid noise.router.d.tsdiff includes an unrelated whitespace change on thelistAgentsline — this came in with the original commits.