bgrun 3.4.0 → 3.7.1
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.
- package/README.md +26 -3
- package/dashboard/app/api/config/[name]/route.ts +55 -0
- package/dashboard/app/api/debug/route.ts +3 -2
- package/dashboard/app/api/events/route.ts +60 -0
- package/dashboard/app/api/logs/[name]/route.ts +55 -5
- package/dashboard/app/api/processes/[name]/route.ts +5 -2
- package/dashboard/app/api/processes/route.ts +88 -44
- package/dashboard/app/api/restart/[name]/route.ts +4 -3
- package/dashboard/app/api/start/route.ts +4 -3
- package/dashboard/app/api/stop/[name]/route.ts +11 -4
- package/dashboard/app/api/version/route.ts +4 -2
- package/dashboard/app/globals.css +657 -87
- package/dashboard/app/layout.tsx +2 -23
- package/dashboard/app/page.client.tsx +703 -116
- package/dashboard/app/page.tsx +97 -33
- package/dist/index.js +394 -224
- package/image.png +0 -0
- package/package.json +60 -56
- package/src/api.ts +13 -0
- package/src/commands/list.ts +1 -0
- package/src/commands/run.ts +60 -47
- package/src/db.ts +27 -5
- package/src/index.ts +75 -3
- package/src/platform.ts +202 -96
- package/src/server.ts +2 -1
- package/src/types.ts +2 -2
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
/* BGR Dashboard — Design System v3 */
|
|
2
2
|
/* Inspired by agent-interface premium dark theme */
|
|
3
3
|
|
|
4
|
+
.antialiased {
|
|
5
|
+
-webkit-font-smoothing: antialiased;
|
|
6
|
+
-moz-osx-font-smoothing: grayscale;
|
|
7
|
+
}
|
|
8
|
+
|
|
4
9
|
/* ─── Design Tokens ─── */
|
|
5
10
|
:root {
|
|
6
11
|
--bg-primary: #07070d;
|
|
@@ -26,6 +31,7 @@
|
|
|
26
31
|
--danger-border: rgba(239, 68, 68, 0.2);
|
|
27
32
|
--warning: #f59e0b;
|
|
28
33
|
--warning-bg: rgba(245, 158, 11, 0.12);
|
|
34
|
+
--warning-border: rgba(245, 158, 11, 0.3);
|
|
29
35
|
--info: #38bdf8;
|
|
30
36
|
--info-bg: rgba(56, 189, 248, 0.12);
|
|
31
37
|
--info-border: rgba(56, 189, 248, 0.2);
|
|
@@ -202,7 +208,7 @@ body::after {
|
|
|
202
208
|
.container {
|
|
203
209
|
max-width: 1400px;
|
|
204
210
|
margin: 0 auto;
|
|
205
|
-
padding:
|
|
211
|
+
padding: 1rem 2rem;
|
|
206
212
|
position: relative;
|
|
207
213
|
z-index: 1;
|
|
208
214
|
animation: fadeIn 0.4s ease;
|
|
@@ -294,7 +300,7 @@ body::after {
|
|
|
294
300
|
/* ─── Stats Grid ─── */
|
|
295
301
|
.stats-grid {
|
|
296
302
|
display: grid;
|
|
297
|
-
grid-template-columns: repeat(
|
|
303
|
+
grid-template-columns: repeat(4, 1fr);
|
|
298
304
|
gap: 1rem;
|
|
299
305
|
margin-bottom: 2rem;
|
|
300
306
|
}
|
|
@@ -389,7 +395,7 @@ body::after {
|
|
|
389
395
|
letter-spacing: -0.02em;
|
|
390
396
|
}
|
|
391
397
|
|
|
392
|
-
.stat-card:not(.running):not(.stopped) .stat-value {
|
|
398
|
+
.stat-card:not(.running):not(.stopped):not(.memory) .stat-value {
|
|
393
399
|
background: var(--accent-gradient);
|
|
394
400
|
-webkit-background-clip: text;
|
|
395
401
|
-webkit-text-fill-color: transparent;
|
|
@@ -404,7 +410,23 @@ body::after {
|
|
|
404
410
|
color: var(--danger);
|
|
405
411
|
}
|
|
406
412
|
|
|
407
|
-
|
|
413
|
+
.stat-card.memory {
|
|
414
|
+
border-left: 3px solid var(--info);
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
.stat-card.memory::before {
|
|
418
|
+
background: var(--info);
|
|
419
|
+
opacity: 0.08;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
.stat-card.memory:hover::before {
|
|
423
|
+
opacity: 0.12;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
.stat-card.memory .stat-value {
|
|
427
|
+
color: var(--info);
|
|
428
|
+
}
|
|
429
|
+
|
|
408
430
|
.toolbar {
|
|
409
431
|
display: flex;
|
|
410
432
|
justify-content: space-between;
|
|
@@ -420,11 +442,33 @@ body::after {
|
|
|
420
442
|
flex: 1;
|
|
421
443
|
}
|
|
422
444
|
|
|
445
|
+
.toolbar-right {
|
|
446
|
+
display: flex;
|
|
447
|
+
align-items: center;
|
|
448
|
+
gap: 0.5rem;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
.toolbar-brand {
|
|
452
|
+
display: flex;
|
|
453
|
+
align-items: center;
|
|
454
|
+
gap: 0.5rem;
|
|
455
|
+
white-space: nowrap;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
.toolbar-logo {
|
|
459
|
+
font-size: 1.1rem;
|
|
460
|
+
}
|
|
461
|
+
|
|
423
462
|
.toolbar h2 {
|
|
424
463
|
font-size: 1.125rem;
|
|
425
|
-
font-weight:
|
|
426
|
-
|
|
464
|
+
font-weight: 700;
|
|
465
|
+
background: var(--accent-gradient);
|
|
466
|
+
-webkit-background-clip: text;
|
|
467
|
+
-webkit-text-fill-color: transparent;
|
|
468
|
+
background-clip: text;
|
|
469
|
+
letter-spacing: -0.02em;
|
|
427
470
|
white-space: nowrap;
|
|
471
|
+
margin-right: 0.25rem;
|
|
428
472
|
}
|
|
429
473
|
|
|
430
474
|
/* ─── Search ─── */
|
|
@@ -587,39 +631,96 @@ body::after {
|
|
|
587
631
|
background: var(--bg-card);
|
|
588
632
|
border: 1px solid var(--border-glass);
|
|
589
633
|
border-radius: var(--radius-2xl);
|
|
590
|
-
overflow:
|
|
634
|
+
overflow-x: auto;
|
|
635
|
+
overflow-y: hidden;
|
|
591
636
|
backdrop-filter: blur(20px);
|
|
592
637
|
box-shadow: var(--shadow-card);
|
|
593
638
|
}
|
|
594
639
|
|
|
595
640
|
table {
|
|
596
641
|
width: 100%;
|
|
642
|
+
min-width: 900px;
|
|
597
643
|
border-collapse: separate;
|
|
598
644
|
border-spacing: 0;
|
|
645
|
+
table-layout: fixed;
|
|
599
646
|
}
|
|
600
647
|
|
|
601
648
|
/* ─── Group Header ─── */
|
|
649
|
+
.group-header {
|
|
650
|
+
cursor: pointer;
|
|
651
|
+
user-select: none;
|
|
652
|
+
}
|
|
653
|
+
|
|
602
654
|
.group-header td {
|
|
603
|
-
padding:
|
|
604
|
-
background:
|
|
605
|
-
border:
|
|
655
|
+
padding: 0.625rem 1.25rem 0.375rem 1.25rem !important;
|
|
656
|
+
background: rgba(255, 255, 255, 0.015) !important;
|
|
657
|
+
border-bottom: 1px solid var(--border-subtle) !important;
|
|
658
|
+
border-top: 1px solid var(--border-glass) !important;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
.group-header:first-child td {
|
|
662
|
+
border-top: none !important;
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
.group-header:hover td {
|
|
666
|
+
background: var(--bg-hover) !important;
|
|
606
667
|
}
|
|
607
668
|
|
|
608
669
|
.group-label {
|
|
609
670
|
display: flex;
|
|
610
671
|
align-items: center;
|
|
611
|
-
gap: 0.
|
|
612
|
-
font-size: 0.
|
|
613
|
-
font-weight:
|
|
614
|
-
text-
|
|
615
|
-
|
|
672
|
+
gap: 0.375rem;
|
|
673
|
+
font-size: 0.6875rem;
|
|
674
|
+
font-weight: 600;
|
|
675
|
+
color: var(--text-dim);
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
.group-chevron {
|
|
679
|
+
width: 12px;
|
|
680
|
+
height: 12px;
|
|
681
|
+
stroke: var(--text-dim);
|
|
682
|
+
fill: none;
|
|
683
|
+
stroke-width: 2.5;
|
|
684
|
+
transition: transform var(--transition-fast);
|
|
685
|
+
transform: rotate(90deg);
|
|
686
|
+
flex-shrink: 0;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
.group-header.collapsed .group-chevron {
|
|
690
|
+
transform: rotate(0deg);
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
.group-name {
|
|
616
694
|
color: var(--text-muted);
|
|
617
|
-
|
|
695
|
+
font-size: 0.6875rem;
|
|
696
|
+
font-family: var(--font-mono);
|
|
697
|
+
letter-spacing: 0.01em;
|
|
698
|
+
font-weight: 500;
|
|
618
699
|
}
|
|
619
700
|
|
|
620
|
-
.group-
|
|
621
|
-
|
|
622
|
-
|
|
701
|
+
.group-counts {
|
|
702
|
+
display: flex;
|
|
703
|
+
align-items: center;
|
|
704
|
+
gap: 0.25rem;
|
|
705
|
+
margin-left: auto;
|
|
706
|
+
font-size: 0.625rem;
|
|
707
|
+
font-weight: 500;
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
.group-count-running {
|
|
711
|
+
color: var(--text-dim);
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
.group-count-running.has-running {
|
|
715
|
+
color: var(--success-soft);
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
.group-count-sep {
|
|
719
|
+
color: var(--border-hover);
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
.group-count-total {
|
|
723
|
+
color: var(--text-dim);
|
|
623
724
|
}
|
|
624
725
|
|
|
625
726
|
th {
|
|
@@ -710,28 +811,16 @@ tr.animate-in:nth-child(10) {
|
|
|
710
811
|
align-items: center;
|
|
711
812
|
gap: 0.75rem;
|
|
712
813
|
font-size: 0.875rem;
|
|
814
|
+
overflow: hidden;
|
|
713
815
|
}
|
|
714
816
|
|
|
715
|
-
.process-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
border-radius: 10px;
|
|
720
|
-
display: flex;
|
|
721
|
-
align-items: center;
|
|
722
|
-
justify-content: center;
|
|
723
|
-
font-size: 0.75rem;
|
|
724
|
-
color: white;
|
|
725
|
-
font-weight: 700;
|
|
726
|
-
flex-shrink: 0;
|
|
727
|
-
box-shadow: 0 2px 8px rgba(99, 102, 241, 0.2);
|
|
728
|
-
transition: transform var(--transition-fast), box-shadow var(--transition-fast);
|
|
817
|
+
.process-name span {
|
|
818
|
+
overflow: hidden;
|
|
819
|
+
text-overflow: ellipsis;
|
|
820
|
+
white-space: nowrap;
|
|
729
821
|
}
|
|
730
822
|
|
|
731
|
-
|
|
732
|
-
transform: scale(1.05);
|
|
733
|
-
box-shadow: 0 4px 16px rgba(99, 102, 241, 0.3);
|
|
734
|
-
}
|
|
823
|
+
|
|
735
824
|
|
|
736
825
|
/* ─── Status Badge ─── */
|
|
737
826
|
.status-badge {
|
|
@@ -823,12 +912,15 @@ tr[data-process-name]:hover .process-icon {
|
|
|
823
912
|
color: var(--text-muted);
|
|
824
913
|
font-size: 0.8125rem;
|
|
825
914
|
font-family: var(--font-mono);
|
|
915
|
+
white-space: nowrap;
|
|
826
916
|
}
|
|
827
917
|
|
|
828
918
|
/* ─── Action Buttons (SVG-based) ─── */
|
|
829
919
|
.actions {
|
|
830
920
|
display: flex;
|
|
831
921
|
gap: 0.25rem;
|
|
922
|
+
flex-shrink: 0;
|
|
923
|
+
white-space: nowrap;
|
|
832
924
|
}
|
|
833
925
|
|
|
834
926
|
.action-btn {
|
|
@@ -885,6 +977,12 @@ tr[data-process-name]:hover .process-icon {
|
|
|
885
977
|
border-color: var(--info-border);
|
|
886
978
|
}
|
|
887
979
|
|
|
980
|
+
.action-btn.warning:hover {
|
|
981
|
+
background: var(--warning-bg);
|
|
982
|
+
color: var(--warning);
|
|
983
|
+
border-color: var(--warning-border);
|
|
984
|
+
}
|
|
985
|
+
|
|
888
986
|
/* ─── Empty State ─── */
|
|
889
987
|
.empty-state {
|
|
890
988
|
text-align: center;
|
|
@@ -1024,6 +1122,8 @@ tr[data-process-name]:hover .process-icon {
|
|
|
1024
1122
|
top: 0;
|
|
1025
1123
|
right: 0;
|
|
1026
1124
|
width: 520px;
|
|
1125
|
+
min-width: 360px;
|
|
1126
|
+
max-width: 85vw;
|
|
1027
1127
|
height: 100vh;
|
|
1028
1128
|
background: var(--bg-secondary);
|
|
1029
1129
|
border-left: 1px solid var(--border-glass);
|
|
@@ -1035,6 +1135,28 @@ tr[data-process-name]:hover .process-icon {
|
|
|
1035
1135
|
box-shadow: -8px 0 40px rgba(0, 0, 0, 0.3), -2px 0 20px rgba(0, 0, 0, 0.2);
|
|
1036
1136
|
}
|
|
1037
1137
|
|
|
1138
|
+
.detail-drawer.resizing {
|
|
1139
|
+
transition: none;
|
|
1140
|
+
user-select: none;
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
.drawer-resize-handle {
|
|
1144
|
+
position: absolute;
|
|
1145
|
+
left: -3px;
|
|
1146
|
+
top: 0;
|
|
1147
|
+
width: 6px;
|
|
1148
|
+
height: 100%;
|
|
1149
|
+
cursor: col-resize;
|
|
1150
|
+
z-index: 10;
|
|
1151
|
+
transition: background 0.15s;
|
|
1152
|
+
}
|
|
1153
|
+
|
|
1154
|
+
.drawer-resize-handle:hover,
|
|
1155
|
+
.drawer-resize-handle:active {
|
|
1156
|
+
background: var(--accent-primary);
|
|
1157
|
+
opacity: 0.5;
|
|
1158
|
+
}
|
|
1159
|
+
|
|
1038
1160
|
.detail-drawer.open {
|
|
1039
1161
|
transform: translateX(0);
|
|
1040
1162
|
}
|
|
@@ -1057,12 +1179,7 @@ tr[data-process-name]:hover .process-icon {
|
|
|
1057
1179
|
gap: 0.75rem;
|
|
1058
1180
|
}
|
|
1059
1181
|
|
|
1060
|
-
|
|
1061
|
-
width: 32px;
|
|
1062
|
-
height: 32px;
|
|
1063
|
-
font-size: 0.7rem;
|
|
1064
|
-
border-radius: var(--radius-sm);
|
|
1065
|
-
}
|
|
1182
|
+
|
|
1066
1183
|
|
|
1067
1184
|
.drawer-close {
|
|
1068
1185
|
width: 30px;
|
|
@@ -1084,76 +1201,167 @@ tr[data-process-name]:hover .process-icon {
|
|
|
1084
1201
|
background: var(--bg-hover);
|
|
1085
1202
|
}
|
|
1086
1203
|
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
display:
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
background: rgba(0, 0, 0, 0.08);
|
|
1204
|
+
/* ─── Accordion ─── */
|
|
1205
|
+
.drawer-accordion {
|
|
1206
|
+
flex: 1;
|
|
1207
|
+
display: flex;
|
|
1208
|
+
flex-direction: column;
|
|
1209
|
+
min-height: 0;
|
|
1210
|
+
overflow: hidden;
|
|
1095
1211
|
}
|
|
1096
1212
|
|
|
1097
|
-
.
|
|
1213
|
+
.accordion-section {
|
|
1098
1214
|
display: flex;
|
|
1099
1215
|
flex-direction: column;
|
|
1100
|
-
|
|
1216
|
+
min-height: 0;
|
|
1217
|
+
border-bottom: 1px solid var(--border-glass);
|
|
1101
1218
|
}
|
|
1102
1219
|
|
|
1103
|
-
.
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1220
|
+
.accordion-section.open {
|
|
1221
|
+
flex: 1;
|
|
1222
|
+
}
|
|
1223
|
+
|
|
1224
|
+
.accordion-trigger {
|
|
1225
|
+
display: flex;
|
|
1226
|
+
align-items: center;
|
|
1227
|
+
gap: 0.5rem;
|
|
1228
|
+
padding: 0.625rem 1rem;
|
|
1229
|
+
background: rgba(0, 0, 0, 0.12);
|
|
1230
|
+
border: none;
|
|
1231
|
+
color: var(--text-muted);
|
|
1232
|
+
font-size: 0.7rem;
|
|
1108
1233
|
font-weight: 600;
|
|
1234
|
+
text-transform: uppercase;
|
|
1235
|
+
letter-spacing: 0.06em;
|
|
1236
|
+
cursor: pointer;
|
|
1237
|
+
transition: all var(--transition-fast);
|
|
1238
|
+
font-family: inherit;
|
|
1239
|
+
width: 100%;
|
|
1240
|
+
text-align: left;
|
|
1109
1241
|
}
|
|
1110
1242
|
|
|
1111
|
-
.
|
|
1112
|
-
|
|
1113
|
-
color: var(--text-
|
|
1114
|
-
|
|
1243
|
+
.accordion-trigger:hover {
|
|
1244
|
+
background: rgba(0, 0, 0, 0.18);
|
|
1245
|
+
color: var(--text-secondary);
|
|
1246
|
+
}
|
|
1247
|
+
|
|
1248
|
+
.accordion-section.open>.accordion-trigger {
|
|
1249
|
+
color: var(--accent-primary);
|
|
1250
|
+
background: rgba(99, 102, 241, 0.08);
|
|
1251
|
+
}
|
|
1252
|
+
|
|
1253
|
+
.accordion-chevron {
|
|
1254
|
+
width: 14px;
|
|
1255
|
+
height: 14px;
|
|
1256
|
+
fill: none;
|
|
1257
|
+
stroke: currentColor;
|
|
1258
|
+
stroke-width: 2;
|
|
1259
|
+
stroke-linecap: round;
|
|
1260
|
+
stroke-linejoin: round;
|
|
1261
|
+
transition: transform var(--transition-fast);
|
|
1262
|
+
flex-shrink: 0;
|
|
1263
|
+
}
|
|
1264
|
+
|
|
1265
|
+
.accordion-section.open>.accordion-trigger .accordion-chevron {
|
|
1266
|
+
transform: rotate(90deg);
|
|
1267
|
+
}
|
|
1268
|
+
|
|
1269
|
+
.accordion-body {
|
|
1270
|
+
display: none;
|
|
1271
|
+
flex-direction: column;
|
|
1272
|
+
min-height: 0;
|
|
1273
|
+
flex: 1;
|
|
1274
|
+
overflow: hidden;
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1277
|
+
.accordion-section.open>.accordion-body {
|
|
1278
|
+
display: flex;
|
|
1115
1279
|
}
|
|
1116
1280
|
|
|
1117
|
-
|
|
1281
|
+
|
|
1282
|
+
/* ─── Accordion Sub-tabs ─── */
|
|
1283
|
+
.accordion-subtabs {
|
|
1118
1284
|
display: flex;
|
|
1119
1285
|
border-bottom: 1px solid var(--border-glass);
|
|
1120
1286
|
flex-shrink: 0;
|
|
1121
|
-
background: rgba(0, 0, 0, 0.
|
|
1287
|
+
background: rgba(0, 0, 0, 0.06);
|
|
1288
|
+
padding: 0 0.5rem;
|
|
1289
|
+
gap: 0;
|
|
1122
1290
|
}
|
|
1123
1291
|
|
|
1124
|
-
.
|
|
1125
|
-
|
|
1126
|
-
padding: 0.75rem;
|
|
1292
|
+
.accordion-subtab {
|
|
1293
|
+
padding: 0.5rem 0.75rem;
|
|
1127
1294
|
background: none;
|
|
1128
1295
|
border: none;
|
|
1296
|
+
border-bottom: 2px solid transparent;
|
|
1129
1297
|
color: var(--text-muted);
|
|
1130
|
-
font-size: 0.
|
|
1298
|
+
font-size: 0.68rem;
|
|
1131
1299
|
font-weight: 500;
|
|
1132
1300
|
cursor: pointer;
|
|
1133
|
-
border-bottom: 2px solid transparent;
|
|
1134
1301
|
transition: all var(--transition-fast);
|
|
1135
|
-
font-family:
|
|
1136
|
-
|
|
1137
|
-
|
|
1302
|
+
font-family: var(--font-mono);
|
|
1303
|
+
display: flex;
|
|
1304
|
+
align-items: center;
|
|
1305
|
+
gap: 0.4rem;
|
|
1138
1306
|
}
|
|
1139
1307
|
|
|
1140
|
-
.
|
|
1308
|
+
.accordion-subtab:hover {
|
|
1141
1309
|
color: var(--text-secondary);
|
|
1142
|
-
background: var(--bg-hover);
|
|
1143
1310
|
}
|
|
1144
1311
|
|
|
1145
|
-
.
|
|
1312
|
+
.accordion-subtab.active {
|
|
1146
1313
|
color: var(--accent-primary);
|
|
1147
1314
|
border-bottom-color: var(--accent-primary);
|
|
1148
1315
|
}
|
|
1149
1316
|
|
|
1150
|
-
.
|
|
1317
|
+
.accordion-sub-content {
|
|
1151
1318
|
flex: 1;
|
|
1152
|
-
overflow: hidden;
|
|
1153
|
-
padding: 0;
|
|
1154
1319
|
display: flex;
|
|
1155
1320
|
flex-direction: column;
|
|
1156
1321
|
min-height: 0;
|
|
1322
|
+
overflow: hidden;
|
|
1323
|
+
}
|
|
1324
|
+
|
|
1325
|
+
/* ─── Stderr Badge ─── */
|
|
1326
|
+
.stderr-badge {
|
|
1327
|
+
font-size: 0.55rem;
|
|
1328
|
+
font-weight: 700;
|
|
1329
|
+
background: var(--error);
|
|
1330
|
+
color: #fff;
|
|
1331
|
+
padding: 1px 5px;
|
|
1332
|
+
border-radius: 8px;
|
|
1333
|
+
line-height: 1.3;
|
|
1334
|
+
min-width: 16px;
|
|
1335
|
+
text-align: center;
|
|
1336
|
+
font-family: var(--font-mono);
|
|
1337
|
+
}
|
|
1338
|
+
|
|
1339
|
+
/* ─── Meta (inside accordion) ─── */
|
|
1340
|
+
.drawer-meta {
|
|
1341
|
+
padding: 1rem 1.25rem;
|
|
1342
|
+
display: grid;
|
|
1343
|
+
grid-template-columns: 1fr 1fr;
|
|
1344
|
+
gap: 0.75rem;
|
|
1345
|
+
}
|
|
1346
|
+
|
|
1347
|
+
.meta-item {
|
|
1348
|
+
display: flex;
|
|
1349
|
+
flex-direction: column;
|
|
1350
|
+
gap: 0.2rem;
|
|
1351
|
+
}
|
|
1352
|
+
|
|
1353
|
+
.meta-label {
|
|
1354
|
+
font-size: 0.6rem;
|
|
1355
|
+
text-transform: uppercase;
|
|
1356
|
+
letter-spacing: 0.08em;
|
|
1357
|
+
color: var(--text-dim);
|
|
1358
|
+
font-weight: 600;
|
|
1359
|
+
}
|
|
1360
|
+
|
|
1361
|
+
.meta-value {
|
|
1362
|
+
font-size: 0.78rem;
|
|
1363
|
+
color: var(--text-primary);
|
|
1364
|
+
font-family: var(--font-mono);
|
|
1157
1365
|
}
|
|
1158
1366
|
|
|
1159
1367
|
.drawer-logs {
|
|
@@ -1168,17 +1376,17 @@ tr[data-process-name]:hover .process-icon {
|
|
|
1168
1376
|
padding: 1rem 1.5rem;
|
|
1169
1377
|
min-height: 0;
|
|
1170
1378
|
background: rgba(0, 0, 0, 0.2);
|
|
1379
|
+
contain: strict;
|
|
1171
1380
|
}
|
|
1172
1381
|
|
|
1173
1382
|
.drawer-backdrop {
|
|
1174
1383
|
position: fixed;
|
|
1175
1384
|
inset: 0;
|
|
1176
|
-
background: rgba(0, 0, 0, 0.
|
|
1385
|
+
background: rgba(0, 0, 0, 0.5);
|
|
1177
1386
|
z-index: 899;
|
|
1178
1387
|
opacity: 0;
|
|
1179
1388
|
pointer-events: none;
|
|
1180
1389
|
transition: opacity var(--transition-smooth);
|
|
1181
|
-
backdrop-filter: blur(2px);
|
|
1182
1390
|
}
|
|
1183
1391
|
|
|
1184
1392
|
.drawer-backdrop.active {
|
|
@@ -1259,15 +1467,194 @@ tr[data-process-name]:hover .process-icon {
|
|
|
1259
1467
|
color: var(--info);
|
|
1260
1468
|
}
|
|
1261
1469
|
|
|
1470
|
+
/* ─── Log File Info ─── */
|
|
1471
|
+
.log-file-info {
|
|
1472
|
+
padding: 0.375rem 1.5rem;
|
|
1473
|
+
font-size: 0.6875rem;
|
|
1474
|
+
color: var(--text-dim);
|
|
1475
|
+
font-family: var(--font-mono);
|
|
1476
|
+
border-bottom: 1px solid var(--border-subtle);
|
|
1477
|
+
background: rgba(0, 0, 0, 0.12);
|
|
1478
|
+
display: flex;
|
|
1479
|
+
align-items: center;
|
|
1480
|
+
gap: 0.5rem;
|
|
1481
|
+
flex-shrink: 0;
|
|
1482
|
+
min-height: 28px;
|
|
1483
|
+
}
|
|
1484
|
+
|
|
1485
|
+
.log-file-info:empty {
|
|
1486
|
+
display: none;
|
|
1487
|
+
}
|
|
1488
|
+
|
|
1489
|
+
/* ─── Env Variables Panel ─── */
|
|
1490
|
+
.drawer-env {
|
|
1491
|
+
flex: 1;
|
|
1492
|
+
overflow-y: auto;
|
|
1493
|
+
padding: 1rem 1.5rem;
|
|
1494
|
+
min-height: 0;
|
|
1495
|
+
background: rgba(0, 0, 0, 0.2);
|
|
1496
|
+
}
|
|
1497
|
+
|
|
1498
|
+
.env-row {
|
|
1499
|
+
display: flex;
|
|
1500
|
+
gap: 0.5rem;
|
|
1501
|
+
padding: 0.35rem 0;
|
|
1502
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.04);
|
|
1503
|
+
font-family: var(--font-mono);
|
|
1504
|
+
font-size: 0.75rem;
|
|
1505
|
+
line-height: 1.5;
|
|
1506
|
+
}
|
|
1507
|
+
|
|
1508
|
+
.env-row:last-child {
|
|
1509
|
+
border-bottom: none;
|
|
1510
|
+
}
|
|
1511
|
+
|
|
1512
|
+
.env-key {
|
|
1513
|
+
color: var(--accent-primary);
|
|
1514
|
+
font-weight: 600;
|
|
1515
|
+
flex-shrink: 0;
|
|
1516
|
+
min-width: 120px;
|
|
1517
|
+
max-width: 200px;
|
|
1518
|
+
overflow: hidden;
|
|
1519
|
+
text-overflow: ellipsis;
|
|
1520
|
+
white-space: nowrap;
|
|
1521
|
+
}
|
|
1522
|
+
|
|
1523
|
+
.env-value {
|
|
1524
|
+
color: var(--text-secondary);
|
|
1525
|
+
word-break: break-all;
|
|
1526
|
+
}
|
|
1527
|
+
|
|
1528
|
+
.env-empty {
|
|
1529
|
+
color: var(--text-muted);
|
|
1530
|
+
font-style: italic;
|
|
1531
|
+
padding: 2rem 0;
|
|
1532
|
+
text-align: center;
|
|
1533
|
+
}
|
|
1534
|
+
|
|
1535
|
+
/* ─── Config Editor Panel ─── */
|
|
1536
|
+
.drawer-config {
|
|
1537
|
+
flex: 1;
|
|
1538
|
+
display: flex;
|
|
1539
|
+
flex-direction: column;
|
|
1540
|
+
min-height: 0;
|
|
1541
|
+
}
|
|
1542
|
+
|
|
1543
|
+
.config-toolbar {
|
|
1544
|
+
display: flex;
|
|
1545
|
+
align-items: center;
|
|
1546
|
+
justify-content: space-between;
|
|
1547
|
+
padding: 0.5rem 1rem;
|
|
1548
|
+
border-bottom: 1px solid var(--border-glass);
|
|
1549
|
+
background: rgba(0, 0, 0, 0.12);
|
|
1550
|
+
flex-shrink: 0;
|
|
1551
|
+
gap: 0.75rem;
|
|
1552
|
+
}
|
|
1553
|
+
|
|
1554
|
+
.config-path {
|
|
1555
|
+
font-family: var(--font-mono);
|
|
1556
|
+
font-size: 0.6875rem;
|
|
1557
|
+
color: var(--text-dim);
|
|
1558
|
+
overflow: hidden;
|
|
1559
|
+
text-overflow: ellipsis;
|
|
1560
|
+
white-space: nowrap;
|
|
1561
|
+
flex: 1;
|
|
1562
|
+
min-width: 0;
|
|
1563
|
+
}
|
|
1564
|
+
|
|
1565
|
+
.config-editor {
|
|
1566
|
+
flex: 1;
|
|
1567
|
+
width: 100%;
|
|
1568
|
+
resize: none;
|
|
1569
|
+
background: rgba(0, 0, 0, 0.25);
|
|
1570
|
+
color: var(--text-primary);
|
|
1571
|
+
font-family: var(--font-mono);
|
|
1572
|
+
font-size: 0.78rem;
|
|
1573
|
+
line-height: 1.7;
|
|
1574
|
+
padding: 1rem 1.5rem;
|
|
1575
|
+
border: none;
|
|
1576
|
+
outline: none;
|
|
1577
|
+
min-height: 0;
|
|
1578
|
+
tab-size: 4;
|
|
1579
|
+
}
|
|
1580
|
+
|
|
1581
|
+
.config-editor:focus {
|
|
1582
|
+
background: rgba(0, 0, 0, 0.3);
|
|
1583
|
+
}
|
|
1584
|
+
|
|
1585
|
+
.btn-sm {
|
|
1586
|
+
padding: 0.35rem 0.75rem;
|
|
1587
|
+
font-size: 0.72rem;
|
|
1588
|
+
white-space: nowrap;
|
|
1589
|
+
}
|
|
1590
|
+
|
|
1262
1591
|
/* ─── Log Lines ─── */
|
|
1263
1592
|
.log-line {
|
|
1264
|
-
padding: 0.
|
|
1265
|
-
transition: background var(--transition-fast);
|
|
1593
|
+
padding: 0.1rem 0.5rem 0.1rem 0;
|
|
1266
1594
|
border-radius: 3px;
|
|
1595
|
+
cursor: pointer;
|
|
1596
|
+
position: relative;
|
|
1597
|
+
display: flex;
|
|
1598
|
+
align-items: baseline;
|
|
1599
|
+
gap: 0;
|
|
1600
|
+
content-visibility: auto;
|
|
1601
|
+
contain-intrinsic-size: auto 1.7em;
|
|
1267
1602
|
}
|
|
1268
1603
|
|
|
1269
1604
|
.log-line:hover {
|
|
1270
|
-
background: rgba(255, 255, 255, 0.
|
|
1605
|
+
background: rgba(255, 255, 255, 0.06);
|
|
1606
|
+
}
|
|
1607
|
+
|
|
1608
|
+
.log-line-num {
|
|
1609
|
+
color: var(--text-dim);
|
|
1610
|
+
min-width: 3ch;
|
|
1611
|
+
text-align: right;
|
|
1612
|
+
padding-right: 0.75rem;
|
|
1613
|
+
user-select: none;
|
|
1614
|
+
flex-shrink: 0;
|
|
1615
|
+
opacity: 0.5;
|
|
1616
|
+
font-size: 0.65rem;
|
|
1617
|
+
}
|
|
1618
|
+
|
|
1619
|
+
.log-line:hover .log-line-num {
|
|
1620
|
+
opacity: 0.8;
|
|
1621
|
+
}
|
|
1622
|
+
|
|
1623
|
+
.log-line-content {
|
|
1624
|
+
flex: 1;
|
|
1625
|
+
min-width: 0;
|
|
1626
|
+
overflow: hidden;
|
|
1627
|
+
text-overflow: ellipsis;
|
|
1628
|
+
}
|
|
1629
|
+
|
|
1630
|
+
/* Expanded line: word-wrap enabled */
|
|
1631
|
+
.log-line.expanded .log-line-content {
|
|
1632
|
+
white-space: pre-wrap;
|
|
1633
|
+
word-break: break-all;
|
|
1634
|
+
overflow: visible;
|
|
1635
|
+
text-overflow: unset;
|
|
1636
|
+
}
|
|
1637
|
+
|
|
1638
|
+
.log-line.expanded {
|
|
1639
|
+
background: rgba(99, 102, 241, 0.06);
|
|
1640
|
+
border-left: 2px solid var(--accent-primary);
|
|
1641
|
+
margin-left: -2px;
|
|
1642
|
+
}
|
|
1643
|
+
|
|
1644
|
+
/* Copy feedback animation */
|
|
1645
|
+
.log-line.copied::after {
|
|
1646
|
+
content: 'Copied!';
|
|
1647
|
+
position: absolute;
|
|
1648
|
+
right: 0.5rem;
|
|
1649
|
+
top: 50%;
|
|
1650
|
+
transform: translateY(-50%);
|
|
1651
|
+
font-size: 0.6rem;
|
|
1652
|
+
color: var(--success);
|
|
1653
|
+
background: var(--bg-secondary);
|
|
1654
|
+
padding: 2px 6px;
|
|
1655
|
+
border-radius: 4px;
|
|
1656
|
+
animation: fadeIn 0.2s ease;
|
|
1657
|
+
pointer-events: none;
|
|
1271
1658
|
}
|
|
1272
1659
|
|
|
1273
1660
|
/* ─── Scrollbar ─── */
|
|
@@ -1289,6 +1676,98 @@ tr[data-process-name]:hover .process-icon {
|
|
|
1289
1676
|
background: rgba(255, 255, 255, 0.12);
|
|
1290
1677
|
}
|
|
1291
1678
|
|
|
1679
|
+
/* ─── Log Viewer Toolbar ─── */
|
|
1680
|
+
.drawer-log-toolbar {
|
|
1681
|
+
display: flex;
|
|
1682
|
+
gap: 0.5rem;
|
|
1683
|
+
padding: 0.5rem 1rem;
|
|
1684
|
+
align-items: center;
|
|
1685
|
+
border-bottom: 1px solid var(--border-subtle);
|
|
1686
|
+
background: rgba(0, 0, 0, 0.08);
|
|
1687
|
+
flex-shrink: 0;
|
|
1688
|
+
}
|
|
1689
|
+
|
|
1690
|
+
.log-search {
|
|
1691
|
+
flex: 1;
|
|
1692
|
+
background: var(--bg-deeper);
|
|
1693
|
+
border: 1px solid var(--border-glass);
|
|
1694
|
+
border-radius: var(--radius-sm);
|
|
1695
|
+
padding: 0.35rem 0.6rem;
|
|
1696
|
+
color: var(--text-primary);
|
|
1697
|
+
font-size: 0.75rem;
|
|
1698
|
+
font-family: var(--font-mono);
|
|
1699
|
+
outline: none;
|
|
1700
|
+
transition: border-color 0.2s;
|
|
1701
|
+
}
|
|
1702
|
+
|
|
1703
|
+
.log-search:focus {
|
|
1704
|
+
border-color: var(--accent);
|
|
1705
|
+
}
|
|
1706
|
+
|
|
1707
|
+
.log-search::placeholder {
|
|
1708
|
+
color: var(--text-muted);
|
|
1709
|
+
}
|
|
1710
|
+
|
|
1711
|
+
.log-autoscroll {
|
|
1712
|
+
background: var(--bg-deeper);
|
|
1713
|
+
border: 1px solid var(--border-glass);
|
|
1714
|
+
border-radius: 9999px;
|
|
1715
|
+
color: var(--text-muted);
|
|
1716
|
+
height: 28px;
|
|
1717
|
+
padding: 0 0.625rem;
|
|
1718
|
+
display: flex;
|
|
1719
|
+
align-items: center;
|
|
1720
|
+
justify-content: center;
|
|
1721
|
+
gap: 0.35rem;
|
|
1722
|
+
cursor: pointer;
|
|
1723
|
+
font-size: 0.65rem;
|
|
1724
|
+
font-weight: 600;
|
|
1725
|
+
text-transform: uppercase;
|
|
1726
|
+
letter-spacing: 0.04em;
|
|
1727
|
+
transition: all 0.2s;
|
|
1728
|
+
white-space: nowrap;
|
|
1729
|
+
flex-shrink: 0;
|
|
1730
|
+
font-family: inherit;
|
|
1731
|
+
}
|
|
1732
|
+
|
|
1733
|
+
.log-autoscroll svg {
|
|
1734
|
+
width: 12px;
|
|
1735
|
+
height: 12px;
|
|
1736
|
+
stroke: currentColor;
|
|
1737
|
+
fill: none;
|
|
1738
|
+
stroke-width: 2;
|
|
1739
|
+
stroke-linecap: round;
|
|
1740
|
+
stroke-linejoin: round;
|
|
1741
|
+
flex-shrink: 0;
|
|
1742
|
+
}
|
|
1743
|
+
|
|
1744
|
+
.log-autoscroll.active {
|
|
1745
|
+
color: var(--success);
|
|
1746
|
+
border-color: var(--success-border);
|
|
1747
|
+
background: var(--success-bg);
|
|
1748
|
+
}
|
|
1749
|
+
|
|
1750
|
+
.log-autoscroll:hover {
|
|
1751
|
+
background: rgba(255, 255, 255, 0.06);
|
|
1752
|
+
color: var(--text-secondary);
|
|
1753
|
+
}
|
|
1754
|
+
|
|
1755
|
+
.log-autoscroll.active:hover {
|
|
1756
|
+
background: var(--success-bg);
|
|
1757
|
+
color: var(--success);
|
|
1758
|
+
}
|
|
1759
|
+
|
|
1760
|
+
/* Line count indicator */
|
|
1761
|
+
.log-line-count {
|
|
1762
|
+
font-size: 0.65rem;
|
|
1763
|
+
color: var(--text-dim);
|
|
1764
|
+
font-family: var(--font-mono);
|
|
1765
|
+
flex-shrink: 0;
|
|
1766
|
+
white-space: nowrap;
|
|
1767
|
+
}
|
|
1768
|
+
|
|
1769
|
+
|
|
1770
|
+
|
|
1292
1771
|
/* ─── Legacy logs panel (kept for backwards compat) ─── */
|
|
1293
1772
|
.logs-panel {
|
|
1294
1773
|
margin-top: 2rem;
|
|
@@ -1322,6 +1801,15 @@ tr[data-process-name]:hover .process-icon {
|
|
|
1322
1801
|
width: 100%;
|
|
1323
1802
|
max-width: 420px;
|
|
1324
1803
|
}
|
|
1804
|
+
|
|
1805
|
+
.command {
|
|
1806
|
+
max-width: 160px;
|
|
1807
|
+
}
|
|
1808
|
+
}
|
|
1809
|
+
|
|
1810
|
+
/* ─── Mobile Cards (hidden by default, shown on ≤768px) ─── */
|
|
1811
|
+
.mobile-cards {
|
|
1812
|
+
display: none;
|
|
1325
1813
|
}
|
|
1326
1814
|
|
|
1327
1815
|
@media (max-width: 768px) {
|
|
@@ -1336,7 +1824,7 @@ tr[data-process-name]:hover .process-icon {
|
|
|
1336
1824
|
}
|
|
1337
1825
|
|
|
1338
1826
|
.stats-grid {
|
|
1339
|
-
grid-template-columns: 1fr;
|
|
1827
|
+
grid-template-columns: repeat(2, 1fr);
|
|
1340
1828
|
}
|
|
1341
1829
|
|
|
1342
1830
|
.toolbar {
|
|
@@ -1352,16 +1840,98 @@ tr[data-process-name]:hover .process-icon {
|
|
|
1352
1840
|
max-width: 100%;
|
|
1353
1841
|
}
|
|
1354
1842
|
|
|
1843
|
+
/* Hide table, show cards */
|
|
1355
1844
|
.table-container {
|
|
1356
|
-
|
|
1845
|
+
display: none;
|
|
1357
1846
|
}
|
|
1358
1847
|
|
|
1359
|
-
|
|
1360
|
-
|
|
1848
|
+
.mobile-cards {
|
|
1849
|
+
display: flex;
|
|
1850
|
+
flex-direction: column;
|
|
1851
|
+
gap: 0.75rem;
|
|
1361
1852
|
}
|
|
1362
1853
|
|
|
1363
1854
|
.detail-drawer {
|
|
1364
1855
|
width: 100%;
|
|
1365
1856
|
max-width: 100%;
|
|
1366
1857
|
}
|
|
1858
|
+
|
|
1859
|
+
/* ─── Process Card ─── */
|
|
1860
|
+
.process-card {
|
|
1861
|
+
background: var(--bg-card);
|
|
1862
|
+
border: 1px solid var(--border-glass);
|
|
1863
|
+
border-radius: var(--radius-lg);
|
|
1864
|
+
padding: 1rem;
|
|
1865
|
+
cursor: pointer;
|
|
1866
|
+
transition: all 0.2s ease;
|
|
1867
|
+
}
|
|
1868
|
+
|
|
1869
|
+
.process-card:hover {
|
|
1870
|
+
border-color: var(--accent-primary);
|
|
1871
|
+
box-shadow: 0 0 20px rgba(168, 85, 247, 0.15);
|
|
1872
|
+
transform: translateY(-1px);
|
|
1873
|
+
}
|
|
1874
|
+
|
|
1875
|
+
.card-header {
|
|
1876
|
+
display: flex;
|
|
1877
|
+
align-items: center;
|
|
1878
|
+
justify-content: space-between;
|
|
1879
|
+
margin-bottom: 0.75rem;
|
|
1880
|
+
}
|
|
1881
|
+
|
|
1882
|
+
.card-header .process-name {
|
|
1883
|
+
font-size: 0.95rem;
|
|
1884
|
+
font-weight: 600;
|
|
1885
|
+
}
|
|
1886
|
+
|
|
1887
|
+
.card-details {
|
|
1888
|
+
display: grid;
|
|
1889
|
+
grid-template-columns: 1fr 1fr;
|
|
1890
|
+
gap: 0.4rem 1rem;
|
|
1891
|
+
margin-bottom: 0.6rem;
|
|
1892
|
+
}
|
|
1893
|
+
|
|
1894
|
+
.card-detail {
|
|
1895
|
+
display: flex;
|
|
1896
|
+
justify-content: space-between;
|
|
1897
|
+
font-size: 0.78rem;
|
|
1898
|
+
color: var(--text-secondary);
|
|
1899
|
+
}
|
|
1900
|
+
|
|
1901
|
+
.card-label {
|
|
1902
|
+
color: var(--text-muted);
|
|
1903
|
+
text-transform: uppercase;
|
|
1904
|
+
font-size: 0.65rem;
|
|
1905
|
+
letter-spacing: 0.05em;
|
|
1906
|
+
font-weight: 500;
|
|
1907
|
+
}
|
|
1908
|
+
|
|
1909
|
+
.card-command {
|
|
1910
|
+
font-family: var(--font-mono);
|
|
1911
|
+
font-size: 0.72rem;
|
|
1912
|
+
color: var(--text-muted);
|
|
1913
|
+
background: rgba(255, 255, 255, 0.03);
|
|
1914
|
+
border-radius: var(--radius-sm);
|
|
1915
|
+
padding: 0.35rem 0.5rem;
|
|
1916
|
+
margin-bottom: 0.75rem;
|
|
1917
|
+
overflow: hidden;
|
|
1918
|
+
text-overflow: ellipsis;
|
|
1919
|
+
white-space: nowrap;
|
|
1920
|
+
}
|
|
1921
|
+
|
|
1922
|
+
.card-actions {
|
|
1923
|
+
display: flex;
|
|
1924
|
+
gap: 0.5rem;
|
|
1925
|
+
}
|
|
1926
|
+
|
|
1927
|
+
.card-actions .action-btn {
|
|
1928
|
+
flex: 1;
|
|
1929
|
+
display: flex;
|
|
1930
|
+
align-items: center;
|
|
1931
|
+
justify-content: center;
|
|
1932
|
+
gap: 0.35rem;
|
|
1933
|
+
padding: 0.5rem;
|
|
1934
|
+
font-size: 0.75rem;
|
|
1935
|
+
border-radius: var(--radius-md);
|
|
1936
|
+
}
|
|
1367
1937
|
}
|