- Add AgentStatusHub with typed IAgentStatusClient interface
- Hub at /hubs/agent-status (matches design spec)
- Fleet group + per-agent group subscription
- AgentStatusChanged and AgentTaskProgress push events
- Extension methods for server-side push via IHubContext
- Add GatewayEventBridgeService background service
- Connects to OpenClaw Gateway WebSocket (v3 protocol)
- Handles challenge → connect → hello-ok handshake
- Bridges sessions.changed, session.message, session.tool events
- Translates Gateway session status to AgentStatus enum
- Maintains in-memory fleet state for snapshot queries
- Add REST API controllers
- GET /api/agents — fleet status snapshot
- GET /api/agents/{agentId} — single agent status
- GET /api/logs/{agentId} — agent session logs (stub)
- POST /api/command/stop/{agentId} — stop agent
- POST /api/command/restart/{agentId} — restart agent
- POST /api/command/steer/{agentId} — inject message
- Add models matching TypeScript spec interfaces
- AgentStatusUpdate, TaskProgressUpdate, AgentCardData
- AgentStatus enum (active/idle/thinking/error)
- Configure CORS with credentials for SignalR WebSocket
- Configure Swagger/OpenAPI with XML doc comments
- Agent role map matching frontend AGENT_ROLES constant
30 lines
1.3 KiB
C#
30 lines
1.3 KiB
C#
namespace ControlCenter.Hubs;
|
|
|
|
/// <summary>
|
|
/// Strongly-typed client interface for the AgentStatus SignalR hub.
|
|
/// Defines the methods the server can invoke on connected clients
|
|
/// to push real-time agent status and task progress updates.
|
|
///
|
|
/// <para>All server-to-client calls go through this interface for
|
|
/// compile-time safety — matching the pattern used by the
|
|
/// Extrudex PrinterHub.</para>
|
|
/// </summary>
|
|
public interface IAgentStatusClient
|
|
{
|
|
/// <summary>
|
|
/// Pushes an agent status change to all subscribed clients.
|
|
/// Fired whenever an agent's operational status changes
|
|
/// (e.g., idle → active, active → thinking, active → error).
|
|
/// </summary>
|
|
/// <param name="update">The full status update payload.</param>
|
|
/// <returns>A Task that completes when the client has processed the update.</returns>
|
|
Task AgentStatusChanged(AgentStatusUpdate update);
|
|
|
|
/// <summary>
|
|
/// Pushes a task progress update to all subscribed clients.
|
|
/// Fired when an agent reports progress on its current task.
|
|
/// </summary>
|
|
/// <param name="progress">The task progress update payload.</param>
|
|
/// <returns>A Task that completes when the client has processed the update.</returns>
|
|
Task AgentTaskProgress(TaskProgressUpdate progress);
|
|
} |