agent-relay 1.0.12 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/bridge/spawner.d.ts +7 -1
  2. package/dist/bridge/spawner.d.ts.map +1 -1
  3. package/dist/bridge/spawner.js +18 -5
  4. package/dist/bridge/spawner.js.map +1 -1
  5. package/dist/dashboard/out/404.html +1 -0
  6. package/dist/dashboard/out/_next/static/VaJQUKoHpKVXkxkyQVNa4/_buildManifest.js +1 -0
  7. package/dist/dashboard/out/_next/static/VaJQUKoHpKVXkxkyQVNa4/_ssgManifest.js +1 -0
  8. package/dist/dashboard/out/_next/static/chunks/117-3bef7b19f3e60751.js +2 -0
  9. package/dist/dashboard/out/_next/static/chunks/648-6cf686106c891ad3.js +1 -0
  10. package/dist/dashboard/out/_next/static/chunks/app/_not-found/page-8ff6572bc7c9bc61.js +1 -0
  11. package/dist/dashboard/out/_next/static/chunks/app/layout-c9d8c5d95e48c6bf.js +1 -0
  12. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-8aa9936bc6c771ab.js +1 -0
  13. package/dist/dashboard/out/_next/static/chunks/app/page-967d136fefe19b95.js +1 -0
  14. package/dist/dashboard/out/_next/static/chunks/fd9d1056-26bd8d656b496dba.js +1 -0
  15. package/dist/dashboard/out/_next/static/chunks/framework-f66176bb897dc684.js +1 -0
  16. package/dist/dashboard/out/_next/static/chunks/main-app-bae2e535de00de50.js +1 -0
  17. package/dist/dashboard/out/_next/static/chunks/main-e0a1f53fe0617a63.js +1 -0
  18. package/dist/dashboard/out/_next/static/chunks/pages/_app-72b849fbd24ac258.js +1 -0
  19. package/dist/dashboard/out/_next/static/chunks/pages/_error-7ba65e1336b92748.js +1 -0
  20. package/dist/dashboard/out/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  21. package/dist/dashboard/out/_next/static/chunks/webpack-c81f7fd28659d64f.js +1 -0
  22. package/dist/dashboard/out/_next/static/css/34bb8e70353694d8.css +1 -0
  23. package/dist/dashboard/out/index.html +1 -0
  24. package/dist/dashboard/out/index.txt +7 -0
  25. package/dist/dashboard/out/metrics.html +515 -0
  26. package/dist/dashboard/out/metrics.txt +7 -0
  27. package/dist/dashboard-server/server.js +4 -0
  28. package/dist/dashboard-server/server.js.map +1 -1
  29. package/dist/wrapper/pty-wrapper.d.ts +14 -3
  30. package/dist/wrapper/pty-wrapper.d.ts.map +1 -1
  31. package/dist/wrapper/pty-wrapper.js +76 -10
  32. package/dist/wrapper/pty-wrapper.js.map +1 -1
  33. package/package.json +2 -2
