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,1241 @@
1
+ /*
2
+ * Terminal workspaces
3
+ * -------------------
4
+ * Local PTY sessions, tmux topology, terminal controls, and command history.
5
+ */
6
+
7
+ .terminal-section-head {
8
+ display: flex;
9
+ align-items: center;
10
+ justify-content: space-between;
11
+ gap: 24px;
12
+ margin-bottom: 14px;
13
+ }
14
+
15
+ .terminal-section-head>div:first-child {
16
+ display: flex;
17
+ align-items: center;
18
+ gap: 13px;
19
+ }
20
+
21
+ .terminal-section-head h2 {
22
+ margin: 0;
23
+ font-size: 24px;
24
+ letter-spacing: -.035em;
25
+ }
26
+
27
+ .terminal-section-head .eyebrow {
28
+ margin-bottom: 5px;
29
+ color: #59ddb2;
30
+ }
31
+
32
+ .terminal-logo {
33
+ width: 48px;
34
+ height: 48px;
35
+ display: grid;
36
+ place-items: center;
37
+ border: 1px solid rgba(89,221,178,.35);
38
+ border-radius: 13px;
39
+ background: rgba(61,205,159,.08);
40
+ color: #65e5ba;
41
+ font-family: "Cascadia Code",Consolas,monospace;
42
+ font-size: 15px;
43
+ font-weight: 700;
44
+ box-shadow: 0 0 28px rgba(61,205,159,.09);
45
+ }
46
+
47
+ .terminal-create-actions {
48
+ display: flex;
49
+ align-items: center;
50
+ gap: 8px;
51
+ }
52
+
53
+ .terminal-create-actions button:hover {
54
+ border-color: #416858;
55
+ background: #15231f;
56
+ color: #e8f6f0;
57
+ }
58
+
59
+ .terminal-controlbar button:hover {
60
+ border-color: #416858;
61
+ background: #15231f;
62
+ color: #e8f6f0;
63
+ }
64
+
65
+ .terminal-resource-head button:hover {
66
+ border-color: #416858;
67
+ background: #15231f;
68
+ color: #e8f6f0;
69
+ }
70
+
71
+ .terminal-create-actions button.accent {
72
+ border-color: #337a64;
73
+ background: #174133;
74
+ color: #8df0ca;
75
+ }
76
+
77
+ .terminal-create-actions button.accent:hover {
78
+ background: #1b4d3c;
79
+ }
80
+
81
+ .terminal-controlbar button:disabled {
82
+ opacity: .38;
83
+ cursor: not-allowed;
84
+ }
85
+
86
+ .terminal-key-actions button:disabled {
87
+ opacity: .38;
88
+ cursor: not-allowed;
89
+ }
90
+
91
+ .terminal-session-item>span:nth-child(2) {
92
+ min-width: 0;
93
+ flex: 1;
94
+ }
95
+
96
+ .terminal-session-item>i.live {
97
+ background: #5ce2a9;
98
+ box-shadow: 0 0 8px rgba(92,226,169,.55);
99
+ }
100
+
101
+ .terminal-tabs-row {
102
+ min-height: 47px;
103
+ display: flex;
104
+ align-items: stretch;
105
+ justify-content: space-between;
106
+ border-bottom: 1px solid #192630;
107
+ background: #0c1219;
108
+ }
109
+
110
+ .terminal-tabs {
111
+ min-width: 0;
112
+ display: flex;
113
+ align-items: stretch;
114
+ overflow-x: auto;
115
+ }
116
+
117
+ .terminal-tab {
118
+ min-width: 145px;
119
+ max-width: 230px;
120
+ display: grid;
121
+ grid-template-columns: 7px minmax(0,1fr);
122
+ grid-template-rows: 1fr 1fr;
123
+ column-gap: 7px;
124
+ padding: 8px 12px;
125
+ border: 0;
126
+ border-right: 1px solid #192630;
127
+ background: transparent;
128
+ color: #758497;
129
+ text-align: left;
130
+ cursor: pointer;
131
+ }
132
+
133
+ .terminal-tab:hover {
134
+ background: #101922;
135
+ color: #b7c3ce;
136
+ }
137
+
138
+ .terminal-tab.active {
139
+ background: #111b24;
140
+ color: #e1ebe9;
141
+ box-shadow: inset 0 -2px #53dbae;
142
+ }
143
+
144
+ .terminal-tab>i {
145
+ grid-row: 1/3;
146
+ align-self: center;
147
+ width: 6px;
148
+ height: 6px;
149
+ border-radius: 50%;
150
+ background: #475462;
151
+ }
152
+
153
+ .terminal-tab>i.live {
154
+ background: #58e2a8;
155
+ }
156
+
157
+ .terminal-key-actions button:last-child {
158
+ border-color: #613846;
159
+ color: #e7a0aa;
160
+ }
161
+
162
+ .terminal-key-actions button:last-child:hover {
163
+ background: #311922;
164
+ }
165
+
166
+ .terminal-history-panel.collapsed {
167
+ width: 52px;
168
+ grid-template-rows: auto 1fr;
169
+ }
170
+
171
+ .terminal-history-panel.collapsed .terminal-history-head>div {
172
+ display: none;
173
+ }
174
+
175
+ .terminal-history-panel.collapsed .terminal-history-list {
176
+ display: none;
177
+ }
178
+
179
+ .terminal-history-panel.collapsed footer {
180
+ display: none;
181
+ }
182
+
183
+ .terminal-history-head>div {
184
+ min-width: 0;
185
+ }
186
+
187
+ .terminal-history-head button {
188
+ width: 31px;
189
+ height: 31px;
190
+ flex: 0 0 auto;
191
+ border: 1px solid #29463f;
192
+ border-radius: 9px;
193
+ background: #10201e;
194
+ color: #73dfb9;
195
+ cursor: pointer;
196
+ }
197
+
198
+ .terminal-history-message.user {
199
+ border-color: #294c43;
200
+ background: #10211e;
201
+ }
202
+
203
+ .terminal-history-message.assistant {
204
+ border-color: #203b4a;
205
+ background: #0e1c25;
206
+ }
207
+
208
+ .terminal-history-message.tool {
209
+ opacity: .8;
210
+ }
211
+
212
+ .terminal-history-message.system {
213
+ opacity: .8;
214
+ }
215
+
216
+ .terminal-history-message header {
217
+ display: flex;
218
+ align-items: center;
219
+ justify-content: space-between;
220
+ gap: 8px;
221
+ }
222
+
223
+ .terminal-history-message header time {
224
+ color: #536678;
225
+ font-size: 8px;
226
+ }
227
+
228
+ .terminal-history-empty {
229
+ height: 100%;
230
+ display: flex;
231
+ flex-direction: column;
232
+ align-items: center;
233
+ justify-content: center;
234
+ padding: 20px;
235
+ text-align: center;
236
+ }
237
+
238
+ .terminal-history-empty b {
239
+ color: #a9b8c4;
240
+ font-size: 11px;
241
+ }
242
+
243
+ .terminal-history-empty span {
244
+ margin-top: 6px;
245
+ color: #607183;
246
+ font-size: 9px;
247
+ }
248
+
249
+ .terminal-screen .xterm-viewport {
250
+ background: transparent!important;
251
+ scrollbar-color: #29413c transparent;
252
+ }
253
+
254
+ .terminal-empty {
255
+ position: absolute;
256
+ inset: 0;
257
+ display: flex;
258
+ flex-direction: column;
259
+ align-items: center;
260
+ justify-content: center;
261
+ text-align: center;
262
+ }
263
+
264
+ .terminal-command-form textarea:disabled {
265
+ opacity: .45;
266
+ }
267
+
268
+ .terminal-command-form button:disabled {
269
+ opacity: .38;
270
+ cursor: not-allowed;
271
+ }
272
+
273
+ .terminal-notice[data-tone="success"] {
274
+ color: #64dba9;
275
+ }
276
+
277
+ .terminal-notice[data-tone="error"] {
278
+ color: #f08b99;
279
+ }
280
+
281
+ .terminal-modal {
282
+ max-width: 620px;
283
+ }
284
+
285
+ .terminal-create-actions button {
286
+ height: 34px;
287
+ padding: 0 11px;
288
+ border: 1px solid #2a3b49;
289
+ border-radius: 9px;
290
+ background: #111a24;
291
+ color: #aebbc8;
292
+ font-weight: 650;
293
+ cursor: pointer;
294
+ font-size: 11px;
295
+ }
296
+
297
+ .terminal-controlbar button {
298
+ height: 34px;
299
+ padding: 0 11px;
300
+ border: 1px solid #2a3b49;
301
+ border-radius: 9px;
302
+ background: #111a24;
303
+ color: #aebbc8;
304
+ font-weight: 650;
305
+ cursor: pointer;
306
+ font-size: 11px;
307
+ }
308
+
309
+ .terminal-resource-head button {
310
+ width: 28px;
311
+ height: 34px;
312
+ padding: 0 11px;
313
+ border: 1px solid #2a3b49;
314
+ border-radius: 9px;
315
+ background: #111a24;
316
+ color: #aebbc8;
317
+ font-weight: 650;
318
+ cursor: pointer;
319
+ font-size: 11px;
320
+ }
321
+
322
+ .terminal-resource-head>div b {
323
+ display: block;
324
+ color: #d5e0e9;
325
+ font-size: 12px;
326
+ }
327
+
328
+ .terminal-resource-head>div span {
329
+ display: block;
330
+ margin-top: 3px;
331
+ color: #667689;
332
+ font-size: 11px;
333
+ }
334
+
335
+ .terminal-tab span {
336
+ overflow: hidden;
337
+ text-overflow: ellipsis;
338
+ white-space: nowrap;
339
+ font-weight: 650;
340
+ font-size: 12px;
341
+ }
342
+
343
+ .terminal-tab small {
344
+ overflow: hidden;
345
+ text-overflow: ellipsis;
346
+ white-space: nowrap;
347
+ color: #667688;
348
+ font-size: 11px;
349
+ }
350
+
351
+ .terminal-command-form label {
352
+ color: #70d5b1;
353
+ font-weight: 700;
354
+ font-size: 11px;
355
+ }
356
+
357
+ .terminal-history-panel.collapsed .terminal-history-head {
358
+ justify-content: center;
359
+ padding: 10px;
360
+ }
361
+
362
+ #terminalSection .terminal-section-head {
363
+ margin-bottom: 16px;
364
+ }
365
+
366
+ #terminalSection .terminal-layout {
367
+ height: clamp(520px,calc(100vh - 238px),780px);
368
+ min-height: 520px;
369
+ grid-template-columns: 270px minmax(0,1fr);
370
+ border-color: #263945;
371
+ box-shadow: 0 24px 80px rgba(0,0,0,.3),0 0 0 1px rgba(90,218,255,.025);
372
+ }
373
+
374
+ .terminal-resource-panel {
375
+ min-width: 0;
376
+ border-right: 1px solid #1c2a34;
377
+ display: grid;
378
+ grid-template-rows: auto minmax(0,1fr) auto;
379
+ padding: 0;
380
+ background: linear-gradient(180deg,#0e1821,#091018 64%,#091016);
381
+ overflow: hidden;
382
+ }
383
+
384
+ .terminal-resource-head {
385
+ display: flex;
386
+ align-items: center;
387
+ justify-content: space-between;
388
+ gap: 8px;
389
+ min-height: 66px;
390
+ padding: 12px 14px;
391
+ border-bottom: 1px solid #1d2d38;
392
+ }
393
+
394
+ .terminal-resource-live {
395
+ display: flex;
396
+ align-items: center;
397
+ gap: 5px;
398
+ color: #5fdcaf;
399
+ font-size: 9px;
400
+ font-weight: 800;
401
+ letter-spacing: .08em;
402
+ }
403
+
404
+ .terminal-resource-live i {
405
+ width: 6px;
406
+ height: 6px;
407
+ border-radius: 50%;
408
+ background: #5ce2a9;
409
+ box-shadow: 0 0 9px rgba(92,226,169,.55);
410
+ }
411
+
412
+ .terminal-session-list {
413
+ display: grid;
414
+ align-content: start;
415
+ gap: 7px;
416
+ min-height: 0;
417
+ padding: 10px;
418
+ overflow: auto;
419
+ scrollbar-color: #2a4248 transparent;
420
+ }
421
+
422
+ .terminal-session-row {
423
+ display: grid;
424
+ grid-template-columns: minmax(0,1fr) 26px;
425
+ align-items: stretch;
426
+ gap: 4px;
427
+ }
428
+
429
+ .terminal-reorder-actions {
430
+ display: grid;
431
+ gap: 4px;
432
+ }
433
+
434
+ .terminal-reorder-actions button {
435
+ min-width: 26px;
436
+ padding: 0;
437
+ border: 1px solid #243946;
438
+ border-radius: 7px;
439
+ background: #101a24;
440
+ color: #7f91a3;
441
+ cursor: pointer;
442
+ }
443
+
444
+ .terminal-reorder-actions button:hover:not(:disabled),
445
+ .terminal-reorder-actions button:focus-visible {
446
+ border-color: #397766;
447
+ color: #70e6bd;
448
+ }
449
+
450
+ .terminal-reorder-actions button:disabled {
451
+ opacity: .3;
452
+ cursor: default;
453
+ }
454
+
455
+ .terminal-session-item:hover {
456
+ transform: translateX(3px);
457
+ border-color: #273d48;
458
+ background: #101c25;
459
+ }
460
+
461
+ .terminal-session-item.active {
462
+ color: #edf8f4;
463
+ border-color: #397766;
464
+ background: linear-gradient(100deg,rgba(66,207,164,.16),rgba(19,31,39,.96));
465
+ box-shadow: inset 3px 0 #52d7aa,0 10px 26px rgba(0,0,0,.16);
466
+ transform: none!important;
467
+ }
468
+
469
+ .terminal-session-icon {
470
+ display: grid;
471
+ place-items: center;
472
+ flex: 0 0 auto;
473
+ font-family: "Cascadia Code",Consolas,monospace;
474
+ font-weight: 800;
475
+ width: 38px;
476
+ height: 38px;
477
+ border: 1px solid #243946;
478
+ border-radius: 10px;
479
+ background: #14232e;
480
+ color: #75d9ee;
481
+ font-size: 9px;
482
+ }
483
+
484
+ .terminal-session-item.active .terminal-session-icon {
485
+ border-color: #37675b;
486
+ background: #17342f;
487
+ color: #70e6bd;
488
+ }
489
+
490
+ .terminal-session-item b {
491
+ display: block;
492
+ overflow: hidden;
493
+ text-overflow: ellipsis;
494
+ white-space: nowrap;
495
+ color: #dbe6ed;
496
+ font-size: 12px;
497
+ }
498
+
499
+ .terminal-session-item small {
500
+ display: block;
501
+ overflow: hidden;
502
+ text-overflow: ellipsis;
503
+ white-space: nowrap;
504
+ margin-top: 4px;
505
+ color: #7e8ea0;
506
+ font-size: 10px;
507
+ }
508
+
509
+ .terminal-session-item em {
510
+ display: block;
511
+ overflow: hidden;
512
+ text-overflow: ellipsis;
513
+ white-space: nowrap;
514
+ margin-top: 4px;
515
+ color: #506274;
516
+ font-family: "Cascadia Code",Consolas,monospace;
517
+ font-size: 9px;
518
+ font-style: normal;
519
+ }
520
+
521
+ .terminal-session-item>i {
522
+ border-radius: 50%;
523
+ background: #475462;
524
+ align-self: center;
525
+ width: 7px;
526
+ height: 7px;
527
+ }
528
+
529
+ .terminal-resource-empty {
530
+ color: #58687a;
531
+ font-size: 9px;
532
+ line-height: 1.5;
533
+ margin: 4px;
534
+ padding: 22px 12px;
535
+ border: 1px dashed #253541;
536
+ border-radius: 11px;
537
+ text-align: center;
538
+ }
539
+
540
+ .terminal-resource-tip {
541
+ display: grid;
542
+ grid-template-columns: 28px minmax(0,1fr);
543
+ gap: 9px;
544
+ margin: 10px;
545
+ padding: 11px;
546
+ border: 1px solid #20343b;
547
+ border-radius: 11px;
548
+ background: rgba(26,49,50,.42);
549
+ }
550
+
551
+ .terminal-resource-tip>span {
552
+ width: 28px;
553
+ height: 28px;
554
+ display: grid;
555
+ place-items: center;
556
+ border-radius: 8px;
557
+ background: #13272a;
558
+ color: #69d9b4;
559
+ font-size: 12px;
560
+ }
561
+
562
+ .terminal-resource-tip p {
563
+ min-width: 0;
564
+ margin: 0;
565
+ }
566
+
567
+ .terminal-resource-tip b {
568
+ display: block;
569
+ color: #afc7c3;
570
+ font-size: 10px;
571
+ }
572
+
573
+ .terminal-resource-tip small {
574
+ display: block;
575
+ margin-top: 4px;
576
+ color: #647b7a;
577
+ font-size: 9px;
578
+ line-height: 1.45;
579
+ }
580
+
581
+ .terminal-workbench {
582
+ min-width: 0;
583
+ display: grid;
584
+ min-height: 0;
585
+ grid-template-rows: auto auto minmax(0,1fr);
586
+ background: radial-gradient(circle at 100% 0,rgba(50,157,139,.1),transparent 34%),#070c12;
587
+ }
588
+
589
+ .terminal-controlbar {
590
+ display: flex;
591
+ align-items: center;
592
+ justify-content: space-between;
593
+ gap: 18px;
594
+ border-bottom: 1px solid #18252e;
595
+ grid-row: 1;
596
+ min-height: 76px;
597
+ padding: 11px 14px;
598
+ border-bottom-color: #20313b;
599
+ background: linear-gradient(90deg,#0d171f,#0a1219);
600
+ }
601
+
602
+ .terminal-target-cluster {
603
+ min-width: 0;
604
+ display: flex;
605
+ align-items: center;
606
+ gap: 11px;
607
+ }
608
+
609
+ .terminal-target-icon {
610
+ width: 40px;
611
+ height: 40px;
612
+ display: grid;
613
+ place-items: center;
614
+ flex: 0 0 auto;
615
+ border: 1px solid #2d4f55;
616
+ border-radius: 11px;
617
+ background: #12272b;
618
+ color: #70dfbd;
619
+ font-family: "Cascadia Code",Consolas,monospace;
620
+ font-size: 10px;
621
+ font-weight: 800;
622
+ }
623
+
624
+ .terminal-target-meta {
625
+ min-width: 0;
626
+ }
627
+
628
+ .terminal-target-meta b {
629
+ display: block;
630
+ overflow: hidden;
631
+ text-overflow: ellipsis;
632
+ white-space: nowrap;
633
+ color: #dbe5ed;
634
+ font-size: 13px;
635
+ }
636
+
637
+ .terminal-target-meta span {
638
+ display: block;
639
+ overflow: hidden;
640
+ text-overflow: ellipsis;
641
+ white-space: nowrap;
642
+ font-family: "Cascadia Code",Consolas,monospace;
643
+ max-width: 640px;
644
+ margin-top: 5px;
645
+ color: #708294;
646
+ font-size: 10px;
647
+ }
648
+
649
+ .terminal-workspace-actions {
650
+ display: flex;
651
+ align-items: center;
652
+ justify-content: flex-end;
653
+ gap: 10px;
654
+ flex: 0 0 auto;
655
+ }
656
+
657
+ .terminal-connection-state {
658
+ flex: 0 0 auto;
659
+ min-height: 30px;
660
+ display: flex;
661
+ align-items: center;
662
+ gap: 7px;
663
+ padding: 0 10px;
664
+ border: 1px solid #2b3c48;
665
+ border-radius: 999px;
666
+ background: #101922;
667
+ color: #7e8c9b;
668
+ font-size: 10px;
669
+ font-weight: 700;
670
+ }
671
+
672
+ .terminal-connection-state i {
673
+ width: 7px;
674
+ height: 7px;
675
+ border-radius: 50%;
676
+ background: #566474;
677
+ }
678
+
679
+ .terminal-connection-state[data-status="running"] {
680
+ border-color: #2f5e51;
681
+ background: #11241f;
682
+ color: #76dfb9;
683
+ }
684
+
685
+ .terminal-connection-state[data-status="running"] i {
686
+ background: #5ce2a9;
687
+ box-shadow: 0 0 9px rgba(92,226,169,.55);
688
+ }
689
+
690
+ .terminal-connection-state[data-status="failed"] {
691
+ border-color: #5b3540;
692
+ background: #241319;
693
+ color: #ee9ba6;
694
+ }
695
+
696
+ .terminal-connection-state[data-status="exited"] {
697
+ border-color: #5b3540;
698
+ background: #241319;
699
+ color: #ee9ba6;
700
+ }
701
+
702
+ .terminal-connection-state[data-status="failed"] i {
703
+ background: #e87989;
704
+ }
705
+
706
+ .terminal-connection-state[data-status="exited"] i {
707
+ background: #e87989;
708
+ }
709
+
710
+ .terminal-key-actions {
711
+ display: flex;
712
+ align-items: center;
713
+ flex: 0 0 auto;
714
+ gap: 5px;
715
+ }
716
+
717
+ .terminal-controlbar .terminal-key-actions button {
718
+ height: 32px;
719
+ display: flex;
720
+ align-items: center;
721
+ gap: 6px;
722
+ padding: 0 9px;
723
+ border-color: #2a3b48;
724
+ background: #101922;
725
+ font-size: 10px;
726
+ }
727
+
728
+ .terminal-key-actions kbd {
729
+ padding: 2px 5px;
730
+ border: 1px solid #354754;
731
+ border-radius: 5px;
732
+ background: #0a1118;
733
+ color: #8292a2;
734
+ font-family: inherit;
735
+ font-size: 8px;
736
+ font-weight: 700;
737
+ }
738
+
739
+ .terminal-key-actions .terminal-danger-button {
740
+ border-color: #5b3540;
741
+ color: #e99ba5;
742
+ }
743
+
744
+ .terminal-key-actions .terminal-danger-button:hover {
745
+ border-color: #7b4654;
746
+ background: #2b171e;
747
+ }
748
+
749
+ .terminal-stage {
750
+ min-width: 0;
751
+ display: grid;
752
+ overflow: hidden;
753
+ grid-row: 3;
754
+ min-height: 0;
755
+ grid-template-columns: minmax(300px,36%) minmax(0,1fr);
756
+ background: #070c12;
757
+ }
758
+
759
+ .terminal-stage:has(.terminal-history-panel.hidden) {
760
+ grid-template-columns: minmax(0,1fr);
761
+ }
762
+
763
+ .terminal-stage.history-collapsed {
764
+ grid-template-columns: 52px minmax(0,1fr);
765
+ }
766
+
767
+ .terminal-history-panel {
768
+ min-width: 0;
769
+ display: grid;
770
+ grid-template-rows: auto minmax(0,1fr) auto;
771
+ border-right: 1px solid #20323c;
772
+ overflow: hidden;
773
+ transition: grid-template-columns .2s ease,width .2s ease;
774
+ min-height: 0;
775
+ border-right-color: #243844;
776
+ background: linear-gradient(180deg,#0e1921,#0a1219);
777
+ }
778
+
779
+ .terminal-history-head {
780
+ display: flex;
781
+ align-items: center;
782
+ justify-content: space-between;
783
+ gap: 10px;
784
+ border-bottom: 1px solid #1e303a;
785
+ min-height: 72px;
786
+ padding: 11px 10px 11px 14px;
787
+ background: #0d171f;
788
+ }
789
+
790
+ .terminal-history-head span {
791
+ display: block;
792
+ overflow: hidden;
793
+ text-overflow: ellipsis;
794
+ white-space: nowrap;
795
+ font-weight: 750;
796
+ text-transform: uppercase;
797
+ letter-spacing: .08em;
798
+ color: #62dcba;
799
+ font-size: 9px;
800
+ }
801
+
802
+ .terminal-history-head b {
803
+ display: block;
804
+ overflow: hidden;
805
+ text-overflow: ellipsis;
806
+ white-space: nowrap;
807
+ margin-top: 4px;
808
+ color: #e1ebe9;
809
+ font-size: 13px;
810
+ }
811
+
812
+ .terminal-history-head small {
813
+ display: block;
814
+ overflow: hidden;
815
+ text-overflow: ellipsis;
816
+ white-space: nowrap;
817
+ margin-top: 3px;
818
+ color: #657789;
819
+ font-size: 10px;
820
+ }
821
+
822
+ .terminal-history-list {
823
+ min-height: 0;
824
+ overflow: auto;
825
+ scrollbar-color: #29413c transparent;
826
+ padding: 12px;
827
+ }
828
+
829
+ .terminal-history-message {
830
+ margin: 0 0 9px;
831
+ border: 1px solid #1c2b35;
832
+ background: #0c141b;
833
+ margin-bottom: 10px;
834
+ padding: 10px 11px;
835
+ border-radius: 11px;
836
+ }
837
+
838
+ .terminal-history-message header b {
839
+ color: #75dfba;
840
+ font-size: 10px;
841
+ }
842
+
843
+ .terminal-history-message p {
844
+ margin: 6px 0 0;
845
+ color: #b8c5cf;
846
+ white-space: pre-wrap;
847
+ overflow: auto;
848
+ max-height: 180px;
849
+ font-size: 11px;
850
+ line-height: 1.58;
851
+ }
852
+
853
+ .terminal-history-panel footer {
854
+ display: flex;
855
+ align-items: center;
856
+ gap: 7px;
857
+ border-top: 1px solid #1d2d36;
858
+ min-height: 40px;
859
+ padding: 0 13px;
860
+ color: #79cdb4;
861
+ font-size: 9px;
862
+ line-height: 1.3;
863
+ }
864
+
865
+ .terminal-console-pane {
866
+ min-width: 0;
867
+ min-height: 0;
868
+ display: grid;
869
+ grid-template-rows: auto minmax(0,1fr) auto auto;
870
+ background: #070c12;
871
+ overflow: hidden;
872
+ }
873
+
874
+ .terminal-console-head {
875
+ min-height: 48px;
876
+ display: flex;
877
+ align-items: center;
878
+ justify-content: space-between;
879
+ gap: 12px;
880
+ padding: 8px 13px;
881
+ border-bottom: 1px solid #182832;
882
+ background: #0a1219;
883
+ }
884
+
885
+ .terminal-console-head>div {
886
+ display: flex;
887
+ align-items: center;
888
+ gap: 9px;
889
+ min-width: 0;
890
+ }
891
+
892
+ .terminal-console-head b {
893
+ display: block;
894
+ overflow: hidden;
895
+ text-overflow: ellipsis;
896
+ white-space: nowrap;
897
+ color: #d6e1e8;
898
+ font-size: 11px;
899
+ }
900
+
901
+ .terminal-console-head small {
902
+ display: block;
903
+ overflow: hidden;
904
+ text-overflow: ellipsis;
905
+ white-space: nowrap;
906
+ margin-top: 3px;
907
+ color: #607485;
908
+ font-size: 9px;
909
+ }
910
+
911
+ .terminal-console-pulse {
912
+ width: 8px;
913
+ height: 8px;
914
+ flex: 0 0 auto;
915
+ border-radius: 50%;
916
+ background: #58dca9;
917
+ box-shadow: 0 0 0 4px rgba(88,220,169,.07),0 0 10px rgba(88,220,169,.35);
918
+ }
919
+
920
+ .terminal-console-state {
921
+ flex: 0 0 auto;
922
+ padding: 5px 8px;
923
+ border-radius: 7px;
924
+ background: #121c25;
925
+ color: #718394;
926
+ font-size: 9px;
927
+ font-weight: 700;
928
+ }
929
+
930
+ .terminal-console-state[data-status="running"] {
931
+ background: #102820;
932
+ color: #67dfb3;
933
+ }
934
+
935
+ .terminal-console-state[data-status="exited"] {
936
+ background: #29161d;
937
+ color: #e9909e;
938
+ }
939
+
940
+ .terminal-console-state[data-status="failed"] {
941
+ background: #29161d;
942
+ color: #e9909e;
943
+ }
944
+
945
+ .terminal-viewport {
946
+ position: relative;
947
+ min-width: 0;
948
+ background: #080c12;
949
+ overflow: hidden;
950
+ min-height: 0;
951
+ padding: 13px;
952
+ background-color: #060a0f;
953
+ background-image: linear-gradient(rgba(94,137,153,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(94,137,153,.025) 1px,transparent 1px);
954
+ background-size: 24px 24px;
955
+ }
956
+
957
+ .terminal-screen {
958
+ position: absolute;
959
+ overflow: hidden;
960
+ inset: 12px;
961
+ }
962
+
963
+ .terminal-screen .xterm {
964
+ height: 100%;
965
+ padding: 3px;
966
+ }
967
+
968
+ .terminal-empty>span {
969
+ width: 52px;
970
+ height: 52px;
971
+ display: grid;
972
+ place-items: center;
973
+ border: 1px solid #2b5248;
974
+ border-radius: 14px;
975
+ color: #5eddb2;
976
+ font-family: "Cascadia Code",Consolas,monospace;
977
+ font-size: 15px;
978
+ border-color: #315c55;
979
+ background: #0e2221;
980
+ box-shadow: 0 12px 30px rgba(0,0,0,.22);
981
+ }
982
+
983
+ .terminal-empty h3 {
984
+ margin: 15px 0 0;
985
+ font-size: 16px;
986
+ }
987
+
988
+ .terminal-empty p {
989
+ margin: 8px 20px 0;
990
+ font-size: 11px;
991
+ line-height: 1.55;
992
+ max-width: 420px;
993
+ color: #718294;
994
+ }
995
+
996
+ .terminal-command-form {
997
+ align-items: center;
998
+ border-top: 1px solid #1b2933;
999
+ display: grid;
1000
+ grid-template-columns: 1fr;
1001
+ gap: 7px;
1002
+ padding: 10px 12px 11px;
1003
+ border-top-color: #20313a;
1004
+ background: linear-gradient(180deg,#0c151d,#0a1118);
1005
+ }
1006
+
1007
+ .terminal-command-label {
1008
+ display: flex;
1009
+ align-items: center;
1010
+ justify-content: space-between;
1011
+ gap: 10px;
1012
+ }
1013
+
1014
+ .terminal-command-form .terminal-command-label label {
1015
+ color: #8adfc3;
1016
+ font-size: 10px;
1017
+ }
1018
+
1019
+ .terminal-command-label>span {
1020
+ color: #576a7b;
1021
+ font-size: 9px;
1022
+ }
1023
+
1024
+ .terminal-command-composer {
1025
+ display: grid;
1026
+ grid-template-columns: minmax(0,1fr) auto;
1027
+ align-items: end;
1028
+ gap: 8px;
1029
+ padding: 5px;
1030
+ border: 1px solid #2b404c;
1031
+ border-radius: 12px;
1032
+ background: #070c11;
1033
+ transition: border-color var(--motion-fast) ease,box-shadow var(--motion-medium) ease;
1034
+ }
1035
+
1036
+ .terminal-command-composer:focus-within {
1037
+ border-color: #43826f;
1038
+ box-shadow: 0 0 0 3px rgba(85,214,168,.07);
1039
+ }
1040
+
1041
+ .terminal-command-form textarea {
1042
+ border-radius: 9px;
1043
+ color: #dce6ee;
1044
+ font-family: "Cascadia Code",Consolas,monospace;
1045
+ line-height: 1.45;
1046
+ outline: none;
1047
+ min-height: 44px;
1048
+ max-height: 92px;
1049
+ padding: 9px 10px;
1050
+ border: 0;
1051
+ background: transparent;
1052
+ resize: none;
1053
+ font-size: 12px;
1054
+ }
1055
+
1056
+ .terminal-command-form textarea::placeholder {
1057
+ color: #506172;
1058
+ }
1059
+
1060
+ .terminal-command-form button {
1061
+ border: 1px solid #36775f;
1062
+ font-size: 11px;
1063
+ font-weight: 700;
1064
+ cursor: pointer;
1065
+ height: 38px;
1066
+ display: flex;
1067
+ align-items: center;
1068
+ gap: 8px;
1069
+ padding: 0 13px;
1070
+ border-radius: 9px;
1071
+ background: #1b533e;
1072
+ color: #a7f2d5;
1073
+ }
1074
+
1075
+ .terminal-command-form button b {
1076
+ font-size: 15px;
1077
+ }
1078
+
1079
+ .terminal-command-form button:hover {
1080
+ background: #22654c;
1081
+ }
1082
+
1083
+ .terminal-notice {
1084
+ display: flex;
1085
+ align-items: center;
1086
+ border-top: 1px solid #17232c;
1087
+ color: #657486;
1088
+ min-height: 26px;
1089
+ gap: 7px;
1090
+ padding: 0 13px;
1091
+ border-top-color: #14222a;
1092
+ background: #081017;
1093
+ font-size: 9px;
1094
+ }
1095
+
1096
+ .terminal-notice-dot {
1097
+ width: 6px;
1098
+ height: 6px;
1099
+ flex: 0 0 auto;
1100
+ border-radius: 50%;
1101
+ background: #607181;
1102
+ }
1103
+
1104
+ .terminal-notice[data-tone="success"] .terminal-notice-dot {
1105
+ background: #5ce2a9;
1106
+ box-shadow: 0 0 8px rgba(92,226,169,.45);
1107
+ }
1108
+
1109
+ .terminal-notice[data-tone="error"] .terminal-notice-dot {
1110
+ background: #eb7e8e;
1111
+ }
1112
+
1113
+ .terminal-history-copy {
1114
+ max-height: 190px;
1115
+ margin-top: 6px;
1116
+ overflow: auto;
1117
+ color: #b8c5cf;
1118
+ font-size: 10px;
1119
+ line-height: 1.55;
1120
+ }
1121
+
1122
+ .terminal-history-copy p {
1123
+ max-height: none;
1124
+ margin: 0 0 5px;
1125
+ overflow: visible;
1126
+ white-space: pre-wrap;
1127
+ }
1128
+
1129
+ .terminal-history-copy p.bullet {
1130
+ padding-left: 13px;
1131
+ position: relative;
1132
+ }
1133
+
1134
+ .terminal-history-copy p.bullet:before {
1135
+ content: '•';
1136
+ position: absolute;
1137
+ left: 2px;
1138
+ color: #69dcb6;
1139
+ }
1140
+
1141
+ .terminal-history-copy pre {
1142
+ margin: 6px 0;
1143
+ padding: 8px;
1144
+ border: 1px solid #243641;
1145
+ border-radius: 7px;
1146
+ background: #080d12;
1147
+ overflow: auto;
1148
+ white-space: pre-wrap;
1149
+ }
1150
+
1151
+ .terminal-history-copy code {
1152
+ font-family: "Cascadia Code",Consolas,monospace;
1153
+ color: #87dfc0;
1154
+ }
1155
+
1156
+ .terminal-section {
1157
+ max-width: 1640px;
1158
+ margin: 24px auto 0;
1159
+ min-width: 0;
1160
+ }
1161
+
1162
+ .terminal-layout {
1163
+ min-height: 670px;
1164
+ display: grid;
1165
+ grid-template-columns: 280px minmax(0,1fr);
1166
+ overflow: hidden;
1167
+ border: 1px solid #203039;
1168
+ border-radius: 18px;
1169
+ background: #080d13;
1170
+ box-shadow: 0 22px 70px rgba(0,0,0,.2);
1171
+ min-width: 0;
1172
+ }
1173
+
1174
+ .terminal-workbench-mount {
1175
+ display: contents;
1176
+ min-width: 0;
1177
+ }
1178
+
1179
+ .terminal-key-actions button {
1180
+ transition: transform var(--motion-fast) var(--motion-ease),background-color var(--motion-fast) ease,border-color var(--motion-fast) ease,color var(--motion-fast) ease,box-shadow var(--motion-medium) ease,opacity var(--motion-fast) ease;
1181
+ }
1182
+
1183
+ .terminal-session-item {
1184
+ width: 100%;
1185
+ align-items: center;
1186
+ color: #a9b6c4;
1187
+ text-align: left;
1188
+ cursor: grab;
1189
+ position: relative;
1190
+ display: grid;
1191
+ grid-template-columns: 38px minmax(0,1fr) 8px;
1192
+ gap: 10px;
1193
+ min-height: 72px;
1194
+ padding: 10px 9px;
1195
+ border: 1px solid transparent;
1196
+ border-radius: 12px;
1197
+ background: #0c141c;
1198
+ transform: none!important;
1199
+ transition: transform var(--motion-fast) var(--motion-ease),background-color var(--motion-fast) ease,border-color var(--motion-fast) ease,color var(--motion-fast) ease,box-shadow var(--motion-medium) ease,opacity var(--motion-fast) ease;
1200
+ }
1201
+
1202
+ .terminal-session-item.dragging {
1203
+ opacity: .45;
1204
+ cursor: grabbing;
1205
+ }
1206
+
1207
+ .terminal-session-item.drop-before {
1208
+ box-shadow: inset 0 3px #52d7aa;
1209
+ }
1210
+
1211
+ .terminal-session-item.drop-after {
1212
+ box-shadow: inset 0 -3px #52d7aa;
1213
+ }
1214
+
1215
+ .terminal-command-form textarea:focus {
1216
+ border-color: #3b7967;
1217
+ transition: border-color var(--motion-fast) ease,box-shadow var(--motion-medium) ease;
1218
+ box-shadow: 0 0 0 3px rgba(89,216,255,.08);
1219
+ }
1220
+
1221
+ body[data-current-view="terminal"] .topbar {
1222
+ align-items: center;
1223
+ padding-bottom: 4px;
1224
+ border-bottom: 1px solid #1d2835;
1225
+ }
1226
+
1227
+ body[data-current-view="terminal"] .topbar .eyebrow {
1228
+ display: none;
1229
+ }
1230
+
1231
+ body[data-current-view="terminal"] .topbar .subtitle {
1232
+ display: none;
1233
+ }
1234
+
1235
+ body[data-current-view="terminal"] .top-actions {
1236
+ display: none;
1237
+ }
1238
+
1239
+ body[data-current-view="terminal"] .topbar h1 {
1240
+ font-size: 22px;
1241
+ }