loadtoagent 1.0.0

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 (82) hide show
  1. package/README.ko.md +175 -0
  2. package/README.md +175 -0
  3. package/README.zh-CN.md +175 -0
  4. package/bin/loadtoagent.js +171 -0
  5. package/docs/ARCHITECTURE.md +30 -0
  6. package/docs/PROVIDER-CONTRACTS.md +58 -0
  7. package/docs/assets/loadtoagent-dashboard.png +0 -0
  8. package/docs/assets/loadtoagent-demo.gif +0 -0
  9. package/main.js +493 -0
  10. package/package.json +133 -0
  11. package/preload.js +75 -0
  12. package/renderer/app-agent-actions.js +285 -0
  13. package/renderer/app-bootstrap.js +95 -0
  14. package/renderer/app-dashboard.js +361 -0
  15. package/renderer/app-drawer-content.js +203 -0
  16. package/renderer/app-drawer-data.js +41 -0
  17. package/renderer/app-drawer.js +183 -0
  18. package/renderer/app-events-dialogs.js +169 -0
  19. package/renderer/app-events-filters.js +74 -0
  20. package/renderer/app-events-navigation.js +96 -0
  21. package/renderer/app-events-sessions.js +195 -0
  22. package/renderer/app-events.js +16 -0
  23. package/renderer/app-graph-layout.js +71 -0
  24. package/renderer/app-graph-model.js +107 -0
  25. package/renderer/app-graph-orchestration.js +76 -0
  26. package/renderer/app-graph-view.js +544 -0
  27. package/renderer/app-run-modal.js +221 -0
  28. package/renderer/app-session-render.js +243 -0
  29. package/renderer/app-tmux-render.js +247 -0
  30. package/renderer/app.js +608 -0
  31. package/renderer/fonts/geist-ext.woff2 +0 -0
  32. package/renderer/fonts/geist.woff2 +0 -0
  33. package/renderer/i18n-messages.js +355 -0
  34. package/renderer/i18n.js +122 -0
  35. package/renderer/index.html +386 -0
  36. package/renderer/shared.js +26 -0
  37. package/renderer/styles-agent-map.css +401 -0
  38. package/renderer/styles-cards.css +600 -0
  39. package/renderer/styles-collaboration.css +534 -0
  40. package/renderer/styles-components.css +1293 -0
  41. package/renderer/styles-onboarding.css +344 -0
  42. package/renderer/styles-overlays.css +284 -0
  43. package/renderer/styles-product.css +686 -0
  44. package/renderer/styles-responsive-product.css +689 -0
  45. package/renderer/styles-responsive-runtime.css +718 -0
  46. package/renderer/styles-responsive-shell.css +533 -0
  47. package/renderer/styles-responsive-workflows.css +778 -0
  48. package/renderer/styles-run-composer.css +695 -0
  49. package/renderer/styles-settings.css +606 -0
  50. package/renderer/styles-terminal.css +1241 -0
  51. package/renderer/styles-tmux.css +1162 -0
  52. package/renderer/styles-workflow-map.css +513 -0
  53. package/renderer/styles-workflows.css +1217 -0
  54. package/renderer/styles.css +486 -0
  55. package/renderer/terminal-agent.js +152 -0
  56. package/renderer/terminal-events.js +226 -0
  57. package/renderer/terminal-workbench.js +464 -0
  58. package/renderer/terminal.js +497 -0
  59. package/src/agentMonitor/claudeParser.js +197 -0
  60. package/src/agentMonitor/codexCollaboration.js +95 -0
  61. package/src/agentMonitor/codexParser.js +447 -0
  62. package/src/agentMonitor/genericParser.js +244 -0
  63. package/src/agentMonitor/hierarchy.js +248 -0
  64. package/src/agentMonitor/sessionFiles.js +86 -0
  65. package/src/agentMonitor.js +591 -0
  66. package/src/agentRunner.js +465 -0
  67. package/src/bridgeServer.js +246 -0
  68. package/src/contracts.js +71 -0
  69. package/src/diagnostics.js +23 -0
  70. package/src/ipc/registerAgentIpc.js +12 -0
  71. package/src/ipc/registerAppIpc.js +20 -0
  72. package/src/ipc/registerTerminalIpc.js +50 -0
  73. package/src/ipc/registerTmuxIpc.js +30 -0
  74. package/src/ipc/registerWorkspaceIpc.js +14 -0
  75. package/src/monitorWorker.js +273 -0
  76. package/src/processMonitor.js +394 -0
  77. package/src/providerRegistry.js +120 -0
  78. package/src/terminalManager.js +438 -0
  79. package/src/tmuxController.js +183 -0
  80. package/src/tmuxMonitor.js +432 -0
  81. package/src/updateManager.js +339 -0
  82. package/src/workspaceStore.js +77 -0