@@ -0,0 +1,515 @@
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/34bb8e70353694d8.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-c81f7fd28659d64f.js"/><script src="/_next/static/chunks/fd9d1056-26bd8d656b496dba.js" async=""></script><script src="/_next/static/chunks/117-3bef7b19f3e60751.js" async=""></script><script src="/_next/static/chunks/main-app-bae2e535de00de50.js" async=""></script><script src="/_next/static/chunks/648-6cf686106c891ad3.js" async=""></script><script src="/_next/static/chunks/app/metrics/page-8aa9936bc6c771ab.js" async=""></script><title>Agent Relay Dashboard</title><meta name="description" content="Fleet control dashboard for Agent Relay"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div class="metrics-page"><style>
2
+ .metrics-page {
3
+ min-height: 100vh;
4
+ background: #1a1d21;
5
+ color: #e8e8e8;
6
+ font-family: -apple-system, BlinkMacSystemFont, &#x27;Segoe UI&#x27;, Roboto, sans-serif;
7
+ }
8
+
9
+ .header {
10
+ position: sticky;
11
+ top: 0;
12
+ z-index: 100;
13
+ background: #1a1a2e;
14
+ border-bottom: 1px solid #2a2a3e;
15
+ padding: 16px 32px;
16
+ }
17
+
18
+ .header-content {
19
+ max-width: 1400px;
20
+ margin: 0 auto;
21
+ display: flex;
22
+ align-items: center;
23
+ justify-content: space-between;
24
+ }
25
+
26
+ .header-left {
27
+ display: flex;
28
+ align-items: center;
29
+ gap: 16px;
30
+ }
31
+
32
+ .back-link {
33
+ display: flex;
34
+ align-items: center;
35
+ gap: 8px;
36
+ color: #888;
37
+ text-decoration: none;
38
+ font-size: 14px;
39
+ font-weight: 500;
40
+ padding: 8px 12px;
41
+ border-radius: 6px;
42
+ transition: all 0.2s;
43
+ }
44
+
45
+ .back-link:hover {
46
+ color: #4a9eff;
47
+ background: rgba(74, 158, 255, 0.1);
48
+ }
49
+
50
+ .logo {
51
+ display: flex;
52
+ align-items: center;
53
+ gap: 12px;
54
+ }
55
+
56
+ .logo-icon {
57
+ width: 32px;
58
+ height: 32px;
59
+ background: linear-gradient(135deg, #1e3a5f 0%, #2a4a6e 100%);
60
+ border: 1px solid #3a5a7e;
61
+ border-radius: 8px;
62
+ display: flex;
63
+ align-items: center;
64
+ justify-content: center;
65
+ }
66
+
67
+ .logo-text {
68
+ font-size: 18px;
69
+ font-weight: 600;
70
+ letter-spacing: -0.3px;
71
+ }
72
+
73
+ .logo-text span {
74
+ color: #4a9eff;
75
+ }
76
+
77
+ .live-indicator {
78
+ display: flex;
79
+ align-items: center;
80
+ gap: 8px;
81
+ padding: 6px 12px;
82
+ background: rgba(34, 197, 94, 0.1);
83
+ border: 1px solid rgba(34, 197, 94, 0.3);
84
+ border-radius: 20px;
85
+ font-family: &#x27;IBM Plex Mono&#x27;, monospace;
86
+ font-size: 12px;
87
+ font-weight: 500;
88
+ color: #22c55e;
89
+ }
90
+
91
+ .live-dot {
92
+ width: 8px;
93
+ height: 8px;
94
+ background: #22c55e;
95
+ border-radius: 50%;
96
+ animation: pulse 2s ease-in-out infinite;
97
+ box-shadow: 0 0 10px rgba(34, 197, 94, 0.4);
98
+ }
99
+
100
+ @keyframes pulse {
101
+ 0%, 100% { opacity: 1; transform: scale(1); }
102
+ 50% { opacity: 0.5; transform: scale(0.9); }
103
+ }
104
+
105
+ .main {
106
+ position: relative;
107
+ z-index: 1;
108
+ max-width: 1400px;
109
+ margin: 0 auto;
110
+ padding: 24px 32px 48px;
111
+ }
112
+
113
+ .loading, .error-state {
114
+ display: flex;
115
+ flex-direction: column;
116
+ align-items: center;
117
+ justify-content: center;
118
+ height: 100vh;
119
+ gap: 16px;
120
+ }
121
+
122
+ .spinner {
123
+ width: 32px;
124
+ height: 32px;
125
+ border: 2px solid rgba(255, 255, 255, 0.1);
126
+ border-top-color: #4a9eff;
127
+ border-radius: 50%;
128
+ animation: spin 1s linear infinite;
129
+ }
130
+
131
+ @keyframes spin {
132
+ to { transform: rotate(360deg); }
133
+ }
134
+
135
+ .error-state button {
136
+ padding: 10px 20px;
137
+ background: #1264a3;
138
+ color: white;
139
+ border: none;
140
+ border-radius: 6px;
141
+ cursor: pointer;
142
+ }
143
+
144
+ .stats-grid {
145
+ display: grid;
146
+ grid-template-columns: repeat(4, 1fr);
147
+ gap: 16px;
148
+ margin-bottom: 24px;
149
+ }
150
+
151
+ .stat-card {
152
+ background: #222529;
153
+ border: 1px solid #2a2a3e;
154
+ border-radius: 8px;
155
+ padding: 20px;
156
+ transition: all 0.2s ease;
157
+ }
158
+
159
+ .stat-card:hover {
160
+ border-color: #3a3a4e;
161
+ background: #282c30;
162
+ }
163
+
164
+ .stat-label {
165
+ font-size: 11px;
166
+ font-weight: 600;
167
+ text-transform: uppercase;
168
+ letter-spacing: 0.5px;
169
+ color: #888;
170
+ margin-bottom: 8px;
171
+ }
172
+
173
+ .stat-value {
174
+ font-family: &#x27;IBM Plex Mono&#x27;, monospace;
175
+ font-size: 32px;
176
+ font-weight: 700;
177
+ line-height: 1;
178
+ }
179
+
180
+ .stat-value.accent-cyan { color: #4a9eff; }
181
+ .stat-value.accent-green { color: #22c55e; }
182
+ .stat-value.accent-orange { color: #f59e0b; }
183
+ .stat-value.accent-blue { color: #6366f1; }
184
+
185
+ .stat-subtext {
186
+ font-size: 12px;
187
+ color: #666;
188
+ margin-top: 8px;
189
+ font-family: &#x27;IBM Plex Mono&#x27;, monospace;
190
+ }
191
+
192
+ .section {
193
+ margin-bottom: 24px;
194
+ }
195
+
196
+ .section-header {
197
+ display: flex;
198
+ align-items: center;
199
+ justify-content: space-between;
200
+ margin-bottom: 12px;
201
+ }
202
+
203
+ .section-title {
204
+ font-size: 13px;
205
+ font-weight: 600;
206
+ text-transform: uppercase;
207
+ letter-spacing: 1px;
208
+ color: #888;
209
+ display: flex;
210
+ align-items: center;
211
+ gap: 10px;
212
+ }
213
+
214
+ .section-title::before {
215
+ content: &#x27;&#x27;;
216
+ width: 3px;
217
+ height: 14px;
218
+ background: #4a9eff;
219
+ border-radius: 2px;
220
+ }
221
+
222
+ .throughput-panel, .lifecycle-panel {
223
+ background: #222529;
224
+ border: 1px solid #2a2a3e;
225
+ border-radius: 8px;
226
+ padding: 24px;
227
+ }
228
+
229
+ .throughput-grid {
230
+ display: grid;
231
+ grid-template-columns: repeat(4, 1fr);
232
+ gap: 24px;
233
+ }
234
+
235
+ .throughput-item {
236
+ text-align: center;
237
+ }
238
+
239
+ .throughput-value {
240
+ font-family: &#x27;IBM Plex Mono&#x27;, monospace;
241
+ font-size: 40px;
242
+ font-weight: 700;
243
+ color: #4a9eff;
244
+ line-height: 1;
245
+ }
246
+
247
+ .throughput-label {
248
+ font-size: 12px;
249
+ color: #888;
250
+ margin-top: 8px;
251
+ text-transform: uppercase;
252
+ letter-spacing: 0.5px;
253
+ }
254
+
255
+ .throughput-bar {
256
+ height: 4px;
257
+ background: #2a2a3e;
258
+ border-radius: 2px;
259
+ margin-top: 12px;
260
+ overflow: hidden;
261
+ }
262
+
263
+ .throughput-bar-fill {
264
+ height: 100%;
265
+ background: linear-gradient(90deg, #4a9eff, #6366f1);
266
+ border-radius: 2px;
267
+ transition: width 0.5s ease;
268
+ }
269
+
270
+ .lifecycle-grid {
271
+ display: grid;
272
+ grid-template-columns: repeat(5, 1fr);
273
+ gap: 20px;
274
+ }
275
+
276
+ .lifecycle-item {
277
+ text-align: center;
278
+ }
279
+
280
+ .lifecycle-value {
281
+ font-family: &#x27;IBM Plex Mono&#x27;, monospace;
282
+ font-size: 32px;
283
+ font-weight: 700;
284
+ line-height: 1;
285
+ }
286
+
287
+ .lifecycle-value.accent-purple { color: #a78bfa; }
288
+ .lifecycle-value.accent-red { color: #ef4444; }
289
+
290
+ .lifecycle-label {
291
+ font-size: 11px;
292
+ color: #888;
293
+ margin-top: 8px;
294
+ text-transform: uppercase;
295
+ letter-spacing: 0.5px;
296
+ }
297
+
298
+ .error-rate-indicator {
299
+ display: inline-flex;
300
+ align-items: center;
301
+ gap: 6px;
302
+ padding: 4px 10px;
303
+ border-radius: 12px;
304
+ font-size: 12px;
305
+ font-weight: 600;
306
+ font-family: &#x27;IBM Plex Mono&#x27;, monospace;
307
+ }
308
+
309
+ .error-rate-indicator.healthy {
310
+ background: rgba(34, 197, 94, 0.15);
311
+ color: #22c55e;
312
+ }
313
+
314
+ .error-rate-indicator.warning {
315
+ background: rgba(245, 158, 11, 0.15);
316
+ color: #f59e0b;
317
+ }
318
+
319
+ .error-rate-indicator.critical {
320
+ background: rgba(239, 68, 68, 0.15);
321
+ color: #ef4444;
322
+ }
323
+
324
+ .sessions-table, .agents-table {
325
+ width: 100%;
326
+ border-collapse: collapse;
327
+ margin-top: 16px;
328
+ }
329
+
330
+ .sessions-table th, .sessions-table td,
331
+ .agents-table th, .agents-table td {
332
+ padding: 12px 16px;
333
+ text-align: left;
334
+ }
335
+
336
+ .sessions-table th, .agents-table th {
337
+ background: #1a1a2e;
338
+ font-size: 11px;
339
+ font-weight: 600;
340
+ text-transform: uppercase;
341
+ letter-spacing: 0.5px;
342
+ color: #888;
343
+ border-bottom: 1px solid #2a2a3e;
344
+ }
345
+
346
+ .sessions-table tr, .agents-table tr {
347
+ border-bottom: 1px solid #2a2a3e;
348
+ }
349
+
350
+ .sessions-table tr:last-child, .agents-table tr:last-child {
351
+ border-bottom: none;
352
+ }
353
+
354
+ .agents-table tr:hover {
355
+ background: rgba(74, 158, 255, 0.03);
356
+ }
357
+
358
+ .agents-table-container {
359
+ background: #222529;
360
+ border: 1px solid #2a2a3e;
361
+ border-radius: 8px;
362
+ overflow: hidden;
363
+ }
364
+
365
+ .agent-name {
366
+ display: flex;
367
+ align-items: center;
368
+ gap: 12px;
369
+ }
370
+
371
+ .agent-avatar {
372
+ width: 32px;
373
+ height: 32px;
374
+ border-radius: 6px;
375
+ display: flex;
376
+ align-items: center;
377
+ justify-content: center;
378
+ font-weight: 600;
379
+ font-size: 12px;
380
+ color: white;
381
+ }
382
+
383
+ .agent-name-text {
384
+ font-weight: 600;
385
+ font-family: &#x27;IBM Plex Mono&#x27;, monospace;
386
+ }
387
+
388
+ .status-badge {
389
+ display: inline-flex;
390
+ align-items: center;
391
+ gap: 6px;
392
+ padding: 4px 10px;
393
+ border-radius: 12px;
394
+ font-size: 12px;
395
+ font-weight: 500;
396
+ }
397
+
398
+ .status-badge.online {
399
+ background: rgba(34, 197, 94, 0.15);
400
+ color: #22c55e;
401
+ }
402
+
403
+ .status-badge.offline {
404
+ background: rgba(107, 114, 128, 0.15);
405
+ color: #6b7280;
406
+ }
407
+
408
+ .status-badge::before {
409
+ content: &#x27;&#x27;;
410
+ width: 6px;
411
+ height: 6px;
412
+ border-radius: 50%;
413
+ background: currentColor;
414
+ }
415
+
416
+ .closed-badge {
417
+ display: inline-flex;
418
+ align-items: center;
419
+ gap: 4px;
420
+ padding: 2px 8px;
421
+ border-radius: 10px;
422
+ font-size: 11px;
423
+ font-weight: 500;
424
+ }
425
+
426
+ .closed-badge.agent {
427
+ background: rgba(34, 197, 94, 0.15);
428
+ color: #22c55e;
429
+ }
430
+
431
+ .closed-badge.disconnect {
432
+ background: rgba(245, 158, 11, 0.15);
433
+ color: #f59e0b;
434
+ }
435
+
436
+ .closed-badge.error {
437
+ background: rgba(239, 68, 68, 0.15);
438
+ color: #ef4444;
439
+ }
440
+
441
+ .closed-badge.active {
442
+ background: rgba(74, 158, 255, 0.15);
443
+ color: #4a9eff;
444
+ }
445
+
446
+ .metric-cell {
447
+ font-family: &#x27;IBM Plex Mono&#x27;, monospace;
448
+ font-size: 14px;
449
+ }
450
+
451
+ .metric-cell.sent { color: #4a9eff; }
452
+ .metric-cell.received { color: #a78bfa; }
453
+
454
+ .uptime-cell {
455
+ font-family: &#x27;IBM Plex Mono&#x27;, monospace;
456
+ font-size: 13px;
457
+ color: #888;
458
+ }
459
+
460
+ .empty-state {
461
+ padding: 48px 32px;
462
+ text-align: center;
463
+ }
464
+
465
+ .empty-state-icon {
466
+ width: 48px;
467
+ height: 48px;
468
+ margin: 0 auto 16px;
469
+ color: #666;
470
+ opacity: 0.5;
471
+ }
472
+
473
+ .empty-state-text {
474
+ color: #666;
475
+ font-size: 14px;
476
+ }
477
+
478
+ .last-updated {
479
+ text-align: center;
480
+ padding: 20px;
481
+ font-size: 12px;
482
+ color: #666;
483
+ font-family: &#x27;IBM Plex Mono&#x27;, monospace;
484
+ }
485
+
486
+ @media (max-width: 1200px) {
487
+ .stats-grid {
488
+ grid-template-columns: repeat(2, 1fr);
489
+ }
490
+ .throughput-grid {
491
+ grid-template-columns: repeat(2, 1fr);
492
+ }
493
+ .lifecycle-grid {
494
+ grid-template-columns: repeat(3, 1fr);
495
+ }
496
+ }
497
+
498
+ @media (max-width: 768px) {
499
+ .header {
500
+ padding: 12px 16px;
501
+ }
502
+ .main {
503
+ padding: 16px;
504
+ }
505
+ .stats-grid {
506
+ grid-template-columns: 1fr;
507
+ }
508
+ .throughput-grid {
509
+ grid-template-columns: 1fr;
510
+ }
511
+ .lifecycle-grid {
512
+ grid-template-columns: repeat(2, 1fr);
513
+ }
514
+ }
515
+ </style><div class="loading"><div class="spinner"></div><p>Loading metrics...</p></div></div><script src="/_next/static/chunks/webpack-c81f7fd28659d64f.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/34bb8e70353694d8.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[2846,[],\"\"]\n4:I[9107,[],\"ClientPageRoot\"]\n5:I[5804,[\"648\",\"static/chunks/648-6cf686106c891ad3.js\",\"860\",\"static/chunks/app/metrics/page-8aa9936bc6c771ab.js\"],\"default\",1]\n6:I[4707,[],\"\"]\n7:I[6423,[],\"\"]\n9:I[1060,[],\"\"]\na:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L2\",null,{\"buildId\":\"VaJQUKoHpKVXkxkyQVNa4\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"metrics\"],\"initialTree\":[\"\",{\"children\":[\"metrics\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"metrics\",{\"children\":[\"__PAGE__\",{},[[\"$L3\",[\"$\",\"$L4\",null,{\"props\":{\"params\":{},\"searchParams\":{}},\"Component\":\"$5\"}],null],null],null]},[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"metrics\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/34bb8e70353694d8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$L8\"],\"globalErrorComponent\":\"$9\",\"missingSlots\":\"$Wa\"}]\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Agent Relay Dashboard\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Fleet control dashboard for Agent Relay\"}]]\n3:null\n"])</script></body></html>
@@ -0,0 +1,7 @@
1
+ 2:I[9107,[],"ClientPageRoot"]
2
+ 3:I[5804,["648","static/chunks/648-6cf686106c891ad3.js","860","static/chunks/app/metrics/page-8aa9936bc6c771ab.js"],"default",1]
3
+ 4:I[4707,[],""]
4
+ 5:I[6423,[],""]
5
+ 0:["VaJQUKoHpKVXkxkyQVNa4",[[["",{"children":["metrics",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["metrics",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","metrics","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/34bb8e70353694d8.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]],null],null],["$L6",null]]]]
6
+ 6:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Agent Relay Dashboard"}],["$","meta","3",{"name":"description","content":"Fleet control dashboard for Agent Relay"}]]
7
+ 1:null
@@ -921,6 +921,10 @@ export async function startDashboard(portOrOptions, dataDirArg, teamDirArg, dbPa
921
921
  server.listen(availablePort, () => {
922
922
  console.log(`Dashboard running at http://localhost:${availablePort}`);
923
923
  console.log(`Monitoring: ${dataDir}`);
924
+ // Set the dashboard port on spawner so spawned agents can use the API for nested spawns
925
+ if (spawner) {
926
+ spawner.setDashboardPort(availablePort);
927
+ }
924
928
  resolve(availablePort);
925
929
  });
926
930
  server.on('error', (err) => {