fix(telemetry-strip): use real activity events from /api/activity + SSE

TelemetryStrip now fetches from the same /api/activity endpoint and
subscribes to the same /api/events SSE stream as ActivityPanel. The
minimized dots use getEventTone() colors matching the full feed exactly
(created=green, closed=amber, reopened=blue, etc.) instead of derived
task status counts.

Co-Authored-By: Oz <oz-agent@warp.dev>
This commit is contained in:
zenchantlive 2026-03-01 18:23:53 -08:00
parent a0787f85de
commit 114bb18188
3 changed files with 247 additions and 31 deletions

View file

@ -3034,3 +3034,206 @@ time="2026-03-01T18:18:43-08:00" level=info msg=ConnectionClosed connectionID=11
time="2026-03-01T18:18:44-08:00" level=info msg=ConnectionClosed connectionID=1198
time="2026-03-01T18:20:06-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1199
time="2026-03-01T18:20:29-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1200
time="2026-03-01T18:21:05-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1201
time="2026-03-01T18:21:06-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1202
time="2026-03-01T18:21:06-08:00" level=warning msg="Cannot read client handshake response from client 1202 (127.0.0.1:65449): read tcp 127.0.0.1:3307->127.0.0.1:65449: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:21:06-08:00" level=info msg=ConnectionClosed connectionID=1202
time="2026-03-01T18:21:06-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1203
time="2026-03-01T18:21:06-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1204
time="2026-03-01T18:21:06-08:00" level=info msg=ConnectionClosed connectionID=1203
time="2026-03-01T18:21:07-08:00" level=info msg=ConnectionClosed connectionID=1204
time="2026-03-01T18:21:07-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1205
time="2026-03-01T18:21:07-08:00" level=warning msg="Cannot read client handshake response from client 1205 (127.0.0.1:65458): read tcp 127.0.0.1:3307->127.0.0.1:65458: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:21:07-08:00" level=info msg=ConnectionClosed connectionID=1205
time="2026-03-01T18:21:07-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1206
time="2026-03-01T18:21:07-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1207
time="2026-03-01T18:21:07-08:00" level=info msg=ConnectionClosed connectionID=1206
time="2026-03-01T18:21:07-08:00" level=info msg=ConnectionClosed connectionID=1207
time="2026-03-01T18:21:07-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1208
time="2026-03-01T18:21:09-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1209
time="2026-03-01T18:21:09-08:00" level=error msg="Cannot send HandshakeV10 packet: write tcp 127.0.0.1:3307->127.0.0.1:59639: wsasend: An established connection was aborted by the software in your host machine.\nWrite(packet) failed\nconn 1209"
time="2026-03-01T18:21:09-08:00" level=info msg=ConnectionClosed connectionID=1209
time="2026-03-01T18:21:09-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1210
time="2026-03-01T18:21:09-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1211
time="2026-03-01T18:21:09-08:00" level=info msg=ConnectionClosed connectionID=1210
time="2026-03-01T18:21:09-08:00" level=info msg=ConnectionClosed connectionID=1211
time="2026-03-01T18:21:10-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1212
time="2026-03-01T18:21:10-08:00" level=warning msg="Cannot read client handshake response from client 1212 (127.0.0.1:59643): read tcp 127.0.0.1:3307->127.0.0.1:59643: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:21:10-08:00" level=info msg=ConnectionClosed connectionID=1212
time="2026-03-01T18:21:10-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1213
time="2026-03-01T18:21:10-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1214
time="2026-03-01T18:21:10-08:00" level=info msg=ConnectionClosed connectionID=1213
time="2026-03-01T18:21:10-08:00" level=info msg=ConnectionClosed connectionID=1214
time="2026-03-01T18:21:12-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1215
time="2026-03-01T18:21:12-08:00" level=warning msg="Cannot read client handshake response from client 1215 (127.0.0.1:58101): read tcp 127.0.0.1:3307->127.0.0.1:58101: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:21:12-08:00" level=info msg=ConnectionClosed connectionID=1215
time="2026-03-01T18:21:12-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1216
time="2026-03-01T18:21:12-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1217
time="2026-03-01T18:21:12-08:00" level=info msg=ConnectionClosed connectionID=1216
time="2026-03-01T18:21:12-08:00" level=info msg=ConnectionClosed connectionID=1217
time="2026-03-01T18:21:12-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1218
time="2026-03-01T18:21:12-08:00" level=error msg="Cannot send HandshakeV10 packet: write tcp 127.0.0.1:3307->127.0.0.1:58105: wsasend: An existing connection was forcibly closed by the remote host.\nWrite(packet) failed\nconn 1218"
time="2026-03-01T18:21:12-08:00" level=info msg=ConnectionClosed connectionID=1218
time="2026-03-01T18:21:12-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1219
time="2026-03-01T18:21:12-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1220
time="2026-03-01T18:21:12-08:00" level=info msg=ConnectionClosed connectionID=1219
time="2026-03-01T18:21:12-08:00" level=info msg=ConnectionClosed connectionID=1220
time="2026-03-01T18:21:44-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1221
time="2026-03-01T18:21:44-08:00" level=warning msg="Cannot read client handshake response from client 1221 (127.0.0.1:60292): read tcp 127.0.0.1:3307->127.0.0.1:60292: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:21:44-08:00" level=info msg=ConnectionClosed connectionID=1221
time="2026-03-01T18:21:44-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1222
time="2026-03-01T18:21:44-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1223
time="2026-03-01T18:21:44-08:00" level=info msg=ConnectionClosed connectionID=1222
time="2026-03-01T18:21:44-08:00" level=info msg=ConnectionClosed connectionID=1223
time="2026-03-01T18:21:44-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1224
time="2026-03-01T18:21:44-08:00" level=warning msg="Cannot read client handshake response from client 1224 (127.0.0.1:60397): read tcp 127.0.0.1:3307->127.0.0.1:60397: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:21:44-08:00" level=info msg=ConnectionClosed connectionID=1224
time="2026-03-01T18:21:44-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1225
time="2026-03-01T18:21:44-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1226
time="2026-03-01T18:21:44-08:00" level=info msg=ConnectionClosed connectionID=1225
time="2026-03-01T18:21:44-08:00" level=info msg=ConnectionClosed connectionID=1226
time="2026-03-01T18:21:53-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1227
time="2026-03-01T18:21:53-08:00" level=warning msg="Cannot read client handshake response from client 1227 (127.0.0.1:54990): read tcp 127.0.0.1:3307->127.0.0.1:54990: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:21:53-08:00" level=info msg=ConnectionClosed connectionID=1227
time="2026-03-01T18:21:53-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1228
time="2026-03-01T18:21:53-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1229
time="2026-03-01T18:21:53-08:00" level=info msg=ConnectionClosed connectionID=1228
time="2026-03-01T18:21:53-08:00" level=info msg=ConnectionClosed connectionID=1229
time="2026-03-01T18:21:53-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1230
time="2026-03-01T18:21:53-08:00" level=warning msg="Cannot read client handshake response from client 1230 (127.0.0.1:55002): read tcp 127.0.0.1:3307->127.0.0.1:55002: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:21:53-08:00" level=info msg=ConnectionClosed connectionID=1230
time="2026-03-01T18:21:53-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1231
time="2026-03-01T18:21:53-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1232
time="2026-03-01T18:21:53-08:00" level=info msg=ConnectionClosed connectionID=1231
time="2026-03-01T18:21:54-08:00" level=info msg=ConnectionClosed connectionID=1232
time="2026-03-01T18:22:07-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1233
time="2026-03-01T18:22:07-08:00" level=warning msg="Cannot read client handshake response from client 1233 (127.0.0.1:56025): read tcp 127.0.0.1:3307->127.0.0.1:56025: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:22:07-08:00" level=info msg=ConnectionClosed connectionID=1233
time="2026-03-01T18:22:07-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1234
time="2026-03-01T18:22:07-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1235
time="2026-03-01T18:22:07-08:00" level=info msg=ConnectionClosed connectionID=1234
time="2026-03-01T18:22:07-08:00" level=info msg=ConnectionClosed connectionID=1235
time="2026-03-01T18:22:07-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1236
time="2026-03-01T18:22:07-08:00" level=error msg="Cannot send HandshakeV10 packet: write tcp 127.0.0.1:3307->127.0.0.1:56028: wsasend: An existing connection was forcibly closed by the remote host.\nWrite(packet) failed\nconn 1236"
time="2026-03-01T18:22:07-08:00" level=info msg=ConnectionClosed connectionID=1236
time="2026-03-01T18:22:07-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1237
time="2026-03-01T18:22:07-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1238
time="2026-03-01T18:22:07-08:00" level=info msg=ConnectionClosed connectionID=1237
time="2026-03-01T18:22:07-08:00" level=info msg=ConnectionClosed connectionID=1238
time="2026-03-01T18:22:11-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1239
time="2026-03-01T18:22:11-08:00" level=warning msg="Cannot read client handshake response from client 1239 (127.0.0.1:51707): read tcp 127.0.0.1:3307->127.0.0.1:51707: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:22:11-08:00" level=info msg=ConnectionClosed connectionID=1239
time="2026-03-01T18:22:11-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1240
time="2026-03-01T18:22:11-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1241
time="2026-03-01T18:22:11-08:00" level=info msg=ConnectionClosed connectionID=1240
time="2026-03-01T18:22:11-08:00" level=info msg=ConnectionClosed connectionID=1241
time="2026-03-01T18:22:11-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1242
time="2026-03-01T18:22:11-08:00" level=warning msg="Cannot read client handshake response from client 1242 (127.0.0.1:51710): read tcp 127.0.0.1:3307->127.0.0.1:51710: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:22:11-08:00" level=info msg=ConnectionClosed connectionID=1242
time="2026-03-01T18:22:11-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1243
time="2026-03-01T18:22:11-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1244
time="2026-03-01T18:22:11-08:00" level=info msg=ConnectionClosed connectionID=1243
time="2026-03-01T18:22:12-08:00" level=info msg=ConnectionClosed connectionID=1244
time="2026-03-01T18:23:24-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1245
time="2026-03-01T18:23:24-08:00" level=warning msg="Cannot read client handshake response from client 1245 (127.0.0.1:54419): read tcp 127.0.0.1:3307->127.0.0.1:54419: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:23:24-08:00" level=info msg=ConnectionClosed connectionID=1245
time="2026-03-01T18:23:24-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1246
time="2026-03-01T18:23:24-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1247
time="2026-03-01T18:23:24-08:00" level=info msg=ConnectionClosed connectionID=1246
time="2026-03-01T18:23:24-08:00" level=info msg=ConnectionClosed connectionID=1247
time="2026-03-01T18:23:24-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1248
time="2026-03-01T18:23:24-08:00" level=warning msg="Cannot read client handshake response from client 1248 (127.0.0.1:54422): read tcp 127.0.0.1:3307->127.0.0.1:54422: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:23:24-08:00" level=info msg=ConnectionClosed connectionID=1248
time="2026-03-01T18:23:24-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1249
time="2026-03-01T18:23:24-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1250
time="2026-03-01T18:23:24-08:00" level=info msg=ConnectionClosed connectionID=1249
time="2026-03-01T18:23:24-08:00" level=info msg=ConnectionClosed connectionID=1250
time="2026-03-01T18:23:27-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1251
time="2026-03-01T18:23:27-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1252
time="2026-03-01T18:23:28-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1253
time="2026-03-01T18:23:29-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1254
time="2026-03-01T18:23:29-08:00" level=warning msg="Cannot read client handshake response from client 1254 (127.0.0.1:49651): read tcp 127.0.0.1:3307->127.0.0.1:49651: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:23:29-08:00" level=info msg=ConnectionClosed connectionID=1254
time="2026-03-01T18:23:29-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1255
time="2026-03-01T18:23:29-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1256
time="2026-03-01T18:23:29-08:00" level=info msg=ConnectionClosed connectionID=1255
time="2026-03-01T18:23:29-08:00" level=info msg=ConnectionClosed connectionID=1256
time="2026-03-01T18:23:30-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1257
time="2026-03-01T18:23:30-08:00" level=warning msg="Cannot read client handshake response from client 1257 (127.0.0.1:49655): read tcp 127.0.0.1:3307->127.0.0.1:49655: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:23:30-08:00" level=info msg=ConnectionClosed connectionID=1257
time="2026-03-01T18:23:30-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1258
time="2026-03-01T18:23:30-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1259
time="2026-03-01T18:23:30-08:00" level=info msg=ConnectionClosed connectionID=1258
time="2026-03-01T18:23:30-08:00" level=info msg=ConnectionClosed connectionID=1259
time="2026-03-01T18:23:33-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1260
time="2026-03-01T18:23:34-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1261
time="2026-03-01T18:23:34-08:00" level=warning msg="Cannot read client handshake response from client 1261 (127.0.0.1:63297): read tcp 127.0.0.1:3307->127.0.0.1:63297: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:23:34-08:00" level=info msg=ConnectionClosed connectionID=1261
time="2026-03-01T18:23:34-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1262
time="2026-03-01T18:23:34-08:00" level=error msg="Cannot send HandshakeV10 packet: write tcp 127.0.0.1:3307->127.0.0.1:63298: wsasend: An established connection was aborted by the software in your host machine.\nWrite(packet) failed\nconn 1262"
time="2026-03-01T18:23:34-08:00" level=info msg=ConnectionClosed connectionID=1262
time="2026-03-01T18:23:34-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1263
time="2026-03-01T18:23:34-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1264
time="2026-03-01T18:23:34-08:00" level=info msg=ConnectionClosed connectionID=1263
time="2026-03-01T18:23:34-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1265
time="2026-03-01T18:23:34-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1266
time="2026-03-01T18:23:34-08:00" level=info msg=ConnectionClosed connectionID=1265
time="2026-03-01T18:23:34-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1267
time="2026-03-01T18:23:34-08:00" level=error msg="Cannot send HandshakeV10 packet: write tcp 127.0.0.1:3307->127.0.0.1:63304: wsasend: An established connection was aborted by the software in your host machine.\nWrite(packet) failed\nconn 1267"
time="2026-03-01T18:23:34-08:00" level=info msg=ConnectionClosed connectionID=1267
time="2026-03-01T18:23:34-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1268
time="2026-03-01T18:23:34-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1269
time="2026-03-01T18:23:34-08:00" level=info msg=ConnectionClosed connectionID=1268
time="2026-03-01T18:23:35-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1270
time="2026-03-01T18:23:35-08:00" level=error msg="Cannot send HandshakeV10 packet: write tcp 127.0.0.1:3307->127.0.0.1:63307: wsasend: An established connection was aborted by the software in your host machine.\nWrite(packet) failed\nconn 1270"
time="2026-03-01T18:23:35-08:00" level=info msg=ConnectionClosed connectionID=1270
time="2026-03-01T18:23:35-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1271
time="2026-03-01T18:23:35-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1272
time="2026-03-01T18:23:35-08:00" level=info msg=ConnectionClosed connectionID=1271
time="2026-03-01T18:23:35-08:00" level=info msg=ConnectionClosed connectionID=1269
time="2026-03-01T18:23:36-08:00" level=info msg=ConnectionClosed connectionID=1266
time="2026-03-01T18:23:36-08:00" level=info msg=ConnectionClosed connectionID=1264
time="2026-03-01T18:23:36-08:00" level=info msg=ConnectionClosed connectionID=1272
time="2026-03-01T18:23:36-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1273
time="2026-03-01T18:23:36-08:00" level=warning msg="Cannot read client handshake response from client 1273 (127.0.0.1:63328): read tcp 127.0.0.1:3307->127.0.0.1:63328: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:23:36-08:00" level=info msg=ConnectionClosed connectionID=1273
time="2026-03-01T18:23:36-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1274
time="2026-03-01T18:23:36-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1275
time="2026-03-01T18:23:36-08:00" level=info msg=ConnectionClosed connectionID=1274
time="2026-03-01T18:23:36-08:00" level=info msg=ConnectionClosed connectionID=1275
time="2026-03-01T18:23:36-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1276
time="2026-03-01T18:23:36-08:00" level=warning msg="Cannot read client handshake response from client 1276 (127.0.0.1:63333): read tcp 127.0.0.1:3307->127.0.0.1:63333: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:23:36-08:00" level=info msg=ConnectionClosed connectionID=1276
time="2026-03-01T18:23:36-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1277
time="2026-03-01T18:23:36-08:00" level=warning msg="Cannot read client handshake response from client 1277 (127.0.0.1:63334): read tcp 127.0.0.1:3307->127.0.0.1:63334: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:23:36-08:00" level=info msg=ConnectionClosed connectionID=1277
time="2026-03-01T18:23:36-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1278
time="2026-03-01T18:23:36-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1279
time="2026-03-01T18:23:36-08:00" level=info msg=ConnectionClosed connectionID=1278
time="2026-03-01T18:23:36-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1280
time="2026-03-01T18:23:36-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1281
time="2026-03-01T18:23:36-08:00" level=info msg=ConnectionClosed connectionID=1280
time="2026-03-01T18:23:36-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1282
time="2026-03-01T18:23:36-08:00" level=warning msg="Cannot read client handshake response from client 1282 (127.0.0.1:63339): read tcp 127.0.0.1:3307->127.0.0.1:63339: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:23:36-08:00" level=info msg=ConnectionClosed connectionID=1282
time="2026-03-01T18:23:36-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1283
time="2026-03-01T18:23:36-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1284
time="2026-03-01T18:23:36-08:00" level=info msg=ConnectionClosed connectionID=1283
time="2026-03-01T18:23:37-08:00" level=info msg=ConnectionClosed connectionID=1279
time="2026-03-01T18:23:37-08:00" level=info msg=ConnectionClosed connectionID=1281
time="2026-03-01T18:23:38-08:00" level=info msg=ConnectionClosed connectionID=1284
time="2026-03-01T18:23:38-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1285
time="2026-03-01T18:23:40-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1286
time="2026-03-01T18:23:40-08:00" level=error msg="Cannot send HandshakeV10 packet: write tcp 127.0.0.1:3307->127.0.0.1:53191: wsasend: An established connection was aborted by the software in your host machine.\nWrite(packet) failed\nconn 1286"
time="2026-03-01T18:23:40-08:00" level=info msg=ConnectionClosed connectionID=1286
time="2026-03-01T18:23:40-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1287
time="2026-03-01T18:23:40-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1288
time="2026-03-01T18:23:40-08:00" level=info msg=ConnectionClosed connectionID=1287
time="2026-03-01T18:23:41-08:00" level=info msg=ConnectionClosed connectionID=1288
time="2026-03-01T18:23:41-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1289
time="2026-03-01T18:23:41-08:00" level=warning msg="Cannot read client handshake response from client 1289 (127.0.0.1:53200): read tcp 127.0.0.1:3307->127.0.0.1:53200: wsarecv: An existing connection was forcibly closed by the remote host.\nio.ReadFull(header size) failed, it may not be a valid MySQL client"
time="2026-03-01T18:23:41-08:00" level=info msg=ConnectionClosed connectionID=1289
time="2026-03-01T18:23:41-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1290
time="2026-03-01T18:23:41-08:00" level=info msg=NewConnection DisableClientMultiStatements=false connectionID=1291
time="2026-03-01T18:23:41-08:00" level=info msg=ConnectionClosed connectionID=1290
time="2026-03-01T18:23:41-08:00" level=info msg=ConnectionClosed connectionID=1291

