feat(explorer): mission-control resilience, ops token labels, and CI validate
Some checks failed
Deploy Explorer Live / deploy (push) Failing after 14s
Validate Explorer / frontend (push) Successful in 1m34s
Validate Explorer / smoke-e2e (push) Failing after 1m26s

Add SSE reconnect with backoff, fallback REST polling, visibility-aware refresh,
extended token-list labels on operations pages, validate-on-pr workflow, and smoke coverage.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
defiQUG
2026-05-22 20:40:11 -07:00
parent e3ec87c324
commit 7a7dfca221
17 changed files with 268 additions and 42 deletions

View File

@@ -280,27 +280,50 @@ export const missionControlApi = {
return () => {}
}
const eventSource = new window.EventSource(getMissionControlStreamUrl())
let closed = false
let eventSource: EventSource | null = null
let reconnectTimer: ReturnType<typeof setTimeout> | null = null
let retryMs = 5_000
const maxRetryMs = 60_000
const handleMessage = (event: MessageEvent<string>) => {
try {
const payload = JSON.parse(event.data) as MissionControlBridgeStatusResponse
retryMs = 5_000
onStatus(payload)
} catch (error) {
onError?.(error)
}
}
eventSource.addEventListener('mission-control', handleMessage)
eventSource.onmessage = handleMessage
const connect = () => {
if (closed) return
eventSource.onerror = () => {
onError?.(new Error('Mission-control live stream connection lost'))
eventSource?.close()
eventSource = new window.EventSource(getMissionControlStreamUrl())
eventSource.addEventListener('mission-control', handleMessage)
eventSource.onmessage = handleMessage
eventSource.onerror = () => {
eventSource?.close()
eventSource = null
onError?.(new Error('Mission-control live stream connection lost'))
if (closed) return
if (reconnectTimer) clearTimeout(reconnectTimer)
reconnectTimer = setTimeout(() => {
reconnectTimer = null
connect()
}, retryMs)
retryMs = Math.min(retryMs * 2, maxRetryMs)
}
}
connect()
return () => {
eventSource.removeEventListener('mission-control', handleMessage)
eventSource.close()
closed = true
if (reconnectTimer) clearTimeout(reconnectTimer)
eventSource?.removeEventListener('mission-control', handleMessage)
eventSource?.close()
}
},
}