b7b05bb4e3
CUB-200 : fix event-loss race — register handlers before readLoop starts
...
Dev Build & Deploy / test-and-build (pull_request) Failing after 0s
Dev Build & Deploy / docker-build-push (pull_request) Has been skipped
Move registerEventHandlers() call before the readLoop goroutine starts
in connectAndRun(). This eliminates the startup window where live gateway
events were actively read and dropped as 'unhandled' because handler
registration happened only after initialSync completed.
The handlers only depend on c.agents and c.broker, which are wired in the
constructor — they do not require initialSync to have completed.
Also adds TestConnectAndRun_EventNotLostDuringSync regression test that
sends a live presence event during initial sync and asserts it is not lost.
All gateway tests pass with -race.
2026-05-20 21:52:39 +00:00
d370d5ec23
CUB-200 : fix WS initial sync ordering — start readLoop before initialSync
...
Dev Build & Deploy / test-and-build (pull_request) Failing after 0s
Dev Build & Deploy / docker-build-push (pull_request) Has been skipped
The root cause of the initial sync timeout was that connectAndRun called
initialSync (which uses Send/RPC) before starting readLoop, but Send's
response delivery depends on readLoop→routeFrame→handleResponse. Without
the readLoop running, agents.list and sessions.list would always time out.
Fix: start readLoop in a goroutine before calling initialSync so that
RPC responses are properly routed back to pending Send() calls. After
initialSync completes, event handlers are registered and MarkWSReady
is called. The connectAndRun function then blocks on the readLoop
goroutine's completion.
Also added TestConnectAndRun_InitialSyncOrdering which verifies that
agents are persisted from initial sync (would hang/timeout under the
old ordering).
2026-05-20 21:42:31 +00:00
Dex
1b82e1d3a6
CUB-200 : resolve merge conflicts with dev — adopt dev's consolidated workflows and improved Go gateway code
Dev Build & Deploy / test-and-build (pull_request) Failing after 0s
Dev Build & Deploy / docker-build-push (pull_request) Has been skipped
2026-05-20 21:26:17 +00:00
93bf434a47
Merge pull request ' CUB-125 : implement real-time SSE/WebSocket in React frontend' ( !46 ) from agent/rex/CUB-125-realtime-sse-clean into dev
...
Dev Build & Deploy / test-and-build (push) Failing after 0s
Dev Build & Deploy / docker-build-push (push) Has been skipped
Reviewed-on: #46
2026-05-20 13:14:29 -04:00
010408cc45
CUB-125 : address Grimm review — tests, type fixes, error state circuit breaker
...
Dev Build & Deploy / test-and-build (pull_request) Failing after 0s
Dev Build & Deploy / docker-build-push (pull_request) Has been skipped
- Add missing 'offline' to AgentStatus union type (types/index.ts)
- Add max-retry circuit breaker to useSSE; error state is now reachable
- Wire typed SSE payloads (SSEPayloadMap discriminated union) into useRealtimeSync
- Add Vitest + 20 unit tests: useSSE lifecycle, back-off, circuit breaker,
event parsing, cleanup; useRealtimeSync event-to-invalidation mapping
- Rebase on dev to remove stale CUB-119 legacy-deletion commit and align
CI workflow (dev already consolidated into single dev.yml)
- Tests: npm test → 20/20 pass; Build: npm run build → 0 errors
2026-05-20 12:58:21 -04:00
23f9d4a8fb
CUB-125 : implement real-time SSE/WebSocket in React frontend
...
- Add useSSE hook with exponential back-off reconnect (1s → 30s)
- Add useRealtimeSync hook: maps SSE events to React Query invalidation
(agent.status → agents; agent.task/agent.progress → tasks+agents; fleet.update → all)
- Add SSEContext/SSEProvider so connection status is available app-wide
- Mount SSEProvider in main.tsx inside QueryClientProvider (no polling)
- Show live/connecting/reconnecting/disconnected badge in sidebar + mobile header
- Update SettingsPage: replace polling interval UI with SSE status panel
- Disable React Query polling (staleTime 60s); all updates pushed via SSE
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 12:58:21 -04:00
3d5bf16d37
Merge pull request ' CUB-207 : unit tests for event handlers and initial sync' ( !44 ) from agent/dex/CUB-207-event-sync-tests-v2 into dev
...
Dev Build & Deploy / test-and-build (push) Failing after 0s
Dev Build & Deploy / docker-build-push (push) Has been skipped
Reviewed-on: #44
2026-05-20 12:47:27 -04:00
d9a1640b10
CUB-200 : sync CI workflows with dev branch
...
Dev Build & Deploy / docker-build-push (pull_request) Has been skipped
Dev Build & Deploy / test-and-build (pull_request) Failing after 0s
- Overwrite dev.yml with dev's consolidated version (parameterized Go/Node versions, cleaner install steps)
- Add deploy-dev.yaml from dev (was missing on this branch)
- build-dev.yaml confirmed absent (was deleted on dev in PR #45)
2026-05-20 16:29:57 +00:00
5347944c4c
Merge branch 'dev' into agent/dex/CUB-207-event-sync-tests-v2
Dev Build & Deploy / test-and-build (pull_request) Failing after 14m36s
Dev Build & Deploy / docker-build-push (pull_request) Blocked by required conditions
2026-05-20 12:24:40 -04:00
48a8598d3b
CUB-CI: Consolidate workflows — remove build-dev.yaml, fix dev.yml
Dev Build & Deploy / test-and-build (push) Failing after 1s
Dev Build & Deploy / docker-build-push (push) Failing after 10m1s
2026-05-20 12:24:32 -04:00
a0eb393c6c
CUB-CI: Consolidate CI — switch to ubuntu-latest with manual Go/Node install
...
Dev Build & Deploy / test-and-build (pull_request) Failing after 0s
Dev Build & Deploy / docker-build-push (pull_request) Has been skipped
- Remove custom go-react runner label (was inconsistent on PR branches)
- Replace with ubuntu-latest + manual Go 1.23 / Node 22 install
(actions/setup-go and setup-node don't work with Gitea Act runner)
- Remove duplicate build-dev.yaml workflow (already deleted)
- All steps: Go test → Go build → npm ci → npm lint → npm build
- Docker push on push events only (unchanged)
2026-05-20 12:23:32 -04:00
d294818581
CUB-CI: Remove redundant build-dev.yaml
2026-05-20 12:23:16 -04:00
9e0366e780
CUB-CI: Remove redundant build-dev.yaml — dev.yml already handles this
...
build-dev.yaml uses actions/setup-go@v5 and actions/setup-node@v4 which
are incompatible with Gitea Act runner (no node20 runtime). dev.yml is
the canonical build workflow; having two competing workflows on the same
triggers was causing duplicate CI runs and misleading failures.
2026-05-20 12:22:19 -04:00
20404b30bb
Merge branch 'dev' into agent/dex/CUB-207-event-sync-tests-v2
Build (Dev) / trigger-deploy (pull_request) Blocked by required conditions
Dev Build & Deploy / test-and-build (pull_request) Waiting to run
Dev Build & Deploy / docker-build-push (pull_request) Blocked by required conditions
Build (Dev) / build-frontend (pull_request) Failing after 1s
Build (Dev) / build-go-backend (pull_request) Failing after 13m33s
2026-05-20 12:15:43 -04:00
b7a54c8461
Merge pull request ' CUB-203 : WebSocket client scaffold for OpenClaw gateway v3' ( !41 ) from agent/dex/CUB-203-ws-client-scaffold into dev
...
Build (Dev) / build-frontend (push) Failing after 1s
Build (Dev) / trigger-deploy (push) Has been skipped
Build (Dev) / build-go-backend (push) Failing after 0s
Dev Build & Deploy / test-and-build (push) Has been cancelled
Dev Build & Deploy / docker-build-push (push) Has been cancelled
Reviewed-on: #41
2026-05-20 12:14:02 -04:00
b6e44cb4f8
Merge branch 'dev' into agent/dex/CUB-203-ws-client-scaffold
Dev Build & Deploy / docker-build-push (pull_request) Blocked by required conditions
Dev Build & Deploy / test-and-build (pull_request) Waiting to run
Build (Dev) / build-go-backend (pull_request) Failing after 0s
Build (Dev) / build-frontend (pull_request) Failing after 0s
Build (Dev) / trigger-deploy (pull_request) Has been skipped
2026-05-20 09:01:58 -04:00
Joshua King
49b959aee5
Add CI Docker image with Go 1.23 + Node 22 pre-installed, update workflow to use go-react label
Dev Build & Deploy / test-and-build (push) Has been cancelled
Dev Build & Deploy / docker-build-push (push) Has been cancelled
2026-05-20 08:47:16 -04:00
Joshua King
ae37d79aa8
Switch to ubuntu-dotnet runner label to bypass /var/run symlink issue
Dev Build & Deploy / test-and-build (push) Has been cancelled
Dev Build & Deploy / docker-build-push (push) Has been cancelled
2026-05-20 08:39:05 -04:00
Joshua King
8fb4183abe
Add container spec to fix /var/run symlink path escape error
Dev Build & Deploy / test-and-build (push) Failing after 7s
Dev Build & Deploy / docker-build-push (push) Has been skipped
2026-05-20 08:30:49 -04:00
6fd2d9bec4
Merge branch 'dev' into agent/dex/CUB-200-ws-gateway-client
Dev Build & Deploy / test-and-build (pull_request) Failing after 0s
Dev Build & Deploy / docker-build-push (pull_request) Has been skipped
2026-05-20 08:12:36 -04:00
Joshua King
ee6ad10db9
Replace setup-go/setup-node actions with manual install for Gitea runner compatibility
Dev Build & Deploy / docker-build-push (push) Blocked by required conditions
Dev Build & Deploy / test-and-build (push) Failing after 14m18s
2026-05-20 08:10:13 -04:00
Joshua King
5f42a3be18
Rename GITEA_TOKEN secret to ACCESS_TOKEN
Dev Build & Deploy / test-and-build (push) Failing after 4s
Dev Build & Deploy / docker-build-push (push) Has been skipped
2026-05-20 08:08:21 -04:00
Joshua King
0e452941dd
Remove deploy-dev job - deployment handled via docker-compose
Dev Build & Deploy / test-and-build (push) Failing after 0s
Dev Build & Deploy / docker-build-push (push) Has been skipped
2026-05-20 08:06:52 -04:00
Joshua King
87cb517623
Update CI workflow to match Go+React stack with Docker registry push
Dev Build & Deploy / test-and-build (push) Failing after 1s
Dev Build & Deploy / docker-build-push (push) Has been skipped
Dev Build & Deploy / deploy-dev (push) Has been skipped
2026-05-20 08:04:50 -04:00
Dex
439741e55f
CUB-207 : fix unused broker variable in test
Dev Build / build-test (pull_request) Waiting to run
Dev Build / deploy-dev (pull_request) Blocked by required conditions
Build (Dev) / build-go-backend (pull_request) Failing after 0s
Build (Dev) / build-frontend (pull_request) Failing after 1s
Build (Dev) / trigger-deploy (pull_request) Has been skipped
openclaw/grimm-review Review in progress
2026-05-20 08:04:05 -04:00
Dex
3c26b8deba
CUB-207 : add unit tests for event handlers and initial sync
2026-05-20 11:58:42 +00:00
Dex
4569fef11d
CUB-203 : fix Grimm review blocking issues (PR #41)
...
Dev Build / deploy-dev (pull_request) Blocked by required conditions
Dev Build / build-test (pull_request) Waiting to run
Build (Dev) / build-go-backend (pull_request) Failing after 0s
Build (Dev) / trigger-deploy (pull_request) Has been skipped
Build (Dev) / build-frontend (pull_request) Failing after 1s
openclaw/grimm-review All 11 findings resolved. Approved.
🔴 readLoop race: replace WriteControl close with ctx-done goroutine that closes conn
🔴 duplicate event handlers: clear handlers map before re-registering on reconnect
🔴 sync.go CurrentTask abuse: add DisplayName field to UpdateAgentRequest, use it
🔴 sync.go newRole dead code: add Role field to UpdateAgentRequest, use it
🔴 events.go handlePresence DB/SSE inconsistency: pass LastActivityAt in update, don't mutate after DB
🔴 events.go handleAgentConfig DB/SSE inconsistency: use DisplayName/Role fields in update
🟠 Send() nil-conn panic: check conn != nil before WriteJSON
🟠 readLoop prompt ctx cancellation: fixed by item #1
🟠 backoff never resets: reset to initialBackoff after successful connectAndRun
🟠 MarkWSReady double-close race: use sync.Once in Client
Extra json:"-" dead fields: removed from sessionChangedPayload, presencePayload, agentConfigPayload
UpdateAgentRequest: added DisplayName, Role, LastActivityAt fields
2026-05-20 11:47:11 +00:00
Dex
7a93d43b7e
CUB-205 : add gateway utility function tests + fix channel default
Dev Build / deploy-dev (pull_request) Blocked by required conditions
Dev Build / build-test (pull_request) Waiting to run
Build (Dev) / build-go-backend (pull_request) Failing after 1s
Build (Dev) / build-frontend (pull_request) Failing after 1s
Build (Dev) / trigger-deploy (pull_request) Has been skipped
2026-05-20 11:35:02 +00:00
Dex
d28d6e8dac
CUB-200 : implement WebSocket gateway client with v3 protocol
...
Dev Build / build-test (pull_request) Waiting to run
Dev Build / deploy-dev (pull_request) Blocked by required conditions
Replace REST poller with WebSocket client as primary gateway connection:
- wsclient.go: WebSocket client with v3 handshake (connect.challenge →
connect → hello-ok), frame routing (req/res/event), JSON-RPC Send(),
auto-reconnect with exponential backoff (1s → 30s max)
- sync.go: Initial sync via agents.list + sessions.list RPCs, merge
session runtime state into AgentCardData, broadcast fleet.update
- events.go: Real-time event handlers for sessions.changed, presence,
and agent.config — DB update first, then SSE broadcast
- client.go: REST poller retained as fallback (WS is primary)
- config.go: Add GATEWAY_WS_URL and OPENCLAW_GATEWAY_TOKEN env vars
- main.go: Wire WS client as primary, REST as fallback
- .env.example: Document new WS config vars
Fallback: If WS connection fails, seeded demo data + REST polling
remain available.
2026-05-20 11:33:17 +00:00
efcedde649
Merge branch 'dev' into agent/dex/CUB-203-ws-client-scaffold
Build (Dev) / trigger-deploy (pull_request) Blocked by required conditions
Dev Build / deploy-dev (pull_request) Blocked by required conditions
Dev Build / build-test (pull_request) Waiting to run
Build (Dev) / build-frontend (pull_request) Failing after 2s
Build (Dev) / build-go-backend (pull_request) Failing after 14m20s
2026-05-20 07:30:09 -04:00
Joshua King
0ac4898027
Updates
Dev Build / deploy-dev (push) Has been cancelled
Dev Build / build-test (push) Has been cancelled
2026-05-20 07:27:31 -04:00
Dex
e131798f3b
CUB-204 : wire WS client as primary, REST poller as fallback
...
Dev Build / build-test (pull_request) Failing after 1s
Build (Dev) / trigger-deploy (pull_request) Has been skipped
openclaw/grimm-review REJECTED — 6 blocking issues
Build (Dev) / build-go-backend (pull_request) Failing after 0s
Build (Dev) / build-frontend (pull_request) Failing after 1s
- Rename GatewayURL/GatewayPollInterval → GatewayRestURL/GatewayRestPollInterval
- Change Docker-aware defaults (host.docker.internal instead of localhost)
- Client.Start() waits for WS readiness (30s timeout), falls back to REST
- Client.SetWSClient()/MarkWSReady() for WS→REST coordination
- WSClient.SetRESTClient() so WS notifies REST on successful handshake
- main.go wires both clients: WS primary, REST fallback with cross-references
- .env.example documents WS_GATEWAY_URL, GATEWAY_TOKEN, REST fallback vars
- docker-compose.yml adds WS_GATEWAY_URL and GATEWAY_TOKEN env vars
- reference/CONTROL_CENTER_CONTEXT.md documents architecture and startup sequence
2026-05-20 11:16:05 +00:00
Dex
9062f8fa8d
CUB-202 : add real-time event handlers for sessions.changed, presence, agent.config
Dev Build / build-test (pull_request) Failing after 0s
2026-05-20 11:13:53 +00:00
Dex
60ba3e5b4f
CUB-201 : add initial sync via agents.list + sessions.list RPCs
...
Dev Build / build-test (pull_request) Failing after 1s
- Create gateway/sync.go with initialSync method on WSClient
- Fetch agents via agents.list RPC, persist to AgentRepo
- Fetch sessions via sessions.list RPC, map status to AgentStatus
- Merge session state (status, sessionKey, tokens) into AgentCardData
- Broadcast merged fleet as fleet.update via SSE broker
- Trigger initialSync after hello-ok handshake
- Re-sync automatically on reconnect (connectAndRun calls initialSync)
- Handle unknown gateway fields gracefully via typed extraction
2026-05-20 11:07:23 +00:00
Dex
70d39b87d1
CUB-203 : add WebSocket client scaffold for OpenClaw gateway v3
Dev Build / build-test (pull_request) Failing after 14s
2026-05-20 11:02:21 +00:00
519e872027
Merge pull request ' CUB-126 : Update Control Center deployment for Go + React' (#40) from agent/pip/CUB-126-deployment-go-react into dev
Dev Build / build-test (push) Successful in 1m26s
2026-05-14 05:33:37 -04:00
2b4b9b3e96
CUB-126 : Update Control Center deployment for Go + React
...
Dev Build / build-test (pull_request) Successful in 1m33s
- Updated docker-compose.yml for Go + React + PostgreSQL
- Go backend multi-stage Dockerfile (already existed)
- React frontend multi-stage Dockerfile with nginx SPA config (already existed)
- Kiosk start script and systemd unit
- Deployment README
- .env.example for environment variables
2026-05-14 05:32:23 -04:00
9a802b4212
Merge pull request ' CUB-123 : Integrate gateway, wire PostgreSQL repositories, add SSE streaming' (#37) from agent/dex/CUB-123-gateway-integration into dev
...
Dev Build / build-test (push) Successful in 2m23s
Reviewed-on: #37
2026-05-08 21:55:48 -04:00
1a50306f7d
Merge branch 'dev' into agent/dex/CUB-123-gateway-integration
Dev Build / build-test (pull_request) Successful in 2m22s
2026-05-08 21:55:38 -04:00
e8ced74429
CUB-123 : integrate gateway, wire PostgreSQL repositories, add SSE streaming
...
Dev Build / build-test (pull_request) Successful in 2m23s
- Create repository/ package with pgx-backed CRUD for agents, sessions, tasks, projects
- Define AgentRepo/SessionRepo/TaskRepo/ProjectRepo interfaces
- Update handler to use repository interfaces instead of in-memory stores
- Add SSE broker with GET /api/events endpoint (text/event-stream)
- Add gateway client that polls OpenClaw for agent states
- Add GATEWAY_URL and GATEWAY_POLL_INTERVAL config fields
- Seed 5 demo agents (Otto, Rex, Dex, Hex, Pip) on empty DB
- Update router to wire SSE broker
- All 21 handler tests pass with mock repos
2026-05-08 19:58:06 -04:00
8b8cb8210c
CUB-121 : build React pages with real API integration
...
Dev Build / build-test (pull_request) Successful in 2m11s
Dev Build / build-test (push) Successful in 2m18s
- HubPage: agent summary stats, cards, status badges, progress bars, refresh
- LogsPage: activity feed from tasks, status filter, loading skeleton
- ProjectsPage: project cards with status badges and agent counts
- SessionsPage: responsive table/card view with model/token info
- SettingsPage: dark mode toggle, gateway URL, refresh interval persist
- ThemeProvider with dark/light mode via CSS custom properties
- useLocalStorage hook for settings persistence
- Loading/error/empty states across all pages
- npm run build passes cleanly
2026-05-08 19:53:21 -04:00
4a2e660a4a
Merge remote-tracking branch 'origin/agent/rex/CUB-122-scaffold-react-frontend' into dev
Dev Build / build-test (push) Successful in 1m56s
2026-05-08 14:28:58 -04:00
07d40d729f
Merge remote-tracking branch 'origin/agent/hex/CUB-120-postgresql-schema' into dev
2026-05-08 14:28:55 -04:00
8da593c450
CUB-122 : Scaffold Control Center React frontend
Dev Build / build-test (pull_request) Successful in 1m57s
2026-05-07 20:15:30 -04:00
437a519c36
CUB-120 : design PostgreSQL schema for Control Center Go backend
Dev Build / build-test (pull_request) Successful in 2m13s
2026-05-07 14:22:00 -04:00
c906cd46ad
CUB-124 : scaffold Control Center Go backend
Dev Build / build-test (pull_request) Successful in 2m6s
2026-05-07 14:16:05 -04:00
cce3e061a7
CUB-127 : implement Control Center CRUD API in Go
Dev Build / build-test (pull_request) Failing after 11m6s
Dev Build / build-test (push) Successful in 1m54s
2026-05-06 17:29:44 -04:00
ab19a7ccde
Merge pull request ' CUB-20 : Agent card component with dynamic status/progress' (#28) from agent/rex/CUB-20-agent-card-component into dev
Dev Build / build-test (push) Successful in 3m30s
2026-04-29 11:29:23 -04:00
745994182f
CUB-20 : Develop agent card component with dynamic status/progress
Dev Build / build-test (pull_request) Successful in 2m10s
2026-04-29 11:02:33 -04:00
1775c25b61
Merge pull request ' CUB-27 : Responsive layout and adaptive navigation' (#29) from agent/rex/CUB-27-responsive-layout-adaptive-nav into dev
Dev Build / build-test (push) Successful in 3m5s
2026-04-29 10:53:17 -04:00