loadtoagent 1.3.6 → 1.3.8

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.
@@ -252,10 +252,10 @@
252
252
  }
253
253
 
254
254
  .control-room-project-toolbar {
255
- min-height: 40px;
256
- gap: 10px;
257
- margin: -4px 0 6px;
258
- padding: 4px;
255
+ min-height: 52px;
256
+ gap: var(--space-3,12px);
257
+ margin: 0 0 var(--space-3,12px);
258
+ padding: 6px;
259
259
  border: 1px solid rgba(89,216,255,.14);
260
260
  border-radius: 11px;
261
261
  background: rgba(7,13,20,.58);
@@ -266,7 +266,7 @@
266
266
  display: flex;
267
267
  flex: 1 1 auto;
268
268
  align-items: center;
269
- gap: 6px;
269
+ gap: 10px;
270
270
  max-height: none;
271
271
  padding: 0;
272
272
  overflow-x: auto;
@@ -278,15 +278,41 @@
278
278
  display: none;
279
279
  }
280
280
 
281
+ .control-room-project-list.is-overflowing {
282
+ padding-bottom: 5px;
283
+ scrollbar-color: rgba(89,216,255,.58) rgba(89,216,255,.08);
284
+ scrollbar-width: thin;
285
+ mask-image: linear-gradient(to right,#000 0,#000 calc(100% - 28px),transparent 100%);
286
+ }
287
+
288
+ .control-room-project-list.is-overflowing.is-scrolled-end {
289
+ mask-image: none;
290
+ }
291
+
292
+ .control-room-project-list.is-overflowing::-webkit-scrollbar {
293
+ display: block;
294
+ height: 5px;
295
+ }
296
+
297
+ .control-room-project-list.is-overflowing::-webkit-scrollbar-track {
298
+ border-radius: 999px;
299
+ background: rgba(89,216,255,.08);
300
+ }
301
+
302
+ .control-room-project-list.is-overflowing::-webkit-scrollbar-thumb {
303
+ border-radius: 999px;
304
+ background: rgba(89,216,255,.58);
305
+ }
306
+
281
307
  .control-room-project-toolbar .workspace-item {
282
308
  width: auto;
283
309
  min-width: max-content;
284
- min-height: 30px !important;
310
+ min-height: 40px !important;
285
311
  display: inline-flex;
286
312
  flex: 0 0 auto;
287
313
  align-items: center;
288
- gap: 7px;
289
- padding: 0 10px;
314
+ gap: 8px;
315
+ padding: 0 12px;
290
316
  border: 1px solid rgba(106,132,154,.25);
291
317
  border-radius: 8px;
292
318
  background: rgba(13,21,30,.88);
@@ -306,7 +332,7 @@
306
332
 
307
333
  .control-room-project-toolbar .workspace-item small {
308
334
  min-width: 20px;
309
- height: 20px;
335
+ height: 22px;
310
336
  display: inline-grid;
311
337
  place-items: center;
312
338
  margin: 0;
@@ -314,10 +340,18 @@
314
340
  border-radius: 999px;
315
341
  background: rgba(115,139,159,.15);
316
342
  color: #bcc8d2;
317
- font-size: 11px;
343
+ font-size: 12px;
318
344
  font-variant-numeric: tabular-nums;
319
345
  }
320
346
 
347
+ .control-room-project-toolbar .workspace-live-state b {
348
+ display: inline;
349
+ }
350
+
351
+ .control-room-project-toolbar .workspace-item.has-live-sessions {
352
+ border-color: rgba(76,227,154,.28);
353
+ }
354
+
321
355
  .control-room-project-toolbar .workspace-item:hover {
322
356
  border-color: rgba(89,216,255,.38);
323
357
  background: rgba(89,216,255,.065);
@@ -338,13 +372,13 @@
338
372
 
339
373
  .control-room-add-project {
340
374
  min-width: max-content;
341
- min-height: 30px !important;
375
+ min-height: 40px !important;
342
376
  display: inline-flex;
343
377
  flex: 0 0 auto;
344
378
  align-items: center;
345
379
  justify-content: center;
346
- gap: 5px;
347
- padding: 0 11px;
380
+ gap: 8px;
381
+ padding: 0 13px;
348
382
  border: 1px solid rgba(89,216,255,.72);
349
383
  border-radius: 8px;
350
384
  background: rgba(9,27,37,.72);
@@ -355,7 +389,7 @@
355
389
  }
356
390
 
357
391
  #controlRoomProjectToolbar #addWorkspaceBtn {
358
- min-height: 30px !important;
392
+ min-height: 40px !important;
359
393
  }
360
394
 
361
395
  .control-room-add-project:hover {
@@ -364,9 +398,9 @@
364
398
  }
365
399
 
366
400
  .control-room-list-toolbar {
367
- min-height: 34px;
368
- gap: 7px;
369
- margin-bottom: 8px;
401
+ min-height: 40px;
402
+ gap: 10px;
403
+ margin-bottom: var(--space-3,12px);
370
404
  }
371
405
 
372
406
  .control-room-toolbar-spacer {
@@ -381,8 +415,8 @@
381
415
  .control-room-select-field select {
382
416
  width: 136px;
383
417
  min-width: 136px;
384
- height: 34px;
385
- min-height: 34px !important;
418
+ height: 40px;
419
+ min-height: 40px !important;
386
420
  padding: 0 31px 0 12px;
387
421
  border: 1px solid rgba(104,130,151,.28);
388
422
  border-radius: 8px;
@@ -397,13 +431,13 @@
397
431
  }
398
432
 
399
433
  #controlRoomListToolbar select {
400
- height: 34px;
401
- min-height: 34px !important;
434
+ height: 40px;
435
+ min-height: 40px !important;
402
436
  }
403
437
 
404
438
  .control-room-search {
405
- width: 36px;
406
- height: 34px;
439
+ width: 42px;
440
+ height: 40px;
407
441
  position: relative;
408
442
  display: flex;
409
443
  flex: 0 0 auto;
@@ -440,10 +474,10 @@
440
474
  }
441
475
 
442
476
  .control-room-search button {
443
- width: 42px;
444
- height: 32px;
445
- min-width: 34px;
446
- min-height: 32px !important;
477
+ width: 40px;
478
+ height: 40px;
479
+ min-width: 40px;
480
+ min-height: 40px !important;
447
481
  position: absolute;
448
482
  right: 0;
449
483
  display: grid;
@@ -459,68 +493,44 @@
459
493
  }
460
494
 
461
495
  #controlRoomSearchBtn {
462
- min-width: 34px;
463
- min-height: 32px !important;
496
+ min-width: 40px;
497
+ min-height: 40px !important;
464
498
  }
465
499
 
466
- .control-room-pagination {
500
+ .control-room-disclosure-actions {
467
501
  display: flex;
468
502
  flex: 0 0 auto;
469
503
  align-items: center;
470
- gap: 6px;
504
+ gap: 10px;
471
505
  }
472
506
 
473
- .control-room-page-summary {
507
+ .control-room-disclosure-actions button {
508
+ height: 40px;
474
509
  min-width: 76px;
475
- color: #c3d0d8;
476
- text-align: center;
477
- white-space: nowrap;
478
- font-size: 12px;
479
- font-variant-numeric: tabular-nums;
480
- }
481
-
482
- .control-room-page-buttons {
483
- display: flex;
484
- flex: 0 0 auto;
485
- gap: 5px;
486
- }
487
-
488
- .control-room-page-buttons button {
489
- width: 40px;
490
- height: 34px;
491
- min-width: 38px;
492
- min-height: 34px !important;
493
- display: grid;
494
- place-items: center;
510
+ min-height: 40px !important;
511
+ padding: 0 12px;
495
512
  border: 1px solid rgba(104,130,151,.28);
513
+ border-radius: 8px;
496
514
  background: rgba(11,18,27,.88);
497
515
  color: #a8b7c4;
516
+ font-size: 12px;
498
517
  cursor: pointer;
499
518
  }
500
519
 
501
- .control-room-page-buttons button:first-child {
502
- border-radius: 8px;
503
- }
504
-
505
- .control-room-page-buttons button:last-child {
506
- margin-left: 0;
507
- border-radius: 8px;
508
- }
509
-
510
- .control-room-page-buttons button:hover:not(:disabled) {
520
+ .control-room-disclosure-actions button:hover:not(:disabled) {
511
521
  border-color: rgba(89,216,255,.45);
512
522
  color: #80e6f4;
513
523
  }
514
524
 
515
- .control-room-page-buttons button:disabled {
525
+ .control-room-disclosure-actions button:disabled {
516
526
  opacity: .36;
517
527
  cursor: default;
518
528
  }
519
529
 
520
- #controlRoomPagePrev,
521
- #controlRoomPageNext {
522
- min-width: 40px;
523
- min-height: 34px !important;
530
+ #controlRoomExpandAll,
531
+ #controlRoomCollapseAll {
532
+ min-width: 76px;
533
+ min-height: 40px !important;
524
534
  }
525
535
 
526
536
  .control-room-legend {
@@ -567,7 +577,7 @@
567
577
 
568
578
  .control-room-overview {
569
579
  display: grid;
570
- gap: 6px;
580
+ gap: var(--space-3,12px);
571
581
  }
572
582
 
573
583
  .control-room-project-group {
@@ -580,8 +590,8 @@
580
590
  box-shadow: inset 0 1px rgba(255,255,255,.018);
581
591
  }
582
592
 
583
- .control-project-header {
584
- min-height: 42px;
593
+ body details.control-room-project-group > summary.control-project-header {
594
+ min-height: 50px !important;
585
595
  display: flex;
586
596
  align-items: center;
587
597
  gap: 10px;
@@ -640,20 +650,20 @@
640
650
  }
641
651
 
642
652
  .control-project-heading small {
643
- color: #76879a;
653
+ color: #9aabba;
644
654
  white-space: nowrap;
645
- font-size: 11px;
655
+ font-size: 12px;
646
656
  }
647
657
 
648
658
  .control-project-heading em {
649
659
  min-width: 22px;
650
- height: 20px;
660
+ height: 22px;
651
661
  display: grid;
652
662
  place-items: center;
653
663
  border-radius: 999px;
654
664
  background: rgba(89,216,255,.12);
655
665
  color: #73deee;
656
- font-size: 11px;
666
+ font-size: 12px;
657
667
  font-style: normal;
658
668
  font-weight: 750;
659
669
  }
@@ -662,11 +672,12 @@
662
672
  width: 24px;
663
673
  height: 28px;
664
674
  position: absolute;
665
- top: 7px;
675
+ top: 11px;
666
676
  right: 133px;
667
677
  display: grid;
668
678
  place-items: center;
669
679
  color: #718597;
680
+ cursor: grab;
670
681
  }
671
682
 
672
683
  .control-project-handle::before {
@@ -741,8 +752,8 @@
741
752
  }
742
753
 
743
754
  .control-project-body .control-room-session > header {
744
- min-height: 34px;
745
- padding: 1px 15px;
755
+ min-height: 42px;
756
+ padding: 5px 15px;
746
757
  }
747
758
 
748
759
  .control-project-body .control-room-session > header > .session-drag-handle,
@@ -751,59 +762,68 @@
751
762
  }
752
763
 
753
764
  .control-project-body .control-room-flow {
754
- padding: 3px 15px 6px 16px;
765
+ padding: 10px 15px 12px 16px;
755
766
  }
756
767
 
757
768
  .control-project-body .control-column-label {
758
- min-height: 14px;
759
- height: 14px;
760
- line-height: 14px;
769
+ min-height: 24px;
770
+ height: 24px;
771
+ line-height: 24px;
761
772
  }
762
773
 
763
774
  .control-project-body .control-room-main {
764
- gap: 8px;
765
- padding: 11px 13px;
775
+ gap: 10px;
776
+ padding: 14px;
766
777
  }
767
778
 
768
779
  .control-project-body .control-main-now {
769
- padding: 7px 9px;
780
+ padding: 9px 10px;
770
781
  }
771
782
 
772
- .control-room-project-group.is-preview[open] .control-project-body {
773
- max-height: 94px;
774
- overflow: hidden;
775
- position: relative;
783
+ .control-room-project-group:not([open]) .control-project-header {
784
+ min-height: 50px !important;
776
785
  }
777
786
 
778
- .control-room-project-group.is-preview[open] .control-project-body::after {
779
- position: absolute;
780
- right: 0;
781
- bottom: 0;
782
- left: 0;
783
- height: 22px;
784
- background: linear-gradient(transparent,rgba(7,12,18,.94));
785
- content: "";
786
- pointer-events: none;
787
+ .control-room-project-group:not([open]) {
788
+ margin-top: 0;
787
789
  }
788
790
 
789
- .control-room-project-group.is-collapsed .control-project-header {
790
- min-height: 50px !important;
791
+ .control-room-project-group:not([open]) .control-project-heading {
792
+ padding-left: 10px;
791
793
  }
792
794
 
793
- .control-room-project-group.is-collapsed {
794
- margin-top: 3px;
795
+ .control-room-project-group:not([open]) .control-project-heading > i {
796
+ display: none;
795
797
  }
796
798
 
797
- .control-room-project-group.is-collapsed .control-project-handle {
798
- display: none;
799
+ .control-room-project-group.project-sort-dragging {
800
+ opacity: .48;
799
801
  }
800
802
 
801
- .control-room-project-group.is-collapsed .control-project-heading {
802
- padding-left: 10px;
803
+ .control-room-project-group[data-project-drop-edge]::after {
804
+ position: absolute;
805
+ z-index: 9;
806
+ right: 12px;
807
+ left: 12px;
808
+ height: 3px;
809
+ border-radius: 999px;
810
+ background: #64e2b5;
811
+ box-shadow: 0 0 0 3px rgba(100,226,181,.13),0 0 16px rgba(100,226,181,.55);
812
+ content: "";
813
+ pointer-events: none;
803
814
  }
804
815
 
805
- .control-room-project-group.is-collapsed .control-project-heading > i {
806
- display: none;
816
+ .control-room-project-group[data-project-drop-edge="top"]::after {
817
+ top: 3px;
818
+ }
819
+
820
+ .control-room-project-group[data-project-drop-edge="bottom"]::after {
821
+ bottom: 3px;
822
+ }
823
+
824
+ .control-project-header[draggable="true"]:active,
825
+ .control-room-project-group.project-sort-dragging .control-project-header {
826
+ cursor: grabbing;
807
827
  }
808
828
 
809
829
  .control-room-session {
@@ -940,7 +960,7 @@
940
960
  flex: 0 0 auto;
941
961
  color: #9d8a68;
942
962
  white-space: nowrap;
943
- font-size: 11px;
963
+ font-size: 12px;
944
964
  }
945
965
 
946
966
  .control-room-session > header > button {
@@ -1220,7 +1240,7 @@
1220
1240
  .control-room-node-list {
1221
1241
  display: grid;
1222
1242
  grid-template-columns: repeat(2,minmax(0,1fr));
1223
- gap: 8px;
1243
+ gap: 10px;
1224
1244
  }
1225
1245
 
1226
1246
  .control-room-node {
@@ -1335,7 +1355,7 @@
1335
1355
 
1336
1356
  .completed-list {
1337
1357
  grid-template-columns: 1fr;
1338
- gap: 6px;
1358
+ gap: 10px;
1339
1359
  }
1340
1360
 
1341
1361
  .completed-list .control-room-node {
@@ -1991,9 +2011,9 @@
1991
2011
  }
1992
2012
 
1993
2013
  .control-room-project-toolbar {
1994
- gap: 7px;
1995
- margin-top: 3px;
1996
- padding: 4px;
2014
+ gap: 10px;
2015
+ margin-top: 4px;
2016
+ padding: 6px;
1997
2017
  }
1998
2018
 
1999
2019
  .control-room-project-toolbar .workspace-item,
@@ -2010,8 +2030,8 @@
2010
2030
  }
2011
2031
 
2012
2032
  .control-room-list-toolbar {
2013
- gap: 6px;
2014
- flex-wrap: nowrap;
2033
+ gap: 10px;
2034
+ flex-wrap: wrap;
2015
2035
  }
2016
2036
 
2017
2037
  .control-room-toolbar-spacer,
@@ -2033,13 +2053,13 @@
2033
2053
 
2034
2054
  #controlRoomListToolbar select,
2035
2055
  #controlRoomSearchBtn,
2036
- #controlRoomPagePrev,
2037
- #controlRoomPageNext {
2056
+ #controlRoomExpandAll,
2057
+ #controlRoomCollapseAll {
2038
2058
  min-height: 44px !important;
2039
2059
  }
2040
2060
 
2041
2061
  .control-room-search,
2042
- .control-room-page-buttons button {
2062
+ .control-room-disclosure-actions button {
2043
2063
  height: 44px;
2044
2064
  min-height: 44px !important;
2045
2065
  }
@@ -2053,6 +2073,16 @@
2053
2073
  flex: 1 1 180px;
2054
2074
  }
2055
2075
 
2076
+ .control-room-disclosure-actions {
2077
+ display: grid;
2078
+ flex: 1 1 100%;
2079
+ grid-template-columns: repeat(2,minmax(0,1fr));
2080
+ }
2081
+
2082
+ .control-room-disclosure-actions button {
2083
+ width: 100%;
2084
+ }
2085
+
2056
2086
  .control-room-search button {
2057
2087
  width: 40px;
2058
2088
  height: 38px;
@@ -2064,7 +2094,7 @@
2064
2094
 
2065
2095
  .control-room-pagination {
2066
2096
  margin-left: auto;
2067
- gap: 5px;
2097
+ gap: 10px;
2068
2098
  }
2069
2099
 
2070
2100
  .control-room-page-summary {
@@ -16,6 +16,13 @@
16
16
  --panel-2: #121d28;
17
17
  --panel-3: #172532;
18
18
  --focus: #99ebff;
19
+ --space-1: 4px;
20
+ --space-2: 8px;
21
+ --space-3: 12px;
22
+ --space-4: 16px;
23
+ --space-5: 24px;
24
+ --control-gap: 12px;
25
+ --control-height: 44px;
19
26
  }
20
27
 
21
28
  html,
@@ -118,6 +125,10 @@ body[data-current-view="all"] #sessionSection { order: 8; }
118
125
  min-height: 48px;
119
126
  }
120
127
 
128
+ .top-actions {
129
+ gap: var(--space-4);
130
+ }
131
+
121
132
  .sync-state.connection-error > span {
122
133
  background: var(--red, #ff7373);
123
134
  box-shadow: 0 0 9px rgba(255, 115, 115, .55);
@@ -879,7 +890,7 @@ body :is(
879
890
 
880
891
  body button:not(.icon-button) {
881
892
  min-width: 44px;
882
- min-height: 44px !important;
893
+ min-height: var(--control-height) !important;
883
894
  font-size: 12px !important;
884
895
  line-height: 1.35;
885
896
  }
@@ -916,7 +927,7 @@ body :is(
916
927
  .detail-meta-actions,
917
928
  .mobile-bottom-nav
918
929
  ) {
919
- gap: 8px !important;
930
+ gap: var(--control-gap) !important;
920
931
  }
921
932
 
922
933
  /* Keep adjacent controls visually and physically distinct at every breakpoint. */
@@ -930,18 +941,30 @@ body :is(
930
941
  .run-prompt-examples,
931
942
  .path-field
932
943
  ) {
933
- gap: 8px !important;
944
+ gap: var(--control-gap) !important;
934
945
  }
935
946
 
936
947
  .sidebar .section-title {
937
948
  height: auto;
938
949
  min-height: 44px;
939
- margin-bottom: 8px;
950
+ margin-bottom: var(--space-3);
940
951
  padding-block: 2px;
941
952
  }
942
953
 
943
954
  .sidebar .workspace-list {
944
- gap: 8px !important;
955
+ gap: 10px !important;
956
+ }
957
+
958
+ .session-tools,
959
+ .modal-actions,
960
+ .run-modal-actions,
961
+ .app-error-actions {
962
+ gap: var(--control-gap) !important;
963
+ }
964
+
965
+ .modal-actions,
966
+ .run-modal-actions {
967
+ margin-top: var(--space-5);
945
968
  }
946
969
 
947
970
  .run-modal.terminal-modal :is(.field-label, label, small),
@@ -1017,7 +1040,7 @@ body .primary-button:disabled {
1017
1040
  }
1018
1041
 
1019
1042
  .mobile-bottom-nav {
1020
- gap: 8px !important;
1043
+ gap: 10px !important;
1021
1044
  }
1022
1045
  }
1023
1046
 
@@ -7,13 +7,25 @@
7
7
 
8
8
  /* Compact screens ≤ 1280px: collapse content columns and simplify the side rail. */
9
9
  @media (max-width:1280px) {
10
+ body[data-current-view="all"] .topbar {
11
+ display: block;
12
+ }
13
+
14
+ body[data-current-view="all"] .top-actions {
15
+ width: 100%;
16
+ flex-wrap: wrap;
17
+ justify-content: flex-end;
18
+ margin-top: 16px;
19
+ }
20
+
21
+ body[data-current-view="all"] .top-actions > * {
22
+ flex: 0 0 auto;
23
+ }
24
+
10
25
  .session-grid {
11
26
  grid-template-columns: 1fr;
12
27
  }
13
- }
14
28
 
15
- /* Compact screens ≤ 1100px: collapse content columns and simplify the side rail. */
16
- @media (max-width:1100px) {
17
29
  .sessions-heading {
18
30
  align-items: flex-start;
19
31
  flex-direction: column;
@@ -34,11 +46,6 @@
34
46
  max-width: 100%;
35
47
  overflow-x: auto;
36
48
  }
37
-
38
- .top-actions {
39
- flex-wrap: wrap;
40
- justify-content: flex-end;
41
- }
42
49
  }
43
50
 
44
51
  /* Compact screens ≤ 980px: keep project filtering readable while reducing the side rail. */
@@ -132,6 +132,19 @@ window.LoadToAgentTerminalAgentActions = function createModule(context) {
132
132
  if (!support.supported) throw new Error(support.reason);
133
133
  const cwd = String(agentSession.cwd || preferredWorkspace() || '').trim();
134
134
  if (!cwd) throw new Error(t('terminal.agent.cwd_missing'));
135
+ const environment = agentSession.environment || {};
136
+ const tmuxPresence = (agentSession.runtimePresence || []).find(item => item.kind === 'tmux') || {};
137
+ const tmuxPresenceId = String(tmuxPresence.id || '');
138
+ const distroFromPresenceId = tmuxPresenceId.startsWith('tmux:')
139
+ ? tmuxPresenceId.slice(5, tmuxPresenceId.lastIndexOf(':'))
140
+ : '';
141
+ const wslCwd = state.platform.id === 'win32'
142
+ && (environment.kind === 'wsl' || /^\/(?:mnt|home|root|workspace)(?:\/|$)/.test(cwd));
143
+ const distro = wslCwd
144
+ ? String(environment.distro || tmuxPresence.distro || distroFromPresenceId
145
+ || (state.wslDistros.length === 1 ? state.wslDistros[0] : '')).trim()
146
+ : '';
147
+ if (wslCwd && !distro) throw new Error(t('terminal.agent.wsl_distro_missing'));
135
148
  const prompt = String(draft || '').trim();
136
149
  const title = t('terminal.agent.resume_title', {
137
150
  provider: providerLabel(agentSession.provider),
@@ -142,6 +155,7 @@ window.LoadToAgentTerminalAgentActions = function createModule(context) {
142
155
  provider: support.provider,
143
156
  args: resumeLaunchArgs(support, sendDraft ? prompt : '', { background: options.focus === false }),
144
157
  cwd,
158
+ distro,
145
159
  bridgeId: agentSession.id,
146
160
  title,
147
161
  transient: options.focus === false,