feat(CUB-19): implement AgentStatus SignalR hub for real-time updates
- 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
This commit is contained in:
126
backend/ControlCenter/bin/Debug/net9.0/ControlCenter.deps.json
Normal file
126
backend/ControlCenter/bin/Debug/net9.0/ControlCenter.deps.json
Normal file
@@ -0,0 +1,126 @@
|
||||
{
|
||||
"runtimeTarget": {
|
||||
"name": ".NETCoreApp,Version=v9.0",
|
||||
"signature": ""
|
||||
},
|
||||
"compilationOptions": {},
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v9.0": {
|
||||
"ControlCenter/1.0.0": {
|
||||
"dependencies": {
|
||||
"Swashbuckle.AspNetCore": "10.1.7"
|
||||
},
|
||||
"runtime": {
|
||||
"ControlCenter.dll": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.ApiDescription.Server/9.0.0": {},
|
||||
"Microsoft.OpenApi/2.4.1": {
|
||||
"dependencies": {
|
||||
"System.Text.Json": "8.0.5"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.OpenApi.dll": {
|
||||
"assemblyVersion": "2.4.1.0",
|
||||
"fileVersion": "2.4.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Swashbuckle.AspNetCore/10.1.7": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.ApiDescription.Server": "9.0.0",
|
||||
"Swashbuckle.AspNetCore.Swagger": "10.1.7",
|
||||
"Swashbuckle.AspNetCore.SwaggerGen": "10.1.7",
|
||||
"Swashbuckle.AspNetCore.SwaggerUI": "10.1.7"
|
||||
}
|
||||
},
|
||||
"Swashbuckle.AspNetCore.Swagger/10.1.7": {
|
||||
"dependencies": {
|
||||
"Microsoft.OpenApi": "2.4.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Swashbuckle.AspNetCore.Swagger.dll": {
|
||||
"assemblyVersion": "10.1.7.0",
|
||||
"fileVersion": "10.1.7.2427"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Swashbuckle.AspNetCore.SwaggerGen/10.1.7": {
|
||||
"dependencies": {
|
||||
"Swashbuckle.AspNetCore.Swagger": "10.1.7"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Swashbuckle.AspNetCore.SwaggerGen.dll": {
|
||||
"assemblyVersion": "10.1.7.0",
|
||||
"fileVersion": "10.1.7.2427"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Swashbuckle.AspNetCore.SwaggerUI/10.1.7": {
|
||||
"runtime": {
|
||||
"lib/net9.0/Swashbuckle.AspNetCore.SwaggerUI.dll": {
|
||||
"assemblyVersion": "10.1.7.0",
|
||||
"fileVersion": "10.1.7.2427"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Text.Json/8.0.5": {}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"ControlCenter/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Microsoft.Extensions.ApiDescription.Server/9.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-1Kzzf7pRey40VaUkHN9/uWxrKVkLu2AQjt+GVeeKLLpiEHAJ1xZRsLSh4ZZYEnyS7Kt2OBOPmsXNdU+wbcOl5w==",
|
||||
"path": "microsoft.extensions.apidescription.server/9.0.0",
|
||||
"hashPath": "microsoft.extensions.apidescription.server.9.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.OpenApi/2.4.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-u7QhXCISMQuab3flasb1hoaiERmUqyWsW7tmQODyILoQ7mJV5IRGM+2KKZYo0QUfC13evEOcHAb6TPWgqEQtrw==",
|
||||
"path": "microsoft.openapi/2.4.1",
|
||||
"hashPath": "microsoft.openapi.2.4.1.nupkg.sha512"
|
||||
},
|
||||
"Swashbuckle.AspNetCore/10.1.7": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-vgef8DPT411JU5JjHiDbr0WOxsIVuAvegPGtqmm4Na4JRl/264dfBJcGkiPHsAr5P+Vda+qN1rZKRtBl1rF9aA==",
|
||||
"path": "swashbuckle.aspnetcore/10.1.7",
|
||||
"hashPath": "swashbuckle.aspnetcore.10.1.7.nupkg.sha512"
|
||||
},
|
||||
"Swashbuckle.AspNetCore.Swagger/10.1.7": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-EjLibt/d/QuRv170GoihTbcPUpgzSFm2WKHhnGJFZQ03JYzfuitsM79azaAR8NBwRunU7yScSX6HRE5JUlrEMQ==",
|
||||
"path": "swashbuckle.aspnetcore.swagger/10.1.7",
|
||||
"hashPath": "swashbuckle.aspnetcore.swagger.10.1.7.nupkg.sha512"
|
||||
},
|
||||
"Swashbuckle.AspNetCore.SwaggerGen/10.1.7": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-PuubO9BjvNn6U3D9kLpuWKY1JtziWw7SsGBq0age1E50uQjQ8Fzl8s0EwzrLfANqYJNgDnJi9l7N1QxcGVB2Zw==",
|
||||
"path": "swashbuckle.aspnetcore.swaggergen/10.1.7",
|
||||
"hashPath": "swashbuckle.aspnetcore.swaggergen.10.1.7.nupkg.sha512"
|
||||
},
|
||||
"Swashbuckle.AspNetCore.SwaggerUI/10.1.7": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-iJo3ODyUb/M8Vm8AH1r9y9iAba0w95xsCn3zFVl96ISRHbTDWxi+l7oFVCZqUEdjd97B8VMDPnMliWAdomR8uw==",
|
||||
"path": "swashbuckle.aspnetcore.swaggerui/10.1.7",
|
||||
"hashPath": "swashbuckle.aspnetcore.swaggerui.10.1.7.nupkg.sha512"
|
||||
},
|
||||
"System.Text.Json/8.0.5": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==",
|
||||
"path": "system.text.json/8.0.5",
|
||||
"hashPath": "system.text.json.8.0.5.nupkg.sha512"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user