loadtoagent 1.3.6 → 1.3.7

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "loadtoagent",
3
- "version": "1.3.6",
3
+ "version": "1.3.7",
4
4
  "description": "A local desktop dashboard for Claude, Codex, Gemini, and Grok sessions.",
5
5
  "main": "main.js",
6
6
  "author": "wincube AX",
@@ -185,7 +185,22 @@ window.LoadToAgentAppFactories.createDashboard = function createDashboard(contex
185
185
  (!liveProjects.length && !liveProjectlessCount ? `<div class="workspace-empty">${window.LoadToAgentI18n.t("project.empty")}</div>` : "");
186
186
  const desktopList = $("#workspaceList");
187
187
  const mobileList = $("#mobileWorkspaceList");
188
- if (desktopList) desktopList.innerHTML = desktopHtml;
188
+ if (desktopList) {
189
+ desktopList.innerHTML = desktopHtml;
190
+ const updateProjectOverflow = () => {
191
+ const overflowing = desktopList.scrollWidth > desktopList.clientWidth + 2;
192
+ const scrolledEnd = desktopList.scrollLeft + desktopList.clientWidth >= desktopList.scrollWidth - 2;
193
+ desktopList.classList.toggle("is-overflowing", overflowing);
194
+ desktopList.classList.toggle("is-scrolled-end", overflowing && scrolledEnd);
195
+ };
196
+ if (desktopList.dataset.overflowBound !== "true") {
197
+ desktopList.dataset.overflowBound = "true";
198
+ desktopList.addEventListener("scroll", updateProjectOverflow, { passive: true });
199
+ desktopList._overflowObserver = new ResizeObserver(updateProjectOverflow);
200
+ desktopList._overflowObserver.observe(desktopList);
201
+ }
202
+ requestAnimationFrame(updateProjectOverflow);
203
+ }
189
204
  if (mobileList) mobileList.innerHTML = mobileHtml;
190
205
  const projectSelect = $("#controlRoomProjectSelect");
191
206
  if (projectSelect) {
@@ -527,15 +527,15 @@ window.LoadToAgentAppFactories.createGraphView = function createGraphView(contex
527
527
  ? t("control.project_live_attention_summary", { active: activeCount, attention: attentionCount })
528
528
  : t("control.project_live_summary", { active: activeCount });
529
529
  const disclosureKey = `control-project:${key}`;
530
- const presentation = index === 0 ? "is-primary" : index === 1 ? "is-preview" : "is-collapsed";
530
+ const presentation = index === 0 ? "is-primary" : "is-secondary";
531
531
  const projectFocusId = projectRoots[0]?.id || "";
532
- return `<details class="control-room-project-group ${presentation}" data-control-project="${esc(name)}" data-disclosure-key="${esc(disclosureKey)}" ${index < 2 ? "open" : ""}>
532
+ return `<details class="control-room-project-group ${presentation}" data-control-project="${esc(name)}" data-disclosure-key="${esc(disclosureKey)}" ${index === 0 ? "open" : ""}>
533
533
  <summary class="control-project-header" data-project-toggle="${esc(name)}">
534
534
  <span class="control-project-heading"><i aria-hidden="true">□</i><b>${esc(name)}</b><small>${esc(summary)}</small><em>${projectTotals.length}</em></span>
535
535
  <span class="control-project-handle" role="img" aria-label="프로젝트 그룹" title="프로젝트 그룹 · 세션은 최근 활동순으로 표시됩니다"></span>
536
536
  </summary>
537
537
  <button type="button" class="control-project-flow-link" data-graph-focus="${esc(projectFocusId)}"><span>${esc(t("control.open_full_flow"))} ↗</span></button>
538
- <div class="control-project-body" ${index === 1 ? 'inert aria-hidden="true"' : ""}>${projectRoots.map(root => controlRoomSession(root, model)).join("")}</div>
538
+ <div class="control-project-body">${projectRoots.map(root => controlRoomSession(root, model)).join("")}</div>
539
539
  </details>`;
540
540
  }).join("");
541
541
  return `<div class="control-room-overview" data-control-room-overview="true">
@@ -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,7 +340,7 @@
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
 
@@ -338,13 +364,13 @@
338
364
 
339
365
  .control-room-add-project {
340
366
  min-width: max-content;
341
- min-height: 30px !important;
367
+ min-height: 40px !important;
342
368
  display: inline-flex;
343
369
  flex: 0 0 auto;
344
370
  align-items: center;
345
371
  justify-content: center;
346
- gap: 5px;
347
- padding: 0 11px;
372
+ gap: 8px;
373
+ padding: 0 13px;
348
374
  border: 1px solid rgba(89,216,255,.72);
349
375
  border-radius: 8px;
350
376
  background: rgba(9,27,37,.72);
@@ -355,7 +381,7 @@
355
381
  }
356
382
 
357
383
  #controlRoomProjectToolbar #addWorkspaceBtn {
358
- min-height: 30px !important;
384
+ min-height: 40px !important;
359
385
  }
360
386
 
361
387
  .control-room-add-project:hover {
@@ -364,9 +390,9 @@
364
390
  }
365
391
 
366
392
  .control-room-list-toolbar {
367
- min-height: 34px;
368
- gap: 7px;
369
- margin-bottom: 8px;
393
+ min-height: 40px;
394
+ gap: 10px;
395
+ margin-bottom: var(--space-3,12px);
370
396
  }
371
397
 
372
398
  .control-room-toolbar-spacer {
@@ -381,8 +407,8 @@
381
407
  .control-room-select-field select {
382
408
  width: 136px;
383
409
  min-width: 136px;
384
- height: 34px;
385
- min-height: 34px !important;
410
+ height: 40px;
411
+ min-height: 40px !important;
386
412
  padding: 0 31px 0 12px;
387
413
  border: 1px solid rgba(104,130,151,.28);
388
414
  border-radius: 8px;
@@ -397,13 +423,13 @@
397
423
  }
398
424
 
399
425
  #controlRoomListToolbar select {
400
- height: 34px;
401
- min-height: 34px !important;
426
+ height: 40px;
427
+ min-height: 40px !important;
402
428
  }
403
429
 
404
430
  .control-room-search {
405
- width: 36px;
406
- height: 34px;
431
+ width: 42px;
432
+ height: 40px;
407
433
  position: relative;
408
434
  display: flex;
409
435
  flex: 0 0 auto;
@@ -440,10 +466,10 @@
440
466
  }
441
467
 
442
468
  .control-room-search button {
443
- width: 42px;
444
- height: 32px;
445
- min-width: 34px;
446
- min-height: 32px !important;
469
+ width: 40px;
470
+ height: 40px;
471
+ min-width: 40px;
472
+ min-height: 40px !important;
447
473
  position: absolute;
448
474
  right: 0;
449
475
  display: grid;
@@ -459,15 +485,15 @@
459
485
  }
460
486
 
461
487
  #controlRoomSearchBtn {
462
- min-width: 34px;
463
- min-height: 32px !important;
488
+ min-width: 40px;
489
+ min-height: 40px !important;
464
490
  }
465
491
 
466
492
  .control-room-pagination {
467
493
  display: flex;
468
494
  flex: 0 0 auto;
469
495
  align-items: center;
470
- gap: 6px;
496
+ gap: 10px;
471
497
  }
472
498
 
473
499
  .control-room-page-summary {
@@ -482,14 +508,14 @@
482
508
  .control-room-page-buttons {
483
509
  display: flex;
484
510
  flex: 0 0 auto;
485
- gap: 5px;
511
+ gap: 10px;
486
512
  }
487
513
 
488
514
  .control-room-page-buttons button {
489
515
  width: 40px;
490
- height: 34px;
491
- min-width: 38px;
492
- min-height: 34px !important;
516
+ height: 40px;
517
+ min-width: 40px;
518
+ min-height: 40px !important;
493
519
  display: grid;
494
520
  place-items: center;
495
521
  border: 1px solid rgba(104,130,151,.28);
@@ -520,7 +546,7 @@
520
546
  #controlRoomPagePrev,
521
547
  #controlRoomPageNext {
522
548
  min-width: 40px;
523
- min-height: 34px !important;
549
+ min-height: 40px !important;
524
550
  }
525
551
 
526
552
  .control-room-legend {
@@ -567,7 +593,7 @@
567
593
 
568
594
  .control-room-overview {
569
595
  display: grid;
570
- gap: 6px;
596
+ gap: var(--space-3,12px);
571
597
  }
572
598
 
573
599
  .control-room-project-group {
@@ -580,8 +606,8 @@
580
606
  box-shadow: inset 0 1px rgba(255,255,255,.018);
581
607
  }
582
608
 
583
- .control-project-header {
584
- min-height: 42px;
609
+ body details.control-room-project-group > summary.control-project-header {
610
+ min-height: 50px !important;
585
611
  display: flex;
586
612
  align-items: center;
587
613
  gap: 10px;
@@ -640,20 +666,20 @@
640
666
  }
641
667
 
642
668
  .control-project-heading small {
643
- color: #76879a;
669
+ color: #9aabba;
644
670
  white-space: nowrap;
645
- font-size: 11px;
671
+ font-size: 12px;
646
672
  }
647
673
 
648
674
  .control-project-heading em {
649
675
  min-width: 22px;
650
- height: 20px;
676
+ height: 22px;
651
677
  display: grid;
652
678
  place-items: center;
653
679
  border-radius: 999px;
654
680
  background: rgba(89,216,255,.12);
655
681
  color: #73deee;
656
- font-size: 11px;
682
+ font-size: 12px;
657
683
  font-style: normal;
658
684
  font-weight: 750;
659
685
  }
@@ -662,7 +688,7 @@
662
688
  width: 24px;
663
689
  height: 28px;
664
690
  position: absolute;
665
- top: 7px;
691
+ top: 11px;
666
692
  right: 133px;
667
693
  display: grid;
668
694
  place-items: center;
@@ -741,8 +767,8 @@
741
767
  }
742
768
 
743
769
  .control-project-body .control-room-session > header {
744
- min-height: 34px;
745
- padding: 1px 15px;
770
+ min-height: 42px;
771
+ padding: 5px 15px;
746
772
  }
747
773
 
748
774
  .control-project-body .control-room-session > header > .session-drag-handle,
@@ -751,58 +777,41 @@
751
777
  }
752
778
 
753
779
  .control-project-body .control-room-flow {
754
- padding: 3px 15px 6px 16px;
780
+ padding: 10px 15px 12px 16px;
755
781
  }
756
782
 
757
783
  .control-project-body .control-column-label {
758
- min-height: 14px;
759
- height: 14px;
760
- line-height: 14px;
784
+ min-height: 24px;
785
+ height: 24px;
786
+ line-height: 24px;
761
787
  }
762
788
 
763
789
  .control-project-body .control-room-main {
764
- gap: 8px;
765
- padding: 11px 13px;
790
+ gap: 10px;
791
+ padding: 14px;
766
792
  }
767
793
 
768
794
  .control-project-body .control-main-now {
769
- padding: 7px 9px;
770
- }
771
-
772
- .control-room-project-group.is-preview[open] .control-project-body {
773
- max-height: 94px;
774
- overflow: hidden;
775
- position: relative;
776
- }
777
-
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;
795
+ padding: 9px 10px;
787
796
  }
788
797
 
789
- .control-room-project-group.is-collapsed .control-project-header {
798
+ .control-room-project-group:not([open]) .control-project-header {
790
799
  min-height: 50px !important;
791
800
  }
792
801
 
793
- .control-room-project-group.is-collapsed {
794
- margin-top: 3px;
802
+ .control-room-project-group:not([open]) {
803
+ margin-top: 0;
795
804
  }
796
805
 
797
- .control-room-project-group.is-collapsed .control-project-handle {
806
+ .control-room-project-group:not([open]) .control-project-handle {
798
807
  display: none;
799
808
  }
800
809
 
801
- .control-room-project-group.is-collapsed .control-project-heading {
810
+ .control-room-project-group:not([open]) .control-project-heading {
802
811
  padding-left: 10px;
803
812
  }
804
813
 
805
- .control-room-project-group.is-collapsed .control-project-heading > i {
814
+ .control-room-project-group:not([open]) .control-project-heading > i {
806
815
  display: none;
807
816
  }
808
817
 
@@ -940,7 +949,7 @@
940
949
  flex: 0 0 auto;
941
950
  color: #9d8a68;
942
951
  white-space: nowrap;
943
- font-size: 11px;
952
+ font-size: 12px;
944
953
  }
945
954
 
946
955
  .control-room-session > header > button {
@@ -1220,7 +1229,7 @@
1220
1229
  .control-room-node-list {
1221
1230
  display: grid;
1222
1231
  grid-template-columns: repeat(2,minmax(0,1fr));
1223
- gap: 8px;
1232
+ gap: 10px;
1224
1233
  }
1225
1234
 
1226
1235
  .control-room-node {
@@ -1335,7 +1344,7 @@
1335
1344
 
1336
1345
  .completed-list {
1337
1346
  grid-template-columns: 1fr;
1338
- gap: 6px;
1347
+ gap: 10px;
1339
1348
  }
1340
1349
 
1341
1350
  .completed-list .control-room-node {
@@ -1991,9 +2000,9 @@
1991
2000
  }
1992
2001
 
1993
2002
  .control-room-project-toolbar {
1994
- gap: 7px;
1995
- margin-top: 3px;
1996
- padding: 4px;
2003
+ gap: 10px;
2004
+ margin-top: 4px;
2005
+ padding: 6px;
1997
2006
  }
1998
2007
 
1999
2008
  .control-room-project-toolbar .workspace-item,
@@ -2010,7 +2019,7 @@
2010
2019
  }
2011
2020
 
2012
2021
  .control-room-list-toolbar {
2013
- gap: 6px;
2022
+ gap: 10px;
2014
2023
  flex-wrap: nowrap;
2015
2024
  }
2016
2025
 
@@ -2064,7 +2073,7 @@
2064
2073
 
2065
2074
  .control-room-pagination {
2066
2075
  margin-left: auto;
2067
- gap: 5px;
2076
+ gap: 10px;
2068
2077
  }
2069
2078
 
2070
2079
  .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. */