@@ -0,0 +1,778 @@
1
+ /*
2
+ * Responsive agent workflows
3
+ * --------------------------
4
+ * Agent maps, routed workflows, collaboration detail, and live topology.
5
+ * Breakpoints are ordered wide-to-narrow, followed by height and motion rules.
6
+ */
7
+
8
+ /* Wide screens ≥ 1900px: expand workflow columns and downstream lanes into the available canvas. */
9
+ @media (min-width:1900px) {
10
+ .agent-workflow-grid {
11
+ grid-template-columns: minmax(190px,.55fr) minmax(360px,1fr) minmax(700px,1.9fr);
12
+ }
13
+
14
+ .downstream-stack.density-many {
15
+ grid-template-columns: repeat(3,minmax(0,1fr));
16
+ }
17
+
18
+ .completed-subagent-list {
19
+ grid-template-columns: repeat(3,minmax(0,1fr));
20
+ }
21
+ }
22
+
23
+ /* Wide screens ≥ 1401px: expand workflow columns and downstream lanes into the available canvas. */
24
+ @media (min-width:1401px) {
25
+ .agent-workflow-grid {
26
+ grid-template-columns: minmax(170px,.55fr) minmax(320px,1fr) minmax(360px,1.35fr);
27
+ gap: clamp(24px,2vw,42px);
28
+ }
29
+
30
+ .downstream-column {
31
+ grid-column: auto;
32
+ }
33
+
34
+ .upstream-column .agent-workflow-port.output {
35
+ right: -7px;
36
+ left: auto;
37
+ top: 50%;
38
+ bottom: auto;
39
+ transform: translate(50%,-50%);
40
+ }
41
+
42
+ .agent-workflow-selected>.agent-workflow-port.input {
43
+ left: -7px;
44
+ top: 38px;
45
+ bottom: auto;
46
+ transform: translate(-50%,-50%);
47
+ }
48
+
49
+ .downstream-column>.agent-workflow-port.group-input {
50
+ left: -7px;
51
+ top: 96px;
52
+ bottom: auto;
53
+ transform: translate(-50%,-50%);
54
+ }
55
+ }
56
+
57
+ /* Compact screens ≤ 1500px: tighten workflow columns and connector gutters. */
58
+ @media (max-width:1500px) {
59
+ .agent-command-actions {
60
+ flex-wrap: wrap;
61
+ }
62
+
63
+ .agent-command-actions>small {
64
+ flex: 1 0 100%;
65
+ }
66
+ }
67
+
68
+ /* Intermediate width 901–1450px: use a two-stage graph route before the single-column collapse. */
69
+ @media (max-width:1450px) and (min-width:901px) {
70
+ .downstream-column .agent-workflow-stack {
71
+ grid-template-columns: repeat(2,minmax(0,1fr));
72
+ }
73
+
74
+ .agent-workflow-selected .agent-workflow-port.input {
75
+ left: -7px;
76
+ top: 50%;
77
+ transform: translate(-50%,-50%);
78
+ }
79
+
80
+ .agent-workflow-selected .agent-workflow-port.output {
81
+ right: auto;
82
+ left: 50%;
83
+ top: auto;
84
+ bottom: -7px;
85
+ transform: translate(-50%,50%);
86
+ }
87
+
88
+ .agent-workflow-canvas {
89
+ padding: 20px 24px;
90
+ }
91
+
92
+ .agent-workflow-grid {
93
+ grid-template-columns: minmax(190px,.62fr) minmax(330px,1.38fr);
94
+ gap: 46px;
95
+ }
96
+
97
+ .agent-workflow-selected {
98
+ max-width: 350px;
99
+ }
100
+
101
+ .upstream-column .agent-workflow-port.output {
102
+ right: -7px;
103
+ left: auto;
104
+ top: 50%;
105
+ bottom: auto;
106
+ transform: translate(50%,-50%);
107
+ }
108
+
109
+ .agent-workflow-selected>.agent-workflow-port.input {
110
+ left: -7px;
111
+ top: 38px;
112
+ transform: translate(-50%,-50%);
113
+ }
114
+
115
+ .agent-workflow-selected>.agent-workflow-port.output {
116
+ right: auto;
117
+ left: 50%;
118
+ top: auto;
119
+ bottom: -7px;
120
+ transform: translate(-50%,50%);
121
+ }
122
+
123
+ .downstream-column {
124
+ grid-column: 1/-1;
125
+ }
126
+
127
+ .downstream-column .agent-workflow-port.input {
128
+ left: 50%;
129
+ top: -7px;
130
+ transform: translate(-50%,-50%);
131
+ }
132
+
133
+ .downstream-column>.agent-workflow-port.group-input {
134
+ left: 50%;
135
+ top: -7px;
136
+ transform: translate(-50%,-50%);
137
+ }
138
+ }
139
+
140
+ /* Compact screens ≤ 1450px: tighten workflow columns and connector gutters. */
141
+ @media (max-width:1450px) {
142
+ .workflow-metric-grid {
143
+ grid-template-columns: repeat(2,minmax(0,1fr));
144
+ }
145
+
146
+ .agent-communication-event {
147
+ grid-template-columns: minmax(140px,180px) minmax(0,1fr) auto;
148
+ }
149
+
150
+ .subagent-filterbar {
151
+ grid-template-columns: minmax(0,1fr) minmax(150px,220px) minmax(105px,130px);
152
+ }
153
+
154
+ .subagent-filter-result {
155
+ grid-column: 1/-1;
156
+ text-align: right;
157
+ }
158
+ }
159
+
160
+ /* Compact screens ≤ 1400px: tighten workflow columns and connector gutters. */
161
+ @media (max-width:1400px) {
162
+ .agent-flow-overview {
163
+ grid-template-columns: repeat(2,minmax(0,1fr));
164
+ }
165
+ }
166
+
167
+ /* Intermediate width 901–1400px: use a two-stage graph route before the single-column collapse. */
168
+ @media (max-width:1400px) and (min-width:901px) {
169
+ .agent-workflow-selected-stack>.agent-workflow-port.output {
170
+ right: auto;
171
+ left: 50%;
172
+ top: auto;
173
+ bottom: -7px;
174
+ transform: translate(-50%,50%);
175
+ }
176
+ }
177
+
178
+ /* Compact screens ≤ 1300px: tighten workflow columns and connector gutters. */
179
+ @media (max-width:1300px) {
180
+ .agent-workflow-column>header {
181
+ min-height: 0;
182
+ margin-bottom: 9px;
183
+ }
184
+ }
185
+
186
+ /* Compact screens ≤ 1280px: move graph branches into compact rows without collisions. */
187
+ @media (max-width:1280px) {
188
+ .agent-forest {
189
+ grid-template-columns: 1fr;
190
+ }
191
+
192
+ .agent-tree {
193
+ grid-template-columns: minmax(310px,390px) 56px minmax(310px,1fr);
194
+ }
195
+
196
+ .focus-relation {
197
+ min-width: 310px;
198
+ }
199
+
200
+ .agent-task {
201
+ font-size: 16px;
202
+ }
203
+ }
204
+
205
+ /* Compact screens ≤ 1260px: move graph branches into compact rows without collisions. */
206
+ @media (max-width:1260px) {
207
+ .provider-overview {
208
+ grid-template-columns: repeat(2,1fr);
209
+ }
210
+
211
+ .global-stats {
212
+ grid-template-columns: repeat(3,1fr);
213
+ }
214
+
215
+ .global-stat:nth-child(3) {
216
+ border-right: 0;
217
+ }
218
+ }
219
+
220
+ /* Compact screens ≤ 1120px: move graph branches into compact rows without collisions. */
221
+ @media (max-width:1120px) {
222
+ .live-session-grid {
223
+ grid-template-columns: 1fr;
224
+ }
225
+
226
+ .live-section-head {
227
+ align-items: flex-start;
228
+ }
229
+
230
+ .live-section-head>p {
231
+ display: none;
232
+ }
233
+ }
234
+
235
+ /* Compact screens ≤ 1050px: move graph branches into compact rows without collisions. */
236
+ @media (max-width:1050px) {
237
+ .agent-focus-layout {
238
+ grid-template-columns: 1fr;
239
+ }
240
+
241
+ .agent-relation-rail {
242
+ grid-template-columns: repeat(2,minmax(0,1fr));
243
+ }
244
+
245
+ .agent-flow-overview {
246
+ grid-template-columns: 1fr 1fr;
247
+ }
248
+ }
249
+
250
+ /* Compact screens ≤ 980px: move graph branches into compact rows without collisions. */
251
+ @media (max-width:980px) {
252
+ .agent-tree {
253
+ display: block;
254
+ }
255
+
256
+ .tree-connector {
257
+ width: 1px;
258
+ height: 36px;
259
+ margin: auto;
260
+ background: #34495a;
261
+ }
262
+
263
+ .tree-connector:before {
264
+ display: none;
265
+ }
266
+
267
+ .tree-connector i {
268
+ display: none;
269
+ }
270
+
271
+ .tree-children {
272
+ margin-top: 0;
273
+ }
274
+
275
+ .tree-children:before {
276
+ left: 16px;
277
+ top: -36px;
278
+ bottom: 50%;
279
+ }
280
+
281
+ .tree-child {
282
+ padding-left: 34px;
283
+ }
284
+
285
+ .tree-child:before {
286
+ left: 16px;
287
+ width: 18px;
288
+ }
289
+
290
+ .focused-agent-path {
291
+ justify-content: flex-start;
292
+ }
293
+
294
+ .live-section {
295
+ padding: 16px;
296
+ }
297
+
298
+ .agent-map-toolbar {
299
+ align-items: flex-start;
300
+ }
301
+
302
+ .graph-breadcrumbs {
303
+ flex-wrap: wrap;
304
+ }
305
+
306
+ .provider-overview {
307
+ grid-template-columns: repeat(2,1fr);
308
+ }
309
+ }
310
+
311
+ /* Compact screens ≤ 900px: move graph branches into compact rows without collisions. */
312
+ @media (max-width:900px) {
313
+ .global-stats {
314
+ grid-template-columns: repeat(2,1fr);
315
+ }
316
+
317
+ .agent-workflow-port.input {
318
+ left: 50%;
319
+ top: -7px;
320
+ transform: translate(-50%,-50%);
321
+ }
322
+
323
+ .agent-workflow-port.output {
324
+ right: auto;
325
+ left: 50%;
326
+ top: auto;
327
+ bottom: -7px;
328
+ transform: translate(-50%,50%);
329
+ }
330
+
331
+ .agent-workflow-selected>.agent-workflow-port.output {
332
+ right: auto;
333
+ left: 50%;
334
+ top: auto;
335
+ bottom: -7px;
336
+ transform: translate(-50%,50%);
337
+ }
338
+
339
+ .workflow-summary-evidence {
340
+ align-items: flex-start;
341
+ flex-direction: column;
342
+ }
343
+
344
+ .agent-communication-event {
345
+ grid-template-columns: 1fr auto;
346
+ gap: 6px;
347
+ }
348
+
349
+ .communication-route {
350
+ grid-column: 1;
351
+ }
352
+
353
+ .communication-copy {
354
+ grid-column: 1/-1;
355
+ }
356
+
357
+ .agent-communication-event time {
358
+ grid-column: 2;
359
+ grid-row: 1;
360
+ }
361
+
362
+ .downstream-stack .agent-flow-row.child-session {
363
+ min-height: 132px;
364
+ }
365
+
366
+ .subagent-filterbar {
367
+ grid-template-columns: 1fr 120px;
368
+ }
369
+
370
+ .subagent-status-filters {
371
+ grid-column: 1/-1;
372
+ }
373
+
374
+ .subagent-filter-result {
375
+ grid-column: 1/-1;
376
+ }
377
+
378
+ .subagent-conversation-summary {
379
+ grid-template-columns: 1fr;
380
+ }
381
+
382
+ .subagent-dialog-list .chat-row.assistant {
383
+ padding-left: 0;
384
+ padding-right: 0;
385
+ }
386
+
387
+ .subagent-dialog-list .chat-row.user {
388
+ padding-left: 0;
389
+ padding-right: 0;
390
+ }
391
+
392
+ .completed-subagent-list {
393
+ grid-template-columns: 1fr;
394
+ }
395
+
396
+ .completed-subagent-disclosure>button {
397
+ grid-template-columns: 30px minmax(0,1fr);
398
+ }
399
+
400
+ .completed-subagent-disclosure button>i {
401
+ grid-column: 2;
402
+ }
403
+
404
+ .agent-node-top {
405
+ flex-wrap: wrap;
406
+ }
407
+
408
+ .agent-node-top .execution-mode-badge {
409
+ order: 3;
410
+ margin-left: 51px;
411
+ }
412
+
413
+ .agent-workflow-canvas {
414
+ padding: 18px;
415
+ overflow: hidden;
416
+ }
417
+
418
+ .agent-workflow-grid {
419
+ grid-template-columns: minmax(0,1fr);
420
+ gap: 56px;
421
+ }
422
+
423
+ .agent-workflow-column>header {
424
+ min-height: 0;
425
+ margin-bottom: 10px;
426
+ text-align: center;
427
+ }
428
+
429
+ .agent-workflow-selected-stack {
430
+ margin: auto;
431
+ width: min(620px,100%);
432
+ margin-inline: auto;
433
+ }
434
+
435
+ .agent-workflow-selected {
436
+ margin: auto;
437
+ width: min(520px,100%);
438
+ max-width: none;
439
+ margin-inline: auto;
440
+ }
441
+
442
+ .upstream-column .agent-workflow-stack {
443
+ margin: auto;
444
+ width: min(520px,100%);
445
+ margin-inline: auto;
446
+ }
447
+
448
+ .downstream-column {
449
+ grid-column: 1;
450
+ min-width: 0;
451
+ }
452
+
453
+ .downstream-column .agent-workflow-stack {
454
+ grid-template-columns: repeat(2,minmax(0,1fr));
455
+ }
456
+
457
+ .upstream-column .agent-workflow-port.output {
458
+ right: auto;
459
+ left: 50%;
460
+ top: auto;
461
+ bottom: -7px;
462
+ transform: translate(-50%,50%);
463
+ }
464
+
465
+ .agent-workflow-selected>.agent-workflow-port.input {
466
+ left: 50%;
467
+ top: -7px;
468
+ bottom: auto;
469
+ transform: translate(-50%,-50%);
470
+ }
471
+
472
+ .agent-workflow-selected-stack>.agent-workflow-port.output {
473
+ right: auto;
474
+ left: 50%;
475
+ top: auto;
476
+ bottom: -7px;
477
+ transform: translate(-50%,50%);
478
+ }
479
+
480
+ .downstream-column>.agent-workflow-port.group-input {
481
+ left: 50%;
482
+ top: -7px;
483
+ bottom: auto;
484
+ transform: translate(-50%,-50%);
485
+ }
486
+ }
487
+
488
+ /* Compact screens ≤ 720px: stack relationship cards and route connectors vertically. */
489
+ @media (max-width:720px) {
490
+ .agent-flow-provider small {
491
+ display: none;
492
+ }
493
+
494
+ .agent-focus-layout {
495
+ display: block;
496
+ }
497
+
498
+ .agent-command-target {
499
+ grid-template-columns: 1fr;
500
+ }
501
+
502
+ .agent-command-actions button {
503
+ flex: 1;
504
+ }
505
+
506
+ .agent-command-actions>small {
507
+ flex-basis: 100%;
508
+ }
509
+
510
+ .downstream-stack.density-many {
511
+ grid-template-columns: 1fr;
512
+ }
513
+
514
+ .agent-workflow-summary {
515
+ margin-bottom: 8px;
516
+ }
517
+
518
+ .workflow-summary-chip b {
519
+ display: none;
520
+ }
521
+
522
+ .nav-icon.live-dot {
523
+ width: 8px;
524
+ height: 8px;
525
+ margin: 6px auto 7px;
526
+ }
527
+
528
+ .global-stats {
529
+ grid-template-columns: repeat(2,minmax(0,1fr));
530
+ }
531
+
532
+ .global-stat {
533
+ min-width: 0;
534
+ padding: 13px 12px;
535
+ border-right: 1px solid var(--line-soft);
536
+ border-bottom: 1px solid var(--line-soft);
537
+ }
538
+
539
+ .global-stat:nth-child(2n) {
540
+ border-right: 0;
541
+ }
542
+
543
+ .global-stat:last-child {
544
+ grid-column: 1/-1;
545
+ border-right: 0;
546
+ border-bottom: 0;
547
+ }
548
+
549
+ .provider-overview {
550
+ grid-template-columns: 1fr;
551
+ }
552
+
553
+ .session-card.subagent {
554
+ margin-left: 0;
555
+ }
556
+
557
+ .live-section {
558
+ padding: 13px;
559
+ border-radius: 15px;
560
+ }
561
+
562
+ .live-section-head {
563
+ gap: 14px;
564
+ }
565
+
566
+ .live-section-head>div {
567
+ min-width: 0;
568
+ align-items: flex-start;
569
+ }
570
+
571
+ .agent-node {
572
+ max-width: 100%;
573
+ min-width: 0;
574
+ }
575
+
576
+ .agent-flow-row {
577
+ max-width: 100%;
578
+ min-width: 0;
579
+ }
580
+
581
+ .agent-flow-overview {
582
+ grid-template-columns: 1fr;
583
+ }
584
+
585
+ .agent-relation-rail {
586
+ margin-top: 12px;
587
+ grid-template-columns: 1fr;
588
+ }
589
+
590
+ .workflow-metric-grid {
591
+ grid-template-columns: 1fr;
592
+ }
593
+
594
+ .focus-relation {
595
+ width: 100%;
596
+ min-width: 0;
597
+ }
598
+
599
+ .agent-workflow-canvas {
600
+ max-width: 100%;
601
+ overflow: hidden;
602
+ padding: 11px;
603
+ }
604
+
605
+ .agent-workflow-grid {
606
+ gap: 50px;
607
+ }
608
+
609
+ .agent-workflow-selected-stack {
610
+ width: 100%;
611
+ }
612
+
613
+ .downstream-column .agent-workflow-stack {
614
+ grid-template-columns: 1fr;
615
+ }
616
+
617
+ .global-stat span {
618
+ font-size: 10px;
619
+ }
620
+
621
+ .global-stat em {
622
+ font-size: 10px;
623
+ }
624
+
625
+ .global-stat strong {
626
+ font-size: 23px;
627
+ }
628
+
629
+ .provider-overview-card {
630
+ min-height: 124px;
631
+ }
632
+ }
633
+
634
+ /* Compact screens ≤ 640px: stack relationship cards and route connectors vertically. */
635
+ @media (max-width:640px) {
636
+ .global-stat {
637
+ border-right: 0;
638
+ border-bottom: 1px solid var(--line-soft);
639
+ }
640
+
641
+ .live-section-head h2 {
642
+ font-size: 19px;
643
+ }
644
+
645
+ .agent-node-main {
646
+ padding: 15px;
647
+ }
648
+
649
+ .agent-task {
650
+ font-size: 16px;
651
+ }
652
+
653
+ .agent-node-metrics {
654
+ grid-template-columns: repeat(2,1fr);
655
+ }
656
+
657
+ .agent-node-metrics>span:last-child {
658
+ display: none;
659
+ }
660
+
661
+ .agent-node-footer {
662
+ padding: 0 14px;
663
+ }
664
+
665
+ .global-stats {
666
+ grid-template-columns: repeat(2,1fr);
667
+ }
668
+
669
+ .provider-overview {
670
+ grid-template-columns: 1fr;
671
+ }
672
+
673
+ .focused-agent-path {
674
+ padding: 12px;
675
+ }
676
+
677
+ .focus-relation {
678
+ min-width: 280px;
679
+ width: 82vw;
680
+ }
681
+
682
+ .memory-candidate header {
683
+ flex-wrap: wrap;
684
+ }
685
+
686
+ .memory-category {
687
+ margin-left: 0;
688
+ }
689
+
690
+ .agent-forest {
691
+ grid-template-columns: 1fr;
692
+ }
693
+ }
694
+
695
+ /* Compact screens ≤ 520px: compress graph summaries while preserving task identity. */
696
+ @media (max-width:520px) {
697
+ .agent-workflow-selected .agent-node-main {
698
+ padding: 13px 12px;
699
+ }
700
+
701
+ .agent-node-top {
702
+ display: grid;
703
+ grid-template-columns: 40px minmax(0,1fr) auto;
704
+ grid-template-rows: auto auto;
705
+ align-items: center;
706
+ column-gap: 9px;
707
+ row-gap: 6px;
708
+ }
709
+
710
+ .agent-node-top .provider-mark {
711
+ grid-column: 1;
712
+ grid-row: 1/3;
713
+ width: 40px;
714
+ height: 40px;
715
+ }
716
+
717
+ .agent-node-top .agent-identity {
718
+ grid-column: 2;
719
+ grid-row: 1;
720
+ }
721
+
722
+ .agent-node-top .status-pill {
723
+ grid-column: 3;
724
+ grid-row: 1;
725
+ margin: 0;
726
+ justify-self: end;
727
+ }
728
+
729
+ .agent-node-top .execution-mode-badge {
730
+ grid-column: 2/4;
731
+ grid-row: 2;
732
+ order: initial;
733
+ margin: 0;
734
+ justify-self: start;
735
+ }
736
+
737
+ .agent-identity b {
738
+ font-size: 12px;
739
+ }
740
+ }
741
+
742
+ /* Compact screens ≤ 420px: compress graph summaries while preserving task identity. */
743
+ @media (max-width:420px) {
744
+ .global-stat strong {
745
+ font-size: 20px;
746
+ }
747
+
748
+ .poc-metrics {
749
+ gap: 2px;
750
+ }
751
+
752
+ .poc-metrics div {
753
+ padding-right: 3px;
754
+ }
755
+
756
+ .live-section {
757
+ padding: 10px;
758
+ }
759
+
760
+ .graph-breadcrumbs button.current {
761
+ max-width: calc(100vw - 168px);
762
+ }
763
+
764
+ .agent-flow-copy b {
765
+ display: -webkit-box;
766
+ white-space: normal;
767
+ -webkit-box-orient: vertical;
768
+ -webkit-line-clamp: 2;
769
+ line-height: 1.4;
770
+ }
771
+ }
772
+
773
+ /* Reduced motion: preserve state changes while removing decorative movement. */
774
+ @media (prefers-reduced-motion:reduce) {
775
+ .live-beacon {
776
+ animation: none!important;
777
+ }
778
+ }