View file

@ -1,32 +1,47 @@
'use client';
import { useMemo } from 'react';
import { useEffect, useState } from 'react';
import { Signal } from 'lucide-react';
import type { BeadIssue } from '../../lib/types';
import type { ActivityEvent } from '../../lib/activity';
import { getEventTone } from '../activity/activity-panel';
import { cn } from '../../lib/utils';
interface TelemetryStripProps {
issues: BeadIssue[];
projectRoot: string;
onMaximize: () => void;
}
function dotColor(status: BeadIssue['status']): { bg: string; glow: string } {
switch (status) {
case 'blocked': return { bg: 'var(--accent-danger)', glow: 'rgba(255,76,114,0.4)' };
case 'in_progress': return { bg: 'var(--accent-warning)', glow: 'rgba(255,178,74,0.4)' };
case 'open': return { bg: 'var(--accent-success)', glow: 'rgba(53,217,143,0.4)' };
case 'closed': return { bg: 'var(--text-tertiary)', glow: 'transparent' };
default: return { bg: 'var(--accent-info)', glow: 'rgba(125,211,252,0.3)' };
}
}
export function TelemetryStrip({ projectRoot, onMaximize }: TelemetryStripProps) {
const [activities, setActivities] = useState<ActivityEvent[]>([]);
export function TelemetryStrip({ issues, onMaximize }: TelemetryStripProps) {
// Show the 8 most recently updated tasks as live dots
const recentTasks = useMemo(() => {
return [...issues]
.filter((i) => i.issue_type !== 'epic')
.sort((a, b) => new Date(b.updated_at).getTime() - new Date(a.updated_at).getTime())
.slice(0, 8);
}, [issues]);
// Fetch initial activity history
useEffect(() => {
async function fetchActivity() {
try {
const response = await fetch('/api/activity');
if (response.ok) {
const data = await response.json();
setActivities(data.slice(0, 12));
}
} catch { /* ignore */ }
}
fetchActivity();
}, []);
// Subscribe to real-time activity via SSE
useEffect(() => {
const source = new EventSource(`/api/events?projectRoot=${encodeURIComponent(projectRoot)}`);
const onActivity = (event: MessageEvent) => {
try {
const data = JSON.parse(event.data);
if (data?.beadId) {
setActivities(prev => [data, ...prev].slice(0, 12));
}
} catch { /* ignore */ }
};
source.addEventListener('activity', onActivity as EventListener);
return () => { source.removeEventListener('activity', onActivity as EventListener); source.close(); };
}, [projectRoot]);
return (
<div className="flex h-full w-9 flex-shrink-0 flex-col items-center border-l border-[var(--border-subtle)] bg-[var(--surface-primary)] py-2">
@ -41,17 +56,15 @@ export function TelemetryStrip({ issues, onMaximize }: TelemetryStripProps) {
</button>
<div className="flex flex-1 flex-col items-center gap-2 overflow-hidden">
{recentTasks.map((task) => {
const { bg, glow } = dotColor(task.status);
{activities.map((act) => {
const tone = getEventTone(act.kind);
return (
<div key={task.id} className="flex flex-col items-center" title={`${task.id}: ${task.title} (${task.status})`}>
<span
className="h-2 w-2 rounded-full"
style={{
backgroundColor: bg,
boxShadow: `0 0 5px 1px ${glow}`,
}}
/>
<div
key={act.id}
className="flex flex-col items-center"
title={`${act.beadId}: ${act.beadTitle} (${tone.label})`}
>
<span className={cn('h-2 w-2 rounded-full', tone.dotClass)} />
</div>
);
})}

View file

@ -291,7 +291,7 @@ export function UnifiedShell({
</div>
{isNonTelemetry && (
<TelemetryStrip
issues={issues}
projectRoot={projectRoot}
onMaximize={() => { setTaskId(null); setAssignMode(false); }}
/>
)}